From 07e27045f6aebea27f504a79955a7b871a299b6f Mon Sep 17 00:00:00 2001
From: Lis Pardi <lis@lindenlab.com>
Date: Tue, 27 Oct 2009 18:47:27 -0400
Subject: [PATCH 001/306] ext-1925 dig Push to talk out of 1.23 and reinstate
 in viewer 2

---
 .../xui/en/panel_preferences_advanced.xml     | 105 ++++++++++++------
 1 file changed, 69 insertions(+), 36 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index f42bab14de1..258e63ae764 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -20,8 +20,9 @@
     </panel.string>
     <check_box
      control_name="UseChatBubbles"
+     follows="left|top"
      height="16"
-     label="Bubble Chat"
+     label="Bubble chat"
      layout="topleft"
      left="30"
      top="10"
@@ -30,6 +31,7 @@
 
     <slider
      control_name="ChatBubbleOpacity"
+     follows="left|top"
      height="16"
      increment="0.05"
      initial_value="1"
@@ -40,40 +42,24 @@
      label_width="50"
      name="bubble_chat_opacity"
      width="200" />
-
-   <!-- <check_box
-     control_name="UIAutoScale"
-     height="16"
-     label="Resolution independent scale"
-     layout="topleft"
-     left="30"
-     name="ui_auto_scale"
-     top_pad="10"
-     width="256" />-->
-    <!--
-    <combo_box
-     height="18"
-     layout="topleft"
-     left_pad="5"
-     name="fullscreen combo"
-     top_delta="-1"
-     width="150" /-->
     <text
+     follows="left|top"
      type="string"
      length="1"
      height="25"
      layout="topleft"
      left="30"
-     top_pad="20"
+     top_pad="5"
      name="AspectRatioLabel1"
      tool_tip="width / height"
      label_width="50"
      width="120">
-        Aspect Ratio
+        Aspect ratio
     </text>
     <combo_box
      allow_text_entry="true"
      height="20"
+     follows="left|top"
      layout="topleft"
      left_pad="0"
      max_chars="100"
@@ -104,6 +90,7 @@
     </combo_box>
     <check_box
      control_name="FullScreenAutoDetectAspectRatio"
+     follows="left|top"
      height="25"
      label="Auto-detect"
      layout="topleft"
@@ -113,14 +100,14 @@
         <check_box.commit_callback
          function="Pref.AutoDetectAspect" />
     </check_box>
-
      <text
+     follows="left|top"
      type="string"
      length="1"
      height="10"
      left="30"
      name="heading1"
-     top_pad="10"
+     top_pad="5"
      width="270">
 Camera:
 	</text>
@@ -128,7 +115,7 @@ Camera:
      can_edit_text="true"
 	 control_name="CameraAngle"
      decimal_digits="2"
-     top_pad="10"
+     top_pad="5"
      follows="left|top"
      height="16"
      increment="0.025"
@@ -159,56 +146,62 @@ Camera:
      name="camera_offset_scale"
      show_text="false"
      width="240"
-     top_pad="10"/>
+     top_pad="5"/>
      <text
+     follows="left|top"
      type="string"
      length="1"
      height="10"
      left="30"
      name="heading2"
-     width="270">
+     width="270"
+     top_pad="5">
 Automatic positioning for:
 	</text>
         <check_box
      control_name="EditCameraMovement"
      height="20"
+     follows="left|top"
      label="Build/Edit"
      layout="topleft"
      left_delta="50"
      name="edit_camera_movement"
      tool_tip="Use automatic camera positioning when entering and exiting edit mode"
      width="280"
-     top_pad="10" />
+     top_pad="5" />
     <check_box
      control_name="AppearanceCameraMovement"
+     follows="left|top"
      height="16"
      label="Appearance"
      layout="topleft"
      name="appearance_camera_movement"
      tool_tip="Use automatic camera positioning while in edit mode"
      width="242" />
-
      <text
+     follows="left|top"
      type="string"
      length="1"
      height="10"
      left="30"
      name="heading3"
-     top_pad="10"
+     top_pad="5"
      width="270">
 Avatars:
 	</text>
     <check_box
      control_name="FirstPersonAvatarVisible"
+     follows="left|top"
      height="20"
      label="Show me in Mouselook"
      layout="topleft"
      left_delta="50"
      name="first_person_avatar_visible"
      width="256"
-     top_pad="10"/>
+     top_pad="0"/>
     <check_box
      control_name="ArrowKeysMoveAvatar"
+     follows="left|top"
      height="20"
      label="Arrow keys always move me"
      layout="topleft"
@@ -218,6 +211,7 @@ Avatars:
      top_pad="0"/>
     <check_box
      control_name="AllowTapTapHoldRun"
+     follows="left|top"
      height="20"
      label="Tap-tap-hold to run"
      layout="topleft"
@@ -227,6 +221,7 @@ Avatars:
      top_pad="0"/>
     <check_box
      control_name="LipSyncEnabled"
+     follows="left|top"
      height="20"
      label="Move avatar lips when speaking"
      layout="topleft"
@@ -236,16 +231,18 @@ Avatars:
      top_pad="0" />
     <check_box
      control_name="ShowScriptErrors"
+     follows="left|top"
      height="20"
      label="Show script errors"
      layout="topleft"
      left="30"
      name="show_script_errors"
      width="256"
-     top_pad="10"/>
+     top_pad="5"/>
     <radio_group
 	 enabled_control="ShowScriptErrors"
 	 control_name="ShowScriptErrorsLocation"
+     follows="top|left"
      draw_border="false"
      height="40"
      layout="topleft"
@@ -259,17 +256,53 @@ Avatars:
          layout="topleft"
          left="3"
          name="0"
-         top="3"
+         top="0"
          width="315" />
         <radio_item
          height="16"
          label="In window"
          layout="topleft"
-         left_delta="0"
+         left_delta="175"
          name="1"
-         top_delta="16"
+         top_delta="0"
          width="315" />
     </radio_group>
-
-
+     <check_box
+     follows="top|left"
+     height="20"
+     label="Use Push-to-talk in toggle mode"
+     layout="topleft"
+     left="30"
+     name="push_to_talk_toggle_check"
+     width="237"
+     top_pad="-25"
+     tool_tip="When in toggle mode, press and release the push-to-talk trigger to switch your microphone on and off. When not in toggle mode, the microphone is active only when the trigger is held down."/>
+    <line_editor 
+     follows="top|left"
+     height="19"
+     left_delta="50"
+     max_length="254"
+     name="modifier_combo"
+     label="Push-to-talk trigger"
+     top_pad="0"
+     width="280" />
+    <button
+	follows="top|left"
+	height="20"
+	label="Set Key"
+	left_delta="0"
+        name="set_voice_hotkey_button"
+	width="115"
+	top_pad="5" />
+    <button
+        bottom_delta="0"
+	follows="left"
+	font="SansSerif"
+	halign="center"
+	height="20"
+	label="Middle Mouse Button"
+	left_delta="120"
+	mouse_opaque="true"
+	name="set_voice_middlemouse_button"
+	width="160" />
 </panel>
-- 
GitLab


From cc1c8bb9bc2f210d029aa9e056e520ababe2f00e Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Thu, 29 Oct 2009 11:19:45 -0400
Subject: [PATCH 002/306] EXT-1804: Operations on the current look do not
 enforce one wearable per type DEV-39346: OUTFITS (Operations) : Restrict one
 shape per look, and some # of multiwearables per look DEV-38436: OUTFITS :
 Guarantee every outfit has fully populated links to (one each of) all body
 parts.

Consolidated all paths for replacing or appending to COF, with common enforcement mechanism for counts of body parts, clothing, etc.
Several functions are no longer needed after these changes, will clean up in a later pass.
---
 indra/newview/llappearancemgr.cpp | 200 ++++++++++++++++++++++++++----
 indra/newview/llappearancemgr.h   |  15 ++-
 2 files changed, 193 insertions(+), 22 deletions(-)

diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 4e022aeb299..8e1f7775d2c 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -296,15 +296,28 @@ struct LLWearableHoldingPattern
 	bool append;
 };
 
+/* static */ void removeDuplicateItems(LLInventoryModel::item_array_t& items)
+{
+	LLInventoryModel::item_array_t new_items;
+	std::set<LLUUID> items_seen;
+	for (S32 i=0; i<items.count(); i++)
+	{
+		LLViewerInventoryItem *item = items.get(i);
+		LLUUID item_id = item->getLinkedUUID();
+		if (items_seen.find(item_id)!=items_seen.end())
+			continue;
+		items_seen.insert(item_id);
+		new_items.push_back(item);
+	}
+	items = new_items;
+}
 
 void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventoryModel::item_array_t& src)
 {
 	LLInventoryModel::item_array_t new_dst;
 	std::set<LLUUID> mark_inventory;
-	std::set<LLUUID> mark_asset;
 
 	S32 inventory_dups = 0;
-	S32 asset_dups = 0;
 	
 	for (LLInventoryModel::item_array_t::const_iterator src_pos = src.begin();
 		  src_pos != src.end();
@@ -312,8 +325,6 @@ void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventory
 	{
 		LLUUID src_item_id = (*src_pos)->getLinkedUUID();
 		mark_inventory.insert(src_item_id);
-		LLUUID src_asset_id = (*src_pos)->getAssetUUID();
-		mark_asset.insert(src_asset_id);
 	}
 
 	for (LLInventoryModel::item_array_t::const_iterator dst_pos = dst.begin();
@@ -323,33 +334,22 @@ void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventory
 		LLUUID dst_item_id = (*dst_pos)->getLinkedUUID();
 
 		if (mark_inventory.find(dst_item_id) == mark_inventory.end())
-		{
-		}
-		else
-		{
-			inventory_dups++;
-		}
-
-		LLUUID dst_asset_id = (*dst_pos)->getAssetUUID();
-
-		if (mark_asset.find(dst_asset_id) == mark_asset.end())
 		{
 			// Item is not already present in COF.
 			new_dst.put(*dst_pos);
-			mark_asset.insert(dst_item_id);
+			mark_inventory.insert(dst_item_id);
 		}
 		else
 		{
-			asset_dups++;
+			inventory_dups++;
 		}
 	}
 	llinfos << "removeDups, original " << dst.count() << " final " << new_dst.count()
-			<< " inventory dups " << inventory_dups << " asset_dups " << asset_dups << llendl;
+			<< " inventory dups " << inventory_dups << llendl;
 	
 	dst = new_dst;
 }
 
-
 /* static */ 
 LLUUID LLAppearanceManager::getCOF()
 {
@@ -363,6 +363,9 @@ void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, boo
 	if (!proceed)
 		return;
 
+#if 1 
+	updateCOF(category,append);
+#else
 	if (append)
 	{
 		updateCOFFromCategory(category, append); // append is true - add non-duplicates to COF.
@@ -380,6 +383,7 @@ void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, boo
 			rebuildCOFFromOutfit(category);
 		}
 	}
+#endif
 }
 
 // Append to current COF contents by recursively traversing a folder.
@@ -520,6 +524,130 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 		}
 	}
 }
+/* static */ void LLAppearanceManager::purgeCategory(const LLUUID& category, bool keep_outfit_links)
+{
+	LLInventoryModel::cat_array_t cats;
+	LLInventoryModel::item_array_t items;
+	gInventory.collectDescendents(getCOF(), cats, items,
+								  LLInventoryModel::EXCLUDE_TRASH);
+	for (S32 i = 0; i < items.count(); ++i)
+	{
+		LLViewerInventoryItem *item = items.get(i);
+		if (keep_outfit_links && (item->getActualType() == LLAssetType::AT_LINK_FOLDER))
+			continue;
+		gInventory.purgeObject(item->getUUID());
+	}
+}
+
+// Keep the last N wearables of each type.  For viewer 2.0, N is 1 for
+// both body parts and clothing items.
+/* static */ void LLAppearanceManager::filterWearableItems(
+	LLInventoryModel::item_array_t& items, S32 max_per_type)
+{
+	// Divvy items into arrays by wearable type.
+	std::vector<LLInventoryModel::item_array_t> items_by_type(WT_COUNT);
+	for (S32 i=0; i<items.count(); i++)
+	{
+		LLViewerInventoryItem *item = items.get(i);
+		// Ignore non-wearables.
+		if (!item->isWearableType())
+			continue;
+		EWearableType type = item->getWearableType();
+		items_by_type[type].push_back(item);
+	}
+
+	// rebuild items list, retaining the last max_per_type of each array
+	items.clear();
+	for (S32 i=0; i<WT_COUNT; i++)
+	{
+		S32 size = items_by_type[i].size();
+		if (size <= 0)
+			continue;
+		S32 start_index = max(0,size-max_per_type);
+		for (S32 j = start_index; j<size; j++)
+		{
+			items.push_back(items_by_type[i][j]);
+		}
+	}
+}
+
+// Create links to all listed items.
+/* static */ void LLAppearanceManager::linkAll(const LLUUID& category,
+											   LLInventoryModel::item_array_t& items,
+											   LLPointer<LLInventoryCallback> cb)
+{
+	for (S32 i=0; i<items.count(); i++)
+	{
+		const LLInventoryItem* item = items.get(i).get();
+		link_inventory_item(gAgent.getID(),
+							item->getLinkedUUID(),
+							category,
+							item->getName(),
+							LLAssetType::AT_LINK,
+							cb);
+	}
+}
+
+/* static */ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)
+{
+	const LLUUID cof = getCOF();
+
+	// Collect and filter descendents to determine new COF contents.
+
+	// - Body parts: always include COF contents as a fallback in case any
+	// required parts are missing.
+	LLInventoryModel::item_array_t body_items;
+	getDescendentsOfAssetType(cof, body_items, LLAssetType::AT_BODYPART, false);
+	getDescendentsOfAssetType(category, body_items, LLAssetType::AT_BODYPART, false);
+	// Reduce body items to max of one per type.
+	removeDuplicateItems(body_items);
+	filterWearableItems(body_items, 1);
+
+	// - Wearables: include COF contents only if appending.
+	LLInventoryModel::item_array_t wear_items;
+	if (append)
+		getDescendentsOfAssetType(cof, wear_items, LLAssetType::AT_CLOTHING, false);
+	getDescendentsOfAssetType(category, wear_items, LLAssetType::AT_CLOTHING, false);
+	// Reduce wearables to max of one per type.
+	removeDuplicateItems(wear_items);
+	filterWearableItems(wear_items, 1);
+
+	// - Attachments: include COF contents only if appending.
+	LLInventoryModel::item_array_t obj_items;
+	if (append)
+		getDescendentsOfAssetType(cof, obj_items, LLAssetType::AT_OBJECT, false);
+	getDescendentsOfAssetType(category, obj_items, LLAssetType::AT_OBJECT, false);
+	removeDuplicateItems(obj_items);
+
+	// - Gestures: include COF contents only if appending.
+	LLInventoryModel::item_array_t gest_items;
+	if (append)
+		getDescendentsOfAssetType(cof, gest_items, LLAssetType::AT_GESTURE, false);
+	getDescendentsOfAssetType(category, gest_items, LLAssetType::AT_GESTURE, false);
+	removeDuplicateItems(gest_items);
+	
+	// Remove current COF contents.
+	bool keep_outfit_links = append;
+	purgeCategory(cof, keep_outfit_links);
+	gInventory.notifyObservers();
+
+	// Create links to new COF contents.
+	LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy;
+
+	linkAll(cof, body_items, link_waiter);
+	linkAll(cof, wear_items, link_waiter);
+	linkAll(cof, obj_items, link_waiter);
+	linkAll(cof, gest_items, link_waiter);
+
+	// Add link to outfit if category is an outfit. 
+	LLViewerInventoryCategory* catp = gInventory.getCategory(category);
+	if (!append && catp && catp->getPreferredType() == LLAssetType::AT_OUTFIT)
+	{
+		link_inventory_item(gAgent.getID(), category, cof, catp->getName(),
+							LLAssetType::AT_LINK_FOLDER, link_waiter);
+	}
+							  
+}
 
 /* static */ 
 bool LLAppearanceManager::isMandatoryWearableType(EWearableType type)
@@ -792,6 +920,22 @@ void LLAppearanceManager::getCOFValidDescendents(const LLUUID& category,
 									follow_folder_links);
 }
 
+/* static */
+void LLAppearanceManager::getDescendentsOfAssetType(const LLUUID& category,
+													LLInventoryModel::item_array_t& items,
+													LLAssetType::EType type,
+													bool follow_folder_links)
+{
+	LLInventoryModel::cat_array_t cats;
+	LLIsType is_of_type(type);
+	gInventory.collectDescendentsIf(category,
+									cats,
+									items,
+									LLInventoryModel::EXCLUDE_TRASH,
+									is_of_type,
+									follow_folder_links);
+}
+
 /* static */ 
 void LLAppearanceManager::getUserDescendents(const LLUUID& category, 
 											 LLInventoryModel::item_array_t& wear_items,
@@ -998,14 +1142,16 @@ void LLAppearanceManager::removeItemLinks(const LLUUID& item_id, bool do_update)
 	}
 }
 
+//#define DUMP_CAT_VERBOSE
+
 /* static */
-void LLAppearanceManager::dumpCat(const LLUUID& cat_id, std::string str)
+void LLAppearanceManager::dumpCat(const LLUUID& cat_id, const std::string& msg)
 {
 	LLInventoryModel::cat_array_t cats;
 	LLInventoryModel::item_array_t items;
 	gInventory.collectDescendents(cat_id, cats, items, LLInventoryModel::EXCLUDE_TRASH);
 
-#if 0
+#ifdef DUMP_CAT_VERBOSE
 	llinfos << llendl;
 	llinfos << str << llendl;
 	S32 hitcount = 0;
@@ -1017,6 +1163,18 @@ void LLAppearanceManager::dumpCat(const LLUUID& cat_id, std::string str)
 		llinfos << i <<" "<< item->getName() <<llendl;
 	}
 #endif
-	llinfos << str << " count " << items.count() << llendl;
+	llinfos << msg << " count " << items.count() << llendl;
 }
 
+/* static */
+void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& items,
+										const std::string& msg)
+{
+	llinfos << msg << llendl;
+	for (S32 i=0; i<items.count(); i++)
+	{
+		LLViewerInventoryItem *item = items.get(i);
+		llinfos << i <<" " << item->getName() << llendl;
+	}
+	llinfos << llendl;
+}
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index 828af321013..ea3ebdf4ea7 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -46,6 +46,7 @@ class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
 	static void updateAppearanceFromCOF();
 	static bool needToSaveCOF();
 	static void changeOutfit(bool proceed, const LLUUID& category, bool append);
+	static void updateCOF(const LLUUID& category, bool append = false);
 	static void updateCOFFromCategory(const LLUUID& category, bool append);
 	static void rebuildCOFFromOutfit(const LLUUID& category);
 	static void wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append);
@@ -65,9 +66,20 @@ class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
 	static void removeItemLinks(const LLUUID& item_id, bool do_update = true);
 
 	// For debugging - could be moved elsewhere.
-	static void dumpCat(const LLUUID& cat_id, std::string str);
+	static void dumpCat(const LLUUID& cat_id, const std::string& msg);
+	static void dumpItemArray(const LLInventoryModel::item_array_t& items, const std::string& msg);
 
 private:
+	static void filterWearableItems(LLInventoryModel::item_array_t& items, S32 max_per_type);
+	static void linkAll(const LLUUID& category,
+						LLInventoryModel::item_array_t& items,
+						LLPointer<LLInventoryCallback> cb);
+	
+	static void getDescendentsOfAssetType(const LLUUID& category, 
+										  LLInventoryModel::item_array_t& items,
+										  LLAssetType::EType type,
+										  bool follow_folder_links);
+
 	static void getCOFValidDescendents(const LLUUID& category, 
 									   LLInventoryModel::item_array_t& items);
 									   
@@ -81,6 +93,7 @@ class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
 	static bool isMandatoryWearableType(EWearableType type);
 	static void checkMandatoryWearableTypes(const LLUUID& category, std::set<EWearableType>& types_found);
 	static void purgeCOFBeforeRebuild(const LLUUID& category);
+	static void purgeCategory(const LLUUID& category, bool keep_outfit_links);
 };
 
 #define SUPPORT_ENSEMBLES 0
-- 
GitLab


From 3b6e5fb59ec2d19eb189e25408f2dd12cd3bb263 Mon Sep 17 00:00:00 2001
From: angela <angela@lindenlab.com>
Date: Mon, 2 Nov 2009 12:19:24 +0800
Subject: [PATCH 003/306]   EXT-1738 [BSI] Manage Telehub... in Region/Estate
 floater silently fails when clicked

---
 indra/newview/llfloaterregioninfo.cpp         | 15 ++++---
 indra/newview/llfloaterregioninfo.h           |  8 +++-
 .../newview/llpanelmediasettingssecurity.cpp  | 40 +++++++++----------
 .../default/xui/en/panel_region_general.xml   | 10 ++---
 .../xui/en/panel_region_general_layout.xml    | 10 ++---
 5 files changed, 44 insertions(+), 39 deletions(-)

diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 11544f5b7b5..17ddeb9d95c 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -179,6 +179,8 @@ BOOL LLFloaterRegionInfo::postBuild()
 	LLPanelRegionInfo* panel;
 	panel = new LLPanelRegionGeneralInfo;
 	mInfoPanels.push_back(panel);
+	panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub",	boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel));
+	
 	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml");
 	mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true));
 
@@ -554,6 +556,12 @@ void LLPanelRegionInfo::onClickHelp(std::string xml_alert)
 	LLNotifications::instance().add(xml_alert);
 }
 
+void LLPanelRegionInfo::onClickManageTelehub()
+{
+	LLFloaterReg::hideInstance("region_info");
+	LLFloaterReg::showInstance("telehubs");
+}
+
 /////////////////////////////////////////////////////////////////////////////
 // LLPanelRegionGeneralInfo
 //
@@ -604,7 +612,6 @@ BOOL LLPanelRegionGeneralInfo::postBuild()
 	childSetAction("kick_all_btn", onClickKickAll, this);
 	childSetAction("im_btn", onClickMessage, this);
 //	childSetAction("manage_telehub_btn", onClickManageTelehub, this);
-	mCommitCallbackRegistrar.add("RegionInfo.Cancel",	boost::bind(&LLPanelRegionGeneralInfo::onClickManageTelehub, this));
 
 	return LLPanelRegionInfo::postBuild();
 }
@@ -712,11 +719,7 @@ bool LLPanelRegionGeneralInfo::onMessageCommit(const LLSD& notification, const L
 	return false;
 }
 
-void LLPanelRegionGeneralInfo::onClickManageTelehub()
-{
-	LLFloaterReg::hideInstance("region_info");
-	LLFloaterReg::showInstance("telehubs");
-}
+
 
 // setregioninfo
 // strings[0] = 'Y' - block terraform, 'N' - not
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 95833af8a10..94fbbf9febb 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -123,10 +123,13 @@ class LLPanelRegionInfo : public LLPanel
 	void enableButton(const std::string& btn_name, BOOL enable = TRUE);
 	void disableButton(const std::string& btn_name);
 	
+	void onClickManageTelehub();
+	
 protected:
 	void initCtrl(const std::string& name);
 	void initHelpBtn(const std::string& name, const std::string& xml_alert);
 
+
 	// Callback for all help buttons, data is name of XML alert to show.
 	void onClickHelp(std::string xml_alert);
 	
@@ -152,6 +155,7 @@ class LLPanelRegionInfo : public LLPanel
 
 class LLPanelRegionGeneralInfo : public LLPanelRegionInfo
 {
+	
 public:
 	LLPanelRegionGeneralInfo()
 		:	LLPanelRegionInfo()	{}
@@ -161,16 +165,16 @@ class LLPanelRegionGeneralInfo : public LLPanelRegionInfo
 	
 	// LLPanel
 	virtual BOOL postBuild();
+	
 protected:
 	virtual BOOL sendUpdate();
-	
 	static void onClickKick(void* userdata);
 	static void onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata);
 	static void onClickKickAll(void* userdata);
 	bool onKickAllCommit(const LLSD& notification, const LLSD& response);
 	static void onClickMessage(void* userdata);
 	bool onMessageCommit(const LLSD& notification, const LLSD& response);
-	void onClickManageTelehub();
+
 };
 
 /////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp
index f5607aa2874..33f0952f536 100644
--- a/indra/newview/llpanelmediasettingssecurity.cpp
+++ b/indra/newview/llpanelmediasettingssecurity.cpp
@@ -50,10 +50,11 @@
 LLPanelMediaSettingsSecurity::LLPanelMediaSettingsSecurity() :
 	mParent( NULL )
 {
-	// build dialog from XML
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_security.xml");
 	mCommitCallbackRegistrar.add("Media.whitelistAdd",		boost::bind(&LLPanelMediaSettingsSecurity::onBtnAdd, this));
 	mCommitCallbackRegistrar.add("Media.whitelistDelete",	boost::bind(&LLPanelMediaSettingsSecurity::onBtnDel, this));	
+	// build dialog from XML
+	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_security.xml");
+
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -62,10 +63,7 @@ BOOL LLPanelMediaSettingsSecurity::postBuild()
 {
 	mEnableWhiteList = getChild< LLCheckBoxCtrl >( LLMediaEntry::WHITELIST_ENABLE_KEY );
 	mWhiteListList = getChild< LLScrollListCtrl >( LLMediaEntry::WHITELIST_KEY );
-
-	childSetAction("whitelist_add", onBtnAdd, this);
-	childSetAction("whitelist_del", onBtnDel, this);
-
+	
 	setDefaultBtn("whitelist_add");
 
 	return true;
@@ -237,17 +235,17 @@ void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in )
 const std::string LLPanelMediaSettingsSecurity::makeValidUrl( const std::string& src_url )
 {
 	// use LLURI to determine if we have a valid scheme
-	LLURI candidate_url( src_url );
-	if ( candidate_url.scheme().empty() )
-	{
+	LLURI candidate_url( src_url );
+	if ( candidate_url.scheme().empty() )
+	{
 		// build a URL comprised of default scheme and the original fragment 
 		const std::string default_scheme( "http://" );
 		return default_scheme + src_url;
-	};
-
-	// we *could* test the "default scheme" + "original fragment" URL again
-	// using LLURI to see if it's valid but I think the outcome is the same
-	// in either case - our only option is to return the original URL
+	};
+
+	// we *could* test the "default scheme" + "original fragment" URL again
+	// using LLURI to see if it's valid but I think the outcome is the same
+	// in either case - our only option is to return the original URL
 
 	// we *think* the original url passed in was valid
 	return src_url;
@@ -334,10 +332,10 @@ void LLPanelMediaSettingsSecurity::onBtnDel( void* userdata )
 	self->mWhiteListList->deleteSelectedItems();
 }
 
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLPanelMediaSettingsSecurity::setParent( LLFloaterMediaSettings* parent )
-{
-	mParent = parent;
-};
-
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLPanelMediaSettingsSecurity::setParent( LLFloaterMediaSettings* parent )
+{
+	mParent = parent;
+};
+
diff --git a/indra/newview/skins/default/xui/en/panel_region_general.xml b/indra/newview/skins/default/xui/en/panel_region_general.xml
index 160ae96fc4e..b6d13a0fdde 100644
--- a/indra/newview/skins/default/xui/en/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_general.xml
@@ -299,10 +299,7 @@
      left="108"
      name="apply_btn"
      top="320"
-     width="100">
-    <button.commit_callback
-         function="RegionInfo.Cancel" />
-    </button>
+     width="100"/> 
     <button
      follows="left|top"
      height="20"
@@ -338,5 +335,8 @@
      left="250"
      name="manage_telehub_btn"
      top="70"
-     width="150" />
+     width="150">
+		<button.commit_callback
+         function="RegionInfo.ManageTelehub" />
+    </button>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
index 9b9c62dbf9d..42297cdc073 100644
--- a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
@@ -299,10 +299,7 @@
      left="108"
      name="apply_btn"
      top="320"
-     width="100">
-        <button.commit_callback
-         function="RegionInfo.Cancel" />
-    </button>
+     width="100"/>
    <button
      follows="left|top"
      height="20"
@@ -338,5 +335,8 @@
      left_delta="0"
      name="manage_telehub_btn"
      top_pad="20"
-     width="150" /> 
+     width="150" >
+		<button.commit_callback
+         function="RegionInfo.ManageTelehub" />
+    </button> 
 </panel>
-- 
GitLab


From 25538beb77b66fe6968edcddd6e15a4133ec3564 Mon Sep 17 00:00:00 2001
From: angela <angela@lindenlab.com>
Date: Mon, 2 Nov 2009 19:22:19 +0800
Subject: [PATCH 004/306] Script Editor: changing Mono checkbox doesn't enable
 Save button

---
 indra/newview/llpreviewscript.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index ac7abf14485..b391c6ff1da 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -452,7 +452,7 @@ bool LLScriptEdCore::hasChanged()
 {
 	if (!mEditor) return false;
 
-	return !mEditor->isPristine();
+	return ((!mEditor->isPristine() || mEnableSave) && mHasScriptData);
 }
 
 void LLScriptEdCore::draw()
-- 
GitLab


From e12d1371cc044560fb892d222acc253f7a015f0c Mon Sep 17 00:00:00 2001
From: angela <angela@lindenlab.com>
Date: Mon, 2 Nov 2009 20:57:24 +0800
Subject: [PATCH 005/306] EXT-1736 [BSI] About Land > Objects > Object Owners
 list doesn't display names

---
 indra/newview/llfloaterland.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index bdf9842b015..7ec85f942b9 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -1519,7 +1519,9 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
 		}
 
 		// Placeholder for name.
-		item_params.columns.add().font(FONT).column("name");
+		std::string name;
+		gCacheName->getFullName(owner_id, name);		
+		item_params.columns.add().value(name).font(FONT).column("name");
 
 		object_count_str = llformat("%d", object_count);
 		item_params.columns.add().value(object_count_str).font(FONT).column("count");
-- 
GitLab


From 116f5c7880ceead16133d51693adc1ca25564049 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Mon, 2 Nov 2009 10:01:47 -0800
Subject: [PATCH 006/306] added ignores for winmerge cruft

---
 .hgignore | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/.hgignore b/.hgignore
index 8e02212e798..6357f0afd7f 100644
--- a/.hgignore
+++ b/.hgignore
@@ -44,3 +44,7 @@ tarfile_tmp
 ^indra/web/dataservice/lib/shared/vault.*
 ^indra/web/dataservice/vendor.*
 glob:indra/newview/dbghelp.dll
+glob:*.cpp.orig
+glob:*.cpp.bak
+glob:*.h.bak
+glob:*.h.orig
-- 
GitLab


From a3f90362cc37dcbb4197d0a1f07127241cf63861 Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Mon, 2 Nov 2009 20:23:30 +0200
Subject: [PATCH 007/306] no ticket. Fixed warnings of "use_ellipses"
 parameter.

--HG--
branch : product-engine
---
 .../newview/skins/default/xui/en/panel_group_info_sidetray.xml  | 2 +-
 indra/newview/skins/default/xui/en/panel_pick_info.xml          | 2 +-
 indra/newview/skins/default/xui/en/panel_profile.xml            | 2 +-
 indra/newview/skins/default/xui/en/panel_profile_view.xml       | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index d8d47c40084..132c031942c 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -47,7 +47,7 @@ background_visible="true"
      text_color="white"
      top="0"
      value="(Loading...)"
-     use_elipsis="true"
+     use_ellipses="true"
      width="300" />
     <line_editor
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index a67ae59b4a4..3cc9c3f38a0 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -30,7 +30,7 @@
      text_color="white"
      top="0"
      value="Pick Info"
-     use_elipsis="true"
+     use_ellipses="true"
      width="275" />
     <scroll_container
      color="DkGray2"
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index 5af7d7d6744..c3a92f9d9ae 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -157,7 +157,7 @@
          value="http://librarianavengers.org"
          width="280"
          word_wrap="false"
-         use_elipsis="true"
+         use_ellipses="true"
          />
         <text
          follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 195b7315313..4b2e901718e 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -36,7 +36,7 @@
      text_color="white"
      top="0"
      value="(Loading...)"
-     use_elipsis="true"
+     use_ellipses="true"
      width="275" />
     <text
      follows="top|left"
-- 
GitLab


From 86b1ee7703bb57c6b1e1c068cda02bfb9ed0721e Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Mon, 2 Nov 2009 14:10:56 -0500
Subject: [PATCH 008/306] Work in progress on attachment tracking.

---
 indra/newview/llappearancemgr.cpp | 38 +++++++++++++++++++++++++++++--
 indra/newview/llappearancemgr.h   |  6 +++++
 indra/newview/llvoavatarself.cpp  | 10 ++++----
 3 files changed, 48 insertions(+), 6 deletions(-)

diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 8e1f7775d2c..c297f8db298 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -528,7 +528,7 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 {
 	LLInventoryModel::cat_array_t cats;
 	LLInventoryModel::item_array_t items;
-	gInventory.collectDescendents(getCOF(), cats, items,
+	gInventory.collectDescendents(category, cats, items,
 								  LLInventoryModel::EXCLUDE_TRASH);
 	for (S32 i = 0; i < items.count(); ++i)
 	{
@@ -563,7 +563,7 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 		S32 size = items_by_type[i].size();
 		if (size <= 0)
 			continue;
-		S32 start_index = max(0,size-max_per_type);
+		S32 start_index = llmax(0,size-max_per_type);
 		for (S32 j = start_index; j<size; j++)
 		{
 			items.push_back(items_by_type[i][j]);
@@ -1178,3 +1178,37 @@ void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& it
 	}
 	llinfos << llendl;
 }
+
+
+std::set<LLUUID> LLAppearanceManager::sRegisteredAttachments;
+
+void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)
+{
+       llinfos << msg << llendl;
+       for (std::set<LLUUID>::const_iterator it = atts.begin();
+               it != atts.end();
+               ++it)
+       {
+               LLUUID item_id = *it;
+               LLViewerInventoryItem *item = gInventory.getItem(item_id);
+               if (item)
+                       llinfos << "atts " << item->getName() << llendl;
+               else
+                       llinfos << "atts " << "UNKNOWN[" << item_id.asString() << "]" << llendl;
+       }
+       llinfos << llendl;
+}
+
+/* static */
+void LLAppearanceManager::registerAttachment(const LLUUID& item_id)
+{
+       sRegisteredAttachments.insert(item_id);
+       dumpAttachmentSet(sRegisteredAttachments,"after register:");
+}
+
+/* static */
+void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id)
+{
+       sRegisteredAttachments.erase(item_id);
+       dumpAttachmentSet(sRegisteredAttachments,"after unregister:");
+}
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index ea3ebdf4ea7..45c6e23bae7 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -68,6 +68,9 @@ class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
 	// For debugging - could be moved elsewhere.
 	static void dumpCat(const LLUUID& cat_id, const std::string& msg);
 	static void dumpItemArray(const LLInventoryModel::item_array_t& items, const std::string& msg);
+	static void unregisterAttachment(const LLUUID& item_id);
+	static void registerAttachment(const LLUUID& item_id);
+
 
 private:
 	static void filterWearableItems(LLInventoryModel::item_array_t& items, S32 max_per_type);
@@ -94,6 +97,9 @@ class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
 	static void checkMandatoryWearableTypes(const LLUUID& category, std::set<EWearableType>& types_found);
 	static void purgeCOFBeforeRebuild(const LLUUID& category);
 	static void purgeCategory(const LLUUID& category, bool keep_outfit_links);
+
+	static std::set<LLUUID> sRegisteredAttachments;
+
 };
 
 #define SUPPORT_ENSEMBLES 0
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 758db538a28..44fd81f0d17 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -1080,6 +1080,7 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view
 	if (attachment->isObjectAttached(viewer_object))
 	{
 		const LLUUID& attachment_id = viewer_object->getItemID();
+		LLAppearanceManager::registerAttachment(attachment_id);
 		LLViewerInventoryItem *item = gInventory.getItem(attachment_id);
 		if (item)
 		{
@@ -1096,12 +1097,12 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view
 //virtual
 BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
 {
-	const LLUUID item_id = viewer_object->getItemID();
+	const LLUUID attachment_id = viewer_object->getItemID();
 	if (LLVOAvatar::detachObject(viewer_object))
 	{
 		// the simulator should automatically handle permission revocation
 		
-		stopMotionFromSource(item_id);
+		stopMotionFromSource(attachment_id);
 		LLFollowCamMgr::setCameraActive(viewer_object->getID(), FALSE);
 		
 		LLViewerObject::const_child_list_t& child_list = viewer_object->getChildren();
@@ -1127,11 +1128,12 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
 		else
 		{
 			LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:");
-			LLAppearanceManager::removeItemLinks(item_id, false);
+			LLAppearanceManager::removeItemLinks(attachment_id, false);
+			LLAppearanceManager::unregisterAttachment(attachment_id);
 		}
 		
 		// BAP - needs to change for label to track link.
-		gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+		gInventory.addChangedMask(LLInventoryObserver::LABEL, attachment_id);
 		gInventory.notifyObservers();
 		return TRUE;
 	}
-- 
GitLab


From d4a3ccc52cf0c9113428c71280a9e4d28f781bfd Mon Sep 17 00:00:00 2001
From: Eugene Kondrashev <ekondrashev@productengine.com>
Date: Mon, 2 Nov 2009 21:27:37 +0200
Subject: [PATCH 009/306] Fixed normal bug EXT-957-IM Verb button missing

--HG--
branch : product-engine
---
 indra/newview/llpanelimcontrolpanel.cpp       | 21 ++++++++++++++-----
 indra/newview/llpanelimcontrolpanel.h         |  2 ++
 .../default/xui/en/floater_im_session.xml     | 10 ++++-----
 .../default/xui/en/panel_im_control_panel.xml | 10 ++++++++-
 4 files changed, 32 insertions(+), 11 deletions(-)

diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index b54975b76b6..b5e0cdccc0c 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -112,21 +112,32 @@ BOOL LLPanelIMControlPanel::postBuild()
 	childSetAction("add_friend_btn", boost::bind(&LLPanelIMControlPanel::onAddFriendButtonClicked, this));
 
 	childSetAction("share_btn", boost::bind(&LLPanelIMControlPanel::onShareButtonClicked, this));
+	childSetAction("teleport_btn", boost::bind(&LLPanelIMControlPanel::onTeleportButtonClicked, this));
+	childSetAction("pay_btn", boost::bind(&LLPanelIMControlPanel::onPayButtonClicked, this));
 	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId()));
 	
 	return LLPanelChatControlPanel::postBuild();
 }
 
+void LLPanelIMControlPanel::onTeleportButtonClicked()
+{
+	LLAvatarActions::offerTeleport(mAvatarID);
+}
+void LLPanelIMControlPanel::onPayButtonClicked()
+{
+	LLAvatarActions::pay(mAvatarID);
+}
+
 void LLPanelIMControlPanel::onViewProfileButtonClicked()
 {
-	LLAvatarActions::showProfile(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId());
+	LLAvatarActions::showProfile(mAvatarID);
 }
 
 void LLPanelIMControlPanel::onAddFriendButtonClicked()
 {
 	LLAvatarIconCtrl* avatar_icon = getChild<LLAvatarIconCtrl>("avatar_icon");
 	std::string full_name = avatar_icon->getFirstName() + " " + avatar_icon->getLastName();
-	LLAvatarActions::requestFriendshipDialog(avatar_icon->getAvatarId(), full_name);
+	LLAvatarActions::requestFriendshipDialog(mAvatarID, full_name);
 }
 
 void LLPanelIMControlPanel::onShareButtonClicked()
@@ -140,12 +151,12 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
 
 	LLIMModel& im_model = LLIMModel::instance();
 
-	LLUUID avatar_id = im_model.getOtherParticipantID(session_id);
+	mAvatarID = im_model.getOtherParticipantID(session_id);
 
 	// Disable "Add friend" button for friends.
-	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(avatar_id));
+	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID));
 
-	getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(avatar_id);
+	getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(mAvatarID);
 
 	// Disable profile button if participant is not realy SL avatar
 	LLIMModel::LLIMSession* im_session =
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index d25f33935a3..b60ddc1d8d8 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -73,6 +73,8 @@ class LLPanelIMControlPanel : public LLPanelChatControlPanel
 	void onViewProfileButtonClicked();
 	void onAddFriendButtonClicked();
 	void onShareButtonClicked();
+	void onTeleportButtonClicked();
+	void onPayButtonClicked();
 
 	LLUUID mAvatarID;
 };
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 26d2f4e497f..c314fce42dc 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -3,7 +3,7 @@
  legacy_header_height="18"
  background_visible="true"
  follows="left|top|right|bottom"
- height="270"
+ height="330"
  layout="topleft"
  left="0"
  name="panel_im"
@@ -17,7 +17,7 @@
  min_width="200"
  min_height="150">
   <layout_stack follows="left|top|right|bottom"
-                height="255"
+                height="305"
                 width="365"
                 layout="topleft"
                 orientation="horizontal"
@@ -29,11 +29,11 @@
       layout="topleft"
       top_delta="-3"
       width="146"
-      height="255"
+      height="305"
       follows="left"
       label="IM Control Panel"
       user_resize="false" />
-    <layout_panel height="255"
+    <layout_panel height="305"
                   width="200"
                   left_delta="146" 
                   top="0"
@@ -56,7 +56,7 @@
        length="1"
        follows="left|top|right|bottom"
        font="SansSerif"
-       height="205"
+       height="255"
        layout="topleft"
        name="chat_history"
        parse_highlights="true"
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index c4cdaa41f97..a9396661e0a 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel name="panel_im_control_panel"
        width="125"
-       height="248"
+       height="298"
        border="false">
 
   <avatar_icon name="avatar_icon"
@@ -39,9 +39,17 @@
      height="20"
      visible="false"/>
 
+  <button name="teleport_btn"
+          label="Teleport"
+          width="125"
+          height="20" />
   <button name="share_btn"
           label="Share"
           width="125"
           height="20" />
+  <button name="pay_btn"
+          label="Pay"
+          width="125"
+          height="20" />
 
 </panel>
-- 
GitLab


From 08f1e05552796f2f0d67f95aefca181ca96c5615 Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Mon, 2 Nov 2009 21:51:39 +0200
Subject: [PATCH 010/306] fixed major bug EXT-1984  	Speak button light
 should not disable when voice channel is open

--HG--
branch : product-engine
---
 indra/newview/llchiclet.cpp           |  1 +
 indra/newview/lloutputmonitorctrl.cpp | 12 ++++++++++--
 indra/newview/lloutputmonitorctrl.h   |  3 +++
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index bad61101c1b..a854eb852fe 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -1336,6 +1336,7 @@ LLTalkButton::LLTalkButton(const Params& p)
 
 	// never show "muted" because you can't mute yourself
 	mOutputMonitor->setIsMuted(false);
+	mOutputMonitor->setIsAgentControl(true);
 }
 
 LLTalkButton::~LLTalkButton()
diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp
index 8bac9937f0d..39381e3faae 100644
--- a/indra/newview/lloutputmonitorctrl.cpp
+++ b/indra/newview/lloutputmonitorctrl.cpp
@@ -80,7 +80,8 @@ LLOutputMonitorCtrl::LLOutputMonitorCtrl(const LLOutputMonitorCtrl::Params& p)
 	mImageLevel2(p.image_level_2),
 	mImageLevel3(p.image_level_3),
 	mAutoUpdate(p.auto_update),
-	mSpeakerId(p.speaker_id)
+	mSpeakerId(p.speaker_id),
+	mIsAgentControl(false)
 {
 	//static LLUIColor output_monitor_muted_color = LLUIColorTable::instance().getColor("OutputMonitorMutedColor", LLColor4::orange);
 	//static LLUIColor output_monitor_overdriven_color = LLUIColorTable::instance().getColor("OutputMonitorOverdrivenColor", LLColor4::red);
@@ -132,7 +133,14 @@ void LLOutputMonitorCtrl::draw()
 	if (getVisible() && mAutoUpdate && !mIsMuted && mSpeakerId.notNull())
 	{
 		setPower(gVoiceClient->getCurrentPower(mSpeakerId));
-		setIsTalking(gVoiceClient->getIsSpeaking(mSpeakerId));
+		if(mIsAgentControl)
+		{
+			setIsTalking(gVoiceClient->getUserPTTState());
+		}
+		else
+		{
+			setIsTalking(gVoiceClient->getIsSpeaking(mSpeakerId));
+		}
 	}
 
 	LLPointer<LLUIImage> icon;
diff --git a/indra/newview/lloutputmonitorctrl.h b/indra/newview/lloutputmonitorctrl.h
index 7a7b8bc3a18..85ea552a572 100644
--- a/indra/newview/lloutputmonitorctrl.h
+++ b/indra/newview/lloutputmonitorctrl.h
@@ -81,6 +81,8 @@ class LLOutputMonitorCtrl
 
 	// For the current user, need to know the PTT state to show
 	// correct button image.
+	void			setIsAgentControl(bool val) { mIsAgentControl = val; }
+
 	void			setIsTalking(bool val) { mIsTalking = val; }
 
 	void			setSpeakerId(const LLUUID& speaker_id);
@@ -100,6 +102,7 @@ class LLOutputMonitorCtrl
 	
 
 	F32				mPower;
+	bool			mIsAgentControl;
 	bool			mIsMuted;
 	bool			mIsTalking;
 	LLPointer<LLUIImage> mImageMute;
-- 
GitLab


From 3a8a93d59650f9a6f0d47a1db7076e9c3d50e9d6 Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Mon, 2 Nov 2009 21:53:31 +0200
Subject: [PATCH 011/306] fix for EXT-1232 \"You are Here\" banner for Place
 Profile - Parcel Characteristics Note: Now distance check is not depend on Z
 coordinate

--HG--
branch : product-engine
---
 indra/newview/llagentui.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
index 09f7c49f23d..41c8066aca4 100644
--- a/indra/newview/llagentui.cpp
+++ b/indra/newview/llagentui.cpp
@@ -92,7 +92,10 @@ std::string LLAgentUI::buildSLURL(const bool escaped /*= true*/)
 //static
 BOOL LLAgentUI::checkAgentDistance(const LLVector3& pole, F32 radius)
 {
-	return  (gAgent.getPositionAgent() - pole).length() < radius;
+	S32 delta_x = gAgent.getPositionAgent().mV[VX] - pole.mV[VX];
+	S32 delta_y = gAgent.getPositionAgent().mV[VY] - pole.mV[VY];
+	
+	return  sqrt( delta_x* delta_x + delta_y* delta_y ) < radius;
 }
 BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const LLVector3& agent_pos_region)
 {
-- 
GitLab


From b94d2ff4c5bd26ffe821a6f40c2bc5883ae2ebba Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 2 Nov 2009 12:03:00 -0800
Subject: [PATCH 012/306] EXT-462 Fixed freeze/eject commands in right-click
 and avatar inspector menus

We were incorrectly only enabling them for gods.  They now properly enable
for region/land owners.
---
 indra/newview/llinspectavatar.cpp             |  37 +++++-
 indra/newview/llviewermenu.cpp                | 109 ++++++++++--------
 indra/newview/llviewermenu.h                  |   8 ++
 .../xui/en/menu_inspect_avatar_gear.xml       |   6 +-
 4 files changed, 105 insertions(+), 55 deletions(-)

diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 99580d09189..bfad2b16248 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -107,9 +107,12 @@ class LLInspectAvatar : public LLInspect
 	void onClickPay();
 	void onClickBlock();
 	void onClickReport();
+	void onClickFreeze();
+	void onClickEject();
 	void onClickZoomIn();  
 	void onClickFindOnMap();
 	bool onVisibleFindOnMap();
+	bool onVisibleFreezeEject();
 	void onClickMuteVolume();
 	void onVolumeChange(const LLSD& data);
 	
@@ -190,11 +193,16 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
 	mCommitCallbackRegistrar.add("InspectAvatar.InviteToGroup",	boost::bind(&LLInspectAvatar::onClickInviteToGroup, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.Pay",	boost::bind(&LLInspectAvatar::onClickPay, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.Block",	boost::bind(&LLInspectAvatar::onClickBlock, this));	
+	mCommitCallbackRegistrar.add("InspectAvatar.Freeze",
+		boost::bind(&LLInspectAvatar::onClickFreeze, this));	
+	mCommitCallbackRegistrar.add("InspectAvatar.Eject",
+		boost::bind(&LLInspectAvatar::onClickEject, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.Report",	boost::bind(&LLInspectAvatar::onClickReport, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.FindOnMap",	boost::bind(&LLInspectAvatar::onClickFindOnMap, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.ZoomIn", boost::bind(&LLInspectAvatar::onClickZoomIn, this));
 	mVisibleCallbackRegistrar.add("InspectAvatar.VisibleFindOnMap",	boost::bind(&LLInspectAvatar::onVisibleFindOnMap, this));	
-
+	mVisibleCallbackRegistrar.add("InspectAvatar.VisibleFreezeEject",	
+		boost::bind(&LLInspectAvatar::onVisibleFreezeEject, this));	
 
 	// can't make the properties request until the widgets are constructed
 	// as it might return immediately, so do it in postBuild.
@@ -437,13 +445,13 @@ void LLInspectAvatar::nameUpdatedCallback(
 void LLInspectAvatar::onClickAddFriend()
 {
 	LLAvatarActions::requestFriendshipDialog(mAvatarID, mAvatarName);
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickViewProfile()
 {
-	// hide inspector when showing profile
-	setFocus(FALSE);
 	LLAvatarActions::showProfile(mAvatarID);
+	closeFloater();
 }
 
 bool LLInspectAvatar::onVisibleFindOnMap()
@@ -451,24 +459,33 @@ bool LLInspectAvatar::onVisibleFindOnMap()
 	return gAgent.isGodlike() || is_agent_mappable(mAvatarID);
 }
 
+bool LLInspectAvatar::onVisibleFreezeEject()
+{
+	return enable_freeze_eject( LLSD(mAvatarID) );
+}
+
 void LLInspectAvatar::onClickIM()
 { 
 	LLAvatarActions::startIM(mAvatarID);
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickTeleport()
 {
 	LLAvatarActions::offerTeleport(mAvatarID);
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickInviteToGroup()
 {
 	LLAvatarActions::inviteToGroup(mAvatarID);
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickPay()
 {
 	LLAvatarActions::pay(mAvatarID);
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickBlock()
@@ -476,11 +493,25 @@ void LLInspectAvatar::onClickBlock()
 	LLMute mute(mAvatarID, mAvatarName, LLMute::AGENT);
 	LLMuteList::getInstance()->add(mute);
 	LLPanelBlockedList::showPanelAndSelect(mute.mID);
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickReport()
 {
 	LLFloaterReporter::showFromObject(mAvatarID);
+	closeFloater();
+}
+
+void LLInspectAvatar::onClickFreeze()
+{
+	handle_avatar_freeze( LLSD(mAvatarID) );
+	closeFloater();
+}
+
+void LLInspectAvatar::onClickEject()
+{
+	handle_avatar_eject( LLSD(mAvatarID) );
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickZoomIn() 
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 864cf9d57bb..9da9ff5ce7f 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2963,11 +2963,20 @@ bool callback_freeze(const LLSD& notification, const LLSD& response)
 }
 
 
-class LLAvatarFreeze : public view_listener_t
+void handle_avatar_freeze(const LLSD& avatar_id)
 {
-	bool handleEvent(const LLSD& userdata)
-	{
-		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
+		// Use avatar_id if available, otherwise default to right-click avatar
+		LLVOAvatar* avatar = NULL;
+		if (avatar_id.asUUID().notNull())
+		{
+			avatar = find_avatar_from_object(avatar_id.asUUID());
+		}
+		else
+		{
+			avatar = find_avatar_from_object(
+				LLSelectMgr::getInstance()->getSelection()->getPrimaryObject());
+		}
+
 		if( avatar )
 		{
 			std::string fullname = avatar->getFullname();
@@ -2991,9 +3000,7 @@ class LLAvatarFreeze : public view_listener_t
 							callback_freeze);
 			}
 		}
-		return true;
-	}
-};
+}
 
 class LLAvatarVisibleDebug : public view_listener_t
 {
@@ -3003,14 +3010,6 @@ class LLAvatarVisibleDebug : public view_listener_t
 	}
 };
 
-class LLAvatarEnableDebug : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		return gAgent.isGodlike();
-	}
-};
-
 class LLAvatarDebug : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
@@ -3087,11 +3086,20 @@ bool callback_eject(const LLSD& notification, const LLSD& response)
 	return false;
 }
 
-class LLAvatarEject : public view_listener_t
+void handle_avatar_eject(const LLSD& avatar_id)
 {
-	bool handleEvent(const LLSD& userdata)
-	{
-		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
+		// Use avatar_id if available, otherwise default to right-click avatar
+		LLVOAvatar* avatar = NULL;
+		if (avatar_id.asUUID().notNull())
+		{
+			avatar = find_avatar_from_object(avatar_id.asUUID());
+		}
+		else
+		{
+			avatar = find_avatar_from_object(
+				LLSelectMgr::getInstance()->getSelection()->getPrimaryObject());
+		}
+
 		if( avatar )
 		{
 			LLSD payload;
@@ -3142,38 +3150,41 @@ class LLAvatarEject : public view_listener_t
 				}
 			}
 		}
-		return true;
-	}
-};
+}
 
-class LLAvatarEnableFreezeEject : public view_listener_t
+bool enable_freeze_eject(const LLSD& avatar_id)
 {
-	bool handleEvent(const LLSD& userdata)
+	// Use avatar_id if available, otherwise default to right-click avatar
+	LLVOAvatar* avatar = NULL;
+	if (avatar_id.asUUID().notNull())
 	{
-		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
-		bool new_value = (avatar != NULL);
+		avatar = find_avatar_from_object(avatar_id.asUUID());
+	}
+	else
+	{
+		avatar = find_avatar_from_object(
+			LLSelectMgr::getInstance()->getSelection()->getPrimaryObject());
+	}
+	if (!avatar) return false;
 
-		if (new_value)
-		{
-			const LLVector3& pos = avatar->getPositionRegion();
-			const LLVector3d& pos_global = avatar->getPositionGlobal();
-			LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel();
-			LLViewerRegion* region = avatar->getRegion();
-			new_value = (region != NULL);
-						
-			if (new_value)
-			{
-				new_value = region->isOwnedSelf(pos);
-				if (!new_value || region->isOwnedGroup(pos))
-				{
-					new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN);
-				}
-			}
-		}
+	// Gods can always freeze
+	if (gAgent.isGodlike()) return true;
 
-		return new_value;
+	// Estate owners / managers can freeze
+	// Parcel owners can also freeze
+	const LLVector3& pos = avatar->getPositionRegion();
+	const LLVector3d& pos_global = avatar->getPositionGlobal();
+	LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel();
+	LLViewerRegion* region = avatar->getRegion();
+	if (!region) return false;
+				
+	bool new_value = region->isOwnedSelf(pos);
+	if (!new_value || region->isOwnedGroup(pos))
+	{
+		new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN);
 	}
-};
+	return new_value;
+}
 
 class LLAvatarGiveCard : public view_listener_t
 {
@@ -8021,18 +8032,18 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLObjectMute(), "Avatar.Mute");
 	view_listener_t::addMenu(new LLAvatarAddFriend(), "Avatar.AddFriend");
 	view_listener_t::addMenu(new LLAvatarAddContact(), "Avatar.AddContact");
-	view_listener_t::addMenu(new LLAvatarFreeze(), "Avatar.Freeze");
+	commit.add("Avatar.Freeze", boost::bind(&handle_avatar_freeze, LLSD()));
 	view_listener_t::addMenu(new LLAvatarDebug(), "Avatar.Debug");
 	view_listener_t::addMenu(new LLAvatarVisibleDebug(), "Avatar.VisibleDebug");
-	view_listener_t::addMenu(new LLAvatarEnableDebug(), "Avatar.EnableDebug");
 	view_listener_t::addMenu(new LLAvatarInviteToGroup(), "Avatar.InviteToGroup");
 	view_listener_t::addMenu(new LLAvatarGiveCard(), "Avatar.GiveCard");
-	view_listener_t::addMenu(new LLAvatarEject(), "Avatar.Eject");
+	commit.add("Avatar.Eject", boost::bind(&handle_avatar_eject, LLSD()));
 	view_listener_t::addMenu(new LLAvatarSendIM(), "Avatar.SendIM");
 	view_listener_t::addMenu(new LLAvatarReportAbuse(), "Avatar.ReportAbuse");
 	
 	view_listener_t::addMenu(new LLAvatarEnableAddFriend(), "Avatar.EnableAddFriend");
-	view_listener_t::addMenu(new LLAvatarEnableFreezeEject(), "Avatar.EnableFreezeEject");
+	enable.add("Avatar.EnableFreezeEject", boost::bind(&enable_freeze_eject, _2));
+	visible.add("Avatar.EnableFreezeEject", boost::bind(&enable_freeze_eject, _2));
 
 	// Object pie menu
 	view_listener_t::addMenu(new LLObjectBuild(), "Object.Build");
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index 6d32df2bc54..b65878b5e63 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -101,6 +101,14 @@ void handle_take_copy();
 void handle_look_at_selection(const LLSD& param);
 void handle_zoom_to_object(LLUUID object_id);
 
+// Takes avatar UUID, or if no UUID passed, uses last selected object
+void handle_avatar_freeze(const LLSD& avatar_id);
+
+// Takes avatar UUID, or if no UUID passed, uses last selected object
+void handle_avatar_eject(const LLSD& avatar_id);
+
+bool enable_freeze_eject(const LLSD& avatar_id);
+
 // Can anyone take a free copy of the object?
 // *TODO: Move to separate file
 bool anyone_copy_selection(LLSelectNode* nodep);
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
index edff1a093a4..6049476a43f 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
@@ -68,7 +68,7 @@
     <menu_item_call.on_click
      function="InspectAvatar.Freeze"/>
     <menu_item_call.on_visible
-     function="IsGodCustomerService"/>
+     function="InspectAvatar.VisibleFreezeEject"/>
   </menu_item_call>
   <menu_item_call
    label="Eject"
@@ -76,13 +76,13 @@
     <menu_item_call.on_click
      function="InspectAvatar.Eject"/>
     <menu_item_call.on_visible
-     function="IsGodCustomerService"/>
+     function="InspectAvatar.VisibleFreezeEject"/>
   </menu_item_call>
   <menu_item_call
    label="Debug"
    name="debug">
     <menu_item_call.on_click
-     function="InspectAvatar.Debug"/>
+     function="Avatar.Debug"/>
     <menu_item_call.on_visible
      function="IsGodCustomerService"/>
   </menu_item_call>
-- 
GitLab


From bde7d67066d189416a725da4527a02eb4f78ba4a Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Mon, 2 Nov 2009 15:39:55 -0500
Subject: [PATCH 013/306] EXT-1866 : Inventory Side Panel svn merge
 -r137106:137808
 svn+ssh://svn.lindenlab.com/svn/linden/branches/avatar-pipeline/inventory-panel

Porting over changes from svn Inventory Panel work.
---
 indra/newview/CMakeLists.txt                  |  3543 ++---
 indra/newview/llagentwearables.cpp            |     1 +
 indra/newview/llassetuploadresponders.cpp     |     1 +
 indra/newview/llfloaterbuy.cpp                |     1 +
 indra/newview/llfloaterbuycontents.cpp        |     3 +-
 indra/newview/llfloatergesture.cpp            |     1 +
 indra/newview/llfloaterinventory.cpp          |  2108 +--
 indra/newview/llfloaterinventory.h            |   350 +-
 indra/newview/llfloateropenobject.cpp         |    11 +-
 indra/newview/llfloateropenobject.h           |     4 +-
 indra/newview/llfloatertools.cpp              |     2 +-
 indra/newview/llfolderview.cpp                |     1 +
 indra/newview/llimpanel.cpp                   |     1 +
 indra/newview/llinventorybridge.cpp           | 10288 +++++++-------
 indra/newview/llinventorybridge.h             |     7 +-
 indra/newview/llinventoryfunctions.cpp        |   344 +
 indra/newview/llinventoryfunctions.h          |   136 +
 indra/newview/llinventorymodel.cpp            |    10 +-
 indra/newview/llpanelcontents.cpp             |    10 +-
 indra/newview/llpanelcontents.h               |    11 +-
 indra/newview/llpanelgroupnotices.cpp         |     1 +
 indra/newview/llpanellandmarks.cpp            |  1909 +--
 indra/newview/llpanelmaininventory.cpp        |   818 ++
 indra/newview/llpanelmaininventory.h          |   125 +
 indra/newview/llpanelobject.h                 |     1 -
 indra/newview/llpanelobjectinventory.cpp      |  1905 +++
 indra/newview/llpanelobjectinventory.h        |   102 +
 indra/newview/llpanelvolume.cpp               |     1 -
 indra/newview/llpanelvolume.h                 |     1 -
 indra/newview/llplacesinventorybridge.cpp     |     5 +-
 indra/newview/llpreviewscript.cpp             |     1 -
 indra/newview/llsidepanelinventory.cpp        |   276 +
 indra/newview/llsidepanelinventory.h          |    85 +
 indra/newview/lltexturectrl.cpp               |     2 +
 indra/newview/lltoastgroupnotifypanel.cpp     |     1 +
 indra/newview/llviewerinventory.cpp           |     1 +
 indra/newview/llviewermenu.cpp                |     1 +
 indra/newview/llviewermessage.cpp             | 11445 ++++++++--------
 .../skins/default/textures/textures.xml       |     6 +-
 .../default/xui/en/floater_inventory.xml      |   423 +-
 .../default/xui/en/floater_openobject.xml     |     2 +-
 .../skins/default/xui/en/floater_tools.xml    |     2 +-
 .../default/xui/en/panel_main_inventory.xml   |   417 +
 .../skins/default/xui/en/panel_side_tray.xml  |   280 +-
 .../xui/en/panel_sidetray_home_tab.xml        |    63 +-
 .../default/xui/en/sidepanel_inventory.xml    |   122 +
 46 files changed, 18384 insertions(+), 16444 deletions(-)
 create mode 100644 indra/newview/llinventoryfunctions.cpp
 create mode 100644 indra/newview/llinventoryfunctions.h
 create mode 100644 indra/newview/llpanelmaininventory.cpp
 create mode 100644 indra/newview/llpanelmaininventory.h
 create mode 100644 indra/newview/llpanelobjectinventory.cpp
 create mode 100644 indra/newview/llpanelobjectinventory.h
 create mode 100644 indra/newview/llsidepanelinventory.cpp
 create mode 100644 indra/newview/llsidepanelinventory.h
 create mode 100644 indra/newview/skins/default/xui/en/panel_main_inventory.xml
 create mode 100644 indra/newview/skins/default/xui/en/sidepanel_inventory.xml

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index a7681e4a1d0..644ebfa3f44 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1,1766 +1,1777 @@
-# -*- cmake -*-
-
-project(viewer)
-
-include(00-Common)
-include(Boost)
-include(BuildVersion)
-include(DBusGlib)
-include(DirectX)
-include(ELFIO)
-include(FMOD)
-include(OPENAL)
-include(FindOpenGL)
-include(LLAudio)
-include(LLCharacter)
-include(LLCommon)
-include(LLImage)
-include(LLImageJ2COJ)
-include(LLInventory)
-include(LLMath)
-include(LLMessage)
-include(LLPlugin)
-include(LLPrimitive)
-include(LLRender)
-include(LLUI)
-include(LLVFS)
-include(LLWindow)
-include(LLXML)
-include(LLXUIXML)
-include(LScript)
-include(Linking)
-include(NDOF)
-include(GooglePerfTools)
-include(TemplateCheck)
-include(UI)
-include(UnixInstall)
-include(LLKDU)
-include(ViewerMiscLibs)
-include(LLLogin)
-include(CMakeCopyIfDifferent)
-
-include_directories(
-    ${DBUSGLIB_INCLUDE_DIRS}
-    ${ELFIO_INCLUDE_DIR}
-    ${LLAUDIO_INCLUDE_DIRS}
-    ${LLCHARACTER_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${LLINVENTORY_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLMESSAGE_INCLUDE_DIRS}
-    ${LLPLUGIN_INCLUDE_DIRS}
-    ${LLPRIMITIVE_INCLUDE_DIRS}
-    ${LLRENDER_INCLUDE_DIRS}
-    ${LLUI_INCLUDE_DIRS}
-    ${LLVFS_INCLUDE_DIRS}
-    ${LLWINDOW_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    ${LLXUIXML_INCLUDE_DIRS}
-    ${LSCRIPT_INCLUDE_DIRS}
-    ${LSCRIPT_INCLUDE_DIRS}/lscript_compile
-    ${LLLOGIN_INCLUDE_DIRS}
-    )
-
-set(viewer_SOURCE_FILES
-    llaccordionctrl.cpp
-    llaccordionctrltab.cpp
-    llagent.cpp
-    llagentaccess.cpp
-    llagentdata.cpp
-    llagentlanguage.cpp
-    llagentlistener.cpp
-    llagentpicksinfo.cpp
-    llagentpilot.cpp
-    llagentui.cpp
-    llagentwearables.cpp
-    llanimstatelabels.cpp
-    llappearancemgr.cpp
-    llappviewer.cpp
-    llappviewerlistener.cpp
-    llassetuploadqueue.cpp
-    llassetuploadresponders.cpp
-    llaudiosourcevo.cpp
-    llavataractions.cpp
-    llavatariconctrl.cpp
-    llavatarlist.cpp
-    llavatarlistitem.cpp
-    llavatarpropertiesprocessor.cpp
-    llbottomtray.cpp
-    llbox.cpp
-    llbreadcrumbview.cpp
-    llcallbacklist.cpp
-    llcallingcard.cpp
-    llcapabilitylistener.cpp
-    llcaphttpsender.cpp
-    llchannelmanager.cpp
-    llchatbar.cpp
-    llchathistory.cpp
-    llchatitemscontainerctrl.cpp
-    llchatmsgbox.cpp
-    llchiclet.cpp
-    llclassifiedinfo.cpp
-    llclassifiedstatsresponder.cpp
-    llcloud.cpp
-    llcolorswatch.cpp
-    llcommandhandler.cpp
-    llcommandlineparser.cpp
-    llcompilequeue.cpp
-    llconfirmationmanager.cpp
-    llcurrencyuimanager.cpp
-    llcylinder.cpp
-    lldateutil.cpp
-    lldebugmessagebox.cpp
-    lldebugview.cpp
-    lldelayedgestureerror.cpp
-    lldirpicker.cpp
-    lldndbutton.cpp
-    lldrawable.cpp
-    lldrawpool.cpp
-    lldrawpoolalpha.cpp
-    lldrawpoolavatar.cpp
-    lldrawpoolbump.cpp
-    lldrawpoolground.cpp
-    lldrawpoolsimple.cpp
-    lldrawpoolsky.cpp
-    lldrawpoolterrain.cpp
-    lldrawpooltree.cpp
-    lldrawpoolwater.cpp
-    lldrawpoolwlsky.cpp
-    lldriverparam.cpp
-    lldynamictexture.cpp
-    llemote.cpp
-    lleventinfo.cpp
-    lleventnotifier.cpp
-    lleventpoll.cpp
-    llexpandabletextbox.cpp
-    llface.cpp
-    llfasttimerview.cpp
-    llfavoritesbar.cpp
-    llfeaturemanager.cpp
-    llfilepicker.cpp
-    llfirstuse.cpp
-    llflexibleobject.cpp
-    llfloaterabout.cpp
-    llfloateractivespeakers.cpp
-    llfloateranimpreview.cpp
-    llfloaterauction.cpp
-    llfloateravatarpicker.cpp
-    llfloateravatartextures.cpp
-    llfloaterbeacons.cpp
-    llfloaterbuildoptions.cpp
-    llfloaterbulkpermission.cpp
-    llfloaterbump.cpp
-    llfloaterbuy.cpp
-    llfloaterbuycontents.cpp
-    llfloaterbuycurrency.cpp
-    llfloaterbuyland.cpp
-    llfloatercall.cpp
-    llfloatercamera.cpp
-    llfloaterchat.cpp
-    llfloaterchatterbox.cpp
-    llfloatercolorpicker.cpp
-    llfloatercustomize.cpp
-    llfloaterdaycycle.cpp
-    llfloaterenvsettings.cpp
-    llfloaterfonttest.cpp
-    llfloaterfriends.cpp
-    llfloatergesture.cpp
-    llfloatergodtools.cpp
-    llfloatergroupinvite.cpp
-    llfloatergroups.cpp
-    llfloaterhandler.cpp
-    llfloaterhardwaresettings.cpp
-    llfloaterhelpbrowser.cpp
-    llfloaterhud.cpp
-    llfloaterimagepreview.cpp
-    llfloaterinspect.cpp
-    llfloaterinventory.cpp
-    llfloaterjoystick.cpp
-    llfloaterlagmeter.cpp
-    llfloaterland.cpp
-    llfloaterlandholdings.cpp
-    llfloatermap.cpp
-    llfloatermediabrowser.cpp
-    llfloatermediasettings.cpp
-    llfloatermemleak.cpp
-    llfloaternamedesc.cpp
-    llfloaternotificationsconsole.cpp
-    llfloateropenobject.cpp
-    llfloaterparcel.cpp
-    llfloaterpay.cpp
-    llfloaterperms.cpp
-    llfloaterpostcard.cpp
-    llfloaterpostprocess.cpp
-    llfloaterpreference.cpp
-    llfloaterproperties.cpp
-    llfloaterregioninfo.cpp
-    llfloaterreporter.cpp
-    llfloaterscriptdebug.cpp
-    llfloatersearch.cpp
-    llfloatersellland.cpp
-    llfloatersettingsdebug.cpp
-    llfloatersnapshot.cpp
-    llfloatertelehub.cpp
-    llfloatertestinspectors.cpp
-    llfloatertestlistview.cpp
-    llfloatertools.cpp
-    llfloatertopobjects.cpp
-    llfloatertos.cpp
-    llfloateruipreview.cpp
-    llfloaterurldisplay.cpp
-    llfloaterurlentry.cpp
-    llfloatervoicedevicesettings.cpp
-    llfloaterwater.cpp
-    llfloaterwhitelistentry.cpp
-    llfloaterwindlight.cpp
-    llfloaterworldmap.cpp
-    llfoldertype.cpp
-    llfolderview.cpp
-    llfolderviewitem.cpp
-    llfollowcam.cpp
-    llfriendcard.cpp
-    llgesturemgr.cpp
-    llglsandbox.cpp
-    llgroupactions.cpp
-    llgrouplist.cpp
-    llgroupmgr.cpp
-    llgroupnotify.cpp
-    llhomelocationresponder.cpp
-    llhudeffect.cpp
-    llhudeffectbeam.cpp
-    llhudeffectlookat.cpp
-    llhudeffectpointat.cpp
-    llhudeffecttrail.cpp
-    llhudicon.cpp
-    llhudmanager.cpp
-    llhudobject.cpp
-    llhudrender.cpp
-    llhudtext.cpp
-    llhudview.cpp
-    llimcontrolpanel.cpp
-    llimfloater.cpp
-    llimhandler.cpp
-    llimpanel.cpp
-    llimview.cpp
-    llinspect.cpp
-    llinspectavatar.cpp
-    llinspectgroup.cpp
-    llinspectobject.cpp
-    llinventorybridge.cpp
-    llinventoryclipboard.cpp
-    llinventoryfilter.cpp
-    llinventorymodel.cpp
-    llinventorysubtreepanel.cpp
-    lljoystickbutton.cpp
-    lllandmarkactions.cpp
-    lllandmarklist.cpp
-    lllistbrowser.cpp
-    lllistview.cpp
-    lllocaltextureobject.cpp
-    lllocationhistory.cpp
-    lllocationinputctrl.cpp
-    lllogchat.cpp
-    llloginhandler.cpp
-    lllogininstance.cpp
-    llmanip.cpp
-    llmaniprotate.cpp
-    llmanipscale.cpp
-    llmaniptranslate.cpp
-    llmapresponders.cpp
-    llmediactrl.cpp
-    llmediadataclient.cpp
-    llmediaremotectrl.cpp
-    llmemoryview.cpp
-    llmenucommands.cpp
-    llmetricperformancetester.cpp
-    llmimetypes.cpp
-    llmorphview.cpp
-    llmoveview.cpp
-    llmutelist.cpp
-    llnamebox.cpp
-    llnameeditor.cpp
-    llnamelistctrl.cpp
-    llnavigationbar.cpp
-    llnearbychat.cpp
-    llnearbychatbar.cpp
-    llnearbychathandler.cpp
-    llnetmap.cpp
-    llnotificationalerthandler.cpp
-    llnotificationgrouphandler.cpp
-    llnotificationmanager.cpp
-    llnotificationscripthandler.cpp
-    llnotificationtiphandler.cpp
-    llnotify.cpp
-    lloutputmonitorctrl.cpp
-    lloverlaybar.cpp
-    llpanelappearance.cpp
-    llpanelappearancetab.cpp
-    llpanelavatar.cpp
-    llpanelavatarrow.cpp
-    llpanelavatartag.cpp
-    llpanelblockedlist.cpp
-    llpanelclassified.cpp
-    llpanelcontents.cpp
-    llpaneleditwearable.cpp
-    llpanelevent.cpp
-    llpanelface.cpp
-    llpanelgroup.cpp
-    llpanelgroupgeneral.cpp
-    llpanelgroupinvite.cpp
-    llpanelgrouplandmoney.cpp
-    llpanelgroupnotices.cpp
-    llpanelgrouproles.cpp
-    llpanelimcontrolpanel.cpp
-    llpanelinventory.cpp
-    llpanelland.cpp
-    llpanellandaudio.cpp
-    llpanellandmarks.cpp
-    llpanellandmedia.cpp
-    llpanellogin.cpp
-    llpanellookinfo.cpp
-    llpanellooks.cpp
-    llpanelmedia.cpp
-    llpanelmediasettingsgeneral.cpp
-    llpanelmediasettingspermissions.cpp
-    llpanelmediasettingssecurity.cpp
-    llpanelmeprofile.cpp
-    llpanelobject.cpp
-    llpanelpeople.cpp
-    llpanelpeoplemenus.cpp
-    llpanelpermissions.cpp
-    llpanelpick.cpp
-    llpanelpicks.cpp
-    llpanelplace.cpp
-    llpanelplaceinfo.cpp
-    llpanelplaces.cpp
-    llpanelplacestab.cpp
-    llpanelprimmediacontrols.cpp
-    llpanelprofile.cpp
-    llpanelprofileview.cpp
-    llpanelshower.cpp
-    llpanelteleporthistory.cpp
-    llpanelvolume.cpp
-    llparcelselection.cpp
-    llparticipantlist.cpp
-    llpatchvertexarray.cpp
-    llplacesinventorybridge.cpp
-    llpolymesh.cpp
-    llpolymorph.cpp
-    llpreview.cpp
-    llpreviewanim.cpp
-    llpreviewgesture.cpp
-    llpreviewnotecard.cpp
-    llpreviewscript.cpp
-    llpreviewsound.cpp
-    llpreviewtexture.cpp
-    llproductinforequest.cpp
-    llprogressview.cpp
-    llrecentpeople.cpp
-    llregionposition.cpp
-    llremoteparcelrequest.cpp
-    llsavedsettingsglue.cpp
-    llscreenchannel.cpp
-    llscrollingpanelparam.cpp
-    llsearchcombobox.cpp
-    llsearchhistory.cpp
-    llselectmgr.cpp
-    llsidetray.cpp
-    llsidetraypanelcontainer.cpp
-    llsky.cpp
-    llslurl.cpp
-    llspatialpartition.cpp
-    llspeakers.cpp
-    llsplitbutton.cpp
-    llsprite.cpp
-    llstartup.cpp
-    llstatusbar.cpp
-    llstylemap.cpp
-    llsurface.cpp
-    llsurfacepatch.cpp
-    llsyswellitem.cpp
-    llsyswellwindow.cpp
-    llteleporthistory.cpp
-    llteleporthistorystorage.cpp
-    lltexglobalcolor.cpp
-    lltexlayer.cpp
-    lltexlayerparams.cpp
-    lltextureatlas.cpp
-    lltextureatlasmanager.cpp
-    lltexturecache.cpp
-    lltexturectrl.cpp
-    lltexturefetch.cpp
-    lltextureview.cpp
-    lltoast.cpp
-    lltoastalertpanel.cpp
-    lltoastgroupnotifypanel.cpp
-    lltoastimpanel.cpp
-    lltoastnotifypanel.cpp
-    lltoastpanel.cpp
-    lltool.cpp
-    lltoolbar.cpp
-    lltoolbrush.cpp
-    lltoolcomp.cpp
-    lltooldraganddrop.cpp
-    lltoolface.cpp
-    lltoolfocus.cpp
-    lltoolgrab.cpp
-    lltoolgun.cpp
-    lltoolindividual.cpp
-    lltoolmgr.cpp
-    lltoolmorph.cpp
-    lltoolobjpicker.cpp
-    lltoolpie.cpp
-    lltoolpipette.cpp
-    lltoolplacer.cpp
-    lltoolselect.cpp
-    lltoolselectland.cpp
-    lltoolselectrect.cpp
-    lltracker.cpp
-    lltransientdockablefloater.cpp
-    lltransientfloatermgr.cpp
-    lluilistener.cpp
-    lluploaddialog.cpp
-    llurl.cpp
-    llurldispatcher.cpp
-    llurlhistory.cpp
-    llurllineeditorctrl.cpp
-    llurlsimstring.cpp
-    llurlwhitelist.cpp
-    llvectorperfoptions.cpp
-    llviewchildren.cpp
-    llviewerassetstorage.cpp
-    llvieweraudio.cpp
-    llviewercamera.cpp
-    llviewercontrol.cpp
-    llviewercontrollistener.cpp
-    llviewerdisplay.cpp
-    llviewerfloaterreg.cpp
-    llviewergenericmessage.cpp
-    llviewergesture.cpp    
-    llviewerhelp.cpp
-    llviewerhelputil.cpp
-    llviewerinventory.cpp
-    llviewerjoint.cpp
-    llviewerjointattachment.cpp
-    llviewerjointmesh.cpp
-    llviewerjointmesh_sse.cpp
-    llviewerjointmesh_sse2.cpp
-    llviewerjointmesh_vec.cpp
-    llviewerjoystick.cpp
-    llviewerkeyboard.cpp
-    llviewerlayer.cpp
-    llviewermedia.cpp
-    llviewermedia_streamingaudio.cpp
-    llviewermediafocus.cpp
-    llviewermenu.cpp
-    llviewermenufile.cpp
-    llviewermessage.cpp
-    llviewernetwork.cpp
-    llviewerobject.cpp
-    llviewerobjectlist.cpp
-    llviewerparcelmedia.cpp
-    llviewerparcelmediaautoplay.cpp
-    llviewerparcelmgr.cpp
-    llviewerparceloverlay.cpp
-    llviewerpartsim.cpp
-    llviewerpartsource.cpp
-    llviewerregion.cpp
-    llviewershadermgr.cpp
-    llviewerstats.cpp
-    llviewertexteditor.cpp
-    llviewertexture.cpp
-    llviewertextureanim.cpp
-    llviewertexturelist.cpp
-    llviewerthrottle.cpp
-    llviewervisualparam.cpp
-    llviewerwindow.cpp
-    llviewerwindowlistener.cpp
-    llvlcomposition.cpp
-    llvlmanager.cpp
-    llvoavatar.cpp
-    llvoavatardefines.cpp
-    llvoavatarself.cpp
-    llvocache.cpp
-    llvoclouds.cpp
-    llvograss.cpp
-    llvoground.cpp
-    llvoicechannel.cpp
-    llvoiceclient.cpp
-    llvoicecontrolpanel.cpp
-    llvoiceremotectrl.cpp
-    llvoicevisualizer.cpp
-    llvoinventorylistener.cpp
-    llvopartgroup.cpp
-    llvosky.cpp
-    llvosurfacepatch.cpp
-    llvotextbubble.cpp
-    llvotree.cpp
-    llvovolume.cpp
-    llvowater.cpp
-    llvowlsky.cpp
-    llwatchdog.cpp
-    llwaterparammanager.cpp
-    llwaterparamset.cpp
-    llwearable.cpp
-    llwearabledictionary.cpp
-    llwearablelist.cpp
-    llweb.cpp
-    llwind.cpp
-    llwlanimator.cpp
-    llwldaycycle.cpp
-    llwlparammanager.cpp
-    llwlparamset.cpp
-    llworld.cpp
-    llworldmap.cpp
-    llworldmapview.cpp
-    llxmlrpclistener.cpp
-    llxmlrpctransaction.cpp
-    noise.cpp
-    pipeline.cpp
-    )
-
-set(VIEWER_BINARY_NAME "secondlife-bin" CACHE STRING
-    "The name of the viewer executable to create.")
-
-if (LINUX)
-  # We can't set these flags for Darwin, because they get passed to
-  # the PPC compiler.  Ugh.
-
-  set_source_files_properties(
-      llviewerjointmesh_sse.cpp
-      PROPERTIES COMPILE_FLAGS "-msse -mfpmath=sse"
-      )
-  set_source_files_properties(
-      llviewerjointmesh_sse2.cpp
-      PROPERTIES COMPILE_FLAGS "-msse2 -mfpmath=sse"
-      )
-endif (LINUX)
-
-set(viewer_HEADER_FILES
-    CMakeLists.txt
-    ViewerInstall.cmake
-    llaccordionctrl.h
-    llaccordionctrltab.h
-    llagent.h
-    llagentaccess.h
-    llagentdata.h
-    llagentlanguage.h
-    llagentlistener.h
-    llagentpicksinfo.h
-    llagentpilot.h
-    llagentui.h
-    llagentwearables.h
-    llanimstatelabels.h
-    llappearance.h
-    llappearancemgr.h
-    llappviewer.h
-    llappviewerlistener.h
-    llassetuploadqueue.h
-    llassetuploadresponders.h
-    llaudiosourcevo.h
-    llavataractions.h
-    llavatariconctrl.h
-    llavatarlist.h
-    llavatarlistitem.h
-    llavatarpropertiesprocessor.h
-    llbottomtray.h
-    llbox.h
-    llbreadcrumbview.h
-    llcallbacklist.h
-    llcallingcard.h
-    llcapabilitylistener.h
-    llcapabilityprovider.h
-    llcaphttpsender.h
-    llchannelmanager.h
-    llchatbar.h
-    llchathistory.h
-    llchatitemscontainerctrl.h
-    llchatmsgbox.h
-    llchiclet.h
-    llclassifiedinfo.h
-    llclassifiedstatsresponder.h
-    llcloud.h
-    llcolorswatch.h
-    llcommandhandler.h
-    llcommandlineparser.h
-    llcompilequeue.h
-    llconfirmationmanager.h
-    llcurrencyuimanager.h
-    llcylinder.h
-    lldateutil.h
-    lldebugmessagebox.h
-    lldebugview.h
-    lldelayedgestureerror.h
-    lldirpicker.h
-    lldndbutton.h
-    lldrawable.h
-    lldrawpool.h
-    lldrawpoolalpha.h
-    lldrawpoolavatar.h
-    lldrawpoolbump.h
-    lldrawpoolclouds.h
-    lldrawpoolground.h
-    lldrawpoolsimple.h
-    lldrawpoolsky.h
-    lldrawpoolterrain.h
-    lldrawpooltree.h
-    lldrawpoolwater.h
-    lldrawpoolwlsky.h
-    lldriverparam.h
-    lldynamictexture.h
-    llemote.h
-    lleventinfo.h
-    lleventnotifier.h
-    lleventpoll.h
-    llexpandabletextbox.h
-    llface.h
-    llfasttimerview.h
-    llfavoritesbar.h
-    llfeaturemanager.h
-    llfilepicker.h
-    llfirstuse.h
-    llflexibleobject.h
-    llfloaterabout.h
-    llfloateractivespeakers.h
-    llfloateranimpreview.h
-    llfloaterauction.h
-    llfloateravatarpicker.h
-    llfloateravatartextures.h
-    llfloaterbeacons.h
-    llfloaterbuildoptions.h
-    llfloaterbulkpermission.h
-    llfloaterbump.h
-    llfloaterbuy.h
-    llfloaterbuycontents.h
-    llfloaterbuycurrency.h
-    llfloaterbuyland.h
-    llfloatercall.h
-    llfloatercamera.h
-    llfloaterchat.h
-    llfloaterchatterbox.h
-    llfloatercolorpicker.h
-    llfloatercustomize.h
-    llfloaterdaycycle.h
-    llfloaterenvsettings.h
-    llfloaterfonttest.h
-    llfloaterfriends.h
-    llfloatergesture.h
-    llfloatergodtools.h
-    llfloatergroupinvite.h
-    llfloatergroups.h
-    llfloaterhandler.h
-    llfloaterhardwaresettings.h
-    llfloaterhelpbrowser.h
-    llfloaterhud.h
-    llfloaterimagepreview.h
-    llfloaterinspect.h
-    llfloaterinventory.h
-    llfloaterjoystick.h
-    llfloaterlagmeter.h
-    llfloaterland.h
-    llfloaterlandholdings.h
-    llfloatermap.h
-    llfloatermediabrowser.h
-    llfloatermediasettings.h
-    llfloatermemleak.h
-    llfloaternamedesc.h
-    llfloaternotificationsconsole.h
-    llfloateropenobject.h
-    llfloaterparcel.h
-    llfloaterpay.h
-    llfloaterperms.h
-    llfloaterpostcard.h
-    llfloaterpostprocess.h
-    llfloaterpreference.h
-    llfloaterproperties.h
-    llfloaterregioninfo.h
-    llfloaterreporter.h
-    llfloaterscriptdebug.h
-    llfloatersearch.h
-    llfloatersellland.h
-    llfloatersettingsdebug.h
-    llfloatersnapshot.h
-    llfloatertelehub.h
-    llfloatertestinspectors.h
-    llfloatertestlistview.h
-    llfloatertools.h
-    llfloatertopobjects.h
-    llfloatertos.h
-    llfloateruipreview.h
-    llfloaterurldisplay.h
-    llfloaterurlentry.h
-    llfloatervoicedevicesettings.h
-    llfloaterwater.h
-    llfloaterwhitelistentry.h
-    llfloaterwindlight.h
-    llfloaterworldmap.h
-    llfoldertype.h
-    llfolderview.h
-    llfoldervieweventlistener.h
-    llfolderviewitem.h
-    llfollowcam.h
-    llfriendcard.h
-    llgesturemgr.h
-    llgroupactions.h
-    llgrouplist.h
-    llgroupmgr.h
-    llgroupnotify.h
-    llhomelocationresponder.h
-    llhudeffect.h
-    llhudeffectbeam.h
-    llhudeffectlookat.h
-    llhudeffectpointat.h
-    llhudeffecttrail.h
-    llhudicon.h
-    llhudmanager.h
-    llhudobject.h
-    llhudrender.h
-    llhudtext.h
-    llhudview.h
-    llimcontrolpanel.h
-    llimfloater.h
-    llimpanel.h
-    llimview.h
-    llinspect.h
-    llinspectavatar.h
-    llinspectgroup.h
-    llinspectobject.h
-    llinventorybridge.h
-    llinventoryclipboard.h
-    llinventoryfilter.h
-    llinventorymodel.h
-    llinventorysubtreepanel.h
-    lljoystickbutton.h
-    lllandmarkactions.h
-    lllandmarklist.h
-    lllightconstants.h
-    lllistbrowser.h
-    lllistview.h
-    lllocaltextureobject.h
-    lllocationhistory.h
-    lllocationinputctrl.h
-    lllogchat.h
-    llloginhandler.h
-    lllogininstance.h
-    llmanip.h
-    llmaniprotate.h
-    llmanipscale.h
-    llmaniptranslate.h
-    llmapresponders.h
-    llmediactrl.h
-    llmediadataclient.h
-    llmediaremotectrl.h
-    llmemoryview.h
-    llmenucommands.h
-    llmetricperformancetester.h
-    llmimetypes.h
-    llmorphview.h
-    llmoveview.h
-    llmutelist.h
-    llnamebox.h
-    llnameeditor.h
-    llnamelistctrl.h
-    llnavigationbar.h
-    llnearbychat.h
-    llnearbychatbar.h
-    llnearbychathandler.h
-    llnetmap.h
-    llnotificationhandler.h
-    llnotificationmanager.h
-    llnotify.h
-    lloutputmonitorctrl.h
-    lloverlaybar.h
-    llpanelappearance.h
-    llpanelappearancetab.h
-    llpanelavatar.h
-    llpanelavatarrow.h
-    llpanelavatartag.h
-    llpanelblockedlist.h
-    llpanelclassified.h
-    llpanelcontents.h
-    llpaneleditwearable.h
-    llpanelevent.h
-    llpanelface.h
-    llpanelgroup.h
-    llpanelgroupgeneral.h
-    llpanelgroupinvite.h
-    llpanelgrouplandmoney.h
-    llpanelgroupnotices.h
-    llpanelgrouproles.h
-    llpanelimcontrolpanel.h
-    llpanelinventory.h
-    llpanelland.h
-    llpanellandaudio.h
-    llpanellandmarks.h
-    llpanellandmedia.h
-    llpanellogin.h
-    llpanellookinfo.h
-    llpanellooks.h
-    llpanelmedia.h
-    llpanelmediasettingsgeneral.h
-    llpanelmediasettingspermissions.h
-    llpanelmediasettingssecurity.h
-    llpanelmeprofile.h
-    llpanelobject.h
-    llpanelpeople.h
-    llpanelpeoplemenus.h
-    llpanelpermissions.h
-    llpanelpick.h
-    llpanelpicks.h
-    llpanelplace.h
-    llpanelplaceinfo.h
-    llpanelplaces.h
-    llpanelplacestab.h
-    llpanelprimmediacontrols.h
-    llpanelprofile.h
-    llpanelprofileview.h
-    llpanelshower.h
-    llpanelteleporthistory.h
-    llpanelvolume.h
-    llparcelselection.h
-    llparticipantlist.h
-    llpatchvertexarray.h
-    llplacesinventorybridge.h
-    llpolymesh.h
-    llpolymorph.h
-    llpreview.h
-    llpreviewanim.h
-    llpreviewgesture.h
-    llpreviewnotecard.h
-    llpreviewscript.h
-    llpreviewsound.h
-    llpreviewtexture.h
-    llproductinforequest.h
-    llprogressview.h
-    llrecentpeople.h
-    llregionposition.h
-    llremoteparcelrequest.h
-    llresourcedata.h
-    llrootview.h
-    llsavedsettingsglue.h
-    llscreenchannel.h
-    llscrollingpanelparam.h
-    llsearchcombobox.h
-    llsearchhistory.h
-    llselectmgr.h
-    llsidetray.h
-    llsidetraypanelcontainer.h
-    llsky.h
-    llslurl.h
-    llspatialpartition.h
-    llspeakers.h
-    llsplitbutton.h
-    llsprite.h
-    llstartup.h
-    llstatusbar.h
-    llstylemap.h
-    llsurface.h
-    llsurfacepatch.h
-    llsyswellitem.h
-    llsyswellwindow.h    
-    lltable.h
-    llteleporthistory.h
-    llteleporthistorystorage.h
-    lltexglobalcolor.h
-    lltexlayer.h
-    lltexlayerparams.h
-    lltextureatlas.h
-    lltextureatlasmanager.h
-    lltexturecache.h
-    lltexturectrl.h
-    lltexturefetch.h
-    lltextureview.h
-    lltoast.h
-    lltoastalertpanel.h
-    lltoastgroupnotifypanel.h
-    lltoastimpanel.h
-    lltoastnotifypanel.h
-    lltoastpanel.h
-    lltool.h
-    lltoolbar.h
-    lltoolbrush.h
-    lltoolcomp.h
-    lltooldraganddrop.h
-    lltoolface.h
-    lltoolfocus.h
-    lltoolgrab.h
-    lltoolgun.h
-    lltoolindividual.h
-    lltoolmgr.h
-    lltoolmorph.h
-    lltoolobjpicker.h
-    lltoolpie.h
-    lltoolpipette.h
-    lltoolplacer.h
-    lltoolselect.h
-    lltoolselectland.h
-    lltoolselectrect.h
-    lltracker.h
-    lltransientdockablefloater.h
-    lltransientfloatermgr.h
-    lluiconstants.h
-    lluilistener.h
-    lluploaddialog.h
-    llurl.h
-    llurldispatcher.h
-    llurlhistory.h
-    llurllineeditorctrl.h
-    llurlsimstring.h
-    llurlwhitelist.h
-    llvectorperfoptions.h
-    llviewchildren.h
-    llviewerassetstorage.h
-    llvieweraudio.h
-    llviewerbuild.h
-    llviewercamera.h
-    llviewercontrol.h
-    llviewercontrollistener.h
-    llviewerdisplay.h
-    llviewerfloaterreg.h
-    llviewergenericmessage.h
-    llviewergesture.h    
-    llviewerhelp.h
-    llviewerinventory.h
-    llviewerjoint.h
-    llviewerjointattachment.h
-    llviewerjointmesh.h
-    llviewerjoystick.h
-    llviewerkeyboard.h
-    llviewerlayer.h
-    llviewermedia.h
-    llviewermediafocus.h
-    llviewermediaobserver.h
-    llviewermenu.h
-    llviewermenufile.h
-    llviewermessage.h
-    llviewernetwork.h
-    llviewerobject.h
-    llviewerobjectlist.h
-    llviewerparcelmedia.h
-    llviewerparcelmediaautoplay.h
-    llviewerparcelmgr.h
-    llviewerparceloverlay.h
-    llviewerpartsim.h
-    llviewerpartsource.h
-    llviewerprecompiledheaders.h
-    llviewerregion.h
-    llviewershadermgr.h
-    llviewerstats.h
-    llviewertexteditor.h
-    llviewertexture.h
-    llviewertextureanim.h
-    llviewertexturelist.h
-    llviewerthrottle.h
-    llviewervisualparam.h
-    llviewerwindow.h
-    llviewerwindowlistener.h
-    llvlcomposition.h
-    llvlmanager.h
-    llvoavatar.h
-    llvoavatardefines.h
-    llvoavatarself.h
-    llvocache.h
-    llvoclouds.h
-    llvograss.h
-    llvoground.h
-    llvoicechannel.h
-    llvoiceclient.h
-    llvoicecontrolpanel.h
-    llvoiceremotectrl.h
-    llvoicevisualizer.h
-    llvoinventorylistener.h
-    llvopartgroup.h
-    llvosky.h
-    llvosurfacepatch.h
-    llvotextbubble.h
-    llvotree.h
-    llvotreenew.h
-    llvovolume.h
-    llvowater.h
-    llvowlsky.h
-    llwatchdog.h
-    llwaterparammanager.h
-    llwaterparamset.h
-    llwearable.h
-    llwearabledictionary.h
-    llwearablelist.h
-    llweb.h
-    llwind.h
-    llwindebug.h
-    llwlanimator.h
-    llwldaycycle.h
-    llwlparammanager.h
-    llwlparamset.h
-    llworld.h
-    llworldmap.h
-    llworldmapview.h
-    llxmlrpclistener.h
-    llxmlrpctransaction.h
-    macmain.h
-    noise.h
-    pipeline.h
-    randgauss.h
-    VertexCache.h
-    VorbisFramework.h
-    )
-
-source_group("CMake Rules" FILES ViewerInstall.cmake)
-
-if (DARWIN)
-  LIST(APPEND viewer_SOURCE_FILES llappviewermacosx.cpp)
-
-  find_library(AGL_LIBRARY AGL)
-  find_library(APPKIT_LIBRARY AppKit)
-  find_library(COCOA_LIBRARY Cocoa)
-  find_library(IOKIT_LIBRARY IOKit)
-
-  set(viewer_LIBRARIES
-    ${COCOA_LIBRARY}
-    ${AGL_LIBRARY}
-    ${IOKIT_LIBRARY}
-    )
-
-  # Add resource files to the project.
-  set(viewer_RESOURCE_FILES
-    secondlife.icns
-    macview.r
-    gpu_table.txt
-    Info-SecondLife.plist
-    SecondLife.nib/
-    # CMake doesn't seem to support Xcode language variants well just yet
-    English.lproj/InfoPlist.strings
-    English.lproj/language.txt
-    German.lproj/language.txt
-    Japanese.lproj/language.txt
-    Korean.lproj/language.txt
-    )
-  set_source_files_properties(
-    ${viewer_RESOURCE_FILES}
-    PROPERTIES
-    HEADER_FILE_ONLY TRUE
-    #MACOSX_PACKAGE_LOCATION Resources #don't do this! this tells cmake to copy the files.
-    )
-  SOURCE_GROUP("Resources" FILES ${viewer_RESOURCE_FILES})
-  list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES})
-endif (DARWIN)
-
-if (LINUX)
-    LIST(APPEND viewer_SOURCE_FILES llappviewerlinux.cpp)
-    LIST(APPEND viewer_SOURCE_FILES llappviewerlinux_api_dbus.cpp)
-    SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed")
-
-    set(viewer_LIBRARIES
-        Xinerama
-        )
-endif (LINUX)
-
-if (WINDOWS)
-    list(APPEND viewer_SOURCE_FILES
-         llappviewerwin32.cpp
-         llwindebug.cpp
-         )
-
-    list(APPEND viewer_HEADER_FILES
-         llappviewerwin32.h
-         llwindebug.h
-         )
-
-    # precompiled header configuration
-    # llviewerprecompiledheaders.cpp generates
-    # the .pch file.
-    # All sources added to viewer_SOURCE_FILES 
-    # at this point use it.
-    set_source_files_properties(llviewerprecompiledheaders.cpp
-        PROPERTIES
-        COMPILE_FLAGS "/Ycllviewerprecompiledheaders.h"
-        )        
-    foreach( src_file ${viewer_SOURCE_FILES} )
-        set_source_files_properties(
-            ${src_file}
-            PROPERTIES
-            COMPILE_FLAGS "/Yullviewerprecompiledheaders.h"
-            )        
-    endforeach( src_file ${viewer_SOURCE_FILES} )
-    list(APPEND viewer_SOURCE_FILES llviewerprecompiledheaders.cpp)
-    # llstartup.cpp needs special symbols for audio libraries, so it resets
-    # COMPILE_FLAGS below.  Make sure it maintains precompiled header settings.
-    set(LLSTARTUP_COMPILE_FLAGS 
-        "${LLSTARTUP_COMPILE_FLAGS} /Yullviewerprecompiledheaders.h")
-    
-    # Add resource files to the project.
-    # viewerRes.rc is the only buildable file, but
-    # the rest are all dependencies of it.
-    set(viewer_RESOURCE_FILES
-        res/arrow.cur
-        res/arrowcop.cur
-        res/arrowcopmulti.cur
-        res/arrowdrag.cur
-        res/circleandline.cur
-        res/icon1.ico
-        res/llarrow.cur
-        res/llarrowdrag.cur
-        res/llarrowdragmulti.cur
-        res/llarrowlocked.cur
-        res/llgrablocked.cur
-        res/llno.cur
-        res/llnolocked.cur
-        res/lltoolcamera.cur
-        res/lltoolcreate.cur
-        res/lltoolfocus.cur
-        res/lltoolgrab.cur
-        res/lltoolland.cur
-        res/lltoolpan.cur
-        res/lltoolpipette.cur
-        res/lltoolrotate.cur
-        res/lltoolscale.cur
-        res/lltooltranslate.cur
-        res/lltoolzoomin.cur
-        res/lltoolzoomout.cur
-        res/ll_icon.BMP
-        res/ll_icon.ico
-        res/resource.h
-        res/toolpickobject.cur
-        res/toolpickobject2.cur
-        res/toolpickobject3.cur
-        res/toolpipette.cur
-        )
-
-    set_source_files_properties(${viewer_RESOURCE_FILES}
-                                PROPERTIES HEADER_FILE_ONLY TRUE)
-
-    set(viewer_RESOURCE_FILES 
-        res/viewerRes.rc 
-        ${viewer_RESOURCE_FILES}
-        )
-
-    SOURCE_GROUP("Resource Files" FILES ${viewer_RESOURCE_FILES})
-
-    if (NOT STANDALONE)
-        list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES})
-    endif (NOT STANDALONE)	
-
-    find_library(DINPUT_LIBRARY dinput8 ${DIRECTX_LIBRARY_DIR})
-    find_library(DXGUID_LIBRARY dxguid ${DIRECTX_LIBRARY_DIR})
-    mark_as_advanced(
-        DINPUT_LIBRARY
-        DXGUID_LIBRARY
-        )
-
-    set(viewer_LIBRARIES
-        ${WINDOWS_LIBRARIES}
-        comdlg32
-        ${DINPUT_LIBRARY}
-        ${DXGUID_LIBRARY}
-        kernel32
-        odbc32
-        odbccp32
-        ole32
-        oleaut32
-        opengl32
-        shell32
-        Vfw32
-        winspool
-        )
-
-    find_library(INTEL_MEMOPS_LIBRARY
-                 NAMES ll_intel_memops
-                 PATHS
-                 optimized ${ARCH_PREBUILT_DIRS_RELEASE}
-                 debug ${ARCH_PREBUILT_DIRS_DEBUG}
-                 )
-    mark_as_advanced(INTEL_MEMOPS_LIBRARY)
-
-    if (INTEL_MEMOPS_LIBRARY)
-      list(APPEND viewer_LIBRARIES ${INTEL_MEMOPS_LIBRARY})
-    endif (INTEL_MEMOPS_LIBRARY)
-
-    use_prebuilt_binary(dbghelp)
-endif (WINDOWS)
-
-# Add the xui files. This is handy for searching for xui elements
-# from within the IDE.
-set(viewer_XUI_FILES
-    skins/default/colors.xml
-    skins/default/textures/textures.xml
-
-
-
-    )
-file(GLOB DEFAULT_XUI_FILE_GLOB_LIST
-     ${CMAKE_CURRENT_SOURCE_DIR}/skins/default/xui/en/*.xml)
-list(APPEND viewer_XUI_FILES ${DEFAULT_XUI_FILE_GLOB_LIST})
-
-file(GLOB DEFAULT_WIDGET_FILE_GLOB_LIST
-     ${CMAKE_CURRENT_SOURCE_DIR}/skins/default/xui/en/widgets/*.xml)
-list(APPEND viewer_XUI_FILES ${DEFAULT_WIDGET_FILE_GLOB_LIST})
-
-file(GLOB SILVER_XUI_FILE_GLOB_LIST
-     ${CMAKE_CURRENT_SOURCE_DIR}/skins/silver/xui/en-us/*.xml)
-list(APPEND viewer_XUI_FILES ${SILVER_XUI_FILE_GLOB_LIST})
-
-# Cannot append empty lists in CMake, wait until we have files here.
-#file(GLOB SILVER_WIDGET_FILE_GLOB_LIST
-#     ${CMAKE_CURRENT_SOURCE_DIR}/skins/silver/xui/en-us/widgets/*.xml)
-#list(APPEND viewer_XUI_FILES ${SILVER_WIDGET_FILE_GLOB_LIST})
-
-list(SORT viewer_XUI_FILES)
-
-source_group("XUI Files" FILES ${viewer_XUI_FILES})
-
-set_source_files_properties(${viewer_XUI_FILES}
-                            PROPERTIES HEADER_FILE_ONLY TRUE)
-
-list(APPEND viewer_SOURCE_FILES ${viewer_XUI_FILES})
-
-set(viewer_APPSETTINGS_FILES
-    app_settings/anim.ini
-    app_settings/cmd_line.xml
-    app_settings/grass.xml
-    app_settings/high_graphics.xml
-    app_settings/keys.ini
-    app_settings/keywords.ini
-    app_settings/logcontrol.xml
-    app_settings/low_graphics.xml
-    app_settings/mid_graphics.xml
-    app_settings/settings.xml
-    app_settings/settings_crash_behavior.xml
-    app_settings/settings_files.xml
-    app_settings/settings_per_account.xml
-    app_settings/std_bump.ini
-    app_settings/trees.xml
-    app_settings/ultra_graphics.xml
-    app_settings/viewerart.xml
-    ${CMAKE_SOURCE_DIR}/../etc/message.xml
-    ${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg
-    )
-
-use_prebuilt_binary(artwork-common)
-
-source_group("App Settings" FILES ${viewer_APPSETTINGS_FILES})
-
-set_source_files_properties(${viewer_APPSETTINGS_FILES}
-                            PROPERTIES HEADER_FILE_ONLY TRUE)
-
-list(APPEND viewer_SOURCE_FILES ${viewer_APPSETTINGS_FILES})
-
-set(viewer_CHARACTER_FILES
-    character/attentions.xml
-    character/attentionsN.xml
-    character/avatar_lad.xml
-    character/avatar_skeleton.xml
-    character/genepool.xml
-    )
-
-source_group("Character File" FILES ${viewer_CHARACTER_FILES})
-
-set_source_files_properties(${viewer_CHARACTER_FILES}
-                            PROPERTIES HEADER_FILE_ONLY TRUE)
-if (NOT STANDALONE)
-    list(APPEND viewer_SOURCE_FILES ${viewer_CHARACTER_FILES})
-endif (NOT STANDALONE)
-
-if (WINDOWS)
-  file(GLOB viewer_INSTALLER_FILES installers/windows/*.nsi)
-
-  source_group("Installer Files" FILES ${viewer_INSTALLER_FILES})
-
-  set_source_files_properties(${viewer_INSTALLER_FILES}
-                              PROPERTIES HEADER_FILE_ONLY TRUE)
-
-  list(APPEND viewer_SOURCE_FILES ${viewer_INSTALLER_FILES})
-endif (WINDOWS)
-
-if (OPENAL)
-  set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_OPENAL")
-endif (OPENAL)
-
-if (FMOD)
-  set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMOD")
-
-  if (DARWIN)
-    set(fmodwrapper_SOURCE_FILES fmodwrapper.cpp)
-    add_library(fmodwrapper SHARED ${fmodwrapper_SOURCE_FILES})
-    set(fmodwrapper_needed_LIBRARIES ${FMOD_LIBRARY} ${CARBON_LIBRARY})
-    set_target_properties(
-      fmodwrapper
-      PROPERTIES
-      BUILD_WITH_INSTALL_RPATH 1
-      INSTALL_NAME_DIR "@executable_path/../Resources"
-      LINK_FLAGS "-unexported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/fmod_hidden_symbols.exp"
-      )
-    set(FMODWRAPPER_LIBRARY fmodwrapper)
-    target_link_libraries(fmodwrapper ${fmodwrapper_needed_LIBRARIES})
-  else (DARWIN)
-    # fmodwrapper unnecessary on linux or windows
-    set(FMODWRAPPER_LIBRARY ${FMOD_LIBRARY})
-  endif (DARWIN)
-endif (FMOD)
-
-set_source_files_properties(llstartup.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}")
-
-list(APPEND viewer_SOURCE_FILES ${viewer_HEADER_FILES})
-
-set_source_files_properties(${viewer_HEADER_FILES}
-                            PROPERTIES HEADER_FILE_ONLY TRUE)
-
-add_executable(${VIEWER_BINARY_NAME}
-    WIN32
-    MACOSX_BUNDLE
-    ${viewer_SOURCE_FILES}
-    )
-check_message_template(${VIEWER_BINARY_NAME})
-
-if (LLKDU_LIBRARY)
-  add_dependencies(${VIEWER_BINARY_NAME} ${LLKDU_LIBRARY})
-endif (LLKDU_LIBRARY)
-
-# add package files
-file(GLOB EVENT_HOST_SCRIPT_GLOB_LIST
-     ${CMAKE_CURRENT_SOURCE_DIR}/../viewer_components/*.py)
-list(APPEND EVENT_HOST_SCRIPTS ${EVENT_HOST_SCRIPT_GLOB_LIST})
-
-set(PACKAGE OFF CACHE BOOL
-    "Add a package target that builds an installer package.")
-
-if (WINDOWS)
-    if(MSVC71)
-        set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map /MAPINFO:LINES")
-    else(MSVC71)
-        set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map")
-    endif(MSVC71)
-    
-    set_target_properties(${VIEWER_BINARY_NAME}
-        PROPERTIES
-        # *TODO -reenable this once we get server usage sorted out
-        #LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:\"__tcmalloc\""
-        LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS"
-        LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO"
-        LINK_FLAGS_RELEASE ${release_flags}
-        )
-
-    # sets the 'working directory' for debugging from visual studio.
-    if (NOT UNATTENDED)
-        add_custom_command(
-            TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
-            COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe
-            ARGS
-              --solution 
-              ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln
-              --workingdir
-              ${VIEWER_BINARY_NAME}
-              ${CMAKE_CURRENT_SOURCE_DIR}
-            COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging."
-            )
-    endif (NOT UNATTENDED)
-
-    add_custom_command(
-        TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
-        COMMAND ${CMAKE_COMMAND}
-        ARGS
-          -E
-          copy_if_different
-          ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/messages/message_template.msg
-          ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message_template.msg
-        COMMENT "Copying message_template.msg to the runtime folder."
-        )
-
-    add_custom_command(
-        TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
-        COMMAND ${CMAKE_COMMAND}
-        ARGS
-          -E
-          copy_if_different
-          ${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml
-          ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message.xml
-        COMMENT "Copying message.xml to the runtime folder."
-        )
-       
-    if(WINDOWS)
-      # Copy Win Libs...
-      # This happens at build time, not config time. We can't glob files in this cmake.
-      # *FIX:Mani Write a sub script to glob the files...
-      # *FIX:Mani Use actually dependencies rather than bulk copy.
-      add_custom_command(
-        TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
-        COMMAND ${CMAKE_COMMAND}
-        ARGS
-          -E
-          copy_directory
-          ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}
-          ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
-        COMMENT "Copying staged dlls."
-        )
-
-      add_dependencies(${VIEWER_BINARY_NAME} stage_third_party_libs llcommon)
-      if(LLKDU_LIBRARY)
-	# kdu may not exist!
-	add_dependencies(${VIEWER_BINARY_NAME} llkdu)
-      endif(LLKDU_LIBRARY)
-    endif(WINDOWS)    
-
-    if (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
-      add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts)
-    endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
-        
-    add_custom_command(
-        OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat
-        COMMAND ${PYTHON_EXECUTABLE}
-        ARGS
-          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
-          --configuration=${CMAKE_CFG_INTDIR}
-          --channel=${VIEWER_CHANNEL}
-          --login_channel=${VIEWER_LOGIN_CHANNEL}
-          --grid=${GRID}
-          --source=${CMAKE_CURRENT_SOURCE_DIR}
-              --artwork=${ARTWORK_DIR}
-              --build=${CMAKE_CURRENT_BINARY_DIR}
-              --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
-              --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat
-        DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
-        )
-
-    add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit)
-
-    if (PACKAGE)
-      add_custom_command(
-          OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2
-          COMMAND ${PYTHON_EXECUTABLE}
-          ARGS
-            ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py
-            ${CMAKE_CURRENT_SOURCE_DIR}/..
-            ${CMAKE_CURRENT_BINARY_DIR}
-            ${CMAKE_CFG_INTDIR}
-
-          DEPENDS 
-            lleventhost 
-            ${EVENT_HOST_SCRIPTS}
-            ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py)
-
-      add_custom_target(package ALL 
-          DEPENDS 
-            ${CMAKE_CFG_INTDIR}/touched.bat)
-            # temporarily disable packaging of event_host until hg subrepos get
-            # sorted out on the parabuild cluster...
-            #${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2)
-      add_dependencies(package windows-updater windows-crash-logger)
-
-
-    endif (PACKAGE)
-endif (WINDOWS)
-
-target_link_libraries(${VIEWER_BINARY_NAME}
-    ${LLAUDIO_LIBRARIES}
-    ${LLCHARACTER_LIBRARIES}
-    ${LLIMAGE_LIBRARIES}
-    ${LLIMAGEJ2COJ_LIBRARIES}
-    ${LLINVENTORY_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLPLUGIN_LIBRARIES}
-    ${LLPRIMITIVE_LIBRARIES}
-    ${LLRENDER_LIBRARIES}
-    ${FREETYPE_LIBRARIES}
-    ${LLUI_LIBRARIES}
-    ${LLVFS_LIBRARIES}
-    ${LLWINDOW_LIBRARIES}
-    ${LLXML_LIBRARIES}
-    ${LLXUIXML_LIBRARIES}
-    ${LSCRIPT_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
-    ${NDOF_LIBRARY}
-    ${viewer_LIBRARIES}
-    ${BOOST_PROGRAM_OPTIONS_LIBRARY}
-    ${BOOST_REGEX_LIBRARY}
-    ${DBUSGLIB_LIBRARIES}
-    ${OPENGL_LIBRARIES}
-    ${FMODWRAPPER_LIBRARY}
-    ${OPENGL_LIBRARIES}
-    ${SDL_LIBRARY}
-    ${SMARTHEAP_LIBRARY}
-    ${UI_LIBRARIES}
-    ${WINDOWS_LIBRARIES}
-    ${XMLRPCEPI_LIBRARIES}
-    ${ELFIO_LIBRARIES}
-    ${LLLOGIN_LIBRARIES}
-    ${GOOGLE_PERFTOOLS_LIBRARIES}
-    )
-
-build_version(viewer)
-
-set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH
-    "Path to artwork files.")
-
-
-if (LINUX)
-  add_custom_command(
-      OUTPUT secondlife-stripped
-      COMMAND strip
-      ARGS --strip-debug -o secondlife-stripped ${VIEWER_BINARY_NAME}
-      DEPENDS ${VIEWER_BINARY_NAME}
-      )
-
-  set(product SecondLife-${ARCH}-${viewer_VERSION})
-
-  add_custom_command(
-      OUTPUT ${product}.tar.bz2
-      COMMAND ${PYTHON_EXECUTABLE}
-      ARGS
-        ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
-        --grid=${GRID}
-        --channel=${VIEWER_CHANNEL}
-        --login_channel=${VIEWER_LOGIN_CHANNEL}
-        --installer_name=${product}
-        --arch=${ARCH}
-        --source=${CMAKE_CURRENT_SOURCE_DIR}
-        --artwork=${ARTWORK_DIR}
-        --build=${CMAKE_CURRENT_BINARY_DIR}
-        --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged
-        --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
-      DEPENDS secondlife-stripped ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
-      )
-
-  add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_gstreamer010 media_plugin_webkit)
-
-  if (NOT INSTALL)
-    add_custom_target(package ALL DEPENDS ${product}.tar.bz2)
-    add_dependencies(package linux-crash-logger-strip-target)
-    add_dependencies(package linux-updater-strip-target)
-  endif (NOT INSTALL)
-endif (LINUX)
-
-if (DARWIN)
-  set(product "Second Life")
-  set_target_properties(
-    ${VIEWER_BINARY_NAME}
-    PROPERTIES
-    OUTPUT_NAME "${product}"
-    MACOSX_BUNDLE_INFO_STRING "info string - localize me"
-    MACOSX_BUNDLE_ICON_FILE "secondlife.icns"
-    MACOSX_BUNDLE_GUI_IDENTIFIER "Second Life"
-    MACOSX_BUNDLE_LONG_VERSION_STRING "ververver"
-    MACOSX_BUNDLE_BUNDLE_NAME "Second Life"
-    MACOSX_BUNDLE_SHORT_VERSION_STRING "asdf"
-    MACOSX_BUNDLE_BUNDLE_VERSION "asdf"
-    MACOSX_BUNDLE_COPYRIGHT "copyright linden lab 2007 - localize me and run me through a legal wringer"
-    )
-
-  add_custom_command(
-    TARGET ${VIEWER_BINARY_NAME} POST_BUILD
-    COMMAND ${PYTHON_EXECUTABLE}
-    ARGS
-      ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
-      --grid=${GRID}
-      --actions=copy
-      --configuration=${CMAKE_CFG_INTDIR}
-      --source=${CMAKE_CURRENT_SOURCE_DIR}
-      --artwork=${ARTWORK_DIR}
-      --build=${CMAKE_CURRENT_BINARY_DIR}
-      --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app
-    DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
-    )
-
-  add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit)
-
-  if (PACKAGE)
-      add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME}) 
-      add_dependencies(package mac-updater mac-crash-logger)
-
-      add_custom_command(
-        TARGET package POST_BUILD
-        COMMAND ${PYTHON_EXECUTABLE}
-        ARGS
-          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
-          --grid=${GRID}
-          --configuration=${CMAKE_CFG_INTDIR}
-          --channel=${VIEWER_CHANNEL}
-          --login_channel=${VIEWER_LOGIN_CHANNEL}
-          --source=${CMAKE_CURRENT_SOURCE_DIR}
-          --artwork=${ARTWORK_DIR}
-          --build=${CMAKE_CURRENT_BINARY_DIR}
-          --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app
-          --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
-        DEPENDS
-          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
-      )
-
-
-      add_custom_command(
-        TARGET package POST_BUILD
-        COMMAND ${PYTHON_EXECUTABLE}
-        ARGS
-          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
-          --grid=${GRID}
-          --configuration=${CMAKE_CFG_INTDIR}
-          --channel=${VIEWER_CHANNEL}
-          --login_channel=${VIEWER_LOGIN_CHANNEL}
-          --source=${CMAKE_CURRENT_SOURCE_DIR}
-          --artwork=${ARTWORK_DIR}
-          --build=${CMAKE_CURRENT_BINARY_DIR}
-          --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app
-          --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
-        DEPENDS
-          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
-      )
-
-  endif (PACKAGE)
-endif (DARWIN)
-
-if (INSTALL)
-  include(${CMAKE_CURRENT_SOURCE_DIR}/ViewerInstall.cmake)
-endif (INSTALL)
-
-# To add a viewer unit test, just add the test .cpp file below
-# This creates a separate test project per file listed.
-include(LLAddBuildTest)
-SET(viewer_TEST_SOURCE_FILES
-  llagentaccess.cpp
-  lldateutil.cpp
-  llmediadataclient.cpp
-  llviewerhelputil.cpp
-  lllogininstance.cpp
-  )
-set_source_files_properties(
-  ${viewer_TEST_SOURCE_FILES}
-  PROPERTIES
-    LL_TEST_ADDITIONAL_SOURCE_FILES llviewerprecompiledheaders.cpp
-  )
-LL_ADD_PROJECT_UNIT_TESTS(${VIEWER_BINARY_NAME} "${viewer_TEST_SOURCE_FILES}")
-
-#set(TEST_DEBUG on)
-set(test_sources llcapabilitylistener.cpp llviewerprecompiledheaders.cpp)
-set(test_libs 
-  ${LLMESSAGE_LIBRARIES} 
-  ${WINDOWS_LIBRARIES} 
-  ${LLVFS_LIBRARIES}
-  ${LLMATH_LIBRARIES}
-  ${LLCOMMON_LIBRARIES} 
-  ${GOOGLEMOCK_LIBRARIES}
-  )
-
-LL_ADD_INTEGRATION_TEST(llcapabilitylistener 
-  "${test_sources}" 
-  "${test_libs}"
-  ${PYTHON_EXECUTABLE}
-  "${CMAKE_SOURCE_DIR}/llmessage/tests/test_llsdmessage_peer.py"
-  )
-
-#ADD_VIEWER_BUILD_TEST(llmemoryview viewer)
-
-
-# Don't do these for DARWIN or LINUX here -- they're taken care of by viewer_manifest.py
-if (WINDOWS)
-  add_custom_command(
-      TARGET ${VIEWER_BINARY_NAME} POST_BUILD
-      COMMAND ${CMAKE_COMMAND}
-      ARGS
-        -E
-        make_directory
-        ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
-      COMMENT "Creating llplugin dir."
-      )
-
-  get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION)
-  add_custom_command(
-      TARGET ${VIEWER_BINARY_NAME} POST_BUILD
-      COMMAND ${CMAKE_COMMAND}
-      ARGS
-        -E
-        copy_if_different
-        ${BUILT_SLPLUGIN}
-        ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
-      COMMENT "Copying SLPlugin executable to the runtime folder."
-      )
-
-  get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
-    add_custom_command(
-        TARGET ${VIEWER_BINARY_NAME} POST_BUILD
-        COMMAND ${CMAKE_COMMAND}
-        ARGS
-          -E
-          copy_if_different
-          ${BUILT_WEBKIT_PLUGIN}
-          ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
-        COMMENT "Copying WebKit Plugin to the runtime folder."
-        )
-
-  get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION)
-    add_custom_command(
-        TARGET ${VIEWER_BINARY_NAME} POST_BUILD
-        COMMAND ${CMAKE_COMMAND}
-        ARGS
-          -E
-          copy_if_different
-          ${BUILT_QUICKTIME_PLUGIN}
-          ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
-        COMMENT "Copying Quicktime Plugin to the runtime folder."
-        )
-
-  #*******************************
-  # Copy media plugin support dlls
-  # Debug config runtime files required for the plugins
-  set(plugins_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug")
-  set(plugins_debug_files
-    libeay32.dll
-    qtcored4.dll
-    qtguid4.dll
-    qtnetworkd4.dll
-    qtopengld4.dll
-    qtwebkitd4.dll
-    ssleay32.dll
-    )
-  copy_if_different(
-    ${plugins_debug_src_dir}
-    "${CMAKE_CURRENT_BINARY_DIR}/Debug/llplugin"
-    out_targets
-    ${plugins_debug_files}
-    )
-  set(media_plugin_targets ${media_plugin_targets} ${out_targets})
-  
-  # Release & ReleaseDebInfo config runtime files required for the plugins
-  set(plugins_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release")
-  set(plugins_release_files
-    libeay32.dll
-    qtcore4.dll
-    qtgui4.dll
-    qtnetwork4.dll
-    qtopengl4.dll
-    qtwebkit4.dll
-    ssleay32.dll
-    )
-  copy_if_different(
-    ${plugins_release_src_dir}
-    "${CMAKE_CURRENT_BINARY_DIR}/Release/llplugin"
-    out_targets
-    ${plugins_release_files}
-    )
-  set(media_plugin_targets ${media_plugin_targets} ${out_targets})
-
-  copy_if_different(
-    ${plugins_release_src_dir}
-    "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin"
-    out_targets
-    ${plugins_release_files}
-    )
-  set(media_plugin_targets ${media_plugin_targets} ${out_targets})
-  
-  add_custom_target(copy_media_plugin_libs ALL
-    DEPENDS 
-    ${media_plugin_targets}
-    )
-
-  add_custom_command(
-    TARGET ${VIEWER_BINARY_NAME} POST_BUILD
-    COMMAND ${CMAKE_COMMAND}
-    ARGS
-      -E
-      copy_directory
-      ${CMAKE_BINARY_DIR}/test_apps/llplugintest/${CMAKE_CFG_INTDIR}/imageformats
-      ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin/imageformats
-    COMMENT "Copying llpluging imageformat libs."
-    )
-
-  add_dependencies(${VIEWER_BINARY_NAME} llmediaplugintest copy_media_plugin_libs)
-
-endif (WINDOWS)
-
+# -*- cmake -*-
+
+project(viewer)
+
+include(00-Common)
+include(Boost)
+include(BuildVersion)
+include(DBusGlib)
+include(DirectX)
+include(ELFIO)
+include(FMOD)
+include(OPENAL)
+include(FindOpenGL)
+include(LLAudio)
+include(LLCharacter)
+include(LLCommon)
+include(LLImage)
+include(LLImageJ2COJ)
+include(LLInventory)
+include(LLMath)
+include(LLMessage)
+include(LLPlugin)
+include(LLPrimitive)
+include(LLRender)
+include(LLUI)
+include(LLVFS)
+include(LLWindow)
+include(LLXML)
+include(LLXUIXML)
+include(LScript)
+include(Linking)
+include(NDOF)
+include(GooglePerfTools)
+include(TemplateCheck)
+include(UI)
+include(UnixInstall)
+include(LLKDU)
+include(ViewerMiscLibs)
+include(LLLogin)
+include(CMakeCopyIfDifferent)
+
+include_directories(
+    ${DBUSGLIB_INCLUDE_DIRS}
+    ${ELFIO_INCLUDE_DIR}
+    ${LLAUDIO_INCLUDE_DIRS}
+    ${LLCHARACTER_INCLUDE_DIRS}
+    ${LLCOMMON_INCLUDE_DIRS}
+    ${LLIMAGE_INCLUDE_DIRS}
+    ${LLINVENTORY_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLPLUGIN_INCLUDE_DIRS}
+    ${LLPRIMITIVE_INCLUDE_DIRS}
+    ${LLRENDER_INCLUDE_DIRS}
+    ${LLUI_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${LLWINDOW_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    ${LLXUIXML_INCLUDE_DIRS}
+    ${LSCRIPT_INCLUDE_DIRS}
+    ${LSCRIPT_INCLUDE_DIRS}/lscript_compile
+    ${LLLOGIN_INCLUDE_DIRS}
+    )
+
+set(viewer_SOURCE_FILES
+    llaccordionctrl.cpp
+    llaccordionctrltab.cpp
+    llagent.cpp
+    llagentaccess.cpp
+    llagentdata.cpp
+    llagentlanguage.cpp
+    llagentlistener.cpp
+    llagentpicksinfo.cpp
+    llagentpilot.cpp
+    llagentui.cpp
+    llagentwearables.cpp
+    llanimstatelabels.cpp
+    llappearancemgr.cpp
+    llappviewer.cpp
+    llappviewerlistener.cpp
+    llassetuploadqueue.cpp
+    llassetuploadresponders.cpp
+    llaudiosourcevo.cpp
+    llavataractions.cpp
+    llavatariconctrl.cpp
+    llavatarlist.cpp
+    llavatarlistitem.cpp
+    llavatarpropertiesprocessor.cpp
+    llbottomtray.cpp
+    llbox.cpp
+    llbreadcrumbview.cpp
+    llcallbacklist.cpp
+    llcallingcard.cpp
+    llcapabilitylistener.cpp
+    llcaphttpsender.cpp
+    llchannelmanager.cpp
+    llchatbar.cpp
+    llchathistory.cpp
+    llchatitemscontainerctrl.cpp
+    llchatmsgbox.cpp
+    llchiclet.cpp
+    llclassifiedinfo.cpp
+    llclassifiedstatsresponder.cpp
+    llcloud.cpp
+    llcolorswatch.cpp
+    llcommandhandler.cpp
+    llcommandlineparser.cpp
+    llcompilequeue.cpp
+    llconfirmationmanager.cpp
+    llcurrencyuimanager.cpp
+    llcylinder.cpp
+    lldateutil.cpp
+    lldebugmessagebox.cpp
+    lldebugview.cpp
+    lldelayedgestureerror.cpp
+    lldirpicker.cpp
+    lldndbutton.cpp
+    lldrawable.cpp
+    lldrawpool.cpp
+    lldrawpoolalpha.cpp
+    lldrawpoolavatar.cpp
+    lldrawpoolbump.cpp
+    lldrawpoolground.cpp
+    lldrawpoolsimple.cpp
+    lldrawpoolsky.cpp
+    lldrawpoolterrain.cpp
+    lldrawpooltree.cpp
+    lldrawpoolwater.cpp
+    lldrawpoolwlsky.cpp
+    lldriverparam.cpp
+    lldynamictexture.cpp
+    llemote.cpp
+    lleventinfo.cpp
+    lleventnotifier.cpp
+    lleventpoll.cpp
+    llexpandabletextbox.cpp
+    llface.cpp
+    llfasttimerview.cpp
+    llfavoritesbar.cpp
+    llfeaturemanager.cpp
+    llfilepicker.cpp
+    llfirstuse.cpp
+    llflexibleobject.cpp
+    llfloaterabout.cpp
+    llfloateractivespeakers.cpp
+    llfloateranimpreview.cpp
+    llfloaterauction.cpp
+    llfloateravatarpicker.cpp
+    llfloateravatartextures.cpp
+    llfloaterbeacons.cpp
+    llfloaterbuildoptions.cpp
+    llfloaterbulkpermission.cpp
+    llfloaterbump.cpp
+    llfloaterbuy.cpp
+    llfloaterbuycontents.cpp
+    llfloaterbuycurrency.cpp
+    llfloaterbuyland.cpp
+    llfloatercall.cpp
+    llfloatercamera.cpp
+    llfloaterchat.cpp
+    llfloaterchatterbox.cpp
+    llfloatercolorpicker.cpp
+    llfloatercustomize.cpp
+    llfloaterdaycycle.cpp
+    llfloaterenvsettings.cpp
+    llfloaterfonttest.cpp
+    llfloaterfriends.cpp
+    llfloatergesture.cpp
+    llfloatergodtools.cpp
+    llfloatergroupinvite.cpp
+    llfloatergroups.cpp
+    llfloaterhandler.cpp
+    llfloaterhardwaresettings.cpp
+    llfloaterhelpbrowser.cpp
+    llfloaterhud.cpp
+    llfloaterimagepreview.cpp
+    llfloaterinspect.cpp
+    llfloaterinventory.cpp
+    llfloaterjoystick.cpp
+    llfloaterlagmeter.cpp
+    llfloaterland.cpp
+    llfloaterlandholdings.cpp
+    llfloatermap.cpp
+    llfloatermediabrowser.cpp
+    llfloatermediasettings.cpp
+    llfloatermemleak.cpp
+    llfloaternamedesc.cpp
+    llfloaternotificationsconsole.cpp
+    llfloateropenobject.cpp
+    llfloaterparcel.cpp
+    llfloaterpay.cpp
+    llfloaterperms.cpp
+    llfloaterpostcard.cpp
+    llfloaterpostprocess.cpp
+    llfloaterpreference.cpp
+    llfloaterproperties.cpp
+    llfloaterregioninfo.cpp
+    llfloaterreporter.cpp
+    llfloaterscriptdebug.cpp
+    llfloatersearch.cpp
+    llfloatersellland.cpp
+    llfloatersettingsdebug.cpp
+    llfloatersnapshot.cpp
+    llfloatertelehub.cpp
+    llfloatertestinspectors.cpp
+    llfloatertestlistview.cpp
+    llfloatertools.cpp
+    llfloatertopobjects.cpp
+    llfloatertos.cpp
+    llfloateruipreview.cpp
+    llfloaterurldisplay.cpp
+    llfloaterurlentry.cpp
+    llfloatervoicedevicesettings.cpp
+    llfloaterwater.cpp
+    llfloaterwhitelistentry.cpp
+    llfloaterwindlight.cpp
+    llfloaterworldmap.cpp
+    llfoldertype.cpp
+    llfolderview.cpp
+    llfolderviewitem.cpp
+    llfollowcam.cpp
+    llfriendcard.cpp
+    llgesturemgr.cpp
+    llglsandbox.cpp
+    llgroupactions.cpp
+    llgrouplist.cpp
+    llgroupmgr.cpp
+    llgroupnotify.cpp
+    llhomelocationresponder.cpp
+    llhudeffect.cpp
+    llhudeffectbeam.cpp
+    llhudeffectlookat.cpp
+    llhudeffectpointat.cpp
+    llhudeffecttrail.cpp
+    llhudicon.cpp
+    llhudmanager.cpp
+    llhudobject.cpp
+    llhudrender.cpp
+    llhudtext.cpp
+    llhudview.cpp
+    llimcontrolpanel.cpp
+    llimfloater.cpp
+    llimhandler.cpp
+    llimpanel.cpp
+    llimview.cpp
+    llinspect.cpp
+    llinspectavatar.cpp
+    llinspectgroup.cpp
+    llinspectobject.cpp
+    llinventorybridge.cpp
+    llinventoryclipboard.cpp
+    llinventoryfilter.cpp
+    llinventoryfunctions.cpp
+    llinventorymodel.cpp
+    llinventorypanel.cpp
+    llinventorysubtreepanel.cpp
+    lljoystickbutton.cpp
+    lllandmarkactions.cpp
+    lllandmarklist.cpp
+    lllistbrowser.cpp
+    lllistview.cpp
+    lllocaltextureobject.cpp
+    lllocationhistory.cpp
+    lllocationinputctrl.cpp
+    lllogchat.cpp
+    llloginhandler.cpp
+    lllogininstance.cpp
+    llmanip.cpp
+    llmaniprotate.cpp
+    llmanipscale.cpp
+    llmaniptranslate.cpp
+    llmapresponders.cpp
+    llmediactrl.cpp
+    llmediadataclient.cpp
+    llmediaremotectrl.cpp
+    llmemoryview.cpp
+    llmenucommands.cpp
+    llmetricperformancetester.cpp
+    llmimetypes.cpp
+    llmorphview.cpp
+    llmoveview.cpp
+    llmutelist.cpp
+    llnamebox.cpp
+    llnameeditor.cpp
+    llnamelistctrl.cpp
+    llnavigationbar.cpp
+    llnearbychat.cpp
+    llnearbychatbar.cpp
+    llnearbychathandler.cpp
+    llnetmap.cpp
+    llnotificationalerthandler.cpp
+    llnotificationgrouphandler.cpp
+    llnotificationmanager.cpp
+    llnotificationscripthandler.cpp
+    llnotificationtiphandler.cpp
+    llnotify.cpp
+    lloutputmonitorctrl.cpp
+    lloverlaybar.cpp
+    llpanelappearance.cpp
+    llpanelappearancetab.cpp
+    llpanelavatar.cpp
+    llpanelavatarrow.cpp
+    llpanelavatartag.cpp
+    llpanelblockedlist.cpp
+    llpanelclassified.cpp
+    llpanelcontents.cpp
+    llpaneleditwearable.cpp
+    llpanelevent.cpp
+    llpanelface.cpp
+    llpanelgroup.cpp
+    llpanelgroupgeneral.cpp
+    llpanelgroupinvite.cpp
+    llpanelgrouplandmoney.cpp
+    llpanelgroupnotices.cpp
+    llpanelgrouproles.cpp
+    llpanelimcontrolpanel.cpp
+    llpanelland.cpp
+    llpanellandaudio.cpp
+    llpanellandmarks.cpp
+    llpanellandmedia.cpp
+    llpanellogin.cpp
+    llpanellookinfo.cpp
+    llpanellooks.cpp
+    llpanelmaininventory.cpp
+    llpanelmedia.cpp
+    llpanelmediasettingsgeneral.cpp
+    llpanelmediasettingspermissions.cpp
+    llpanelmediasettingssecurity.cpp
+    llpanelmeprofile.cpp
+    llpanelobject.cpp
+    llpanelobjectinventory.cpp
+    llpanelpeople.cpp
+    llpanelpeoplemenus.cpp
+    llpanelpermissions.cpp
+    llpanelpick.cpp
+    llpanelpicks.cpp
+    llpanelplace.cpp
+    llpanelplaceinfo.cpp
+    llpanelplaces.cpp
+    llpanelplacestab.cpp
+    llpanelprimmediacontrols.cpp
+    llpanelprofile.cpp
+    llpanelprofileview.cpp
+    llpanelshower.cpp
+    llpanelteleporthistory.cpp
+    llpanelvolume.cpp
+    llparcelselection.cpp
+    llparticipantlist.cpp
+    llpatchvertexarray.cpp
+    llplacesinventorybridge.cpp
+    llpolymesh.cpp
+    llpolymorph.cpp
+    llpreview.cpp
+    llpreviewanim.cpp
+    llpreviewgesture.cpp
+    llpreviewnotecard.cpp
+    llpreviewscript.cpp
+    llpreviewsound.cpp
+    llpreviewtexture.cpp
+    llproductinforequest.cpp
+    llprogressview.cpp
+    llrecentpeople.cpp
+    llregionposition.cpp
+    llremoteparcelrequest.cpp
+    llsavedsettingsglue.cpp
+    llscreenchannel.cpp
+    llscrollingpanelparam.cpp
+    llsearchcombobox.cpp
+    llsearchhistory.cpp
+    llselectmgr.cpp
+    llsidepanelinventory.cpp
+    llsidepanelobjectinfo.cpp
+    llsidetray.cpp
+    llsidetraypanelcontainer.cpp
+    llsky.cpp
+    llslurl.cpp
+    llspatialpartition.cpp
+    llspeakers.cpp
+    llsplitbutton.cpp
+    llsprite.cpp
+    llstartup.cpp
+    llstatusbar.cpp
+    llstylemap.cpp
+    llsurface.cpp
+    llsurfacepatch.cpp
+    llsyswellitem.cpp
+    llsyswellwindow.cpp
+    llteleporthistory.cpp
+    llteleporthistorystorage.cpp
+    lltexglobalcolor.cpp
+    lltexlayer.cpp
+    lltexlayerparams.cpp
+    lltextureatlas.cpp
+    lltextureatlasmanager.cpp
+    lltexturecache.cpp
+    lltexturectrl.cpp
+    lltexturefetch.cpp
+    lltextureview.cpp
+    lltoast.cpp
+    lltoastalertpanel.cpp
+    lltoastgroupnotifypanel.cpp
+    lltoastimpanel.cpp
+    lltoastnotifypanel.cpp
+    lltoastpanel.cpp
+    lltool.cpp
+    lltoolbar.cpp
+    lltoolbrush.cpp
+    lltoolcomp.cpp
+    lltooldraganddrop.cpp
+    lltoolface.cpp
+    lltoolfocus.cpp
+    lltoolgrab.cpp
+    lltoolgun.cpp
+    lltoolindividual.cpp
+    lltoolmgr.cpp
+    lltoolmorph.cpp
+    lltoolobjpicker.cpp
+    lltoolpie.cpp
+    lltoolpipette.cpp
+    lltoolplacer.cpp
+    lltoolselect.cpp
+    lltoolselectland.cpp
+    lltoolselectrect.cpp
+    lltracker.cpp
+    lltransientdockablefloater.cpp
+    lltransientfloatermgr.cpp
+    lluilistener.cpp
+    lluploaddialog.cpp
+    llurl.cpp
+    llurldispatcher.cpp
+    llurlhistory.cpp
+    llurllineeditorctrl.cpp
+    llurlsimstring.cpp
+    llurlwhitelist.cpp
+    llvectorperfoptions.cpp
+    llviewchildren.cpp
+    llviewerassetstorage.cpp
+    llvieweraudio.cpp
+    llviewercamera.cpp
+    llviewercontrol.cpp
+    llviewercontrollistener.cpp
+    llviewerdisplay.cpp
+    llviewerfloaterreg.cpp
+    llviewergenericmessage.cpp
+    llviewergesture.cpp    
+    llviewerhelp.cpp
+    llviewerhelputil.cpp
+    llviewerinventory.cpp
+    llviewerjoint.cpp
+    llviewerjointattachment.cpp
+    llviewerjointmesh.cpp
+    llviewerjointmesh_sse.cpp
+    llviewerjointmesh_sse2.cpp
+    llviewerjointmesh_vec.cpp
+    llviewerjoystick.cpp
+    llviewerkeyboard.cpp
+    llviewerlayer.cpp
+    llviewermedia.cpp
+    llviewermedia_streamingaudio.cpp
+    llviewermediafocus.cpp
+    llviewermenu.cpp
+    llviewermenufile.cpp
+    llviewermessage.cpp
+    llviewernetwork.cpp
+    llviewerobject.cpp
+    llviewerobjectlist.cpp
+    llviewerparcelmedia.cpp
+    llviewerparcelmediaautoplay.cpp
+    llviewerparcelmgr.cpp
+    llviewerparceloverlay.cpp
+    llviewerpartsim.cpp
+    llviewerpartsource.cpp
+    llviewerregion.cpp
+    llviewershadermgr.cpp
+    llviewerstats.cpp
+    llviewertexteditor.cpp
+    llviewertexture.cpp
+    llviewertextureanim.cpp
+    llviewertexturelist.cpp
+    llviewerthrottle.cpp
+    llviewervisualparam.cpp
+    llviewerwindow.cpp
+    llviewerwindowlistener.cpp
+    llvlcomposition.cpp
+    llvlmanager.cpp
+    llvoavatar.cpp
+    llvoavatardefines.cpp
+    llvoavatarself.cpp
+    llvocache.cpp
+    llvoclouds.cpp
+    llvograss.cpp
+    llvoground.cpp
+    llvoicechannel.cpp
+    llvoiceclient.cpp
+    llvoicecontrolpanel.cpp
+    llvoiceremotectrl.cpp
+    llvoicevisualizer.cpp
+    llvoinventorylistener.cpp
+    llvopartgroup.cpp
+    llvosky.cpp
+    llvosurfacepatch.cpp
+    llvotextbubble.cpp
+    llvotree.cpp
+    llvovolume.cpp
+    llvowater.cpp
+    llvowlsky.cpp
+    llwatchdog.cpp
+    llwaterparammanager.cpp
+    llwaterparamset.cpp
+    llwearable.cpp
+    llwearabledictionary.cpp
+    llwearablelist.cpp
+    llweb.cpp
+    llwind.cpp
+    llwlanimator.cpp
+    llwldaycycle.cpp
+    llwlparammanager.cpp
+    llwlparamset.cpp
+    llworld.cpp
+    llworldmap.cpp
+    llworldmapview.cpp
+    llxmlrpclistener.cpp
+    llxmlrpctransaction.cpp
+    noise.cpp
+    pipeline.cpp
+    )
+
+set(VIEWER_BINARY_NAME "secondlife-bin" CACHE STRING
+    "The name of the viewer executable to create.")
+
+if (LINUX)
+  # We can't set these flags for Darwin, because they get passed to
+  # the PPC compiler.  Ugh.
+
+  set_source_files_properties(
+      llviewerjointmesh_sse.cpp
+      PROPERTIES COMPILE_FLAGS "-msse -mfpmath=sse"
+      )
+  set_source_files_properties(
+      llviewerjointmesh_sse2.cpp
+      PROPERTIES COMPILE_FLAGS "-msse2 -mfpmath=sse"
+      )
+endif (LINUX)
+
+set(viewer_HEADER_FILES
+    CMakeLists.txt
+    ViewerInstall.cmake
+    llaccordionctrl.h
+    llaccordionctrltab.h
+    llagent.h
+    llagentaccess.h
+    llagentdata.h
+    llagentlanguage.h
+    llagentlistener.h
+    llagentpicksinfo.h
+    llagentpilot.h
+    llagentui.h
+    llagentwearables.h
+    llanimstatelabels.h
+    llappearance.h
+    llappearancemgr.h
+    llappviewer.h
+    llappviewerlistener.h
+    llassetuploadqueue.h
+    llassetuploadresponders.h
+    llaudiosourcevo.h
+    llavataractions.h
+    llavatariconctrl.h
+    llavatarlist.h
+    llavatarlistitem.h
+    llavatarpropertiesprocessor.h
+    llbottomtray.h
+    llbox.h
+    llbreadcrumbview.h
+    llcallbacklist.h
+    llcallingcard.h
+    llcapabilitylistener.h
+    llcapabilityprovider.h
+    llcaphttpsender.h
+    llchannelmanager.h
+    llchatbar.h
+    llchathistory.h
+    llchatitemscontainerctrl.h
+    llchatmsgbox.h
+    llchiclet.h
+    llclassifiedinfo.h
+    llclassifiedstatsresponder.h
+    llcloud.h
+    llcolorswatch.h
+    llcommandhandler.h
+    llcommandlineparser.h
+    llcompilequeue.h
+    llconfirmationmanager.h
+    llcurrencyuimanager.h
+    llcylinder.h
+    lldateutil.h
+    lldebugmessagebox.h
+    lldebugview.h
+    lldelayedgestureerror.h
+    lldirpicker.h
+    lldndbutton.h
+    lldrawable.h
+    lldrawpool.h
+    lldrawpoolalpha.h
+    lldrawpoolavatar.h
+    lldrawpoolbump.h
+    lldrawpoolclouds.h
+    lldrawpoolground.h
+    lldrawpoolsimple.h
+    lldrawpoolsky.h
+    lldrawpoolterrain.h
+    lldrawpooltree.h
+    lldrawpoolwater.h
+    lldrawpoolwlsky.h
+    lldriverparam.h
+    lldynamictexture.h
+    llemote.h
+    lleventinfo.h
+    lleventnotifier.h
+    lleventpoll.h
+    llexpandabletextbox.h
+    llface.h
+    llfasttimerview.h
+    llfavoritesbar.h
+    llfeaturemanager.h
+    llfilepicker.h
+    llfirstuse.h
+    llflexibleobject.h
+    llfloaterabout.h
+    llfloateractivespeakers.h
+    llfloateranimpreview.h
+    llfloaterauction.h
+    llfloateravatarpicker.h
+    llfloateravatartextures.h
+    llfloaterbeacons.h
+    llfloaterbuildoptions.h
+    llfloaterbulkpermission.h
+    llfloaterbump.h
+    llfloaterbuy.h
+    llfloaterbuycontents.h
+    llfloaterbuycurrency.h
+    llfloaterbuyland.h
+    llfloatercall.h
+    llfloatercamera.h
+    llfloaterchat.h
+    llfloaterchatterbox.h
+    llfloatercolorpicker.h
+    llfloatercustomize.h
+    llfloaterdaycycle.h
+    llfloaterenvsettings.h
+    llfloaterfonttest.h
+    llfloaterfriends.h
+    llfloatergesture.h
+    llfloatergodtools.h
+    llfloatergroupinvite.h
+    llfloatergroups.h
+    llfloaterhandler.h
+    llfloaterhardwaresettings.h
+    llfloaterhelpbrowser.h
+    llfloaterhud.h
+    llfloaterimagepreview.h
+    llfloaterinspect.h
+    llfloaterinventory.h
+    llfloaterjoystick.h
+    llfloaterlagmeter.h
+    llfloaterland.h
+    llfloaterlandholdings.h
+    llfloatermap.h
+    llfloatermediabrowser.h
+    llfloatermediasettings.h
+    llfloatermemleak.h
+    llfloaternamedesc.h
+    llfloaternotificationsconsole.h
+    llfloateropenobject.h
+    llfloaterparcel.h
+    llfloaterpay.h
+    llfloaterperms.h
+    llfloaterpostcard.h
+    llfloaterpostprocess.h
+    llfloaterpreference.h
+    llfloaterproperties.h
+    llfloaterregioninfo.h
+    llfloaterreporter.h
+    llfloaterscriptdebug.h
+    llfloatersearch.h
+    llfloatersellland.h
+    llfloatersettingsdebug.h
+    llfloatersnapshot.h
+    llfloatertelehub.h
+    llfloatertestinspectors.h
+    llfloatertestlistview.h
+    llfloatertools.h
+    llfloatertopobjects.h
+    llfloatertos.h
+    llfloateruipreview.h
+    llfloaterurldisplay.h
+    llfloaterurlentry.h
+    llfloatervoicedevicesettings.h
+    llfloaterwater.h
+    llfloaterwhitelistentry.h
+    llfloaterwindlight.h
+    llfloaterworldmap.h
+    llfoldertype.h
+    llfolderview.h
+    llfoldervieweventlistener.h
+    llfolderviewitem.h
+    llfollowcam.h
+    llfriendcard.h
+    llgesturemgr.h
+    llgroupactions.h
+    llgrouplist.h
+    llgroupmgr.h
+    llgroupnotify.h
+    llhomelocationresponder.h
+    llhudeffect.h
+    llhudeffectbeam.h
+    llhudeffectlookat.h
+    llhudeffectpointat.h
+    llhudeffecttrail.h
+    llhudicon.h
+    llhudmanager.h
+    llhudobject.h
+    llhudrender.h
+    llhudtext.h
+    llhudview.h
+    llimcontrolpanel.h
+    llimfloater.h
+    llimpanel.h
+    llimview.h
+    llinspect.h
+    llinspectavatar.h
+    llinspectgroup.h
+    llinspectobject.h
+    llinventorybridge.h
+    llinventoryclipboard.h
+    llinventoryfilter.h
+    llinventoryfunctions.h
+    llinventorymodel.h
+    llinventorypanel.h
+    llinventorysubtreepanel.h
+    lljoystickbutton.h
+    lllandmarkactions.h
+    lllandmarklist.h
+    lllightconstants.h
+    lllistbrowser.h
+    lllistview.h
+    lllocaltextureobject.h
+    lllocationhistory.h
+    lllocationinputctrl.h
+    lllogchat.h
+    llloginhandler.h
+    lllogininstance.h
+    llmanip.h
+    llmaniprotate.h
+    llmanipscale.h
+    llmaniptranslate.h
+    llmapresponders.h
+    llmediactrl.h
+    llmediadataclient.h
+    llmediaremotectrl.h
+    llmemoryview.h
+    llmenucommands.h
+    llmetricperformancetester.h
+    llmimetypes.h
+    llmorphview.h
+    llmoveview.h
+    llmutelist.h
+    llnamebox.h
+    llnameeditor.h
+    llnamelistctrl.h
+    llnavigationbar.h
+    llnearbychat.h
+    llnearbychatbar.h
+    llnearbychathandler.h
+    llnetmap.h
+    llnotificationhandler.h
+    llnotificationmanager.h
+    llnotify.h
+    lloutputmonitorctrl.h
+    lloverlaybar.h
+    llpanelappearance.h
+    llpanelappearancetab.h
+    llpanelavatar.h
+    llpanelavatarrow.h
+    llpanelavatartag.h
+    llpanelblockedlist.h
+    llpanelclassified.h
+    llpanelcontents.h
+    llpaneleditwearable.h
+    llpanelevent.h
+    llpanelface.h
+    llpanelgroup.h
+    llpanelgroupgeneral.h
+    llpanelgroupinvite.h
+    llpanelgrouplandmoney.h
+    llpanelgroupnotices.h
+    llpanelgrouproles.h
+    llpanelimcontrolpanel.h
+    llpanelinventory.h
+    llpanelland.h
+    llpanellandaudio.h
+    llpanellandmarks.h
+    llpanellandmedia.h
+    llpanellogin.h
+    llpanellookinfo.h
+    llpanellooks.h
+    llpanelmaininventory.h
+    llpanelmedia.h
+    llpanelmediasettingsgeneral.h
+    llpanelmediasettingspermissions.h
+    llpanelmediasettingssecurity.h
+    llpanelmeprofile.h
+    llpanelobject.h
+    llpanelobjectinventory.h
+    llpanelpeople.h
+    llpanelpeoplemenus.h
+    llpanelpermissions.h
+    llpanelpick.h
+    llpanelpicks.h
+    llpanelplace.h
+    llpanelplaceinfo.h
+    llpanelplaces.h
+    llpanelplacestab.h
+    llpanelprimmediacontrols.h
+    llpanelprofile.h
+    llpanelprofileview.h
+    llpanelshower.h
+    llpanelteleporthistory.h
+    llpanelvolume.h
+    llparcelselection.h
+    llparticipantlist.h
+    llpatchvertexarray.h
+    llplacesinventorybridge.h
+    llpolymesh.h
+    llpolymorph.h
+    llpreview.h
+    llpreviewanim.h
+    llpreviewgesture.h
+    llpreviewnotecard.h
+    llpreviewscript.h
+    llpreviewsound.h
+    llpreviewtexture.h
+    llproductinforequest.h
+    llprogressview.h
+    llrecentpeople.h
+    llregionposition.h
+    llremoteparcelrequest.h
+    llresourcedata.h
+    llrootview.h
+    llsavedsettingsglue.h
+    llscreenchannel.h
+    llscrollingpanelparam.h
+    llsearchcombobox.h
+    llsearchhistory.h
+    llselectmgr.h
+    llsidepanelinventory.h
+    llsidepanelobjectinfo.h
+    llsidetray.h
+    llsidetraypanelcontainer.h
+    llsky.h
+    llslurl.h
+    llspatialpartition.h
+    llspeakers.h
+    llsplitbutton.h
+    llsprite.h
+    llstartup.h
+    llstatusbar.h
+    llstylemap.h
+    llsurface.h
+    llsurfacepatch.h
+    llsyswellitem.h
+    llsyswellwindow.h    
+    lltable.h
+    llteleporthistory.h
+    llteleporthistorystorage.h
+    lltexglobalcolor.h
+    lltexlayer.h
+    lltexlayerparams.h
+    lltextureatlas.h
+    lltextureatlasmanager.h
+    lltexturecache.h
+    lltexturectrl.h
+    lltexturefetch.h
+    lltextureview.h
+    lltoast.h
+    lltoastalertpanel.h
+    lltoastgroupnotifypanel.h
+    lltoastimpanel.h
+    lltoastnotifypanel.h
+    lltoastpanel.h
+    lltool.h
+    lltoolbar.h
+    lltoolbrush.h
+    lltoolcomp.h
+    lltooldraganddrop.h
+    lltoolface.h
+    lltoolfocus.h
+    lltoolgrab.h
+    lltoolgun.h
+    lltoolindividual.h
+    lltoolmgr.h
+    lltoolmorph.h
+    lltoolobjpicker.h
+    lltoolpie.h
+    lltoolpipette.h
+    lltoolplacer.h
+    lltoolselect.h
+    lltoolselectland.h
+    lltoolselectrect.h
+    lltracker.h
+    lltransientdockablefloater.h
+    lltransientfloatermgr.h
+    lluiconstants.h
+    lluilistener.h
+    lluploaddialog.h
+    llurl.h
+    llurldispatcher.h
+    llurlhistory.h
+    llurllineeditorctrl.h
+    llurlsimstring.h
+    llurlwhitelist.h
+    llvectorperfoptions.h
+    llviewchildren.h
+    llviewerassetstorage.h
+    llvieweraudio.h
+    llviewerbuild.h
+    llviewercamera.h
+    llviewercontrol.h
+    llviewercontrollistener.h
+    llviewerdisplay.h
+    llviewerfloaterreg.h
+    llviewergenericmessage.h
+    llviewergesture.h    
+    llviewerhelp.h
+    llviewerinventory.h
+    llviewerjoint.h
+    llviewerjointattachment.h
+    llviewerjointmesh.h
+    llviewerjoystick.h
+    llviewerkeyboard.h
+    llviewerlayer.h
+    llviewermedia.h
+    llviewermediafocus.h
+    llviewermediaobserver.h
+    llviewermenu.h
+    llviewermenufile.h
+    llviewermessage.h
+    llviewernetwork.h
+    llviewerobject.h
+    llviewerobjectlist.h
+    llviewerparcelmedia.h
+    llviewerparcelmediaautoplay.h
+    llviewerparcelmgr.h
+    llviewerparceloverlay.h
+    llviewerpartsim.h
+    llviewerpartsource.h
+    llviewerprecompiledheaders.h
+    llviewerregion.h
+    llviewershadermgr.h
+    llviewerstats.h
+    llviewertexteditor.h
+    llviewertexture.h
+    llviewertextureanim.h
+    llviewertexturelist.h
+    llviewerthrottle.h
+    llviewervisualparam.h
+    llviewerwindow.h
+    llviewerwindowlistener.h
+    llvlcomposition.h
+    llvlmanager.h
+    llvoavatar.h
+    llvoavatardefines.h
+    llvoavatarself.h
+    llvocache.h
+    llvoclouds.h
+    llvograss.h
+    llvoground.h
+    llvoicechannel.h
+    llvoiceclient.h
+    llvoicecontrolpanel.h
+    llvoiceremotectrl.h
+    llvoicevisualizer.h
+    llvoinventorylistener.h
+    llvopartgroup.h
+    llvosky.h
+    llvosurfacepatch.h
+    llvotextbubble.h
+    llvotree.h
+    llvotreenew.h
+    llvovolume.h
+    llvowater.h
+    llvowlsky.h
+    llwatchdog.h
+    llwaterparammanager.h
+    llwaterparamset.h
+    llwearable.h
+    llwearabledictionary.h
+    llwearablelist.h
+    llweb.h
+    llwind.h
+    llwindebug.h
+    llwlanimator.h
+    llwldaycycle.h
+    llwlparammanager.h
+    llwlparamset.h
+    llworld.h
+    llworldmap.h
+    llworldmapview.h
+    llxmlrpclistener.h
+    llxmlrpctransaction.h
+    macmain.h
+    noise.h
+    pipeline.h
+    randgauss.h
+    VertexCache.h
+    VorbisFramework.h
+    )
+
+source_group("CMake Rules" FILES ViewerInstall.cmake)
+
+if (DARWIN)
+  LIST(APPEND viewer_SOURCE_FILES llappviewermacosx.cpp)
+
+  find_library(AGL_LIBRARY AGL)
+  find_library(APPKIT_LIBRARY AppKit)
+  find_library(COCOA_LIBRARY Cocoa)
+  find_library(IOKIT_LIBRARY IOKit)
+
+  set(viewer_LIBRARIES
+    ${COCOA_LIBRARY}
+    ${AGL_LIBRARY}
+    ${IOKIT_LIBRARY}
+    )
+
+  # Add resource files to the project.
+  set(viewer_RESOURCE_FILES
+    secondlife.icns
+    macview.r
+    gpu_table.txt
+    Info-SecondLife.plist
+    SecondLife.nib/
+    # CMake doesn't seem to support Xcode language variants well just yet
+    English.lproj/InfoPlist.strings
+    English.lproj/language.txt
+    German.lproj/language.txt
+    Japanese.lproj/language.txt
+    Korean.lproj/language.txt
+    )
+  set_source_files_properties(
+    ${viewer_RESOURCE_FILES}
+    PROPERTIES
+    HEADER_FILE_ONLY TRUE
+    #MACOSX_PACKAGE_LOCATION Resources #don't do this! this tells cmake to copy the files.
+    )
+  SOURCE_GROUP("Resources" FILES ${viewer_RESOURCE_FILES})
+  list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES})
+endif (DARWIN)
+
+if (LINUX)
+    LIST(APPEND viewer_SOURCE_FILES llappviewerlinux.cpp)
+    LIST(APPEND viewer_SOURCE_FILES llappviewerlinux_api_dbus.cpp)
+    SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed")
+
+    set(viewer_LIBRARIES
+        Xinerama
+        )
+endif (LINUX)
+
+if (WINDOWS)
+    list(APPEND viewer_SOURCE_FILES
+         llappviewerwin32.cpp
+         llwindebug.cpp
+         )
+
+    list(APPEND viewer_HEADER_FILES
+         llappviewerwin32.h
+         llwindebug.h
+         )
+
+    # precompiled header configuration
+    # llviewerprecompiledheaders.cpp generates
+    # the .pch file.
+    # All sources added to viewer_SOURCE_FILES 
+    # at this point use it.
+    set_source_files_properties(llviewerprecompiledheaders.cpp
+        PROPERTIES
+        COMPILE_FLAGS "/Ycllviewerprecompiledheaders.h"
+        )        
+    foreach( src_file ${viewer_SOURCE_FILES} )
+        set_source_files_properties(
+            ${src_file}
+            PROPERTIES
+            COMPILE_FLAGS "/Yullviewerprecompiledheaders.h"
+            )        
+    endforeach( src_file ${viewer_SOURCE_FILES} )
+    list(APPEND viewer_SOURCE_FILES llviewerprecompiledheaders.cpp)
+    # llstartup.cpp needs special symbols for audio libraries, so it resets
+    # COMPILE_FLAGS below.  Make sure it maintains precompiled header settings.
+    set(LLSTARTUP_COMPILE_FLAGS 
+        "${LLSTARTUP_COMPILE_FLAGS} /Yullviewerprecompiledheaders.h")
+    
+    # Add resource files to the project.
+    # viewerRes.rc is the only buildable file, but
+    # the rest are all dependencies of it.
+    set(viewer_RESOURCE_FILES
+        res/arrow.cur
+        res/arrowcop.cur
+        res/arrowcopmulti.cur
+        res/arrowdrag.cur
+        res/circleandline.cur
+        res/icon1.ico
+        res/llarrow.cur
+        res/llarrowdrag.cur
+        res/llarrowdragmulti.cur
+        res/llarrowlocked.cur
+        res/llgrablocked.cur
+        res/llno.cur
+        res/llnolocked.cur
+        res/lltoolcamera.cur
+        res/lltoolcreate.cur
+        res/lltoolfocus.cur
+        res/lltoolgrab.cur
+        res/lltoolland.cur
+        res/lltoolpan.cur
+        res/lltoolpipette.cur
+        res/lltoolrotate.cur
+        res/lltoolscale.cur
+        res/lltooltranslate.cur
+        res/lltoolzoomin.cur
+        res/lltoolzoomout.cur
+        res/ll_icon.BMP
+        res/ll_icon.ico
+        res/resource.h
+        res/toolpickobject.cur
+        res/toolpickobject2.cur
+        res/toolpickobject3.cur
+        res/toolpipette.cur
+        )
+
+    set_source_files_properties(${viewer_RESOURCE_FILES}
+                                PROPERTIES HEADER_FILE_ONLY TRUE)
+
+    set(viewer_RESOURCE_FILES 
+        res/viewerRes.rc 
+        ${viewer_RESOURCE_FILES}
+        )
+
+    SOURCE_GROUP("Resource Files" FILES ${viewer_RESOURCE_FILES})
+
+    if (NOT STANDALONE)
+        list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES})
+    endif (NOT STANDALONE)	
+
+    find_library(DINPUT_LIBRARY dinput8 ${DIRECTX_LIBRARY_DIR})
+    find_library(DXGUID_LIBRARY dxguid ${DIRECTX_LIBRARY_DIR})
+    mark_as_advanced(
+        DINPUT_LIBRARY
+        DXGUID_LIBRARY
+        )
+
+    set(viewer_LIBRARIES
+        ${WINDOWS_LIBRARIES}
+        comdlg32
+        ${DINPUT_LIBRARY}
+        ${DXGUID_LIBRARY}
+        kernel32
+        odbc32
+        odbccp32
+        ole32
+        oleaut32
+        opengl32
+        shell32
+        Vfw32
+        winspool
+        )
+
+    find_library(INTEL_MEMOPS_LIBRARY
+                 NAMES ll_intel_memops
+                 PATHS
+                 optimized ${ARCH_PREBUILT_DIRS_RELEASE}
+                 debug ${ARCH_PREBUILT_DIRS_DEBUG}
+                 )
+    mark_as_advanced(INTEL_MEMOPS_LIBRARY)
+
+    if (INTEL_MEMOPS_LIBRARY)
+      list(APPEND viewer_LIBRARIES ${INTEL_MEMOPS_LIBRARY})
+    endif (INTEL_MEMOPS_LIBRARY)
+
+    use_prebuilt_binary(dbghelp)
+endif (WINDOWS)
+
+# Add the xui files. This is handy for searching for xui elements
+# from within the IDE.
+set(viewer_XUI_FILES
+    skins/default/colors.xml
+    skins/default/textures/textures.xml
+
+
+
+    )
+file(GLOB DEFAULT_XUI_FILE_GLOB_LIST
+     ${CMAKE_CURRENT_SOURCE_DIR}/skins/default/xui/en/*.xml)
+list(APPEND viewer_XUI_FILES ${DEFAULT_XUI_FILE_GLOB_LIST})
+
+file(GLOB DEFAULT_WIDGET_FILE_GLOB_LIST
+     ${CMAKE_CURRENT_SOURCE_DIR}/skins/default/xui/en/widgets/*.xml)
+list(APPEND viewer_XUI_FILES ${DEFAULT_WIDGET_FILE_GLOB_LIST})
+
+file(GLOB SILVER_XUI_FILE_GLOB_LIST
+     ${CMAKE_CURRENT_SOURCE_DIR}/skins/silver/xui/en-us/*.xml)
+list(APPEND viewer_XUI_FILES ${SILVER_XUI_FILE_GLOB_LIST})
+
+# Cannot append empty lists in CMake, wait until we have files here.
+#file(GLOB SILVER_WIDGET_FILE_GLOB_LIST
+#     ${CMAKE_CURRENT_SOURCE_DIR}/skins/silver/xui/en-us/widgets/*.xml)
+#list(APPEND viewer_XUI_FILES ${SILVER_WIDGET_FILE_GLOB_LIST})
+
+list(SORT viewer_XUI_FILES)
+
+source_group("XUI Files" FILES ${viewer_XUI_FILES})
+
+set_source_files_properties(${viewer_XUI_FILES}
+                            PROPERTIES HEADER_FILE_ONLY TRUE)
+
+list(APPEND viewer_SOURCE_FILES ${viewer_XUI_FILES})
+
+set(viewer_APPSETTINGS_FILES
+    app_settings/anim.ini
+    app_settings/cmd_line.xml
+    app_settings/grass.xml
+    app_settings/high_graphics.xml
+    app_settings/keys.ini
+    app_settings/keywords.ini
+    app_settings/logcontrol.xml
+    app_settings/low_graphics.xml
+    app_settings/mid_graphics.xml
+    app_settings/settings.xml
+    app_settings/settings_crash_behavior.xml
+    app_settings/settings_files.xml
+    app_settings/settings_per_account.xml
+    app_settings/std_bump.ini
+    app_settings/trees.xml
+    app_settings/ultra_graphics.xml
+    app_settings/viewerart.xml
+    ${CMAKE_SOURCE_DIR}/../etc/message.xml
+    ${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg
+    )
+
+use_prebuilt_binary(artwork-common)
+
+source_group("App Settings" FILES ${viewer_APPSETTINGS_FILES})
+
+set_source_files_properties(${viewer_APPSETTINGS_FILES}
+                            PROPERTIES HEADER_FILE_ONLY TRUE)
+
+list(APPEND viewer_SOURCE_FILES ${viewer_APPSETTINGS_FILES})
+
+set(viewer_CHARACTER_FILES
+    character/attentions.xml
+    character/attentionsN.xml
+    character/avatar_lad.xml
+    character/avatar_skeleton.xml
+    character/genepool.xml
+    )
+
+source_group("Character File" FILES ${viewer_CHARACTER_FILES})
+
+set_source_files_properties(${viewer_CHARACTER_FILES}
+                            PROPERTIES HEADER_FILE_ONLY TRUE)
+if (NOT STANDALONE)
+    list(APPEND viewer_SOURCE_FILES ${viewer_CHARACTER_FILES})
+endif (NOT STANDALONE)
+
+if (WINDOWS)
+  file(GLOB viewer_INSTALLER_FILES installers/windows/*.nsi)
+
+  source_group("Installer Files" FILES ${viewer_INSTALLER_FILES})
+
+  set_source_files_properties(${viewer_INSTALLER_FILES}
+                              PROPERTIES HEADER_FILE_ONLY TRUE)
+
+  list(APPEND viewer_SOURCE_FILES ${viewer_INSTALLER_FILES})
+endif (WINDOWS)
+
+if (OPENAL)
+  set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_OPENAL")
+endif (OPENAL)
+
+if (FMOD)
+  set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMOD")
+
+  if (DARWIN)
+    set(fmodwrapper_SOURCE_FILES fmodwrapper.cpp)
+    add_library(fmodwrapper SHARED ${fmodwrapper_SOURCE_FILES})
+    set(fmodwrapper_needed_LIBRARIES ${FMOD_LIBRARY} ${CARBON_LIBRARY})
+    set_target_properties(
+      fmodwrapper
+      PROPERTIES
+      BUILD_WITH_INSTALL_RPATH 1
+      INSTALL_NAME_DIR "@executable_path/../Resources"
+      LINK_FLAGS "-unexported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/fmod_hidden_symbols.exp"
+      )
+    set(FMODWRAPPER_LIBRARY fmodwrapper)
+    target_link_libraries(fmodwrapper ${fmodwrapper_needed_LIBRARIES})
+  else (DARWIN)
+    # fmodwrapper unnecessary on linux or windows
+    set(FMODWRAPPER_LIBRARY ${FMOD_LIBRARY})
+  endif (DARWIN)
+endif (FMOD)
+
+set_source_files_properties(llstartup.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}")
+
+list(APPEND viewer_SOURCE_FILES ${viewer_HEADER_FILES})
+
+set_source_files_properties(${viewer_HEADER_FILES}
+                            PROPERTIES HEADER_FILE_ONLY TRUE)
+
+add_executable(${VIEWER_BINARY_NAME}
+    WIN32
+    MACOSX_BUNDLE
+    ${viewer_SOURCE_FILES}
+    )
+check_message_template(${VIEWER_BINARY_NAME})
+
+if (LLKDU_LIBRARY)
+  add_dependencies(${VIEWER_BINARY_NAME} ${LLKDU_LIBRARY})
+endif (LLKDU_LIBRARY)
+
+# add package files
+file(GLOB EVENT_HOST_SCRIPT_GLOB_LIST
+     ${CMAKE_CURRENT_SOURCE_DIR}/../viewer_components/*.py)
+list(APPEND EVENT_HOST_SCRIPTS ${EVENT_HOST_SCRIPT_GLOB_LIST})
+
+set(PACKAGE OFF CACHE BOOL
+    "Add a package target that builds an installer package.")
+
+if (WINDOWS)
+    if(MSVC71)
+        set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map /MAPINFO:LINES")
+    else(MSVC71)
+        set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map")
+    endif(MSVC71)
+    
+    set_target_properties(${VIEWER_BINARY_NAME}
+        PROPERTIES
+        # *TODO -reenable this once we get server usage sorted out
+        #LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:\"__tcmalloc\""
+        LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS"
+        LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO"
+        LINK_FLAGS_RELEASE ${release_flags}
+        )
+
+    # sets the 'working directory' for debugging from visual studio.
+    if (NOT UNATTENDED)
+        add_custom_command(
+            TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
+            COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe
+            ARGS
+              --solution 
+              ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln
+              --workingdir
+              ${VIEWER_BINARY_NAME}
+              ${CMAKE_CURRENT_SOURCE_DIR}
+            COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging."
+            )
+    endif (NOT UNATTENDED)
+
+    add_custom_command(
+        TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
+        COMMAND ${CMAKE_COMMAND}
+        ARGS
+          -E
+          copy_if_different
+          ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/messages/message_template.msg
+          ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message_template.msg
+        COMMENT "Copying message_template.msg to the runtime folder."
+        )
+
+    add_custom_command(
+        TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
+        COMMAND ${CMAKE_COMMAND}
+        ARGS
+          -E
+          copy_if_different
+          ${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml
+          ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message.xml
+        COMMENT "Copying message.xml to the runtime folder."
+        )
+       
+    if(WINDOWS)
+      # Copy Win Libs...
+      # This happens at build time, not config time. We can't glob files in this cmake.
+      # *FIX:Mani Write a sub script to glob the files...
+      # *FIX:Mani Use actually dependencies rather than bulk copy.
+      add_custom_command(
+        TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
+        COMMAND ${CMAKE_COMMAND}
+        ARGS
+          -E
+          copy_directory
+          ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}
+          ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
+        COMMENT "Copying staged dlls."
+        )
+
+      add_dependencies(${VIEWER_BINARY_NAME} stage_third_party_libs llcommon)
+      if(LLKDU_LIBRARY)
+	# kdu may not exist!
+	add_dependencies(${VIEWER_BINARY_NAME} llkdu)
+      endif(LLKDU_LIBRARY)
+    endif(WINDOWS)    
+
+    if (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
+      add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts)
+    endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
+        
+    add_custom_command(
+        OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat
+        COMMAND ${PYTHON_EXECUTABLE}
+        ARGS
+          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+          --configuration=${CMAKE_CFG_INTDIR}
+          --channel=${VIEWER_CHANNEL}
+          --login_channel=${VIEWER_LOGIN_CHANNEL}
+          --grid=${GRID}
+          --source=${CMAKE_CURRENT_SOURCE_DIR}
+              --artwork=${ARTWORK_DIR}
+              --build=${CMAKE_CURRENT_BINARY_DIR}
+              --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
+              --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat
+        DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+        )
+
+    add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit)
+
+    if (PACKAGE)
+      add_custom_command(
+          OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2
+          COMMAND ${PYTHON_EXECUTABLE}
+          ARGS
+            ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py
+            ${CMAKE_CURRENT_SOURCE_DIR}/..
+            ${CMAKE_CURRENT_BINARY_DIR}
+            ${CMAKE_CFG_INTDIR}
+
+          DEPENDS 
+            lleventhost 
+            ${EVENT_HOST_SCRIPTS}
+            ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py)
+
+      add_custom_target(package ALL 
+          DEPENDS 
+            ${CMAKE_CFG_INTDIR}/touched.bat)
+            # temporarily disable packaging of event_host until hg subrepos get
+            # sorted out on the parabuild cluster...
+            #${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2)
+      add_dependencies(package windows-updater windows-crash-logger)
+
+
+    endif (PACKAGE)
+endif (WINDOWS)
+
+target_link_libraries(${VIEWER_BINARY_NAME}
+    ${LLAUDIO_LIBRARIES}
+    ${LLCHARACTER_LIBRARIES}
+    ${LLIMAGE_LIBRARIES}
+    ${LLIMAGEJ2COJ_LIBRARIES}
+    ${LLINVENTORY_LIBRARIES}
+    ${LLMESSAGE_LIBRARIES}
+    ${LLPLUGIN_LIBRARIES}
+    ${LLPRIMITIVE_LIBRARIES}
+    ${LLRENDER_LIBRARIES}
+    ${FREETYPE_LIBRARIES}
+    ${LLUI_LIBRARIES}
+    ${LLVFS_LIBRARIES}
+    ${LLWINDOW_LIBRARIES}
+    ${LLXML_LIBRARIES}
+    ${LLXUIXML_LIBRARIES}
+    ${LSCRIPT_LIBRARIES}
+    ${LLMATH_LIBRARIES}
+    ${LLCOMMON_LIBRARIES}
+    ${NDOF_LIBRARY}
+    ${viewer_LIBRARIES}
+    ${BOOST_PROGRAM_OPTIONS_LIBRARY}
+    ${BOOST_REGEX_LIBRARY}
+    ${DBUSGLIB_LIBRARIES}
+    ${OPENGL_LIBRARIES}
+    ${FMODWRAPPER_LIBRARY}
+    ${OPENGL_LIBRARIES}
+    ${SDL_LIBRARY}
+    ${SMARTHEAP_LIBRARY}
+    ${UI_LIBRARIES}
+    ${WINDOWS_LIBRARIES}
+    ${XMLRPCEPI_LIBRARIES}
+    ${ELFIO_LIBRARIES}
+    ${LLLOGIN_LIBRARIES}
+    ${GOOGLE_PERFTOOLS_LIBRARIES}
+    )
+
+build_version(viewer)
+
+set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH
+    "Path to artwork files.")
+
+
+if (LINUX)
+  add_custom_command(
+      OUTPUT secondlife-stripped
+      COMMAND strip
+      ARGS --strip-debug -o secondlife-stripped ${VIEWER_BINARY_NAME}
+      DEPENDS ${VIEWER_BINARY_NAME}
+      )
+
+  set(product SecondLife-${ARCH}-${viewer_VERSION})
+
+  add_custom_command(
+      OUTPUT ${product}.tar.bz2
+      COMMAND ${PYTHON_EXECUTABLE}
+      ARGS
+        ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+        --grid=${GRID}
+        --channel=${VIEWER_CHANNEL}
+        --login_channel=${VIEWER_LOGIN_CHANNEL}
+        --installer_name=${product}
+        --arch=${ARCH}
+        --source=${CMAKE_CURRENT_SOURCE_DIR}
+        --artwork=${ARTWORK_DIR}
+        --build=${CMAKE_CURRENT_BINARY_DIR}
+        --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged
+        --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
+      DEPENDS secondlife-stripped ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+      )
+
+  add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_gstreamer010 media_plugin_webkit)
+
+  if (NOT INSTALL)
+    add_custom_target(package ALL DEPENDS ${product}.tar.bz2)
+    add_dependencies(package linux-crash-logger-strip-target)
+    add_dependencies(package linux-updater-strip-target)
+  endif (NOT INSTALL)
+endif (LINUX)
+
+if (DARWIN)
+  set(product "Second Life")
+  set_target_properties(
+    ${VIEWER_BINARY_NAME}
+    PROPERTIES
+    OUTPUT_NAME "${product}"
+    MACOSX_BUNDLE_INFO_STRING "info string - localize me"
+    MACOSX_BUNDLE_ICON_FILE "secondlife.icns"
+    MACOSX_BUNDLE_GUI_IDENTIFIER "Second Life"
+    MACOSX_BUNDLE_LONG_VERSION_STRING "ververver"
+    MACOSX_BUNDLE_BUNDLE_NAME "Second Life"
+    MACOSX_BUNDLE_SHORT_VERSION_STRING "asdf"
+    MACOSX_BUNDLE_BUNDLE_VERSION "asdf"
+    MACOSX_BUNDLE_COPYRIGHT "copyright linden lab 2007 - localize me and run me through a legal wringer"
+    )
+
+  add_custom_command(
+    TARGET ${VIEWER_BINARY_NAME} POST_BUILD
+    COMMAND ${PYTHON_EXECUTABLE}
+    ARGS
+      ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+      --grid=${GRID}
+      --actions=copy
+      --configuration=${CMAKE_CFG_INTDIR}
+      --source=${CMAKE_CURRENT_SOURCE_DIR}
+      --artwork=${ARTWORK_DIR}
+      --build=${CMAKE_CURRENT_BINARY_DIR}
+      --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app
+    DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+    )
+
+  add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit)
+
+  if (PACKAGE)
+      add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME}) 
+      add_dependencies(package mac-updater mac-crash-logger)
+
+      add_custom_command(
+        TARGET package POST_BUILD
+        COMMAND ${PYTHON_EXECUTABLE}
+        ARGS
+          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+          --grid=${GRID}
+          --configuration=${CMAKE_CFG_INTDIR}
+          --channel=${VIEWER_CHANNEL}
+          --login_channel=${VIEWER_LOGIN_CHANNEL}
+          --source=${CMAKE_CURRENT_SOURCE_DIR}
+          --artwork=${ARTWORK_DIR}
+          --build=${CMAKE_CURRENT_BINARY_DIR}
+          --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app
+          --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
+        DEPENDS
+          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+      )
+
+
+      add_custom_command(
+        TARGET package POST_BUILD
+        COMMAND ${PYTHON_EXECUTABLE}
+        ARGS
+          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+          --grid=${GRID}
+          --configuration=${CMAKE_CFG_INTDIR}
+          --channel=${VIEWER_CHANNEL}
+          --login_channel=${VIEWER_LOGIN_CHANNEL}
+          --source=${CMAKE_CURRENT_SOURCE_DIR}
+          --artwork=${ARTWORK_DIR}
+          --build=${CMAKE_CURRENT_BINARY_DIR}
+          --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app
+          --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
+        DEPENDS
+          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+      )
+
+  endif (PACKAGE)
+endif (DARWIN)
+
+if (INSTALL)
+  include(${CMAKE_CURRENT_SOURCE_DIR}/ViewerInstall.cmake)
+endif (INSTALL)
+
+# To add a viewer unit test, just add the test .cpp file below
+# This creates a separate test project per file listed.
+include(LLAddBuildTest)
+SET(viewer_TEST_SOURCE_FILES
+  llagentaccess.cpp
+  lldateutil.cpp
+  llmediadataclient.cpp
+  llviewerhelputil.cpp
+  lllogininstance.cpp
+  )
+set_source_files_properties(
+  ${viewer_TEST_SOURCE_FILES}
+  PROPERTIES
+    LL_TEST_ADDITIONAL_SOURCE_FILES llviewerprecompiledheaders.cpp
+  )
+LL_ADD_PROJECT_UNIT_TESTS(${VIEWER_BINARY_NAME} "${viewer_TEST_SOURCE_FILES}")
+
+#set(TEST_DEBUG on)
+set(test_sources llcapabilitylistener.cpp llviewerprecompiledheaders.cpp)
+set(test_libs 
+  ${LLMESSAGE_LIBRARIES} 
+  ${WINDOWS_LIBRARIES} 
+  ${LLVFS_LIBRARIES}
+  ${LLMATH_LIBRARIES}
+  ${LLCOMMON_LIBRARIES} 
+  ${GOOGLEMOCK_LIBRARIES}
+  )
+
+LL_ADD_INTEGRATION_TEST(llcapabilitylistener 
+  "${test_sources}" 
+  "${test_libs}"
+  ${PYTHON_EXECUTABLE}
+  "${CMAKE_SOURCE_DIR}/llmessage/tests/test_llsdmessage_peer.py"
+  )
+
+#ADD_VIEWER_BUILD_TEST(llmemoryview viewer)
+
+
+# Don't do these for DARWIN or LINUX here -- they're taken care of by viewer_manifest.py
+if (WINDOWS)
+  add_custom_command(
+      TARGET ${VIEWER_BINARY_NAME} POST_BUILD
+      COMMAND ${CMAKE_COMMAND}
+      ARGS
+        -E
+        make_directory
+        ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
+      COMMENT "Creating llplugin dir."
+      )
+
+  get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION)
+  add_custom_command(
+      TARGET ${VIEWER_BINARY_NAME} POST_BUILD
+      COMMAND ${CMAKE_COMMAND}
+      ARGS
+        -E
+        copy_if_different
+        ${BUILT_SLPLUGIN}
+        ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
+      COMMENT "Copying SLPlugin executable to the runtime folder."
+      )
+
+  get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
+    add_custom_command(
+        TARGET ${VIEWER_BINARY_NAME} POST_BUILD
+        COMMAND ${CMAKE_COMMAND}
+        ARGS
+          -E
+          copy_if_different
+          ${BUILT_WEBKIT_PLUGIN}
+          ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
+        COMMENT "Copying WebKit Plugin to the runtime folder."
+        )
+
+  get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION)
+    add_custom_command(
+        TARGET ${VIEWER_BINARY_NAME} POST_BUILD
+        COMMAND ${CMAKE_COMMAND}
+        ARGS
+          -E
+          copy_if_different
+          ${BUILT_QUICKTIME_PLUGIN}
+          ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
+        COMMENT "Copying Quicktime Plugin to the runtime folder."
+        )
+
+  #*******************************
+  # Copy media plugin support dlls
+  # Debug config runtime files required for the plugins
+  set(plugins_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug")
+  set(plugins_debug_files
+    libeay32.dll
+    qtcored4.dll
+    qtguid4.dll
+    qtnetworkd4.dll
+    qtopengld4.dll
+    qtwebkitd4.dll
+    ssleay32.dll
+    )
+  copy_if_different(
+    ${plugins_debug_src_dir}
+    "${CMAKE_CURRENT_BINARY_DIR}/Debug/llplugin"
+    out_targets
+    ${plugins_debug_files}
+    )
+  set(media_plugin_targets ${media_plugin_targets} ${out_targets})
+  
+  # Release & ReleaseDebInfo config runtime files required for the plugins
+  set(plugins_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release")
+  set(plugins_release_files
+    libeay32.dll
+    qtcore4.dll
+    qtgui4.dll
+    qtnetwork4.dll
+    qtopengl4.dll
+    qtwebkit4.dll
+    ssleay32.dll
+    )
+  copy_if_different(
+    ${plugins_release_src_dir}
+    "${CMAKE_CURRENT_BINARY_DIR}/Release/llplugin"
+    out_targets
+    ${plugins_release_files}
+    )
+  set(media_plugin_targets ${media_plugin_targets} ${out_targets})
+
+  copy_if_different(
+    ${plugins_release_src_dir}
+    "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin"
+    out_targets
+    ${plugins_release_files}
+    )
+  set(media_plugin_targets ${media_plugin_targets} ${out_targets})
+  
+  add_custom_target(copy_media_plugin_libs ALL
+    DEPENDS 
+    ${media_plugin_targets}
+    )
+
+  add_custom_command(
+    TARGET ${VIEWER_BINARY_NAME} POST_BUILD
+    COMMAND ${CMAKE_COMMAND}
+    ARGS
+      -E
+      copy_directory
+      ${CMAKE_BINARY_DIR}/test_apps/llplugintest/${CMAKE_CFG_INTDIR}/imageformats
+      ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin/imageformats
+    COMMENT "Copying llpluging imageformat libs."
+    )
+
+  add_dependencies(${VIEWER_BINARY_NAME} llmediaplugintest copy_media_plugin_libs)
+
+endif (WINDOWS)
+
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index b9a0b4293dd..1d4a78f0258 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -39,6 +39,7 @@
 #include "llfloaterinventory.h"
 #include "llinventorybridge.h"
 #include "llinventorymodel.h"
+#include "llinventorypanel.h"
 #include "llnotify.h"
 #include "llviewerregion.h"
 #include "llvoavatarself.h"
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index cd3963050f6..5dbf57c9bef 100644
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -41,6 +41,7 @@
 #include "llfilepicker.h"
 #include "llnotify.h"
 #include "llinventorymodel.h"
+#include "llinventorypanel.h"
 #include "llfloaterinventory.h"
 #include "llpermissionsflags.h"
 #include "llpreviewnotecard.h"
diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp
index 9d07362edc8..3da06fa7b32 100644
--- a/indra/newview/llfloaterbuy.cpp
+++ b/indra/newview/llfloaterbuy.cpp
@@ -45,6 +45,7 @@
 #include "llinventorymodel.h"	// for gInventory
 #include "llfloaterreg.h"
 #include "llfloaterinventory.h"	// for get_item_icon
+#include "llinventoryfunctions.h"
 #include "llselectmgr.h"
 #include "llscrolllistctrl.h"
 #include "llviewerobject.h"
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
index 3a4171c6bee..f3eaa0c9163 100644
--- a/indra/newview/llfloaterbuycontents.cpp
+++ b/indra/newview/llfloaterbuycontents.cpp
@@ -45,6 +45,7 @@
 #include "llagent.h"			// for agent id
 #include "llalertdialog.h"
 #include "llcheckboxctrl.h"
+#include "llinventoryfunctions.h"
 #include "llinventorymodel.h"	// for gInventory
 #include "llfloaterreg.h"
 #include "llfloaterinventory.h"	// for get_item_icon
@@ -280,7 +281,7 @@ void LLFloaterBuyContents::onClickBuy()
 	// We may want to wear this item
 	if (childGetValue("wear_check"))
 	{
-		LLFloaterInventory::sWearNewClothing = TRUE;
+		LLInventoryState::sWearNewClothing = TRUE;
 	}
 
 	// Put the items where we put new folders.
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index 1300103423c..c114eed4a24 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -44,6 +44,7 @@
 #include "llcombobox.h"
 #include "llgesturemgr.h"
 #include "llinventorymodel.h"
+#include "llinventorypanel.h"
 #include "llfloaterinventory.h"
 #include "llkeyboard.h"
 #include "lllineeditor.h"
diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp
index a47916b7d7b..89a9a317c27 100644
--- a/indra/newview/llfloaterinventory.cpp
+++ b/indra/newview/llfloaterinventory.cpp
@@ -1,1953 +1,155 @@
-/** 
- * @file llfloaterinventory.cpp
- * @brief Implementation of the inventory view and associated stuff.
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include <utility> // for std::pair<>
-
-#include "llfloaterinventory.h"
-
-// library includes
-#include "llagent.h"
-#include "llagentwearables.h"
-#include "llcallingcard.h"
-#include "llfloaterreg.h"
-#include "llsdserialize.h"
-#include "llfiltereditor.h"
-#include "llspinctrl.h"
-#include "llui.h"
-#include "message.h"
-
-// newview includes
-#include "llappearancemgr.h"
-#include "llappviewer.h"
-#include "llfirstuse.h"
-#include "llfloaterchat.h"
-#include "llfloatercustomize.h"
-#include "llfocusmgr.h"
-#include "llfolderview.h"
-#include "llgesturemgr.h"
-#include "lliconctrl.h"
-#include "llimview.h"
-#include "llinventorybridge.h"
-#include "llinventoryclipboard.h"
-#include "llinventorymodel.h"
-#include "lllineeditor.h"
-#include "llmenugl.h"
-#include "llpreviewanim.h"
-#include "llpreviewgesture.h"
-#include "llpreviewnotecard.h"
-#include "llpreviewscript.h"
-#include "llpreviewsound.h"
-#include "llpreviewtexture.h"
-#include "llresmgr.h"
-#include "llscrollbar.h"
-#include "llscrollcontainer.h"
-#include "llselectmgr.h"
-#include "lltabcontainer.h"
-#include "lltooldraganddrop.h"
-#include "lluictrlfactory.h"
-#include "llviewerinventory.h"
-#include "llviewermessage.h"
-#include "llviewerobjectlist.h"
-#include "llviewerregion.h"
-#include "llviewerwindow.h"
-#include "llvoavatarself.h"
-#include "llwearablelist.h"
-
-static LLDefaultChildRegistry::Register<LLInventoryPanel> r("inventory_panel");
-
-//BOOL LLFloaterInventory::sOpenNextNewItem = FALSE;
-BOOL LLFloaterInventory::sWearNewClothing = FALSE;
-LLUUID LLFloaterInventory::sWearNewClothingTransactionID;
-
-///----------------------------------------------------------------------------
-/// LLFloaterInventoryFinder
-///----------------------------------------------------------------------------
-
-LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLFloaterInventory* inventory_view)
-:	LLFloater(LLSD()),
-	mFloaterInventory(inventory_view),
-	mFilter(inventory_view->mActivePanel->getFilter())
-{
-	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml", NULL);
-	updateElementsFromFilter();
-}
-
-
-void LLFloaterInventoryFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_data)
-{
-	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
-	if (!self) return;
-
-	bool since_logoff= self->childGetValue("check_since_logoff");
-	
-	if (!since_logoff && 
-	    !(  self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() ) )
-	{
-		self->mSpinSinceHours->set(1.0f);
-	}	
-}
-BOOL LLFloaterInventoryFinder::postBuild()
-{
-	const LLRect& viewrect = mFloaterInventory->getRect();
-	setRect(LLRect(viewrect.mLeft - getRect().getWidth(), viewrect.mTop, viewrect.mLeft, viewrect.mTop - getRect().getHeight()));
-
-	childSetAction("All", selectAllTypes, this);
-	childSetAction("None", selectNoTypes, this);
-
-	mSpinSinceHours = getChild<LLSpinCtrl>("spin_hours_ago");
-	childSetCommitCallback("spin_hours_ago", onTimeAgo, this);
-
-	mSpinSinceDays = getChild<LLSpinCtrl>("spin_days_ago");
-	childSetCommitCallback("spin_days_ago", onTimeAgo, this);
-
-	//	mCheckSinceLogoff   = getChild<LLSpinCtrl>("check_since_logoff");
-	childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this);
-
-	childSetAction("Close", onCloseBtn, this);
-
-	updateElementsFromFilter();
-	return TRUE;
-}
-void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)
-{
-	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
-	if (!self) return;
-	
-	bool since_logoff=true;
-	if ( self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() )
-	{
-		since_logoff = false;
-	}
-	self->childSetValue("check_since_logoff", since_logoff);
-}
-
-void LLFloaterInventoryFinder::changeFilter(LLInventoryFilter* filter)
-{
-	mFilter = filter;
-	updateElementsFromFilter();
-}
-
-void LLFloaterInventoryFinder::updateElementsFromFilter()
-{
-	if (!mFilter)
-		return;
-
-	// Get data needed for filter display
-	U32 filter_types = mFilter->getFilterTypes();
-	std::string filter_string = mFilter->getFilterSubString();
-	LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState();
-	U32 hours = mFilter->getHoursAgo();
-
-	// update the ui elements
-	LLFloater::setTitle(mFilter->getName());
-	childSetValue("check_animation", (S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION));
-
-	childSetValue("check_calling_card", (S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD));
-	childSetValue("check_clothing", (S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE));
-	childSetValue("check_gesture", (S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE));
-	childSetValue("check_landmark", (S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK));
-	childSetValue("check_notecard", (S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD));
-	childSetValue("check_object", (S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT));
-	childSetValue("check_script", (S32) (filter_types & 0x1 << LLInventoryType::IT_LSL));
-	childSetValue("check_sound", (S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND));
-	childSetValue("check_texture", (S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE));
-	childSetValue("check_snapshot", (S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT));
-	childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS);
-	childSetValue("check_since_logoff", mFilter->isSinceLogoff());
-	mSpinSinceHours->set((F32)(hours % 24));
-	mSpinSinceDays->set((F32)(hours / 24));
-}
-
-void LLFloaterInventoryFinder::draw()
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_DRAW);
-	U32 filter = 0xffffffff;
-	BOOL filtered_by_all_types = TRUE;
-
-	if (!childGetValue("check_animation"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_ANIMATION);
-		filtered_by_all_types = FALSE;
-	}
-
-
-	if (!childGetValue("check_calling_card"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_CALLINGCARD);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_clothing"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_WEARABLE);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_gesture"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_GESTURE);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_landmark"))
-
-
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_LANDMARK);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_notecard"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_NOTECARD);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_object"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_OBJECT);
-		filter &= ~(0x1 << LLInventoryType::IT_ATTACHMENT);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_script"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_LSL);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_sound"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_SOUND);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_texture"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_TEXTURE);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_snapshot"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_SNAPSHOT);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!filtered_by_all_types)
-	{
-		// don't include folders in filter, unless I've selected everything
-		filter &= ~(0x1 << LLInventoryType::IT_CATEGORY);
-	}
-
-	// update the panel, panel will update the filter
-	mFloaterInventory->mActivePanel->setShowFolderState(getCheckShowEmpty() ?
-		LLInventoryFilter::SHOW_ALL_FOLDERS : LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
-	mFloaterInventory->mActivePanel->setFilterTypes(filter);
-	if (getCheckSinceLogoff())
-	{
-		mSpinSinceDays->set(0);
-		mSpinSinceHours->set(0);
-	}
-	U32 days = (U32)mSpinSinceDays->get();
-	U32 hours = (U32)mSpinSinceHours->get();
-	if (hours > 24)
-	{
-		days += hours / 24;
-		hours = (U32)hours % 24;
-		mSpinSinceDays->set((F32)days);
-		mSpinSinceHours->set((F32)hours);
-	}
-	hours += days * 24;
-	mFloaterInventory->mActivePanel->setHoursAgo(hours);
-	mFloaterInventory->mActivePanel->setSinceLogoff(getCheckSinceLogoff());
-	mFloaterInventory->setFilterTextFromFilter();
-
-	LLFloater::draw();
-}
-
-BOOL LLFloaterInventoryFinder::getCheckShowEmpty()
-{
-	return childGetValue("check_show_empty");
-}
-
-BOOL LLFloaterInventoryFinder::getCheckSinceLogoff()
-{
-	return childGetValue("check_since_logoff");
-}
-
-void LLFloaterInventoryFinder::onCloseBtn(void* user_data)
-{
-	LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data;
-	finderp->closeFloater();
-}
-
-// static
-void LLFloaterInventoryFinder::selectAllTypes(void* user_data)
-{
-	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
-	if(!self) return;
-
-	self->childSetValue("check_animation", TRUE);
-	self->childSetValue("check_calling_card", TRUE);
-	self->childSetValue("check_clothing", TRUE);
-	self->childSetValue("check_gesture", TRUE);
-	self->childSetValue("check_landmark", TRUE);
-	self->childSetValue("check_notecard", TRUE);
-	self->childSetValue("check_object", TRUE);
-	self->childSetValue("check_script", TRUE);
-	self->childSetValue("check_sound", TRUE);
-	self->childSetValue("check_texture", TRUE);
-	self->childSetValue("check_snapshot", TRUE);
-
-/*
-	self->mCheckCallingCard->set(TRUE);
-	self->mCheckClothing->set(TRUE);
-	self->mCheckGesture->set(TRUE);
-	self->mCheckLandmark->set(TRUE);
-	self->mCheckNotecard->set(TRUE);
-	self->mCheckObject->set(TRUE);
-	self->mCheckScript->set(TRUE);
-	self->mCheckSound->set(TRUE);
-	self->mCheckTexture->set(TRUE);
-	self->mCheckSnapshot->set(TRUE);*/
-}
-
-//static
-void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
-{
-	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
-	if(!self) return;
-
-	/*
-	self->childSetValue("check_animation", FALSE);
-	self->mCheckCallingCard->set(FALSE);
-	self->mCheckClothing->set(FALSE);
-	self->mCheckGesture->set(FALSE);
-	self->mCheckLandmark->set(FALSE);
-	self->mCheckNotecard->set(FALSE);
-	self->mCheckObject->set(FALSE);
-	self->mCheckScript->set(FALSE);
-	self->mCheckSound->set(FALSE);
-	self->mCheckTexture->set(FALSE);
-	self->mCheckSnapshot->set(FALSE);*/
-
-
-	self->childSetValue("check_animation", FALSE);
-	self->childSetValue("check_calling_card", FALSE);
-	self->childSetValue("check_clothing", FALSE);
-	self->childSetValue("check_gesture", FALSE);
-	self->childSetValue("check_landmark", FALSE);
-	self->childSetValue("check_notecard", FALSE);
-	self->childSetValue("check_object", FALSE);
-	self->childSetValue("check_script", FALSE);
-	self->childSetValue("check_sound", FALSE);
-	self->childSetValue("check_texture", FALSE);
-	self->childSetValue("check_snapshot", FALSE);
-}
-
-
-///----------------------------------------------------------------------------
-/// LLFloaterInventory
-///----------------------------------------------------------------------------
-void LLSaveFolderState::setApply(BOOL apply)
-{
-	mApply = apply; 
-	// before generating new list of open folders, clear the old one
-	if(!apply) 
-	{
-		clearOpenFolders(); 
-	}
-}
-
-void LLSaveFolderState::doFolder(LLFolderViewFolder* folder)
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_DO_FOLDER);
-	if(mApply)
-	{
-		// we're applying the open state
-		LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener();
-		if(!bridge) return;
-		LLUUID id(bridge->getUUID());
-		if(mOpenFolders.find(id) != mOpenFolders.end())
-		{
-			folder->setOpen(TRUE);
-		}
-		else
-		{
-			// keep selected filter in its current state, this is less jarring to user
-			if (!folder->isSelected())
-			{
-				folder->setOpen(FALSE);
-			}
-		}
-	}
-	else
-	{
-		// we're recording state at this point
-		if(folder->isOpen())
-		{
-			LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener();
-			if(!bridge) return;
-			mOpenFolders.insert(bridge->getUUID());
-		}
-	}
-}
-
-LLFloaterInventory::LLFloaterInventory(const LLSD& key)
-	: LLFloater(key)
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_INIT);
-	// Menu Callbacks (non contex menus)
-	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLFloaterInventory::doToSelected, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.CloseAllFolders", boost::bind(&LLFloaterInventory::closeAllFolders, this));
-	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
-	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
-	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLFloaterInventory::doCreate, this, _2));
-// 	mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLFloaterInventory::newWindow, this));
-	mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLFloaterInventory::toggleFindOptions, this));
-	mCommitCallbackRegistrar.add("Inventory.ResetFilters", boost::bind(&LLFloaterInventory::resetFilters, this));
-	mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLFloaterInventory::setSortBy, this, _2));
-
-	// Controls
-	// *TODO: Just use persistant settings for each of these
-	U32 sort_order = gSavedSettings.getU32("InventorySortOrder");
-	BOOL sort_by_name = ! ( sort_order & LLInventoryFilter::SO_DATE );
-	BOOL sort_folders_by_name = ( sort_order & LLInventoryFilter::SO_FOLDERS_BY_NAME );
-	BOOL sort_system_folders_to_top = ( sort_order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP );
-	
-	gSavedSettings.declareBOOL("Inventory.SortByName", sort_by_name, "Declared in code", FALSE);
-	gSavedSettings.declareBOOL("Inventory.SortByDate", !sort_by_name, "Declared in code", FALSE);
-	gSavedSettings.declareBOOL("Inventory.FoldersAlwaysByName", sort_folders_by_name, "Declared in code", FALSE);
-	gSavedSettings.declareBOOL("Inventory.SystemFoldersToTop", sort_system_folders_to_top, "Declared in code", FALSE);
-	
-	mSavedFolderState = new LLSaveFolderState();
-	mSavedFolderState->setApply(FALSE);
-
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory.xml");
-}
-
-BOOL LLFloaterInventory::postBuild()
-{
-	gInventory.addObserver(this);
-	
-	mFilterTabs = getChild<LLTabContainer>("inventory filter tabs");
-	mFilterTabs->setCommitCallback(boost::bind(&LLFloaterInventory::onFilterSelected, this));
-	
-	//panel->getFilter()->markDefault();
-
-	// Set up the default inv. panel/filter settings.
-	mActivePanel = getChild<LLInventoryPanel>("All Items");
-	if (mActivePanel)
-	{
-		// "All Items" is the previous only view, so it gets the InventorySortOrder
-		mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder"));
-		mActivePanel->getFilter()->markDefault();
-		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-		mActivePanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mActivePanel, _1, _2));
-	}
-	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
-	if (recent_items_panel)
-	{
-		recent_items_panel->setSinceLogoff(TRUE);
-		recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE);
-		recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
-		recent_items_panel->getFilter()->markDefault();
-		recent_items_panel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, recent_items_panel, _1, _2));
-	}
-
-	// Now load the stored settings from disk, if available.
-	std::ostringstream filterSaveName;
-	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
-	llinfos << "LLFloaterInventory::init: reading from " << filterSaveName << llendl;
-	llifstream file(filterSaveName.str());
-	LLSD savedFilterState;
-	if (file.is_open())
-	{
-		LLSDSerialize::fromXML(savedFilterState, file);
-		file.close();
-
-		// Load the persistent "Recent Items" settings.
-		// Note that the "All Items" settings do not persist.
-		if(recent_items_panel)
-		{
-			if(savedFilterState.has(recent_items_panel->getFilter()->getName()))
-			{
-				LLSD recent_items = savedFilterState.get(
-					recent_items_panel->getFilter()->getName());
-				recent_items_panel->getFilter()->fromLLSD(recent_items);
-			}
-		}
-
-	}
-
-
-	mFilterEditor = getChild<LLFilterEditor>("inventory search editor");
-	if (mFilterEditor)
-	{
-		mFilterEditor->setCommitCallback(boost::bind(&LLFloaterInventory::onFilterEdit, this, _2));
-	}
-
-	// *TODO:Get the cost info from the server
-	const std::string upload_cost("10");
-	childSetLabelArg("Upload Image", "[COST]", upload_cost);
-	childSetLabelArg("Upload Sound", "[COST]", upload_cost);
-	childSetLabelArg("Upload Animation", "[COST]", upload_cost);
-	childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
-	
-	return TRUE;
-}
-
-// Destroys the object
-LLFloaterInventory::~LLFloaterInventory( void )
-{
-	// Save the filters state.
-	LLSD filterRoot;
-	LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>("All Items");
-	if (all_items_panel)
-	{
-		LLInventoryFilter* filter = all_items_panel->getFilter();
-		LLSD filterState;
-		filter->toLLSD(filterState);
-		filterRoot[filter->getName()] = filterState;
-	}
-
-	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
-	if (recent_items_panel)
-	{
-		LLInventoryFilter* filter = recent_items_panel->getFilter();
-		LLSD filterState;
-		filter->toLLSD(filterState);
-		filterRoot[filter->getName()] = filterState;
-	}
-
-	std::ostringstream filterSaveName;
-	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
-	llofstream filtersFile(filterSaveName.str());
-	if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile))
-	{
-		llwarns << "Could not write to filters save file " << filterSaveName << llendl;
-	}
-	else
-		filtersFile.close();
-
-	gInventory.removeObserver(this);
-	delete mSavedFolderState;
-}
-
-void LLFloaterInventory::draw()
-{
- 	if (LLInventoryModel::isEverythingFetched())
-	{
-		updateTitle();
-	}
-	LLFloater::draw();
-}
-
-void LLOpenFilteredFolders::doItem(LLFolderViewItem *item)
-{
-	if (item->getFiltered())
-	{
-		item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-	}
-}
-
-void LLOpenFilteredFolders::doFolder(LLFolderViewFolder* folder)
-{
-	if (folder->getFiltered() && folder->getParentFolder())
-	{
-		folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-	}
-	// if this folder didn't pass the filter, and none of its descendants did
-	else if (!folder->getFiltered() && !folder->hasFilteredDescendants())
-	{
-		folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_NO);
-	}
-}
-
-void LLSelectFirstFilteredItem::doItem(LLFolderViewItem *item)
-{
-	if (item->getFiltered() && !mItemSelected)
-	{
-		item->getRoot()->setSelection(item, FALSE, FALSE);
-		if (item->getParentFolder())
-		{
-			item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-		}
-		item->getRoot()->scrollToShowSelection();
-		mItemSelected = TRUE;
-	}
-}
-
-void LLSelectFirstFilteredItem::doFolder(LLFolderViewFolder* folder)
-{
-	if (folder->getFiltered() && !mItemSelected)
-	{
-		folder->getRoot()->setSelection(folder, FALSE, FALSE);
-		if (folder->getParentFolder())
-		{
-			folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-		}
-		folder->getRoot()->scrollToShowSelection();
-		mItemSelected = TRUE;
-	}
-}
-
-void LLOpenFoldersWithSelection::doItem(LLFolderViewItem *item)
-{
-	if (item->getParentFolder() && item->isSelected())
-	{
-		item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-	}
-}
-
-void LLOpenFoldersWithSelection::doFolder(LLFolderViewFolder* folder)
-{
-	if (folder->getParentFolder() && folder->isSelected())
-	{
-		folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-	}
-}
-
-void LLFloaterInventory::startSearch()
-{
-	// this forces focus to line editor portion of search editor
-	if (mFilterEditor)
-	{
-		mFilterEditor->focusFirstItem(TRUE);
-	}
-}
-
-void LLFloaterInventory::onOpen(const LLSD& key)
-{
-	LLFirstUse::useInventory();
-}
-
-BOOL LLFloaterInventory::handleKeyHere(KEY key, MASK mask)
-{
-	LLFolderView* root_folder = mActivePanel ? mActivePanel->getRootFolder() : NULL;
-	if (root_folder)
-	{
-		// first check for user accepting current search results
-		if (mFilterEditor 
-			&& mFilterEditor->hasFocus()
-		    && (key == KEY_RETURN 
-		    	|| key == KEY_DOWN)
-		    && mask == MASK_NONE)
-		{
-			// move focus to inventory proper
-			mActivePanel->setFocus(TRUE);
-			root_folder->scrollToShowSelection();
-			return TRUE;
-		}
-
-		if (mActivePanel->hasFocus() && key == KEY_UP)
-		{
-			startSearch();
-		}
-	}
-
-	return LLFloater::handleKeyHere(key, mask);
-
-}
-
-void LLFloaterInventory::updateTitle()
-{
-	LLLocale locale(LLLocale::USER_LOCALE);
-	std::string item_count_string;
-	LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount());
-
-	LLStringUtil::format_map_t string_args;
-	string_args["[ITEM_COUNT]"] = item_count_string;
-	string_args["[FILTER]"] = mFilterText;
-
-	if (LLInventoryModel::backgroundFetchActive())
-	{
-		setTitle(getString("TitleFetching", string_args));
-	}
-	else
-	{
-		setTitle(getString("TitleCompleted", string_args));
-	}	
-}
-
-
-void LLFloaterInventory::changed(U32 mask)
-{
-	updateTitle();
-}
-
-//----------------------------------------------------------------------------
-// menu callbacks
-
-void LLFloaterInventory::doToSelected(const LLSD& userdata)
-{
-	getPanel()->getRootFolder()->doToSelected(&gInventory, userdata);
-}
-
-void LLFloaterInventory::closeAllFolders()
-{
-	getPanel()->getRootFolder()->closeAllFolders();
-}
-
-void LLFloaterInventory::doCreate(const LLSD& userdata)
-{
-	menu_create_inventory_item(getPanel()->getRootFolder(), NULL, userdata);
-}
-
-void LLFloaterInventory::resetFilters()
-{
-	LLFloaterInventoryFinder *finder = getFinder();
-	getActivePanel()->getFilter()->resetDefault();
-	if (finder)
-	{
-		finder->updateElementsFromFilter();
-	}
-
-	setFilterTextFromFilter();
-}
-
-void LLFloaterInventory::setSortBy(const LLSD& userdata)
-{
-	std::string sort_field = userdata.asString();
-	if (sort_field == "name")
-	{
-		U32 order = getActivePanel()->getSortOrder();
-		getActivePanel()->setSortOrder( order & ~LLInventoryFilter::SO_DATE );
-			
-		gSavedSettings.setBOOL("Inventory.SortByName", TRUE );
-		gSavedSettings.setBOOL("Inventory.SortByDate", FALSE );
-	}
-	else if (sort_field == "date")
-	{
-		U32 order = getActivePanel()->getSortOrder();
-		getActivePanel()->setSortOrder( order | LLInventoryFilter::SO_DATE );
-
-		gSavedSettings.setBOOL("Inventory.SortByName", FALSE );
-		gSavedSettings.setBOOL("Inventory.SortByDate", TRUE );
-	}
-	else if (sort_field == "foldersalwaysbyname")
-	{
-		U32 order = getActivePanel()->getSortOrder();
-		if ( order & LLInventoryFilter::SO_FOLDERS_BY_NAME )
-		{
-			order &= ~LLInventoryFilter::SO_FOLDERS_BY_NAME;
-
-			gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", FALSE );
-		}
-		else
-		{
-			order |= LLInventoryFilter::SO_FOLDERS_BY_NAME;
-
-			gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", TRUE );
-		}
-		getActivePanel()->setSortOrder( order );
-	}
-	else if (sort_field == "systemfolderstotop")
-	{
-		U32 order = getActivePanel()->getSortOrder();
-		if ( order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP )
-		{
-			order &= ~LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
-
-			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", FALSE );
-		}
-		else
-		{
-			order |= LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
-
-			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", TRUE );
-		}
-		getActivePanel()->setSortOrder( order );
-	}
-}
-
-//----------------------------------------------------------------------------
-
-// static
-LLFloaterInventory* LLFloaterInventory::showAgentInventory()
-{
-	LLFloaterInventory* iv = NULL;
-	if (!gAgent.cameraMouselook())
-	{
-		iv = LLFloaterReg::showTypedInstance<LLFloaterInventory>("inventory", LLSD());
-	}
-	return iv;
-}
-
-// static
-LLFloaterInventory* LLFloaterInventory::getActiveInventory()
-{
-	LLFloaterInventory* res = NULL;
-	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
-	S32 z_min = S32_MAX;
-	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
-	{
-		LLFloaterInventory* iv = dynamic_cast<LLFloaterInventory*>(*iter);
-		if (iv)
-		{
-			S32 z_order = gFloaterView->getZOrder(iv);
-			if (z_order < z_min)
-			{
-				res = iv;
-				z_min = z_order;
-			}
-		}
-	}
-	return res;
-}
-
-// static
-void LLFloaterInventory::cleanup()
-{
-	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
-	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end();)
-	{
-		LLFloaterInventory* iv = dynamic_cast<LLFloaterInventory*>(*iter++);
-		if (iv)
-		{
-			iv->destroy();
-		}
-	}
-}
-
-void LLFloaterInventory::toggleFindOptions()
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_TOGGLE);
-	LLFloater *floater = getFinder();
-	if (!floater)
-	{
-		LLFloaterInventoryFinder * finder = new LLFloaterInventoryFinder(this);
-		mFinderHandle = finder->getHandle();
-		finder->openFloater();
-		addDependentFloater(mFinderHandle);
-
-		// start background fetch of folders
-		gInventory.startBackgroundFetch();
-	}
-	else
-	{
-		floater->closeFloater();
-	}
-}
-
-// static
-BOOL LLFloaterInventory::filtersVisible(void* user_data)
-{
-	LLFloaterInventory* self = (LLFloaterInventory*)user_data;
-	if(!self) return FALSE;
-
-	return self->getFinder() != NULL;
-}
-
-void LLFloaterInventory::onClearSearch()
-{
-	LLFloater *finder = getFinder();
-	if (mActivePanel)
-	{
-		mActivePanel->setFilterSubString(LLStringUtil::null);
-		mActivePanel->setFilterTypes(0xffffffff);
-	}
-
-	if (finder)
-	{
-		LLFloaterInventoryFinder::selectAllTypes(finder);
-	}
-
-	// re-open folders that were initially open
-	if (mActivePanel)
-	{
-		mSavedFolderState->setApply(TRUE);
-		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-		LLOpenFoldersWithSelection opener;
-		mActivePanel->getRootFolder()->applyFunctorRecursively(opener);
-		mActivePanel->getRootFolder()->scrollToShowSelection();
-	}
-}
-
-void LLFloaterInventory::onFilterEdit(const std::string& search_string )
-{
-	if (search_string == "")
-	{
-		onClearSearch();
-	}
-	if (!mActivePanel)
-	{
-		return;
-	}
-
-	gInventory.startBackgroundFetch();
-
-	std::string uppercase_search_string = search_string;
-	LLStringUtil::toUpper(uppercase_search_string);
-	if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty())
-	{
-			// current filter and new filter empty, do nothing
-			return;
-	}
-
-	// save current folder open state if no filter currently applied
-	if (!mActivePanel->getRootFolder()->isFilterModified())
-	{
-		mSavedFolderState->setApply(FALSE);
-		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-	}
-
-	// set new filter string
-	mActivePanel->setFilterSubString(uppercase_search_string);
-}
-
-
- //static
- BOOL LLFloaterInventory::incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward)
- {
- 	LLFloaterInventory* active_view = NULL;
-	
-	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
-	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
-	{
-		LLFloaterInventory* iv = dynamic_cast<LLFloaterInventory*>(*iter);
-		if (iv)
-		{
-			if (gFocusMgr.childHasKeyboardFocus(iv))
-			{
-				active_view = iv;
-				break;
-			}
- 		}
- 	}
-
- 	if (!active_view)
- 	{
- 		return FALSE;
- 	}
-
- 	std::string search_string(find_text);
-
- 	if (search_string.empty())
- 	{
- 		return FALSE;
- 	}
-
- 	if (active_view->mActivePanel &&
- 		active_view->mActivePanel->getRootFolder()->search(first_item, search_string, backward))
- 	{
- 		return TRUE;
- 	}
-
- 	return FALSE;
- }
-
-void LLFloaterInventory::onFilterSelected()
-{
-	// Find my index
-	mActivePanel = (LLInventoryPanel*)childGetVisibleTab("inventory filter tabs");
-
-	if (!mActivePanel)
-	{
-		return;
-	}
-	LLInventoryFilter* filter = mActivePanel->getFilter();
-	LLFloaterInventoryFinder *finder = getFinder();
-	if (finder)
-	{
-		finder->changeFilter(filter);
-	}
-	if (filter->isActive())
-	{
-		// If our filter is active we may be the first thing requiring a fetch so we better start it here.
-		gInventory.startBackgroundFetch();
-	}
-	setFilterTextFromFilter();
-}
-
-BOOL LLFloaterInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-										 EDragAndDropType cargo_type,
-										 void* cargo_data,
-										 EAcceptance* accept,
-										 std::string& tooltip_msg)
-{
-	// Check to see if we are auto scrolling from the last frame
-	LLInventoryPanel* panel = (LLInventoryPanel*)this->getActivePanel();
-	BOOL needsToScroll = panel->getScrollableContainer()->autoScroll(x, y);
-	if(mFilterTabs)
-	{
-		if(needsToScroll)
-		{
-			mFilterTabs->startDragAndDropDelayTimer();
-		}
-	}
-	
-	BOOL handled = LLFloater::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
-
-	return handled;
-}
-const std::string& get_item_icon_name(LLAssetType::EType asset_type,
-							 LLInventoryType::EType inventory_type,
-							 U32 attachment_point,
-							 BOOL item_is_multi )
-{
-	EInventoryIcon idx = OBJECT_ICON_NAME;
-	if ( item_is_multi )
-	{
-		idx = OBJECT_MULTI_ICON_NAME;
-	}
-	
-	switch(asset_type)
-	{
-	case LLAssetType::AT_TEXTURE:
-		if(LLInventoryType::IT_SNAPSHOT == inventory_type)
-		{
-			idx = SNAPSHOT_ICON_NAME;
-		}
-		else
-		{
-			idx = TEXTURE_ICON_NAME;
-		}
-		break;
-
-	case LLAssetType::AT_SOUND:
-		idx = SOUND_ICON_NAME;
-		break;
-	case LLAssetType::AT_CALLINGCARD:
-		if(attachment_point!= 0)
-		{
-			idx = CALLINGCARD_ONLINE_ICON_NAME;
-		}
-		else
-		{
-			idx = CALLINGCARD_OFFLINE_ICON_NAME;
-		}
-		break;
-	case LLAssetType::AT_LANDMARK:
-		if(attachment_point!= 0)
-		{
-			idx = LANDMARK_VISITED_ICON_NAME;
-		}
-		else
-		{
-			idx = LANDMARK_ICON_NAME;
-		}
-		break;
-	case LLAssetType::AT_SCRIPT:
-	case LLAssetType::AT_LSL_TEXT:
-	case LLAssetType::AT_LSL_BYTECODE:
-		idx = SCRIPT_ICON_NAME;
-		break;
-	case LLAssetType::AT_CLOTHING:
-		idx = CLOTHING_ICON_NAME;
-	case LLAssetType::AT_BODYPART :
-		if(LLAssetType::AT_BODYPART == asset_type)
-		{
-			idx = BODYPART_ICON_NAME;
-		}
-		switch(LLInventoryItem::II_FLAGS_WEARABLES_MASK & attachment_point)
-		{
-		case WT_SHAPE:
-			idx = BODYPART_SHAPE_ICON_NAME;
-			break;
-		case WT_SKIN:
-			idx = BODYPART_SKIN_ICON_NAME;
-			break;
-		case WT_HAIR:
-			idx = BODYPART_HAIR_ICON_NAME;
-			break;
-		case WT_EYES:
-			idx = BODYPART_EYES_ICON_NAME;
-			break;
-		case WT_SHIRT:
-			idx = CLOTHING_SHIRT_ICON_NAME;
-			break;
-		case WT_PANTS:
-			idx = CLOTHING_PANTS_ICON_NAME;
-			break;
-		case WT_SHOES:
-			idx = CLOTHING_SHOES_ICON_NAME;
-			break;
-		case WT_SOCKS:
-			idx = CLOTHING_SOCKS_ICON_NAME;
-			break;
-		case WT_JACKET:
-			idx = CLOTHING_JACKET_ICON_NAME;
-			break;
-		case WT_GLOVES:
-			idx = CLOTHING_GLOVES_ICON_NAME;
-			break;
-		case WT_UNDERSHIRT:
-			idx = CLOTHING_UNDERSHIRT_ICON_NAME;
-			break;
-		case WT_UNDERPANTS:
-			idx = CLOTHING_UNDERPANTS_ICON_NAME;
-			break;
-		case WT_SKIRT:
-			idx = CLOTHING_SKIRT_ICON_NAME;
-			break;
-		case WT_ALPHA:
-			idx = CLOTHING_ALPHA_ICON_NAME;
-			break;
-		case WT_TATTOO:
-			idx = CLOTHING_TATTOO_ICON_NAME;
-			break;
-		default:
-			// no-op, go with choice above
-			break;
-		}
-		break;
-	case LLAssetType::AT_NOTECARD:
-		idx = NOTECARD_ICON_NAME;
-		break;
-	case LLAssetType::AT_ANIMATION:
-		idx = ANIMATION_ICON_NAME;
-		break;
-	case LLAssetType::AT_GESTURE:
-		idx = GESTURE_ICON_NAME;
-		break;
-	case LLAssetType::AT_FAVORITE:
-		//TODO - need bette idx
-		idx = LANDMARK_ICON_NAME;
-		break;
-	case LLAssetType::AT_LINK:
-		idx = LINKITEM_ICON_NAME;
-		break;
-	case LLAssetType::AT_LINK_FOLDER:
-		idx = LINKFOLDER_ICON_NAME;
-		break;
-	default:
-		break;
-	}
-	
-	return ICON_NAME[idx];
-}
-
-LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
-							 LLInventoryType::EType inventory_type,
-							 U32 attachment_point,
-							 BOOL item_is_multi)
-{
-	const std::string& icon_name = get_item_icon_name(asset_type, inventory_type, attachment_point, item_is_multi );
-	return LLUI::getUIImage(icon_name);
-}
-
-const std::string LLInventoryPanel::DEFAULT_SORT_ORDER = std::string("InventorySortOrder");
-const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("RecentItemsSortOrder");
-const std::string LLInventoryPanel::INHERIT_SORT_ORDER = std::string("");
-static const LLInventoryFVBridgeBuilder INVENTORY_BRIDGE_BUILDER;
-
-LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p)
-:	LLPanel(p),
-	mInventoryObserver(NULL),
-	mFolders(NULL),
-	mScroller(NULL),
-	mSortOrderSetting(p.sort_order_setting),
-	mInventory(p.inventory),
-	mAllowMultiSelect(p.allow_multi_select),
-	mHasInventoryConnection(false),
-	mStartFolderString(p.start_folder)
-,	mBuildDefaultHierarchy(true)
-,	mInvFVBridgeBuilder(NULL)
-{
-	mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER;
-
-	// contex menu callbacks
-	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLInventoryPanel::doToSelected, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
-	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
-	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLInventoryPanel::doCreate, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));
-	
-	setBackgroundColor(LLUIColorTable::instance().getColor("InventoryBackgroundColor"));
-	setBackgroundVisible(TRUE);
-	setBackgroundOpaque(TRUE);
-}
-
-BOOL LLInventoryPanel::postBuild()
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_POST_BUILD);
-
-	mCommitCallbackRegistrar.pushScope(); // registered as a widget; need to push callback scope ourselves
-	
-	// create root folder
-	{
-		LLRect folder_rect(0,
-						   0,
-						   getRect().getWidth(),
-						   0);
-		LLFolderView::Params p;
-		p.name = getName();
-		p.rect = folder_rect;
-		p.parent_panel = this;
-		mFolders = LLUICtrlFactory::create<LLFolderView>(p);
-		mFolders->setAllowMultiSelect(mAllowMultiSelect);
-	}
-
-	mCommitCallbackRegistrar.popScope();
-	
-	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
-	
-	// scroller
-	{
-		LLRect scroller_view_rect = getRect();
-		scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
-		LLScrollContainer::Params p;
-		p.name("Inventory Scroller");
-		p.rect(scroller_view_rect);
-		p.follows.flags(FOLLOWS_ALL);
-		p.reserve_scroll_corner(true);
-		p.tab_stop(true);
-		mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
-	}
-	addChild(mScroller);
-	mScroller->addChild(mFolders);
-	
-	mFolders->setScrollContainer(mScroller);
-
-	// set up the callbacks from the inventory we're viewing, and then
-	// build everything.
-	mInventoryObserver = new LLInventoryPanelObserver(this);
-	mInventory->addObserver(mInventoryObserver);
-
-	// determine the root folder, if any, so inventory contents show just the children
-	// of that folder (i.e. not including the folder itself).
-	const LLAssetType::EType preferred_type = LLAssetType::lookupHumanReadable(mStartFolderString);
-
-	if ("inventory" == mStartFolderString)
-	{
-		mStartFolderID = gInventory.getRootFolderID();
-	}
-	else if ("library" == mStartFolderString)
-	{
-		mStartFolderID = gInventory.getLibraryRootFolderID();
-	}
-	else
-	{
-		mStartFolderID = (preferred_type != LLAssetType::AT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
-	}
-
-	// build view of inventory if we need default full hierarchy and inventory ready, otherwise wait for modelChanged() callback
-	if (mBuildDefaultHierarchy && mInventory->isInventoryUsable() && !mHasInventoryConnection)
-	{
-		rebuildViewsFor(mStartFolderID);
-		mHasInventoryConnection = true;
-	}
-
-	// bit of a hack to make sure the inventory is open.
-	mFolders->openFolder(preferred_type != LLAssetType::AT_NONE ? LLAssetType::lookupCategoryName(preferred_type) : "My Inventory");
-
-	if (mSortOrderSetting != INHERIT_SORT_ORDER)
-	{
-		setSortOrder(gSavedSettings.getU32(mSortOrderSetting));
-	}
-	else
-	{
-		setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER));
-	}
-	mFolders->setSortOrder(mFolders->getFilter()->getSortOrder());
-
-	return TRUE;
-}
-
-LLInventoryPanel::~LLInventoryPanel()
-{
-	// should this be a global setting?
-	if (mFolders)
-	{
-		U32 sort_order = mFolders->getSortOrder();
-		if (mSortOrderSetting != INHERIT_SORT_ORDER)
-		{
-			gSavedSettings.setU32(mSortOrderSetting, sort_order);
-		}
-	}
-
-	// LLView destructor will take care of the sub-views.
-	mInventory->removeObserver(mInventoryObserver);
-	delete mInventoryObserver;
-	mScroller = NULL;
-}
-
-LLMemType mt(LLMemType::MTYPE_INVENTORY_FROM_XML); // ! BUG ! Should this be removed?
-void LLInventoryPanel::draw()
-{
-	// select the desired item (in case it wasn't loaded when the selection was requested)
-	mFolders->updateSelection();
-	LLPanel::draw();
-}
-
-void LLInventoryPanel::setFilterTypes(U64 filter_types, BOOL filter_for_categories)
-{
-	mFolders->getFilter()->setFilterTypes(filter_types, filter_for_categories);
-}	
-
-void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask)
-{
-	mFolders->getFilter()->setFilterPermissions(filter_perm_mask);
-}
-
-void LLInventoryPanel::setFilterSubString(const std::string& string)
-{
-	mFolders->getFilter()->setFilterSubString(string);
-}
-
-void LLInventoryPanel::setSortOrder(U32 order)
-{
-	mFolders->getFilter()->setSortOrder(order);
-	if (mFolders->getFilter()->isModified())
-	{
-		mFolders->setSortOrder(order);
-		// try to keep selection onscreen, even if it wasn't to start with
-		mFolders->scrollToShowSelection();
-	}
-}
-
-void LLInventoryPanel::setSinceLogoff(BOOL sl)
-{
-	mFolders->getFilter()->setDateRangeLastLogoff(sl);
-}
-
-void LLInventoryPanel::setHoursAgo(U32 hours)
-{
-	mFolders->getFilter()->setHoursAgo(hours);
-}
-
-void LLInventoryPanel::setShowFolderState(LLInventoryFilter::EFolderShow show)
-{
-	mFolders->getFilter()->setShowFolderState(show);
-}
-
-LLInventoryFilter::EFolderShow LLInventoryPanel::getShowFolderState()
-{
-	return mFolders->getFilter()->getShowFolderState();
-}
-
-static LLFastTimer::DeclareTimer FTM_REFRESH("Inventory Refresh");
-
-void LLInventoryPanel::modelChanged(U32 mask)
-{
-	LLFastTimer t2(FTM_REFRESH);
-
-	bool handled = false;
-
-	// inventory just initialized, do complete build
-	if ((mask & LLInventoryObserver::ADD) && gInventory.getChangedIDs().empty() && !mHasInventoryConnection)
-	{
-		rebuildViewsFor(mStartFolderID);
-		mHasInventoryConnection = true;
-		return;
-	}
-
-	if(mask & LLInventoryObserver::LABEL)
-	{
-		handled = true;
-		// label change - empty out the display name for each object
-		// in this change set.
-		const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
-		std::set<LLUUID>::const_iterator id_it = changed_items.begin();
-		std::set<LLUUID>::const_iterator id_end = changed_items.end();
-		LLFolderViewItem* view = NULL;
-		LLInvFVBridge* bridge = NULL;
-		for (;id_it != id_end; ++id_it)
-		{
-			view = mFolders->getItemByID(*id_it);
-			if(view)
-			{
-				// request refresh on this item (also flags for filtering)
-				bridge = (LLInvFVBridge*)view->getListener();
-				if(bridge)
-				{	// Clear the display name first, so it gets properly re-built during refresh()
-					bridge->clearDisplayName();
-				}
-				view->refresh();
-			}
-		}
-	}
-	if((mask & (LLInventoryObserver::STRUCTURE
-				| LLInventoryObserver::ADD
-				| LLInventoryObserver::REMOVE)) != 0)
-	{
-		handled = true;
-		// Record which folders are open by uuid.
-		LLInventoryModel* model = getModel();
-		if (model)
-		{
-			const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
-
-			std::set<LLUUID>::const_iterator id_it = changed_items.begin();
-			std::set<LLUUID>::const_iterator id_end = changed_items.end();
-			for (;id_it != id_end; ++id_it)
-			{
-				// sync view with model
-				LLInventoryObject* model_item = model->getObject(*id_it);
-				LLFolderViewItem* view_item = mFolders->getItemByID(*id_it);
-
-				if (model_item)
-				{
-					if (!view_item)
-					{
-						// this object was just created, need to build a view for it
-						if ((mask & LLInventoryObserver::ADD) != LLInventoryObserver::ADD)
-						{
-							llwarns << *id_it << " is in model but not in view, but ADD flag not set" << llendl;
-						}
-						buildNewViews(*id_it);
-						
-						// select any newly created object
-						// that has the auto rename at top of folder
-						// root set
-						if(mFolders->getRoot()->needsAutoRename())
-						{
-							setSelection(*id_it, FALSE);
-						}
-					}
-					else
-					{
-						// this object was probably moved, check its parent
-						if ((mask & LLInventoryObserver::STRUCTURE) != LLInventoryObserver::STRUCTURE)
-						{
-							llwarns << *id_it << " is in model and in view, but STRUCTURE flag not set" << llendl;
-						}
-
-						LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID());
-
-						// added check against NULL for cases when Inventory panel contains startFolder.
-						// in this case parent is LLFolderView (LLInventoryPanel::mFolders) itself.
-						// this check is a fix for bug EXT-1859.
-						if (NULL != new_parent && view_item->getParentFolder() != new_parent)
-						{
-							view_item->getParentFolder()->extractItem(view_item);
-							view_item->addToFolder(new_parent, mFolders);
-						}
-					}
-				}
-				else
-				{
-					if (view_item)
-					{
-						if ((mask & LLInventoryObserver::REMOVE) != LLInventoryObserver::REMOVE)
-						{
-							llwarns << *id_it << " is not in model but in view, but REMOVE flag not set" << llendl;
-						}
-						// item in view but not model, need to delete view
-						view_item->destroyView();
-					}
-					else
-					{
-						llwarns << *id_it << "Item does not exist in either view or model, but notification triggered" << llendl;
-					}
-				}
-			}
-		}
-	}
-
-	if (!handled)
-	{
-		// it's a small change that only requires a refresh.
-		// *TODO: figure out a more efficient way to do the refresh
-		// since it is expensive on large inventories
-		mFolders->refresh();
-	}
-}
-
-
-void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
-{
-	LLFolderViewItem* old_view = NULL;
-
-	// get old LLFolderViewItem
-	old_view = mFolders->getItemByID(id);
-	if (old_view && id.notNull())
-	{
-		old_view->destroyView();
-	}
-
-	buildNewViews(id);
-}
-
-void LLInventoryPanel::buildNewViews(const LLUUID& id)
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_BUILD_NEW_VIEWS);
-	LLFolderViewItem* itemp = NULL;
-	LLInventoryObject* objectp = NULL;
-
-	// Don't add the start folder (the inventory panel will show contents
-	// beginning with the children of the starting folder, excluding the starting folder itself).
-	if (id != mStartFolderID)
-	{
-		objectp = gInventory.getObject(id);
-		if (objectp)
-		{		
-			const LLUUID &parent_id = objectp->getParentUUID();
-			// If this item's parent is the starting folder, then just add it to the top level (recall that 
-			// the starting folder isn't actually represented in the view, parent_folder would be NULL in
-			// this case otherwise).
-			LLFolderViewFolder* parent_folder = (parent_id == mStartFolderID ?
-				mFolders : (LLFolderViewFolder*)mFolders->getItemByID(parent_id));
-
-			// This item exists outside the inventory's hierarchy, so don't add it.
-			if (!parent_folder)
-			{
-				return;
-			}
-
-			if (objectp->getType() <= LLAssetType::AT_NONE ||
-				objectp->getType() >= LLAssetType::AT_COUNT)
-			{
-				llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << 
-					((S32) objectp->getType()) << llendl;
-				return;
-			}
-			
-			if (objectp->getType() == LLAssetType::AT_CATEGORY &&
-					 objectp->getActualType() != LLAssetType::AT_LINK_FOLDER) 
-			{
-				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
-																				objectp->getType(),
-																				LLInventoryType::IT_CATEGORY,
-																				this,
-																				objectp->getUUID());
-
-				if (new_listener)
-				{
-					LLFolderViewFolder::Params p;
-					p.name = new_listener->getDisplayName();
-					p.icon = new_listener->getIcon();
-					p.root = mFolders;
-					p.listener = new_listener;
-					LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(p);
-				
-					folderp->setItemSortOrder(mFolders->getSortOrder());
-					itemp = folderp;
-				}
-			}
-			else 
-			{
-				// Build new view for item
-				LLInventoryItem* item = (LLInventoryItem*)objectp;
-				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
-																				item->getActualType(),
-																				item->getInventoryType(),
-																				this,
-																				item->getUUID(),
-																				item->getFlags());
-
-				if (new_listener)
-				{
-					LLFolderViewItem::Params params;
-					params.name(new_listener->getDisplayName());
-					params.icon(new_listener->getIcon());
-					params.creation_date(new_listener->getCreationDate());
-					params.root(mFolders);
-					params.listener(new_listener);
-					params.rect(LLRect (0, 0, 0, 0));
-					itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
-				}
-			}
-
-			if (itemp)
-			{
-				itemp->addToFolder(parent_folder, mFolders);
-			}
-		}
-	}
-
-	// If this is a folder, add the children of the folder and recursively add any 
-	// child folders.
-	if ((id == mStartFolderID) ||
-		(objectp && objectp->getType() == LLAssetType::AT_CATEGORY))
-	{
-		LLViewerInventoryCategory::cat_array_t* categories;
-		LLViewerInventoryItem::item_array_t* items;
-
-		mInventory->lockDirectDescendentArrays(id, categories, items);
-		if(categories)
-		{
-			S32 count = categories->count();
-			for(S32 i = 0; i < count; ++i)
-			{
-				LLInventoryCategory* cat = categories->get(i);
-				buildNewViews(cat->getUUID());
-			}
-		}
-		if(items)
-		{
-			S32 count = items->count();
-			for(S32 i = 0; i < count; ++i)
-			{
-				LLInventoryItem* item = items->get(i);
-				buildNewViews(item->getUUID());
-			}
-		}
-		mInventory->unlockDirectDescendentArrays(id);
-	}
-}
-
-struct LLConfirmPurgeData
-{
-	LLUUID mID;
-	LLInventoryModel* mModel;
-};
-
-class LLIsNotWorn : public LLInventoryCollectFunctor
-{
-public:
-	LLIsNotWorn() {}
-	virtual ~LLIsNotWorn() {}
-	virtual bool operator()(LLInventoryCategory* cat,
-							LLInventoryItem* item)
-	{
-		return !gAgentWearables.isWearingItem(item->getUUID());
-	}
-};
-
-class LLOpenFolderByID : public LLFolderViewFunctor
-{
-public:
-	LLOpenFolderByID(const LLUUID& id) : mID(id) {}
-	virtual ~LLOpenFolderByID() {}
-	virtual void doFolder(LLFolderViewFolder* folder)
-		{
-			if (folder->getListener() && folder->getListener()->getUUID() == mID) folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-		}
-	virtual void doItem(LLFolderViewItem* item) {}
-protected:
-	const LLUUID& mID;
-};
-
-
-void LLInventoryPanel::openSelected()
-{
-	LLFolderViewItem* folder_item = mFolders->getCurSelectedItem();
-	if(!folder_item) return;
-	LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
-	if(!bridge) return;
-	bridge->openItem();
-}
-
-BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask)
-{
-	BOOL handled = LLView::handleHover(x, y, mask);
-	if(handled)
-	{
-		ECursorType cursor = getWindow()->getCursor();
-		if (LLInventoryModel::backgroundFetchActive() && cursor == UI_CURSOR_ARROW)
-		{
-			// replace arrow cursor with arrow and hourglass cursor
-			getWindow()->setCursor(UI_CURSOR_WORKING);
-		}
-	}
-	else
-	{
-		getWindow()->setCursor(UI_CURSOR_ARROW);
-	}
-	return TRUE;
-}
-
-BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-								   EDragAndDropType cargo_type,
-								   void* cargo_data,
-								   EAcceptance* accept,
-								   std::string& tooltip_msg)
-{
-
-	BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
-
-	if (handled)
-	{
-		mFolders->setDragAndDropThisFrame();
-	}
-
-	return handled;
-}
-
-void LLInventoryPanel::onFocusLost()
-{
-	// inventory no longer handles cut/copy/paste/delete
-	if (LLEditMenuHandler::gEditMenuHandler == mFolders)
-	{
-		LLEditMenuHandler::gEditMenuHandler = NULL;
-	}
-
-	LLPanel::onFocusLost();
-}
-
-void LLInventoryPanel::onFocusReceived()
-{
-	// inventory now handles cut/copy/paste/delete
-	LLEditMenuHandler::gEditMenuHandler = mFolders;
-
-	LLPanel::onFocusReceived();
-}
-
-
-void LLInventoryPanel::openAllFolders()
-{
-	mFolders->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
-	mFolders->arrangeAll();
-}
-
-void LLInventoryPanel::openDefaultFolderForType(LLAssetType::EType type)
-{
-	LLUUID category_id = mInventory->findCategoryUUIDForType(type);
-	LLOpenFolderByID opener(category_id);
-	mFolders->applyFunctorRecursively(opener);
-}
-
-void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus)
-{
-	// Don't select objects in COF (e.g. to prevent refocus when items are worn).
-	const LLInventoryObject *obj = gInventory.getObject(obj_id);
-	if (obj && obj->getParentUUID() == LLAppearanceManager::getCOF())
-	{
-		return;
-	}
-	mFolders->setSelectionByID(obj_id, take_keyboard_focus);
-}
-
-void LLInventoryPanel::clearSelection()
-{
-	mFolders->clearSelection();
-}
-
-void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& items, BOOL user_action)
-{
-	LLFolderView* fv = getRootFolder();
-	if (fv->needsAutoRename()) // auto-selecting a new user-created asset and preparing to rename
-	{
-		fv->setNeedsAutoRename(FALSE);
-		if (items.size()) // new asset is visible and selected
-		{
-			fv->startRenamingSelectedItem();
-		}
-	}
-	// Seraph - Put determineFolderType in here for ensemble typing?
-}
-
-//----------------------------------------------------------------------------
-
-void LLInventoryPanel::doToSelected(const LLSD& userdata)
-{
-	mFolders->doToSelected(&gInventory, userdata);
-}
-
-void LLInventoryPanel::doCreate(const LLSD& userdata)
-{
-	menu_create_inventory_item(mFolders, LLFolderBridge::sSelf, userdata);
-}
-
-bool LLInventoryPanel::beginIMSession()
-{
-	std::set<LLUUID> selected_items;
-	mFolders->getSelectionList(selected_items);
-
-	std::string name;
-	static int session_num = 1;
-
-	LLDynamicArray<LLUUID> members;
-	EInstantMessage type = IM_SESSION_CONFERENCE_START;
-
-	std::set<LLUUID>::const_iterator iter;
-	for (iter = selected_items.begin(); iter != selected_items.end(); iter++)
-	{
-
-		LLUUID item = *iter;
-		LLFolderViewItem* folder_item = mFolders->getItemByID(item);
-			
-		if(folder_item) 
-		{
-			LLFolderViewEventListener* fve_listener = folder_item->getListener();
-			if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY))
-			{
-
-				LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getListener();
-				if(!bridge) return true;
-				LLViewerInventoryCategory* cat = bridge->getCategory();
-				if(!cat) return true;
-				name = cat->getName();
-				LLUniqueBuddyCollector is_buddy;
-				LLInventoryModel::cat_array_t cat_array;
-				LLInventoryModel::item_array_t item_array;
-				gInventory.collectDescendentsIf(bridge->getUUID(),
-												cat_array,
-												item_array,
-												LLInventoryModel::EXCLUDE_TRASH,
-												is_buddy);
-				S32 count = item_array.count();
-				if(count > 0)
-				{
-					LLFloaterReg::showInstance("communicate");
-					// create the session
-					LLAvatarTracker& at = LLAvatarTracker::instance();
-					LLUUID id;
-					for(S32 i = 0; i < count; ++i)
-					{
-						id = item_array.get(i)->getCreatorUUID();
-						if(at.isBuddyOnline(id))
-						{
-							members.put(id);
-						}
-					}
-				}
-			}
-			else
-			{
-				LLFolderViewItem* folder_item = mFolders->getItemByID(item);
-				if(!folder_item) return true;
-				LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener();
-
-				if (listenerp->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
-				{
-					LLInventoryItem* inv_item = gInventory.getItem(listenerp->getUUID());
-
-					if (inv_item)
-					{
-						LLAvatarTracker& at = LLAvatarTracker::instance();
-						LLUUID id = inv_item->getCreatorUUID();
-
-						if(at.isBuddyOnline(id))
-						{
-							members.put(id);
-						}
-					}
-				} //if IT_CALLINGCARD
-			} //if !IT_CATEGORY
-		}
-	} //for selected_items	
-
-	// the session_id is randomly generated UUID which will be replaced later
-	// with a server side generated number
-
-	if (name.empty())
-	{
-		name = llformat("Session %d", session_num++);
-	}
-
-	gIMMgr->addSession(name, type, members[0], members);
-		
-	return true;
-}
-
-bool LLInventoryPanel::attachObject(const LLSD& userdata)
-{
-	std::set<LLUUID> selected_items;
-	mFolders->getSelectionList(selected_items);
-
-	std::string joint_name = userdata.asString();
-	LLVOAvatar *avatarp = static_cast<LLVOAvatar*>(gAgent.getAvatarObject());
-	LLViewerJointAttachment* attachmentp = NULL;
-	for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); 
-		 iter != avatarp->mAttachmentPoints.end(); )
-	{
-		LLVOAvatar::attachment_map_t::iterator curiter = iter++;
-		LLViewerJointAttachment* attachment = curiter->second;
-		if (attachment->getName() == joint_name)
-		{
-			attachmentp = attachment;
-			break;
-		}
-	}
-	if (attachmentp == NULL)
-	{
-		return true;
-	}
-
-	for (std::set<LLUUID>::const_iterator set_iter = selected_items.begin(); 
-		 set_iter != selected_items.end(); 
-		 ++set_iter)
-	{
-		const LLUUID &id = *set_iter;
-		LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem(id);
-		if(item && gInventory.isObjectDescendentOf(id, gInventory.getRootFolderID()))
-		{
-			rez_attachment(item, attachmentp);
-		}
-		else if(item && item->isComplete())
-		{
-			// must be in library. copy it to our inventory and put it on.
-			LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(attachmentp);
-			copy_inventory_item(gAgent.getID(),
-								item->getPermissions().getOwner(),
-								item->getUUID(),
-								LLUUID::null,
-								std::string(),
-								cb);
-		}
-	}
-	gFocusMgr.setKeyboardFocus(NULL);
-
-	return true;
-}
-
-
-//----------------------------------------------------------------------------
-
-// static DEBUG ONLY:
-void LLInventoryPanel::dumpSelectionInformation(void* user_data)
-{
-	LLInventoryPanel* iv = (LLInventoryPanel*)user_data;
-	iv->mFolders->dumpSelectionInformation();
-}
-
-BOOL LLInventoryPanel::getSinceLogoff()
-{
-	return mFolders->getFilter()->isSinceLogoff();
-}
-
-void example_param_block_usage()
-{
-	LLInventoryPanel::Params param_block;
-	param_block.name(std::string("inventory"));
-
-	param_block.sort_order_setting(LLInventoryPanel::RECENTITEMS_SORT_ORDER);
-	param_block.allow_multi_select(true);
-	param_block.filter(LLInventoryPanel::Filter()
-			.sort_order(1)
-			.types(0xffff0000));
-	param_block.inventory(&gInventory);
-	param_block.has_border(true);
-
-	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
-
-	param_block = LLInventoryPanel::Params();
-	param_block.name(std::string("inventory"));
-
-	//LLSD param_block_sd;
-	//param_block_sd["sort_order_setting"] = LLInventoryPanel::RECENTITEMS_SORT_ORDER;
-	//param_block_sd["allow_multi_select"] = true;
-	//param_block_sd["filter"]["sort_order"] = 1;
-	//param_block_sd["filter"]["types"] = (S32)0xffff0000;
-	//param_block_sd["has_border"] = true;
-
-	//LLInitParam::LLSDParser(param_block_sd).parse(param_block);
-
-	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
-}
+/** 
+ * @file llfloaterinventory.cpp
+ * @brief Implementation of the inventory view and associated stuff.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterinventory.h"
+
+#include "llagent.h"
+#include "llfirstuse.h"
+#include "llfloaterreg.h"
+#include "llinventorymodel.h"
+#include "llpanelmaininventory.h"
+#include "llresmgr.h"
+
+///----------------------------------------------------------------------------
+/// LLFloaterInventory
+///----------------------------------------------------------------------------
+
+LLFloaterInventory::LLFloaterInventory(const LLSD& key)
+	: LLFloater(key)
+{
+}
+
+LLFloaterInventory::~LLFloaterInventory()
+{
+}
+
+BOOL LLFloaterInventory::postBuild()
+{
+	mPanelMainInventory = getChild<LLPanelMainInventory>("Inventory Panel");
+	return TRUE;
+}
+
+
+void LLFloaterInventory::draw()
+{
+ 	if (LLInventoryModel::isEverythingFetched())
+	{
+		updateTitle();
+	}
+	LLFloater::draw();
+}
+
+void LLFloaterInventory::updateTitle()
+{
+	LLLocale locale(LLLocale::USER_LOCALE);
+	std::string item_count_string;
+	LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount());
+
+	LLStringUtil::format_map_t string_args;
+	string_args["[ITEM_COUNT]"] = item_count_string;
+	string_args["[FILTER]"] = mPanelMainInventory->getFilterText();
+
+	if (LLInventoryModel::backgroundFetchActive())
+	{
+		setTitle(getString("TitleFetching", string_args));
+	}
+	else
+	{
+		setTitle(getString("TitleCompleted", string_args));
+	}
+}
+
+void LLFloaterInventory::changed(U32 mask)
+{
+	updateTitle();
+}
+
+LLInventoryPanel* LLFloaterInventory::getPanel()
+{
+	if (mPanelMainInventory)
+		return mPanelMainInventory->getPanel();
+	return NULL;
+}
+
+// static
+LLFloaterInventory* LLFloaterInventory::showAgentInventory()
+{
+	LLFloaterInventory* iv = NULL;
+	if (!gAgent.cameraMouselook())
+	{
+		iv = LLFloaterReg::showTypedInstance<LLFloaterInventory>("inventory", LLSD());
+	}
+	return iv;
+}
+
+// static
+LLFloaterInventory* LLFloaterInventory::getActiveInventory()
+{
+	LLFloaterInventory* res = NULL;
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
+	S32 z_min = S32_MAX;
+	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+	{
+		LLFloaterInventory* iv = dynamic_cast<LLFloaterInventory*>(*iter);
+		if (iv)
+		{
+			S32 z_order = gFloaterView->getZOrder(iv);
+			if (z_order < z_min)
+			{
+				res = iv;
+				z_min = z_order;
+			}
+		}
+	}
+	return res;
+}
+
+// static
+void LLFloaterInventory::cleanup()
+{
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
+	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end();)
+	{
+		LLFloaterInventory* iv = dynamic_cast<LLFloaterInventory*>(*iter++);
+		if (iv)
+		{
+			iv->destroy();
+		}
+	}
+}
+
+void LLFloaterInventory::onOpen(const LLSD& key)
+{
+	LLFirstUse::useInventory();
+}
diff --git a/indra/newview/llfloaterinventory.h b/indra/newview/llfloaterinventory.h
index 4c9ac5d4c68..f2f2963a333 100644
--- a/indra/newview/llfloaterinventory.h
+++ b/indra/newview/llfloaterinventory.h
@@ -31,366 +31,54 @@
  * $/LicenseInfo$
  */
 
-#ifndef LL_LLINVENTORYVIEW_H
-#define LL_LLINVENTORYVIEW_H
+#ifndef LL_LLFLOATERINVENTORY_H
+#define LL_LLFLOATERINVENTORY_H
 
-#include "llassetstorage.h"
-#include "lldarray.h"
 #include "llfloater.h"
-#include "llinventory.h"
-#include "llinventoryfilter.h"
-#include "llfolderview.h"
-#include "llinventorymodel.h"
-#include "lluictrlfactory.h"
-#include <set>
 
+class LLInventoryPanel;
+class LLPanelMainInventory;
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLFloaterInventory
 //
-// This is the agent inventory _floater_.
-// It deals with the buttons and views used to navigate as
-// well as controls the behavior of the overall object.
+// This deals with the buttons and views used to navigate as
+// well as controlling the behavior of the overall object.
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-class LLFolderViewItem;
-class LLInventoryFilter;
-class LLInventoryModel;
-class LLInvFVBridge;
-class LLInventoryFVBridgeBuilder;
-class LLMenuBarGL;
-class LLCheckBoxCtrl;
-class LLSpinCtrl;
-class LLScrollContainer;
-class LLTextBox;
-class LLIconCtrl;
-class LLSaveFolderState;
-class LLFilterEditor;
-class LLTabContainer;
-
-class LLInventoryPanel : public LLPanel
+class LLFloaterInventory : public LLFloater
 {
-public:
-	static const std::string DEFAULT_SORT_ORDER;
-	static const std::string RECENTITEMS_SORT_ORDER;
-	static const std::string INHERIT_SORT_ORDER;
-
-	struct Filter : public LLInitParam::Block<Filter>
-	{
-		Optional<U32>			sort_order;
-		Optional<U32>			types;
-		Optional<std::string>	search_string;
-
-		Filter()
-		:	sort_order("sort_order"),
-			types("types", 0xffffffff),
-			search_string("search_string")
-		{}
-	};
-
-	struct Params 
-	:	public LLInitParam::Block<Params, LLPanel::Params>
-	{
-		Optional<std::string>				sort_order_setting;
-		Optional<LLInventoryModel*>			inventory;
-		Optional<bool>						allow_multi_select;
-		Optional<Filter>					filter;
-		Optional<std::string>               start_folder;
-
-		Params()
-		:	sort_order_setting("sort_order_setting"),
-			inventory("", &gInventory),
-			allow_multi_select("allow_multi_select", true),
-			filter("filter"),
-			start_folder("start_folder")
-		{}
-	};
-
-protected:
-	LLInventoryPanel(const Params&);
-	friend class LLUICtrlFactory;
-
-public:
-	virtual ~LLInventoryPanel();
-
-	LLInventoryModel* getModel() { return mInventory; }
-
-	BOOL postBuild();
-
-	// LLView methods
-	void draw();
-	BOOL handleHover(S32 x, S32 y, MASK mask);
-	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-								   EDragAndDropType cargo_type,
-								   void* cargo_data,
-								   EAcceptance* accept,
-								   std::string& tooltip_msg);
-	// LLUICtrl methods
-	 /*virtual*/ void onFocusLost();
-	 /*virtual*/ void onFocusReceived();
-
-	// Call this method to set the selection.
-	void openAllFolders();
-	void openDefaultFolderForType(LLAssetType::EType);
-	void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
-	void setSelectCallback(const LLFolderView::signal_t::slot_type& cb) { if (mFolders) mFolders->setSelectCallback(cb); }
-	void clearSelection();
-	LLInventoryFilter* getFilter() { return mFolders->getFilter(); }
-	void setFilterTypes(U64 filter, BOOL filter_for_categories = FALSE); // if filter_for_categories is true, operate on folder preferred asset type
-	U32 getFilterTypes() const { return mFolders->getFilterTypes(); }
-	void setFilterPermMask(PermissionMask filter_perm_mask);
-	U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); }
-	void setFilterSubString(const std::string& string);
-	const std::string getFilterSubString() { return mFolders->getFilterSubString(); }
-	void setSortOrder(U32 order);
-	U32 getSortOrder() { return mFolders->getSortOrder(); }
-	void setSinceLogoff(BOOL sl);
-	void setHoursAgo(U32 hours);
-	BOOL getSinceLogoff();
-	
-	void setShowFolderState(LLInventoryFilter::EFolderShow show);
-	LLInventoryFilter::EFolderShow getShowFolderState();
-	void setAllowMultiSelect(BOOL allow) { mFolders->setAllowMultiSelect(allow); }
-	// This method is called when something has changed about the inventory.
-	void modelChanged(U32 mask);
-	LLFolderView* getRootFolder() { return mFolders; }
-	LLScrollContainer* getScrollableContainer() { return mScroller; }
-	
-	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
-	
-	// Callbacks
-	void doToSelected(const LLSD& userdata);
-	void doCreate(const LLSD& userdata);
-	bool beginIMSession();
-	bool attachObject(const LLSD& userdata);
-	
-	// DEBUG ONLY:
-	static void dumpSelectionInformation(void* user_data);
-
-	void openSelected();
-	void unSelectAll()	{ mFolders->setSelection(NULL, FALSE, FALSE); }
-	
-protected:
-	// Given the id and the parent, build all of the folder views.
-	void rebuildViewsFor(const LLUUID& id);
-	virtual void buildNewViews(const LLUUID& id); // made virtual to support derived classes. EXT-719
-
-protected:
-	LLInventoryModel*			mInventory;
-	LLInventoryObserver*		mInventoryObserver;
-	BOOL 						mAllowMultiSelect;
-	std::string					mSortOrderSetting;
-
-//private: // Can not make these private - needed by llinventorysubtreepanel
-	LLFolderView*				mFolders;
-	std::string                 mStartFolderString;
-
-	/**
-	 * Contains UUID of Inventory item from which hierarchy should be built.
-	 * Can be set with the "start_folder" xml property.
-	 * Default is LLUUID::null that means total Inventory hierarchy.
-	 */
-	LLUUID						mStartFolderID;
-	LLScrollContainer*			mScroller;
-	bool						mHasInventoryConnection;
-
-	/**
-	 * Flag specified if default inventory hierarchy should be created in postBuild()
-	 */
-	bool						mBuildDefaultHierarchy;
-
-	LLUUID						mRootInventoryItemUUID;
-
-	/**
-	 * Pointer to LLInventoryFVBridgeBuilder.
-	 *
-	 * It is set in LLInventoryPanel's constructor and can be overridden in derived classes with 
-	 * another implementation.
-	 * Take into account it will not be deleted by LLInventoryPanel itself.
-	 */
-	const LLInventoryFVBridgeBuilder* mInvFVBridgeBuilder;
-
-};
-
-class LLFloaterInventory;
-
-class LLFloaterInventoryFinder : public LLFloater
-{
-public:
-	LLFloaterInventoryFinder( LLFloaterInventory* inventory_view);
-	virtual void draw();
-	/*virtual*/	BOOL	postBuild();
-	void changeFilter(LLInventoryFilter* filter);
-	void updateElementsFromFilter();
-	BOOL getCheckShowEmpty();
-	BOOL getCheckSinceLogoff();
-
-	static void onTimeAgo(LLUICtrl*, void *);
-	static void onCheckSinceLogoff(LLUICtrl*, void *);
-	static void onCloseBtn(void* user_data);
-	static void selectAllTypes(void* user_data);
-	static void selectNoTypes(void* user_data);
-
-protected:
-	LLFloaterInventory*	mFloaterInventory;
-	LLSpinCtrl*			mSpinSinceDays;
-	LLSpinCtrl*			mSpinSinceHours;
-	LLInventoryFilter*	mFilter;
-};
-
-class LLFloaterInventory : public LLFloater, LLInventoryObserver
-{
-friend class LLFloaterInventoryFinder;
-
 public:
 	LLFloaterInventory(const LLSD& key);
 	~LLFloaterInventory();
 
-	/*virtual*/ void changed(U32 mask);
-
-	 BOOL postBuild();
-
-	//
-	// Misc functions
-	//
-	void setFilterTextFromFilter() { mFilterText = mActivePanel->getFilter()->getFilterText(); }
-	void startSearch();
-	
-	// This method makes sure that an inventory view exists, is
-	// visible, and has focus. The view chosen is returned.
-	static LLFloaterInventory* showAgentInventory();
+	BOOL postBuild();
 
 	// Return the active inventory view if there is one. Active is
 	// defined as the inventory that is the closest to the front, and
 	// is visible.
 	static LLFloaterInventory* getActiveInventory();
 
-	// This method calls showAgentInventory() if no views are visible,
-	// or hides/destroyes them all if any are visible.
-	static void toggleVisibility();
-	static void toggleVisibility(void*) { toggleVisibility(); }
+	// This method makes sure that an inventory view exists, is
+	// visible, and has focus. The view chosen is returned.
+	static LLFloaterInventory* showAgentInventory();
 
 	// Final cleanup, destroy all open inventory views.
 	static void cleanup();
 
-	// LLView & LLFloater functionality
-	virtual void onOpen(const LLSD& key);
-	virtual void draw();
-	virtual BOOL handleKeyHere(KEY key, MASK mask);
-
-	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-		EDragAndDropType cargo_type,
-		void* cargo_data,
-		EAcceptance* accept,
-		std::string& tooltip_msg);
-
-
-	LLInventoryPanel* getPanel() { return mActivePanel; }
-	LLInventoryPanel* getActivePanel() { return mActivePanel; }
-
-	static BOOL filtersVisible(void* user_data);
-	void onClearSearch();
-	static void onFoldersByName(void *user_data);
-	static BOOL checkFoldersByName(void *user_data);
-	void onFilterEdit(const std::string& search_string );
-	static BOOL incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward);
-	void onFilterSelected();
-
-	const std::string getFilterSubString() { return mActivePanel->getFilterSubString(); }
-	void setFilterSubString(const std::string& string) { mActivePanel->setFilterSubString(string); }
-	
-	// menu callbacks
-	void doToSelected(const LLSD& userdata);
-	void closeAllFolders();
-	void doCreate(const LLSD& userdata);
-	void resetFilters();
-	void setSortBy(const LLSD& userdata);
-	
-	// HACK: Until we can route this info through the instant message hierarchy
-	static BOOL sWearNewClothing;
-	static LLUUID sWearNewClothingTransactionID;	// wear all clothing in this transaction
-
-	void toggleFindOptions();
-
-	LLFloaterInventoryFinder* getFinder() { return (LLFloaterInventoryFinder*)mFinderHandle.get(); }
+	// Inherited functionality
+	/*virtual*/ void changed(U32 mask);
+	/*virtual*/ void draw();
+	/*virtual*/ void onOpen(const LLSD& key);
 
+	LLInventoryPanel* getPanel();
 protected:
-	LLFilterEditor*				mFilterEditor;
-	LLTabContainer*				mFilterTabs;
-	LLHandle<LLFloater>			mFinderHandle;
-	LLInventoryPanel*			mActivePanel;
-	LLSaveFolderState*			mSavedFolderState;
-
-	std::string					mFilterText;
-
-private:
 	void updateTitle();
+private:
+	LLPanelMainInventory* mPanelMainInventory;
 };
 
-class LLSelectFirstFilteredItem : public LLFolderViewFunctor
-{
-public:
-	LLSelectFirstFilteredItem() : mItemSelected(FALSE) {}
-	virtual ~LLSelectFirstFilteredItem() {}
-	virtual void doFolder(LLFolderViewFolder* folder);
-	virtual void doItem(LLFolderViewItem* item);
-	BOOL wasItemSelected() { return mItemSelected; }
-protected:
-	BOOL	mItemSelected;
-};
-
-class LLOpenFilteredFolders : public LLFolderViewFunctor
-{
-public:
-	LLOpenFilteredFolders()  {}
-	virtual ~LLOpenFilteredFolders() {}
-	virtual void doFolder(LLFolderViewFolder* folder);
-	virtual void doItem(LLFolderViewItem* item);
-};
-
-class LLSaveFolderState : public LLFolderViewFunctor
-{
-public:
-	LLSaveFolderState() : mApply(FALSE) {}
-	virtual ~LLSaveFolderState() {}
-	virtual void doFolder(LLFolderViewFolder* folder);
-	virtual void doItem(LLFolderViewItem* item) {}
-	void setApply(BOOL apply);
-	void clearOpenFolders() { mOpenFolders.clear(); }
-protected:
-	std::set<LLUUID> mOpenFolders;
-	BOOL mApply;
-};
-
-class LLOpenFoldersWithSelection : public LLFolderViewFunctor
-{
-public:
-	LLOpenFoldersWithSelection() {}
-	virtual ~LLOpenFoldersWithSelection() {}
-	virtual void doFolder(LLFolderViewFolder* folder);
-	virtual void doItem(LLFolderViewItem* item);
-};
-
-///----------------------------------------------------------------------------
-/// Function declarations, constants, enums, and typedefs
-///----------------------------------------------------------------------------
-
-// useful functions with the inventory view
-
-class LLInventoryCategory;
-class LLInventoryItem;
-
-const std::string& get_item_icon_name(LLAssetType::EType asset_type,
-							 LLInventoryType::EType inventory_type,
-							 U32 attachment_point, 
-							 BOOL item_is_multi );
-
-LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
-							 LLInventoryType::EType inventory_type,
-							 U32 attachment_point, 
-							 BOOL item_is_multi );
-
-#endif // LL_LLINVENTORYVIEW_H
+#endif // LL_LLFLOATERINVENTORY_H
 
 
 
diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp
index aa82dc34b74..b6ec0868cfd 100644
--- a/indra/newview/llfloateropenobject.cpp
+++ b/indra/newview/llfloateropenobject.cpp
@@ -32,7 +32,7 @@
 
 /*
  * Shows the contents of an object.
- * A floater wrapper for llpanelinventory
+ * A floater wrapper for LLPanelObjectInventory
  */
 
 #include "llviewerprecompiledheaders.h"
@@ -47,7 +47,8 @@
 #include "llinventorybridge.h"
 #include "llfloaterinventory.h"
 #include "llinventorymodel.h"
-#include "llpanelinventory.h"
+#include "llinventorypanel.h"
+#include "llpanelobjectinventory.h"
 #include "llfloaterreg.h"
 #include "llselectmgr.h"
 #include "lluiconstants.h"
@@ -58,7 +59,7 @@
 
 LLFloaterOpenObject::LLFloaterOpenObject(const LLSD& key)
 :	LLFloater(key),
-	mPanelInventory(NULL),
+	mPanelInventoryObject(NULL),
 	mDirty(TRUE)
 {
 //	LLUICtrlFactory::getInstance()->buildFloater(this,"floater_openobject.xml");
@@ -74,7 +75,7 @@ LLFloaterOpenObject::~LLFloaterOpenObject()
 BOOL LLFloaterOpenObject::postBuild()
 {
 	childSetTextArg("object_name", "[DESC]", std::string("Object") ); // *Note: probably do not want to translate this
-	mPanelInventory = getChild<LLPanelInventory>("object_contents");
+	mPanelInventoryObject = getChild<LLPanelObjectInventory>("object_contents");
 	return TRUE;
 }
 
@@ -96,7 +97,7 @@ void LLFloaterOpenObject::onOpen(const LLSD& key)
 }
 void LLFloaterOpenObject::refresh()
 {
-	mPanelInventory->refresh();
+	mPanelInventoryObject->refresh();
 
 	std::string name;
 	BOOL enabled;
diff --git a/indra/newview/llfloateropenobject.h b/indra/newview/llfloateropenobject.h
index a61cc04941f..10d96b7ea3a 100644
--- a/indra/newview/llfloateropenobject.h
+++ b/indra/newview/llfloateropenobject.h
@@ -41,7 +41,7 @@
 #include "llfloater.h"
 
 class LLObjectSelection;
-class LLPanelInventory;
+class LLPanelObjectInventory;
 
 class LLFloaterOpenObject
 : public LLFloater
@@ -77,7 +77,7 @@ class LLFloaterOpenObject
 	
 protected:
 
-	LLPanelInventory*	mPanelInventory;
+	LLPanelObjectInventory*	mPanelInventoryObject;
 	LLSafeHandle<LLObjectSelection> mObjectSelection;
 	BOOL mDirty;
 };
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 3bec6f9e734..9c13e90d2cb 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -53,7 +53,7 @@
 #include "llpanelcontents.h"
 #include "llpanelface.h"
 #include "llpanelland.h"
-#include "llpanelinventory.h"
+#include "llpanelobjectinventory.h"
 #include "llpanelobject.h"
 #include "llpanelvolume.h"
 #include "llpanelpermissions.h"
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index de18e747528..a963c96da43 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -38,6 +38,7 @@
 #include "llinventorybridge.h"
 #include "llinventoryclipboard.h" // *TODO: remove this once hack below gone.
 #include "llinventoryfilter.h"
+#include "llinventoryfunctions.h"
 #include "llfoldertype.h"
 #include "llfloaterinventory.h"// hacked in for the bonus context menu items.
 #include "llkeyboard.h"
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index 77ee90f6812..fdbbf2f189f 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -70,6 +70,7 @@
 #include "llpanelimcontrolpanel.h"
 #include "llrecentpeople.h"
 #include "llresmgr.h"
+#include "lltooldraganddrop.h"
 #include "lltrans.h"
 #include "lltabcontainer.h"
 #include "llviewertexteditor.h"
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 3aa35d98f83..55e102b8f34 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1,5139 +1,5149 @@
-/** 
- * @file llinventorybridge.cpp
- * @brief Implementation of the Inventory-Folder-View-Bridge classes.
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include <utility> // for std::pair<>
-
-#include "llfloaterinventory.h"
-#include "llinventorybridge.h"
-
-#include "message.h"
-
-#include "llagent.h"
-#include "llagentwearables.h"
-#include "llcallingcard.h"
-#include "llcheckboxctrl.h"		// for radio buttons
-#include "llfloaterreg.h"
-#include "llradiogroup.h"
-#include "llspinctrl.h"
-#include "lltextbox.h"
-#include "llui.h"
-
-#include "llviewercontrol.h"
-#include "llfirstuse.h"
-#include "llfoldertype.h"
-#include "llfloaterchat.h"
-#include "llfloatercustomize.h"
-#include "llfloaterproperties.h"
-#include "llfloaterworldmap.h"
-#include "llfocusmgr.h"
-#include "llfolderview.h"
-#include "llfriendcard.h"
-#include "llavataractions.h"
-#include "llgesturemgr.h"
-#include "lliconctrl.h"
-#include "llinventorymodel.h"
-#include "llinventoryclipboard.h"
-#include "lllineeditor.h"
-#include "llmenugl.h"
-#include "llpreviewanim.h"
-#include "llpreviewgesture.h"
-#include "llpreviewnotecard.h"
-#include "llpreviewscript.h"
-#include "llpreviewsound.h"
-#include "llpreviewtexture.h"
-#include "llresmgr.h"
-#include "llscrollcontainer.h"
-#include "llimview.h"
-#include "lltooldraganddrop.h"
-#include "llviewertexturelist.h"
-#include "llviewerinventory.h"
-#include "llviewerobjectlist.h"
-#include "llviewerwindow.h"
-#include "llvoavatar.h"
-#include "llwearable.h"
-#include "llwearablelist.h"
-#include "llviewermessage.h" 
-#include "llviewerregion.h"
-#include "llvoavatarself.h"
-#include "lltabcontainer.h"
-#include "lluictrlfactory.h"
-#include "llselectmgr.h"
-#include "llsidetray.h"
-#include "llfloateropenobject.h"
-#include "lltrans.h"
-#include "llappearancemgr.h"
-
-using namespace LLOldEvents;
-
-// Helpers
-// bug in busy count inc/dec right now, logic is complex... do we really need it?
-void inc_busy_count()
-{
-// 	gViewerWindow->getWindow()->incBusyCount();
-//  check balance of these calls if this code is changed to ever actually
-//  *do* something!
-}
-void dec_busy_count()
-{
-// 	gViewerWindow->getWindow()->decBusyCount();
-//  check balance of these calls if this code is changed to ever actually
-//  *do* something!
-}
-
-// Function declarations
-void wear_add_inventory_item_on_avatar(LLInventoryItem* item);
-void remove_inventory_category_from_avatar(LLInventoryCategory* category);
-void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id);
-bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*);
-bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response);
-
-std::string ICON_NAME[ICON_NAME_COUNT] =
-{
-	"Inv_Texture",
-	"Inv_Sound",
-	"Inv_CallingCard",
-	"Inv_CallingCard",
-	"Inv_Landmark",
-	"Inv_Landmark",
-	"Inv_Script",
-	"Inv_Clothing",
-	"Inv_Object",
-	"Inv_Object",
-	"Inv_Notecard",
-	"Inv_Skin",
-	"Inv_Snapshot",
-
-	"Inv_BodyShape",
-	"Inv_Skin",
-	"Inv_Hair",
-	"Inv_Eye",
-	"Inv_Shirt",
-	"Inv_Pants",
-	"Inv_Shoe",
-	"Inv_Socks",
-	"Inv_Jacket",
-	"Inv_Gloves",
-	"Inv_Undershirt",
-	"Inv_Underpants",
-	"Inv_Skirt",
-	"inv_item_alpha.tga",
-	"inv_item_tattoo.tga",
-
-	"Inv_Animation",
-	"Inv_Gesture",
-
-	"inv_item_linkitem.tga",
-	"inv_item_linkfolder.tga"
-};
-
-
-// +=================================================+
-// |        LLInventoryPanelObserver                 |
-// +=================================================+
-void LLInventoryPanelObserver::changed(U32 mask)
-{
-	mIP->modelChanged(mask);
-}
-
-
-// +=================================================+
-// |        LLInvFVBridge                            |
-// +=================================================+
-
-LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
-mUUID(uuid), mInvType(LLInventoryType::IT_NONE)
-{
-	mInventoryPanel = inventory->getHandle();
-}
-
-const std::string& LLInvFVBridge::getName() const
-{
-	LLInventoryObject* obj = getInventoryObject();
-	if(obj)
-	{
-		return obj->getName();
-	}
-	return LLStringUtil::null;
-}
-
-const std::string& LLInvFVBridge::getDisplayName() const
-{
-	return getName();
-}
-
-// Folders have full perms
-PermissionMask LLInvFVBridge::getPermissionMask() const
-{
-
-	return PERM_ALL;
-}
-
-// virtual
-LLAssetType::EType LLInvFVBridge::getPreferredType() const
-{
-	return LLAssetType::AT_NONE;
-}
-
-
-// Folders don't have creation dates.
-time_t LLInvFVBridge::getCreationDate() const
-{
-	return 0;
-}
-
-// Can be destoryed (or moved to trash)
-BOOL LLInvFVBridge::isItemRemovable()
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-	if(model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID()))
-	{
-		return TRUE;
-	}
-	return FALSE;
-}
-
-// Sends an update to all link items that point to the base item.
-void LLInvFVBridge::renameLinkedItems(const LLUUID &item_id, const std::string& new_name)
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return;
-
-	LLInventoryItem* itemp = model->getItem(mUUID);
-	if (!itemp) return;
-
-	if (itemp->getIsLinkType())
-	{
-		return;
-	}
-	
-	LLInventoryModel::item_array_t item_array = model->collectLinkedItems(item_id);
-	for (LLInventoryModel::item_array_t::iterator iter = item_array.begin();
-		 iter != item_array.end();
-		 iter++)
-	{
-		LLViewerInventoryItem *linked_item = (*iter);
-		if (linked_item->getUUID() == item_id) continue;
-		
-		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(linked_item);
-		new_item->rename(new_name);
-		new_item->updateServer(FALSE);
-		model->updateItem(new_item);
-		// model->addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID());
-	}
-	model->notifyObservers();
-}
-
-// Can be moved to another folder
-BOOL LLInvFVBridge::isItemMovable() const
-{
-	return TRUE;
-}
-
-/*virtual*/
-/**
- * @brief Adds this item into clipboard storage
- */
-void LLInvFVBridge::cutToClipboard()
-{
-	if(isItemMovable())
-	{
-		LLInventoryClipboard::instance().cut(mUUID);
-	}
-}
-// *TODO: make sure this does the right thing
-void LLInvFVBridge::showProperties()
-{
-	LLFloaterReg::showInstance("properties", mUUID);
-}
-
-void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch)
-{
-	// Deactivate gestures when moving them into Trash
-	LLInvFVBridge* bridge;
-	LLInventoryModel* model = getInventoryModel();
-	LLViewerInventoryItem* item = NULL;
-	LLViewerInventoryCategory* cat = NULL;
-	LLInventoryModel::cat_array_t	descendent_categories;
-	LLInventoryModel::item_array_t	descendent_items;
-	S32 count = batch.count();
-	S32 i,j;
-	for(i = 0; i < count; ++i)
-	{	
-		bridge = (LLInvFVBridge*)(batch.get(i));
-		if(!bridge || !bridge->isItemRemovable()) continue;
-		item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID());
-		if (item)
-		{
-			if(LLAssetType::AT_GESTURE == item->getType())
-			{
-				LLGestureManager::instance().deactivateGesture(item->getUUID());
-			}
-		}
-	}
-	for(i = 0; i < count; ++i)
-	{		
-		bridge = (LLInvFVBridge*)(batch.get(i));
-		if(!bridge || !bridge->isItemRemovable()) continue;
-		cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID());
-		if (cat)
-		{
-			gInventory.collectDescendents( cat->getUUID(), descendent_categories, descendent_items, FALSE );
-			for (j=0; j<descendent_items.count(); j++)
-			{
-				if(LLAssetType::AT_GESTURE == descendent_items[j]->getType())
-				{
-					LLGestureManager::instance().deactivateGesture(descendent_items[j]->getUUID());
-				}
-			}
-		}
-	}
-	removeBatchNoCheck(batch);
-}
-
-void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*>& batch)
-{
-	// this method moves a bunch of items and folders to the trash. As
-	// per design guidelines for the inventory model, the message is
-	// built and the accounting is performed first. After all of that,
-	// we call LLInventoryModel::moveObject() to move everything
-	// around.
-	LLInvFVBridge* bridge;
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return;
-	LLMessageSystem* msg = gMessageSystem;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	LLViewerInventoryItem* item = NULL;
-	LLViewerInventoryCategory* cat = NULL;
-	std::vector<LLUUID> move_ids;
-	LLInventoryModel::update_map_t update;
-	bool start_new_message = true;
-	S32 count = batch.count();
-	S32 i;
-	for(i = 0; i < count; ++i)
-	{
-		bridge = (LLInvFVBridge*)(batch.get(i));
-		if(!bridge || !bridge->isItemRemovable()) continue;
-		item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID());
-		if(item)
-		{
-			if(item->getParentUUID() == trash_id) continue;
-			move_ids.push_back(item->getUUID());
-			LLPreview::hide(item->getUUID());
-			--update[item->getParentUUID()];
-			++update[trash_id];
-			if(start_new_message)
-			{
-				start_new_message = false;
-				msg->newMessageFast(_PREHASH_MoveInventoryItem);
-				msg->nextBlockFast(_PREHASH_AgentData);
-				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-				msg->addBOOLFast(_PREHASH_Stamp, TRUE);
-			}
-			msg->nextBlockFast(_PREHASH_InventoryData);
-			msg->addUUIDFast(_PREHASH_ItemID, item->getUUID());
-			msg->addUUIDFast(_PREHASH_FolderID, trash_id);
-			msg->addString("NewName", NULL);
-			if(msg->isSendFullFast(_PREHASH_InventoryData))
-			{
-				start_new_message = true;
-				gAgent.sendReliableMessage();
-				gInventory.accountForUpdate(update);
-				update.clear();
-			}
-		}
-	}
-	if(!start_new_message)
-	{
-		start_new_message = true;
-		gAgent.sendReliableMessage();
-		gInventory.accountForUpdate(update);
-		update.clear();
-	}
-	for(i = 0; i < count; ++i)
-	{
-		bridge = (LLInvFVBridge*)(batch.get(i));
-		if(!bridge || !bridge->isItemRemovable()) continue;
-		cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID());
-		if(cat)
-		{
-			if(cat->getParentUUID() == trash_id) continue;
-			move_ids.push_back(cat->getUUID());
-			--update[cat->getParentUUID()];
-			++update[trash_id];
-			if(start_new_message)
-			{
-				start_new_message = false;
-				msg->newMessageFast(_PREHASH_MoveInventoryFolder);
-				msg->nextBlockFast(_PREHASH_AgentData);
-				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-				msg->addBOOL("Stamp", TRUE);
-			}
-			msg->nextBlockFast(_PREHASH_InventoryData);
-			msg->addUUIDFast(_PREHASH_FolderID, cat->getUUID());
-			msg->addUUIDFast(_PREHASH_ParentID, trash_id);
-			if(msg->isSendFullFast(_PREHASH_InventoryData))
-			{
-				start_new_message = true;
-				gAgent.sendReliableMessage();
-				gInventory.accountForUpdate(update);
-				update.clear();
-			}
-		}
-	}
-	if(!start_new_message)
-	{
-		gAgent.sendReliableMessage();
-		gInventory.accountForUpdate(update);
-	}
-
-	// move everything.
-	std::vector<LLUUID>::iterator it = move_ids.begin();
-	std::vector<LLUUID>::iterator end = move_ids.end();
-	for(; it != end; ++it)
-	{
-		gInventory.moveObject((*it), trash_id);
-	}
-
-	// notify inventory observers.
-	model->notifyObservers();
-}
-
-BOOL LLInvFVBridge::isClipboardPasteable() const
-{
-	if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory())
-	{
-		return FALSE;
-	}
-	LLInventoryModel* model = getInventoryModel();
-	if (!model)
-	{
-		return FALSE;
-	}
-
-	const LLUUID &agent_id = gAgent.getID();
-
-	LLDynamicArray<LLUUID> objects;
-	LLInventoryClipboard::instance().retrieve(objects);
-	S32 count = objects.count();
-	for(S32 i = 0; i < count; i++)
-	{
-		const LLUUID &item_id = objects.get(i);
-
-		// Can't paste folders
-		const LLInventoryCategory *cat = model->getCategory(item_id);
-		if (cat)
-		{
-			return FALSE;
-		}
-
-		const LLInventoryItem *item = model->getItem(item_id);
-		if (item)
-		{
-			if (!item->getPermissions().allowCopyBy(agent_id))
-			{
-				return FALSE;
-			}
-		}
-	}
-	return TRUE;
-}
-
-BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
-{
-	if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory())
-	{
-		return FALSE;
-	}
-	const LLInventoryModel* model = getInventoryModel();
-	if (!model)
-	{
-		return FALSE;
-	}
-
-	LLDynamicArray<LLUUID> objects;
-	LLInventoryClipboard::instance().retrieve(objects);
-	S32 count = objects.count();
-	for(S32 i = 0; i < count; i++)
-	{
-		const LLInventoryItem *item = model->getItem(objects.get(i));
-		if (item)
-		{
-			if (!LLAssetType::lookupCanLink(item->getActualType()))
-			{
-				return FALSE;
-			}
-		}
-		const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i));
-		if (cat && !LLAssetType::lookupCanLink(cat->getPreferredType()))
-		{
-			return FALSE;
-		}
-	}
-	return TRUE;
-}
-
-void hideContextEntries(LLMenuGL& menu, 
-						const std::vector<std::string> &entries_to_show,
-						const std::vector<std::string> &disabled_entries)
-{
-	const LLView::child_list_t *list = menu.getChildList();
-
-	LLView::child_list_t::const_iterator itor;
-	for (itor = list->begin(); itor != list->end(); ++itor)
-	{
-		std::string name = (*itor)->getName();
-
-		// descend into split menus:
-		LLMenuItemBranchGL* branchp = dynamic_cast<LLMenuItemBranchGL*>(*itor);
-		if ((name == "More") && branchp)
-		{
-			hideContextEntries(*branchp->getBranch(), entries_to_show, disabled_entries);
-		}
-		
-		
-		bool found = false;
-		std::vector<std::string>::const_iterator itor2;
-		for (itor2 = entries_to_show.begin(); itor2 != entries_to_show.end(); ++itor2)
-		{
-			if (*itor2 == name)
-			{
-				found = true;
-			}
-		}
-		if (!found)
-		{
-			(*itor)->setVisible(FALSE);
-		}
-		else
-		{
-			for (itor2 = disabled_entries.begin(); itor2 != disabled_entries.end(); ++itor2)
-			{
-				if (*itor2 == name)
-				{
-					(*itor)->setEnabled(FALSE);
-				}
-			}
-		}
-	}
-}
-
-// Helper for commonly-used entries
-void LLInvFVBridge::getClipboardEntries(bool show_asset_id, 
-										std::vector<std::string> &items, 
-										std::vector<std::string> &disabled_items, U32 flags)
-{
-	items.push_back(std::string("Rename"));
-	if (!isItemRenameable() || (flags & FIRST_SELECTED_ITEM) == 0)
-	{
-		disabled_items.push_back(std::string("Rename"));
-	}
-
-	if (show_asset_id)
-	{
-		items.push_back(std::string("Copy Asset UUID"));
-		if ( (! ( isItemPermissive() || gAgent.isGodlike() ) ) 
-			  || (flags & FIRST_SELECTED_ITEM) == 0)
-		{
-			disabled_items.push_back(std::string("Copy Asset UUID"));
-		}
-	}
-
-	items.push_back(std::string("Copy Separator"));
-
-	items.push_back(std::string("Copy"));
-	if (!isItemCopyable())
-	{
-		disabled_items.push_back(std::string("Copy"));
-	}
-
-	items.push_back(std::string("Paste"));
-	if (!isClipboardPasteable() || (flags & FIRST_SELECTED_ITEM) == 0)
-	{
-		disabled_items.push_back(std::string("Paste"));
-	}
-
-	items.push_back(std::string("Paste As Link"));
-	if (!isClipboardPasteableAsLink() || (flags & FIRST_SELECTED_ITEM) == 0)
-	{
-		disabled_items.push_back(std::string("Paste As Link"));
-	}
-	items.push_back(std::string("Paste Separator"));
-
-	items.push_back(std::string("Delete"));
-	if (!isItemRemovable())
-	{
-		disabled_items.push_back(std::string("Delete"));
-	}
-}
-
-void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	lldebugs << "LLInvFVBridge::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-	if(isInTrash())
-	{
-		items.push_back(std::string("PurgeItem"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("PurgeItem"));
-		}
-		items.push_back(std::string("RestoreItem"));
-	}
-	else
-	{
-		items.push_back(std::string("Open"));
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-	}
-	hideContextEntries(menu, items, disabled_items);
-}
-
-// *TODO: remove this
-BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
-{
-	BOOL rv = FALSE;
-
-	const LLInventoryObject* obj = getInventoryObject();
-
-	if(obj)
-	{
-		*type = LLAssetType::lookupDragAndDropType(obj->getActualType());
-		if(*type == DAD_NONE)
-		{
-			return FALSE;
-		}
-		
-		*id = obj->getUUID();
-		//object_ids.put(obj->getUUID());
-
-		if (*type == DAD_CATEGORY)
-		{
-			gInventory.startBackgroundFetch(obj->getUUID());
-		}
-
-		rv = TRUE;
-	}
-
-	return rv;
-}
-
-LLInventoryObject* LLInvFVBridge::getInventoryObject() const
-{
-	LLInventoryObject* obj = NULL;
-	LLInventoryModel* model = getInventoryModel();
-	if(model)
-	{
-		obj = (LLInventoryObject*)model->getObject(mUUID);
-	}
-	return obj;
-}
-
-LLInventoryModel* LLInvFVBridge::getInventoryModel() const
-{
-	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
-	return panel ? panel->getModel() : NULL;
-}
-
-BOOL LLInvFVBridge::isInTrash() const
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-	const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	return model->isObjectDescendentOf(mUUID, trash_id);
-}
-
-BOOL LLInvFVBridge::isLinkedObjectInTrash() const
-{
-	if (isInTrash()) return TRUE;
-
-	const LLInventoryObject *obj = getInventoryObject();
-	if (obj && obj->getIsLinkType())
-	{
-		LLInventoryModel* model = getInventoryModel();
-		if(!model) return FALSE;
-		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-		return model->isObjectDescendentOf(obj->getLinkedUUID(), trash_id);
-	}
-	return FALSE;
-}
-
-BOOL LLInvFVBridge::isAgentInventory() const
-{
-	const LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-	if(gInventory.getRootFolderID() == mUUID) return TRUE;
-	return model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID());
-}
-
-BOOL LLInvFVBridge::isCOFFolder() const
-{
-	const LLInventoryModel* model = getInventoryModel();
-	if(!model) return TRUE;
-	const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
-	if (mUUID == cof_id || model->isObjectDescendentOf(mUUID, cof_id))
-	{
-		return TRUE;
-	}
-	return FALSE;
-}
-
-BOOL LLInvFVBridge::isItemPermissive() const
-{
-	return FALSE;
-}
-
-// static
-void LLInvFVBridge::changeItemParent(LLInventoryModel* model,
-									 LLViewerInventoryItem* item,
-									 const LLUUID& new_parent,
-									 BOOL restamp)
-{
-	if(item->getParentUUID() != new_parent)
-	{
-		LLInventoryModel::update_list_t update;
-		LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
-		update.push_back(old_folder);
-		LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1);
-		update.push_back(new_folder);
-		gInventory.accountForUpdate(update);
-
-		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
-		new_item->setParent(new_parent);
-		new_item->updateParentOnServer(restamp);
-		model->updateItem(new_item);
-		model->notifyObservers();
-	}
-}
-
-// static
-void LLInvFVBridge::changeCategoryParent(LLInventoryModel* model,
-										 LLViewerInventoryCategory* cat,
-										 const LLUUID& new_parent,
-										 BOOL restamp)
-{
-	if(cat->getParentUUID() != new_parent)
-	{
-		LLInventoryModel::update_list_t update;
-		LLInventoryModel::LLCategoryUpdate old_folder(cat->getParentUUID(), -1);
-		update.push_back(old_folder);
-		LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1);
-		update.push_back(new_folder);
-		gInventory.accountForUpdate(update);
-
-		LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat);
-		new_cat->setParent(new_parent);
-		new_cat->updateParentOnServer(restamp);
-		model->updateCategory(new_cat);
-		model->notifyObservers();
-	}
-}
-
-
-const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type)
-{
-	const std::string rv= LLInventoryType::lookup(inv_type);
-	if(rv.empty())
-	{
-		return std::string("<invalid>");
-	}
-	return rv;
-}
-
-LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,
-										   LLAssetType::EType actual_asset_type,
-										   LLInventoryType::EType inv_type,
-										   LLInventoryPanel* inventory,
-										   const LLUUID& uuid,
-										   U32 flags)
-{
-	LLInvFVBridge* new_listener = NULL;
-	switch(asset_type)
-	{
-		case LLAssetType::AT_TEXTURE:
-			if(!(inv_type == LLInventoryType::IT_TEXTURE || inv_type == LLInventoryType::IT_SNAPSHOT))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLTextureBridge(inventory, uuid, inv_type);
-			break;
-
-		case LLAssetType::AT_SOUND:
-			if(!(inv_type == LLInventoryType::IT_SOUND))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLSoundBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_LANDMARK:
-			if(!(inv_type == LLInventoryType::IT_LANDMARK))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLLandmarkBridge(inventory, uuid, flags);
-			break;
-		
-		case LLAssetType::AT_CALLINGCARD:
-			if(!(inv_type == LLInventoryType::IT_CALLINGCARD))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLCallingCardBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_SCRIPT:
-			if(!(inv_type == LLInventoryType::IT_LSL))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLScriptBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_OBJECT:
-			if(!(inv_type == LLInventoryType::IT_OBJECT || inv_type == LLInventoryType::IT_ATTACHMENT))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLObjectBridge(inventory, uuid, inv_type, flags);
-			break;
-
-		case LLAssetType::AT_NOTECARD:
-			if(!(inv_type == LLInventoryType::IT_NOTECARD))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLNotecardBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_ANIMATION:
-			if(!(inv_type == LLInventoryType::IT_ANIMATION))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLAnimationBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_GESTURE:
-			if(!(inv_type == LLInventoryType::IT_GESTURE))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLGestureBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_LSL_TEXT:
-			if(!(inv_type == LLInventoryType::IT_LSL))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLLSLTextBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_CLOTHING:
-		case LLAssetType::AT_BODYPART:
-			if(!(inv_type == LLInventoryType::IT_WEARABLE))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLWearableBridge(inventory, uuid, asset_type, inv_type, (EWearableType)flags);
-			break;
-		case LLAssetType::AT_CATEGORY:
-		case LLAssetType::AT_ROOT_CATEGORY:
-			if (actual_asset_type == LLAssetType::AT_LINK_FOLDER)
-			{
-				// Create a link folder handler instead.
-				new_listener = new LLLinkFolderBridge(inventory, uuid);
-				break;
-			}
-			new_listener = new LLFolderBridge(inventory, uuid);
-			break;
-		case LLAssetType::AT_LINK:
-			// Only should happen for broken links.
-			new_listener = new LLLinkItemBridge(inventory, uuid);
-			break;
-		case LLAssetType::AT_LINK_FOLDER:
-			// Only should happen for broken links.
-			new_listener = new LLLinkItemBridge(inventory, uuid);
-			break;
-		default:
-			llinfos << "Unhandled asset type (llassetstorage.h): "
-					<< (S32)asset_type << llendl;
-			break;
-	}
-
-	if (new_listener)
-	{
-		new_listener->mInvType = inv_type;
-	}
-
-	return new_listener;
-}
-
-void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid)
-{
-	LLInventoryCategory* cat = model->getCategory(uuid);
-	if (cat)
-	{
-		model->purgeDescendentsOf(uuid);
-		model->notifyObservers();
-	}
-	LLInventoryObject* obj = model->getObject(uuid);
-	if (obj)
-	{
-		model->purgeObject(uuid);
-		model->notifyObservers();
-	}
-}
-
-// +=================================================+
-// |        InventoryFVBridgeBuilder                 |
-// +=================================================+
-LLInvFVBridge* LLInventoryFVBridgeBuilder::createBridge(LLAssetType::EType asset_type,
-														LLAssetType::EType actual_asset_type,
-														LLInventoryType::EType inv_type,
-														LLInventoryPanel* inventory,
-														const LLUUID& uuid,
-														U32 flags /* = 0x00 */) const
-{
-	return LLInvFVBridge::createBridge(asset_type,
-		actual_asset_type,
-		inv_type,
-		inventory,
-		uuid,
-		flags);
-}
-
-// +=================================================+
-// |        LLItemBridge                             |
-// +=================================================+
-
-void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("goto" == action)
-	{
-		gotoItem(folder);
-	}
-	if ("open" == action)
-	{
-		openItem();
-		return;
-	}
-	else if ("properties" == action)
-	{
-		showProperties();
-		return;
-	}
-	else if ("purge" == action)
-	{
-		purgeItem(model, mUUID);
-		return;
-	}
-	else if ("restoreToWorld" == action)
-	{
-		restoreToWorld();
-		return;
-	}
-	else if ("restore" == action)
-	{
-		restoreItem();
-		return;
-	}
-	else if ("copy_uuid" == action)
-	{
-		// Single item only
-		LLInventoryItem* item = model->getItem(mUUID);
-		if(!item) return;
-		LLUUID asset_id = item->getAssetUUID();
-		std::string buffer;
-		asset_id.toString(buffer);
-
-		gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(buffer));
-		return;
-	}
-	else if ("copy" == action)
-	{
-		copyToClipboard();
-		return;
-	}
-	else if ("paste" == action)
-	{
-		// Single item only
-		LLInventoryItem* itemp = model->getItem(mUUID);
-		if (!itemp) return;
-
-		LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID());
-		if (!folder_view_itemp) return;
-
-		folder_view_itemp->getListener()->pasteFromClipboard();
-		return;
-	}
-	else if ("paste_link" == action)
-	{
-		// Single item only
-		LLInventoryItem* itemp = model->getItem(mUUID);
-		if (!itemp) return;
-
-		LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID());
-		if (!folder_view_itemp) return;
-
-		folder_view_itemp->getListener()->pasteLinkFromClipboard();
-		return;
-	}
-}
-
-void LLItemBridge::selectItem()
-{
-	LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem();
-	if(item && !item->isComplete())
-	{
-		item->fetchFromServer();
-	}
-}
-
-void LLItemBridge::restoreItem()
-{
-	LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem();
-	if(item)
-	{
-		LLInventoryModel* model = getInventoryModel();
-		const LLUUID new_parent = model->findCategoryUUIDForType(item->getType());
-		// do not restamp on restore.
-		LLInvFVBridge::changeItemParent(model, item, new_parent, FALSE);
-	}
-}
-
-void LLItemBridge::restoreToWorld()
-{
-	LLViewerInventoryItem* itemp = (LLViewerInventoryItem*)getItem();
-	if (itemp)
-	{
-		LLMessageSystem* msg = gMessageSystem;
-		msg->newMessage("RezRestoreToWorld");
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-
-		msg->nextBlockFast(_PREHASH_InventoryData);
-		itemp->packMessage(msg);
-		msg->sendReliable(gAgent.getRegion()->getHost());
-	}
-
-	//Similar functionality to the drag and drop rez logic
-	BOOL remove_from_inventory = FALSE;
-
-	//remove local inventory copy, sim will deal with permissions and removing the item
-	//from the actual inventory if its a no-copy etc
-	if(!itemp->getPermissions().allowCopyBy(gAgent.getID()))
-	{
-		remove_from_inventory = TRUE;
-	}
-
-	// Check if it's in the trash. (again similar to the normal rez logic)
-	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id))
-	{
-		remove_from_inventory = TRUE;
-	}
-
-	if(remove_from_inventory)
-	{
-		gInventory.deleteObject(itemp->getUUID());
-		gInventory.notifyObservers();
-	}
-}
-
-void LLItemBridge::gotoItem(LLFolderView *folder)
-{
-	LLInventoryObject *obj = getInventoryObject();
-	if (obj && obj->getIsLinkType())
-	{
-		LLInventoryPanel* active_panel = LLFloaterInventory::getActiveInventory()->getPanel();
-		if (active_panel)
-		{
-			active_panel->setSelection(obj->getLinkedUUID(), TAKE_FOCUS_NO);
-		}
-	}
-}
-
-LLUIImagePtr LLItemBridge::getIcon() const
-{
-	return LLUI::getUIImage(ICON_NAME[OBJECT_ICON_NAME]);
-}
-
-PermissionMask LLItemBridge::getPermissionMask() const
-{
-	LLViewerInventoryItem* item = getItem();
-	PermissionMask perm_mask = 0;
-	if(item) 
-	{
-		BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
-		BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID());
-		BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER,
-															gAgent.getID());
-
-		if (copy) perm_mask |= PERM_COPY;
-		if (mod)  perm_mask |= PERM_MODIFY;
-		if (xfer) perm_mask |= PERM_TRANSFER;
-
-	}
-	return perm_mask;
-}
-
-const std::string& LLItemBridge::getDisplayName() const
-{
-	if(mDisplayName.empty())
-	{
-		buildDisplayName(getItem(), mDisplayName);
-	}
-	return mDisplayName;
-}
-
-void LLItemBridge::buildDisplayName(LLInventoryItem* item, std::string& name)
-{
-	if(item) 
-	{
-		name.assign(item->getName());			
-	}
-	else
-	{
-		name.assign(LLStringUtil::null);
-	}
-}
-
-LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const
-{ 
-	U8 font = LLFontGL::NORMAL;
-	
-	if( gAgentWearables.isWearingItem( mUUID ) )
-	{
-		// llinfos << "BOLD" << llendl;
-		font |= LLFontGL::BOLD;
-	}
-
-	const LLViewerInventoryItem* item = getItem();
-	if (item && item->getIsLinkType())
-	{
-		font |= LLFontGL::ITALIC;
-	}
-	return (LLFontGL::StyleFlags)font;
-}
-
-std::string LLItemBridge::getLabelSuffix() const
-{
-	// String table is loaded before login screen and inventory items are
-	// loaded after login, so LLTrans should be ready.
-	static std::string NO_COPY =LLTrans::getString("no_copy");
-	static std::string NO_MOD = LLTrans::getString("no_modify");
-	static std::string NO_XFER = LLTrans::getString("no_transfer");
-	static std::string LINK = LLTrans::getString("link");
-	static std::string BROKEN_LINK = LLTrans::getString("broken_link");
-	std::string suffix;
-	LLInventoryItem* item = getItem();
-	if(item) 
-	{
-		// it's a bit confusing to put nocopy/nomod/etc on calling cards.
-		if(LLAssetType::AT_CALLINGCARD != item->getType()
-		   && item->getPermissions().getOwner() == gAgent.getID())
-		{
-			BOOL broken_link = LLAssetType::lookupIsLinkType(item->getType());
-			if (broken_link) return BROKEN_LINK;
-
-			BOOL link = item->getIsLinkType();
-			if (link) return LINK;
-
-			BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
-			if (!copy)
-			{
-				suffix += NO_COPY;
-			}
-			BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID());
-			if (!mod)
-			{
-				suffix += NO_MOD;
-			}
-			BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER,
-																gAgent.getID());
-			if (!xfer)
-			{
-				suffix += NO_XFER;
-			}
-		}
-	}
-	return suffix;
-}
-
-time_t LLItemBridge::getCreationDate() const
-{
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		return item->getCreationDate();
-	}
-	return 0;
-}
-
-
-BOOL LLItemBridge::isItemRenameable() const
-{
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		// (For now) Don't allow calling card rename since that may confuse users as to
-		// what the calling card points to.
-		if (item->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
-		{
-			return FALSE;
-		}
-		return (item->getPermissions().allowModifyBy(gAgent.getID()));
-	}
-	return FALSE;
-}
-
-BOOL LLItemBridge::renameItem(const std::string& new_name)
-{
-	if(!isItemRenameable())
-		return FALSE;
-	LLPreview::dirty(mUUID);
-	LLInventoryModel* model = getInventoryModel();
-	if(!model)
-		return FALSE;
-	LLViewerInventoryItem* item = getItem();
-	if(item && (item->getName() != new_name))
-	{
-		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
-		new_item->rename(new_name);
-		buildDisplayName(new_item, mDisplayName);
-		new_item->updateServer(FALSE);
-		model->updateItem(new_item);
-
-		model->notifyObservers();
-	}
-	// return FALSE because we either notified observers (& therefore
-	// rebuilt) or we didn't update.
-	return FALSE;
-}
-
-
-BOOL LLItemBridge::removeItem()
-{
-	if(!isItemRemovable())
-	{
-		return FALSE;
-	}
-	// move it to the trash
-	LLPreview::hide(mUUID, TRUE);
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	LLViewerInventoryItem* item = getItem();
-
-	// if item is not already in trash
-	if(item && !model->isObjectDescendentOf(mUUID, trash_id))
-	{
-		// move to trash, and restamp
-		LLInvFVBridge::changeItemParent(model, item, trash_id, TRUE);
-		// delete was successful
-		return TRUE;
-	}
-	else
-	{
-		// tried to delete already item in trash (should purge?)
-		return FALSE;
-	}
-}
-
-BOOL LLItemBridge::isItemCopyable() const
-{
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		// can't copy worn objects. DEV-15183
-		LLVOAvatarSelf *avatarp = gAgent.getAvatarObject();
-		if( !avatarp )
-		{
-			return FALSE;
-		}
-
-		if(avatarp->isWearingAttachment(mUUID))
-		{
-			return FALSE;
-		}
-		
-		// All items can be copied, not all can be pasted.
-		// The only time an item can't be copied is if it's a link 
-		// return (item->getPermissions().allowCopyBy(gAgent.getID()));
-		if (item->getIsLinkType())
-		{
-			return FALSE;
-		}
-		return TRUE;
-	}
-	return FALSE;
-}
-BOOL LLItemBridge::copyToClipboard() const
-{
-	if(isItemCopyable())
-	{
-		LLInventoryClipboard::instance().add(mUUID);
-		return TRUE;
-	}
-	return FALSE;
-}
-
-LLViewerInventoryItem* LLItemBridge::getItem() const
-{
-	LLViewerInventoryItem* item = NULL;
-	LLInventoryModel* model = getInventoryModel();
-	if(model)
-	{
-		item = (LLViewerInventoryItem*)model->getItem(mUUID);
-	}
-	return item;
-}
-
-BOOL LLItemBridge::isItemPermissive() const
-{
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		U32 mask = item->getPermissions().getMaskBase();
-		if((mask & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED)
-		{
-			return TRUE;
-		}
-	}
-	return FALSE;
-}
-
-// +=================================================+
-// |        LLFolderBridge                           |
-// +=================================================+
-
-LLFolderBridge* LLFolderBridge::sSelf=NULL;
-
-// Can be moved to another folder
-BOOL LLFolderBridge::isItemMovable() const 
-{
-	LLInventoryObject* obj = getInventoryObject();
-	if(obj)
-	{
-		return (!LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)obj)->getPreferredType()));
-	}
-	return FALSE;
-}
-
-void LLFolderBridge::selectItem()
-{
-}
-
-
-// Can be destroyed (or moved to trash)
-BOOL LLFolderBridge::isItemRemovable()
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) 
-	{
-		return FALSE;
-	}
-
-	if(!model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID()))
-	{
-		return FALSE;
-	}
-
-	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-	if( !avatar )
-	{
-		return FALSE;
-	}
-
-	LLInventoryCategory* category = model->getCategory(mUUID);
-	if( !category )
-	{
-		return FALSE;
-	}
-
-	if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
-	{
-		return FALSE;
-	}
-
-	LLInventoryModel::cat_array_t	descendent_categories;
-	LLInventoryModel::item_array_t	descendent_items;
-	gInventory.collectDescendents( mUUID, descendent_categories, descendent_items, FALSE );
-
-	S32 i;
-	for( i = 0; i < descendent_categories.count(); i++ )
-	{
-		LLInventoryCategory* category = descendent_categories[i];
-		if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
-		{
-			return FALSE;
-		}
-	}
-
-	for( i = 0; i < descendent_items.count(); i++ )
-	{
-		LLInventoryItem* item = descendent_items[i];
-		if( (item->getType() == LLAssetType::AT_CLOTHING) ||
-			(item->getType() == LLAssetType::AT_BODYPART) )
-		{
-			if(gAgentWearables.isWearingItem(item->getUUID()))
-			{
-				return FALSE;
-			}
-		}
-		else
-		if( item->getType() == LLAssetType::AT_OBJECT )
-		{
-			if(avatar->isWearingAttachment(item->getUUID()))
-			{
-				return FALSE;
-			}
-		}
-	}
-
-	return TRUE;
-}
-
-BOOL LLFolderBridge::isUpToDate() const
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-	LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID);
-	if( !category )
-	{
-		return FALSE;
-	}
-
-	return category->getVersion() != LLViewerInventoryCategory::VERSION_UNKNOWN;
-}
-
-BOOL LLFolderBridge::isItemCopyable() const
-{
-	return TRUE;
-}
-
-BOOL LLFolderBridge::copyToClipboard() const
-{
-	if(isItemCopyable())
-	{
-		LLInventoryClipboard::instance().add(mUUID);
-		return TRUE;
-	}
-	return FALSE;
-}
-
-BOOL LLFolderBridge::isClipboardPasteable() const
-{
-	if ( ! LLInvFVBridge::isClipboardPasteable() )
-		return FALSE;
-
-	// Don't allow pasting duplicates to the Calling Card/Friends subfolders, see bug EXT-1599
-	if ( LLFriendCardsManager::instance().isCategoryInFriendFolder( getCategory() ) )
-	{
-		LLInventoryModel* model = getInventoryModel();
-		if ( !model )
-		{
-			return FALSE;
-		}
-
-		LLDynamicArray<LLUUID> objects;
-		LLInventoryClipboard::instance().retrieve(objects);
-		const LLViewerInventoryCategory *current_cat = getCategory();
-
-		// Search for the direct descendent of current Friends subfolder among all pasted items, 
-		// and return false if is found.
-		for(S32 i = objects.count() - 1; i >= 0; --i)
-		{
-			const LLUUID &obj_id = objects.get(i);
-			if ( LLFriendCardsManager::instance().isObjDirectDescendentOfCategory(model->getObject(obj_id), current_cat) )
-			{
-				return FALSE;
-			}
-		}
-
-	}
-	return TRUE;
-}
-
-BOOL LLFolderBridge::isClipboardPasteableAsLink() const
-{
-	// Check normal paste-as-link permissions
-	if (!LLInvFVBridge::isClipboardPasteableAsLink())
-	{
-		return FALSE;
-	}
-	
-	const LLInventoryModel* model = getInventoryModel();
-	if (!model)
-	{
-		return FALSE;
-	}
-
-	const LLViewerInventoryCategory *current_cat = getCategory();
-	if (current_cat)
-	{
-		const BOOL is_in_friend_folder = LLFriendCardsManager::instance().isCategoryInFriendFolder( current_cat );
-		const LLUUID &current_cat_id = current_cat->getUUID();
-		LLDynamicArray<LLUUID> objects;
-		LLInventoryClipboard::instance().retrieve(objects);
-		S32 count = objects.count();
-		for(S32 i = 0; i < count; i++)
-		{
-			const LLUUID &obj_id = objects.get(i);
-			const LLInventoryCategory *cat = model->getCategory(obj_id);
-			if (cat)
-			{
-				const LLUUID &cat_id = cat->getUUID();
-				// Don't allow recursive pasting
-				if ((cat_id == current_cat_id) || 
-					model->isObjectDescendentOf(current_cat_id, cat_id))
-				{
-					return FALSE;
-				}
-			}
-			// Don't allow pasting duplicates to the Calling Card/Friends subfolders, see bug EXT-1599
-			if ( is_in_friend_folder )
-			{
-				// If object is direct descendent of current Friends subfolder than return false.
-				// Note: We can't use 'const LLInventoryCategory *cat', because it may be null
-				// in case type of obj_id is LLInventoryItem.
-				if ( LLFriendCardsManager::instance().isObjDirectDescendentOfCategory(model->getObject(obj_id), current_cat) )
-				{
-					return FALSE;
-				}
-			}
-		}
-	}
-	return TRUE;
-
-}
-
-BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
-											BOOL drop)
-{
-	// This should never happen, but if an inventory item is incorrectly parented, 
-	// the UI will get confused and pass in a NULL.
-	if(!inv_cat) return FALSE;
-
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-
-	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-	if(!avatar) return FALSE;
-
-	// cannot drag categories into library
-	if(!isAgentInventory())
-	{
-		return FALSE;
-	}
-
-	// check to make sure source is agent inventory, and is represented there.
-	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
-	BOOL is_agent_inventory = (model->getCategory(inv_cat->getUUID()) != NULL)
-		&& (LLToolDragAndDrop::SOURCE_AGENT == source);
-
-	BOOL accept = FALSE;
-	S32 i;
-	LLInventoryModel::cat_array_t	descendent_categories;
-	LLInventoryModel::item_array_t	descendent_items;
-	if(is_agent_inventory)
-	{
-		const LLUUID& cat_id = inv_cat->getUUID();
-
-		// Is the destination the trash?
-		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-		BOOL move_is_into_trash = (mUUID == trash_id)
-				|| model->isObjectDescendentOf(mUUID, trash_id);
-		BOOL is_movable = (!LLAssetType::lookupIsProtectedCategoryType(inv_cat->getPreferredType()));
-		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
-		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
-		if (move_is_into_current_outfit || move_is_into_outfit)
-		{
-			// BAP - restrictions?
-			is_movable = true;
-		}
-
-		if (mUUID == gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE))
-		{
-			is_movable = FALSE; // It's generally movable but not into Favorites folder. EXT-1604
-		}
-
-		if( is_movable )
-		{
-			gInventory.collectDescendents( cat_id, descendent_categories, descendent_items, FALSE );
-
-			for( i = 0; i < descendent_categories.count(); i++ )
-			{
-				LLInventoryCategory* category = descendent_categories[i];
-				if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
-				{
-					// ...can't move "special folders" like Textures
-					is_movable = FALSE;
-					break;
-				}
-			}
-			
-			if( is_movable )
-			{
-				if( move_is_into_trash )
-				{
-					for( i = 0; i < descendent_items.count(); i++ )
-					{
-						LLInventoryItem* item = descendent_items[i];
-						if( (item->getType() == LLAssetType::AT_CLOTHING) ||
-							(item->getType() == LLAssetType::AT_BODYPART) )
-						{
-							if( gAgentWearables.isWearingItem( item->getUUID() ) )
-							{
-								is_movable = FALSE;  // It's generally movable, but not into the trash!
-								break;
-							}
-						}
-						else
-						if( item->getType() == LLAssetType::AT_OBJECT )
-						{
-							if( avatar->isWearingAttachment( item->getUUID() ) )
-							{
-								is_movable = FALSE;  // It's generally movable, but not into the trash!
-								break;
-							}
-						}
-					}
-				}
-			}
-		}
-
-		
-		accept =	is_movable
-					&& (mUUID != cat_id)								// Can't move a folder into itself
-					&& (mUUID != inv_cat->getParentUUID())				// Avoid moves that would change nothing
-					&& !(model->isObjectDescendentOf(mUUID, cat_id));	// Avoid circularity
-		if(accept && drop)
-		{
-			// Look for any gestures and deactivate them
-			if (move_is_into_trash)
-			{
-				for (i = 0; i < descendent_items.count(); i++)
-				{
-					LLInventoryItem* item = descendent_items[i];
-					if (item->getType() == LLAssetType::AT_GESTURE
-						&& LLGestureManager::instance().isGestureActive(item->getUUID()))
-					{
-						LLGestureManager::instance().deactivateGesture(item->getUUID());
-					}
-				}
-			}
-			// if target is an outfit or current outfit folder we use link
-			if (move_is_into_current_outfit || move_is_into_outfit) 
-			{
-#if SUPPORT_ENSEMBLES
-				// BAP - should skip if dup.
-				if (move_is_into_current_outfit)
-				{
-					LLAppearanceManager::wearEnsemble(inv_cat);
-				}
-				else
-				{
-					LLPointer<LLInventoryCallback> cb = NULL;
-					link_inventory_item(
-						gAgent.getID(),
-						inv_cat->getUUID(),
-						mUUID,
-						inv_cat->getName(),
-						LLAssetType::AT_LINK_FOLDER,
-						cb);
-				}
-#endif
-			}
-			else
-			{
-				
-				// Reparent the folder and restamp children if it's moving
-				// into trash.
-				LLInvFVBridge::changeCategoryParent(
-					model,
-					(LLViewerInventoryCategory*)inv_cat,
-					mUUID,
-					move_is_into_trash);
-			}
-		}
-	}
-	else if(LLToolDragAndDrop::SOURCE_WORLD == source)
-	{
-		// content category has same ID as object itself
-		LLUUID object_id = inv_cat->getUUID();
-		LLUUID category_id = mUUID;
-		accept = move_inv_category_world_to_agent(object_id, category_id, drop);
-	}
-	return accept;
-}
-
-void warn_move_inventory(LLViewerObject* object, LLMoveInv* move_inv)
-{
-	const char* dialog = NULL;
-	if (object->flagScripted())
-	{
-		dialog = "MoveInventoryFromScriptedObject";
-	}
-	else
-	{
-		dialog = "MoveInventoryFromObject";
-	}
-	LLNotifications::instance().add(dialog, LLSD(), LLSD(), boost::bind(move_task_inventory_callback, _1, _2, move_inv));
-}
-
-// Move/copy all inventory items from the Contents folder of an in-world
-// object to the agent's inventory, inside a given category.
-BOOL move_inv_category_world_to_agent(const LLUUID& object_id, 
-									  const LLUUID& category_id,
-									  BOOL drop,
-									  void (*callback)(S32, void*),
-									  void* user_data)
-{
-	// Make sure the object exists. If we allowed dragging from
-	// anonymous objects, it would be possible to bypass
-	// permissions.
-	// content category has same ID as object itself
-	LLViewerObject* object = gObjectList.findObject(object_id);
-	if(!object)
-	{
-		llinfos << "Object not found for drop." << llendl;
-		return FALSE;
-	}
-
-	// this folder is coming from an object, as there is only one folder in an object, the root,
-	// we need to collect the entire contents and handle them as a group
-	InventoryObjectList inventory_objects;
-	object->getInventoryContents(inventory_objects);
-
-	if (inventory_objects.empty())
-	{
-		llinfos << "Object contents not found for drop." << llendl;
-		return FALSE;
-	}
-	
-	BOOL accept = TRUE;
-	BOOL is_move = FALSE;
-
-	// coming from a task. Need to figure out if the person can
-	// move/copy this item.
-	InventoryObjectList::iterator it = inventory_objects.begin();
-	InventoryObjectList::iterator end = inventory_objects.end();
-	for ( ; it != end; ++it)
-	{
-		// coming from a task. Need to figure out if the person can
-		// move/copy this item.
-		LLPermissions perm(((LLInventoryItem*)((LLInventoryObject*)(*it)))->getPermissions());
-		if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
-			&& perm.allowTransferTo(gAgent.getID())))
-//			|| gAgent.isGodlike())
-		{
-			accept = TRUE;
-		}
-		else if(object->permYouOwner())
-		{
-			// If the object cannot be copied, but the object the
-			// inventory is owned by the agent, then the item can be
-			// moved from the task to agent inventory.
-			is_move = TRUE;
-			accept = TRUE;
-		}
-		else
-		{
-			accept = FALSE;
-			break;
-		}
-	}
-
-	if(drop && accept)
-	{
-		it = inventory_objects.begin();
-		InventoryObjectList::iterator first_it = inventory_objects.begin();
-		LLMoveInv* move_inv = new LLMoveInv;
-		move_inv->mObjectID = object_id;
-		move_inv->mCategoryID = category_id;
-		move_inv->mCallback = callback;
-		move_inv->mUserData = user_data;
-
-		for ( ; it != end; ++it)
-		{
-			two_uuids_t two(category_id, (*it)->getUUID());
-			move_inv->mMoveList.push_back(two);
-		}
-
-		if(is_move)
-		{
-			// Callback called from within here.
-			warn_move_inventory(object, move_inv);
-		}
-		else
-		{
-			LLNotification::Params params("MoveInventoryFromObject");
-			params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv));
-			LLNotifications::instance().forceResponse(params, 0);
-		}
-	}
-	return accept;
-}
-
-bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat,
-									 LLInventoryItem* item)
-{
-	// Valid COF items are:
-	// - links to wearables (body parts or clothing)
-	// - links to attachments
-	// - links to gestures
-	// - links to ensemble folders
-	LLViewerInventoryItem *linked_item = ((LLViewerInventoryItem*)item)->getLinkedItem(); // BAP - safe?
-	if (linked_item)
-	{
-		LLAssetType::EType type = linked_item->getType();
-		return (type == LLAssetType::AT_CLOTHING ||
-				type == LLAssetType::AT_BODYPART ||
-				type == LLAssetType::AT_GESTURE ||
-				type == LLAssetType::AT_OBJECT);
-	}
-	else
-	{
-		LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe?
-		// BAP remove AT_NONE support after ensembles are fully working?
-		return (linked_category && 
-				((linked_category->getPreferredType() == LLAssetType::AT_NONE) ||
-				 (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType()))));
-	}
-}
-
-
-bool LLFindWearables::operator()(LLInventoryCategory* cat,
-								 LLInventoryItem* item)
-{
-	if(item)
-	{
-		if((item->getType() == LLAssetType::AT_CLOTHING)
-		   || (item->getType() == LLAssetType::AT_BODYPART))
-		{
-			return TRUE;
-		}
-	}
-	return FALSE;
-}
-
-
-
-//Used by LLFolderBridge as callback for directory recursion.
-class LLRightClickInventoryFetchObserver : public LLInventoryFetchObserver
-{
-public:
-	LLRightClickInventoryFetchObserver() :
-		mCopyItems(false)
-	{ };
-	LLRightClickInventoryFetchObserver(const LLUUID& cat_id, bool copy_items) :
-		mCatID(cat_id),
-		mCopyItems(copy_items)
-		{ };
-	virtual void done()
-	{
-		// we've downloaded all the items, so repaint the dialog
-		LLFolderBridge::staticFolderOptionsMenu();
-
-		gInventory.removeObserver(this);
-		delete this;
-	}
-	
-
-protected:
-	LLUUID mCatID;
-	bool mCopyItems;
-
-};
-
-//Used by LLFolderBridge as callback for directory recursion.
-class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver
-{
-public:
-	LLRightClickInventoryFetchDescendentsObserver(bool copy_items) : mCopyItems(copy_items) {}
-	~LLRightClickInventoryFetchDescendentsObserver() {}
-	virtual void done();
-protected:
-	bool mCopyItems;
-};
-
-void LLRightClickInventoryFetchDescendentsObserver::done()
-{
-	// Avoid passing a NULL-ref as mCompleteFolders.front() down to
-	// gInventory.collectDescendents()
-	if( mCompleteFolders.empty() )
-	{
-		llwarns << "LLRightClickInventoryFetchDescendentsObserver::done with empty mCompleteFolders" << llendl;
-		dec_busy_count();
-		gInventory.removeObserver(this);
-		delete this;
-		return;
-	}
-
-	// What we do here is get the complete information on the items in
-	// the library, and set up an observer that will wait for that to
-	// happen.
-	LLInventoryModel::cat_array_t cat_array;
-	LLInventoryModel::item_array_t item_array;
-	gInventory.collectDescendents(mCompleteFolders.front(),
-								  cat_array,
-								  item_array,
-								  LLInventoryModel::EXCLUDE_TRASH);
-	S32 count = item_array.count();
-#if 0 // HACK/TODO: Why?
-	// This early causes a giant menu to get produced, and doesn't seem to be needed.
-	if(!count)
-	{
-		llwarns << "Nothing fetched in category " << mCompleteFolders.front()
-				<< llendl;
-		dec_busy_count();
-		gInventory.removeObserver(this);
-		delete this;
-		return;
-	}
-#endif
-
-	LLRightClickInventoryFetchObserver* outfit;
-	outfit = new LLRightClickInventoryFetchObserver(mCompleteFolders.front(), mCopyItems);
-	LLInventoryFetchObserver::item_ref_t ids;
-	for(S32 i = 0; i < count; ++i)
-	{
-		ids.push_back(item_array.get(i)->getUUID());
-	}
-
-	// clean up, and remove this as an observer since the call to the
-	// outfit could notify observers and throw us into an infinite
-	// loop.
-	dec_busy_count();
-	gInventory.removeObserver(this);
-	delete this;
-
-	// increment busy count and either tell the inventory to check &
-	// call done, or add this object to the inventory for observation.
-	inc_busy_count();
-
-	// do the fetch
-	outfit->fetchItems(ids);
-	outfit->done();				//Not interested in waiting and this will be right 99% of the time.
-//Uncomment the following code for laggy Inventory UI.
-/*	if(outfit->isEverythingComplete())
-	{
-		// everything is already here - call done.
-		outfit->done();
-	}
-	else
-	{
-		// it's all on it's way - add an observer, and the inventory
-		// will call done for us when everything is here.
-		gInventory.addObserver(outfit);
-	}*/
-}
-
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLInventoryWearObserver
-//
-// Observer for "copy and wear" operation to support knowing 
-// when the all of the contents have been added to inventory.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLInventoryCopyAndWearObserver : public LLInventoryObserver
-{
-public:
-	LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) :mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {}
-	virtual ~LLInventoryCopyAndWearObserver() {}
-	virtual void changed(U32 mask);
-
-protected:
-	LLUUID mCatID;
-	int    mContentsCount;
-	BOOL   mFolderAdded;
-};
-
-
-
-void LLInventoryCopyAndWearObserver::changed(U32 mask)
-{
-	if((mask & (LLInventoryObserver::ADD)) != 0)
-	{
-		if (!mFolderAdded) 
-		{
-			const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
-
-			std::set<LLUUID>::const_iterator id_it = changed_items.begin();
-			std::set<LLUUID>::const_iterator id_end = changed_items.end();
-			for (;id_it != id_end; ++id_it)
-			{
-				if ((*id_it) == mCatID) 
-				{
-					mFolderAdded = TRUE;
-					break;
-				}
-			}
-		}
-
-		if (mFolderAdded) 
-		{
-			LLViewerInventoryCategory* category = gInventory.getCategory(mCatID);
-
-			if (NULL == category)
-			{
-				llwarns << "gInventory.getCategory(" << mCatID
-					<< ") was NULL" << llendl;
-			}
-			else
-			{
-				if (category->getDescendentCount() ==
-				    mContentsCount)
-				{
-					gInventory.removeObserver(this);
-					LLAppearanceManager::wearInventoryCategory(category, FALSE, TRUE);
-					delete this;
-				}
-			}		
-		}
-
-	}
-}
-
-
-
-void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("open" == action)
-	{
-		openItem();
-		return;
-	}
-	else if ("paste" == action)
-	{
-		pasteFromClipboard();
-		return;
-	}
-	else if ("paste_link" == action)
-	{
-		pasteLinkFromClipboard();
-		return;
-	}
-	else if ("properties" == action)
-	{
-		showProperties();
-		return;
-	}
-	else if ("replaceoutfit" == action)
-	{
-		modifyOutfit(FALSE);
-		return;
-	}
-#if SUPPORT_ENSEMBLES
-	else if ("wearasensemble" == action)
-	{
-		LLInventoryModel* model = getInventoryModel();
-		if(!model) return;
-		LLViewerInventoryCategory* cat = getCategory();
-		if(!cat) return;
-		LLAppearanceManager::wearEnsemble(cat,true);
-		return;
-	}
-#endif
-	else if ("addtooutfit" == action)
-	{
-		modifyOutfit(TRUE);
-		return;
-	}
-	else if ("copy" == action)
-	{
-		copyToClipboard();
-		return;
-	}
-	else if ("removefromoutfit" == action)
-	{
-		LLInventoryModel* model = getInventoryModel();
-		if(!model) return;
-		LLViewerInventoryCategory* cat = getCategory();
-		if(!cat) return;
-		
-		remove_inventory_category_from_avatar ( cat );
-		return;
-	}	
-	else if ("purge" == action)
-	{		
-		purgeItem(model, mUUID);
-		return;
-	}
-	else if ("restore" == action)
-	{
-		restoreItem();
-		return;
-	}
-}
-
-void LLFolderBridge::openItem()
-{
-	lldebugs << "LLFolderBridge::openItem()" << llendl;
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return;
-	bool fetching_inventory = model->fetchDescendentsOf(mUUID);
-	// Only change folder type if we have the folder contents.
-	if (!fetching_inventory)
-	{
-		// Disabling this for now, it's causing crash when new items are added to folders
-		// since folder type may change before new item item has finished processing.
-		// determineFolderType();
-	}
-}
-
-void LLFolderBridge::closeItem()
-{
-	determineFolderType();
-}
-
-void LLFolderBridge::determineFolderType()
-{
-	if (isUpToDate())
-	{
-		LLInventoryModel* model = getInventoryModel();
-		LLViewerInventoryCategory* category = model->getCategory(mUUID);
-		category->determineFolderType();
-	}
-}
-
-BOOL LLFolderBridge::isItemRenameable() const
-{
-	LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)getCategory();
-	if(cat && !LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())
-	   && (cat->getOwnerID() == gAgent.getID()))
-	{
-		return TRUE;
-	}
-	return FALSE;
-}
-
-void LLFolderBridge::restoreItem()
-{
-	LLViewerInventoryCategory* cat;
-	cat = (LLViewerInventoryCategory*)getCategory();
-	if(cat)
-	{
-		LLInventoryModel* model = getInventoryModel();
-		LLUUID new_parent = model->findCategoryUUIDForType(cat->getType());
-		// do not restamp children on restore
-		LLInvFVBridge::changeCategoryParent(model, cat, new_parent, FALSE);
-	}
-}
-
-LLAssetType::EType LLFolderBridge::getPreferredType() const
-{
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
-	LLViewerInventoryCategory* cat = getCategory();
-	if(cat)
-	{
-		preferred_type = cat->getPreferredType();
-	}
-
-	return preferred_type;
-}
-
-// Icons for folders are based on the preferred type
-LLUIImagePtr LLFolderBridge::getIcon() const
-{
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
-	LLViewerInventoryCategory* cat = getCategory();
-	if(cat)
-	{
-		preferred_type = cat->getPreferredType();
-	}
-	return getIcon(preferred_type);
-}
-
-LLUIImagePtr LLFolderBridge::getIcon(LLAssetType::EType preferred_type)
-{
-	// we only have one folder image now
-	return LLUI::getUIImage("Inv_FolderClosed");
-}
-
-BOOL LLFolderBridge::renameItem(const std::string& new_name)
-{
-	if(!isItemRenameable())
-		return FALSE;
-	LLInventoryModel* model = getInventoryModel();
-	if(!model)
-		return FALSE;
-	LLViewerInventoryCategory* cat = getCategory();
-	if(cat && (cat->getName() != new_name))
-	{
-		LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat);
-		new_cat->rename(new_name);
-		new_cat->updateServer(FALSE);
-		model->updateCategory(new_cat);
-
-		model->notifyObservers();
-	}
-	// return FALSE because we either notified observers (& therefore
-	// rebuilt) or we didn't update.
-	return FALSE;
-}
-
-BOOL LLFolderBridge::removeItem()
-{
-	if(!isItemRemovable())
-	{
-		return FALSE;
-	}
-	// move it to the trash
-	LLPreview::hide(mUUID);
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-
-	// Look for any gestures and deactivate them
-	LLInventoryModel::cat_array_t	descendent_categories;
-	LLInventoryModel::item_array_t	descendent_items;
-	gInventory.collectDescendents( mUUID, descendent_categories, descendent_items, FALSE );
-
-	S32 i;
-	for (i = 0; i < descendent_items.count(); i++)
-	{
-		LLInventoryItem* item = descendent_items[i];
-		if (item->getType() == LLAssetType::AT_GESTURE
-			&& LLGestureManager::instance().isGestureActive(item->getUUID()))
-		{
-			LLGestureManager::instance().deactivateGesture(item->getUUID());
-		}
-	}
-
-	// go ahead and do the normal remove if no 'last calling
-	// cards' are being removed.
-	LLViewerInventoryCategory* cat = getCategory();
-	if(cat)
-	{
-		LLInvFVBridge::changeCategoryParent(model, cat, trash_id, TRUE);
-	}
-
-	return TRUE;
-}
-
-void LLFolderBridge::pasteFromClipboard()
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(model && isClipboardPasteable())
-	{
-		LLInventoryItem* item = NULL;
-		LLDynamicArray<LLUUID> objects;
-		LLInventoryClipboard::instance().retrieve(objects);
-		S32 count = objects.count();
-		const LLUUID parent_id(mUUID);
-		for(S32 i = 0; i < count; i++)
-		{
-			item = model->getItem(objects.get(i));
-			if (item)
-			{
-				if(LLInventoryClipboard::instance().isCutMode())
-				{
-					// move_inventory_item() is not enough, 
-					//we have to update inventory locally too
-					changeItemParent(model, dynamic_cast<LLViewerInventoryItem*>(item), parent_id, FALSE);
-				}
-				else
-				{
-					copy_inventory_item(
-						gAgent.getID(),
-						item->getPermissions().getOwner(),
-						item->getUUID(),
-						parent_id,
-						std::string(),
-						LLPointer<LLInventoryCallback>(NULL));
-				}
-			}
-		}
-	}
-}
-
-void LLFolderBridge::pasteLinkFromClipboard()
-{
-	const LLInventoryModel* model = getInventoryModel();
-	if(model)
-	{
-		LLDynamicArray<LLUUID> objects;
-		LLInventoryClipboard::instance().retrieve(objects);
-		S32 count = objects.count();
-		LLUUID parent_id(mUUID);
-		for(S32 i = 0; i < count; i++)
-		{
-			const LLUUID &object_id = objects.get(i);
-#if SUPPORT_ENSEMBLES
-			if (LLInventoryCategory *cat = model->getCategory(object_id))
-			{
-				link_inventory_item(
-					gAgent.getID(),
-					cat->getUUID(),
-					parent_id,
-					cat->getName(),
-					LLAssetType::AT_LINK_FOLDER,
-					LLPointer<LLInventoryCallback>(NULL));
-			}
-			else
-#endif
-			if (LLInventoryItem *item = model->getItem(object_id))
-			{
-				link_inventory_item(
-					gAgent.getID(),
-					item->getUUID(),
-					parent_id,
-					item->getName(),
-					LLAssetType::AT_LINK,
-					LLPointer<LLInventoryCallback>(NULL));
-			}
-		}
-	}
-}
-
-void LLFolderBridge::staticFolderOptionsMenu()
-{
-	if (!sSelf) return;
-	sSelf->folderOptionsMenu();
-}
-
-void LLFolderBridge::folderOptionsMenu()
-{
-	std::vector<std::string> disabled_items;
-
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return;
-
-	const LLInventoryCategory* category = model->getCategory(mUUID);
-	LLAssetType::EType type = category->getPreferredType();
-	const bool is_default_folder = category && LLAssetType::lookupIsProtectedCategoryType(type);
-	// BAP change once we're no longer treating regular categories as ensembles.
-	const bool is_ensemble = category && (type == LLAssetType::AT_NONE ||
-										  LLAssetType::lookupIsEnsembleCategoryType(type));
-	
-	// calling card related functionality for folders.
-
-	// Only enable calling-card related options for non-default folders.
-	if (!is_default_folder)
-	{
-		LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
-		if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard))
-		{
-			mItems.push_back(std::string("Calling Card Separator"));
-			mItems.push_back(std::string("Conference Chat Folder"));
-			mItems.push_back(std::string("IM All Contacts In Folder"));
-		}
-	}
-	
-	// wearables related functionality for folders.
-	//is_wearable
-	LLFindWearables is_wearable;
-	LLIsType is_object( LLAssetType::AT_OBJECT );
-	LLIsType is_gesture( LLAssetType::AT_GESTURE );
-
-	if (mWearables ||
-		checkFolderForContentsOfType(model, is_wearable)  ||
-		checkFolderForContentsOfType(model, is_object) ||
-		checkFolderForContentsOfType(model, is_gesture) )
-	{
-		mItems.push_back(std::string("Folder Wearables Separator"));
-
-		// Only enable add/replace outfit for non-default folders.
-		if (!is_default_folder)
-		{
-			mItems.push_back(std::string("Add To Outfit"));
-			mItems.push_back(std::string("Replace Outfit"));
-		}
-		if (is_ensemble)
-		{
-			mItems.push_back(std::string("Wear As Ensemble"));
-		}
-		mItems.push_back(std::string("Take Off Items"));
-	}
-	hideContextEntries(*mMenu, mItems, disabled_items);
-}
-
-BOOL LLFolderBridge::checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& is_type)
-{
-	LLInventoryModel::cat_array_t cat_array;
-	LLInventoryModel::item_array_t item_array;
-	model->collectDescendentsIf(mUUID,
-								cat_array,
-								item_array,
-								LLInventoryModel::EXCLUDE_TRASH,
-								is_type);
-	return ((item_array.count() > 0) ? TRUE : FALSE );
-}
-
-// Flags unused
-void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	mItems.clear();
-	mDisabledItems.clear();
-
-	lldebugs << "LLFolderBridge::buildContextMenu()" << llendl;
-//	std::vector<std::string> disabled_items;
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
-
-	mItems.clear(); //adding code to clear out member Items (which means Items should not have other data here at this point)
-	mDisabledItems.clear(); //adding code to clear out disabled members from previous 
-	if (lost_and_found_id == mUUID)
-	  {
-		// This is the lost+found folder.
-		  mItems.push_back(std::string("Empty Lost And Found"));
-	  }
-
-	if(trash_id == mUUID)
-	{
-		// This is the trash.
-		mItems.push_back(std::string("Empty Trash"));
-	}
-	else if(model->isObjectDescendentOf(mUUID, trash_id))
-	{
-		// This is a folder in the trash.
-		mItems.clear(); // clear any items that used to exist
-		mItems.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			mDisabledItems.push_back(std::string("Purge Item"));
-		}
-
-		mItems.push_back(std::string("Restore Item"));
-	}
-	else if(isAgentInventory()) // do not allow creating in library
-	{
-		LLViewerInventoryCategory *cat =  getCategory();
-
-		// BAP removed protected check to re-enable standard ops in untyped folders.
-		// Not sure what the right thing is to do here.
-		if (!isCOFFolder() && cat /*&&
-			LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())*/)
-		{
-			// Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694.
-			if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat))
-				mItems.push_back(std::string("New Folder"));
-			mItems.push_back(std::string("New Script"));
-			mItems.push_back(std::string("New Note"));
-			mItems.push_back(std::string("New Gesture"));
-			mItems.push_back(std::string("New Clothes"));
-			mItems.push_back(std::string("New Body Parts"));
-			mItems.push_back(std::string("Change Type"));
-			
-			LLViewerInventoryCategory *cat = getCategory();
-			if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))
-			{
-				mDisabledItems.push_back(std::string("Change Type"));
-			}
-			
-			getClipboardEntries(false, mItems, mDisabledItems, flags);
-		}
-		else
-		{
-			// Want some but not all of the items from getClipboardEntries for outfits.
-			if (cat && cat->getPreferredType()==LLAssetType::AT_OUTFIT)
-			{
-				mItems.push_back(std::string("Rename"));
-				mItems.push_back(std::string("Delete"));
-			}
-		}
-
-		//Added by spatters to force inventory pull on right-click to display folder options correctly. 07-17-06
-		mCallingCards = mWearables = FALSE;
-		
-		LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
-		if (checkFolderForContentsOfType(model, is_callingcard))
-		{
-			mCallingCards=TRUE;
-		}
-		
-		LLFindWearables is_wearable;
-		LLIsType is_object( LLAssetType::AT_OBJECT );
-		LLIsType is_gesture( LLAssetType::AT_GESTURE );
-		
-		if (checkFolderForContentsOfType(model, is_wearable)  ||
-			checkFolderForContentsOfType(model, is_object) ||
-			checkFolderForContentsOfType(model, is_gesture) )
-		{
-			mWearables=TRUE;
-		}
-		
-		mMenu = &menu;
-		sSelf = this;
-		LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(FALSE);
-
-		LLInventoryFetchDescendentsObserver::folder_ref_t folders;
-		LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID);
-		if (category)
-		{
-			folders.push_back(category->getUUID());
-		}
-		fetch->fetchDescendents(folders);
-		inc_busy_count();
-		if(fetch->isEverythingComplete())
-		{
-			// everything is already here - call done.
-			fetch->done();
-		}
-		else
-		{
-			// it's all on it's way - add an observer, and the inventory
-			// will call done for us when everything is here.
-			gInventory.addObserver(fetch);
-		}
-	}
-	else
-	{
-		mItems.push_back(std::string("--no options--"));
-		mDisabledItems.push_back(std::string("--no options--"));
-	}
-	hideContextEntries(menu, mItems, mDisabledItems);
-}
-
-BOOL LLFolderBridge::hasChildren() const
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-	LLInventoryModel::EHasChildren has_children;
-	has_children = gInventory.categoryHasChildren(mUUID);
-	return has_children != LLInventoryModel::CHILDREN_NO;
-}
-
-BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop,
-								EDragAndDropType cargo_type,
-								void* cargo_data)
-{
-	//llinfos << "LLFolderBridge::dragOrDrop()" << llendl;
-	BOOL accept = FALSE;
-	switch(cargo_type)
-	{
-		case DAD_TEXTURE:
-		case DAD_SOUND:
-		case DAD_CALLINGCARD:
-		case DAD_LANDMARK:
-		case DAD_SCRIPT:
-		case DAD_OBJECT:
-		case DAD_NOTECARD:
-		case DAD_CLOTHING:
-		case DAD_BODYPART:
-		case DAD_ANIMATION:
-		case DAD_GESTURE:
-		case DAD_LINK:
-			accept = dragItemIntoFolder((LLInventoryItem*)cargo_data,
-										drop);
-			break;
-		case DAD_CATEGORY:
-			if (LLFriendCardsManager::instance().isAnyFriendCategory(mUUID))
-			{
-				accept = FALSE;
-			}
-			else
-			{
-				accept = dragCategoryIntoFolder((LLInventoryCategory*)cargo_data, drop);
-			}
-			break;
-		default:
-			break;
-	}
-	return accept;
-}
-
-LLViewerInventoryCategory* LLFolderBridge::getCategory() const
-{
-	LLViewerInventoryCategory* cat = NULL;
-	LLInventoryModel* model = getInventoryModel();
-	if(model)
-	{
-		cat = (LLViewerInventoryCategory*)model->getCategory(mUUID);
-	}
-	return cat;
-}
-
-
-// static
-void LLFolderBridge::pasteClipboard(void* user_data)
-{
-	LLFolderBridge* self = (LLFolderBridge*)user_data;
-	if(self) self->pasteFromClipboard();
-}
-
-void LLFolderBridge::createNewCategory(void* user_data)
-{
-	LLFolderBridge* bridge = (LLFolderBridge*)user_data;
-	if(!bridge) return;
-	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(bridge->mInventoryPanel.get());
-	if (!panel) return;
-	LLInventoryModel* model = panel->getModel();
-	if(!model) return;
-	LLUUID id;
-	id = model->createNewCategory(bridge->getUUID(),
-								  LLAssetType::AT_NONE,
-								  LLStringUtil::null);
-	model->notifyObservers();
-
-	// At this point, the bridge has probably been deleted, but the
-	// view is still there.
-	panel->setSelection(id, TAKE_FOCUS_YES);
-}
-
-void LLFolderBridge::createNewShirt(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHIRT);
-}
-
-void LLFolderBridge::createNewPants(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_PANTS);
-}
-
-void LLFolderBridge::createNewShoes(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHOES);
-}
-
-void LLFolderBridge::createNewSocks(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SOCKS);
-}
-
-void LLFolderBridge::createNewJacket(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_JACKET);
-}
-
-void LLFolderBridge::createNewSkirt(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SKIRT);
-}
-
-void LLFolderBridge::createNewGloves(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_GLOVES);
-}
-
-void LLFolderBridge::createNewUndershirt(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_UNDERSHIRT);
-}
-
-void LLFolderBridge::createNewUnderpants(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_UNDERPANTS);
-}
-
-void LLFolderBridge::createNewShape(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHAPE);
-}
-
-void LLFolderBridge::createNewSkin(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SKIN);
-}
-
-void LLFolderBridge::createNewHair(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_HAIR);
-}
-
-void LLFolderBridge::createNewEyes(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_EYES);
-}
-
-// static
-void LLFolderBridge::createWearable(LLFolderBridge* bridge, EWearableType type)
-{
-	if(!bridge) return;
-	LLUUID parent_id = bridge->getUUID();
-	createWearable(parent_id, type);
-}
-
-// Separate function so can be called by global menu as well as right-click
-// menu.
-// static
-void LLFolderBridge::createWearable(LLUUID parent_id, EWearableType type)
-{
-	LLWearable* wearable = LLWearableList::instance().createNewWearable(type);
-	LLAssetType::EType asset_type = wearable->getAssetType();
-	LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE;
-	create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
-		parent_id, wearable->getTransactionID(), wearable->getName(),
-		wearable->getDescription(), asset_type, inv_type, wearable->getType(),
-		wearable->getPermissions().getMaskNextOwner(),
-		LLPointer<LLInventoryCallback>(NULL));
-}
-
-void LLFolderBridge::modifyOutfit(BOOL append)
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return;
-	LLViewerInventoryCategory* cat = getCategory();
-	if(!cat) return;
-	
-	// BAP - was:
-	// wear_inventory_category_on_avatar( cat, append );
-	LLAppearanceManager::wearInventoryCategory( cat, FALSE, append );
-}
-
-// helper stuff
-bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv* move_inv)
-{
-	LLFloaterOpenObject::LLCatAndWear* cat_and_wear = (LLFloaterOpenObject::LLCatAndWear* )move_inv->mUserData;
-	LLViewerObject* object = gObjectList.findObject(move_inv->mObjectID);
-	S32 option = LLNotification::getSelectedOption(notification, response);
-
-	if(option == 0 && object)
-	{
-		if (cat_and_wear && cat_and_wear->mWear)
-		{
-			InventoryObjectList inventory_objects;
-			object->getInventoryContents(inventory_objects);
-			int contents_count = inventory_objects.size()-1; //subtract one for containing folder
-
-			LLInventoryCopyAndWearObserver* inventoryObserver = new LLInventoryCopyAndWearObserver(cat_and_wear->mCatID, contents_count);
-			gInventory.addObserver(inventoryObserver);
-		}
-
-		two_uuids_list_t::iterator move_it;
-		for (move_it = move_inv->mMoveList.begin(); 
-			move_it != move_inv->mMoveList.end(); 
-			++move_it)
-		{
-			object->moveInventory(move_it->first, move_it->second);
-		}
-
-		// update the UI.
-		dialog_refresh_all();
-	}
-
-	if (move_inv->mCallback)
-	{
-		move_inv->mCallback(option, move_inv->mUserData);
-	}
-
-	delete move_inv;
-	return false;
-}
-
-/*
-Next functions intended to reorder items in the inventory folder and save order on server
-Is now used for Favorites folder.
-
-*TODO: refactoring is needed with Favorites Bar functionality. Probably should be moved in LLInventoryModel
-*/
-void saveItemsOrder(LLInventoryModel::item_array_t& items)
-{
-	int sortField = 0;
-
-	// current order is saved by setting incremental values (1, 2, 3, ...) for the sort field
-	for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i)
-	{
-		LLViewerInventoryItem* item = *i;
-
-		item->setSortField(++sortField);
-		item->setComplete(TRUE);
-		item->updateServer(FALSE);
-
-		gInventory.updateItem(item);
-	}
-
-	gInventory.notifyObservers();
-}
-
-LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id)
-{
-	LLInventoryModel::item_array_t::iterator result = items.end();
-
-	for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i)
-	{
-		if ((*i)->getUUID() == id)
-		{
-			result = i;
-			break;
-		}
-	}
-
-	return result;
-}
-
-void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId)
-{
-	LLViewerInventoryItem* srcItem = gInventory.getItem(srcItemId);
-	LLViewerInventoryItem* destItem = gInventory.getItem(destItemId);
-
-	items.erase(findItemByUUID(items, srcItem->getUUID()));
-	items.insert(findItemByUUID(items, destItem->getUUID()), srcItem);
-}
-
-BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
-										BOOL drop)
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-
-	// cannot drag into library
-	if(!isAgentInventory())
-	{
-		return FALSE;
-	}
-
-	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-	if(!avatar) return FALSE;
-
-	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
-	BOOL accept = FALSE;
-	LLViewerObject* object = NULL;
-	if(LLToolDragAndDrop::SOURCE_AGENT == source)
-	{
-
-		BOOL is_movable = TRUE;
-		switch( inv_item->getActualType() )
-		{
-		case LLAssetType::AT_ROOT_CATEGORY:
-			is_movable = FALSE;
-			break;
-
-		case LLAssetType::AT_CATEGORY:
-			is_movable = !LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)inv_item)->getPreferredType());
-			break;
-		default:
-			break;
-		}
-
-		LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-		BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
-		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
-		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
-		
-		if(is_movable && move_is_into_trash)
-		{
-			switch(inv_item->getType())
-			{
-			case LLAssetType::AT_CLOTHING:
-			case LLAssetType::AT_BODYPART:
-				is_movable = !gAgentWearables.isWearingItem(inv_item->getUUID());
-				break;
-
-			case LLAssetType::AT_OBJECT:
-				is_movable = !avatar->isWearingAttachment(inv_item->getUUID());
-				break;
-			default:
-				break;
-			}
-		}
-
-		if ( is_movable )
-		{
-			// Don't allow creating duplicates in the Calling Card/Friends
-			// subfolders, see bug EXT-1599. Check is item direct descendent
-			// of target folder and forbid item's movement if it so.
-			// Note: isItemDirectDescendentOfCategory checks if
-			// passed category is in the Calling Card/Friends folder
-			is_movable = ! LLFriendCardsManager::instance()
-				.isObjDirectDescendentOfCategory (inv_item, getCategory());
-		}
- 
-		LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
-
-		// we can move item inside a folder only if this folder is Favorites. See EXT-719
-		accept = is_movable && ((mUUID != inv_item->getParentUUID()) || (mUUID == favorites_id));
-		if(accept && drop)
-		{
-			if (inv_item->getType() == LLAssetType::AT_GESTURE
-				&& LLGestureManager::instance().isGestureActive(inv_item->getUUID()) && move_is_into_trash)
-			{
-				LLGestureManager::instance().deactivateGesture(inv_item->getUUID());
-			}
-			// If an item is being dragged between windows, unselect
-			// everything in the active window so that we don't follow
-			// the selection to its new location (which is very
-			// annoying).
-			if (LLFloaterInventory::getActiveInventory())
-			{
-				LLInventoryPanel* active_panel = LLFloaterInventory::getActiveInventory()->getPanel();
-				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
-				if (active_panel && (panel != active_panel))
-				{
-					active_panel->unSelectAll();
-				}
-			}
-
-			// if dragging from/into favorites folder only reorder items
-			if ((mUUID == inv_item->getParentUUID()) && (favorites_id == mUUID))
-			{
-				LLInventoryModel::cat_array_t cats;
-				LLInventoryModel::item_array_t items;
-				LLIsType is_type(LLAssetType::AT_LANDMARK);
-				model->collectDescendentsIf(favorites_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type);
-
-				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
-				LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
-				if (itemp)
-				{
-					LLUUID srcItemId = inv_item->getUUID();
-					LLUUID destItemId = itemp->getListener()->getUUID();
-
-					// update order
-					updateItemsOrder(items, srcItemId, destItemId);
-
-					saveItemsOrder(items);
-				}
-			}
-			else if (favorites_id == mUUID) // if target is the favorites folder we use copy
-			{
-				copy_inventory_item(
-					gAgent.getID(),
-					inv_item->getPermissions().getOwner(),
-					inv_item->getUUID(),
-					mUUID,
-					std::string(),
-					LLPointer<LLInventoryCallback>(NULL));
-			}
-			else if (move_is_into_current_outfit || move_is_into_outfit)
-			{
-				// BAP - should skip if dup.
-				if (move_is_into_current_outfit)
-				{
-					LLAppearanceManager::wearItem(inv_item);
-				}
-				else
-				{
-					LLPointer<LLInventoryCallback> cb = NULL;
-					link_inventory_item(
-						gAgent.getID(),
-						inv_item->getUUID(),
-						mUUID,
-						std::string(),
-						LLAssetType::AT_LINK,
-						cb);
-				}
-			}
-			else
-			{
-				// restamp if the move is into the trash.
-				LLInvFVBridge::changeItemParent(
-					model,
-					(LLViewerInventoryItem*)inv_item,
-					mUUID,
-					move_is_into_trash);
-			}
-		}
-	}
-	else if(LLToolDragAndDrop::SOURCE_WORLD == source)
-	{
-		// Make sure the object exists. If we allowed dragging from
-		// anonymous objects, it would be possible to bypass
-		// permissions.
-		object = gObjectList.findObject(inv_item->getParentUUID());
-		if(!object)
-		{
-			llinfos << "Object not found for drop." << llendl;
-			return FALSE;
-		}
-
-		// coming from a task. Need to figure out if the person can
-		// move/copy this item.
-		LLPermissions perm(inv_item->getPermissions());
-		BOOL is_move = FALSE;
-		if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
-			&& perm.allowTransferTo(gAgent.getID())))
-//		   || gAgent.isGodlike())
-			
-		{
-			accept = TRUE;
-		}
-		else if(object->permYouOwner())
-		{
-			// If the object cannot be copied, but the object the
-			// inventory is owned by the agent, then the item can be
-			// moved from the task to agent inventory.
-			is_move = TRUE;
-			accept = TRUE;
-		}
-		if(drop && accept)
-		{
-			LLMoveInv* move_inv = new LLMoveInv;
-			move_inv->mObjectID = inv_item->getParentUUID();
-			two_uuids_t item_pair(mUUID, inv_item->getUUID());
-			move_inv->mMoveList.push_back(item_pair);
-			move_inv->mCallback = NULL;
-			move_inv->mUserData = NULL;
-			if(is_move)
-			{
-				warn_move_inventory(object, move_inv);
-			}
-			else
-			{
-				LLNotification::Params params("MoveInventoryFromObject");
-				params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv));
-				LLNotifications::instance().forceResponse(params, 0);
-			}
-		}
-		
-	}
-	else if(LLToolDragAndDrop::SOURCE_NOTECARD == source)
-	{
-		accept = TRUE;
-		if(drop)
-		{
-			copy_inventory_from_notecard(LLToolDragAndDrop::getInstance()->getObjectID(),
-				LLToolDragAndDrop::getInstance()->getSourceID(), inv_item);
-		}
-	}
-	else if(LLToolDragAndDrop::SOURCE_LIBRARY == source)
-	{
-		LLViewerInventoryItem* item = (LLViewerInventoryItem*)inv_item;
-		if(item && item->isComplete())
-		{
-			accept = TRUE;
-			if(drop)
-			{
-				copy_inventory_item(
-					gAgent.getID(),
-					inv_item->getPermissions().getOwner(),
-					inv_item->getUUID(),
-					mUUID,
-					std::string(),
-					LLPointer<LLInventoryCallback>(NULL));
-			}
-		}
-	}
-	else
-	{
-		llwarns << "unhandled drag source" << llendl;
-	}
-	return accept;
-}
-
-// +=================================================+
-// |        LLScriptBridge (DEPRECTED)               |
-// +=================================================+
-
-LLUIImagePtr LLScriptBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
-}
-
-// +=================================================+
-// |        LLTextureBridge                          |
-// +=================================================+
-
-LLUIImagePtr LLTextureBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_TEXTURE, mInvType, 0, FALSE);
-}
-	
-void LLTextureBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-	
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-}
-
-// +=================================================+
-// |        LLSoundBridge                            |
-// +=================================================+
-
-LLUIImagePtr LLSoundBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE);
-}
-
-void LLSoundBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-	
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-/*
-// Changed this back to the way it USED to work:
-// only open the preview dialog through the contextual right-click menu
-// double-click just plays the sound
-
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		openSoundPreview((void*)this);
-		//send_uuid_sound_trigger(item->getAssetUUID(), 1.0);
-	}
-*/
-}
-
-void LLSoundBridge::previewItem()
-{
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		send_sound_trigger(item->getAssetUUID(), 1.0);
-	}
-}
-
-void LLSoundBridge::openSoundPreview(void* which)
-{
-	LLSoundBridge *me = (LLSoundBridge *)which;
-	LLFloaterReg::showInstance("preview_sound", LLSD(me->mUUID), TAKE_FOCUS_YES);
-}
-
-void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	lldebugs << "LLTextureBridge::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		items.push_back(std::string("Sound Open"));
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-	}
-
-	items.push_back(std::string("Sound Separator"));
-	items.push_back(std::string("Sound Play"));
-
-	hideContextEntries(menu, items, disabled_items);
-}
-
-// +=================================================+
-// |        LLLandmarkBridge                         |
-// +=================================================+
-
-LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags/* = 0x00*/) :
-LLItemBridge(inventory, uuid) 
-{
-	mVisited = FALSE;
-	if (flags & LLInventoryItem::II_FLAGS_LANDMARK_VISITED)
-	{
-		mVisited = TRUE;
-	}
-}
-
-LLUIImagePtr LLLandmarkBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, mVisited, FALSE);
-}
-
-void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	lldebugs << "LLLandmarkBridge::buildContextMenu()" << llendl;
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		items.push_back(std::string("Landmark Open"));
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-	}
-
-	items.push_back(std::string("Landmark Separator"));
-	items.push_back(std::string("About Landmark"));
-
-	// Disable "About Landmark" menu item for
-	// multiple landmarks selected. Only one landmark
-	// info panel can be shown at a time.
-	if ((flags & FIRST_SELECTED_ITEM) == 0)
-	{
-		disabled_items.push_back(std::string("About Landmark"));
-	}
-
-	hideContextEntries(menu, items, disabled_items);
-}
-
-// Convenience function for the two functions below.
-void teleport_via_landmark(const LLUUID& asset_id)
-{
-	gAgent.teleportViaLandmark( asset_id );
-
-	// we now automatically track the landmark you're teleporting to
-	// because you'll probably arrive at a telehub instead
-	LLFloaterWorldMap* floater_world_map = LLFloaterWorldMap::getInstance();
-	if( floater_world_map )
-	{
-		floater_world_map->trackLandmark( asset_id );
-	}
-}
-
-// virtual
-void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("teleport" == action)
-	{
-		LLViewerInventoryItem* item = getItem();
-		if(item)
-		{
-			teleport_via_landmark(item->getAssetUUID());
-		}
-	}
-	else if ("about" == action)
-	{
-		LLViewerInventoryItem* item = getItem();
-		if(item)
-		{
-			LLSD key;
-			key["type"] = "landmark";
-			key["id"] = item->getUUID();
-
-			LLSideTray::getInstance()->showPanel("panel_places", key);
-		}
-	}
-	else 
-	{
-		LLItemBridge::performAction(folder, model, action);
-	}
-}
-
-static bool open_landmark_callback(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotification::getSelectedOption(notification, response);
-
-	LLUUID asset_id = notification["payload"]["asset_id"].asUUID();
-	if (option == 0)
-	{
-		teleport_via_landmark(asset_id);
-	}
-
-	return false;
-}
-static LLNotificationFunctorRegistration open_landmark_callback_reg("TeleportFromLandmark", open_landmark_callback);
-
-
-void LLLandmarkBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-	
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-/*
-	LLViewerInventoryItem* item = getItem();
-	if( item )
-	{
-		// Opening (double-clicking) a landmark immediately teleports,
-		// but warns you the first time.
-		// open_landmark(item);
-		LLSD payload;
-		payload["asset_id"] = item->getAssetUUID();
-		LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload);
-	}
-*/
-}
-
-
-// +=================================================+
-// |        LLCallingCardObserver                    |
-// +=================================================+
-void LLCallingCardObserver::changed(U32 mask)
-{
-	mBridgep->refreshFolderViewItem();
-}
-
-// +=================================================+
-// |        LLCallingCardBridge                      |
-// +=================================================+
-
-LLCallingCardBridge::LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) :
-	LLItemBridge(inventory, uuid)
-{
-	mObserver = new LLCallingCardObserver(this);
-	LLAvatarTracker::instance().addObserver(mObserver);
-}
-
-LLCallingCardBridge::~LLCallingCardBridge()
-{
-	LLAvatarTracker::instance().removeObserver(mObserver);
-	delete mObserver;
-}
-
-void LLCallingCardBridge::refreshFolderViewItem()
-{
-	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
-	LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getItemByID(mUUID) : NULL;
-	if (itemp)
-	{
-		itemp->refresh();
-	}
-}
-
-// virtual
-void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("begin_im" == action)
-	{
-		LLViewerInventoryItem *item = getItem();
-		if (item && (item->getCreatorUUID() != gAgent.getID()) &&
-			(!item->getCreatorUUID().isNull()))
-		{
-			std::string callingcard_name;
-			gCacheName->getFullName(item->getCreatorUUID(), callingcard_name);
-			gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID());
-		}
-	}
-	else if ("lure" == action)
-	{
-		LLViewerInventoryItem *item = getItem();
-		if (item && (item->getCreatorUUID() != gAgent.getID()) &&
-			(!item->getCreatorUUID().isNull()))
-		{
-			LLAvatarActions::offerTeleport(item->getCreatorUUID());
-		}
-	}
-	else LLItemBridge::performAction(folder, model, action);
-}
-
-LLUIImagePtr LLCallingCardBridge::getIcon() const
-{
-	BOOL online = FALSE;
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		online = LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID());
-	}
-	return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, online, FALSE);
-}
-
-std::string LLCallingCardBridge::getLabelSuffix() const
-{
-	LLViewerInventoryItem* item = getItem();
-	if( item && LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID()) )
-	{
-		return LLItemBridge::getLabelSuffix() + " (online)";
-	}
-	else
-	{
-		return LLItemBridge::getLabelSuffix();
-	}
-}
-
-void LLCallingCardBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-	
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-/*
-	LLViewerInventoryItem* item = getItem();
-	if(item && !item->getCreatorUUID().isNull())
-	{
-		LLAvatarActions::showProfile(item->getCreatorUUID());
-	}
-*/
-}
-
-void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	lldebugs << "LLCallingCardBridge::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		items.push_back(std::string("Open"));
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-
-		LLInventoryItem* item = getItem();
-		BOOL good_card = (item
-						  && (LLUUID::null != item->getCreatorUUID())
-						  && (item->getCreatorUUID() != gAgent.getID()));
-		BOOL user_online = (LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID()));
-		items.push_back(std::string("Send Instant Message Separator"));
-		items.push_back(std::string("Send Instant Message"));
-		items.push_back(std::string("Offer Teleport..."));
-		items.push_back(std::string("Conference Chat"));
-
-		if (!good_card)
-		{
-			disabled_items.push_back(std::string("Send Instant Message"));
-		}
-		if (!good_card || !user_online)
-		{
-			disabled_items.push_back(std::string("Offer Teleport..."));
-			disabled_items.push_back(std::string("Conference Chat"));
-		}
-	}
-	hideContextEntries(menu, items, disabled_items);
-}
-
-BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop,
-									 EDragAndDropType cargo_type,
-									 void* cargo_data)
-{
-	LLViewerInventoryItem* item = getItem();
-	BOOL rv = FALSE;
-	if(item)
-	{
-		// check the type
-		switch(cargo_type)
-		{
-		case DAD_TEXTURE:
-		case DAD_SOUND:
-		case DAD_LANDMARK:
-		case DAD_SCRIPT:
-		case DAD_CLOTHING:
-		case DAD_OBJECT:
-		case DAD_NOTECARD:
-		case DAD_BODYPART:
-		case DAD_ANIMATION:
-		case DAD_GESTURE:
-			{
-				LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data;
-				const LLPermissions& perm = inv_item->getPermissions();
-				if(gInventory.getItem(inv_item->getUUID())
-				   && perm.allowOperationBy(PERM_TRANSFER, gAgent.getID()))
-				{
-					rv = TRUE;
-					if(drop)
-					{
-						LLToolDragAndDrop::giveInventory(item->getCreatorUUID(),
-														 (LLInventoryItem*)cargo_data);
-					}
-				}
-				else
-				{
-					// It's not in the user's inventory (it's probably in
-					// an object's contents), so disallow dragging it here.
-					// You can't give something you don't yet have.
-					rv = FALSE;
-				}
-				break;
-			}
-		case DAD_CATEGORY:
-			{
-				LLInventoryCategory* inv_cat = (LLInventoryCategory*)cargo_data;
-				if( gInventory.getCategory( inv_cat->getUUID() ) )
-				{
-					rv = TRUE;
-					if(drop)
-					{
-						LLToolDragAndDrop::giveInventoryCategory(
-							item->getCreatorUUID(),
-							inv_cat);
-					}
-				}
-				else
-				{
-					// It's not in the user's inventory (it's probably in
-					// an object's contents), so disallow dragging it here.
-					// You can't give something you don't yet have.
-					rv = FALSE;
-				}
-				break;
-			}
-		default:
-			break;
-		}
-	}
-	return rv;
-}
-
-BOOL LLCallingCardBridge::removeItem()
-{
-	if (LLFriendCardsManager::instance().isItemInAnyFriendsList(getItem()))
-	{
-		LLAvatarActions::removeFriendDialog(getItem()->getCreatorUUID());
-		return FALSE;
-	}
-	else 
-	{
-		return LLItemBridge::removeItem();
-	}
-}
-// +=================================================+
-// |        LLNotecardBridge                         |
-// +=================================================+
-
-LLUIImagePtr LLNotecardBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE);
-}
-
-void LLNotecardBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-	
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-
-/*
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
-	}
-*/
-}
-
-
-// +=================================================+
-// |        LLGestureBridge                          |
-// +=================================================+
-
-LLUIImagePtr LLGestureBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE);
-}
-
-LLFontGL::StyleFlags LLGestureBridge::getLabelStyle() const
-{
-	if( LLGestureManager::instance().isGestureActive(mUUID) )
-	{
-		return LLFontGL::BOLD;
-	}
-	else
-	{
-		return LLFontGL::NORMAL;
-	}
-}
-
-std::string LLGestureBridge::getLabelSuffix() const
-{
-	if( LLGestureManager::instance().isGestureActive(mUUID) )
-	{
-		return LLItemBridge::getLabelSuffix() + " (active)";
-	}
-	else
-	{
-		return LLItemBridge::getLabelSuffix();
-	}
-}
-
-// virtual
-void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("activate" == action)
-	{
-		LLGestureManager::instance().activateGesture(mUUID);
-
-		LLViewerInventoryItem* item = gInventory.getItem(mUUID);
-		if (!item) return;
-
-		// Since we just changed the suffix to indicate (active)
-		// the server doesn't need to know, just the viewer.
-		gInventory.updateItem(item);
-		gInventory.notifyObservers();
-	}
-	else if ("deactivate" == action)
-	{
-		LLGestureManager::instance().deactivateGesture(mUUID);
-
-		LLViewerInventoryItem* item = gInventory.getItem(mUUID);
-		if (!item) return;
-
-		// Since we just changed the suffix to indicate (active)
-		// the server doesn't need to know, just the viewer.
-		gInventory.updateItem(item);
-		gInventory.notifyObservers();
-	}
-	else LLItemBridge::performAction(folder, model, action);
-}
-
-void LLGestureBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-	
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-/*
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null);
-		preview->setFocus(TRUE);
-	}
-*/
-}
-
-BOOL LLGestureBridge::removeItem()
-{
-	// Force close the preview window, if it exists
-	LLGestureManager::instance().deactivateGesture(mUUID);
-	return LLItemBridge::removeItem();
-}
-
-void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	lldebugs << "LLGestureBridge::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		items.push_back(std::string("Open"));
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-
-		items.push_back(std::string("Gesture Separator"));
-		items.push_back(std::string("Activate"));
-		items.push_back(std::string("Deactivate"));
-	}
-	hideContextEntries(menu, items, disabled_items);
-}
-
-// +=================================================+
-// |        LLAnimationBridge                        |
-// +=================================================+
-
-LLUIImagePtr LLAnimationBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE);
-}
-
-void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	lldebugs << "LLAnimationBridge::buildContextMenu()" << llendl;
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		items.push_back(std::string("Animation Open"));
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-	}
-
-	items.push_back(std::string("Animation Separator"));
-	items.push_back(std::string("Animation Play"));
-	items.push_back(std::string("Animation Audition"));
-
-	hideContextEntries(menu, items, disabled_items);
-
-}
-
-// virtual
-void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ((action == "playworld") || (action == "playlocal"))
-	{
-		if (getItem())
-		{
-			LLPreviewAnim::e_activation_type activate = LLPreviewAnim::NONE;
-			if ("playworld" == action) activate = LLPreviewAnim::PLAY;
-			if ("playlocal" == action) activate = LLPreviewAnim::AUDITION;
-			
-			LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID));
-			if (preview)
-			{
-				preview->activate(activate);
-			}
-		}
-	}
-	else
-	{
-		LLItemBridge::performAction(folder, model, action);
-	}
-}
-
-void LLAnimationBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-	
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-/*
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
-	}
-*/
-}
-
-// +=================================================+
-// |        LLObjectBridge                           |
-// +=================================================+
-
-// static
-LLUUID LLObjectBridge::sContextMenuItemID;
-
-LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags) :
-LLItemBridge(inventory, uuid), mInvType(type)
-{
-	mAttachPt = (flags & 0xff); // low bye of inventory flags
-
-	mIsMultiObject = ( flags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) ?  TRUE: FALSE;
-}
-
-BOOL LLObjectBridge::isItemRemovable()
-{
-	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-	if(!avatar) return FALSE;
-	if(avatar->isWearingAttachment(mUUID)) return FALSE;
-	return LLInvFVBridge::isItemRemovable();
-}
-
-LLUIImagePtr LLObjectBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_OBJECT, mInvType, mAttachPt, mIsMultiObject );
-}
-
-LLInventoryObject* LLObjectBridge::getObject() const
-{
-	LLInventoryObject* object = NULL;
-	LLInventoryModel* model = getInventoryModel();
-	if(model)
-	{
-		object = (LLInventoryObject*)model->getObject(mUUID);
-	}
-	return object;
-}
-
-// virtual
-void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("attach" == action)
-	{
-		LLUUID object_id = mUUID;
-		LLViewerInventoryItem* item;
-		item = (LLViewerInventoryItem*)gInventory.getItem(object_id);
-		if(item && gInventory.isObjectDescendentOf(object_id, gInventory.getRootFolderID()))
-		{
-			rez_attachment(item, NULL);
-		}
-		else if(item && item->isComplete())
-		{
-			// must be in library. copy it to our inventory and put it on.
-			LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(0);
-			copy_inventory_item(
-				gAgent.getID(),
-				item->getPermissions().getOwner(),
-				item->getUUID(),
-				LLUUID::null,
-				std::string(),
-				cb);
-		}
-		gFocusMgr.setKeyboardFocus(NULL);
-	}
-	else if ("detach" == action)
-	{
-		LLInventoryItem* item = gInventory.getItem(mUUID);
-		if(item)
-		{
-			gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);
-			gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
-			gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-			gMessageSystem->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID());
-			gMessageSystem->sendReliable( gAgent.getRegion()->getHost());
-		}
-		// this object might have been selected, so let the selection manager know it's gone now
-		LLViewerObject *found_obj =
-			gObjectList.findObject(item->getUUID());
-		if (found_obj)
-		{
-			LLSelectMgr::getInstance()->remove(found_obj);
-		}
-		else
-		{
-			llwarns << "object not found - ignoring" << llendl;
-		}
-	}
-	else LLItemBridge::performAction(folder, model, action);
-}
-
-void LLObjectBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-	
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-
-	/*
-	LLFloaterReg::showInstance("properties", mUUID);
-	*/
-}
-
-LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const
-{ 
-	U8 font = LLFontGL::NORMAL;
-
-	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-	if( avatar && avatar->isWearingAttachment( mUUID ) )
-	{
-		font |= LLFontGL::BOLD;
-	}
-
-	LLInventoryItem* item = getItem();
-	if (item && item->getIsLinkType())
-	{
-		font |= LLFontGL::ITALIC;
-	}
-	
-	return (LLFontGL::StyleFlags)font;
-}
-
-std::string LLObjectBridge::getLabelSuffix() const
-{
-	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-	if( avatar && avatar->isWearingAttachment( mUUID ) )
-	{
-		std::string attachment_point_name = avatar->getAttachedPointName(mUUID);
-		LLStringUtil::toLower(attachment_point_name);
-		
-		LLStringUtil::format_map_t args;
-		args["[ATTACHMENT_POINT]"] =  attachment_point_name.c_str();
-		return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args);
-	}
-	else
-	{
-		return LLItemBridge::getLabelSuffix();
-	}
-}
-
-void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment)
-{
-	LLSD payload;
-	payload["item_id"] = item->getLinkedUUID(); // Wear the base object in case this is a link.
-
-	S32 attach_pt = 0;
-	if (gAgent.getAvatarObject() && attachment)
-	{
-		for (LLVOAvatar::attachment_map_t::iterator iter = gAgent.getAvatarObject()->mAttachmentPoints.begin();
-			 iter != gAgent.getAvatarObject()->mAttachmentPoints.end(); ++iter)
-		{
-			if (iter->second == attachment)
-			{
-				attach_pt = iter->first;
-				break;
-			}
-		}
-	}
-
-	payload["attachment_point"] = attach_pt;
-
-#if !ENABLE_MULTIATTACHMENTS
-	if (attachment && attachment->getNumObjects() > 0)
-	{
-		LLNotifications::instance().add("ReplaceAttachment", LLSD(), payload, confirm_replace_attachment_rez);
-	}
-	else
-#endif
-	{
-		LLNotifications::instance().forceResponse(LLNotification::Params("ReplaceAttachment").payload(payload), 0/*YES*/);
-	}
-}
-
-bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response)
-{
-	LLVOAvatar *avatarp = gAgent.getAvatarObject();
-		
-	if (!avatarp->canAttachMoreObjects())
-	{
-		LLSD args;
-		args["MAX_ATTACHMENTS"] = llformat("%d", MAX_AGENT_ATTACHMENTS);
-		LLNotifications::instance().add("MaxAttachmentsOnOutfit", args);
-		return false;
-	}
-
-	S32 option = LLNotification::getSelectedOption(notification, response);
-	if (option == 0/*YES*/)
-	{
-		LLViewerInventoryItem* itemp = gInventory.getItem(notification["payload"]["item_id"].asUUID());
-		
-		if (itemp)
-		{
-			LLMessageSystem* msg = gMessageSystem;
-			msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv);
-			msg->nextBlockFast(_PREHASH_AgentData);
-			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-			msg->nextBlockFast(_PREHASH_ObjectData);
-			msg->addUUIDFast(_PREHASH_ItemID, itemp->getUUID());
-			msg->addUUIDFast(_PREHASH_OwnerID, itemp->getPermissions().getOwner());
-			U8 attachment_pt = notification["payload"]["attachment_point"].asInteger();
-#if ENABLE_MULTIATTACHMENTS
-			attachment_pt |= ATTACHMENT_ADD;
-#endif
-			msg->addU8Fast(_PREHASH_AttachmentPt, attachment_pt);
-			pack_permissions_slam(msg, itemp->getFlags(), itemp->getPermissions());
-			msg->addStringFast(_PREHASH_Name, itemp->getName());
-			msg->addStringFast(_PREHASH_Description, itemp->getDescription());
-			msg->sendReliable(gAgent.getRegion()->getHost());
-		}
-	}
-	return false;
-}
-static LLNotificationFunctorRegistration confirm_replace_attachment_rez_reg("ReplaceAttachment", confirm_replace_attachment_rez);
-
-void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		LLInventoryItem* item = getItem();
-		if (item && item->getIsLinkType())
-		{
-			items.push_back(std::string("Goto Link"));
-		}
-
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-
-		LLObjectBridge::sContextMenuItemID = mUUID;
-
-		if(item)
-		{
-			LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();
-			if( !avatarp )
-			{
-				return;
-			}
-			
-			if( avatarp->isWearingAttachment( mUUID ) )
-			{
-				items.push_back(std::string("Detach From Yourself"));
-			}
-			else
-			if( !isInTrash() && !isLinkedObjectInTrash() )
-			{
-				items.push_back(std::string("Attach Separator"));
-				items.push_back(std::string("Object Wear"));
-				items.push_back(std::string("Attach To"));
-				items.push_back(std::string("Attach To HUD"));
-				// commented out for DEV-32347
-				//items.push_back(std::string("Restore to Last Position"));
-
-				if (!avatarp->canAttachMoreObjects())
-				{
-					disabled_items.push_back(std::string("Object Wear"));
-					disabled_items.push_back(std::string("Attach To"));
-					disabled_items.push_back(std::string("Attach To HUD"));
-				}
-				LLMenuGL* attach_menu = menu.findChildMenuByName("Attach To", TRUE);
-				LLMenuGL* attach_hud_menu = menu.findChildMenuByName("Attach To HUD", TRUE);
-				LLVOAvatar *avatarp = gAgent.getAvatarObject();
-				if (attach_menu 
-					&& (attach_menu->getChildCount() == 0) 
-					&& attach_hud_menu 
-					&& (attach_hud_menu->getChildCount() == 0) 
-					&& avatarp)
-				{
-					for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); 
-						 iter != avatarp->mAttachmentPoints.end(); )
-					{
-						LLVOAvatar::attachment_map_t::iterator curiter = iter++;
-						LLViewerJointAttachment* attachment = curiter->second;
-						LLMenuItemCallGL::Params p;
-						std::string submenu_name = attachment->getName();
-						if (LLTrans::getString(submenu_name) != "")
-						{
-						    p.name = (" ")+LLTrans::getString(submenu_name)+" ";
-						}
-						else
-						{
-							p.name = submenu_name;
-						}
-						LLSD cbparams;
-						cbparams["index"] = curiter->first;
-						cbparams["label"] = attachment->getName();
-						p.on_click.function_name = "Inventory.AttachObject";
-						p.on_click.parameter = LLSD(attachment->getName());
-						p.on_enable.function_name = "Attachment.Label";
-						p.on_enable.parameter = cbparams;
-						LLView* parent = attachment->getIsHUDAttachment() ? attach_hud_menu : attach_menu;
-						LLUICtrlFactory::create<LLMenuItemCallGL>(p, parent);
-					}
-				}
-			}
-		}
-	}
-	hideContextEntries(menu, items, disabled_items);
-}
-
-BOOL LLObjectBridge::renameItem(const std::string& new_name)
-{
-	if(!isItemRenameable())
-		return FALSE;
-	LLPreview::dirty(mUUID);
-	LLInventoryModel* model = getInventoryModel();
-	if(!model)
-		return FALSE;
-	LLViewerInventoryItem* item = getItem();
-	if(item && (item->getName() != new_name))
-	{
-		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
-		new_item->rename(new_name);
-		buildDisplayName(new_item, mDisplayName);
-		new_item->updateServer(FALSE);
-		model->updateItem(new_item);
-
-		model->notifyObservers();
-
-		LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-		if( avatar )
-		{
-			LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() );
-			if( obj )
-			{
-				LLSelectMgr::getInstance()->deselectAll();
-				LLSelectMgr::getInstance()->addAsIndividual( obj, SELECT_ALL_TES, FALSE );
-				LLSelectMgr::getInstance()->selectionSetObjectName( new_name );
-				LLSelectMgr::getInstance()->deselectAll();
-			}
-		}
-	}
-	// return FALSE because we either notified observers (& therefore
-	// rebuilt) or we didn't update.
-	return FALSE;
-}
-
-// +=================================================+
-// |        LLLSLTextBridge                          |
-// +=================================================+
-
-LLUIImagePtr LLLSLTextBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
-}
-
-void LLLSLTextBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-	
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-	/*
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES);
-	}
-	*/
-}
-
-// +=================================================+
-// |        LLWearableBridge                         |
-// +=================================================+
-
-// *NOTE: hack to get from avatar inventory to avatar
-void wear_inventory_item_on_avatar( LLInventoryItem* item )
-{
-	if(item)
-	{
-		lldebugs << "wear_inventory_item_on_avatar( " << item->getName()
-				 << " )" << llendl;
-
-		LLAppearanceManager::wearItem(item);
-	}
-}
-
-void wear_add_inventory_item_on_avatar( LLInventoryItem* item )
-{
-	if(item)
-	{
-		lldebugs << "wear_add_inventory_item_on_avatar( " << item->getName()
-				 << " )" << llendl;
-			
-		LLWearableList::instance().getAsset(item->getAssetUUID(),
-							   item->getName(),
-							   item->getType(),
-							   LLWearableBridge::onWearAddOnAvatarArrived,
-							   new LLUUID(item->getUUID()));
-	}
-}
-
-void remove_inventory_category_from_avatar( LLInventoryCategory* category )
-{
-	if(!category) return;
-	lldebugs << "remove_inventory_category_from_avatar( " << category->getName()
-			 << " )" << llendl;
-			 
-	
-	if( gFloaterCustomize )
-	{
-		gFloaterCustomize->askToSaveIfDirty(
-			boost::bind(remove_inventory_category_from_avatar_step2, _1, category->getUUID()));
-	}
-	else
-	{
-		remove_inventory_category_from_avatar_step2(TRUE, category->getUUID() );
-	}
-}
-
-struct OnRemoveStruct
-{
-	LLUUID mUUID;
-	OnRemoveStruct(const LLUUID& uuid):
-		mUUID(uuid)
-	{
-	}
-};
-
-void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id)
-{
-
-	// Find all the wearables that are in the category's subtree.
-	lldebugs << "remove_inventory_category_from_avatar_step2()" << llendl;
-	if(proceed)
-	{
-		LLInventoryModel::cat_array_t cat_array;
-		LLInventoryModel::item_array_t item_array;
-		LLFindWearables is_wearable;
-		gInventory.collectDescendentsIf(category_id,
-										cat_array,
-										item_array,
-										LLInventoryModel::EXCLUDE_TRASH,
-										is_wearable);
-		S32 i;
-		S32 wearable_count = item_array.count();
-
-		LLInventoryModel::cat_array_t	obj_cat_array;
-		LLInventoryModel::item_array_t	obj_item_array;
-		LLIsType is_object( LLAssetType::AT_OBJECT );
-		gInventory.collectDescendentsIf(category_id,
-										obj_cat_array,
-										obj_item_array,
-										LLInventoryModel::EXCLUDE_TRASH,
-										is_object);
-		S32 obj_count = obj_item_array.count();
-
-		// Find all gestures in this folder
-		LLInventoryModel::cat_array_t	gest_cat_array;
-		LLInventoryModel::item_array_t	gest_item_array;
-		LLIsType is_gesture( LLAssetType::AT_GESTURE );
-		gInventory.collectDescendentsIf(category_id,
-										gest_cat_array,
-										gest_item_array,
-										LLInventoryModel::EXCLUDE_TRASH,
-										is_gesture);
-		S32 gest_count = gest_item_array.count();
-
-		if (wearable_count > 0)	//Loop through wearables.  If worn, remove.
-		{
-			for(i = 0; i  < wearable_count; ++i)
-			{
-				if( gAgentWearables.isWearingItem (item_array.get(i)->getUUID()) )
-				{
-					LLWearableList::instance().getAsset(item_array.get(i)->getAssetUUID(),
-														item_array.get(i)->getName(),
-														item_array.get(i)->getType(),
-														LLWearableBridge::onRemoveFromAvatarArrived,
-														new OnRemoveStruct(item_array.get(i)->getUUID()));
-
-				}
-			}
-		}
-		
-		
-		if (obj_count > 0)
-		{
-			for(i = 0; i  < obj_count; ++i)
-			{
-				gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);
-				gMessageSystem->nextBlockFast(_PREHASH_ObjectData );
-				gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-				gMessageSystem->addUUIDFast(_PREHASH_ItemID, obj_item_array.get(i)->getUUID() );
-
-				gMessageSystem->sendReliable( gAgent.getRegion()->getHost() );
-
-				// this object might have been selected, so let the selection manager know it's gone now
-				LLViewerObject *found_obj = gObjectList.findObject( obj_item_array.get(i)->getUUID());
-				if (found_obj)
-				{
-					LLSelectMgr::getInstance()->remove(found_obj);
-				}
-				else
-				{
-					llwarns << "object not found, ignoring" << llendl;
-				}
-			}
-		}
-
-		if (gest_count > 0)
-		{
-			for(i = 0; i  < gest_count; ++i)
-			{
-				if ( LLGestureManager::instance().isGestureActive( gest_item_array.get(i)->getUUID()) )
-				{
-					LLGestureManager::instance().deactivateGesture( gest_item_array.get(i)->getUUID() );
-					gInventory.updateItem( gest_item_array.get(i) );
-					gInventory.notifyObservers();
-				}
-
-			}
-		}
-	}
-}
-
-BOOL LLWearableBridge::renameItem(const std::string& new_name)
-{
-	if( gAgentWearables.isWearingItem( mUUID ) )
-	{
-		gAgentWearables.setWearableName( mUUID, new_name );
-	}
-	return LLItemBridge::renameItem(new_name);
-}
-
-BOOL LLWearableBridge::isItemRemovable()
-{
-	if (gAgentWearables.isWearingItem(mUUID)) return FALSE;
-	return LLInvFVBridge::isItemRemovable();
-}
-
-std::string LLWearableBridge::getLabelSuffix() const
-{
-	if( gAgentWearables.isWearingItem( mUUID ) )
-	{
-		return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn");
-	}
-	else
-	{
-		return LLItemBridge::getLabelSuffix();
-	}
-}
-
-LLUIImagePtr LLWearableBridge::getIcon() const
-{
-	return get_item_icon(mAssetType, mInvType, mWearableType, FALSE);
-}
-
-// virtual
-void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("wear" == action)
-	{
-		wearOnAvatar();
-	}
-	else if ("wear_add" == action)
-	{
-		wearAddOnAvatar();
-	}
-	else if ("edit" == action)
-	{
-		editOnAvatar();
-		return;
-	}
-	else if ("take_off" == action)
-	{
-		if(gAgentWearables.isWearingItem(mUUID))
-		{
-			LLViewerInventoryItem* item = getItem();
-			if (item)
-			{	
-				LLWearableList::instance().getAsset(item->getAssetUUID(),
-													item->getName(),
-													item->getType(),
-													LLWearableBridge::onRemoveFromAvatarArrived,
-													new OnRemoveStruct(mUUID));
-			}
-		}
-	}
-	else LLItemBridge::performAction(folder, model, action);
-}
-
-void LLWearableBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-	
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-	/*
-	if( isInTrash() )
-	{
-		LLNotifications::instance().add("CannotWearTrash");
-	}
-	else if(isAgentInventory())
-	{
-		if( !gAgentWearables.isWearingItem( mUUID ) )
-		{
-			wearOnAvatar();
-		}
-	}
-	else
-	{
-		// must be in the inventory library. copy it to our inventory
-		// and put it on right away.
-		LLViewerInventoryItem* item = getItem();
-		if(item && item->isComplete())
-		{
-			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
-			copy_inventory_item(
-				gAgent.getID(),
-				item->getPermissions().getOwner(),
-				item->getUUID(),
-				LLUUID::null,
-				std::string(),
-				cb);
-		}
-		else if(item)
-		{
-			// *TODO: We should fetch the item details, and then do
-			// the operation above.
-			LLNotifications::instance().add("CannotWearInfoNotComplete");
-		}
-	}
-	*/
-}
-
-void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	lldebugs << "LLWearableBridge::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{	// FWIW, it looks like SUPPRESS_OPEN_ITEM is not set anywhere
-		BOOL no_open = ((flags & SUPPRESS_OPEN_ITEM) == SUPPRESS_OPEN_ITEM);
-
-		// If we have clothing, don't add "Open" as it's the same action as "Wear"   SL-18976
-		LLViewerInventoryItem* item = getItem();
-		if( !no_open && item )
-		{
-			no_open = (item->getType() == LLAssetType::AT_CLOTHING) ||
-					  (item->getType() == LLAssetType::AT_BODYPART);
-		}
-		if (!no_open)
-		{
-			items.push_back(std::string("Open"));
-		}
-
-		if (item && item->getIsLinkType())
-		{
-			items.push_back(std::string("Goto Link"));
-		}
-
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-
-		items.push_back(std::string("Wearable Separator"));
-		
-		items.push_back(std::string("Wearable Wear"));
-		items.push_back(std::string("Wearable Add"));
-		items.push_back(std::string("Wearable Edit"));
-
-		if ((flags & FIRST_SELECTED_ITEM) == 0)
-		{
-			disabled_items.push_back(std::string("Wearable Edit"));
-		}
-		// Don't allow items to be worn if their baseobj is in the trash.
-		if (isLinkedObjectInTrash())
-		{
-			disabled_items.push_back(std::string("Wearable Wear"));
-			disabled_items.push_back(std::string("Wearable Add"));
-			disabled_items.push_back(std::string("Wearable Edit"));
-		}
-
-		// Disable wear and take off based on whether the item is worn.
-		if(item)
-		{
-			switch (item->getType())
-			{
-				case LLAssetType::AT_CLOTHING:
-					items.push_back(std::string("Take Off"));
-				case LLAssetType::AT_BODYPART:
-					if (gAgentWearables.isWearingItem(item->getUUID()))
-					{
-						disabled_items.push_back(std::string("Wearable Wear"));
-						disabled_items.push_back(std::string("Wearable Add"));
-					}
-					else
-					{	
-						disabled_items.push_back(std::string("Take Off"));
-					}
-					break;
-				default:
-					break;
-			}
-		}
-	}
-	hideContextEntries(menu, items, disabled_items);
-}
-
-// Called from menus
-// static
-BOOL LLWearableBridge::canWearOnAvatar(void* user_data)
-{
-	LLWearableBridge* self = (LLWearableBridge*)user_data;
-	if(!self) return FALSE;
-	if(!self->isAgentInventory())
-	{
-		LLViewerInventoryItem* item = (LLViewerInventoryItem*)self->getItem();
-		if(!item || !item->isComplete()) return FALSE;
-	}
-	return (!gAgentWearables.isWearingItem(self->mUUID));
-}
-
-// Called from menus
-// static
-void LLWearableBridge::onWearOnAvatar(void* user_data)
-{
-	LLWearableBridge* self = (LLWearableBridge*)user_data;
-	if(!self) return;
-	self->wearOnAvatar();
-}
-
-void LLWearableBridge::wearOnAvatar()
-{
-	// Don't wear anything until initial wearables are loaded, can
-	// destroy clothing items.
-	if (!gAgentWearables.areWearablesLoaded()) 
-	{
-		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
-		return;
-	}
-
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		if(!isAgentInventory())
-		{
-			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
-			copy_inventory_item(
-				gAgent.getID(),
-				item->getPermissions().getOwner(),
-				item->getUUID(),
-				LLUUID::null,
-				std::string(),
-				cb);
-		}
-		else
-		{
-			wear_inventory_item_on_avatar(item);
-		}
-	}
-}
-
-void LLWearableBridge::wearAddOnAvatar()
-{
-	// Don't wear anything until initial wearables are loaded, can
-	// destroy clothing items.
-	if (!gAgentWearables.areWearablesLoaded()) 
-	{
-		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
-		return;
-	}
-
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		if(!isAgentInventory())
-		{
-			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
-			copy_inventory_item(
-				gAgent.getID(),
-				item->getPermissions().getOwner(),
-				item->getUUID(),
-				LLUUID::null,
-				std::string(),
-				cb);
-		}
-		else
-		{
-			wear_add_inventory_item_on_avatar(item);
-		}
-	}
-}
-
-// static
-void LLWearableBridge::onWearOnAvatarArrived( LLWearable* wearable, void* userdata )
-{
-	LLUUID* item_id = (LLUUID*) userdata;
-	if(wearable)
-	{
-		LLViewerInventoryItem* item = NULL;
-		item = (LLViewerInventoryItem*)gInventory.getItem(*item_id);
-		if(item)
-		{
-			if(item->getAssetUUID() == wearable->getAssetID())
-			{
-				gAgentWearables.setWearableItem(item, wearable);
-				gInventory.notifyObservers();
-				//self->getFolderItem()->refreshFromRoot();
-			}
-			else
-			{
-				llinfos << "By the time wearable asset arrived, its inv item already pointed to a different asset." << llendl;
-			}
-		}
-	}
-	delete item_id;
-}
-
-// static
-// BAP remove the "add" code path once everything is fully COF-ified.
-void LLWearableBridge::onWearAddOnAvatarArrived( LLWearable* wearable, void* userdata )
-{
-	LLUUID* item_id = (LLUUID*) userdata;
-	if(wearable)
-	{
-		LLViewerInventoryItem* item = NULL;
-		item = (LLViewerInventoryItem*)gInventory.getItem(*item_id);
-		if(item)
-		{
-			if(item->getAssetUUID() == wearable->getAssetID())
-			{
-				bool do_append = true;
-				gAgentWearables.setWearableItem(item, wearable, do_append);
-				gInventory.notifyObservers();
-				//self->getFolderItem()->refreshFromRoot();
-			}
-			else
-			{
-				llinfos << "By the time wearable asset arrived, its inv item already pointed to a different asset." << llendl;
-			}
-		}
-	}
-	delete item_id;
-}
-
-// static
-BOOL LLWearableBridge::canEditOnAvatar(void* user_data)
-{
-	LLWearableBridge* self = (LLWearableBridge*)user_data;
-	if(!self) return FALSE;
-
-	return (gAgentWearables.isWearingItem(self->mUUID));
-}
-
-// static 
-void LLWearableBridge::onEditOnAvatar(void* user_data)
-{
-	LLWearableBridge* self = (LLWearableBridge*)user_data;
-	if(self)
-	{
-		self->editOnAvatar();
-	}
-}
-
-void LLWearableBridge::editOnAvatar()
-{
-	const LLWearable* wearable = gAgentWearables.getWearableFromItemID(mUUID);
-	if( wearable )
-	{
-		// Set the tab to the right wearable.
-		if (gFloaterCustomize)
-			gFloaterCustomize->setCurrentWearableType( wearable->getType() );
-
-		if( CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() )
-		{
-			// Start Avatar Customization
-			gAgent.changeCameraToCustomizeAvatar();
-		}
-	}
-}
-
-// static
-BOOL LLWearableBridge::canRemoveFromAvatar(void* user_data)
-{
-	LLWearableBridge* self = (LLWearableBridge*)user_data;
-	if( self && (LLAssetType::AT_BODYPART != self->mAssetType) )
-	{
-		return gAgentWearables.isWearingItem( self->mUUID );
-	}
-	return FALSE;
-}
-
-// static 
-void LLWearableBridge::onRemoveFromAvatar(void* user_data)
-{
-	LLWearableBridge* self = (LLWearableBridge*)user_data;
-	if(!self) return;
-	if(gAgentWearables.isWearingItem(self->mUUID))
-	{
-		LLViewerInventoryItem* item = self->getItem();
-		if (item)
-		{
-			LLUUID parent_id = item->getParentUUID();
-			LLWearableList::instance().getAsset(item->getAssetUUID(),
-												item->getName(),
-												item->getType(),
-												onRemoveFromAvatarArrived,
-												new OnRemoveStruct(LLUUID(self->mUUID)));
-		}
-	}
-}
-
-// static
-void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,
-												 void* userdata)
-{
-	OnRemoveStruct *on_remove_struct = (OnRemoveStruct*) userdata;
-	const LLUUID &item_id = gInventory.getLinkedItemID(on_remove_struct->mUUID);
-	if(wearable)
-	{
-		if( gAgentWearables.isWearingItem( item_id ) )
-		{
-			EWearableType type = wearable->getType();
-	
-			if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES ) ) //&&
-				//!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
-			{
-				// MULTI_WEARABLE: FIXME HACK - always remove all
-				bool do_remove_all = false;
-				gAgentWearables.removeWearable( type, do_remove_all, 0 );
-			}
-		}
-	}
-
-	// Find and remove this item from the COF.
-	LLInventoryModel::item_array_t items = gInventory.collectLinkedItems(item_id, LLAppearanceManager::getCOF());
-	llassert(items.size() == 1); // Should always have one and only one item linked to this in the COF.
-	for (LLInventoryModel::item_array_t::const_iterator iter = items.begin();
-		 iter != items.end();
-		 ++iter)
-	{
-		const LLViewerInventoryItem *linked_item = (*iter);
-		const LLUUID &item_id = linked_item->getUUID();
-		gInventory.purgeObject(item_id);
-	}
-	gInventory.notifyObservers();
-
-	delete on_remove_struct;
-}
-
-LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type,
-													   const LLUUID& uuid,LLInventoryModel* model)
-{
-	LLInvFVBridgeAction* action = NULL;
-	switch(asset_type)
-	{
-	case LLAssetType::AT_TEXTURE:
-		action = new LLTextureBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_SOUND:
-		action = new LLSoundBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_LANDMARK:
-		action = new LLLandmarkBridgeAction(uuid,model);
-		break;
-		
-	case LLAssetType::AT_CALLINGCARD:
-		action = new LLCallingCardBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_OBJECT:
-		action = new LLObjectBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_NOTECARD:
-		action = new LLNotecardBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_ANIMATION:
-		action = new LLAnimationBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_GESTURE:
-		action = new LLGestureBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_LSL_TEXT:
-		action = new LLLSLTextBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_CLOTHING:
-	case LLAssetType::AT_BODYPART:
-		action = new LLWearableBridgeAction(uuid,model);
-
-		break;
-
-	default:
-		break;
-	}
-	return action;
-}
-
-//static 
-void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,
-								   const LLUUID& uuid,LLInventoryModel* model)
-{
-	LLInvFVBridgeAction* action = createAction(asset_type,uuid,model);
-	if(action)
-	{
-		action->doIt();
-		delete action;
-	}
-}
-
-//static 
-void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model)
-{
-	LLAssetType::EType asset_type = model->getItem(uuid)->getType();
-	LLInvFVBridgeAction* action = createAction(asset_type,uuid,model);
-	if(action)
-	{
-		action->doIt();
-		delete action;
-	}
-}
-
-LLViewerInventoryItem* LLInvFVBridgeAction::getItem() const
-{
-	if(mModel)
-		return (LLViewerInventoryItem*)mModel->getItem(mUUID);
-	return NULL;
-}
-
-//virtual 
-void	LLTextureBridgeAction::doIt() 
-{
-	if (getItem())
-	{
-		LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-//virtual
-void	LLSoundBridgeAction::doIt() 
-{
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES);
-	}
-	
-	LLInvFVBridgeAction::doIt();
-}
-
-
-//virtual 
-void	LLLandmarkBridgeAction::doIt() 
-{
-	LLViewerInventoryItem* item = getItem();
-	if( item )
-	{
-		// Opening (double-clicking) a landmark immediately teleports,
-		// but warns you the first time.
-		LLSD payload;
-		payload["asset_id"] = item->getAssetUUID();
-		LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-
-//virtual 
-void	LLCallingCardBridgeAction::doIt() 
-{
-	LLViewerInventoryItem* item = getItem();
-	if(item && item->getCreatorUUID().notNull())
-	{
-		LLAvatarActions::showProfile(item->getCreatorUUID());
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-//virtual 
-void	
-LLNotecardBridgeAction::doIt() 
-{
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-//virtual 
-void	LLGestureBridgeAction::doIt() 
-{
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null);
-		preview->setFocus(TRUE);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-//virtual 
-void	LLAnimationBridgeAction::doIt() 
-{
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-
-//virtual 
-void	LLObjectBridgeAction::doIt()
-{
-	LLFloaterReg::showInstance("properties", mUUID);
-
-	LLInvFVBridgeAction::doIt();
-}
-
-
-//virtual 
-void	LLLSLTextBridgeAction::doIt() 
-{
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-
-BOOL LLWearableBridgeAction::isInTrash() const
-{
-	if(!mModel) return FALSE;
-	LLUUID trash_id = mModel->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	return mModel->isObjectDescendentOf(mUUID, trash_id);
-}
-
-BOOL LLWearableBridgeAction::isAgentInventory() const
-{
-	if(!mModel) return FALSE;
-	if(gInventory.getRootFolderID() == mUUID) return TRUE;
-	return mModel->isObjectDescendentOf(mUUID, gInventory.getRootFolderID());
-}
-
-void LLWearableBridgeAction::wearOnAvatar()
-{
-	// Don't wear anything until initial wearables are loaded, can
-	// destroy clothing items.
-	if (!gAgentWearables.areWearablesLoaded()) 
-	{
-		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
-		return;
-	}
-
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		if(!isAgentInventory())
-		{
-			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
-			copy_inventory_item(
-				gAgent.getID(),
-				item->getPermissions().getOwner(),
-				item->getUUID(),
-				LLUUID::null,
-				std::string(),
-				cb);
-		}
-		else
-		{
-			wear_inventory_item_on_avatar(item);
-		}
-	}
-}
-
-//virtual 
-void LLWearableBridgeAction::doIt()
-{
-	if(isInTrash())
-	{
-		LLNotifications::instance().add("CannotWearTrash");
-	}
-	else if(isAgentInventory())
-	{
-		if(!gAgentWearables.isWearingItem(mUUID))
-		{
-			wearOnAvatar();
-		}
-	}
-	else
-	{
-		// must be in the inventory library. copy it to our inventory
-		// and put it on right away.
-		LLViewerInventoryItem* item = getItem();
-		if(item && item->isComplete())
-		{
-			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
-			copy_inventory_item(
-				gAgent.getID(),
-				item->getPermissions().getOwner(),
-				item->getUUID(),
-				LLUUID::null,
-				std::string(),
-				cb);
-		}
-		else if(item)
-		{
-			// *TODO: We should fetch the item details, and then do
-			// the operation above.
-			LLNotifications::instance().add("CannotWearInfoNotComplete");
-		}
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-// +=================================================+
-// |        LLLinkItemBridge                         |
-// +=================================================+
-// For broken links
-
-std::string LLLinkItemBridge::sPrefix("Link: ");
-
-
-LLUIImagePtr LLLinkItemBridge::getIcon() const
-{
-	if (LLViewerInventoryItem *item = getItem())
-	{
-		return get_item_icon(item->getActualType(), LLInventoryType::IT_NONE, 0, FALSE);
-	}
-	return get_item_icon(LLAssetType::AT_LINK, LLInventoryType::IT_NONE, 0, FALSE);
-}
-
-void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	// *TODO: Translate
-	lldebugs << "LLLink::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{	
-		items.push_back(std::string("Delete"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Delete"));
-		}
-	}
-	hideContextEntries(menu, items, disabled_items);
-}
-
-
-// +=================================================+
-// |        LLLinkBridge                             |
-// +=================================================+
-// For broken links.
-
-std::string LLLinkFolderBridge::sPrefix("Link: ");
-
-
-LLUIImagePtr LLLinkFolderBridge::getIcon() const
-{
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
-	if (LLViewerInventoryItem *item = getItem())
-	{
-		if (const LLViewerInventoryCategory* cat = item->getLinkedCategory())
-		{
-			preferred_type = cat->getPreferredType();
-		}
-	}
-	return LLFolderBridge::getIcon(preferred_type);
-}
-
-void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	// *TODO: Translate
-	lldebugs << "LLLink::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{	
-		items.push_back(std::string("Goto Link"));
-		items.push_back(std::string("Delete"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Delete"));
-		}
-	}
-	hideContextEntries(menu, items, disabled_items);
-}
-
-void LLLinkFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("goto" == action)
-	{
-		gotoItem(folder);
-		return;
-	}
-	LLItemBridge::performAction(folder,model,action);
-}
-
-void LLLinkFolderBridge::gotoItem(LLFolderView *folder)
-{
-	const LLUUID &cat_uuid = getFolderID();
-	if (!cat_uuid.isNull())
-	{
-		if (LLFolderViewItem *base_folder = folder->getItemByID(cat_uuid))
-		{
-			if (LLInventoryModel* model = getInventoryModel())
-			{
-				model->fetchDescendentsOf(cat_uuid);
-			}
-			base_folder->setOpen(TRUE);
-			folder->setSelectionFromRoot(base_folder,TRUE);
-			folder->scrollToShowSelection();
-		}
-	}
-}
-
-const LLUUID &LLLinkFolderBridge::getFolderID() const
-{
-	if (LLViewerInventoryItem *link_item = getItem())
-	{
-		if (const LLViewerInventoryCategory *cat = link_item->getLinkedCategory())
-		{
-			const LLUUID& cat_uuid = cat->getUUID();
-			return cat_uuid;
-		}
-	}
-	return LLUUID::null;
-}
+/** 
+ * @file llinventorybridge.cpp
+ * @brief Implementation of the Inventory-Folder-View-Bridge classes.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include <utility> // for std::pair<>
+
+#include "llfloaterinventory.h"
+#include "llinventorybridge.h"
+
+#include "message.h"
+
+#include "llagent.h"
+#include "llagentwearables.h"
+#include "llcallingcard.h"
+#include "llcheckboxctrl.h"		// for radio buttons
+#include "llfloaterreg.h"
+#include "llradiogroup.h"
+#include "llspinctrl.h"
+#include "lltextbox.h"
+#include "llui.h"
+
+#include "llviewercontrol.h"
+#include "llfirstuse.h"
+#include "llfoldertype.h"
+#include "llfloaterchat.h"
+#include "llfloatercustomize.h"
+#include "llfloaterproperties.h"
+#include "llfloaterworldmap.h"
+#include "llfocusmgr.h"
+#include "llfolderview.h"
+#include "llfriendcard.h"
+#include "llavataractions.h"
+#include "llgesturemgr.h"
+#include "lliconctrl.h"
+#include "llinventoryfunctions.h"
+#include "llinventorymodel.h"
+#include "llinventorypanel.h"
+#include "llinventoryclipboard.h"
+#include "lllineeditor.h"
+#include "llmenugl.h"
+#include "llpreviewanim.h"
+#include "llpreviewgesture.h"
+#include "llpreviewnotecard.h"
+#include "llpreviewscript.h"
+#include "llpreviewsound.h"
+#include "llpreviewtexture.h"
+#include "llresmgr.h"
+#include "llscrollcontainer.h"
+#include "llimview.h"
+#include "lltooldraganddrop.h"
+#include "llviewertexturelist.h"
+#include "llviewerinventory.h"
+#include "llviewerobjectlist.h"
+#include "llviewerwindow.h"
+#include "llvoavatar.h"
+#include "llwearable.h"
+#include "llwearablelist.h"
+#include "llviewermessage.h" 
+#include "llviewerregion.h"
+#include "llvoavatarself.h"
+#include "lltabcontainer.h"
+#include "lluictrlfactory.h"
+#include "llselectmgr.h"
+#include "llsidetray.h"
+#include "llfloateropenobject.h"
+#include "lltrans.h"
+#include "llappearancemgr.h"
+
+using namespace LLOldEvents;
+
+// Helpers
+// bug in busy count inc/dec right now, logic is complex... do we really need it?
+void inc_busy_count()
+{
+// 	gViewerWindow->getWindow()->incBusyCount();
+//  check balance of these calls if this code is changed to ever actually
+//  *do* something!
+}
+void dec_busy_count()
+{
+// 	gViewerWindow->getWindow()->decBusyCount();
+//  check balance of these calls if this code is changed to ever actually
+//  *do* something!
+}
+
+// Function declarations
+void wear_add_inventory_item_on_avatar(LLInventoryItem* item);
+void remove_inventory_category_from_avatar(LLInventoryCategory* category);
+void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id);
+bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*);
+bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response);
+
+std::string ICON_NAME[ICON_NAME_COUNT] =
+{
+	"Inv_Texture",
+	"Inv_Sound",
+	"Inv_CallingCard",
+	"Inv_CallingCard",
+	"Inv_Landmark",
+	"Inv_Landmark",
+	"Inv_Script",
+	"Inv_Clothing",
+	"Inv_Object",
+	"Inv_Object",
+	"Inv_Notecard",
+	"Inv_Skin",
+	"Inv_Snapshot",
+
+	"Inv_BodyShape",
+	"Inv_Skin",
+	"Inv_Hair",
+	"Inv_Eye",
+	"Inv_Shirt",
+	"Inv_Pants",
+	"Inv_Shoe",
+	"Inv_Socks",
+	"Inv_Jacket",
+	"Inv_Gloves",
+	"Inv_Undershirt",
+	"Inv_Underpants",
+	"Inv_Skirt",
+	"inv_item_alpha.tga",
+	"inv_item_tattoo.tga",
+
+	"Inv_Animation",
+	"Inv_Gesture",
+
+	"inv_item_linkitem.tga",
+	"inv_item_linkfolder.tga"
+};
+
+
+// +=================================================+
+// |        LLInventoryPanelObserver                 |
+// +=================================================+
+void LLInventoryPanelObserver::changed(U32 mask)
+{
+	mIP->modelChanged(mask);
+}
+
+
+// +=================================================+
+// |        LLInvFVBridge                            |
+// +=================================================+
+
+LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
+mUUID(uuid), mInvType(LLInventoryType::IT_NONE)
+{
+	mInventoryPanel = inventory->getHandle();
+}
+
+const std::string& LLInvFVBridge::getName() const
+{
+	LLInventoryObject* obj = getInventoryObject();
+	if(obj)
+	{
+		return obj->getName();
+	}
+	return LLStringUtil::null;
+}
+
+const std::string& LLInvFVBridge::getDisplayName() const
+{
+	return getName();
+}
+
+// Folders have full perms
+PermissionMask LLInvFVBridge::getPermissionMask() const
+{
+
+	return PERM_ALL;
+}
+
+// virtual
+LLAssetType::EType LLInvFVBridge::getPreferredType() const
+{
+	return LLAssetType::AT_NONE;
+}
+
+
+// Folders don't have creation dates.
+time_t LLInvFVBridge::getCreationDate() const
+{
+	return 0;
+}
+
+// Can be destoryed (or moved to trash)
+BOOL LLInvFVBridge::isItemRemovable()
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+	if(model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID()))
+	{
+		return TRUE;
+	}
+	return FALSE;
+}
+
+// Sends an update to all link items that point to the base item.
+void LLInvFVBridge::renameLinkedItems(const LLUUID &item_id, const std::string& new_name)
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return;
+
+	LLInventoryItem* itemp = model->getItem(mUUID);
+	if (!itemp) return;
+
+	if (itemp->getIsLinkType())
+	{
+		return;
+	}
+	
+	LLInventoryModel::item_array_t item_array = model->collectLinkedItems(item_id);
+	for (LLInventoryModel::item_array_t::iterator iter = item_array.begin();
+		 iter != item_array.end();
+		 iter++)
+	{
+		LLViewerInventoryItem *linked_item = (*iter);
+		if (linked_item->getUUID() == item_id) continue;
+		
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(linked_item);
+		new_item->rename(new_name);
+		new_item->updateServer(FALSE);
+		model->updateItem(new_item);
+		// model->addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID());
+	}
+	model->notifyObservers();
+}
+
+// Can be moved to another folder
+BOOL LLInvFVBridge::isItemMovable() const
+{
+	return TRUE;
+}
+
+/*virtual*/
+/**
+ * @brief Adds this item into clipboard storage
+ */
+void LLInvFVBridge::cutToClipboard()
+{
+	if(isItemMovable())
+	{
+		LLInventoryClipboard::instance().cut(mUUID);
+	}
+}
+// *TODO: make sure this does the right thing
+void LLInvFVBridge::showProperties()
+{
+	LLSD key;
+	key["id"] = mUUID;
+	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
+
+	// LLFloaterReg::showInstance("properties", mUUID);
+}
+
+void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch)
+{
+	// Deactivate gestures when moving them into Trash
+	LLInvFVBridge* bridge;
+	LLInventoryModel* model = getInventoryModel();
+	LLViewerInventoryItem* item = NULL;
+	LLViewerInventoryCategory* cat = NULL;
+	LLInventoryModel::cat_array_t	descendent_categories;
+	LLInventoryModel::item_array_t	descendent_items;
+	S32 count = batch.count();
+	S32 i,j;
+	for(i = 0; i < count; ++i)
+	{	
+		bridge = (LLInvFVBridge*)(batch.get(i));
+		if(!bridge || !bridge->isItemRemovable()) continue;
+		item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID());
+		if (item)
+		{
+			if(LLAssetType::AT_GESTURE == item->getType())
+			{
+				LLGestureManager::instance().deactivateGesture(item->getUUID());
+			}
+		}
+	}
+	for(i = 0; i < count; ++i)
+	{		
+		bridge = (LLInvFVBridge*)(batch.get(i));
+		if(!bridge || !bridge->isItemRemovable()) continue;
+		cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID());
+		if (cat)
+		{
+			gInventory.collectDescendents( cat->getUUID(), descendent_categories, descendent_items, FALSE );
+			for (j=0; j<descendent_items.count(); j++)
+			{
+				if(LLAssetType::AT_GESTURE == descendent_items[j]->getType())
+				{
+					LLGestureManager::instance().deactivateGesture(descendent_items[j]->getUUID());
+				}
+			}
+		}
+	}
+	removeBatchNoCheck(batch);
+}
+
+void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*>& batch)
+{
+	// this method moves a bunch of items and folders to the trash. As
+	// per design guidelines for the inventory model, the message is
+	// built and the accounting is performed first. After all of that,
+	// we call LLInventoryModel::moveObject() to move everything
+	// around.
+	LLInvFVBridge* bridge;
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return;
+	LLMessageSystem* msg = gMessageSystem;
+	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	LLViewerInventoryItem* item = NULL;
+	LLViewerInventoryCategory* cat = NULL;
+	std::vector<LLUUID> move_ids;
+	LLInventoryModel::update_map_t update;
+	bool start_new_message = true;
+	S32 count = batch.count();
+	S32 i;
+	for(i = 0; i < count; ++i)
+	{
+		bridge = (LLInvFVBridge*)(batch.get(i));
+		if(!bridge || !bridge->isItemRemovable()) continue;
+		item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID());
+		if(item)
+		{
+			if(item->getParentUUID() == trash_id) continue;
+			move_ids.push_back(item->getUUID());
+			LLPreview::hide(item->getUUID());
+			--update[item->getParentUUID()];
+			++update[trash_id];
+			if(start_new_message)
+			{
+				start_new_message = false;
+				msg->newMessageFast(_PREHASH_MoveInventoryItem);
+				msg->nextBlockFast(_PREHASH_AgentData);
+				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+				msg->addBOOLFast(_PREHASH_Stamp, TRUE);
+			}
+			msg->nextBlockFast(_PREHASH_InventoryData);
+			msg->addUUIDFast(_PREHASH_ItemID, item->getUUID());
+			msg->addUUIDFast(_PREHASH_FolderID, trash_id);
+			msg->addString("NewName", NULL);
+			if(msg->isSendFullFast(_PREHASH_InventoryData))
+			{
+				start_new_message = true;
+				gAgent.sendReliableMessage();
+				gInventory.accountForUpdate(update);
+				update.clear();
+			}
+		}
+	}
+	if(!start_new_message)
+	{
+		start_new_message = true;
+		gAgent.sendReliableMessage();
+		gInventory.accountForUpdate(update);
+		update.clear();
+	}
+	for(i = 0; i < count; ++i)
+	{
+		bridge = (LLInvFVBridge*)(batch.get(i));
+		if(!bridge || !bridge->isItemRemovable()) continue;
+		cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID());
+		if(cat)
+		{
+			if(cat->getParentUUID() == trash_id) continue;
+			move_ids.push_back(cat->getUUID());
+			--update[cat->getParentUUID()];
+			++update[trash_id];
+			if(start_new_message)
+			{
+				start_new_message = false;
+				msg->newMessageFast(_PREHASH_MoveInventoryFolder);
+				msg->nextBlockFast(_PREHASH_AgentData);
+				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+				msg->addBOOL("Stamp", TRUE);
+			}
+			msg->nextBlockFast(_PREHASH_InventoryData);
+			msg->addUUIDFast(_PREHASH_FolderID, cat->getUUID());
+			msg->addUUIDFast(_PREHASH_ParentID, trash_id);
+			if(msg->isSendFullFast(_PREHASH_InventoryData))
+			{
+				start_new_message = true;
+				gAgent.sendReliableMessage();
+				gInventory.accountForUpdate(update);
+				update.clear();
+			}
+		}
+	}
+	if(!start_new_message)
+	{
+		gAgent.sendReliableMessage();
+		gInventory.accountForUpdate(update);
+	}
+
+	// move everything.
+	std::vector<LLUUID>::iterator it = move_ids.begin();
+	std::vector<LLUUID>::iterator end = move_ids.end();
+	for(; it != end; ++it)
+	{
+		gInventory.moveObject((*it), trash_id);
+	}
+
+	// notify inventory observers.
+	model->notifyObservers();
+}
+
+BOOL LLInvFVBridge::isClipboardPasteable() const
+{
+	if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory())
+	{
+		return FALSE;
+	}
+	LLInventoryModel* model = getInventoryModel();
+	if (!model)
+	{
+		return FALSE;
+	}
+
+	const LLUUID &agent_id = gAgent.getID();
+
+	LLDynamicArray<LLUUID> objects;
+	LLInventoryClipboard::instance().retrieve(objects);
+	S32 count = objects.count();
+	for(S32 i = 0; i < count; i++)
+	{
+		const LLUUID &item_id = objects.get(i);
+
+		// Can't paste folders
+		const LLInventoryCategory *cat = model->getCategory(item_id);
+		if (cat)
+		{
+			return FALSE;
+		}
+
+		const LLInventoryItem *item = model->getItem(item_id);
+		if (item)
+		{
+			if (!item->getPermissions().allowCopyBy(agent_id))
+			{
+				return FALSE;
+			}
+		}
+	}
+	return TRUE;
+}
+
+BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
+{
+	if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory())
+	{
+		return FALSE;
+	}
+	const LLInventoryModel* model = getInventoryModel();
+	if (!model)
+	{
+		return FALSE;
+	}
+
+	LLDynamicArray<LLUUID> objects;
+	LLInventoryClipboard::instance().retrieve(objects);
+	S32 count = objects.count();
+	for(S32 i = 0; i < count; i++)
+	{
+		const LLInventoryItem *item = model->getItem(objects.get(i));
+		if (item)
+		{
+			if (!LLAssetType::lookupCanLink(item->getActualType()))
+			{
+				return FALSE;
+			}
+		}
+		const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i));
+		if (cat && !LLAssetType::lookupCanLink(cat->getPreferredType()))
+		{
+			return FALSE;
+		}
+	}
+	return TRUE;
+}
+
+void hide_context_entries(LLMenuGL& menu, 
+						const std::vector<std::string> &entries_to_show,
+						const std::vector<std::string> &disabled_entries)
+{
+	const LLView::child_list_t *list = menu.getChildList();
+
+	LLView::child_list_t::const_iterator itor;
+	for (itor = list->begin(); itor != list->end(); ++itor)
+	{
+		std::string name = (*itor)->getName();
+
+		// descend into split menus:
+		LLMenuItemBranchGL* branchp = dynamic_cast<LLMenuItemBranchGL*>(*itor);
+		if ((name == "More") && branchp)
+		{
+			hide_context_entries(*branchp->getBranch(), entries_to_show, disabled_entries);
+		}
+		
+		
+		bool found = false;
+		std::vector<std::string>::const_iterator itor2;
+		for (itor2 = entries_to_show.begin(); itor2 != entries_to_show.end(); ++itor2)
+		{
+			if (*itor2 == name)
+			{
+				found = true;
+			}
+		}
+		if (!found)
+		{
+			(*itor)->setVisible(FALSE);
+		}
+		else
+		{
+			for (itor2 = disabled_entries.begin(); itor2 != disabled_entries.end(); ++itor2)
+			{
+				if (*itor2 == name)
+				{
+					(*itor)->setEnabled(FALSE);
+				}
+			}
+		}
+	}
+}
+
+// Helper for commonly-used entries
+void LLInvFVBridge::getClipboardEntries(bool show_asset_id, 
+										std::vector<std::string> &items, 
+										std::vector<std::string> &disabled_items, U32 flags)
+{
+	items.push_back(std::string("Rename"));
+	if (!isItemRenameable() || (flags & FIRST_SELECTED_ITEM) == 0)
+	{
+		disabled_items.push_back(std::string("Rename"));
+	}
+
+	if (show_asset_id)
+	{
+		items.push_back(std::string("Copy Asset UUID"));
+		if ( (! ( isItemPermissive() || gAgent.isGodlike() ) ) 
+			  || (flags & FIRST_SELECTED_ITEM) == 0)
+		{
+			disabled_items.push_back(std::string("Copy Asset UUID"));
+		}
+	}
+
+	items.push_back(std::string("Copy Separator"));
+
+	items.push_back(std::string("Copy"));
+	if (!isItemCopyable())
+	{
+		disabled_items.push_back(std::string("Copy"));
+	}
+
+	items.push_back(std::string("Paste"));
+	if (!isClipboardPasteable() || (flags & FIRST_SELECTED_ITEM) == 0)
+	{
+		disabled_items.push_back(std::string("Paste"));
+	}
+
+	items.push_back(std::string("Paste As Link"));
+	if (!isClipboardPasteableAsLink() || (flags & FIRST_SELECTED_ITEM) == 0)
+	{
+		disabled_items.push_back(std::string("Paste As Link"));
+	}
+	items.push_back(std::string("Paste Separator"));
+
+	items.push_back(std::string("Delete"));
+	if (!isItemRemovable())
+	{
+		disabled_items.push_back(std::string("Delete"));
+	}
+}
+
+void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	lldebugs << "LLInvFVBridge::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	if(isInTrash())
+	{
+		items.push_back(std::string("PurgeItem"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("PurgeItem"));
+		}
+		items.push_back(std::string("RestoreItem"));
+	}
+	else
+	{
+		items.push_back(std::string("Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+// *TODO: remove this
+BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
+{
+	BOOL rv = FALSE;
+
+	const LLInventoryObject* obj = getInventoryObject();
+
+	if(obj)
+	{
+		*type = LLAssetType::lookupDragAndDropType(obj->getActualType());
+		if(*type == DAD_NONE)
+		{
+			return FALSE;
+		}
+		
+		*id = obj->getUUID();
+		//object_ids.put(obj->getUUID());
+
+		if (*type == DAD_CATEGORY)
+		{
+			gInventory.startBackgroundFetch(obj->getUUID());
+		}
+
+		rv = TRUE;
+	}
+
+	return rv;
+}
+
+LLInventoryObject* LLInvFVBridge::getInventoryObject() const
+{
+	LLInventoryObject* obj = NULL;
+	LLInventoryModel* model = getInventoryModel();
+	if(model)
+	{
+		obj = (LLInventoryObject*)model->getObject(mUUID);
+	}
+	return obj;
+}
+
+LLInventoryModel* LLInvFVBridge::getInventoryModel() const
+{
+	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
+	return panel ? panel->getModel() : NULL;
+}
+
+BOOL LLInvFVBridge::isInTrash() const
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	return model->isObjectDescendentOf(mUUID, trash_id);
+}
+
+BOOL LLInvFVBridge::isLinkedObjectInTrash() const
+{
+	if (isInTrash()) return TRUE;
+
+	const LLInventoryObject *obj = getInventoryObject();
+	if (obj && obj->getIsLinkType())
+	{
+		LLInventoryModel* model = getInventoryModel();
+		if(!model) return FALSE;
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		return model->isObjectDescendentOf(obj->getLinkedUUID(), trash_id);
+	}
+	return FALSE;
+}
+
+BOOL LLInvFVBridge::isAgentInventory() const
+{
+	const LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+	if(gInventory.getRootFolderID() == mUUID) return TRUE;
+	return model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID());
+}
+
+BOOL LLInvFVBridge::isCOFFolder() const
+{
+	const LLInventoryModel* model = getInventoryModel();
+	if(!model) return TRUE;
+	const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+	if (mUUID == cof_id || model->isObjectDescendentOf(mUUID, cof_id))
+	{
+		return TRUE;
+	}
+	return FALSE;
+}
+
+BOOL LLInvFVBridge::isItemPermissive() const
+{
+	return FALSE;
+}
+
+// static
+void LLInvFVBridge::changeItemParent(LLInventoryModel* model,
+									 LLViewerInventoryItem* item,
+									 const LLUUID& new_parent,
+									 BOOL restamp)
+{
+	if(item->getParentUUID() != new_parent)
+	{
+		LLInventoryModel::update_list_t update;
+		LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
+		update.push_back(old_folder);
+		LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1);
+		update.push_back(new_folder);
+		gInventory.accountForUpdate(update);
+
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+		new_item->setParent(new_parent);
+		new_item->updateParentOnServer(restamp);
+		model->updateItem(new_item);
+		model->notifyObservers();
+	}
+}
+
+// static
+void LLInvFVBridge::changeCategoryParent(LLInventoryModel* model,
+										 LLViewerInventoryCategory* cat,
+										 const LLUUID& new_parent,
+										 BOOL restamp)
+{
+	if(cat->getParentUUID() != new_parent)
+	{
+		LLInventoryModel::update_list_t update;
+		LLInventoryModel::LLCategoryUpdate old_folder(cat->getParentUUID(), -1);
+		update.push_back(old_folder);
+		LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1);
+		update.push_back(new_folder);
+		gInventory.accountForUpdate(update);
+
+		LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat);
+		new_cat->setParent(new_parent);
+		new_cat->updateParentOnServer(restamp);
+		model->updateCategory(new_cat);
+		model->notifyObservers();
+	}
+}
+
+
+const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type)
+{
+	const std::string rv= LLInventoryType::lookup(inv_type);
+	if(rv.empty())
+	{
+		return std::string("<invalid>");
+	}
+	return rv;
+}
+
+LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,
+										   LLAssetType::EType actual_asset_type,
+										   LLInventoryType::EType inv_type,
+										   LLInventoryPanel* inventory,
+										   const LLUUID& uuid,
+										   U32 flags)
+{
+	LLInvFVBridge* new_listener = NULL;
+	switch(asset_type)
+	{
+		case LLAssetType::AT_TEXTURE:
+			if(!(inv_type == LLInventoryType::IT_TEXTURE || inv_type == LLInventoryType::IT_SNAPSHOT))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLTextureBridge(inventory, uuid, inv_type);
+			break;
+
+		case LLAssetType::AT_SOUND:
+			if(!(inv_type == LLInventoryType::IT_SOUND))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLSoundBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_LANDMARK:
+			if(!(inv_type == LLInventoryType::IT_LANDMARK))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLLandmarkBridge(inventory, uuid, flags);
+			break;
+		
+		case LLAssetType::AT_CALLINGCARD:
+			if(!(inv_type == LLInventoryType::IT_CALLINGCARD))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLCallingCardBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_SCRIPT:
+			if(!(inv_type == LLInventoryType::IT_LSL))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLScriptBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_OBJECT:
+			if(!(inv_type == LLInventoryType::IT_OBJECT || inv_type == LLInventoryType::IT_ATTACHMENT))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLObjectBridge(inventory, uuid, inv_type, flags);
+			break;
+
+		case LLAssetType::AT_NOTECARD:
+			if(!(inv_type == LLInventoryType::IT_NOTECARD))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLNotecardBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_ANIMATION:
+			if(!(inv_type == LLInventoryType::IT_ANIMATION))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLAnimationBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_GESTURE:
+			if(!(inv_type == LLInventoryType::IT_GESTURE))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLGestureBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_LSL_TEXT:
+			if(!(inv_type == LLInventoryType::IT_LSL))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLLSLTextBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_CLOTHING:
+		case LLAssetType::AT_BODYPART:
+			if(!(inv_type == LLInventoryType::IT_WEARABLE))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLWearableBridge(inventory, uuid, asset_type, inv_type, (EWearableType)flags);
+			break;
+		case LLAssetType::AT_CATEGORY:
+		case LLAssetType::AT_ROOT_CATEGORY:
+			if (actual_asset_type == LLAssetType::AT_LINK_FOLDER)
+			{
+				// Create a link folder handler instead.
+				new_listener = new LLLinkFolderBridge(inventory, uuid);
+				break;
+			}
+			new_listener = new LLFolderBridge(inventory, uuid);
+			break;
+		case LLAssetType::AT_LINK:
+			// Only should happen for broken links.
+			new_listener = new LLLinkItemBridge(inventory, uuid);
+			break;
+		case LLAssetType::AT_LINK_FOLDER:
+			// Only should happen for broken links.
+			new_listener = new LLLinkItemBridge(inventory, uuid);
+			break;
+		default:
+			llinfos << "Unhandled asset type (llassetstorage.h): "
+					<< (S32)asset_type << llendl;
+			break;
+	}
+
+	if (new_listener)
+	{
+		new_listener->mInvType = inv_type;
+	}
+
+	return new_listener;
+}
+
+void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid)
+{
+	LLInventoryCategory* cat = model->getCategory(uuid);
+	if (cat)
+	{
+		model->purgeDescendentsOf(uuid);
+		model->notifyObservers();
+	}
+	LLInventoryObject* obj = model->getObject(uuid);
+	if (obj)
+	{
+		model->purgeObject(uuid);
+		model->notifyObservers();
+	}
+}
+
+// +=================================================+
+// |        InventoryFVBridgeBuilder                 |
+// +=================================================+
+LLInvFVBridge* LLInventoryFVBridgeBuilder::createBridge(LLAssetType::EType asset_type,
+														LLAssetType::EType actual_asset_type,
+														LLInventoryType::EType inv_type,
+														LLInventoryPanel* inventory,
+														const LLUUID& uuid,
+														U32 flags /* = 0x00 */) const
+{
+	return LLInvFVBridge::createBridge(asset_type,
+		actual_asset_type,
+		inv_type,
+		inventory,
+		uuid,
+		flags);
+}
+
+// +=================================================+
+// |        LLItemBridge                             |
+// +=================================================+
+
+void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("goto" == action)
+	{
+		gotoItem(folder);
+	}
+	if ("open" == action)
+	{
+		openItem();
+		return;
+	}
+	else if ("properties" == action)
+	{
+		showProperties();
+		return;
+	}
+	else if ("purge" == action)
+	{
+		purgeItem(model, mUUID);
+		return;
+	}
+	else if ("restoreToWorld" == action)
+	{
+		restoreToWorld();
+		return;
+	}
+	else if ("restore" == action)
+	{
+		restoreItem();
+		return;
+	}
+	else if ("copy_uuid" == action)
+	{
+		// Single item only
+		LLInventoryItem* item = model->getItem(mUUID);
+		if(!item) return;
+		LLUUID asset_id = item->getAssetUUID();
+		std::string buffer;
+		asset_id.toString(buffer);
+
+		gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(buffer));
+		return;
+	}
+	else if ("copy" == action)
+	{
+		copyToClipboard();
+		return;
+	}
+	else if ("paste" == action)
+	{
+		// Single item only
+		LLInventoryItem* itemp = model->getItem(mUUID);
+		if (!itemp) return;
+
+		LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID());
+		if (!folder_view_itemp) return;
+
+		folder_view_itemp->getListener()->pasteFromClipboard();
+		return;
+	}
+	else if ("paste_link" == action)
+	{
+		// Single item only
+		LLInventoryItem* itemp = model->getItem(mUUID);
+		if (!itemp) return;
+
+		LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID());
+		if (!folder_view_itemp) return;
+
+		folder_view_itemp->getListener()->pasteLinkFromClipboard();
+		return;
+	}
+}
+
+void LLItemBridge::selectItem()
+{
+	LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem();
+	if(item && !item->isComplete())
+	{
+		item->fetchFromServer();
+	}
+}
+
+void LLItemBridge::restoreItem()
+{
+	LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem();
+	if(item)
+	{
+		LLInventoryModel* model = getInventoryModel();
+		const LLUUID new_parent = model->findCategoryUUIDForType(item->getType());
+		// do not restamp on restore.
+		LLInvFVBridge::changeItemParent(model, item, new_parent, FALSE);
+	}
+}
+
+void LLItemBridge::restoreToWorld()
+{
+	LLViewerInventoryItem* itemp = (LLViewerInventoryItem*)getItem();
+	if (itemp)
+	{
+		LLMessageSystem* msg = gMessageSystem;
+		msg->newMessage("RezRestoreToWorld");
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+
+		msg->nextBlockFast(_PREHASH_InventoryData);
+		itemp->packMessage(msg);
+		msg->sendReliable(gAgent.getRegion()->getHost());
+	}
+
+	//Similar functionality to the drag and drop rez logic
+	BOOL remove_from_inventory = FALSE;
+
+	//remove local inventory copy, sim will deal with permissions and removing the item
+	//from the actual inventory if its a no-copy etc
+	if(!itemp->getPermissions().allowCopyBy(gAgent.getID()))
+	{
+		remove_from_inventory = TRUE;
+	}
+
+	// Check if it's in the trash. (again similar to the normal rez logic)
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id))
+	{
+		remove_from_inventory = TRUE;
+	}
+
+	if(remove_from_inventory)
+	{
+		gInventory.deleteObject(itemp->getUUID());
+		gInventory.notifyObservers();
+	}
+}
+
+void LLItemBridge::gotoItem(LLFolderView *folder)
+{
+	LLInventoryObject *obj = getInventoryObject();
+	if (obj && obj->getIsLinkType())
+	{
+		LLInventoryPanel* active_panel = LLFloaterInventory::getActiveInventory()->getPanel();
+		if (active_panel)
+		{
+			active_panel->setSelection(obj->getLinkedUUID(), TAKE_FOCUS_NO);
+		}
+	}
+}
+
+LLUIImagePtr LLItemBridge::getIcon() const
+{
+	return LLUI::getUIImage(ICON_NAME[OBJECT_ICON_NAME]);
+}
+
+PermissionMask LLItemBridge::getPermissionMask() const
+{
+	LLViewerInventoryItem* item = getItem();
+	PermissionMask perm_mask = 0;
+	if(item) 
+	{
+		BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
+		BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID());
+		BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER,
+															gAgent.getID());
+
+		if (copy) perm_mask |= PERM_COPY;
+		if (mod)  perm_mask |= PERM_MODIFY;
+		if (xfer) perm_mask |= PERM_TRANSFER;
+
+	}
+	return perm_mask;
+}
+
+const std::string& LLItemBridge::getDisplayName() const
+{
+	if(mDisplayName.empty())
+	{
+		buildDisplayName(getItem(), mDisplayName);
+	}
+	return mDisplayName;
+}
+
+void LLItemBridge::buildDisplayName(LLInventoryItem* item, std::string& name)
+{
+	if(item) 
+	{
+		name.assign(item->getName());			
+	}
+	else
+	{
+		name.assign(LLStringUtil::null);
+	}
+}
+
+LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const
+{ 
+	U8 font = LLFontGL::NORMAL;
+	
+	if( gAgentWearables.isWearingItem( mUUID ) )
+	{
+		// llinfos << "BOLD" << llendl;
+		font |= LLFontGL::BOLD;
+	}
+
+	const LLViewerInventoryItem* item = getItem();
+	if (item && item->getIsLinkType())
+	{
+		font |= LLFontGL::ITALIC;
+	}
+	return (LLFontGL::StyleFlags)font;
+}
+
+std::string LLItemBridge::getLabelSuffix() const
+{
+	// String table is loaded before login screen and inventory items are
+	// loaded after login, so LLTrans should be ready.
+	static std::string NO_COPY =LLTrans::getString("no_copy");
+	static std::string NO_MOD = LLTrans::getString("no_modify");
+	static std::string NO_XFER = LLTrans::getString("no_transfer");
+	static std::string LINK = LLTrans::getString("link");
+	static std::string BROKEN_LINK = LLTrans::getString("broken_link");
+	std::string suffix;
+	LLInventoryItem* item = getItem();
+	if(item) 
+	{
+		// it's a bit confusing to put nocopy/nomod/etc on calling cards.
+		if(LLAssetType::AT_CALLINGCARD != item->getType()
+		   && item->getPermissions().getOwner() == gAgent.getID())
+		{
+			BOOL broken_link = LLAssetType::lookupIsLinkType(item->getType());
+			if (broken_link) return BROKEN_LINK;
+
+			BOOL link = item->getIsLinkType();
+			if (link) return LINK;
+
+			BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
+			if (!copy)
+			{
+				suffix += NO_COPY;
+			}
+			BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID());
+			if (!mod)
+			{
+				suffix += NO_MOD;
+			}
+			BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER,
+																gAgent.getID());
+			if (!xfer)
+			{
+				suffix += NO_XFER;
+			}
+		}
+	}
+	return suffix;
+}
+
+time_t LLItemBridge::getCreationDate() const
+{
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		return item->getCreationDate();
+	}
+	return 0;
+}
+
+
+BOOL LLItemBridge::isItemRenameable() const
+{
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		// (For now) Don't allow calling card rename since that may confuse users as to
+		// what the calling card points to.
+		if (item->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
+		{
+			return FALSE;
+		}
+		return (item->getPermissions().allowModifyBy(gAgent.getID()));
+	}
+	return FALSE;
+}
+
+BOOL LLItemBridge::renameItem(const std::string& new_name)
+{
+	if(!isItemRenameable())
+		return FALSE;
+	LLPreview::dirty(mUUID);
+	LLInventoryModel* model = getInventoryModel();
+	if(!model)
+		return FALSE;
+	LLViewerInventoryItem* item = getItem();
+	if(item && (item->getName() != new_name))
+	{
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+		new_item->rename(new_name);
+		buildDisplayName(new_item, mDisplayName);
+		new_item->updateServer(FALSE);
+		model->updateItem(new_item);
+
+		model->notifyObservers();
+	}
+	// return FALSE because we either notified observers (& therefore
+	// rebuilt) or we didn't update.
+	return FALSE;
+}
+
+
+BOOL LLItemBridge::removeItem()
+{
+	if(!isItemRemovable())
+	{
+		return FALSE;
+	}
+	// move it to the trash
+	LLPreview::hide(mUUID, TRUE);
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	LLViewerInventoryItem* item = getItem();
+
+	// if item is not already in trash
+	if(item && !model->isObjectDescendentOf(mUUID, trash_id))
+	{
+		// move to trash, and restamp
+		LLInvFVBridge::changeItemParent(model, item, trash_id, TRUE);
+		// delete was successful
+		return TRUE;
+	}
+	else
+	{
+		// tried to delete already item in trash (should purge?)
+		return FALSE;
+	}
+}
+
+BOOL LLItemBridge::isItemCopyable() const
+{
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		// can't copy worn objects. DEV-15183
+		LLVOAvatarSelf *avatarp = gAgent.getAvatarObject();
+		if( !avatarp )
+		{
+			return FALSE;
+		}
+
+		if(avatarp->isWearingAttachment(mUUID))
+		{
+			return FALSE;
+		}
+		
+		// All items can be copied, not all can be pasted.
+		// The only time an item can't be copied is if it's a link 
+		// return (item->getPermissions().allowCopyBy(gAgent.getID()));
+		if (item->getIsLinkType())
+		{
+			return FALSE;
+		}
+		return TRUE;
+	}
+	return FALSE;
+}
+BOOL LLItemBridge::copyToClipboard() const
+{
+	if(isItemCopyable())
+	{
+		LLInventoryClipboard::instance().add(mUUID);
+		return TRUE;
+	}
+	return FALSE;
+}
+
+LLViewerInventoryItem* LLItemBridge::getItem() const
+{
+	LLViewerInventoryItem* item = NULL;
+	LLInventoryModel* model = getInventoryModel();
+	if(model)
+	{
+		item = (LLViewerInventoryItem*)model->getItem(mUUID);
+	}
+	return item;
+}
+
+BOOL LLItemBridge::isItemPermissive() const
+{
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		U32 mask = item->getPermissions().getMaskBase();
+		if((mask & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED)
+		{
+			return TRUE;
+		}
+	}
+	return FALSE;
+}
+
+// +=================================================+
+// |        LLFolderBridge                           |
+// +=================================================+
+
+LLFolderBridge* LLFolderBridge::sSelf=NULL;
+
+// Can be moved to another folder
+BOOL LLFolderBridge::isItemMovable() const 
+{
+	LLInventoryObject* obj = getInventoryObject();
+	if(obj)
+	{
+		return (!LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)obj)->getPreferredType()));
+	}
+	return FALSE;
+}
+
+void LLFolderBridge::selectItem()
+{
+}
+
+
+// Can be destroyed (or moved to trash)
+BOOL LLFolderBridge::isItemRemovable()
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) 
+	{
+		return FALSE;
+	}
+
+	if(!model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID()))
+	{
+		return FALSE;
+	}
+
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if( !avatar )
+	{
+		return FALSE;
+	}
+
+	LLInventoryCategory* category = model->getCategory(mUUID);
+	if( !category )
+	{
+		return FALSE;
+	}
+
+	if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+	{
+		return FALSE;
+	}
+
+	LLInventoryModel::cat_array_t	descendent_categories;
+	LLInventoryModel::item_array_t	descendent_items;
+	gInventory.collectDescendents( mUUID, descendent_categories, descendent_items, FALSE );
+
+	S32 i;
+	for( i = 0; i < descendent_categories.count(); i++ )
+	{
+		LLInventoryCategory* category = descendent_categories[i];
+		if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+		{
+			return FALSE;
+		}
+	}
+
+	for( i = 0; i < descendent_items.count(); i++ )
+	{
+		LLInventoryItem* item = descendent_items[i];
+		if( (item->getType() == LLAssetType::AT_CLOTHING) ||
+			(item->getType() == LLAssetType::AT_BODYPART) )
+		{
+			if(gAgentWearables.isWearingItem(item->getUUID()))
+			{
+				return FALSE;
+			}
+		}
+		else
+		if( item->getType() == LLAssetType::AT_OBJECT )
+		{
+			if(avatar->isWearingAttachment(item->getUUID()))
+			{
+				return FALSE;
+			}
+		}
+	}
+
+	return TRUE;
+}
+
+BOOL LLFolderBridge::isUpToDate() const
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+	LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID);
+	if( !category )
+	{
+		return FALSE;
+	}
+
+	return category->getVersion() != LLViewerInventoryCategory::VERSION_UNKNOWN;
+}
+
+BOOL LLFolderBridge::isItemCopyable() const
+{
+	return TRUE;
+}
+
+BOOL LLFolderBridge::copyToClipboard() const
+{
+	if(isItemCopyable())
+	{
+		LLInventoryClipboard::instance().add(mUUID);
+		return TRUE;
+	}
+	return FALSE;
+}
+
+BOOL LLFolderBridge::isClipboardPasteable() const
+{
+	if ( ! LLInvFVBridge::isClipboardPasteable() )
+		return FALSE;
+
+	// Don't allow pasting duplicates to the Calling Card/Friends subfolders, see bug EXT-1599
+	if ( LLFriendCardsManager::instance().isCategoryInFriendFolder( getCategory() ) )
+	{
+		LLInventoryModel* model = getInventoryModel();
+		if ( !model )
+		{
+			return FALSE;
+		}
+
+		LLDynamicArray<LLUUID> objects;
+		LLInventoryClipboard::instance().retrieve(objects);
+		const LLViewerInventoryCategory *current_cat = getCategory();
+
+		// Search for the direct descendent of current Friends subfolder among all pasted items, 
+		// and return false if is found.
+		for(S32 i = objects.count() - 1; i >= 0; --i)
+		{
+			const LLUUID &obj_id = objects.get(i);
+			if ( LLFriendCardsManager::instance().isObjDirectDescendentOfCategory(model->getObject(obj_id), current_cat) )
+			{
+				return FALSE;
+			}
+		}
+
+	}
+	return TRUE;
+}
+
+BOOL LLFolderBridge::isClipboardPasteableAsLink() const
+{
+	// Check normal paste-as-link permissions
+	if (!LLInvFVBridge::isClipboardPasteableAsLink())
+	{
+		return FALSE;
+	}
+	
+	const LLInventoryModel* model = getInventoryModel();
+	if (!model)
+	{
+		return FALSE;
+	}
+
+	const LLViewerInventoryCategory *current_cat = getCategory();
+	if (current_cat)
+	{
+		const BOOL is_in_friend_folder = LLFriendCardsManager::instance().isCategoryInFriendFolder( current_cat );
+		const LLUUID &current_cat_id = current_cat->getUUID();
+		LLDynamicArray<LLUUID> objects;
+		LLInventoryClipboard::instance().retrieve(objects);
+		S32 count = objects.count();
+		for(S32 i = 0; i < count; i++)
+		{
+			const LLUUID &obj_id = objects.get(i);
+			const LLInventoryCategory *cat = model->getCategory(obj_id);
+			if (cat)
+			{
+				const LLUUID &cat_id = cat->getUUID();
+				// Don't allow recursive pasting
+				if ((cat_id == current_cat_id) || 
+					model->isObjectDescendentOf(current_cat_id, cat_id))
+				{
+					return FALSE;
+				}
+			}
+			// Don't allow pasting duplicates to the Calling Card/Friends subfolders, see bug EXT-1599
+			if ( is_in_friend_folder )
+			{
+				// If object is direct descendent of current Friends subfolder than return false.
+				// Note: We can't use 'const LLInventoryCategory *cat', because it may be null
+				// in case type of obj_id is LLInventoryItem.
+				if ( LLFriendCardsManager::instance().isObjDirectDescendentOfCategory(model->getObject(obj_id), current_cat) )
+				{
+					return FALSE;
+				}
+			}
+		}
+	}
+	return TRUE;
+
+}
+
+BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
+											BOOL drop)
+{
+	// This should never happen, but if an inventory item is incorrectly parented, 
+	// the UI will get confused and pass in a NULL.
+	if(!inv_cat) return FALSE;
+
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if(!avatar) return FALSE;
+
+	// cannot drag categories into library
+	if(!isAgentInventory())
+	{
+		return FALSE;
+	}
+
+	// check to make sure source is agent inventory, and is represented there.
+	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
+	BOOL is_agent_inventory = (model->getCategory(inv_cat->getUUID()) != NULL)
+		&& (LLToolDragAndDrop::SOURCE_AGENT == source);
+
+	BOOL accept = FALSE;
+	S32 i;
+	LLInventoryModel::cat_array_t	descendent_categories;
+	LLInventoryModel::item_array_t	descendent_items;
+	if(is_agent_inventory)
+	{
+		const LLUUID& cat_id = inv_cat->getUUID();
+
+		// Is the destination the trash?
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		BOOL move_is_into_trash = (mUUID == trash_id)
+				|| model->isObjectDescendentOf(mUUID, trash_id);
+		BOOL is_movable = (!LLAssetType::lookupIsProtectedCategoryType(inv_cat->getPreferredType()));
+		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
+		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
+		if (move_is_into_current_outfit || move_is_into_outfit)
+		{
+			// BAP - restrictions?
+			is_movable = true;
+		}
+
+		if (mUUID == gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE))
+		{
+			is_movable = FALSE; // It's generally movable but not into Favorites folder. EXT-1604
+		}
+
+		if( is_movable )
+		{
+			gInventory.collectDescendents( cat_id, descendent_categories, descendent_items, FALSE );
+
+			for( i = 0; i < descendent_categories.count(); i++ )
+			{
+				LLInventoryCategory* category = descendent_categories[i];
+				if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+				{
+					// ...can't move "special folders" like Textures
+					is_movable = FALSE;
+					break;
+				}
+			}
+			
+			if( is_movable )
+			{
+				if( move_is_into_trash )
+				{
+					for( i = 0; i < descendent_items.count(); i++ )
+					{
+						LLInventoryItem* item = descendent_items[i];
+						if( (item->getType() == LLAssetType::AT_CLOTHING) ||
+							(item->getType() == LLAssetType::AT_BODYPART) )
+						{
+							if( gAgentWearables.isWearingItem( item->getUUID() ) )
+							{
+								is_movable = FALSE;  // It's generally movable, but not into the trash!
+								break;
+							}
+						}
+						else
+						if( item->getType() == LLAssetType::AT_OBJECT )
+						{
+							if( avatar->isWearingAttachment( item->getUUID() ) )
+							{
+								is_movable = FALSE;  // It's generally movable, but not into the trash!
+								break;
+							}
+						}
+					}
+				}
+			}
+		}
+
+		
+		accept =	is_movable
+					&& (mUUID != cat_id)								// Can't move a folder into itself
+					&& (mUUID != inv_cat->getParentUUID())				// Avoid moves that would change nothing
+					&& !(model->isObjectDescendentOf(mUUID, cat_id));	// Avoid circularity
+		if(accept && drop)
+		{
+			// Look for any gestures and deactivate them
+			if (move_is_into_trash)
+			{
+				for (i = 0; i < descendent_items.count(); i++)
+				{
+					LLInventoryItem* item = descendent_items[i];
+					if (item->getType() == LLAssetType::AT_GESTURE
+						&& LLGestureManager::instance().isGestureActive(item->getUUID()))
+					{
+						LLGestureManager::instance().deactivateGesture(item->getUUID());
+					}
+				}
+			}
+			// if target is an outfit or current outfit folder we use link
+			if (move_is_into_current_outfit || move_is_into_outfit) 
+			{
+#if SUPPORT_ENSEMBLES
+				// BAP - should skip if dup.
+				if (move_is_into_current_outfit)
+				{
+					LLAppearanceManager::wearEnsemble(inv_cat);
+				}
+				else
+				{
+					LLPointer<LLInventoryCallback> cb = NULL;
+					link_inventory_item(
+						gAgent.getID(),
+						inv_cat->getUUID(),
+						mUUID,
+						inv_cat->getName(),
+						LLAssetType::AT_LINK_FOLDER,
+						cb);
+				}
+#endif
+			}
+			else
+			{
+				
+				// Reparent the folder and restamp children if it's moving
+				// into trash.
+				LLInvFVBridge::changeCategoryParent(
+					model,
+					(LLViewerInventoryCategory*)inv_cat,
+					mUUID,
+					move_is_into_trash);
+			}
+		}
+	}
+	else if(LLToolDragAndDrop::SOURCE_WORLD == source)
+	{
+		// content category has same ID as object itself
+		LLUUID object_id = inv_cat->getUUID();
+		LLUUID category_id = mUUID;
+		accept = move_inv_category_world_to_agent(object_id, category_id, drop);
+	}
+	return accept;
+}
+
+void warn_move_inventory(LLViewerObject* object, LLMoveInv* move_inv)
+{
+	const char* dialog = NULL;
+	if (object->flagScripted())
+	{
+		dialog = "MoveInventoryFromScriptedObject";
+	}
+	else
+	{
+		dialog = "MoveInventoryFromObject";
+	}
+	LLNotifications::instance().add(dialog, LLSD(), LLSD(), boost::bind(move_task_inventory_callback, _1, _2, move_inv));
+}
+
+// Move/copy all inventory items from the Contents folder of an in-world
+// object to the agent's inventory, inside a given category.
+BOOL move_inv_category_world_to_agent(const LLUUID& object_id, 
+									  const LLUUID& category_id,
+									  BOOL drop,
+									  void (*callback)(S32, void*),
+									  void* user_data)
+{
+	// Make sure the object exists. If we allowed dragging from
+	// anonymous objects, it would be possible to bypass
+	// permissions.
+	// content category has same ID as object itself
+	LLViewerObject* object = gObjectList.findObject(object_id);
+	if(!object)
+	{
+		llinfos << "Object not found for drop." << llendl;
+		return FALSE;
+	}
+
+	// this folder is coming from an object, as there is only one folder in an object, the root,
+	// we need to collect the entire contents and handle them as a group
+	InventoryObjectList inventory_objects;
+	object->getInventoryContents(inventory_objects);
+
+	if (inventory_objects.empty())
+	{
+		llinfos << "Object contents not found for drop." << llendl;
+		return FALSE;
+	}
+	
+	BOOL accept = TRUE;
+	BOOL is_move = FALSE;
+
+	// coming from a task. Need to figure out if the person can
+	// move/copy this item.
+	InventoryObjectList::iterator it = inventory_objects.begin();
+	InventoryObjectList::iterator end = inventory_objects.end();
+	for ( ; it != end; ++it)
+	{
+		// coming from a task. Need to figure out if the person can
+		// move/copy this item.
+		LLPermissions perm(((LLInventoryItem*)((LLInventoryObject*)(*it)))->getPermissions());
+		if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
+			&& perm.allowTransferTo(gAgent.getID())))
+//			|| gAgent.isGodlike())
+		{
+			accept = TRUE;
+		}
+		else if(object->permYouOwner())
+		{
+			// If the object cannot be copied, but the object the
+			// inventory is owned by the agent, then the item can be
+			// moved from the task to agent inventory.
+			is_move = TRUE;
+			accept = TRUE;
+		}
+		else
+		{
+			accept = FALSE;
+			break;
+		}
+	}
+
+	if(drop && accept)
+	{
+		it = inventory_objects.begin();
+		InventoryObjectList::iterator first_it = inventory_objects.begin();
+		LLMoveInv* move_inv = new LLMoveInv;
+		move_inv->mObjectID = object_id;
+		move_inv->mCategoryID = category_id;
+		move_inv->mCallback = callback;
+		move_inv->mUserData = user_data;
+
+		for ( ; it != end; ++it)
+		{
+			two_uuids_t two(category_id, (*it)->getUUID());
+			move_inv->mMoveList.push_back(two);
+		}
+
+		if(is_move)
+		{
+			// Callback called from within here.
+			warn_move_inventory(object, move_inv);
+		}
+		else
+		{
+			LLNotification::Params params("MoveInventoryFromObject");
+			params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv));
+			LLNotifications::instance().forceResponse(params, 0);
+		}
+	}
+	return accept;
+}
+
+bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat,
+									 LLInventoryItem* item)
+{
+	// Valid COF items are:
+	// - links to wearables (body parts or clothing)
+	// - links to attachments
+	// - links to gestures
+	// - links to ensemble folders
+	LLViewerInventoryItem *linked_item = ((LLViewerInventoryItem*)item)->getLinkedItem(); // BAP - safe?
+	if (linked_item)
+	{
+		LLAssetType::EType type = linked_item->getType();
+		return (type == LLAssetType::AT_CLOTHING ||
+				type == LLAssetType::AT_BODYPART ||
+				type == LLAssetType::AT_GESTURE ||
+				type == LLAssetType::AT_OBJECT);
+	}
+	else
+	{
+		LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe?
+		// BAP remove AT_NONE support after ensembles are fully working?
+		return (linked_category && 
+				((linked_category->getPreferredType() == LLAssetType::AT_NONE) ||
+				 (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType()))));
+	}
+}
+
+
+bool LLFindWearables::operator()(LLInventoryCategory* cat,
+								 LLInventoryItem* item)
+{
+	if(item)
+	{
+		if((item->getType() == LLAssetType::AT_CLOTHING)
+		   || (item->getType() == LLAssetType::AT_BODYPART))
+		{
+			return TRUE;
+		}
+	}
+	return FALSE;
+}
+
+
+
+//Used by LLFolderBridge as callback for directory recursion.
+class LLRightClickInventoryFetchObserver : public LLInventoryFetchObserver
+{
+public:
+	LLRightClickInventoryFetchObserver() :
+		mCopyItems(false)
+	{ };
+	LLRightClickInventoryFetchObserver(const LLUUID& cat_id, bool copy_items) :
+		mCatID(cat_id),
+		mCopyItems(copy_items)
+		{ };
+	virtual void done()
+	{
+		// we've downloaded all the items, so repaint the dialog
+		LLFolderBridge::staticFolderOptionsMenu();
+
+		gInventory.removeObserver(this);
+		delete this;
+	}
+	
+
+protected:
+	LLUUID mCatID;
+	bool mCopyItems;
+
+};
+
+//Used by LLFolderBridge as callback for directory recursion.
+class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver
+{
+public:
+	LLRightClickInventoryFetchDescendentsObserver(bool copy_items) : mCopyItems(copy_items) {}
+	~LLRightClickInventoryFetchDescendentsObserver() {}
+	virtual void done();
+protected:
+	bool mCopyItems;
+};
+
+void LLRightClickInventoryFetchDescendentsObserver::done()
+{
+	// Avoid passing a NULL-ref as mCompleteFolders.front() down to
+	// gInventory.collectDescendents()
+	if( mCompleteFolders.empty() )
+	{
+		llwarns << "LLRightClickInventoryFetchDescendentsObserver::done with empty mCompleteFolders" << llendl;
+		dec_busy_count();
+		gInventory.removeObserver(this);
+		delete this;
+		return;
+	}
+
+	// What we do here is get the complete information on the items in
+	// the library, and set up an observer that will wait for that to
+	// happen.
+	LLInventoryModel::cat_array_t cat_array;
+	LLInventoryModel::item_array_t item_array;
+	gInventory.collectDescendents(mCompleteFolders.front(),
+								  cat_array,
+								  item_array,
+								  LLInventoryModel::EXCLUDE_TRASH);
+	S32 count = item_array.count();
+#if 0 // HACK/TODO: Why?
+	// This early causes a giant menu to get produced, and doesn't seem to be needed.
+	if(!count)
+	{
+		llwarns << "Nothing fetched in category " << mCompleteFolders.front()
+				<< llendl;
+		dec_busy_count();
+		gInventory.removeObserver(this);
+		delete this;
+		return;
+	}
+#endif
+
+	LLRightClickInventoryFetchObserver* outfit;
+	outfit = new LLRightClickInventoryFetchObserver(mCompleteFolders.front(), mCopyItems);
+	LLInventoryFetchObserver::item_ref_t ids;
+	for(S32 i = 0; i < count; ++i)
+	{
+		ids.push_back(item_array.get(i)->getUUID());
+	}
+
+	// clean up, and remove this as an observer since the call to the
+	// outfit could notify observers and throw us into an infinite
+	// loop.
+	dec_busy_count();
+	gInventory.removeObserver(this);
+	delete this;
+
+	// increment busy count and either tell the inventory to check &
+	// call done, or add this object to the inventory for observation.
+	inc_busy_count();
+
+	// do the fetch
+	outfit->fetchItems(ids);
+	outfit->done();				//Not interested in waiting and this will be right 99% of the time.
+//Uncomment the following code for laggy Inventory UI.
+/*	if(outfit->isEverythingComplete())
+	{
+		// everything is already here - call done.
+		outfit->done();
+	}
+	else
+	{
+		// it's all on it's way - add an observer, and the inventory
+		// will call done for us when everything is here.
+		gInventory.addObserver(outfit);
+	}*/
+}
+
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLInventoryWearObserver
+//
+// Observer for "copy and wear" operation to support knowing 
+// when the all of the contents have been added to inventory.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLInventoryCopyAndWearObserver : public LLInventoryObserver
+{
+public:
+	LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) :mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {}
+	virtual ~LLInventoryCopyAndWearObserver() {}
+	virtual void changed(U32 mask);
+
+protected:
+	LLUUID mCatID;
+	int    mContentsCount;
+	BOOL   mFolderAdded;
+};
+
+
+
+void LLInventoryCopyAndWearObserver::changed(U32 mask)
+{
+	if((mask & (LLInventoryObserver::ADD)) != 0)
+	{
+		if (!mFolderAdded) 
+		{
+			const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
+
+			std::set<LLUUID>::const_iterator id_it = changed_items.begin();
+			std::set<LLUUID>::const_iterator id_end = changed_items.end();
+			for (;id_it != id_end; ++id_it)
+			{
+				if ((*id_it) == mCatID) 
+				{
+					mFolderAdded = TRUE;
+					break;
+				}
+			}
+		}
+
+		if (mFolderAdded) 
+		{
+			LLViewerInventoryCategory* category = gInventory.getCategory(mCatID);
+
+			if (NULL == category)
+			{
+				llwarns << "gInventory.getCategory(" << mCatID
+					<< ") was NULL" << llendl;
+			}
+			else
+			{
+				if (category->getDescendentCount() ==
+				    mContentsCount)
+				{
+					gInventory.removeObserver(this);
+					LLAppearanceManager::wearInventoryCategory(category, FALSE, TRUE);
+					delete this;
+				}
+			}		
+		}
+
+	}
+}
+
+
+
+void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("open" == action)
+	{
+		openItem();
+		return;
+	}
+	else if ("paste" == action)
+	{
+		pasteFromClipboard();
+		return;
+	}
+	else if ("paste_link" == action)
+	{
+		pasteLinkFromClipboard();
+		return;
+	}
+	else if ("properties" == action)
+	{
+		showProperties();
+		return;
+	}
+	else if ("replaceoutfit" == action)
+	{
+		modifyOutfit(FALSE);
+		return;
+	}
+#if SUPPORT_ENSEMBLES
+	else if ("wearasensemble" == action)
+	{
+		LLInventoryModel* model = getInventoryModel();
+		if(!model) return;
+		LLViewerInventoryCategory* cat = getCategory();
+		if(!cat) return;
+		LLAppearanceManager::wearEnsemble(cat,true);
+		return;
+	}
+#endif
+	else if ("addtooutfit" == action)
+	{
+		modifyOutfit(TRUE);
+		return;
+	}
+	else if ("copy" == action)
+	{
+		copyToClipboard();
+		return;
+	}
+	else if ("removefromoutfit" == action)
+	{
+		LLInventoryModel* model = getInventoryModel();
+		if(!model) return;
+		LLViewerInventoryCategory* cat = getCategory();
+		if(!cat) return;
+		
+		remove_inventory_category_from_avatar ( cat );
+		return;
+	}	
+	else if ("purge" == action)
+	{		
+		purgeItem(model, mUUID);
+		return;
+	}
+	else if ("restore" == action)
+	{
+		restoreItem();
+		return;
+	}
+}
+
+void LLFolderBridge::openItem()
+{
+	lldebugs << "LLFolderBridge::openItem()" << llendl;
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return;
+	bool fetching_inventory = model->fetchDescendentsOf(mUUID);
+	// Only change folder type if we have the folder contents.
+	if (!fetching_inventory)
+	{
+		// Disabling this for now, it's causing crash when new items are added to folders
+		// since folder type may change before new item item has finished processing.
+		// determineFolderType();
+	}
+}
+
+void LLFolderBridge::closeItem()
+{
+	determineFolderType();
+}
+
+void LLFolderBridge::determineFolderType()
+{
+	if (isUpToDate())
+	{
+		LLInventoryModel* model = getInventoryModel();
+		LLViewerInventoryCategory* category = model->getCategory(mUUID);
+		category->determineFolderType();
+	}
+}
+
+BOOL LLFolderBridge::isItemRenameable() const
+{
+	LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)getCategory();
+	if(cat && !LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())
+	   && (cat->getOwnerID() == gAgent.getID()))
+	{
+		return TRUE;
+	}
+	return FALSE;
+}
+
+void LLFolderBridge::restoreItem()
+{
+	LLViewerInventoryCategory* cat;
+	cat = (LLViewerInventoryCategory*)getCategory();
+	if(cat)
+	{
+		LLInventoryModel* model = getInventoryModel();
+		LLUUID new_parent = model->findCategoryUUIDForType(cat->getType());
+		// do not restamp children on restore
+		LLInvFVBridge::changeCategoryParent(model, cat, new_parent, FALSE);
+	}
+}
+
+LLAssetType::EType LLFolderBridge::getPreferredType() const
+{
+	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLViewerInventoryCategory* cat = getCategory();
+	if(cat)
+	{
+		preferred_type = cat->getPreferredType();
+	}
+
+	return preferred_type;
+}
+
+// Icons for folders are based on the preferred type
+LLUIImagePtr LLFolderBridge::getIcon() const
+{
+	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLViewerInventoryCategory* cat = getCategory();
+	if(cat)
+	{
+		preferred_type = cat->getPreferredType();
+	}
+	return getIcon(preferred_type);
+}
+
+LLUIImagePtr LLFolderBridge::getIcon(LLAssetType::EType preferred_type)
+{
+	// we only have one folder image now
+	return LLUI::getUIImage("Inv_FolderClosed");
+}
+
+BOOL LLFolderBridge::renameItem(const std::string& new_name)
+{
+	if(!isItemRenameable())
+		return FALSE;
+	LLInventoryModel* model = getInventoryModel();
+	if(!model)
+		return FALSE;
+	LLViewerInventoryCategory* cat = getCategory();
+	if(cat && (cat->getName() != new_name))
+	{
+		LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat);
+		new_cat->rename(new_name);
+		new_cat->updateServer(FALSE);
+		model->updateCategory(new_cat);
+
+		model->notifyObservers();
+	}
+	// return FALSE because we either notified observers (& therefore
+	// rebuilt) or we didn't update.
+	return FALSE;
+}
+
+BOOL LLFolderBridge::removeItem()
+{
+	if(!isItemRemovable())
+	{
+		return FALSE;
+	}
+	// move it to the trash
+	LLPreview::hide(mUUID);
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+
+	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+
+	// Look for any gestures and deactivate them
+	LLInventoryModel::cat_array_t	descendent_categories;
+	LLInventoryModel::item_array_t	descendent_items;
+	gInventory.collectDescendents( mUUID, descendent_categories, descendent_items, FALSE );
+
+	S32 i;
+	for (i = 0; i < descendent_items.count(); i++)
+	{
+		LLInventoryItem* item = descendent_items[i];
+		if (item->getType() == LLAssetType::AT_GESTURE
+			&& LLGestureManager::instance().isGestureActive(item->getUUID()))
+		{
+			LLGestureManager::instance().deactivateGesture(item->getUUID());
+		}
+	}
+
+	// go ahead and do the normal remove if no 'last calling
+	// cards' are being removed.
+	LLViewerInventoryCategory* cat = getCategory();
+	if(cat)
+	{
+		LLInvFVBridge::changeCategoryParent(model, cat, trash_id, TRUE);
+	}
+
+	return TRUE;
+}
+
+void LLFolderBridge::pasteFromClipboard()
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(model && isClipboardPasteable())
+	{
+		LLInventoryItem* item = NULL;
+		LLDynamicArray<LLUUID> objects;
+		LLInventoryClipboard::instance().retrieve(objects);
+		S32 count = objects.count();
+		const LLUUID parent_id(mUUID);
+		for(S32 i = 0; i < count; i++)
+		{
+			item = model->getItem(objects.get(i));
+			if (item)
+			{
+				if(LLInventoryClipboard::instance().isCutMode())
+				{
+					// move_inventory_item() is not enough, 
+					//we have to update inventory locally too
+					changeItemParent(model, dynamic_cast<LLViewerInventoryItem*>(item), parent_id, FALSE);
+				}
+				else
+				{
+					copy_inventory_item(
+						gAgent.getID(),
+						item->getPermissions().getOwner(),
+						item->getUUID(),
+						parent_id,
+						std::string(),
+						LLPointer<LLInventoryCallback>(NULL));
+				}
+			}
+		}
+	}
+}
+
+void LLFolderBridge::pasteLinkFromClipboard()
+{
+	const LLInventoryModel* model = getInventoryModel();
+	if(model)
+	{
+		LLDynamicArray<LLUUID> objects;
+		LLInventoryClipboard::instance().retrieve(objects);
+		S32 count = objects.count();
+		LLUUID parent_id(mUUID);
+		for(S32 i = 0; i < count; i++)
+		{
+			const LLUUID &object_id = objects.get(i);
+#if SUPPORT_ENSEMBLES
+			if (LLInventoryCategory *cat = model->getCategory(object_id))
+			{
+				link_inventory_item(
+					gAgent.getID(),
+					cat->getUUID(),
+					parent_id,
+					cat->getName(),
+					LLAssetType::AT_LINK_FOLDER,
+					LLPointer<LLInventoryCallback>(NULL));
+			}
+			else
+#endif
+			if (LLInventoryItem *item = model->getItem(object_id))
+			{
+				link_inventory_item(
+					gAgent.getID(),
+					item->getUUID(),
+					parent_id,
+					item->getName(),
+					LLAssetType::AT_LINK,
+					LLPointer<LLInventoryCallback>(NULL));
+			}
+		}
+	}
+}
+
+void LLFolderBridge::staticFolderOptionsMenu()
+{
+	if (!sSelf) return;
+	sSelf->folderOptionsMenu();
+}
+
+void LLFolderBridge::folderOptionsMenu()
+{
+	std::vector<std::string> disabled_items;
+
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return;
+
+	const LLInventoryCategory* category = model->getCategory(mUUID);
+	LLAssetType::EType type = category->getPreferredType();
+	const bool is_default_folder = category && LLAssetType::lookupIsProtectedCategoryType(type);
+	// BAP change once we're no longer treating regular categories as ensembles.
+	const bool is_ensemble = category && (type == LLAssetType::AT_NONE ||
+										  LLAssetType::lookupIsEnsembleCategoryType(type));
+	
+	// calling card related functionality for folders.
+
+	// Only enable calling-card related options for non-default folders.
+	if (!is_default_folder)
+	{
+		LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
+		if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard))
+		{
+			mItems.push_back(std::string("Calling Card Separator"));
+			mItems.push_back(std::string("Conference Chat Folder"));
+			mItems.push_back(std::string("IM All Contacts In Folder"));
+		}
+	}
+	
+	// wearables related functionality for folders.
+	//is_wearable
+	LLFindWearables is_wearable;
+	LLIsType is_object( LLAssetType::AT_OBJECT );
+	LLIsType is_gesture( LLAssetType::AT_GESTURE );
+
+	if (mWearables ||
+		checkFolderForContentsOfType(model, is_wearable)  ||
+		checkFolderForContentsOfType(model, is_object) ||
+		checkFolderForContentsOfType(model, is_gesture) )
+	{
+		mItems.push_back(std::string("Folder Wearables Separator"));
+
+		// Only enable add/replace outfit for non-default folders.
+		if (!is_default_folder)
+		{
+			mItems.push_back(std::string("Add To Outfit"));
+			mItems.push_back(std::string("Replace Outfit"));
+		}
+		if (is_ensemble)
+		{
+			mItems.push_back(std::string("Wear As Ensemble"));
+		}
+		mItems.push_back(std::string("Take Off Items"));
+	}
+	hide_context_entries(*mMenu, mItems, disabled_items);
+}
+
+BOOL LLFolderBridge::checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& is_type)
+{
+	LLInventoryModel::cat_array_t cat_array;
+	LLInventoryModel::item_array_t item_array;
+	model->collectDescendentsIf(mUUID,
+								cat_array,
+								item_array,
+								LLInventoryModel::EXCLUDE_TRASH,
+								is_type);
+	return ((item_array.count() > 0) ? TRUE : FALSE );
+}
+
+// Flags unused
+void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	mItems.clear();
+	mDisabledItems.clear();
+
+	lldebugs << "LLFolderBridge::buildContextMenu()" << llendl;
+//	std::vector<std::string> disabled_items;
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return;
+	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+
+	mItems.clear(); //adding code to clear out member Items (which means Items should not have other data here at this point)
+	mDisabledItems.clear(); //adding code to clear out disabled members from previous 
+	if (lost_and_found_id == mUUID)
+	  {
+		// This is the lost+found folder.
+		  mItems.push_back(std::string("Empty Lost And Found"));
+	  }
+
+	if(trash_id == mUUID)
+	{
+		// This is the trash.
+		mItems.push_back(std::string("Empty Trash"));
+	}
+	else if(model->isObjectDescendentOf(mUUID, trash_id))
+	{
+		// This is a folder in the trash.
+		mItems.clear(); // clear any items that used to exist
+		mItems.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			mDisabledItems.push_back(std::string("Purge Item"));
+		}
+
+		mItems.push_back(std::string("Restore Item"));
+	}
+	else if(isAgentInventory()) // do not allow creating in library
+	{
+		LLViewerInventoryCategory *cat =  getCategory();
+
+		// BAP removed protected check to re-enable standard ops in untyped folders.
+		// Not sure what the right thing is to do here.
+		if (!isCOFFolder() && cat /*&&
+			LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())*/)
+		{
+			// Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694.
+			if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat))
+				mItems.push_back(std::string("New Folder"));
+			mItems.push_back(std::string("New Script"));
+			mItems.push_back(std::string("New Note"));
+			mItems.push_back(std::string("New Gesture"));
+			mItems.push_back(std::string("New Clothes"));
+			mItems.push_back(std::string("New Body Parts"));
+			mItems.push_back(std::string("Change Type"));
+			
+			LLViewerInventoryCategory *cat = getCategory();
+			if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))
+			{
+				mDisabledItems.push_back(std::string("Change Type"));
+			}
+			
+			getClipboardEntries(false, mItems, mDisabledItems, flags);
+		}
+		else
+		{
+			// Want some but not all of the items from getClipboardEntries for outfits.
+			if (cat && cat->getPreferredType()==LLAssetType::AT_OUTFIT)
+			{
+				mItems.push_back(std::string("Rename"));
+				mItems.push_back(std::string("Delete"));
+			}
+		}
+
+		//Added by spatters to force inventory pull on right-click to display folder options correctly. 07-17-06
+		mCallingCards = mWearables = FALSE;
+		
+		LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
+		if (checkFolderForContentsOfType(model, is_callingcard))
+		{
+			mCallingCards=TRUE;
+		}
+		
+		LLFindWearables is_wearable;
+		LLIsType is_object( LLAssetType::AT_OBJECT );
+		LLIsType is_gesture( LLAssetType::AT_GESTURE );
+		
+		if (checkFolderForContentsOfType(model, is_wearable)  ||
+			checkFolderForContentsOfType(model, is_object) ||
+			checkFolderForContentsOfType(model, is_gesture) )
+		{
+			mWearables=TRUE;
+		}
+		
+		mMenu = &menu;
+		sSelf = this;
+		LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(FALSE);
+
+		LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+		LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID);
+		if (category)
+		{
+			folders.push_back(category->getUUID());
+		}
+		fetch->fetchDescendents(folders);
+		inc_busy_count();
+		if(fetch->isEverythingComplete())
+		{
+			// everything is already here - call done.
+			fetch->done();
+		}
+		else
+		{
+			// it's all on it's way - add an observer, and the inventory
+			// will call done for us when everything is here.
+			gInventory.addObserver(fetch);
+		}
+	}
+	else
+	{
+		mItems.push_back(std::string("--no options--"));
+		mDisabledItems.push_back(std::string("--no options--"));
+	}
+	hide_context_entries(menu, mItems, mDisabledItems);
+}
+
+BOOL LLFolderBridge::hasChildren() const
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+	LLInventoryModel::EHasChildren has_children;
+	has_children = gInventory.categoryHasChildren(mUUID);
+	return has_children != LLInventoryModel::CHILDREN_NO;
+}
+
+BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop,
+								EDragAndDropType cargo_type,
+								void* cargo_data)
+{
+	//llinfos << "LLFolderBridge::dragOrDrop()" << llendl;
+	BOOL accept = FALSE;
+	switch(cargo_type)
+	{
+		case DAD_TEXTURE:
+		case DAD_SOUND:
+		case DAD_CALLINGCARD:
+		case DAD_LANDMARK:
+		case DAD_SCRIPT:
+		case DAD_OBJECT:
+		case DAD_NOTECARD:
+		case DAD_CLOTHING:
+		case DAD_BODYPART:
+		case DAD_ANIMATION:
+		case DAD_GESTURE:
+		case DAD_LINK:
+			accept = dragItemIntoFolder((LLInventoryItem*)cargo_data,
+										drop);
+			break;
+		case DAD_CATEGORY:
+			if (LLFriendCardsManager::instance().isAnyFriendCategory(mUUID))
+			{
+				accept = FALSE;
+			}
+			else
+			{
+				accept = dragCategoryIntoFolder((LLInventoryCategory*)cargo_data, drop);
+			}
+			break;
+		default:
+			break;
+	}
+	return accept;
+}
+
+LLViewerInventoryCategory* LLFolderBridge::getCategory() const
+{
+	LLViewerInventoryCategory* cat = NULL;
+	LLInventoryModel* model = getInventoryModel();
+	if(model)
+	{
+		cat = (LLViewerInventoryCategory*)model->getCategory(mUUID);
+	}
+	return cat;
+}
+
+
+// static
+void LLFolderBridge::pasteClipboard(void* user_data)
+{
+	LLFolderBridge* self = (LLFolderBridge*)user_data;
+	if(self) self->pasteFromClipboard();
+}
+
+void LLFolderBridge::createNewCategory(void* user_data)
+{
+	LLFolderBridge* bridge = (LLFolderBridge*)user_data;
+	if(!bridge) return;
+	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(bridge->mInventoryPanel.get());
+	if (!panel) return;
+	LLInventoryModel* model = panel->getModel();
+	if(!model) return;
+	LLUUID id;
+	id = model->createNewCategory(bridge->getUUID(),
+								  LLAssetType::AT_NONE,
+								  LLStringUtil::null);
+	model->notifyObservers();
+
+	// At this point, the bridge has probably been deleted, but the
+	// view is still there.
+	panel->setSelection(id, TAKE_FOCUS_YES);
+}
+
+void LLFolderBridge::createNewShirt(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHIRT);
+}
+
+void LLFolderBridge::createNewPants(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_PANTS);
+}
+
+void LLFolderBridge::createNewShoes(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHOES);
+}
+
+void LLFolderBridge::createNewSocks(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SOCKS);
+}
+
+void LLFolderBridge::createNewJacket(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_JACKET);
+}
+
+void LLFolderBridge::createNewSkirt(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SKIRT);
+}
+
+void LLFolderBridge::createNewGloves(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_GLOVES);
+}
+
+void LLFolderBridge::createNewUndershirt(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_UNDERSHIRT);
+}
+
+void LLFolderBridge::createNewUnderpants(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_UNDERPANTS);
+}
+
+void LLFolderBridge::createNewShape(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHAPE);
+}
+
+void LLFolderBridge::createNewSkin(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SKIN);
+}
+
+void LLFolderBridge::createNewHair(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_HAIR);
+}
+
+void LLFolderBridge::createNewEyes(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_EYES);
+}
+
+// static
+void LLFolderBridge::createWearable(LLFolderBridge* bridge, EWearableType type)
+{
+	if(!bridge) return;
+	LLUUID parent_id = bridge->getUUID();
+	createWearable(parent_id, type);
+}
+
+// Separate function so can be called by global menu as well as right-click
+// menu.
+// static
+void LLFolderBridge::createWearable(LLUUID parent_id, EWearableType type)
+{
+	LLWearable* wearable = LLWearableList::instance().createNewWearable(type);
+	LLAssetType::EType asset_type = wearable->getAssetType();
+	LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE;
+	create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
+		parent_id, wearable->getTransactionID(), wearable->getName(),
+		wearable->getDescription(), asset_type, inv_type, wearable->getType(),
+		wearable->getPermissions().getMaskNextOwner(),
+		LLPointer<LLInventoryCallback>(NULL));
+}
+
+void LLFolderBridge::modifyOutfit(BOOL append)
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return;
+	LLViewerInventoryCategory* cat = getCategory();
+	if(!cat) return;
+	
+	// BAP - was:
+	// wear_inventory_category_on_avatar( cat, append );
+	LLAppearanceManager::wearInventoryCategory( cat, FALSE, append );
+}
+
+// helper stuff
+bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv* move_inv)
+{
+	LLFloaterOpenObject::LLCatAndWear* cat_and_wear = (LLFloaterOpenObject::LLCatAndWear* )move_inv->mUserData;
+	LLViewerObject* object = gObjectList.findObject(move_inv->mObjectID);
+	S32 option = LLNotification::getSelectedOption(notification, response);
+
+	if(option == 0 && object)
+	{
+		if (cat_and_wear && cat_and_wear->mWear)
+		{
+			InventoryObjectList inventory_objects;
+			object->getInventoryContents(inventory_objects);
+			int contents_count = inventory_objects.size()-1; //subtract one for containing folder
+
+			LLInventoryCopyAndWearObserver* inventoryObserver = new LLInventoryCopyAndWearObserver(cat_and_wear->mCatID, contents_count);
+			gInventory.addObserver(inventoryObserver);
+		}
+
+		two_uuids_list_t::iterator move_it;
+		for (move_it = move_inv->mMoveList.begin(); 
+			move_it != move_inv->mMoveList.end(); 
+			++move_it)
+		{
+			object->moveInventory(move_it->first, move_it->second);
+		}
+
+		// update the UI.
+		dialog_refresh_all();
+	}
+
+	if (move_inv->mCallback)
+	{
+		move_inv->mCallback(option, move_inv->mUserData);
+	}
+
+	delete move_inv;
+	return false;
+}
+
+/*
+Next functions intended to reorder items in the inventory folder and save order on server
+Is now used for Favorites folder.
+
+*TODO: refactoring is needed with Favorites Bar functionality. Probably should be moved in LLInventoryModel
+*/
+void saveItemsOrder(LLInventoryModel::item_array_t& items)
+{
+	int sortField = 0;
+
+	// current order is saved by setting incremental values (1, 2, 3, ...) for the sort field
+	for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i)
+	{
+		LLViewerInventoryItem* item = *i;
+
+		item->setSortField(++sortField);
+		item->setComplete(TRUE);
+		item->updateServer(FALSE);
+
+		gInventory.updateItem(item);
+	}
+
+	gInventory.notifyObservers();
+}
+
+LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id)
+{
+	LLInventoryModel::item_array_t::iterator result = items.end();
+
+	for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i)
+	{
+		if ((*i)->getUUID() == id)
+		{
+			result = i;
+			break;
+		}
+	}
+
+	return result;
+}
+
+void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId)
+{
+	LLViewerInventoryItem* srcItem = gInventory.getItem(srcItemId);
+	LLViewerInventoryItem* destItem = gInventory.getItem(destItemId);
+
+	items.erase(findItemByUUID(items, srcItem->getUUID()));
+	items.insert(findItemByUUID(items, destItem->getUUID()), srcItem);
+}
+
+BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
+										BOOL drop)
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+
+	// cannot drag into library
+	if(!isAgentInventory())
+	{
+		return FALSE;
+	}
+
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if(!avatar) return FALSE;
+
+	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
+	BOOL accept = FALSE;
+	LLViewerObject* object = NULL;
+	if(LLToolDragAndDrop::SOURCE_AGENT == source)
+	{
+
+		BOOL is_movable = TRUE;
+		switch( inv_item->getActualType() )
+		{
+		case LLAssetType::AT_ROOT_CATEGORY:
+			is_movable = FALSE;
+			break;
+
+		case LLAssetType::AT_CATEGORY:
+			is_movable = !LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)inv_item)->getPreferredType());
+			break;
+		default:
+			break;
+		}
+
+		LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
+		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
+		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
+		
+		if(is_movable && move_is_into_trash)
+		{
+			switch(inv_item->getType())
+			{
+			case LLAssetType::AT_CLOTHING:
+			case LLAssetType::AT_BODYPART:
+				is_movable = !gAgentWearables.isWearingItem(inv_item->getUUID());
+				break;
+
+			case LLAssetType::AT_OBJECT:
+				is_movable = !avatar->isWearingAttachment(inv_item->getUUID());
+				break;
+			default:
+				break;
+			}
+		}
+
+		if ( is_movable )
+		{
+			// Don't allow creating duplicates in the Calling Card/Friends
+			// subfolders, see bug EXT-1599. Check is item direct descendent
+			// of target folder and forbid item's movement if it so.
+			// Note: isItemDirectDescendentOfCategory checks if
+			// passed category is in the Calling Card/Friends folder
+			is_movable = ! LLFriendCardsManager::instance()
+				.isObjDirectDescendentOfCategory (inv_item, getCategory());
+		}
+ 
+		LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+
+		// we can move item inside a folder only if this folder is Favorites. See EXT-719
+		accept = is_movable && ((mUUID != inv_item->getParentUUID()) || (mUUID == favorites_id));
+		if(accept && drop)
+		{
+			if (inv_item->getType() == LLAssetType::AT_GESTURE
+				&& LLGestureManager::instance().isGestureActive(inv_item->getUUID()) && move_is_into_trash)
+			{
+				LLGestureManager::instance().deactivateGesture(inv_item->getUUID());
+			}
+			// If an item is being dragged between windows, unselect
+			// everything in the active window so that we don't follow
+			// the selection to its new location (which is very
+			// annoying).
+			if (LLFloaterInventory::getActiveInventory())
+			{
+				LLInventoryPanel* active_panel = LLFloaterInventory::getActiveInventory()->getPanel();
+				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
+				if (active_panel && (panel != active_panel))
+				{
+					active_panel->unSelectAll();
+				}
+			}
+
+			// if dragging from/into favorites folder only reorder items
+			if ((mUUID == inv_item->getParentUUID()) && (favorites_id == mUUID))
+			{
+				LLInventoryModel::cat_array_t cats;
+				LLInventoryModel::item_array_t items;
+				LLIsType is_type(LLAssetType::AT_LANDMARK);
+				model->collectDescendentsIf(favorites_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type);
+
+				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
+				LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
+				if (itemp)
+				{
+					LLUUID srcItemId = inv_item->getUUID();
+					LLUUID destItemId = itemp->getListener()->getUUID();
+
+					// update order
+					updateItemsOrder(items, srcItemId, destItemId);
+
+					saveItemsOrder(items);
+				}
+			}
+			else if (favorites_id == mUUID) // if target is the favorites folder we use copy
+			{
+				copy_inventory_item(
+					gAgent.getID(),
+					inv_item->getPermissions().getOwner(),
+					inv_item->getUUID(),
+					mUUID,
+					std::string(),
+					LLPointer<LLInventoryCallback>(NULL));
+			}
+			else if (move_is_into_current_outfit || move_is_into_outfit)
+			{
+				// BAP - should skip if dup.
+				if (move_is_into_current_outfit)
+				{
+					LLAppearanceManager::wearItem(inv_item);
+				}
+				else
+				{
+					LLPointer<LLInventoryCallback> cb = NULL;
+					link_inventory_item(
+						gAgent.getID(),
+						inv_item->getUUID(),
+						mUUID,
+						std::string(),
+						LLAssetType::AT_LINK,
+						cb);
+				}
+			}
+			else
+			{
+				// restamp if the move is into the trash.
+				LLInvFVBridge::changeItemParent(
+					model,
+					(LLViewerInventoryItem*)inv_item,
+					mUUID,
+					move_is_into_trash);
+			}
+		}
+	}
+	else if(LLToolDragAndDrop::SOURCE_WORLD == source)
+	{
+		// Make sure the object exists. If we allowed dragging from
+		// anonymous objects, it would be possible to bypass
+		// permissions.
+		object = gObjectList.findObject(inv_item->getParentUUID());
+		if(!object)
+		{
+			llinfos << "Object not found for drop." << llendl;
+			return FALSE;
+		}
+
+		// coming from a task. Need to figure out if the person can
+		// move/copy this item.
+		LLPermissions perm(inv_item->getPermissions());
+		BOOL is_move = FALSE;
+		if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
+			&& perm.allowTransferTo(gAgent.getID())))
+//		   || gAgent.isGodlike())
+			
+		{
+			accept = TRUE;
+		}
+		else if(object->permYouOwner())
+		{
+			// If the object cannot be copied, but the object the
+			// inventory is owned by the agent, then the item can be
+			// moved from the task to agent inventory.
+			is_move = TRUE;
+			accept = TRUE;
+		}
+		if(drop && accept)
+		{
+			LLMoveInv* move_inv = new LLMoveInv;
+			move_inv->mObjectID = inv_item->getParentUUID();
+			two_uuids_t item_pair(mUUID, inv_item->getUUID());
+			move_inv->mMoveList.push_back(item_pair);
+			move_inv->mCallback = NULL;
+			move_inv->mUserData = NULL;
+			if(is_move)
+			{
+				warn_move_inventory(object, move_inv);
+			}
+			else
+			{
+				LLNotification::Params params("MoveInventoryFromObject");
+				params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv));
+				LLNotifications::instance().forceResponse(params, 0);
+			}
+		}
+		
+	}
+	else if(LLToolDragAndDrop::SOURCE_NOTECARD == source)
+	{
+		accept = TRUE;
+		if(drop)
+		{
+			copy_inventory_from_notecard(LLToolDragAndDrop::getInstance()->getObjectID(),
+				LLToolDragAndDrop::getInstance()->getSourceID(), inv_item);
+		}
+	}
+	else if(LLToolDragAndDrop::SOURCE_LIBRARY == source)
+	{
+		LLViewerInventoryItem* item = (LLViewerInventoryItem*)inv_item;
+		if(item && item->isComplete())
+		{
+			accept = TRUE;
+			if(drop)
+			{
+				copy_inventory_item(
+					gAgent.getID(),
+					inv_item->getPermissions().getOwner(),
+					inv_item->getUUID(),
+					mUUID,
+					std::string(),
+					LLPointer<LLInventoryCallback>(NULL));
+			}
+		}
+	}
+	else
+	{
+		llwarns << "unhandled drag source" << llendl;
+	}
+	return accept;
+}
+
+// +=================================================+
+// |        LLScriptBridge (DEPRECTED)               |
+// +=================================================+
+
+LLUIImagePtr LLScriptBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
+}
+
+// +=================================================+
+// |        LLTextureBridge                          |
+// +=================================================+
+
+LLUIImagePtr LLTextureBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_TEXTURE, mInvType, 0, FALSE);
+}
+	
+void LLTextureBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+	
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+}
+
+// +=================================================+
+// |        LLSoundBridge                            |
+// +=================================================+
+
+LLUIImagePtr LLSoundBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE);
+}
+
+void LLSoundBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+	
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+/*
+// Changed this back to the way it USED to work:
+// only open the preview dialog through the contextual right-click menu
+// double-click just plays the sound
+
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		openSoundPreview((void*)this);
+		//send_uuid_sound_trigger(item->getAssetUUID(), 1.0);
+	}
+*/
+}
+
+void LLSoundBridge::previewItem()
+{
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		send_sound_trigger(item->getAssetUUID(), 1.0);
+	}
+}
+
+void LLSoundBridge::openSoundPreview(void* which)
+{
+	LLSoundBridge *me = (LLSoundBridge *)which;
+	LLFloaterReg::showInstance("preview_sound", LLSD(me->mUUID), TAKE_FOCUS_YES);
+}
+
+void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	lldebugs << "LLTextureBridge::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Sound Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+	}
+
+	items.push_back(std::string("Sound Separator"));
+	items.push_back(std::string("Sound Play"));
+
+	hide_context_entries(menu, items, disabled_items);
+}
+
+// +=================================================+
+// |        LLLandmarkBridge                         |
+// +=================================================+
+
+LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags/* = 0x00*/) :
+LLItemBridge(inventory, uuid) 
+{
+	mVisited = FALSE;
+	if (flags & LLInventoryItem::II_FLAGS_LANDMARK_VISITED)
+	{
+		mVisited = TRUE;
+	}
+}
+
+LLUIImagePtr LLLandmarkBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, mVisited, FALSE);
+}
+
+void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	lldebugs << "LLLandmarkBridge::buildContextMenu()" << llendl;
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Landmark Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+	}
+
+	items.push_back(std::string("Landmark Separator"));
+	items.push_back(std::string("About Landmark"));
+
+	// Disable "About Landmark" menu item for
+	// multiple landmarks selected. Only one landmark
+	// info panel can be shown at a time.
+	if ((flags & FIRST_SELECTED_ITEM) == 0)
+	{
+		disabled_items.push_back(std::string("About Landmark"));
+	}
+
+	hide_context_entries(menu, items, disabled_items);
+}
+
+// Convenience function for the two functions below.
+void teleport_via_landmark(const LLUUID& asset_id)
+{
+	gAgent.teleportViaLandmark( asset_id );
+
+	// we now automatically track the landmark you're teleporting to
+	// because you'll probably arrive at a telehub instead
+	LLFloaterWorldMap* floater_world_map = LLFloaterWorldMap::getInstance();
+	if( floater_world_map )
+	{
+		floater_world_map->trackLandmark( asset_id );
+	}
+}
+
+// virtual
+void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("teleport" == action)
+	{
+		LLViewerInventoryItem* item = getItem();
+		if(item)
+		{
+			teleport_via_landmark(item->getAssetUUID());
+		}
+	}
+	else if ("about" == action)
+	{
+		LLViewerInventoryItem* item = getItem();
+		if(item)
+		{
+			LLSD key;
+			key["type"] = "landmark";
+			key["id"] = item->getUUID();
+
+			LLSideTray::getInstance()->showPanel("panel_places", key);
+		}
+	}
+	else 
+	{
+		LLItemBridge::performAction(folder, model, action);
+	}
+}
+
+static bool open_landmark_callback(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+
+	LLUUID asset_id = notification["payload"]["asset_id"].asUUID();
+	if (option == 0)
+	{
+		teleport_via_landmark(asset_id);
+	}
+
+	return false;
+}
+static LLNotificationFunctorRegistration open_landmark_callback_reg("TeleportFromLandmark", open_landmark_callback);
+
+
+void LLLandmarkBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+	
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+/*
+	LLViewerInventoryItem* item = getItem();
+	if( item )
+	{
+		// Opening (double-clicking) a landmark immediately teleports,
+		// but warns you the first time.
+		// open_landmark(item);
+		LLSD payload;
+		payload["asset_id"] = item->getAssetUUID();
+		LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload);
+	}
+*/
+}
+
+
+// +=================================================+
+// |        LLCallingCardObserver                    |
+// +=================================================+
+void LLCallingCardObserver::changed(U32 mask)
+{
+	mBridgep->refreshFolderViewItem();
+}
+
+// +=================================================+
+// |        LLCallingCardBridge                      |
+// +=================================================+
+
+LLCallingCardBridge::LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) :
+	LLItemBridge(inventory, uuid)
+{
+	mObserver = new LLCallingCardObserver(this);
+	LLAvatarTracker::instance().addObserver(mObserver);
+}
+
+LLCallingCardBridge::~LLCallingCardBridge()
+{
+	LLAvatarTracker::instance().removeObserver(mObserver);
+	delete mObserver;
+}
+
+void LLCallingCardBridge::refreshFolderViewItem()
+{
+	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
+	LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getItemByID(mUUID) : NULL;
+	if (itemp)
+	{
+		itemp->refresh();
+	}
+}
+
+// virtual
+void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("begin_im" == action)
+	{
+		LLViewerInventoryItem *item = getItem();
+		if (item && (item->getCreatorUUID() != gAgent.getID()) &&
+			(!item->getCreatorUUID().isNull()))
+		{
+			std::string callingcard_name;
+			gCacheName->getFullName(item->getCreatorUUID(), callingcard_name);
+			gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID());
+		}
+	}
+	else if ("lure" == action)
+	{
+		LLViewerInventoryItem *item = getItem();
+		if (item && (item->getCreatorUUID() != gAgent.getID()) &&
+			(!item->getCreatorUUID().isNull()))
+		{
+			LLAvatarActions::offerTeleport(item->getCreatorUUID());
+		}
+	}
+	else LLItemBridge::performAction(folder, model, action);
+}
+
+LLUIImagePtr LLCallingCardBridge::getIcon() const
+{
+	BOOL online = FALSE;
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		online = LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID());
+	}
+	return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, online, FALSE);
+}
+
+std::string LLCallingCardBridge::getLabelSuffix() const
+{
+	LLViewerInventoryItem* item = getItem();
+	if( item && LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID()) )
+	{
+		return LLItemBridge::getLabelSuffix() + " (online)";
+	}
+	else
+	{
+		return LLItemBridge::getLabelSuffix();
+	}
+}
+
+void LLCallingCardBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+	
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+/*
+	LLViewerInventoryItem* item = getItem();
+	if(item && !item->getCreatorUUID().isNull())
+	{
+		LLAvatarActions::showProfile(item->getCreatorUUID());
+	}
+*/
+}
+
+void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	lldebugs << "LLCallingCardBridge::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+
+		LLInventoryItem* item = getItem();
+		BOOL good_card = (item
+						  && (LLUUID::null != item->getCreatorUUID())
+						  && (item->getCreatorUUID() != gAgent.getID()));
+		BOOL user_online = (LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID()));
+		items.push_back(std::string("Send Instant Message Separator"));
+		items.push_back(std::string("Send Instant Message"));
+		items.push_back(std::string("Offer Teleport..."));
+		items.push_back(std::string("Conference Chat"));
+
+		if (!good_card)
+		{
+			disabled_items.push_back(std::string("Send Instant Message"));
+		}
+		if (!good_card || !user_online)
+		{
+			disabled_items.push_back(std::string("Offer Teleport..."));
+			disabled_items.push_back(std::string("Conference Chat"));
+		}
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop,
+									 EDragAndDropType cargo_type,
+									 void* cargo_data)
+{
+	LLViewerInventoryItem* item = getItem();
+	BOOL rv = FALSE;
+	if(item)
+	{
+		// check the type
+		switch(cargo_type)
+		{
+		case DAD_TEXTURE:
+		case DAD_SOUND:
+		case DAD_LANDMARK:
+		case DAD_SCRIPT:
+		case DAD_CLOTHING:
+		case DAD_OBJECT:
+		case DAD_NOTECARD:
+		case DAD_BODYPART:
+		case DAD_ANIMATION:
+		case DAD_GESTURE:
+			{
+				LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data;
+				const LLPermissions& perm = inv_item->getPermissions();
+				if(gInventory.getItem(inv_item->getUUID())
+				   && perm.allowOperationBy(PERM_TRANSFER, gAgent.getID()))
+				{
+					rv = TRUE;
+					if(drop)
+					{
+						LLToolDragAndDrop::giveInventory(item->getCreatorUUID(),
+														 (LLInventoryItem*)cargo_data);
+					}
+				}
+				else
+				{
+					// It's not in the user's inventory (it's probably in
+					// an object's contents), so disallow dragging it here.
+					// You can't give something you don't yet have.
+					rv = FALSE;
+				}
+				break;
+			}
+		case DAD_CATEGORY:
+			{
+				LLInventoryCategory* inv_cat = (LLInventoryCategory*)cargo_data;
+				if( gInventory.getCategory( inv_cat->getUUID() ) )
+				{
+					rv = TRUE;
+					if(drop)
+					{
+						LLToolDragAndDrop::giveInventoryCategory(
+							item->getCreatorUUID(),
+							inv_cat);
+					}
+				}
+				else
+				{
+					// It's not in the user's inventory (it's probably in
+					// an object's contents), so disallow dragging it here.
+					// You can't give something you don't yet have.
+					rv = FALSE;
+				}
+				break;
+			}
+		default:
+			break;
+		}
+	}
+	return rv;
+}
+
+BOOL LLCallingCardBridge::removeItem()
+{
+	if (LLFriendCardsManager::instance().isItemInAnyFriendsList(getItem()))
+	{
+		LLAvatarActions::removeFriendDialog(getItem()->getCreatorUUID());
+		return FALSE;
+	}
+	else 
+	{
+		return LLItemBridge::removeItem();
+	}
+}
+// +=================================================+
+// |        LLNotecardBridge                         |
+// +=================================================+
+
+LLUIImagePtr LLNotecardBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE);
+}
+
+void LLNotecardBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+	
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+
+/*
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
+	}
+*/
+}
+
+
+// +=================================================+
+// |        LLGestureBridge                          |
+// +=================================================+
+
+LLUIImagePtr LLGestureBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE);
+}
+
+LLFontGL::StyleFlags LLGestureBridge::getLabelStyle() const
+{
+	if( LLGestureManager::instance().isGestureActive(mUUID) )
+	{
+		return LLFontGL::BOLD;
+	}
+	else
+	{
+		return LLFontGL::NORMAL;
+	}
+}
+
+std::string LLGestureBridge::getLabelSuffix() const
+{
+	if( LLGestureManager::instance().isGestureActive(mUUID) )
+	{
+		return LLItemBridge::getLabelSuffix() + " (active)";
+	}
+	else
+	{
+		return LLItemBridge::getLabelSuffix();
+	}
+}
+
+// virtual
+void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("activate" == action)
+	{
+		LLGestureManager::instance().activateGesture(mUUID);
+
+		LLViewerInventoryItem* item = gInventory.getItem(mUUID);
+		if (!item) return;
+
+		// Since we just changed the suffix to indicate (active)
+		// the server doesn't need to know, just the viewer.
+		gInventory.updateItem(item);
+		gInventory.notifyObservers();
+	}
+	else if ("deactivate" == action)
+	{
+		LLGestureManager::instance().deactivateGesture(mUUID);
+
+		LLViewerInventoryItem* item = gInventory.getItem(mUUID);
+		if (!item) return;
+
+		// Since we just changed the suffix to indicate (active)
+		// the server doesn't need to know, just the viewer.
+		gInventory.updateItem(item);
+		gInventory.notifyObservers();
+	}
+	else LLItemBridge::performAction(folder, model, action);
+}
+
+void LLGestureBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+	
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+/*
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null);
+		preview->setFocus(TRUE);
+	}
+*/
+}
+
+BOOL LLGestureBridge::removeItem()
+{
+	// Force close the preview window, if it exists
+	LLGestureManager::instance().deactivateGesture(mUUID);
+	return LLItemBridge::removeItem();
+}
+
+void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	lldebugs << "LLGestureBridge::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+
+		items.push_back(std::string("Gesture Separator"));
+		items.push_back(std::string("Activate"));
+		items.push_back(std::string("Deactivate"));
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+// +=================================================+
+// |        LLAnimationBridge                        |
+// +=================================================+
+
+LLUIImagePtr LLAnimationBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE);
+}
+
+void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	lldebugs << "LLAnimationBridge::buildContextMenu()" << llendl;
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Animation Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+	}
+
+	items.push_back(std::string("Animation Separator"));
+	items.push_back(std::string("Animation Play"));
+	items.push_back(std::string("Animation Audition"));
+
+	hide_context_entries(menu, items, disabled_items);
+
+}
+
+// virtual
+void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ((action == "playworld") || (action == "playlocal"))
+	{
+		if (getItem())
+		{
+			LLPreviewAnim::e_activation_type activate = LLPreviewAnim::NONE;
+			if ("playworld" == action) activate = LLPreviewAnim::PLAY;
+			if ("playlocal" == action) activate = LLPreviewAnim::AUDITION;
+			
+			LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID));
+			if (preview)
+			{
+				preview->activate(activate);
+			}
+		}
+	}
+	else
+	{
+		LLItemBridge::performAction(folder, model, action);
+	}
+}
+
+void LLAnimationBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+	
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+/*
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
+	}
+*/
+}
+
+// +=================================================+
+// |        LLObjectBridge                           |
+// +=================================================+
+
+// static
+LLUUID LLObjectBridge::sContextMenuItemID;
+
+LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags) :
+LLItemBridge(inventory, uuid), mInvType(type)
+{
+	mAttachPt = (flags & 0xff); // low bye of inventory flags
+
+	mIsMultiObject = ( flags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) ?  TRUE: FALSE;
+}
+
+BOOL LLObjectBridge::isItemRemovable()
+{
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if(!avatar) return FALSE;
+	if(avatar->isWearingAttachment(mUUID)) return FALSE;
+	return LLInvFVBridge::isItemRemovable();
+}
+
+LLUIImagePtr LLObjectBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_OBJECT, mInvType, mAttachPt, mIsMultiObject );
+}
+
+LLInventoryObject* LLObjectBridge::getObject() const
+{
+	LLInventoryObject* object = NULL;
+	LLInventoryModel* model = getInventoryModel();
+	if(model)
+	{
+		object = (LLInventoryObject*)model->getObject(mUUID);
+	}
+	return object;
+}
+
+// virtual
+void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("attach" == action)
+	{
+		LLUUID object_id = mUUID;
+		LLViewerInventoryItem* item;
+		item = (LLViewerInventoryItem*)gInventory.getItem(object_id);
+		if(item && gInventory.isObjectDescendentOf(object_id, gInventory.getRootFolderID()))
+		{
+			rez_attachment(item, NULL);
+		}
+		else if(item && item->isComplete())
+		{
+			// must be in library. copy it to our inventory and put it on.
+			LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(0);
+			copy_inventory_item(
+				gAgent.getID(),
+				item->getPermissions().getOwner(),
+				item->getUUID(),
+				LLUUID::null,
+				std::string(),
+				cb);
+		}
+		gFocusMgr.setKeyboardFocus(NULL);
+	}
+	else if ("detach" == action)
+	{
+		LLInventoryItem* item = gInventory.getItem(mUUID);
+		if(item)
+		{
+			gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);
+			gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
+			gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+			gMessageSystem->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID());
+			gMessageSystem->sendReliable( gAgent.getRegion()->getHost());
+		}
+		// this object might have been selected, so let the selection manager know it's gone now
+		LLViewerObject *found_obj =
+			gObjectList.findObject(item->getUUID());
+		if (found_obj)
+		{
+			LLSelectMgr::getInstance()->remove(found_obj);
+		}
+		else
+		{
+			llwarns << "object not found - ignoring" << llendl;
+		}
+	}
+	else LLItemBridge::performAction(folder, model, action);
+}
+
+void LLObjectBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+	
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+
+	LLSD key;
+	key["id"] = mUUID;
+	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
+
+	/*
+	LLFloaterReg::showInstance("properties", mUUID);
+	*/
+}
+
+LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const
+{ 
+	U8 font = LLFontGL::NORMAL;
+
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if( avatar && avatar->isWearingAttachment( mUUID ) )
+	{
+		font |= LLFontGL::BOLD;
+	}
+
+	LLInventoryItem* item = getItem();
+	if (item && item->getIsLinkType())
+	{
+		font |= LLFontGL::ITALIC;
+	}
+	
+	return (LLFontGL::StyleFlags)font;
+}
+
+std::string LLObjectBridge::getLabelSuffix() const
+{
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if( avatar && avatar->isWearingAttachment( mUUID ) )
+	{
+		std::string attachment_point_name = avatar->getAttachedPointName(mUUID);
+		LLStringUtil::toLower(attachment_point_name);
+		
+		LLStringUtil::format_map_t args;
+		args["[ATTACHMENT_POINT]"] =  attachment_point_name.c_str();
+		return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args);
+	}
+	else
+	{
+		return LLItemBridge::getLabelSuffix();
+	}
+}
+
+void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment)
+{
+	LLSD payload;
+	payload["item_id"] = item->getLinkedUUID(); // Wear the base object in case this is a link.
+
+	S32 attach_pt = 0;
+	if (gAgent.getAvatarObject() && attachment)
+	{
+		for (LLVOAvatar::attachment_map_t::iterator iter = gAgent.getAvatarObject()->mAttachmentPoints.begin();
+			 iter != gAgent.getAvatarObject()->mAttachmentPoints.end(); ++iter)
+		{
+			if (iter->second == attachment)
+			{
+				attach_pt = iter->first;
+				break;
+			}
+		}
+	}
+
+	payload["attachment_point"] = attach_pt;
+
+#if !ENABLE_MULTIATTACHMENTS
+	if (attachment && attachment->getNumObjects() > 0)
+	{
+		LLNotifications::instance().add("ReplaceAttachment", LLSD(), payload, confirm_replace_attachment_rez);
+	}
+	else
+#endif
+	{
+		LLNotifications::instance().forceResponse(LLNotification::Params("ReplaceAttachment").payload(payload), 0/*YES*/);
+	}
+}
+
+bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response)
+{
+	LLVOAvatar *avatarp = gAgent.getAvatarObject();
+		
+	if (!avatarp->canAttachMoreObjects())
+	{
+		LLSD args;
+		args["MAX_ATTACHMENTS"] = llformat("%d", MAX_AGENT_ATTACHMENTS);
+		LLNotifications::instance().add("MaxAttachmentsOnOutfit", args);
+		return false;
+	}
+
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	if (option == 0/*YES*/)
+	{
+		LLViewerInventoryItem* itemp = gInventory.getItem(notification["payload"]["item_id"].asUUID());
+		
+		if (itemp)
+		{
+			LLMessageSystem* msg = gMessageSystem;
+			msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv);
+			msg->nextBlockFast(_PREHASH_AgentData);
+			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+			msg->nextBlockFast(_PREHASH_ObjectData);
+			msg->addUUIDFast(_PREHASH_ItemID, itemp->getUUID());
+			msg->addUUIDFast(_PREHASH_OwnerID, itemp->getPermissions().getOwner());
+			U8 attachment_pt = notification["payload"]["attachment_point"].asInteger();
+#if ENABLE_MULTIATTACHMENTS
+			attachment_pt |= ATTACHMENT_ADD;
+#endif
+			msg->addU8Fast(_PREHASH_AttachmentPt, attachment_pt);
+			pack_permissions_slam(msg, itemp->getFlags(), itemp->getPermissions());
+			msg->addStringFast(_PREHASH_Name, itemp->getName());
+			msg->addStringFast(_PREHASH_Description, itemp->getDescription());
+			msg->sendReliable(gAgent.getRegion()->getHost());
+		}
+	}
+	return false;
+}
+static LLNotificationFunctorRegistration confirm_replace_attachment_rez_reg("ReplaceAttachment", confirm_replace_attachment_rez);
+
+void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		LLInventoryItem* item = getItem();
+		if (item && item->getIsLinkType())
+		{
+			items.push_back(std::string("Goto Link"));
+		}
+
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+
+		LLObjectBridge::sContextMenuItemID = mUUID;
+
+		if(item)
+		{
+			LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();
+			if( !avatarp )
+			{
+				return;
+			}
+			
+			if( avatarp->isWearingAttachment( mUUID ) )
+			{
+				items.push_back(std::string("Detach From Yourself"));
+			}
+			else
+			if( !isInTrash() && !isLinkedObjectInTrash() )
+			{
+				items.push_back(std::string("Attach Separator"));
+				items.push_back(std::string("Object Wear"));
+				items.push_back(std::string("Attach To"));
+				items.push_back(std::string("Attach To HUD"));
+				// commented out for DEV-32347
+				//items.push_back(std::string("Restore to Last Position"));
+
+				if (!avatarp->canAttachMoreObjects())
+				{
+					disabled_items.push_back(std::string("Object Wear"));
+					disabled_items.push_back(std::string("Attach To"));
+					disabled_items.push_back(std::string("Attach To HUD"));
+				}
+				LLMenuGL* attach_menu = menu.findChildMenuByName("Attach To", TRUE);
+				LLMenuGL* attach_hud_menu = menu.findChildMenuByName("Attach To HUD", TRUE);
+				LLVOAvatar *avatarp = gAgent.getAvatarObject();
+				if (attach_menu 
+					&& (attach_menu->getChildCount() == 0) 
+					&& attach_hud_menu 
+					&& (attach_hud_menu->getChildCount() == 0) 
+					&& avatarp)
+				{
+					for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); 
+						 iter != avatarp->mAttachmentPoints.end(); )
+					{
+						LLVOAvatar::attachment_map_t::iterator curiter = iter++;
+						LLViewerJointAttachment* attachment = curiter->second;
+						LLMenuItemCallGL::Params p;
+						std::string submenu_name = attachment->getName();
+						if (LLTrans::getString(submenu_name) != "")
+						{
+						    p.name = (" ")+LLTrans::getString(submenu_name)+" ";
+						}
+						else
+						{
+							p.name = submenu_name;
+						}
+						LLSD cbparams;
+						cbparams["index"] = curiter->first;
+						cbparams["label"] = attachment->getName();
+						p.on_click.function_name = "Inventory.AttachObject";
+						p.on_click.parameter = LLSD(attachment->getName());
+						p.on_enable.function_name = "Attachment.Label";
+						p.on_enable.parameter = cbparams;
+						LLView* parent = attachment->getIsHUDAttachment() ? attach_hud_menu : attach_menu;
+						LLUICtrlFactory::create<LLMenuItemCallGL>(p, parent);
+					}
+				}
+			}
+		}
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+BOOL LLObjectBridge::renameItem(const std::string& new_name)
+{
+	if(!isItemRenameable())
+		return FALSE;
+	LLPreview::dirty(mUUID);
+	LLInventoryModel* model = getInventoryModel();
+	if(!model)
+		return FALSE;
+	LLViewerInventoryItem* item = getItem();
+	if(item && (item->getName() != new_name))
+	{
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+		new_item->rename(new_name);
+		buildDisplayName(new_item, mDisplayName);
+		new_item->updateServer(FALSE);
+		model->updateItem(new_item);
+
+		model->notifyObservers();
+
+		LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+		if( avatar )
+		{
+			LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() );
+			if( obj )
+			{
+				LLSelectMgr::getInstance()->deselectAll();
+				LLSelectMgr::getInstance()->addAsIndividual( obj, SELECT_ALL_TES, FALSE );
+				LLSelectMgr::getInstance()->selectionSetObjectName( new_name );
+				LLSelectMgr::getInstance()->deselectAll();
+			}
+		}
+	}
+	// return FALSE because we either notified observers (& therefore
+	// rebuilt) or we didn't update.
+	return FALSE;
+}
+
+// +=================================================+
+// |        LLLSLTextBridge                          |
+// +=================================================+
+
+LLUIImagePtr LLLSLTextBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
+}
+
+void LLLSLTextBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+	
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+	/*
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES);
+	}
+	*/
+}
+
+// +=================================================+
+// |        LLWearableBridge                         |
+// +=================================================+
+
+// *NOTE: hack to get from avatar inventory to avatar
+void wear_inventory_item_on_avatar( LLInventoryItem* item )
+{
+	if(item)
+	{
+		lldebugs << "wear_inventory_item_on_avatar( " << item->getName()
+				 << " )" << llendl;
+
+		LLAppearanceManager::wearItem(item);
+	}
+}
+
+void wear_add_inventory_item_on_avatar( LLInventoryItem* item )
+{
+	if(item)
+	{
+		lldebugs << "wear_add_inventory_item_on_avatar( " << item->getName()
+				 << " )" << llendl;
+			
+		LLWearableList::instance().getAsset(item->getAssetUUID(),
+							   item->getName(),
+							   item->getType(),
+							   LLWearableBridge::onWearAddOnAvatarArrived,
+							   new LLUUID(item->getUUID()));
+	}
+}
+
+void remove_inventory_category_from_avatar( LLInventoryCategory* category )
+{
+	if(!category) return;
+	lldebugs << "remove_inventory_category_from_avatar( " << category->getName()
+			 << " )" << llendl;
+			 
+	
+	if( gFloaterCustomize )
+	{
+		gFloaterCustomize->askToSaveIfDirty(
+			boost::bind(remove_inventory_category_from_avatar_step2, _1, category->getUUID()));
+	}
+	else
+	{
+		remove_inventory_category_from_avatar_step2(TRUE, category->getUUID() );
+	}
+}
+
+struct OnRemoveStruct
+{
+	LLUUID mUUID;
+	OnRemoveStruct(const LLUUID& uuid):
+		mUUID(uuid)
+	{
+	}
+};
+
+void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id)
+{
+
+	// Find all the wearables that are in the category's subtree.
+	lldebugs << "remove_inventory_category_from_avatar_step2()" << llendl;
+	if(proceed)
+	{
+		LLInventoryModel::cat_array_t cat_array;
+		LLInventoryModel::item_array_t item_array;
+		LLFindWearables is_wearable;
+		gInventory.collectDescendentsIf(category_id,
+										cat_array,
+										item_array,
+										LLInventoryModel::EXCLUDE_TRASH,
+										is_wearable);
+		S32 i;
+		S32 wearable_count = item_array.count();
+
+		LLInventoryModel::cat_array_t	obj_cat_array;
+		LLInventoryModel::item_array_t	obj_item_array;
+		LLIsType is_object( LLAssetType::AT_OBJECT );
+		gInventory.collectDescendentsIf(category_id,
+										obj_cat_array,
+										obj_item_array,
+										LLInventoryModel::EXCLUDE_TRASH,
+										is_object);
+		S32 obj_count = obj_item_array.count();
+
+		// Find all gestures in this folder
+		LLInventoryModel::cat_array_t	gest_cat_array;
+		LLInventoryModel::item_array_t	gest_item_array;
+		LLIsType is_gesture( LLAssetType::AT_GESTURE );
+		gInventory.collectDescendentsIf(category_id,
+										gest_cat_array,
+										gest_item_array,
+										LLInventoryModel::EXCLUDE_TRASH,
+										is_gesture);
+		S32 gest_count = gest_item_array.count();
+
+		if (wearable_count > 0)	//Loop through wearables.  If worn, remove.
+		{
+			for(i = 0; i  < wearable_count; ++i)
+			{
+				if( gAgentWearables.isWearingItem (item_array.get(i)->getUUID()) )
+				{
+					LLWearableList::instance().getAsset(item_array.get(i)->getAssetUUID(),
+														item_array.get(i)->getName(),
+														item_array.get(i)->getType(),
+														LLWearableBridge::onRemoveFromAvatarArrived,
+														new OnRemoveStruct(item_array.get(i)->getUUID()));
+
+				}
+			}
+		}
+		
+		
+		if (obj_count > 0)
+		{
+			for(i = 0; i  < obj_count; ++i)
+			{
+				gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);
+				gMessageSystem->nextBlockFast(_PREHASH_ObjectData );
+				gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
+				gMessageSystem->addUUIDFast(_PREHASH_ItemID, obj_item_array.get(i)->getUUID() );
+
+				gMessageSystem->sendReliable( gAgent.getRegion()->getHost() );
+
+				// this object might have been selected, so let the selection manager know it's gone now
+				LLViewerObject *found_obj = gObjectList.findObject( obj_item_array.get(i)->getUUID());
+				if (found_obj)
+				{
+					LLSelectMgr::getInstance()->remove(found_obj);
+				}
+				else
+				{
+					llwarns << "object not found, ignoring" << llendl;
+				}
+			}
+		}
+
+		if (gest_count > 0)
+		{
+			for(i = 0; i  < gest_count; ++i)
+			{
+				if ( LLGestureManager::instance().isGestureActive( gest_item_array.get(i)->getUUID()) )
+				{
+					LLGestureManager::instance().deactivateGesture( gest_item_array.get(i)->getUUID() );
+					gInventory.updateItem( gest_item_array.get(i) );
+					gInventory.notifyObservers();
+				}
+
+			}
+		}
+	}
+}
+
+BOOL LLWearableBridge::renameItem(const std::string& new_name)
+{
+	if( gAgentWearables.isWearingItem( mUUID ) )
+	{
+		gAgentWearables.setWearableName( mUUID, new_name );
+	}
+	return LLItemBridge::renameItem(new_name);
+}
+
+BOOL LLWearableBridge::isItemRemovable()
+{
+	if (gAgentWearables.isWearingItem(mUUID)) return FALSE;
+	return LLInvFVBridge::isItemRemovable();
+}
+
+std::string LLWearableBridge::getLabelSuffix() const
+{
+	if( gAgentWearables.isWearingItem( mUUID ) )
+	{
+		return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn");
+	}
+	else
+	{
+		return LLItemBridge::getLabelSuffix();
+	}
+}
+
+LLUIImagePtr LLWearableBridge::getIcon() const
+{
+	return get_item_icon(mAssetType, mInvType, mWearableType, FALSE);
+}
+
+// virtual
+void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("wear" == action)
+	{
+		wearOnAvatar();
+	}
+	else if ("wear_add" == action)
+	{
+		wearAddOnAvatar();
+	}
+	else if ("edit" == action)
+	{
+		editOnAvatar();
+		return;
+	}
+	else if ("take_off" == action)
+	{
+		if(gAgentWearables.isWearingItem(mUUID))
+		{
+			LLViewerInventoryItem* item = getItem();
+			if (item)
+			{	
+				LLWearableList::instance().getAsset(item->getAssetUUID(),
+													item->getName(),
+													item->getType(),
+													LLWearableBridge::onRemoveFromAvatarArrived,
+													new OnRemoveStruct(mUUID));
+			}
+		}
+	}
+	else LLItemBridge::performAction(folder, model, action);
+}
+
+void LLWearableBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+	
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+	/*
+	if( isInTrash() )
+	{
+		LLNotifications::instance().add("CannotWearTrash");
+	}
+	else if(isAgentInventory())
+	{
+		if( !gAgentWearables.isWearingItem( mUUID ) )
+		{
+			wearOnAvatar();
+		}
+	}
+	else
+	{
+		// must be in the inventory library. copy it to our inventory
+		// and put it on right away.
+		LLViewerInventoryItem* item = getItem();
+		if(item && item->isComplete())
+		{
+			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
+			copy_inventory_item(
+				gAgent.getID(),
+				item->getPermissions().getOwner(),
+				item->getUUID(),
+				LLUUID::null,
+				std::string(),
+				cb);
+		}
+		else if(item)
+		{
+			// *TODO: We should fetch the item details, and then do
+			// the operation above.
+			LLNotifications::instance().add("CannotWearInfoNotComplete");
+		}
+	}
+	*/
+}
+
+void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	lldebugs << "LLWearableBridge::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{	// FWIW, it looks like SUPPRESS_OPEN_ITEM is not set anywhere
+		BOOL no_open = ((flags & SUPPRESS_OPEN_ITEM) == SUPPRESS_OPEN_ITEM);
+
+		// If we have clothing, don't add "Open" as it's the same action as "Wear"   SL-18976
+		LLViewerInventoryItem* item = getItem();
+		if( !no_open && item )
+		{
+			no_open = (item->getType() == LLAssetType::AT_CLOTHING) ||
+					  (item->getType() == LLAssetType::AT_BODYPART);
+		}
+		if (!no_open)
+		{
+			items.push_back(std::string("Open"));
+		}
+
+		if (item && item->getIsLinkType())
+		{
+			items.push_back(std::string("Goto Link"));
+		}
+
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+
+		items.push_back(std::string("Wearable Separator"));
+		
+		items.push_back(std::string("Wearable Wear"));
+		items.push_back(std::string("Wearable Add"));
+		items.push_back(std::string("Wearable Edit"));
+
+		if ((flags & FIRST_SELECTED_ITEM) == 0)
+		{
+			disabled_items.push_back(std::string("Wearable Edit"));
+		}
+		// Don't allow items to be worn if their baseobj is in the trash.
+		if (isLinkedObjectInTrash())
+		{
+			disabled_items.push_back(std::string("Wearable Wear"));
+			disabled_items.push_back(std::string("Wearable Add"));
+			disabled_items.push_back(std::string("Wearable Edit"));
+		}
+
+		// Disable wear and take off based on whether the item is worn.
+		if(item)
+		{
+			switch (item->getType())
+			{
+				case LLAssetType::AT_CLOTHING:
+					items.push_back(std::string("Take Off"));
+				case LLAssetType::AT_BODYPART:
+					if (gAgentWearables.isWearingItem(item->getUUID()))
+					{
+						disabled_items.push_back(std::string("Wearable Wear"));
+						disabled_items.push_back(std::string("Wearable Add"));
+					}
+					else
+					{	
+						disabled_items.push_back(std::string("Take Off"));
+					}
+					break;
+				default:
+					break;
+			}
+		}
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+// Called from menus
+// static
+BOOL LLWearableBridge::canWearOnAvatar(void* user_data)
+{
+	LLWearableBridge* self = (LLWearableBridge*)user_data;
+	if(!self) return FALSE;
+	if(!self->isAgentInventory())
+	{
+		LLViewerInventoryItem* item = (LLViewerInventoryItem*)self->getItem();
+		if(!item || !item->isComplete()) return FALSE;
+	}
+	return (!gAgentWearables.isWearingItem(self->mUUID));
+}
+
+// Called from menus
+// static
+void LLWearableBridge::onWearOnAvatar(void* user_data)
+{
+	LLWearableBridge* self = (LLWearableBridge*)user_data;
+	if(!self) return;
+	self->wearOnAvatar();
+}
+
+void LLWearableBridge::wearOnAvatar()
+{
+	// Don't wear anything until initial wearables are loaded, can
+	// destroy clothing items.
+	if (!gAgentWearables.areWearablesLoaded()) 
+	{
+		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
+		return;
+	}
+
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		if(!isAgentInventory())
+		{
+			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
+			copy_inventory_item(
+				gAgent.getID(),
+				item->getPermissions().getOwner(),
+				item->getUUID(),
+				LLUUID::null,
+				std::string(),
+				cb);
+		}
+		else
+		{
+			wear_inventory_item_on_avatar(item);
+		}
+	}
+}
+
+void LLWearableBridge::wearAddOnAvatar()
+{
+	// Don't wear anything until initial wearables are loaded, can
+	// destroy clothing items.
+	if (!gAgentWearables.areWearablesLoaded()) 
+	{
+		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
+		return;
+	}
+
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		if(!isAgentInventory())
+		{
+			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
+			copy_inventory_item(
+				gAgent.getID(),
+				item->getPermissions().getOwner(),
+				item->getUUID(),
+				LLUUID::null,
+				std::string(),
+				cb);
+		}
+		else
+		{
+			wear_add_inventory_item_on_avatar(item);
+		}
+	}
+}
+
+// static
+void LLWearableBridge::onWearOnAvatarArrived( LLWearable* wearable, void* userdata )
+{
+	LLUUID* item_id = (LLUUID*) userdata;
+	if(wearable)
+	{
+		LLViewerInventoryItem* item = NULL;
+		item = (LLViewerInventoryItem*)gInventory.getItem(*item_id);
+		if(item)
+		{
+			if(item->getAssetUUID() == wearable->getAssetID())
+			{
+				gAgentWearables.setWearableItem(item, wearable);
+				gInventory.notifyObservers();
+				//self->getFolderItem()->refreshFromRoot();
+			}
+			else
+			{
+				llinfos << "By the time wearable asset arrived, its inv item already pointed to a different asset." << llendl;
+			}
+		}
+	}
+	delete item_id;
+}
+
+// static
+// BAP remove the "add" code path once everything is fully COF-ified.
+void LLWearableBridge::onWearAddOnAvatarArrived( LLWearable* wearable, void* userdata )
+{
+	LLUUID* item_id = (LLUUID*) userdata;
+	if(wearable)
+	{
+		LLViewerInventoryItem* item = NULL;
+		item = (LLViewerInventoryItem*)gInventory.getItem(*item_id);
+		if(item)
+		{
+			if(item->getAssetUUID() == wearable->getAssetID())
+			{
+				bool do_append = true;
+				gAgentWearables.setWearableItem(item, wearable, do_append);
+				gInventory.notifyObservers();
+				//self->getFolderItem()->refreshFromRoot();
+			}
+			else
+			{
+				llinfos << "By the time wearable asset arrived, its inv item already pointed to a different asset." << llendl;
+			}
+		}
+	}
+	delete item_id;
+}
+
+// static
+BOOL LLWearableBridge::canEditOnAvatar(void* user_data)
+{
+	LLWearableBridge* self = (LLWearableBridge*)user_data;
+	if(!self) return FALSE;
+
+	return (gAgentWearables.isWearingItem(self->mUUID));
+}
+
+// static 
+void LLWearableBridge::onEditOnAvatar(void* user_data)
+{
+	LLWearableBridge* self = (LLWearableBridge*)user_data;
+	if(self)
+	{
+		self->editOnAvatar();
+	}
+}
+
+void LLWearableBridge::editOnAvatar()
+{
+	const LLWearable* wearable = gAgentWearables.getWearableFromItemID(mUUID);
+	if( wearable )
+	{
+		// Set the tab to the right wearable.
+		if (gFloaterCustomize)
+			gFloaterCustomize->setCurrentWearableType( wearable->getType() );
+
+		if( CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() )
+		{
+			// Start Avatar Customization
+			gAgent.changeCameraToCustomizeAvatar();
+		}
+	}
+}
+
+// static
+BOOL LLWearableBridge::canRemoveFromAvatar(void* user_data)
+{
+	LLWearableBridge* self = (LLWearableBridge*)user_data;
+	if( self && (LLAssetType::AT_BODYPART != self->mAssetType) )
+	{
+		return gAgentWearables.isWearingItem( self->mUUID );
+	}
+	return FALSE;
+}
+
+// static 
+void LLWearableBridge::onRemoveFromAvatar(void* user_data)
+{
+	LLWearableBridge* self = (LLWearableBridge*)user_data;
+	if(!self) return;
+	if(gAgentWearables.isWearingItem(self->mUUID))
+	{
+		LLViewerInventoryItem* item = self->getItem();
+		if (item)
+		{
+			LLUUID parent_id = item->getParentUUID();
+			LLWearableList::instance().getAsset(item->getAssetUUID(),
+												item->getName(),
+												item->getType(),
+												onRemoveFromAvatarArrived,
+												new OnRemoveStruct(LLUUID(self->mUUID)));
+		}
+	}
+}
+
+// static
+void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,
+												 void* userdata)
+{
+	OnRemoveStruct *on_remove_struct = (OnRemoveStruct*) userdata;
+	const LLUUID &item_id = gInventory.getLinkedItemID(on_remove_struct->mUUID);
+	if(wearable)
+	{
+		if( gAgentWearables.isWearingItem( item_id ) )
+		{
+			EWearableType type = wearable->getType();
+	
+			if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES ) ) //&&
+				//!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
+			{
+				// MULTI_WEARABLE: FIXME HACK - always remove all
+				bool do_remove_all = false;
+				gAgentWearables.removeWearable( type, do_remove_all, 0 );
+			}
+		}
+	}
+
+	// Find and remove this item from the COF.
+	LLInventoryModel::item_array_t items = gInventory.collectLinkedItems(item_id, LLAppearanceManager::getCOF());
+	llassert(items.size() == 1); // Should always have one and only one item linked to this in the COF.
+	for (LLInventoryModel::item_array_t::const_iterator iter = items.begin();
+		 iter != items.end();
+		 ++iter)
+	{
+		const LLViewerInventoryItem *linked_item = (*iter);
+		const LLUUID &item_id = linked_item->getUUID();
+		gInventory.purgeObject(item_id);
+	}
+	gInventory.notifyObservers();
+
+	delete on_remove_struct;
+}
+
+LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type,
+													   const LLUUID& uuid,LLInventoryModel* model)
+{
+	LLInvFVBridgeAction* action = NULL;
+	switch(asset_type)
+	{
+	case LLAssetType::AT_TEXTURE:
+		action = new LLTextureBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_SOUND:
+		action = new LLSoundBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_LANDMARK:
+		action = new LLLandmarkBridgeAction(uuid,model);
+		break;
+		
+	case LLAssetType::AT_CALLINGCARD:
+		action = new LLCallingCardBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_OBJECT:
+		action = new LLObjectBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_NOTECARD:
+		action = new LLNotecardBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_ANIMATION:
+		action = new LLAnimationBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_GESTURE:
+		action = new LLGestureBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_LSL_TEXT:
+		action = new LLLSLTextBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_CLOTHING:
+	case LLAssetType::AT_BODYPART:
+		action = new LLWearableBridgeAction(uuid,model);
+
+		break;
+
+	default:
+		break;
+	}
+	return action;
+}
+
+//static 
+void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,
+								   const LLUUID& uuid,LLInventoryModel* model)
+{
+	LLInvFVBridgeAction* action = createAction(asset_type,uuid,model);
+	if(action)
+	{
+		action->doIt();
+		delete action;
+	}
+}
+
+//static 
+void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model)
+{
+	LLAssetType::EType asset_type = model->getItem(uuid)->getType();
+	LLInvFVBridgeAction* action = createAction(asset_type,uuid,model);
+	if(action)
+	{
+		action->doIt();
+		delete action;
+	}
+}
+
+LLViewerInventoryItem* LLInvFVBridgeAction::getItem() const
+{
+	if(mModel)
+		return (LLViewerInventoryItem*)mModel->getItem(mUUID);
+	return NULL;
+}
+
+//virtual 
+void	LLTextureBridgeAction::doIt() 
+{
+	if (getItem())
+	{
+		LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+//virtual
+void	LLSoundBridgeAction::doIt() 
+{
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES);
+	}
+	
+	LLInvFVBridgeAction::doIt();
+}
+
+
+//virtual 
+void	LLLandmarkBridgeAction::doIt() 
+{
+	LLViewerInventoryItem* item = getItem();
+	if( item )
+	{
+		// Opening (double-clicking) a landmark immediately teleports,
+		// but warns you the first time.
+		LLSD payload;
+		payload["asset_id"] = item->getAssetUUID();
+		LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+
+//virtual 
+void	LLCallingCardBridgeAction::doIt() 
+{
+	LLViewerInventoryItem* item = getItem();
+	if(item && item->getCreatorUUID().notNull())
+	{
+		LLAvatarActions::showProfile(item->getCreatorUUID());
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+//virtual 
+void	
+LLNotecardBridgeAction::doIt() 
+{
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+//virtual 
+void	LLGestureBridgeAction::doIt() 
+{
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null);
+		preview->setFocus(TRUE);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+//virtual 
+void	LLAnimationBridgeAction::doIt() 
+{
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+
+//virtual 
+void	LLObjectBridgeAction::doIt()
+{
+	LLFloaterReg::showInstance("properties", mUUID);
+
+	LLInvFVBridgeAction::doIt();
+}
+
+
+//virtual 
+void	LLLSLTextBridgeAction::doIt() 
+{
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+
+BOOL LLWearableBridgeAction::isInTrash() const
+{
+	if(!mModel) return FALSE;
+	LLUUID trash_id = mModel->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	return mModel->isObjectDescendentOf(mUUID, trash_id);
+}
+
+BOOL LLWearableBridgeAction::isAgentInventory() const
+{
+	if(!mModel) return FALSE;
+	if(gInventory.getRootFolderID() == mUUID) return TRUE;
+	return mModel->isObjectDescendentOf(mUUID, gInventory.getRootFolderID());
+}
+
+void LLWearableBridgeAction::wearOnAvatar()
+{
+	// Don't wear anything until initial wearables are loaded, can
+	// destroy clothing items.
+	if (!gAgentWearables.areWearablesLoaded()) 
+	{
+		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
+		return;
+	}
+
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		if(!isAgentInventory())
+		{
+			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
+			copy_inventory_item(
+				gAgent.getID(),
+				item->getPermissions().getOwner(),
+				item->getUUID(),
+				LLUUID::null,
+				std::string(),
+				cb);
+		}
+		else
+		{
+			wear_inventory_item_on_avatar(item);
+		}
+	}
+}
+
+//virtual 
+void LLWearableBridgeAction::doIt()
+{
+	if(isInTrash())
+	{
+		LLNotifications::instance().add("CannotWearTrash");
+	}
+	else if(isAgentInventory())
+	{
+		if(!gAgentWearables.isWearingItem(mUUID))
+		{
+			wearOnAvatar();
+		}
+	}
+	else
+	{
+		// must be in the inventory library. copy it to our inventory
+		// and put it on right away.
+		LLViewerInventoryItem* item = getItem();
+		if(item && item->isComplete())
+		{
+			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
+			copy_inventory_item(
+				gAgent.getID(),
+				item->getPermissions().getOwner(),
+				item->getUUID(),
+				LLUUID::null,
+				std::string(),
+				cb);
+		}
+		else if(item)
+		{
+			// *TODO: We should fetch the item details, and then do
+			// the operation above.
+			LLNotifications::instance().add("CannotWearInfoNotComplete");
+		}
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+// +=================================================+
+// |        LLLinkItemBridge                         |
+// +=================================================+
+// For broken links
+
+std::string LLLinkItemBridge::sPrefix("Link: ");
+
+
+LLUIImagePtr LLLinkItemBridge::getIcon() const
+{
+	if (LLViewerInventoryItem *item = getItem())
+	{
+		return get_item_icon(item->getActualType(), LLInventoryType::IT_NONE, 0, FALSE);
+	}
+	return get_item_icon(LLAssetType::AT_LINK, LLInventoryType::IT_NONE, 0, FALSE);
+}
+
+void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	// *TODO: Translate
+	lldebugs << "LLLink::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{	
+		items.push_back(std::string("Delete"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Delete"));
+		}
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+
+// +=================================================+
+// |        LLLinkBridge                             |
+// +=================================================+
+// For broken links.
+
+std::string LLLinkFolderBridge::sPrefix("Link: ");
+
+
+LLUIImagePtr LLLinkFolderBridge::getIcon() const
+{
+	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	if (LLViewerInventoryItem *item = getItem())
+	{
+		if (const LLViewerInventoryCategory* cat = item->getLinkedCategory())
+		{
+			preferred_type = cat->getPreferredType();
+		}
+	}
+	return LLFolderBridge::getIcon(preferred_type);
+}
+
+void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	// *TODO: Translate
+	lldebugs << "LLLink::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{	
+		items.push_back(std::string("Goto Link"));
+		items.push_back(std::string("Delete"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Delete"));
+		}
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+void LLLinkFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("goto" == action)
+	{
+		gotoItem(folder);
+		return;
+	}
+	LLItemBridge::performAction(folder,model,action);
+}
+
+void LLLinkFolderBridge::gotoItem(LLFolderView *folder)
+{
+	const LLUUID &cat_uuid = getFolderID();
+	if (!cat_uuid.isNull())
+	{
+		if (LLFolderViewItem *base_folder = folder->getItemByID(cat_uuid))
+		{
+			if (LLInventoryModel* model = getInventoryModel())
+			{
+				model->fetchDescendentsOf(cat_uuid);
+			}
+			base_folder->setOpen(TRUE);
+			folder->setSelectionFromRoot(base_folder,TRUE);
+			folder->scrollToShowSelection();
+		}
+	}
+}
+
+const LLUUID &LLLinkFolderBridge::getFolderID() const
+{
+	if (LLViewerInventoryItem *link_item = getItem())
+	{
+		if (const LLViewerInventoryCategory *cat = link_item->getLinkedCategory())
+		{
+			const LLUUID& cat_uuid = cat->getUUID();
+			return cat_uuid;
+		}
+	}
+	return LLUUID::null;
+}
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 6b2a2d32dec..3f3513a665e 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -41,6 +41,7 @@
 #include "llfoldervieweventlistener.h"
 
 class LLInventoryPanel;
+class LLMenuGL;
 
 enum EInventoryIcon
 {
@@ -121,7 +122,7 @@ class LLInventoryPanelObserver : public LLInventoryObserver
 };
 
 const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type);
-void hideContextEntries(LLMenuGL& menu, 
+void hide_context_entries(LLMenuGL& menu, 
 						const std::vector<std::string> &entries_to_show,
 						const std::vector<std::string> &disabled_entries);
 
@@ -807,5 +808,9 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
 
 void teleport_via_landmark(const LLUUID& asset_id);
 
+// Utility function to hide all entries except those in the list
+void hide_context_entries(LLMenuGL& menu, 
+		const std::vector<std::string> &entries_to_show, 
+		const std::vector<std::string> &disabled_entries);
 
 #endif // LL_LLINVENTORYBRIDGE_H
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
new file mode 100644
index 00000000000..694f7026544
--- /dev/null
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -0,0 +1,344 @@
+/** 
+ * @file llfloaterinventory.cpp
+ * @brief Implementation of the inventory view and associated stuff.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include <utility> // for std::pair<>
+
+#include "llinventoryfunctions.h"
+
+// library includes
+#include "llagent.h"
+#include "llagentwearables.h"
+#include "llcallingcard.h"
+#include "llfloaterreg.h"
+#include "llsdserialize.h"
+#include "llfiltereditor.h"
+#include "llspinctrl.h"
+#include "llui.h"
+#include "message.h"
+
+// newview includes
+#include "llappearancemgr.h"
+#include "llappviewer.h"
+#include "llfirstuse.h"
+#include "llfloaterchat.h"
+#include "llfloatercustomize.h"
+#include "llfocusmgr.h"
+#include "llfolderview.h"
+#include "llgesturemgr.h"
+#include "lliconctrl.h"
+#include "llimview.h"
+#include "llinventorybridge.h"
+#include "llinventoryclipboard.h"
+#include "llinventorymodel.h"
+#include "llinventorypanel.h"
+#include "lllineeditor.h"
+#include "llmenugl.h"
+#include "llpreviewanim.h"
+#include "llpreviewgesture.h"
+#include "llpreviewnotecard.h"
+#include "llpreviewscript.h"
+#include "llpreviewsound.h"
+#include "llpreviewtexture.h"
+#include "llresmgr.h"
+#include "llscrollbar.h"
+#include "llscrollcontainer.h"
+#include "llselectmgr.h"
+#include "lltabcontainer.h"
+#include "lltooldraganddrop.h"
+#include "lluictrlfactory.h"
+#include "llviewerinventory.h"
+#include "llviewermessage.h"
+#include "llviewerobjectlist.h"
+#include "llviewerregion.h"
+#include "llviewerwindow.h"
+#include "llvoavatarself.h"
+#include "llwearablelist.h"
+
+BOOL LLInventoryState::sWearNewClothing = FALSE;
+LLUUID LLInventoryState::sWearNewClothingTransactionID;
+
+void LLSaveFolderState::setApply(BOOL apply)
+{
+	mApply = apply; 
+	// before generating new list of open folders, clear the old one
+	if(!apply) 
+	{
+		clearOpenFolders(); 
+	}
+}
+
+void LLSaveFolderState::doFolder(LLFolderViewFolder* folder)
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_DO_FOLDER);
+	if(mApply)
+	{
+		// we're applying the open state
+		LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener();
+		if(!bridge) return;
+		LLUUID id(bridge->getUUID());
+		if(mOpenFolders.find(id) != mOpenFolders.end())
+		{
+			folder->setOpen(TRUE);
+		}
+		else
+		{
+			// keep selected filter in its current state, this is less jarring to user
+			if (!folder->isSelected())
+			{
+				folder->setOpen(FALSE);
+			}
+		}
+	}
+	else
+	{
+		// we're recording state at this point
+		if(folder->isOpen())
+		{
+			LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener();
+			if(!bridge) return;
+			mOpenFolders.insert(bridge->getUUID());
+		}
+	}
+}
+
+void LLOpenFilteredFolders::doItem(LLFolderViewItem *item)
+{
+	if (item->getFiltered())
+	{
+		item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+	}
+}
+
+void LLOpenFilteredFolders::doFolder(LLFolderViewFolder* folder)
+{
+	if (folder->getFiltered() && folder->getParentFolder())
+	{
+		folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+	}
+	// if this folder didn't pass the filter, and none of its descendants did
+	else if (!folder->getFiltered() && !folder->hasFilteredDescendants())
+	{
+		folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_NO);
+	}
+}
+
+void LLSelectFirstFilteredItem::doItem(LLFolderViewItem *item)
+{
+	if (item->getFiltered() && !mItemSelected)
+	{
+		item->getRoot()->setSelection(item, FALSE, FALSE);
+		if (item->getParentFolder())
+		{
+			item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+		}
+		item->getRoot()->scrollToShowSelection();
+		mItemSelected = TRUE;
+	}
+}
+
+void LLSelectFirstFilteredItem::doFolder(LLFolderViewFolder* folder)
+{
+	if (folder->getFiltered() && !mItemSelected)
+	{
+		folder->getRoot()->setSelection(folder, FALSE, FALSE);
+		if (folder->getParentFolder())
+		{
+			folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+		}
+		folder->getRoot()->scrollToShowSelection();
+		mItemSelected = TRUE;
+	}
+}
+
+void LLOpenFoldersWithSelection::doItem(LLFolderViewItem *item)
+{
+	if (item->getParentFolder() && item->isSelected())
+	{
+		item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+	}
+}
+
+void LLOpenFoldersWithSelection::doFolder(LLFolderViewFolder* folder)
+{
+	if (folder->getParentFolder() && folder->isSelected())
+	{
+		folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+	}
+}
+
+const std::string& get_item_icon_name(LLAssetType::EType asset_type,
+							 LLInventoryType::EType inventory_type,
+							 U32 attachment_point,
+							 BOOL item_is_multi )
+{
+	EInventoryIcon idx = OBJECT_ICON_NAME;
+	if ( item_is_multi )
+	{
+		idx = OBJECT_MULTI_ICON_NAME;
+	}
+	
+	switch(asset_type)
+	{
+	case LLAssetType::AT_TEXTURE:
+		if(LLInventoryType::IT_SNAPSHOT == inventory_type)
+		{
+			idx = SNAPSHOT_ICON_NAME;
+		}
+		else
+		{
+			idx = TEXTURE_ICON_NAME;
+		}
+		break;
+
+	case LLAssetType::AT_SOUND:
+		idx = SOUND_ICON_NAME;
+		break;
+	case LLAssetType::AT_CALLINGCARD:
+		if(attachment_point!= 0)
+		{
+			idx = CALLINGCARD_ONLINE_ICON_NAME;
+		}
+		else
+		{
+			idx = CALLINGCARD_OFFLINE_ICON_NAME;
+		}
+		break;
+	case LLAssetType::AT_LANDMARK:
+		if(attachment_point!= 0)
+		{
+			idx = LANDMARK_VISITED_ICON_NAME;
+		}
+		else
+		{
+			idx = LANDMARK_ICON_NAME;
+		}
+		break;
+	case LLAssetType::AT_SCRIPT:
+	case LLAssetType::AT_LSL_TEXT:
+	case LLAssetType::AT_LSL_BYTECODE:
+		idx = SCRIPT_ICON_NAME;
+		break;
+	case LLAssetType::AT_CLOTHING:
+		idx = CLOTHING_ICON_NAME;
+	case LLAssetType::AT_BODYPART :
+		if(LLAssetType::AT_BODYPART == asset_type)
+		{
+			idx = BODYPART_ICON_NAME;
+		}
+		switch(LLInventoryItem::II_FLAGS_WEARABLES_MASK & attachment_point)
+		{
+		case WT_SHAPE:
+			idx = BODYPART_SHAPE_ICON_NAME;
+			break;
+		case WT_SKIN:
+			idx = BODYPART_SKIN_ICON_NAME;
+			break;
+		case WT_HAIR:
+			idx = BODYPART_HAIR_ICON_NAME;
+			break;
+		case WT_EYES:
+			idx = BODYPART_EYES_ICON_NAME;
+			break;
+		case WT_SHIRT:
+			idx = CLOTHING_SHIRT_ICON_NAME;
+			break;
+		case WT_PANTS:
+			idx = CLOTHING_PANTS_ICON_NAME;
+			break;
+		case WT_SHOES:
+			idx = CLOTHING_SHOES_ICON_NAME;
+			break;
+		case WT_SOCKS:
+			idx = CLOTHING_SOCKS_ICON_NAME;
+			break;
+		case WT_JACKET:
+			idx = CLOTHING_JACKET_ICON_NAME;
+			break;
+		case WT_GLOVES:
+			idx = CLOTHING_GLOVES_ICON_NAME;
+			break;
+		case WT_UNDERSHIRT:
+			idx = CLOTHING_UNDERSHIRT_ICON_NAME;
+			break;
+		case WT_UNDERPANTS:
+			idx = CLOTHING_UNDERPANTS_ICON_NAME;
+			break;
+		case WT_SKIRT:
+			idx = CLOTHING_SKIRT_ICON_NAME;
+			break;
+		case WT_ALPHA:
+			idx = CLOTHING_ALPHA_ICON_NAME;
+			break;
+		case WT_TATTOO:
+			idx = CLOTHING_TATTOO_ICON_NAME;
+			break;
+		default:
+			// no-op, go with choice above
+			break;
+		}
+		break;
+	case LLAssetType::AT_NOTECARD:
+		idx = NOTECARD_ICON_NAME;
+		break;
+	case LLAssetType::AT_ANIMATION:
+		idx = ANIMATION_ICON_NAME;
+		break;
+	case LLAssetType::AT_GESTURE:
+		idx = GESTURE_ICON_NAME;
+		break;
+	case LLAssetType::AT_FAVORITE:
+		//TODO - need bette idx
+		idx = LANDMARK_ICON_NAME;
+		break;
+	case LLAssetType::AT_LINK:
+		idx = LINKITEM_ICON_NAME;
+		break;
+	case LLAssetType::AT_LINK_FOLDER:
+		idx = LINKFOLDER_ICON_NAME;
+		break;
+	default:
+		break;
+	}
+	
+	return ICON_NAME[idx];
+}
+
+LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
+							 LLInventoryType::EType inventory_type,
+							 U32 attachment_point,
+							 BOOL item_is_multi)
+{
+	const std::string& icon_name = get_item_icon_name(asset_type, inventory_type, attachment_point, item_is_multi );
+	return LLUI::getUIImage(icon_name);
+}
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
new file mode 100644
index 00000000000..efd40576a76
--- /dev/null
+++ b/indra/newview/llinventoryfunctions.h
@@ -0,0 +1,136 @@
+/** 
+ * @file llinventoryfunctions.h
+ * @brief Miscellaneous inventory-related functions and classes
+ * class definition
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLINVENTORYFUNCTIONS_H
+#define LL_LLINVENTORYFUNCTIONS_H
+
+#include "llassetstorage.h"
+#include "lldarray.h"
+#include "llfloater.h"
+#include "llinventory.h"
+#include "llinventoryfilter.h"
+#include "llfolderview.h"
+#include "llinventorymodel.h"
+#include "lluictrlfactory.h"
+#include <set>
+
+
+class LLFolderViewItem;
+class LLInventoryFilter;
+class LLInventoryModel;
+class LLInventoryPanel;
+class LLInvFVBridge;
+class LLInventoryFVBridgeBuilder;
+class LLMenuBarGL;
+class LLCheckBoxCtrl;
+class LLSpinCtrl;
+class LLScrollContainer;
+class LLTextBox;
+class LLIconCtrl;
+class LLSaveFolderState;
+class LLFilterEditor;
+class LLTabContainer;
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// This is a collection of miscellaneous functions and classes
+// that don't fit cleanly into any other class header.
+//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLInventoryState
+{
+public:
+	// HACK: Until we can route this info through the instant message hierarchy
+	static BOOL sWearNewClothing;
+	static LLUUID sWearNewClothingTransactionID;	// wear all clothing in this transaction	
+};
+
+class LLSelectFirstFilteredItem : public LLFolderViewFunctor
+{
+public:
+	LLSelectFirstFilteredItem() : mItemSelected(FALSE) {}
+	virtual ~LLSelectFirstFilteredItem() {}
+	virtual void doFolder(LLFolderViewFolder* folder);
+	virtual void doItem(LLFolderViewItem* item);
+	BOOL wasItemSelected() { return mItemSelected; }
+protected:
+	BOOL	mItemSelected;
+};
+
+class LLOpenFilteredFolders : public LLFolderViewFunctor
+{
+public:
+	LLOpenFilteredFolders()  {}
+	virtual ~LLOpenFilteredFolders() {}
+	virtual void doFolder(LLFolderViewFolder* folder);
+	virtual void doItem(LLFolderViewItem* item);
+};
+
+class LLSaveFolderState : public LLFolderViewFunctor
+{
+public:
+	LLSaveFolderState() : mApply(FALSE) {}
+	virtual ~LLSaveFolderState() {}
+	virtual void doFolder(LLFolderViewFolder* folder);
+	virtual void doItem(LLFolderViewItem* item) {}
+	void setApply(BOOL apply);
+	void clearOpenFolders() { mOpenFolders.clear(); }
+protected:
+	std::set<LLUUID> mOpenFolders;
+	BOOL mApply;
+};
+
+class LLOpenFoldersWithSelection : public LLFolderViewFunctor
+{
+public:
+	LLOpenFoldersWithSelection() {}
+	virtual ~LLOpenFoldersWithSelection() {}
+	virtual void doFolder(LLFolderViewFolder* folder);
+	virtual void doItem(LLFolderViewItem* item);
+};
+
+const std::string& get_item_icon_name(LLAssetType::EType asset_type,
+							 LLInventoryType::EType inventory_type,
+							 U32 attachment_point, 
+							 BOOL item_is_multi );
+
+LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
+							 LLInventoryType::EType inventory_type,
+							 U32 attachment_point, 
+							 BOOL item_is_multi );
+
+#endif // LL_LLINVENTORYFUNCTIONS_H
+
+
+
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 1d7cbde0d56..23439191f3d 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -46,6 +46,8 @@
 #include "llfloater.h"
 #include "llfocusmgr.h"
 #include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llinventorypanel.h"
 #include "llfloaterinventory.h"
 #include "llviewerinventory.h"
 #include "llviewermessage.h"
@@ -3174,13 +3176,13 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
 	// The incoming inventory could span more than one BulkInventoryUpdate packet,
 	// so record the transaction ID for this purchase, then wear all clothing
 	// that comes in as part of that transaction ID.  JC
-	if (LLFloaterInventory::sWearNewClothing)
+	if (LLInventoryState::sWearNewClothing)
 	{
-		LLFloaterInventory::sWearNewClothingTransactionID = tid;
-		LLFloaterInventory::sWearNewClothing = FALSE;
+		LLInventoryState::sWearNewClothingTransactionID = tid;
+		LLInventoryState::sWearNewClothing = FALSE;
 	}
 
-	if (tid == LLFloaterInventory::sWearNewClothingTransactionID)
+	if (tid == LLInventoryState::sWearNewClothingTransactionID)
 	{
 		count = wearable_ids.size();
 		for (i = 0; i < count; ++i)
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index ea528a1df89..c28792a711d 100644
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -51,7 +51,7 @@
 // project includes
 #include "llagent.h"
 #include "llfloaterbulkpermission.h"
-#include "llpanelinventory.h"
+#include "llpanelobjectinventory.h"
 #include "llpreviewscript.h"
 #include "llresmgr.h"
 #include "llselectmgr.h"
@@ -89,14 +89,14 @@ BOOL LLPanelContents::postBuild()
 	childSetAction("button new script",&LLPanelContents::onClickNewScript, this);
 	childSetAction("button permissions",&LLPanelContents::onClickPermissions, this);
 
-	mPanelInventory = getChild<LLPanelInventory>("contents_inventory");
+	mPanelInventoryObject = getChild<LLPanelObjectInventory>("contents_inventory");
 
 	return TRUE;
 }
 
 LLPanelContents::LLPanelContents()
 	:	LLPanel(),
-		mPanelInventory(NULL)
+		mPanelInventoryObject(NULL)
 {
 }
 
@@ -139,9 +139,9 @@ void LLPanelContents::refresh()
 	LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok);
 
 	getState(object);
-	if (mPanelInventory)
+	if (mPanelInventoryObject)
 	{
-		mPanelInventory->refresh();
+		mPanelInventoryObject->refresh();
 	}	
 }
 
diff --git a/indra/newview/llpanelcontents.h b/indra/newview/llpanelcontents.h
index bab980b5246..14256845a6c 100644
--- a/indra/newview/llpanelcontents.h
+++ b/indra/newview/llpanelcontents.h
@@ -35,9 +35,14 @@
 
 #include "v3math.h"
 #include "llpanel.h"
+#include "llinventory.h"
+#include "lluuid.h"
+#include "llmap.h"
+#include "llviewerobject.h"
+#include "llvoinventorylistener.h"
 
 class LLButton;
-class LLPanelInventory;
+class LLPanelObjectInventory;
 class LLViewerObject;
 class LLCheckBoxCtrl;
 class LLSpinCtrl;
@@ -70,7 +75,7 @@ class LLPanelContents : public LLPanel
 	void				getState(LLViewerObject *object);
 
 public:
-	LLPanelInventory* mPanelInventory;
+	LLPanelObjectInventory* mPanelInventoryObject;
 };
 
-#endif
+#endif // LL_LLPANELCONTENTS_H
diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index 0ce85818dd6..22138a81eca 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -38,6 +38,7 @@
 
 #include "llinventory.h"
 #include "llviewerinventory.h"
+#include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
 #include "llfloaterinventory.h"
 #include "llagent.h"
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 3d0db710453..7bc42b36f9c 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -1,954 +1,955 @@
-/**
- * @file llpanellandmarks.cpp
- * @brief Landmarks tab for Side Bar "Places" panel
- *
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llpanellandmarks.h"
-
-#include "llbutton.h"
-#include "llfloaterreg.h"
-#include "llsdutil.h"
-#include "llsdutil_math.h"
-
-#include "llaccordionctrl.h"
-#include "llaccordionctrltab.h"
-#include "llagent.h"
-#include "llagentpicksinfo.h"
-#include "llagentui.h"
-#include "llcallbacklist.h"
-#include "lldndbutton.h"
-#include "llfloaterworldmap.h"
-#include "llfolderviewitem.h"
-#include "llinventorysubtreepanel.h"
-#include "lllandmarkactions.h"
-#include "llplacesinventorybridge.h"
-#include "llsidetray.h"
-#include "llviewermenu.h"
-#include "llviewerregion.h"
-
-// Not yet implemented; need to remove buildPanel() from constructor when we switch
-//static LLRegisterPanelClassWrapper<LLLandmarksPanel> t_landmarks("panel_landmarks");
-
-static const std::string OPTIONS_BUTTON_NAME = "options_gear_btn";
-static const std::string ADD_BUTTON_NAME = "add_btn";
-static const std::string ADD_FOLDER_BUTTON_NAME = "add_folder_btn";
-static const std::string TRASH_BUTTON_NAME = "trash_btn";
-
-
-// helper functions
-static void filter_list(LLInventorySubTreePanel* inventory_list, const std::string& string);
-
-
-LLLandmarksPanel::LLLandmarksPanel()
-	:	LLPanelPlacesTab()
-	,	mFavoritesInventoryPanel(NULL)
-	,	mLandmarksInventoryPanel(NULL)
-	,	mMyInventoryPanel(NULL)
-	,	mLibraryInventoryPanel(NULL)
-	,	mCurrentSelectedList(NULL)
-	,	mListCommands(NULL)
-	,	mGearFolderMenu(NULL)
-	,	mGearLandmarkMenu(NULL)
-	,	mDirtyFilter(false)
-{
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_landmarks.xml");
-}
-
-LLLandmarksPanel::~LLLandmarksPanel()
-{
-}
-
-BOOL LLLandmarksPanel::postBuild()
-{
-	if (!gInventory.isInventoryUsable())
-		return FALSE;
-
-	// mast be called before any other initXXX methods to init Gear menu
-	initListCommandsHandlers();
-
-	U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER);
-	mSortByDate = sort_order & LLInventoryFilter::SO_DATE;
-	initFavoritesInventroyPanel();
-	initLandmarksInventroyPanel();
-	initMyInventroyPanel();
-	initLibraryInventroyPanel();
-
-	gIdleCallbacks.addFunction(LLLandmarksPanel::doIdle, this);
-	return TRUE;
-}
-
-// virtual
-void LLLandmarksPanel::onSearchEdit(const std::string& string)
-{
-	static std::string prev_string("");
-
-	if (prev_string == string) return;
-
-	// show all folders in Landmarks Accordion for empty filter
-	mLandmarksInventoryPanel->setShowFolderState(string.empty() ?
-		LLInventoryFilter::SHOW_ALL_FOLDERS :
-		LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS
-		);
-
-	filter_list(mFavoritesInventoryPanel, string);
-	filter_list(mLandmarksInventoryPanel, string);
-	filter_list(mMyInventoryPanel, string);
-	filter_list(mLibraryInventoryPanel, string);
-
-	prev_string = string;
-	mDirtyFilter = true;
-
-	// give FolderView a chance to be refreshed. So, made all accordions visible
-	for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
-	{
-		LLAccordionCtrlTab* tab = *iter;
-		tab->setVisible(true);
-	}
-}
-
-// virtual
-void LLLandmarksPanel::onShowOnMap()
-{
-	if (NULL == mCurrentSelectedList)
-	{
-		llwarns << "There are no selected list. No actions are performed." << llendl;
-		return;
-	}
-	LLLandmark* landmark = getCurSelectedLandmark();
-	if (!landmark)
-		return;
-
-	LLVector3d landmark_global_pos;
-	if (!landmark->getGlobalPos(landmark_global_pos))
-		return;
-	
-	LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
-	if (!landmark_global_pos.isExactlyZero() && worldmap_instance)
-	{
-		worldmap_instance->trackLocation(landmark_global_pos);
-		LLFloaterReg::showInstance("world_map", "center");
-	}
-}
-
-// virtual
-void LLLandmarksPanel::onTeleport()
-{
-	LLFolderViewItem* current_item = getCurSelectedItem();
-	if (!current_item)
-	{
-		llwarns << "There are no selected list. No actions are performed." << llendl;
-		return;
-	}
-
-	LLFolderViewEventListener* listenerp = current_item->getListener();
-	if (listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK)
-	{
-		listenerp->openItem();
-	}
-}
-
-// virtual
-void LLLandmarksPanel::updateVerbs()
-{
-	if (!isTabVisible()) 
-		return;
-
-	BOOL enabled = isLandmarkSelected();
-	mTeleportBtn->setEnabled(enabled);
-	mShowOnMapBtn->setEnabled(enabled);
-
-	// TODO: mantipov: Uncomment when mShareBtn is supported
-	// Share button should be enabled when neither a folder nor a landmark is selected
-	//mShareBtn->setEnabled(NULL != current_item);
-
-	updateListCommands();
-}
-
-void LLLandmarksPanel::onSelectionChange(LLInventorySubTreePanel* inventory_list, const std::deque<LLFolderViewItem*> &items, BOOL user_action)
-{
-	if (user_action && (items.size() > 0))
-	{
-		deselectOtherThan(inventory_list);
-		mCurrentSelectedList = inventory_list;
-	}
-
-	LLFolderViewItem* current_item = inventory_list->getRootFolder()->getCurSelectedItem();
-	if (!current_item)
-		return;
-
-	updateVerbs();
-}
-
-void LLLandmarksPanel::onSelectorButtonClicked()
-{
-	// TODO: mantipov: update getting of selected item
-	// TODO: bind to "i" button
-	LLFolderViewItem* cur_item = mFavoritesInventoryPanel->getRootFolder()->getCurSelectedItem();
-
-	LLFolderViewEventListener* listenerp = cur_item->getListener();
-	if (listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK)
-	{
-		LLSD key;
-		key["type"] = "landmark";
-		key["id"] = listenerp->getUUID();
-
-		LLSideTray::getInstance()->showPanel("panel_places", key);
-	}
-}
-
-//////////////////////////////////////////////////////////////////////////
-// PROTECTED METHODS
-//////////////////////////////////////////////////////////////////////////
-
-bool LLLandmarksPanel::isLandmarkSelected() const 
-{
-	LLFolderViewItem* current_item = getCurSelectedItem();
-	if(current_item && current_item->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
-	{
-		return true;
-	}
-
-	return false;
-}
-
-bool LLLandmarksPanel::isReceivedFolderSelected() const
-{
-	// Received Folder can be only in Landmarks accordion
-	if (mCurrentSelectedList != mLandmarksInventoryPanel) return false;
-
-	// *TODO: it should be filled with logic when EXT-976 is done.
-
-	llwarns << "Not implemented yet until EXT-976 is done." << llendl;
-
-	return false;
-}
-LLLandmark* LLLandmarksPanel::getCurSelectedLandmark() const
-{
-
-	LLFolderViewItem* cur_item = getCurSelectedItem();
-	if(cur_item && cur_item->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
-	{ 
-		return LLLandmarkActions::getLandmark(cur_item->getListener()->getUUID());
-	}
-	return NULL;
-}
-
-LLFolderViewItem* LLLandmarksPanel::getCurSelectedItem () const 
-{
-	return mCurrentSelectedList ?  mCurrentSelectedList->getRootFolder()->getCurSelectedItem() : NULL;
-}
-
-void LLLandmarksPanel::updateSortOrder(LLInventoryPanel* panel, bool byDate)
-{
-	if(!panel) return; 
-
-	U32 order = panel->getSortOrder();
-	if (byDate)
-	{
-		panel->setSortOrder( order | LLInventoryFilter::SO_DATE );
-	}
-	else 
-	{
-		panel->setSortOrder( order & ~LLInventoryFilter::SO_DATE );
-	}
-}
-
-// virtual
-void LLLandmarksPanel::processParcelInfo(const LLParcelData& parcel_data)
-{
-	//this function will be called after user will try to create a pick for selected landmark.
-	// We have to make request to sever to get parcel_id and snaption_id. 
-	if(isLandmarkSelected())
-	{
-		LLLandmark* landmark  =  getCurSelectedLandmark();
-		LLFolderViewItem* cur_item = getCurSelectedItem();
-		LLUUID id = cur_item->getListener()->getUUID();
-		LLInventoryItem* inv_item =  mCurrentSelectedList->getModel()->getItem(id);
-		if(landmark)
-		{
-			LLPanelPickEdit* panel_pick = LLPanelPickEdit::create();
-			LLVector3d landmark_global_pos;
-			landmark->getGlobalPos(landmark_global_pos);
-
-			// let's toggle pick panel into  panel places
-			LLPanel* panel_places =  LLSideTray::getInstance()->getChild<LLPanel>("panel_places");//-> sidebar_places
-			panel_places->addChild(panel_pick);
-			LLRect paren_rect(panel_places->getRect());
-			panel_pick->reshape(paren_rect.getWidth(),paren_rect.getHeight(), TRUE);
-			panel_pick->setRect(paren_rect);
-			panel_pick->onOpen(LLSD());
-
-			LLPickData data;
-			data.pos_global = landmark_global_pos;
-			data.name = cur_item->getName();
-			data.desc = inv_item->getDescription();
-			data.snapshot_id = parcel_data.snapshot_id;
-			data.parcel_id = parcel_data.parcel_id;
-			panel_pick->setPickData(&data);
-
-			LLSD params;
-			params["parcel_id"] =parcel_data.parcel_id;
-			/* set exit callback to get back onto panel places  
-			 in callback we will make cleaning up( delete pick_panel instance, 
-			 remove landmark panel from observer list
-			*/ 
-			panel_pick->setExitCallback(boost::bind(&LLLandmarksPanel::onPickPanelExit,this,
-					panel_pick, panel_places,params));
-			panel_pick->setSaveCallback(boost::bind(&LLLandmarksPanel::onPickPanelExit,this,
-				panel_pick, panel_places,params));
-			panel_pick->setCancelCallback(boost::bind(&LLLandmarksPanel::onPickPanelExit,this,
-							panel_pick, panel_places,params));
-		}
-	}
-}
-
-// virtual
-void LLLandmarksPanel::setParcelID(const LLUUID& parcel_id)
-{
-	if (!parcel_id.isNull())
-	{
-		LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this);
-		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id);
-	}
-}
-
-// virtual
-void LLLandmarksPanel::setErrorStatus(U32 status, const std::string& reason)
-{
-	llerrs<< "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<llendl;
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// PRIVATE METHODS
-//////////////////////////////////////////////////////////////////////////
-
-void LLLandmarksPanel::initFavoritesInventroyPanel()
-{
-	mFavoritesInventoryPanel = getChild<LLInventorySubTreePanel>("favorites_list");
-
-	initLandmarksPanel(mFavoritesInventoryPanel);
-
-	initAccordion("tab_favorites", mFavoritesInventoryPanel);
-}
-
-void LLLandmarksPanel::initLandmarksInventroyPanel()
-{
-	mLandmarksInventoryPanel = getChild<LLInventorySubTreePanel>("landmarks_list");
-
-	initLandmarksPanel(mLandmarksInventoryPanel);
-
-	mLandmarksInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
-
-	// subscribe to have auto-rename functionality while creating New Folder
-	mLandmarksInventoryPanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mLandmarksInventoryPanel, _1, _2));
-
-	initAccordion("tab_landmarks", mLandmarksInventoryPanel);
-}
-
-void LLLandmarksPanel::initMyInventroyPanel()
-{
-	mMyInventoryPanel= getChild<LLInventorySubTreePanel>("my_inventory_list");
-
-	initLandmarksPanel(mMyInventoryPanel);
-
-	initAccordion("tab_inventory", mMyInventoryPanel);
-}
-
-void LLLandmarksPanel::initLibraryInventroyPanel()
-{
-	mLibraryInventoryPanel = getChild<LLInventorySubTreePanel>("library_list");
-
-	initLandmarksPanel(mLibraryInventoryPanel);
-
-	initAccordion("tab_library", mLibraryInventoryPanel);
-}
-
-void LLLandmarksPanel::initLandmarksPanel(LLInventorySubTreePanel* inventory_list)
-{
-	inventory_list->setFilterTypes(0x1 << LLInventoryType::IT_LANDMARK);
-	inventory_list->setSelectCallback(boost::bind(&LLLandmarksPanel::onSelectionChange, this, inventory_list, _1, _2));
-
-	inventory_list->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
-	updateSortOrder(inventory_list, mSortByDate);
-
-	LLPlacesFolderView* root_folder = dynamic_cast<LLPlacesFolderView*>(inventory_list->getRootFolder());
-	if (root_folder)
-	{
-		root_folder->setupMenuHandle(LLInventoryType::IT_CATEGORY, mGearFolderMenu->getHandle());
-		root_folder->setupMenuHandle(LLInventoryType::IT_LANDMARK, mGearLandmarkMenu->getHandle());
-	}
-
-	// save initial folder state to avoid incorrect work while switching between Landmarks & Teleport History tabs
-	// See EXT-1609.
-	inventory_list->saveFolderState();
-}
-
-void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLInventorySubTreePanel* inventory_list)
-{
-	LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>(accordion_tab_name);
-	mAccordionTabs.push_back(accordion_tab);
-	accordion_tab->setDropDownStateChangedCallback(
-		boost::bind(&LLLandmarksPanel::onAccordionExpandedCollapsed, this, _2, inventory_list));
-}
-
-void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLInventorySubTreePanel* inventory_list)
-{
-	bool expanded = param.asBoolean();
-
-	if(!expanded && (mCurrentSelectedList == inventory_list))
-	{
-		inventory_list->getRootFolder()->clearSelection();
-
-		mCurrentSelectedList = NULL;
-		updateVerbs();
-	}
-}
-
-void LLLandmarksPanel::deselectOtherThan(const LLInventorySubTreePanel* inventory_list)
-{
-	if (inventory_list != mFavoritesInventoryPanel)
-	{
-		mFavoritesInventoryPanel->getRootFolder()->clearSelection();
-	}
-
-	if (inventory_list != mLandmarksInventoryPanel)
-	{
-		mLandmarksInventoryPanel->getRootFolder()->clearSelection();
-	}
-	if (inventory_list != mMyInventoryPanel)
-	{
-		mMyInventoryPanel->getRootFolder()->clearSelection();
-	}
-	if (inventory_list != mLibraryInventoryPanel)
-	{
-		mLibraryInventoryPanel->getRootFolder()->clearSelection();
-	}
-}
-
-// List Commands Handlers
-void LLLandmarksPanel::initListCommandsHandlers()
-{
-	mListCommands = getChild<LLPanel>("bottom_panel");
-
-	mListCommands->childSetAction(OPTIONS_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onActionsButtonClick, this));
-	mListCommands->childSetAction(TRASH_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onTrashButtonClick, this));
-	mListCommands->getChild<LLButton>(ADD_BUTTON_NAME)->setHeldDownCallback(boost::bind(&LLLandmarksPanel::onAddButtonHeldDown, this));
-	static const LLSD add_landmark_command("add_landmark");
-	mListCommands->childSetAction(ADD_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onAddAction, this, add_landmark_command));
-
-	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>(TRASH_BUTTON_NAME);
-	trash_btn->setDragAndDropHandler(boost::bind(&LLLandmarksPanel::handleDragAndDropToTrash, this
-			,	_4 // BOOL drop
-			,	_5 // EDragAndDropType cargo_type
-			,	_7 // EAcceptance* accept
-			));
-
-	mCommitCallbackRegistrar.add("Places.LandmarksGear.Add.Action", boost::bind(&LLLandmarksPanel::onAddAction, this, _2));
-	mCommitCallbackRegistrar.add("Places.LandmarksGear.CopyPaste.Action", boost::bind(&LLLandmarksPanel::onClipboardAction, this, _2));
-	mCommitCallbackRegistrar.add("Places.LandmarksGear.Custom.Action", boost::bind(&LLLandmarksPanel::onCustomAction, this, _2));
-	mCommitCallbackRegistrar.add("Places.LandmarksGear.Folding.Action", boost::bind(&LLLandmarksPanel::onFoldingAction, this, _2));
-	mEnableCallbackRegistrar.add("Places.LandmarksGear.Check", boost::bind(&LLLandmarksPanel::isActionChecked, this, _2));
-	mEnableCallbackRegistrar.add("Places.LandmarksGear.Enable", boost::bind(&LLLandmarksPanel::isActionEnabled, this, _2));
-	mGearLandmarkMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_places_gear_landmark.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-	mGearFolderMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_places_gear_folder.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_place_add_button.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-}
-
-
-void LLLandmarksPanel::updateListCommands()
-{
-	bool add_folder_enabled = isActionEnabled("category");
-	bool trash_enabled = isActionEnabled("delete");
-
-	// keep Options & Add Landmark buttons always enabled
-	mListCommands->childSetEnabled(ADD_FOLDER_BUTTON_NAME, add_folder_enabled);
-	mListCommands->childSetEnabled(TRASH_BUTTON_NAME, trash_enabled);
-}
-
-void LLLandmarksPanel::onActionsButtonClick()
-{
-	LLFolderViewItem* cur_item = NULL;
-	if(mCurrentSelectedList)
-		cur_item = mCurrentSelectedList->getRootFolder()->getCurSelectedItem();
-	
-	if(!cur_item)
-		return;
-	
-	LLFolderViewEventListener* listenerp = cur_item->getListener();
-	
-	LLMenuGL* menu  =NULL;
-	if (listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK)
-	{
-		menu = mGearLandmarkMenu;
-	}
-	else if (listenerp->getInventoryType() == LLInventoryType::IT_CATEGORY)
-	{
-		mGearFolderMenu->getChild<LLMenuItemCallGL>("expand")->setVisible(!cur_item->isOpen());
-		mGearFolderMenu->getChild<LLMenuItemCallGL>("collapse")->setVisible(cur_item->isOpen());
-		menu = mGearFolderMenu;
-	}
-	showActionMenu(menu,OPTIONS_BUTTON_NAME);
-}
-
-void LLLandmarksPanel::onAddButtonHeldDown()
-{
-	showActionMenu(mMenuAdd,ADD_BUTTON_NAME);
-}
-
-void LLLandmarksPanel::showActionMenu(LLMenuGL* menu, std::string spawning_view_name)
-{
-	if (menu)
-	{
-		menu->buildDrawLabels();
-		menu->updateParent(LLMenuGL::sMenuContainer);
-		LLView* spawning_view = getChild<LLView> (spawning_view_name);
-		S32 menu_x, menu_y;
-		//show menu in co-ordinates of panel
-		spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this);
-		menu_y += menu->getRect().getHeight();
-		LLMenuGL::showPopup(this, menu, menu_x, menu_y);
-	}
-}
-
-void LLLandmarksPanel::onTrashButtonClick() const
-{
-	onClipboardAction("delete");
-}
-
-void LLLandmarksPanel::onAddAction(const LLSD& userdata) const
-{
-	std::string command_name = userdata.asString();
-	if("add_landmark" == command_name)
-	{
-		if(LLLandmarkActions::landmarkAlreadyExists())
-		{
-			std::string location;
-			LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_FULL);
-			llwarns<<" Landmark already exists at location:  "<< location<<llendl;
-			return;
-		}
-		LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
-	} 
-	else if ("category" == command_name)
-	{
-		LLFolderViewItem* item = getCurSelectedItem();
-		if (item && mCurrentSelectedList == mLandmarksInventoryPanel)
-		{
-			LLFolderViewEventListener* folder_bridge = NULL;
-			if (item-> getListener()->getInventoryType()
-					== LLInventoryType::IT_LANDMARK)
-			{
-				// for a landmark get parent folder bridge
-				folder_bridge = item->getParentFolder()->getListener();
-			}
-			else if (item-> getListener()->getInventoryType()
-					== LLInventoryType::IT_CATEGORY)
-			{
-				// for a folder get its own bridge
-				folder_bridge = item->getListener();
-			}
-
-			menu_create_inventory_item(mCurrentSelectedList->getRootFolder(),
-					dynamic_cast<LLFolderBridge*> (folder_bridge), LLSD(
-							"category"), gInventory.findCategoryUUIDForType(
-							LLAssetType::AT_LANDMARK));
-		}
-	}
-}
-
-void LLLandmarksPanel::onClipboardAction(const LLSD& userdata) const
-{
-	if(!mCurrentSelectedList) 
-		return;
-	std::string command_name = userdata.asString();
-    if("copy_slurl" == command_name)
-	{
-    	LLFolderViewItem* cur_item = getCurSelectedItem();
-		if(cur_item)
-			LLLandmarkActions::copySLURLtoClipboard(cur_item->getListener()->getUUID());
-	}
-	else if ( "paste" == command_name)
-	{
-		mCurrentSelectedList->getRootFolder()->paste();
-	} 
-	else if ( "cut" == command_name)
-	{
-		mCurrentSelectedList->getRootFolder()->cut();
-	}
-	else
-	{
-		mCurrentSelectedList->getRootFolder()->doToSelected(mCurrentSelectedList->getModel(),command_name);
-	}
-}
-
-void LLLandmarksPanel::onFoldingAction(const LLSD& userdata)
-{
-	if(!mCurrentSelectedList) return;
-
-	LLFolderView* root_folder = mCurrentSelectedList->getRootFolder();
-	std::string command_name = userdata.asString();
-
-	if ("expand_all" == command_name)
-	{
-		root_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
-		root_folder->arrangeAll();
-	}
-	else if ("collapse_all" == command_name)
-	{
-		root_folder->closeAllFolders();
-	}
-	else if ( "sort_by_date" == command_name)
-	{
-		mSortByDate = !mSortByDate;
-		updateSortOrder(mLandmarksInventoryPanel, mSortByDate);
-		updateSortOrder(mMyInventoryPanel, mSortByDate);
-		updateSortOrder(mLibraryInventoryPanel, mSortByDate);
-	}
-	else
-	{
-		root_folder->doToSelected(&gInventory, userdata);
-	}
-}
-
-bool LLLandmarksPanel::isActionChecked(const LLSD& userdata) const
-{
-	const std::string command_name = userdata.asString();
-
-	if ( "sort_by_date" == command_name)
-	{
-		return  mSortByDate;
-	}
-
-	return false;
-}
-
-bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
-{
-	std::string command_name = userdata.asString();
-
-
-	LLPlacesFolderView* rootFolderView = mCurrentSelectedList ?
-		static_cast<LLPlacesFolderView*>(mCurrentSelectedList->getRootFolder()) : NULL;
-
-	if (NULL == rootFolderView) return false;
-
-	// disable some commands for multi-selection. EXT-1757
-	if (rootFolderView->getSelectedCount() > 1)
-	{
-		if (   "teleport"		== command_name 
-			|| "more_info"		== command_name
-			|| "rename"			== command_name
-			|| "show_on_map"	== command_name
-			|| "copy_slurl"		== command_name
-			)
-		{
-			return false;
-		}
-
-	}
-
-	// disable some commands for Favorites accordion. EXT-1758
-	if (mCurrentSelectedList == mFavoritesInventoryPanel)
-	{
-		if (   "expand_all"		== command_name
-			|| "collapse_all"	== command_name
-			|| "sort_by_date"	== command_name
-			)
-			return false;
-	}
-
-
-	if("category" == command_name)
-	{
-		// we can add folder only in Landmarks Accordion
-		if (mCurrentSelectedList == mLandmarksInventoryPanel)
-		{
-			// ... but except Received folder
-			return !isReceivedFolderSelected();
-		}
-		else return false;
-	}
-	else if("paste" == command_name || "rename" == command_name || "cut" == command_name || "delete" == command_name)
-	{
-		return canSelectedBeModified(command_name);
-	}
-	else if ( "sort_by_date" == command_name)
-	{
-		return  mSortByDate;
-	}
-	else if("create_pick" == command_name)
-	{
-		return !LLAgentPicksInfo::getInstance()->isPickLimitReached();
-	}
-	else
-	{
-		llwarns << "Unprocessed command has come: " << command_name << llendl;
-	}
-
-	return true;
-}
-
-void LLLandmarksPanel::onCustomAction(const LLSD& userdata)
-{
-	LLFolderViewItem* cur_item = getCurSelectedItem();
-	if(!cur_item)
-		return ;
-	std::string command_name = userdata.asString();
-	if("more_info" == command_name)
-	{
-		cur_item->getListener()->performAction(mCurrentSelectedList->getRootFolder(),mCurrentSelectedList->getModel(),"about");
-	}
-	else if ("teleport" == command_name)
-	{
-		onTeleport();
-	}
-	else if ("show_on_map" == command_name)
-	{
-		onShowOnMap();
-	}
-	else if ("create_pick" == command_name)
-	{
-		LLLandmark* landmark = getCurSelectedLandmark();
-		if(!landmark) return;
-		
-		LLViewerRegion* region = gAgent.getRegion();
-		if (!region) return;
-
-		LLGlobalVec pos_global;
-		LLUUID region_id;
-		landmark->getGlobalPos(pos_global);
-		landmark->getRegionID(region_id);
-		LLVector3 region_pos((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
-						  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
-						  (F32)pos_global.mdV[VZ]);
-
-		LLSD body;
-		std::string url = region->getCapability("RemoteParcelRequest");
-		if (!url.empty())
-		{
-			body["location"] = ll_sd_from_vector3(region_pos);
-			if (!region_id.isNull())
-			{
-				body["region_id"] = region_id;
-			}
-			if (!pos_global.isExactlyZero())
-			{
-				U64 region_handle = to_region_handle(pos_global);
-				body["region_handle"] = ll_sd_from_U64(region_handle);
-			}
-			LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle()));
-		}
-		else 
-		{
-			llwarns << "Can't create pick for landmark for region" << region_id 
-					<< ". Region: "	<< region->getName() 
-					<< " does not support RemoteParcelRequest" << llendl; 
-		}
-	}
-}
-
-/*
-Processes such actions: cut/rename/delete/paste actions
-
-Rules:
- 1. We can't perform any action in Library
- 2. For Landmarks we can:
-	- cut/rename/delete in any other accordions
-	- paste - only in Favorites, Landmarks accordions
- 3. For Folders we can: perform any action in Landmarks accordion, except Received folder
- 4. We can not paste folders from Clipboard (processed by LLFolderView::canPaste())
- 5. Check LLFolderView/Inventory Bridges rules
- */
-bool LLLandmarksPanel::canSelectedBeModified(const std::string& command_name) const
-{
-	// validate own rules first
-
-	// nothing can be modified in Library
-	if (mLibraryInventoryPanel == mCurrentSelectedList) return false;
-
-	bool can_be_modified = false;
-
-	// landmarks can be modified in any other accordion...
-	if (isLandmarkSelected())
-	{
-		can_be_modified = true;
-
-		// we can modify landmarks anywhere except paste to My Inventory
-		if ("paste" == command_name)
-		{
-			can_be_modified = (mCurrentSelectedList != mMyInventoryPanel);
-		}
-	}
-	else
-	{
-		// ...folders only in the Landmarks accordion...
-		can_be_modified = mLandmarksInventoryPanel == mCurrentSelectedList;
-
-		// ...except "Received" folder
-		can_be_modified &= !isReceivedFolderSelected();
-	}
-
-	// then ask LLFolderView permissions
-	if (can_be_modified)
-	{
-		if ("cut" == command_name)
-		{
-			can_be_modified = mCurrentSelectedList->getRootFolder()->canCut();
-		}
-		else if ("rename" == command_name)
-		{
-			can_be_modified = getCurSelectedItem()->getListener()->isItemRenameable();
-		}
-		else if ("delete" == command_name)
-		{
-			can_be_modified = getCurSelectedItem()->getListener()->isItemRemovable();
-		}
-		else if("paste" == command_name)
-		{
-			return mCurrentSelectedList->getRootFolder()->canPaste();
-		}
-		else
-		{
-			llwarns << "Unprocessed command has come: " << command_name << llendl;
-		}
-	}
-
-	return can_be_modified;
-}
-
-void LLLandmarksPanel::onPickPanelExit( LLPanelPickEdit* pick_panel, LLView* owner, const LLSD& params)
-{
-	pick_panel->setVisible(FALSE);
-	owner->removeChild(pick_panel);
-	//we need remove  observer to  avoid  processParcelInfo in the future.
-	LLRemoteParcelInfoProcessor::getInstance()->removeObserver(params["parcel_id"].asUUID(), this);
-
-	delete pick_panel;
-	pick_panel = NULL;
-}
-
-bool LLLandmarksPanel::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept)
-{
-	*accept = ACCEPT_NO;
-
-	switch (cargo_type)
-	{
-
-	case DAD_LANDMARK:
-	case DAD_CATEGORY:
-		{
-			bool is_enabled = isActionEnabled("delete");
-
-			if (is_enabled) *accept = ACCEPT_YES_MULTI;
-
-			if (is_enabled && drop)
-			{
-				onClipboardAction("delete");
-			}
-		}
-		break;
-	default:
-		break;
-	}
-
-	return true;
-}
-
-
-void LLLandmarksPanel::doIdle(void* landmarks_panel)
-{
-	LLLandmarksPanel* panel = (LLLandmarksPanel* ) landmarks_panel;
-
-	if (panel->mDirtyFilter)
-	{
-		panel->updateFilteredAccordions();
-	}
-
-}
-
-void LLLandmarksPanel::updateFilteredAccordions()
-{
-	LLInventoryPanel* inventory_list = NULL;
-	LLAccordionCtrlTab* accordion_tab = NULL;
-	for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
-	{
-		accordion_tab = *iter;
-		inventory_list = dynamic_cast<LLInventorySubTreePanel*> (accordion_tab->getAccordionView());
-		if (NULL == inventory_list) continue;
-		LLFolderView* fv = inventory_list->getRootFolder();
-
-		bool has_visible_children = fv->hasVisibleChildren();
-
-		accordion_tab->setVisible(has_visible_children);
-	}
-
-	// we have to arrange accordion tabs for cases when filter string is less restrictive but 
-	// all items are still filtered.
-	static LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion");
-	accordion->arrange();
-
-	// now filter state is applied to accordion tabs
-	mDirtyFilter = false;
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// HELPER FUNCTIONS
-//////////////////////////////////////////////////////////////////////////
-static void filter_list(LLInventorySubTreePanel* inventory_list, const std::string& string)
-{
-	if (string == "")
-	{
-		inventory_list->setFilterSubString(LLStringUtil::null);
-
-		// re-open folders that were initially open
-		inventory_list->restoreFolderState();
-	}
-
-	gInventory.startBackgroundFetch();
-
-	if (inventory_list->getFilterSubString().empty() && string.empty())
-	{
-		// current filter and new filter empty, do nothing
-		return;
-	}
-
-	// save current folder open state if no filter currently applied
-	if (inventory_list->getRootFolder()->getFilterSubString().empty())
-	{
-		inventory_list->saveFolderState();
-	}
-
-	// set new filter string
-	inventory_list->setFilterSubString(string);
-}
-// EOF
+/**
+ * @file llpanellandmarks.cpp
+ * @brief Landmarks tab for Side Bar "Places" panel
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanellandmarks.h"
+
+#include "llbutton.h"
+#include "llfloaterreg.h"
+#include "llsdutil.h"
+#include "llsdutil_math.h"
+
+#include "llaccordionctrl.h"
+#include "llaccordionctrltab.h"
+#include "llagent.h"
+#include "llagentpicksinfo.h"
+#include "llagentui.h"
+#include "llcallbacklist.h"
+#include "lldndbutton.h"
+#include "llfloaterworldmap.h"
+#include "llfolderviewitem.h"
+#include "llinventorypanel.h"
+#include "llinventorysubtreepanel.h"
+#include "lllandmarkactions.h"
+#include "llplacesinventorybridge.h"
+#include "llsidetray.h"
+#include "llviewermenu.h"
+#include "llviewerregion.h"
+
+// Not yet implemented; need to remove buildPanel() from constructor when we switch
+//static LLRegisterPanelClassWrapper<LLLandmarksPanel> t_landmarks("panel_landmarks");
+
+static const std::string OPTIONS_BUTTON_NAME = "options_gear_btn";
+static const std::string ADD_BUTTON_NAME = "add_btn";
+static const std::string ADD_FOLDER_BUTTON_NAME = "add_folder_btn";
+static const std::string TRASH_BUTTON_NAME = "trash_btn";
+
+
+// helper functions
+static void filter_list(LLInventorySubTreePanel* inventory_list, const std::string& string);
+
+
+LLLandmarksPanel::LLLandmarksPanel()
+	:	LLPanelPlacesTab()
+	,	mFavoritesInventoryPanel(NULL)
+	,	mLandmarksInventoryPanel(NULL)
+	,	mMyInventoryPanel(NULL)
+	,	mLibraryInventoryPanel(NULL)
+	,	mCurrentSelectedList(NULL)
+	,	mListCommands(NULL)
+	,	mGearFolderMenu(NULL)
+	,	mGearLandmarkMenu(NULL)
+	,	mDirtyFilter(false)
+{
+	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_landmarks.xml");
+}
+
+LLLandmarksPanel::~LLLandmarksPanel()
+{
+}
+
+BOOL LLLandmarksPanel::postBuild()
+{
+	if (!gInventory.isInventoryUsable())
+		return FALSE;
+
+	// mast be called before any other initXXX methods to init Gear menu
+	initListCommandsHandlers();
+
+	U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER);
+	mSortByDate = sort_order & LLInventoryFilter::SO_DATE;
+	initFavoritesInventroyPanel();
+	initLandmarksInventroyPanel();
+	initMyInventroyPanel();
+	initLibraryInventroyPanel();
+
+	gIdleCallbacks.addFunction(LLLandmarksPanel::doIdle, this);
+	return TRUE;
+}
+
+// virtual
+void LLLandmarksPanel::onSearchEdit(const std::string& string)
+{
+	static std::string prev_string("");
+
+	if (prev_string == string) return;
+
+	// show all folders in Landmarks Accordion for empty filter
+	mLandmarksInventoryPanel->setShowFolderState(string.empty() ?
+		LLInventoryFilter::SHOW_ALL_FOLDERS :
+		LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS
+		);
+
+	filter_list(mFavoritesInventoryPanel, string);
+	filter_list(mLandmarksInventoryPanel, string);
+	filter_list(mMyInventoryPanel, string);
+	filter_list(mLibraryInventoryPanel, string);
+
+	prev_string = string;
+	mDirtyFilter = true;
+
+	// give FolderView a chance to be refreshed. So, made all accordions visible
+	for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
+	{
+		LLAccordionCtrlTab* tab = *iter;
+		tab->setVisible(true);
+	}
+}
+
+// virtual
+void LLLandmarksPanel::onShowOnMap()
+{
+	if (NULL == mCurrentSelectedList)
+	{
+		llwarns << "There are no selected list. No actions are performed." << llendl;
+		return;
+	}
+	LLLandmark* landmark = getCurSelectedLandmark();
+	if (!landmark)
+		return;
+
+	LLVector3d landmark_global_pos;
+	if (!landmark->getGlobalPos(landmark_global_pos))
+		return;
+	
+	LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
+	if (!landmark_global_pos.isExactlyZero() && worldmap_instance)
+	{
+		worldmap_instance->trackLocation(landmark_global_pos);
+		LLFloaterReg::showInstance("world_map", "center");
+	}
+}
+
+// virtual
+void LLLandmarksPanel::onTeleport()
+{
+	LLFolderViewItem* current_item = getCurSelectedItem();
+	if (!current_item)
+	{
+		llwarns << "There are no selected list. No actions are performed." << llendl;
+		return;
+	}
+
+	LLFolderViewEventListener* listenerp = current_item->getListener();
+	if (listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK)
+	{
+		listenerp->openItem();
+	}
+}
+
+// virtual
+void LLLandmarksPanel::updateVerbs()
+{
+	if (!isTabVisible()) 
+		return;
+
+	BOOL enabled = isLandmarkSelected();
+	mTeleportBtn->setEnabled(enabled);
+	mShowOnMapBtn->setEnabled(enabled);
+
+	// TODO: mantipov: Uncomment when mShareBtn is supported
+	// Share button should be enabled when neither a folder nor a landmark is selected
+	//mShareBtn->setEnabled(NULL != current_item);
+
+	updateListCommands();
+}
+
+void LLLandmarksPanel::onSelectionChange(LLInventorySubTreePanel* inventory_list, const std::deque<LLFolderViewItem*> &items, BOOL user_action)
+{
+	if (user_action && (items.size() > 0))
+	{
+		deselectOtherThan(inventory_list);
+		mCurrentSelectedList = inventory_list;
+	}
+
+	LLFolderViewItem* current_item = inventory_list->getRootFolder()->getCurSelectedItem();
+	if (!current_item)
+		return;
+
+	updateVerbs();
+}
+
+void LLLandmarksPanel::onSelectorButtonClicked()
+{
+	// TODO: mantipov: update getting of selected item
+	// TODO: bind to "i" button
+	LLFolderViewItem* cur_item = mFavoritesInventoryPanel->getRootFolder()->getCurSelectedItem();
+
+	LLFolderViewEventListener* listenerp = cur_item->getListener();
+	if (listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK)
+	{
+		LLSD key;
+		key["type"] = "landmark";
+		key["id"] = listenerp->getUUID();
+
+		LLSideTray::getInstance()->showPanel("panel_places", key);
+	}
+}
+
+//////////////////////////////////////////////////////////////////////////
+// PROTECTED METHODS
+//////////////////////////////////////////////////////////////////////////
+
+bool LLLandmarksPanel::isLandmarkSelected() const 
+{
+	LLFolderViewItem* current_item = getCurSelectedItem();
+	if(current_item && current_item->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
+	{
+		return true;
+	}
+
+	return false;
+}
+
+bool LLLandmarksPanel::isReceivedFolderSelected() const
+{
+	// Received Folder can be only in Landmarks accordion
+	if (mCurrentSelectedList != mLandmarksInventoryPanel) return false;
+
+	// *TODO: it should be filled with logic when EXT-976 is done.
+
+	llwarns << "Not implemented yet until EXT-976 is done." << llendl;
+
+	return false;
+}
+LLLandmark* LLLandmarksPanel::getCurSelectedLandmark() const
+{
+
+	LLFolderViewItem* cur_item = getCurSelectedItem();
+	if(cur_item && cur_item->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
+	{ 
+		return LLLandmarkActions::getLandmark(cur_item->getListener()->getUUID());
+	}
+	return NULL;
+}
+
+LLFolderViewItem* LLLandmarksPanel::getCurSelectedItem () const 
+{
+	return mCurrentSelectedList ?  mCurrentSelectedList->getRootFolder()->getCurSelectedItem() : NULL;
+}
+
+void LLLandmarksPanel::updateSortOrder(LLInventoryPanel* panel, bool byDate)
+{
+	if(!panel) return; 
+
+	U32 order = panel->getSortOrder();
+	if (byDate)
+	{
+		panel->setSortOrder( order | LLInventoryFilter::SO_DATE );
+	}
+	else 
+	{
+		panel->setSortOrder( order & ~LLInventoryFilter::SO_DATE );
+	}
+}
+
+// virtual
+void LLLandmarksPanel::processParcelInfo(const LLParcelData& parcel_data)
+{
+	//this function will be called after user will try to create a pick for selected landmark.
+	// We have to make request to sever to get parcel_id and snaption_id. 
+	if(isLandmarkSelected())
+	{
+		LLLandmark* landmark  =  getCurSelectedLandmark();
+		LLFolderViewItem* cur_item = getCurSelectedItem();
+		LLUUID id = cur_item->getListener()->getUUID();
+		LLInventoryItem* inv_item =  mCurrentSelectedList->getModel()->getItem(id);
+		if(landmark)
+		{
+			LLPanelPickEdit* panel_pick = LLPanelPickEdit::create();
+			LLVector3d landmark_global_pos;
+			landmark->getGlobalPos(landmark_global_pos);
+
+			// let's toggle pick panel into  panel places
+			LLPanel* panel_places =  LLSideTray::getInstance()->getChild<LLPanel>("panel_places");//-> sidebar_places
+			panel_places->addChild(panel_pick);
+			LLRect paren_rect(panel_places->getRect());
+			panel_pick->reshape(paren_rect.getWidth(),paren_rect.getHeight(), TRUE);
+			panel_pick->setRect(paren_rect);
+			panel_pick->onOpen(LLSD());
+
+			LLPickData data;
+			data.pos_global = landmark_global_pos;
+			data.name = cur_item->getName();
+			data.desc = inv_item->getDescription();
+			data.snapshot_id = parcel_data.snapshot_id;
+			data.parcel_id = parcel_data.parcel_id;
+			panel_pick->setPickData(&data);
+
+			LLSD params;
+			params["parcel_id"] =parcel_data.parcel_id;
+			/* set exit callback to get back onto panel places  
+			 in callback we will make cleaning up( delete pick_panel instance, 
+			 remove landmark panel from observer list
+			*/ 
+			panel_pick->setExitCallback(boost::bind(&LLLandmarksPanel::onPickPanelExit,this,
+					panel_pick, panel_places,params));
+			panel_pick->setSaveCallback(boost::bind(&LLLandmarksPanel::onPickPanelExit,this,
+				panel_pick, panel_places,params));
+			panel_pick->setCancelCallback(boost::bind(&LLLandmarksPanel::onPickPanelExit,this,
+							panel_pick, panel_places,params));
+		}
+	}
+}
+
+// virtual
+void LLLandmarksPanel::setParcelID(const LLUUID& parcel_id)
+{
+	if (!parcel_id.isNull())
+	{
+		LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this);
+		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id);
+	}
+}
+
+// virtual
+void LLLandmarksPanel::setErrorStatus(U32 status, const std::string& reason)
+{
+	llerrs<< "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<llendl;
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+// PRIVATE METHODS
+//////////////////////////////////////////////////////////////////////////
+
+void LLLandmarksPanel::initFavoritesInventroyPanel()
+{
+	mFavoritesInventoryPanel = getChild<LLInventorySubTreePanel>("favorites_list");
+
+	initLandmarksPanel(mFavoritesInventoryPanel);
+
+	initAccordion("tab_favorites", mFavoritesInventoryPanel);
+}
+
+void LLLandmarksPanel::initLandmarksInventroyPanel()
+{
+	mLandmarksInventoryPanel = getChild<LLInventorySubTreePanel>("landmarks_list");
+
+	initLandmarksPanel(mLandmarksInventoryPanel);
+
+	mLandmarksInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
+
+	// subscribe to have auto-rename functionality while creating New Folder
+	mLandmarksInventoryPanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mLandmarksInventoryPanel, _1, _2));
+
+	initAccordion("tab_landmarks", mLandmarksInventoryPanel);
+}
+
+void LLLandmarksPanel::initMyInventroyPanel()
+{
+	mMyInventoryPanel= getChild<LLInventorySubTreePanel>("my_inventory_list");
+
+	initLandmarksPanel(mMyInventoryPanel);
+
+	initAccordion("tab_inventory", mMyInventoryPanel);
+}
+
+void LLLandmarksPanel::initLibraryInventroyPanel()
+{
+	mLibraryInventoryPanel = getChild<LLInventorySubTreePanel>("library_list");
+
+	initLandmarksPanel(mLibraryInventoryPanel);
+
+	initAccordion("tab_library", mLibraryInventoryPanel);
+}
+
+void LLLandmarksPanel::initLandmarksPanel(LLInventorySubTreePanel* inventory_list)
+{
+	inventory_list->setFilterTypes(0x1 << LLInventoryType::IT_LANDMARK);
+	inventory_list->setSelectCallback(boost::bind(&LLLandmarksPanel::onSelectionChange, this, inventory_list, _1, _2));
+
+	inventory_list->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+	updateSortOrder(inventory_list, mSortByDate);
+
+	LLPlacesFolderView* root_folder = dynamic_cast<LLPlacesFolderView*>(inventory_list->getRootFolder());
+	if (root_folder)
+	{
+		root_folder->setupMenuHandle(LLInventoryType::IT_CATEGORY, mGearFolderMenu->getHandle());
+		root_folder->setupMenuHandle(LLInventoryType::IT_LANDMARK, mGearLandmarkMenu->getHandle());
+	}
+
+	// save initial folder state to avoid incorrect work while switching between Landmarks & Teleport History tabs
+	// See EXT-1609.
+	inventory_list->saveFolderState();
+}
+
+void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLInventorySubTreePanel* inventory_list)
+{
+	LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>(accordion_tab_name);
+	mAccordionTabs.push_back(accordion_tab);
+	accordion_tab->setDropDownStateChangedCallback(
+		boost::bind(&LLLandmarksPanel::onAccordionExpandedCollapsed, this, _2, inventory_list));
+}
+
+void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLInventorySubTreePanel* inventory_list)
+{
+	bool expanded = param.asBoolean();
+
+	if(!expanded && (mCurrentSelectedList == inventory_list))
+	{
+		inventory_list->getRootFolder()->clearSelection();
+
+		mCurrentSelectedList = NULL;
+		updateVerbs();
+	}
+}
+
+void LLLandmarksPanel::deselectOtherThan(const LLInventorySubTreePanel* inventory_list)
+{
+	if (inventory_list != mFavoritesInventoryPanel)
+	{
+		mFavoritesInventoryPanel->getRootFolder()->clearSelection();
+	}
+
+	if (inventory_list != mLandmarksInventoryPanel)
+	{
+		mLandmarksInventoryPanel->getRootFolder()->clearSelection();
+	}
+	if (inventory_list != mMyInventoryPanel)
+	{
+		mMyInventoryPanel->getRootFolder()->clearSelection();
+	}
+	if (inventory_list != mLibraryInventoryPanel)
+	{
+		mLibraryInventoryPanel->getRootFolder()->clearSelection();
+	}
+}
+
+// List Commands Handlers
+void LLLandmarksPanel::initListCommandsHandlers()
+{
+	mListCommands = getChild<LLPanel>("bottom_panel");
+
+	mListCommands->childSetAction(OPTIONS_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onActionsButtonClick, this));
+	mListCommands->childSetAction(TRASH_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onTrashButtonClick, this));
+	mListCommands->getChild<LLButton>(ADD_BUTTON_NAME)->setHeldDownCallback(boost::bind(&LLLandmarksPanel::onAddButtonHeldDown, this));
+	static const LLSD add_landmark_command("add_landmark");
+	mListCommands->childSetAction(ADD_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onAddAction, this, add_landmark_command));
+
+	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>(TRASH_BUTTON_NAME);
+	trash_btn->setDragAndDropHandler(boost::bind(&LLLandmarksPanel::handleDragAndDropToTrash, this
+			,	_4 // BOOL drop
+			,	_5 // EDragAndDropType cargo_type
+			,	_7 // EAcceptance* accept
+			));
+
+	mCommitCallbackRegistrar.add("Places.LandmarksGear.Add.Action", boost::bind(&LLLandmarksPanel::onAddAction, this, _2));
+	mCommitCallbackRegistrar.add("Places.LandmarksGear.CopyPaste.Action", boost::bind(&LLLandmarksPanel::onClipboardAction, this, _2));
+	mCommitCallbackRegistrar.add("Places.LandmarksGear.Custom.Action", boost::bind(&LLLandmarksPanel::onCustomAction, this, _2));
+	mCommitCallbackRegistrar.add("Places.LandmarksGear.Folding.Action", boost::bind(&LLLandmarksPanel::onFoldingAction, this, _2));
+	mEnableCallbackRegistrar.add("Places.LandmarksGear.Check", boost::bind(&LLLandmarksPanel::isActionChecked, this, _2));
+	mEnableCallbackRegistrar.add("Places.LandmarksGear.Enable", boost::bind(&LLLandmarksPanel::isActionEnabled, this, _2));
+	mGearLandmarkMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_places_gear_landmark.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	mGearFolderMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_places_gear_folder.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_place_add_button.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+}
+
+
+void LLLandmarksPanel::updateListCommands()
+{
+	bool add_folder_enabled = isActionEnabled("category");
+	bool trash_enabled = isActionEnabled("delete");
+
+	// keep Options & Add Landmark buttons always enabled
+	mListCommands->childSetEnabled(ADD_FOLDER_BUTTON_NAME, add_folder_enabled);
+	mListCommands->childSetEnabled(TRASH_BUTTON_NAME, trash_enabled);
+}
+
+void LLLandmarksPanel::onActionsButtonClick()
+{
+	LLFolderViewItem* cur_item = NULL;
+	if(mCurrentSelectedList)
+		cur_item = mCurrentSelectedList->getRootFolder()->getCurSelectedItem();
+	
+	if(!cur_item)
+		return;
+	
+	LLFolderViewEventListener* listenerp = cur_item->getListener();
+	
+	LLMenuGL* menu  =NULL;
+	if (listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK)
+	{
+		menu = mGearLandmarkMenu;
+	}
+	else if (listenerp->getInventoryType() == LLInventoryType::IT_CATEGORY)
+	{
+		mGearFolderMenu->getChild<LLMenuItemCallGL>("expand")->setVisible(!cur_item->isOpen());
+		mGearFolderMenu->getChild<LLMenuItemCallGL>("collapse")->setVisible(cur_item->isOpen());
+		menu = mGearFolderMenu;
+	}
+	showActionMenu(menu,OPTIONS_BUTTON_NAME);
+}
+
+void LLLandmarksPanel::onAddButtonHeldDown()
+{
+	showActionMenu(mMenuAdd,ADD_BUTTON_NAME);
+}
+
+void LLLandmarksPanel::showActionMenu(LLMenuGL* menu, std::string spawning_view_name)
+{
+	if (menu)
+	{
+		menu->buildDrawLabels();
+		menu->updateParent(LLMenuGL::sMenuContainer);
+		LLView* spawning_view = getChild<LLView> (spawning_view_name);
+		S32 menu_x, menu_y;
+		//show menu in co-ordinates of panel
+		spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this);
+		menu_y += menu->getRect().getHeight();
+		LLMenuGL::showPopup(this, menu, menu_x, menu_y);
+	}
+}
+
+void LLLandmarksPanel::onTrashButtonClick() const
+{
+	onClipboardAction("delete");
+}
+
+void LLLandmarksPanel::onAddAction(const LLSD& userdata) const
+{
+	std::string command_name = userdata.asString();
+	if("add_landmark" == command_name)
+	{
+		if(LLLandmarkActions::landmarkAlreadyExists())
+		{
+			std::string location;
+			LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_FULL);
+			llwarns<<" Landmark already exists at location:  "<< location<<llendl;
+			return;
+		}
+		LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
+	} 
+	else if ("category" == command_name)
+	{
+		LLFolderViewItem* item = getCurSelectedItem();
+		if (item && mCurrentSelectedList == mLandmarksInventoryPanel)
+		{
+			LLFolderViewEventListener* folder_bridge = NULL;
+			if (item-> getListener()->getInventoryType()
+					== LLInventoryType::IT_LANDMARK)
+			{
+				// for a landmark get parent folder bridge
+				folder_bridge = item->getParentFolder()->getListener();
+			}
+			else if (item-> getListener()->getInventoryType()
+					== LLInventoryType::IT_CATEGORY)
+			{
+				// for a folder get its own bridge
+				folder_bridge = item->getListener();
+			}
+
+			menu_create_inventory_item(mCurrentSelectedList->getRootFolder(),
+					dynamic_cast<LLFolderBridge*> (folder_bridge), LLSD(
+							"category"), gInventory.findCategoryUUIDForType(
+							LLAssetType::AT_LANDMARK));
+		}
+	}
+}
+
+void LLLandmarksPanel::onClipboardAction(const LLSD& userdata) const
+{
+	if(!mCurrentSelectedList) 
+		return;
+	std::string command_name = userdata.asString();
+    if("copy_slurl" == command_name)
+	{
+    	LLFolderViewItem* cur_item = getCurSelectedItem();
+		if(cur_item)
+			LLLandmarkActions::copySLURLtoClipboard(cur_item->getListener()->getUUID());
+	}
+	else if ( "paste" == command_name)
+	{
+		mCurrentSelectedList->getRootFolder()->paste();
+	} 
+	else if ( "cut" == command_name)
+	{
+		mCurrentSelectedList->getRootFolder()->cut();
+	}
+	else
+	{
+		mCurrentSelectedList->getRootFolder()->doToSelected(mCurrentSelectedList->getModel(),command_name);
+	}
+}
+
+void LLLandmarksPanel::onFoldingAction(const LLSD& userdata)
+{
+	if(!mCurrentSelectedList) return;
+
+	LLFolderView* root_folder = mCurrentSelectedList->getRootFolder();
+	std::string command_name = userdata.asString();
+
+	if ("expand_all" == command_name)
+	{
+		root_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
+		root_folder->arrangeAll();
+	}
+	else if ("collapse_all" == command_name)
+	{
+		root_folder->closeAllFolders();
+	}
+	else if ( "sort_by_date" == command_name)
+	{
+		mSortByDate = !mSortByDate;
+		updateSortOrder(mLandmarksInventoryPanel, mSortByDate);
+		updateSortOrder(mMyInventoryPanel, mSortByDate);
+		updateSortOrder(mLibraryInventoryPanel, mSortByDate);
+	}
+	else
+	{
+		root_folder->doToSelected(&gInventory, userdata);
+	}
+}
+
+bool LLLandmarksPanel::isActionChecked(const LLSD& userdata) const
+{
+	const std::string command_name = userdata.asString();
+
+	if ( "sort_by_date" == command_name)
+	{
+		return  mSortByDate;
+	}
+
+	return false;
+}
+
+bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
+{
+	std::string command_name = userdata.asString();
+
+
+	LLPlacesFolderView* rootFolderView = mCurrentSelectedList ?
+		static_cast<LLPlacesFolderView*>(mCurrentSelectedList->getRootFolder()) : NULL;
+
+	if (NULL == rootFolderView) return false;
+
+	// disable some commands for multi-selection. EXT-1757
+	if (rootFolderView->getSelectedCount() > 1)
+	{
+		if (   "teleport"		== command_name 
+			|| "more_info"		== command_name
+			|| "rename"			== command_name
+			|| "show_on_map"	== command_name
+			|| "copy_slurl"		== command_name
+			)
+		{
+			return false;
+		}
+
+	}
+
+	// disable some commands for Favorites accordion. EXT-1758
+	if (mCurrentSelectedList == mFavoritesInventoryPanel)
+	{
+		if (   "expand_all"		== command_name
+			|| "collapse_all"	== command_name
+			|| "sort_by_date"	== command_name
+			)
+			return false;
+	}
+
+
+	if("category" == command_name)
+	{
+		// we can add folder only in Landmarks Accordion
+		if (mCurrentSelectedList == mLandmarksInventoryPanel)
+		{
+			// ... but except Received folder
+			return !isReceivedFolderSelected();
+		}
+		else return false;
+	}
+	else if("paste" == command_name || "rename" == command_name || "cut" == command_name || "delete" == command_name)
+	{
+		return canSelectedBeModified(command_name);
+	}
+	else if ( "sort_by_date" == command_name)
+	{
+		return  mSortByDate;
+	}
+	else if("create_pick" == command_name)
+	{
+		return !LLAgentPicksInfo::getInstance()->isPickLimitReached();
+	}
+	else
+	{
+		llwarns << "Unprocessed command has come: " << command_name << llendl;
+	}
+
+	return true;
+}
+
+void LLLandmarksPanel::onCustomAction(const LLSD& userdata)
+{
+	LLFolderViewItem* cur_item = getCurSelectedItem();
+	if(!cur_item)
+		return ;
+	std::string command_name = userdata.asString();
+	if("more_info" == command_name)
+	{
+		cur_item->getListener()->performAction(mCurrentSelectedList->getRootFolder(),mCurrentSelectedList->getModel(),"about");
+	}
+	else if ("teleport" == command_name)
+	{
+		onTeleport();
+	}
+	else if ("show_on_map" == command_name)
+	{
+		onShowOnMap();
+	}
+	else if ("create_pick" == command_name)
+	{
+		LLLandmark* landmark = getCurSelectedLandmark();
+		if(!landmark) return;
+		
+		LLViewerRegion* region = gAgent.getRegion();
+		if (!region) return;
+
+		LLGlobalVec pos_global;
+		LLUUID region_id;
+		landmark->getGlobalPos(pos_global);
+		landmark->getRegionID(region_id);
+		LLVector3 region_pos((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
+						  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
+						  (F32)pos_global.mdV[VZ]);
+
+		LLSD body;
+		std::string url = region->getCapability("RemoteParcelRequest");
+		if (!url.empty())
+		{
+			body["location"] = ll_sd_from_vector3(region_pos);
+			if (!region_id.isNull())
+			{
+				body["region_id"] = region_id;
+			}
+			if (!pos_global.isExactlyZero())
+			{
+				U64 region_handle = to_region_handle(pos_global);
+				body["region_handle"] = ll_sd_from_U64(region_handle);
+			}
+			LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle()));
+		}
+		else 
+		{
+			llwarns << "Can't create pick for landmark for region" << region_id 
+					<< ". Region: "	<< region->getName() 
+					<< " does not support RemoteParcelRequest" << llendl; 
+		}
+	}
+}
+
+/*
+Processes such actions: cut/rename/delete/paste actions
+
+Rules:
+ 1. We can't perform any action in Library
+ 2. For Landmarks we can:
+	- cut/rename/delete in any other accordions
+	- paste - only in Favorites, Landmarks accordions
+ 3. For Folders we can: perform any action in Landmarks accordion, except Received folder
+ 4. We can not paste folders from Clipboard (processed by LLFolderView::canPaste())
+ 5. Check LLFolderView/Inventory Bridges rules
+ */
+bool LLLandmarksPanel::canSelectedBeModified(const std::string& command_name) const
+{
+	// validate own rules first
+
+	// nothing can be modified in Library
+	if (mLibraryInventoryPanel == mCurrentSelectedList) return false;
+
+	bool can_be_modified = false;
+
+	// landmarks can be modified in any other accordion...
+	if (isLandmarkSelected())
+	{
+		can_be_modified = true;
+
+		// we can modify landmarks anywhere except paste to My Inventory
+		if ("paste" == command_name)
+		{
+			can_be_modified = (mCurrentSelectedList != mMyInventoryPanel);
+		}
+	}
+	else
+	{
+		// ...folders only in the Landmarks accordion...
+		can_be_modified = mLandmarksInventoryPanel == mCurrentSelectedList;
+
+		// ...except "Received" folder
+		can_be_modified &= !isReceivedFolderSelected();
+	}
+
+	// then ask LLFolderView permissions
+	if (can_be_modified)
+	{
+		if ("cut" == command_name)
+		{
+			can_be_modified = mCurrentSelectedList->getRootFolder()->canCut();
+		}
+		else if ("rename" == command_name)
+		{
+			can_be_modified = getCurSelectedItem()->getListener()->isItemRenameable();
+		}
+		else if ("delete" == command_name)
+		{
+			can_be_modified = getCurSelectedItem()->getListener()->isItemRemovable();
+		}
+		else if("paste" == command_name)
+		{
+			return mCurrentSelectedList->getRootFolder()->canPaste();
+		}
+		else
+		{
+			llwarns << "Unprocessed command has come: " << command_name << llendl;
+		}
+	}
+
+	return can_be_modified;
+}
+
+void LLLandmarksPanel::onPickPanelExit( LLPanelPickEdit* pick_panel, LLView* owner, const LLSD& params)
+{
+	pick_panel->setVisible(FALSE);
+	owner->removeChild(pick_panel);
+	//we need remove  observer to  avoid  processParcelInfo in the future.
+	LLRemoteParcelInfoProcessor::getInstance()->removeObserver(params["parcel_id"].asUUID(), this);
+
+	delete pick_panel;
+	pick_panel = NULL;
+}
+
+bool LLLandmarksPanel::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept)
+{
+	*accept = ACCEPT_NO;
+
+	switch (cargo_type)
+	{
+
+	case DAD_LANDMARK:
+	case DAD_CATEGORY:
+		{
+			bool is_enabled = isActionEnabled("delete");
+
+			if (is_enabled) *accept = ACCEPT_YES_MULTI;
+
+			if (is_enabled && drop)
+			{
+				onClipboardAction("delete");
+			}
+		}
+		break;
+	default:
+		break;
+	}
+
+	return true;
+}
+
+
+void LLLandmarksPanel::doIdle(void* landmarks_panel)
+{
+	LLLandmarksPanel* panel = (LLLandmarksPanel* ) landmarks_panel;
+
+	if (panel->mDirtyFilter)
+	{
+		panel->updateFilteredAccordions();
+	}
+
+}
+
+void LLLandmarksPanel::updateFilteredAccordions()
+{
+	LLInventoryPanel* inventory_list = NULL;
+	LLAccordionCtrlTab* accordion_tab = NULL;
+	for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
+	{
+		accordion_tab = *iter;
+		inventory_list = dynamic_cast<LLInventorySubTreePanel*> (accordion_tab->getAccordionView());
+		if (NULL == inventory_list) continue;
+		LLFolderView* fv = inventory_list->getRootFolder();
+
+		bool has_visible_children = fv->hasVisibleChildren();
+
+		accordion_tab->setVisible(has_visible_children);
+	}
+
+	// we have to arrange accordion tabs for cases when filter string is less restrictive but 
+	// all items are still filtered.
+	static LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion");
+	accordion->arrange();
+
+	// now filter state is applied to accordion tabs
+	mDirtyFilter = false;
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+// HELPER FUNCTIONS
+//////////////////////////////////////////////////////////////////////////
+static void filter_list(LLInventorySubTreePanel* inventory_list, const std::string& string)
+{
+	if (string == "")
+	{
+		inventory_list->setFilterSubString(LLStringUtil::null);
+
+		// re-open folders that were initially open
+		inventory_list->restoreFolderState();
+	}
+
+	gInventory.startBackgroundFetch();
+
+	if (inventory_list->getFilterSubString().empty() && string.empty())
+	{
+		// current filter and new filter empty, do nothing
+		return;
+	}
+
+	// save current folder open state if no filter currently applied
+	if (inventory_list->getRootFolder()->getFilterSubString().empty())
+	{
+		inventory_list->saveFolderState();
+	}
+
+	// set new filter string
+	inventory_list->setFilterSubString(string);
+}
+// EOF
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
new file mode 100644
index 00000000000..ca567018e7a
--- /dev/null
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -0,0 +1,818 @@
+/** 
+ * @file llsidepanelmaininventory.cpp
+ * @brief Implementation of llsidepanelmaininventory.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llpanelmaininventory.h"
+
+#include "llfloaterinventory.h"
+#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llinventorypanel.h"
+#include "llfiltereditor.h"
+#include "llfloaterreg.h"
+#include "llscrollcontainer.h"
+#include "llsdserialize.h"
+#include "llspinctrl.h"
+#include "lltooldraganddrop.h"
+
+static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory"); // Seraph is this redundant with constructor?
+
+///----------------------------------------------------------------------------
+/// LLFloaterInventoryFinder
+///----------------------------------------------------------------------------
+
+class LLFloaterInventoryFinder : public LLFloater
+{
+public:
+	LLFloaterInventoryFinder( LLPanelMainInventory* inventory_view);
+	virtual void draw();
+	/*virtual*/	BOOL	postBuild();
+	void changeFilter(LLInventoryFilter* filter);
+	void updateElementsFromFilter();
+	BOOL getCheckShowEmpty();
+	BOOL getCheckSinceLogoff();
+
+	static void onTimeAgo(LLUICtrl*, void *);
+	static void onCheckSinceLogoff(LLUICtrl*, void *);
+	static void onCloseBtn(void* user_data);
+	static void selectAllTypes(void* user_data);
+	static void selectNoTypes(void* user_data);
+private:
+	LLPanelMainInventory*	mPanelInventoryDecorated;
+	LLSpinCtrl*			mSpinSinceDays;
+	LLSpinCtrl*			mSpinSinceHours;
+	LLInventoryFilter*	mFilter;
+};
+
+///----------------------------------------------------------------------------
+/// LLPanelMainInventory
+///----------------------------------------------------------------------------
+
+LLPanelMainInventory::LLPanelMainInventory()
+	: LLPanel()
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_INIT);
+	// Menu Callbacks (non contex menus)
+	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelMainInventory::doToSelected, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.CloseAllFolders", boost::bind(&LLPanelMainInventory::closeAllFolders, this));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLPanelMainInventory::doCreate, this, _2));
+ 	mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLPanelMainInventory::newWindow, this));
+	mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLPanelMainInventory::toggleFindOptions, this));
+	mCommitCallbackRegistrar.add("Inventory.ResetFilters", boost::bind(&LLPanelMainInventory::resetFilters, this));
+	mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLPanelMainInventory::setSortBy, this, _2));
+
+	// Controls
+	// *TODO: Just use persistant settings for each of these
+	U32 sort_order = gSavedSettings.getU32("InventorySortOrder");
+	BOOL sort_by_name = ! ( sort_order & LLInventoryFilter::SO_DATE );
+	BOOL sort_folders_by_name = ( sort_order & LLInventoryFilter::SO_FOLDERS_BY_NAME );
+	BOOL sort_system_folders_to_top = ( sort_order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP );
+	
+	gSavedSettings.declareBOOL("Inventory.SortByName", sort_by_name, "Declared in code", FALSE);
+	gSavedSettings.declareBOOL("Inventory.SortByDate", !sort_by_name, "Declared in code", FALSE);
+	gSavedSettings.declareBOOL("Inventory.FoldersAlwaysByName", sort_folders_by_name, "Declared in code", FALSE);
+	gSavedSettings.declareBOOL("Inventory.SystemFoldersToTop", sort_system_folders_to_top, "Declared in code", FALSE);
+	
+	mSavedFolderState = new LLSaveFolderState();
+	mSavedFolderState->setApply(FALSE);
+}
+
+BOOL LLPanelMainInventory::postBuild()
+{
+	gInventory.addObserver(this);
+	
+	mFilterTabs = getChild<LLTabContainer>("inventory filter tabs");
+	mFilterTabs->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterSelected, this));
+	
+	//panel->getFilter()->markDefault();
+
+	// Set up the default inv. panel/filter settings.
+	mActivePanel = getChild<LLInventoryPanel>("All Items");
+	if (mActivePanel)
+	{
+		// "All Items" is the previous only view, so it gets the InventorySortOrder
+		mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder"));
+		mActivePanel->getFilter()->markDefault();
+		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+		mActivePanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mActivePanel, _1, _2));
+	}
+	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
+	if (recent_items_panel)
+	{
+		recent_items_panel->setSinceLogoff(TRUE);
+		recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE);
+		recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+		recent_items_panel->getFilter()->markDefault();
+		recent_items_panel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, recent_items_panel, _1, _2));
+	}
+
+	// Now load the stored settings from disk, if available.
+	std::ostringstream filterSaveName;
+	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
+	llinfos << "LLPanelMainInventory::init: reading from " << filterSaveName << llendl;
+	llifstream file(filterSaveName.str());
+	LLSD savedFilterState;
+	if (file.is_open())
+	{
+		LLSDSerialize::fromXML(savedFilterState, file);
+		file.close();
+
+		// Load the persistent "Recent Items" settings.
+		// Note that the "All Items" settings do not persist.
+		if(recent_items_panel)
+		{
+			if(savedFilterState.has(recent_items_panel->getFilter()->getName()))
+			{
+				LLSD recent_items = savedFilterState.get(
+					recent_items_panel->getFilter()->getName());
+				recent_items_panel->getFilter()->fromLLSD(recent_items);
+			}
+		}
+
+	}
+
+
+	mFilterEditor = getChild<LLFilterEditor>("inventory search editor");
+	if (mFilterEditor)
+	{
+		mFilterEditor->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterEdit, this, _2));
+	}
+
+	// *TODO:Get the cost info from the server
+	const std::string upload_cost("10");
+	childSetLabelArg("Upload Image", "[COST]", upload_cost);
+	childSetLabelArg("Upload Sound", "[COST]", upload_cost);
+	childSetLabelArg("Upload Animation", "[COST]", upload_cost);
+	childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
+	
+	return TRUE;
+}
+
+// Destroys the object
+LLPanelMainInventory::~LLPanelMainInventory( void )
+{
+	// Save the filters state.
+	LLSD filterRoot;
+	LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>("All Items");
+	if (all_items_panel)
+	{
+		LLInventoryFilter* filter = all_items_panel->getFilter();
+		if (filter)
+		{
+			LLSD filterState;
+			filter->toLLSD(filterState);
+			filterRoot[filter->getName()] = filterState;
+		}
+	}
+
+	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
+	if (recent_items_panel)
+	{
+		LLInventoryFilter* filter = recent_items_panel->getFilter();
+		if (filter)
+		{
+			LLSD filterState;
+			filter->toLLSD(filterState);
+			filterRoot[filter->getName()] = filterState;
+		}
+	}
+
+	std::ostringstream filterSaveName;
+	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
+	llofstream filtersFile(filterSaveName.str());
+	if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile))
+	{
+		llwarns << "Could not write to filters save file " << filterSaveName << llendl;
+	}
+	else
+		filtersFile.close();
+
+	gInventory.removeObserver(this);
+	delete mSavedFolderState;
+}
+
+void LLPanelMainInventory::startSearch()
+{
+	// this forces focus to line editor portion of search editor
+	if (mFilterEditor)
+	{
+		mFilterEditor->focusFirstItem(TRUE);
+	}
+}
+
+BOOL LLPanelMainInventory::handleKeyHere(KEY key, MASK mask)
+{
+	LLFolderView* root_folder = mActivePanel ? mActivePanel->getRootFolder() : NULL;
+	if (root_folder)
+	{
+		// first check for user accepting current search results
+		if (mFilterEditor 
+			&& mFilterEditor->hasFocus()
+		    && (key == KEY_RETURN 
+		    	|| key == KEY_DOWN)
+		    && mask == MASK_NONE)
+		{
+			// move focus to inventory proper
+			mActivePanel->setFocus(TRUE);
+			root_folder->scrollToShowSelection();
+			return TRUE;
+		}
+
+		if (mActivePanel->hasFocus() && key == KEY_UP)
+		{
+			startSearch();
+		}
+	}
+
+	return LLPanel::handleKeyHere(key, mask);
+
+}
+
+//----------------------------------------------------------------------------
+// menu callbacks
+
+void LLPanelMainInventory::doToSelected(const LLSD& userdata)
+{
+	getPanel()->getRootFolder()->doToSelected(&gInventory, userdata);
+}
+
+void LLPanelMainInventory::closeAllFolders()
+{
+	getPanel()->getRootFolder()->closeAllFolders();
+}
+
+void LLPanelMainInventory::newWindow()
+{
+	LLFloaterInventory::showAgentInventory();
+}
+
+void LLPanelMainInventory::doCreate(const LLSD& userdata)
+{
+	menu_create_inventory_item(getPanel()->getRootFolder(), NULL, userdata);
+}
+
+void LLPanelMainInventory::resetFilters()
+{
+	LLFloaterInventoryFinder *finder = getFinder();
+	getActivePanel()->getFilter()->resetDefault();
+	if (finder)
+	{
+		finder->updateElementsFromFilter();
+	}
+
+	setFilterTextFromFilter();
+}
+
+void LLPanelMainInventory::setSortBy(const LLSD& userdata)
+{
+	std::string sort_field = userdata.asString();
+	if (sort_field == "name")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		getActivePanel()->setSortOrder( order & ~LLInventoryFilter::SO_DATE );
+			
+		gSavedSettings.setBOOL("Inventory.SortByName", TRUE );
+		gSavedSettings.setBOOL("Inventory.SortByDate", FALSE );
+	}
+	else if (sort_field == "date")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		getActivePanel()->setSortOrder( order | LLInventoryFilter::SO_DATE );
+
+		gSavedSettings.setBOOL("Inventory.SortByName", FALSE );
+		gSavedSettings.setBOOL("Inventory.SortByDate", TRUE );
+	}
+	else if (sort_field == "foldersalwaysbyname")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		if ( order & LLInventoryFilter::SO_FOLDERS_BY_NAME )
+		{
+			order &= ~LLInventoryFilter::SO_FOLDERS_BY_NAME;
+
+			gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", FALSE );
+		}
+		else
+		{
+			order |= LLInventoryFilter::SO_FOLDERS_BY_NAME;
+
+			gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", TRUE );
+		}
+		getActivePanel()->setSortOrder( order );
+	}
+	else if (sort_field == "systemfolderstotop")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		if ( order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP )
+		{
+			order &= ~LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
+
+			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", FALSE );
+		}
+		else
+		{
+			order |= LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
+
+			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", TRUE );
+		}
+		getActivePanel()->setSortOrder( order );
+	}
+}
+
+// static
+BOOL LLPanelMainInventory::filtersVisible(void* user_data)
+{
+	LLPanelMainInventory* self = (LLPanelMainInventory*)user_data;
+	if(!self) return FALSE;
+
+	return self->getFinder() != NULL;
+}
+
+void LLPanelMainInventory::onClearSearch()
+{
+	LLFloater *finder = getFinder();
+	if (mActivePanel)
+	{
+		mActivePanel->setFilterSubString(LLStringUtil::null);
+		mActivePanel->setFilterTypes(0xffffffff);
+	}
+
+	if (finder)
+	{
+		LLFloaterInventoryFinder::selectAllTypes(finder);
+	}
+
+	// re-open folders that were initially open
+	if (mActivePanel)
+	{
+		mSavedFolderState->setApply(TRUE);
+		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+		LLOpenFoldersWithSelection opener;
+		mActivePanel->getRootFolder()->applyFunctorRecursively(opener);
+		mActivePanel->getRootFolder()->scrollToShowSelection();
+	}
+}
+
+void LLPanelMainInventory::onFilterEdit(const std::string& search_string )
+{
+	if (search_string == "")
+	{
+		onClearSearch();
+	}
+	if (!mActivePanel)
+	{
+		return;
+	}
+
+	gInventory.startBackgroundFetch();
+
+	std::string uppercase_search_string = search_string;
+	LLStringUtil::toUpper(uppercase_search_string);
+	if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty())
+	{
+			// current filter and new filter empty, do nothing
+			return;
+	}
+
+	// save current folder open state if no filter currently applied
+	if (!mActivePanel->getRootFolder()->isFilterModified())
+	{
+		mSavedFolderState->setApply(FALSE);
+		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+	}
+
+	// set new filter string
+	mActivePanel->setFilterSubString(uppercase_search_string);
+}
+
+
+ //static
+ BOOL LLPanelMainInventory::incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward)
+ {
+ 	LLPanelMainInventory* active_view = NULL;
+	
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
+	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+	{
+		LLPanelMainInventory* iv = dynamic_cast<LLPanelMainInventory*>(*iter);
+		if (iv)
+		{
+			if (gFocusMgr.childHasKeyboardFocus(iv))
+			{
+				active_view = iv;
+				break;
+			}
+ 		}
+ 	}
+
+ 	if (!active_view)
+ 	{
+ 		return FALSE;
+ 	}
+
+ 	std::string search_string(find_text);
+
+ 	if (search_string.empty())
+ 	{
+ 		return FALSE;
+ 	}
+
+ 	if (active_view->getPanel() &&
+ 		active_view->getPanel()->getRootFolder()->search(first_item, search_string, backward))
+ 	{
+ 		return TRUE;
+ 	}
+
+ 	return FALSE;
+ }
+
+void LLPanelMainInventory::onFilterSelected()
+{
+	// Find my index
+	mActivePanel = (LLInventoryPanel*)childGetVisibleTab("inventory filter tabs");
+
+	if (!mActivePanel)
+	{
+		return;
+	}
+	LLInventoryFilter* filter = mActivePanel->getFilter();
+	LLFloaterInventoryFinder *finder = getFinder();
+	if (finder)
+	{
+		finder->changeFilter(filter);
+	}
+	if (filter->isActive())
+	{
+		// If our filter is active we may be the first thing requiring a fetch so we better start it here.
+		gInventory.startBackgroundFetch();
+	}
+	setFilterTextFromFilter();
+}
+
+const std::string LLPanelMainInventory::getFilterSubString() 
+{ 
+	return mActivePanel->getFilterSubString(); 
+}
+
+void LLPanelMainInventory::setFilterSubString(const std::string& string) 
+{ 
+	mActivePanel->setFilterSubString(string); 
+}
+
+BOOL LLPanelMainInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+										 EDragAndDropType cargo_type,
+										 void* cargo_data,
+										 EAcceptance* accept,
+										 std::string& tooltip_msg)
+{
+	// Check to see if we are auto scrolling from the last frame
+	LLInventoryPanel* panel = (LLInventoryPanel*)this->getActivePanel();
+	BOOL needsToScroll = panel->getScrollableContainer()->autoScroll(x, y);
+	if(mFilterTabs)
+	{
+		if(needsToScroll)
+		{
+			mFilterTabs->startDragAndDropDelayTimer();
+		}
+	}
+	
+	BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+
+	return handled;
+}
+
+void LLPanelMainInventory::changed(U32 mask)
+{
+}
+
+
+void LLPanelMainInventory::setFilterTextFromFilter() 
+{ 
+	mFilterText = mActivePanel->getFilter()->getFilterText(); 
+}
+
+void LLPanelMainInventory::toggleFindOptions()
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_TOGGLE);
+	LLFloater *floater = getFinder();
+	if (!floater)
+	{
+		LLFloaterInventoryFinder * finder = new LLFloaterInventoryFinder(this);
+		mFinderHandle = finder->getHandle();
+		finder->openFloater();
+
+		LLFloater* parent_floater = gFloaterView->getParentFloater(this);
+		if (parent_floater) // Seraph: Fix this, shouldn't be null even for sidepanel
+			parent_floater->addDependentFloater(mFinderHandle);
+		// start background fetch of folders
+		gInventory.startBackgroundFetch();
+	}
+	else
+	{
+		floater->closeFloater();
+	}
+}
+
+void LLPanelMainInventory::setSelectCallback(const LLFolderView::signal_t::slot_type& cb)
+{
+	getChild<LLInventoryPanel>("All Items")->setSelectCallback(cb);
+	getChild<LLInventoryPanel>("Recent Items")->setSelectCallback(cb);
+}
+
+///----------------------------------------------------------------------------
+/// LLFloaterInventoryFinder
+///----------------------------------------------------------------------------
+
+LLFloaterInventoryFinder* LLPanelMainInventory::getFinder() 
+{ 
+	return (LLFloaterInventoryFinder*)mFinderHandle.get();
+}
+
+
+LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* inventory_view) :	
+	LLFloater(LLSD()),
+	mPanelInventoryDecorated(inventory_view),
+	mFilter(inventory_view->getPanel()->getFilter())
+{
+	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml", NULL);
+	updateElementsFromFilter();
+}
+
+
+void LLFloaterInventoryFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_data)
+{
+	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
+	if (!self) return;
+
+	bool since_logoff= self->childGetValue("check_since_logoff");
+	
+	if (!since_logoff && 
+	    !(  self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() ) )
+	{
+		self->mSpinSinceHours->set(1.0f);
+	}	
+}
+BOOL LLFloaterInventoryFinder::postBuild()
+{
+	const LLRect& viewrect = mPanelInventoryDecorated->getRect();
+	setRect(LLRect(viewrect.mLeft - getRect().getWidth(), viewrect.mTop, viewrect.mLeft, viewrect.mTop - getRect().getHeight()));
+
+	childSetAction("All", selectAllTypes, this);
+	childSetAction("None", selectNoTypes, this);
+
+	mSpinSinceHours = getChild<LLSpinCtrl>("spin_hours_ago");
+	childSetCommitCallback("spin_hours_ago", onTimeAgo, this);
+
+	mSpinSinceDays = getChild<LLSpinCtrl>("spin_days_ago");
+	childSetCommitCallback("spin_days_ago", onTimeAgo, this);
+
+	//	mCheckSinceLogoff   = getChild<LLSpinCtrl>("check_since_logoff");
+	childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this);
+
+	childSetAction("Close", onCloseBtn, this);
+
+	updateElementsFromFilter();
+	return TRUE;
+}
+void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)
+{
+	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
+	if (!self) return;
+	
+	bool since_logoff=true;
+	if ( self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() )
+	{
+		since_logoff = false;
+	}
+	self->childSetValue("check_since_logoff", since_logoff);
+}
+
+void LLFloaterInventoryFinder::changeFilter(LLInventoryFilter* filter)
+{
+	mFilter = filter;
+	updateElementsFromFilter();
+}
+
+void LLFloaterInventoryFinder::updateElementsFromFilter()
+{
+	if (!mFilter)
+		return;
+
+	// Get data needed for filter display
+	U32 filter_types = mFilter->getFilterTypes();
+	std::string filter_string = mFilter->getFilterSubString();
+	LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState();
+	U32 hours = mFilter->getHoursAgo();
+
+	// update the ui elements
+	setTitle(mFilter->getName());
+
+	childSetValue("check_animation", (S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION));
+
+	childSetValue("check_calling_card", (S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD));
+	childSetValue("check_clothing", (S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE));
+	childSetValue("check_gesture", (S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE));
+	childSetValue("check_landmark", (S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK));
+	childSetValue("check_notecard", (S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD));
+	childSetValue("check_object", (S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT));
+	childSetValue("check_script", (S32) (filter_types & 0x1 << LLInventoryType::IT_LSL));
+	childSetValue("check_sound", (S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND));
+	childSetValue("check_texture", (S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE));
+	childSetValue("check_snapshot", (S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT));
+	childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS);
+	childSetValue("check_since_logoff", mFilter->isSinceLogoff());
+	mSpinSinceHours->set((F32)(hours % 24));
+	mSpinSinceDays->set((F32)(hours / 24));
+}
+
+void LLFloaterInventoryFinder::draw()
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_DRAW);
+	U32 filter = 0xffffffff;
+	BOOL filtered_by_all_types = TRUE;
+
+	if (!childGetValue("check_animation"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_ANIMATION);
+		filtered_by_all_types = FALSE;
+	}
+
+
+	if (!childGetValue("check_calling_card"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_CALLINGCARD);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_clothing"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_WEARABLE);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_gesture"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_GESTURE);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_landmark"))
+
+
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_LANDMARK);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_notecard"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_NOTECARD);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_object"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_OBJECT);
+		filter &= ~(0x1 << LLInventoryType::IT_ATTACHMENT);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_script"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_LSL);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_sound"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_SOUND);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_texture"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_TEXTURE);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_snapshot"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_SNAPSHOT);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!filtered_by_all_types)
+	{
+		// don't include folders in filter, unless I've selected everything
+		filter &= ~(0x1 << LLInventoryType::IT_CATEGORY);
+	}
+
+	// update the panel, panel will update the filter
+	mPanelInventoryDecorated->getPanel()->setShowFolderState(getCheckShowEmpty() ?
+		LLInventoryFilter::SHOW_ALL_FOLDERS : LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+	mPanelInventoryDecorated->getPanel()->setFilterTypes(filter);
+	if (getCheckSinceLogoff())
+	{
+		mSpinSinceDays->set(0);
+		mSpinSinceHours->set(0);
+	}
+	U32 days = (U32)mSpinSinceDays->get();
+	U32 hours = (U32)mSpinSinceHours->get();
+	if (hours > 24)
+	{
+		days += hours / 24;
+		hours = (U32)hours % 24;
+		mSpinSinceDays->set((F32)days);
+		mSpinSinceHours->set((F32)hours);
+	}
+	hours += days * 24;
+	mPanelInventoryDecorated->getPanel()->setHoursAgo(hours);
+	mPanelInventoryDecorated->getPanel()->setSinceLogoff(getCheckSinceLogoff());
+	mPanelInventoryDecorated->setFilterTextFromFilter();
+
+	LLPanel::draw();
+}
+
+BOOL LLFloaterInventoryFinder::getCheckShowEmpty()
+{
+	return childGetValue("check_show_empty");
+}
+
+BOOL LLFloaterInventoryFinder::getCheckSinceLogoff()
+{
+	return childGetValue("check_since_logoff");
+}
+
+void LLFloaterInventoryFinder::onCloseBtn(void* user_data)
+{
+	LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data;
+	finderp->closeFloater();
+}
+
+// static
+void LLFloaterInventoryFinder::selectAllTypes(void* user_data)
+{
+	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
+	if(!self) return;
+
+	self->childSetValue("check_animation", TRUE);
+	self->childSetValue("check_calling_card", TRUE);
+	self->childSetValue("check_clothing", TRUE);
+	self->childSetValue("check_gesture", TRUE);
+	self->childSetValue("check_landmark", TRUE);
+	self->childSetValue("check_notecard", TRUE);
+	self->childSetValue("check_object", TRUE);
+	self->childSetValue("check_script", TRUE);
+	self->childSetValue("check_sound", TRUE);
+	self->childSetValue("check_texture", TRUE);
+	self->childSetValue("check_snapshot", TRUE);
+}
+
+//static
+void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
+{
+	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
+	if(!self) return;
+
+	self->childSetValue("check_animation", FALSE);
+	self->childSetValue("check_calling_card", FALSE);
+	self->childSetValue("check_clothing", FALSE);
+	self->childSetValue("check_gesture", FALSE);
+	self->childSetValue("check_landmark", FALSE);
+	self->childSetValue("check_notecard", FALSE);
+	self->childSetValue("check_object", FALSE);
+	self->childSetValue("check_script", FALSE);
+	self->childSetValue("check_sound", FALSE);
+	self->childSetValue("check_texture", FALSE);
+	self->childSetValue("check_snapshot", FALSE);
+}
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
new file mode 100644
index 00000000000..75526a3c98f
--- /dev/null
+++ b/indra/newview/llpanelmaininventory.h
@@ -0,0 +1,125 @@
+/** 
+ * @file llpanelmaininventory.h
+ * @brief llpanelmaininventory.h
+ * class definition
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELMAININVENTORY_H
+#define LL_LLPANELMAININVENTORY_H
+
+#include "llpanel.h"
+#include "llinventorymodel.h"
+#include "llfolderview.h"
+
+class LLFolderViewItem;
+class LLInventoryPanel;
+class LLSaveFolderState;
+class LLFilterEditor;
+class LLTabContainer;
+class LLFloaterInventoryFinder;
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLPanelMainInventory
+//
+// This is a panel used to view and control an agent's inventory,
+// including all the fixin's (e.g. AllItems/RecentItems tabs, filter floaters).
+//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLPanelMainInventory : public LLPanel, LLInventoryObserver
+{
+public:
+	friend class LLFloaterInventoryFinder;
+
+	LLPanelMainInventory();
+	~LLPanelMainInventory();
+
+	BOOL postBuild();
+
+	virtual BOOL handleKeyHere(KEY key, MASK mask);
+
+	// Inherited functionality
+	/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+									   EDragAndDropType cargo_type,
+									   void* cargo_data,
+									   EAcceptance* accept,
+									   std::string& tooltip_msg);
+	/*virtual*/ void changed(U32 mask);
+
+	LLInventoryPanel* getPanel() { return mActivePanel; }
+	LLInventoryPanel* getActivePanel() { return mActivePanel; }
+
+	const std::string& getFilterText() const { return mFilterText; }
+	
+	void setSelectCallback(const LLFolderView::signal_t::slot_type& cb);
+
+protected:
+	//
+	// Misc functions
+	//
+	void setFilterTextFromFilter();
+	void startSearch();
+	
+	void toggleFindOptions();
+
+	static BOOL filtersVisible(void* user_data);
+	void onClearSearch();
+	static void onFoldersByName(void *user_data);
+	static BOOL checkFoldersByName(void *user_data);
+	void onFilterEdit(const std::string& search_string );
+	static BOOL incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward);
+	void onFilterSelected();
+
+	const std::string getFilterSubString();
+	void setFilterSubString(const std::string& string);
+	
+	// menu callbacks
+	void doToSelected(const LLSD& userdata);
+	void closeAllFolders();
+	void newWindow();
+	void doCreate(const LLSD& userdata);
+	void resetFilters();
+	void setSortBy(const LLSD& userdata);
+	
+private:
+	LLFloaterInventoryFinder* getFinder();
+
+	LLFilterEditor*				mFilterEditor;
+	LLTabContainer*				mFilterTabs;
+	LLHandle<LLFloater>			mFinderHandle;
+	LLInventoryPanel*			mActivePanel;
+	LLSaveFolderState*			mSavedFolderState;
+
+	std::string					mFilterText;
+};
+
+#endif // LL_LLPANELMAININVENTORY_H
+
+
+
diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h
index 1ab4ff581ee..58d9fe9b76e 100644
--- a/indra/newview/llpanelobject.h
+++ b/indra/newview/llpanelobject.h
@@ -45,7 +45,6 @@ class LLUICtrl;
 class LLButton;
 class LLViewerObject;
 class LLComboBox;
-class LLPanelInventory;
 class LLColorSwatchCtrl;
 class LLTextureCtrl;
 class LLInventoryItem;
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
new file mode 100644
index 00000000000..365a6e632fa
--- /dev/null
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -0,0 +1,1905 @@
+/**
+ * @file llsidepanelinventory.cpp
+ * @brief LLPanelObjectInventory class implementation
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+//*****************************************************************************
+//
+// Implementation of the panel inventory - used to view and control a
+// task's inventory.
+//
+//*****************************************************************************
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelobjectinventory.h"
+
+#include "roles_constants.h"
+
+#include "llagent.h"
+#include "llcallbacklist.h"
+#include "llfloaterbuycurrency.h"
+#include "llfloaterreg.h"
+#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llpreviewanim.h"
+#include "llpreviewgesture.h"
+#include "llpreviewnotecard.h"
+#include "llpreviewscript.h"
+#include "llpreviewsound.h"
+#include "llpreviewtexture.h"
+#include "llscrollcontainer.h"
+#include "llselectmgr.h"
+#include "llstatusbar.h"
+#include "lltrans.h"
+#include "llviewerregion.h"
+#include "llviewerobjectlist.h"
+#include "llviewermessage.h"
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskInvFVBridge
+///----------------------------------------------------------------------------
+
+class LLTaskInvFVBridge : public LLFolderViewEventListener
+{
+protected:
+	LLUUID mUUID;
+	std::string mName;
+	mutable std::string mDisplayName;
+	LLPanelObjectInventory* mPanel;
+	U32 mFlags;
+
+	LLInventoryItem* findItem() const;
+
+public:
+	LLTaskInvFVBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name,
+		U32 flags=0);
+	virtual ~LLTaskInvFVBridge( void ) {}
+
+	virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; }
+	virtual std::string getLabelSuffix() const { return LLStringUtil::null; }
+
+	static LLTaskInvFVBridge* createObjectBridge(LLPanelObjectInventory* panel,
+												 LLInventoryObject* object);
+	void showProperties();
+	void buyItem();
+	S32 getPrice();
+	static bool commitBuyItem(const LLSD& notification, const LLSD& response);
+
+	// LLFolderViewEventListener functionality
+	virtual const std::string& getName() const;
+	virtual const std::string& getDisplayName() const;
+	virtual PermissionMask getPermissionMask() const { return PERM_NONE; }
+	/*virtual*/ LLAssetType::EType getPreferredType() const { return LLAssetType::AT_NONE; }
+	virtual const LLUUID& getUUID() const { return mUUID; }
+	virtual time_t getCreationDate() const;
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual void closeItem() {}
+	virtual void previewItem();
+	virtual void selectItem() {}
+	virtual BOOL isItemRenameable() const;
+	virtual BOOL renameItem(const std::string& new_name);
+	virtual BOOL isItemMovable() const;
+	virtual BOOL isItemRemovable();
+	virtual BOOL removeItem();
+	virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch);
+	virtual void move(LLFolderViewEventListener* parent_listener);
+	virtual BOOL isItemCopyable() const;
+	virtual BOOL copyToClipboard() const;
+	virtual void cutToClipboard();
+	virtual BOOL isClipboardPasteable() const;
+	virtual void pasteFromClipboard();
+	virtual void pasteLinkFromClipboard();
+	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+	virtual BOOL isUpToDate() const { return TRUE; }
+	virtual BOOL hasChildren() const { return FALSE; }
+	virtual LLInventoryType::EType getInventoryType() const { return LLInventoryType::IT_NONE; }
+	// LLDragAndDropBridge functionality
+	virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;
+	virtual BOOL dragOrDrop(MASK mask, BOOL drop,
+							EDragAndDropType cargo_type,
+							void* cargo_data);
+};
+
+LLTaskInvFVBridge::LLTaskInvFVBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name,
+	U32 flags):
+	mUUID(uuid),
+	mName(name),
+	mPanel(panel),
+	mFlags(flags)
+{
+
+}
+
+LLInventoryItem* LLTaskInvFVBridge::findItem() const
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object)
+	{
+		return (LLInventoryItem*)(object->getInventoryObject(mUUID));
+	}
+	return NULL;
+}
+
+void LLTaskInvFVBridge::showProperties()
+{
+	LLFloaterProperties* floater = LLFloaterReg::showTypedInstance<LLFloaterProperties>("properties", mUUID);
+	if (floater)
+	{
+		floater->setObjectID(mPanel->getTaskUUID());
+	}
+}
+
+struct LLBuyInvItemData
+{
+	LLUUID mTaskID;
+	LLUUID mItemID;
+	LLAssetType::EType mType;
+
+	LLBuyInvItemData(const LLUUID& task,
+					 const LLUUID& item,
+					 LLAssetType::EType type) :
+		mTaskID(task), mItemID(item), mType(type)
+	{}
+};
+
+void LLTaskInvFVBridge::buyItem()
+{
+	llinfos << "LLTaskInvFVBridge::buyItem()" << llendl;
+	LLInventoryItem* item = findItem();
+	if(!item || !item->getSaleInfo().isForSale()) return;
+	LLBuyInvItemData* inv = new LLBuyInvItemData(mPanel->getTaskUUID(),
+												 mUUID,
+												 item->getType());
+
+	const LLSaleInfo& sale_info = item->getSaleInfo();
+	const LLPermissions& perm = item->getPermissions();
+	const std::string owner_name; // no owner name currently... FIXME?
+
+	LLViewerObject* obj;
+	if( ( obj = gObjectList.findObject( mPanel->getTaskUUID() ) ) && obj->isAttachment() )
+	{
+		LLNotifications::instance().add("Cannot_Purchase_an_Attachment");
+		llinfos << "Attempt to purchase an attachment" << llendl;
+		delete inv;
+	}
+	else
+	{
+        LLSD args;
+        args["PRICE"] = llformat("%d",sale_info.getSalePrice());
+        args["OWNER"] = owner_name;
+        if (sale_info.getSaleType() != LLSaleInfo::FS_CONTENTS)
+        {
+        	U32 next_owner_mask = perm.getMaskNextOwner();
+        	args["MODIFYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_MODIFY) ? "PermYes" : "PermNo");
+        	args["COPYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_COPY) ? "PermYes" : "PermNo");
+        	args["RESELLPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_TRANSFER) ? "PermYes" : "PermNo");
+        }
+
+		std::string alertdesc;
+       	switch(sale_info.getSaleType())
+       	{
+       	  case LLSaleInfo::FS_ORIGINAL:
+       		alertdesc = owner_name.empty() ? "BuyOriginalNoOwner" : "BuyOriginal";
+       		break;
+       	  case LLSaleInfo::FS_CONTENTS:
+       		alertdesc = owner_name.empty() ? "BuyContentsNoOwner" : "BuyContents";
+       		break;
+		  case LLSaleInfo::FS_COPY:
+       	  default:
+       		alertdesc = owner_name.empty() ? "BuyCopyNoOwner" : "BuyCopy";
+       		break;
+       	}
+
+		LLSD payload;
+		payload["task_id"] = inv->mTaskID;
+		payload["item_id"] = inv->mItemID;
+		payload["type"] = inv->mType;
+		LLNotifications::instance().add(alertdesc, args, payload, LLTaskInvFVBridge::commitBuyItem);
+	}
+}
+
+S32 LLTaskInvFVBridge::getPrice()
+{
+	LLInventoryItem* item = findItem();
+	if(item)
+	{
+		return item->getSaleInfo().getSalePrice();
+	}
+	else
+	{
+		return -1;
+	}
+}
+
+// static
+bool LLTaskInvFVBridge::commitBuyItem(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	if(0 == option)
+	{
+		LLViewerObject* object = gObjectList.findObject(notification["payload"]["task_id"].asUUID());
+		if(!object || !object->getRegion()) return false;
+
+
+		LLMessageSystem* msg = gMessageSystem;
+		msg->newMessageFast(_PREHASH_BuyObjectInventory);
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		msg->nextBlockFast(_PREHASH_Data);
+		msg->addUUIDFast(_PREHASH_ObjectID, notification["payload"]["task_id"].asUUID());
+		msg->addUUIDFast(_PREHASH_ItemID, notification["payload"]["item_id"].asUUID());
+		msg->addUUIDFast(_PREHASH_FolderID,
+			gInventory.findCategoryUUIDForType((LLAssetType::EType)notification["payload"]["type"].asInteger()));
+		msg->sendReliable(object->getRegion()->getHost());
+	}
+	return false;
+}
+
+const std::string& LLTaskInvFVBridge::getName() const
+{
+	return mName;
+}
+
+const std::string& LLTaskInvFVBridge::getDisplayName() const
+{
+	LLInventoryItem* item = findItem();
+	if(item)
+	{
+		mDisplayName.assign(item->getName());
+
+		const LLPermissions& perm(item->getPermissions());
+		BOOL copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
+		BOOL mod  = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE);
+		BOOL xfer = gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE);
+
+		if(!copy)
+		{
+			mDisplayName.append(" (no copy)");
+		}
+		if(!mod)
+		{
+			mDisplayName.append(" (no modify)");
+		}
+		if(!xfer)
+		{
+			mDisplayName.append(" (no transfer)");
+		}
+	}
+
+	return mDisplayName;
+}
+
+// BUG: No creation dates for task inventory
+time_t LLTaskInvFVBridge::getCreationDate() const
+{
+	return 0;
+}
+
+LLUIImagePtr LLTaskInvFVBridge::getIcon() const
+{
+	BOOL item_is_multi = FALSE;
+	if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+	{
+		item_is_multi = TRUE;
+	}
+
+	return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0, item_is_multi );
+}
+
+void LLTaskInvFVBridge::openItem()
+{
+	// no-op.
+	lldebugs << "LLTaskInvFVBridge::openItem()" << llendl;
+}
+
+void LLTaskInvFVBridge::previewItem()
+{
+	openItem();
+}
+
+BOOL LLTaskInvFVBridge::isItemRenameable() const
+{
+	if(gAgent.isGodlike()) return TRUE;
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object)
+	{
+		LLInventoryItem* item;
+		item = (LLInventoryItem*)(object->getInventoryObject(mUUID));
+		if(item && gAgent.allowOperation(PERM_MODIFY, item->getPermissions(),
+										 GP_OBJECT_MANIPULATE, GOD_LIKE))
+		{
+			return TRUE;
+		}
+	}
+	return FALSE;
+}
+
+BOOL LLTaskInvFVBridge::renameItem(const std::string& new_name)
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object)
+	{
+		LLViewerInventoryItem* item = NULL;
+		item = (LLViewerInventoryItem*)object->getInventoryObject(mUUID);
+		if(item && (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(),
+										GP_OBJECT_MANIPULATE, GOD_LIKE)))
+		{
+			LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+			new_item->rename(new_name);
+			object->updateInventory(
+				new_item,
+				TASK_INVENTORY_ITEM_KEY,
+				false);
+		}
+	}
+	return TRUE;
+}
+
+BOOL LLTaskInvFVBridge::isItemMovable() const
+{
+	//LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	//if(object && (object->permModify() || gAgent.isGodlike()))
+	//{
+	//	return TRUE;
+	//}
+	//return FALSE;
+	return TRUE;
+}
+
+BOOL LLTaskInvFVBridge::isItemRemovable()
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object
+	   && (object->permModify() || object->permYouOwner()))
+	{
+		return TRUE;
+	}
+	return FALSE;
+}
+
+bool remove_task_inventory_callback(const LLSD& notification, const LLSD& response, LLPanelObjectInventory* panel)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	LLViewerObject* object = gObjectList.findObject(notification["payload"]["task_id"].asUUID());
+	if(option == 0 && object)
+	{
+		// yes
+		LLSD::array_const_iterator list_end = notification["payload"]["inventory_ids"].endArray();
+		for (LLSD::array_const_iterator list_it = notification["payload"]["inventory_ids"].beginArray();
+			list_it != list_end; 
+			++list_it)
+		{
+			object->removeInventory(list_it->asUUID());
+		}
+
+		// refresh the UI.
+		panel->refresh();
+	}
+	return false;
+}
+
+// helper for remove
+// ! REFACTOR ! two_uuids_list_t is also defined in llinevntorybridge.h, but differently.
+typedef std::pair<LLUUID, std::list<LLUUID> > panel_two_uuids_list_t;
+typedef std::pair<LLPanelObjectInventory*, panel_two_uuids_list_t> remove_data_t;
+BOOL LLTaskInvFVBridge::removeItem()
+{
+	if(isItemRemovable() && mPanel)
+	{
+		LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+		if(object)
+		{
+			if(object->permModify())
+			{
+				// just do it.
+				object->removeInventory(mUUID);
+				return TRUE;
+			}
+			else
+			{
+				remove_data_t* data = new remove_data_t;
+				data->first = mPanel;
+				data->second.first = mPanel->getTaskUUID();
+				data->second.second.push_back(mUUID);
+				LLSD payload;
+				payload["task_id"] = mPanel->getTaskUUID();
+				payload["inventory_ids"].append(mUUID);
+				LLNotifications::instance().add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
+				return FALSE;
+			}
+		}
+	}
+	return FALSE;
+}
+
+void LLTaskInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch)
+{
+	if (!mPanel)
+	{
+		return;
+	}
+
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if (!object)
+	{
+		return;
+	}
+
+	if (!object->permModify())
+	{
+		LLSD payload;
+		payload["task_id"] = mPanel->getTaskUUID();
+		for (S32 i = 0; i < (S32)batch.size(); i++)
+		{
+			LLTaskInvFVBridge* itemp = (LLTaskInvFVBridge*)batch[i];
+			payload["inventory_ids"].append(itemp->getUUID());
+		}
+		LLNotifications::instance().add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
+		
+	}
+	else
+	{
+		for (S32 i = 0; i < (S32)batch.size(); i++)
+		{
+			LLTaskInvFVBridge* itemp = (LLTaskInvFVBridge*)batch[i];
+
+			if(itemp->isItemRemovable())
+			{
+				// just do it.
+				object->removeInventory(itemp->getUUID());
+			}
+		}
+	}
+}
+
+void LLTaskInvFVBridge::move(LLFolderViewEventListener* parent_listener)
+{
+}
+
+BOOL LLTaskInvFVBridge::isItemCopyable() const
+{
+	LLInventoryItem* item = findItem();
+	if(!item) return FALSE;
+	return gAgent.allowOperation(PERM_COPY, item->getPermissions(),
+								GP_OBJECT_MANIPULATE);
+}
+
+BOOL LLTaskInvFVBridge::copyToClipboard() const
+{
+	return FALSE;
+}
+
+void LLTaskInvFVBridge::cutToClipboard()
+{
+}
+
+BOOL LLTaskInvFVBridge::isClipboardPasteable() const
+{
+	return FALSE;
+}
+
+void LLTaskInvFVBridge::pasteFromClipboard()
+{
+}
+
+void LLTaskInvFVBridge::pasteLinkFromClipboard()
+{
+}
+
+BOOL LLTaskInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
+{
+	//llinfos << "LLTaskInvFVBridge::startDrag()" << llendl;
+	if(mPanel)
+	{
+		LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+		if(object)
+		{
+			LLInventoryItem* inv = NULL;
+			if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID)))
+			{
+				const LLPermissions& perm = inv->getPermissions();
+				bool can_copy = gAgent.allowOperation(PERM_COPY, perm,
+														GP_OBJECT_MANIPULATE);
+				if (object->isAttachment() && !can_copy)
+				{
+                    //RN: no copy contents of attachments cannot be dragged out
+                    // due to a race condition and possible exploit where
+                    // attached objects do not update their inventory items
+                    // when their contents are manipulated
+                    return FALSE;
+				}
+				if((can_copy && perm.allowTransferTo(gAgent.getID()))
+				   || object->permYouOwner())
+//				   || gAgent.isGodlike())
+
+				{
+					*type = LLAssetType::lookupDragAndDropType(inv->getType());
+
+					*id = inv->getUUID();
+					return TRUE;
+				}
+			}
+		}
+	}
+	return FALSE;
+}
+
+BOOL LLTaskInvFVBridge::dragOrDrop(MASK mask, BOOL drop,
+								   EDragAndDropType cargo_type,
+								   void* cargo_data)
+{
+	//llinfos << "LLTaskInvFVBridge::dragOrDrop()" << llendl;
+	return FALSE;
+}
+
+// virtual
+void LLTaskInvFVBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if (action == "task_buy")
+	{
+		// Check the price of the item.
+		S32 price = getPrice();
+		if (-1 == price)
+		{
+			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
+		}
+		else
+		{
+			if (price > 0 && price > gStatusBar->getBalance())
+			{
+				LLFloaterBuyCurrency::buyCurrency("This costs", price);
+			}
+			else
+			{
+				buyItem();
+			}
+		}
+	}
+	else if (action == "task_open")
+	{
+		openItem();
+	}
+	else if (action == "task_properties")
+	{
+		showProperties();
+	}
+}
+
+void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	LLInventoryItem* item = findItem();
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	
+	if (!item)
+	{
+		hide_context_entries(menu, items, disabled_items);
+		return;
+	}
+
+	if(gAgent.allowOperation(PERM_OWNER, item->getPermissions(),
+							 GP_OBJECT_MANIPULATE)
+	   && item->getSaleInfo().isForSale())
+	{
+		items.push_back(std::string("Task Buy"));
+
+		std::string label= LLTrans::getString("Buy");
+		// Check the price of the item.
+		S32 price = getPrice();
+		if (-1 == price)
+		{
+			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
+		}
+		else
+		{
+			std::ostringstream info;
+			info << LLTrans::getString("BuyforL$") << price;
+			label.assign(info.str());
+		}
+
+		const LLView::child_list_t *list = menu.getChildList();
+		LLView::child_list_t::const_iterator itor;
+		for (itor = list->begin(); itor != list->end(); ++itor)
+		{
+			std::string name = (*itor)->getName();
+			LLMenuItemCallGL* menu_itemp = dynamic_cast<LLMenuItemCallGL*>(*itor);
+			if (name == "Task Buy" && menu_itemp)
+			{
+				menu_itemp->setLabel(label);
+			}
+		}
+	}
+	else
+	{
+		items.push_back(std::string("Task Open"));
+		if (!isItemCopyable())
+		{
+			disabled_items.push_back(std::string("Task Open"));
+		}
+	}
+	items.push_back(std::string("Task Properties"));
+	if(isItemRenameable())
+	{
+		items.push_back(std::string("Task Rename"));
+	}
+	if(isItemRemovable())
+	{
+		items.push_back(std::string("Task Remove"));
+	}
+
+	hide_context_entries(menu, items, disabled_items);
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskFolderBridge
+///----------------------------------------------------------------------------
+
+class LLTaskCategoryBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskCategoryBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual const std::string& getDisplayName() const { return getName(); }
+	virtual BOOL isItemRenameable() const;
+	virtual BOOL renameItem(const std::string& new_name);
+	virtual BOOL isItemRemovable();
+	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+	virtual BOOL hasChildren() const;
+	virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;
+	virtual BOOL dragOrDrop(MASK mask, BOOL drop,
+							EDragAndDropType cargo_type,
+							void* cargo_data);
+};
+
+LLTaskCategoryBridge::LLTaskCategoryBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskCategoryBridge::getIcon() const
+{
+	return LLUI::getUIImage("Inv_FolderClosed");
+}
+
+BOOL LLTaskCategoryBridge::isItemRenameable() const
+{
+	return FALSE;
+}
+
+BOOL LLTaskCategoryBridge::renameItem(const std::string& new_name)
+{
+	return FALSE;
+}
+
+BOOL LLTaskCategoryBridge::isItemRemovable()
+{
+	return FALSE;
+}
+
+void LLTaskCategoryBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	items.push_back(std::string("Task Open"));
+	hide_context_entries(menu, items, disabled_items);
+}
+
+BOOL LLTaskCategoryBridge::hasChildren() const
+{
+	// return TRUE if we have or do know know if we have children.
+	// *FIX: For now, return FALSE - we will know for sure soon enough.
+	return FALSE;
+}
+
+BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
+{
+	//llinfos << "LLTaskInvFVBridge::startDrag()" << llendl;
+	if(mPanel)
+	{
+		LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+		if(object)
+		{
+			LLInventoryItem* inv = NULL;
+			if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID)))
+			{
+				const LLPermissions& perm = inv->getPermissions();
+				bool can_copy = gAgent.allowOperation(PERM_COPY, perm,
+														GP_OBJECT_MANIPULATE);
+				if((can_copy && perm.allowTransferTo(gAgent.getID()))
+				   || object->permYouOwner())
+//				   || gAgent.isGodlike())
+
+				{
+					*type = LLAssetType::lookupDragAndDropType(inv->getType());
+
+					*id = inv->getUUID();
+					return TRUE;
+				}
+			}
+		}
+	}
+	return FALSE;
+}
+
+BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop,
+									  EDragAndDropType cargo_type,
+									  void* cargo_data)
+{
+	//llinfos << "LLTaskCategoryBridge::dragOrDrop()" << llendl;
+	BOOL accept = FALSE;
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object)
+	{
+		switch(cargo_type)
+		{
+		case DAD_CATEGORY:
+			accept = LLToolDragAndDrop::getInstance()->dadUpdateInventoryCategory(object,drop);
+			break;
+		case DAD_TEXTURE:
+		case DAD_SOUND:
+		case DAD_LANDMARK:
+		case DAD_OBJECT:
+		case DAD_NOTECARD:
+		case DAD_CLOTHING:
+		case DAD_BODYPART:
+		case DAD_ANIMATION:
+		case DAD_GESTURE:
+		case DAD_CALLINGCARD:
+			accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data);
+			if(accept && drop)
+			{
+				LLToolDragAndDrop::dropInventory(object,
+												 (LLViewerInventoryItem*)cargo_data,
+												 LLToolDragAndDrop::getInstance()->getSource(),
+												 LLToolDragAndDrop::getInstance()->getSourceID());
+			}
+			break;
+		case DAD_SCRIPT:
+			// *HACK: In order to resolve SL-22177, we need to block
+			// drags from notecards and objects onto other
+			// objects. uncomment the simpler version when we have
+			// that right.
+			//accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data);
+			if(LLToolDragAndDrop::isInventoryDropAcceptable(
+				   object, (LLViewerInventoryItem*)cargo_data)
+			   && (LLToolDragAndDrop::SOURCE_WORLD != LLToolDragAndDrop::getInstance()->getSource())
+			   && (LLToolDragAndDrop::SOURCE_NOTECARD != LLToolDragAndDrop::getInstance()->getSource()))
+			{
+				accept = TRUE;
+			}
+			if(accept && drop)
+			{
+				LLViewerInventoryItem* item = (LLViewerInventoryItem*)cargo_data;
+				// rez in the script active by default, rez in
+				// inactive if the control key is being held down.
+				BOOL active = ((mask & MASK_CONTROL) == 0);
+				LLToolDragAndDrop::dropScript(object, item, active,
+											  LLToolDragAndDrop::getInstance()->getSource(),
+											  LLToolDragAndDrop::getInstance()->getSourceID());
+			}
+			break;
+		default:
+			break;
+		}
+	}
+	return accept;
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskTextureBridge
+///----------------------------------------------------------------------------
+
+class LLTaskTextureBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskTextureBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name,
+		LLInventoryType::EType it);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+protected:
+	LLInventoryType::EType mInventoryType;
+};
+
+LLTaskTextureBridge::LLTaskTextureBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name,
+	LLInventoryType::EType it) :
+	LLTaskInvFVBridge(panel, uuid, name),
+	mInventoryType(it)
+{
+}
+
+LLUIImagePtr LLTaskTextureBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_TEXTURE, mInventoryType, 0, FALSE);
+}
+
+void LLTaskTextureBridge::openItem()
+{
+	llinfos << "LLTaskTextureBridge::openItem()" << llendl;
+	LLPreviewTexture* preview = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
+	if(preview)
+	{
+		preview->setObjectID(mPanel->getTaskUUID());
+	}
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskSoundBridge
+///----------------------------------------------------------------------------
+
+class LLTaskSoundBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskSoundBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+	static void openSoundPreview(void* data);
+};
+
+LLTaskSoundBridge::LLTaskSoundBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskSoundBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE);
+}
+
+void LLTaskSoundBridge::openItem()
+{
+	openSoundPreview((void*)this);
+}
+
+void LLTaskSoundBridge::openSoundPreview(void* data)
+{
+	LLTaskSoundBridge* self = (LLTaskSoundBridge*)data;
+	if(!self)
+		return;
+
+	LLPreviewSound* preview = LLFloaterReg::showTypedInstance<LLPreviewSound>("preview_sound", LLSD(self->mUUID), TAKE_FOCUS_YES);
+	if (preview)
+	{
+		preview->setObjectID(self->mPanel->getTaskUUID());
+	}
+}
+
+// virtual
+void LLTaskSoundBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if (action == "task_play")
+	{
+		LLInventoryItem* item = findItem();
+		if(item)
+		{
+			send_sound_trigger(item->getAssetUUID(), 1.0);
+		}
+	}
+	LLTaskInvFVBridge::performAction(folder, model, action);
+}
+
+void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	LLInventoryItem* item = findItem();
+	if(!item) return;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	if(item->getPermissions().getOwner() != gAgent.getID()
+	   && item->getSaleInfo().isForSale())
+	{
+		items.push_back(std::string("Task Buy"));
+
+		std::string label= LLTrans::getString("Buy");
+		// Check the price of the item.
+		S32 price = getPrice();
+		if (-1 == price)
+		{
+			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
+		}
+		else
+		{
+			std::ostringstream info;
+			info <<  LLTrans::getString("BuyforL$") << price;
+			label.assign(info.str());
+		}
+
+		const LLView::child_list_t *list = menu.getChildList();
+		LLView::child_list_t::const_iterator itor;
+		for (itor = list->begin(); itor != list->end(); ++itor)
+		{
+			std::string name = (*itor)->getName();
+			LLMenuItemCallGL* menu_itemp = dynamic_cast<LLMenuItemCallGL*>(*itor);
+			if (name == "Task Buy" && menu_itemp)
+			{
+				menu_itemp->setLabel(label);
+			}
+		}
+	}
+	else
+	{
+		items.push_back(std::string("Task Open")); 
+		if (!isItemCopyable())
+		{
+			disabled_items.push_back(std::string("Task Open"));
+		}
+	}
+	items.push_back(std::string("Task Properties"));
+	if(isItemRenameable())
+	{
+		items.push_back(std::string("Task Rename"));
+	}
+	if(isItemRemovable())
+	{
+		items.push_back(std::string("Task Remove"));
+	}
+
+	items.push_back(std::string("Task Play"));
+
+
+	hide_context_entries(menu, items, disabled_items);
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskLandmarkBridge
+///----------------------------------------------------------------------------
+
+class LLTaskLandmarkBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskLandmarkBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+};
+
+LLTaskLandmarkBridge::LLTaskLandmarkBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskLandmarkBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, 0, FALSE);
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskCallingCardBridge
+///----------------------------------------------------------------------------
+
+class LLTaskCallingCardBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskCallingCardBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual BOOL isItemRenameable() const;
+	virtual BOOL renameItem(const std::string& new_name);
+};
+
+LLTaskCallingCardBridge::LLTaskCallingCardBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskCallingCardBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, 0, FALSE);
+}
+
+BOOL LLTaskCallingCardBridge::isItemRenameable() const
+{
+	return FALSE;
+}
+
+BOOL LLTaskCallingCardBridge::renameItem(const std::string& new_name)
+{
+	return FALSE;
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskScriptBridge
+///----------------------------------------------------------------------------
+
+class LLTaskScriptBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskScriptBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	//static BOOL enableIfCopyable( void* userdata );
+};
+
+LLTaskScriptBridge::LLTaskScriptBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskScriptBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
+}
+
+
+class LLTaskLSLBridge : public LLTaskScriptBridge
+{
+public:
+	LLTaskLSLBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual void openItem();
+	virtual BOOL removeItem();
+	//virtual void buildContextMenu(LLMenuGL& menu);
+
+	//static void copyToInventory(void* userdata);
+};
+
+LLTaskLSLBridge::LLTaskLSLBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskScriptBridge(panel, uuid, name)
+{
+}
+
+void LLTaskLSLBridge::openItem()
+{
+	llinfos << "LLTaskLSLBridge::openItem() " << mUUID << llendl;
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(!object || object->isInventoryPending())
+	{
+		return;
+	}
+	LLLiveLSLEditor* preview = LLFloaterReg::showTypedInstance<LLLiveLSLEditor>("preview_scriptedit", LLSD(mUUID), TAKE_FOCUS_YES);
+	if (preview && (object->permModify() || gAgent.isGodlike()))
+	{
+		preview->setObjectID(mPanel->getTaskUUID());
+	}
+}
+
+BOOL LLTaskLSLBridge::removeItem()
+{
+	LLFloaterReg::hideInstance("preview_scriptedit", LLSD(mUUID));
+	return LLTaskInvFVBridge::removeItem();
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskObjectBridge
+///----------------------------------------------------------------------------
+
+class LLTaskObjectBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskObjectBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+};
+
+LLTaskObjectBridge::LLTaskObjectBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskObjectBridge::getIcon() const
+{
+	BOOL item_is_multi = FALSE;
+	if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+	{
+		item_is_multi = TRUE;
+	}
+
+	return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0, item_is_multi);
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskNotecardBridge
+///----------------------------------------------------------------------------
+
+class LLTaskNotecardBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskNotecardBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual BOOL removeItem();
+};
+
+LLTaskNotecardBridge::LLTaskNotecardBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskNotecardBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE);
+}
+
+void LLTaskNotecardBridge::openItem()
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(!object || object->isInventoryPending())
+	{
+		return;
+	}
+	if(object->permModify() || gAgent.isGodlike())
+	{
+		LLPreviewNotecard* preview = LLFloaterReg::showTypedInstance<LLPreviewNotecard>("preview_notecard", LLSD(mUUID), TAKE_FOCUS_YES);
+		if (preview)
+		{
+			preview->setObjectID(mPanel->getTaskUUID());
+		}
+	}
+}
+
+BOOL LLTaskNotecardBridge::removeItem()
+{
+	LLFloaterReg::hideInstance("preview_notecard", LLSD(mUUID));
+	return LLTaskInvFVBridge::removeItem();
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskGestureBridge
+///----------------------------------------------------------------------------
+
+class LLTaskGestureBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskGestureBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual BOOL removeItem();
+};
+
+LLTaskGestureBridge::LLTaskGestureBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskGestureBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE);
+}
+
+void LLTaskGestureBridge::openItem()
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(!object || object->isInventoryPending())
+	{
+		return;
+	}
+	LLPreviewGesture::show(mUUID, mPanel->getTaskUUID());
+}
+
+BOOL LLTaskGestureBridge::removeItem()
+{
+	// Don't need to deactivate gesture because gestures inside objects can never be active.
+	LLFloaterReg::hideInstance("preview_gesture", LLSD(mUUID));
+	return LLTaskInvFVBridge::removeItem();
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskAnimationBridge
+///----------------------------------------------------------------------------
+
+class LLTaskAnimationBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskAnimationBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual BOOL removeItem();
+};
+
+LLTaskAnimationBridge::LLTaskAnimationBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskAnimationBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE);
+}
+
+void LLTaskAnimationBridge::openItem()
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(!object || object->isInventoryPending())
+	{
+		return;
+	}
+
+	LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
+	if (preview && (object->permModify() || gAgent.isGodlike()))
+	{
+		preview->setObjectID(mPanel->getTaskUUID());
+	}
+}
+
+BOOL LLTaskAnimationBridge::removeItem()
+{
+	LLFloaterReg::hideInstance("preview_anim", LLSD(mUUID));
+	return LLTaskInvFVBridge::removeItem();
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskWearableBridge
+///----------------------------------------------------------------------------
+
+class LLTaskWearableBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskWearableBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name,
+		LLAssetType::EType asset_type,
+		U32 flags);
+
+	virtual LLUIImagePtr getIcon() const;
+
+protected:
+	LLAssetType::EType		mAssetType;
+};
+
+LLTaskWearableBridge::LLTaskWearableBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name,
+	LLAssetType::EType asset_type,
+	U32 flags) :
+	LLTaskInvFVBridge(panel, uuid, name, flags),
+	mAssetType( asset_type )
+{
+}
+
+LLUIImagePtr LLTaskWearableBridge::getIcon() const
+{
+	return get_item_icon(mAssetType, LLInventoryType::IT_WEARABLE, mFlags, FALSE );
+}
+
+
+///----------------------------------------------------------------------------
+/// LLTaskInvFVBridge impl
+//----------------------------------------------------------------------------
+
+LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory* panel,
+														 LLInventoryObject* object)
+{
+	LLTaskInvFVBridge* new_bridge = NULL;
+	LLAssetType::EType type = object->getType();
+	LLInventoryItem* item = NULL;
+	switch(type)
+	{
+	case LLAssetType::AT_TEXTURE:
+		item = (LLInventoryItem*)object;
+		new_bridge = new LLTaskTextureBridge(panel,
+											 object->getUUID(),
+											 object->getName(),
+											 item->getInventoryType());
+		break;
+	case LLAssetType::AT_SOUND:
+		new_bridge = new LLTaskSoundBridge(panel,
+										   object->getUUID(),
+										   object->getName());
+		break;
+	case LLAssetType::AT_LANDMARK:
+		new_bridge = new LLTaskLandmarkBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_CALLINGCARD:
+		new_bridge = new LLTaskCallingCardBridge(panel,
+												 object->getUUID(),
+												 object->getName());
+		break;
+	case LLAssetType::AT_SCRIPT:
+		// OLD SCRIPTS DEPRECATED - JC
+		llwarns << "Old script" << llendl;
+		//new_bridge = new LLTaskOldScriptBridge(panel,
+		//									   object->getUUID(),
+		//									   object->getName());
+		break;
+	case LLAssetType::AT_OBJECT:
+		new_bridge = new LLTaskObjectBridge(panel,
+											object->getUUID(),
+											object->getName());
+		break;
+	case LLAssetType::AT_NOTECARD:
+		new_bridge = new LLTaskNotecardBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_ANIMATION:
+		new_bridge = new LLTaskAnimationBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_GESTURE:
+		new_bridge = new LLTaskGestureBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_CLOTHING:
+	case LLAssetType::AT_BODYPART:
+		item = (LLInventoryItem*)object;
+		new_bridge = new LLTaskWearableBridge(panel,
+											  object->getUUID(),
+											  object->getName(),
+											  type,
+											  item->getFlags());
+		break;
+	case LLAssetType::AT_CATEGORY:
+	case LLAssetType::AT_FAVORITE:
+		new_bridge = new LLTaskCategoryBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_LSL_TEXT:
+		new_bridge = new LLTaskLSLBridge(panel,
+										 object->getUUID(),
+										 object->getName());
+		break;
+	
+		break;
+	default:
+		llinfos << "Unhandled inventory type (llassetstorage.h): "
+				<< (S32)type << llendl;
+		break;
+	}
+	return new_bridge;
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLPanelObjectInventory
+///----------------------------------------------------------------------------
+
+static LLDefaultChildRegistry::Register<LLPanelObjectInventory> r("panel_inventory_object");
+
+void do_nothing()
+{
+}
+
+// Default constructor
+LLPanelObjectInventory::LLPanelObjectInventory(const LLPanelObjectInventory::Params& p) :
+	LLPanel(p),
+	mScroller(NULL),
+	mFolders(NULL),
+	mHaveInventory(FALSE),
+	mIsInventoryEmpty(TRUE),
+	mInventoryNeedsUpdate(FALSE)
+{
+	// Setup context menu callbacks
+	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelObjectInventory::doToSelected, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&do_nothing));
+	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&do_nothing));
+	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&do_nothing));
+}
+
+// Destroys the object
+LLPanelObjectInventory::~LLPanelObjectInventory()
+{
+	if (!gIdleCallbacks.deleteFunction(idle, this))
+	{
+		llwarns << "LLPanelObjectInventory::~LLPanelObjectInventory() failed to delete callback" << llendl;
+	}
+}
+
+BOOL LLPanelObjectInventory::postBuild()
+{
+	// clear contents and initialize menus, sets up mFolders
+	reset();
+
+	// Register an idle update callback
+	gIdleCallbacks.addFunction(idle, this);
+
+	return TRUE;
+}
+
+void LLPanelObjectInventory::doToSelected(const LLSD& userdata)
+{
+	mFolders->doToSelected(&gInventory, userdata);
+}
+
+void LLPanelObjectInventory::clearContents()
+{
+	mHaveInventory = FALSE;
+	mIsInventoryEmpty = TRUE;
+	if (LLToolDragAndDrop::getInstance() && LLToolDragAndDrop::getInstance()->getSource() == LLToolDragAndDrop::SOURCE_WORLD)
+	{
+		LLToolDragAndDrop::getInstance()->endDrag();
+	}
+
+	if( mScroller )
+	{
+		// removes mFolders
+		removeChild( mScroller ); //*TODO: Really shouldn't do this during draw()/refresh()
+		mScroller->die();
+		mScroller = NULL;
+		mFolders = NULL;
+	}
+}
+
+
+void LLPanelObjectInventory::reset()
+{
+	clearContents();
+
+	setBorderVisible(FALSE);
+	
+	mCommitCallbackRegistrar.pushScope(); // push local callbacks
+	
+	LLRect dummy_rect(0, 1, 1, 0);
+	LLFolderView::Params p;
+	p.name = "task inventory";
+	p.task_id = getTaskUUID();
+	p.parent_panel = this;
+	mFolders = LLUICtrlFactory::create<LLFolderView>(p);
+	// this ensures that we never say "searching..." or "no items found"
+	mFolders->getFilter()->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
+	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
+
+	LLRect scroller_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
+	LLScrollContainer::Params scroll_p;
+	scroll_p.name("task inventory scroller");
+	scroll_p.rect(scroller_rect);
+	scroll_p.follows.flags(FOLLOWS_ALL);
+	mScroller = LLUICtrlFactory::create<LLScrollContainer>(scroll_p);
+	addChild(mScroller);
+	mScroller->addChild(mFolders);
+	
+	mFolders->setScrollContainer( mScroller );
+	
+	mCommitCallbackRegistrar.popScope();
+}
+
+void LLPanelObjectInventory::inventoryChanged(LLViewerObject* object,
+										InventoryObjectList* inventory,
+										S32 serial_num,
+										void* data)
+{
+	if(!object) return;
+
+	//llinfos << "invetnory arrived: \n"
+	//		<< " panel UUID: " << panel->mTaskUUID << "\n"
+	//		<< " task  UUID: " << object->mID << llendl;
+	if(mTaskUUID == object->mID)
+	{
+		mInventoryNeedsUpdate = TRUE;
+	}
+
+	// refresh any properties floaters that are hanging around.
+	if(inventory)
+	{
+		for (InventoryObjectList::const_iterator iter = inventory->begin();
+			 iter != inventory->end(); )
+		{
+			LLInventoryObject* item = *iter++;
+			LLFloaterProperties* floater = LLFloaterReg::findTypedInstance<LLFloaterProperties>("properites", item->getUUID());
+			if(floater)
+			{
+				floater->refresh();
+			}
+		}
+	}
+}
+
+void LLPanelObjectInventory::updateInventory()
+{
+	//llinfos << "inventory arrived: \n"
+	//		<< " panel UUID: " << panel->mTaskUUID << "\n"
+	//		<< " task  UUID: " << object->mID << llendl;
+	// We're still interested in this task's inventory.
+	std::set<LLUUID> selected_items;
+	BOOL inventory_has_focus = FALSE;
+	if (mHaveInventory && mFolders->getNumSelectedDescendants())
+	{
+		mFolders->getSelectionList(selected_items);
+		inventory_has_focus = gFocusMgr.childHasKeyboardFocus(mFolders);
+	}
+
+	reset();
+
+	LLViewerObject* objectp = gObjectList.findObject(mTaskUUID);
+	if (objectp)
+	{
+		LLInventoryObject* inventory_root = objectp->getInventoryRoot();
+		InventoryObjectList contents;
+		objectp->getInventoryContents(contents);
+		if (inventory_root)
+		{
+			createFolderViews(inventory_root, contents);
+			mHaveInventory = TRUE;
+			mIsInventoryEmpty = FALSE;
+			mFolders->setEnabled(TRUE);
+		}
+		else
+		{
+			// TODO: create an empty inventory
+			mIsInventoryEmpty = TRUE;
+			mHaveInventory = TRUE;
+		}
+	}
+	else
+	{
+		// TODO: create an empty inventory
+		mIsInventoryEmpty = TRUE;
+		mHaveInventory = TRUE;
+	}
+
+	// restore previous selection
+	std::set<LLUUID>::iterator selection_it;
+	BOOL first_item = TRUE;
+	for (selection_it = selected_items.begin(); selection_it != selected_items.end(); ++selection_it)
+	{
+		LLFolderViewItem* selected_item = mFolders->getItemByID(*selection_it);
+		if (selected_item)
+		{
+			//HACK: "set" first item then "change" each other one to get keyboard focus right
+			if (first_item)
+			{
+				mFolders->setSelection(selected_item, TRUE, inventory_has_focus);
+				first_item = FALSE;
+			}
+			else
+			{
+				mFolders->changeSelection(selected_item, TRUE);
+			}
+		}
+	}
+
+	mFolders->requestArrange();
+	mInventoryNeedsUpdate = FALSE;
+}
+
+// *FIX: This is currently a very expensive operation, because we have
+// to iterate through the inventory one time for each category. This
+// leads to an N^2 based on the category count. This could be greatly
+// speeded with an efficient multimap implementation, but we don't
+// have that in our current arsenal.
+void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents)
+{
+	if (!inventory_root)
+	{
+		return;
+	}
+	// Create a visible root category.
+	LLTaskInvFVBridge* bridge = NULL;
+	bridge = LLTaskInvFVBridge::createObjectBridge(this, inventory_root);
+	if(bridge)
+	{
+		LLFolderViewFolder* new_folder = NULL;
+		LLFolderViewFolder::Params p;
+		p.name = inventory_root->getName();
+		p.icon = LLUI::getUIImage("Inv_FolderClosed");
+		p.icon_open = LLUI::getUIImage("Inv_FolderOpen");
+		p.root = mFolders;
+		p.listener = bridge;
+		new_folder = LLUICtrlFactory::create<LLFolderViewFolder>(p);
+		new_folder->addToFolder(mFolders, mFolders);
+		new_folder->toggleOpen();
+
+		createViewsForCategory(&contents, inventory_root, new_folder);
+	}
+}
+
+typedef std::pair<LLInventoryObject*, LLFolderViewFolder*> obj_folder_pair;
+
+void LLPanelObjectInventory::createViewsForCategory(InventoryObjectList* inventory, 
+											  LLInventoryObject* parent,
+											  LLFolderViewFolder* folder)
+{
+	// Find all in the first pass
+	LLDynamicArray<obj_folder_pair*> child_categories;
+	LLTaskInvFVBridge* bridge;
+	LLFolderViewItem* view;
+
+	InventoryObjectList::iterator it = inventory->begin();
+	InventoryObjectList::iterator end = inventory->end();
+	for( ; it != end; ++it)
+	{
+		LLInventoryObject* obj = *it;
+
+		if(parent->getUUID() == obj->getParentUUID())
+		{
+			bridge = LLTaskInvFVBridge::createObjectBridge(this, obj);
+			if(!bridge)
+			{
+				continue;
+			}
+			if(LLAssetType::AT_CATEGORY == obj->getType())
+			{
+				LLFolderViewFolder::Params p;
+				p.name = obj->getName();
+				p.icon = LLUI::getUIImage("Inv_FolderClosed");
+				p.icon_open = LLUI::getUIImage("Inv_FolderOpen");
+				p.root = mFolders;
+				p.listener = bridge;
+				view = LLUICtrlFactory::create<LLFolderViewFolder>(p);
+				child_categories.put(new obj_folder_pair(obj,
+														 (LLFolderViewFolder*)view));
+			}
+			else
+			{
+				LLFolderViewItem::Params params;
+				params.name(obj->getName());
+				params.icon(bridge->getIcon());
+				params.creation_date(bridge->getCreationDate());
+				params.root(mFolders);
+				params.listener(bridge);
+				params.rect(LLRect());
+				view = LLUICtrlFactory::create<LLFolderViewItem> (params);
+			}
+			view->addToFolder(folder, mFolders);
+		}
+	}
+
+	// now, for each category, do the second pass
+	for(S32 i = 0; i < child_categories.count(); i++)
+	{
+		createViewsForCategory(inventory, child_categories[i]->first,
+							   child_categories[i]->second );
+		delete child_categories[i];
+	}
+}
+
+void LLPanelObjectInventory::refresh()
+{
+	//llinfos << "LLPanelObjectInventory::refresh()" << llendl;
+	BOOL has_inventory = FALSE;
+	const BOOL non_root_ok = TRUE;
+	LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(NULL, non_root_ok);
+	if(node)
+	{
+		LLViewerObject* object = node->getObject();
+		if(object && ((LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() == 1)
+					  || (LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1)))
+		{
+			// determine if we need to make a request. Start with a
+			// default based on if we have inventory at all.
+			BOOL make_request = !mHaveInventory;
+
+			// If the task id is different than what we've stored,
+			// then make the request.
+			if(mTaskUUID != object->mID)
+			{
+				mTaskUUID = object->mID;
+				make_request = TRUE;
+
+				// This is a new object so pre-emptively clear the contents
+				// Otherwise we show the old stuff until the update comes in
+				clearContents();
+
+				// Register for updates from this object,
+				registerVOInventoryListener(object,NULL);
+			}
+
+			// Based on the node information, we may need to dirty the
+			// object inventory and get it again.
+			if(node->mValid)
+			{
+				if(node->mInventorySerial != object->getInventorySerial() || object->isInventoryDirty())
+				{
+					make_request = TRUE;
+				}
+			}
+
+			// do the request if necessary.
+			if(make_request)
+			{
+				requestVOInventory();
+			}
+			has_inventory = TRUE;
+		}
+	}
+	if(!has_inventory)
+	{
+		mTaskUUID = LLUUID::null;
+		removeVOInventoryListener();
+		clearContents();
+	}
+	//llinfos << "LLPanelObjectInventory::refresh() " << mTaskUUID << llendl;
+}
+
+void LLPanelObjectInventory::removeSelectedItem()
+{
+	if(mFolders)
+	{
+		mFolders->removeSelectedItems();
+	}
+}
+
+void LLPanelObjectInventory::startRenamingSelectedItem()
+{
+	if(mFolders)
+	{
+		mFolders->startRenamingSelectedItem();
+	}
+}
+
+void LLPanelObjectInventory::draw()
+{
+	LLPanel::draw();
+
+	if(mIsInventoryEmpty)
+	{
+		if((LLUUID::null != mTaskUUID) && (!mHaveInventory))
+		{
+			LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("LoadingContents"), 0,
+													 (S32)(getRect().getWidth() * 0.5f),
+													 10,
+													 LLColor4( 1, 1, 1, 1 ),
+													 LLFontGL::HCENTER,
+													 LLFontGL::BOTTOM);
+		}
+		else if(mHaveInventory)
+		{
+			LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("NoContents"), 0,
+													 (S32)(getRect().getWidth() * 0.5f),
+													 10,
+													 LLColor4( 1, 1, 1, 1 ),
+													 LLFontGL::HCENTER,
+													 LLFontGL::BOTTOM);
+		}
+	}
+}
+
+void LLPanelObjectInventory::deleteAllChildren()
+{
+	mScroller = NULL;
+	mFolders = NULL;
+	LLView::deleteAllChildren();
+}
+
+BOOL LLPanelObjectInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg)
+{
+	if (mFolders && mHaveInventory)
+	{
+		LLFolderViewItem* folderp = mFolders->getNextFromChild(NULL);
+		if (!folderp)
+		{
+			return FALSE;
+		}
+		// Try to pass on unmodified mouse coordinates
+		S32 local_x = x - mFolders->getRect().mLeft;
+		S32 local_y = y - mFolders->getRect().mBottom;
+
+		if (mFolders->pointInView(local_x, local_y))
+		{
+			return mFolders->handleDragAndDrop(local_x, local_y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+		}
+		else
+		{
+			//force mouse coordinates to be inside folder rectangle
+			return mFolders->handleDragAndDrop(5, 1, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+		}
+	}
+	else
+	{
+		return FALSE;
+	}
+}
+
+//static
+void LLPanelObjectInventory::idle(void* user_data)
+{
+	LLPanelObjectInventory* self = (LLPanelObjectInventory*)user_data;
+
+
+	if (self->mInventoryNeedsUpdate)
+	{
+		self->updateInventory();
+	}
+}
diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h
new file mode 100644
index 00000000000..7a39d8fabc4
--- /dev/null
+++ b/indra/newview/llpanelobjectinventory.h
@@ -0,0 +1,102 @@
+/** 
+ * @file llpanelobjectinventory.h
+ * @brief LLPanelObjectInventory class definition
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELOBJECTINVENTORY_H
+#define LL_LLPANELOBJECTINVENTORY_H
+
+#include "llvoinventorylistener.h"
+#include "llpanel.h"
+
+#include "llinventory.h"
+
+class LLScrollContainer;
+class LLFolderView;
+class LLFolderViewFolder;
+class LLViewerObject;
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLPanelObjectInventory
+//
+// This class represents the panel used to view and control a
+// particular task's inventory.
+//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLPanelObjectInventory : public LLPanel, public LLVOInventoryListener
+{
+public:
+	// dummy param block for template registration purposes
+	struct Params : public LLPanel::Params {};
+
+	LLPanelObjectInventory(const Params&);
+	virtual ~LLPanelObjectInventory();
+	
+	virtual BOOL postBuild();
+
+	void doToSelected(const LLSD& userdata);
+	
+	void refresh();
+	const LLUUID& getTaskUUID() { return mTaskUUID;}
+	void removeSelectedItem();
+	void startRenamingSelectedItem();
+
+	LLFolderView* getRootFolder() const { return mFolders; }
+
+	virtual void draw();
+	virtual void deleteAllChildren();
+	virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg);
+	
+	static void idle(void* user_data);
+
+protected:
+	void reset();
+	/*virtual*/ void inventoryChanged(LLViewerObject* object,
+								 InventoryObjectList* inventory,
+								 S32 serial_num,
+								 void* user_data);
+	void updateInventory();
+	void createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents);
+	void createViewsForCategory(InventoryObjectList* inventory,
+								LLInventoryObject* parent,
+								LLFolderViewFolder* folder);
+	void clearContents();
+
+private:
+	LLScrollContainer* mScroller;
+	LLFolderView* mFolders;
+	
+	LLUUID mTaskUUID;
+	BOOL mHaveInventory;
+	BOOL mIsInventoryEmpty;
+	BOOL mInventoryNeedsUpdate;
+};
+
+#endif // LL_LLPANELOBJECTINVENTORY_H
diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp
index 4ac109bf3d2..5a70842a733 100644
--- a/indra/newview/llpanelvolume.cpp
+++ b/indra/newview/llpanelvolume.cpp
@@ -57,7 +57,6 @@
 #include "llfirstuse.h"
 #include "llfocusmgr.h"
 #include "llmanipscale.h"
-#include "llpanelinventory.h"
 #include "llpreviewscript.h"
 #include "llresmgr.h"
 #include "llselectmgr.h"
diff --git a/indra/newview/llpanelvolume.h b/indra/newview/llpanelvolume.h
index 9d197aafa58..7bc935f986f 100644
--- a/indra/newview/llpanelvolume.h
+++ b/indra/newview/llpanelvolume.h
@@ -45,7 +45,6 @@ class LLUICtrl;
 class LLButton;
 class LLViewerObject;
 class LLComboBox;
-class LLPanelInventory;
 class LLColorSwatchCtrl;
 
 class LLPanelVolume : public LLPanel
diff --git a/indra/newview/llplacesinventorybridge.cpp b/indra/newview/llplacesinventorybridge.cpp
index b3b48577278..83443687c92 100644
--- a/indra/newview/llplacesinventorybridge.cpp
+++ b/indra/newview/llplacesinventorybridge.cpp
@@ -38,6 +38,7 @@
 
 #include "llfloaterinventory.h" // for LLInventoryPanel
 #include "llfolderview.h" // for FIRST_SELECTED_ITEM
+#include "llinventorypanel.h"
 
 
 static const std::string LANDMARKS_INVENTORY_LIST_NAME("landmarks_list");
@@ -83,7 +84,7 @@ void LLPlacesLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		// they should be synchronized with Places/My Landmarks/Gear menu. See EXT-1601 
 	}
 
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 }
 
 
@@ -116,7 +117,7 @@ void LLPlacesFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		// repeat parent functionality
  		sSelf = this; // necessary for "New Folder" functionality
 
-		hideContextEntries(menu, items, disabled_items);
+		hide_context_entries(menu, items, disabled_items);
 	}
 }
 
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index ac7abf14485..a6f5465e1b4 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -89,7 +89,6 @@
 #include "lltrans.h"
 #include "llviewercontrol.h"
 #include "llappviewer.h"
-#include "llpanelinventory.h"
 
 const std::string HELLO_LSL =
 	"default\n"
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
new file mode 100644
index 00000000000..8a1b97695d1
--- /dev/null
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -0,0 +1,276 @@
+/**
+ * @file LLSidepanelInventory.cpp
+ * @brief Side Bar "Inventory" panel
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llsidepanelinventory.h"
+
+#include "llagent.h"
+#include "llbutton.h"
+#include "llinventorybridge.h"
+#include "llinventorypanel.h"
+#include "llpanelmaininventory.h"
+#include "llsidepanelobjectinfo.h"
+#include "lltabcontainer.h"
+
+static const S32 LANDMARK_FOLDERS_MENU_WIDTH = 250;
+static const std::string AGENT_INFO_TYPE			= "agent";
+static const std::string CREATE_LANDMARK_INFO_TYPE	= "create_landmark";
+static const std::string LANDMARK_INFO_TYPE			= "landmark";
+static const std::string REMOTE_PLACE_INFO_TYPE		= "remote_place";
+static const std::string TELEPORT_HISTORY_INFO_TYPE	= "teleport_history";
+
+// Helper functions
+static void setAllChildrenVisible(LLView* view, BOOL visible);
+
+static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
+
+LLSidepanelInventory::LLSidepanelInventory()
+	:	LLPanel(),
+		mSidepanelObjectInfo(NULL),
+		mItem(NULL)
+{
+
+	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
+}
+
+LLSidepanelInventory::~LLSidepanelInventory()
+{
+}
+
+BOOL LLSidepanelInventory::postBuild()
+{
+	mInfoBtn = getChild<LLButton>("info_btn");
+	mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this));
+
+	mShareBtn = getChild<LLButton>("share_btn");
+	mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
+
+	mShareBtn = getChild<LLButton>("share_btn");
+	mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
+
+	mWearBtn = getChild<LLButton>("wear_btn");
+	mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this));
+
+	mPlayBtn = getChild<LLButton>("play_btn");
+	mPlayBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onPlayButtonClicked, this));
+
+	mTeleportBtn = getChild<LLButton>("teleport_btn");
+	mTeleportBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onTeleportButtonClicked, this));
+
+	mOverflowBtn = getChild<LLButton>("overflow_btn");
+	mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
+
+	mTabContainer = getChild<LLTabContainer>("Inventory Tabs");
+	mSidepanelObjectInfo = getChild<LLSidepanelObjectInfo>("sidepanel_object_info");
+
+	mPanelMainInventory = getChild<LLPanelMainInventory>("panel_main_inventory");
+	mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
+
+	LLButton* back_btn = mSidepanelObjectInfo->getChild<LLButton>("back_btn");
+	back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
+
+	return TRUE;
+}
+
+void LLSidepanelInventory::onOpen(const LLSD& key)
+{
+	if(mSidepanelObjectInfo == NULL || key.size() == 0)
+		return;
+
+	mItem = NULL;
+
+	LLInventoryItem* item = gInventory.getItem(key["id"].asUUID());
+	if (!item)
+	{
+		return;
+	}
+	setItem(item);
+	toggleObjectInfoPanel(TRUE);
+}
+
+void LLSidepanelInventory::setItem(LLInventoryItem* item)
+{
+	if (!mSidepanelObjectInfo || !item)
+		return;
+
+	mItem = item;
+
+	LLAssetType::EType item_type = mItem->getActualType();
+	if (item_type == LLAssetType::AT_LINK)
+	{
+		mItem = gInventory.getItem(mItem->getLinkedUUID());
+		if (mItem.isNull())
+			return;
+	}
+
+	// Check if item is in agent's inventory and he has the permission to modify it.
+	BOOL is_object_editable = gInventory.isObjectDescendentOf(mItem->getUUID(), gInventory.getRootFolderID()) &&
+		mItem->getPermissions().allowModifyBy(gAgent.getID());
+
+	mInfoBtn->setEnabled(is_object_editable);
+	// mSaveBtn->setEnabled(is_object_editable);
+
+	mSidepanelObjectInfo->displayItemInfo(mItem);
+}
+
+void LLSidepanelInventory::onInfoButtonClicked()
+{
+	LLInventoryItem *item = getSelectedItem();
+	if (item)
+	{
+		setItem(item);
+		toggleObjectInfoPanel(TRUE);
+	}
+}
+
+void LLSidepanelInventory::onShareButtonClicked()
+{
+}
+
+void LLSidepanelInventory::performActionOnSelection(const std::string &action)
+{
+	LLInventoryPanel *panel = mPanelMainInventory->getActivePanel();
+	LLFolderViewItem* current_item = panel->getRootFolder()->getCurSelectedItem();
+	if (!current_item)
+	{
+		return;
+	}
+	current_item->getListener()->performAction(panel->getRootFolder(), panel->getModel(), action);
+}
+
+void LLSidepanelInventory::onWearButtonClicked()
+{
+	performActionOnSelection("wear");
+	performActionOnSelection("attach");
+}
+
+void LLSidepanelInventory::onPlayButtonClicked()
+{
+	performActionOnSelection("activate");
+}
+
+void LLSidepanelInventory::onTeleportButtonClicked()
+{
+	performActionOnSelection("teleport");
+}
+
+void LLSidepanelInventory::onOverflowButtonClicked()
+{
+}
+
+void LLSidepanelInventory::onBackButtonClicked()
+{
+	if (!mSidepanelObjectInfo)
+		return;
+	
+	toggleObjectInfoPanel(FALSE);
+
+	
+	updateVerbs();
+}
+
+void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
+{
+	updateVerbs();
+}
+
+void LLSidepanelInventory::toggleObjectInfoPanel(BOOL visible)
+{
+	if (!mSidepanelObjectInfo)
+		return;
+
+	mSidepanelObjectInfo->setVisible(visible);
+	mTabContainer->setVisible(!visible);
+
+	if (visible)
+	{
+		mSidepanelObjectInfo->reset();
+		mSidepanelObjectInfo->setEditMode(FALSE);
+
+		LLRect rect = getRect();
+		LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
+		mSidepanelObjectInfo->reshape(new_rect.getWidth(),new_rect.getHeight());
+	}
+}
+
+void LLSidepanelInventory::updateVerbs()
+{
+	mInfoBtn->setEnabled(FALSE);
+	mShareBtn->setEnabled(FALSE);
+
+	mWearBtn->setVisible(FALSE);
+	mWearBtn->setEnabled(FALSE);
+	mPlayBtn->setVisible(FALSE);
+	mPlayBtn->setEnabled(FALSE);
+ 	mTeleportBtn->setVisible(FALSE);
+ 	mTeleportBtn->setEnabled(FALSE);
+	
+	const LLInventoryItem *item = getSelectedItem();
+	if (!item)
+		return;
+
+	mInfoBtn->setEnabled(TRUE);
+	mShareBtn->setEnabled(TRUE);
+
+	switch(item->getInventoryType())
+	{
+		case LLInventoryType::IT_WEARABLE:
+		case LLInventoryType::IT_OBJECT:
+		case LLInventoryType::IT_ATTACHMENT:
+			mWearBtn->setVisible(TRUE);
+			mWearBtn->setEnabled(TRUE);
+			break;
+		case LLInventoryType::IT_SOUND:
+		case LLInventoryType::IT_GESTURE:
+		case LLInventoryType::IT_ANIMATION:
+			mPlayBtn->setVisible(TRUE);
+			mPlayBtn->setEnabled(TRUE);
+			break;
+		case LLInventoryType::IT_LANDMARK:
+			mTeleportBtn->setVisible(TRUE);
+			mTeleportBtn->setEnabled(TRUE);
+			break;
+		default:
+			break;
+	}
+}
+
+LLInventoryItem *LLSidepanelInventory::getSelectedItem()
+{
+	LLFolderViewItem* current_item = mPanelMainInventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+	if (!current_item)
+	{
+		return NULL;
+	}
+	const LLUUID &item_id = current_item->getListener()->getUUID();
+	LLInventoryItem *item = gInventory.getItem(item_id);
+	return item;
+}
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
new file mode 100644
index 00000000000..784f5e43b7c
--- /dev/null
+++ b/indra/newview/llsidepanelinventory.h
@@ -0,0 +1,85 @@
+/** 
+ * @file LLSidepanelInventory.h
+ * @brief Side Bar "Inventory" panel
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSIDEPANELINVENTORY_H
+#define LL_LLSIDEPANELINVENTORY_H
+
+#include "llpanel.h"
+
+class LLInventoryItem;
+class LLSidepanelObjectInfo;
+class LLTabContainer;
+class LLPanelMainInventory;
+class LLFolderViewItem;
+
+class LLSidepanelInventory : public LLPanel
+{
+public:
+	LLSidepanelInventory();
+	virtual ~LLSidepanelInventory();
+
+	/*virtual*/ BOOL postBuild();
+	/*virtual*/ void onOpen(const LLSD& key);
+
+	void setItem(LLInventoryItem* item);
+
+protected:
+	LLInventoryItem *getSelectedItem();
+	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
+	void onTabSelected();
+	void toggleObjectInfoPanel(BOOL visible);
+	void updateVerbs();
+	void performActionOnSelection(const std::string &action);
+
+	LLTabContainer*				mTabContainer;
+	LLSidepanelObjectInfo*		mSidepanelObjectInfo;
+	LLPanelMainInventory*		mPanelMainInventory;
+
+	void 						onInfoButtonClicked();
+	void 						onShareButtonClicked();
+	void 						onWearButtonClicked();
+	void 						onPlayButtonClicked();
+	void 						onTeleportButtonClicked();
+	void 						onOverflowButtonClicked();
+	void 						onBackButtonClicked();
+	
+	LLButton*					mInfoBtn;
+	LLButton*					mShareBtn;
+	LLButton*					mWearBtn;
+	LLButton*					mPlayBtn;
+	LLButton*					mTeleportBtn;
+	LLButton*					mOverflowBtn;
+
+	// Pointer to a item
+	LLPointer<LLInventoryItem>	mItem;
+};
+
+#endif //LL_LLSIDEPANELINVENTORY_H
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index b5aec1b80bc..9f0e2057125 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -47,7 +47,9 @@
 #include "llfolderview.h"
 #include "llfoldervieweventlistener.h"
 #include "llinventory.h"
+#include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
+#include "llinventorypanel.h"
 #include "llfloaterinventory.h"
 #include "lllineeditor.h"
 #include "llui.h"
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index e26a0776ff4..e78737fe0d5 100644
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -38,6 +38,7 @@
 
 #include "llbutton.h"
 #include "lliconctrl.h"
+#include "llinventoryfunctions.h"
 #include "llnotify.h"
 #include "lltextbox.h"
 
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 366e5602bd8..470739baa90 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -38,6 +38,7 @@
 
 #include "llagent.h"
 #include "llfoldertype.h"
+#include "llfolderview.h"
 #include "llviewercontrol.h"
 #include "llconsole.h"
 #include "llinventorymodel.h"
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 864cf9d57bb..a2b0923df0c 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -50,6 +50,7 @@
 #include "llfocusmgr.h"
 #include "llfontgl.h"
 #include "llinstantmessage.h"
+#include "llinventorypanel.h"
 #include "llpermissionsflags.h"
 #include "llrect.h"
 #include "llsecondlifeurls.h"
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 320f0f83ff9..0a30b0069e1 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1,5722 +1,5723 @@
-/** 
- * @file llviewermessage.cpp
- * @brief Dumping ground for viewer-side message system callbacks.
- *
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- * 
- * Copyright (c) 2002-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llviewermessage.h"
-
-#include <deque>
-
-#include "llaudioengine.h" 
-#include "indra_constants.h"
-#include "lscript_byteformat.h"
-#include "mean_collision_data.h"
-#include "llfloaterbump.h"
-#include "llassetstorage.h"
-#include "llcachename.h"
-#include "llchat.h"
-#include "lldbstrings.h"
-#include "lleconomy.h"
-#include "llfilepicker.h"
-#include "llfloaterreg.h"
-#include "llfocusmgr.h"
-#include "llfollowcamparams.h"
-#include "llinstantmessage.h"
-#include "llquantize.h"
-#include "llregionflags.h"
-#include "llregionhandle.h"
-#include "llsdserialize.h"
-#include "llstring.h"
-#include "llteleportflags.h"
-#include "lltracker.h"
-#include "lltransactionflags.h"
-#include "llxfermanager.h"
-#include "message.h"
-#include "sound_ids.h"
-#include "lltimer.h"
-#include "llmd5.h"
-
-#include "llagent.h"
-#include "llcallingcard.h"
-#include "llconsole.h"
-#include "llvieweraudio.h"
-#include "llviewercontrol.h"
-#include "lldrawpool.h"
-#include "llfirstuse.h"
-#include "llfloateranimpreview.h"
-#include "llfloaterbuycurrency.h"
-#include "llfloaterbuyland.h"
-#include "llfloaterchat.h"
-#include "llfloaterimagepreview.h"
-#include "llfloaterland.h"
-#include "llfloaterregioninfo.h"
-#include "llfloaterlandholdings.h"
-#include "llurldispatcher.h"
-#include "llfloaterpostcard.h"
-#include "llfloaterpreference.h"
-#include "llfollowcam.h"
-#include "llgroupnotify.h"
-#include "llhudeffect.h"
-#include "llhudeffecttrail.h"
-#include "llhudmanager.h"
-#include "llimpanel.h"
-#include "llinventorymodel.h"
-#include "llfloaterinventory.h"
-#include "llmenugl.h"
-#include "llmoveview.h"
-#include "llmutelist.h"
-#include "llnearbychat.h"
-#include "llnotifications.h"
-#include "llnotify.h"
-#include "llpanelgrouplandmoney.h"
-#include "llpanelplaces.h"
-#include "llrecentpeople.h"
-#include "llselectmgr.h"
-#include "llsidetray.h"
-#include "llstartup.h"
-#include "llsky.h"
-#include "llslurl.h"
-#include "llstatenums.h"
-#include "llstatusbar.h"
-#include "llimview.h"
-#include "lltool.h"
-#include "lltoolbar.h"
-#include "lltoolmgr.h"
-#include "lltrans.h"
-#include "llui.h"			// for make_ui_sound
-#include "lluploaddialog.h"
-#include "llviewercamera.h"
-#include "llviewergenericmessage.h"
-#include "llviewerinventory.h"
-#include "llviewermenu.h"
-#include "llviewerobject.h"
-#include "llviewerobjectlist.h"
-#include "llviewerparcelmgr.h"
-#include "llviewerpartsource.h"
-#include "llviewerregion.h"
-#include "llviewerstats.h"
-#include "llviewertexteditor.h"
-#include "llviewerthrottle.h"
-#include "llviewerwindow.h"
-#include "llvlmanager.h"
-#include "llvoavatarself.h"
-#include "llvotextbubble.h"
-#include "llweb.h"
-#include "llworld.h"
-#include "pipeline.h"
-#include "llappviewer.h"
-#include "llfloaterworldmap.h"
-#include "llviewerdisplay.h"
-#include "llkeythrottle.h"
-#include "llgroupactions.h"
-#include "llagentui.h"
-#include "llpanelblockedlist.h"
-#include "llpanelplaceinfo.h"
-
-#include <boost/tokenizer.hpp>
-#include <boost/algorithm/string/split.hpp>
-
-#if LL_WINDOWS // For Windows specific error handler
-#include "llwindebug.h"	// For the invalid message handler
-#endif
-
-//#include "llnearbychathistory.h"
-#include "llnotificationmanager.h"
-
-//
-// Constants
-//
-const F32 BIRD_AUDIBLE_RADIUS = 32.0f;
-const F32 SIT_DISTANCE_FROM_TARGET = 0.25f;
-static const F32 LOGOUT_REPLY_TIME = 3.f;	// Wait this long after LogoutReply before quitting.
-
-// Determine how quickly residents' scripts can issue question dialogs
-// Allow bursts of up to 5 dialogs in 10 seconds. 10*2=20 seconds recovery if throttle kicks in
-static const U32 LLREQUEST_PERMISSION_THROTTLE_LIMIT	= 5;     // requests
-static const F32 LLREQUEST_PERMISSION_THROTTLE_INTERVAL	= 10.0f; // seconds
-
-extern BOOL gDebugClicks;
-
-// function prototypes
-void open_offer(const std::vector<LLUUID>& items, const std::string& from_name);
-bool check_offer_throttle(const std::string& from_name, bool check_only);
-
-//inventory offer throttle globals
-LLFrameTimer gThrottleTimer;
-const U32 OFFER_THROTTLE_MAX_COUNT=5; //number of items per time period
-const F32 OFFER_THROTTLE_TIME=10.f; //time period in seconds
-
-//script permissions
-const std::string SCRIPT_QUESTIONS[SCRIPT_PERMISSION_EOF] = 
-	{ 
-		"ScriptTakeMoney",
-		"ActOnControlInputs",
-		"RemapControlInputs",
-		"AnimateYourAvatar",
-		"AttachToYourAvatar",
-		"ReleaseOwnership",
-		"LinkAndDelink",
-		"AddAndRemoveJoints",
-		"ChangePermissions",
-		"TrackYourCamera",
-		"ControlYourCamera"
-	};
-
-const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] = 
-{
-	TRUE,	// ScriptTakeMoney,
-	FALSE,	// ActOnControlInputs
-	FALSE,	// RemapControlInputs
-	FALSE,	// AnimateYourAvatar
-	FALSE,	// AttachToYourAvatar
-	FALSE,	// ReleaseOwnership,
-	FALSE,	// LinkAndDelink,
-	FALSE,	// AddAndRemoveJoints
-	FALSE,	// ChangePermissions
-	FALSE,	// TrackYourCamera,
-	FALSE	// ControlYourCamera
-};
-
-bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotification::getSelectedOption(notification, response);
-	LLUUID fid;
-	LLMessageSystem* msg = gMessageSystem;
-	const LLSD& payload = notification["payload"];
-
-	// add friend to recent people list
-	LLRecentPeople::instance().add(payload["from_id"]);
-
-	switch(option)
-	{
-	case 0:
-		// accept
-		LLAvatarTracker::formFriendship(payload["from_id"]);
-
-		fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
-
-		// This will also trigger an onlinenotification if the user is online
-		msg->newMessageFast(_PREHASH_AcceptFriendship);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->nextBlockFast(_PREHASH_TransactionBlock);
-		msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]);
-		msg->nextBlockFast(_PREHASH_FolderData);
-		msg->addUUIDFast(_PREHASH_FolderID, fid);
-		msg->sendReliable(LLHost(payload["sender"].asString()));
-		break;
-	case 1:
-		// decline
-		// We no longer notify other viewers, but we DO still send
-		// the rejection to the simulator to delete the pending userop.
-		msg->newMessageFast(_PREHASH_DeclineFriendship);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->nextBlockFast(_PREHASH_TransactionBlock);
-		msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]);
-		msg->sendReliable(LLHost(payload["sender"].asString()));
-		break;
-	default:
-		// close button probably, possibly timed out
-		break;
-	}
-
-	return false;
-}
-static LLNotificationFunctorRegistration friendship_offer_callback_reg("OfferFriendship", friendship_offer_callback);
-static LLNotificationFunctorRegistration friendship_offer_callback_reg_nm("OfferFriendshipNoMessage", friendship_offer_callback);
-
-//const char BUSY_AUTO_RESPONSE[] =	"The Resident you messaged is in 'busy mode' which means they have "
-//									"requested not to be disturbed. Your message will still be shown in their IM "
-//									"panel for later viewing.";
-
-//
-// Functions
-//
-
-void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_group,
-				S32 trx_type, const std::string& desc)
-{
-	if(0 == amount || !region) return;
-	amount = abs(amount);
-	LL_INFOS("Messaging") << "give_money(" << uuid << "," << amount << ")"<< LL_ENDL;
-	if(can_afford_transaction(amount))
-	{
-//		gStatusBar->debitBalance(amount);
-		LLMessageSystem* msg = gMessageSystem;
-		msg->newMessageFast(_PREHASH_MoneyTransferRequest);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-        msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->nextBlockFast(_PREHASH_MoneyData);
-		msg->addUUIDFast(_PREHASH_SourceID, gAgent.getID() );
-		msg->addUUIDFast(_PREHASH_DestID, uuid);
-		msg->addU8Fast(_PREHASH_Flags, pack_transaction_flags(FALSE, is_group));
-		msg->addS32Fast(_PREHASH_Amount, amount);
-		msg->addU8Fast(_PREHASH_AggregatePermNextOwner, (U8)LLAggregatePermissions::AP_EMPTY);
-		msg->addU8Fast(_PREHASH_AggregatePermInventory, (U8)LLAggregatePermissions::AP_EMPTY);
-		msg->addS32Fast(_PREHASH_TransactionType, trx_type );
-		msg->addStringFast(_PREHASH_Description, desc);
-		msg->sendReliable(region->getHost());
-	}
-	else
-	{
-		LLFloaterBuyCurrency::buyCurrency("Giving", amount);
-	}
-}
-
-void send_complete_agent_movement(const LLHost& sim_host)
-{
-	LLMessageSystem* msg = gMessageSystem;
-	msg->newMessageFast(_PREHASH_CompleteAgentMovement);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->addU32Fast(_PREHASH_CircuitCode, msg->mOurCircuitCode);
-	msg->sendReliable(sim_host);
-}
-
-void process_logout_reply(LLMessageSystem* msg, void**)
-{
-	// The server has told us it's ok to quit.
-	LL_DEBUGS("Messaging") << "process_logout_reply" << LL_ENDL;
-
-	LLUUID agent_id;
-	msg->getUUID("AgentData", "AgentID", agent_id);
-	LLUUID session_id;
-	msg->getUUID("AgentData", "SessionID", session_id);
-	if((agent_id != gAgent.getID()) || (session_id != gAgent.getSessionID()))
-	{
-		LL_WARNS("Messaging") << "Bogus Logout Reply" << LL_ENDL;
-	}
-
-	LLInventoryModel::update_map_t parents;
-	S32 count = msg->getNumberOfBlocksFast( _PREHASH_InventoryData );
-	for(S32 i = 0; i < count; ++i)
-	{
-		LLUUID item_id;
-		msg->getUUIDFast(_PREHASH_InventoryData, _PREHASH_ItemID, item_id, i);
-
-		if( (1 == count) && item_id.isNull() )
-		{
-			// Detect dummy item.  Indicates an empty list.
-			break;
-		}
-
-		// We do not need to track the asset ids, just account for an
-		// updated inventory version.
-		LL_INFOS("Messaging") << "process_logout_reply itemID=" << item_id << LL_ENDL;
-		LLInventoryItem* item = gInventory.getItem( item_id );
-		if( item )
-		{
-			parents[item->getParentUUID()] = 0;
-			gInventory.addChangedMask(LLInventoryObserver::INTERNAL, item_id);
-		}
-		else
-		{
-			LL_INFOS("Messaging") << "process_logout_reply item not found: " << item_id << LL_ENDL;
-		}
-	}
-    LLAppViewer::instance()->forceQuit();
-}
-
-void process_layer_data(LLMessageSystem *mesgsys, void **user_data)
-{
-	LLViewerRegion *regionp = LLWorld::getInstance()->getRegion(mesgsys->getSender());
-
-	if (!regionp || gNoRender)
-	{
-		return;
-	}
-
-
-	S32 size;
-	S8 type;
-
-	mesgsys->getS8Fast(_PREHASH_LayerID, _PREHASH_Type, type);
-	size = mesgsys->getSizeFast(_PREHASH_LayerData, _PREHASH_Data);
-	if (0 == size)
-	{
-		LL_WARNS("Messaging") << "Layer data has zero size." << LL_ENDL;
-		return;
-	}
-	if (size < 0)
-	{
-		// getSizeFast() is probably trying to tell us about an error
-		LL_WARNS("Messaging") << "getSizeFast() returned negative result: "
-			<< size
-			<< LL_ENDL;
-		return;
-	}
-	U8 *datap = new U8[size];
-	mesgsys->getBinaryDataFast(_PREHASH_LayerData, _PREHASH_Data, datap, size);
-	LLVLData *vl_datap = new LLVLData(regionp, type, datap, size);
-	if (mesgsys->getReceiveCompressedSize())
-	{
-		gVLManager.addLayerData(vl_datap, mesgsys->getReceiveCompressedSize());
-	}
-	else
-	{
-		gVLManager.addLayerData(vl_datap, mesgsys->getReceiveSize());
-	}
-}
-
-// S32 exported_object_count = 0;
-// S32 exported_image_count = 0;
-// S32 current_object_count = 0;
-// S32 current_image_count = 0;
-
-// extern LLNotifyBox *gExporterNotify;
-// extern LLUUID gExporterRequestID;
-// extern std::string gExportDirectory;
-
-// extern LLUploadDialog *gExportDialog;
-
-// std::string gExportedFile;
-
-// std::map<LLUUID, std::string> gImageChecksums;
-
-// void export_complete()
-// {
-// 		LLUploadDialog::modalUploadFinished();
-// 		gExporterRequestID.setNull();
-// 		gExportDirectory = "";
-
-// 		LLFILE* fXML = LLFile::fopen(gExportedFile, "rb");		/* Flawfinder: ignore */
-// 		fseek(fXML, 0, SEEK_END);
-// 		long length = ftell(fXML);
-// 		fseek(fXML, 0, SEEK_SET);
-// 		U8 *buffer = new U8[length + 1];
-// 		size_t nread = fread(buffer, 1, length, fXML);
-// 		if (nread < (size_t) length)
-// 		{
-// 			LL_WARNS("Messaging") << "Short read" << LL_ENDL;
-// 		}
-// 		buffer[nread] = '\0';
-// 		fclose(fXML);
-
-// 		char *pos = (char *)buffer;
-// 		while ((pos = strstr(pos+1, "<sl:image ")) != 0)
-// 		{
-// 			char *pos_check = strstr(pos, "checksum=\"");
-
-// 			if (pos_check)
-// 			{
-// 				char *pos_uuid = strstr(pos_check, "\">");
-
-// 				if (pos_uuid)
-// 				{
-// 					char image_uuid_str[UUID_STR_SIZE];		/* Flawfinder: ignore */
-// 					memcpy(image_uuid_str, pos_uuid+2, UUID_STR_SIZE-1);		/* Flawfinder: ignore */
-// 					image_uuid_str[UUID_STR_SIZE-1] = 0;
-					
-// 					LLUUID image_uuid(image_uuid_str);
-
-// 					LL_INFOS("Messaging") << "Found UUID: " << image_uuid << LL_ENDL;
-
-// 					std::map<LLUUID, std::string>::iterator itor = gImageChecksums.find(image_uuid);
-// 					if (itor != gImageChecksums.end())
-// 					{
-// 						LL_INFOS("Messaging") << "Replacing with checksum: " << itor->second << LL_ENDL;
-// 						if (!itor->second.empty())
-// 						{
-// 							memcpy(&pos_check[10], itor->second.c_str(), 32);		/* Flawfinder: ignore */
-// 						}
-// 					}
-// 				}
-// 			}
-// 		}
-
-// 		LLFILE* fXMLOut = LLFile::fopen(gExportedFile, "wb");		/* Flawfinder: ignore */
-// 		if (fwrite(buffer, 1, length, fXMLOut) != length)
-// 		{
-// 			LL_WARNS("Messaging") << "Short write" << LL_ENDL;
-// 		}
-// 		fclose(fXMLOut);
-
-// 		delete [] buffer;
-// }
-
-
-// void exported_item_complete(const LLTSCode status, void *user_data)
-// {
-// 	//std::string *filename = (std::string *)user_data;
-
-// 	if (status < LLTS_OK)
-// 	{
-// 		LL_WARNS("Messaging") << "Export failed!" << LL_ENDL;
-// 	}
-// 	else
-// 	{
-// 		++current_object_count;
-// 		if (current_image_count == exported_image_count && current_object_count == exported_object_count)
-// 		{
-// 			LL_INFOS("Messaging") << "*** Export complete ***" << LL_ENDL;
-
-// 			export_complete();
-// 		}
-// 		else
-// 		{
-// 			gExportDialog->setMessage(llformat("Exported %d/%d object files, %d/%d textures.", current_object_count, exported_object_count, current_image_count, exported_image_count));
-// 		}
-// 	}
-// }
-
-// struct exported_image_info
-// {
-// 	LLUUID image_id;
-// 	std::string filename;
-// 	U32 image_num;
-// };
-
-// void exported_j2c_complete(const LLTSCode status, void *user_data)
-// {
-// 	exported_image_info *info = (exported_image_info *)user_data;
-// 	LLUUID image_id = info->image_id;
-// 	U32 image_num = info->image_num;
-// 	std::string filename = info->filename;
-// 	delete info;
-
-// 	if (status < LLTS_OK)
-// 	{
-// 		LL_WARNS("Messaging") << "Image download failed!" << LL_ENDL;
-// 	}
-// 	else
-// 	{
-// 		LLFILE* fIn = LLFile::fopen(filename, "rb");		/* Flawfinder: ignore */
-// 		if (fIn) 
-// 		{
-// 			LLPointer<LLImageJ2C> ImageUtility = new LLImageJ2C;
-// 			LLPointer<LLImageTGA> TargaUtility = new LLImageTGA;
-
-// 			fseek(fIn, 0, SEEK_END);
-// 			S32 length = ftell(fIn);
-// 			fseek(fIn, 0, SEEK_SET);
-// 			U8 *buffer = ImageUtility->allocateData(length);
-// 			if (fread(buffer, 1, length, fIn) != length)
-// 			{
-// 				LL_WARNS("Messaging") << "Short read" << LL_ENDL;
-// 			}
-// 			fclose(fIn);
-// 			LLFile::remove(filename);
-
-// 			// Convert to TGA
-// 			LLPointer<LLImageRaw> image = new LLImageRaw();
-
-// 			ImageUtility->updateData();
-// 			ImageUtility->decode(image, 100000.0f);
-			
-// 			TargaUtility->encode(image);
-// 			U8 *data = TargaUtility->getData();
-// 			S32 data_size = TargaUtility->getDataSize();
-
-// 			std::string file_path = gDirUtilp->getDirName(filename);
-			
-// 			std::string output_file = llformat("%s/image-%03d.tga", file_path.c_str(), image_num);//filename;
-// 			//S32 name_len = output_file.length();
-// 			//strcpy(&output_file[name_len-3], "tga");
-// 			LLFILE* fOut = LLFile::fopen(output_file, "wb");		/* Flawfinder: ignore */
-// 			char md5_hash_string[33];		/* Flawfinder: ignore */
-// 			strcpy(md5_hash_string, "00000000000000000000000000000000");		/* Flawfinder: ignore */
-// 			if (fOut)
-// 			{
-// 				if (fwrite(data, 1, data_size, fOut) != data_size)
-// 				{
-// 					LL_WARNS("Messaging") << "Short write" << LL_ENDL;
-// 				}
-// 				fseek(fOut, 0, SEEK_SET);
-// 				fclose(fOut);
-// 				fOut = LLFile::fopen(output_file, "rb");		/* Flawfinder: ignore */
-// 				LLMD5 my_md5_hash(fOut);
-// 				my_md5_hash.hex_digest(md5_hash_string);
-// 			}
-
-// 			gImageChecksums.insert(std::pair<LLUUID, std::string>(image_id, md5_hash_string));
-// 		}
-// 	}
-
-// 	++current_image_count;
-// 	if (current_image_count == exported_image_count && current_object_count == exported_object_count)
-// 	{
-// 		LL_INFOS("Messaging") << "*** Export textures complete ***" << LL_ENDL;
-// 			export_complete();
-// 	}
-// 	else
-// 	{
-// 		gExportDialog->setMessage(llformat("Exported %d/%d object files, %d/%d textures.", current_object_count, exported_object_count, current_image_count, exported_image_count));
-// 	}
-//}
-
-void process_derez_ack(LLMessageSystem*, void**)
-{
-	if(gViewerWindow) gViewerWindow->getWindow()->decBusyCount();
-}
-
-void process_places_reply(LLMessageSystem* msg, void** data)
-{
-	LLUUID query_id;
-
-	msg->getUUID("AgentData", "QueryID", query_id);
-	if (query_id.isNull())
-	{
-		LLFloaterLandHoldings::processPlacesReply(msg, data);
-	}
-	else if(gAgent.isInGroup(query_id))
-	{
-		LLPanelGroupLandMoney::processPlacesReply(msg, data);
-	}
-	else
-	{
-		LL_WARNS("Messaging") << "Got invalid PlacesReply message" << LL_ENDL;
-	}
-}
-
-void send_sound_trigger(const LLUUID& sound_id, F32 gain)
-{
-	if (sound_id.isNull() || gAgent.getRegion() == NULL)
-	{
-		// disconnected agent or zero guids don't get sent (no sound)
-		return;
-	}
-
-	LLMessageSystem* msg = gMessageSystem;
-	msg->newMessageFast(_PREHASH_SoundTrigger);
-	msg->nextBlockFast(_PREHASH_SoundData);
-	msg->addUUIDFast(_PREHASH_SoundID, sound_id);
-	// Client untrusted, ids set on sim
-	msg->addUUIDFast(_PREHASH_OwnerID, LLUUID::null );
-	msg->addUUIDFast(_PREHASH_ObjectID, LLUUID::null );
-	msg->addUUIDFast(_PREHASH_ParentID, LLUUID::null );
-
-	msg->addU64Fast(_PREHASH_Handle, gAgent.getRegion()->getHandle());
-
-	LLVector3 position = gAgent.getPositionAgent();
-	msg->addVector3Fast(_PREHASH_Position, position);
-	msg->addF32Fast(_PREHASH_Gain, gain);
-
-	gAgent.sendMessage();
-}
-
-bool join_group_response(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotification::getSelectedOption(notification, response);
-	BOOL delete_context_data = TRUE;
-	bool accept_invite = false;
-
-	LLUUID group_id = notification["payload"]["group_id"].asUUID();
-	LLUUID transaction_id = notification["payload"]["transaction_id"].asUUID();
-	std::string name = notification["payload"]["name"].asString();
-	std::string message = notification["payload"]["message"].asString();
-	S32 fee = notification["payload"]["fee"].asInteger();
-
-	if (option == 2 && !group_id.isNull())
-	{
-		LLGroupActions::show(group_id);
-		LLSD args;
-		args["MESSAGE"] = message;
-		LLNotifications::instance().add("JoinGroup", args, notification["payload"]);
-		return false;
-	}
-	if(option == 0 && !group_id.isNull())
-	{
-		// check for promotion or demotion.
-		S32 max_groups = MAX_AGENT_GROUPS;
-		if(gAgent.isInGroup(group_id)) ++max_groups;
-
-		if(gAgent.mGroups.count() < max_groups)
-		{
-			accept_invite = true;
-		}
-		else
-		{
-			delete_context_data = FALSE;
-			LLSD args;
-			args["NAME"] = name;
-			args["INVITE"] = message;
-			LLNotifications::instance().add("JoinedTooManyGroupsMember", args, notification["payload"]);
-		}
-	}
-
-	if (accept_invite)
-	{
-		// If there is a fee to join this group, make
-		// sure the user is sure they want to join.
-		if (fee > 0)
-		{
-			delete_context_data = FALSE;
-			LLSD args;
-			args["COST"] = llformat("%d", fee);
-			// Set the fee for next time to 0, so that we don't keep
-			// asking about a fee.
-			LLSD next_payload = notification["payload"];
-			next_payload["fee"] = 0;
-			LLNotifications::instance().add("JoinGroupCanAfford",
-									args,
-									next_payload);
-		}
-		else
-		{
-			send_improved_im(group_id,
-							 std::string("name"),
-							 std::string("message"),
-							IM_ONLINE,
-							IM_GROUP_INVITATION_ACCEPT,
-							transaction_id);
-		}
-	}
-	else
-	{
-		send_improved_im(group_id,
-						 std::string("name"),
-						 std::string("message"),
-						IM_ONLINE,
-						IM_GROUP_INVITATION_DECLINE,
-						transaction_id);
-	}
-
-	return false;
-}
-static LLNotificationFunctorRegistration jgr_1("JoinGroup", join_group_response);
-static LLNotificationFunctorRegistration jgr_2("JoinedTooManyGroupsMember", join_group_response);
-static LLNotificationFunctorRegistration jgr_3("JoinGroupCanAfford", join_group_response);
-
-
-//-----------------------------------------------------------------------------
-// Instant Message
-//-----------------------------------------------------------------------------
-class LLOpenAgentOffer : public LLInventoryFetchObserver
-{
-public:
-	LLOpenAgentOffer(const std::string& from_name) : mFromName(from_name) {}
-	/*virtual*/ void done()
-	{
-		open_offer(mComplete, mFromName);
-		gInventory.removeObserver(this);
-		delete this;
-	}
-private:
-	std::string mFromName;
-};
-
-//unlike the FetchObserver for AgentOffer, we only make one 
-//instance of the AddedObserver for TaskOffers
-//and it never dies.  We do this because we don't know the UUID of 
-//task offers until they are accepted, so we don't wouldn't 
-//know what to watch for, so instead we just watch for all additions.
-class LLOpenTaskOffer : public LLInventoryAddedObserver
-{
-protected:
-	/*virtual*/ void done()
-	{
-		open_offer(mAdded, "");
-		mAdded.clear();
-	}
- };
-
-//one global instance to bind them
-LLOpenTaskOffer* gNewInventoryObserver=NULL;
-
-void start_new_inventory_observer()
-{
-	if (!gNewInventoryObserver) //task offer observer 
-	{
-		// Observer is deleted by gInventory
-		gNewInventoryObserver = new LLOpenTaskOffer;
-		gInventory.addObserver(gNewInventoryObserver);
-	}
-}
-
-class LLDiscardAgentOffer : public LLInventoryFetchComboObserver
-{
-public:
-	LLDiscardAgentOffer(const LLUUID& folder_id, const LLUUID& object_id) :
-		mFolderID(folder_id),
-		mObjectID(object_id) {}
-	virtual ~LLDiscardAgentOffer() {}
-	virtual void done()
-	{
-		LL_DEBUGS("Messaging") << "LLDiscardAgentOffer::done()" << LL_ENDL;
-		LLUUID trash_id;
-		trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
-		bool notify = false;
-		if(trash_id.notNull() && mObjectID.notNull())
-		{
-			LLInventoryModel::update_list_t update;
-			LLInventoryModel::LLCategoryUpdate old_folder(mFolderID, -1);
-			update.push_back(old_folder);
-			LLInventoryModel::LLCategoryUpdate new_folder(trash_id, 1);
-			update.push_back(new_folder);
-			gInventory.accountForUpdate(update);
-			gInventory.moveObject(mObjectID, trash_id);
-			LLInventoryObject* obj = gInventory.getObject(mObjectID);
-			if(obj)
-			{
-				// no need to restamp since this is already a freshly
-				// stamped item.
-				obj->updateParentOnServer(FALSE);
-				notify = true;
-			}
-		}
-		else
-		{
-			LL_WARNS("Messaging") << "DiscardAgentOffer unable to find: "
-					<< (trash_id.isNull() ? "trash " : "")
-					<< (mObjectID.isNull() ? "object" : "") << LL_ENDL;
-		}
-		gInventory.removeObserver(this);
-		if(notify)
-		{
-			gInventory.notifyObservers();
-		}
-		delete this;
-	}
-protected:
-	LLUUID mFolderID;
-	LLUUID mObjectID;
-};
-
-
-//Returns TRUE if we are OK, FALSE if we are throttled
-//Set check_only true if you want to know the throttle status 
-//without registering a hit
-bool check_offer_throttle(const std::string& from_name, bool check_only)
-{
-	static U32 throttle_count;
-	static bool throttle_logged;
-	LLChat chat;
-	std::string log_message;
-
-	if (!gSavedSettings.getBOOL("ShowNewInventory"))
-		return false;
-
-	if (check_only)
-	{
-		return gThrottleTimer.hasExpired();
-	}
-	
-	if(gThrottleTimer.checkExpirationAndReset(OFFER_THROTTLE_TIME))
-	{
-		LL_DEBUGS("Messaging") << "Throttle Expired" << LL_ENDL;
-		throttle_count=1;
-		throttle_logged=false;
-		return true;
-	}
-	else //has not expired
-	{
-		LL_DEBUGS("Messaging") << "Throttle Not Expired, Count: " << throttle_count << LL_ENDL;
-		// When downloading the initial inventory we get a lot of new items
-		// coming in and can't tell that from spam.
-		if (LLStartUp::getStartupState() >= STATE_STARTED
-			&& throttle_count >= OFFER_THROTTLE_MAX_COUNT)
-		{
-			if (!throttle_logged)
-			{
-				// Use the name of the last item giver, who is probably the person
-				// spamming you.
-				std::ostringstream message;
-				message << LLAppViewer::instance()->getSecondLifeTitle();
-				if (!from_name.empty())
-				{
-					message << ": Items coming in too fast from " << from_name;
-				}
-				else
-				{
-					message << ": Items coming in too fast";
-				}
-				message << ", automatic preview disabled for "
-					<< OFFER_THROTTLE_TIME << " seconds.";
-				chat.mText = message.str();
-				//this is kinda important, so actually put it on screen
-				LLFloaterChat::addChat(chat, FALSE, FALSE);
-				throttle_logged=true;
-			}
-			return false;
-		}
-		else
-		{
-			throttle_count++;
-			return true;
-		}
-	}
-}
- 
-void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
-{
-	std::vector<LLUUID>::const_iterator it = items.begin();
-	std::vector<LLUUID>::const_iterator end = items.end();
-	LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH));
-	LLInventoryItem* item;
-	for(; it != end; ++it)
-	{
-		const LLUUID& id = *it;
-		item = gInventory.getItem(id);
-		if(!item)
-		{
-			LL_WARNS("Messaging") << "Unable to show inventory item: " << id << LL_ENDL;
-			continue;
-		}
-		if(gInventory.isObjectDescendentOf(id, trash_id))
-		{
-			continue;
-		}
-		LLAssetType::EType asset_type = item->getType();
-
-		//if we are throttled, don't display them
-		if (check_offer_throttle(from_name, false))
-		{
-			// If we opened this ourselves, focus it
-			BOOL take_focus = from_name.empty() ? TAKE_FOCUS_YES : TAKE_FOCUS_NO;
-			switch(asset_type)
-			{
-			  case LLAssetType::AT_NOTECARD:
-				LLFloaterReg::showInstance("preview_notecard", LLSD(id), take_focus);
-				break;
-			  case LLAssetType::AT_LANDMARK:
-			  	{
-					LLInventoryCategory* parent_folder = gInventory.getCategory(item->getParentUUID());
-					LLSD args;
-					args["LANDMARK_NAME"] = item->getName();
-					args["FOLDER_NAME"] = std::string(parent_folder ? parent_folder->getName() : "unknown");
-					LLNotifications::instance().add("LandmarkCreated", args);
-
-					// Created landmark is passed to Places panel to allow its editing.
-					LLPanelPlaces *panel = dynamic_cast<LLPanelPlaces*>(LLSideTray::getInstance()->showPanel("panel_places", LLSD()));
-					if (panel)
-					{
-						panel->setItem(item);
-					}
-			  	}
-				break;
-			  case LLAssetType::AT_TEXTURE:
-				LLFloaterReg::showInstance("preview_texture", LLSD(id), take_focus);
-				break;
-			  default:
-				break;
-			}
-		}
-		//highlight item, if it's not in the trash or lost+found
-		
-		// Don't auto-open the inventory floater
-		LLFloaterInventory* view = NULL;
-		if(gSavedSettings.getBOOL("ShowInInventory") &&
-		   asset_type != LLAssetType::AT_CALLINGCARD &&
-		   item->getInventoryType() != LLInventoryType::IT_ATTACHMENT &&
-		   !from_name.empty())
-		{
-			view = LLFloaterInventory::showAgentInventory();
-		}
-		else
-		{
-			view = LLFloaterInventory::getActiveInventory();
-		}
-		if(!view)
-		{
-			return;
-		}
-
-		//Trash Check
-		LLUUID trash_id;
-		trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
-		if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
-		{
-			return;
-		}
-		LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
-		//BOOL inventory_has_focus = gFocusMgr.childHasKeyboardFocus(view);
-		BOOL user_is_away = gAwayTimer.getStarted();
-
-		// don't select lost and found items if the user is active
-		if (gInventory.isObjectDescendentOf(item->getUUID(), lost_and_found_id)
-			&& !user_is_away)
-		{
-			return;
-		}
-
-		//Not sure about this check.  Could make it easy to miss incoming items.
-		//don't dick with highlight while the user is working
-		//if(inventory_has_focus && !user_is_away)
-		//	break;
-		LL_DEBUGS("Messaging") << "Highlighting" << item->getUUID()  << LL_ENDL;
-		//highlight item
-
-		if (view->getPanel())
-		{
-			LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus();
-			view->getPanel()->setSelection(item->getUUID(), TAKE_FOCUS_NO);
-			gFocusMgr.setKeyboardFocus(focus_ctrl);
-		}
-	}
-}
-
-void inventory_offer_mute_callback(const LLUUID& blocked_id,
-								   const std::string& first_name,
-								   const std::string& last_name,
-								   BOOL is_group)
-{
-	std::string from_name;
-	LLMute::EType type;
-
-	if (is_group)
-	{
-		type = LLMute::GROUP;
-		from_name = first_name;
-	}
-	else
-	{
-		type = LLMute::AGENT;
-		from_name = first_name + " " + last_name;
-	}
-
-	LLMute mute(blocked_id, from_name, type);
-	if (LLMuteList::getInstance()->add(mute))
-	{
-		LLPanelBlockedList::showPanelAndSelect(blocked_id);
-	}
-
-	// purge the message queue of any previously queued inventory offers from the same source.
-	class OfferMatcher : public LLNotifyBoxView::Matcher
-	{
-	public:
-		OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
-		BOOL matches(const LLNotificationPtr notification) const
-		{
-			if(notification->getName() == "ObjectGiveItem" 
-				|| notification->getName() == "ObjectGiveItemUnknownUser"
-				|| notification->getName() == "UserGiveItem")
-			{
-				return (notification->getPayload()["from_id"].asUUID() == blocked_id);
-			}
-			return FALSE;
-		}
-	private:
-		const LLUUID& blocked_id;
-	};
-	gNotifyBoxView->purgeMessagesMatching(OfferMatcher(blocked_id));
-}
-
-LLOfferInfo::LLOfferInfo(const LLSD& sd)
-{
-	mIM = (EInstantMessage)sd["im_type"].asInteger();
-	mFromID = sd["from_id"].asUUID();
-	mFromGroup = sd["from_group"].asBoolean();
-	mFromObject = sd["from_object"].asBoolean();
-	mTransactionID = sd["transaction_id"].asUUID();
-	mFolderID = sd["folder_id"].asUUID();
-	mObjectID = sd["object_id"].asUUID();
-	mType = LLAssetType::lookup(sd["type"].asString().c_str());
-	mFromName = sd["from_name"].asString();
-	mDesc = sd["description"].asString();
-	mHost = LLHost(sd["sender"].asString());
-}
-
-LLSD LLOfferInfo::asLLSD()
-{
-	LLSD sd;
-	sd["im_type"] = mIM;
-	sd["from_id"] = mFromID;
-	sd["from_group"] = mFromGroup;
-	sd["from_object"] = mFromObject;
-	sd["transaction_id"] = mTransactionID;
-	sd["folder_id"] = mFolderID;
-	sd["object_id"] = mObjectID;
-	sd["type"] = LLAssetType::lookup(mType);
-	sd["from_name"] = mFromName;
-	sd["description"] = mDesc;
-	sd["sender"] = mHost.getIPandPort();
-	return sd;
-}
-
-bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& response)
- {
-	LLChat chat;
-	std::string log_message;
-	S32 button = LLNotification::getSelectedOption(notification, response);
-
-	// For muting, we need to add the mute, then decline the offer.
-	// This must be done here because:
-	// * callback may be called immediately,
-	// * adding the mute sends a message,
-	// * we can't build two messages at once.
-	if (2 == button)
-	{
-		gCacheName->get(mFromID, mFromGroup, &inventory_offer_mute_callback);
-	}
-
-	LLMessageSystem* msg = gMessageSystem;
-	msg->newMessageFast(_PREHASH_ImprovedInstantMessage);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->nextBlockFast(_PREHASH_MessageBlock);
-	msg->addBOOLFast(_PREHASH_FromGroup, FALSE);
-	msg->addUUIDFast(_PREHASH_ToAgentID, mFromID);
-	msg->addU8Fast(_PREHASH_Offline, IM_ONLINE);
-	msg->addUUIDFast(_PREHASH_ID, mTransactionID);
-	msg->addU32Fast(_PREHASH_Timestamp, NO_TIMESTAMP); // no timestamp necessary
-	std::string name;
-	LLAgentUI::buildFullname(name);
-	msg->addStringFast(_PREHASH_FromAgentName, name);
-	msg->addStringFast(_PREHASH_Message, ""); 
-	msg->addU32Fast(_PREHASH_ParentEstateID, 0);
-	msg->addUUIDFast(_PREHASH_RegionID, LLUUID::null);
-	msg->addVector3Fast(_PREHASH_Position, gAgent.getPositionAgent());
-	LLInventoryObserver* opener = NULL;
-	LLViewerInventoryCategory* catp = NULL;
-	catp = (LLViewerInventoryCategory*)gInventory.getCategory(mObjectID);
-	LLViewerInventoryItem* itemp = NULL;
-	if(!catp)
-	{
-		itemp = (LLViewerInventoryItem*)gInventory.getItem(mObjectID);
-	}
-
-	std::string from_string; // Used in the pop-up.
-	std::string chatHistory_string;  // Used in chat history.
-	if (mFromObject == TRUE)
-	{
-		if (mFromGroup)
-		{
-			std::string group_name;
-			if (gCacheName->getGroupName(mFromID, group_name))
-			{
-				from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+"'" 
-							+ mFromName + LLTrans::getString("'") +" " + LLTrans::getString("InvOfferOwnedByGroup") 
-				            + " "+ "'" + group_name + "'";
-				
-				chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedByGroup") 
-								   + " " + group_name + "'";
-			}
-			else
-			{
-				from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+"'"
-				            + mFromName +"'"+ " " + LLTrans::getString("InvOfferOwnedByUnknownGroup");
-				chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedByUnknownGroup");
-			}
-		}
-		else
-		{
-			std::string first_name, last_name;
-			if (gCacheName->getName(mFromID, first_name, last_name))
-			{
-				from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+ LLTrans::getString("'") + mFromName 
-							+ LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedBy") + first_name + " " + last_name;
-				chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedBy") + " " + first_name + " " + last_name;
-			}
-			else
-			{
-				from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+LLTrans::getString("'") 
-				            + mFromName + LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedByUnknownUser");
-				chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedByUnknownUser");
-			}
-		}
-	}
-	else
-	{
-		from_string = chatHistory_string = mFromName;
-	}
-	
-	bool busy=FALSE;
-	
-	switch(button)
-	{
-	case IOR_ACCEPT:
-		// ACCEPT. The math for the dialog works, because the accept
-		// for inventory_offered, task_inventory_offer or
-		// group_notice_inventory is 1 greater than the offer integer value.
-		// Generates IM_INVENTORY_ACCEPTED, IM_TASK_INVENTORY_ACCEPTED, 
-		// or IM_GROUP_NOTICE_INVENTORY_ACCEPTED
-		msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 1));
-		msg->addBinaryDataFast(_PREHASH_BinaryBucket, &(mFolderID.mData),
-					 sizeof(mFolderID.mData));
-		// send the message
-		msg->sendReliable(mHost);
-
-		//don't spam them if they are getting flooded
-		if (check_offer_throttle(mFromName, true))
-		{
-			log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
- 			chat.mText = log_message;
- 			LLFloaterChat::addChatHistory(chat);
-		}
-
-		// we will want to open this item when it comes back.
-		LL_DEBUGS("Messaging") << "Initializing an opener for tid: " << mTransactionID
-				 << LL_ENDL;
-		switch (mIM)
-		{
-		case IM_INVENTORY_OFFERED:
-		{
-			// This is an offer from an agent. In this case, the back
-			// end has already copied the items into your inventory,
-			// so we can fetch it out of our inventory.
-			LLInventoryFetchObserver::item_ref_t items;
-			items.push_back(mObjectID);
-			LLOpenAgentOffer* open_agent_offer = new LLOpenAgentOffer(from_string);
-			open_agent_offer->fetchItems(items);
-			if(catp || (itemp && itemp->isComplete()))
-			{
-				open_agent_offer->done();
-			}
-			else
-			{
-				opener = open_agent_offer;
-			}
-		}
-			break;
-		case IM_TASK_INVENTORY_OFFERED:
-		case IM_GROUP_NOTICE:
-		case IM_GROUP_NOTICE_REQUESTED:
-		{
-			// This is an offer from a task or group.
-			// We don't use a new instance of an opener
-			// We instead use the singular observer gOpenTaskOffer
-			// Since it already exists, we don't need to actually do anything
-		}
-		break;
-		default:
-			LL_WARNS("Messaging") << "inventory_offer_callback: unknown offer type" << LL_ENDL;
-			break;
-		}	// end switch (mIM)
-		break;
-
-	case IOR_BUSY:
-		//Busy falls through to decline.  Says to make busy message.
-		busy=TRUE;
-	case IOR_MUTE:
-		// MUTE falls through to decline
-	case IOR_DECLINE:
-		// DECLINE. The math for the dialog works, because the decline
-		// for inventory_offered, task_inventory_offer or
-		// group_notice_inventory is 2 greater than the offer integer value.
-		// Generates IM_INVENTORY_DECLINED, IM_TASK_INVENTORY_DECLINED,
-		// or IM_GROUP_NOTICE_INVENTORY_DECLINED
-	default:
-		// close button probably (or any of the fall-throughs from above)
-		msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 2));
-		msg->addBinaryDataFast(_PREHASH_BinaryBucket, EMPTY_BINARY_BUCKET, EMPTY_BINARY_BUCKET_SIZE);
-		// send the message
-		msg->sendReliable(mHost);
-
-		log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +".";
-		chat.mText = log_message;
-		if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) )  // muting for SL-42269
-		{
-			chat.mMuted = TRUE;
-		}
-		LLFloaterChat::addChatHistory(chat);
-
-		// If it's from an agent, we have to fetch the item to throw
-		// it away. If it's from a task or group, just denying the 
-		// request will suffice to discard the item.
-		if(IM_INVENTORY_OFFERED == mIM)
-		{
-			LLInventoryFetchComboObserver::folder_ref_t folders;
-			LLInventoryFetchComboObserver::item_ref_t items;
-			items.push_back(mObjectID);
-			LLDiscardAgentOffer* discard_agent_offer;
-			discard_agent_offer = new LLDiscardAgentOffer(mFolderID, mObjectID);
-			discard_agent_offer->fetch(folders, items);
-			if(catp || (itemp && itemp->isComplete()))
-			{
-				discard_agent_offer->done();
-			}
-			else
-			{
-				opener = discard_agent_offer;
-			}
-			
-		}
-		if (busy &&	(!mFromGroup && !mFromObject))
-		{
-			busy_message(msg,mFromID);
-		}
-		break;
-	}
-
-	if(IM_INVENTORY_OFFERED == mIM)
-	{
-		// add buddy to recent people list
-		LLRecentPeople::instance().add(mFromID);
-	}
-
-	if(opener)
-	{
-		gInventory.addObserver(opener);
-	}
-
-	delete this;
-	return false;
-}
-
-
-void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
-{
-	//Until throttling is implmented, busy mode should reject inventory instead of silently
-	//accepting it.  SEE SL-39554
-	if (gAgent.getBusy())
-	{
-		info->forceResponse(IOR_BUSY);
-		return;
-	}
-	
-	//If muted, don't even go through the messaging stuff.  Just curtail the offer here.
-	if (LLMuteList::getInstance()->isMuted(info->mFromID, info->mFromName))
-	{
-		info->forceResponse(IOR_MUTE);
-		return;
-	}
-
-	// Avoid the Accept/Discard dialog if the user so desires. JC
-	if (gSavedSettings.getBOOL("AutoAcceptNewInventory")
-		&& (info->mType == LLAssetType::AT_NOTECARD
-			|| info->mType == LLAssetType::AT_LANDMARK
-			|| info->mType == LLAssetType::AT_TEXTURE))
-	{
-		// For certain types, just accept the items into the inventory,
-		// and possibly open them on receipt depending upon "ShowNewInventory".
-		info->forceResponse(IOR_ACCEPT);
-		return;
-	}
-
-	// Strip any SLURL from the message display. (DEV-2754)
-	std::string msg = info->mDesc;
-	int indx = msg.find(" ( http://slurl.com/secondlife/");
-	if(indx >= 0)
-	{
-		LLStringUtil::truncate(msg, indx);
-	}
-	
-	LLSD args;
-	args["[OBJECTNAME]"] = msg;
-
-	LLSD payload;
-
-	// must protect against a NULL return from lookupHumanReadable()
-	std::string typestr = ll_safe_string(LLAssetType::lookupHumanReadable(info->mType));
-	if (!typestr.empty())
-	{
-		args["OBJECTTYPE"] = typestr;
-	}
-	else
-	{
-		LL_WARNS("Messaging") << "LLAssetType::lookupHumanReadable() returned NULL - probably bad asset type: " << info->mType << LL_ENDL;
-		args["OBJECTTYPE"] = "";
-
-		// This seems safest, rather than propagating bogosity
-		LL_WARNS("Messaging") << "Forcing an inventory-decline for probably-bad asset type." << LL_ENDL;
-		info->forceResponse(IOR_DECLINE);
-		return;
-	}
-
-	// Name cache callbacks don't store userdata, so can't save
-	// off the LLOfferInfo.  Argh.
-	BOOL name_found = FALSE;
-	if (info->mFromGroup)
-	{
-		std::string group_name;
-		if (gCacheName->getGroupName(info->mFromID, group_name))
-		{
-			args["FIRST"] = group_name;
-			args["LAST"] = "";
-			name_found = TRUE;
-		}
-	}
-	else
-	{
-		std::string first_name, last_name;
-		if (gCacheName->getName(info->mFromID, first_name, last_name))
-		{
-			args["FIRST"] = first_name;
-			args["LAST"] = last_name;
-			name_found = TRUE;
-		}
-	}
-
-	payload["from_id"] = info->mFromID;
-	args["OBJECTFROMNAME"] = info->mFromName;
-	args["NAME"] = info->mFromName;
-
-	LLNotification::Params p("ObjectGiveItem");
-	p.substitutions(args).payload(payload).functor.function(boost::bind(&LLOfferInfo::inventory_offer_callback, info, _1, _2));
-
-	if (from_task)
-	{
-		p.name = name_found ? "ObjectGiveItem" : "ObjectGiveItemUnknownUser";
-	}
-	else
-	{
-		p.name = "UserGiveItem";
-	}
-
-	LLNotifications::instance().add(p);
-}
-
-bool lure_callback(const LLSD& notification, const LLSD& response)
-{
-	S32 option = 0;
-	if (response.isInteger()) 
-	{
-		option = response.asInteger();
-	}
-	else
-	{
-		option = LLNotification::getSelectedOption(notification, response);
-	}
-	
-	LLUUID from_id = notification["payload"]["from_id"].asUUID();
-	LLUUID lure_id = notification["payload"]["lure_id"].asUUID();
-	BOOL godlike = notification["payload"]["godlike"].asBoolean();
-
-	switch(option)
-	{
-	case 0:
-		{
-			// accept
-			gAgent.teleportViaLure(lure_id, godlike);
-		}
-		break;
-	case 1:
-	default:
-		// decline
-		send_simple_im(from_id,
-					   LLStringUtil::null,
-					   IM_LURE_DECLINED,
-					   lure_id);
-		break;
-	}
-	return false;
-}
-static LLNotificationFunctorRegistration lure_callback_reg("TeleportOffered", lure_callback);
-
-bool goto_url_callback(const LLSD& notification, const LLSD& response)
-{
-	std::string url = notification["payload"]["url"].asString();
-	S32 option = LLNotification::getSelectedOption(notification, response);
-	if(1 == option)
-	{
-		LLWeb::loadURL(url);
-	}
-	return false;
-}
-static LLNotificationFunctorRegistration goto_url_callback_reg("GotoURL", goto_url_callback);
-
-void process_improved_im(LLMessageSystem *msg, void **user_data)
-{
-	if (gNoRender)
-	{
-		return;
-	}
-	LLUUID from_id;
-	BOOL from_group;
-	LLUUID to_id;
-	U8 offline;
-	U8 d = 0;
-	LLUUID session_id;
-	U32 timestamp;
-	std::string name;
-	std::string message;
-	U32 parent_estate_id = 0;
-	LLUUID region_id;
-	LLVector3 position;
-	U8 binary_bucket[MTUBYTES];
-	S32 binary_bucket_size;
-	LLChat chat;
-	std::string buffer;
-	
-	// *TODO: Translate - need to fix the full name to first/last (maybe)
-	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, from_id);
-	msg->getBOOLFast(_PREHASH_MessageBlock, _PREHASH_FromGroup, from_group);
-	msg->getUUIDFast(_PREHASH_MessageBlock, _PREHASH_ToAgentID, to_id);
-	msg->getU8Fast(  _PREHASH_MessageBlock, _PREHASH_Offline, offline);
-	msg->getU8Fast(  _PREHASH_MessageBlock, _PREHASH_Dialog, d);
-	msg->getUUIDFast(_PREHASH_MessageBlock, _PREHASH_ID, session_id);
-	msg->getU32Fast( _PREHASH_MessageBlock, _PREHASH_Timestamp, timestamp);
-	//msg->getData("MessageBlock", "Count",		&count);
-	msg->getStringFast(_PREHASH_MessageBlock, _PREHASH_FromAgentName, name);
-	msg->getStringFast(_PREHASH_MessageBlock, _PREHASH_Message,		message);
-	msg->getU32Fast(_PREHASH_MessageBlock, _PREHASH_ParentEstateID, parent_estate_id);
-	msg->getUUIDFast(_PREHASH_MessageBlock, _PREHASH_RegionID, region_id);
-	msg->getVector3Fast(_PREHASH_MessageBlock, _PREHASH_Position, position);
-	msg->getBinaryDataFast(  _PREHASH_MessageBlock, _PREHASH_BinaryBucket, binary_bucket, 0, 0, MTUBYTES);
-	binary_bucket_size = msg->getSizeFast(_PREHASH_MessageBlock, _PREHASH_BinaryBucket);
-	EInstantMessage dialog = (EInstantMessage)d;
-
-    // make sure that we don't have an empty or all-whitespace name
-	LLStringUtil::trim(name);
-	if (name.empty())
-	{
-        name = LLTrans::getString("Unnamed");
-	}
-
-	BOOL is_busy = gAgent.getBusy();
-	BOOL is_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat);
-	BOOL is_linden = LLMuteList::getInstance()->isLinden(name);
-	BOOL is_owned_by_me = FALSE;
-	BOOL is_friend = (LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL) ? false : true;
-	BOOL accept_im_from_only_friend = gSavedSettings.getBOOL("VoiceCallsFriendsOnly");
-	
-	chat.mMuted = is_muted && !is_linden;
-	chat.mFromID = from_id;
-	chat.mFromName = name;
-	chat.mSourceType = (from_id.isNull() || (name == std::string(SYSTEM_FROM))) ? CHAT_SOURCE_SYSTEM : CHAT_SOURCE_AGENT;
-
-	LLViewerObject *source = gObjectList.findObject(session_id); //Session ID is probably the wrong thing.
-	if (source)
-	{
-		is_owned_by_me = source->permYouOwner();
-	}
-
-	std::string separator_string(": ");
-	int message_offset = 0;
-
-		//Handle IRC styled /me messages.
-	std::string prefix = message.substr(0, 4);
-	if (prefix == "/me " || prefix == "/me'")
-	{
-		separator_string = "";
-		message_offset = 3;
-	}
-
-	LLSD args;
-	switch(dialog)
-	{
-	case IM_CONSOLE_AND_CHAT_HISTORY:
-		// These are used for system messages, hence don't need the name,
-		// as it is always "Second Life".
-	  	// *TODO: Translate
-		args["MESSAGE"] = message;
-
-		// Note: don't put the message in the IM history, even though was sent
-		// via the IM mechanism.
-		LLNotifications::instance().add("SystemMessageTip",args);
-		break;
-
-	case IM_NOTHING_SPECIAL: 
-		// Don't show dialog, just do IM
-		if (!gAgent.isGodlike()
-				&& gAgent.getRegion()->isPrelude() 
-				&& to_id.isNull() )
-		{
-			// do nothing -- don't distract newbies in
-			// Prelude with global IMs
-		}
-		else if (offline == IM_ONLINE && !is_linden && is_busy && name != SYSTEM_FROM)
-		{
-			// return a standard "busy" message, but only do it to online IM 
-			// (i.e. not other auto responses and not store-and-forward IM)
-			if (!gIMMgr->hasSession(session_id))
-			{
-				// if there is not a panel for this conversation (i.e. it is a new IM conversation
-				// initiated by the other party) then...
-				std::string my_name;
-				LLAgentUI::buildFullname(my_name);
-				std::string response = gSavedPerAccountSettings.getString("BusyModeResponse2");
-				pack_instant_message(
-					gMessageSystem,
-					gAgent.getID(),
-					FALSE,
-					gAgent.getSessionID(),
-					from_id,
-					my_name,
-					response,
-					IM_ONLINE,
-					IM_BUSY_AUTO_RESPONSE,
-					session_id);
-				gAgent.sendReliableMessage();
-			}
-
-			// now store incoming IM in chat history
-
-			buffer = message.substr(message_offset);
-	
-			LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
-
-			// add to IM panel, but do not bother the user
-			gIMMgr->addMessage(
-				session_id,
-				from_id,
-				name,
-				buffer,
-				LLStringUtil::null,
-				dialog,
-				parent_estate_id,
-				region_id,
-				position,
-				true);
-
-			// pretend this is chat generated by self, so it does not show up on screen
-			chat.mText = std::string("IM: ") + name + separator_string + message.substr(message_offset);
-			LLFloaterChat::addChat( chat, TRUE, TRUE );
-		}
-		else if (from_id.isNull())
-		{
-			// Messages from "Second Life" ID don't go to IM history
-			// messages which should be routed to IM window come from a user ID with name=SYSTEM_NAME
-			chat.mText = name + ": " + message;
-			LLFloaterChat::addChat(chat, FALSE, FALSE);
-		}
-		else if (to_id.isNull())
-		{
-			// Message to everyone from GOD
-			args["NAME"] = name;
-			args["MESSAGE"] = message;
-			LLNotifications::instance().add("GodMessage", args);
-
-			// Treat like a system message and put in chat history.
-			// Claim to be from a local agent so it doesn't go into
-			// console.
-			chat.mText = name + separator_string + message.substr(message_offset);
-			BOOL local_agent = TRUE;
-			LLFloaterChat::addChat(chat, FALSE, local_agent);
-		}
-		else
-		{
-			// standard message, not from system
-			std::string saved;
-			if(offline == IM_OFFLINE)
-			{
-				saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str());
-			}
-			buffer = saved + message.substr(message_offset);
-
-			LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
-
-			bool mute_im = is_muted;
-			if(accept_im_from_only_friend&&!is_friend)
-			{
-				mute_im = true;
-			}
-			if (!mute_im || is_linden) 
-			{
-				gIMMgr->addMessage(
-					session_id,
-					from_id,
-					name,
-					buffer,
-					LLStringUtil::null,
-					dialog,
-					parent_estate_id,
-					region_id,
-					position,
-					true);
-				chat.mText = std::string("IM: ") + name + separator_string + saved + message.substr(message_offset);
-
-				BOOL local_agent = FALSE;
-				LLFloaterChat::addChat( chat, TRUE, local_agent );
-			}
-			else
-			{
-				// muted user, so don't start an IM session, just record line in chat
-				// history.  Pretend the chat is from a local agent,
-				// so it will go into the history but not be shown on screen.
-				chat.mText = buffer;
-				BOOL local_agent = TRUE;
-				LLFloaterChat::addChat( chat, TRUE, local_agent );
-			}
-		}
-		break;
-
-	case IM_TYPING_START:
-		{
-			LLPointer<LLIMInfo> im_info = new LLIMInfo(gMessageSystem);
-			gIMMgr->processIMTypingStart(im_info);
-		}
-		break;
-
-	case IM_TYPING_STOP:
-		{
-			LLPointer<LLIMInfo> im_info = new LLIMInfo(gMessageSystem);
-			gIMMgr->processIMTypingStop(im_info);
-		}
-		break;
-
-	case IM_MESSAGEBOX:
-		{
-			// This is a block, modeless dialog.
-			//*TODO: Translate
-			args["MESSAGE"] = message;
-			LLNotifications::instance().add("SystemMessage", args);
-		}
-		break;
-	case IM_GROUP_NOTICE:
-	case IM_GROUP_NOTICE_REQUESTED:
-		{
-			LL_INFOS("Messaging") << "Received IM_GROUP_NOTICE message." << LL_ENDL;
-			// Read the binary bucket for more information.
-			struct notice_bucket_header_t
-			{
-				U8 has_inventory;
-				U8 asset_type;
-				LLUUID group_id;
-			};
-			struct notice_bucket_full_t
-			{
-				struct notice_bucket_header_t header;
-				U8 item_name[DB_INV_ITEM_NAME_BUF_SIZE];
-			}* notice_bin_bucket;
-
-			// Make sure the binary bucket is big enough to hold the header 
-			// and a null terminated item name.
-			if ( (binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8))))
-				|| (binary_bucket[binary_bucket_size - 1] != '\0') )
-			{
-				LL_WARNS("Messaging") << "Malformed group notice binary bucket" << LL_ENDL;
-				break;
-			}
-
-			notice_bin_bucket = (struct notice_bucket_full_t*) &binary_bucket[0];
-			U8 has_inventory = notice_bin_bucket->header.has_inventory;
-			U8 asset_type = notice_bin_bucket->header.asset_type;
-			LLUUID group_id = notice_bin_bucket->header.group_id;
-			std::string item_name = ll_safe_string((const char*) notice_bin_bucket->item_name);
-
-			// If there is inventory, give the user the inventory offer.
-			LLOfferInfo* info = NULL;
-
-			if (has_inventory)
-			{
-				info = new LLOfferInfo;
-				
-				info->mIM = IM_GROUP_NOTICE;
-				info->mFromID = from_id;
-				info->mFromGroup = from_group;
-				info->mTransactionID = session_id;
-				info->mType = (LLAssetType::EType) asset_type;
-				info->mFolderID = gInventory.findCategoryUUIDForType(info->mType);
-				std::string from_name;
-
-				from_name += "A group member named ";
-				from_name += name;
-
-				info->mFromName = from_name;
-				info->mDesc = item_name;
-				info->mHost = msg->getSender();
-			}
-			
-			std::string str(message);
-
-			// Tokenize the string.
-			// TODO: Support escaped tokens ("||" -> "|")
-			typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
-			boost::char_separator<char> sep("|","",boost::keep_empty_tokens);
-			tokenizer tokens(str, sep);
-			tokenizer::iterator iter = tokens.begin();
-
-			std::string subj(*iter++);
-			std::string mes(*iter++);
-
-			// Send the notification down the new path.
-			// For requested notices, we don't want to send the popups.
-			if (dialog != IM_GROUP_NOTICE_REQUESTED)
-			{
-				LLSD payload;
-				payload["subject"] = subj;
-				payload["message"] = mes;
-				payload["sender_name"] = name;
-				payload["group_id"] = group_id;
-				payload["inventory_name"] = item_name;
-				payload["inventory_offer"] = info ? info->asLLSD() : LLSD();
-
-				LLSD args;
-				args["SUBJECT"] = subj;
-				args["MESSAGE"] = mes;
-				LLNotifications::instance().add(LLNotification::Params("GroupNotice").substitutions(args).payload(payload).time_stamp(timestamp));
-			}
-
-			// Also send down the old path for now.
-			if (IM_GROUP_NOTICE_REQUESTED == dialog)
-			{
-				
-				LLPanelGroup::showNotice(subj,mes,group_id,has_inventory,item_name,info);
-			}
-		}
-		break;
-	case IM_GROUP_INVITATION:
-		{
-			//if (!is_linden && (is_busy || is_muted))
-			if ((is_busy || is_muted))
-			{
-				LLMessageSystem *msg = gMessageSystem;
-				busy_message(msg,from_id);
-			}
-			else
-			{
-				LL_INFOS("Messaging") << "Received IM_GROUP_INVITATION message." << LL_ENDL;
-				// Read the binary bucket for more information.
-				struct invite_bucket_t
-				{
-					S32 membership_fee;
-					LLUUID role_id;
-				}* invite_bucket;
-
-				// Make sure the binary bucket is the correct size.
-				if (binary_bucket_size != sizeof(invite_bucket_t))
-				{
-					LL_WARNS("Messaging") << "Malformed group invite binary bucket" << LL_ENDL;
-					break;
-				}
-
-				invite_bucket = (struct invite_bucket_t*) &binary_bucket[0];
-				S32 membership_fee = ntohl(invite_bucket->membership_fee);
-
-				LLSD payload;
-				payload["transaction_id"] = session_id;
-				payload["group_id"] = from_id;
-				payload["name"] = name;
-				payload["message"] = message;
-				payload["fee"] = membership_fee;
-
-				LLSD args;
-				args["MESSAGE"] = message;
-				LLNotifications::instance().add("JoinGroup", args, payload, join_group_response);
-			}
-		}
-		break;
-
-	case IM_INVENTORY_OFFERED:
-	case IM_TASK_INVENTORY_OFFERED:
-		// Someone has offered us some inventory.
-		{
-			LLOfferInfo* info = new LLOfferInfo;
-			bool mute_im = false;
-			if (IM_INVENTORY_OFFERED == dialog)
-			{
-				struct offer_agent_bucket_t
-				{
-					S8		asset_type;
-					LLUUID	object_id;
-				}* bucketp;
-
-				if (sizeof(offer_agent_bucket_t) != binary_bucket_size)
-				{
-					LL_WARNS("Messaging") << "Malformed inventory offer from agent" << LL_ENDL;
-					break;
-				}
-				bucketp = (struct offer_agent_bucket_t*) &binary_bucket[0];
-				info->mType = (LLAssetType::EType) bucketp->asset_type;
-				info->mObjectID = bucketp->object_id;
-				
-				if(accept_im_from_only_friend&&!is_friend)
-				{
-					mute_im = true;
-				}
-			}
-			else
-			{
-				if (sizeof(S8) != binary_bucket_size)
-				{
-					LL_WARNS("Messaging") << "Malformed inventory offer from object" << LL_ENDL;
-					break;
-				}
-				info->mType = (LLAssetType::EType) binary_bucket[0];
-				info->mObjectID = LLUUID::null;
-			}
-
-			info->mIM = dialog;
-			info->mFromID = from_id;
-			info->mFromGroup = from_group;
-			info->mTransactionID = session_id;
-			info->mFolderID = gInventory.findCategoryUUIDForType(info->mType);
-
-			if (dialog == IM_TASK_INVENTORY_OFFERED)
-			{
-				info->mFromObject = TRUE;
-			}
-			else
-			{
-				info->mFromObject = FALSE;
-			}
-			info->mFromName = name;
-			info->mDesc = message;
-			info->mHost = msg->getSender();
-			//if (((is_busy && !is_owned_by_me) || is_muted))
-			if ( is_muted || mute_im)
-			{
-				// Same as closing window
-				info->forceResponse(IOR_DECLINE);
-			}
-			else
-			{
-				inventory_offer_handler(info, dialog == IM_TASK_INVENTORY_OFFERED);
-			}
-		}
-		break;
-
-	case IM_INVENTORY_ACCEPTED:
-	{
-		args["NAME"] = name;
-		LLNotifications::instance().add("InventoryAccepted", args);
-		break;
-	}
-	case IM_INVENTORY_DECLINED:
-	{
-		args["NAME"] = name;
-		LLNotifications::instance().add("InventoryDeclined", args);
-		break;
-	}
-	// TODO: _DEPRECATED suffix as part of vote removal - DEV-24856
-	case IM_GROUP_VOTE:
-		{
-			LL_WARNS("Messaging") << "Received IM: IM_GROUP_VOTE_DEPRECATED" << LL_ENDL;
-		}
-		break;
-
-	case IM_GROUP_ELECTION_DEPRECATED:
-	{
-		LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL;
-	}
-	break;
-	
-	case IM_SESSION_SEND:
-	{
-		if (!is_linden && is_busy)
-		{
-			return;
-		}
-
-		// Only show messages if we have a session open (which
-		// should happen after you get an "invitation"
-		if ( !gIMMgr->hasSession(session_id) )
-		{
-			return;
-		}
-
-		// standard message, not from system
-		std::string saved;
-		if(offline == IM_OFFLINE)
-		{
-			saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str());
-		}
-		buffer = saved + message.substr(message_offset);
-		BOOL is_this_agent = FALSE;
-		if(from_id == gAgentID)
-		{
-			is_this_agent = TRUE;
-		}
-		gIMMgr->addMessage(
-			session_id,
-			from_id,
-			name,
-			buffer,
-			ll_safe_string((char*)binary_bucket),
-			IM_SESSION_INVITE,
-			parent_estate_id,
-			region_id,
-			position,
-			true);
-
-		chat.mText = std::string("IM: ") + name + separator_string +  saved + message.substr(message_offset);
-		LLFloaterChat::addChat(chat, TRUE, is_this_agent);
-	}
-	break;
-
-	case IM_FROM_TASK:
-		{
-			if (is_busy && !is_owned_by_me)
-			{
-				return;
-			}
-
-			LLSD substitutions;
-			substitutions["MSG"] = message.substr(message_offset);
-			LLNotifications::instance().add("ServerObjectMessage", substitutions);
-		}
-		break;
-	case IM_FROM_TASK_AS_ALERT:
-		if (is_busy && !is_owned_by_me)
-		{
-			return;
-		}
-		{
-			// Construct a viewer alert for this message.
-			args["NAME"] = name;
-			args["MESSAGE"] = message;
-			LLNotifications::instance().add("ObjectMessage", args);
-		}
-		break;
-	case IM_BUSY_AUTO_RESPONSE:
-		if (is_muted)
-		{
-			LL_DEBUGS("Messaging") << "Ignoring busy response from " << from_id << LL_ENDL;
-			return;
-		}
-		else
-		{
-			// TODO: after LLTrans hits release, get "busy response" into translatable file
-			buffer = llformat("%s (%s): %s", name.c_str(), "busy response", message.substr(message_offset).c_str());
-			gIMMgr->addMessage(session_id, from_id, name, buffer);
-		}
-		break;
-		
-	case IM_LURE_USER:
-		{
-			if (is_muted)
-			{ 
-				return;
-			}
-			else if (is_busy) 
-			{
-				busy_message(msg,from_id);
-			}
-			else
-			{
-				LLSD args;
-				// *TODO: Translate -> [FIRST] [LAST] (maybe)
-				args["NAME"] = name;
-				args["MESSAGE"] = message;
-				LLSD payload;
-				payload["from_id"] = from_id;
-				payload["lure_id"] = session_id;
-				payload["godlike"] = FALSE;
-				LLNotifications::instance().add("TeleportOffered", args, payload);
-			}
-		}
-		break;
-
-	case IM_GODLIKE_LURE_USER:
-		{
-			LLSD payload;
-			payload["from_id"] = from_id;
-			payload["lure_id"] = session_id;
-			payload["godlike"] = TRUE;
-			// do not show a message box, because you're about to be
-			// teleported.
-			LLNotifications::instance().forceResponse(LLNotification::Params("TeleportOffered").payload(payload), 0);
-		}
-		break;
-
-	case IM_GOTO_URL:
-		{
-			LLSD args;
-			// n.b. this is for URLs sent by the system, not for
-			// URLs sent by scripts (i.e. llLoadURL)
-			if (binary_bucket_size <= 0)
-			{
-				LL_WARNS("Messaging") << "bad binary_bucket_size: "
-					<< binary_bucket_size
-					<< " - aborting function." << LL_ENDL;
-				return;
-			}
-
-			std::string url;
-			
-			url.assign((char*)binary_bucket, binary_bucket_size-1);
-			args["MESSAGE"] = message;
-			args["URL"] = url;
-			LLSD payload;
-			payload["url"] = url;
-			LLNotifications::instance().add("GotoURL", args, payload );
-		}
-		break;
-
-	case IM_FRIENDSHIP_OFFERED:
-		{
-			LLSD payload;
-			payload["from_id"] = from_id;
-			payload["session_id"] = session_id;;
-			payload["online"] = (offline == IM_ONLINE);
-			payload["sender"] = msg->getSender().getIPandPort();
-
-			if (is_busy)
-			{
-				busy_message(msg, from_id);
-				LLNotifications::instance().forceResponse(LLNotification::Params("OfferFriendship").payload(payload), 1);
-			}
-			else if (is_muted)
-			{
-				LLNotifications::instance().forceResponse(LLNotification::Params("OfferFriendship").payload(payload), 1);
-			}
-			else
-			{
-				args["[NAME]"] = name;
-				if(message.empty())
-				{
-					//support for frienship offers from clients before July 2008
-				        LLNotifications::instance().add("OfferFriendshipNoMessage", args, payload);
-				}
-				else
-				{
-					args["[MESSAGE]"] = message;
-				        LLNotifications::instance().add("OfferFriendship", args, payload);
-				}
-			}
-		}
-		break;
-
-	case IM_FRIENDSHIP_ACCEPTED:
-		{
-			// In the case of an offline IM, the formFriendship() may be extraneous
-			// as the database should already include the relationship.  But it
-			// doesn't hurt for dupes.
-			LLAvatarTracker::formFriendship(from_id);
-			
-			std::vector<std::string> strings;
-			strings.push_back(from_id.asString());
-			send_generic_message("requestonlinenotification", strings);
-			
-			args["NAME"] = name;
-			LLNotifications::instance().add("FriendshipAccepted", args);
-		}
-		break;
-
-	case IM_FRIENDSHIP_DECLINED_DEPRECATED:
-	default:
-		LL_WARNS("Messaging") << "Instant message calling for unknown dialog "
-				<< (S32)dialog << LL_ENDL;
-		break;
-	}
-
-	LLWindow* viewer_window = gViewerWindow->getWindow();
-	if (viewer_window && viewer_window->getMinimized())
-	{
-		viewer_window->flashIcon(5.f);
-	}
-}
-
-void busy_message (LLMessageSystem* msg, LLUUID from_id) 
-{
-	if (gAgent.getBusy())
-	{
-		std::string my_name;
-		LLAgentUI::buildFullname(my_name);
-		std::string response = gSavedPerAccountSettings.getString("BusyModeResponse2");
-		pack_instant_message(
-			gMessageSystem,
-			gAgent.getID(),
-			FALSE,
-			gAgent.getSessionID(),
-			from_id,
-			my_name,
-			response,
-			IM_ONLINE,
-			IM_BUSY_AUTO_RESPONSE);
-		gAgent.sendReliableMessage();
-	}
-}
-
-bool callingcard_offer_callback(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotification::getSelectedOption(notification, response);
-	LLUUID fid;
-	LLUUID from_id;
-	LLMessageSystem* msg = gMessageSystem;
-	switch(option)
-	{
-	case 0:
-		// accept
-		msg->newMessageFast(_PREHASH_AcceptCallingCard);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->nextBlockFast(_PREHASH_TransactionBlock);
-		msg->addUUIDFast(_PREHASH_TransactionID, notification["payload"]["transaction_id"].asUUID());
-		fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
-		msg->nextBlockFast(_PREHASH_FolderData);
-		msg->addUUIDFast(_PREHASH_FolderID, fid);
-		msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
-		break;
-	case 1:
-		// decline		
-		msg->newMessageFast(_PREHASH_DeclineCallingCard);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->nextBlockFast(_PREHASH_TransactionBlock);
-		msg->addUUIDFast(_PREHASH_TransactionID, notification["payload"]["transaction_id"].asUUID());
-		msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
-		busy_message(msg, notification["payload"]["source_id"].asUUID());
-		break;
-	default:
-		// close button probably, possibly timed out
-		break;
-	}
-
-	return false;
-}
-static LLNotificationFunctorRegistration callingcard_offer_cb_reg("OfferCallingCard", callingcard_offer_callback);
-
-void process_offer_callingcard(LLMessageSystem* msg, void**)
-{
-	// someone has offered to form a friendship
-	LL_DEBUGS("Messaging") << "callingcard offer" << LL_ENDL;
-
-	LLUUID source_id;
-	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, source_id);
-	LLUUID tid;
-	msg->getUUIDFast(_PREHASH_AgentBlock, _PREHASH_TransactionID, tid);
-
-	LLSD payload;
-	payload["transaction_id"] = tid;
-	payload["source_id"] = source_id;
-	payload["sender"] = msg->getSender().getIPandPort();
-
-	LLViewerObject* source = gObjectList.findObject(source_id);
-	LLSD args;
-	std::string source_name;
-	if(source && source->isAvatar())
-	{
-		LLNameValue* nvfirst = source->getNVPair("FirstName");
-		LLNameValue* nvlast  = source->getNVPair("LastName");
-		if (nvfirst && nvlast)
-		{
-			args["FIRST"] = nvfirst->getString();
-			args["LAST"] = nvlast->getString();
-			source_name = std::string(nvfirst->getString()) + " " + nvlast->getString();
-		}
-	}
-
-	if(!source_name.empty())
-	{
-		if (gAgent.getBusy() 
-			|| LLMuteList::getInstance()->isMuted(source_id, source_name, LLMute::flagTextChat))
-		{
-			// automatically decline offer
-			LLNotifications::instance().forceResponse(LLNotification::Params("OfferCallingCard").payload(payload), 1);
-		}
-		else
-		{
-			LLNotifications::instance().add("OfferCallingCard", args, payload);
-		}
-	}
-	else
-	{
-		LL_WARNS("Messaging") << "Calling card offer from an unknown source." << LL_ENDL;
-	}
-}
-
-void process_accept_callingcard(LLMessageSystem* msg, void**)
-{
-	LLNotifications::instance().add("CallingCardAccepted");
-}
-
-void process_decline_callingcard(LLMessageSystem* msg, void**)
-{
-	LLNotifications::instance().add("CallingCardDeclined");
-}
-
-
-void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
-{
-	LLChat		chat;
-	std::string		mesg;
-	std::string		from_name;
-	U8			source_temp;
-	U8			type_temp;
-	U8			audible_temp;
-	LLColor4	color(1.0f, 1.0f, 1.0f, 1.0f);
-	LLUUID		from_id;
-	LLUUID		owner_id;
-	BOOL		is_owned_by_me = FALSE;
-	LLViewerObject*	chatter;
-
-	msg->getString("ChatData", "FromName", from_name);
-	chat.mFromName = from_name;
-	
-	msg->getUUID("ChatData", "SourceID", from_id);
-	chat.mFromID = from_id;
-	
-	// Object owner for objects
-	msg->getUUID("ChatData", "OwnerID", owner_id);
-	
-	msg->getU8Fast(_PREHASH_ChatData, _PREHASH_SourceType, source_temp);
-	chat.mSourceType = (EChatSourceType)source_temp;
-
-	msg->getU8("ChatData", "ChatType", type_temp);
-	chat.mChatType = (EChatType)type_temp;
-
-	msg->getU8Fast(_PREHASH_ChatData, _PREHASH_Audible, audible_temp);
-	chat.mAudible = (EChatAudible)audible_temp;
-	
-	chat.mTime = LLFrameTimer::getElapsedSeconds();
-	
-	BOOL is_busy = gAgent.getBusy();
-
-	BOOL is_muted = FALSE;
-	BOOL is_linden = FALSE;
-	is_muted = LLMuteList::getInstance()->isMuted(
-		from_id,
-		from_name,
-		LLMute::flagTextChat) 
-		|| LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagTextChat);
-	is_linden = chat.mSourceType != CHAT_SOURCE_OBJECT &&
-		LLMuteList::getInstance()->isLinden(from_name);
-
-	BOOL is_audible = (CHAT_AUDIBLE_FULLY == chat.mAudible);
-	chatter = gObjectList.findObject(from_id);
-	if (chatter)
-	{
-		chat.mPosAgent = chatter->getPositionAgent();
-		
-		// Make swirly things only for talking objects. (not script debug messages, though)
-		if (chat.mSourceType == CHAT_SOURCE_OBJECT 
-			&& chat.mChatType != CHAT_TYPE_DEBUG_MSG)
-		{
-			LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent());
-			psc->setSourceObject(chatter);
-			psc->setColor(color);
-			//We set the particles to be owned by the object's owner, 
-			//just in case they should be muted by the mute list
-			psc->setOwnerUUID(owner_id);
-			LLViewerPartSim::getInstance()->addPartSource(psc);
-		}
-
-		// record last audible utterance
-		if (is_audible
-			&& (is_linden || (!is_muted && !is_busy)))
-		{
-			if (chat.mChatType != CHAT_TYPE_START 
-				&& chat.mChatType != CHAT_TYPE_STOP)
-			{
-				gAgent.heardChat(chat.mFromID);
-			}
-		}
-
-		is_owned_by_me = chatter->permYouOwner();
-	}
-
-	if (is_audible)
-	{
-		BOOL visible_in_chat_bubble = FALSE;
-		std::string verb;
-
-		color.setVec(1.f,1.f,1.f,1.f);
-		msg->getStringFast(_PREHASH_ChatData, _PREHASH_Message, mesg);
-
-		BOOL ircstyle = FALSE;
-
-		// Look for IRC-style emotes here so chatbubbles work
-		std::string prefix = mesg.substr(0, 4);
-		if (prefix == "/me " || prefix == "/me'")
-		{
-			chat.mText = from_name;
-			chat.mText += mesg.substr(3);
-			ircstyle = TRUE;
-		}
-		else
-		{
-			chat.mText = mesg;
-		}
-
-		// Look for the start of typing so we can put "..." in the bubbles.
-		if (CHAT_TYPE_START == chat.mChatType)
-		{
-			LLLocalSpeakerMgr::getInstance()->setSpeakerTyping(from_id, TRUE);
-
-			// Might not have the avatar constructed yet, eg on login.
-			if (chatter && chatter->isAvatar())
-			{
-				((LLVOAvatar*)chatter)->startTyping();
-			}
-			return;
-		}
-		else if (CHAT_TYPE_STOP == chat.mChatType)
-		{
-			LLLocalSpeakerMgr::getInstance()->setSpeakerTyping(from_id, FALSE);
-
-			// Might not have the avatar constructed yet, eg on login.
-			if (chatter && chatter->isAvatar())
-			{
-				((LLVOAvatar*)chatter)->stopTyping();
-			}
-			return;
-		}
-
-		// We have a real utterance now, so can stop showing "..." and proceed.
-		if (chatter && chatter->isAvatar())
-		{
-			LLLocalSpeakerMgr::getInstance()->setSpeakerTyping(from_id, FALSE);
-			((LLVOAvatar*)chatter)->stopTyping();
-
-			if (!is_muted && !is_busy)
-			{
-				visible_in_chat_bubble = gSavedSettings.getBOOL("UseChatBubbles");
-				((LLVOAvatar*)chatter)->addChat(chat);
-			}
-		}
-
-		// Look for IRC-style emotes
-		if (ircstyle)
-		{
-			// set CHAT_STYLE_IRC to avoid adding Avatar Name as author of message. See EXT-656
-			chat.mChatStyle = CHAT_STYLE_IRC;
-
-			// Do nothing, ircstyle is fixed above for chat bubbles
-		}
-		else
-		{
-			switch(chat.mChatType)
-			{
-			case CHAT_TYPE_WHISPER:
-				verb = "(" + LLTrans::getString("whisper") + ")";
-				break;
-			case CHAT_TYPE_DEBUG_MSG:
-			case CHAT_TYPE_OWNER:
-			case CHAT_TYPE_NORMAL:
-				verb = "";
-				break;
-			case CHAT_TYPE_SHOUT:
-				verb = "(" + LLTrans::getString("shout") + ")";
-				break;
-			case CHAT_TYPE_START:
-			case CHAT_TYPE_STOP:
-				LL_WARNS("Messaging") << "Got chat type start/stop in main chat processing." << LL_ENDL;
-				break;
-			default:
-				LL_WARNS("Messaging") << "Unknown type " << chat.mChatType << " in chat!" << LL_ENDL;
-				verb = "";
-				break;
-			}
-
-
-			chat.mText = "";
-			chat.mText += verb;
-			chat.mText += mesg;
-		}
-		
-		if (chatter)
-		{
-			chat.mPosAgent = chatter->getPositionAgent();
-		}
-
-		// truth table:
-		// LINDEN	BUSY	MUTED	OWNED_BY_YOU	TASK		DISPLAY		STORE IN HISTORY
-		// F		F		F		F				*			Yes			Yes
-		// F		F		F		T				*			Yes			Yes
-		// F		F		T		F				*			No			No
-		// F		F		T		T				*			No			No
-		// F		T		F		F				*			No			Yes
-		// F		T		F		T				*			Yes			Yes
-		// F		T		T		F				*			No			No
-		// F		T		T		T				*			No			No
-		// T		*		*		*				F			Yes			Yes
-
-		chat.mMuted = is_muted && !is_linden;
-
-		if (!visible_in_chat_bubble 
-			&& (is_linden || !is_busy || is_owned_by_me))
-		{
-			// show on screen and add to history
-			LLNotificationsUI::LLNotificationManager::instance().onChat(
-					chat, LLNotificationsUI::NT_NEARBYCHAT);
-
-            // adding temporarily so that communications window chat bar 
-            // works until the new chat window is ready
-			chat.mText = from_name + ": " + chat.mText;
-			LLFloaterChat::addChat(chat, FALSE, FALSE);
-		}
-		else
-		{
-			LLNotificationsUI::LLNotificationManager::instance().onChat(
-					chat, LLNotificationsUI::NT_NEARBYCHAT);
-			// adding temporarily
-			LLFloaterChat::addChatHistory(chat);
-		}
-	}
-}
-
-
-// Simulator we're on is informing the viewer that the agent
-// is starting to teleport (perhaps to another sim, perhaps to the 
-// same sim). If we initiated the teleport process by sending some kind 
-// of TeleportRequest, then this info is redundant, but if the sim 
-// initiated the teleport (via a script call, being killed, etc.) 
-// then this info is news to us.
-void process_teleport_start(LLMessageSystem *msg, void**)
-{
-	U32 teleport_flags = 0x0;
-	msg->getU32("Info", "TeleportFlags", teleport_flags);
-
-	if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL)
-	{
-		gViewerWindow->setProgressCancelButtonVisible(FALSE);
-	}
-	else
-	{
-		gViewerWindow->setProgressCancelButtonVisible(TRUE, LLTrans::getString("Cancel"));
-	}
-
-	// Freeze the UI and show progress bar
-	// Note: could add data here to differentiate between normal teleport and death.
-
-	if( gAgent.getTeleportState() == LLAgent::TELEPORT_NONE )
-	{
-		gTeleportDisplay = TRUE;
-		gAgent.setTeleportState( LLAgent::TELEPORT_START );
-		make_ui_sound("UISndTeleportOut");
-		
-		// Don't call LLFirstUse::useTeleport here because this could be
-		// due to being killed, which would send you home, not to a Telehub
-	}
-}
-
-void process_teleport_progress(LLMessageSystem* msg, void**)
-{
-	LLUUID agent_id;
-	msg->getUUID("AgentData", "AgentID", agent_id);
-	if((gAgent.getID() != agent_id)
-	   || (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE))
-	{
-		LL_WARNS("Messaging") << "Unexpected teleport progress message." << LL_ENDL;
-		return;
-	}
-	U32 teleport_flags = 0x0;
-	msg->getU32("Info", "TeleportFlags", teleport_flags);
-	if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL)
-	{
-		gViewerWindow->setProgressCancelButtonVisible(FALSE);
-	}
-	else
-	{
-		gViewerWindow->setProgressCancelButtonVisible(TRUE, LLTrans::getString("Cancel"));
-	}
-	std::string buffer;
-	msg->getString("Info", "Message", buffer);
-	LL_DEBUGS("Messaging") << "teleport progress: " << buffer << LL_ENDL;
-
-	//Sorta hacky...default to using simulator raw messages
-	//if we don't find the coresponding mapping in our progress mappings
-	std::string message = buffer;
-
-	if (LLAgent::sTeleportProgressMessages.find(buffer) != 
-		LLAgent::sTeleportProgressMessages.end() )
-	{
-		message = LLAgent::sTeleportProgressMessages[buffer];
-	}
-
-	gAgent.setTeleportMessage(LLAgent::sTeleportProgressMessages[message]);
-}
-
-class LLFetchInWelcomeArea : public LLInventoryFetchDescendentsObserver
-{
-public:
-	LLFetchInWelcomeArea() {}
-	virtual void done()
-	{
-		LLIsType is_landmark(LLAssetType::AT_LANDMARK);
-		LLIsType is_card(LLAssetType::AT_CALLINGCARD);
-
-		LLInventoryModel::cat_array_t	card_cats;
-		LLInventoryModel::item_array_t	card_items;
-		LLInventoryModel::cat_array_t	land_cats;
-		LLInventoryModel::item_array_t	land_items;
-
-		folder_ref_t::iterator it = mCompleteFolders.begin();
-		folder_ref_t::iterator end = mCompleteFolders.end();
-		for(; it != end; ++it)
-		{
-			gInventory.collectDescendentsIf(
-				(*it),
-				land_cats,
-				land_items,
-				LLInventoryModel::EXCLUDE_TRASH,
-				is_landmark);
-			gInventory.collectDescendentsIf(
-				(*it),
-				card_cats,
-				card_items,
-				LLInventoryModel::EXCLUDE_TRASH,
-				is_card);
-		}
-		LLSD args;
-		if ( land_items.count() > 0 )
-		{	// Show notification that they can now teleport to landmarks.  Use a random landmark from the inventory
-			S32 random_land = ll_rand( land_items.count() - 1 );
-			args["NAME"] = land_items[random_land]->getName();
-			LLNotifications::instance().add("TeleportToLandmark",args);
-		}
-		if ( card_items.count() > 0 )
-		{	// Show notification that they can now contact people.  Use a random calling card from the inventory
-			S32 random_card = ll_rand( card_items.count() - 1 );
-			args["NAME"] = card_items[random_card]->getName();
-			LLNotifications::instance().add("TeleportToPerson",args);
-		}
-
-		gInventory.removeObserver(this);
-		delete this;
-	}
-};
-
-
-
-class LLPostTeleportNotifiers : public LLEventTimer 
-{
-public:
-	LLPostTeleportNotifiers();
-	virtual ~LLPostTeleportNotifiers();
-
-	//function to be called at the supplied frequency
-	virtual BOOL tick();
-};
-
-LLPostTeleportNotifiers::LLPostTeleportNotifiers() : LLEventTimer( 2.0 )
-{
-};
-
-LLPostTeleportNotifiers::~LLPostTeleportNotifiers()
-{
-}
-
-BOOL LLPostTeleportNotifiers::tick()
-{
-	BOOL all_done = FALSE;
-	if ( gAgent.getTeleportState() == LLAgent::TELEPORT_NONE )
-	{
-		// get callingcards and landmarks available to the user arriving.
-		LLInventoryFetchDescendentsObserver::folder_ref_t folders;
-		LLUUID folder_id;
-		folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
-		if(folder_id.notNull()) 
-			folders.push_back(folder_id);
-		folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
-		if(folder_id.notNull()) 
-			folders.push_back(folder_id);
-		if(!folders.empty())
-		{
-			LLFetchInWelcomeArea* fetcher = new LLFetchInWelcomeArea;
-			fetcher->fetchDescendents(folders);
-			if(fetcher->isEverythingComplete())
-			{
-				fetcher->done();
-			}
-			else
-			{
-				gInventory.addObserver(fetcher);
-			}
-		}
-		all_done = TRUE;
-	}
-
-	return all_done;
-}
-
-
-
-// Teleport notification from the simulator
-// We're going to pretend to be a new agent
-void process_teleport_finish(LLMessageSystem* msg, void**)
-{
-	LL_DEBUGS("Messaging") << "Got teleport location message" << LL_ENDL;
-	LLUUID agent_id;
-	msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id);
-	if (agent_id != gAgent.getID())
-	{
-		LL_WARNS("Messaging") << "Got teleport notification for wrong agent!" << LL_ENDL;
-		return;
-	}
-
-	// Do teleport effect for where you're leaving
-	// VEFFECT: TeleportStart
-	LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE);
-	effectp->setPositionGlobal(gAgent.getPositionGlobal());
-	effectp->setColor(LLColor4U(gAgent.getEffectColor()));
-	LLHUDManager::getInstance()->sendEffects();
-
-	U32 location_id;
-	U32 sim_ip;
-	U16 sim_port;
-	LLVector3 pos, look_at;
-	U64 region_handle;
-	msg->getU32Fast(_PREHASH_Info, _PREHASH_LocationID, location_id);
-	msg->getIPAddrFast(_PREHASH_Info, _PREHASH_SimIP, sim_ip);
-	msg->getIPPortFast(_PREHASH_Info, _PREHASH_SimPort, sim_port);
-	//msg->getVector3Fast(_PREHASH_Info, _PREHASH_Position, pos);
-	//msg->getVector3Fast(_PREHASH_Info, _PREHASH_LookAt, look_at);
-	msg->getU64Fast(_PREHASH_Info, _PREHASH_RegionHandle, region_handle);
-	U32 teleport_flags;
-	msg->getU32Fast(_PREHASH_Info, _PREHASH_TeleportFlags, teleport_flags);
-	
-	
-	std::string seedCap;
-	msg->getStringFast(_PREHASH_Info, _PREHASH_SeedCapability, seedCap);
-
-	// update home location if we are teleporting out of prelude - specific to teleporting to welcome area 
-	if((teleport_flags & TELEPORT_FLAGS_SET_HOME_TO_TARGET)
-	   && (!gAgent.isGodlike()))
-	{
-		gAgent.setHomePosRegion(region_handle, pos);
-
-		// Create a timer that will send notices when teleporting is all finished.  Since this is 
-		// based on the LLEventTimer class, it will be managed by that class and not orphaned or leaked.
-		new LLPostTeleportNotifiers();
-	}
-
-	LLHost sim_host(sim_ip, sim_port);
-
-	// Viewer trusts the simulator.
-	gMessageSystem->enableCircuit(sim_host, TRUE);
-	LLViewerRegion* regionp =  LLWorld::getInstance()->addRegion(region_handle, sim_host);
-
-/*
-	// send camera update to new region
-	gAgent.updateCamera();
-
-	// likewise make sure the camera is behind the avatar
-	gAgent.resetView(TRUE);
-	LLVector3 shift_vector = regionp->getPosRegionFromGlobal(gAgent.getRegion()->getOriginGlobal());
-	gAgent.setRegion(regionp);
-	gObjectList.shiftObjects(shift_vector);
-
-	if (gAgent.getAvatarObject())
-	{
-		gAgent.getAvatarObject()->clearChatText();
-		gAgent.slamLookAt(look_at);
-	}
-	gAgent.setPositionAgent(pos);
-	gAssetStorage->setUpstream(sim);
-	gCacheName->setUpstream(sim);
-*/
-
-	// now, use the circuit info to tell simulator about us!
-	LL_INFOS("Messaging") << "process_teleport_finish() Enabling "
-			<< sim_host << " with code " << msg->mOurCircuitCode << LL_ENDL;
-	msg->newMessageFast(_PREHASH_UseCircuitCode);
-	msg->nextBlockFast(_PREHASH_CircuitCode);
-	msg->addU32Fast(_PREHASH_Code, msg->getOurCircuitCode());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->addUUIDFast(_PREHASH_ID, gAgent.getID());
-	msg->sendReliable(sim_host);
-
-	send_complete_agent_movement(sim_host);
-	gAgent.setTeleportState( LLAgent::TELEPORT_MOVING );
-	gAgent.setTeleportMessage(LLAgent::sTeleportProgressMessages["contacting"]);
-
-	regionp->setSeedCapability(seedCap);
-
-	// Don't send camera updates to the new region until we're
-	// actually there...
-
-
-	// Now do teleport effect for where you're going.
-	// VEFFECT: TeleportEnd
-	effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE);
-	effectp->setPositionGlobal(gAgent.getPositionGlobal());
-
-	effectp->setColor(LLColor4U(gAgent.getEffectColor()));
-	LLHUDManager::getInstance()->sendEffects();
-
-//	gTeleportDisplay = TRUE;
-//	gTeleportDisplayTimer.reset();
-//	gViewerWindow->setShowProgress(TRUE);
-}
-
-// stuff we have to do every time we get an AvatarInitComplete from a sim
-/*
-void process_avatar_init_complete(LLMessageSystem* msg, void**)
-{
-	LLVector3 agent_pos;
-	msg->getVector3Fast(_PREHASH_AvatarData, _PREHASH_Position, agent_pos);
-	agent_movement_complete(msg->getSender(), agent_pos);
-}
-*/
-
-void process_agent_movement_complete(LLMessageSystem* msg, void**)
-{
-	gAgentMovementCompleted = true;
-
-	LLUUID agent_id;
-	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-	LLUUID session_id;
-	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id);
-	if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id))
-	{
-		LL_WARNS("Messaging") << "Incorrect id in process_agent_movement_complete()"
-				<< LL_ENDL;
-		return;
-	}
-
-	LL_DEBUGS("Messaging") << "process_agent_movement_complete()" << LL_ENDL;
-
-	// *TODO: check timestamp to make sure the movement compleation
-	// makes sense.
-	LLVector3 agent_pos;
-	msg->getVector3Fast(_PREHASH_Data, _PREHASH_Position, agent_pos);
-	LLVector3 look_at;
-	msg->getVector3Fast(_PREHASH_Data, _PREHASH_LookAt, look_at);
-	U64 region_handle;
-	msg->getU64Fast(_PREHASH_Data, _PREHASH_RegionHandle, region_handle);
-	
-	std::string version_channel;
-	msg->getString("SimData", "ChannelVersion", version_channel);
-
-	LLVOAvatar* avatarp = gAgent.getAvatarObject();
-	if (!avatarp)
-	{
-		// Could happen if you were immediately god-teleported away on login,
-		// maybe other cases.  Continue, but warn.
-		LL_WARNS("Messaging") << "agent_movement_complete() with NULL avatarp." << LL_ENDL;
-	}
-
-	F32 x, y;
-	from_region_handle(region_handle, &x, &y);
-	LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromHandle(region_handle);
-	if (!regionp)
-	{
-		if (gAgent.getRegion())
-		{
-			LL_WARNS("Messaging") << "current region " << gAgent.getRegion()->getOriginGlobal() << LL_ENDL;
-		}
-
-		LL_WARNS("Messaging") << "Agent being sent to invalid home region: " 
-			<< x << ":" << y 
-			<< " current pos " << gAgent.getPositionGlobal()
-			<< LL_ENDL;
-		LLAppViewer::instance()->forceDisconnect("You were sent to an invalid region.");
-		return;
-
-	}
-
-	LL_INFOS("Messaging") << "Changing home region to " << x << ":" << y << LL_ENDL;
-
-	// set our upstream host the new simulator and shuffle things as
-	// appropriate.
-	LLVector3 shift_vector = regionp->getPosRegionFromGlobal(
-		gAgent.getRegion()->getOriginGlobal());
-	gAgent.setRegion(regionp);
-	gObjectList.shiftObjects(shift_vector);
-	gAssetStorage->setUpstream(msg->getSender());
-	gCacheName->setUpstream(msg->getSender());
-	gViewerThrottle.sendToSim();
-	gViewerWindow->sendShapeToSim();
-
-	bool is_teleport = gAgent.getTeleportState() == LLAgent::TELEPORT_MOVING;
-
-	if( is_teleport )
-	{
-		// Force the camera back onto the agent, don't animate.
-		gAgent.setFocusOnAvatar(TRUE, FALSE);
-		gAgent.slamLookAt(look_at);
-		gAgent.updateCamera();
-
-		gAgent.setTeleportState( LLAgent::TELEPORT_START_ARRIVAL );
-
-		// set the appearance on teleport since the new sim does not
-		// know what you look like.
-		gAgent.sendAgentSetAppearance();
-
-		if (avatarp)
-		{
-			// Chat the "back" SLURL. (DEV-4907)
-			LLChat chat("Teleport completed from " + gAgent.getTeleportSourceSLURL());
-			chat.mSourceType = CHAT_SOURCE_SYSTEM;
- 			LLFloaterChat::addChatHistory(chat);
-
-			// Set the new position
-			avatarp->setPositionAgent(agent_pos);
-			avatarp->clearChat();
-			avatarp->slamPosition();
-		}
-	}
-	else
-	{
-		// This is likely just the initial logging in phase.
-		gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
-	}
-
-	if ( LLTracker::isTracking(NULL) )
-	{
-		// Check distance to beacon, if < 5m, remove beacon
-		LLVector3d beacon_pos = LLTracker::getTrackedPositionGlobal();
-		LLVector3 beacon_dir(agent_pos.mV[VX] - (F32)fmod(beacon_pos.mdV[VX], 256.0), agent_pos.mV[VY] - (F32)fmod(beacon_pos.mdV[VY], 256.0), 0);
-		if (beacon_dir.magVecSquared() < 25.f)
-		{
-			LLTracker::stopTracking(NULL);
-		}
-		else if ( is_teleport )
-		{
-			//look at the beacon
-			LLVector3 global_agent_pos = agent_pos;
-			global_agent_pos[0] += x;
-			global_agent_pos[1] += y;
-			look_at = (LLVector3)beacon_pos - global_agent_pos;
-			look_at.normVec();
-			gAgent.slamLookAt(look_at);
-		}
-	}
-
-	// TODO: Put back a check for flying status! DK 12/19/05
-	// Sim tells us whether the new position is off the ground
-	/*
-	if (teleport_flags & TELEPORT_FLAGS_IS_FLYING)
-	{
-		gAgent.setFlying(TRUE);
-	}
-	else
-	{
-		gAgent.setFlying(FALSE);
-	}
-	*/
-
-	send_agent_update(TRUE, TRUE);
-
-	if (gAgent.getRegion()->getBlockFly())
-	{
-		gAgent.setFlying(gAgent.canFly());
-	}
-
-	// force simulator to recognize busy state
-	if (gAgent.getBusy())
-	{
-		gAgent.setBusy();
-	}
-	else
-	{
-		gAgent.clearBusy();
-	}
-
-	if (avatarp)
-	{
-		avatarp->mFootPlane.clearVec();
-	}
-	
-	// send walk-vs-run status
-	gAgent.sendWalkRun(gAgent.getRunning() || gAgent.getAlwaysRun());
-
-	// If the server version has changed, display an info box and offer
-	// to display the release notes, unless this is the initial log in.
-	if (gLastVersionChannel == version_channel)
-	{
-		return;
-	}
-
-	if (!gLastVersionChannel.empty())
-	{
-		LLSD payload;
-		payload["message"] = version_channel;
-		LLNotifications::instance().add("ServerVersionChanged", LLSD(), payload, server_version_changed_callback);
-	}
-
-	gLastVersionChannel = version_channel;
-}
-
-bool server_version_changed_callback(const LLSD& notification, const LLSD& response)
-{
-	if(notification["payload"]["message"].asString() =="")
-		return false;
-	std::string url ="http://wiki.secondlife.com/wiki/Release_Notes/";
-	//parse the msg string
-	std::string server_version = notification["payload"]["message"].asString();
-	std::vector<std::string> s_vect;
-	boost::algorithm::split(s_vect, server_version, isspace);
-	for(U32 i = 0; i < s_vect.size(); i++)
-	{
-    	if (i != (s_vect.size() - 1))
-		{
-			if(i != (s_vect.size() - 2))
-			{
-			   url += s_vect[i] + "_";
-			}
-			else
-			{
-				url += s_vect[i] + "/";
-			}
-		}
-		else
-		{
-			url += s_vect[i].substr(0,4);
-		}
-	}
-	
-	LLWeb::loadURL(url);
-	return false;
-}
-
-
-void process_crossed_region(LLMessageSystem* msg, void**)
-{
-	LLUUID agent_id;
-	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-	LLUUID session_id;
-	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id);
-	if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id))
-	{
-		LL_WARNS("Messaging") << "Incorrect id in process_crossed_region()"
-				<< LL_ENDL;
-		return;
-	}
-	LL_INFOS("Messaging") << "process_crossed_region()" << LL_ENDL;
-
-	U32 sim_ip;
-	msg->getIPAddrFast(_PREHASH_RegionData, _PREHASH_SimIP, sim_ip);
-	U16 sim_port;
-	msg->getIPPortFast(_PREHASH_RegionData, _PREHASH_SimPort, sim_port);
-	LLHost sim_host(sim_ip, sim_port);
-	U64 region_handle;
-	msg->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle);
-	
-	std::string seedCap;
-	msg->getStringFast(_PREHASH_RegionData, _PREHASH_SeedCapability, seedCap);
-
-	send_complete_agent_movement(sim_host);
-
-	LLViewerRegion* regionp = LLWorld::getInstance()->addRegion(region_handle, sim_host);
-	regionp->setSeedCapability(seedCap);
-}
-
-
-
-// Sends avatar and camera information to simulator.
-// Sent roughly once per frame, or 20 times per second, whichever is less often
-
-const F32 THRESHOLD_HEAD_ROT_QDOT = 0.9997f;	// ~= 2.5 degrees -- if its less than this we need to update head_rot
-const F32 MAX_HEAD_ROT_QDOT = 0.99999f;			// ~= 0.5 degrees -- if its greater than this then no need to update head_rot
-												// between these values we delay the updates (but no more than one second)
-
-
-void send_agent_update(BOOL force_send, BOOL send_reliable)
-{
-	if (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE)
-	{
-		// We don't care if they want to send an agent update, they're not allowed to until the simulator
-		// that's the target is ready to receive them (after avatar_init_complete is received)
-		return;
-	}
-
-	// We have already requested to log out.  Don't send agent updates.
-	if(LLAppViewer::instance()->logoutRequestSent())
-	{
-		return;
-	}
-
-	// no region to send update to
-	if(gAgent.getRegion() == NULL)
-	{
-		return;
-	}
-
-	const F32 TRANSLATE_THRESHOLD = 0.01f;
-
-	// NOTA BENE: This is (intentionally?) using the small angle sine approximation to test for rotation
-	//			  Plus, there is an extra 0.5 in the mix since the perpendicular between last_camera_at and getAtAxis() bisects cam_rot_change
-	//			  Thus, we're actually testing against 0.2 degrees
-	const F32 ROTATION_THRESHOLD = 0.1f * 2.f*F_PI/360.f;			//  Rotation thresh 0.2 deg, see note above
-
-	const U8 DUP_MSGS = 1;				//  HACK!  number of times to repeat data on motionless agent
-
-	//  Store data on last sent update so that if no changes, no send
-	static LLVector3 last_camera_pos_agent, 
-					 last_camera_at, 
-					 last_camera_left,
-					 last_camera_up;
-	
-	static LLVector3 cam_center_chg,
-					 cam_rot_chg;
-
-	static LLQuaternion last_head_rot;
-	static U32 last_control_flags = 0;
-	static U8 last_render_state;
-	static U8 duplicate_count = 0;
-	static F32 head_rot_chg = 1.0;
-	static U8 last_flags;
-
-	LLMessageSystem	*msg = gMessageSystem;
-	LLVector3		camera_pos_agent;				// local to avatar's region
-	U8				render_state;
-
-	LLQuaternion body_rotation = gAgent.getFrameAgent().getQuaternion();
-	LLQuaternion head_rotation = gAgent.getHeadRotation();
-
-	camera_pos_agent = gAgent.getCameraPositionAgent();
-
-	render_state = gAgent.getRenderState();
-
-	U32		control_flag_change = 0;
-	U8		flag_change = 0;
-
-	cam_center_chg = last_camera_pos_agent - camera_pos_agent;
-	cam_rot_chg = last_camera_at - LLViewerCamera::getInstance()->getAtAxis();
-
-	// If a modifier key is held down, turn off
-	// LBUTTON and ML_LBUTTON so that using the camera (alt-key) doesn't
-	// trigger a control event.
-	U32 control_flags = gAgent.getControlFlags();
-	MASK	key_mask = gKeyboard->currentMask(TRUE);
-	if (key_mask & MASK_ALT || key_mask & MASK_CONTROL)
-	{
-		control_flags &= ~(	AGENT_CONTROL_LBUTTON_DOWN |
-							AGENT_CONTROL_ML_LBUTTON_DOWN );
-		control_flags |= 	AGENT_CONTROL_LBUTTON_UP |
-							AGENT_CONTROL_ML_LBUTTON_UP ;
-	}
-
-	control_flag_change = last_control_flags ^ control_flags;
-
-	U8 flags = AU_FLAGS_NONE;
-	if (gAgent.isGroupTitleHidden())
-	{
-		flags |= AU_FLAGS_HIDETITLE;
-	}
-	if (gAgent.getAutoPilot())
-	{
-		flags |= AU_FLAGS_CLIENT_AUTOPILOT;
-	}
-
-	flag_change = last_flags ^ flags;
-
-	head_rot_chg = dot(last_head_rot, head_rotation);
-
-	if (force_send || 
-		(cam_center_chg.magVec() > TRANSLATE_THRESHOLD) || 
-		(head_rot_chg < THRESHOLD_HEAD_ROT_QDOT) ||	
-		(last_render_state != render_state) ||
-		(cam_rot_chg.magVec() > ROTATION_THRESHOLD) ||
-		control_flag_change != 0 ||
-		flag_change != 0)  
-	{
-/*
-		if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT)
-		{
-			//LL_INFOS("Messaging") << "head rot " << head_rotation << LL_ENDL;
-			LL_INFOS("Messaging") << "head_rot_chg = " << head_rot_chg << LL_ENDL;
-		}
-		if (cam_rot_chg.magVec() > ROTATION_THRESHOLD) 
-		{
-			LL_INFOS("Messaging") << "cam rot " <<  cam_rot_chg.magVec() << LL_ENDL;
-		}
-		if (cam_center_chg.magVec() > TRANSLATE_THRESHOLD)
-		{
-			LL_INFOS("Messaging") << "cam center " << cam_center_chg.magVec() << LL_ENDL;
-		}
-//		if (drag_delta_chg.magVec() > TRANSLATE_THRESHOLD)
-//		{
-//			LL_INFOS("Messaging") << "drag delta " << drag_delta_chg.magVec() << LL_ENDL;
-//		}
-		if (control_flag_change)
-		{
-			LL_INFOS("Messaging") << "dcf = " << control_flag_change << LL_ENDL;
-		}
-*/
-
-		duplicate_count = 0;
-	}
-	else
-	{
-		duplicate_count++;
-
-		if (head_rot_chg < MAX_HEAD_ROT_QDOT  &&  duplicate_count < AGENT_UPDATES_PER_SECOND)
-		{
-			// The head_rotation is sent for updating things like attached guns.
-			// We only trigger a new update when head_rotation deviates beyond
-			// some threshold from the last update, however this can break fine
-			// adjustments when trying to aim an attached gun, so what we do here
-			// (where we would normally skip sending an update when nothing has changed)
-			// is gradually reduce the threshold to allow a better update to 
-			// eventually get sent... should update to within 0.5 degrees in less 
-			// than a second.
-			if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT + (MAX_HEAD_ROT_QDOT - THRESHOLD_HEAD_ROT_QDOT) * duplicate_count / AGENT_UPDATES_PER_SECOND)
-			{
-				duplicate_count = 0;
-			}
-			else
-			{
-				return;
-			}
-		}
-		else
-		{
-			return;
-		}
-	}
-
-	if (duplicate_count < DUP_MSGS && !gDisconnected)
-	{
-		// Build the message
-		msg->newMessageFast(_PREHASH_AgentUpdate);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->addQuatFast(_PREHASH_BodyRotation, body_rotation);
-		msg->addQuatFast(_PREHASH_HeadRotation, head_rotation);
-		msg->addU8Fast(_PREHASH_State, render_state);
-		msg->addU8Fast(_PREHASH_Flags, flags);
-
-//		if (camera_pos_agent.mV[VY] > 255.f)
-//		{
-//			LL_INFOS("Messaging") << "Sending camera center " << camera_pos_agent << LL_ENDL;
-//		}
-		
-		msg->addVector3Fast(_PREHASH_CameraCenter, camera_pos_agent);
-		msg->addVector3Fast(_PREHASH_CameraAtAxis, LLViewerCamera::getInstance()->getAtAxis());
-		msg->addVector3Fast(_PREHASH_CameraLeftAxis, LLViewerCamera::getInstance()->getLeftAxis());
-		msg->addVector3Fast(_PREHASH_CameraUpAxis, LLViewerCamera::getInstance()->getUpAxis());
-		msg->addF32Fast(_PREHASH_Far, gAgent.mDrawDistance);
-		
-		msg->addU32Fast(_PREHASH_ControlFlags, control_flags);
-
-		if (gDebugClicks)
-		{
-			if (control_flags & AGENT_CONTROL_LBUTTON_DOWN)
-			{
-				LL_INFOS("Messaging") << "AgentUpdate left button down" << LL_ENDL;
-			}
-
-			if (control_flags & AGENT_CONTROL_LBUTTON_UP)
-			{
-				LL_INFOS("Messaging") << "AgentUpdate left button up" << LL_ENDL;
-			}
-		}
-
-		gAgent.enableControlFlagReset();
-
-		if (!send_reliable)
-		{
-			gAgent.sendMessage();
-		}
-		else
-		{
-			gAgent.sendReliableMessage();
-		}
-
-//		LL_DEBUGS("Messaging") << "agent " << avatar_pos_agent << " cam " << camera_pos_agent << LL_ENDL;
-
-		// Copy the old data 
-		last_head_rot = head_rotation;
-		last_render_state = render_state;
-		last_camera_pos_agent = camera_pos_agent;
-		last_camera_at = LLViewerCamera::getInstance()->getAtAxis();
-		last_camera_left = LLViewerCamera::getInstance()->getLeftAxis();
-		last_camera_up = LLViewerCamera::getInstance()->getUpAxis();
-		last_control_flags = control_flags;
-		last_flags = flags;
-	}
-}
-
-
-
-// *TODO: Remove this dependency, or figure out a better way to handle
-// this hack.
-extern U32 gObjectBits;
-
-void process_object_update(LLMessageSystem *mesgsys, void **user_data)
-{	
-	LLMemType mt(LLMemType::MTYPE_OBJECT);
-	// Update the data counters
-	if (mesgsys->getReceiveCompressedSize())
-	{
-		gObjectBits += mesgsys->getReceiveCompressedSize() * 8;
-	}
-	else
-	{
-		gObjectBits += mesgsys->getReceiveSize() * 8;
-	}
-
-	// Update the object...
-	gObjectList.processObjectUpdate(mesgsys, user_data, OUT_FULL);
-}
-
-void process_compressed_object_update(LLMessageSystem *mesgsys, void **user_data)
-{
-	LLMemType mt(LLMemType::MTYPE_OBJECT);
-	// Update the data counters
-	if (mesgsys->getReceiveCompressedSize())
-	{
-		gObjectBits += mesgsys->getReceiveCompressedSize() * 8;
-	}
-	else
-	{
-		gObjectBits += mesgsys->getReceiveSize() * 8;
-	}
-
-	// Update the object...
-	gObjectList.processCompressedObjectUpdate(mesgsys, user_data, OUT_FULL_COMPRESSED);
-}
-
-void process_cached_object_update(LLMessageSystem *mesgsys, void **user_data)
-{
-	LLMemType mt(LLMemType::MTYPE_OBJECT);
-	// Update the data counters
-	if (mesgsys->getReceiveCompressedSize())
-	{
-		gObjectBits += mesgsys->getReceiveCompressedSize() * 8;
-	}
-	else
-	{
-		gObjectBits += mesgsys->getReceiveSize() * 8;
-	}
-
-	// Update the object...
-	gObjectList.processCachedObjectUpdate(mesgsys, user_data, OUT_FULL_CACHED);
-}
-
-
-void process_terse_object_update_improved(LLMessageSystem *mesgsys, void **user_data)
-{
-	LLMemType mt(LLMemType::MTYPE_OBJECT);
-	if (mesgsys->getReceiveCompressedSize())
-	{
-		gObjectBits += mesgsys->getReceiveCompressedSize() * 8;
-	}
-	else
-	{
-		gObjectBits += mesgsys->getReceiveSize() * 8;
-	}
-
-	gObjectList.processCompressedObjectUpdate(mesgsys, user_data, OUT_TERSE_IMPROVED);
-}
-
-static LLFastTimer::DeclareTimer FTM_PROCESS_OBJECTS("Process Objects");
-
-
-void process_kill_object(LLMessageSystem *mesgsys, void **user_data)
-{
-	LLFastTimer t(FTM_PROCESS_OBJECTS);
-
-	LLUUID		id;
-	U32			local_id;
-	S32			i;
-	S32			num_objects;
-
-	num_objects = mesgsys->getNumberOfBlocksFast(_PREHASH_ObjectData);
-
-	for (i = 0; i < num_objects; i++)
-	{
-		mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, local_id, i);
-
-		LLViewerObjectList::getUUIDFromLocal(id,
-											local_id,
-											gMessageSystem->getSenderIP(),
-											gMessageSystem->getSenderPort());
-		if (id == LLUUID::null)
-		{
-			LL_DEBUGS("Messaging") << "Unknown kill for local " << local_id << LL_ENDL;
-			gObjectList.mNumUnknownKills++;
-			continue;
-		}
-		else
-		{
-			LL_DEBUGS("Messaging") << "Kill message for local " << local_id << LL_ENDL;
-		}
-
-		LLSelectMgr::getInstance()->removeObjectFromSelections(id);
-
-		// ...don't kill the avatar
-		if (!(id == gAgentID))
-		{
-			LLViewerObject *objectp = gObjectList.findObject(id);
-			if (objectp)
-			{
-				// Display green bubble on kill
-				if ( gShowObjectUpdates )
-				{
-					LLViewerObject* newobject;
-					newobject = gObjectList.createObjectViewer(LL_PCODE_LEGACY_TEXT_BUBBLE, objectp->getRegion());
-
-					LLVOTextBubble* bubble = (LLVOTextBubble*) newobject;
-
-					bubble->mColor.setVec(0.f, 1.f, 0.f, 1.f);
-					bubble->setScale( 2.0f * bubble->getScale() );
-					bubble->setPositionGlobal(objectp->getPositionGlobal());
-					gPipeline.addObject(bubble);
-				}
-
-				// Do the kill
-				gObjectList.killObject(objectp);
-			}
-			else
-			{
-				LL_WARNS("Messaging") << "Object in UUID lookup, but not on object list in kill!" << LL_ENDL;
-				gObjectList.mNumUnknownKills++;
-			}
-		}
-	}
-}
-
-void process_time_synch(LLMessageSystem *mesgsys, void **user_data)
-{
-	LLVector3 sun_direction;
-	LLVector3 sun_ang_velocity;
-	F32 phase;
-	U64	space_time_usec;
-
-    U32 seconds_per_day;
-    U32 seconds_per_year;
-
-	// "SimulatorViewerTimeMessage"
-	mesgsys->getU64Fast(_PREHASH_TimeInfo, _PREHASH_UsecSinceStart, space_time_usec);
-	mesgsys->getU32Fast(_PREHASH_TimeInfo, _PREHASH_SecPerDay, seconds_per_day);
-	mesgsys->getU32Fast(_PREHASH_TimeInfo, _PREHASH_SecPerYear, seconds_per_year);
-
-	// This should eventually be moved to an "UpdateHeavenlyBodies" message
-	mesgsys->getF32Fast(_PREHASH_TimeInfo, _PREHASH_SunPhase, phase);
-	mesgsys->getVector3Fast(_PREHASH_TimeInfo, _PREHASH_SunDirection, sun_direction);
-	mesgsys->getVector3Fast(_PREHASH_TimeInfo, _PREHASH_SunAngVelocity, sun_ang_velocity);
-
-	LLWorld::getInstance()->setSpaceTimeUSec(space_time_usec);
-
-	//LL_DEBUGS("Messaging") << "time_synch() - " << sun_direction << ", " << sun_ang_velocity
-	//		 << ", " << phase << LL_ENDL;
-
-	gSky.setSunPhase(phase);
-	gSky.setSunTargetDirection(sun_direction, sun_ang_velocity);
-	if (!gNoRender && !(gSavedSettings.getBOOL("SkyOverrideSimSunPosition") || gSky.getOverrideSun()))
-	{
-		gSky.setSunDirection(sun_direction, sun_ang_velocity);
-	}
-}
-
-void process_sound_trigger(LLMessageSystem *msg, void **)
-{
-	if (!gAudiop) return;
-
-	U64		region_handle = 0;
-	F32		gain = 0;
-	LLUUID	sound_id;
-	LLUUID	owner_id;
-	LLUUID	object_id;
-	LLUUID	parent_id;
-	LLVector3	pos_local;
-
-	msg->getUUIDFast(_PREHASH_SoundData, _PREHASH_SoundID, sound_id);
-	msg->getUUIDFast(_PREHASH_SoundData, _PREHASH_OwnerID, owner_id);
-	msg->getUUIDFast(_PREHASH_SoundData, _PREHASH_ObjectID, object_id);
-	msg->getUUIDFast(_PREHASH_SoundData, _PREHASH_ParentID, parent_id);
-	msg->getU64Fast(_PREHASH_SoundData, _PREHASH_Handle, region_handle);
-	msg->getVector3Fast(_PREHASH_SoundData, _PREHASH_Position, pos_local);
-	msg->getF32Fast(_PREHASH_SoundData, _PREHASH_Gain, gain);
-
-	// adjust sound location to true global coords
-	LLVector3d	pos_global = from_region_handle(region_handle);
-	pos_global.mdV[VX] += pos_local.mV[VX];
-	pos_global.mdV[VY] += pos_local.mV[VY];
-	pos_global.mdV[VZ] += pos_local.mV[VZ];
-
-	// Don't play a trigger sound if you can't hear it due
-	// to parcel "local audio only" settings.
-	if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global)) return;
-
-	// Don't play sounds triggered by someone you muted.
-	if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return;
-	
-	// Don't play sounds from an object you muted
-	if (LLMuteList::getInstance()->isMuted(object_id)) return;
-
-	// Don't play sounds from an object whose parent you muted
-	if (parent_id.notNull()
-		&& LLMuteList::getInstance()->isMuted(parent_id))
-	{
-		return;
-	}
-
-	// Don't play sounds from a region with maturity above current agent maturity
-	if( !gAgent.canAccessMaturityInRegion( region_handle ) )
-	{
-		return;
-	}
-		
-	gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global);
-}
-
-void process_preload_sound(LLMessageSystem *msg, void **user_data)
-{
-	if (!gAudiop)
-	{
-		return;
-	}
-
-	LLUUID sound_id;
-	LLUUID object_id;
-	LLUUID owner_id;
-
-	msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_SoundID, sound_id);
-	msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_ObjectID, object_id);
-	msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_OwnerID, owner_id);
-
-	LLViewerObject *objectp = gObjectList.findObject(object_id);
-	if (!objectp) return;
-
-	if (LLMuteList::getInstance()->isMuted(object_id)) return;
-	if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return;
-	
-	LLAudioSource *sourcep = objectp->getAudioSource(owner_id);
-	if (!sourcep) return;
-	
-	LLAudioData *datap = gAudiop->getAudioData(sound_id);
-
-	// Note that I don't actually do any loading of the
-	// audio data into a buffer at this point, as it won't actually
-	// help us out.
-
-	// Don't play sounds from a region with maturity above current agent maturity
-	LLVector3d pos_global = objectp->getPositionGlobal();
-	if( !gAgent.canAccessMaturityAtGlobal( pos_global ) )
-	{
-		return;
-	}
-	
-	// Add audioData starts a transfer internally.
-	sourcep->addAudioData(datap, FALSE);
-}
-
-void process_attached_sound(LLMessageSystem *msg, void **user_data)
-{
-	F32 gain = 0;
-	LLUUID sound_id;
-	LLUUID object_id;
-	LLUUID owner_id;
-	U8 flags;
-
-	msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_SoundID, sound_id);
-	msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_ObjectID, object_id);
-	msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_OwnerID, owner_id);
-	msg->getF32Fast(_PREHASH_DataBlock, _PREHASH_Gain, gain);
-	msg->getU8Fast(_PREHASH_DataBlock, _PREHASH_Flags, flags);
-
-	LLViewerObject *objectp = gObjectList.findObject(object_id);
-	if (!objectp)
-	{
-		// we don't know about this object, just bail
-		return;
-	}
-	
-	if (LLMuteList::getInstance()->isMuted(object_id)) return;
-	
-	if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return;
-
-	
-	// Don't play sounds from a region with maturity above current agent maturity
-	LLVector3d pos = objectp->getPositionGlobal();
-	if( !gAgent.canAccessMaturityAtGlobal(pos) )
-	{
-		return;
-	}
-	
-	objectp->setAttachedSound(sound_id, owner_id, gain, flags);
-}
-
-
-void process_attached_sound_gain_change(LLMessageSystem *mesgsys, void **user_data)
-{
-	F32 gain = 0;
-	LLUUID object_guid;
-	LLViewerObject *objectp = NULL;
-
-	mesgsys->getUUIDFast(_PREHASH_DataBlock, _PREHASH_ObjectID, object_guid);
-
-	if (!((objectp = gObjectList.findObject(object_guid))))
-	{
-		// we don't know about this object, just bail
-		return;
-	}
-
- 	mesgsys->getF32Fast(_PREHASH_DataBlock, _PREHASH_Gain, gain);
-
-	objectp->adjustAudioGain(gain);
-}
-
-
-void process_health_message(LLMessageSystem *mesgsys, void **user_data)
-{
-	F32 health;
-
-	mesgsys->getF32Fast(_PREHASH_HealthData, _PREHASH_Health, health);
-
-	if (gStatusBar)
-	{
-		gStatusBar->setHealth((S32)health);
-	}
-}
-
-
-void process_sim_stats(LLMessageSystem *msg, void **user_data)
-{	
-	S32 count = msg->getNumberOfBlocks("Stat");
-	for (S32 i = 0; i < count; ++i)
-	{
-		U32 stat_id;
-		F32 stat_value;
-		msg->getU32("Stat", "StatID", stat_id, i);
-		msg->getF32("Stat", "StatValue", stat_value, i);
-		switch (stat_id)
-		{
-		case LL_SIM_STAT_TIME_DILATION:
-			LLViewerStats::getInstance()->mSimTimeDilation.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_FPS:
-			LLViewerStats::getInstance()->mSimFPS.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_PHYSFPS:
-			LLViewerStats::getInstance()->mSimPhysicsFPS.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_AGENTUPS:
-			LLViewerStats::getInstance()->mSimAgentUPS.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_FRAMEMS:
-			LLViewerStats::getInstance()->mSimFrameMsec.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_NETMS:
-			LLViewerStats::getInstance()->mSimNetMsec.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_SIMOTHERMS:
-			LLViewerStats::getInstance()->mSimSimOtherMsec.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_SIMPHYSICSMS:
-			LLViewerStats::getInstance()->mSimSimPhysicsMsec.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_AGENTMS:
-			LLViewerStats::getInstance()->mSimAgentMsec.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_IMAGESMS:
-			LLViewerStats::getInstance()->mSimImagesMsec.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_SCRIPTMS:
-			LLViewerStats::getInstance()->mSimScriptMsec.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_NUMTASKS:
-			LLViewerStats::getInstance()->mSimObjects.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_NUMTASKSACTIVE:
-			LLViewerStats::getInstance()->mSimActiveObjects.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_NUMAGENTMAIN:
-			LLViewerStats::getInstance()->mSimMainAgents.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_NUMAGENTCHILD:
-			LLViewerStats::getInstance()->mSimChildAgents.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_NUMSCRIPTSACTIVE:
-			LLViewerStats::getInstance()->mSimActiveScripts.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_SCRIPT_EPS:
-			LLViewerStats::getInstance()->mSimScriptEPS.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_INPPS:
-			LLViewerStats::getInstance()->mSimInPPS.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_OUTPPS:
-			LLViewerStats::getInstance()->mSimOutPPS.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_PENDING_DOWNLOADS:
-			LLViewerStats::getInstance()->mSimPendingDownloads.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_PENDING_UPLOADS:
-			LLViewerStats::getInstance()->mSimPendingUploads.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_PENDING_LOCAL_UPLOADS:
-			LLViewerStats::getInstance()->mSimPendingLocalUploads.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_TOTAL_UNACKED_BYTES:
-			LLViewerStats::getInstance()->mSimTotalUnackedBytes.addValue(stat_value / 1024.f);
-			break;
-		case LL_SIM_STAT_PHYSICS_PINNED_TASKS:
-			LLViewerStats::getInstance()->mPhysicsPinnedTasks.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_PHYSICS_LOD_TASKS:
-			LLViewerStats::getInstance()->mPhysicsLODTasks.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_SIMPHYSICSSTEPMS:
-			LLViewerStats::getInstance()->mSimSimPhysicsStepMsec.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_SIMPHYSICSSHAPEMS:
-			LLViewerStats::getInstance()->mSimSimPhysicsShapeUpdateMsec.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_SIMPHYSICSOTHERMS:
-			LLViewerStats::getInstance()->mSimSimPhysicsOtherMsec.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_SIMPHYSICSMEMORY:
-			LLViewerStats::getInstance()->mPhysicsMemoryAllocated.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_SIMSPARETIME:
-			LLViewerStats::getInstance()->mSimSpareMsec.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_SIMSLEEPTIME:
-			LLViewerStats::getInstance()->mSimSleepMsec.addValue(stat_value);
-			break;
-		case LL_SIM_STAT_IOPUMPTIME:
-			LLViewerStats::getInstance()->mSimPumpIOMsec.addValue(stat_value);
-			break;
-		default:
-			// Used to be a commented out warning.
- 			LL_DEBUGS("Messaging") << "Unknown stat id" << stat_id << LL_ENDL;
-		  break;
-		}
-	}
-
-	/*
-	msg->getF32Fast(_PREHASH_Statistics, _PREHASH_PhysicsTimeDilation, time_dilation);
-	LLViewerStats::getInstance()->mSimTDStat.addValue(time_dilation);
-
-	// Process information
-	//	{	CpuUsage			F32				}
-	//	{	SimMemTotal			F32				}
-	//	{	SimMemRSS			F32				}
-	//	{	ProcessUptime		F32				}
-	F32 cpu_usage;
-	F32 sim_mem_total;
-	F32 sim_mem_rss;
-	F32 process_uptime;
-	msg->getF32Fast(_PREHASH_Statistics, _PREHASH_CpuUsage, cpu_usage);
-	msg->getF32Fast(_PREHASH_Statistics, _PREHASH_SimMemTotal, sim_mem_total);
-	msg->getF32Fast(_PREHASH_Statistics, _PREHASH_SimMemRSS, sim_mem_rss);
-	msg->getF32Fast(_PREHASH_Statistics, _PREHASH_ProcessUptime, process_uptime);
-	LLViewerStats::getInstance()->mSimCPUUsageStat.addValue(cpu_usage);
-	LLViewerStats::getInstance()->mSimMemTotalStat.addValue(sim_mem_total);
-	LLViewerStats::getInstance()->mSimMemRSSStat.addValue(sim_mem_rss);
-	*/
-
-	//
-	// Various hacks that aren't statistics, but are being handled here.
-	//
-	U32 max_tasks_per_region;
-	U32 region_flags;
-	msg->getU32("Region", "ObjectCapacity", max_tasks_per_region);
-	msg->getU32("Region", "RegionFlags", region_flags);
-
-	LLViewerRegion* regionp = gAgent.getRegion();
-	if (regionp)
-	{
-		BOOL was_flying = gAgent.getFlying();
-		regionp->setRegionFlags(region_flags);
-		regionp->setMaxTasks(max_tasks_per_region);
-		// HACK: This makes agents drop from the sky if the region is 
-		// set to no fly while people are still in the sim.
-		if (was_flying && regionp->getBlockFly())
-		{
-			gAgent.setFlying(gAgent.canFly());
-		}
-	}
-}
-
-
-
-void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
-{
-	LLUUID	animation_id;
-	LLUUID	uuid;
-	S32		anim_sequence_id;
-	LLVOAvatar *avatarp;
-	
-	mesgsys->getUUIDFast(_PREHASH_Sender, _PREHASH_ID, uuid);
-
-	//clear animation flags
-	avatarp = (LLVOAvatar *)gObjectList.findObject(uuid);
-
-	if (!avatarp)
-	{
-		// no agent by this ID...error?
-		LL_WARNS("Messaging") << "Received animation state for unknown avatar" << uuid << LL_ENDL;
-		return;
-	}
-
-	S32 num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_AnimationList);
-	S32 num_source_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_AnimationSourceList);
-
-	avatarp->mSignaledAnimations.clear();
-	
-	if (avatarp->isSelf())
-	{
-		LLUUID object_id;
-
-		for( S32 i = 0; i < num_blocks; i++ )
-		{
-			mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i);
-			mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i);
-
-			LL_DEBUGS("Messaging") << "Anim sequence ID: " << anim_sequence_id << LL_ENDL;
-
-			avatarp->mSignaledAnimations[animation_id] = anim_sequence_id;
-
-			if (i < num_source_blocks)
-			{
-				mesgsys->getUUIDFast(_PREHASH_AnimationSourceList, _PREHASH_ObjectID, object_id, i);
-			
-				LLViewerObject* object = gObjectList.findObject(object_id);
-				if (object)
-				{
-					object->mFlags |= FLAGS_ANIM_SOURCE;
-
-					BOOL anim_found = FALSE;
-					LLVOAvatar::AnimSourceIterator anim_it = avatarp->mAnimationSources.find(object_id);
-					for (;anim_it != avatarp->mAnimationSources.end(); ++anim_it)
-					{
-						if (anim_it->second == animation_id)
-						{
-							anim_found = TRUE;
-							break;
-						}
-					}
-
-					if (!anim_found)
-					{
-						avatarp->mAnimationSources.insert(LLVOAvatar::AnimationSourceMap::value_type(object_id, animation_id));
-					}
-				}
-			}
-		}
-	}
-	else
-	{
-		for( S32 i = 0; i < num_blocks; i++ )
-		{
-			mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i);
-			mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i);
-			avatarp->mSignaledAnimations[animation_id] = anim_sequence_id;
-		}
-	}
-
-	if (num_blocks)
-	{
-		avatarp->processAnimationStateChanges();
-	}
-}
-
-void process_avatar_appearance(LLMessageSystem *mesgsys, void **user_data)
-{
-	LLUUID uuid;
-	mesgsys->getUUIDFast(_PREHASH_Sender, _PREHASH_ID, uuid);
-
-	LLVOAvatar* avatarp = (LLVOAvatar *)gObjectList.findObject(uuid);
-	if( avatarp )
-	{
-		avatarp->processAvatarAppearance( mesgsys );
-	}
-	else
-	{
-		LL_WARNS("Messaging") << "avatar_appearance sent for unknown avatar " << uuid << LL_ENDL;
-	}
-}
-
-void process_camera_constraint(LLMessageSystem *mesgsys, void **user_data)
-{
-	LLVector4 cameraCollidePlane;
-	mesgsys->getVector4Fast(_PREHASH_CameraCollidePlane, _PREHASH_Plane, cameraCollidePlane);
-
-	gAgent.setCameraCollidePlane(cameraCollidePlane);
-}
-
-void near_sit_object(BOOL success, void *data)
-{
-	if (success)
-	{
-		// Send message to sit on object
-		gMessageSystem->newMessageFast(_PREHASH_AgentSit);
-		gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-		gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		gAgent.sendReliableMessage();
-	}
-}
-
-void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)
-{
-	LLVector3 sitPosition;
-	LLQuaternion sitRotation;
-	LLUUID sitObjectID;
-	BOOL use_autopilot;
-	mesgsys->getUUIDFast(_PREHASH_SitObject, _PREHASH_ID, sitObjectID);
-	mesgsys->getBOOLFast(_PREHASH_SitTransform, _PREHASH_AutoPilot, use_autopilot);
-	mesgsys->getVector3Fast(_PREHASH_SitTransform, _PREHASH_SitPosition, sitPosition);
-	mesgsys->getQuatFast(_PREHASH_SitTransform, _PREHASH_SitRotation, sitRotation);
-	LLVector3 camera_eye;
-	mesgsys->getVector3Fast(_PREHASH_SitTransform, _PREHASH_CameraEyeOffset, camera_eye);
-	LLVector3 camera_at;
-	mesgsys->getVector3Fast(_PREHASH_SitTransform, _PREHASH_CameraAtOffset, camera_at);
-	BOOL force_mouselook;
-	mesgsys->getBOOLFast(_PREHASH_SitTransform, _PREHASH_ForceMouselook, force_mouselook);
-
-	LLVOAvatar* avatar = gAgent.getAvatarObject();
-
-	if (avatar && dist_vec_squared(camera_eye, camera_at) > 0.0001f)
-	{
-		gAgent.setSitCamera(sitObjectID, camera_eye, camera_at);
-	}
-	
-	gAgent.setForceMouselook(force_mouselook);
-
-	LLViewerObject* object = gObjectList.findObject(sitObjectID);
-	if (object)
-	{
-		LLVector3 sit_spot = object->getPositionAgent() + (sitPosition * object->getRotation());
-		if (!use_autopilot || (avatar && avatar->isSitting() && avatar->getRoot() == object->getRoot()))
-		{
-			//we're already sitting on this object, so don't autopilot
-		}
-		else
-		{
-			gAgent.startAutoPilotGlobal(gAgent.getPosGlobalFromAgent(sit_spot), "Sit", &sitRotation, near_sit_object, NULL, 0.5f);
-		}
-	}
-	else
-	{
-		LL_WARNS("Messaging") << "Received sit approval for unknown object " << sitObjectID << LL_ENDL;
-	}
-}
-
-void process_clear_follow_cam_properties(LLMessageSystem *mesgsys, void **user_data)
-{
-	LLUUID		source_id;
-
-	mesgsys->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, source_id);
-
-	LLFollowCamMgr::removeFollowCamParams(source_id);
-}
-
-void process_set_follow_cam_properties(LLMessageSystem *mesgsys, void **user_data)
-{
-	S32			type;
-	F32			value;
-	bool		settingPosition = false;
-	bool		settingFocus	= false;
-	bool		settingFocusOffset = false;
-	LLVector3	position;
-	LLVector3	focus;
-	LLVector3	focus_offset;
-
-	LLUUID		source_id;
-
-	mesgsys->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, source_id);
-
-	LLViewerObject* objectp = gObjectList.findObject(source_id);
-	if (objectp)
-	{
-		objectp->mFlags |= FLAGS_CAMERA_SOURCE;
-	}
-
-	S32 num_objects = mesgsys->getNumberOfBlocks("CameraProperty");
-	for (S32 block_index = 0; block_index < num_objects; block_index++)
-	{
-		mesgsys->getS32("CameraProperty", "Type", type, block_index);
-		mesgsys->getF32("CameraProperty", "Value", value, block_index);
-		switch(type)
-		{
-		case FOLLOWCAM_PITCH:
-			LLFollowCamMgr::setPitch(source_id, value);
-			break;
-		case FOLLOWCAM_FOCUS_OFFSET_X:
-			focus_offset.mV[VX] = value;
-			settingFocusOffset = true;
-			break;
-		case FOLLOWCAM_FOCUS_OFFSET_Y:
-			focus_offset.mV[VY] = value;
-			settingFocusOffset = true;
-			break;
-		case FOLLOWCAM_FOCUS_OFFSET_Z:
-			focus_offset.mV[VZ] = value;
-			settingFocusOffset = true;
-			break;
-		case FOLLOWCAM_POSITION_LAG:
-			LLFollowCamMgr::setPositionLag(source_id, value);
-			break;
-		case FOLLOWCAM_FOCUS_LAG:
-			LLFollowCamMgr::setFocusLag(source_id, value);
-			break;
-		case FOLLOWCAM_DISTANCE:
-			LLFollowCamMgr::setDistance(source_id, value);
-			break;
-		case FOLLOWCAM_BEHINDNESS_ANGLE:
-			LLFollowCamMgr::setBehindnessAngle(source_id, value);
-			break;
-		case FOLLOWCAM_BEHINDNESS_LAG:
-			LLFollowCamMgr::setBehindnessLag(source_id, value);
-			break;
-		case FOLLOWCAM_POSITION_THRESHOLD:
-			LLFollowCamMgr::setPositionThreshold(source_id, value);
-			break;
-		case FOLLOWCAM_FOCUS_THRESHOLD:
-			LLFollowCamMgr::setFocusThreshold(source_id, value);
-			break;
-		case FOLLOWCAM_ACTIVE:
-			//if 1, set using followcam,. 
-			LLFollowCamMgr::setCameraActive(source_id, value != 0.f);
-			break;
-		case FOLLOWCAM_POSITION_X:
-			settingPosition = true;
-			position.mV[ 0 ] = value;
-			break;
-		case FOLLOWCAM_POSITION_Y:
-			settingPosition = true;
-			position.mV[ 1 ] = value;
-			break;
-		case FOLLOWCAM_POSITION_Z:
-			settingPosition = true;
-			position.mV[ 2 ] = value;
-			break;
-		case FOLLOWCAM_FOCUS_X:
-			settingFocus = true;
-			focus.mV[ 0 ] = value;
-			break;
-		case FOLLOWCAM_FOCUS_Y:
-			settingFocus = true;
-			focus.mV[ 1 ] = value;
-			break;
-		case FOLLOWCAM_FOCUS_Z:
-			settingFocus = true;
-			focus.mV[ 2 ] = value;
-			break;
-		case FOLLOWCAM_POSITION_LOCKED:
-			LLFollowCamMgr::setPositionLocked(source_id, value != 0.f);
-			break;
-		case FOLLOWCAM_FOCUS_LOCKED:
-			LLFollowCamMgr::setFocusLocked(source_id, value != 0.f);
-			break;
-
-		default:
-			break;
-		}
-	}
-
-	if ( settingPosition )
-	{
-		LLFollowCamMgr::setPosition(source_id, position);
-	}
-	if ( settingFocus )
-	{
-		LLFollowCamMgr::setFocus(source_id, focus);
-	}
-	if ( settingFocusOffset )
-	{
-		LLFollowCamMgr::setFocusOffset(source_id, focus_offset);
-	}
-}
-//end Ventrella 
-
-
-// Culled from newsim lltask.cpp
-void process_name_value(LLMessageSystem *mesgsys, void **user_data)
-{
-	std::string	temp_str;
-	LLUUID	id;
-	S32		i, num_blocks;
-
-	mesgsys->getUUIDFast(_PREHASH_TaskData, _PREHASH_ID, id);
-
-	LLViewerObject* object = gObjectList.findObject(id);
-
-	if (object)
-	{
-		num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_NameValueData);
-		for (i = 0; i < num_blocks; i++)
-		{
-			mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, temp_str, i);
-			LL_INFOS("Messaging") << "Added to object Name Value: " << temp_str << LL_ENDL;
-			object->addNVPair(temp_str);
-		}
-	}
-	else
-	{
-		LL_INFOS("Messaging") << "Can't find object " << id << " to add name value pair" << LL_ENDL;
-	}
-}
-
-void process_remove_name_value(LLMessageSystem *mesgsys, void **user_data)
-{
-	std::string	temp_str;
-	LLUUID	id;
-	S32		i, num_blocks;
-
-	mesgsys->getUUIDFast(_PREHASH_TaskData, _PREHASH_ID, id);
-
-	LLViewerObject* object = gObjectList.findObject(id);
-
-	if (object)
-	{
-		num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_NameValueData);
-		for (i = 0; i < num_blocks; i++)
-		{
-			mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, temp_str, i);
-			LL_INFOS("Messaging") << "Removed from object Name Value: " << temp_str << LL_ENDL;
-			object->removeNVPair(temp_str);
-		}
-	}
-	else
-	{
-		LL_INFOS("Messaging") << "Can't find object " << id << " to remove name value pair" << LL_ENDL;
-	}
-}
-
-void process_kick_user(LLMessageSystem *msg, void** /*user_data*/)
-{
-	std::string message;
-
-	msg->getStringFast(_PREHASH_UserInfo, _PREHASH_Reason, message);
-
-	LLAppViewer::instance()->forceDisconnect(message);
-}
-
-
-/*
-void process_user_list_reply(LLMessageSystem *msg, void **user_data)
-{
-	LLUserList::processUserListReply(msg, user_data);
-	return;
-	char	firstname[MAX_STRING+1];
-	char	lastname[MAX_STRING+1];
-	U8		status;
-	S32		user_count;
-
-	user_count = msg->getNumberOfBlocks("UserBlock");
-
-	for (S32 i = 0; i < user_count; i++)
-	{
-		msg->getData("UserBlock", i, "FirstName", firstname);
-		msg->getData("UserBlock", i, "LastName", lastname);
-		msg->getData("UserBlock", i, "Status", &status);
-
-		if (status & 0x01)
-		{
-			dialog_friends_add_friend(buffer, TRUE);
-		}
-		else
-		{
-			dialog_friends_add_friend(buffer, FALSE);
-		}
-	}
-
-	dialog_friends_done_adding();
-}
-*/
-
-// this is not handled in processUpdateMessage
-/*
-void process_time_dilation(LLMessageSystem *msg, void **user_data)
-{
-	// get the time_dilation
-	U16 foo;
-	msg->getData("TimeDilation", "TimeDilation", &foo);
-	F32 time_dilation = ((F32) foo) / 65535.f;
-
-	// get the pointer to the right region
-	U32 ip = msg->getSenderIP();
-	U32 port = msg->getSenderPort();
-	LLViewerRegion *regionp = LLWorld::getInstance()->getRegion(ip, port);
-	if (regionp)
-	{
-		regionp->setTimeDilation(time_dilation);
-	}
-}
-*/
-
-
-
-void process_money_balance_reply( LLMessageSystem* msg, void** )
-{
-	S32 balance = 0;
-	S32 credit = 0;
-	S32 committed = 0;
-	std::string desc;
-
-	msg->getS32("MoneyData", "MoneyBalance", balance);
-	msg->getS32("MoneyData", "SquareMetersCredit", credit);
-	msg->getS32("MoneyData", "SquareMetersCommitted", committed);
-	msg->getStringFast(_PREHASH_MoneyData, _PREHASH_Description, desc);
-	LL_INFOS("Messaging") << "L$, credit, committed: " << balance << " " << credit << " "
-			<< committed << LL_ENDL;
-
-	if (gStatusBar)
-	{
-		S32 old_balance = gStatusBar->getBalance();
-
-		// This is an update, not the first transmission of balance
-		if (old_balance != 0)
-		{
-			// this is actually an update
-			if (balance > old_balance)
-			{
-				LLFirstUse::useBalanceIncrease(balance - old_balance);
-			}
-			else if (balance < old_balance)
-			{
-				LLFirstUse::useBalanceDecrease(balance - old_balance);
-			}
-		}
-
-		gStatusBar->setBalance(balance);
-		gStatusBar->setLandCredit(credit);
-		gStatusBar->setLandCommitted(committed);
-	}
-
-	LLUUID tid;
-	msg->getUUID("MoneyData", "TransactionID", tid);
-	static std::deque<LLUUID> recent;
-	if(!desc.empty() && gSavedSettings.getBOOL("NotifyMoneyChange")
-	   && (std::find(recent.rbegin(), recent.rend(), tid) == recent.rend()))
-	{
-		// Make the user confirm the transaction, since they might
-		// have missed something during an event.
-		// *TODO: Translate
-		LLSD args;
-		args["MESSAGE"] = desc;
-		LLNotifications::instance().add("SystemMessage", args);
-
-		// Once the 'recent' container gets large enough, chop some
-		// off the beginning.
-		const U32 MAX_LOOKBACK = 30;
-		const S32 POP_FRONT_SIZE = 12;
-		if(recent.size() > MAX_LOOKBACK)
-		{
-			LL_DEBUGS("Messaging") << "Removing oldest transaction records" << LL_ENDL;
-			recent.erase(recent.begin(), recent.begin() + POP_FRONT_SIZE);
-		}
-		//LL_DEBUGS("Messaging") << "Pushing back transaction " << tid << LL_ENDL;
-		recent.push_back(tid);
-	}
-}
-
-bool handle_special_notification_callback(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotification::getSelectedOption(notification, response);
-	
-	if (0 == option)
-	{
-		// set the preference to the maturity of the region we're calling
-		int preferredMaturity = notification["payload"]["_region_access"].asInteger();
-		gSavedSettings.setU32("PreferredMaturity", preferredMaturity);
-		gAgent.sendMaturityPreferenceToServer(preferredMaturity);
-
-	}
-	
-	return false;
-}
-
-// some of the server notifications need special handling. This is where we do that.
-bool handle_special_notification(std::string notificationID, LLSD& llsdBlock)
-{
-	int regionAccess = llsdBlock["_region_access"].asInteger();
-	llsdBlock["REGIONMATURITY"] = LLViewerRegion::accessToString(regionAccess);
-	
-	// we're going to throw the LLSD in there in case anyone ever wants to use it
-	LLNotifications::instance().add(notificationID+"_Notify", llsdBlock);
-	
-	if (regionAccess == SIM_ACCESS_MATURE)
-	{
-		if (gAgent.isTeen())
-		{
-			LLNotifications::instance().add(notificationID+"_KB", llsdBlock);
-			return true;
-		}
-		else if (gAgent.prefersPG())
-		{
-			LLNotifications::instance().add(notificationID+"_Change", llsdBlock, llsdBlock, handle_special_notification_callback);
-			return true;
-		}
-	}
-	else if (regionAccess == SIM_ACCESS_ADULT)
-	{
-		if (!gAgent.isAdult())
-		{
-			LLNotifications::instance().add(notificationID+"_KB", llsdBlock);
-			return true;
-		}
-		else if (gAgent.prefersPG() || gAgent.prefersMature())
-		{
-			LLNotifications::instance().add(notificationID+"_Change", llsdBlock, llsdBlock, handle_special_notification_callback);
-			return true;
-		}
-	}
-	return false;
-}
-
-bool attempt_standard_notification(LLMessageSystem* msgsystem)
-{
-	// if we have additional alert data
-	if (msgsystem->has(_PREHASH_AlertInfo) && msgsystem->getNumberOfBlocksFast(_PREHASH_AlertInfo) > 0)
-	{
-		// notification was specified using the new mechanism, so we can just handle it here
-		std::string notificationID;
-		std::string llsdRaw;
-		LLSD llsdBlock;
-		msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, notificationID);
-		msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_ExtraParams, llsdRaw);
-		if (llsdRaw.length())
-		{
-			std::istringstream llsdData(llsdRaw);
-			if (!LLSDSerialize::deserialize(llsdBlock, llsdData, llsdRaw.length()))
-			{
-				llwarns << "attempt_standard_notification: Attempted to read notification parameter data into LLSD but failed:" << llsdRaw << llendl;
-			}
-		}
-		
-		if (
-			(notificationID == "RegionEntryAccessBlocked") ||
-			(notificationID == "LandClaimAccessBlocked") ||
-			(notificationID == "LandBuyAccessBlocked")
-		   )
-		{
-			/*---------------------------------------------------------------------
-			 (Commented so a grep will find the notification strings, since
-			 we construct them on the fly; if you add additional notifications,
-			 please update the comment.)
-			 
-			 Could throw any of the following notifications:
-			 
-				RegionEntryAccessBlocked
-				RegionEntryAccessBlocked_Notify
-				RegionEntryAccessBlocked_Change
-				RegionEntryAccessBlocked_KB
-				LandClaimAccessBlocked 
-				LandClaimAccessBlocked_Notify 
-				LandClaimAccessBlocked_Change 
-				LandClaimAccessBlocked_KB 
-				LandBuyAccessBlocked
-				LandBuyAccessBlocked_Notify
-				LandBuyAccessBlocked_Change
-				LandBuyAccessBlocked_KB
-			 
-			-----------------------------------------------------------------------*/ 
-			if (handle_special_notification(notificationID, llsdBlock))
-			{
-				return true;
-			}
-		}
-		
-		LLNotifications::instance().add(notificationID, llsdBlock);
-		return true;
-	}	
-	return false;
-}
-
-
-void process_agent_alert_message(LLMessageSystem* msgsystem, void** user_data)
-{
-	// make sure the cursor is back to the usual default since the
-	// alert is probably due to some kind of error.
-	gViewerWindow->getWindow()->resetBusyCount();
-	
-	if (!attempt_standard_notification(msgsystem))
-	{
-		BOOL modal = FALSE;
-		msgsystem->getBOOL("AlertData", "Modal", modal);
-		std::string buffer;
-		msgsystem->getStringFast(_PREHASH_AlertData, _PREHASH_Message, buffer);
-		process_alert_core(buffer, modal);
-	}
-}
-
-// The only difference between this routine and the previous is the fact that
-// for this routine, the modal parameter is always false. Sadly, for the message
-// handled by this routine, there is no "Modal" parameter on the message, and
-// there's no API to tell if a message has the given parameter or not.
-// So we can't handle the messages with the same handler.
-void process_alert_message(LLMessageSystem *msgsystem, void **user_data)
-{
-	// make sure the cursor is back to the usual default since the
-	// alert is probably due to some kind of error.
-	gViewerWindow->getWindow()->resetBusyCount();
-		
-	if (!attempt_standard_notification(msgsystem))
-	{
-		BOOL modal = FALSE;
-		std::string buffer;
-		msgsystem->getStringFast(_PREHASH_AlertData, _PREHASH_Message, buffer);
-		process_alert_core(buffer, modal);
-	}
-}
-
-void process_alert_core(const std::string& message, BOOL modal)
-{
-	// HACK -- handle callbacks for specific alerts
-	if ( message == "You died and have been teleported to your home location")
-	{
-		LLViewerStats::getInstance()->incStat(LLViewerStats::ST_KILLED_COUNT);
-	}
-	else if( message == "Home position set." )
-	{
-		// save the home location image to disk
-		std::string snap_filename = gDirUtilp->getLindenUserDir();
-		snap_filename += gDirUtilp->getDirDelimiter();
-		snap_filename += SCREEN_HOME_FILENAME;
-		gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight(), FALSE, FALSE);
-	}
-
-	const std::string ALERT_PREFIX("ALERT: ");
-	const std::string NOTIFY_PREFIX("NOTIFY: ");
-	if (message.find(ALERT_PREFIX) == 0)
-	{
-		// Allow the server to spawn a named alert so that server alerts can be
-		// translated out of English.
-		std::string alert_name(message.substr(ALERT_PREFIX.length()));
-		LLNotifications::instance().add(alert_name);
-	}
-	else if (message.find(NOTIFY_PREFIX) == 0)
-	{
-		// Allow the server to spawn a named notification so that server notifications can be
-		// translated out of English.
-		std::string notify_name(message.substr(NOTIFY_PREFIX.length()));
-		LLNotifications::instance().add(notify_name);
-	}
-	else if (message[0] == '/')
-	{
-		// System message is important, show in upper-right box not tip
-		std::string text(message.substr(1));
-		LLSD args;
-		if (text.substr(0,17) == "RESTART_X_MINUTES")
-		{
-			S32 mins = 0;
-			LLStringUtil::convertToS32(text.substr(18), mins);
-			args["MINUTES"] = llformat("%d",mins);
-			LLNotifications::instance().add("RegionRestartMinutes", args);
-		}
-		else if (text.substr(0,17) == "RESTART_X_SECONDS")
-		{
-			S32 secs = 0;
-			LLStringUtil::convertToS32(text.substr(18), secs);
-			args["SECONDS"] = llformat("%d",secs);
-			LLNotifications::instance().add("RegionRestartSeconds", args);
-		}
-		else
-		{
-			std::string new_msg =LLNotifications::instance().getGlobalString(text);
-			args["MESSAGE"] = new_msg;
-			LLNotifications::instance().add("SystemMessage", args);
-		}
-	}
-	else if (modal)
-	{
-		LLSD args;
-		std::string new_msg =LLNotifications::instance().getGlobalString(message);
-		args["ERROR_MESSAGE"] = new_msg;
-		LLNotifications::instance().add("ErrorMessage", args);
-	}
-	else
-	{
-		LLSD args;
-		std::string new_msg =LLNotifications::instance().getGlobalString(message);
-		args["MESSAGE"] = new_msg;
-		LLNotifications::instance().add("SystemMessageTip", args);
-	}
-}
-
-mean_collision_list_t				gMeanCollisionList;
-time_t								gLastDisplayedTime = 0;
-
-void handle_show_mean_events(void *)
-{
-	if (gNoRender)
-	{
-		return;
-	}
-	LLFloaterReg::showInstance("bumps");
-	//LLFloaterBump::showInstance();
-}
-
-void mean_name_callback(const LLUUID &id, const std::string& first, const std::string& last, BOOL always_false)
-{
-	if (gNoRender)
-	{
-		return;
-	}
-
-	static const U32 max_collision_list_size = 20;
-	if (gMeanCollisionList.size() > max_collision_list_size)
-	{
-		mean_collision_list_t::iterator iter = gMeanCollisionList.begin();
-		for (U32 i=0; i<max_collision_list_size; i++) iter++;
-		for_each(iter, gMeanCollisionList.end(), DeletePointer());
-		gMeanCollisionList.erase(iter, gMeanCollisionList.end());
-	}
-
-	for (mean_collision_list_t::iterator iter = gMeanCollisionList.begin();
-		 iter != gMeanCollisionList.end(); ++iter)
-	{
-		LLMeanCollisionData *mcd = *iter;
-		if (mcd->mPerp == id)
-		{
-			mcd->mFirstName = first;
-			mcd->mLastName = last;
-		}
-	}
-}
-
-void process_mean_collision_alert_message(LLMessageSystem *msgsystem, void **user_data)
-{
-	if (gAgent.inPrelude())
-	{
-		// In prelude, bumping is OK.  This dialog is rather confusing to 
-		// newbies, so we don't show it.  Drop the packet on the floor.
-		return;
-	}
-
-	// make sure the cursor is back to the usual default since the
-	// alert is probably due to some kind of error.
-	gViewerWindow->getWindow()->resetBusyCount();
-
-	LLUUID perp;
-	U32	   time;
-	U8	   u8type;
-	EMeanCollisionType	   type;
-	F32    mag;
-
-	S32 i, num = msgsystem->getNumberOfBlocks(_PREHASH_MeanCollision);
-
-	for (i = 0; i < num; i++)
-	{
-		msgsystem->getUUIDFast(_PREHASH_MeanCollision, _PREHASH_Perp, perp);
-		msgsystem->getU32Fast(_PREHASH_MeanCollision, _PREHASH_Time, time);
-		msgsystem->getF32Fast(_PREHASH_MeanCollision, _PREHASH_Mag, mag);
-		msgsystem->getU8Fast(_PREHASH_MeanCollision, _PREHASH_Type, u8type);
-
-		type = (EMeanCollisionType)u8type;
-
-		BOOL b_found = FALSE;
-
-		for (mean_collision_list_t::iterator iter = gMeanCollisionList.begin();
-			 iter != gMeanCollisionList.end(); ++iter)
-		{
-			LLMeanCollisionData *mcd = *iter;
-			if ((mcd->mPerp == perp) && (mcd->mType == type))
-			{
-				mcd->mTime = time;
-				mcd->mMag = mag;
-				b_found = TRUE;
-				break;
-			}
-		}
-
-		if (!b_found)
-		{
-			LLMeanCollisionData *mcd = new LLMeanCollisionData(gAgentID, perp, time, type, mag);
-			gMeanCollisionList.push_front(mcd);
-			const BOOL is_group = FALSE;
-			gCacheName->get(perp, is_group, &mean_name_callback);
-		}
-	}
-}
-
-void process_frozen_message(LLMessageSystem *msgsystem, void **user_data)
-{
-	// make sure the cursor is back to the usual default since the
-	// alert is probably due to some kind of error.
-	gViewerWindow->getWindow()->resetBusyCount();
-	BOOL b_frozen;
-	
-	msgsystem->getBOOL("FrozenData", "Data", b_frozen);
-
-	// TODO: make being frozen change view
-	if (b_frozen)
-	{
-	}
-	else
-	{
-	}
-}
-
-// do some extra stuff once we get our economy data
-void process_economy_data(LLMessageSystem *msg, void** /*user_data*/)
-{
-	LLGlobalEconomy::processEconomyData(msg, LLGlobalEconomy::Singleton::getInstance());
-
-	S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
-
-	LL_INFOS_ONCE("Messaging") << "EconomyData message arrived; upload cost is L$" << upload_cost << LL_ENDL;
-
-	gMenuHolder->childSetLabelArg("Upload Image", "[COST]", llformat("%d", upload_cost));
-	gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", llformat("%d", upload_cost));
-	gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", llformat("%d", upload_cost));
-	gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", llformat("%d", upload_cost));
-}
-
-void notify_cautioned_script_question(const LLSD& notification, const LLSD& response, S32 orig_questions, BOOL granted)
-{
-	// only continue if at least some permissions were requested
-	if (orig_questions)
-	{
-		// check to see if the person we are asking
-
-		// "'[OBJECTNAME]', an object owned by '[OWNERNAME]', 
-		// located in [REGIONNAME] at [REGIONPOS], 
-		// has been <granted|denied> permission to: [PERMISSIONS]."
-
-		LLUIString notice(LLTrans::getString(granted ? "ScriptQuestionCautionChatGranted" : "ScriptQuestionCautionChatDenied"));
-
-		// always include the object name and owner name 
-		notice.setArg("[OBJECTNAME]", notification["payload"]["object_name"].asString());
-		notice.setArg("[OWNERNAME]", notification["payload"]["owner_name"].asString());
-
-		// try to lookup viewerobject that corresponds to the object that
-		// requested permissions (here, taskid->requesting object id)
-		BOOL foundpos = FALSE;
-		LLViewerObject* viewobj = gObjectList.findObject(notification["payload"]["task_id"].asUUID());
-		if (viewobj)
-		{
-			// found the viewerobject, get it's position in its region
-			LLVector3 objpos(viewobj->getPosition());
-			
-			// try to lookup the name of the region the object is in
-			LLViewerRegion* viewregion = viewobj->getRegion();
-			if (viewregion)
-			{
-				// got the region, so include the region and 3d coordinates of the object
-				notice.setArg("[REGIONNAME]", viewregion->getName());				
-				std::string formatpos = llformat("%.1f, %.1f,%.1f", objpos[VX], objpos[VY], objpos[VZ]);
-				notice.setArg("[REGIONPOS]", formatpos);
-
-				foundpos = TRUE;
-			}
-		}
-
-		if (!foundpos)
-		{
-			// unable to determine location of the object
-			notice.setArg("[REGIONNAME]", "(unknown region)");
-			notice.setArg("[REGIONPOS]", "(unknown position)");
-		}
-
-		// check each permission that was requested, and list each 
-		// permission that has been flagged as a caution permission
-		BOOL caution = FALSE;
-		S32 count = 0;
-		std::string perms;
-		for (S32 i = 0; i < SCRIPT_PERMISSION_EOF; i++)
-		{
-			if ((orig_questions & LSCRIPTRunTimePermissionBits[i]) && SCRIPT_QUESTION_IS_CAUTION[i])
-			{
-				count++;
-				caution = TRUE;
-
-				// add a comma before the permission description if it is not the first permission
-				// added to the list or the last permission to check
-				if ((count > 1) && (i < SCRIPT_PERMISSION_EOF))
-				{
-					perms.append(", ");
-				}
-
-				perms.append(LLTrans::getString(SCRIPT_QUESTIONS[i]));
-			}
-		}
-
-		notice.setArg("[PERMISSIONS]", perms);
-
-		// log a chat message as long as at least one requested permission
-		// is a caution permission
-		if (caution)
-		{
-			LLChat chat(notice.getString());
-			LLFloaterChat::addChat(chat, FALSE, FALSE);
-		}
-	}
-}
-
-bool script_question_cb(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotification::getSelectedOption(notification, response);
-	LLMessageSystem *msg = gMessageSystem;
-	S32 orig = notification["payload"]["questions"].asInteger();
-	S32 new_questions = orig;
-
-	// check whether permissions were granted or denied
-	BOOL allowed = TRUE;
-	// the "yes/accept" button is the first button in the template, making it button 0
-	// if any other button was clicked, the permissions were denied
-	if (option != 0)
-	{
-		new_questions = 0;
-		allowed = FALSE;
-	}	
-
-	LLUUID task_id = notification["payload"]["task_id"].asUUID();
-	LLUUID item_id = notification["payload"]["item_id"].asUUID();
-
-	// reply with the permissions granted or denied
-	msg->newMessageFast(_PREHASH_ScriptAnswerYes);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->nextBlockFast(_PREHASH_Data);
-	msg->addUUIDFast(_PREHASH_TaskID, task_id);
-	msg->addUUIDFast(_PREHASH_ItemID, item_id);
-	msg->addS32Fast(_PREHASH_Questions, new_questions);
-	msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
-
-	// only log a chat message if caution prompts are enabled
-	if (gSavedSettings.getBOOL("PermissionsCautionEnabled"))
-	{
-		// log a chat message, if appropriate
-		notify_cautioned_script_question(notification, response, orig, allowed);
-	}
-
-	if ( response["Mute"] ) // mute
-	{
-		LLMuteList::getInstance()->add(LLMute(item_id, notification["payload"]["object_name"].asString(), LLMute::OBJECT));
-
-		// purge the message queue of any previously queued requests from the same source. DEV-4879
-		class OfferMatcher : public LLNotifyBoxView::Matcher
-		{
-		public:
-			OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
-			BOOL matches(const LLNotificationPtr notification) const
-			{
-				if (notification->getName() == "ScriptQuestionCaution"
-					|| notification->getName() == "ScriptQuestion")
-				{
-					return (notification->getPayload()["item_id"].asUUID() == blocked_id);
-				}
-				return FALSE;
-			}
-		private:
-			const LLUUID& blocked_id;
-		};
-		// should do this via the channel
-		gNotifyBoxView->purgeMessagesMatching(OfferMatcher(item_id));
-	}
-
-	if (response["Details"])
-	{
-		// respawn notification...
-		LLNotifications::instance().add(notification["name"], notification["substitutions"], notification["payload"]);
-
-		// ...with description on top
-		LLNotifications::instance().add("DebitPermissionDetails");
-	}
-	return false;
-}
-static LLNotificationFunctorRegistration script_question_cb_reg_1("ScriptQuestion", script_question_cb);
-static LLNotificationFunctorRegistration script_question_cb_reg_2("ScriptQuestionCaution", script_question_cb);
-
-void process_script_question(LLMessageSystem *msg, void **user_data)
-{
-	// *TODO: Translate owner name -> [FIRST] [LAST]
-
-	LLHost sender = msg->getSender();
-
-	LLUUID taskid;
-	LLUUID itemid;
-	S32		questions;
-	std::string object_name;
-	std::string owner_name;
-
-	// taskid -> object key of object requesting permissions
-	msg->getUUIDFast(_PREHASH_Data, _PREHASH_TaskID, taskid );
-	// itemid -> script asset key of script requesting permissions
-	msg->getUUIDFast(_PREHASH_Data, _PREHASH_ItemID, itemid );
-	msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectName, object_name);
-	msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectOwner, owner_name);
-	msg->getS32Fast(_PREHASH_Data, _PREHASH_Questions, questions );
-
-	// Special case. If the objects are owned by this agent, throttle per-object instead
-	// of per-owner. It's common for residents to reset a ton of scripts that re-request
-	// permissions, as with tier boxes. UUIDs can't be valid agent names and vice-versa,
-	// so we'll reuse the same namespace for both throttle types.
-	std::string throttle_name = owner_name;
-	std::string self_name;
-	LLAgentUI::buildName( self_name );
-	if( owner_name == self_name )
-	{
-		throttle_name = taskid.getString();
-	}
-	
-	// don't display permission requests if this object is muted
-	if (LLMuteList::getInstance()->isMuted(taskid)) return;
-	
-	// throttle excessive requests from any specific user's scripts
-	typedef LLKeyThrottle<std::string> LLStringThrottle;
-	static LLStringThrottle question_throttle( LLREQUEST_PERMISSION_THROTTLE_LIMIT, LLREQUEST_PERMISSION_THROTTLE_INTERVAL );
-
-	switch (question_throttle.noteAction(throttle_name))
-	{
-		case LLStringThrottle::THROTTLE_NEWLY_BLOCKED:
-			LL_INFOS("Messaging") << "process_script_question throttled"
-					<< " owner_name:" << owner_name
-					<< LL_ENDL;
-			// Fall through
-
-		case LLStringThrottle::THROTTLE_BLOCKED:
-			// Escape altogether until we recover
-			return;
-
-		case LLStringThrottle::THROTTLE_OK:
-			break;
-	}
-
-	std::string script_question;
-	if (questions)
-	{
-		BOOL caution = FALSE;
-		S32 count = 0;
-		LLSD args;
-		args["OBJECTNAME"] = object_name;
-		args["NAME"] = owner_name;
-
-		// check the received permission flags against each permission
-		for (S32 i = 0; i < SCRIPT_PERMISSION_EOF; i++)
-		{
-			if (questions & LSCRIPTRunTimePermissionBits[i])
-			{
-				count++;
-				script_question += "    " + LLTrans::getString(SCRIPT_QUESTIONS[i]) + "\n";
-
-				// check whether permission question should cause special caution dialog
-				caution |= (SCRIPT_QUESTION_IS_CAUTION[i]);
-			}
-		}
-		args["QUESTIONS"] = script_question;
-
-		LLSD payload;
-		payload["task_id"] = taskid;
-		payload["item_id"] = itemid;
-		payload["sender"] = sender.getIPandPort();
-		payload["questions"] = questions;
-		payload["object_name"] = object_name;
-		payload["owner_name"] = owner_name;
-
-		// check whether cautions are even enabled or not
-		if (gSavedSettings.getBOOL("PermissionsCautionEnabled"))
-		{
-			// display the caution permissions prompt
-			LLNotifications::instance().add(caution ? "ScriptQuestionCaution" : "ScriptQuestion", args, payload);
-		}
-		else
-		{
-			// fall back to default behavior if cautions are entirely disabled
-			LLNotifications::instance().add("ScriptQuestion", args, payload);
-		}
-
-	}
-}
-
-
-void process_derez_container(LLMessageSystem *msg, void**)
-{
-	LL_WARNS("Messaging") << "call to deprecated process_derez_container" << LL_ENDL;
-}
-
-void container_inventory_arrived(LLViewerObject* object,
-								 InventoryObjectList* inventory,
-								 S32 serial_num,
-								 void* data)
-{
-	LL_DEBUGS("Messaging") << "container_inventory_arrived()" << LL_ENDL;
-	if( gAgent.cameraMouselook() )
-	{
-		gAgent.changeCameraToDefault();
-	}
-
-	LLFloaterInventory* view = LLFloaterInventory::getActiveInventory();
-
-	if (inventory->size() > 2)
-	{
-		// create a new inventory category to put this in
-		LLUUID cat_id;
-		cat_id = gInventory.createNewCategory(gInventory.getRootFolderID(),
-											  LLAssetType::AT_NONE,
-											  LLTrans::getString("AcquiredItems"));
-
-		InventoryObjectList::const_iterator it = inventory->begin();
-		InventoryObjectList::const_iterator end = inventory->end();
-		for ( ; it != end; ++it)
-		{
-			if ((*it)->getType() != LLAssetType::AT_CATEGORY &&
-				(*it)->getType() != LLAssetType::AT_ROOT_CATEGORY)
-			{
-				LLInventoryObject* obj = (LLInventoryObject*)(*it);
-				LLInventoryItem* item = (LLInventoryItem*)(obj);
-				LLUUID item_id;
-				item_id.generate();
-				time_t creation_date_utc = time_corrected();
-				LLPointer<LLViewerInventoryItem> new_item
-					= new LLViewerInventoryItem(item_id,
-												cat_id,
-												item->getPermissions(),
-												item->getAssetUUID(),
-												item->getType(),
-												item->getInventoryType(),
-												item->getName(),
-												item->getDescription(),
-												LLSaleInfo::DEFAULT,
-												item->getFlags(),
-												creation_date_utc);
-				new_item->updateServer(TRUE);
-				gInventory.updateItem(new_item);
-			}
-		}
-		gInventory.notifyObservers();
-		if(view)
-		{
-			view->getPanel()->setSelection(cat_id, TAKE_FOCUS_NO);
-		}
-	}
-	else if (inventory->size() == 2)
-	{
-		// we're going to get one fake root category as well as the
-		// one actual object
-		InventoryObjectList::iterator it = inventory->begin();
-
-		if ((*it)->getType() == LLAssetType::AT_CATEGORY ||
-			(*it)->getType() == LLAssetType::AT_ROOT_CATEGORY)
-		{
-			++it;
-		}
-
-		LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
-		LLUUID category = gInventory.findCategoryUUIDForType(item->getType());
-
-		LLUUID item_id;
-		item_id.generate();
-		time_t creation_date_utc = time_corrected();
-		LLPointer<LLViewerInventoryItem> new_item
-			= new LLViewerInventoryItem(item_id, category,
-										item->getPermissions(),
-										item->getAssetUUID(),
-										item->getType(),
-										item->getInventoryType(),
-										item->getName(),
-										item->getDescription(),
-										LLSaleInfo::DEFAULT,
-										item->getFlags(),
-										creation_date_utc);
-		new_item->updateServer(TRUE);
-		gInventory.updateItem(new_item);
-		gInventory.notifyObservers();
-		if(view)
-		{
-			view->getPanel()->setSelection(item_id, TAKE_FOCUS_NO);
-		}
-	}
-
-	// we've got the inventory, now delete this object if this was a take
-	BOOL delete_object = (BOOL)(intptr_t)data;
-	LLViewerRegion *region = gAgent.getRegion();
-	if (delete_object && region)
-	{
-		gMessageSystem->newMessageFast(_PREHASH_ObjectDelete);
-		gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-		gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		const U8 NO_FORCE = 0;
-		gMessageSystem->addU8Fast(_PREHASH_Force, NO_FORCE);
-		gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
-		gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID());
-		gMessageSystem->sendReliable(region->getHost());
-	}
-}
-
-// method to format the time.
-std::string formatted_time(const time_t& the_time)
-{
-	std::string dateStr = "["+LLTrans::getString("LTimeWeek")+"] ["
-						+LLTrans::getString("LTimeMonth")+"] ["
-						+LLTrans::getString("LTimeDay")+"] ["
-						+LLTrans::getString("LTimeHour")+"]:["
-						+LLTrans::getString("LTimeMin")+"]:["
-						+LLTrans::getString("LTimeSec")+"] ["
-						+LLTrans::getString("LTimeYear")+"]";
-
-	LLSD substitution;
-	substitution["datetime"] = (S32) the_time;
-	LLStringUtil::format (dateStr, substitution);
-	return dateStr;
-}
-
-
-void process_teleport_failed(LLMessageSystem *msg, void**)
-{
-	std::string reason;
-	std::string big_reason;
-	LLSD args;
-
-	// if we have additional alert data
-	if (msg->has(_PREHASH_AlertInfo) && msg->getSizeFast(_PREHASH_AlertInfo, _PREHASH_Message) > 0)
-	{
-		// Get the message ID
-		msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, reason);
-		big_reason = LLAgent::sTeleportErrorMessages[reason];
-		if ( big_reason.size() > 0 )
-		{	// Substitute verbose reason from the local map
-			args["REASON"] = big_reason;
-		}
-		else
-		{	// Nothing found in the map - use what the server returned in the original message block
-			msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason);
-			args["REASON"] = reason;
-		}
-
-		LLSD llsd_block;
-		std::string llsd_raw;
-		msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_ExtraParams, llsd_raw);
-		if (llsd_raw.length())
-		{
-			std::istringstream llsd_data(llsd_raw);
-			if (!LLSDSerialize::deserialize(llsd_block, llsd_data, llsd_raw.length()))
-			{
-				llwarns << "process_teleport_failed: Attempted to read alert parameter data into LLSD but failed:" << llsd_raw << llendl;
-			}
-			else
-			{
-				// change notification name in this special case
-				if (handle_special_notification("RegionEntryAccessBlocked", llsd_block))
-				{
-					if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
-					{
-						gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
-					}
-					return;
-				}
-			}
-		}
-
-	}
-	else
-	{
-		msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason);
-
-		big_reason = LLAgent::sTeleportErrorMessages[reason];
-		if ( big_reason.size() > 0 )
-		{	// Substitute verbose reason from the local map
-			args["REASON"] = big_reason;
-		}
-		else
-		{	// Nothing found in the map - use what the server returned
-			args["REASON"] = reason;
-		}
-	}
-
-	LLNotifications::instance().add("CouldNotTeleportReason", args);
-
-	// Let the interested parties know that teleport failed.
-	LLViewerParcelMgr::getInstance()->onTeleportFailed();
-
-	if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
-	{
-		gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
-	}
-}
-
-void process_teleport_local(LLMessageSystem *msg,void**)
-{
-	LLUUID agent_id;
-	msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id);
-	if (agent_id != gAgent.getID())
-	{
-		LL_WARNS("Messaging") << "Got teleport notification for wrong agent!" << LL_ENDL;
-		return;
-	}
-
-	U32 location_id;
-	LLVector3 pos, look_at;
-	U32 teleport_flags;
-	msg->getU32Fast(_PREHASH_Info, _PREHASH_LocationID, location_id);
-	msg->getVector3Fast(_PREHASH_Info, _PREHASH_Position, pos);
-	msg->getVector3Fast(_PREHASH_Info, _PREHASH_LookAt, look_at);
-	msg->getU32Fast(_PREHASH_Info, _PREHASH_TeleportFlags, teleport_flags);
-
-	if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
-	{
-		gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
-	}
-
-	// Sim tells us whether the new position is off the ground
-	if (teleport_flags & TELEPORT_FLAGS_IS_FLYING)
-	{
-		gAgent.setFlying(TRUE);
-	}
-	else
-	{
-		gAgent.setFlying(FALSE);
-	}
-
-	gAgent.setPositionAgent(pos);
-	gAgent.slamLookAt(look_at);
-
-	// likewise make sure the camera is behind the avatar
-	gAgent.resetView(TRUE, TRUE);
-
-	// send camera update to new region
-	gAgent.updateCamera();
-
-	send_agent_update(TRUE, TRUE);
-
-	// Let the interested parties know we've teleported.
-	// Vadim *HACK: Agent position seems to get reset (to render position?)
-	//              on each frame, so we have to pass the new position manually.
-	LLViewerParcelMgr::getInstance()->onTeleportFinished(true, gAgent.getPosGlobalFromAgent(pos));
-}
-
-void send_simple_im(const LLUUID& to_id,
-					const std::string& message,
-					EInstantMessage dialog,
-					const LLUUID& id)
-{
-	std::string my_name;
-	LLAgentUI::buildFullname(my_name);
-	send_improved_im(to_id,
-					 my_name,
-					 message,
-					 IM_ONLINE,
-					 dialog,
-					 id,
-					 NO_TIMESTAMP,
-					 (U8*)EMPTY_BINARY_BUCKET,
-					 EMPTY_BINARY_BUCKET_SIZE);
-}
-
-void send_group_notice(const LLUUID& group_id,
-					   const std::string& subject,
-					   const std::string& message,
-					   const LLInventoryItem* item)
-{
-	// Put this notice into an instant message form.
-	// This will mean converting the item to a binary bucket,
-	// and the subject/message into a single field.
-	std::string my_name;
-	LLAgentUI::buildFullname(my_name);
-
-	// Combine subject + message into a single string.
-	std::ostringstream subject_and_message;
-	// TODO: turn all existing |'s into ||'s in subject and message.
-	subject_and_message << subject << "|" << message;
-
-	// Create an empty binary bucket.
-	U8 bin_bucket[MAX_INVENTORY_BUFFER_SIZE];
-	U8* bucket_to_send = bin_bucket;
-	bin_bucket[0] = '\0';
-	S32 bin_bucket_size = EMPTY_BINARY_BUCKET_SIZE;
-	// If there is an item being sent, pack it into the binary bucket.
-	if (item)
-	{
-		LLSD item_def;
-		item_def["item_id"] = item->getUUID();
-		item_def["owner_id"] = item->getPermissions().getOwner();
-		std::ostringstream ostr;
-		LLSDSerialize::serialize(item_def, ostr, LLSDSerialize::LLSD_XML);
-		bin_bucket_size = ostr.str().copy(
-			(char*)bin_bucket, ostr.str().size());
-		bin_bucket[bin_bucket_size] = '\0';
-	}
-	else
-	{
-		bucket_to_send = (U8*) EMPTY_BINARY_BUCKET;
-	}
-   
-
-	send_improved_im(
-			group_id,
-			my_name,
-			subject_and_message.str(),
-			IM_ONLINE,
-			IM_GROUP_NOTICE,
-			LLUUID::null,
-			NO_TIMESTAMP,
-			bucket_to_send,
-			bin_bucket_size);
-}
-
-bool handle_lure_callback(const LLSD& notification, const LLSD& response)
-{
-	std::string text = response["message"].asString();
-	S32 option = LLNotification::getSelectedOption(notification, response);
-
-	if(0 == option)
-	{
-		LLMessageSystem* msg = gMessageSystem;
-		msg->newMessageFast(_PREHASH_StartLure);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->nextBlockFast(_PREHASH_Info);
-		msg->addU8Fast(_PREHASH_LureType, (U8)0); // sim will fill this in.
-		msg->addStringFast(_PREHASH_Message, text);
-		for(LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray();
-			it != notification["payload"]["ids"].endArray();
-			++it)
-		{
-			msg->nextBlockFast(_PREHASH_TargetData);
-			msg->addUUIDFast(_PREHASH_TargetID, it->asUUID());
-		}
-		gAgent.sendReliableMessage();
-	}
-
-	return false;
-}
-
-void handle_lure(const LLUUID& invitee)
-{
-	LLDynamicArray<LLUUID> ids;
-	ids.push_back(invitee);
-	handle_lure(ids);
-}
-
-// Prompt for a message to the invited user.
-void handle_lure(const std::vector<LLUUID>& ids)
-{
-	LLSD edit_args;
-	edit_args["REGION"] = gAgent.getRegion()->getName();
-
-	LLSD payload;
-	for (LLDynamicArray<LLUUID>::const_iterator it = ids.begin();
-		it != ids.end();
-		++it)
-	{
-		payload["ids"].append(*it);
-	}
-	if (gAgent.isGodlike())
-	{
-		LLNotifications::instance().add("OfferTeleportFromGod", edit_args, payload, handle_lure_callback);
-	}
-	else
-	{
-		LLNotifications::instance().add("OfferTeleport", edit_args, payload, handle_lure_callback);
-	}
-}
-
-
-void send_improved_im(const LLUUID& to_id,
-							const std::string& name,
-							const std::string& message,
-							U8 offline,
-							EInstantMessage dialog,
-							const LLUUID& id,
-							U32 timestamp, 
-							const U8* binary_bucket,
-							S32 binary_bucket_size)
-{
-	pack_instant_message(
-		gMessageSystem,
-		gAgent.getID(),
-		FALSE,
-		gAgent.getSessionID(),
-		to_id,
-		name,
-		message,
-		offline,
-		dialog,
-		id,
-		0,
-		LLUUID::null,
-		gAgent.getPositionAgent(),
-		timestamp,
-		binary_bucket,
-		binary_bucket_size);
-	gAgent.sendReliableMessage();
-}
-
-
-void send_places_query(const LLUUID& query_id,
-					   const LLUUID& trans_id,
-					   const std::string& query_text,
-					   U32 query_flags,
-					   S32 category,
-					   const std::string& sim_name)
-{
-	LLMessageSystem* msg = gMessageSystem;
-
-	msg->newMessage("PlacesQuery");
-	msg->nextBlock("AgentData");
-	msg->addUUID("AgentID", gAgent.getID());
-	msg->addUUID("SessionID", gAgent.getSessionID());
-	msg->addUUID("QueryID", query_id);
-	msg->nextBlock("TransactionData");
-	msg->addUUID("TransactionID", trans_id);
-	msg->nextBlock("QueryData");
-	msg->addString("QueryText", query_text);
-	msg->addU32("QueryFlags", query_flags);
-	msg->addS8("Category", (S8)category);
-	msg->addString("SimName", sim_name);
-	gAgent.sendReliableMessage();
-}
-
-
-void process_user_info_reply(LLMessageSystem* msg, void**)
-{
-	LLUUID agent_id;
-	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-	if(agent_id != gAgent.getID())
-	{
-		LL_WARNS("Messaging") << "process_user_info_reply - "
-				<< "wrong agent id." << LL_ENDL;
-	}
-	
-	BOOL im_via_email;
-	msg->getBOOLFast(_PREHASH_UserData, _PREHASH_IMViaEMail, im_via_email);
-	std::string email;
-	msg->getStringFast(_PREHASH_UserData, _PREHASH_EMail, email);
-	std::string dir_visibility;
-	msg->getString( "UserData", "DirectoryVisibility", dir_visibility);
-
-	LLFloaterPreference::updateUserInfo(dir_visibility, im_via_email, email);
-	LLFloaterPostcard::updateUserInfo(email);
-}
-
-
-//---------------------------------------------------------------------------
-// Script Dialog
-//---------------------------------------------------------------------------
-
-const S32 SCRIPT_DIALOG_MAX_BUTTONS = 12;
-const S32 SCRIPT_DIALOG_BUTTON_STR_SIZE = 24;
-const S32 SCRIPT_DIALOG_MAX_MESSAGE_SIZE = 512;
-const char* SCRIPT_DIALOG_HEADER = "Script Dialog:\n";
-
-bool callback_script_dialog(const LLSD& notification, const LLSD& response)
-{
-	LLNotificationForm form(notification["form"]);
-	std::string button = LLNotification::getSelectedOptionName(response);
-	S32 button_idx = LLNotification::getSelectedOption(notification, response);
-	// Didn't click "Ignore"
-	if (button_idx != -1)
-	{
-		LLMessageSystem* msg = gMessageSystem;
-		msg->newMessage("ScriptDialogReply");
-		msg->nextBlock("AgentData");
-		msg->addUUID("AgentID", gAgent.getID());
-		msg->addUUID("SessionID", gAgent.getSessionID());
-		msg->nextBlock("Data");
-		msg->addUUID("ObjectID", notification["payload"]["object_id"].asUUID());
-		msg->addS32("ChatChannel", notification["payload"]["chat_channel"].asInteger());
-		msg->addS32("ButtonIndex", button_idx);
-		msg->addString("ButtonLabel", button);
-		msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
-	}
-
-	return false;
-}
-static LLNotificationFunctorRegistration callback_script_dialog_reg_1("ScriptDialog", callback_script_dialog);
-static LLNotificationFunctorRegistration callback_script_dialog_reg_2("ScriptDialogGroup", callback_script_dialog);
-
-void process_script_dialog(LLMessageSystem* msg, void**)
-{
-	S32 i;
-	LLSD payload;
-
-	LLUUID object_id;
-	msg->getUUID("Data", "ObjectID", object_id);
-
-	if (LLMuteList::getInstance()->isMuted(object_id))
-	{
-		return;
-	}
-
-	std::string message; 
-	std::string first_name;
-	std::string last_name;
-	std::string title;
-
-	S32 chat_channel;
-	msg->getString("Data", "FirstName", first_name);
-	msg->getString("Data", "LastName", last_name);
-	msg->getString("Data", "ObjectName", title);
-	msg->getString("Data", "Message", message);
-	msg->getS32("Data", "ChatChannel", chat_channel);
-
-		// unused for now
-	LLUUID image_id;
-	msg->getUUID("Data", "ImageID", image_id);
-
-	payload["sender"] = msg->getSender().getIPandPort();
-	payload["object_id"] = object_id;
-	payload["chat_channel"] = chat_channel;
-
-	// build up custom form
-	S32 button_count = msg->getNumberOfBlocks("Buttons");
-	if (button_count > SCRIPT_DIALOG_MAX_BUTTONS)
-	{
-		llwarns << "Too many script dialog buttons - omitting some" << llendl;
-		button_count = SCRIPT_DIALOG_MAX_BUTTONS;
-	}
-
-	LLNotificationForm form;
-	for (i = 0; i < button_count; i++)
-	{
-		std::string tdesc;
-		msg->getString("Buttons", "ButtonLabel", tdesc, i);
-		form.addElement("button", std::string(tdesc));
-	}
-
-	LLSD args;
-	args["TITLE"] = title;
-	args["MESSAGE"] = message;
-	LLNotificationPtr notification;
-	if (!first_name.empty())
-	{
-		args["FIRST"] = first_name;
-		args["LAST"] = last_name;
-		notification = LLNotifications::instance().add(
-			LLNotification::Params("ScriptDialog").substitutions(args).payload(payload).form_elements(form.asLLSD()));
-	}
-	else
-	{
-		args["GROUPNAME"] = last_name;
-		notification = LLNotifications::instance().add(
-			LLNotification::Params("ScriptDialogGroup").substitutions(args).payload(payload).form_elements(form.asLLSD()));
-	}
-}
-
-//---------------------------------------------------------------------------
-
-
-std::vector<LLSD> gLoadUrlList;
-
-bool callback_load_url(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotification::getSelectedOption(notification, response);
-
-	if (0 == option)
-	{
-		LLWeb::loadURL(notification["payload"]["url"].asString());
-	}
-
-	return false;
-}
-static LLNotificationFunctorRegistration callback_load_url_reg("LoadWebPage", callback_load_url);
-
-
-// We've got the name of the person who owns the object hurling the url.
-// Display confirmation dialog.
-void callback_load_url_name(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)
-{
-	std::vector<LLSD>::iterator it;
-	for (it = gLoadUrlList.begin(); it != gLoadUrlList.end(); )
-	{
-		LLSD load_url_info = *it;
-		if (load_url_info["owner_id"].asUUID() == id)
-		{
-			it = gLoadUrlList.erase(it);
-
-			std::string owner_name;
-			if (is_group)
-			{
-				owner_name = first + LLTrans::getString("Group");
-			}
-			else
-			{
-				owner_name = first + " " + last;
-			}
-
-			// For legacy name-only mutes.
-			if (LLMuteList::getInstance()->isMuted(LLUUID::null, owner_name))
-			{
-				continue;
-			}
-			LLSD args;
-			args["URL"] = load_url_info["url"].asString();
-			args["MESSAGE"] = load_url_info["message"].asString();;
-			args["OBJECTNAME"] = load_url_info["object_name"].asString();
-			args["NAME"] = owner_name;
-
-			LLNotifications::instance().add("LoadWebPage", args, load_url_info);
-		}
-		else
-		{
-			++it;
-		}
-	}
-}
-
-void process_load_url(LLMessageSystem* msg, void**)
-{
-	LLUUID object_id;
-	LLUUID owner_id;
-	BOOL owner_is_group;
-	char object_name[256];		/* Flawfinder: ignore */
-	char message[256];		/* Flawfinder: ignore */
-	char url[256];		/* Flawfinder: ignore */
-
-	msg->getString("Data", "ObjectName", 256, object_name);
-	msg->getUUID(  "Data", "ObjectID", object_id);
-	msg->getUUID(  "Data", "OwnerID", owner_id);
-	msg->getBOOL(  "Data", "OwnerIsGroup", owner_is_group);
-	msg->getString("Data", "Message", 256, message);
-	msg->getString("Data", "URL", 256, url);
-
-	LLSD payload;
-	payload["object_id"] = object_id;
-	payload["owner_id"] = owner_id;
-	payload["owner_is_group"] = owner_is_group;
-	payload["object_name"] = object_name;
-	payload["message"] = message;
-	payload["url"] = url;
-
-	// URL is safety checked in load_url above
-
-	// Check if object or owner is muted
-	if (LLMuteList::getInstance()->isMuted(object_id, object_name) ||
-	    LLMuteList::getInstance()->isMuted(owner_id))
-	{
-		LL_INFOS("Messaging")<<"Ignoring load_url from muted object/owner."<<LL_ENDL;
-		return;
-	}
-
-	// Add to list of pending name lookups
-	gLoadUrlList.push_back(payload);
-
-	gCacheName->get(owner_id, owner_is_group, &callback_load_url_name);
-}
-
-
-void callback_download_complete(void** data, S32 result, LLExtStat ext_status)
-{
-	std::string* filepath = (std::string*)data;
-	LLSD args;
-	args["DOWNLOAD_PATH"] = *filepath;
-	LLNotifications::instance().add("FinishedRawDownload", args);
-	delete filepath;
-}
-
-
-void process_initiate_download(LLMessageSystem* msg, void**)
-{
-	LLUUID agent_id;
-	msg->getUUID("AgentData", "AgentID", agent_id);
-	if (agent_id != gAgent.getID())
-	{
-		LL_WARNS("Messaging") << "Initiate download for wrong agent" << LL_ENDL;
-		return;
-	}
-
-	std::string sim_filename;
-	std::string viewer_filename;
-	msg->getString("FileData", "SimFilename", sim_filename);
-	msg->getString("FileData", "ViewerFilename", viewer_filename);
-
-	if (!gXferManager->validateFileForRequest(viewer_filename))
-	{
-		llwarns << "SECURITY: Unauthorized download to local file " << viewer_filename << llendl;
-		return;
-	}
-	gXferManager->requestFile(viewer_filename,
-		sim_filename,
-		LL_PATH_NONE,
-		msg->getSender(),
-		FALSE,	// don't delete remote
-		callback_download_complete,
-		(void**)new std::string(viewer_filename));
-}
-
-
-void process_script_teleport_request(LLMessageSystem* msg, void**)
-{
-	std::string object_name;
-	std::string sim_name;
-	LLVector3 pos;
-	LLVector3 look_at;
-
-	msg->getString("Data", "ObjectName", object_name);
-	msg->getString("Data", "SimName", sim_name);
-	msg->getVector3("Data", "SimPosition", pos);
-	msg->getVector3("Data", "LookAt", look_at);
-
-	LLFloaterWorldMap* instance = LLFloaterWorldMap::getInstance();
-	if(instance)
-	{
-		instance->trackURL(
-						   sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
-		LLFloaterReg::showInstance("world_map", "center");
-	}
-	
-	// remove above two lines and replace with below line
-	// to re-enable parcel browser for llMapDestination()
-	// LLURLDispatcher::dispatch(LLSLURL::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE);
-	
-}
-
-void process_covenant_reply(LLMessageSystem* msg, void**)
-{
-	LLUUID covenant_id, estate_owner_id;
-	std::string estate_name;
-	U32 covenant_timestamp;
-	msg->getUUID("Data", "CovenantID", covenant_id);
-	msg->getU32("Data", "CovenantTimestamp", covenant_timestamp);
-	msg->getString("Data", "EstateName", estate_name);
-	msg->getUUID("Data", "EstateOwnerID", estate_owner_id);
-
-	LLPanelEstateCovenant::updateEstateName(estate_name);
-	LLPanelLandCovenant::updateEstateName(estate_name);
-	LLFloaterBuyLand::updateEstateName(estate_name);
-
-	std::string owner_name =
-		LLSLURL::buildCommand("agent", estate_owner_id, "inspect");
-	LLPanelEstateCovenant::updateEstateOwnerName(owner_name);
-	LLPanelLandCovenant::updateEstateOwnerName(owner_name);
-	LLFloaterBuyLand::updateEstateOwnerName(owner_name);
-
-	LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info");
-	if (panel)
-	{
-		panel->updateEstateName(estate_name);
-		panel->updateEstateOwnerName(owner_name);
-	}
-
-	// standard message, not from system
-	std::string last_modified;
-	if (covenant_timestamp == 0)
-	{
-		last_modified = LLTrans::getString("covenant_last_modified")+LLTrans::getString("never_text");
-	}
-	else
-	{
-		last_modified = LLTrans::getString("covenant_last_modified")+"["
-						+LLTrans::getString("LTimeWeek")+"] ["
-						+LLTrans::getString("LTimeMonth")+"] ["
-						+LLTrans::getString("LTimeDay")+"] ["
-						+LLTrans::getString("LTimeHour")+"]:["
-						+LLTrans::getString("LTimeMin")+"]:["
-						+LLTrans::getString("LTimeSec")+"] ["
-						+LLTrans::getString("LTimeYear")+"]";
-		LLSD substitution;
-		substitution["datetime"] = (S32) covenant_timestamp;
-		LLStringUtil::format (last_modified, substitution);
-	}
-
-	LLPanelEstateCovenant::updateLastModified(last_modified);
-	LLPanelLandCovenant::updateLastModified(last_modified);
-	LLFloaterBuyLand::updateLastModified(last_modified);
-
-	// load the actual covenant asset data
-	const BOOL high_priority = TRUE;
-	if (covenant_id.notNull())
-	{
-		gAssetStorage->getEstateAsset(gAgent.getRegionHost(),
-									gAgent.getID(),
-									gAgent.getSessionID(),
-									covenant_id,
-                                    LLAssetType::AT_NOTECARD,
-									ET_Covenant,
-                                    onCovenantLoadComplete,
-									NULL,
-									high_priority);
-	}
-	else
-	{
-		std::string covenant_text;
-		if (estate_owner_id.isNull())
-		{
-			// mainland
-			covenant_text = LLTrans::getString("RegionNoCovenant");
-		}
-		else
-		{
-			covenant_text = LLTrans::getString("RegionNoCovenantOtherOwner");
-		}
-		LLPanelEstateCovenant::updateCovenantText(covenant_text, covenant_id);
-		LLPanelLandCovenant::updateCovenantText(covenant_text);
-		LLFloaterBuyLand::updateCovenantText(covenant_text, covenant_id);
-		if (panel)
-		{
-			panel->updateCovenantText(covenant_text);
-		}
-	}
-}
-
-void onCovenantLoadComplete(LLVFS *vfs,
-					const LLUUID& asset_uuid,
-					LLAssetType::EType type,
-					void* user_data, S32 status, LLExtStat ext_status)
-{
-	LL_DEBUGS("Messaging") << "onCovenantLoadComplete()" << LL_ENDL;
-	std::string covenant_text;
-	if(0 == status)
-	{
-		LLVFile file(vfs, asset_uuid, type, LLVFile::READ);
-		
-		S32 file_length = file.getSize();
-		
-		std::vector<char> buffer(file_length+1);
-		file.read((U8*)&buffer[0], file_length);		
-		// put a EOS at the end
-		buffer[file_length] = '\0';
-		
-		if( (file_length > 19) && !strncmp( &buffer[0], "Linden text version", 19 ) )
-		{
-			LLViewerTextEditor::Params params;
-			params.name("temp");
-			params.max_text_length(file_length+1);
-			LLViewerTextEditor * editor = LLUICtrlFactory::create<LLViewerTextEditor> (params);
-			if( !editor->importBuffer( &buffer[0], file_length+1 ) )
-			{
-				LL_WARNS("Messaging") << "Problem importing estate covenant." << LL_ENDL;
-				covenant_text = "Problem importing estate covenant.";
-			}
-			else
-			{
-				// Version 0 (just text, doesn't include version number)
-				covenant_text = editor->getText();
-			}
-			delete editor;
-		}
-		else
-		{
-			LL_WARNS("Messaging") << "Problem importing estate covenant: Covenant file format error." << LL_ENDL;
-			covenant_text = "Problem importing estate covenant: Covenant file format error.";
-		}
-	}
-	else
-	{
-		LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
-		
-		if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
-		    LL_ERR_FILE_EMPTY == status)
-		{
-			covenant_text = "Estate covenant notecard is missing from database.";
-		}
-		else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
-		{
-			covenant_text = "Insufficient permissions to view estate covenant.";
-		}
-		else
-		{
-			covenant_text = "Unable to load estate covenant at this time.";
-		}
-		
-		LL_WARNS("Messaging") << "Problem loading notecard: " << status << LL_ENDL;
-	}
-	LLPanelEstateCovenant::updateCovenantText(covenant_text, asset_uuid);
-	LLPanelLandCovenant::updateCovenantText(covenant_text);
-	LLFloaterBuyLand::updateCovenantText(covenant_text, asset_uuid);
-
-	LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info");
-	if (panel)
-	{
-		panel->updateCovenantText(covenant_text);
-	}
-}
-
-
-void process_feature_disabled_message(LLMessageSystem* msg, void**)
-{
-	// Handle Blacklisted feature simulator response...
-	LLUUID	agentID;
-	LLUUID	transactionID;
-	std::string	messageText;
-	msg->getStringFast(_PREHASH_FailureInfo,_PREHASH_ErrorMessage, messageText,0);
-	msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_AgentID,agentID);
-	msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_TransactionID,transactionID);
-	
-	LL_WARNS("Messaging") << "Blacklisted Feature Response:" << messageText << LL_ENDL;
-}
-
-// ------------------------------------------------------------
-// Message system exception callbacks
-// ------------------------------------------------------------
-
-void invalid_message_callback(LLMessageSystem* msg,
-								   void*,
-								   EMessageException exception)
-{
-    LLAppViewer::instance()->badNetworkHandler();
-}
-
-// Please do not add more message handlers here. This file is huge.
-// Put them in a file related to the functionality you are implementing.
-
-void LLOfferInfo::forceResponse(InventoryOfferResponse response)
-{
-	LLNotification::Params params("UserGiveItem");
-	params.functor.function(boost::bind(&LLOfferInfo::inventory_offer_callback, this, _1, _2));
-	LLNotifications::instance().forceResponse(params, response);
-}
+/** 
+ * @file llviewermessage.cpp
+ * @brief Dumping ground for viewer-side message system callbacks.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llviewermessage.h"
+
+#include <deque>
+
+#include "llaudioengine.h" 
+#include "indra_constants.h"
+#include "lscript_byteformat.h"
+#include "mean_collision_data.h"
+#include "llfloaterbump.h"
+#include "llassetstorage.h"
+#include "llcachename.h"
+#include "llchat.h"
+#include "lldbstrings.h"
+#include "lleconomy.h"
+#include "llfilepicker.h"
+#include "llfloaterreg.h"
+#include "llfocusmgr.h"
+#include "llfollowcamparams.h"
+#include "llinstantmessage.h"
+#include "llquantize.h"
+#include "llregionflags.h"
+#include "llregionhandle.h"
+#include "llsdserialize.h"
+#include "llstring.h"
+#include "llteleportflags.h"
+#include "lltracker.h"
+#include "lltransactionflags.h"
+#include "llxfermanager.h"
+#include "message.h"
+#include "sound_ids.h"
+#include "lltimer.h"
+#include "llmd5.h"
+
+#include "llagent.h"
+#include "llcallingcard.h"
+#include "llconsole.h"
+#include "llvieweraudio.h"
+#include "llviewercontrol.h"
+#include "lldrawpool.h"
+#include "llfirstuse.h"
+#include "llfloateranimpreview.h"
+#include "llfloaterbuycurrency.h"
+#include "llfloaterbuyland.h"
+#include "llfloaterchat.h"
+#include "llfloaterimagepreview.h"
+#include "llfloaterland.h"
+#include "llfloaterregioninfo.h"
+#include "llfloaterlandholdings.h"
+#include "llurldispatcher.h"
+#include "llfloaterpostcard.h"
+#include "llfloaterpreference.h"
+#include "llfollowcam.h"
+#include "llgroupnotify.h"
+#include "llhudeffect.h"
+#include "llhudeffecttrail.h"
+#include "llhudmanager.h"
+#include "llimpanel.h"
+#include "llinventorymodel.h"
+#include "llinventorypanel.h"
+#include "llfloaterinventory.h"
+#include "llmenugl.h"
+#include "llmoveview.h"
+#include "llmutelist.h"
+#include "llnearbychat.h"
+#include "llnotifications.h"
+#include "llnotify.h"
+#include "llpanelgrouplandmoney.h"
+#include "llpanelplaces.h"
+#include "llrecentpeople.h"
+#include "llselectmgr.h"
+#include "llsidetray.h"
+#include "llstartup.h"
+#include "llsky.h"
+#include "llslurl.h"
+#include "llstatenums.h"
+#include "llstatusbar.h"
+#include "llimview.h"
+#include "lltool.h"
+#include "lltoolbar.h"
+#include "lltoolmgr.h"
+#include "lltrans.h"
+#include "llui.h"			// for make_ui_sound
+#include "lluploaddialog.h"
+#include "llviewercamera.h"
+#include "llviewergenericmessage.h"
+#include "llviewerinventory.h"
+#include "llviewermenu.h"
+#include "llviewerobject.h"
+#include "llviewerobjectlist.h"
+#include "llviewerparcelmgr.h"
+#include "llviewerpartsource.h"
+#include "llviewerregion.h"
+#include "llviewerstats.h"
+#include "llviewertexteditor.h"
+#include "llviewerthrottle.h"
+#include "llviewerwindow.h"
+#include "llvlmanager.h"
+#include "llvoavatarself.h"
+#include "llvotextbubble.h"
+#include "llweb.h"
+#include "llworld.h"
+#include "pipeline.h"
+#include "llappviewer.h"
+#include "llfloaterworldmap.h"
+#include "llviewerdisplay.h"
+#include "llkeythrottle.h"
+#include "llgroupactions.h"
+#include "llagentui.h"
+#include "llpanelblockedlist.h"
+#include "llpanelplaceinfo.h"
+
+#include <boost/tokenizer.hpp>
+#include <boost/algorithm/string/split.hpp>
+
+#if LL_WINDOWS // For Windows specific error handler
+#include "llwindebug.h"	// For the invalid message handler
+#endif
+
+//#include "llnearbychathistory.h"
+#include "llnotificationmanager.h"
+
+//
+// Constants
+//
+const F32 BIRD_AUDIBLE_RADIUS = 32.0f;
+const F32 SIT_DISTANCE_FROM_TARGET = 0.25f;
+static const F32 LOGOUT_REPLY_TIME = 3.f;	// Wait this long after LogoutReply before quitting.
+
+// Determine how quickly residents' scripts can issue question dialogs
+// Allow bursts of up to 5 dialogs in 10 seconds. 10*2=20 seconds recovery if throttle kicks in
+static const U32 LLREQUEST_PERMISSION_THROTTLE_LIMIT	= 5;     // requests
+static const F32 LLREQUEST_PERMISSION_THROTTLE_INTERVAL	= 10.0f; // seconds
+
+extern BOOL gDebugClicks;
+
+// function prototypes
+void open_offer(const std::vector<LLUUID>& items, const std::string& from_name);
+bool check_offer_throttle(const std::string& from_name, bool check_only);
+
+//inventory offer throttle globals
+LLFrameTimer gThrottleTimer;
+const U32 OFFER_THROTTLE_MAX_COUNT=5; //number of items per time period
+const F32 OFFER_THROTTLE_TIME=10.f; //time period in seconds
+
+//script permissions
+const std::string SCRIPT_QUESTIONS[SCRIPT_PERMISSION_EOF] = 
+	{ 
+		"ScriptTakeMoney",
+		"ActOnControlInputs",
+		"RemapControlInputs",
+		"AnimateYourAvatar",
+		"AttachToYourAvatar",
+		"ReleaseOwnership",
+		"LinkAndDelink",
+		"AddAndRemoveJoints",
+		"ChangePermissions",
+		"TrackYourCamera",
+		"ControlYourCamera"
+	};
+
+const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] = 
+{
+	TRUE,	// ScriptTakeMoney,
+	FALSE,	// ActOnControlInputs
+	FALSE,	// RemapControlInputs
+	FALSE,	// AnimateYourAvatar
+	FALSE,	// AttachToYourAvatar
+	FALSE,	// ReleaseOwnership,
+	FALSE,	// LinkAndDelink,
+	FALSE,	// AddAndRemoveJoints
+	FALSE,	// ChangePermissions
+	FALSE,	// TrackYourCamera,
+	FALSE	// ControlYourCamera
+};
+
+bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	LLUUID fid;
+	LLMessageSystem* msg = gMessageSystem;
+	const LLSD& payload = notification["payload"];
+
+	// add friend to recent people list
+	LLRecentPeople::instance().add(payload["from_id"]);
+
+	switch(option)
+	{
+	case 0:
+		// accept
+		LLAvatarTracker::formFriendship(payload["from_id"]);
+
+		fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+
+		// This will also trigger an onlinenotification if the user is online
+		msg->newMessageFast(_PREHASH_AcceptFriendship);
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		msg->nextBlockFast(_PREHASH_TransactionBlock);
+		msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]);
+		msg->nextBlockFast(_PREHASH_FolderData);
+		msg->addUUIDFast(_PREHASH_FolderID, fid);
+		msg->sendReliable(LLHost(payload["sender"].asString()));
+		break;
+	case 1:
+		// decline
+		// We no longer notify other viewers, but we DO still send
+		// the rejection to the simulator to delete the pending userop.
+		msg->newMessageFast(_PREHASH_DeclineFriendship);
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		msg->nextBlockFast(_PREHASH_TransactionBlock);
+		msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]);
+		msg->sendReliable(LLHost(payload["sender"].asString()));
+		break;
+	default:
+		// close button probably, possibly timed out
+		break;
+	}
+
+	return false;
+}
+static LLNotificationFunctorRegistration friendship_offer_callback_reg("OfferFriendship", friendship_offer_callback);
+static LLNotificationFunctorRegistration friendship_offer_callback_reg_nm("OfferFriendshipNoMessage", friendship_offer_callback);
+
+//const char BUSY_AUTO_RESPONSE[] =	"The Resident you messaged is in 'busy mode' which means they have "
+//									"requested not to be disturbed. Your message will still be shown in their IM "
+//									"panel for later viewing.";
+
+//
+// Functions
+//
+
+void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_group,
+				S32 trx_type, const std::string& desc)
+{
+	if(0 == amount || !region) return;
+	amount = abs(amount);
+	LL_INFOS("Messaging") << "give_money(" << uuid << "," << amount << ")"<< LL_ENDL;
+	if(can_afford_transaction(amount))
+	{
+//		gStatusBar->debitBalance(amount);
+		LLMessageSystem* msg = gMessageSystem;
+		msg->newMessageFast(_PREHASH_MoneyTransferRequest);
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+        msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		msg->nextBlockFast(_PREHASH_MoneyData);
+		msg->addUUIDFast(_PREHASH_SourceID, gAgent.getID() );
+		msg->addUUIDFast(_PREHASH_DestID, uuid);
+		msg->addU8Fast(_PREHASH_Flags, pack_transaction_flags(FALSE, is_group));
+		msg->addS32Fast(_PREHASH_Amount, amount);
+		msg->addU8Fast(_PREHASH_AggregatePermNextOwner, (U8)LLAggregatePermissions::AP_EMPTY);
+		msg->addU8Fast(_PREHASH_AggregatePermInventory, (U8)LLAggregatePermissions::AP_EMPTY);
+		msg->addS32Fast(_PREHASH_TransactionType, trx_type );
+		msg->addStringFast(_PREHASH_Description, desc);
+		msg->sendReliable(region->getHost());
+	}
+	else
+	{
+		LLFloaterBuyCurrency::buyCurrency("Giving", amount);
+	}
+}
+
+void send_complete_agent_movement(const LLHost& sim_host)
+{
+	LLMessageSystem* msg = gMessageSystem;
+	msg->newMessageFast(_PREHASH_CompleteAgentMovement);
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+	msg->addU32Fast(_PREHASH_CircuitCode, msg->mOurCircuitCode);
+	msg->sendReliable(sim_host);
+}
+
+void process_logout_reply(LLMessageSystem* msg, void**)
+{
+	// The server has told us it's ok to quit.
+	LL_DEBUGS("Messaging") << "process_logout_reply" << LL_ENDL;
+
+	LLUUID agent_id;
+	msg->getUUID("AgentData", "AgentID", agent_id);
+	LLUUID session_id;
+	msg->getUUID("AgentData", "SessionID", session_id);
+	if((agent_id != gAgent.getID()) || (session_id != gAgent.getSessionID()))
+	{
+		LL_WARNS("Messaging") << "Bogus Logout Reply" << LL_ENDL;
+	}
+
+	LLInventoryModel::update_map_t parents;
+	S32 count = msg->getNumberOfBlocksFast( _PREHASH_InventoryData );
+	for(S32 i = 0; i < count; ++i)
+	{
+		LLUUID item_id;
+		msg->getUUIDFast(_PREHASH_InventoryData, _PREHASH_ItemID, item_id, i);
+
+		if( (1 == count) && item_id.isNull() )
+		{
+			// Detect dummy item.  Indicates an empty list.
+			break;
+		}
+
+		// We do not need to track the asset ids, just account for an
+		// updated inventory version.
+		LL_INFOS("Messaging") << "process_logout_reply itemID=" << item_id << LL_ENDL;
+		LLInventoryItem* item = gInventory.getItem( item_id );
+		if( item )
+		{
+			parents[item->getParentUUID()] = 0;
+			gInventory.addChangedMask(LLInventoryObserver::INTERNAL, item_id);
+		}
+		else
+		{
+			LL_INFOS("Messaging") << "process_logout_reply item not found: " << item_id << LL_ENDL;
+		}
+	}
+    LLAppViewer::instance()->forceQuit();
+}
+
+void process_layer_data(LLMessageSystem *mesgsys, void **user_data)
+{
+	LLViewerRegion *regionp = LLWorld::getInstance()->getRegion(mesgsys->getSender());
+
+	if (!regionp || gNoRender)
+	{
+		return;
+	}
+
+
+	S32 size;
+	S8 type;
+
+	mesgsys->getS8Fast(_PREHASH_LayerID, _PREHASH_Type, type);
+	size = mesgsys->getSizeFast(_PREHASH_LayerData, _PREHASH_Data);
+	if (0 == size)
+	{
+		LL_WARNS("Messaging") << "Layer data has zero size." << LL_ENDL;
+		return;
+	}
+	if (size < 0)
+	{
+		// getSizeFast() is probably trying to tell us about an error
+		LL_WARNS("Messaging") << "getSizeFast() returned negative result: "
+			<< size
+			<< LL_ENDL;
+		return;
+	}
+	U8 *datap = new U8[size];
+	mesgsys->getBinaryDataFast(_PREHASH_LayerData, _PREHASH_Data, datap, size);
+	LLVLData *vl_datap = new LLVLData(regionp, type, datap, size);
+	if (mesgsys->getReceiveCompressedSize())
+	{
+		gVLManager.addLayerData(vl_datap, mesgsys->getReceiveCompressedSize());
+	}
+	else
+	{
+		gVLManager.addLayerData(vl_datap, mesgsys->getReceiveSize());
+	}
+}
+
+// S32 exported_object_count = 0;
+// S32 exported_image_count = 0;
+// S32 current_object_count = 0;
+// S32 current_image_count = 0;
+
+// extern LLNotifyBox *gExporterNotify;
+// extern LLUUID gExporterRequestID;
+// extern std::string gExportDirectory;
+
+// extern LLUploadDialog *gExportDialog;
+
+// std::string gExportedFile;
+
+// std::map<LLUUID, std::string> gImageChecksums;
+
+// void export_complete()
+// {
+// 		LLUploadDialog::modalUploadFinished();
+// 		gExporterRequestID.setNull();
+// 		gExportDirectory = "";
+
+// 		LLFILE* fXML = LLFile::fopen(gExportedFile, "rb");		/* Flawfinder: ignore */
+// 		fseek(fXML, 0, SEEK_END);
+// 		long length = ftell(fXML);
+// 		fseek(fXML, 0, SEEK_SET);
+// 		U8 *buffer = new U8[length + 1];
+// 		size_t nread = fread(buffer, 1, length, fXML);
+// 		if (nread < (size_t) length)
+// 		{
+// 			LL_WARNS("Messaging") << "Short read" << LL_ENDL;
+// 		}
+// 		buffer[nread] = '\0';
+// 		fclose(fXML);
+
+// 		char *pos = (char *)buffer;
+// 		while ((pos = strstr(pos+1, "<sl:image ")) != 0)
+// 		{
+// 			char *pos_check = strstr(pos, "checksum=\"");
+
+// 			if (pos_check)
+// 			{
+// 				char *pos_uuid = strstr(pos_check, "\">");
+
+// 				if (pos_uuid)
+// 				{
+// 					char image_uuid_str[UUID_STR_SIZE];		/* Flawfinder: ignore */
+// 					memcpy(image_uuid_str, pos_uuid+2, UUID_STR_SIZE-1);		/* Flawfinder: ignore */
+// 					image_uuid_str[UUID_STR_SIZE-1] = 0;
+					
+// 					LLUUID image_uuid(image_uuid_str);
+
+// 					LL_INFOS("Messaging") << "Found UUID: " << image_uuid << LL_ENDL;
+
+// 					std::map<LLUUID, std::string>::iterator itor = gImageChecksums.find(image_uuid);
+// 					if (itor != gImageChecksums.end())
+// 					{
+// 						LL_INFOS("Messaging") << "Replacing with checksum: " << itor->second << LL_ENDL;
+// 						if (!itor->second.empty())
+// 						{
+// 							memcpy(&pos_check[10], itor->second.c_str(), 32);		/* Flawfinder: ignore */
+// 						}
+// 					}
+// 				}
+// 			}
+// 		}
+
+// 		LLFILE* fXMLOut = LLFile::fopen(gExportedFile, "wb");		/* Flawfinder: ignore */
+// 		if (fwrite(buffer, 1, length, fXMLOut) != length)
+// 		{
+// 			LL_WARNS("Messaging") << "Short write" << LL_ENDL;
+// 		}
+// 		fclose(fXMLOut);
+
+// 		delete [] buffer;
+// }
+
+
+// void exported_item_complete(const LLTSCode status, void *user_data)
+// {
+// 	//std::string *filename = (std::string *)user_data;
+
+// 	if (status < LLTS_OK)
+// 	{
+// 		LL_WARNS("Messaging") << "Export failed!" << LL_ENDL;
+// 	}
+// 	else
+// 	{
+// 		++current_object_count;
+// 		if (current_image_count == exported_image_count && current_object_count == exported_object_count)
+// 		{
+// 			LL_INFOS("Messaging") << "*** Export complete ***" << LL_ENDL;
+
+// 			export_complete();
+// 		}
+// 		else
+// 		{
+// 			gExportDialog->setMessage(llformat("Exported %d/%d object files, %d/%d textures.", current_object_count, exported_object_count, current_image_count, exported_image_count));
+// 		}
+// 	}
+// }
+
+// struct exported_image_info
+// {
+// 	LLUUID image_id;
+// 	std::string filename;
+// 	U32 image_num;
+// };
+
+// void exported_j2c_complete(const LLTSCode status, void *user_data)
+// {
+// 	exported_image_info *info = (exported_image_info *)user_data;
+// 	LLUUID image_id = info->image_id;
+// 	U32 image_num = info->image_num;
+// 	std::string filename = info->filename;
+// 	delete info;
+
+// 	if (status < LLTS_OK)
+// 	{
+// 		LL_WARNS("Messaging") << "Image download failed!" << LL_ENDL;
+// 	}
+// 	else
+// 	{
+// 		LLFILE* fIn = LLFile::fopen(filename, "rb");		/* Flawfinder: ignore */
+// 		if (fIn) 
+// 		{
+// 			LLPointer<LLImageJ2C> ImageUtility = new LLImageJ2C;
+// 			LLPointer<LLImageTGA> TargaUtility = new LLImageTGA;
+
+// 			fseek(fIn, 0, SEEK_END);
+// 			S32 length = ftell(fIn);
+// 			fseek(fIn, 0, SEEK_SET);
+// 			U8 *buffer = ImageUtility->allocateData(length);
+// 			if (fread(buffer, 1, length, fIn) != length)
+// 			{
+// 				LL_WARNS("Messaging") << "Short read" << LL_ENDL;
+// 			}
+// 			fclose(fIn);
+// 			LLFile::remove(filename);
+
+// 			// Convert to TGA
+// 			LLPointer<LLImageRaw> image = new LLImageRaw();
+
+// 			ImageUtility->updateData();
+// 			ImageUtility->decode(image, 100000.0f);
+			
+// 			TargaUtility->encode(image);
+// 			U8 *data = TargaUtility->getData();
+// 			S32 data_size = TargaUtility->getDataSize();
+
+// 			std::string file_path = gDirUtilp->getDirName(filename);
+			
+// 			std::string output_file = llformat("%s/image-%03d.tga", file_path.c_str(), image_num);//filename;
+// 			//S32 name_len = output_file.length();
+// 			//strcpy(&output_file[name_len-3], "tga");
+// 			LLFILE* fOut = LLFile::fopen(output_file, "wb");		/* Flawfinder: ignore */
+// 			char md5_hash_string[33];		/* Flawfinder: ignore */
+// 			strcpy(md5_hash_string, "00000000000000000000000000000000");		/* Flawfinder: ignore */
+// 			if (fOut)
+// 			{
+// 				if (fwrite(data, 1, data_size, fOut) != data_size)
+// 				{
+// 					LL_WARNS("Messaging") << "Short write" << LL_ENDL;
+// 				}
+// 				fseek(fOut, 0, SEEK_SET);
+// 				fclose(fOut);
+// 				fOut = LLFile::fopen(output_file, "rb");		/* Flawfinder: ignore */
+// 				LLMD5 my_md5_hash(fOut);
+// 				my_md5_hash.hex_digest(md5_hash_string);
+// 			}
+
+// 			gImageChecksums.insert(std::pair<LLUUID, std::string>(image_id, md5_hash_string));
+// 		}
+// 	}
+
+// 	++current_image_count;
+// 	if (current_image_count == exported_image_count && current_object_count == exported_object_count)
+// 	{
+// 		LL_INFOS("Messaging") << "*** Export textures complete ***" << LL_ENDL;
+// 			export_complete();
+// 	}
+// 	else
+// 	{
+// 		gExportDialog->setMessage(llformat("Exported %d/%d object files, %d/%d textures.", current_object_count, exported_object_count, current_image_count, exported_image_count));
+// 	}
+//}
+
+void process_derez_ack(LLMessageSystem*, void**)
+{
+	if(gViewerWindow) gViewerWindow->getWindow()->decBusyCount();
+}
+
+void process_places_reply(LLMessageSystem* msg, void** data)
+{
+	LLUUID query_id;
+
+	msg->getUUID("AgentData", "QueryID", query_id);
+	if (query_id.isNull())
+	{
+		LLFloaterLandHoldings::processPlacesReply(msg, data);
+	}
+	else if(gAgent.isInGroup(query_id))
+	{
+		LLPanelGroupLandMoney::processPlacesReply(msg, data);
+	}
+	else
+	{
+		LL_WARNS("Messaging") << "Got invalid PlacesReply message" << LL_ENDL;
+	}
+}
+
+void send_sound_trigger(const LLUUID& sound_id, F32 gain)
+{
+	if (sound_id.isNull() || gAgent.getRegion() == NULL)
+	{
+		// disconnected agent or zero guids don't get sent (no sound)
+		return;
+	}
+
+	LLMessageSystem* msg = gMessageSystem;
+	msg->newMessageFast(_PREHASH_SoundTrigger);
+	msg->nextBlockFast(_PREHASH_SoundData);
+	msg->addUUIDFast(_PREHASH_SoundID, sound_id);
+	// Client untrusted, ids set on sim
+	msg->addUUIDFast(_PREHASH_OwnerID, LLUUID::null );
+	msg->addUUIDFast(_PREHASH_ObjectID, LLUUID::null );
+	msg->addUUIDFast(_PREHASH_ParentID, LLUUID::null );
+
+	msg->addU64Fast(_PREHASH_Handle, gAgent.getRegion()->getHandle());
+
+	LLVector3 position = gAgent.getPositionAgent();
+	msg->addVector3Fast(_PREHASH_Position, position);
+	msg->addF32Fast(_PREHASH_Gain, gain);
+
+	gAgent.sendMessage();
+}
+
+bool join_group_response(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	BOOL delete_context_data = TRUE;
+	bool accept_invite = false;
+
+	LLUUID group_id = notification["payload"]["group_id"].asUUID();
+	LLUUID transaction_id = notification["payload"]["transaction_id"].asUUID();
+	std::string name = notification["payload"]["name"].asString();
+	std::string message = notification["payload"]["message"].asString();
+	S32 fee = notification["payload"]["fee"].asInteger();
+
+	if (option == 2 && !group_id.isNull())
+	{
+		LLGroupActions::show(group_id);
+		LLSD args;
+		args["MESSAGE"] = message;
+		LLNotifications::instance().add("JoinGroup", args, notification["payload"]);
+		return false;
+	}
+	if(option == 0 && !group_id.isNull())
+	{
+		// check for promotion or demotion.
+		S32 max_groups = MAX_AGENT_GROUPS;
+		if(gAgent.isInGroup(group_id)) ++max_groups;
+
+		if(gAgent.mGroups.count() < max_groups)
+		{
+			accept_invite = true;
+		}
+		else
+		{
+			delete_context_data = FALSE;
+			LLSD args;
+			args["NAME"] = name;
+			args["INVITE"] = message;
+			LLNotifications::instance().add("JoinedTooManyGroupsMember", args, notification["payload"]);
+		}
+	}
+
+	if (accept_invite)
+	{
+		// If there is a fee to join this group, make
+		// sure the user is sure they want to join.
+		if (fee > 0)
+		{
+			delete_context_data = FALSE;
+			LLSD args;
+			args["COST"] = llformat("%d", fee);
+			// Set the fee for next time to 0, so that we don't keep
+			// asking about a fee.
+			LLSD next_payload = notification["payload"];
+			next_payload["fee"] = 0;
+			LLNotifications::instance().add("JoinGroupCanAfford",
+									args,
+									next_payload);
+		}
+		else
+		{
+			send_improved_im(group_id,
+							 std::string("name"),
+							 std::string("message"),
+							IM_ONLINE,
+							IM_GROUP_INVITATION_ACCEPT,
+							transaction_id);
+		}
+	}
+	else
+	{
+		send_improved_im(group_id,
+						 std::string("name"),
+						 std::string("message"),
+						IM_ONLINE,
+						IM_GROUP_INVITATION_DECLINE,
+						transaction_id);
+	}
+
+	return false;
+}
+static LLNotificationFunctorRegistration jgr_1("JoinGroup", join_group_response);
+static LLNotificationFunctorRegistration jgr_2("JoinedTooManyGroupsMember", join_group_response);
+static LLNotificationFunctorRegistration jgr_3("JoinGroupCanAfford", join_group_response);
+
+
+//-----------------------------------------------------------------------------
+// Instant Message
+//-----------------------------------------------------------------------------
+class LLOpenAgentOffer : public LLInventoryFetchObserver
+{
+public:
+	LLOpenAgentOffer(const std::string& from_name) : mFromName(from_name) {}
+	/*virtual*/ void done()
+	{
+		open_offer(mComplete, mFromName);
+		gInventory.removeObserver(this);
+		delete this;
+	}
+private:
+	std::string mFromName;
+};
+
+//unlike the FetchObserver for AgentOffer, we only make one 
+//instance of the AddedObserver for TaskOffers
+//and it never dies.  We do this because we don't know the UUID of 
+//task offers until they are accepted, so we don't wouldn't 
+//know what to watch for, so instead we just watch for all additions.
+class LLOpenTaskOffer : public LLInventoryAddedObserver
+{
+protected:
+	/*virtual*/ void done()
+	{
+		open_offer(mAdded, "");
+		mAdded.clear();
+	}
+ };
+
+//one global instance to bind them
+LLOpenTaskOffer* gNewInventoryObserver=NULL;
+
+void start_new_inventory_observer()
+{
+	if (!gNewInventoryObserver) //task offer observer 
+	{
+		// Observer is deleted by gInventory
+		gNewInventoryObserver = new LLOpenTaskOffer;
+		gInventory.addObserver(gNewInventoryObserver);
+	}
+}
+
+class LLDiscardAgentOffer : public LLInventoryFetchComboObserver
+{
+public:
+	LLDiscardAgentOffer(const LLUUID& folder_id, const LLUUID& object_id) :
+		mFolderID(folder_id),
+		mObjectID(object_id) {}
+	virtual ~LLDiscardAgentOffer() {}
+	virtual void done()
+	{
+		LL_DEBUGS("Messaging") << "LLDiscardAgentOffer::done()" << LL_ENDL;
+		LLUUID trash_id;
+		trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		bool notify = false;
+		if(trash_id.notNull() && mObjectID.notNull())
+		{
+			LLInventoryModel::update_list_t update;
+			LLInventoryModel::LLCategoryUpdate old_folder(mFolderID, -1);
+			update.push_back(old_folder);
+			LLInventoryModel::LLCategoryUpdate new_folder(trash_id, 1);
+			update.push_back(new_folder);
+			gInventory.accountForUpdate(update);
+			gInventory.moveObject(mObjectID, trash_id);
+			LLInventoryObject* obj = gInventory.getObject(mObjectID);
+			if(obj)
+			{
+				// no need to restamp since this is already a freshly
+				// stamped item.
+				obj->updateParentOnServer(FALSE);
+				notify = true;
+			}
+		}
+		else
+		{
+			LL_WARNS("Messaging") << "DiscardAgentOffer unable to find: "
+					<< (trash_id.isNull() ? "trash " : "")
+					<< (mObjectID.isNull() ? "object" : "") << LL_ENDL;
+		}
+		gInventory.removeObserver(this);
+		if(notify)
+		{
+			gInventory.notifyObservers();
+		}
+		delete this;
+	}
+protected:
+	LLUUID mFolderID;
+	LLUUID mObjectID;
+};
+
+
+//Returns TRUE if we are OK, FALSE if we are throttled
+//Set check_only true if you want to know the throttle status 
+//without registering a hit
+bool check_offer_throttle(const std::string& from_name, bool check_only)
+{
+	static U32 throttle_count;
+	static bool throttle_logged;
+	LLChat chat;
+	std::string log_message;
+
+	if (!gSavedSettings.getBOOL("ShowNewInventory"))
+		return false;
+
+	if (check_only)
+	{
+		return gThrottleTimer.hasExpired();
+	}
+	
+	if(gThrottleTimer.checkExpirationAndReset(OFFER_THROTTLE_TIME))
+	{
+		LL_DEBUGS("Messaging") << "Throttle Expired" << LL_ENDL;
+		throttle_count=1;
+		throttle_logged=false;
+		return true;
+	}
+	else //has not expired
+	{
+		LL_DEBUGS("Messaging") << "Throttle Not Expired, Count: " << throttle_count << LL_ENDL;
+		// When downloading the initial inventory we get a lot of new items
+		// coming in and can't tell that from spam.
+		if (LLStartUp::getStartupState() >= STATE_STARTED
+			&& throttle_count >= OFFER_THROTTLE_MAX_COUNT)
+		{
+			if (!throttle_logged)
+			{
+				// Use the name of the last item giver, who is probably the person
+				// spamming you.
+				std::ostringstream message;
+				message << LLAppViewer::instance()->getSecondLifeTitle();
+				if (!from_name.empty())
+				{
+					message << ": Items coming in too fast from " << from_name;
+				}
+				else
+				{
+					message << ": Items coming in too fast";
+				}
+				message << ", automatic preview disabled for "
+					<< OFFER_THROTTLE_TIME << " seconds.";
+				chat.mText = message.str();
+				//this is kinda important, so actually put it on screen
+				LLFloaterChat::addChat(chat, FALSE, FALSE);
+				throttle_logged=true;
+			}
+			return false;
+		}
+		else
+		{
+			throttle_count++;
+			return true;
+		}
+	}
+}
+ 
+void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
+{
+	std::vector<LLUUID>::const_iterator it = items.begin();
+	std::vector<LLUUID>::const_iterator end = items.end();
+	LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH));
+	LLInventoryItem* item;
+	for(; it != end; ++it)
+	{
+		const LLUUID& id = *it;
+		item = gInventory.getItem(id);
+		if(!item)
+		{
+			LL_WARNS("Messaging") << "Unable to show inventory item: " << id << LL_ENDL;
+			continue;
+		}
+		if(gInventory.isObjectDescendentOf(id, trash_id))
+		{
+			continue;
+		}
+		LLAssetType::EType asset_type = item->getType();
+
+		//if we are throttled, don't display them
+		if (check_offer_throttle(from_name, false))
+		{
+			// If we opened this ourselves, focus it
+			BOOL take_focus = from_name.empty() ? TAKE_FOCUS_YES : TAKE_FOCUS_NO;
+			switch(asset_type)
+			{
+			  case LLAssetType::AT_NOTECARD:
+				LLFloaterReg::showInstance("preview_notecard", LLSD(id), take_focus);
+				break;
+			  case LLAssetType::AT_LANDMARK:
+			  	{
+					LLInventoryCategory* parent_folder = gInventory.getCategory(item->getParentUUID());
+					LLSD args;
+					args["LANDMARK_NAME"] = item->getName();
+					args["FOLDER_NAME"] = std::string(parent_folder ? parent_folder->getName() : "unknown");
+					LLNotifications::instance().add("LandmarkCreated", args);
+
+					// Created landmark is passed to Places panel to allow its editing.
+					LLPanelPlaces *panel = dynamic_cast<LLPanelPlaces*>(LLSideTray::getInstance()->showPanel("panel_places", LLSD()));
+					if (panel)
+					{
+						panel->setItem(item);
+					}
+			  	}
+				break;
+			  case LLAssetType::AT_TEXTURE:
+				LLFloaterReg::showInstance("preview_texture", LLSD(id), take_focus);
+				break;
+			  default:
+				break;
+			}
+		}
+		//highlight item, if it's not in the trash or lost+found
+		
+		// Don't auto-open the inventory floater
+		LLFloaterInventory* view = NULL;
+		if(gSavedSettings.getBOOL("ShowInInventory") &&
+		   asset_type != LLAssetType::AT_CALLINGCARD &&
+		   item->getInventoryType() != LLInventoryType::IT_ATTACHMENT &&
+		   !from_name.empty())
+		{
+			view = LLFloaterInventory::showAgentInventory();
+		}
+		else
+		{
+			view = LLFloaterInventory::getActiveInventory();
+		}
+		if(!view)
+		{
+			return;
+		}
+
+		//Trash Check
+		LLUUID trash_id;
+		trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
+		{
+			return;
+		}
+		LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+		//BOOL inventory_has_focus = gFocusMgr.childHasKeyboardFocus(view);
+		BOOL user_is_away = gAwayTimer.getStarted();
+
+		// don't select lost and found items if the user is active
+		if (gInventory.isObjectDescendentOf(item->getUUID(), lost_and_found_id)
+			&& !user_is_away)
+		{
+			return;
+		}
+
+		//Not sure about this check.  Could make it easy to miss incoming items.
+		//don't dick with highlight while the user is working
+		//if(inventory_has_focus && !user_is_away)
+		//	break;
+		LL_DEBUGS("Messaging") << "Highlighting" << item->getUUID()  << LL_ENDL;
+		//highlight item
+
+		if (view->getPanel())
+		{
+			LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus();
+			view->getPanel()->setSelection(item->getUUID(), TAKE_FOCUS_NO);
+			gFocusMgr.setKeyboardFocus(focus_ctrl);
+		}
+	}
+}
+
+void inventory_offer_mute_callback(const LLUUID& blocked_id,
+								   const std::string& first_name,
+								   const std::string& last_name,
+								   BOOL is_group)
+{
+	std::string from_name;
+	LLMute::EType type;
+
+	if (is_group)
+	{
+		type = LLMute::GROUP;
+		from_name = first_name;
+	}
+	else
+	{
+		type = LLMute::AGENT;
+		from_name = first_name + " " + last_name;
+	}
+
+	LLMute mute(blocked_id, from_name, type);
+	if (LLMuteList::getInstance()->add(mute))
+	{
+		LLPanelBlockedList::showPanelAndSelect(blocked_id);
+	}
+
+	// purge the message queue of any previously queued inventory offers from the same source.
+	class OfferMatcher : public LLNotifyBoxView::Matcher
+	{
+	public:
+		OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
+		BOOL matches(const LLNotificationPtr notification) const
+		{
+			if(notification->getName() == "ObjectGiveItem" 
+				|| notification->getName() == "ObjectGiveItemUnknownUser"
+				|| notification->getName() == "UserGiveItem")
+			{
+				return (notification->getPayload()["from_id"].asUUID() == blocked_id);
+			}
+			return FALSE;
+		}
+	private:
+		const LLUUID& blocked_id;
+	};
+	gNotifyBoxView->purgeMessagesMatching(OfferMatcher(blocked_id));
+}
+
+LLOfferInfo::LLOfferInfo(const LLSD& sd)
+{
+	mIM = (EInstantMessage)sd["im_type"].asInteger();
+	mFromID = sd["from_id"].asUUID();
+	mFromGroup = sd["from_group"].asBoolean();
+	mFromObject = sd["from_object"].asBoolean();
+	mTransactionID = sd["transaction_id"].asUUID();
+	mFolderID = sd["folder_id"].asUUID();
+	mObjectID = sd["object_id"].asUUID();
+	mType = LLAssetType::lookup(sd["type"].asString().c_str());
+	mFromName = sd["from_name"].asString();
+	mDesc = sd["description"].asString();
+	mHost = LLHost(sd["sender"].asString());
+}
+
+LLSD LLOfferInfo::asLLSD()
+{
+	LLSD sd;
+	sd["im_type"] = mIM;
+	sd["from_id"] = mFromID;
+	sd["from_group"] = mFromGroup;
+	sd["from_object"] = mFromObject;
+	sd["transaction_id"] = mTransactionID;
+	sd["folder_id"] = mFolderID;
+	sd["object_id"] = mObjectID;
+	sd["type"] = LLAssetType::lookup(mType);
+	sd["from_name"] = mFromName;
+	sd["description"] = mDesc;
+	sd["sender"] = mHost.getIPandPort();
+	return sd;
+}
+
+bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& response)
+ {
+	LLChat chat;
+	std::string log_message;
+	S32 button = LLNotification::getSelectedOption(notification, response);
+
+	// For muting, we need to add the mute, then decline the offer.
+	// This must be done here because:
+	// * callback may be called immediately,
+	// * adding the mute sends a message,
+	// * we can't build two messages at once.
+	if (2 == button)
+	{
+		gCacheName->get(mFromID, mFromGroup, &inventory_offer_mute_callback);
+	}
+
+	LLMessageSystem* msg = gMessageSystem;
+	msg->newMessageFast(_PREHASH_ImprovedInstantMessage);
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+	msg->nextBlockFast(_PREHASH_MessageBlock);
+	msg->addBOOLFast(_PREHASH_FromGroup, FALSE);
+	msg->addUUIDFast(_PREHASH_ToAgentID, mFromID);
+	msg->addU8Fast(_PREHASH_Offline, IM_ONLINE);
+	msg->addUUIDFast(_PREHASH_ID, mTransactionID);
+	msg->addU32Fast(_PREHASH_Timestamp, NO_TIMESTAMP); // no timestamp necessary
+	std::string name;
+	LLAgentUI::buildFullname(name);
+	msg->addStringFast(_PREHASH_FromAgentName, name);
+	msg->addStringFast(_PREHASH_Message, ""); 
+	msg->addU32Fast(_PREHASH_ParentEstateID, 0);
+	msg->addUUIDFast(_PREHASH_RegionID, LLUUID::null);
+	msg->addVector3Fast(_PREHASH_Position, gAgent.getPositionAgent());
+	LLInventoryObserver* opener = NULL;
+	LLViewerInventoryCategory* catp = NULL;
+	catp = (LLViewerInventoryCategory*)gInventory.getCategory(mObjectID);
+	LLViewerInventoryItem* itemp = NULL;
+	if(!catp)
+	{
+		itemp = (LLViewerInventoryItem*)gInventory.getItem(mObjectID);
+	}
+
+	std::string from_string; // Used in the pop-up.
+	std::string chatHistory_string;  // Used in chat history.
+	if (mFromObject == TRUE)
+	{
+		if (mFromGroup)
+		{
+			std::string group_name;
+			if (gCacheName->getGroupName(mFromID, group_name))
+			{
+				from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+"'" 
+							+ mFromName + LLTrans::getString("'") +" " + LLTrans::getString("InvOfferOwnedByGroup") 
+				            + " "+ "'" + group_name + "'";
+				
+				chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedByGroup") 
+								   + " " + group_name + "'";
+			}
+			else
+			{
+				from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+"'"
+				            + mFromName +"'"+ " " + LLTrans::getString("InvOfferOwnedByUnknownGroup");
+				chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedByUnknownGroup");
+			}
+		}
+		else
+		{
+			std::string first_name, last_name;
+			if (gCacheName->getName(mFromID, first_name, last_name))
+			{
+				from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+ LLTrans::getString("'") + mFromName 
+							+ LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedBy") + first_name + " " + last_name;
+				chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedBy") + " " + first_name + " " + last_name;
+			}
+			else
+			{
+				from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+LLTrans::getString("'") 
+				            + mFromName + LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedByUnknownUser");
+				chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedByUnknownUser");
+			}
+		}
+	}
+	else
+	{
+		from_string = chatHistory_string = mFromName;
+	}
+	
+	bool busy=FALSE;
+	
+	switch(button)
+	{
+	case IOR_ACCEPT:
+		// ACCEPT. The math for the dialog works, because the accept
+		// for inventory_offered, task_inventory_offer or
+		// group_notice_inventory is 1 greater than the offer integer value.
+		// Generates IM_INVENTORY_ACCEPTED, IM_TASK_INVENTORY_ACCEPTED, 
+		// or IM_GROUP_NOTICE_INVENTORY_ACCEPTED
+		msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 1));
+		msg->addBinaryDataFast(_PREHASH_BinaryBucket, &(mFolderID.mData),
+					 sizeof(mFolderID.mData));
+		// send the message
+		msg->sendReliable(mHost);
+
+		//don't spam them if they are getting flooded
+		if (check_offer_throttle(mFromName, true))
+		{
+			log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
+ 			chat.mText = log_message;
+ 			LLFloaterChat::addChatHistory(chat);
+		}
+
+		// we will want to open this item when it comes back.
+		LL_DEBUGS("Messaging") << "Initializing an opener for tid: " << mTransactionID
+				 << LL_ENDL;
+		switch (mIM)
+		{
+		case IM_INVENTORY_OFFERED:
+		{
+			// This is an offer from an agent. In this case, the back
+			// end has already copied the items into your inventory,
+			// so we can fetch it out of our inventory.
+			LLInventoryFetchObserver::item_ref_t items;
+			items.push_back(mObjectID);
+			LLOpenAgentOffer* open_agent_offer = new LLOpenAgentOffer(from_string);
+			open_agent_offer->fetchItems(items);
+			if(catp || (itemp && itemp->isComplete()))
+			{
+				open_agent_offer->done();
+			}
+			else
+			{
+				opener = open_agent_offer;
+			}
+		}
+			break;
+		case IM_TASK_INVENTORY_OFFERED:
+		case IM_GROUP_NOTICE:
+		case IM_GROUP_NOTICE_REQUESTED:
+		{
+			// This is an offer from a task or group.
+			// We don't use a new instance of an opener
+			// We instead use the singular observer gOpenTaskOffer
+			// Since it already exists, we don't need to actually do anything
+		}
+		break;
+		default:
+			LL_WARNS("Messaging") << "inventory_offer_callback: unknown offer type" << LL_ENDL;
+			break;
+		}	// end switch (mIM)
+		break;
+
+	case IOR_BUSY:
+		//Busy falls through to decline.  Says to make busy message.
+		busy=TRUE;
+	case IOR_MUTE:
+		// MUTE falls through to decline
+	case IOR_DECLINE:
+		// DECLINE. The math for the dialog works, because the decline
+		// for inventory_offered, task_inventory_offer or
+		// group_notice_inventory is 2 greater than the offer integer value.
+		// Generates IM_INVENTORY_DECLINED, IM_TASK_INVENTORY_DECLINED,
+		// or IM_GROUP_NOTICE_INVENTORY_DECLINED
+	default:
+		// close button probably (or any of the fall-throughs from above)
+		msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 2));
+		msg->addBinaryDataFast(_PREHASH_BinaryBucket, EMPTY_BINARY_BUCKET, EMPTY_BINARY_BUCKET_SIZE);
+		// send the message
+		msg->sendReliable(mHost);
+
+		log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +".";
+		chat.mText = log_message;
+		if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) )  // muting for SL-42269
+		{
+			chat.mMuted = TRUE;
+		}
+		LLFloaterChat::addChatHistory(chat);
+
+		// If it's from an agent, we have to fetch the item to throw
+		// it away. If it's from a task or group, just denying the 
+		// request will suffice to discard the item.
+		if(IM_INVENTORY_OFFERED == mIM)
+		{
+			LLInventoryFetchComboObserver::folder_ref_t folders;
+			LLInventoryFetchComboObserver::item_ref_t items;
+			items.push_back(mObjectID);
+			LLDiscardAgentOffer* discard_agent_offer;
+			discard_agent_offer = new LLDiscardAgentOffer(mFolderID, mObjectID);
+			discard_agent_offer->fetch(folders, items);
+			if(catp || (itemp && itemp->isComplete()))
+			{
+				discard_agent_offer->done();
+			}
+			else
+			{
+				opener = discard_agent_offer;
+			}
+			
+		}
+		if (busy &&	(!mFromGroup && !mFromObject))
+		{
+			busy_message(msg,mFromID);
+		}
+		break;
+	}
+
+	if(IM_INVENTORY_OFFERED == mIM)
+	{
+		// add buddy to recent people list
+		LLRecentPeople::instance().add(mFromID);
+	}
+
+	if(opener)
+	{
+		gInventory.addObserver(opener);
+	}
+
+	delete this;
+	return false;
+}
+
+
+void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
+{
+	//Until throttling is implmented, busy mode should reject inventory instead of silently
+	//accepting it.  SEE SL-39554
+	if (gAgent.getBusy())
+	{
+		info->forceResponse(IOR_BUSY);
+		return;
+	}
+	
+	//If muted, don't even go through the messaging stuff.  Just curtail the offer here.
+	if (LLMuteList::getInstance()->isMuted(info->mFromID, info->mFromName))
+	{
+		info->forceResponse(IOR_MUTE);
+		return;
+	}
+
+	// Avoid the Accept/Discard dialog if the user so desires. JC
+	if (gSavedSettings.getBOOL("AutoAcceptNewInventory")
+		&& (info->mType == LLAssetType::AT_NOTECARD
+			|| info->mType == LLAssetType::AT_LANDMARK
+			|| info->mType == LLAssetType::AT_TEXTURE))
+	{
+		// For certain types, just accept the items into the inventory,
+		// and possibly open them on receipt depending upon "ShowNewInventory".
+		info->forceResponse(IOR_ACCEPT);
+		return;
+	}
+
+	// Strip any SLURL from the message display. (DEV-2754)
+	std::string msg = info->mDesc;
+	int indx = msg.find(" ( http://slurl.com/secondlife/");
+	if(indx >= 0)
+	{
+		LLStringUtil::truncate(msg, indx);
+	}
+	
+	LLSD args;
+	args["[OBJECTNAME]"] = msg;
+
+	LLSD payload;
+
+	// must protect against a NULL return from lookupHumanReadable()
+	std::string typestr = ll_safe_string(LLAssetType::lookupHumanReadable(info->mType));
+	if (!typestr.empty())
+	{
+		args["OBJECTTYPE"] = typestr;
+	}
+	else
+	{
+		LL_WARNS("Messaging") << "LLAssetType::lookupHumanReadable() returned NULL - probably bad asset type: " << info->mType << LL_ENDL;
+		args["OBJECTTYPE"] = "";
+
+		// This seems safest, rather than propagating bogosity
+		LL_WARNS("Messaging") << "Forcing an inventory-decline for probably-bad asset type." << LL_ENDL;
+		info->forceResponse(IOR_DECLINE);
+		return;
+	}
+
+	// Name cache callbacks don't store userdata, so can't save
+	// off the LLOfferInfo.  Argh.
+	BOOL name_found = FALSE;
+	if (info->mFromGroup)
+	{
+		std::string group_name;
+		if (gCacheName->getGroupName(info->mFromID, group_name))
+		{
+			args["FIRST"] = group_name;
+			args["LAST"] = "";
+			name_found = TRUE;
+		}
+	}
+	else
+	{
+		std::string first_name, last_name;
+		if (gCacheName->getName(info->mFromID, first_name, last_name))
+		{
+			args["FIRST"] = first_name;
+			args["LAST"] = last_name;
+			name_found = TRUE;
+		}
+	}
+
+	payload["from_id"] = info->mFromID;
+	args["OBJECTFROMNAME"] = info->mFromName;
+	args["NAME"] = info->mFromName;
+
+	LLNotification::Params p("ObjectGiveItem");
+	p.substitutions(args).payload(payload).functor.function(boost::bind(&LLOfferInfo::inventory_offer_callback, info, _1, _2));
+
+	if (from_task)
+	{
+		p.name = name_found ? "ObjectGiveItem" : "ObjectGiveItemUnknownUser";
+	}
+	else
+	{
+		p.name = "UserGiveItem";
+	}
+
+	LLNotifications::instance().add(p);
+}
+
+bool lure_callback(const LLSD& notification, const LLSD& response)
+{
+	S32 option = 0;
+	if (response.isInteger()) 
+	{
+		option = response.asInteger();
+	}
+	else
+	{
+		option = LLNotification::getSelectedOption(notification, response);
+	}
+	
+	LLUUID from_id = notification["payload"]["from_id"].asUUID();
+	LLUUID lure_id = notification["payload"]["lure_id"].asUUID();
+	BOOL godlike = notification["payload"]["godlike"].asBoolean();
+
+	switch(option)
+	{
+	case 0:
+		{
+			// accept
+			gAgent.teleportViaLure(lure_id, godlike);
+		}
+		break;
+	case 1:
+	default:
+		// decline
+		send_simple_im(from_id,
+					   LLStringUtil::null,
+					   IM_LURE_DECLINED,
+					   lure_id);
+		break;
+	}
+	return false;
+}
+static LLNotificationFunctorRegistration lure_callback_reg("TeleportOffered", lure_callback);
+
+bool goto_url_callback(const LLSD& notification, const LLSD& response)
+{
+	std::string url = notification["payload"]["url"].asString();
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	if(1 == option)
+	{
+		LLWeb::loadURL(url);
+	}
+	return false;
+}
+static LLNotificationFunctorRegistration goto_url_callback_reg("GotoURL", goto_url_callback);
+
+void process_improved_im(LLMessageSystem *msg, void **user_data)
+{
+	if (gNoRender)
+	{
+		return;
+	}
+	LLUUID from_id;
+	BOOL from_group;
+	LLUUID to_id;
+	U8 offline;
+	U8 d = 0;
+	LLUUID session_id;
+	U32 timestamp;
+	std::string name;
+	std::string message;
+	U32 parent_estate_id = 0;
+	LLUUID region_id;
+	LLVector3 position;
+	U8 binary_bucket[MTUBYTES];
+	S32 binary_bucket_size;
+	LLChat chat;
+	std::string buffer;
+	
+	// *TODO: Translate - need to fix the full name to first/last (maybe)
+	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, from_id);
+	msg->getBOOLFast(_PREHASH_MessageBlock, _PREHASH_FromGroup, from_group);
+	msg->getUUIDFast(_PREHASH_MessageBlock, _PREHASH_ToAgentID, to_id);
+	msg->getU8Fast(  _PREHASH_MessageBlock, _PREHASH_Offline, offline);
+	msg->getU8Fast(  _PREHASH_MessageBlock, _PREHASH_Dialog, d);
+	msg->getUUIDFast(_PREHASH_MessageBlock, _PREHASH_ID, session_id);
+	msg->getU32Fast( _PREHASH_MessageBlock, _PREHASH_Timestamp, timestamp);
+	//msg->getData("MessageBlock", "Count",		&count);
+	msg->getStringFast(_PREHASH_MessageBlock, _PREHASH_FromAgentName, name);
+	msg->getStringFast(_PREHASH_MessageBlock, _PREHASH_Message,		message);
+	msg->getU32Fast(_PREHASH_MessageBlock, _PREHASH_ParentEstateID, parent_estate_id);
+	msg->getUUIDFast(_PREHASH_MessageBlock, _PREHASH_RegionID, region_id);
+	msg->getVector3Fast(_PREHASH_MessageBlock, _PREHASH_Position, position);
+	msg->getBinaryDataFast(  _PREHASH_MessageBlock, _PREHASH_BinaryBucket, binary_bucket, 0, 0, MTUBYTES);
+	binary_bucket_size = msg->getSizeFast(_PREHASH_MessageBlock, _PREHASH_BinaryBucket);
+	EInstantMessage dialog = (EInstantMessage)d;
+
+    // make sure that we don't have an empty or all-whitespace name
+	LLStringUtil::trim(name);
+	if (name.empty())
+	{
+        name = LLTrans::getString("Unnamed");
+	}
+
+	BOOL is_busy = gAgent.getBusy();
+	BOOL is_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat);
+	BOOL is_linden = LLMuteList::getInstance()->isLinden(name);
+	BOOL is_owned_by_me = FALSE;
+	BOOL is_friend = (LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL) ? false : true;
+	BOOL accept_im_from_only_friend = gSavedSettings.getBOOL("VoiceCallsFriendsOnly");
+	
+	chat.mMuted = is_muted && !is_linden;
+	chat.mFromID = from_id;
+	chat.mFromName = name;
+	chat.mSourceType = (from_id.isNull() || (name == std::string(SYSTEM_FROM))) ? CHAT_SOURCE_SYSTEM : CHAT_SOURCE_AGENT;
+
+	LLViewerObject *source = gObjectList.findObject(session_id); //Session ID is probably the wrong thing.
+	if (source)
+	{
+		is_owned_by_me = source->permYouOwner();
+	}
+
+	std::string separator_string(": ");
+	int message_offset = 0;
+
+		//Handle IRC styled /me messages.
+	std::string prefix = message.substr(0, 4);
+	if (prefix == "/me " || prefix == "/me'")
+	{
+		separator_string = "";
+		message_offset = 3;
+	}
+
+	LLSD args;
+	switch(dialog)
+	{
+	case IM_CONSOLE_AND_CHAT_HISTORY:
+		// These are used for system messages, hence don't need the name,
+		// as it is always "Second Life".
+	  	// *TODO: Translate
+		args["MESSAGE"] = message;
+
+		// Note: don't put the message in the IM history, even though was sent
+		// via the IM mechanism.
+		LLNotifications::instance().add("SystemMessageTip",args);
+		break;
+
+	case IM_NOTHING_SPECIAL: 
+		// Don't show dialog, just do IM
+		if (!gAgent.isGodlike()
+				&& gAgent.getRegion()->isPrelude() 
+				&& to_id.isNull() )
+		{
+			// do nothing -- don't distract newbies in
+			// Prelude with global IMs
+		}
+		else if (offline == IM_ONLINE && !is_linden && is_busy && name != SYSTEM_FROM)
+		{
+			// return a standard "busy" message, but only do it to online IM 
+			// (i.e. not other auto responses and not store-and-forward IM)
+			if (!gIMMgr->hasSession(session_id))
+			{
+				// if there is not a panel for this conversation (i.e. it is a new IM conversation
+				// initiated by the other party) then...
+				std::string my_name;
+				LLAgentUI::buildFullname(my_name);
+				std::string response = gSavedPerAccountSettings.getString("BusyModeResponse2");
+				pack_instant_message(
+					gMessageSystem,
+					gAgent.getID(),
+					FALSE,
+					gAgent.getSessionID(),
+					from_id,
+					my_name,
+					response,
+					IM_ONLINE,
+					IM_BUSY_AUTO_RESPONSE,
+					session_id);
+				gAgent.sendReliableMessage();
+			}
+
+			// now store incoming IM in chat history
+
+			buffer = message.substr(message_offset);
+	
+			LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
+
+			// add to IM panel, but do not bother the user
+			gIMMgr->addMessage(
+				session_id,
+				from_id,
+				name,
+				buffer,
+				LLStringUtil::null,
+				dialog,
+				parent_estate_id,
+				region_id,
+				position,
+				true);
+
+			// pretend this is chat generated by self, so it does not show up on screen
+			chat.mText = std::string("IM: ") + name + separator_string + message.substr(message_offset);
+			LLFloaterChat::addChat( chat, TRUE, TRUE );
+		}
+		else if (from_id.isNull())
+		{
+			// Messages from "Second Life" ID don't go to IM history
+			// messages which should be routed to IM window come from a user ID with name=SYSTEM_NAME
+			chat.mText = name + ": " + message;
+			LLFloaterChat::addChat(chat, FALSE, FALSE);
+		}
+		else if (to_id.isNull())
+		{
+			// Message to everyone from GOD
+			args["NAME"] = name;
+			args["MESSAGE"] = message;
+			LLNotifications::instance().add("GodMessage", args);
+
+			// Treat like a system message and put in chat history.
+			// Claim to be from a local agent so it doesn't go into
+			// console.
+			chat.mText = name + separator_string + message.substr(message_offset);
+			BOOL local_agent = TRUE;
+			LLFloaterChat::addChat(chat, FALSE, local_agent);
+		}
+		else
+		{
+			// standard message, not from system
+			std::string saved;
+			if(offline == IM_OFFLINE)
+			{
+				saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str());
+			}
+			buffer = saved + message.substr(message_offset);
+
+			LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
+
+			bool mute_im = is_muted;
+			if(accept_im_from_only_friend&&!is_friend)
+			{
+				mute_im = true;
+			}
+			if (!mute_im || is_linden) 
+			{
+				gIMMgr->addMessage(
+					session_id,
+					from_id,
+					name,
+					buffer,
+					LLStringUtil::null,
+					dialog,
+					parent_estate_id,
+					region_id,
+					position,
+					true);
+				chat.mText = std::string("IM: ") + name + separator_string + saved + message.substr(message_offset);
+
+				BOOL local_agent = FALSE;
+				LLFloaterChat::addChat( chat, TRUE, local_agent );
+			}
+			else
+			{
+				// muted user, so don't start an IM session, just record line in chat
+				// history.  Pretend the chat is from a local agent,
+				// so it will go into the history but not be shown on screen.
+				chat.mText = buffer;
+				BOOL local_agent = TRUE;
+				LLFloaterChat::addChat( chat, TRUE, local_agent );
+			}
+		}
+		break;
+
+	case IM_TYPING_START:
+		{
+			LLPointer<LLIMInfo> im_info = new LLIMInfo(gMessageSystem);
+			gIMMgr->processIMTypingStart(im_info);
+		}
+		break;
+
+	case IM_TYPING_STOP:
+		{
+			LLPointer<LLIMInfo> im_info = new LLIMInfo(gMessageSystem);
+			gIMMgr->processIMTypingStop(im_info);
+		}
+		break;
+
+	case IM_MESSAGEBOX:
+		{
+			// This is a block, modeless dialog.
+			//*TODO: Translate
+			args["MESSAGE"] = message;
+			LLNotifications::instance().add("SystemMessage", args);
+		}
+		break;
+	case IM_GROUP_NOTICE:
+	case IM_GROUP_NOTICE_REQUESTED:
+		{
+			LL_INFOS("Messaging") << "Received IM_GROUP_NOTICE message." << LL_ENDL;
+			// Read the binary bucket for more information.
+			struct notice_bucket_header_t
+			{
+				U8 has_inventory;
+				U8 asset_type;
+				LLUUID group_id;
+			};
+			struct notice_bucket_full_t
+			{
+				struct notice_bucket_header_t header;
+				U8 item_name[DB_INV_ITEM_NAME_BUF_SIZE];
+			}* notice_bin_bucket;
+
+			// Make sure the binary bucket is big enough to hold the header 
+			// and a null terminated item name.
+			if ( (binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8))))
+				|| (binary_bucket[binary_bucket_size - 1] != '\0') )
+			{
+				LL_WARNS("Messaging") << "Malformed group notice binary bucket" << LL_ENDL;
+				break;
+			}
+
+			notice_bin_bucket = (struct notice_bucket_full_t*) &binary_bucket[0];
+			U8 has_inventory = notice_bin_bucket->header.has_inventory;
+			U8 asset_type = notice_bin_bucket->header.asset_type;
+			LLUUID group_id = notice_bin_bucket->header.group_id;
+			std::string item_name = ll_safe_string((const char*) notice_bin_bucket->item_name);
+
+			// If there is inventory, give the user the inventory offer.
+			LLOfferInfo* info = NULL;
+
+			if (has_inventory)
+			{
+				info = new LLOfferInfo;
+				
+				info->mIM = IM_GROUP_NOTICE;
+				info->mFromID = from_id;
+				info->mFromGroup = from_group;
+				info->mTransactionID = session_id;
+				info->mType = (LLAssetType::EType) asset_type;
+				info->mFolderID = gInventory.findCategoryUUIDForType(info->mType);
+				std::string from_name;
+
+				from_name += "A group member named ";
+				from_name += name;
+
+				info->mFromName = from_name;
+				info->mDesc = item_name;
+				info->mHost = msg->getSender();
+			}
+			
+			std::string str(message);
+
+			// Tokenize the string.
+			// TODO: Support escaped tokens ("||" -> "|")
+			typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+			boost::char_separator<char> sep("|","",boost::keep_empty_tokens);
+			tokenizer tokens(str, sep);
+			tokenizer::iterator iter = tokens.begin();
+
+			std::string subj(*iter++);
+			std::string mes(*iter++);
+
+			// Send the notification down the new path.
+			// For requested notices, we don't want to send the popups.
+			if (dialog != IM_GROUP_NOTICE_REQUESTED)
+			{
+				LLSD payload;
+				payload["subject"] = subj;
+				payload["message"] = mes;
+				payload["sender_name"] = name;
+				payload["group_id"] = group_id;
+				payload["inventory_name"] = item_name;
+				payload["inventory_offer"] = info ? info->asLLSD() : LLSD();
+
+				LLSD args;
+				args["SUBJECT"] = subj;
+				args["MESSAGE"] = mes;
+				LLNotifications::instance().add(LLNotification::Params("GroupNotice").substitutions(args).payload(payload).time_stamp(timestamp));
+			}
+
+			// Also send down the old path for now.
+			if (IM_GROUP_NOTICE_REQUESTED == dialog)
+			{
+				
+				LLPanelGroup::showNotice(subj,mes,group_id,has_inventory,item_name,info);
+			}
+		}
+		break;
+	case IM_GROUP_INVITATION:
+		{
+			//if (!is_linden && (is_busy || is_muted))
+			if ((is_busy || is_muted))
+			{
+				LLMessageSystem *msg = gMessageSystem;
+				busy_message(msg,from_id);
+			}
+			else
+			{
+				LL_INFOS("Messaging") << "Received IM_GROUP_INVITATION message." << LL_ENDL;
+				// Read the binary bucket for more information.
+				struct invite_bucket_t
+				{
+					S32 membership_fee;
+					LLUUID role_id;
+				}* invite_bucket;
+
+				// Make sure the binary bucket is the correct size.
+				if (binary_bucket_size != sizeof(invite_bucket_t))
+				{
+					LL_WARNS("Messaging") << "Malformed group invite binary bucket" << LL_ENDL;
+					break;
+				}
+
+				invite_bucket = (struct invite_bucket_t*) &binary_bucket[0];
+				S32 membership_fee = ntohl(invite_bucket->membership_fee);
+
+				LLSD payload;
+				payload["transaction_id"] = session_id;
+				payload["group_id"] = from_id;
+				payload["name"] = name;
+				payload["message"] = message;
+				payload["fee"] = membership_fee;
+
+				LLSD args;
+				args["MESSAGE"] = message;
+				LLNotifications::instance().add("JoinGroup", args, payload, join_group_response);
+			}
+		}
+		break;
+
+	case IM_INVENTORY_OFFERED:
+	case IM_TASK_INVENTORY_OFFERED:
+		// Someone has offered us some inventory.
+		{
+			LLOfferInfo* info = new LLOfferInfo;
+			bool mute_im = false;
+			if (IM_INVENTORY_OFFERED == dialog)
+			{
+				struct offer_agent_bucket_t
+				{
+					S8		asset_type;
+					LLUUID	object_id;
+				}* bucketp;
+
+				if (sizeof(offer_agent_bucket_t) != binary_bucket_size)
+				{
+					LL_WARNS("Messaging") << "Malformed inventory offer from agent" << LL_ENDL;
+					break;
+				}
+				bucketp = (struct offer_agent_bucket_t*) &binary_bucket[0];
+				info->mType = (LLAssetType::EType) bucketp->asset_type;
+				info->mObjectID = bucketp->object_id;
+				
+				if(accept_im_from_only_friend&&!is_friend)
+				{
+					mute_im = true;
+				}
+			}
+			else
+			{
+				if (sizeof(S8) != binary_bucket_size)
+				{
+					LL_WARNS("Messaging") << "Malformed inventory offer from object" << LL_ENDL;
+					break;
+				}
+				info->mType = (LLAssetType::EType) binary_bucket[0];
+				info->mObjectID = LLUUID::null;
+			}
+
+			info->mIM = dialog;
+			info->mFromID = from_id;
+			info->mFromGroup = from_group;
+			info->mTransactionID = session_id;
+			info->mFolderID = gInventory.findCategoryUUIDForType(info->mType);
+
+			if (dialog == IM_TASK_INVENTORY_OFFERED)
+			{
+				info->mFromObject = TRUE;
+			}
+			else
+			{
+				info->mFromObject = FALSE;
+			}
+			info->mFromName = name;
+			info->mDesc = message;
+			info->mHost = msg->getSender();
+			//if (((is_busy && !is_owned_by_me) || is_muted))
+			if ( is_muted || mute_im)
+			{
+				// Same as closing window
+				info->forceResponse(IOR_DECLINE);
+			}
+			else
+			{
+				inventory_offer_handler(info, dialog == IM_TASK_INVENTORY_OFFERED);
+			}
+		}
+		break;
+
+	case IM_INVENTORY_ACCEPTED:
+	{
+		args["NAME"] = name;
+		LLNotifications::instance().add("InventoryAccepted", args);
+		break;
+	}
+	case IM_INVENTORY_DECLINED:
+	{
+		args["NAME"] = name;
+		LLNotifications::instance().add("InventoryDeclined", args);
+		break;
+	}
+	// TODO: _DEPRECATED suffix as part of vote removal - DEV-24856
+	case IM_GROUP_VOTE:
+		{
+			LL_WARNS("Messaging") << "Received IM: IM_GROUP_VOTE_DEPRECATED" << LL_ENDL;
+		}
+		break;
+
+	case IM_GROUP_ELECTION_DEPRECATED:
+	{
+		LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL;
+	}
+	break;
+	
+	case IM_SESSION_SEND:
+	{
+		if (!is_linden && is_busy)
+		{
+			return;
+		}
+
+		// Only show messages if we have a session open (which
+		// should happen after you get an "invitation"
+		if ( !gIMMgr->hasSession(session_id) )
+		{
+			return;
+		}
+
+		// standard message, not from system
+		std::string saved;
+		if(offline == IM_OFFLINE)
+		{
+			saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str());
+		}
+		buffer = saved + message.substr(message_offset);
+		BOOL is_this_agent = FALSE;
+		if(from_id == gAgentID)
+		{
+			is_this_agent = TRUE;
+		}
+		gIMMgr->addMessage(
+			session_id,
+			from_id,
+			name,
+			buffer,
+			ll_safe_string((char*)binary_bucket),
+			IM_SESSION_INVITE,
+			parent_estate_id,
+			region_id,
+			position,
+			true);
+
+		chat.mText = std::string("IM: ") + name + separator_string +  saved + message.substr(message_offset);
+		LLFloaterChat::addChat(chat, TRUE, is_this_agent);
+	}
+	break;
+
+	case IM_FROM_TASK:
+		{
+			if (is_busy && !is_owned_by_me)
+			{
+				return;
+			}
+
+			LLSD substitutions;
+			substitutions["MSG"] = message.substr(message_offset);
+			LLNotifications::instance().add("ServerObjectMessage", substitutions);
+		}
+		break;
+	case IM_FROM_TASK_AS_ALERT:
+		if (is_busy && !is_owned_by_me)
+		{
+			return;
+		}
+		{
+			// Construct a viewer alert for this message.
+			args["NAME"] = name;
+			args["MESSAGE"] = message;
+			LLNotifications::instance().add("ObjectMessage", args);
+		}
+		break;
+	case IM_BUSY_AUTO_RESPONSE:
+		if (is_muted)
+		{
+			LL_DEBUGS("Messaging") << "Ignoring busy response from " << from_id << LL_ENDL;
+			return;
+		}
+		else
+		{
+			// TODO: after LLTrans hits release, get "busy response" into translatable file
+			buffer = llformat("%s (%s): %s", name.c_str(), "busy response", message.substr(message_offset).c_str());
+			gIMMgr->addMessage(session_id, from_id, name, buffer);
+		}
+		break;
+		
+	case IM_LURE_USER:
+		{
+			if (is_muted)
+			{ 
+				return;
+			}
+			else if (is_busy) 
+			{
+				busy_message(msg,from_id);
+			}
+			else
+			{
+				LLSD args;
+				// *TODO: Translate -> [FIRST] [LAST] (maybe)
+				args["NAME"] = name;
+				args["MESSAGE"] = message;
+				LLSD payload;
+				payload["from_id"] = from_id;
+				payload["lure_id"] = session_id;
+				payload["godlike"] = FALSE;
+				LLNotifications::instance().add("TeleportOffered", args, payload);
+			}
+		}
+		break;
+
+	case IM_GODLIKE_LURE_USER:
+		{
+			LLSD payload;
+			payload["from_id"] = from_id;
+			payload["lure_id"] = session_id;
+			payload["godlike"] = TRUE;
+			// do not show a message box, because you're about to be
+			// teleported.
+			LLNotifications::instance().forceResponse(LLNotification::Params("TeleportOffered").payload(payload), 0);
+		}
+		break;
+
+	case IM_GOTO_URL:
+		{
+			LLSD args;
+			// n.b. this is for URLs sent by the system, not for
+			// URLs sent by scripts (i.e. llLoadURL)
+			if (binary_bucket_size <= 0)
+			{
+				LL_WARNS("Messaging") << "bad binary_bucket_size: "
+					<< binary_bucket_size
+					<< " - aborting function." << LL_ENDL;
+				return;
+			}
+
+			std::string url;
+			
+			url.assign((char*)binary_bucket, binary_bucket_size-1);
+			args["MESSAGE"] = message;
+			args["URL"] = url;
+			LLSD payload;
+			payload["url"] = url;
+			LLNotifications::instance().add("GotoURL", args, payload );
+		}
+		break;
+
+	case IM_FRIENDSHIP_OFFERED:
+		{
+			LLSD payload;
+			payload["from_id"] = from_id;
+			payload["session_id"] = session_id;;
+			payload["online"] = (offline == IM_ONLINE);
+			payload["sender"] = msg->getSender().getIPandPort();
+
+			if (is_busy)
+			{
+				busy_message(msg, from_id);
+				LLNotifications::instance().forceResponse(LLNotification::Params("OfferFriendship").payload(payload), 1);
+			}
+			else if (is_muted)
+			{
+				LLNotifications::instance().forceResponse(LLNotification::Params("OfferFriendship").payload(payload), 1);
+			}
+			else
+			{
+				args["[NAME]"] = name;
+				if(message.empty())
+				{
+					//support for frienship offers from clients before July 2008
+				        LLNotifications::instance().add("OfferFriendshipNoMessage", args, payload);
+				}
+				else
+				{
+					args["[MESSAGE]"] = message;
+				        LLNotifications::instance().add("OfferFriendship", args, payload);
+				}
+			}
+		}
+		break;
+
+	case IM_FRIENDSHIP_ACCEPTED:
+		{
+			// In the case of an offline IM, the formFriendship() may be extraneous
+			// as the database should already include the relationship.  But it
+			// doesn't hurt for dupes.
+			LLAvatarTracker::formFriendship(from_id);
+			
+			std::vector<std::string> strings;
+			strings.push_back(from_id.asString());
+			send_generic_message("requestonlinenotification", strings);
+			
+			args["NAME"] = name;
+			LLNotifications::instance().add("FriendshipAccepted", args);
+		}
+		break;
+
+	case IM_FRIENDSHIP_DECLINED_DEPRECATED:
+	default:
+		LL_WARNS("Messaging") << "Instant message calling for unknown dialog "
+				<< (S32)dialog << LL_ENDL;
+		break;
+	}
+
+	LLWindow* viewer_window = gViewerWindow->getWindow();
+	if (viewer_window && viewer_window->getMinimized())
+	{
+		viewer_window->flashIcon(5.f);
+	}
+}
+
+void busy_message (LLMessageSystem* msg, LLUUID from_id) 
+{
+	if (gAgent.getBusy())
+	{
+		std::string my_name;
+		LLAgentUI::buildFullname(my_name);
+		std::string response = gSavedPerAccountSettings.getString("BusyModeResponse2");
+		pack_instant_message(
+			gMessageSystem,
+			gAgent.getID(),
+			FALSE,
+			gAgent.getSessionID(),
+			from_id,
+			my_name,
+			response,
+			IM_ONLINE,
+			IM_BUSY_AUTO_RESPONSE);
+		gAgent.sendReliableMessage();
+	}
+}
+
+bool callingcard_offer_callback(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	LLUUID fid;
+	LLUUID from_id;
+	LLMessageSystem* msg = gMessageSystem;
+	switch(option)
+	{
+	case 0:
+		// accept
+		msg->newMessageFast(_PREHASH_AcceptCallingCard);
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		msg->nextBlockFast(_PREHASH_TransactionBlock);
+		msg->addUUIDFast(_PREHASH_TransactionID, notification["payload"]["transaction_id"].asUUID());
+		fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+		msg->nextBlockFast(_PREHASH_FolderData);
+		msg->addUUIDFast(_PREHASH_FolderID, fid);
+		msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
+		break;
+	case 1:
+		// decline		
+		msg->newMessageFast(_PREHASH_DeclineCallingCard);
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		msg->nextBlockFast(_PREHASH_TransactionBlock);
+		msg->addUUIDFast(_PREHASH_TransactionID, notification["payload"]["transaction_id"].asUUID());
+		msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
+		busy_message(msg, notification["payload"]["source_id"].asUUID());
+		break;
+	default:
+		// close button probably, possibly timed out
+		break;
+	}
+
+	return false;
+}
+static LLNotificationFunctorRegistration callingcard_offer_cb_reg("OfferCallingCard", callingcard_offer_callback);
+
+void process_offer_callingcard(LLMessageSystem* msg, void**)
+{
+	// someone has offered to form a friendship
+	LL_DEBUGS("Messaging") << "callingcard offer" << LL_ENDL;
+
+	LLUUID source_id;
+	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, source_id);
+	LLUUID tid;
+	msg->getUUIDFast(_PREHASH_AgentBlock, _PREHASH_TransactionID, tid);
+
+	LLSD payload;
+	payload["transaction_id"] = tid;
+	payload["source_id"] = source_id;
+	payload["sender"] = msg->getSender().getIPandPort();
+
+	LLViewerObject* source = gObjectList.findObject(source_id);
+	LLSD args;
+	std::string source_name;
+	if(source && source->isAvatar())
+	{
+		LLNameValue* nvfirst = source->getNVPair("FirstName");
+		LLNameValue* nvlast  = source->getNVPair("LastName");
+		if (nvfirst && nvlast)
+		{
+			args["FIRST"] = nvfirst->getString();
+			args["LAST"] = nvlast->getString();
+			source_name = std::string(nvfirst->getString()) + " " + nvlast->getString();
+		}
+	}
+
+	if(!source_name.empty())
+	{
+		if (gAgent.getBusy() 
+			|| LLMuteList::getInstance()->isMuted(source_id, source_name, LLMute::flagTextChat))
+		{
+			// automatically decline offer
+			LLNotifications::instance().forceResponse(LLNotification::Params("OfferCallingCard").payload(payload), 1);
+		}
+		else
+		{
+			LLNotifications::instance().add("OfferCallingCard", args, payload);
+		}
+	}
+	else
+	{
+		LL_WARNS("Messaging") << "Calling card offer from an unknown source." << LL_ENDL;
+	}
+}
+
+void process_accept_callingcard(LLMessageSystem* msg, void**)
+{
+	LLNotifications::instance().add("CallingCardAccepted");
+}
+
+void process_decline_callingcard(LLMessageSystem* msg, void**)
+{
+	LLNotifications::instance().add("CallingCardDeclined");
+}
+
+
+void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
+{
+	LLChat		chat;
+	std::string		mesg;
+	std::string		from_name;
+	U8			source_temp;
+	U8			type_temp;
+	U8			audible_temp;
+	LLColor4	color(1.0f, 1.0f, 1.0f, 1.0f);
+	LLUUID		from_id;
+	LLUUID		owner_id;
+	BOOL		is_owned_by_me = FALSE;
+	LLViewerObject*	chatter;
+
+	msg->getString("ChatData", "FromName", from_name);
+	chat.mFromName = from_name;
+	
+	msg->getUUID("ChatData", "SourceID", from_id);
+	chat.mFromID = from_id;
+	
+	// Object owner for objects
+	msg->getUUID("ChatData", "OwnerID", owner_id);
+	
+	msg->getU8Fast(_PREHASH_ChatData, _PREHASH_SourceType, source_temp);
+	chat.mSourceType = (EChatSourceType)source_temp;
+
+	msg->getU8("ChatData", "ChatType", type_temp);
+	chat.mChatType = (EChatType)type_temp;
+
+	msg->getU8Fast(_PREHASH_ChatData, _PREHASH_Audible, audible_temp);
+	chat.mAudible = (EChatAudible)audible_temp;
+	
+	chat.mTime = LLFrameTimer::getElapsedSeconds();
+	
+	BOOL is_busy = gAgent.getBusy();
+
+	BOOL is_muted = FALSE;
+	BOOL is_linden = FALSE;
+	is_muted = LLMuteList::getInstance()->isMuted(
+		from_id,
+		from_name,
+		LLMute::flagTextChat) 
+		|| LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagTextChat);
+	is_linden = chat.mSourceType != CHAT_SOURCE_OBJECT &&
+		LLMuteList::getInstance()->isLinden(from_name);
+
+	BOOL is_audible = (CHAT_AUDIBLE_FULLY == chat.mAudible);
+	chatter = gObjectList.findObject(from_id);
+	if (chatter)
+	{
+		chat.mPosAgent = chatter->getPositionAgent();
+		
+		// Make swirly things only for talking objects. (not script debug messages, though)
+		if (chat.mSourceType == CHAT_SOURCE_OBJECT 
+			&& chat.mChatType != CHAT_TYPE_DEBUG_MSG)
+		{
+			LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent());
+			psc->setSourceObject(chatter);
+			psc->setColor(color);
+			//We set the particles to be owned by the object's owner, 
+			//just in case they should be muted by the mute list
+			psc->setOwnerUUID(owner_id);
+			LLViewerPartSim::getInstance()->addPartSource(psc);
+		}
+
+		// record last audible utterance
+		if (is_audible
+			&& (is_linden || (!is_muted && !is_busy)))
+		{
+			if (chat.mChatType != CHAT_TYPE_START 
+				&& chat.mChatType != CHAT_TYPE_STOP)
+			{
+				gAgent.heardChat(chat.mFromID);
+			}
+		}
+
+		is_owned_by_me = chatter->permYouOwner();
+	}
+
+	if (is_audible)
+	{
+		BOOL visible_in_chat_bubble = FALSE;
+		std::string verb;
+
+		color.setVec(1.f,1.f,1.f,1.f);
+		msg->getStringFast(_PREHASH_ChatData, _PREHASH_Message, mesg);
+
+		BOOL ircstyle = FALSE;
+
+		// Look for IRC-style emotes here so chatbubbles work
+		std::string prefix = mesg.substr(0, 4);
+		if (prefix == "/me " || prefix == "/me'")
+		{
+			chat.mText = from_name;
+			chat.mText += mesg.substr(3);
+			ircstyle = TRUE;
+		}
+		else
+		{
+			chat.mText = mesg;
+		}
+
+		// Look for the start of typing so we can put "..." in the bubbles.
+		if (CHAT_TYPE_START == chat.mChatType)
+		{
+			LLLocalSpeakerMgr::getInstance()->setSpeakerTyping(from_id, TRUE);
+
+			// Might not have the avatar constructed yet, eg on login.
+			if (chatter && chatter->isAvatar())
+			{
+				((LLVOAvatar*)chatter)->startTyping();
+			}
+			return;
+		}
+		else if (CHAT_TYPE_STOP == chat.mChatType)
+		{
+			LLLocalSpeakerMgr::getInstance()->setSpeakerTyping(from_id, FALSE);
+
+			// Might not have the avatar constructed yet, eg on login.
+			if (chatter && chatter->isAvatar())
+			{
+				((LLVOAvatar*)chatter)->stopTyping();
+			}
+			return;
+		}
+
+		// We have a real utterance now, so can stop showing "..." and proceed.
+		if (chatter && chatter->isAvatar())
+		{
+			LLLocalSpeakerMgr::getInstance()->setSpeakerTyping(from_id, FALSE);
+			((LLVOAvatar*)chatter)->stopTyping();
+
+			if (!is_muted && !is_busy)
+			{
+				visible_in_chat_bubble = gSavedSettings.getBOOL("UseChatBubbles");
+				((LLVOAvatar*)chatter)->addChat(chat);
+			}
+		}
+
+		// Look for IRC-style emotes
+		if (ircstyle)
+		{
+			// set CHAT_STYLE_IRC to avoid adding Avatar Name as author of message. See EXT-656
+			chat.mChatStyle = CHAT_STYLE_IRC;
+
+			// Do nothing, ircstyle is fixed above for chat bubbles
+		}
+		else
+		{
+			switch(chat.mChatType)
+			{
+			case CHAT_TYPE_WHISPER:
+				verb = "(" + LLTrans::getString("whisper") + ")";
+				break;
+			case CHAT_TYPE_DEBUG_MSG:
+			case CHAT_TYPE_OWNER:
+			case CHAT_TYPE_NORMAL:
+				verb = "";
+				break;
+			case CHAT_TYPE_SHOUT:
+				verb = "(" + LLTrans::getString("shout") + ")";
+				break;
+			case CHAT_TYPE_START:
+			case CHAT_TYPE_STOP:
+				LL_WARNS("Messaging") << "Got chat type start/stop in main chat processing." << LL_ENDL;
+				break;
+			default:
+				LL_WARNS("Messaging") << "Unknown type " << chat.mChatType << " in chat!" << LL_ENDL;
+				verb = "";
+				break;
+			}
+
+
+			chat.mText = "";
+			chat.mText += verb;
+			chat.mText += mesg;
+		}
+		
+		if (chatter)
+		{
+			chat.mPosAgent = chatter->getPositionAgent();
+		}
+
+		// truth table:
+		// LINDEN	BUSY	MUTED	OWNED_BY_YOU	TASK		DISPLAY		STORE IN HISTORY
+		// F		F		F		F				*			Yes			Yes
+		// F		F		F		T				*			Yes			Yes
+		// F		F		T		F				*			No			No
+		// F		F		T		T				*			No			No
+		// F		T		F		F				*			No			Yes
+		// F		T		F		T				*			Yes			Yes
+		// F		T		T		F				*			No			No
+		// F		T		T		T				*			No			No
+		// T		*		*		*				F			Yes			Yes
+
+		chat.mMuted = is_muted && !is_linden;
+
+		if (!visible_in_chat_bubble 
+			&& (is_linden || !is_busy || is_owned_by_me))
+		{
+			// show on screen and add to history
+			LLNotificationsUI::LLNotificationManager::instance().onChat(
+					chat, LLNotificationsUI::NT_NEARBYCHAT);
+
+            // adding temporarily so that communications window chat bar 
+            // works until the new chat window is ready
+			chat.mText = from_name + ": " + chat.mText;
+			LLFloaterChat::addChat(chat, FALSE, FALSE);
+		}
+		else
+		{
+			LLNotificationsUI::LLNotificationManager::instance().onChat(
+					chat, LLNotificationsUI::NT_NEARBYCHAT);
+			// adding temporarily
+			LLFloaterChat::addChatHistory(chat);
+		}
+	}
+}
+
+
+// Simulator we're on is informing the viewer that the agent
+// is starting to teleport (perhaps to another sim, perhaps to the 
+// same sim). If we initiated the teleport process by sending some kind 
+// of TeleportRequest, then this info is redundant, but if the sim 
+// initiated the teleport (via a script call, being killed, etc.) 
+// then this info is news to us.
+void process_teleport_start(LLMessageSystem *msg, void**)
+{
+	U32 teleport_flags = 0x0;
+	msg->getU32("Info", "TeleportFlags", teleport_flags);
+
+	if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL)
+	{
+		gViewerWindow->setProgressCancelButtonVisible(FALSE);
+	}
+	else
+	{
+		gViewerWindow->setProgressCancelButtonVisible(TRUE, LLTrans::getString("Cancel"));
+	}
+
+	// Freeze the UI and show progress bar
+	// Note: could add data here to differentiate between normal teleport and death.
+
+	if( gAgent.getTeleportState() == LLAgent::TELEPORT_NONE )
+	{
+		gTeleportDisplay = TRUE;
+		gAgent.setTeleportState( LLAgent::TELEPORT_START );
+		make_ui_sound("UISndTeleportOut");
+		
+		// Don't call LLFirstUse::useTeleport here because this could be
+		// due to being killed, which would send you home, not to a Telehub
+	}
+}
+
+void process_teleport_progress(LLMessageSystem* msg, void**)
+{
+	LLUUID agent_id;
+	msg->getUUID("AgentData", "AgentID", agent_id);
+	if((gAgent.getID() != agent_id)
+	   || (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE))
+	{
+		LL_WARNS("Messaging") << "Unexpected teleport progress message." << LL_ENDL;
+		return;
+	}
+	U32 teleport_flags = 0x0;
+	msg->getU32("Info", "TeleportFlags", teleport_flags);
+	if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL)
+	{
+		gViewerWindow->setProgressCancelButtonVisible(FALSE);
+	}
+	else
+	{
+		gViewerWindow->setProgressCancelButtonVisible(TRUE, LLTrans::getString("Cancel"));
+	}
+	std::string buffer;
+	msg->getString("Info", "Message", buffer);
+	LL_DEBUGS("Messaging") << "teleport progress: " << buffer << LL_ENDL;
+
+	//Sorta hacky...default to using simulator raw messages
+	//if we don't find the coresponding mapping in our progress mappings
+	std::string message = buffer;
+
+	if (LLAgent::sTeleportProgressMessages.find(buffer) != 
+		LLAgent::sTeleportProgressMessages.end() )
+	{
+		message = LLAgent::sTeleportProgressMessages[buffer];
+	}
+
+	gAgent.setTeleportMessage(LLAgent::sTeleportProgressMessages[message]);
+}
+
+class LLFetchInWelcomeArea : public LLInventoryFetchDescendentsObserver
+{
+public:
+	LLFetchInWelcomeArea() {}
+	virtual void done()
+	{
+		LLIsType is_landmark(LLAssetType::AT_LANDMARK);
+		LLIsType is_card(LLAssetType::AT_CALLINGCARD);
+
+		LLInventoryModel::cat_array_t	card_cats;
+		LLInventoryModel::item_array_t	card_items;
+		LLInventoryModel::cat_array_t	land_cats;
+		LLInventoryModel::item_array_t	land_items;
+
+		folder_ref_t::iterator it = mCompleteFolders.begin();
+		folder_ref_t::iterator end = mCompleteFolders.end();
+		for(; it != end; ++it)
+		{
+			gInventory.collectDescendentsIf(
+				(*it),
+				land_cats,
+				land_items,
+				LLInventoryModel::EXCLUDE_TRASH,
+				is_landmark);
+			gInventory.collectDescendentsIf(
+				(*it),
+				card_cats,
+				card_items,
+				LLInventoryModel::EXCLUDE_TRASH,
+				is_card);
+		}
+		LLSD args;
+		if ( land_items.count() > 0 )
+		{	// Show notification that they can now teleport to landmarks.  Use a random landmark from the inventory
+			S32 random_land = ll_rand( land_items.count() - 1 );
+			args["NAME"] = land_items[random_land]->getName();
+			LLNotifications::instance().add("TeleportToLandmark",args);
+		}
+		if ( card_items.count() > 0 )
+		{	// Show notification that they can now contact people.  Use a random calling card from the inventory
+			S32 random_card = ll_rand( card_items.count() - 1 );
+			args["NAME"] = card_items[random_card]->getName();
+			LLNotifications::instance().add("TeleportToPerson",args);
+		}
+
+		gInventory.removeObserver(this);
+		delete this;
+	}
+};
+
+
+
+class LLPostTeleportNotifiers : public LLEventTimer 
+{
+public:
+	LLPostTeleportNotifiers();
+	virtual ~LLPostTeleportNotifiers();
+
+	//function to be called at the supplied frequency
+	virtual BOOL tick();
+};
+
+LLPostTeleportNotifiers::LLPostTeleportNotifiers() : LLEventTimer( 2.0 )
+{
+};
+
+LLPostTeleportNotifiers::~LLPostTeleportNotifiers()
+{
+}
+
+BOOL LLPostTeleportNotifiers::tick()
+{
+	BOOL all_done = FALSE;
+	if ( gAgent.getTeleportState() == LLAgent::TELEPORT_NONE )
+	{
+		// get callingcards and landmarks available to the user arriving.
+		LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+		LLUUID folder_id;
+		folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+		if(folder_id.notNull()) 
+			folders.push_back(folder_id);
+		folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+		if(folder_id.notNull()) 
+			folders.push_back(folder_id);
+		if(!folders.empty())
+		{
+			LLFetchInWelcomeArea* fetcher = new LLFetchInWelcomeArea;
+			fetcher->fetchDescendents(folders);
+			if(fetcher->isEverythingComplete())
+			{
+				fetcher->done();
+			}
+			else
+			{
+				gInventory.addObserver(fetcher);
+			}
+		}
+		all_done = TRUE;
+	}
+
+	return all_done;
+}
+
+
+
+// Teleport notification from the simulator
+// We're going to pretend to be a new agent
+void process_teleport_finish(LLMessageSystem* msg, void**)
+{
+	LL_DEBUGS("Messaging") << "Got teleport location message" << LL_ENDL;
+	LLUUID agent_id;
+	msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id);
+	if (agent_id != gAgent.getID())
+	{
+		LL_WARNS("Messaging") << "Got teleport notification for wrong agent!" << LL_ENDL;
+		return;
+	}
+
+	// Do teleport effect for where you're leaving
+	// VEFFECT: TeleportStart
+	LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE);
+	effectp->setPositionGlobal(gAgent.getPositionGlobal());
+	effectp->setColor(LLColor4U(gAgent.getEffectColor()));
+	LLHUDManager::getInstance()->sendEffects();
+
+	U32 location_id;
+	U32 sim_ip;
+	U16 sim_port;
+	LLVector3 pos, look_at;
+	U64 region_handle;
+	msg->getU32Fast(_PREHASH_Info, _PREHASH_LocationID, location_id);
+	msg->getIPAddrFast(_PREHASH_Info, _PREHASH_SimIP, sim_ip);
+	msg->getIPPortFast(_PREHASH_Info, _PREHASH_SimPort, sim_port);
+	//msg->getVector3Fast(_PREHASH_Info, _PREHASH_Position, pos);
+	//msg->getVector3Fast(_PREHASH_Info, _PREHASH_LookAt, look_at);
+	msg->getU64Fast(_PREHASH_Info, _PREHASH_RegionHandle, region_handle);
+	U32 teleport_flags;
+	msg->getU32Fast(_PREHASH_Info, _PREHASH_TeleportFlags, teleport_flags);
+	
+	
+	std::string seedCap;
+	msg->getStringFast(_PREHASH_Info, _PREHASH_SeedCapability, seedCap);
+
+	// update home location if we are teleporting out of prelude - specific to teleporting to welcome area 
+	if((teleport_flags & TELEPORT_FLAGS_SET_HOME_TO_TARGET)
+	   && (!gAgent.isGodlike()))
+	{
+		gAgent.setHomePosRegion(region_handle, pos);
+
+		// Create a timer that will send notices when teleporting is all finished.  Since this is 
+		// based on the LLEventTimer class, it will be managed by that class and not orphaned or leaked.
+		new LLPostTeleportNotifiers();
+	}
+
+	LLHost sim_host(sim_ip, sim_port);
+
+	// Viewer trusts the simulator.
+	gMessageSystem->enableCircuit(sim_host, TRUE);
+	LLViewerRegion* regionp =  LLWorld::getInstance()->addRegion(region_handle, sim_host);
+
+/*
+	// send camera update to new region
+	gAgent.updateCamera();
+
+	// likewise make sure the camera is behind the avatar
+	gAgent.resetView(TRUE);
+	LLVector3 shift_vector = regionp->getPosRegionFromGlobal(gAgent.getRegion()->getOriginGlobal());
+	gAgent.setRegion(regionp);
+	gObjectList.shiftObjects(shift_vector);
+
+	if (gAgent.getAvatarObject())
+	{
+		gAgent.getAvatarObject()->clearChatText();
+		gAgent.slamLookAt(look_at);
+	}
+	gAgent.setPositionAgent(pos);
+	gAssetStorage->setUpstream(sim);
+	gCacheName->setUpstream(sim);
+*/
+
+	// now, use the circuit info to tell simulator about us!
+	LL_INFOS("Messaging") << "process_teleport_finish() Enabling "
+			<< sim_host << " with code " << msg->mOurCircuitCode << LL_ENDL;
+	msg->newMessageFast(_PREHASH_UseCircuitCode);
+	msg->nextBlockFast(_PREHASH_CircuitCode);
+	msg->addU32Fast(_PREHASH_Code, msg->getOurCircuitCode());
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+	msg->addUUIDFast(_PREHASH_ID, gAgent.getID());
+	msg->sendReliable(sim_host);
+
+	send_complete_agent_movement(sim_host);
+	gAgent.setTeleportState( LLAgent::TELEPORT_MOVING );
+	gAgent.setTeleportMessage(LLAgent::sTeleportProgressMessages["contacting"]);
+
+	regionp->setSeedCapability(seedCap);
+
+	// Don't send camera updates to the new region until we're
+	// actually there...
+
+
+	// Now do teleport effect for where you're going.
+	// VEFFECT: TeleportEnd
+	effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE);
+	effectp->setPositionGlobal(gAgent.getPositionGlobal());
+
+	effectp->setColor(LLColor4U(gAgent.getEffectColor()));
+	LLHUDManager::getInstance()->sendEffects();
+
+//	gTeleportDisplay = TRUE;
+//	gTeleportDisplayTimer.reset();
+//	gViewerWindow->setShowProgress(TRUE);
+}
+
+// stuff we have to do every time we get an AvatarInitComplete from a sim
+/*
+void process_avatar_init_complete(LLMessageSystem* msg, void**)
+{
+	LLVector3 agent_pos;
+	msg->getVector3Fast(_PREHASH_AvatarData, _PREHASH_Position, agent_pos);
+	agent_movement_complete(msg->getSender(), agent_pos);
+}
+*/
+
+void process_agent_movement_complete(LLMessageSystem* msg, void**)
+{
+	gAgentMovementCompleted = true;
+
+	LLUUID agent_id;
+	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
+	LLUUID session_id;
+	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id);
+	if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id))
+	{
+		LL_WARNS("Messaging") << "Incorrect id in process_agent_movement_complete()"
+				<< LL_ENDL;
+		return;
+	}
+
+	LL_DEBUGS("Messaging") << "process_agent_movement_complete()" << LL_ENDL;
+
+	// *TODO: check timestamp to make sure the movement compleation
+	// makes sense.
+	LLVector3 agent_pos;
+	msg->getVector3Fast(_PREHASH_Data, _PREHASH_Position, agent_pos);
+	LLVector3 look_at;
+	msg->getVector3Fast(_PREHASH_Data, _PREHASH_LookAt, look_at);
+	U64 region_handle;
+	msg->getU64Fast(_PREHASH_Data, _PREHASH_RegionHandle, region_handle);
+	
+	std::string version_channel;
+	msg->getString("SimData", "ChannelVersion", version_channel);
+
+	LLVOAvatar* avatarp = gAgent.getAvatarObject();
+	if (!avatarp)
+	{
+		// Could happen if you were immediately god-teleported away on login,
+		// maybe other cases.  Continue, but warn.
+		LL_WARNS("Messaging") << "agent_movement_complete() with NULL avatarp." << LL_ENDL;
+	}
+
+	F32 x, y;
+	from_region_handle(region_handle, &x, &y);
+	LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromHandle(region_handle);
+	if (!regionp)
+	{
+		if (gAgent.getRegion())
+		{
+			LL_WARNS("Messaging") << "current region " << gAgent.getRegion()->getOriginGlobal() << LL_ENDL;
+		}
+
+		LL_WARNS("Messaging") << "Agent being sent to invalid home region: " 
+			<< x << ":" << y 
+			<< " current pos " << gAgent.getPositionGlobal()
+			<< LL_ENDL;
+		LLAppViewer::instance()->forceDisconnect("You were sent to an invalid region.");
+		return;
+
+	}
+
+	LL_INFOS("Messaging") << "Changing home region to " << x << ":" << y << LL_ENDL;
+
+	// set our upstream host the new simulator and shuffle things as
+	// appropriate.
+	LLVector3 shift_vector = regionp->getPosRegionFromGlobal(
+		gAgent.getRegion()->getOriginGlobal());
+	gAgent.setRegion(regionp);
+	gObjectList.shiftObjects(shift_vector);
+	gAssetStorage->setUpstream(msg->getSender());
+	gCacheName->setUpstream(msg->getSender());
+	gViewerThrottle.sendToSim();
+	gViewerWindow->sendShapeToSim();
+
+	bool is_teleport = gAgent.getTeleportState() == LLAgent::TELEPORT_MOVING;
+
+	if( is_teleport )
+	{
+		// Force the camera back onto the agent, don't animate.
+		gAgent.setFocusOnAvatar(TRUE, FALSE);
+		gAgent.slamLookAt(look_at);
+		gAgent.updateCamera();
+
+		gAgent.setTeleportState( LLAgent::TELEPORT_START_ARRIVAL );
+
+		// set the appearance on teleport since the new sim does not
+		// know what you look like.
+		gAgent.sendAgentSetAppearance();
+
+		if (avatarp)
+		{
+			// Chat the "back" SLURL. (DEV-4907)
+			LLChat chat("Teleport completed from " + gAgent.getTeleportSourceSLURL());
+			chat.mSourceType = CHAT_SOURCE_SYSTEM;
+ 			LLFloaterChat::addChatHistory(chat);
+
+			// Set the new position
+			avatarp->setPositionAgent(agent_pos);
+			avatarp->clearChat();
+			avatarp->slamPosition();
+		}
+	}
+	else
+	{
+		// This is likely just the initial logging in phase.
+		gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
+	}
+
+	if ( LLTracker::isTracking(NULL) )
+	{
+		// Check distance to beacon, if < 5m, remove beacon
+		LLVector3d beacon_pos = LLTracker::getTrackedPositionGlobal();
+		LLVector3 beacon_dir(agent_pos.mV[VX] - (F32)fmod(beacon_pos.mdV[VX], 256.0), agent_pos.mV[VY] - (F32)fmod(beacon_pos.mdV[VY], 256.0), 0);
+		if (beacon_dir.magVecSquared() < 25.f)
+		{
+			LLTracker::stopTracking(NULL);
+		}
+		else if ( is_teleport )
+		{
+			//look at the beacon
+			LLVector3 global_agent_pos = agent_pos;
+			global_agent_pos[0] += x;
+			global_agent_pos[1] += y;
+			look_at = (LLVector3)beacon_pos - global_agent_pos;
+			look_at.normVec();
+			gAgent.slamLookAt(look_at);
+		}
+	}
+
+	// TODO: Put back a check for flying status! DK 12/19/05
+	// Sim tells us whether the new position is off the ground
+	/*
+	if (teleport_flags & TELEPORT_FLAGS_IS_FLYING)
+	{
+		gAgent.setFlying(TRUE);
+	}
+	else
+	{
+		gAgent.setFlying(FALSE);
+	}
+	*/
+
+	send_agent_update(TRUE, TRUE);
+
+	if (gAgent.getRegion()->getBlockFly())
+	{
+		gAgent.setFlying(gAgent.canFly());
+	}
+
+	// force simulator to recognize busy state
+	if (gAgent.getBusy())
+	{
+		gAgent.setBusy();
+	}
+	else
+	{
+		gAgent.clearBusy();
+	}
+
+	if (avatarp)
+	{
+		avatarp->mFootPlane.clearVec();
+	}
+	
+	// send walk-vs-run status
+	gAgent.sendWalkRun(gAgent.getRunning() || gAgent.getAlwaysRun());
+
+	// If the server version has changed, display an info box and offer
+	// to display the release notes, unless this is the initial log in.
+	if (gLastVersionChannel == version_channel)
+	{
+		return;
+	}
+
+	if (!gLastVersionChannel.empty())
+	{
+		LLSD payload;
+		payload["message"] = version_channel;
+		LLNotifications::instance().add("ServerVersionChanged", LLSD(), payload, server_version_changed_callback);
+	}
+
+	gLastVersionChannel = version_channel;
+}
+
+bool server_version_changed_callback(const LLSD& notification, const LLSD& response)
+{
+	if(notification["payload"]["message"].asString() =="")
+		return false;
+	std::string url ="http://wiki.secondlife.com/wiki/Release_Notes/";
+	//parse the msg string
+	std::string server_version = notification["payload"]["message"].asString();
+	std::vector<std::string> s_vect;
+	boost::algorithm::split(s_vect, server_version, isspace);
+	for(U32 i = 0; i < s_vect.size(); i++)
+	{
+    	if (i != (s_vect.size() - 1))
+		{
+			if(i != (s_vect.size() - 2))
+			{
+			   url += s_vect[i] + "_";
+			}
+			else
+			{
+				url += s_vect[i] + "/";
+			}
+		}
+		else
+		{
+			url += s_vect[i].substr(0,4);
+		}
+	}
+	
+	LLWeb::loadURL(url);
+	return false;
+}
+
+
+void process_crossed_region(LLMessageSystem* msg, void**)
+{
+	LLUUID agent_id;
+	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
+	LLUUID session_id;
+	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id);
+	if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id))
+	{
+		LL_WARNS("Messaging") << "Incorrect id in process_crossed_region()"
+				<< LL_ENDL;
+		return;
+	}
+	LL_INFOS("Messaging") << "process_crossed_region()" << LL_ENDL;
+
+	U32 sim_ip;
+	msg->getIPAddrFast(_PREHASH_RegionData, _PREHASH_SimIP, sim_ip);
+	U16 sim_port;
+	msg->getIPPortFast(_PREHASH_RegionData, _PREHASH_SimPort, sim_port);
+	LLHost sim_host(sim_ip, sim_port);
+	U64 region_handle;
+	msg->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle);
+	
+	std::string seedCap;
+	msg->getStringFast(_PREHASH_RegionData, _PREHASH_SeedCapability, seedCap);
+
+	send_complete_agent_movement(sim_host);
+
+	LLViewerRegion* regionp = LLWorld::getInstance()->addRegion(region_handle, sim_host);
+	regionp->setSeedCapability(seedCap);
+}
+
+
+
+// Sends avatar and camera information to simulator.
+// Sent roughly once per frame, or 20 times per second, whichever is less often
+
+const F32 THRESHOLD_HEAD_ROT_QDOT = 0.9997f;	// ~= 2.5 degrees -- if its less than this we need to update head_rot
+const F32 MAX_HEAD_ROT_QDOT = 0.99999f;			// ~= 0.5 degrees -- if its greater than this then no need to update head_rot
+												// between these values we delay the updates (but no more than one second)
+
+
+void send_agent_update(BOOL force_send, BOOL send_reliable)
+{
+	if (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE)
+	{
+		// We don't care if they want to send an agent update, they're not allowed to until the simulator
+		// that's the target is ready to receive them (after avatar_init_complete is received)
+		return;
+	}
+
+	// We have already requested to log out.  Don't send agent updates.
+	if(LLAppViewer::instance()->logoutRequestSent())
+	{
+		return;
+	}
+
+	// no region to send update to
+	if(gAgent.getRegion() == NULL)
+	{
+		return;
+	}
+
+	const F32 TRANSLATE_THRESHOLD = 0.01f;
+
+	// NOTA BENE: This is (intentionally?) using the small angle sine approximation to test for rotation
+	//			  Plus, there is an extra 0.5 in the mix since the perpendicular between last_camera_at and getAtAxis() bisects cam_rot_change
+	//			  Thus, we're actually testing against 0.2 degrees
+	const F32 ROTATION_THRESHOLD = 0.1f * 2.f*F_PI/360.f;			//  Rotation thresh 0.2 deg, see note above
+
+	const U8 DUP_MSGS = 1;				//  HACK!  number of times to repeat data on motionless agent
+
+	//  Store data on last sent update so that if no changes, no send
+	static LLVector3 last_camera_pos_agent, 
+					 last_camera_at, 
+					 last_camera_left,
+					 last_camera_up;
+	
+	static LLVector3 cam_center_chg,
+					 cam_rot_chg;
+
+	static LLQuaternion last_head_rot;
+	static U32 last_control_flags = 0;
+	static U8 last_render_state;
+	static U8 duplicate_count = 0;
+	static F32 head_rot_chg = 1.0;
+	static U8 last_flags;
+
+	LLMessageSystem	*msg = gMessageSystem;
+	LLVector3		camera_pos_agent;				// local to avatar's region
+	U8				render_state;
+
+	LLQuaternion body_rotation = gAgent.getFrameAgent().getQuaternion();
+	LLQuaternion head_rotation = gAgent.getHeadRotation();
+
+	camera_pos_agent = gAgent.getCameraPositionAgent();
+
+	render_state = gAgent.getRenderState();
+
+	U32		control_flag_change = 0;
+	U8		flag_change = 0;
+
+	cam_center_chg = last_camera_pos_agent - camera_pos_agent;
+	cam_rot_chg = last_camera_at - LLViewerCamera::getInstance()->getAtAxis();
+
+	// If a modifier key is held down, turn off
+	// LBUTTON and ML_LBUTTON so that using the camera (alt-key) doesn't
+	// trigger a control event.
+	U32 control_flags = gAgent.getControlFlags();
+	MASK	key_mask = gKeyboard->currentMask(TRUE);
+	if (key_mask & MASK_ALT || key_mask & MASK_CONTROL)
+	{
+		control_flags &= ~(	AGENT_CONTROL_LBUTTON_DOWN |
+							AGENT_CONTROL_ML_LBUTTON_DOWN );
+		control_flags |= 	AGENT_CONTROL_LBUTTON_UP |
+							AGENT_CONTROL_ML_LBUTTON_UP ;
+	}
+
+	control_flag_change = last_control_flags ^ control_flags;
+
+	U8 flags = AU_FLAGS_NONE;
+	if (gAgent.isGroupTitleHidden())
+	{
+		flags |= AU_FLAGS_HIDETITLE;
+	}
+	if (gAgent.getAutoPilot())
+	{
+		flags |= AU_FLAGS_CLIENT_AUTOPILOT;
+	}
+
+	flag_change = last_flags ^ flags;
+
+	head_rot_chg = dot(last_head_rot, head_rotation);
+
+	if (force_send || 
+		(cam_center_chg.magVec() > TRANSLATE_THRESHOLD) || 
+		(head_rot_chg < THRESHOLD_HEAD_ROT_QDOT) ||	
+		(last_render_state != render_state) ||
+		(cam_rot_chg.magVec() > ROTATION_THRESHOLD) ||
+		control_flag_change != 0 ||
+		flag_change != 0)  
+	{
+/*
+		if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT)
+		{
+			//LL_INFOS("Messaging") << "head rot " << head_rotation << LL_ENDL;
+			LL_INFOS("Messaging") << "head_rot_chg = " << head_rot_chg << LL_ENDL;
+		}
+		if (cam_rot_chg.magVec() > ROTATION_THRESHOLD) 
+		{
+			LL_INFOS("Messaging") << "cam rot " <<  cam_rot_chg.magVec() << LL_ENDL;
+		}
+		if (cam_center_chg.magVec() > TRANSLATE_THRESHOLD)
+		{
+			LL_INFOS("Messaging") << "cam center " << cam_center_chg.magVec() << LL_ENDL;
+		}
+//		if (drag_delta_chg.magVec() > TRANSLATE_THRESHOLD)
+//		{
+//			LL_INFOS("Messaging") << "drag delta " << drag_delta_chg.magVec() << LL_ENDL;
+//		}
+		if (control_flag_change)
+		{
+			LL_INFOS("Messaging") << "dcf = " << control_flag_change << LL_ENDL;
+		}
+*/
+
+		duplicate_count = 0;
+	}
+	else
+	{
+		duplicate_count++;
+
+		if (head_rot_chg < MAX_HEAD_ROT_QDOT  &&  duplicate_count < AGENT_UPDATES_PER_SECOND)
+		{
+			// The head_rotation is sent for updating things like attached guns.
+			// We only trigger a new update when head_rotation deviates beyond
+			// some threshold from the last update, however this can break fine
+			// adjustments when trying to aim an attached gun, so what we do here
+			// (where we would normally skip sending an update when nothing has changed)
+			// is gradually reduce the threshold to allow a better update to 
+			// eventually get sent... should update to within 0.5 degrees in less 
+			// than a second.
+			if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT + (MAX_HEAD_ROT_QDOT - THRESHOLD_HEAD_ROT_QDOT) * duplicate_count / AGENT_UPDATES_PER_SECOND)
+			{
+				duplicate_count = 0;
+			}
+			else
+			{
+				return;
+			}
+		}
+		else
+		{
+			return;
+		}
+	}
+
+	if (duplicate_count < DUP_MSGS && !gDisconnected)
+	{
+		// Build the message
+		msg->newMessageFast(_PREHASH_AgentUpdate);
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		msg->addQuatFast(_PREHASH_BodyRotation, body_rotation);
+		msg->addQuatFast(_PREHASH_HeadRotation, head_rotation);
+		msg->addU8Fast(_PREHASH_State, render_state);
+		msg->addU8Fast(_PREHASH_Flags, flags);
+
+//		if (camera_pos_agent.mV[VY] > 255.f)
+//		{
+//			LL_INFOS("Messaging") << "Sending camera center " << camera_pos_agent << LL_ENDL;
+//		}
+		
+		msg->addVector3Fast(_PREHASH_CameraCenter, camera_pos_agent);
+		msg->addVector3Fast(_PREHASH_CameraAtAxis, LLViewerCamera::getInstance()->getAtAxis());
+		msg->addVector3Fast(_PREHASH_CameraLeftAxis, LLViewerCamera::getInstance()->getLeftAxis());
+		msg->addVector3Fast(_PREHASH_CameraUpAxis, LLViewerCamera::getInstance()->getUpAxis());
+		msg->addF32Fast(_PREHASH_Far, gAgent.mDrawDistance);
+		
+		msg->addU32Fast(_PREHASH_ControlFlags, control_flags);
+
+		if (gDebugClicks)
+		{
+			if (control_flags & AGENT_CONTROL_LBUTTON_DOWN)
+			{
+				LL_INFOS("Messaging") << "AgentUpdate left button down" << LL_ENDL;
+			}
+
+			if (control_flags & AGENT_CONTROL_LBUTTON_UP)
+			{
+				LL_INFOS("Messaging") << "AgentUpdate left button up" << LL_ENDL;
+			}
+		}
+
+		gAgent.enableControlFlagReset();
+
+		if (!send_reliable)
+		{
+			gAgent.sendMessage();
+		}
+		else
+		{
+			gAgent.sendReliableMessage();
+		}
+
+//		LL_DEBUGS("Messaging") << "agent " << avatar_pos_agent << " cam " << camera_pos_agent << LL_ENDL;
+
+		// Copy the old data 
+		last_head_rot = head_rotation;
+		last_render_state = render_state;
+		last_camera_pos_agent = camera_pos_agent;
+		last_camera_at = LLViewerCamera::getInstance()->getAtAxis();
+		last_camera_left = LLViewerCamera::getInstance()->getLeftAxis();
+		last_camera_up = LLViewerCamera::getInstance()->getUpAxis();
+		last_control_flags = control_flags;
+		last_flags = flags;
+	}
+}
+
+
+
+// *TODO: Remove this dependency, or figure out a better way to handle
+// this hack.
+extern U32 gObjectBits;
+
+void process_object_update(LLMessageSystem *mesgsys, void **user_data)
+{	
+	LLMemType mt(LLMemType::MTYPE_OBJECT);
+	// Update the data counters
+	if (mesgsys->getReceiveCompressedSize())
+	{
+		gObjectBits += mesgsys->getReceiveCompressedSize() * 8;
+	}
+	else
+	{
+		gObjectBits += mesgsys->getReceiveSize() * 8;
+	}
+
+	// Update the object...
+	gObjectList.processObjectUpdate(mesgsys, user_data, OUT_FULL);
+}
+
+void process_compressed_object_update(LLMessageSystem *mesgsys, void **user_data)
+{
+	LLMemType mt(LLMemType::MTYPE_OBJECT);
+	// Update the data counters
+	if (mesgsys->getReceiveCompressedSize())
+	{
+		gObjectBits += mesgsys->getReceiveCompressedSize() * 8;
+	}
+	else
+	{
+		gObjectBits += mesgsys->getReceiveSize() * 8;
+	}
+
+	// Update the object...
+	gObjectList.processCompressedObjectUpdate(mesgsys, user_data, OUT_FULL_COMPRESSED);
+}
+
+void process_cached_object_update(LLMessageSystem *mesgsys, void **user_data)
+{
+	LLMemType mt(LLMemType::MTYPE_OBJECT);
+	// Update the data counters
+	if (mesgsys->getReceiveCompressedSize())
+	{
+		gObjectBits += mesgsys->getReceiveCompressedSize() * 8;
+	}
+	else
+	{
+		gObjectBits += mesgsys->getReceiveSize() * 8;
+	}
+
+	// Update the object...
+	gObjectList.processCachedObjectUpdate(mesgsys, user_data, OUT_FULL_CACHED);
+}
+
+
+void process_terse_object_update_improved(LLMessageSystem *mesgsys, void **user_data)
+{
+	LLMemType mt(LLMemType::MTYPE_OBJECT);
+	if (mesgsys->getReceiveCompressedSize())
+	{
+		gObjectBits += mesgsys->getReceiveCompressedSize() * 8;
+	}
+	else
+	{
+		gObjectBits += mesgsys->getReceiveSize() * 8;
+	}
+
+	gObjectList.processCompressedObjectUpdate(mesgsys, user_data, OUT_TERSE_IMPROVED);
+}
+
+static LLFastTimer::DeclareTimer FTM_PROCESS_OBJECTS("Process Objects");
+
+
+void process_kill_object(LLMessageSystem *mesgsys, void **user_data)
+{
+	LLFastTimer t(FTM_PROCESS_OBJECTS);
+
+	LLUUID		id;
+	U32			local_id;
+	S32			i;
+	S32			num_objects;
+
+	num_objects = mesgsys->getNumberOfBlocksFast(_PREHASH_ObjectData);
+
+	for (i = 0; i < num_objects; i++)
+	{
+		mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, local_id, i);
+
+		LLViewerObjectList::getUUIDFromLocal(id,
+											local_id,
+											gMessageSystem->getSenderIP(),
+											gMessageSystem->getSenderPort());
+		if (id == LLUUID::null)
+		{
+			LL_DEBUGS("Messaging") << "Unknown kill for local " << local_id << LL_ENDL;
+			gObjectList.mNumUnknownKills++;
+			continue;
+		}
+		else
+		{
+			LL_DEBUGS("Messaging") << "Kill message for local " << local_id << LL_ENDL;
+		}
+
+		LLSelectMgr::getInstance()->removeObjectFromSelections(id);
+
+		// ...don't kill the avatar
+		if (!(id == gAgentID))
+		{
+			LLViewerObject *objectp = gObjectList.findObject(id);
+			if (objectp)
+			{
+				// Display green bubble on kill
+				if ( gShowObjectUpdates )
+				{
+					LLViewerObject* newobject;
+					newobject = gObjectList.createObjectViewer(LL_PCODE_LEGACY_TEXT_BUBBLE, objectp->getRegion());
+
+					LLVOTextBubble* bubble = (LLVOTextBubble*) newobject;
+
+					bubble->mColor.setVec(0.f, 1.f, 0.f, 1.f);
+					bubble->setScale( 2.0f * bubble->getScale() );
+					bubble->setPositionGlobal(objectp->getPositionGlobal());
+					gPipeline.addObject(bubble);
+				}
+
+				// Do the kill
+				gObjectList.killObject(objectp);
+			}
+			else
+			{
+				LL_WARNS("Messaging") << "Object in UUID lookup, but not on object list in kill!" << LL_ENDL;
+				gObjectList.mNumUnknownKills++;
+			}
+		}
+	}
+}
+
+void process_time_synch(LLMessageSystem *mesgsys, void **user_data)
+{
+	LLVector3 sun_direction;
+	LLVector3 sun_ang_velocity;
+	F32 phase;
+	U64	space_time_usec;
+
+    U32 seconds_per_day;
+    U32 seconds_per_year;
+
+	// "SimulatorViewerTimeMessage"
+	mesgsys->getU64Fast(_PREHASH_TimeInfo, _PREHASH_UsecSinceStart, space_time_usec);
+	mesgsys->getU32Fast(_PREHASH_TimeInfo, _PREHASH_SecPerDay, seconds_per_day);
+	mesgsys->getU32Fast(_PREHASH_TimeInfo, _PREHASH_SecPerYear, seconds_per_year);
+
+	// This should eventually be moved to an "UpdateHeavenlyBodies" message
+	mesgsys->getF32Fast(_PREHASH_TimeInfo, _PREHASH_SunPhase, phase);
+	mesgsys->getVector3Fast(_PREHASH_TimeInfo, _PREHASH_SunDirection, sun_direction);
+	mesgsys->getVector3Fast(_PREHASH_TimeInfo, _PREHASH_SunAngVelocity, sun_ang_velocity);
+
+	LLWorld::getInstance()->setSpaceTimeUSec(space_time_usec);
+
+	//LL_DEBUGS("Messaging") << "time_synch() - " << sun_direction << ", " << sun_ang_velocity
+	//		 << ", " << phase << LL_ENDL;
+
+	gSky.setSunPhase(phase);
+	gSky.setSunTargetDirection(sun_direction, sun_ang_velocity);
+	if (!gNoRender && !(gSavedSettings.getBOOL("SkyOverrideSimSunPosition") || gSky.getOverrideSun()))
+	{
+		gSky.setSunDirection(sun_direction, sun_ang_velocity);
+	}
+}
+
+void process_sound_trigger(LLMessageSystem *msg, void **)
+{
+	if (!gAudiop) return;
+
+	U64		region_handle = 0;
+	F32		gain = 0;
+	LLUUID	sound_id;
+	LLUUID	owner_id;
+	LLUUID	object_id;
+	LLUUID	parent_id;
+	LLVector3	pos_local;
+
+	msg->getUUIDFast(_PREHASH_SoundData, _PREHASH_SoundID, sound_id);
+	msg->getUUIDFast(_PREHASH_SoundData, _PREHASH_OwnerID, owner_id);
+	msg->getUUIDFast(_PREHASH_SoundData, _PREHASH_ObjectID, object_id);
+	msg->getUUIDFast(_PREHASH_SoundData, _PREHASH_ParentID, parent_id);
+	msg->getU64Fast(_PREHASH_SoundData, _PREHASH_Handle, region_handle);
+	msg->getVector3Fast(_PREHASH_SoundData, _PREHASH_Position, pos_local);
+	msg->getF32Fast(_PREHASH_SoundData, _PREHASH_Gain, gain);
+
+	// adjust sound location to true global coords
+	LLVector3d	pos_global = from_region_handle(region_handle);
+	pos_global.mdV[VX] += pos_local.mV[VX];
+	pos_global.mdV[VY] += pos_local.mV[VY];
+	pos_global.mdV[VZ] += pos_local.mV[VZ];
+
+	// Don't play a trigger sound if you can't hear it due
+	// to parcel "local audio only" settings.
+	if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global)) return;
+
+	// Don't play sounds triggered by someone you muted.
+	if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return;
+	
+	// Don't play sounds from an object you muted
+	if (LLMuteList::getInstance()->isMuted(object_id)) return;
+
+	// Don't play sounds from an object whose parent you muted
+	if (parent_id.notNull()
+		&& LLMuteList::getInstance()->isMuted(parent_id))
+	{
+		return;
+	}
+
+	// Don't play sounds from a region with maturity above current agent maturity
+	if( !gAgent.canAccessMaturityInRegion( region_handle ) )
+	{
+		return;
+	}
+		
+	gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global);
+}
+
+void process_preload_sound(LLMessageSystem *msg, void **user_data)
+{
+	if (!gAudiop)
+	{
+		return;
+	}
+
+	LLUUID sound_id;
+	LLUUID object_id;
+	LLUUID owner_id;
+
+	msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_SoundID, sound_id);
+	msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_ObjectID, object_id);
+	msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_OwnerID, owner_id);
+
+	LLViewerObject *objectp = gObjectList.findObject(object_id);
+	if (!objectp) return;
+
+	if (LLMuteList::getInstance()->isMuted(object_id)) return;
+	if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return;
+	
+	LLAudioSource *sourcep = objectp->getAudioSource(owner_id);
+	if (!sourcep) return;
+	
+	LLAudioData *datap = gAudiop->getAudioData(sound_id);
+
+	// Note that I don't actually do any loading of the
+	// audio data into a buffer at this point, as it won't actually
+	// help us out.
+
+	// Don't play sounds from a region with maturity above current agent maturity
+	LLVector3d pos_global = objectp->getPositionGlobal();
+	if( !gAgent.canAccessMaturityAtGlobal( pos_global ) )
+	{
+		return;
+	}
+	
+	// Add audioData starts a transfer internally.
+	sourcep->addAudioData(datap, FALSE);
+}
+
+void process_attached_sound(LLMessageSystem *msg, void **user_data)
+{
+	F32 gain = 0;
+	LLUUID sound_id;
+	LLUUID object_id;
+	LLUUID owner_id;
+	U8 flags;
+
+	msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_SoundID, sound_id);
+	msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_ObjectID, object_id);
+	msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_OwnerID, owner_id);
+	msg->getF32Fast(_PREHASH_DataBlock, _PREHASH_Gain, gain);
+	msg->getU8Fast(_PREHASH_DataBlock, _PREHASH_Flags, flags);
+
+	LLViewerObject *objectp = gObjectList.findObject(object_id);
+	if (!objectp)
+	{
+		// we don't know about this object, just bail
+		return;
+	}
+	
+	if (LLMuteList::getInstance()->isMuted(object_id)) return;
+	
+	if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return;
+
+	
+	// Don't play sounds from a region with maturity above current agent maturity
+	LLVector3d pos = objectp->getPositionGlobal();
+	if( !gAgent.canAccessMaturityAtGlobal(pos) )
+	{
+		return;
+	}
+	
+	objectp->setAttachedSound(sound_id, owner_id, gain, flags);
+}
+
+
+void process_attached_sound_gain_change(LLMessageSystem *mesgsys, void **user_data)
+{
+	F32 gain = 0;
+	LLUUID object_guid;
+	LLViewerObject *objectp = NULL;
+
+	mesgsys->getUUIDFast(_PREHASH_DataBlock, _PREHASH_ObjectID, object_guid);
+
+	if (!((objectp = gObjectList.findObject(object_guid))))
+	{
+		// we don't know about this object, just bail
+		return;
+	}
+
+ 	mesgsys->getF32Fast(_PREHASH_DataBlock, _PREHASH_Gain, gain);
+
+	objectp->adjustAudioGain(gain);
+}
+
+
+void process_health_message(LLMessageSystem *mesgsys, void **user_data)
+{
+	F32 health;
+
+	mesgsys->getF32Fast(_PREHASH_HealthData, _PREHASH_Health, health);
+
+	if (gStatusBar)
+	{
+		gStatusBar->setHealth((S32)health);
+	}
+}
+
+
+void process_sim_stats(LLMessageSystem *msg, void **user_data)
+{	
+	S32 count = msg->getNumberOfBlocks("Stat");
+	for (S32 i = 0; i < count; ++i)
+	{
+		U32 stat_id;
+		F32 stat_value;
+		msg->getU32("Stat", "StatID", stat_id, i);
+		msg->getF32("Stat", "StatValue", stat_value, i);
+		switch (stat_id)
+		{
+		case LL_SIM_STAT_TIME_DILATION:
+			LLViewerStats::getInstance()->mSimTimeDilation.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_FPS:
+			LLViewerStats::getInstance()->mSimFPS.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_PHYSFPS:
+			LLViewerStats::getInstance()->mSimPhysicsFPS.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_AGENTUPS:
+			LLViewerStats::getInstance()->mSimAgentUPS.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_FRAMEMS:
+			LLViewerStats::getInstance()->mSimFrameMsec.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_NETMS:
+			LLViewerStats::getInstance()->mSimNetMsec.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_SIMOTHERMS:
+			LLViewerStats::getInstance()->mSimSimOtherMsec.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_SIMPHYSICSMS:
+			LLViewerStats::getInstance()->mSimSimPhysicsMsec.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_AGENTMS:
+			LLViewerStats::getInstance()->mSimAgentMsec.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_IMAGESMS:
+			LLViewerStats::getInstance()->mSimImagesMsec.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_SCRIPTMS:
+			LLViewerStats::getInstance()->mSimScriptMsec.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_NUMTASKS:
+			LLViewerStats::getInstance()->mSimObjects.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_NUMTASKSACTIVE:
+			LLViewerStats::getInstance()->mSimActiveObjects.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_NUMAGENTMAIN:
+			LLViewerStats::getInstance()->mSimMainAgents.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_NUMAGENTCHILD:
+			LLViewerStats::getInstance()->mSimChildAgents.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_NUMSCRIPTSACTIVE:
+			LLViewerStats::getInstance()->mSimActiveScripts.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_SCRIPT_EPS:
+			LLViewerStats::getInstance()->mSimScriptEPS.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_INPPS:
+			LLViewerStats::getInstance()->mSimInPPS.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_OUTPPS:
+			LLViewerStats::getInstance()->mSimOutPPS.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_PENDING_DOWNLOADS:
+			LLViewerStats::getInstance()->mSimPendingDownloads.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_PENDING_UPLOADS:
+			LLViewerStats::getInstance()->mSimPendingUploads.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_PENDING_LOCAL_UPLOADS:
+			LLViewerStats::getInstance()->mSimPendingLocalUploads.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_TOTAL_UNACKED_BYTES:
+			LLViewerStats::getInstance()->mSimTotalUnackedBytes.addValue(stat_value / 1024.f);
+			break;
+		case LL_SIM_STAT_PHYSICS_PINNED_TASKS:
+			LLViewerStats::getInstance()->mPhysicsPinnedTasks.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_PHYSICS_LOD_TASKS:
+			LLViewerStats::getInstance()->mPhysicsLODTasks.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_SIMPHYSICSSTEPMS:
+			LLViewerStats::getInstance()->mSimSimPhysicsStepMsec.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_SIMPHYSICSSHAPEMS:
+			LLViewerStats::getInstance()->mSimSimPhysicsShapeUpdateMsec.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_SIMPHYSICSOTHERMS:
+			LLViewerStats::getInstance()->mSimSimPhysicsOtherMsec.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_SIMPHYSICSMEMORY:
+			LLViewerStats::getInstance()->mPhysicsMemoryAllocated.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_SIMSPARETIME:
+			LLViewerStats::getInstance()->mSimSpareMsec.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_SIMSLEEPTIME:
+			LLViewerStats::getInstance()->mSimSleepMsec.addValue(stat_value);
+			break;
+		case LL_SIM_STAT_IOPUMPTIME:
+			LLViewerStats::getInstance()->mSimPumpIOMsec.addValue(stat_value);
+			break;
+		default:
+			// Used to be a commented out warning.
+ 			LL_DEBUGS("Messaging") << "Unknown stat id" << stat_id << LL_ENDL;
+		  break;
+		}
+	}
+
+	/*
+	msg->getF32Fast(_PREHASH_Statistics, _PREHASH_PhysicsTimeDilation, time_dilation);
+	LLViewerStats::getInstance()->mSimTDStat.addValue(time_dilation);
+
+	// Process information
+	//	{	CpuUsage			F32				}
+	//	{	SimMemTotal			F32				}
+	//	{	SimMemRSS			F32				}
+	//	{	ProcessUptime		F32				}
+	F32 cpu_usage;
+	F32 sim_mem_total;
+	F32 sim_mem_rss;
+	F32 process_uptime;
+	msg->getF32Fast(_PREHASH_Statistics, _PREHASH_CpuUsage, cpu_usage);
+	msg->getF32Fast(_PREHASH_Statistics, _PREHASH_SimMemTotal, sim_mem_total);
+	msg->getF32Fast(_PREHASH_Statistics, _PREHASH_SimMemRSS, sim_mem_rss);
+	msg->getF32Fast(_PREHASH_Statistics, _PREHASH_ProcessUptime, process_uptime);
+	LLViewerStats::getInstance()->mSimCPUUsageStat.addValue(cpu_usage);
+	LLViewerStats::getInstance()->mSimMemTotalStat.addValue(sim_mem_total);
+	LLViewerStats::getInstance()->mSimMemRSSStat.addValue(sim_mem_rss);
+	*/
+
+	//
+	// Various hacks that aren't statistics, but are being handled here.
+	//
+	U32 max_tasks_per_region;
+	U32 region_flags;
+	msg->getU32("Region", "ObjectCapacity", max_tasks_per_region);
+	msg->getU32("Region", "RegionFlags", region_flags);
+
+	LLViewerRegion* regionp = gAgent.getRegion();
+	if (regionp)
+	{
+		BOOL was_flying = gAgent.getFlying();
+		regionp->setRegionFlags(region_flags);
+		regionp->setMaxTasks(max_tasks_per_region);
+		// HACK: This makes agents drop from the sky if the region is 
+		// set to no fly while people are still in the sim.
+		if (was_flying && regionp->getBlockFly())
+		{
+			gAgent.setFlying(gAgent.canFly());
+		}
+	}
+}
+
+
+
+void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
+{
+	LLUUID	animation_id;
+	LLUUID	uuid;
+	S32		anim_sequence_id;
+	LLVOAvatar *avatarp;
+	
+	mesgsys->getUUIDFast(_PREHASH_Sender, _PREHASH_ID, uuid);
+
+	//clear animation flags
+	avatarp = (LLVOAvatar *)gObjectList.findObject(uuid);
+
+	if (!avatarp)
+	{
+		// no agent by this ID...error?
+		LL_WARNS("Messaging") << "Received animation state for unknown avatar" << uuid << LL_ENDL;
+		return;
+	}
+
+	S32 num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_AnimationList);
+	S32 num_source_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_AnimationSourceList);
+
+	avatarp->mSignaledAnimations.clear();
+	
+	if (avatarp->isSelf())
+	{
+		LLUUID object_id;
+
+		for( S32 i = 0; i < num_blocks; i++ )
+		{
+			mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i);
+			mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i);
+
+			LL_DEBUGS("Messaging") << "Anim sequence ID: " << anim_sequence_id << LL_ENDL;
+
+			avatarp->mSignaledAnimations[animation_id] = anim_sequence_id;
+
+			if (i < num_source_blocks)
+			{
+				mesgsys->getUUIDFast(_PREHASH_AnimationSourceList, _PREHASH_ObjectID, object_id, i);
+			
+				LLViewerObject* object = gObjectList.findObject(object_id);
+				if (object)
+				{
+					object->mFlags |= FLAGS_ANIM_SOURCE;
+
+					BOOL anim_found = FALSE;
+					LLVOAvatar::AnimSourceIterator anim_it = avatarp->mAnimationSources.find(object_id);
+					for (;anim_it != avatarp->mAnimationSources.end(); ++anim_it)
+					{
+						if (anim_it->second == animation_id)
+						{
+							anim_found = TRUE;
+							break;
+						}
+					}
+
+					if (!anim_found)
+					{
+						avatarp->mAnimationSources.insert(LLVOAvatar::AnimationSourceMap::value_type(object_id, animation_id));
+					}
+				}
+			}
+		}
+	}
+	else
+	{
+		for( S32 i = 0; i < num_blocks; i++ )
+		{
+			mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i);
+			mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i);
+			avatarp->mSignaledAnimations[animation_id] = anim_sequence_id;
+		}
+	}
+
+	if (num_blocks)
+	{
+		avatarp->processAnimationStateChanges();
+	}
+}
+
+void process_avatar_appearance(LLMessageSystem *mesgsys, void **user_data)
+{
+	LLUUID uuid;
+	mesgsys->getUUIDFast(_PREHASH_Sender, _PREHASH_ID, uuid);
+
+	LLVOAvatar* avatarp = (LLVOAvatar *)gObjectList.findObject(uuid);
+	if( avatarp )
+	{
+		avatarp->processAvatarAppearance( mesgsys );
+	}
+	else
+	{
+		LL_WARNS("Messaging") << "avatar_appearance sent for unknown avatar " << uuid << LL_ENDL;
+	}
+}
+
+void process_camera_constraint(LLMessageSystem *mesgsys, void **user_data)
+{
+	LLVector4 cameraCollidePlane;
+	mesgsys->getVector4Fast(_PREHASH_CameraCollidePlane, _PREHASH_Plane, cameraCollidePlane);
+
+	gAgent.setCameraCollidePlane(cameraCollidePlane);
+}
+
+void near_sit_object(BOOL success, void *data)
+{
+	if (success)
+	{
+		// Send message to sit on object
+		gMessageSystem->newMessageFast(_PREHASH_AgentSit);
+		gMessageSystem->nextBlockFast(_PREHASH_AgentData);
+		gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		gAgent.sendReliableMessage();
+	}
+}
+
+void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)
+{
+	LLVector3 sitPosition;
+	LLQuaternion sitRotation;
+	LLUUID sitObjectID;
+	BOOL use_autopilot;
+	mesgsys->getUUIDFast(_PREHASH_SitObject, _PREHASH_ID, sitObjectID);
+	mesgsys->getBOOLFast(_PREHASH_SitTransform, _PREHASH_AutoPilot, use_autopilot);
+	mesgsys->getVector3Fast(_PREHASH_SitTransform, _PREHASH_SitPosition, sitPosition);
+	mesgsys->getQuatFast(_PREHASH_SitTransform, _PREHASH_SitRotation, sitRotation);
+	LLVector3 camera_eye;
+	mesgsys->getVector3Fast(_PREHASH_SitTransform, _PREHASH_CameraEyeOffset, camera_eye);
+	LLVector3 camera_at;
+	mesgsys->getVector3Fast(_PREHASH_SitTransform, _PREHASH_CameraAtOffset, camera_at);
+	BOOL force_mouselook;
+	mesgsys->getBOOLFast(_PREHASH_SitTransform, _PREHASH_ForceMouselook, force_mouselook);
+
+	LLVOAvatar* avatar = gAgent.getAvatarObject();
+
+	if (avatar && dist_vec_squared(camera_eye, camera_at) > 0.0001f)
+	{
+		gAgent.setSitCamera(sitObjectID, camera_eye, camera_at);
+	}
+	
+	gAgent.setForceMouselook(force_mouselook);
+
+	LLViewerObject* object = gObjectList.findObject(sitObjectID);
+	if (object)
+	{
+		LLVector3 sit_spot = object->getPositionAgent() + (sitPosition * object->getRotation());
+		if (!use_autopilot || (avatar && avatar->isSitting() && avatar->getRoot() == object->getRoot()))
+		{
+			//we're already sitting on this object, so don't autopilot
+		}
+		else
+		{
+			gAgent.startAutoPilotGlobal(gAgent.getPosGlobalFromAgent(sit_spot), "Sit", &sitRotation, near_sit_object, NULL, 0.5f);
+		}
+	}
+	else
+	{
+		LL_WARNS("Messaging") << "Received sit approval for unknown object " << sitObjectID << LL_ENDL;
+	}
+}
+
+void process_clear_follow_cam_properties(LLMessageSystem *mesgsys, void **user_data)
+{
+	LLUUID		source_id;
+
+	mesgsys->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, source_id);
+
+	LLFollowCamMgr::removeFollowCamParams(source_id);
+}
+
+void process_set_follow_cam_properties(LLMessageSystem *mesgsys, void **user_data)
+{
+	S32			type;
+	F32			value;
+	bool		settingPosition = false;
+	bool		settingFocus	= false;
+	bool		settingFocusOffset = false;
+	LLVector3	position;
+	LLVector3	focus;
+	LLVector3	focus_offset;
+
+	LLUUID		source_id;
+
+	mesgsys->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, source_id);
+
+	LLViewerObject* objectp = gObjectList.findObject(source_id);
+	if (objectp)
+	{
+		objectp->mFlags |= FLAGS_CAMERA_SOURCE;
+	}
+
+	S32 num_objects = mesgsys->getNumberOfBlocks("CameraProperty");
+	for (S32 block_index = 0; block_index < num_objects; block_index++)
+	{
+		mesgsys->getS32("CameraProperty", "Type", type, block_index);
+		mesgsys->getF32("CameraProperty", "Value", value, block_index);
+		switch(type)
+		{
+		case FOLLOWCAM_PITCH:
+			LLFollowCamMgr::setPitch(source_id, value);
+			break;
+		case FOLLOWCAM_FOCUS_OFFSET_X:
+			focus_offset.mV[VX] = value;
+			settingFocusOffset = true;
+			break;
+		case FOLLOWCAM_FOCUS_OFFSET_Y:
+			focus_offset.mV[VY] = value;
+			settingFocusOffset = true;
+			break;
+		case FOLLOWCAM_FOCUS_OFFSET_Z:
+			focus_offset.mV[VZ] = value;
+			settingFocusOffset = true;
+			break;
+		case FOLLOWCAM_POSITION_LAG:
+			LLFollowCamMgr::setPositionLag(source_id, value);
+			break;
+		case FOLLOWCAM_FOCUS_LAG:
+			LLFollowCamMgr::setFocusLag(source_id, value);
+			break;
+		case FOLLOWCAM_DISTANCE:
+			LLFollowCamMgr::setDistance(source_id, value);
+			break;
+		case FOLLOWCAM_BEHINDNESS_ANGLE:
+			LLFollowCamMgr::setBehindnessAngle(source_id, value);
+			break;
+		case FOLLOWCAM_BEHINDNESS_LAG:
+			LLFollowCamMgr::setBehindnessLag(source_id, value);
+			break;
+		case FOLLOWCAM_POSITION_THRESHOLD:
+			LLFollowCamMgr::setPositionThreshold(source_id, value);
+			break;
+		case FOLLOWCAM_FOCUS_THRESHOLD:
+			LLFollowCamMgr::setFocusThreshold(source_id, value);
+			break;
+		case FOLLOWCAM_ACTIVE:
+			//if 1, set using followcam,. 
+			LLFollowCamMgr::setCameraActive(source_id, value != 0.f);
+			break;
+		case FOLLOWCAM_POSITION_X:
+			settingPosition = true;
+			position.mV[ 0 ] = value;
+			break;
+		case FOLLOWCAM_POSITION_Y:
+			settingPosition = true;
+			position.mV[ 1 ] = value;
+			break;
+		case FOLLOWCAM_POSITION_Z:
+			settingPosition = true;
+			position.mV[ 2 ] = value;
+			break;
+		case FOLLOWCAM_FOCUS_X:
+			settingFocus = true;
+			focus.mV[ 0 ] = value;
+			break;
+		case FOLLOWCAM_FOCUS_Y:
+			settingFocus = true;
+			focus.mV[ 1 ] = value;
+			break;
+		case FOLLOWCAM_FOCUS_Z:
+			settingFocus = true;
+			focus.mV[ 2 ] = value;
+			break;
+		case FOLLOWCAM_POSITION_LOCKED:
+			LLFollowCamMgr::setPositionLocked(source_id, value != 0.f);
+			break;
+		case FOLLOWCAM_FOCUS_LOCKED:
+			LLFollowCamMgr::setFocusLocked(source_id, value != 0.f);
+			break;
+
+		default:
+			break;
+		}
+	}
+
+	if ( settingPosition )
+	{
+		LLFollowCamMgr::setPosition(source_id, position);
+	}
+	if ( settingFocus )
+	{
+		LLFollowCamMgr::setFocus(source_id, focus);
+	}
+	if ( settingFocusOffset )
+	{
+		LLFollowCamMgr::setFocusOffset(source_id, focus_offset);
+	}
+}
+//end Ventrella 
+
+
+// Culled from newsim lltask.cpp
+void process_name_value(LLMessageSystem *mesgsys, void **user_data)
+{
+	std::string	temp_str;
+	LLUUID	id;
+	S32		i, num_blocks;
+
+	mesgsys->getUUIDFast(_PREHASH_TaskData, _PREHASH_ID, id);
+
+	LLViewerObject* object = gObjectList.findObject(id);
+
+	if (object)
+	{
+		num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_NameValueData);
+		for (i = 0; i < num_blocks; i++)
+		{
+			mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, temp_str, i);
+			LL_INFOS("Messaging") << "Added to object Name Value: " << temp_str << LL_ENDL;
+			object->addNVPair(temp_str);
+		}
+	}
+	else
+	{
+		LL_INFOS("Messaging") << "Can't find object " << id << " to add name value pair" << LL_ENDL;
+	}
+}
+
+void process_remove_name_value(LLMessageSystem *mesgsys, void **user_data)
+{
+	std::string	temp_str;
+	LLUUID	id;
+	S32		i, num_blocks;
+
+	mesgsys->getUUIDFast(_PREHASH_TaskData, _PREHASH_ID, id);
+
+	LLViewerObject* object = gObjectList.findObject(id);
+
+	if (object)
+	{
+		num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_NameValueData);
+		for (i = 0; i < num_blocks; i++)
+		{
+			mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, temp_str, i);
+			LL_INFOS("Messaging") << "Removed from object Name Value: " << temp_str << LL_ENDL;
+			object->removeNVPair(temp_str);
+		}
+	}
+	else
+	{
+		LL_INFOS("Messaging") << "Can't find object " << id << " to remove name value pair" << LL_ENDL;
+	}
+}
+
+void process_kick_user(LLMessageSystem *msg, void** /*user_data*/)
+{
+	std::string message;
+
+	msg->getStringFast(_PREHASH_UserInfo, _PREHASH_Reason, message);
+
+	LLAppViewer::instance()->forceDisconnect(message);
+}
+
+
+/*
+void process_user_list_reply(LLMessageSystem *msg, void **user_data)
+{
+	LLUserList::processUserListReply(msg, user_data);
+	return;
+	char	firstname[MAX_STRING+1];
+	char	lastname[MAX_STRING+1];
+	U8		status;
+	S32		user_count;
+
+	user_count = msg->getNumberOfBlocks("UserBlock");
+
+	for (S32 i = 0; i < user_count; i++)
+	{
+		msg->getData("UserBlock", i, "FirstName", firstname);
+		msg->getData("UserBlock", i, "LastName", lastname);
+		msg->getData("UserBlock", i, "Status", &status);
+
+		if (status & 0x01)
+		{
+			dialog_friends_add_friend(buffer, TRUE);
+		}
+		else
+		{
+			dialog_friends_add_friend(buffer, FALSE);
+		}
+	}
+
+	dialog_friends_done_adding();
+}
+*/
+
+// this is not handled in processUpdateMessage
+/*
+void process_time_dilation(LLMessageSystem *msg, void **user_data)
+{
+	// get the time_dilation
+	U16 foo;
+	msg->getData("TimeDilation", "TimeDilation", &foo);
+	F32 time_dilation = ((F32) foo) / 65535.f;
+
+	// get the pointer to the right region
+	U32 ip = msg->getSenderIP();
+	U32 port = msg->getSenderPort();
+	LLViewerRegion *regionp = LLWorld::getInstance()->getRegion(ip, port);
+	if (regionp)
+	{
+		regionp->setTimeDilation(time_dilation);
+	}
+}
+*/
+
+
+
+void process_money_balance_reply( LLMessageSystem* msg, void** )
+{
+	S32 balance = 0;
+	S32 credit = 0;
+	S32 committed = 0;
+	std::string desc;
+
+	msg->getS32("MoneyData", "MoneyBalance", balance);
+	msg->getS32("MoneyData", "SquareMetersCredit", credit);
+	msg->getS32("MoneyData", "SquareMetersCommitted", committed);
+	msg->getStringFast(_PREHASH_MoneyData, _PREHASH_Description, desc);
+	LL_INFOS("Messaging") << "L$, credit, committed: " << balance << " " << credit << " "
+			<< committed << LL_ENDL;
+
+	if (gStatusBar)
+	{
+		S32 old_balance = gStatusBar->getBalance();
+
+		// This is an update, not the first transmission of balance
+		if (old_balance != 0)
+		{
+			// this is actually an update
+			if (balance > old_balance)
+			{
+				LLFirstUse::useBalanceIncrease(balance - old_balance);
+			}
+			else if (balance < old_balance)
+			{
+				LLFirstUse::useBalanceDecrease(balance - old_balance);
+			}
+		}
+
+		gStatusBar->setBalance(balance);
+		gStatusBar->setLandCredit(credit);
+		gStatusBar->setLandCommitted(committed);
+	}
+
+	LLUUID tid;
+	msg->getUUID("MoneyData", "TransactionID", tid);
+	static std::deque<LLUUID> recent;
+	if(!desc.empty() && gSavedSettings.getBOOL("NotifyMoneyChange")
+	   && (std::find(recent.rbegin(), recent.rend(), tid) == recent.rend()))
+	{
+		// Make the user confirm the transaction, since they might
+		// have missed something during an event.
+		// *TODO: Translate
+		LLSD args;
+		args["MESSAGE"] = desc;
+		LLNotifications::instance().add("SystemMessage", args);
+
+		// Once the 'recent' container gets large enough, chop some
+		// off the beginning.
+		const U32 MAX_LOOKBACK = 30;
+		const S32 POP_FRONT_SIZE = 12;
+		if(recent.size() > MAX_LOOKBACK)
+		{
+			LL_DEBUGS("Messaging") << "Removing oldest transaction records" << LL_ENDL;
+			recent.erase(recent.begin(), recent.begin() + POP_FRONT_SIZE);
+		}
+		//LL_DEBUGS("Messaging") << "Pushing back transaction " << tid << LL_ENDL;
+		recent.push_back(tid);
+	}
+}
+
+bool handle_special_notification_callback(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	
+	if (0 == option)
+	{
+		// set the preference to the maturity of the region we're calling
+		int preferredMaturity = notification["payload"]["_region_access"].asInteger();
+		gSavedSettings.setU32("PreferredMaturity", preferredMaturity);
+		gAgent.sendMaturityPreferenceToServer(preferredMaturity);
+
+	}
+	
+	return false;
+}
+
+// some of the server notifications need special handling. This is where we do that.
+bool handle_special_notification(std::string notificationID, LLSD& llsdBlock)
+{
+	int regionAccess = llsdBlock["_region_access"].asInteger();
+	llsdBlock["REGIONMATURITY"] = LLViewerRegion::accessToString(regionAccess);
+	
+	// we're going to throw the LLSD in there in case anyone ever wants to use it
+	LLNotifications::instance().add(notificationID+"_Notify", llsdBlock);
+	
+	if (regionAccess == SIM_ACCESS_MATURE)
+	{
+		if (gAgent.isTeen())
+		{
+			LLNotifications::instance().add(notificationID+"_KB", llsdBlock);
+			return true;
+		}
+		else if (gAgent.prefersPG())
+		{
+			LLNotifications::instance().add(notificationID+"_Change", llsdBlock, llsdBlock, handle_special_notification_callback);
+			return true;
+		}
+	}
+	else if (regionAccess == SIM_ACCESS_ADULT)
+	{
+		if (!gAgent.isAdult())
+		{
+			LLNotifications::instance().add(notificationID+"_KB", llsdBlock);
+			return true;
+		}
+		else if (gAgent.prefersPG() || gAgent.prefersMature())
+		{
+			LLNotifications::instance().add(notificationID+"_Change", llsdBlock, llsdBlock, handle_special_notification_callback);
+			return true;
+		}
+	}
+	return false;
+}
+
+bool attempt_standard_notification(LLMessageSystem* msgsystem)
+{
+	// if we have additional alert data
+	if (msgsystem->has(_PREHASH_AlertInfo) && msgsystem->getNumberOfBlocksFast(_PREHASH_AlertInfo) > 0)
+	{
+		// notification was specified using the new mechanism, so we can just handle it here
+		std::string notificationID;
+		std::string llsdRaw;
+		LLSD llsdBlock;
+		msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, notificationID);
+		msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_ExtraParams, llsdRaw);
+		if (llsdRaw.length())
+		{
+			std::istringstream llsdData(llsdRaw);
+			if (!LLSDSerialize::deserialize(llsdBlock, llsdData, llsdRaw.length()))
+			{
+				llwarns << "attempt_standard_notification: Attempted to read notification parameter data into LLSD but failed:" << llsdRaw << llendl;
+			}
+		}
+		
+		if (
+			(notificationID == "RegionEntryAccessBlocked") ||
+			(notificationID == "LandClaimAccessBlocked") ||
+			(notificationID == "LandBuyAccessBlocked")
+		   )
+		{
+			/*---------------------------------------------------------------------
+			 (Commented so a grep will find the notification strings, since
+			 we construct them on the fly; if you add additional notifications,
+			 please update the comment.)
+			 
+			 Could throw any of the following notifications:
+			 
+				RegionEntryAccessBlocked
+				RegionEntryAccessBlocked_Notify
+				RegionEntryAccessBlocked_Change
+				RegionEntryAccessBlocked_KB
+				LandClaimAccessBlocked 
+				LandClaimAccessBlocked_Notify 
+				LandClaimAccessBlocked_Change 
+				LandClaimAccessBlocked_KB 
+				LandBuyAccessBlocked
+				LandBuyAccessBlocked_Notify
+				LandBuyAccessBlocked_Change
+				LandBuyAccessBlocked_KB
+			 
+			-----------------------------------------------------------------------*/ 
+			if (handle_special_notification(notificationID, llsdBlock))
+			{
+				return true;
+			}
+		}
+		
+		LLNotifications::instance().add(notificationID, llsdBlock);
+		return true;
+	}	
+	return false;
+}
+
+
+void process_agent_alert_message(LLMessageSystem* msgsystem, void** user_data)
+{
+	// make sure the cursor is back to the usual default since the
+	// alert is probably due to some kind of error.
+	gViewerWindow->getWindow()->resetBusyCount();
+	
+	if (!attempt_standard_notification(msgsystem))
+	{
+		BOOL modal = FALSE;
+		msgsystem->getBOOL("AlertData", "Modal", modal);
+		std::string buffer;
+		msgsystem->getStringFast(_PREHASH_AlertData, _PREHASH_Message, buffer);
+		process_alert_core(buffer, modal);
+	}
+}
+
+// The only difference between this routine and the previous is the fact that
+// for this routine, the modal parameter is always false. Sadly, for the message
+// handled by this routine, there is no "Modal" parameter on the message, and
+// there's no API to tell if a message has the given parameter or not.
+// So we can't handle the messages with the same handler.
+void process_alert_message(LLMessageSystem *msgsystem, void **user_data)
+{
+	// make sure the cursor is back to the usual default since the
+	// alert is probably due to some kind of error.
+	gViewerWindow->getWindow()->resetBusyCount();
+		
+	if (!attempt_standard_notification(msgsystem))
+	{
+		BOOL modal = FALSE;
+		std::string buffer;
+		msgsystem->getStringFast(_PREHASH_AlertData, _PREHASH_Message, buffer);
+		process_alert_core(buffer, modal);
+	}
+}
+
+void process_alert_core(const std::string& message, BOOL modal)
+{
+	// HACK -- handle callbacks for specific alerts
+	if ( message == "You died and have been teleported to your home location")
+	{
+		LLViewerStats::getInstance()->incStat(LLViewerStats::ST_KILLED_COUNT);
+	}
+	else if( message == "Home position set." )
+	{
+		// save the home location image to disk
+		std::string snap_filename = gDirUtilp->getLindenUserDir();
+		snap_filename += gDirUtilp->getDirDelimiter();
+		snap_filename += SCREEN_HOME_FILENAME;
+		gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight(), FALSE, FALSE);
+	}
+
+	const std::string ALERT_PREFIX("ALERT: ");
+	const std::string NOTIFY_PREFIX("NOTIFY: ");
+	if (message.find(ALERT_PREFIX) == 0)
+	{
+		// Allow the server to spawn a named alert so that server alerts can be
+		// translated out of English.
+		std::string alert_name(message.substr(ALERT_PREFIX.length()));
+		LLNotifications::instance().add(alert_name);
+	}
+	else if (message.find(NOTIFY_PREFIX) == 0)
+	{
+		// Allow the server to spawn a named notification so that server notifications can be
+		// translated out of English.
+		std::string notify_name(message.substr(NOTIFY_PREFIX.length()));
+		LLNotifications::instance().add(notify_name);
+	}
+	else if (message[0] == '/')
+	{
+		// System message is important, show in upper-right box not tip
+		std::string text(message.substr(1));
+		LLSD args;
+		if (text.substr(0,17) == "RESTART_X_MINUTES")
+		{
+			S32 mins = 0;
+			LLStringUtil::convertToS32(text.substr(18), mins);
+			args["MINUTES"] = llformat("%d",mins);
+			LLNotifications::instance().add("RegionRestartMinutes", args);
+		}
+		else if (text.substr(0,17) == "RESTART_X_SECONDS")
+		{
+			S32 secs = 0;
+			LLStringUtil::convertToS32(text.substr(18), secs);
+			args["SECONDS"] = llformat("%d",secs);
+			LLNotifications::instance().add("RegionRestartSeconds", args);
+		}
+		else
+		{
+			std::string new_msg =LLNotifications::instance().getGlobalString(text);
+			args["MESSAGE"] = new_msg;
+			LLNotifications::instance().add("SystemMessage", args);
+		}
+	}
+	else if (modal)
+	{
+		LLSD args;
+		std::string new_msg =LLNotifications::instance().getGlobalString(message);
+		args["ERROR_MESSAGE"] = new_msg;
+		LLNotifications::instance().add("ErrorMessage", args);
+	}
+	else
+	{
+		LLSD args;
+		std::string new_msg =LLNotifications::instance().getGlobalString(message);
+		args["MESSAGE"] = new_msg;
+		LLNotifications::instance().add("SystemMessageTip", args);
+	}
+}
+
+mean_collision_list_t				gMeanCollisionList;
+time_t								gLastDisplayedTime = 0;
+
+void handle_show_mean_events(void *)
+{
+	if (gNoRender)
+	{
+		return;
+	}
+	LLFloaterReg::showInstance("bumps");
+	//LLFloaterBump::showInstance();
+}
+
+void mean_name_callback(const LLUUID &id, const std::string& first, const std::string& last, BOOL always_false)
+{
+	if (gNoRender)
+	{
+		return;
+	}
+
+	static const U32 max_collision_list_size = 20;
+	if (gMeanCollisionList.size() > max_collision_list_size)
+	{
+		mean_collision_list_t::iterator iter = gMeanCollisionList.begin();
+		for (U32 i=0; i<max_collision_list_size; i++) iter++;
+		for_each(iter, gMeanCollisionList.end(), DeletePointer());
+		gMeanCollisionList.erase(iter, gMeanCollisionList.end());
+	}
+
+	for (mean_collision_list_t::iterator iter = gMeanCollisionList.begin();
+		 iter != gMeanCollisionList.end(); ++iter)
+	{
+		LLMeanCollisionData *mcd = *iter;
+		if (mcd->mPerp == id)
+		{
+			mcd->mFirstName = first;
+			mcd->mLastName = last;
+		}
+	}
+}
+
+void process_mean_collision_alert_message(LLMessageSystem *msgsystem, void **user_data)
+{
+	if (gAgent.inPrelude())
+	{
+		// In prelude, bumping is OK.  This dialog is rather confusing to 
+		// newbies, so we don't show it.  Drop the packet on the floor.
+		return;
+	}
+
+	// make sure the cursor is back to the usual default since the
+	// alert is probably due to some kind of error.
+	gViewerWindow->getWindow()->resetBusyCount();
+
+	LLUUID perp;
+	U32	   time;
+	U8	   u8type;
+	EMeanCollisionType	   type;
+	F32    mag;
+
+	S32 i, num = msgsystem->getNumberOfBlocks(_PREHASH_MeanCollision);
+
+	for (i = 0; i < num; i++)
+	{
+		msgsystem->getUUIDFast(_PREHASH_MeanCollision, _PREHASH_Perp, perp);
+		msgsystem->getU32Fast(_PREHASH_MeanCollision, _PREHASH_Time, time);
+		msgsystem->getF32Fast(_PREHASH_MeanCollision, _PREHASH_Mag, mag);
+		msgsystem->getU8Fast(_PREHASH_MeanCollision, _PREHASH_Type, u8type);
+
+		type = (EMeanCollisionType)u8type;
+
+		BOOL b_found = FALSE;
+
+		for (mean_collision_list_t::iterator iter = gMeanCollisionList.begin();
+			 iter != gMeanCollisionList.end(); ++iter)
+		{
+			LLMeanCollisionData *mcd = *iter;
+			if ((mcd->mPerp == perp) && (mcd->mType == type))
+			{
+				mcd->mTime = time;
+				mcd->mMag = mag;
+				b_found = TRUE;
+				break;
+			}
+		}
+
+		if (!b_found)
+		{
+			LLMeanCollisionData *mcd = new LLMeanCollisionData(gAgentID, perp, time, type, mag);
+			gMeanCollisionList.push_front(mcd);
+			const BOOL is_group = FALSE;
+			gCacheName->get(perp, is_group, &mean_name_callback);
+		}
+	}
+}
+
+void process_frozen_message(LLMessageSystem *msgsystem, void **user_data)
+{
+	// make sure the cursor is back to the usual default since the
+	// alert is probably due to some kind of error.
+	gViewerWindow->getWindow()->resetBusyCount();
+	BOOL b_frozen;
+	
+	msgsystem->getBOOL("FrozenData", "Data", b_frozen);
+
+	// TODO: make being frozen change view
+	if (b_frozen)
+	{
+	}
+	else
+	{
+	}
+}
+
+// do some extra stuff once we get our economy data
+void process_economy_data(LLMessageSystem *msg, void** /*user_data*/)
+{
+	LLGlobalEconomy::processEconomyData(msg, LLGlobalEconomy::Singleton::getInstance());
+
+	S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
+
+	LL_INFOS_ONCE("Messaging") << "EconomyData message arrived; upload cost is L$" << upload_cost << LL_ENDL;
+
+	gMenuHolder->childSetLabelArg("Upload Image", "[COST]", llformat("%d", upload_cost));
+	gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", llformat("%d", upload_cost));
+	gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", llformat("%d", upload_cost));
+	gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", llformat("%d", upload_cost));
+}
+
+void notify_cautioned_script_question(const LLSD& notification, const LLSD& response, S32 orig_questions, BOOL granted)
+{
+	// only continue if at least some permissions were requested
+	if (orig_questions)
+	{
+		// check to see if the person we are asking
+
+		// "'[OBJECTNAME]', an object owned by '[OWNERNAME]', 
+		// located in [REGIONNAME] at [REGIONPOS], 
+		// has been <granted|denied> permission to: [PERMISSIONS]."
+
+		LLUIString notice(LLTrans::getString(granted ? "ScriptQuestionCautionChatGranted" : "ScriptQuestionCautionChatDenied"));
+
+		// always include the object name and owner name 
+		notice.setArg("[OBJECTNAME]", notification["payload"]["object_name"].asString());
+		notice.setArg("[OWNERNAME]", notification["payload"]["owner_name"].asString());
+
+		// try to lookup viewerobject that corresponds to the object that
+		// requested permissions (here, taskid->requesting object id)
+		BOOL foundpos = FALSE;
+		LLViewerObject* viewobj = gObjectList.findObject(notification["payload"]["task_id"].asUUID());
+		if (viewobj)
+		{
+			// found the viewerobject, get it's position in its region
+			LLVector3 objpos(viewobj->getPosition());
+			
+			// try to lookup the name of the region the object is in
+			LLViewerRegion* viewregion = viewobj->getRegion();
+			if (viewregion)
+			{
+				// got the region, so include the region and 3d coordinates of the object
+				notice.setArg("[REGIONNAME]", viewregion->getName());				
+				std::string formatpos = llformat("%.1f, %.1f,%.1f", objpos[VX], objpos[VY], objpos[VZ]);
+				notice.setArg("[REGIONPOS]", formatpos);
+
+				foundpos = TRUE;
+			}
+		}
+
+		if (!foundpos)
+		{
+			// unable to determine location of the object
+			notice.setArg("[REGIONNAME]", "(unknown region)");
+			notice.setArg("[REGIONPOS]", "(unknown position)");
+		}
+
+		// check each permission that was requested, and list each 
+		// permission that has been flagged as a caution permission
+		BOOL caution = FALSE;
+		S32 count = 0;
+		std::string perms;
+		for (S32 i = 0; i < SCRIPT_PERMISSION_EOF; i++)
+		{
+			if ((orig_questions & LSCRIPTRunTimePermissionBits[i]) && SCRIPT_QUESTION_IS_CAUTION[i])
+			{
+				count++;
+				caution = TRUE;
+
+				// add a comma before the permission description if it is not the first permission
+				// added to the list or the last permission to check
+				if ((count > 1) && (i < SCRIPT_PERMISSION_EOF))
+				{
+					perms.append(", ");
+				}
+
+				perms.append(LLTrans::getString(SCRIPT_QUESTIONS[i]));
+			}
+		}
+
+		notice.setArg("[PERMISSIONS]", perms);
+
+		// log a chat message as long as at least one requested permission
+		// is a caution permission
+		if (caution)
+		{
+			LLChat chat(notice.getString());
+			LLFloaterChat::addChat(chat, FALSE, FALSE);
+		}
+	}
+}
+
+bool script_question_cb(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	LLMessageSystem *msg = gMessageSystem;
+	S32 orig = notification["payload"]["questions"].asInteger();
+	S32 new_questions = orig;
+
+	// check whether permissions were granted or denied
+	BOOL allowed = TRUE;
+	// the "yes/accept" button is the first button in the template, making it button 0
+	// if any other button was clicked, the permissions were denied
+	if (option != 0)
+	{
+		new_questions = 0;
+		allowed = FALSE;
+	}	
+
+	LLUUID task_id = notification["payload"]["task_id"].asUUID();
+	LLUUID item_id = notification["payload"]["item_id"].asUUID();
+
+	// reply with the permissions granted or denied
+	msg->newMessageFast(_PREHASH_ScriptAnswerYes);
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+	msg->nextBlockFast(_PREHASH_Data);
+	msg->addUUIDFast(_PREHASH_TaskID, task_id);
+	msg->addUUIDFast(_PREHASH_ItemID, item_id);
+	msg->addS32Fast(_PREHASH_Questions, new_questions);
+	msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
+
+	// only log a chat message if caution prompts are enabled
+	if (gSavedSettings.getBOOL("PermissionsCautionEnabled"))
+	{
+		// log a chat message, if appropriate
+		notify_cautioned_script_question(notification, response, orig, allowed);
+	}
+
+	if ( response["Mute"] ) // mute
+	{
+		LLMuteList::getInstance()->add(LLMute(item_id, notification["payload"]["object_name"].asString(), LLMute::OBJECT));
+
+		// purge the message queue of any previously queued requests from the same source. DEV-4879
+		class OfferMatcher : public LLNotifyBoxView::Matcher
+		{
+		public:
+			OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
+			BOOL matches(const LLNotificationPtr notification) const
+			{
+				if (notification->getName() == "ScriptQuestionCaution"
+					|| notification->getName() == "ScriptQuestion")
+				{
+					return (notification->getPayload()["item_id"].asUUID() == blocked_id);
+				}
+				return FALSE;
+			}
+		private:
+			const LLUUID& blocked_id;
+		};
+		// should do this via the channel
+		gNotifyBoxView->purgeMessagesMatching(OfferMatcher(item_id));
+	}
+
+	if (response["Details"])
+	{
+		// respawn notification...
+		LLNotifications::instance().add(notification["name"], notification["substitutions"], notification["payload"]);
+
+		// ...with description on top
+		LLNotifications::instance().add("DebitPermissionDetails");
+	}
+	return false;
+}
+static LLNotificationFunctorRegistration script_question_cb_reg_1("ScriptQuestion", script_question_cb);
+static LLNotificationFunctorRegistration script_question_cb_reg_2("ScriptQuestionCaution", script_question_cb);
+
+void process_script_question(LLMessageSystem *msg, void **user_data)
+{
+	// *TODO: Translate owner name -> [FIRST] [LAST]
+
+	LLHost sender = msg->getSender();
+
+	LLUUID taskid;
+	LLUUID itemid;
+	S32		questions;
+	std::string object_name;
+	std::string owner_name;
+
+	// taskid -> object key of object requesting permissions
+	msg->getUUIDFast(_PREHASH_Data, _PREHASH_TaskID, taskid );
+	// itemid -> script asset key of script requesting permissions
+	msg->getUUIDFast(_PREHASH_Data, _PREHASH_ItemID, itemid );
+	msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectName, object_name);
+	msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectOwner, owner_name);
+	msg->getS32Fast(_PREHASH_Data, _PREHASH_Questions, questions );
+
+	// Special case. If the objects are owned by this agent, throttle per-object instead
+	// of per-owner. It's common for residents to reset a ton of scripts that re-request
+	// permissions, as with tier boxes. UUIDs can't be valid agent names and vice-versa,
+	// so we'll reuse the same namespace for both throttle types.
+	std::string throttle_name = owner_name;
+	std::string self_name;
+	LLAgentUI::buildName( self_name );
+	if( owner_name == self_name )
+	{
+		throttle_name = taskid.getString();
+	}
+	
+	// don't display permission requests if this object is muted
+	if (LLMuteList::getInstance()->isMuted(taskid)) return;
+	
+	// throttle excessive requests from any specific user's scripts
+	typedef LLKeyThrottle<std::string> LLStringThrottle;
+	static LLStringThrottle question_throttle( LLREQUEST_PERMISSION_THROTTLE_LIMIT, LLREQUEST_PERMISSION_THROTTLE_INTERVAL );
+
+	switch (question_throttle.noteAction(throttle_name))
+	{
+		case LLStringThrottle::THROTTLE_NEWLY_BLOCKED:
+			LL_INFOS("Messaging") << "process_script_question throttled"
+					<< " owner_name:" << owner_name
+					<< LL_ENDL;
+			// Fall through
+
+		case LLStringThrottle::THROTTLE_BLOCKED:
+			// Escape altogether until we recover
+			return;
+
+		case LLStringThrottle::THROTTLE_OK:
+			break;
+	}
+
+	std::string script_question;
+	if (questions)
+	{
+		BOOL caution = FALSE;
+		S32 count = 0;
+		LLSD args;
+		args["OBJECTNAME"] = object_name;
+		args["NAME"] = owner_name;
+
+		// check the received permission flags against each permission
+		for (S32 i = 0; i < SCRIPT_PERMISSION_EOF; i++)
+		{
+			if (questions & LSCRIPTRunTimePermissionBits[i])
+			{
+				count++;
+				script_question += "    " + LLTrans::getString(SCRIPT_QUESTIONS[i]) + "\n";
+
+				// check whether permission question should cause special caution dialog
+				caution |= (SCRIPT_QUESTION_IS_CAUTION[i]);
+			}
+		}
+		args["QUESTIONS"] = script_question;
+
+		LLSD payload;
+		payload["task_id"] = taskid;
+		payload["item_id"] = itemid;
+		payload["sender"] = sender.getIPandPort();
+		payload["questions"] = questions;
+		payload["object_name"] = object_name;
+		payload["owner_name"] = owner_name;
+
+		// check whether cautions are even enabled or not
+		if (gSavedSettings.getBOOL("PermissionsCautionEnabled"))
+		{
+			// display the caution permissions prompt
+			LLNotifications::instance().add(caution ? "ScriptQuestionCaution" : "ScriptQuestion", args, payload);
+		}
+		else
+		{
+			// fall back to default behavior if cautions are entirely disabled
+			LLNotifications::instance().add("ScriptQuestion", args, payload);
+		}
+
+	}
+}
+
+
+void process_derez_container(LLMessageSystem *msg, void**)
+{
+	LL_WARNS("Messaging") << "call to deprecated process_derez_container" << LL_ENDL;
+}
+
+void container_inventory_arrived(LLViewerObject* object,
+								 InventoryObjectList* inventory,
+								 S32 serial_num,
+								 void* data)
+{
+	LL_DEBUGS("Messaging") << "container_inventory_arrived()" << LL_ENDL;
+	if( gAgent.cameraMouselook() )
+	{
+		gAgent.changeCameraToDefault();
+	}
+
+	LLFloaterInventory* view = LLFloaterInventory::getActiveInventory();
+
+	if (inventory->size() > 2)
+	{
+		// create a new inventory category to put this in
+		LLUUID cat_id;
+		cat_id = gInventory.createNewCategory(gInventory.getRootFolderID(),
+											  LLAssetType::AT_NONE,
+											  LLTrans::getString("AcquiredItems"));
+
+		InventoryObjectList::const_iterator it = inventory->begin();
+		InventoryObjectList::const_iterator end = inventory->end();
+		for ( ; it != end; ++it)
+		{
+			if ((*it)->getType() != LLAssetType::AT_CATEGORY &&
+				(*it)->getType() != LLAssetType::AT_ROOT_CATEGORY)
+			{
+				LLInventoryObject* obj = (LLInventoryObject*)(*it);
+				LLInventoryItem* item = (LLInventoryItem*)(obj);
+				LLUUID item_id;
+				item_id.generate();
+				time_t creation_date_utc = time_corrected();
+				LLPointer<LLViewerInventoryItem> new_item
+					= new LLViewerInventoryItem(item_id,
+												cat_id,
+												item->getPermissions(),
+												item->getAssetUUID(),
+												item->getType(),
+												item->getInventoryType(),
+												item->getName(),
+												item->getDescription(),
+												LLSaleInfo::DEFAULT,
+												item->getFlags(),
+												creation_date_utc);
+				new_item->updateServer(TRUE);
+				gInventory.updateItem(new_item);
+			}
+		}
+		gInventory.notifyObservers();
+		if(view)
+		{
+			view->getPanel()->setSelection(cat_id, TAKE_FOCUS_NO);
+		}
+	}
+	else if (inventory->size() == 2)
+	{
+		// we're going to get one fake root category as well as the
+		// one actual object
+		InventoryObjectList::iterator it = inventory->begin();
+
+		if ((*it)->getType() == LLAssetType::AT_CATEGORY ||
+			(*it)->getType() == LLAssetType::AT_ROOT_CATEGORY)
+		{
+			++it;
+		}
+
+		LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
+		LLUUID category = gInventory.findCategoryUUIDForType(item->getType());
+
+		LLUUID item_id;
+		item_id.generate();
+		time_t creation_date_utc = time_corrected();
+		LLPointer<LLViewerInventoryItem> new_item
+			= new LLViewerInventoryItem(item_id, category,
+										item->getPermissions(),
+										item->getAssetUUID(),
+										item->getType(),
+										item->getInventoryType(),
+										item->getName(),
+										item->getDescription(),
+										LLSaleInfo::DEFAULT,
+										item->getFlags(),
+										creation_date_utc);
+		new_item->updateServer(TRUE);
+		gInventory.updateItem(new_item);
+		gInventory.notifyObservers();
+		if(view)
+		{
+			view->getPanel()->setSelection(item_id, TAKE_FOCUS_NO);
+		}
+	}
+
+	// we've got the inventory, now delete this object if this was a take
+	BOOL delete_object = (BOOL)(intptr_t)data;
+	LLViewerRegion *region = gAgent.getRegion();
+	if (delete_object && region)
+	{
+		gMessageSystem->newMessageFast(_PREHASH_ObjectDelete);
+		gMessageSystem->nextBlockFast(_PREHASH_AgentData);
+		gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		const U8 NO_FORCE = 0;
+		gMessageSystem->addU8Fast(_PREHASH_Force, NO_FORCE);
+		gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
+		gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID());
+		gMessageSystem->sendReliable(region->getHost());
+	}
+}
+
+// method to format the time.
+std::string formatted_time(const time_t& the_time)
+{
+	std::string dateStr = "["+LLTrans::getString("LTimeWeek")+"] ["
+						+LLTrans::getString("LTimeMonth")+"] ["
+						+LLTrans::getString("LTimeDay")+"] ["
+						+LLTrans::getString("LTimeHour")+"]:["
+						+LLTrans::getString("LTimeMin")+"]:["
+						+LLTrans::getString("LTimeSec")+"] ["
+						+LLTrans::getString("LTimeYear")+"]";
+
+	LLSD substitution;
+	substitution["datetime"] = (S32) the_time;
+	LLStringUtil::format (dateStr, substitution);
+	return dateStr;
+}
+
+
+void process_teleport_failed(LLMessageSystem *msg, void**)
+{
+	std::string reason;
+	std::string big_reason;
+	LLSD args;
+
+	// if we have additional alert data
+	if (msg->has(_PREHASH_AlertInfo) && msg->getSizeFast(_PREHASH_AlertInfo, _PREHASH_Message) > 0)
+	{
+		// Get the message ID
+		msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, reason);
+		big_reason = LLAgent::sTeleportErrorMessages[reason];
+		if ( big_reason.size() > 0 )
+		{	// Substitute verbose reason from the local map
+			args["REASON"] = big_reason;
+		}
+		else
+		{	// Nothing found in the map - use what the server returned in the original message block
+			msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason);
+			args["REASON"] = reason;
+		}
+
+		LLSD llsd_block;
+		std::string llsd_raw;
+		msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_ExtraParams, llsd_raw);
+		if (llsd_raw.length())
+		{
+			std::istringstream llsd_data(llsd_raw);
+			if (!LLSDSerialize::deserialize(llsd_block, llsd_data, llsd_raw.length()))
+			{
+				llwarns << "process_teleport_failed: Attempted to read alert parameter data into LLSD but failed:" << llsd_raw << llendl;
+			}
+			else
+			{
+				// change notification name in this special case
+				if (handle_special_notification("RegionEntryAccessBlocked", llsd_block))
+				{
+					if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
+					{
+						gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
+					}
+					return;
+				}
+			}
+		}
+
+	}
+	else
+	{
+		msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason);
+
+		big_reason = LLAgent::sTeleportErrorMessages[reason];
+		if ( big_reason.size() > 0 )
+		{	// Substitute verbose reason from the local map
+			args["REASON"] = big_reason;
+		}
+		else
+		{	// Nothing found in the map - use what the server returned
+			args["REASON"] = reason;
+		}
+	}
+
+	LLNotifications::instance().add("CouldNotTeleportReason", args);
+
+	// Let the interested parties know that teleport failed.
+	LLViewerParcelMgr::getInstance()->onTeleportFailed();
+
+	if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
+	{
+		gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
+	}
+}
+
+void process_teleport_local(LLMessageSystem *msg,void**)
+{
+	LLUUID agent_id;
+	msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id);
+	if (agent_id != gAgent.getID())
+	{
+		LL_WARNS("Messaging") << "Got teleport notification for wrong agent!" << LL_ENDL;
+		return;
+	}
+
+	U32 location_id;
+	LLVector3 pos, look_at;
+	U32 teleport_flags;
+	msg->getU32Fast(_PREHASH_Info, _PREHASH_LocationID, location_id);
+	msg->getVector3Fast(_PREHASH_Info, _PREHASH_Position, pos);
+	msg->getVector3Fast(_PREHASH_Info, _PREHASH_LookAt, look_at);
+	msg->getU32Fast(_PREHASH_Info, _PREHASH_TeleportFlags, teleport_flags);
+
+	if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
+	{
+		gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
+	}
+
+	// Sim tells us whether the new position is off the ground
+	if (teleport_flags & TELEPORT_FLAGS_IS_FLYING)
+	{
+		gAgent.setFlying(TRUE);
+	}
+	else
+	{
+		gAgent.setFlying(FALSE);
+	}
+
+	gAgent.setPositionAgent(pos);
+	gAgent.slamLookAt(look_at);
+
+	// likewise make sure the camera is behind the avatar
+	gAgent.resetView(TRUE, TRUE);
+
+	// send camera update to new region
+	gAgent.updateCamera();
+
+	send_agent_update(TRUE, TRUE);
+
+	// Let the interested parties know we've teleported.
+	// Vadim *HACK: Agent position seems to get reset (to render position?)
+	//              on each frame, so we have to pass the new position manually.
+	LLViewerParcelMgr::getInstance()->onTeleportFinished(true, gAgent.getPosGlobalFromAgent(pos));
+}
+
+void send_simple_im(const LLUUID& to_id,
+					const std::string& message,
+					EInstantMessage dialog,
+					const LLUUID& id)
+{
+	std::string my_name;
+	LLAgentUI::buildFullname(my_name);
+	send_improved_im(to_id,
+					 my_name,
+					 message,
+					 IM_ONLINE,
+					 dialog,
+					 id,
+					 NO_TIMESTAMP,
+					 (U8*)EMPTY_BINARY_BUCKET,
+					 EMPTY_BINARY_BUCKET_SIZE);
+}
+
+void send_group_notice(const LLUUID& group_id,
+					   const std::string& subject,
+					   const std::string& message,
+					   const LLInventoryItem* item)
+{
+	// Put this notice into an instant message form.
+	// This will mean converting the item to a binary bucket,
+	// and the subject/message into a single field.
+	std::string my_name;
+	LLAgentUI::buildFullname(my_name);
+
+	// Combine subject + message into a single string.
+	std::ostringstream subject_and_message;
+	// TODO: turn all existing |'s into ||'s in subject and message.
+	subject_and_message << subject << "|" << message;
+
+	// Create an empty binary bucket.
+	U8 bin_bucket[MAX_INVENTORY_BUFFER_SIZE];
+	U8* bucket_to_send = bin_bucket;
+	bin_bucket[0] = '\0';
+	S32 bin_bucket_size = EMPTY_BINARY_BUCKET_SIZE;
+	// If there is an item being sent, pack it into the binary bucket.
+	if (item)
+	{
+		LLSD item_def;
+		item_def["item_id"] = item->getUUID();
+		item_def["owner_id"] = item->getPermissions().getOwner();
+		std::ostringstream ostr;
+		LLSDSerialize::serialize(item_def, ostr, LLSDSerialize::LLSD_XML);
+		bin_bucket_size = ostr.str().copy(
+			(char*)bin_bucket, ostr.str().size());
+		bin_bucket[bin_bucket_size] = '\0';
+	}
+	else
+	{
+		bucket_to_send = (U8*) EMPTY_BINARY_BUCKET;
+	}
+   
+
+	send_improved_im(
+			group_id,
+			my_name,
+			subject_and_message.str(),
+			IM_ONLINE,
+			IM_GROUP_NOTICE,
+			LLUUID::null,
+			NO_TIMESTAMP,
+			bucket_to_send,
+			bin_bucket_size);
+}
+
+bool handle_lure_callback(const LLSD& notification, const LLSD& response)
+{
+	std::string text = response["message"].asString();
+	S32 option = LLNotification::getSelectedOption(notification, response);
+
+	if(0 == option)
+	{
+		LLMessageSystem* msg = gMessageSystem;
+		msg->newMessageFast(_PREHASH_StartLure);
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		msg->nextBlockFast(_PREHASH_Info);
+		msg->addU8Fast(_PREHASH_LureType, (U8)0); // sim will fill this in.
+		msg->addStringFast(_PREHASH_Message, text);
+		for(LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray();
+			it != notification["payload"]["ids"].endArray();
+			++it)
+		{
+			msg->nextBlockFast(_PREHASH_TargetData);
+			msg->addUUIDFast(_PREHASH_TargetID, it->asUUID());
+		}
+		gAgent.sendReliableMessage();
+	}
+
+	return false;
+}
+
+void handle_lure(const LLUUID& invitee)
+{
+	LLDynamicArray<LLUUID> ids;
+	ids.push_back(invitee);
+	handle_lure(ids);
+}
+
+// Prompt for a message to the invited user.
+void handle_lure(const std::vector<LLUUID>& ids)
+{
+	LLSD edit_args;
+	edit_args["REGION"] = gAgent.getRegion()->getName();
+
+	LLSD payload;
+	for (LLDynamicArray<LLUUID>::const_iterator it = ids.begin();
+		it != ids.end();
+		++it)
+	{
+		payload["ids"].append(*it);
+	}
+	if (gAgent.isGodlike())
+	{
+		LLNotifications::instance().add("OfferTeleportFromGod", edit_args, payload, handle_lure_callback);
+	}
+	else
+	{
+		LLNotifications::instance().add("OfferTeleport", edit_args, payload, handle_lure_callback);
+	}
+}
+
+
+void send_improved_im(const LLUUID& to_id,
+							const std::string& name,
+							const std::string& message,
+							U8 offline,
+							EInstantMessage dialog,
+							const LLUUID& id,
+							U32 timestamp, 
+							const U8* binary_bucket,
+							S32 binary_bucket_size)
+{
+	pack_instant_message(
+		gMessageSystem,
+		gAgent.getID(),
+		FALSE,
+		gAgent.getSessionID(),
+		to_id,
+		name,
+		message,
+		offline,
+		dialog,
+		id,
+		0,
+		LLUUID::null,
+		gAgent.getPositionAgent(),
+		timestamp,
+		binary_bucket,
+		binary_bucket_size);
+	gAgent.sendReliableMessage();
+}
+
+
+void send_places_query(const LLUUID& query_id,
+					   const LLUUID& trans_id,
+					   const std::string& query_text,
+					   U32 query_flags,
+					   S32 category,
+					   const std::string& sim_name)
+{
+	LLMessageSystem* msg = gMessageSystem;
+
+	msg->newMessage("PlacesQuery");
+	msg->nextBlock("AgentData");
+	msg->addUUID("AgentID", gAgent.getID());
+	msg->addUUID("SessionID", gAgent.getSessionID());
+	msg->addUUID("QueryID", query_id);
+	msg->nextBlock("TransactionData");
+	msg->addUUID("TransactionID", trans_id);
+	msg->nextBlock("QueryData");
+	msg->addString("QueryText", query_text);
+	msg->addU32("QueryFlags", query_flags);
+	msg->addS8("Category", (S8)category);
+	msg->addString("SimName", sim_name);
+	gAgent.sendReliableMessage();
+}
+
+
+void process_user_info_reply(LLMessageSystem* msg, void**)
+{
+	LLUUID agent_id;
+	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
+	if(agent_id != gAgent.getID())
+	{
+		LL_WARNS("Messaging") << "process_user_info_reply - "
+				<< "wrong agent id." << LL_ENDL;
+	}
+	
+	BOOL im_via_email;
+	msg->getBOOLFast(_PREHASH_UserData, _PREHASH_IMViaEMail, im_via_email);
+	std::string email;
+	msg->getStringFast(_PREHASH_UserData, _PREHASH_EMail, email);
+	std::string dir_visibility;
+	msg->getString( "UserData", "DirectoryVisibility", dir_visibility);
+
+	LLFloaterPreference::updateUserInfo(dir_visibility, im_via_email, email);
+	LLFloaterPostcard::updateUserInfo(email);
+}
+
+
+//---------------------------------------------------------------------------
+// Script Dialog
+//---------------------------------------------------------------------------
+
+const S32 SCRIPT_DIALOG_MAX_BUTTONS = 12;
+const S32 SCRIPT_DIALOG_BUTTON_STR_SIZE = 24;
+const S32 SCRIPT_DIALOG_MAX_MESSAGE_SIZE = 512;
+const char* SCRIPT_DIALOG_HEADER = "Script Dialog:\n";
+
+bool callback_script_dialog(const LLSD& notification, const LLSD& response)
+{
+	LLNotificationForm form(notification["form"]);
+	std::string button = LLNotification::getSelectedOptionName(response);
+	S32 button_idx = LLNotification::getSelectedOption(notification, response);
+	// Didn't click "Ignore"
+	if (button_idx != -1)
+	{
+		LLMessageSystem* msg = gMessageSystem;
+		msg->newMessage("ScriptDialogReply");
+		msg->nextBlock("AgentData");
+		msg->addUUID("AgentID", gAgent.getID());
+		msg->addUUID("SessionID", gAgent.getSessionID());
+		msg->nextBlock("Data");
+		msg->addUUID("ObjectID", notification["payload"]["object_id"].asUUID());
+		msg->addS32("ChatChannel", notification["payload"]["chat_channel"].asInteger());
+		msg->addS32("ButtonIndex", button_idx);
+		msg->addString("ButtonLabel", button);
+		msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
+	}
+
+	return false;
+}
+static LLNotificationFunctorRegistration callback_script_dialog_reg_1("ScriptDialog", callback_script_dialog);
+static LLNotificationFunctorRegistration callback_script_dialog_reg_2("ScriptDialogGroup", callback_script_dialog);
+
+void process_script_dialog(LLMessageSystem* msg, void**)
+{
+	S32 i;
+	LLSD payload;
+
+	LLUUID object_id;
+	msg->getUUID("Data", "ObjectID", object_id);
+
+	if (LLMuteList::getInstance()->isMuted(object_id))
+	{
+		return;
+	}
+
+	std::string message; 
+	std::string first_name;
+	std::string last_name;
+	std::string title;
+
+	S32 chat_channel;
+	msg->getString("Data", "FirstName", first_name);
+	msg->getString("Data", "LastName", last_name);
+	msg->getString("Data", "ObjectName", title);
+	msg->getString("Data", "Message", message);
+	msg->getS32("Data", "ChatChannel", chat_channel);
+
+		// unused for now
+	LLUUID image_id;
+	msg->getUUID("Data", "ImageID", image_id);
+
+	payload["sender"] = msg->getSender().getIPandPort();
+	payload["object_id"] = object_id;
+	payload["chat_channel"] = chat_channel;
+
+	// build up custom form
+	S32 button_count = msg->getNumberOfBlocks("Buttons");
+	if (button_count > SCRIPT_DIALOG_MAX_BUTTONS)
+	{
+		llwarns << "Too many script dialog buttons - omitting some" << llendl;
+		button_count = SCRIPT_DIALOG_MAX_BUTTONS;
+	}
+
+	LLNotificationForm form;
+	for (i = 0; i < button_count; i++)
+	{
+		std::string tdesc;
+		msg->getString("Buttons", "ButtonLabel", tdesc, i);
+		form.addElement("button", std::string(tdesc));
+	}
+
+	LLSD args;
+	args["TITLE"] = title;
+	args["MESSAGE"] = message;
+	LLNotificationPtr notification;
+	if (!first_name.empty())
+	{
+		args["FIRST"] = first_name;
+		args["LAST"] = last_name;
+		notification = LLNotifications::instance().add(
+			LLNotification::Params("ScriptDialog").substitutions(args).payload(payload).form_elements(form.asLLSD()));
+	}
+	else
+	{
+		args["GROUPNAME"] = last_name;
+		notification = LLNotifications::instance().add(
+			LLNotification::Params("ScriptDialogGroup").substitutions(args).payload(payload).form_elements(form.asLLSD()));
+	}
+}
+
+//---------------------------------------------------------------------------
+
+
+std::vector<LLSD> gLoadUrlList;
+
+bool callback_load_url(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+
+	if (0 == option)
+	{
+		LLWeb::loadURL(notification["payload"]["url"].asString());
+	}
+
+	return false;
+}
+static LLNotificationFunctorRegistration callback_load_url_reg("LoadWebPage", callback_load_url);
+
+
+// We've got the name of the person who owns the object hurling the url.
+// Display confirmation dialog.
+void callback_load_url_name(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)
+{
+	std::vector<LLSD>::iterator it;
+	for (it = gLoadUrlList.begin(); it != gLoadUrlList.end(); )
+	{
+		LLSD load_url_info = *it;
+		if (load_url_info["owner_id"].asUUID() == id)
+		{
+			it = gLoadUrlList.erase(it);
+
+			std::string owner_name;
+			if (is_group)
+			{
+				owner_name = first + LLTrans::getString("Group");
+			}
+			else
+			{
+				owner_name = first + " " + last;
+			}
+
+			// For legacy name-only mutes.
+			if (LLMuteList::getInstance()->isMuted(LLUUID::null, owner_name))
+			{
+				continue;
+			}
+			LLSD args;
+			args["URL"] = load_url_info["url"].asString();
+			args["MESSAGE"] = load_url_info["message"].asString();;
+			args["OBJECTNAME"] = load_url_info["object_name"].asString();
+			args["NAME"] = owner_name;
+
+			LLNotifications::instance().add("LoadWebPage", args, load_url_info);
+		}
+		else
+		{
+			++it;
+		}
+	}
+}
+
+void process_load_url(LLMessageSystem* msg, void**)
+{
+	LLUUID object_id;
+	LLUUID owner_id;
+	BOOL owner_is_group;
+	char object_name[256];		/* Flawfinder: ignore */
+	char message[256];		/* Flawfinder: ignore */
+	char url[256];		/* Flawfinder: ignore */
+
+	msg->getString("Data", "ObjectName", 256, object_name);
+	msg->getUUID(  "Data", "ObjectID", object_id);
+	msg->getUUID(  "Data", "OwnerID", owner_id);
+	msg->getBOOL(  "Data", "OwnerIsGroup", owner_is_group);
+	msg->getString("Data", "Message", 256, message);
+	msg->getString("Data", "URL", 256, url);
+
+	LLSD payload;
+	payload["object_id"] = object_id;
+	payload["owner_id"] = owner_id;
+	payload["owner_is_group"] = owner_is_group;
+	payload["object_name"] = object_name;
+	payload["message"] = message;
+	payload["url"] = url;
+
+	// URL is safety checked in load_url above
+
+	// Check if object or owner is muted
+	if (LLMuteList::getInstance()->isMuted(object_id, object_name) ||
+	    LLMuteList::getInstance()->isMuted(owner_id))
+	{
+		LL_INFOS("Messaging")<<"Ignoring load_url from muted object/owner."<<LL_ENDL;
+		return;
+	}
+
+	// Add to list of pending name lookups
+	gLoadUrlList.push_back(payload);
+
+	gCacheName->get(owner_id, owner_is_group, &callback_load_url_name);
+}
+
+
+void callback_download_complete(void** data, S32 result, LLExtStat ext_status)
+{
+	std::string* filepath = (std::string*)data;
+	LLSD args;
+	args["DOWNLOAD_PATH"] = *filepath;
+	LLNotifications::instance().add("FinishedRawDownload", args);
+	delete filepath;
+}
+
+
+void process_initiate_download(LLMessageSystem* msg, void**)
+{
+	LLUUID agent_id;
+	msg->getUUID("AgentData", "AgentID", agent_id);
+	if (agent_id != gAgent.getID())
+	{
+		LL_WARNS("Messaging") << "Initiate download for wrong agent" << LL_ENDL;
+		return;
+	}
+
+	std::string sim_filename;
+	std::string viewer_filename;
+	msg->getString("FileData", "SimFilename", sim_filename);
+	msg->getString("FileData", "ViewerFilename", viewer_filename);
+
+	if (!gXferManager->validateFileForRequest(viewer_filename))
+	{
+		llwarns << "SECURITY: Unauthorized download to local file " << viewer_filename << llendl;
+		return;
+	}
+	gXferManager->requestFile(viewer_filename,
+		sim_filename,
+		LL_PATH_NONE,
+		msg->getSender(),
+		FALSE,	// don't delete remote
+		callback_download_complete,
+		(void**)new std::string(viewer_filename));
+}
+
+
+void process_script_teleport_request(LLMessageSystem* msg, void**)
+{
+	std::string object_name;
+	std::string sim_name;
+	LLVector3 pos;
+	LLVector3 look_at;
+
+	msg->getString("Data", "ObjectName", object_name);
+	msg->getString("Data", "SimName", sim_name);
+	msg->getVector3("Data", "SimPosition", pos);
+	msg->getVector3("Data", "LookAt", look_at);
+
+	LLFloaterWorldMap* instance = LLFloaterWorldMap::getInstance();
+	if(instance)
+	{
+		instance->trackURL(
+						   sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
+		LLFloaterReg::showInstance("world_map", "center");
+	}
+	
+	// remove above two lines and replace with below line
+	// to re-enable parcel browser for llMapDestination()
+	// LLURLDispatcher::dispatch(LLSLURL::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE);
+	
+}
+
+void process_covenant_reply(LLMessageSystem* msg, void**)
+{
+	LLUUID covenant_id, estate_owner_id;
+	std::string estate_name;
+	U32 covenant_timestamp;
+	msg->getUUID("Data", "CovenantID", covenant_id);
+	msg->getU32("Data", "CovenantTimestamp", covenant_timestamp);
+	msg->getString("Data", "EstateName", estate_name);
+	msg->getUUID("Data", "EstateOwnerID", estate_owner_id);
+
+	LLPanelEstateCovenant::updateEstateName(estate_name);
+	LLPanelLandCovenant::updateEstateName(estate_name);
+	LLFloaterBuyLand::updateEstateName(estate_name);
+
+	std::string owner_name =
+		LLSLURL::buildCommand("agent", estate_owner_id, "inspect");
+	LLPanelEstateCovenant::updateEstateOwnerName(owner_name);
+	LLPanelLandCovenant::updateEstateOwnerName(owner_name);
+	LLFloaterBuyLand::updateEstateOwnerName(owner_name);
+
+	LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info");
+	if (panel)
+	{
+		panel->updateEstateName(estate_name);
+		panel->updateEstateOwnerName(owner_name);
+	}
+
+	// standard message, not from system
+	std::string last_modified;
+	if (covenant_timestamp == 0)
+	{
+		last_modified = LLTrans::getString("covenant_last_modified")+LLTrans::getString("never_text");
+	}
+	else
+	{
+		last_modified = LLTrans::getString("covenant_last_modified")+"["
+						+LLTrans::getString("LTimeWeek")+"] ["
+						+LLTrans::getString("LTimeMonth")+"] ["
+						+LLTrans::getString("LTimeDay")+"] ["
+						+LLTrans::getString("LTimeHour")+"]:["
+						+LLTrans::getString("LTimeMin")+"]:["
+						+LLTrans::getString("LTimeSec")+"] ["
+						+LLTrans::getString("LTimeYear")+"]";
+		LLSD substitution;
+		substitution["datetime"] = (S32) covenant_timestamp;
+		LLStringUtil::format (last_modified, substitution);
+	}
+
+	LLPanelEstateCovenant::updateLastModified(last_modified);
+	LLPanelLandCovenant::updateLastModified(last_modified);
+	LLFloaterBuyLand::updateLastModified(last_modified);
+
+	// load the actual covenant asset data
+	const BOOL high_priority = TRUE;
+	if (covenant_id.notNull())
+	{
+		gAssetStorage->getEstateAsset(gAgent.getRegionHost(),
+									gAgent.getID(),
+									gAgent.getSessionID(),
+									covenant_id,
+                                    LLAssetType::AT_NOTECARD,
+									ET_Covenant,
+                                    onCovenantLoadComplete,
+									NULL,
+									high_priority);
+	}
+	else
+	{
+		std::string covenant_text;
+		if (estate_owner_id.isNull())
+		{
+			// mainland
+			covenant_text = LLTrans::getString("RegionNoCovenant");
+		}
+		else
+		{
+			covenant_text = LLTrans::getString("RegionNoCovenantOtherOwner");
+		}
+		LLPanelEstateCovenant::updateCovenantText(covenant_text, covenant_id);
+		LLPanelLandCovenant::updateCovenantText(covenant_text);
+		LLFloaterBuyLand::updateCovenantText(covenant_text, covenant_id);
+		if (panel)
+		{
+			panel->updateCovenantText(covenant_text);
+		}
+	}
+}
+
+void onCovenantLoadComplete(LLVFS *vfs,
+					const LLUUID& asset_uuid,
+					LLAssetType::EType type,
+					void* user_data, S32 status, LLExtStat ext_status)
+{
+	LL_DEBUGS("Messaging") << "onCovenantLoadComplete()" << LL_ENDL;
+	std::string covenant_text;
+	if(0 == status)
+	{
+		LLVFile file(vfs, asset_uuid, type, LLVFile::READ);
+		
+		S32 file_length = file.getSize();
+		
+		std::vector<char> buffer(file_length+1);
+		file.read((U8*)&buffer[0], file_length);		
+		// put a EOS at the end
+		buffer[file_length] = '\0';
+		
+		if( (file_length > 19) && !strncmp( &buffer[0], "Linden text version", 19 ) )
+		{
+			LLViewerTextEditor::Params params;
+			params.name("temp");
+			params.max_text_length(file_length+1);
+			LLViewerTextEditor * editor = LLUICtrlFactory::create<LLViewerTextEditor> (params);
+			if( !editor->importBuffer( &buffer[0], file_length+1 ) )
+			{
+				LL_WARNS("Messaging") << "Problem importing estate covenant." << LL_ENDL;
+				covenant_text = "Problem importing estate covenant.";
+			}
+			else
+			{
+				// Version 0 (just text, doesn't include version number)
+				covenant_text = editor->getText();
+			}
+			delete editor;
+		}
+		else
+		{
+			LL_WARNS("Messaging") << "Problem importing estate covenant: Covenant file format error." << LL_ENDL;
+			covenant_text = "Problem importing estate covenant: Covenant file format error.";
+		}
+	}
+	else
+	{
+		LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
+		
+		if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
+		    LL_ERR_FILE_EMPTY == status)
+		{
+			covenant_text = "Estate covenant notecard is missing from database.";
+		}
+		else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
+		{
+			covenant_text = "Insufficient permissions to view estate covenant.";
+		}
+		else
+		{
+			covenant_text = "Unable to load estate covenant at this time.";
+		}
+		
+		LL_WARNS("Messaging") << "Problem loading notecard: " << status << LL_ENDL;
+	}
+	LLPanelEstateCovenant::updateCovenantText(covenant_text, asset_uuid);
+	LLPanelLandCovenant::updateCovenantText(covenant_text);
+	LLFloaterBuyLand::updateCovenantText(covenant_text, asset_uuid);
+
+	LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info");
+	if (panel)
+	{
+		panel->updateCovenantText(covenant_text);
+	}
+}
+
+
+void process_feature_disabled_message(LLMessageSystem* msg, void**)
+{
+	// Handle Blacklisted feature simulator response...
+	LLUUID	agentID;
+	LLUUID	transactionID;
+	std::string	messageText;
+	msg->getStringFast(_PREHASH_FailureInfo,_PREHASH_ErrorMessage, messageText,0);
+	msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_AgentID,agentID);
+	msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_TransactionID,transactionID);
+	
+	LL_WARNS("Messaging") << "Blacklisted Feature Response:" << messageText << LL_ENDL;
+}
+
+// ------------------------------------------------------------
+// Message system exception callbacks
+// ------------------------------------------------------------
+
+void invalid_message_callback(LLMessageSystem* msg,
+								   void*,
+								   EMessageException exception)
+{
+    LLAppViewer::instance()->badNetworkHandler();
+}
+
+// Please do not add more message handlers here. This file is huge.
+// Put them in a file related to the functionality you are implementing.
+
+void LLOfferInfo::forceResponse(InventoryOfferResponse response)
+{
+	LLNotification::Params params("UserGiveItem");
+	params.functor.function(boost::bind(&LLOfferInfo::inventory_offer_callback, this, _1, _2));
+	LLNotifications::instance().forceResponse(params, response);
+}
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index d3366cdcaa5..7f9d09a7d65 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -7,7 +7,7 @@
   <texture name="Accordion_Off" file_name="containers/Accordion_Off.png" preload="false" />
   <texture name="Accordion_Press" file_name="containers/Accordion_Press.png" preload="false" />
 
- <texture name="Activate_Checkmark" file_name="taskpanel/Activate_Checkmark.png" preload="false" />
+<texture name="Activate_Checkmark" file_name="taskpanel/Activate_Checkmark.png" preload="false" />
 
   <texture name="AddItem_Disabled" file_name="icons/AddItem_Disabled.png" preload="false" />
   <texture name="AddItem_Off" file_name="icons/AddItem_Off.png" preload="false" />
@@ -394,6 +394,10 @@
   <texture name="TabIcon_Home_Off" file_name="taskpanel/TabIcon_Home_Off.png" preload="false" />
   <texture name="TabIcon_Home_Over" file_name="taskpanel/TabIcon_Home_Over.png" preload="false" />
   <texture name="TabIcon_Home_Selected" file_name="taskpanel/TabIcon_Home_Selected.png" preload="false" />
+  <texture name="TabIcon_Inventory_Large" file_name="taskpanel/TabIcon_Inventory_Large.png" preload="false" />
+  <texture name="TabIcon_Inventory_Off" file_name="taskpanel/TabIcon_Inventory_Off.png" preload="false" />
+  <texture name="TabIcon_Inventory_Over" file_name="taskpanel/TabIcon_Inventory_Over.png" preload="false" />
+  <texture name="TabIcon_Inventory_Selected" file_name="taskpanel/TabIcon_Inventory_Selected.png" preload="false" />
   <texture name="TabIcon_Me_Large" file_name="taskpanel/TabIcon_Me_Large.png" preload="false" />
   <texture name="TabIcon_Me_Off" file_name="taskpanel/TabIcon_Me_Off.png" preload="false" />
   <texture name="TabIcon_Me_Over" file_name="taskpanel/TabIcon_Me_Over.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml
index 0f06558dd1f..ace296b4392 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory.xml
@@ -13,419 +13,24 @@
  single_instance="true"
  title="Inventory"
  width="467">
-    <floater.string
-     name="Title">
-        Inventory
-    </floater.string>
     <floater.string
      name="TitleFetching">
-        Inventory (Fetching [ITEM_COUNT] Items...) [FILTER]
+        Things (Fetching [ITEM_COUNT] Items...) [FILTER]
     </floater.string>
     <floater.string
      name="TitleCompleted">
-        Inventory ([ITEM_COUNT] Items) [FILTER]
-    </floater.string>
-    <floater.string
-     name="Fetched">
-        Fetched
+        Things ([ITEM_COUNT] Items) [FILTER]
     </floater.string>
-    <filter_editor
-     search_button_visible="false"
-     text_pad_left="12"
-     follows="left|top|right"
-     height="16"
-     label="Type here to search"
-     layout="topleft"
-     left="6"
-     name="inventory search editor"
-     top="34"
-     width="455" />
-    <tab_container
-     follows="left|top|right|bottom"
-     height="508"
-     layout="topleft"
-     left_delta="-4"
-     name="inventory filter tabs"
-     tab_position="top"
-     top_pad="4"
-     width="463">
-        <inventory_panel
-         follows="left|top|right|bottom"
-         height="491"
-         label="All Items"
-         layout="topleft"
-         left="1"
-         name="All Items"
-         top="16"
-         width="461" />
-        <inventory_panel
-         follows="left|top|right|bottom"
-         height="491"
-         label="Recent Items"
-         layout="topleft"
-         left_delta="0"
-         name="Recent Items"
-         top_delta="0"
-         width="461" />
-    </tab_container>
-    <menu_bar
-     bg_visible="false"
-     follows="left|top|right"
-     height="18"
-     layout="topleft"
-     left_delta="0"
-     mouse_opaque="false"
-     name="Inventory Menu"
-     top_delta="-38"
-     width="461">
-        <menu
-         height="101"
-         label="File"
-         layout="topleft"
-         left="0"
-         mouse_opaque="false"
-         name="File"
-         tear_off="true"
-         top="-117"
-         width="128">
-            <menu_item_call
-             label="Open"
-             layout="topleft"
-             name="Open">
-                <menu_item_call.on_click
-                 function="Inventory.DoToSelected"
-                 parameter="open" />
-            </menu_item_call>
-            <menu
-             create_jump_keys="true"
-             label="Upload"
-             layout="topleft"
-             name="upload"
-             tear_off="true">
-                <menu_item_call
-                 label="Image (L$[COST])..."
-                 layout="topleft"
-                 name="Upload Image"
-                 shortcut="control|U">
-                    <menu_item_call.on_click
-                     function="File.UploadImage"
-                     parameter="" />
-                    <menu_item_call.on_enable
-                     function="File.EnableUpload" />
-                </menu_item_call>
-                <menu_item_call
-                 label="Sound (L$[COST])..."
-                 layout="topleft"
-                 name="Upload Sound">
-                    <menu_item_call.on_click
-                     function="File.UploadSound"
-                     parameter="" />
-                    <menu_item_call.on_enable
-                     function="File.EnableUpload" />
-                </menu_item_call>
-                <menu_item_call
-                 label="Animation (L$[COST])..."
-                 layout="topleft"
-                 name="Upload Animation">
-                    <menu_item_call.on_click
-                     function="File.UploadAnim"
-                     parameter="" />
-                    <menu_item_call.on_enable
-                     function="File.EnableUpload" />
-                </menu_item_call>
-                <menu_item_call
-                 label="Bulk (L$[COST] per file)..."
-                 layout="topleft"
-                 name="Bulk Upload">
-                    <menu_item_call.on_click
-                     function="File.UploadBulk"
-                     parameter="" />
-                </menu_item_call>
-                <menu_item_separator
-                 layout="topleft" />
-            </menu>
-            <menu_item_separator
-             layout="topleft" />
-            <menu_item_call
-             label="New Window"
-             layout="topleft"
-             name="New Window">
-                <menu_item_call.on_click
-                 function="Inventory.NewWindow" />
-            </menu_item_call>
-            <menu_item_separator
-             layout="topleft"
-             name="separator2" />
-            <menu_item_call
-             label="Show Filters"
-             layout="topleft"
-             name="Show Filters">
-                <menu_item_call.on_click
-                 function="Inventory.ShowFilters" />
-            </menu_item_call>
-            <menu_item_call
-             label="Reset Filters"
-             layout="topleft"
-             name="Reset Current">
-                <menu_item_call.on_click
-                 function="Inventory.ResetFilter" />
-            </menu_item_call>
-            <menu_item_call
-             label="Close All Folders"
-             layout="topleft"
-             name="Close All Folders">
-                <menu_item_call.on_click
-                 function="Inventory.CloseAllFolders" />
-            </menu_item_call>
-            <menu_item_separator
-             layout="topleft"
-             name="separator3" />
-            <menu_item_call
-             label="Empty Trash"
-             layout="topleft"
-             name="Empty Trash">
-                <menu_item_call.on_click
-                 function="Inventory.EmptyTrash" />
-            </menu_item_call>
-            <menu_item_call
-             label="Empty Lost And Found"
-             layout="topleft"
-             name="Empty Lost And Found">
-                <menu_item_call.on_click
-                 function="Inventory.EmptyLostAndFound" />
-            </menu_item_call>
-        </menu>
-        <menu
-         height="121"
-         label="Create"
-         layout="topleft"
-         left="0"
-         mouse_opaque="false"
-         name="Create"
-         tear_off="true"
-         top="-201"
-         width="121">
-            <menu_item_call
-             label="New Folder"
-             layout="topleft"
-             name="New Folder">
-                <menu_item_call.on_click
-                 function="Inventory.DoCreate"
-                 parameter="category" />
-            </menu_item_call>
-            <menu_item_call
-             label="New Script"
-             layout="topleft"
-             name="New Script">
-                <menu_item_call.on_click
-                 function="Inventory.DoCreate"
-                 parameter="lsl" />
-            </menu_item_call>
-            <menu_item_call
-             label="New Note"
-             layout="topleft"
-             name="New Note">
-                <menu_item_call.on_click
-                 function="Inventory.DoCreate"
-                 parameter="notecard" />
-            </menu_item_call>
-            <menu_item_call
-             label="New Gesture"
-             layout="topleft"
-             name="New Gesture">
-                <menu_item_call.on_click
-                 function="Inventory.DoCreate"
-                 parameter="gesture" />
-            </menu_item_call>
-            <menu
-             height="175"
-             label="New Clothes"
-             layout="topleft"
-             left_delta="0"
-             mouse_opaque="false"
-             name="New Clothes"
-             top_pad="514"
-             width="125">
-                <menu_item_call
-                 label="New Shirt"
-                 layout="topleft"
-                 name="New Shirt">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="shirt" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Pants"
-                 layout="topleft"
-                 name="New Pants">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="pants" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Shoes"
-                 layout="topleft"
-                 name="New Shoes">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="shoes" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Socks"
-                 layout="topleft"
-                 name="New Socks">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="socks" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Jacket"
-                 layout="topleft"
-                 name="New Jacket">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="jacket" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Skirt"
-                 layout="topleft"
-                 name="New Skirt">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="skirt" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Gloves"
-                 layout="topleft"
-                 name="New Gloves">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="gloves" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Undershirt"
-                 layout="topleft"
-                 name="New Undershirt">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="undershirt" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Underpants"
-                 layout="topleft"
-                 name="New Underpants">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="underpants" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Alpha"
-                 layout="topleft"
-                 name="New Alpha">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="alpha" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Tattoo"
-                 layout="topleft"
-                 name="New Tattoo">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="tattoo" />
-                </menu_item_call>
-            </menu>
-            <menu
-             height="85"
-             label="New Body Parts"
-             layout="topleft"
-             left_delta="0"
-             mouse_opaque="false"
-             name="New Body Parts"
-             top_pad="514"
-             width="118">
-                <menu_item_call
-                 label="New Shape"
-                 layout="topleft"
-                 name="New Shape">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="shape" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Skin"
-                 layout="topleft"
-                 name="New Skin">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="skin" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Hair"
-                 layout="topleft"
-                 name="New Hair">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="hair" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Eyes"
-                 layout="topleft"
-                 name="New Eyes">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="eyes" />
-                </menu_item_call>
-            </menu>
-        </menu>
-        <menu
-         height="49"
-         label="Sort"
-         layout="topleft"
-         left="0"
-         mouse_opaque="false"
-         name="Sort"
-         tear_off="true"
-         top="-113"
-         width="118">
-            <menu_item_check
-             control_name="Inventory.SortByName"
-             label="By Name"
-             layout="topleft"
-             name="By Name">
-                <menu_item_check.on_click
-                 function="Inventory.SetSortBy"
-                 parameter="name" />
-            </menu_item_check>
-            <menu_item_check
-             control_name="Inventory.SortByDate"
-             label="By Date"
-             layout="topleft"
-             name="By Date">
-                <menu_item_check.on_click
-                 function="Inventory.SetSortBy"
-                 parameter="date" />
-            </menu_item_check>
-            <menu_item_separator
-             layout="topleft" />
-            <menu_item_check
-             control_name="Inventory.FoldersAlwaysByName"
-             label="Folders Always By Name"
-             layout="topleft"
-             name="Folders Always By Name">
-                <menu_item_check.on_click
-                 function="Inventory.SetSortBy"
-                 parameter="foldersalwaysbyname" />
-            </menu_item_check>
-            <menu_item_check
-             control_name="Inventory.SystemFoldersToTop"
-             label="System Folders To Top"
-             layout="topleft"
-             name="System Folders To Top">
-                <menu_item_check.on_click
-                 function="Inventory.SetSortBy"
-                 parameter="systemfolderstotop" />
-            </menu_item_check>
-        </menu>
-    </menu_bar>
+<panel
+     bottom="560"
+	 class="panel_main_inventory"
+	 filename="panel_main_inventory.xml"
+	 follows="all"
+	 layout="topleft"
+	 left="0"
+	 label="Inventory Panel"
+	 name="Inventory Panel"
+	 top="15"
+	 width="467">
+</panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml
index 17f7e9bf67b..1c9fc3893eb 100644
--- a/indra/newview/skins/default/xui/en/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/en/floater_openobject.xml
@@ -25,7 +25,7 @@
      width="284">
         [DESC]:
     </text>
-    <panel_inventory
+    <panel_inventory_object
      background_visible="false"
      draw_border="false"
      follows="all"
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 29fe046ed38..93b50f6b783 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -2778,7 +2778,7 @@
              left_pad="8"
              name="button permissions"
              width="130" />
-            <panel_inventory
+            <panel_inventory_object
              follows="left|top"
              height="210"
              layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
new file mode 100644
index 00000000000..8cebabdcda5
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -0,0 +1,417 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="400"
+ label="Things"
+ layout="topleft"
+ min_height="350"
+ min_width="240"
+ name="inventory panel"
+ width="333">
+    <panel.string
+     name="Title">
+        Things
+    </panel.string>
+    <filter_editor
+     text_pad_left="12"
+     follows="left|top|right"
+	 font="SanSerif"
+     height="20"
+     label="Filter"
+     layout="topleft"
+     left="15"
+     name="inventory search editor"
+     top="34"
+     width="300" />
+    <tab_container
+     follows="left|top|right|bottom"
+     height="320"
+     layout="topleft"
+     left_delta="-4"
+     name="inventory filter tabs"
+     tab_position="top"
+     top_pad="4"
+     width="313">
+        <inventory_panel
+         follows="left|top|right|bottom"
+         border="true"
+         height="310"
+         label="All Items"
+         layout="topleft"
+         left="10"
+         name="All Items"
+         top="16"
+         width="250" />
+        <inventory_panel
+         follows="left|top|right|bottom"
+         border="true"
+         height="310"
+         label="Recent Items"
+         layout="topleft"
+         left_delta="0"
+         name="Recent Items"
+         top_delta="0"
+         width="250" />
+    </tab_container>
+    <menu_bar
+     bg_visible="false"
+     follows="left|top|right"
+     height="18"
+     layout="topleft"
+     left_delta="0"
+     mouse_opaque="false"
+     name="Inventory Menu"
+     top_delta="-38"
+     width="461">
+        <menu
+         height="101"
+         label="File"
+         layout="topleft"
+         left="0"
+         mouse_opaque="false"
+         name="File"
+         tear_off="true"
+         top="-117"
+         width="128">
+            <menu_item_call
+             label="Open"
+             layout="topleft"
+             name="Open">
+                <menu_item_call.on_click
+                 function="Inventory.DoToSelected"
+                 parameter="open" />
+            </menu_item_call>
+            <menu
+             create_jump_keys="true"
+             label="Upload"
+             layout="topleft"
+             name="upload"
+             tear_off="true">
+                <menu_item_call
+                 label="Image (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Image"
+                 shortcut="control|U">
+                    <menu_item_call.on_click
+                     function="File.UploadImage"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Sound (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Sound">
+                    <menu_item_call.on_click
+                     function="File.UploadSound"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Animation (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Animation">
+                    <menu_item_call.on_click
+                     function="File.UploadAnim"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Bulk (L$[COST] per file)..."
+                 layout="topleft"
+                 name="Bulk Upload">
+                    <menu_item_call.on_click
+                     function="File.UploadBulk"
+                     parameter="" />
+                </menu_item_call>
+                <menu_item_separator
+                 layout="topleft" />
+            </menu>
+            <menu_item_separator
+             layout="topleft" />
+            <menu_item_call
+             label="New Window"
+             layout="topleft"
+             name="New Window">
+                <menu_item_call.on_click
+                 function="Inventory.NewWindow" />
+            </menu_item_call>
+            <menu_item_separator
+             layout="topleft"
+             name="separator2" />
+            <menu_item_call
+             label="Show Filters"
+             layout="topleft"
+             name="Show Filters">
+                <menu_item_call.on_click
+                 function="Inventory.ShowFilters" />
+            </menu_item_call>
+            <menu_item_call
+             label="Reset Filters"
+             layout="topleft"
+             name="Reset Current">
+                <menu_item_call.on_click
+                 function="Inventory.ResetFilters" />
+            </menu_item_call>
+            <menu_item_call
+             label="Close All Folders"
+             layout="topleft"
+             name="Close All Folders">
+                <menu_item_call.on_click
+                 function="Inventory.CloseAllFolders" />
+            </menu_item_call>
+            <menu_item_separator
+             layout="topleft"
+             name="separator3" />
+            <menu_item_call
+             label="Empty Trash"
+             layout="topleft"
+             name="Empty Trash">
+                <menu_item_call.on_click
+                 function="Inventory.EmptyTrash" />
+            </menu_item_call>
+            <menu_item_call
+             label="Empty Lost And Found"
+             layout="topleft"
+             name="Empty Lost And Found">
+                <menu_item_call.on_click
+                 function="Inventory.EmptyLostAndFound" />
+            </menu_item_call>
+        </menu>
+        <menu
+         height="121"
+         label="Create"
+         layout="topleft"
+         left="0"
+         mouse_opaque="false"
+         name="Create"
+         tear_off="true"
+         top="-201"
+         width="121">
+            <menu_item_call
+             label="New Folder"
+             layout="topleft"
+             name="New Folder">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="category" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Script"
+             layout="topleft"
+             name="New Script">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="lsl" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Note"
+             layout="topleft"
+             name="New Note">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="notecard" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Gesture"
+             layout="topleft"
+             name="New Gesture">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="gesture" />
+            </menu_item_call>
+            <menu
+             height="175"
+             label="New Clothes"
+             layout="topleft"
+             left_delta="0"
+             mouse_opaque="false"
+             name="New Clothes"
+             top_pad="514"
+             width="125">
+                <menu_item_call
+                 label="New Shirt"
+                 layout="topleft"
+                 name="New Shirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Pants"
+                 layout="topleft"
+                 name="New Pants">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="pants" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Shoes"
+                 layout="topleft"
+                 name="New Shoes">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shoes" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Socks"
+                 layout="topleft"
+                 name="New Socks">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="socks" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Jacket"
+                 layout="topleft"
+                 name="New Jacket">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="jacket" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Skirt"
+                 layout="topleft"
+                 name="New Skirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="skirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Gloves"
+                 layout="topleft"
+                 name="New Gloves">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="gloves" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Undershirt"
+                 layout="topleft"
+                 name="New Undershirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="undershirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Underpants"
+                 layout="topleft"
+                 name="New Underpants">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="underpants" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Alpha"
+                 layout="topleft"
+                 name="New Alpha">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="alpha" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Tattoo"
+                 layout="topleft"
+                 name="New Tattoo">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="tattoo" />
+                </menu_item_call>
+            </menu>
+            <menu
+             height="85"
+             label="New Body Parts"
+             layout="topleft"
+             left_delta="0"
+             mouse_opaque="false"
+             name="New Body Parts"
+             top_pad="514"
+             width="118">
+                <menu_item_call
+                 label="New Shape"
+                 layout="topleft"
+                 name="New Shape">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shape" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Skin"
+                 layout="topleft"
+                 name="New Skin">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="skin" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Hair"
+                 layout="topleft"
+                 name="New Hair">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="hair" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Eyes"
+                 layout="topleft"
+                 name="New Eyes">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="eyes" />
+                </menu_item_call>
+            </menu>
+        </menu>
+        <menu
+         height="49"
+         label="Sort"
+         layout="topleft"
+         left="0"
+         mouse_opaque="false"
+         name="Sort"
+         tear_off="true"
+         top="-113"
+         width="118">
+            <menu_item_check
+             control_name="Inventory.SortByName"
+             label="By Name"
+             layout="topleft"
+             name="By Name">
+                <menu_item_check.on_click
+                 function="Inventory.SetSortBy"
+                 parameter="name" />
+            </menu_item_check>
+            <menu_item_check
+             control_name="Inventory.SortByDate"
+             label="By Date"
+             layout="topleft"
+             name="By Date">
+                <menu_item_check.on_click
+                 function="Inventory.SetSortBy"
+                 parameter="date" />
+            </menu_item_check>
+            <menu_item_separator
+             layout="topleft" />
+            <menu_item_check
+             control_name="Inventory.FoldersAlwaysByName"
+             label="Folders Always By Name"
+             layout="topleft"
+             name="Folders Always By Name">
+                <menu_item_check.on_click
+                 function="Inventory.SetSortBy"
+                 parameter="foldersalwaysbyname" />
+            </menu_item_check>
+            <menu_item_check
+             control_name="Inventory.SystemFoldersToTop"
+             label="System Folders To Top"
+             layout="topleft"
+             name="System Folders To Top">
+                <menu_item_check.on_click
+                 function="Inventory.SetSortBy"
+                 parameter="systemfolderstotop" />
+            </menu_item_check>
+        </menu>
+    </menu_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml
index 3f64c9c633f..190dbe2b0fe 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml
@@ -1,131 +1,149 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<!-- Side tray cannot show background because it is always 
-	partially on screen to hold tab buttons. -->
-<side_tray
-  name="sidebar"
-  background_visible="false"
-  mouse_opaque="true"
-  width="333"
-  collapsed="true"
->
-  <!-- Individual tabs must show background to have seemless
-	appearance up to tray panel header word like "Home".
-	Embedded panels are inset by a pixel and so their 
-	backgrounds will not block the world fully. -->
-  <sidetray_tab
-    name="sidebar_home"
-    help_topic="sidebar_home"
-    tab_title="Home"
-    description="Home."
-    image="TabIcon_Open_Off"
-	image_selected="TabIcon_Close_Off"
-    mouse_opaque="false"
-    background_visible="true"
-  >
-      <panel
-        name="panel_home"
-        filename="panel_sidetray_home_tab.xml"
-        label="home"
-      />
-  </sidetray_tab>
-
-  <sidetray_tab
-    name="sidebar_people"
-    help_topic="sidebar_people"
-    tab_title="People"
-    description="Find your friends, contacts and people nearby."
-    image="TabIcon_People_Off"
-    image_selected="TabIcon_People_Selected"
-    mouse_opaque="false"
-    background_visible="true"
-  >
-    <panel_container
-      name="panel_container"
-      width="333"
-    >
-      <panel
-        class="panel_people"
-        name="panel_people"
-        filename="panel_people.xml"
-      />
-      <panel
-        class="panel_profile_view"
-        name="panel_profile_view"
-        filename="panel_profile_view.xml"
-      />
-      <panel
-        class="panel_group_info_sidetray"
-        name="panel_group_info_sidetray"
-        filename="panel_group_info_sidetray.xml"
-        label="Group Info"
-        font="SansSerifBold"
-      />
-      <panel
-        class="panel_block_list_sidetray"
-        name="panel_block_list_sidetray"
-        filename="panel_block_list_sidetray.xml"
-        label="Blocked Residents &amp; Objects"
-        font="SansSerifBold"
-      />
-
-    </panel_container>
-  </sidetray_tab>
-  
-  <sidetray_tab
-    name="sidebar_places"
-    help_topic="sidebar_places"
-    tab_title="Places"
-    label="Places"
-    description="Find places to go and places you&apos;ve visited before."
-    image="TabIcon_Places_Off"
-	image_selected="TabIcon_Places_Selected"
-    mouse_opaque="false"
-    background_visible="true"
-  >
-      <panel
-        class="panel_places"
-        name="panel_places"
-        filename="panel_places.xml"
-        label="Places"
-        font="SansSerifBold"
-      />
-  </sidetray_tab>
-
-  <sidetray_tab
-    name="sidebar_me"
-    help_topic="sidebar_me"
-    tab_title="Me"
-    description="Edit your public profile and Picks."
-    image="TabIcon_Me_Off"
-    image_selected="TabIcon_Me_Selected"
-    mouse_opaque="false"
-    background_visible="true"
-  >
-      <panel
-        class="panel_me_profile_view"
-        name="panel_me_profile"
-        filename="panel_me_profile.xml"
-        label="Me"
-      />
-  </sidetray_tab>
-
-  <sidetray_tab
-    name="sidebar_appearance"
-    help_topic="sidebar_appearance"
-    tab_title="Appearance"
-    description="Change your appearance and current look."
-    image="TabIcon_Appearance_Off"
-    image_selected="TabIcon_Appearance_Selected"
-    mouse_opaque="false"
-    background_visible="true"
-  >
-      <panel
-        class="panel_appearance"
-        name="panel_appearance"
-        filename="panel_appearance.xml"
-        label="Edit Appearance"
-        font="SansSerifBold"
-      />
-  </sidetray_tab>
-
-</side_tray>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- Side tray cannot show background because it is always 
+	partially on screen to hold tab buttons. -->
+<side_tray
+  name="sidebar"
+  background_visible="false"
+  mouse_opaque="true"
+  width="333"
+  collapsed="true"
+>
+  <!-- Individual tabs must show background to have seemless
+	appearance up to tray panel header word like "Home".
+	Embedded panels are inset by a pixel and so their 
+	backgrounds will not block the world fully. -->
+  <sidetray_tab
+    name="sidebar_home"
+    help_topic="sidebar_home"
+    tab_title="Home"
+    description="Home."
+    image="TabIcon_Open_Off"
+	image_selected="TabIcon_Close_Off"
+    mouse_opaque="false"
+    background_visible="true"
+  >
+      <panel
+        name="panel_home"
+        filename="panel_sidetray_home_tab.xml"
+        label="home"
+      />
+  </sidetray_tab>
+
+  <sidetray_tab
+    name="sidebar_people"
+    help_topic="sidebar_people"
+    tab_title="People"
+    description="Find your friends, contacts and people nearby."
+    image="TabIcon_People_Off"
+    image_selected="TabIcon_People_Selected"
+    mouse_opaque="false"
+    background_visible="true"
+  >
+    <panel_container
+      name="panel_container"
+      width="333"
+    >
+      <panel
+        class="panel_people"
+        name="panel_people"
+        filename="panel_people.xml"
+      />
+      <panel
+        class="panel_profile_view"
+        name="panel_profile_view"
+        filename="panel_profile_view.xml"
+      />
+      <panel
+        class="panel_group_info_sidetray"
+        name="panel_group_info_sidetray"
+        filename="panel_group_info_sidetray.xml"
+        label="Group Info"
+        font="SansSerifBold"
+      />
+      <panel
+        class="panel_block_list_sidetray"
+        name="panel_block_list_sidetray"
+        filename="panel_block_list_sidetray.xml"
+        label="Blocked Residents &amp; Objects"
+        font="SansSerifBold"
+      />
+
+    </panel_container>
+  </sidetray_tab>
+  
+  <sidetray_tab
+    name="sidebar_places"
+    help_topic="sidebar_places"
+    tab_title="Places"
+    label="Places"
+    description="Find places to go and places you&apos;ve visited before."
+    image="TabIcon_Places_Off"
+	image_selected="TabIcon_Places_Selected"
+    mouse_opaque="false"
+    background_visible="true"
+  >
+      <panel
+        class="panel_places"
+        name="panel_places"
+        filename="panel_places.xml"
+        label="Places"
+        font="SansSerifBold"
+      />
+  </sidetray_tab>
+
+  <sidetray_tab
+    name="sidebar_me"
+    help_topic="sidebar_me"
+    tab_title="Me"
+    description="Edit your public profile and Picks."
+    image="TabIcon_Me_Off"
+    image_selected="TabIcon_Me_Selected"
+    mouse_opaque="false"
+    background_visible="true"
+  >
+      <panel
+        class="panel_me_profile_view"
+        name="panel_me_profile"
+        filename="panel_me_profile.xml"
+        label="Me"
+      />
+  </sidetray_tab>
+
+  <sidetray_tab
+    name="sidebar_appearance"
+    help_topic="sidebar_appearance"
+    tab_title="Appearance"
+    description="Change your appearance and current look."
+    image="TabIcon_Appearance_Off"
+    image_selected="TabIcon_Appearance_Selected"
+    mouse_opaque="false"
+    background_visible="true"
+  >
+      <panel
+        class="panel_appearance"
+        name="panel_appearance"
+        filename="panel_appearance.xml"
+        label="Edit Appearance"
+        font="SansSerifBold"
+      />
+  </sidetray_tab>
+
+  <sidetray_tab
+    name="sidebar_inventory"
+    help_topic="sidebar_inventory"
+    tab_title="Inventory"
+    description="Browse your inventory."
+    image="TabIcon_Inventory_Off"
+    mouse_opaque="false"
+    background_visible="true"
+  >
+      <panel
+        class="sidepanel_inventory"
+        name="sidepanel_inventory"
+        filename="sidepanel_inventory.xml"
+        label="Edit Inventory"
+        font="SansSerifBold"
+      />
+  </sidetray_tab>
+
+</side_tray>
diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
index 247054772e1..9636e321870 100644
--- a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
+++ b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
@@ -12,7 +12,7 @@
      bg_alpha_color="DkGray2"
      class="panel_sidetray_home_info"
      follows="left|top|right"
-     height="120"
+     height="90"
      layout="topleft"
      left="15"
      top="17"
@@ -42,7 +42,7 @@
          width="20" />
         <text
          follows="left|right|bottom"
-         height="120"
+         height="90"
          layout="topleft"
          left="10"
          mouse_opaque="false"
@@ -59,7 +59,7 @@
      bg_alpha_color="DkGray2"
      class="panel_sidetray_home_info"
      follows="left|top|right"
-     height="120"
+     height="90"
      layout="topleft"
      left="15"
      top_pad="15"
@@ -89,7 +89,7 @@
          image_name="TabIcon_Places_Selected"/>
         <text
          follows="all"
-         height="120"
+         height="90"
          layout="topleft"
          left="10"
          mouse_opaque="false"
@@ -106,7 +106,7 @@
      bg_alpha_color="DkGray2"
      class="panel_sidetray_home_info"
      follows="left|top|right"
-     height="120"
+     height="90"
      layout="topleft"
      left="15"
      top_pad="15"
@@ -136,7 +136,7 @@
          image_name="TabIcon_Me_Selected"/>
         <text
          follows="all"
-         height="120"
+         height="90"
          layout="topleft"
          left="10"
          mouse_opaque="false"
@@ -153,7 +153,7 @@
      bg_alpha_color="DkGray2"
      class="panel_sidetray_home_info"
      follows="left|top|right"
-     height="120"
+     height="90"
      layout="topleft"
      left="15"
      top_pad="15"
@@ -183,7 +183,7 @@
          image_name="TabIcon_Appearance_Selected"/>
         <text
          follows="all"
-         height="120"
+         height="90"
          layout="topleft"
          left="10"
          mouse_opaque="false"
@@ -195,4 +195,51 @@
             Change your appearance and current look.
         </text>
     </panel>
+    <panel
+     background_visible="true"
+     bg_alpha_color="DkGray2"
+     class="panel_sidetray_home_info"
+     follows="left|top|right"
+     height="90"
+     layout="topleft"
+     left="15"
+     top_pad="15"
+     name="sidebar_inventory"
+     width="303">
+        <text
+         follows="left|right|top"
+         font="SansSerifBigBold"
+         height="30"
+         layout="topleft"
+         left="10"
+         mouse_opaque="false"
+         name="tab_name"
+         text_color="EmphasisColor"
+         top="10"
+         value="My Inventory"
+         width="200"
+         word_wrap="true" />
+        <icon
+         follows="top|right"
+         height="20"
+         layout="topleft"
+         name="tab_icon"
+         right="-10"
+         top="10"
+         width="20"
+         image_name="TabIcon_Inventory_Selected"/>
+        <text
+         follows="all"
+         height="90"
+         layout="topleft"
+         left="10"
+         mouse_opaque="false"
+         name="tab_description"
+         right="-10"
+         text_color="white"
+         top="40"
+         word_wrap="true">
+            Browse your inventory.
+        </text>
+    </panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
new file mode 100644
index 00000000000..3b3fbcb936e
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="400"
+ label="Places"
+ layout="topleft"
+ min_height="350"
+ min_width="240"
+ name="objects panel"
+ width="333">
+    <tab_container
+     follows="all"
+     height="360"
+     layout="topleft"
+     left="9"
+     name="Inventory Tabs"
+     tab_position="top"
+     top="30"
+     width="313"
+	 tab_height="0"
+	 visible="true">
+	 <panel
+	      class="panel_main_inventory"
+		  filename="panel_main_inventory.xml"
+		  follows="all"
+		  layout="topleft"
+		  left="0"
+		  name="panel_main_inventory"
+		  top="15"
+		  label=""
+		  height="300"
+		  width="467">
+    <panel
+     height="25"
+     layout="bottomright"
+     left="0"
+     help_topic="objects_button_tab"
+     name="button_panel"
+	 bottom="5"
+     width="313">
+        <button
+         enabled="true"
+         follows="bottom|left"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Info"
+         layout="topleft"
+         left="0"
+         name="info_btn"
+         top="0"
+         width="60" />
+        <button
+         enabled="true"
+         follows="bottom|left"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Share"
+         layout="topleft"
+         left_pad="5"
+         name="share_btn"
+         top="0"
+         width="60" />
+        <button
+         enabled="false"
+         follows="bottom|left"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Wear"
+         layout="topleft"
+         left="130"
+         name="wear_btn"
+         top="0"
+         width="60" />
+        <button
+         enabled="false"
+         follows="bottom|left"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Play"
+         layout="topleft"
+         name="play_btn"
+         left="130"
+         top="0"
+         width="50" />
+        <button
+         enabled="false"
+         follows="bottom|left"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Teleport"
+         layout="topleft"
+         left="130"
+         name="teleport_btn"
+         top="0"
+         width="77" />
+        <button
+         follows="bottom|right"
+         font="SansSerifSmallBold"
+         height="25"
+         label="v"
+         layout="topleft"
+         name="overflow_btn"
+         right="-10"
+         top="0"
+         width="30" />
+    </panel>
+    </panel>
+   </tab_container>
+
+    <panel
+     class="sidepanel_object_info"
+     filename="sidepanel_object_info.xml"
+     follows="all"
+     height="360"
+     layout="topleft"
+     left="0"
+     help_topic="objects_info_tab"
+     name="sidepanel_object_info"
+     top="30"
+     visible="false" />
+</panel>
-- 
GitLab


From 0c196fd7690743c5f469d57002ffee8034c554ee Mon Sep 17 00:00:00 2001
From: Erica <erica@lindenlab.com>
Date: Mon, 2 Nov 2009 12:45:56 -0800
Subject: [PATCH 014/306] Bottom bar - Change snapshot combo to button,
 increase width for il8n EXT-2079,  Remove deleted art from textures.xml
 EXT-2080

---
 .../textures/bottomtray/Snapshot_Off.png      | Bin 332 -> 3204 bytes
 .../skins/default/textures/textures.xml       |  93 ------------------
 .../skins/default/xui/en/panel_bottomtray.xml |  81 +++++++--------
 3 files changed, 36 insertions(+), 138 deletions(-)

diff --git a/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png b/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png
index 6f2726c3e672a87918a50007e5dfe978051dbdd4..d7ec04237b53b2b2634210381b1a423a401375d6 100644
GIT binary patch
literal 3204
zcmV-~414p5P)<h;3K|Lk000e1NJLTq001Na000sQ1^@s6Gb4N`00009a7bBm000XU
z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-oy)XH-+^7Crag
z^g>IBfRsybQWXdwQbLP>6p<z>Aqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uh<iVD~V
z<RPMtgQJLw%KPDaqifc@_vX$1wbwr9tn;0-&j-K=43<bUQ8j=JsX`tR;Dg7+#^K~H
zK!FM*Z~zbpvt%K2{UZSY_<lS*D<Z%Lz5oGu(+dayz)hRLFdT>f59&ghTmgWD0l;*T
zI7<kC6aYYajzXpYKt=(8otP$50H6c_V9R4-;{Z@C0AMG7=F<Rxo%or10RUT+Ar%3j
zkpLhQWr#!oXgdI`&sK^>09Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p
z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-<?i
z0%4j!F2Z@488U%158(66005wo6%pWr^Zj_v4zAA5HjcIqUoGmt2LB>rV&neh&#Q1i
z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_<lS*MWK+n+1cgf
z<k(8YLR(?VSAG6x!e78w{cQPuJpA|d;J)G{fihizM+Erb!p!tcr5w+a34~(Y=8s4G
zw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@r6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@u
zU1J0GOD7Ombim^G008p4Z^6_k2m^p<gW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm
z2mk;?pn)o|K^yeJ7%adB9Ki+L!3+FgHiSYX#KJ-lLJDMn9CBbOtb#%)hRv`YDqt_v
zKpix|QD}yfa1JiQRk#j4a1Z)n2%f<xynzV>LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW
zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifq<Ex{*7`05XF7hP+2Hl!3BQJ=6@fL%FCo
z8iYoo3(#bAF`ADSpqtQgv>H8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X
zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ<AYmRsNLWl*PS{AOARHt#5!wki2?K;t
z!Y3k=s7tgax)J%r7-BLphge7~Bi0g+6E6^Zh(p9TBoc{3GAFr^0!gu?RMHaCM$&Fl
zBk3%un>0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4
z<uv66WtcKSRim0x-Ke2d5jBrmLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_
zbh;7Ul^#x)&{xvS=|||7=mYe33=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#l
znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U
zt5vF<Q0r40Q)j6=sE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*SAPZv|vv@2aYYnT0
zb%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5cP6_8Ir<e17iry6O
zDdH&`rZh~sF=bq9s+O0QSgS~@QL9Jmy*94xr=6y~MY~!1fet~(N+(<=M`w@D1)b+p
z*;C!83a1uLJv#NSE~;y#8=<>IcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya?
z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y
zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB
zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt
z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a<fJbF^|4I#xQ~n$Dc=
zKYhjYmgz5NSkDm8*fZm{6U!;YX`NG>(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C
z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB
zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe
zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0
z?2xS?_ve_-k<Mujg;0Lz*3buG=3$G&ehepthlN*$KaOySSQ^nWmo<0M+(UEUMEXRQ
zMBbZcF;6+KElM>iKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$
z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4
z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu
zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu
z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E
ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw
zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX
z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i&
z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01
z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R
z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw
zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD
zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3|
zawq-H%e&ckC+@AhPrP6BK<z=<L*0kfKU@CX*zeqbYQT4(^U>T#_XdT7&;F71j}Joy
zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z
zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot<a{81DF0~rvGr5Xr~8u`lav1h
z1DNytV>2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F}
z00056Nkl<Zc-rih!D<>&6o$V$PBczUvnbMq!mLWfKuV!4f-8N7E}WH8vM|s^S4m%?
zkKiJ~RYiOTNdpoH*@OgfVO>;^25~kaq!XE$)6HZT$V?-_MGhS9UHtdn|8UO#UnL?e
zQ)nz%EFB>|EKn(Rw|xt|0z4oATmXL_Iv;j4^a$j)0M+ewzn0784d51dS+CcBG#ZT~
z;KhA)04{I^oQEnrEc3}^a*$4^&3HT>1Hvjna~#LDZToj7lli<*Lcn3rqT7gLVE{Kk
zY2ia%EEc~grAkVvQm51T39NgbC%*5W0N;R5z^?E6$DZfO|A<D9h<^vH0)K%tpwH*?
zzNTsWi9});U~JcQZP#^EhG7&U%S=SV=Anoj2kTv)jYgxLe!ss`tJMIoEQ`TlureGD
zw?*VkL{0*1sCORgL;h?wTdP*9Mzh%jpw((osZ>^{)9D)EKeaJBxm<43G|i7d3Wx)#
zY&QELpU-arPSgt@t1<<6<MH@cyWKwR^?H|uLgBS#S?^8Le4~`ofn*ewMIrP(aOq@(
qR>Xkoz|Hp-P3ZZze<pNa{2KrdHt5<CJPp490000<MNUMnLSTaH0r4dO

literal 332
zcmV-S0ki&zP)<h;3K|Lk000e1NJLTq000sI000sQ1^@s6R?d!B0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy?ny*JRCwBA{Qv(y12q5>1C;>P3}OKh
zjEsyhzCD`!K|%(=f`$dk*8^ffpkM>CBA^8g1k8C4#FxNoK_)(Z`gESOw6r3r-T~^n
z57d_gHwXy!QxH6k$X)|^!x72fV1xhs`SXE=g=GVfc>pTq02B)ViV0v1Y#ag2@csMu
zt$ciZ3z38te){x@m6w+{8fWx_0vd*4VppzQIfAYMn;5}#boA&^A!5YPy@mlSEiIiu
zkpsl9p+cfiG13e&G&D3jaNq#*f&~k%g7^su3EDt0V{B?+(ccNgW@JSDDIhLKHfR{;
eeySM+5MTiP>stxO-1&b10000<MNUMnLSTY+vVf}q

diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index c322d2aebb2..e11e94778b6 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -532,15 +532,6 @@
   <texture name="move_down_in.tga" preload="false" />
   <texture name="move_down_out.tga" preload="false" />
 
-  <texture name="tool_grab.tga" />
-  <texture name="tool_grab_active.tga" />
-
-  <texture name="tool_face.tga" />
-  <texture name="tool_face_active.tga" />
-
-  <texture name="tool_create.tga" />
-  <texture name="tool_create_active.tga" />
-
   <texture name="up_arrow.tga" file_name="up_arrow.png" />
   <texture name="down_arrow.tga" file_name="down_arrow.png" />
 
@@ -605,54 +596,6 @@
   <texture name="icon_popular.tga" />
   <texture name="icon_top_pick.tga" />
 
-  <texture name="inv_folder_animation.tga" />
-  <texture name="inv_folder_bodypart.tga" />
-  <texture name="inv_folder_callingcard.tga" />
-  <texture name="inv_folder_clothing.tga" />
-  <texture name="inv_folder_current_outfit.tga" />
-  <texture name="inv_folder_gesture.tga" />
-  <texture name="inv_folder_landmark.tga" />
-  <texture name="inv_folder_lostandfound.tga" />
-  <texture name="inv_folder_my_outfits.tga" />
-  <texture name="inv_folder_notecard.tga" />
-  <texture name="inv_folder_object.tga" />
-  <texture name="inv_folder_outfit.tga" />
-  <texture name="inv_folder_plain_closed.tga" />
-  <texture name="inv_folder_script.tga" />
-  <texture name="inv_folder_snapshot.tga" />
-  <texture name="inv_folder_sound.tga" />
-  <texture name="inv_folder_texture.tga" />
-  <texture name="inv_folder_trash.tga" />
-
-  <texture name="inv_item_animation.tga" />
-  <texture name="inv_item_skin.tga" />
-  <texture name="inv_item_callingcard_offline.tga" />
-  <texture name="inv_item_callingcard_online.tga" />
-  <texture name="inv_item_eyes.tga" />
-  <texture name="inv_item_gesture.tga" />
-  <texture name="inv_item_gloves.tga" />
-  <texture name="inv_item_hair.tga" />
-  <texture name="inv_item_jacket.tga" />
-  <texture name="inv_item_landmark.tga" />
-  <texture name="inv_item_landmark_visited.tga" />
-  <texture name="inv_item_linkitem.tga" />
-  <texture name="inv_item_linkfolder.tga" />
-  <texture name="inv_item_notecard.tga" />
-  <texture name="inv_item_object.tga" />
-  <texture name="inv_item_object_multi.tga" />
-  <texture name="inv_item_pants.tga" />
-  <texture name="inv_item_script.tga" />
-  <texture name="inv_item_shape.tga" />
-  <texture name="inv_item_shirt.tga" />
-  <texture name="inv_item_shoes.tga" />
-  <texture name="inv_item_skirt.tga" />
-  <texture name="inv_item_snapshot.tga" />
-  <texture name="inv_item_socks.tga" />
-  <texture name="inv_item_sound.tga" />
-  <texture name="inv_item_texture.tga" />
-  <texture name="inv_item_underpants.tga" />
-  <texture name="inv_item_undershirt.tga" />
-
   <texture name="lag_status_critical.tga" />
   <texture name="lag_status_good.tga" />
   <texture name="lag_status_warning.tga" />
@@ -679,37 +622,6 @@
   <texture name="notify_next.png" preload="true" />
   <texture name="notify_box_icon.tga" />
 
-  <texture name="object_cone.tga" />
-  <texture name="object_cone_active.tga" />
-  <texture name="object_cube.tga" />
-  <texture name="object_cube_active.tga" />
-  <texture name="object_cylinder.tga" />
-  <texture name="object_cylinder_active.tga" />
-  <texture name="object_grass.tga" />
-  <texture name="object_grass_active.tga" />
-  <texture name="object_hemi_cone.tga" />
-  <texture name="object_hemi_cone_active.tga" />
-  <texture name="object_hemi_cylinder.tga" />
-  <texture name="object_hemi_cylinder_active.tga" />
-  <texture name="object_hemi_sphere.tga" />
-  <texture name="object_hemi_sphere_active.tga" />
-  <texture name="object_prism.tga" />
-  <texture name="object_prism_active.tga" />
-  <texture name="object_pyramid.tga" />
-  <texture name="object_pyramid_active.tga" />
-  <texture name="object_ring.tga" />
-  <texture name="object_ring_active.tga" />
-  <texture name="object_sphere.tga" />
-  <texture name="object_sphere_active.tga" />
-  <texture name="object_tetrahedron.tga" />
-  <texture name="object_tetrahedron_active.tga" />
-  <texture name="object_torus.tga" />
-  <texture name="object_torus_active.tga" />
-  <texture name="object_tree.tga" />
-  <texture name="object_tree_active.tga" />
-  <texture name="object_tube.tga" />
-  <texture name="object_tube_active.tga" />
-
   <texture name="pixiesmall.j2c" use_mips="true" />
   <texture name="script_error.j2c" use_mips="true" />
   <texture name="silhouette.j2c" use_mips="true" />
@@ -725,11 +637,6 @@
   <texture name="status_no_push.tga" />
   <texture name="status_no_scripts.tga" />
 
-  <texture name="tool_dozer.tga" />
-  <texture name="tool_dozer_active.tga" />
-  <texture name="tool_zoom.tga" />
-  <texture name="tool_zoom_active.tga" />
-
   <texture name="icn_active-speakers-dot-lvl0.tga" />
   <texture name="icn_active-speakers-dot-lvl1.tga" />
   <texture name="icn_active-speakers-dot-lvl2.tga" />
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 73a1bae1c65..179ef015f18 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -10,7 +10,7 @@
  left="0"
  name="bottom_tray"
  top="28"
- chrome="true" 
+ chrome="true"
  border_visible="false"
  width="1000">
     <layout_stack
@@ -47,7 +47,7 @@
          min_width="300"
          name="chat_bar"
          user_resize="false"
-         filename="panel_nearby_chat_bar.xml"/>
+         filename="panel_nearby_chat_bar.xml" />
         <layout_panel
          mouse_opaque="false"
          auto_resize="false"
@@ -55,23 +55,22 @@
          height="28"
          layout="topleft"
          min_height="28"
-         width="96"
+         width="100"
          top_delta="0"
          min_width="96"
          name="speak_panel"
          user_resize="false">
-		    <chiclet_talk
-		     follows="right"
-		     height="23"
-		     speak_button.font="SansSerifMedium"
-		     speak_button.tab_stop="true"
-		     show_button.tab_stop="true"
-		     layout="topleft"
-		     left="0"
-		     name="talk"
-		     top="3"
-		     width="96" />
-         </layout_panel>
+         <chiclet_talk
+          follows="right"
+          height="23"
+          speak_button.tab_stop="true"
+          show_button.tab_stop="true"
+          layout="topleft"
+          left="0"
+          name="talk"
+          top="3"
+          width="100" />
+        </layout_panel>
 		 <icon
          auto_resize="false"
          follows="left|right"
@@ -89,21 +88,21 @@
          height="28"
          layout="topleft"
          min_height="28"
-         width="76"
+         width="80"
          top_delta="0"
          min_width="76"
          name="gesture_panel"
          user_resize="false">
-		    <button
-		      follows="right"
-		     height="23"
-		     label="Gesture"
-		     layout="topleft"
-		     name="Gesture"
-		     left="0"
-		     top="3"
-             use_ellipses="true"
-		     width="76" />
+         <button
+           follows="right"
+          height="23"
+          label="Gesture"
+          layout="topleft"
+          name="Gesture"
+          left="0"
+          top="3"
+         use_ellipses="true"
+          width="80" />
         </layout_panel>
 		 <icon
          auto_resize="false"
@@ -124,7 +123,7 @@
          layout="topleft"
          min_height="28"
          name="movement_panel"
-         width="76"
+         width="80"
          min_width="76">
             <button
              follows="left|right"
@@ -136,7 +135,7 @@
              name="movement_btn"
              tool_tip="Show/hide movement controls"
              top="3"
-             width="76">
+             width="80">
                 <button.init_callback
                  function="Button.SetDockableFloaterToggle"
                  parameter="moveview" />
@@ -175,7 +174,7 @@
              tool_tip="Show/hide camera controls"
              top="3"
              name="camera_btn"
-             width="76">
+             width="80">
                 <button.init_callback
                  function="Button.SetDockableFloaterToggle"
                  parameter="camera" />
@@ -199,28 +198,20 @@
          height="28"
          layout="topleft"
          name="snapshot_panel"
-         width="35">
-            <split_button
+         width="40">
+            <button
              arrow_position="right"
          follows="left|right"
              height="23"
              left="0"
+             label=""
              layout="topleft"
-             name="snapshots"
-             width="46"
-             top="3">
-                <split_button.item
+             width="36"
+             top="3"
                  image_overlay="Snapshot_Off"
                  name="snapshot"
-                 tool_tip="Take snapshot"
-                 />
-                <split_button.arrow_button
-                 name="snapshot_settings"
-                 image_overlay="Widget_UpArrow"
-                 tool_tip="Snapshot and Preset Views"
-                 width="18"
-                 />
-            </split_button>
+             tool_tip="Take a snapshot"
+            />
         </layout_panel>
         <layout_panel
          mouse_opaque="false"
@@ -297,7 +288,7 @@
          height="10"
          image_name="spacer24.tga"
          layout="topleft"
-         left="0"
+         right="-1"
          top="0"
          width="10"/>
     </layout_stack>
-- 
GitLab


From 5d12c6516e9eaf4084cc00f757061a9bd78d7ed9 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 2 Nov 2009 13:24:14 -0800
Subject: [PATCH 015/306] Fix legacy communicate window tabs being too low,
 trivial.

---
 indra/newview/skins/default/xui/en/floater_im.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/indra/newview/skins/default/xui/en/floater_im.xml b/indra/newview/skins/default/xui/en/floater_im.xml
index b6cf05aefce..92a61117598 100644
--- a/indra/newview/skins/default/xui/en/floater_im.xml
+++ b/indra/newview/skins/default/xui/en/floater_im.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <multi_floater
+ legacy_header_height="18" 
  can_resize="true"
  follows="left|bottom"
  height="422"
-- 
GitLab


From 729c5730ca0ae86300fec3c2b5bd132e23f48211 Mon Sep 17 00:00:00 2001
From: Erica <erica@lindenlab.com>
Date: Mon, 2 Nov 2009 13:56:23 -0800
Subject: [PATCH 016/306] Bottom bar - Change snapshot combo to button,
 increase width for il8n EXT-2079, Remove deleted art from textures.xml
 EXT-2080

---
 .../textures/bottomtray/Snapshot_Off.png      | Bin 332 -> 3204 bytes
 .../skins/default/textures/textures.xml       |  93 ------------------
 .../skins/default/xui/en/panel_bottomtray.xml |  31 +++---
 3 files changed, 11 insertions(+), 113 deletions(-)

diff --git a/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png b/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png
index 6f2726c3e672a87918a50007e5dfe978051dbdd4..d7ec04237b53b2b2634210381b1a423a401375d6 100644
GIT binary patch
literal 3204
zcmV-~414p5P)<h;3K|Lk000e1NJLTq001Na000sQ1^@s6Gb4N`00009a7bBm000XU
z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-oy)XH-+^7Crag
z^g>IBfRsybQWXdwQbLP>6p<z>Aqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uh<iVD~V
z<RPMtgQJLw%KPDaqifc@_vX$1wbwr9tn;0-&j-K=43<bUQ8j=JsX`tR;Dg7+#^K~H
zK!FM*Z~zbpvt%K2{UZSY_<lS*D<Z%Lz5oGu(+dayz)hRLFdT>f59&ghTmgWD0l;*T
zI7<kC6aYYajzXpYKt=(8otP$50H6c_V9R4-;{Z@C0AMG7=F<Rxo%or10RUT+Ar%3j
zkpLhQWr#!oXgdI`&sK^>09Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p
z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-<?i
z0%4j!F2Z@488U%158(66005wo6%pWr^Zj_v4zAA5HjcIqUoGmt2LB>rV&neh&#Q1i
z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_<lS*MWK+n+1cgf
z<k(8YLR(?VSAG6x!e78w{cQPuJpA|d;J)G{fihizM+Erb!p!tcr5w+a34~(Y=8s4G
zw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@r6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@u
zU1J0GOD7Ombim^G008p4Z^6_k2m^p<gW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm
z2mk;?pn)o|K^yeJ7%adB9Ki+L!3+FgHiSYX#KJ-lLJDMn9CBbOtb#%)hRv`YDqt_v
zKpix|QD}yfa1JiQRk#j4a1Z)n2%f<xynzV>LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW
zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifq<Ex{*7`05XF7hP+2Hl!3BQJ=6@fL%FCo
z8iYoo3(#bAF`ADSpqtQgv>H8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X
zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ<AYmRsNLWl*PS{AOARHt#5!wki2?K;t
z!Y3k=s7tgax)J%r7-BLphge7~Bi0g+6E6^Zh(p9TBoc{3GAFr^0!gu?RMHaCM$&Fl
zBk3%un>0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4
z<uv66WtcKSRim0x-Ke2d5jBrmLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_
zbh;7Ul^#x)&{xvS=|||7=mYe33=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#l
znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U
zt5vF<Q0r40Q)j6=sE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*SAPZv|vv@2aYYnT0
zb%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5cP6_8Ir<e17iry6O
zDdH&`rZh~sF=bq9s+O0QSgS~@QL9Jmy*94xr=6y~MY~!1fet~(N+(<=M`w@D1)b+p
z*;C!83a1uLJv#NSE~;y#8=<>IcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya?
z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y
zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB
zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt
z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a<fJbF^|4I#xQ~n$Dc=
zKYhjYmgz5NSkDm8*fZm{6U!;YX`NG>(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C
z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB
zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe
zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0
z?2xS?_ve_-k<Mujg;0Lz*3buG=3$G&ehepthlN*$KaOySSQ^nWmo<0M+(UEUMEXRQ
zMBbZcF;6+KElM>iKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$
z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4
z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu
zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu
z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E
ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw
zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX
z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i&
z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01
z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R
z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw
zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD
zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3|
zawq-H%e&ckC+@AhPrP6BK<z=<L*0kfKU@CX*zeqbYQT4(^U>T#_XdT7&;F71j}Joy
zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z
zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot<a{81DF0~rvGr5Xr~8u`lav1h
z1DNytV>2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F}
z00056Nkl<Zc-rih!D<>&6o$V$PBczUvnbMq!mLWfKuV!4f-8N7E}WH8vM|s^S4m%?
zkKiJ~RYiOTNdpoH*@OgfVO>;^25~kaq!XE$)6HZT$V?-_MGhS9UHtdn|8UO#UnL?e
zQ)nz%EFB>|EKn(Rw|xt|0z4oATmXL_Iv;j4^a$j)0M+ewzn0784d51dS+CcBG#ZT~
z;KhA)04{I^oQEnrEc3}^a*$4^&3HT>1Hvjna~#LDZToj7lli<*Lcn3rqT7gLVE{Kk
zY2ia%EEc~grAkVvQm51T39NgbC%*5W0N;R5z^?E6$DZfO|A<D9h<^vH0)K%tpwH*?
zzNTsWi9});U~JcQZP#^EhG7&U%S=SV=Anoj2kTv)jYgxLe!ss`tJMIoEQ`TlureGD
zw?*VkL{0*1sCORgL;h?wTdP*9Mzh%jpw((osZ>^{)9D)EKeaJBxm<43G|i7d3Wx)#
zY&QELpU-arPSgt@t1<<6<MH@cyWKwR^?H|uLgBS#S?^8Le4~`ofn*ewMIrP(aOq@(
qR>Xkoz|Hp-P3ZZze<pNa{2KrdHt5<CJPp490000<MNUMnLSTaH0r4dO

literal 332
zcmV-S0ki&zP)<h;3K|Lk000e1NJLTq000sI000sQ1^@s6R?d!B0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy?ny*JRCwBA{Qv(y12q5>1C;>P3}OKh
zjEsyhzCD`!K|%(=f`$dk*8^ffpkM>CBA^8g1k8C4#FxNoK_)(Z`gESOw6r3r-T~^n
z57d_gHwXy!QxH6k$X)|^!x72fV1xhs`SXE=g=GVfc>pTq02B)ViV0v1Y#ag2@csMu
zt$ciZ3z38te){x@m6w+{8fWx_0vd*4VppzQIfAYMn;5}#boA&^A!5YPy@mlSEiIiu
zkpsl9p+cfiG13e&G&D3jaNq#*f&~k%g7^su3EDt0V{B?+(ccNgW@JSDDIhLKHfR{;
eeySM+5MTiP>stxO-1&b10000<MNUMnLSTY+vVf}q

diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index f7b0bb4629f..a75d38d9671 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -535,15 +535,6 @@
   <texture name="move_down_in.tga" preload="false" />
   <texture name="move_down_out.tga" preload="false" />
 
-  <texture name="tool_grab.tga" />
-  <texture name="tool_grab_active.tga" />
-
-  <texture name="tool_face.tga" />
-  <texture name="tool_face_active.tga" />
-
-  <texture name="tool_create.tga" />
-  <texture name="tool_create_active.tga" />
-
   <texture name="up_arrow.tga" file_name="up_arrow.png" />
   <texture name="down_arrow.tga" file_name="down_arrow.png" />
 
@@ -608,54 +599,6 @@
   <texture name="icon_popular.tga" />
   <texture name="icon_top_pick.tga" />
 
-  <texture name="inv_folder_animation.tga" />
-  <texture name="inv_folder_bodypart.tga" />
-  <texture name="inv_folder_callingcard.tga" />
-  <texture name="inv_folder_clothing.tga" />
-  <texture name="inv_folder_current_outfit.tga" />
-  <texture name="inv_folder_gesture.tga" />
-  <texture name="inv_folder_landmark.tga" />
-  <texture name="inv_folder_lostandfound.tga" />
-  <texture name="inv_folder_my_outfits.tga" />
-  <texture name="inv_folder_notecard.tga" />
-  <texture name="inv_folder_object.tga" />
-  <texture name="inv_folder_outfit.tga" />
-  <texture name="inv_folder_plain_closed.tga" />
-  <texture name="inv_folder_script.tga" />
-  <texture name="inv_folder_snapshot.tga" />
-  <texture name="inv_folder_sound.tga" />
-  <texture name="inv_folder_texture.tga" />
-  <texture name="inv_folder_trash.tga" />
-
-  <texture name="inv_item_animation.tga" />
-  <texture name="inv_item_skin.tga" />
-  <texture name="inv_item_callingcard_offline.tga" />
-  <texture name="inv_item_callingcard_online.tga" />
-  <texture name="inv_item_eyes.tga" />
-  <texture name="inv_item_gesture.tga" />
-  <texture name="inv_item_gloves.tga" />
-  <texture name="inv_item_hair.tga" />
-  <texture name="inv_item_jacket.tga" />
-  <texture name="inv_item_landmark.tga" />
-  <texture name="inv_item_landmark_visited.tga" />
-  <texture name="inv_item_linkitem.tga" />
-  <texture name="inv_item_linkfolder.tga" />
-  <texture name="inv_item_notecard.tga" />
-  <texture name="inv_item_object.tga" />
-  <texture name="inv_item_object_multi.tga" />
-  <texture name="inv_item_pants.tga" />
-  <texture name="inv_item_script.tga" />
-  <texture name="inv_item_shape.tga" />
-  <texture name="inv_item_shirt.tga" />
-  <texture name="inv_item_shoes.tga" />
-  <texture name="inv_item_skirt.tga" />
-  <texture name="inv_item_snapshot.tga" />
-  <texture name="inv_item_socks.tga" />
-  <texture name="inv_item_sound.tga" />
-  <texture name="inv_item_texture.tga" />
-  <texture name="inv_item_underpants.tga" />
-  <texture name="inv_item_undershirt.tga" />
-
   <texture name="lag_status_critical.tga" />
   <texture name="lag_status_good.tga" />
   <texture name="lag_status_warning.tga" />
@@ -682,37 +625,6 @@
   <texture name="notify_next.png" preload="true" />
   <texture name="notify_box_icon.tga" />
 
-  <texture name="object_cone.tga" />
-  <texture name="object_cone_active.tga" />
-  <texture name="object_cube.tga" />
-  <texture name="object_cube_active.tga" />
-  <texture name="object_cylinder.tga" />
-  <texture name="object_cylinder_active.tga" />
-  <texture name="object_grass.tga" />
-  <texture name="object_grass_active.tga" />
-  <texture name="object_hemi_cone.tga" />
-  <texture name="object_hemi_cone_active.tga" />
-  <texture name="object_hemi_cylinder.tga" />
-  <texture name="object_hemi_cylinder_active.tga" />
-  <texture name="object_hemi_sphere.tga" />
-  <texture name="object_hemi_sphere_active.tga" />
-  <texture name="object_prism.tga" />
-  <texture name="object_prism_active.tga" />
-  <texture name="object_pyramid.tga" />
-  <texture name="object_pyramid_active.tga" />
-  <texture name="object_ring.tga" />
-  <texture name="object_ring_active.tga" />
-  <texture name="object_sphere.tga" />
-  <texture name="object_sphere_active.tga" />
-  <texture name="object_tetrahedron.tga" />
-  <texture name="object_tetrahedron_active.tga" />
-  <texture name="object_torus.tga" />
-  <texture name="object_torus_active.tga" />
-  <texture name="object_tree.tga" />
-  <texture name="object_tree_active.tga" />
-  <texture name="object_tube.tga" />
-  <texture name="object_tube_active.tga" />
-
   <texture name="pixiesmall.j2c" use_mips="true" />
   <texture name="script_error.j2c" use_mips="true" />
   <texture name="silhouette.j2c" use_mips="true" />
@@ -728,11 +640,6 @@
   <texture name="status_no_push.tga" />
   <texture name="status_no_scripts.tga" />
 
-  <texture name="tool_dozer.tga" />
-  <texture name="tool_dozer_active.tga" />
-  <texture name="tool_zoom.tga" />
-  <texture name="tool_zoom_active.tga" />
-
   <texture name="icn_active-speakers-dot-lvl0.tga" />
   <texture name="icn_active-speakers-dot-lvl1.tga" />
   <texture name="icn_active-speakers-dot-lvl2.tga" />
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 9bf3458d298..7b473ee2192 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -10,7 +10,7 @@
  left="0"
  name="bottom_tray"
  top="28"
- chrome="true" 
+ chrome="true"
  border_visible="false"
  width="1000">
     <layout_stack
@@ -124,7 +124,7 @@
          layout="topleft"
          min_height="28"
          name="movement_panel"
-         width="76"
+         width="80"
          min_width="76">
             <button
              follows="left|right"
@@ -136,7 +136,7 @@
              name="movement_btn"
              tool_tip="Show/hide movement controls"
              top="3"
-             width="76">
+             width="80">
                 <button.init_callback
                  function="Button.SetDockableFloaterToggle"
                  parameter="moveview" />
@@ -175,7 +175,7 @@
              tool_tip="Show/hide camera controls"
              top="3"
              name="camera_btn"
-             width="76">
+             width="80">
                 <button.init_callback
                  function="Button.SetDockableFloaterToggle"
                  parameter="camera" />
@@ -199,28 +199,19 @@
          height="28"
          layout="topleft"
          name="snapshot_panel"
-         width="35">
-            <split_button
-             arrow_position="right"
+         width="40">
+            <button
          follows="left|right"
              height="23"
              left="0"
+             label=""
              layout="topleft"
              name="snapshots"
-             width="46"
-             top="3">
-                <split_button.item
-                 image_overlay="Snapshot_Off"
-                 name="snapshot"
-                 tool_tip="Take snapshot"
-                 />
-                <split_button.arrow_button
-                 name="snapshot_settings"
-                 image_overlay="Widget_UpArrow"
-                 tool_tip="Snapshot and Preset Views"
-                 width="18"
+             width="36"
+             top="3"
+             image_overlay="Snapshot_Off"
+            tool_tip="Take snapshot"
                  />
-            </split_button>
         </layout_panel>
         <layout_panel
          mouse_opaque="false"
-- 
GitLab


From 43c5ab0be2bf165c660439c3449247454d37e368 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 2 Nov 2009 14:11:07 -0800
Subject: [PATCH 017/306] EXT-1744   	 1-click Sit object not spawning an
 object inspector EXT-1810   	 Right clicking own avatar displayed
 semi-transparent menus EXT-1927   	 Hook up Push-to-talk in Preferences >
 Advanced reviewed by richard

---
 indra/newview/llfloaterpreference.cpp         |  4 ++
 indra/newview/llselectmgr.cpp                 |  7 +++
 indra/newview/llselectmgr.h                   |  1 +
 indra/newview/lltoolpie.cpp                   |  8 ++-
 .../xui/en/panel_preferences_advanced.xml     | 51 ++++++++++++-------
 5 files changed, 51 insertions(+), 20 deletions(-)

diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 8b3391726a7..a199da3b00c 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -1043,11 +1043,15 @@ void LLFloaterPreference::onClickSetKey()
 void LLFloaterPreference::setKey(KEY key)
 {
 	childSetValue("modifier_combo", LLKeyboard::stringFromKey(key));
+	// update the control right away since we no longer wait for apply
+	getChild<LLUICtrl>("modifier_combo")->onCommit();
 }
 
 void LLFloaterPreference::onClickSetMiddleMouse()
 {
 	childSetValue("modifier_combo", "MiddleMouse");
+	// update the control right away since we no longer wait for apply
+	getChild<LLUICtrl>("modifier_combo")->onCommit();
 }
 
 void LLFloaterPreference::onClickSkipDialogs()
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index d68897b64f6..759c86f3a02 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -801,6 +801,8 @@ LLObjectSelectionHandle LLSelectMgr::setHoverObject(LLViewerObject *objectp, S32
 		return NULL;
 	}
 
+	mHoverObjects->mPrimaryObject = objectp; 
+
 	objectp = objectp->getRootEdit();
 
 	// is the requested object the same as the existing hover object root?
@@ -834,6 +836,11 @@ LLSelectNode *LLSelectMgr::getHoverNode()
 	return mHoverObjects->getFirstRootNode();
 }
 
+LLSelectNode *LLSelectMgr::getPrimaryHoverNode()
+{
+	return mHoverObjects->mSelectNodeMap[mHoverObjects->mPrimaryObject];
+}
+
 void LLSelectMgr::highlightObjectOnly(LLViewerObject* objectp)
 {
 	if (!objectp)
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index 6e757ef976f..2050a73f267 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -404,6 +404,7 @@ class LLSelectMgr : public LLEditMenuHandler, public LLSingleton<LLSelectMgr>
 
 	LLObjectSelectionHandle setHoverObject(LLViewerObject *objectp, S32 face = -1);
 	LLSelectNode *getHoverNode();
+	LLSelectNode *getPrimaryHoverNode();
 
 	void highlightObjectOnly(LLViewerObject *objectp);
 	void highlightObjectAndFamily(LLViewerObject *objectp);
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 7c17699bf98..b825bde912e 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -598,6 +598,9 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask)
 
 static bool needs_tooltip(LLSelectNode* nodep)
 {
+	if (!nodep) 
+		return false;
+
 	LLViewerObject* object = nodep->getObject();
 	LLViewerObject *parent = (LLViewerObject *)object->getParent();
 	if (object->flagHandleTouch()
@@ -733,7 +736,10 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
 					tooltip_msg.append( nodep->mName );
 				}
 
-				bool needs_tip = needs_tooltip(nodep);
+				// also check the primary node since sometimes it can have an action even though
+				// the root node doesn't
+				bool needs_tip = needs_tooltip(nodep) || 
+					             needs_tooltip(LLSelectMgr::getInstance()->getPrimaryHoverNode());
 
 				if (show_all_object_tips || needs_tip)
 				{
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 91dcdce23bb..b8fc72b7549 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -240,8 +240,8 @@ Avatars:
      width="256"
      top_pad="5"/>
     <radio_group
-	 enabled_control="ShowScriptErrors"
-	 control_name="ShowScriptErrorsLocation"
+     enabled_control="ShowScriptErrors"
+     control_name="ShowScriptErrorsLocation"
      follows="top|left"
      draw_border="false"
      height="40"
@@ -269,6 +269,8 @@ Avatars:
     </radio_group>
      <check_box
      follows="top|left"
+     enabled_control="EnableVoiceChat"
+     control_name="PushToTalkToggle"
      height="20"
      label="Use Push-to-talk in toggle mode"
      layout="topleft"
@@ -279,6 +281,9 @@ Avatars:
      tool_tip="When in toggle mode, press and release the push-to-talk trigger to switch your microphone on and off. When not in toggle mode, the microphone is active only when the trigger is held down."/>
     <line_editor
      follows="top|left"
+     control_name="PushToTalkButton"
+     enabled="false" 
+     enabled_control="EnableVoiceChat"
      height="19"
      left_delta="50"
      max_length="254"
@@ -287,22 +292,30 @@ Avatars:
      top_pad="0"
      width="280" />
     <button
-	follows="top|left"
-	height="20"
-	label="Set Key"
-	left_delta="0"
-        name="set_voice_hotkey_button"
-	width="115"
-	top_pad="5" />
+     follows="top|left"
+     enabled_control="EnableVoiceChat"
+     height="20"
+     label="Set Key"
+     left_delta="0"
+     name="set_voice_hotkey_button"
+     width="115"
+     top_pad="5">
+          <button.commit_callback
+          function="Pref.VoiceSetKey" />
+    </button>
     <button
-        bottom_delta="0"
-	follows="left"
-	font="SansSerif"
-	halign="center"
-	height="20"
-	label="Middle Mouse Button"
-	left_delta="120"
-	mouse_opaque="true"
-	name="set_voice_middlemouse_button"
-	width="160" />
+     bottom_delta="0"
+     enabled_control="EnableVoiceChat"
+     follows="left"
+     font="SansSerif"
+     halign="center"
+     height="20"
+     label="Middle Mouse Button"
+     left_delta="120"
+     mouse_opaque="true"
+     name="set_voice_middlemouse_button"
+     width="160">
+          <button.commit_callback
+          function="Pref.VoiceSetMiddleMouse" />
+    </button>
 </panel>
-- 
GitLab


From 2a79326ff63d26f6f7d51ae195dfc7ab4600b407 Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Mon, 2 Nov 2009 14:23:40 -0800
Subject: [PATCH 018/306] Removed tabs. Fixed errant 'else(APPLE)'

---
 indra/cmake/LLSharedLibs.cmake | 44 +++++++++++++++++-----------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake
index 3be22ab4012..a8c81609bb9 100644
--- a/indra/cmake/LLSharedLibs.cmake
+++ b/indra/cmake/LLSharedLibs.cmake
@@ -3,29 +3,29 @@
 # search_dirs: a list of dirs to search for the dependencies
 # dst_path: path to copy deps to, relative to the output location of the target_exe
 macro(ll_deploy_sharedlibs_command target_exe search_dirs dst_path) 
-	get_target_property(OUTPUT_LOCATION ${target_exe} LOCATION)
+  get_target_property(OUTPUT_LOCATION ${target_exe} LOCATION)
 
-	if(DARWIN)
-	  get_target_property(IS_BUNDLE ${target_exe} MACOSX_BUNDLE)
-	  if(IS_BUNDLE)
-		get_filename_component(TARGET_FILE ${OUTPUT_LOCATION} NAME)
-		set(OUTPUT_PATH ${OUTPUT_LOCATION}.app/Contents/MacOS)
-		set(OUTPUT_LOCATION ${OUTPUT_PATH}/${TARGET_FILE})
-	  endif(IS_BUNDLE)
-	else(APPLE)
-	  message(FATAL_ERROR "Only darwin currently supported!")
-	endif(DARWIN)
-
-	add_custom_command(
-	  TARGET ${target_exe} POST_BUILD
-	  COMMAND ${CMAKE_COMMAND} 
-	  ARGS
-        "-DBIN_NAME=\"${OUTPUT_LOCATION}\""
-		"-DSEARCH_DIRS=\"${search_dirs}\""
-		"-DDST_PATH=\"${OUTPUT_PATH}/${dst_path}\""
-		"-P"
-		"${CMAKE_SOURCE_DIR}/cmake/DeploySharedLibs.cmake"
-	  )
+  if(DARWIN)
+    get_target_property(IS_BUNDLE ${target_exe} MACOSX_BUNDLE)
+    if(IS_BUNDLE)
+      get_filename_component(TARGET_FILE ${OUTPUT_LOCATION} NAME)
+      set(OUTPUT_PATH ${OUTPUT_LOCATION}.app/Contents/MacOS)
+      set(OUTPUT_LOCATION ${OUTPUT_PATH}/${TARGET_FILE})
+    endif(IS_BUNDLE)
+  else(DARWIN)
+    message(FATAL_ERROR "Only darwin currently supported!")
+  endif(DARWIN)
+  
+  add_custom_command(
+    TARGET ${target_exe} POST_BUILD
+    COMMAND ${CMAKE_COMMAND} 
+    ARGS
+    "-DBIN_NAME=\"${OUTPUT_LOCATION}\""
+    "-DSEARCH_DIRS=\"${search_dirs}\""
+    "-DDST_PATH=\"${OUTPUT_PATH}/${dst_path}\""
+    "-P"
+    "${CMAKE_SOURCE_DIR}/cmake/DeploySharedLibs.cmake"
+    )
 
 endmacro(ll_deploy_sharedlibs_command)
 
-- 
GitLab


From 88ec0b0dca6c20d149e0cd5dc466d723964b02bd Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Mon, 2 Nov 2009 17:26:39 -0500
Subject: [PATCH 019/306] Main Inventory Panel layout fixes.

--HG--
branch : avatar-pipeline
---
 .../default/xui/en/panel_main_inventory.xml      | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index b6218ad932e..fa73965fafe 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -8,7 +8,7 @@
  min_height="350"
  min_width="240"
  name="inventory panel"
- width="333">
+ width="330">
     <panel.string
      name="Title">
         Things
@@ -26,31 +26,31 @@
      width="300" />
     <tab_container
      follows="left|top|right|bottom"
-     height="508"
+     height="300"
      layout="topleft"
      left_delta="-4"
      name="inventory filter tabs"
      tab_position="top"
      top_pad="4"
-     width="463">
+     width="305">
         <inventory_panel
          follows="left|top|right|bottom"
-         height="491"
+         height="295"
          label="All Items"
          layout="topleft"
          left="1"
          name="All Items"
          top="16"
-         width="461" />
+         width="290" />
         <inventory_panel
          follows="left|top|right|bottom"
-         height="491"
+         height="295"
          label="Recent Items"
          layout="topleft"
          left_delta="0"
          name="Recent Items"
          top_delta="0"
-         width="461" />
+         width="290" />
     </tab_container>
     <menu_bar
      bg_visible="false"
@@ -61,7 +61,7 @@
      mouse_opaque="false"
      name="Inventory Menu"
      top_delta="-38"
-     width="461">
+     width="290">
         <menu
          height="101"
          label="File"
-- 
GitLab


From 03ff3dc57d4650c5451c2b304a2ee6fbee3ff74e Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 2 Nov 2009 14:58:24 -0800
Subject: [PATCH 020/306] Added hand-cursor to clickable text boxes, fixed
 hover_color warnings for login screen. Reviewed with Richard.

---
 indra/llui/lltextbox.cpp                      | 26 +++++++++++++++
 indra/llui/lltextbox.h                        | 21 +++++-------
 .../skins/default/xui/en/panel_login.xml      | 33 -------------------
 3 files changed, 34 insertions(+), 46 deletions(-)

diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp
index 20bceb46756..00f1d833a30 100644
--- a/indra/llui/lltextbox.cpp
+++ b/indra/llui/lltextbox.cpp
@@ -45,6 +45,9 @@ LLTextBox::LLTextBox(const LLTextBox::Params& p)
 	mClickedCallback(NULL)
 {}
 
+LLTextBox::~LLTextBox()
+{}
+
 BOOL LLTextBox::handleMouseDown(S32 x, S32 y, MASK mask)
 {
 	BOOL	handled = LLTextBase::handleMouseDown(x, y, mask);
@@ -97,6 +100,18 @@ BOOL LLTextBox::handleMouseUp(S32 x, S32 y, MASK mask)
 	return handled;
 }
 
+BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask)
+{
+	BOOL handled = LLTextBase::handleHover(x, y, mask);
+	if (!handled && mClickedCallback)
+	{
+		// Clickable text boxes change the cursor to a hand
+		LLUI::getWindow()->setCursor(UI_CURSOR_HAND);
+		return TRUE;
+	}
+	return handled;
+}
+
 void LLTextBox::setText(const LLStringExplicit& text)
 {
 	// does string argument insertion
@@ -105,6 +120,11 @@ void LLTextBox::setText(const LLStringExplicit& text)
 	LLTextBase::setText(mText.getString());
 }
 
+void LLTextBox::setClickedCallback( boost::function<void (void*)> cb, void* userdata /*= NULL */ )
+{
+	mClickedCallback = boost::bind(cb, userdata);
+}
+
 S32 LLTextBox::getTextPixelWidth()
 {
 	return getContentsRect().getWidth();
@@ -115,6 +135,12 @@ S32 LLTextBox::getTextPixelHeight()
 	return getContentsRect().getHeight();
 }
 
+
+LLSD LLTextBox::getValue() const
+{
+	return LLSD(getText());
+}
+
 BOOL LLTextBox::setTextArg( const std::string& key, const LLStringExplicit& text )
 {
 	mText.setArg(key, text);
diff --git a/indra/llui/lltextbox.h b/indra/llui/lltextbox.h
index da0bcbe972d..73f8a7c299e 100644
--- a/indra/llui/lltextbox.h
+++ b/indra/llui/lltextbox.h
@@ -33,8 +33,6 @@
 #ifndef LL_LLTEXTBOX_H
 #define LL_LLTEXTBOX_H
 
-#include "v4color.h"
-#include "llstring.h"
 #include "lluistring.h"
 #include "lltextbase.h"
 
@@ -54,28 +52,25 @@ class LLTextBox :
 	friend class LLUICtrlFactory;
 
 public:
-	virtual ~LLTextBox() {}
+	virtual ~LLTextBox();
 
-	virtual BOOL	handleMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL	handleMouseUp(S32 x, S32 y, MASK mask);
+	/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+	/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
+	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
 
-	/*virtual*/ void			setText( const LLStringExplicit& text );
+	/*virtual*/ void setText( const LLStringExplicit& text );
 	
 	void			setRightAlign()							{ mHAlign = LLFontGL::RIGHT; }
 	void			setHAlign( LLFontGL::HAlign align )		{ mHAlign = align; }
-	void			setClickedCallback( boost::function<void (void*)> cb, void* userdata = NULL ){ mClickedCallback = boost::bind(cb, userdata); }		// mouse down and up within button
-
-	//const LLFontGL* getFont() const							{ return mDefaultFont; }
-	//void			setFont(const LLFontGL* font)			{ mDefaultFont = font; }
+	void			setClickedCallback( boost::function<void (void*)> cb, void* userdata = NULL );
 
 	void			reshapeToFitText();
 
-	//const std::string&	getText() const							{ return mText.getString(); }
 	S32				getTextPixelWidth();
 	S32				getTextPixelHeight();
 
-	virtual LLSD	getValue() const						{ return LLSD(getText()); }
-	virtual BOOL	setTextArg( const std::string& key, const LLStringExplicit& text );
+	/*virtual*/ LLSD	getValue() const;
+	/*virtual*/ BOOL	setTextArg( const std::string& key, const LLStringExplicit& text );
 
 protected:
 	void            onUrlLabelUpdated(const std::string &url, const std::string &label);
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index afe00271f7c..317c79e08f4 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -23,19 +23,15 @@
      border_visible="false"
      bottom="600"
      follows="all"
-     layout="topleft"
      left="0"
      name="login_html"
      right="-1"
      start_url=""
      top="1" />
     <text
-     type="string"
-     length="1"
      follows="left|bottom"
      font="SansSerif"
      height="16"
-     layout="topleft"
      left="32"
      name="first_name_text"
      top="530"
@@ -46,7 +42,6 @@
      follows="left|bottom"
      handle_edit_keys_directly="true"
      height="20"
-     layout="topleft"
      left_delta="0"
      max_length="31"
      name="first_name_edit"
@@ -55,12 +50,9 @@
      top_pad="2"
      width="120" />
     <text
-     type="string"
-     length="1"
      follows="left|bottom"
      font="SansSerif"
      height="16"
-     layout="topleft"
      left="164"
      name="last_name_text"
      top="530"
@@ -72,7 +64,6 @@
      font="SansSerif"
      handle_edit_keys_directly="true"
      height="20"
-     layout="topleft"
      left_delta="0"
      max_length="31"
      name="last_name_edit"
@@ -81,12 +72,9 @@
      top_pad="2"
      width="120" />
     <text
-     type="string"
-     length="1"
      follows="left|bottom"
      font="SansSerif"
      height="16"
-     layout="topleft"
      left="296"
      name="password_text"
      top="530"
@@ -98,7 +86,6 @@
      font="SansSerif"
      handle_edit_keys_directly="true"
      height="20"
-     layout="topleft"
      left_delta="0"
      max_length="16"
      name="password_edit"
@@ -124,12 +111,9 @@
      name="server_combo"
      width="100" />
     <text
-     type="string"
-     length="1"
      follows="left|bottom"
      font="SansSerif"
      height="16"
-     layout="topleft"
      left="32"
      name="start_location_text"
      top="576"
@@ -141,7 +125,6 @@
      control_name="LoginLocation"
      follows="left|bottom"
      height="23"
-     layout="topleft"
      left_pad="0"
      max_chars="128"
      name="start_location_combo"
@@ -165,20 +148,14 @@
      follows="left|bottom"
      height="16"
      label="Remember password"
-     layout="topleft"
      left_pad="10"
      name="remember_check"
      top_delta="3"
      width="138" />
     <text
-     type="string"
-     length="1"
      follows="right|bottom"
      halign="right"
      height="16"
-     hover="true"
-     hover_color="0.2 0.45 0.72 1"
-     layout="topleft"
      left="-210"
      name="create_new_account_text"
      top="539"
@@ -186,14 +163,9 @@
         Create a new account
     </text>
     <text
-     type="string"
-     length="1"
      follows="right|bottom"
      halign="right"
      height="16"
-     hover="true"
-     hover_color="0.2 0.45 0.72 1"
-     layout="topleft"
      left_delta="0"
      name="forgot_password_text"
      top_pad="4"
@@ -201,14 +173,9 @@
         Forgot your name or password?
     </text>
     <text
-     type="string"
-     length="1"
      follows="right|bottom"
      halign="right"
      height="16"
-     hover="true"
-     hover_color="0.2 0.45 0.72 1"
-     layout="topleft"
      left="-310"
      name="channel_text"
      top="579"
-- 
GitLab


From a6b6ca9a24cbc1bfe0b3e45602e1eda1e1e9c8f9 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Mon, 2 Nov 2009 14:58:39 -0800
Subject: [PATCH 021/306] made floater close/minimize buttons "chrome" so they
 don't take keyboard focus removed LLHudView::colorFromType which was unused

reviewed by James
---
 indra/llui/llfloater.cpp       |  1 +
 indra/newview/llhudview.cpp    | 14 --------------
 indra/newview/llhudview.h      |  2 --
 indra/newview/llviewermenu.cpp |  1 -
 4 files changed, 1 insertion(+), 17 deletions(-)

diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 8c72b079eee..26a8b6c48f8 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -1839,6 +1839,7 @@ void LLFloater::buildButtons()
 		p.follows.flags(FOLLOWS_TOP|FOLLOWS_RIGHT);
 		p.tool_tip(sButtonToolTips[i]);
 		p.scale_image(true);
+		p.chrome(true);
 
 		LLButton* buttonp = LLUICtrlFactory::create<LLButton>(p);
 		addChild(buttonp);
diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp
index 027cd2ab077..261d9f1df78 100644
--- a/indra/newview/llhudview.cpp
+++ b/indra/newview/llhudview.cpp
@@ -71,20 +71,6 @@ void LLHUDView::draw()
 	LLView::draw();
 }
 
-
-// public
-const LLColor4& LLHUDView::colorFromType(S32 type)
-{
-	switch (type)
-	{
-	case 0:
-		return LLColor4::green;
-	default:
-		return LLColor4::black;
-	}
-}
-
-
 /*virtual*/
 BOOL LLHUDView::handleMouseDown(S32 x, S32 y, MASK mask)
 {
diff --git a/indra/newview/llhudview.h b/indra/newview/llhudview.h
index 05ff9c8596b..0946e2c5c83 100644
--- a/indra/newview/llhudview.h
+++ b/indra/newview/llhudview.h
@@ -47,8 +47,6 @@ class LLHUDView
 
 	virtual void draw();
 
-	const LLColor4& colorFromType(S32 type);
-
 protected:
 	/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
 };
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 864cf9d57bb..c801ffc01e9 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -145,7 +145,6 @@
 #include "llmenucommands.h"
 #include "llmenugl.h"
 #include "llmimetypes.h"
-#include "llmorphview.h"
 #include "llmoveview.h"
 #include "llmutelist.h"
 #include "llnotify.h"
-- 
GitLab


From da3f4c402dd95e52186309af925b41ee946ef3dc Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Mon, 2 Nov 2009 18:01:39 -0500
Subject: [PATCH 022/306] MainInventory aesthetic fixes.

--HG--
branch : avatar-pipeline
---
 .../skins/default/xui/en/panel_main_inventory.xml      |  2 +-
 indra/newview/skins/default/xui/en/panel_side_tray.xml |  1 +
 .../skins/default/xui/en/sidepanel_inventory.xml       | 10 +++++-----
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index fa73965fafe..c50278ff8cc 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -60,7 +60,7 @@
      left_delta="0"
      mouse_opaque="false"
      name="Inventory Menu"
-     top_delta="-38"
+     top_delta="-45"
      width="290">
         <menu
          height="101"
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml
index 190dbe2b0fe..777d5b48fe8 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml
@@ -134,6 +134,7 @@
     tab_title="Inventory"
     description="Browse your inventory."
     image="TabIcon_Inventory_Off"
+    image_selected="TabIcon_Inventory_Selected"
     mouse_opaque="false"
     background_visible="true"
   >
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index 3b3fbcb936e..79a1cc945d0 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -3,7 +3,7 @@
  background_visible="true"
  follows="all"
  height="400"
- label="Places"
+ label="Things"
  layout="topleft"
  min_height="350"
  min_width="240"
@@ -11,12 +11,12 @@
  width="333">
     <tab_container
      follows="all"
-     height="360"
+     height="390"
      layout="topleft"
      left="9"
      name="Inventory Tabs"
      tab_position="top"
-     top="30"
+     top="0"
      width="313"
 	 tab_height="0"
 	 visible="true">
@@ -29,7 +29,7 @@
 		  name="panel_main_inventory"
 		  top="15"
 		  label=""
-		  height="300"
+		  height="330"
 		  width="467">
     <panel
      height="25"
@@ -37,7 +37,7 @@
      left="0"
      help_topic="objects_button_tab"
      name="button_panel"
-	 bottom="5"
+	 bottom="0"
      width="313">
         <button
          enabled="true"
-- 
GitLab


From 44eea89d001ccb09343dda973af0dabecb1ec48d Mon Sep 17 00:00:00 2001
From: Rick Pasetto <rick@lindenlab.com>
Date: Mon, 2 Nov 2009 15:10:08 -0800
Subject: [PATCH 023/306] Make the "default hover controls" be the "authored"
 controls (and I made a debug setting that can override this)

---
 indra/newview/app_settings/settings.xml    | 12 +++++++++++-
 indra/newview/llpanelprimmediacontrols.cpp |  9 ++++++---
 indra/newview/llviewermedia.h              |  2 +-
 3 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index c4722b772e1..768fdd41030 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5294,7 +5294,6 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-
     <key>PluginInstancesCPULimit</key>
     <map>
       <key>Comment</key>
@@ -5360,6 +5359,17 @@
       <string>U32</string>
       <key>Value</key>
 	  <integer>13</integer>
+    </map>
+	<key>PrimMediaControlsUseHoverControlSet</key>
+	<map>
+	  <key>Comment</key>
+      <string>Whether or not hovering over prim media uses minimal "hover" controls or the authored control set.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
     </map>
     <key>PrimMediaMaxRetries</key>
     <map>
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index e4b32c4820d..58ca481b77b 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -228,7 +228,10 @@ void LLPanelPrimMediaControls::updateShape()
 
 	bool can_navigate = parcel->getMediaAllowNavigate();
 	bool enabled = false;
-	bool has_focus = media_impl->hasFocus();
+	// There is no such thing as "has_focus" being different from normal controls set
+	// anymore (as of user feedback from bri 10/09).  So we cheat here and force 'has_focus'
+	// to 'true' (or, actually, we use a setting)
+	bool has_focus = (gSavedSettings.getBOOL("PrimMediaControlsUseHoverControlSet")) ? media_impl->hasFocus() : true;
 	setVisible(enabled);
 
 	if (objectp)
@@ -310,8 +313,8 @@ void LLPanelPrimMediaControls::updateShape()
 			fwd_ctrl->setEnabled(has_focus);
 			media_address_ctrl->setVisible(false);
 			media_address_ctrl->setEnabled(false);
-			media_play_slider_panel->setVisible(!mini_controls);
-			media_play_slider_panel->setEnabled(!mini_controls);
+			media_play_slider_panel->setVisible(has_focus && !mini_controls);
+			media_play_slider_panel->setEnabled(has_focus && !mini_controls);
 				
 			volume_ctrl->setVisible(has_focus);
 			volume_up_ctrl->setVisible(has_focus);
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 517a76ce3dd..d6dde0c93e3 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -258,7 +258,7 @@ class LLViewerMediaImpl
 	void calculateInterest();
 	F64 getInterest() const { return mInterest; };
 	F64 getApproximateTextureInterest();
-	S32 getProximity() { return mProximity; };
+	S32 getProximity() const { return mProximity; };
 	
 	// Mark this object as being used in a UI panel instead of on a prim
 	// This will be used as part of the interest sorting algorithm.
-- 
GitLab


From 8af4e3359cb01f62089787aba7a436b7856d6098 Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Mon, 2 Nov 2009 23:44:21 +0000
Subject: [PATCH 024/306] EXT-1588: Remove support for automatic hyperlinking
 of URLs in notecards until this issue can be addressed correctly.

The best solution would be to implement support for alternative
display strings for URL text segments. That way, the raw text will
contain the original URL string, but we can show a display-only
alternate label for the URL. Until I get round to doing this, I'm
turning off URL hyperlinking in notecards to avoid the potential
for data loss.
---
 indra/newview/skins/default/xui/en/floater_preview_notecard.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
index 37970550548..b44de8e1782 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
@@ -75,7 +75,7 @@
      left="4"
      max_length="65536"
      name="Notecard Editor"
-     allow_html="true" 
+     allow_html="false" 
      handle_edit_keys_directly="true"
      tab_group="1"
      top="46"
-- 
GitLab


From f344c5b7ecf721329ef87044eeec06c6669618d8 Mon Sep 17 00:00:00 2001
From: "Eric M. Tulla (BigPapi)" <tulla@lindenlab.com>
Date: Mon, 2 Nov 2009 18:50:50 -0500
Subject: [PATCH 025/306] Fix for EXT-894: upload anim preview was using bad
 texture data instead of grey. Switched rendering of dummy mesh for previews
 (anim, etc) to use default image, instead of default avatar image. -Reviewed
 by nyx

---
 indra/newview/llviewerjointmesh.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
index cd60a8d5606..5b8902dec48 100644
--- a/indra/newview/llviewerjointmesh.cpp
+++ b/indra/newview/llviewerjointmesh.cpp
@@ -582,7 +582,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)
 	}
 	else
 	{
-		gGL.getTexUnit(0)->bind(LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR));
+		gGL.getTexUnit(0)->bind(LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT));
 	}
 	
 	if (gRenderForSelect)
-- 
GitLab


From a100a6e07f8b6ea16313e25e3249736228d9b03c Mon Sep 17 00:00:00 2001
From: "Nyx (Neal Orman)" <nyx@lindenlab.com>
Date: Mon, 2 Nov 2009 19:05:20 -0500
Subject: [PATCH 026/306] EXT-1947 EXT-1945 EXT-1919 EXT-2088 appearance edit
 dummy param + animation fix

Several fixes here:
1) minor rename in argument of setIsDummy
2) corrected parameter set_by_user to calls of setVisualParamWeight where we
   shouldn't be animating
3) ensured finally that mIsDummy is set properly for all wearable parameters
4) ensured that mIsDUmmy is set properly for non-wearable based parameters on
   your own avatar

Code reviewed by Bigpapi
---
 indra/llcharacter/llvisualparam.h       |  2 +-
 indra/newview/lldriverparam.cpp         |  1 -
 indra/newview/llscrollingpanelparam.cpp |  8 ++++----
 indra/newview/llvoavatarself.cpp        |  5 ++++-
 indra/newview/llwearable.cpp            | 19 ++++++-------------
 5 files changed, 15 insertions(+), 20 deletions(-)

diff --git a/indra/llcharacter/llvisualparam.h b/indra/llcharacter/llvisualparam.h
index affc49debfe..eec56d78443 100644
--- a/indra/llcharacter/llvisualparam.h
+++ b/indra/llcharacter/llvisualparam.h
@@ -151,7 +151,7 @@ class LLVisualParam
 	virtual void			setAnimating(BOOL is_animating) { mIsAnimating = is_animating && !mIsDummy; }
 	BOOL					getAnimating() const { return mIsAnimating; }
 
-	void					setIsDummy(BOOL is_self) { mIsDummy = is_self; }
+	void					setIsDummy(BOOL is_dummy) { mIsDummy = is_dummy; }
 
 protected:
 	F32					mCurWeight;			// current weight
diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp
index 527656ab6b8..45f4b4fbd04 100644
--- a/indra/newview/lldriverparam.cpp
+++ b/indra/newview/lldriverparam.cpp
@@ -224,7 +224,6 @@ void LLDriverParam::setAvatar(LLVOAvatar *avatarp)
 		}
 	}
 	*new_param = *this;
-	new_param->setIsDummy(FALSE);
 	return new_param;
 }
 
diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp
index 0a520ff65fb..1fbaeb94f53 100644
--- a/indra/newview/llscrollingpanelparam.cpp
+++ b/indra/newview/llscrollingpanelparam.cpp
@@ -209,7 +209,7 @@ void LLScrollingPanelParam::onSliderMoved(LLUICtrl* ctrl, void* userdata)
 	F32 new_weight = self->percentToWeight( (F32)slider->getValue().asReal() );
 	if (current_weight != new_weight )
 	{
-		self->mWearable->setVisualParamWeight( param->getID(), new_weight, TRUE );
+		self->mWearable->setVisualParamWeight( param->getID(), new_weight, FALSE );
 		gAgent.getAvatarObject()->updateVisualParams();
 	}
 }
@@ -298,7 +298,7 @@ void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint )
 			if (slider->getMinValue() < new_percent
 				&& new_percent < slider->getMaxValue())
 			{
-				mWearable->setVisualParamWeight( hint->getVisualParam()->getID(), new_weight, TRUE);
+				mWearable->setVisualParamWeight( hint->getVisualParam()->getID(), new_weight, FALSE);
 				gAgent.getAvatarObject()->updateVisualParams();
 
 				slider->setValue( weightToPercent( new_weight ) );
@@ -330,7 +330,7 @@ void LLScrollingPanelParam::onHintMinMouseUp( void* userdata )
 			if (slider->getMinValue() < new_percent
 				&& new_percent < slider->getMaxValue())
 			{
-				self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, TRUE);
+				self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, FALSE);
 				slider->setValue( self->weightToPercent( new_weight ) );
 			}
 		}
@@ -364,7 +364,7 @@ void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata )
 				if (slider->getMinValue() < new_percent
 					&& new_percent < slider->getMaxValue())
 				{
-					self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, TRUE);
+					self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, FALSE);
 					slider->setValue( self->weightToPercent( new_weight ) );
 				}
 			}
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 758db538a28..34e6b0f89e4 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -205,7 +205,10 @@ void LLVOAvatarSelf::markDead()
 		 param;
 		 param = (LLViewerVisualParam*) getNextVisualParam())
 	{
-		param->setIsDummy(TRUE);
+		if (param->getWearableType() != WT_INVALID)
+		{
+			param->setIsDummy(TRUE);
+		}
 	}
 
 	return success;
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 4cd29bb8386..c32fc2bae15 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -60,7 +60,7 @@ static std::string asset_id_to_filename(const LLUUID &asset_id);
 
 LLWearable::LLWearable(const LLTransactionID& transaction_id) :
 	mDefinitionVersion(LLWearable::sCurrentDefinitionVersion),
-	mType(WT_SHAPE)
+	mType(WT_INVALID)
 {
 	mTransactionID = transaction_id;
 	mAssetID = mTransactionID.makeAssetID(gAgent.getSecureSessionID());
@@ -68,7 +68,7 @@ LLWearable::LLWearable(const LLTransactionID& transaction_id) :
 
 LLWearable::LLWearable(const LLAssetID& asset_id) :
 	mDefinitionVersion( LLWearable::sCurrentDefinitionVersion ),
-	mType(WT_SHAPE)
+	mType(WT_INVALID)
 {
 	mAssetID = asset_id;
 	mTransactionID.setNull();
@@ -181,13 +181,7 @@ void LLWearable::createVisualParams()
 	{
 		if (param->getWearableType() == mType)
 		{
-			if (mVisualParamIndexMap[param->getID()])
-			{
-				delete mVisualParamIndexMap[param->getID()];
-			}
-			LLViewerVisualParam *new_param = param->cloneParam(this);
-			new_param->setIsDummy(FALSE);
-			mVisualParamIndexMap[param->getID()] = new_param;
+			addVisualParam(param->cloneParam(this));
 		}
 	}
 
@@ -750,7 +744,8 @@ void LLWearable::copyDataFrom(const LLWearable* src)
 	mDescription = src->mDescription;
 	mPermissions = src->mPermissions;
 	mSaleInfo = src->mSaleInfo;
-	mType = src->mType;
+
+	setType(src->mType);
 
 	mSavedVisualParamMap.clear();
 	// Deep copy of mVisualParamMap (copies only those params that are current, filling in defaults where needed)
@@ -763,9 +758,6 @@ void LLWearable::copyDataFrom(const LLWearable* src)
 			S32 id = param->getID();
 			F32 weight = src->getVisualParamWeight(id);
 			mSavedVisualParamMap[id] = weight;
-			
-			// Clones a visual param from src and adds it to this wearable. Value of param is taken from current value of source param, not saved.
-			addVisualParam(param->cloneParam(this));
 		}
 	}
 
@@ -860,6 +852,7 @@ void LLWearable::addVisualParam(LLVisualParam *param)
 	{
 		delete mVisualParamIndexMap[param->getID()];
 	}
+	param->setIsDummy(FALSE);
 	mVisualParamIndexMap[param->getID()] = param;
 }
 
-- 
GitLab


From 2f2bdd83d6e078fb6cdcbb0ba0a9eaa38d45cc90 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Tue, 3 Nov 2009 00:47:23 +0000
Subject: [PATCH 027/306] For QAR-2014 : Sandbox for testing FolderTypes
 [VIEWER]

svn merge -r136068:136089   svn+ssh://svn.lindenlab.com/svn/linden/branches/avatar-pipeline/folder-types__merge__viewer2.0.0-3-r135948 into svn+ssh://svn.lindenlab.com/svn/linden/branches/viewer/viewer-2.0.0-3

Infrastructure changes for cleaning up Asset/Folder types.  Associated sim changes are only so that the sim still compiles.
---
 indra/llcommon/CMakeLists.txt                 |   2 +
 indra/llcommon/llassettype.cpp                | 154 +++-------
 indra/llcommon/llassettype.h                  |  62 +----
 indra/llcommon/llfoldertype.cpp               | 165 +++++++++++
 indra/llcommon/llfoldertype.h                 | 123 ++++++++
 indra/llinventory/llinventory.cpp             |  62 +----
 indra/llinventory/llinventory.h               |  13 +-
 indra/llinventory/llinventorytype.cpp         |  34 ---
 indra/llinventory/llinventorytype.h           |   3 +-
 .../llinventory/tests/inventorymisc_test.cpp  |   4 +-
 indra/llmessage/lltransfersourceasset.cpp     |   2 -
 indra/newview/CMakeLists.txt                  |   6 +-
 indra/newview/app_settings/foldertypes.xml    |  25 +-
 indra/newview/llagentwearables.cpp            |  17 +-
 indra/newview/llappearancemgr.cpp             |  22 +-
 indra/newview/llassetuploadresponders.cpp     |   2 +-
 indra/newview/llavataractions.cpp             |   4 +-
 indra/newview/llfavoritesbar.cpp              |   4 +-
 indra/newview/llfloateranimpreview.cpp        |   2 +-
 indra/newview/llfloaterbulkpermission.cpp     |   1 -
 indra/newview/llfloaterbuy.cpp                |   2 +-
 indra/newview/llfloaterbuycontents.cpp        |   2 +-
 indra/newview/llfloaterinventory.cpp          |  27 +-
 indra/newview/llfloaterinventory.h            |   5 +-
 indra/newview/llfloaternamedesc.cpp           |   2 +-
 indra/newview/llfloateropenobject.cpp         |   4 +-
 indra/newview/llfloaterreporter.cpp           |   4 +-
 indra/newview/llfloatersnapshot.cpp           |   2 +-
 indra/newview/llfloaterworldmap.cpp           |   2 +-
 indra/newview/llfolderview.cpp                |   5 +-
 indra/newview/llfolderview.h                  |   2 +-
 indra/newview/llfoldervieweventlistener.h     |   3 +-
 indra/newview/llfolderviewitem.cpp            |  10 +-
 indra/newview/llfriendcard.cpp                |   8 +-
 indra/newview/llinventorybridge.cpp           |  96 +++----
 indra/newview/llinventorybridge.h             |   8 +-
 indra/newview/llinventorymodel.cpp            |  65 ++---
 indra/newview/llinventorymodel.h              |  13 +-
 indra/newview/lllandmarkactions.cpp           |   8 +-
 indra/newview/llpanelcontents.cpp             |   3 +-
 indra/newview/llpanellandmarks.cpp            |   2 +-
 indra/newview/llpanelplaceinfo.cpp            |   8 +-
 indra/newview/llpanelplaces.cpp               |   4 +-
 indra/newview/llpreview.cpp                   |   5 +-
 indra/newview/llpreviewgesture.cpp            |   4 +-
 indra/newview/llresourcedata.h                |   3 +-
 indra/newview/llselectmgr.cpp                 |   2 +-
 indra/newview/llstartup.cpp                   |   6 +-
 indra/newview/lltexturectrl.cpp               |   4 +-
 indra/newview/lltoastgroupnotifypanel.cpp     |   1 -
 indra/newview/lltooldraganddrop.cpp           |  21 +-
 indra/newview/llviewerassettype.cpp           | 114 ++++++++
 indra/newview/llviewerassettype.h             |  54 ++++
 indra/newview/llviewerfoldertype.cpp          | 263 ++++++++++++++++++
 indra/newview/llviewerfoldertype.h            |  57 ++++
 indra/newview/llviewerinventory.cpp           | 112 ++++----
 indra/newview/llviewerinventory.h             |   4 +-
 indra/newview/llviewermenu.cpp                |  13 +-
 indra/newview/llviewermenufile.cpp            |  16 +-
 indra/newview/llviewermenufile.h              |   6 +-
 indra/newview/llviewermessage.cpp             |  36 +--
 indra/newview/llviewertexteditor.cpp          |  20 +-
 indra/newview/llvoavatarself.cpp              |  35 +--
 indra/newview/llwearable.cpp                  |   2 +-
 .../default/textures/inv_folder_inbox.tga     | Bin 0 -> 2085 bytes
 .../skins/default/xui/en/panel_landmarks.xml  |  18 +-
 66 files changed, 1164 insertions(+), 624 deletions(-)
 create mode 100644 indra/llcommon/llfoldertype.cpp
 create mode 100644 indra/llcommon/llfoldertype.h
 create mode 100644 indra/newview/llviewerassettype.cpp
 create mode 100644 indra/newview/llviewerassettype.h
 create mode 100644 indra/newview/llviewerfoldertype.cpp
 create mode 100644 indra/newview/llviewerfoldertype.h
 create mode 100644 indra/newview/skins/default/textures/inv_folder_inbox.tga

diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 7468e3dde46..910ba958f62 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -39,6 +39,7 @@ set(llcommon_SOURCE_FILES
     llfile.cpp
     llfindlocale.cpp
     llfixedbuffer.cpp
+    llfoldertype.cpp
     llformat.cpp
     llframetimer.cpp
     llheartbeat.cpp
@@ -134,6 +135,7 @@ set(llcommon_HEADER_FILES
     llfile.h
     llfindlocale.h
     llfixedbuffer.h
+    llfoldertype.h
     llformat.h
     llframetimer.h
     llhash.h
diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp
index 0b016b81fbe..41f0a461153 100644
--- a/indra/llcommon/llassettype.cpp
+++ b/indra/llcommon/llassettype.cpp
@@ -43,30 +43,21 @@
 struct AssetEntry : public LLDictionaryEntry
 {
 	AssetEntry(const char *desc_name,
-			   const char *type_name, // 8 character limit!
-			   const char *human_name, // for decoding to human readable form; put any and as many printable characters you want in each one
-			   const char *category_name, // used by llinventorymodel when creating new categories
-			   EDragAndDropType dad_type,
-			   bool can_link, // can you create a link to this type?
-			   bool is_protected) // can the viewer change categories of this type?
+			   const char *type_name, 	// 8 character limit!
+			   const char *human_name, 	// for decoding to human readable form; put any and as many printable characters you want in each one
+			   bool can_link) 			// can you create a link to this type?
 		:
 		LLDictionaryEntry(desc_name),
 		mTypeName(type_name),
 		mHumanName(human_name),
-		mCategoryName(category_name),
-		mDadType(dad_type),
-		mCanLink(can_link),
-		mIsProtected(is_protected)
+		mCanLink(can_link)
 	{
 		llassert(strlen(mTypeName) <= 8);
 	}
 
 	const char *mTypeName;
 	const char *mHumanName;
-	const char *mCategoryName;
-	EDragAndDropType mDadType;
 	bool mCanLink;
-	bool mIsProtected;
 };
 
 class LLAssetDictionary : public LLSingleton<LLAssetDictionary>,
@@ -78,48 +69,32 @@ class LLAssetDictionary : public LLSingleton<LLAssetDictionary>,
 
 LLAssetDictionary::LLAssetDictionary()
 {
-	//       												   DESCRIPTION			TYPE NAME	HUMAN NAME			CATEGORY NAME 		DRAG&DROP		CAN LINK?	PROTECTED?
-	//      												  |--------------------|-----------|-------------------|-------------------|---------------|-----------|-----------|
-	addEntry(LLAssetType::AT_TEXTURE, 			new AssetEntry("TEXTURE",			"texture",	"texture",			"Textures", 		DAD_TEXTURE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_SOUND, 			new AssetEntry("SOUND",				"sound",	"sound",			"Sounds", 			DAD_SOUND,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_CALLINGCARD, 		new AssetEntry("CALLINGCARD",		"callcard",	"calling card",		"Calling Cards", 	DAD_CALLINGCARD, TRUE,		TRUE));
-	addEntry(LLAssetType::AT_LANDMARK, 			new AssetEntry("LANDMARK",			"landmark",	"landmark",			"Landmarks", 		DAD_LANDMARK,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_SCRIPT, 			new AssetEntry("SCRIPT",			"script",	"legacy script",	"Scripts", 			DAD_NONE,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_CLOTHING, 			new AssetEntry("CLOTHING",			"clothing",	"clothing",			"Clothing", 		DAD_CLOTHING,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_OBJECT, 			new AssetEntry("OBJECT",			"object",	"object",			"Objects", 			DAD_OBJECT,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_NOTECARD, 			new AssetEntry("NOTECARD",			"notecard",	"note card",		"Notecards", 		DAD_NOTECARD,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_CATEGORY, 			new AssetEntry("CATEGORY",			"category",	"folder",			"New Folder", 		DAD_CATEGORY,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_ROOT_CATEGORY, 	new AssetEntry("ROOT_CATEGORY",		"root",		"root",				"Inventory", 		DAD_ROOT_CATEGORY, TRUE,	TRUE));
-	addEntry(LLAssetType::AT_LSL_TEXT, 			new AssetEntry("LSL_TEXT",			"lsltext",	"lsl2 script",		"Scripts", 			DAD_SCRIPT,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_LSL_BYTECODE, 		new AssetEntry("LSL_BYTECODE",		"lslbyte",	"lsl bytecode",		"Scripts", 			DAD_NONE,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_TEXTURE_TGA, 		new AssetEntry("TEXTURE_TGA",		"txtr_tga",	"tga texture",		"Uncompressed Images", DAD_NONE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_BODYPART, 			new AssetEntry("BODYPART",			"bodypart",	"body part",		"Body Parts", 		DAD_BODYPART,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_TRASH, 			new AssetEntry("TRASH",				"trash",	"trash",			"Trash", 			DAD_NONE,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_SNAPSHOT_CATEGORY, new AssetEntry("SNAPSHOT_CATEGORY", "snapshot",	"snapshot",			"Photo Album", 		DAD_NONE,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_LOST_AND_FOUND, 	new AssetEntry("LOST_AND_FOUND", 	"lstndfnd",	"lost and found",	"Lost And Found", 	DAD_NONE,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_SOUND_WAV, 		new AssetEntry("SOUND_WAV",			"snd_wav",	"sound",			"Uncompressed SoundS", DAD_NONE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_IMAGE_TGA, 		new AssetEntry("IMAGE_TGA",			"img_tga",	"targa image",		"Uncompressed Images", DAD_NONE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_IMAGE_JPEG, 		new AssetEntry("IMAGE_JPEG",		"jpeg",		"jpeg image",		"Uncompressed Images", DAD_NONE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_ANIMATION, 		new AssetEntry("ANIMATION",			"animatn",	"animation",		"Animations", 		DAD_ANIMATION,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_GESTURE, 			new AssetEntry("GESTURE",			"gesture",	"gesture",			"Gestures", 		DAD_GESTURE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_SIMSTATE, 			new AssetEntry("SIMSTATE",			"simstate",	"simstate",			"New Folder", 		DAD_NONE,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_FAVORITE, 			new AssetEntry("FAVORITE",			"favorite",	"favorite",			"favorite", 		DAD_NONE,		FALSE,		TRUE));
-
-	addEntry(LLAssetType::AT_LINK, 				new AssetEntry("LINK",				"link",		"symbolic link",	"Link", 			DAD_LINK,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_LINK_FOLDER, 		new AssetEntry("FOLDER_LINK",		"link_f", 	"symbolic folder link", "New Folder", 	DAD_LINK,		FALSE,		TRUE));
-
-	for (S32 ensemble_num = S32(LLAssetType::AT_FOLDER_ENSEMBLE_START); 
-		 ensemble_num <= S32(LLAssetType::AT_FOLDER_ENSEMBLE_END); 
-		 ensemble_num++)
-	{
-		addEntry(LLAssetType::EType(ensemble_num), new AssetEntry("ENSEMBLE",		"ensemble", "ensemble", 		"New Folder", 		DAD_CATEGORY,	FALSE,		FALSE)); 
-	}
-
-	addEntry(LLAssetType::AT_CURRENT_OUTFIT, 	new AssetEntry("CURRENT",			"current",	"current outfit",	"Current Look", 	DAD_CATEGORY,	FALSE,		TRUE));
-	addEntry(LLAssetType::AT_OUTFIT, 			new AssetEntry("OUTFIT",			"outfit",	"outfit",			"New Look", 		DAD_CATEGORY,	FALSE,		FALSE));
-	addEntry(LLAssetType::AT_MY_OUTFITS, 		new AssetEntry("MY_OUTFITS",		"my_otfts",	"my outfits",		"My Looks", 		DAD_CATEGORY,	FALSE,		TRUE));
-		 
-	addEntry(LLAssetType::AT_NONE, 				new AssetEntry("NONE",				"-1",		NULL,		  		"New Folder", 		DAD_NONE,		FALSE,		FALSE));
+	//       												   DESCRIPTION			TYPE NAME	HUMAN NAME			CAN LINK?	
+	//      												  |--------------------|-----------|-------------------|-----------|
+	addEntry(LLAssetType::AT_TEXTURE, 			new AssetEntry("TEXTURE",			"texture",	"texture",			FALSE));
+	addEntry(LLAssetType::AT_SOUND, 			new AssetEntry("SOUND",				"sound",	"sound",			FALSE));
+	addEntry(LLAssetType::AT_CALLINGCARD, 		new AssetEntry("CALLINGCARD",		"callcard",	"calling card",		FALSE));
+	addEntry(LLAssetType::AT_LANDMARK, 			new AssetEntry("LANDMARK",			"landmark",	"landmark",			FALSE));
+	addEntry(LLAssetType::AT_SCRIPT, 			new AssetEntry("SCRIPT",			"script",	"legacy script",	FALSE));
+	addEntry(LLAssetType::AT_CLOTHING, 			new AssetEntry("CLOTHING",			"clothing",	"clothing",			TRUE));
+	addEntry(LLAssetType::AT_OBJECT, 			new AssetEntry("OBJECT",			"object",	"object",			TRUE));
+	addEntry(LLAssetType::AT_NOTECARD, 			new AssetEntry("NOTECARD",			"notecard",	"note card",		FALSE));
+	addEntry(LLAssetType::AT_CATEGORY, 			new AssetEntry("CATEGORY",			"category",	"folder",			TRUE));
+	addEntry(LLAssetType::AT_LSL_TEXT, 			new AssetEntry("LSL_TEXT",			"lsltext",	"lsl2 script",		FALSE));
+	addEntry(LLAssetType::AT_LSL_BYTECODE, 		new AssetEntry("LSL_BYTECODE",		"lslbyte",	"lsl bytecode",		FALSE));
+	addEntry(LLAssetType::AT_TEXTURE_TGA, 		new AssetEntry("TEXTURE_TGA",		"txtr_tga",	"tga texture",		FALSE));
+	addEntry(LLAssetType::AT_BODYPART, 			new AssetEntry("BODYPART",			"bodypart",	"body part",		TRUE));
+	addEntry(LLAssetType::AT_SOUND_WAV, 		new AssetEntry("SOUND_WAV",			"snd_wav",	"sound",			FALSE));
+	addEntry(LLAssetType::AT_IMAGE_TGA, 		new AssetEntry("IMAGE_TGA",			"img_tga",	"targa image",		FALSE));
+	addEntry(LLAssetType::AT_IMAGE_JPEG, 		new AssetEntry("IMAGE_JPEG",		"jpeg",		"jpeg image",		FALSE));
+	addEntry(LLAssetType::AT_ANIMATION, 		new AssetEntry("ANIMATION",			"animatn",	"animation",		FALSE));
+	addEntry(LLAssetType::AT_GESTURE, 			new AssetEntry("GESTURE",			"gesture",	"gesture",			TRUE));
+	addEntry(LLAssetType::AT_SIMSTATE, 			new AssetEntry("SIMSTATE",			"simstate",	"simstate",			FALSE));
+
+	addEntry(LLAssetType::AT_LINK, 				new AssetEntry("LINK",				"link",		"symbolic link",	FALSE));
+	addEntry(LLAssetType::AT_LINK_FOLDER, 		new AssetEntry("FOLDER_LINK",		"link_f", 	"symbolic folder link", FALSE));
+
+	addEntry(LLAssetType::AT_NONE, 				new AssetEntry("NONE",				"-1",		NULL,		  		FALSE));
 };
 
 // static
@@ -140,8 +115,7 @@ const std::string &LLAssetType::getDesc(LLAssetType::EType asset_type)
 	}
 	else
 	{
-		static const std::string error_string = "BAD TYPE";
-		return error_string;
+		return badLookup();
 	}
 }
 
@@ -156,7 +130,7 @@ const char *LLAssetType::lookup(LLAssetType::EType asset_type)
 	}
 	else
 	{
-		return "-1";
+		return badLookup().c_str();
 	}
 }
 
@@ -166,6 +140,7 @@ LLAssetType::EType LLAssetType::lookup(const char* name)
 	return lookup(ll_safe_string(name));
 }
 
+// static
 LLAssetType::EType LLAssetType::lookup(const std::string& type_name)
 {
 	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
@@ -193,7 +168,7 @@ const char *LLAssetType::lookupHumanReadable(LLAssetType::EType asset_type)
 	}
 	else
 	{
-		return NULL;
+		return badLookup().c_str();
 	}
 }
 
@@ -203,6 +178,7 @@ LLAssetType::EType LLAssetType::lookupHumanReadable(const char* name)
 	return lookupHumanReadable(ll_safe_string(name));
 }
 
+// static
 LLAssetType::EType LLAssetType::lookupHumanReadable(const std::string& readable_name)
 {
 	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
@@ -219,32 +195,6 @@ LLAssetType::EType LLAssetType::lookupHumanReadable(const std::string& readable_
 	return AT_NONE;
 }
 
-// static
-const char *LLAssetType::lookupCategoryName(LLAssetType::EType asset_type)
-{
-	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
-	const AssetEntry *entry = dict->lookup(asset_type);
-	if (entry)
-	{
-		return entry->mCategoryName;
-	}
-	else
-	{
-		return "New Folder";
-	}
-}
-
-// static
-EDragAndDropType LLAssetType::lookupDragAndDropType(EType asset_type)
-{
-	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
-	const AssetEntry *entry = dict->lookup(asset_type);
-	if (entry)
-		return entry->mDadType;
-	else
-		return DAD_NONE;
-}
-
 // static
 bool LLAssetType::lookupCanLink(EType asset_type)
 {
@@ -269,36 +219,8 @@ bool LLAssetType::lookupIsLinkType(EType asset_type)
 }
 
 // static
-// Only ensembles and plain folders aren't protected.  "Protected" means
-// you can't change certain properties such as their type.
-bool LLAssetType::lookupIsProtectedCategoryType(EType asset_type)
-{
-	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
-	const AssetEntry *entry = dict->lookup(asset_type);
-	if (entry)
-	{
-		return entry->mIsProtected;
-	}
-	return true;
-}
-
-// static
-bool LLAssetType::lookupIsEnsembleCategoryType(EType asset_type)
-{
-	return (asset_type >= AT_FOLDER_ENSEMBLE_START &&
-			asset_type <= AT_FOLDER_ENSEMBLE_END);
-}
-
-// static. Generate a good default description
-void LLAssetType::generateDescriptionFor(LLAssetType::EType asset_type,
-										 std::string& description)
+const std::string &LLAssetType::badLookup()
 {
-	const S32 BUF_SIZE = 30;
-	char time_str[BUF_SIZE];	/* Flawfinder: ignore */
-	time_t now;
-	time(&now);
-	memset(time_str, '\0', BUF_SIZE);
-	strftime(time_str, BUF_SIZE - 1, "%Y-%m-%d %H:%M:%S ", localtime(&now));
-	description.assign(time_str);
-	description.append(LLAssetType::lookupHumanReadable(asset_type));
+	static const std::string sBadLookup = "llassettype_bad_lookup";
+	return sBadLookup;
 }
diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h
index 5e511885416..10e21b4d1f5 100644
--- a/indra/llcommon/llassettype.h
+++ b/indra/llcommon/llassettype.h
@@ -94,18 +94,6 @@ class LLAssetType
 		AT_BODYPART = 13,
 			// A collection of textures and parameters that can be worn by an avatar.
 
-		AT_TRASH = 14,
-			// Only to be used as a marker for a category preferred type. 
-			// Using this, we can throw things in the trash before completely deleting.
-
-		AT_SNAPSHOT_CATEGORY = 15,
-			// A marker for a folder meant for snapshots. 
-			// No actual assets will be snapshots, though if there were, you
-			// could interpret them as textures.
-
-		AT_LOST_AND_FOUND = 16,
-			// Used to stuff lost&found items into.
-
 		AT_SOUND_WAV = 17,
 			// Uncompressed sound.
 
@@ -126,37 +114,21 @@ class LLAssetType
 		AT_SIMSTATE = 22,
 			// Simstate file.
 
-		AT_FAVORITE = 23,
-			// favorite items
-
 		AT_LINK = 24,
 			// Inventory symbolic link
 
 		AT_LINK_FOLDER = 25,
 			// Inventory folder link
-
-		AT_FOLDER_ENSEMBLE_START = 26,
-		AT_FOLDER_ENSEMBLE_END = 45,
-			// This range is reserved for special clothing folder types.
-
-		AT_CURRENT_OUTFIT = 46,
-			// Current outfit
-
-		AT_OUTFIT = 47,
-			// Predefined outfit ("look")
-
-		AT_MY_OUTFITS = 48,
-			// Folder that holds your outfits.
-
 		
-		AT_COUNT = 49,
+		AT_COUNT = 26,
 			// +*********************************************************+
 			// |  TO ADD AN ELEMENT TO THIS ENUM:                        |
 			// +*********************************************************+
 			// | 1. INSERT BEFORE AT_COUNT                               |
 			// | 2. INCREMENT AT_COUNT BY 1                              |
-			// | 3. ADD TO LLAssetDictionary in LLAssetType.cpp          |
-			// | 3. ADD TO DEFAULT_ASSET_FOR_INV in LLInventoryType.cpp  |
+			// | 3. ADD TO LLAssetType.cpp                               |
+			// | 4. ADD TO LLViewerAssetType.cpp                         |
+			// | 5. ADD TO DEFAULT_ASSET_FOR_INV in LLInventoryType.cpp  |
 			// +*********************************************************+
 
 		AT_NONE = -1
@@ -172,33 +144,17 @@ class LLAssetType
 	static EType 				lookupHumanReadable(const std::string& readable_name);
 	static const char*			lookupHumanReadable(EType asset_type);
 
-	// Generate a good default description. You may want to add a verb
-	// or agent name after this depending on your application.
-	static void 				generateDescriptionFor(LLAssetType::EType asset_type,
-													   std::string& description);
-
 	static EType 				getType(const std::string& desc_name);
 	static const std::string&	getDesc(EType asset_type);
-	static EDragAndDropType   	lookupDragAndDropType(EType asset_type);
 
 	static bool 				lookupCanLink(EType asset_type);
 	static bool 				lookupIsLinkType(EType asset_type);
 
-	static const char*  		lookupCategoryName(EType asset_type);
-	static bool 				lookupIsProtectedCategoryType(EType asset_type);
-	static bool 				lookupIsEnsembleCategoryType(EType asset_type);
-
-	/* TODO: Change return types from "const char *" to "const std::string &".
-	This is fairly straightforward, but requires changing some calls to use .c_str().
-	e.g.:
-	-	fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
-	+	fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType).c_str());
-	*/
-	
-private:
-	// don't instantiate or derive one of these objects
-	LLAssetType( void ) {}
-	~LLAssetType( void ) {}
+	static const std::string&	badLookup(); // error string when a lookup fails
+
+protected:
+	LLAssetType() {}
+	~LLAssetType() {}
 };
 
 #endif // LL_LLASSETTYPE_H
diff --git a/indra/llcommon/llfoldertype.cpp b/indra/llcommon/llfoldertype.cpp
new file mode 100644
index 00000000000..9107b11597e
--- /dev/null
+++ b/indra/llcommon/llfoldertype.cpp
@@ -0,0 +1,165 @@
+/** 
+ * @file llfoldertype.cpp
+ * @brief Implementatino of LLFolderType functionality.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llfoldertype.h"
+#include "lldictionary.h"
+#include "llmemory.h"
+#include "llsingleton.h"
+
+///----------------------------------------------------------------------------
+/// Class LLFolderType
+///----------------------------------------------------------------------------
+struct FolderEntry : public LLDictionaryEntry
+{
+	FolderEntry(const std::string &type_name, // 8 character limit!
+				bool is_protected) // can the viewer change categories of this type?
+		:
+	LLDictionaryEntry(type_name),
+	mIsProtected(is_protected)
+	{
+		llassert(type_name.length() <= 8);
+	}
+
+	const bool mIsProtected;
+};
+
+class LLFolderDictionary : public LLSingleton<LLFolderDictionary>,
+						   public LLDictionary<LLFolderType::EType, FolderEntry>
+{
+public:
+	LLFolderDictionary();
+};
+
+LLFolderDictionary::LLFolderDictionary()
+{
+	//       													    TYPE NAME	PROTECTED
+	//      													   |-----------|---------|
+	addEntry(LLFolderType::FT_TEXTURE, 				new FolderEntry("texture",	TRUE));
+	addEntry(LLFolderType::FT_SOUND, 				new FolderEntry("sound",	TRUE));
+	addEntry(LLFolderType::FT_CALLINGCARD, 			new FolderEntry("callcard",	TRUE));
+	addEntry(LLFolderType::FT_LANDMARK, 			new FolderEntry("landmark",	TRUE));
+	addEntry(LLFolderType::FT_CLOTHING, 			new FolderEntry("clothing",	TRUE));
+	addEntry(LLFolderType::FT_OBJECT, 				new FolderEntry("object",	TRUE));
+	addEntry(LLFolderType::FT_NOTECARD, 			new FolderEntry("notecard",	TRUE));
+	addEntry(LLFolderType::FT_CATEGORY, 			new FolderEntry("category",	TRUE));
+	addEntry(LLFolderType::FT_ROOT_CATEGORY, 		new FolderEntry("root",		TRUE));
+	addEntry(LLFolderType::FT_LSL_TEXT, 			new FolderEntry("lsltext",	TRUE));
+	addEntry(LLFolderType::FT_BODYPART, 			new FolderEntry("bodypart",	TRUE));
+	addEntry(LLFolderType::FT_TRASH, 				new FolderEntry("trash",	TRUE));
+	addEntry(LLFolderType::FT_SNAPSHOT_CATEGORY, 	new FolderEntry("snapshot", TRUE));
+	addEntry(LLFolderType::FT_LOST_AND_FOUND, 		new FolderEntry("lstndfnd",	TRUE));
+	addEntry(LLFolderType::FT_ANIMATION, 			new FolderEntry("animatn",	TRUE));
+	addEntry(LLFolderType::FT_GESTURE, 				new FolderEntry("gesture",	TRUE));
+	addEntry(LLFolderType::FT_FAVORITE, 			new FolderEntry("favorite",	TRUE));
+	
+	for (S32 ensemble_num = S32(LLFolderType::FT_ENSEMBLE_START); ensemble_num <= S32(LLFolderType::FT_ENSEMBLE_END); ensemble_num++)
+	{
+		addEntry(LLFolderType::EType(ensemble_num), new FolderEntry("ensemble", FALSE)); 
+	}
+
+	addEntry(LLFolderType::FT_CURRENT_OUTFIT, 		new FolderEntry("current",	TRUE));
+	addEntry(LLFolderType::FT_OUTFIT, 				new FolderEntry("outfit",	FALSE));
+	addEntry(LLFolderType::FT_MY_OUTFITS, 			new FolderEntry("my_otfts",	TRUE));
+	addEntry(LLFolderType::FT_INBOX, 				new FolderEntry("inbox",	TRUE));
+		 
+	addEntry(LLFolderType::FT_NONE, 				new FolderEntry("-1",		FALSE));
+};
+
+// static
+LLFolderType::EType LLFolderType::lookup(const std::string& name)
+{
+	return LLFolderDictionary::getInstance()->lookup(name);
+}
+
+// static
+const std::string &LLFolderType::lookup(LLFolderType::EType folder_type)
+{
+	const FolderEntry *entry = LLFolderDictionary::getInstance()->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mName;
+	}
+	else
+	{
+		return badLookup();
+	}
+}
+
+// static
+// Only ensembles and plain folders aren't protected.  "Protected" means
+// you can't change certain properties such as their type.
+bool LLFolderType::lookupIsProtectedType(EType folder_type)
+{
+	const LLFolderDictionary *dict = LLFolderDictionary::getInstance();
+	const FolderEntry *entry = dict->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mIsProtected;
+	}
+	return true;
+}
+
+// static
+bool LLFolderType::lookupIsEnsembleType(EType folder_type)
+{
+	return (folder_type >= FT_ENSEMBLE_START &&
+			folder_type <= FT_ENSEMBLE_END);
+}
+
+// static
+LLAssetType::EType LLFolderType::folderTypeToAssetType(LLFolderType::EType folder_type)
+{
+	if (LLAssetType::lookup(LLAssetType::EType(folder_type)) == LLAssetType::badLookup())
+	{
+		llwarns << "Converting to unknown asset type " << folder_type << llendl;
+	}
+	return (LLAssetType::EType)folder_type;
+}
+
+// static
+LLFolderType::EType LLFolderType::assetTypeToFolderType(LLAssetType::EType asset_type)
+{
+	if (LLFolderType::lookup(LLFolderType::EType(asset_type)) == LLFolderType::badLookup())
+	{
+		llwarns << "Converting to unknown folder type " << asset_type << llendl;
+	}
+	return (LLFolderType::EType)asset_type;
+}
+
+// static
+const std::string &LLFolderType::badLookup()
+{
+	static const std::string sBadLookup = "llfoldertype_bad_lookup";
+	return sBadLookup;
+}
diff --git a/indra/llcommon/llfoldertype.h b/indra/llcommon/llfoldertype.h
new file mode 100644
index 00000000000..ecb37d6ddec
--- /dev/null
+++ b/indra/llcommon/llfoldertype.h
@@ -0,0 +1,123 @@
+/** 
+ * @file llfoldertype.h
+ * @brief Declaration of LLFolderType.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFOLDERTYPE_H
+#define LL_LLFOLDERTYPE_H
+
+#include <string>
+#include "llassettype.h"
+
+// This class handles folder types (similar to assettype, except for folders)
+// and operations on those.
+class LLFolderType
+{
+public:
+	// ! BACKWARDS COMPATIBILITY ! Folder type enums must match asset type enums.
+	enum EType
+	{
+		FT_TEXTURE = 0,
+
+		FT_SOUND = 1, 
+
+		FT_CALLINGCARD = 2,
+
+		FT_LANDMARK = 3,
+
+		// FT_SCRIPT = 4,
+
+		FT_CLOTHING = 5,
+
+		FT_OBJECT = 6,
+
+		FT_NOTECARD = 7,
+
+		FT_CATEGORY = 8,
+
+		FT_ROOT_CATEGORY = 9,
+
+		FT_LSL_TEXT = 10,
+
+		// FT_LSL_BYTECODE = 11,
+		// FT_TEXTURE_TGA = 12,
+
+		FT_BODYPART = 13,
+
+		FT_TRASH = 14,
+
+		FT_SNAPSHOT_CATEGORY = 15,
+
+		FT_LOST_AND_FOUND = 16,
+
+		// FT_SOUND_WAV = 17,
+		// FT_IMAGE_TGA = 18,
+		// FT_IMAGE_JPEG = 19,
+
+		FT_ANIMATION = 20,
+
+		FT_GESTURE = 21,
+
+		// FT_SIMSTATE = 22,
+
+		FT_FAVORITE = 23,
+
+		FT_ENSEMBLE_START = 26,
+		FT_ENSEMBLE_END = 45,
+			// This range is reserved for special clothing folder types.
+
+		FT_CURRENT_OUTFIT = 46,
+		FT_OUTFIT = 47,
+		FT_MY_OUTFITS = 48,
+		
+		FT_INBOX = 49,
+
+		FT_COUNT = 50,
+
+		FT_NONE = -1
+	};
+
+	static EType 				lookup(const std::string& type_name);
+	static const std::string&	lookup(EType folder_type);
+
+	static bool 				lookupIsProtectedType(EType folder_type);
+	static bool 				lookupIsEnsembleType(EType folder_type);
+
+	static LLAssetType::EType	folderTypeToAssetType(LLFolderType::EType folder_type);
+	static LLFolderType::EType	assetTypeToFolderType(LLAssetType::EType asset_type);
+
+	static const std::string&	badLookup(); // error string when a lookup fails
+
+protected:
+	LLFolderType() {}
+	~LLFolderType() {}
+};
+
+#endif // LL_LLFOLDERTYPE_H
diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp
index e2a77f1d1e5..b800f239e16 100644
--- a/indra/llinventory/llinventory.cpp
+++ b/indra/llinventory/llinventory.cpp
@@ -1291,7 +1291,7 @@ BOOL item_date_sort( LLInventoryItem* a, LLInventoryItem* b )
 LLInventoryCategory::LLInventoryCategory(
 	const LLUUID& uuid,
 	const LLUUID& parent_uuid,
-	LLAssetType::EType preferred_type,
+	LLFolderType::EType preferred_type,
 	const std::string& name) :
 	LLInventoryObject(uuid, parent_uuid, LLAssetType::AT_CATEGORY, name),
 	mPreferredType(preferred_type)
@@ -1299,7 +1299,7 @@ LLInventoryCategory::LLInventoryCategory(
 }
 
 LLInventoryCategory::LLInventoryCategory() :
-	mPreferredType(LLAssetType::AT_NONE)
+	mPreferredType(LLFolderType::FT_NONE)
 {
 	mType = LLAssetType::AT_CATEGORY;
 }
@@ -1321,12 +1321,12 @@ void LLInventoryCategory::copyCategory(const LLInventoryCategory* other)
 	mPreferredType = other->mPreferredType;
 }
 
-LLAssetType::EType LLInventoryCategory::getPreferredType() const
+LLFolderType::EType LLInventoryCategory::getPreferredType() const
 {
 	return mPreferredType;
 }
 
-void LLInventoryCategory::setPreferredType(LLAssetType::EType type)
+void LLInventoryCategory::setPreferredType(LLFolderType::EType type)
 {
 	mPreferredType = type;
 }
@@ -1372,13 +1372,13 @@ bool LLInventoryCategory::fromLLSD(const LLSD& sd)
     if (sd.has(w))
     {
         S8 type = (U8)sd[w].asInteger();
-        mPreferredType = static_cast<LLAssetType::EType>(type);
+        mPreferredType = static_cast<LLFolderType::EType>(type);
     }
 	w = INV_ASSET_TYPE_LABEL_WS;
 	if (sd.has(w))
 	{
 		S8 type = (U8)sd[w].asInteger();
-        mPreferredType = static_cast<LLAssetType::EType>(type);
+        mPreferredType = static_cast<LLFolderType::EType>(type);
 	}
 
     w = INV_NAME_LABEL;
@@ -1400,7 +1400,7 @@ void LLInventoryCategory::unpackMessage(LLMessageSystem* msg,
 	msg->getUUIDFast(block, _PREHASH_ParentID, mParentUUID, block_num);
 	S8 type;
 	msg->getS8Fast(block, _PREHASH_Type, type, block_num);
-	mPreferredType = static_cast<LLAssetType::EType>(type);
+	mPreferredType = static_cast<LLFolderType::EType>(type);
 	msg->getStringFast(block, _PREHASH_Name, mName, block_num);
 	LLStringUtil::replaceNonstandardASCII(mName, ' ');
 }
@@ -1449,7 +1449,7 @@ BOOL LLInventoryCategory::importFile(LLFILE* fp)
 		}
 		else if(0 == strcmp("pref_type", keyword))
 		{
-			mPreferredType = LLAssetType::lookup(valuestr);
+			mPreferredType = LLFolderType::lookup(valuestr);
 		}
 		else if(0 == strcmp("name", keyword))
 		{
@@ -1481,7 +1481,7 @@ BOOL LLInventoryCategory::exportFile(LLFILE* fp, BOOL) const
 	mParentUUID.toString(uuid_str);
 	fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str());
 	fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
-	fprintf(fp, "\t\tpref_type\t%s\n", LLAssetType::lookup(mPreferredType));
+	fprintf(fp, "\t\tpref_type\t%s\n", LLFolderType::lookup(mPreferredType).c_str());
 	fprintf(fp, "\t\tname\t%s|\n", mName.c_str());
 	fprintf(fp,"\t}\n");
 	return TRUE;
@@ -1528,7 +1528,7 @@ BOOL LLInventoryCategory::importLegacyStream(std::istream& input_stream)
 		}
 		else if(0 == strcmp("pref_type", keyword))
 		{
-			mPreferredType = LLAssetType::lookup(valuestr);
+			mPreferredType = LLFolderType::lookup(valuestr);
 		}
 		else if(0 == strcmp("name", keyword))
 		{
@@ -1560,7 +1560,7 @@ BOOL LLInventoryCategory::exportLegacyStream(std::ostream& output_stream, BOOL)
 	mParentUUID.toString(uuid_str);
 	output_stream << "\t\tparent_id\t" << uuid_str << "\n";
 	output_stream << "\t\ttype\t" << LLAssetType::lookup(mType) << "\n";
-	output_stream << "\t\tpref_type\t" << LLAssetType::lookup(mPreferredType) << "\n";
+	output_stream << "\t\tpref_type\t" << LLFolderType::lookup(mPreferredType) << "\n";
 	output_stream << "\t\tname\t" << mName.c_str() << "|\n";
 	output_stream << "\t}\n";
 	return TRUE;
@@ -1596,38 +1596,6 @@ LLSD ll_create_sd_from_inventory_item(LLPointer<LLInventoryItem> item)
 	return rv;
 }
 
-/* deprecated, use LLInventoryItem::fromLLSD() instead
-LLPointer<LLInventoryItem> ll_create_item_from_sd(const LLSD& sd_item)
-{
-	LLPointer<LLInventoryItem> rv = new LLInventoryItem;
-	rv->setUUID(sd_item[INV_ITEM_ID_LABEL].asUUID());
-	rv->setParent(sd_item[INV_PARENT_ID_LABEL].asUUID());
-	rv->rename(sd_item[INV_NAME_LABEL].asString());
-	rv->setType(
-		LLAssetType::lookup(sd_item[INV_ASSET_TYPE_LABEL].asString()));
-	if (sd_item.has("shadow_id"))
-	{
-		LLUUID asset_id = sd_item["shadow_id"];
-		LLXORCipher cipher(MAGIC_ID.mData, UUID_BYTES);
-		cipher.decrypt(asset_id.mData, UUID_BYTES);
-		rv->setAssetUUID(asset_id);
-	}
-	if (sd_item.has(INV_ASSET_ID_LABEL))
-	{
-		rv->setAssetUUID(sd_item[INV_ASSET_ID_LABEL].asUUID());
-	}
-	rv->setDescription(sd_item[INV_DESC_LABEL].asString());
-	rv->setSaleInfo(ll_sale_info_from_sd(sd_item[INV_SALE_INFO_LABEL]));
-	rv->setPermissions(ll_permissions_from_sd(sd_item[INV_PERMISSIONS_LABEL]));
-	rv->setInventoryType(
-		LLInventoryType::lookup(
-			sd_item[INV_INVENTORY_TYPE_LABEL].asString()));
-	rv->setFlags((U32)(sd_item[INV_FLAGS_LABEL].asInteger()));
-	rv->setCreationDate(sd_item[INV_CREATION_DATE_LABEL].asInteger());
-	return rv;
-}
-*/
-
 LLSD ll_create_sd_from_inventory_category(LLPointer<LLInventoryCategory> cat)
 {
 	LLSD rv;
@@ -1642,10 +1610,10 @@ LLSD ll_create_sd_from_inventory_category(LLPointer<LLInventoryCategory> cat)
 	rv[INV_PARENT_ID_LABEL] = cat->getParentUUID();
 	rv[INV_NAME_LABEL] = cat->getName();
 	rv[INV_ASSET_TYPE_LABEL] = LLAssetType::lookup(cat->getType());
-	if(LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))
+	if(LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
 	{
 		rv[INV_PREFERRED_TYPE_LABEL] =
-			LLAssetType::lookup(cat->getPreferredType());
+			LLFolderType::lookup(cat->getPreferredType()).c_str();
 	}
 	return rv;
 }
@@ -1659,7 +1627,7 @@ LLPointer<LLInventoryCategory> ll_create_category_from_sd(const LLSD& sd_cat)
 	rv->setType(
 		LLAssetType::lookup(sd_cat[INV_ASSET_TYPE_LABEL].asString()));
 	rv->setPreferredType(
-		LLAssetType::lookup(
-			sd_cat[INV_PREFERRED_TYPE_LABEL].asString()));
+			LLFolderType::lookup(
+				sd_cat[INV_PREFERRED_TYPE_LABEL].asString()));
 	return rv;
 }
diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h
index 64af6c94f5d..52bbd2001df 100644
--- a/indra/llinventory/llinventory.h
+++ b/indra/llinventory/llinventory.h
@@ -37,6 +37,7 @@
 
 #include "llassetstorage.h"
 #include "lldarray.h"
+#include "llfoldertype.h"
 #include "llinventorytype.h"
 #include "llmemtype.h"
 #include "llpermissions.h"
@@ -318,15 +319,15 @@ class LLInventoryCategory : public LLInventoryObject
 public:
 	MEM_TYPE_NEW(LLMemType::MTYPE_INVENTORY);
 	LLInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid,
-						LLAssetType::EType preferred_type,
+						LLFolderType::EType preferred_type,
 						const std::string& name);
 	LLInventoryCategory();
 	LLInventoryCategory(const LLInventoryCategory* other);
 	void copyCategory(const LLInventoryCategory* other); // LLRefCount requires custom copy
 
 	// accessors and mutators
-	LLAssetType::EType getPreferredType() const;
-	void setPreferredType(LLAssetType::EType type);
+	LLFolderType::EType getPreferredType() const;
+	void setPreferredType(LLFolderType::EType type);
 	// For messaging system support
 	virtual void packMessage(LLMessageSystem* msg) const;
 	virtual void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
@@ -342,10 +343,8 @@ class LLInventoryCategory : public LLInventoryObject
 	virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const;
 
 protected:
-	// The type of asset that this category was "meant" to hold
-	// (although it may in fact hold any type).
-	LLAssetType::EType	mPreferredType;		
-
+	// May be the type that this category was "meant" to hold (although it may hold any type).	
+	LLFolderType::EType	mPreferredType;		
 };
 
 
diff --git a/indra/llinventory/llinventorytype.cpp b/indra/llinventory/llinventorytype.cpp
index a445466b26a..0e71c0d12d8 100644
--- a/indra/llinventory/llinventorytype.cpp
+++ b/indra/llinventory/llinventorytype.cpp
@@ -79,24 +79,16 @@ LLInventoryDictionary::LLInventoryDictionary()
 	addEntry(LLInventoryType::IT_SOUND,               new InventoryEntry("sound",     "sound",         1, LLAssetType::AT_SOUND));
 	addEntry(LLInventoryType::IT_CALLINGCARD,         new InventoryEntry("callcard",  "calling card",  1, LLAssetType::AT_CALLINGCARD));
 	addEntry(LLInventoryType::IT_LANDMARK,            new InventoryEntry("landmark",  "landmark",      1, LLAssetType::AT_LANDMARK));
-	//addEntry(LLInventoryType::IT_SCRIPT,            new InventoryEntry(NULL,NULL));
-	//addEntry(LLInventoryType::IT_CLOTHING,          new InventoryEntry(NULL,NULL));
 	addEntry(LLInventoryType::IT_OBJECT,              new InventoryEntry("object",    "object",        1, LLAssetType::AT_OBJECT));
 	addEntry(LLInventoryType::IT_NOTECARD,            new InventoryEntry("notecard",  "note card",     1, LLAssetType::AT_NOTECARD));
 	addEntry(LLInventoryType::IT_CATEGORY,            new InventoryEntry("category",  "folder"         ));
 	addEntry(LLInventoryType::IT_ROOT_CATEGORY,       new InventoryEntry("root",      "root"           ));
 	addEntry(LLInventoryType::IT_LSL,                 new InventoryEntry("script",    "script",        2, LLAssetType::AT_LSL_TEXT, LLAssetType::AT_LSL_BYTECODE));
-	//addEntry(LLInventoryType::IT_LSL_BYTECODE,      new InventoryEntry(NULL,NULL));
-	//addEntry(LLInventoryType::IT_TEXTURE_TGA,       new InventoryEntry(NULL,NULL));
-	//addEntry(LLInventoryType::IT_BODYPART,          new InventoryEntry(NULL,NULL));
-	//addEntry(LLInventoryType::IT_TRASH,             new InventoryEntry(NULL,NULL));
 	addEntry(LLInventoryType::IT_SNAPSHOT,            new InventoryEntry("snapshot",  "snapshot",      1, LLAssetType::AT_TEXTURE));
-	//addEntry(LLInventoryType::IT_LOST_AND_FOUND,    new InventoryEntry(NULL,NULL, ));
 	addEntry(LLInventoryType::IT_ATTACHMENT,          new InventoryEntry("attach",    "attachment",    1, LLAssetType::AT_OBJECT));
 	addEntry(LLInventoryType::IT_WEARABLE,            new InventoryEntry("wearable",  "wearable",      2, LLAssetType::AT_CLOTHING, LLAssetType::AT_BODYPART));
 	addEntry(LLInventoryType::IT_ANIMATION,           new InventoryEntry("animation", "animation",     1, LLAssetType::AT_ANIMATION));  
 	addEntry(LLInventoryType::IT_GESTURE,             new InventoryEntry("gesture",   "gesture",       1, LLAssetType::AT_GESTURE)); 
-	addEntry(LLInventoryType::IT_FAVORITE,            new InventoryEntry("favorite",  "favorite",      1, LLAssetType::AT_FAVORITE)); 
 }
 
 
@@ -128,35 +120,9 @@ DEFAULT_ASSET_FOR_INV_TYPE[LLAssetType::AT_COUNT] =
 	LLInventoryType::IT_ANIMATION,		// AT_ANIMATION
 	LLInventoryType::IT_GESTURE,		// AT_GESTURE
 	LLInventoryType::IT_NONE,			// AT_SIMSTATE
-	LLInventoryType::IT_FAVORITE,		// AT_FAVORITE
 
 	LLInventoryType::IT_NONE,			// AT_LINK
 	LLInventoryType::IT_NONE,			// AT_LINK_FOLDER
-
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-
-	LLInventoryType::IT_CATEGORY,		// AT_CURRENT_OUTFIT
-	LLInventoryType::IT_CATEGORY,		// AT_OUTFIT
-	LLInventoryType::IT_CATEGORY,		// AT_MY_OUTFITS
 };
 
 // static
diff --git a/indra/llinventory/llinventorytype.h b/indra/llinventory/llinventorytype.h
index 14b28bfe4b8..e515b8a304b 100644
--- a/indra/llinventory/llinventorytype.h
+++ b/indra/llinventory/llinventorytype.h
@@ -67,8 +67,7 @@ class LLInventoryType
 		IT_WEARABLE = 18,
 		IT_ANIMATION = 19,
 		IT_GESTURE = 20,
-		IT_FAVORITE = 21,
-		IT_COUNT = 22,
+		IT_COUNT = 21,
 
 		IT_NONE = -1
 	};
diff --git a/indra/llinventory/tests/inventorymisc_test.cpp b/indra/llinventory/tests/inventorymisc_test.cpp
index 770594dc9df..c797a70c506 100644
--- a/indra/llinventory/tests/inventorymisc_test.cpp
+++ b/indra/llinventory/tests/inventorymisc_test.cpp
@@ -94,7 +94,7 @@ LLPointer<LLInventoryCategory> create_random_inventory_cat()
 	LLPointer<LLInventoryCategory> cat = new LLInventoryCategory(
 		item_id,
 		parent_id,
-		LLAssetType::AT_NONE,
+		LLFolderType::FT_NONE,
 		std::string("Sample category"));
 	return cat;
 }
@@ -452,7 +452,7 @@ namespace tut
 		ensure_equals("4.type::getType() failed", dst->getType(), src->getType());
 		ensure_equals("5.preferred type::getPreferredType() failed", dst->getPreferredType(), src->getPreferredType());
 
-		src->setPreferredType( LLAssetType::AT_TEXTURE);
+		src->setPreferredType( LLFolderType::FT_TEXTURE);
 		sd = ll_create_sd_from_inventory_category(src);
 		dst = ll_create_category_from_sd(sd);
 		ensure_equals("6.preferred type::getPreferredType() failed", dst->getPreferredType(), src->getPreferredType());
diff --git a/indra/llmessage/lltransfersourceasset.cpp b/indra/llmessage/lltransfersourceasset.cpp
index 5a1cd95ffcd..7332f5c9540 100644
--- a/indra/llmessage/lltransfersourceasset.cpp
+++ b/indra/llmessage/lltransfersourceasset.cpp
@@ -270,7 +270,6 @@ bool is_asset_fetch_by_id_allowed(LLAssetType::EType type)
 		case LLAssetType::AT_BODYPART:
 		case LLAssetType::AT_ANIMATION:
 		case LLAssetType::AT_GESTURE:
-		case LLAssetType::AT_FAVORITE:
 			rv = true;
 			break;
 		default:
@@ -293,7 +292,6 @@ bool is_asset_id_knowable(LLAssetType::EType type)
 		case LLAssetType::AT_BODYPART:
 		case LLAssetType::AT_ANIMATION:
 		case LLAssetType::AT_GESTURE:
-		case LLAssetType::AT_FAVORITE:
 		case LLAssetType::AT_LINK:
 		case LLAssetType::AT_LINK_FOLDER:
 			rv = true;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 26170d17137..f27d949faf4 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -214,7 +214,6 @@ set(viewer_SOURCE_FILES
     llfloaterwhitelistentry.cpp
     llfloaterwindlight.cpp
     llfloaterworldmap.cpp
-    llfoldertype.cpp
     llfolderview.cpp
     llfolderviewitem.cpp
     llfollowcam.cpp
@@ -427,11 +426,13 @@ set(viewer_SOURCE_FILES
     llvectorperfoptions.cpp
     llviewchildren.cpp
     llviewerassetstorage.cpp
+    llviewerassettype.cpp
     llvieweraudio.cpp
     llviewercamera.cpp
     llviewercontrol.cpp
     llviewerdisplay.cpp
     llviewerfloaterreg.cpp
+    llviewerfoldertype.cpp
     llviewergenericmessage.cpp
     llviewergesture.cpp    
     llviewerhelp.cpp
@@ -686,7 +687,6 @@ set(viewer_HEADER_FILES
     llfloaterwhitelistentry.h
     llfloaterwindlight.h
     llfloaterworldmap.h
-    llfoldertype.h
     llfolderview.h
     llfoldervieweventlistener.h
     llfolderviewitem.h
@@ -899,12 +899,14 @@ set(viewer_HEADER_FILES
     llvectorperfoptions.h
     llviewchildren.h
     llviewerassetstorage.h
+    llviewerassettype.h
     llvieweraudio.h
     llviewerbuild.h
     llviewercamera.h
     llviewercontrol.h
     llviewerdisplay.h
     llviewerfloaterreg.h
+    llviewerfoldertype.h
     llviewergenericmessage.h
     llviewergesture.h    
     llviewerhelp.h
diff --git a/indra/newview/app_settings/foldertypes.xml b/indra/newview/app_settings/foldertypes.xml
index 2038779c4f5..0d539177f38 100644
--- a/indra/newview/app_settings/foldertypes.xml
+++ b/indra/newview/app_settings/foldertypes.xml
@@ -1,66 +1,61 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <ensemble_defs>
   <ensemble
-    asset_num="-1"
-    xui_name="default"
-    icon_name="inv_plain_closed.tga"
-     />
-  <ensemble
-    asset_num="27"
+    foldertype_num="27"
     xui_name="head"
     icon_name="inv_folder_outfit_head.tga"
 	allowed="hair,eyes"
      />
   <ensemble
-    asset_num="28"
+    foldertype_num="28"
     xui_name="gloves"
     icon_name="inv_folder_outfit_gloves.tga"
 	allowed="gloves"
      />
   <ensemble
-    asset_num="29"
+    foldertype_num="29"
     xui_name="jacket"
     icon_name="inv_folder_outfit_jacket.tga"
 	allowed="jacket"
      />
   <ensemble
-    asset_num="30"
+    foldertype_num="30"
     xui_name="pants"
     icon_name="inv_folder_outfit_pants.tga"
 	allowed="pants,underpants"
      />
   <ensemble
-    asset_num="31"
+    foldertype_num="31"
     xui_name="shape"
     icon_name="inv_folder_outfit_shape.tga"
 	allowed="shape,skin,hair,eyes"
      />
   <ensemble
-    asset_num="32"
+    foldertype_num="32"
     xui_name="shoes"
     icon_name="inv_folder_outfit_shoes.tga"
 	allowed="shoes,socks"
      />
   <ensemble
-    asset_num="33"
+    foldertype_num="33"
     xui_name="shirt"
     icon_name="inv_folder_outfit_shirt.tga"
 	allowed="shirt,undershirt"
      />
   <ensemble
-    asset_num="34"
+    foldertype_num="34"
     xui_name="skirt"
     icon_name="inv_folder_outfit_skirt.tga"
 	allowed=""
      />
   <ensemble
-    asset_num="35"
+    foldertype_num="35"
     xui_name="underpants"
     icon_name="inv_folder_outfit_underpants.tga"
 	allowed="underpants"
      />
   <ensemble
-    asset_num="36"
+    foldertype_num="36"
     xui_name="undershirt"
     icon_name="inv_folder_outfit_undershirt.tga"
 	allowed="undershirt"
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index b9a0b4293dd..953769de085 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -433,7 +433,7 @@ void LLAgentWearables::saveWearableAs(const EWearableType type,
 	if (save_in_lost_and_found)
 	{
 		category_id = gInventory.findCategoryUUIDForType(
-			LLAssetType::AT_LOST_AND_FOUND);
+			LLFolderType::FT_LOST_AND_FOUND);
 	}
 	else
 	{
@@ -839,7 +839,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
 		}
 
 		// Get the UUID of the current outfit folder (will be created if it doesn't exist)
-		LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 		
 		LLInitialWearablesFetch* outfit = new LLInitialWearablesFetch();
 		
@@ -980,8 +980,7 @@ void LLAgentWearables::recoverMissingWearable(const EWearableType type, U32 inde
 	// Add a new one in the lost and found folder.
 	// (We used to overwrite the "not found" one, but that could potentially
 	// destory content.) JC
-	LLUUID lost_and_found_id = 
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+	const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 	LLPointer<LLInventoryCallback> cb =
 		new addWearableToAgentInventoryCallback(
 			LLPointer<LLRefCount>(NULL),
@@ -1122,8 +1121,8 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name,
 
 	// First, make a folder in the Clothes directory.
 	LLUUID folder_id = gInventory.createNewCategory(
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING),
-		LLAssetType::AT_NONE,
+		gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING),
+		LLFolderType::FT_NONE,
 		new_folder_name);
 
 	bool found_first_item = false;
@@ -1256,10 +1255,10 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name)
 	}
 
 	// First, make a folder in the My Outfits directory.
-	LLUUID parent_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_MY_OUTFITS);
+	const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
 	LLUUID folder_id = gInventory.createNewCategory(
 		parent_id,
-		LLAssetType::AT_OUTFIT,
+		LLFolderType::FT_OUTFIT,
 		new_folder_name);
 
 	LLAppearanceManager::shallowCopyCategory(LLAppearanceManager::getCOF(),folder_id, NULL);
@@ -2019,7 +2018,7 @@ void LLInitialWearablesFetch::processWearablesMessage()
 {
 	if (!mAgentInitialWearables.empty()) // We have an empty current outfit folder, use the message data instead.
 	{
-		LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 		for (U8 i = 0; i < mAgentInitialWearables.size(); ++i)
 		{
 			// Populate the current outfit folder with links to the wearables passed in the message
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 4e022aeb299..cc118a6690b 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -130,11 +130,11 @@ void LLOutfitObserver::done()
 			{
 				if(LLInventoryType::IT_GESTURE == item->getInventoryType())
 				{
-					pid = gInventory.findCategoryUUIDForType(LLAssetType::AT_GESTURE);
+					pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE);
 				}
 				else
 				{
-					pid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+					pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 				}
 				break;
 			}
@@ -146,7 +146,7 @@ void LLOutfitObserver::done()
 		
 		LLUUID cat_id = gInventory.createNewCategory(
 			pid,
-			LLAssetType::AT_NONE,
+			LLFolderType::FT_NONE,
 			name);
 		mCatID = cat_id;
 		LLPointer<LLInventoryCallback> cb = new LLWearInventoryCategoryCallback(mCatID, mAppend);
@@ -353,7 +353,7 @@ void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventory
 /* static */ 
 LLUUID LLAppearanceManager::getCOF()
 {
-	return gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+	return gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 }
 
 // Update appearance from outfit folder.
@@ -370,12 +370,12 @@ void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, boo
 	else
 	{
 		LLViewerInventoryCategory* catp = gInventory.getCategory(category);
-		if (catp->getPreferredType() == LLAssetType::AT_NONE ||
-			LLAssetType::lookupIsEnsembleCategoryType(catp->getPreferredType()))
+		if (catp->getPreferredType() == LLFolderType::FT_NONE ||
+			LLFolderType::lookupIsEnsembleType(catp->getPreferredType()))
 		{
 			updateCOFFromCategory(category, append);  // append is false - rebuild COF.
 		}
-		else if (catp->getPreferredType() == LLAssetType::AT_OUTFIT)
+		else if (catp->getPreferredType() == LLFolderType::FT_OUTFIT)
 		{
 			rebuildCOFFromOutfit(category);
 		}
@@ -401,7 +401,7 @@ void LLAppearanceManager::updateCOFFromCategory(const LLUUID& category, bool app
 		return;
 	}
 		
-	const LLUUID &current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+	const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 	// Processes that take time should show the busy cursor
 	//inc_busy_count();
 		
@@ -499,7 +499,7 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 		{
 			LLViewerInventoryCategory *catp = item->getLinkedCategory();
 			// Skip copying outfit links.
-			if (catp && catp->getPreferredType() != LLAssetType::AT_OUTFIT)
+			if (catp && catp->getPreferredType() != LLFolderType::FT_OUTFIT)
 			{
 				link_inventory_item(gAgent.getID(),
 									item->getLinkedUUID(),
@@ -604,7 +604,7 @@ void LLAppearanceManager::rebuildCOFFromOutfit(const LLUUID& category)
 		LLNotifications::instance().add("CouldNotPutOnOutfit");
 		return;
 	}
-		
+
 	// Processes that take time should show the busy cursor
 	//inc_busy_count();
 
@@ -622,7 +622,7 @@ void LLAppearanceManager::rebuildCOFFromOutfit(const LLUUID& category)
 
 	// Create a link to the outfit that we wore.
 	LLViewerInventoryCategory* catp = gInventory.getCategory(category);
-	if (catp && catp->getPreferredType() == LLAssetType::AT_OUTFIT)
+	if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT)
 	{
 		link_inventory_item(gAgent.getID(), category, current_outfit_id, catp->getName(),
 							LLAssetType::AT_LINK_FOLDER, link_waiter);
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index cd3963050f6..ea3809d58d6 100644
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -333,7 +333,7 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content)
 		LLAssetStorage::LLStoreAssetCallback callback = NULL;
 		void *userdata = NULL;
 		upload_new_resource(next_file, asset_name, asset_name,
-				    0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE,
+				    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
 				    next_owner_perms, group_perms,
 				    everyone_perms, display_name,
 				    callback, expected_upload_cost, userdata);
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 2f674013017..97e0aa5f461 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -343,7 +343,7 @@ bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& re
 		// Servers older than 1.25 require the text of the message to be the
 		// calling card folder ID for the offering user. JC
 		LLUUID calling_card_folder_id = 
-			gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+			gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 		std::string message = calling_card_folder_id.asString();
 		requestFriendship(notification["payload"]["id"].asUUID(), 
 		    notification["payload"]["name"].asString(),
@@ -355,7 +355,7 @@ bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& re
 // static
 void LLAvatarActions::requestFriendship(const LLUUID& target_id, const std::string& target_name, const std::string& message)
 {
-	LLUUID calling_card_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+	const LLUUID calling_card_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 	send_improved_im(target_id,
 					 target_name,
 					 message,
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 3b5b7f570ee..6a82550ce61 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -437,7 +437,7 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
 			}
 			else
 			{
-				LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+				const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 				if (item->getParentUUID() == favorites_id)
 				{
 					llwarns << "Attemt to copy a favorite item into the same folder." << llendl;
@@ -550,7 +550,7 @@ void LLFavoritesBarCtrl::changed(U32 mask)
 {
 	if (mFavoriteFolderId.isNull())
 	{
-		mFavoriteFolderId = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+		mFavoriteFolderId = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 		
 		if (mFavoriteFolderId.notNull())
 		{
diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp
index 55b7ed0c99c..095fe0a220f 100644
--- a/indra/newview/llfloateranimpreview.cpp
+++ b/indra/newview/llfloateranimpreview.cpp
@@ -989,7 +989,7 @@ void LLFloaterAnimPreview::onBtnOK(void* userdata)
 						    name,
 						    desc,
 						    0,
-						    LLAssetType::AT_NONE,
+						    LLFolderType::FT_NONE,
 						    LLInventoryType::IT_ANIMATION,
 						    LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
 						    name,
diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp
index a73ebf4e06f..1cc0fbef221 100644
--- a/indra/newview/llfloaterbulkpermission.cpp
+++ b/indra/newview/llfloaterbulkpermission.cpp
@@ -272,7 +272,6 @@ void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, Invent
 			( asstype == LLAssetType::AT_BODYPART  && gSavedSettings.getBOOL("BulkChangeIncludeBodyParts" )) ||
 			( asstype == LLAssetType::AT_CLOTHING  && gSavedSettings.getBOOL("BulkChangeIncludeClothing"  )) ||
 			( asstype == LLAssetType::AT_GESTURE   && gSavedSettings.getBOOL("BulkChangeIncludeGestures"  )) ||
-			( asstype == LLAssetType::AT_FAVORITE  && gSavedSettings.getBOOL("BulkChangeIncludeFavourite" )) ||
 			( asstype == LLAssetType::AT_NOTECARD  && gSavedSettings.getBOOL("BulkChangeIncludeNotecards" )) ||
 			( asstype == LLAssetType::AT_OBJECT    && gSavedSettings.getBOOL("BulkChangeIncludeObjects"   )) ||
 			( asstype == LLAssetType::AT_LSL_TEXT  && gSavedSettings.getBOOL("BulkChangeIncludeScripts"   )) ||
diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp
index 9d07362edc8..896a7bfabbd 100644
--- a/indra/newview/llfloaterbuy.cpp
+++ b/indra/newview/llfloaterbuy.cpp
@@ -292,7 +292,7 @@ void LLFloaterBuy::onClickBuy()
 {
 	// Put the items where we put new folders.
 	LLUUID category_id;
-	category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+	category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
 
 	// *NOTE: doesn't work for multiple object buy, which UI does not
 	// currently support sale info is used for verification only, if
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
index 3a4171c6bee..15229e9be3d 100644
--- a/indra/newview/llfloaterbuycontents.cpp
+++ b/indra/newview/llfloaterbuycontents.cpp
@@ -285,7 +285,7 @@ void LLFloaterBuyContents::onClickBuy()
 
 	// Put the items where we put new folders.
 	LLUUID category_id;
-	category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CATEGORY);
+	category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CATEGORY);
 
 	// *NOTE: doesn't work for multiple object buy, which UI does not
 	// currently support sale info is used for verification only, if
diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp
index c890f9f1226..8cfa0a8a572 100644
--- a/indra/newview/llfloaterinventory.cpp
+++ b/indra/newview/llfloaterinventory.cpp
@@ -76,6 +76,7 @@
 #include "lltabcontainer.h"
 #include "lltooldraganddrop.h"
 #include "lluictrlfactory.h"
+#include "llviewerfoldertype.h"
 #include "llviewerinventory.h"
 #include "llviewermessage.h"
 #include "llviewerobjectlist.h"
@@ -432,8 +433,8 @@ LLFloaterInventory::LLFloaterInventory(const LLSD& key)
 	// Menu Callbacks (non contex menus)
 	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLFloaterInventory::doToSelected, this, _2));
 	mCommitCallbackRegistrar.add("Inventory.CloseAllFolders", boost::bind(&LLFloaterInventory::closeAllFolders, this));
-	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
-	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND));
 	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLFloaterInventory::doCreate, this, _2));
 // 	mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLFloaterInventory::newWindow, this));
 	mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLFloaterInventory::toggleFindOptions, this));
@@ -1133,10 +1134,6 @@ const std::string& get_item_icon_name(LLAssetType::EType asset_type,
 	case LLAssetType::AT_GESTURE:
 		idx = GESTURE_ICON_NAME;
 		break;
-	case LLAssetType::AT_FAVORITE:
-		//TODO - need bette idx
-		idx = LANDMARK_ICON_NAME;
-		break;
 	case LLAssetType::AT_LINK:
 		idx = LINKITEM_ICON_NAME;
 		break;
@@ -1181,8 +1178,8 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p)
 
 	// contex menu callbacks
 	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLInventoryPanel::doToSelected, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
-	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND));
 	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLInventoryPanel::doCreate, this, _2));
 	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2));
 	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));
@@ -1240,19 +1237,19 @@ BOOL LLInventoryPanel::postBuild()
 
 	// determine the root folder, if any, so inventory contents show just the children
 	// of that folder (i.e. not including the folder itself).
-	const LLAssetType::EType preferred_type = LLAssetType::lookupHumanReadable(mStartFolderString);
+	const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(mStartFolderString);
 
-	if ("inventory" == mStartFolderString)
+	if ("INVENTORY" == mStartFolderString)
 	{
 		mStartFolderID = gInventory.getRootFolderID();
 	}
-	else if ("library" == mStartFolderString)
+	else if ("LIBRARY" == mStartFolderString)
 	{
 		mStartFolderID = gInventory.getLibraryRootFolderID();
 	}
 	else
 	{
-		mStartFolderID = (preferred_type != LLAssetType::AT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
+		mStartFolderID = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
 	}
 
 	// build view of inventory if we need default full hierarchy and inventory ready, otherwise wait for modelChanged() callback
@@ -1263,7 +1260,7 @@ BOOL LLInventoryPanel::postBuild()
 	}
 
 	// bit of a hack to make sure the inventory is open.
-	mFolders->openFolder(preferred_type != LLAssetType::AT_NONE ? LLAssetType::lookupCategoryName(preferred_type) : "My Inventory");
+	mFolders->openFolder(preferred_type != LLFolderType::FT_NONE ? LLViewerFolderType::lookupNewCategoryName(preferred_type) : "My Inventory");
 
 	if (mSortOrderSetting != INHERIT_SORT_ORDER)
 	{
@@ -1711,9 +1708,9 @@ void LLInventoryPanel::openAllFolders()
 	mFolders->arrangeAll();
 }
 
-void LLInventoryPanel::openDefaultFolderForType(LLAssetType::EType type)
+void LLInventoryPanel::openDefaultFolderForType(LLFolderType::EType type)
 {
-	LLUUID category_id = mInventory->findCategoryUUIDForType(type);
+	const LLUUID category_id = mInventory->findCategoryUUIDForType(type);
 	LLOpenFolderByID opener(category_id);
 	mFolders->applyFunctorRecursively(opener);
 }
diff --git a/indra/newview/llfloaterinventory.h b/indra/newview/llfloaterinventory.h
index 4c9ac5d4c68..3fed765bba2 100644
--- a/indra/newview/llfloaterinventory.h
+++ b/indra/newview/llfloaterinventory.h
@@ -37,6 +37,7 @@
 #include "llassetstorage.h"
 #include "lldarray.h"
 #include "llfloater.h"
+#include "llfoldertype.h"
 #include "llinventory.h"
 #include "llinventoryfilter.h"
 #include "llfolderview.h"
@@ -131,12 +132,12 @@ class LLInventoryPanel : public LLPanel
 
 	// Call this method to set the selection.
 	void openAllFolders();
-	void openDefaultFolderForType(LLAssetType::EType);
+	void openDefaultFolderForType(LLFolderType::EType type);
 	void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
 	void setSelectCallback(const LLFolderView::signal_t::slot_type& cb) { if (mFolders) mFolders->setSelectCallback(cb); }
 	void clearSelection();
 	LLInventoryFilter* getFilter() { return mFolders->getFilter(); }
-	void setFilterTypes(U64 filter, BOOL filter_for_categories = FALSE); // if filter_for_categories is true, operate on folder preferred asset type
+	void setFilterTypes(U64 filter, BOOL filter_for_categories = FALSE); // if filter_for_categories is true, operate on folder preferred type
 	U32 getFilterTypes() const { return mFolders->getFilterTypes(); }
 	void setFilterPermMask(PermissionMask filter_perm_mask);
 	U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); }
diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp
index ed7d2c71eaa..b7296518d46 100644
--- a/indra/newview/llfloaternamedesc.cpp
+++ b/indra/newview/llfloaternamedesc.cpp
@@ -176,7 +176,7 @@ void LLFloaterNameDesc::onBtnOK( )
 	upload_new_resource(mFilenameAndPath, // file
 			    childGetValue("name_form").asString(), 
 			    childGetValue("description_form").asString(), 
-			    0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE,
+			    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
 			    LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
 			    display_name, callback, expected_upload_cost, nruserdata);
 	closeFloater(false);
diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp
index aa82dc34b74..f14a3361771 100644
--- a/indra/newview/llfloateropenobject.cpp
+++ b/indra/newview/llfloateropenobject.cpp
@@ -157,14 +157,14 @@ void LLFloaterOpenObject::moveToInventory(bool wear)
 	if (wear)
 	{
 		parent_category_id = gInventory.findCategoryUUIDForType(
-			LLAssetType::AT_CLOTHING);
+			LLFolderType::FT_CLOTHING);
 	}
 	else
 	{
 		parent_category_id = gInventory.getRootFolderID();
 	}
 	LLUUID category_id = gInventory.createNewCategory(parent_category_id, 
-		LLAssetType::AT_NONE, 
+		LLFolderType::FT_NONE, 
 		name);
 
 	LLCatAndWear* data = new LLCatAndWear;
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 70a3ad5252d..b146ed9b389 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -770,7 +770,7 @@ void LLFloaterReporter::takeScreenshot()
 	if (COMPLAINT_REPORT == mReportType)
 	{
 		mResourceDatap->mAssetInfo.mType = LLAssetType::AT_TEXTURE;
-		mResourceDatap->mPreferredLocation = LLAssetType::EType(-2);
+		mResourceDatap->mPreferredLocation = LLFolderType::EType(LLResourceData::INVALID_LOCATION);
 	}
 	else
 	{
@@ -838,7 +838,7 @@ void LLFloaterReporter::uploadDoneCallback(const LLUUID &uuid, void *user_data,
 	}
 
 	EReportType report_type = UNKNOWN_REPORT;
-	if (data->mPreferredLocation == -2)
+	if (data->mPreferredLocation == LLResourceData::INVALID_LOCATION)
 	{
 		report_type = COMPLAINT_REPORT;
 	}
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 235e8192186..541e2a26648 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -980,7 +980,7 @@ void LLSnapshotLivePreview::saveTexture()
 				    "Snapshot : " + pos_string,
 				    "Taken by " + who_took_it + " at " + pos_string,
 				    0,
-				    LLAssetType::AT_SNAPSHOT_CATEGORY,
+				    LLFolderType::FT_SNAPSHOT_CATEGORY,
 				    LLInventoryType::IT_SNAPSHOT,
 				    PERM_ALL,  // Note: Snapshots to inventory is a special case of content upload
 				    PERM_NONE, // that ignores the user's premissions preferences and continues to
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index b7e8835fb88..fbaf10d4553 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -297,7 +297,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
 		LLFirstUse::useMap();
 
 		// Start speculative download of landmarks
-		LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+		const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 		gInventory.startBackgroundFetch(landmark_folder_id);
 
 		childSetFocus("location", TRUE);
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index de18e747528..37c175d03f7 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -54,6 +54,7 @@
 #include "llviewermenu.h"
 #include "lluictrlfactory.h"
 #include "llviewercontrol.h"
+#include "llviewerfoldertype.h"
 #include "llviewerwindow.h"
 #include "llvoavatar.h"
 #include "llfloaterproperties.h"
@@ -1107,7 +1108,7 @@ void LLFolderView::propertiesSelectedItems( void )
 	}
 }
 
-void LLFolderView::changeType(LLInventoryModel *model, LLAssetType::EType new_folder_type)
+void LLFolderView::changeType(LLInventoryModel *model, LLFolderType::EType new_folder_type)
 {
 	LLFolderBridge *folder_bridge = LLFolderBridge::sSelf;
 
@@ -1957,7 +1958,7 @@ bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata)
 	if (action.length() > change_folder_string.length() && 
 		(action.compare(0,change_folder_string.length(),"change_folder_type_") == 0))
 	{
-		LLAssetType::EType new_folder_type = LLFolderType::lookupTypeFromXUIName(action.substr(change_folder_string.length()));
+		LLFolderType::EType new_folder_type = LLViewerFolderType::lookupTypeFromXUIName(action.substr(change_folder_string.length()));
 		changeType(model, new_folder_type);
 		return true;
 	}
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index ebfb4efde2d..0bd65b5f909 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -192,7 +192,7 @@ class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler
 	void propertiesSelectedItems( void );
 
 	// change the folder type
-	void changeType(LLInventoryModel *model, LLAssetType::EType new_folder_type);
+	void changeType(LLInventoryModel *model, LLFolderType::EType new_folder_type);
 
 	void autoOpenItem(LLFolderViewFolder* item);
 	void closeAutoOpenedFolders();
diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h
index ff38da279a5..60ece75cead 100644
--- a/indra/newview/llfoldervieweventlistener.h
+++ b/indra/newview/llfoldervieweventlistener.h
@@ -32,6 +32,7 @@
 #define LLFOLDERVIEWEVENTLISTENER_H
 
 #include "lldarray.h"	// JAMESDEBUG convert to std::vector
+#include "llfoldertype.h"
 #include "llfontgl.h"	// just for StyleFlags enum
 #include "llpointer.h"
 
@@ -57,7 +58,7 @@ class LLFolderViewEventListener
 	virtual const LLUUID& getUUID() const = 0;
 	virtual time_t getCreationDate() const = 0;	// UTC seconds
 	virtual PermissionMask getPermissionMask() const = 0;
-	virtual LLAssetType::EType getPreferredType() const = 0;
+	virtual LLFolderType::EType getPreferredType() const = 0;
 	virtual LLPointer<LLUIImage> getIcon() const = 0;
 	virtual LLFontGL::StyleFlags getLabelStyle() const = 0;
 	virtual std::string getLabelSuffix() const = 0;
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 3591daf92d3..d747260e8a5 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -244,13 +244,13 @@ void LLFolderViewItem::refreshFromListener()
 	if(mListener)
 	{
 		mLabel = mListener->getDisplayName();
-		LLAssetType::EType preferred_type = mListener->getPreferredType();
+		LLFolderType::EType preferred_type = mListener->getPreferredType();
 
 		// *TODO: to be removed when database supports multi language. This is a
 		// temporary attempt to display the inventory folder in the user locale.
 		// mantipov: *NOTE: be sure this code is synchronized with LLFriendCardsManager::findChildFolderUUID
 		//		it uses the same way to find localized string
-		if (LLAssetType::lookupIsProtectedCategoryType(preferred_type))
+		if (LLFolderType::lookupIsProtectedType(preferred_type))
 		{
 			LLTrans::findString(mLabel, "InvFolder " + mLabel);
 		};
@@ -1749,7 +1749,7 @@ bool LLFolderViewFolder::isTrash() const
 {
 	if (mAmTrash == LLFolderViewFolder::UNKNOWN)
 	{
-		mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH, false) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH;
+		mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH, false) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH;
 	}
 	return mAmTrash == LLFolderViewFolder::TRASH;
 }
@@ -2163,7 +2163,7 @@ BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )
 {
 	const LLUUID &cat_uuid = getListener()->getUUID();
 	const LLViewerInventoryCategory *cat = gInventory.getCategory(cat_uuid);
-	if (cat && cat->getPreferredType() == LLAssetType::AT_OUTFIT)
+	if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT)
 	{
 		getListener()->performAction(NULL, NULL,"replaceoutfit");
 		return TRUE;
@@ -2486,7 +2486,7 @@ bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolde
 		&& b->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
 	{
 
-		static LLUUID favorites_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+		static const LLUUID& favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 
 		LLUUID a_uuid = a->getParentFolder()->getListener()->getUUID();
 		LLUUID b_uuid = b->getParentFolder()->getListener()->getUUID();
diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp
index fbcaeee01f2..5f79fe8b201 100644
--- a/indra/newview/llfriendcard.cpp
+++ b/indra/newview/llfriendcard.cpp
@@ -135,14 +135,14 @@ const LLUUID LLFriendCardsManager::extractAvatarID(const LLUUID& avatarID)
 // and this method must be called before any actions with friend list
 void LLFriendCardsManager::ensureFriendFoldersExist()
 {
-	LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+	const LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 
 	LLUUID friendFolderUUID = findFriendFolderUUIDImpl();
 
 	if (friendFolderUUID.isNull())
 	{
 		friendFolderUUID = gInventory.createNewCategory(callingCardsFolderID,
-			LLAssetType::AT_CALLINGCARD, get_friend_folder_name());
+			LLFolderType::FT_CALLINGCARD, get_friend_folder_name());
 	}
 
 	LLUUID friendAllSubfolderUUID = findFriendAllSubfolderUUIDImpl();
@@ -150,7 +150,7 @@ void LLFriendCardsManager::ensureFriendFoldersExist()
 	if (friendAllSubfolderUUID.isNull())
 	{
 		friendAllSubfolderUUID = gInventory.createNewCategory(friendFolderUUID,
-			LLAssetType::AT_CALLINGCARD, get_friend_all_subfolder_name());
+			LLFolderType::FT_CALLINGCARD, get_friend_all_subfolder_name());
 	}
 }
 
@@ -351,7 +351,7 @@ void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBud
 /************************************************************************/
 const LLUUID& LLFriendCardsManager::findFriendFolderUUIDImpl() const
 {
-	LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+	const LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 
 	std::string friendFolderName = get_friend_folder_name();
 
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index ca9ebf8dc14..74f6d847096 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -76,6 +76,7 @@
 #include "llscrollcontainer.h"
 #include "llimview.h"
 #include "lltooldraganddrop.h"
+#include "llviewerfoldertype.h"
 #include "llviewertexturelist.h"
 #include "llviewerinventory.h"
 #include "llviewerobjectlist.h"
@@ -83,6 +84,7 @@
 #include "llvoavatar.h"
 #include "llwearable.h"
 #include "llwearablelist.h"
+#include "llviewerassettype.h"
 #include "llviewermessage.h" 
 #include "llviewerregion.h"
 #include "llvoavatarself.h"
@@ -200,9 +202,9 @@ PermissionMask LLInvFVBridge::getPermissionMask() const
 }
 
 // virtual
-LLAssetType::EType LLInvFVBridge::getPreferredType() const
+LLFolderType::EType LLInvFVBridge::getPreferredType() const
 {
-	return LLAssetType::AT_NONE;
+	return LLFolderType::FT_NONE;
 }
 
 
@@ -333,7 +335,7 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return;
 	LLMessageSystem* msg = gMessageSystem;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	LLViewerInventoryItem* item = NULL;
 	LLViewerInventoryCategory* cat = NULL;
 	std::vector<LLUUID> move_ids;
@@ -498,7 +500,7 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
 			}
 		}
 		const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i));
-		if (cat && !LLAssetType::lookupCanLink(cat->getPreferredType()))
+		if (cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
 		{
 			return FALSE;
 		}
@@ -633,7 +635,7 @@ BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
 
 	if(obj)
 	{
-		*type = LLAssetType::lookupDragAndDropType(obj->getActualType());
+		*type = LLViewerAssetType::lookupDragAndDropType(obj->getActualType());
 		if(*type == DAD_NONE)
 		{
 			return FALSE;
@@ -674,7 +676,7 @@ BOOL LLInvFVBridge::isInTrash() const
 {
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return FALSE;
-	const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	return model->isObjectDescendentOf(mUUID, trash_id);
 }
 
@@ -687,7 +689,7 @@ BOOL LLInvFVBridge::isLinkedObjectInTrash() const
 	{
 		LLInventoryModel* model = getInventoryModel();
 		if(!model) return FALSE;
-		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		return model->isObjectDescendentOf(obj->getLinkedUUID(), trash_id);
 	}
 	return FALSE;
@@ -705,7 +707,7 @@ BOOL LLInvFVBridge::isCOFFolder() const
 {
 	const LLInventoryModel* model = getInventoryModel();
 	if(!model) return TRUE;
-	const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+	const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 	if (mUUID == cof_id || model->isObjectDescendentOf(mUUID, cof_id))
 	{
 		return TRUE;
@@ -1032,7 +1034,7 @@ void LLItemBridge::restoreItem()
 	if(item)
 	{
 		LLInventoryModel* model = getInventoryModel();
-		const LLUUID new_parent = model->findCategoryUUIDForType(item->getType());
+		const LLUUID new_parent = model->findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(item->getType()));
 		// do not restamp on restore.
 		LLInvFVBridge::changeItemParent(model, item, new_parent, FALSE);
 	}
@@ -1065,7 +1067,7 @@ void LLItemBridge::restoreToWorld()
 	}
 
 	// Check if it's in the trash. (again similar to the normal rez logic)
-	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id))
 	{
 		remove_from_inventory = TRUE;
@@ -1260,7 +1262,7 @@ BOOL LLItemBridge::removeItem()
 	LLPreview::hide(mUUID, TRUE);
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return FALSE;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	LLViewerInventoryItem* item = getItem();
 
 	// if item is not already in trash
@@ -1353,7 +1355,7 @@ BOOL LLFolderBridge::isItemMovable() const
 	LLInventoryObject* obj = getInventoryObject();
 	if(obj)
 	{
-		return (!LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)obj)->getPreferredType()));
+		return (!LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)obj)->getPreferredType()));
 	}
 	return FALSE;
 }
@@ -1389,7 +1391,7 @@ BOOL LLFolderBridge::isItemRemovable()
 		return FALSE;
 	}
 
-	if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+	if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
 	{
 		return FALSE;
 	}
@@ -1402,7 +1404,7 @@ BOOL LLFolderBridge::isItemRemovable()
 	for( i = 0; i < descendent_categories.count(); i++ )
 	{
 		LLInventoryCategory* category = descendent_categories[i];
-		if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+		if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
 		{
 			return FALSE;
 		}
@@ -1579,20 +1581,20 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 		const LLUUID& cat_id = inv_cat->getUUID();
 
 		// Is the destination the trash?
-		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		BOOL move_is_into_trash = (mUUID == trash_id)
 				|| model->isObjectDescendentOf(mUUID, trash_id);
-		BOOL is_movable = (!LLAssetType::lookupIsProtectedCategoryType(inv_cat->getPreferredType()));
-		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		BOOL is_movable = (!LLFolderType::lookupIsProtectedType(inv_cat->getPreferredType()));
+		const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
+		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
 		if (move_is_into_current_outfit || move_is_into_outfit)
 		{
 			// BAP - restrictions?
 			is_movable = true;
 		}
 
-		if (mUUID == gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE))
+		if (mUUID == gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE))
 		{
 			is_movable = FALSE; // It's generally movable but not into Favorites folder. EXT-1604
 		}
@@ -1604,7 +1606,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 			for( i = 0; i < descendent_categories.count(); i++ )
 			{
 				LLInventoryCategory* category = descendent_categories[i];
-				if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+				if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
 				{
 					// ...can't move "special folders" like Textures
 					is_movable = FALSE;
@@ -1837,8 +1839,8 @@ bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat,
 		LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe?
 		// BAP remove AT_NONE support after ensembles are fully working?
 		return (linked_category && 
-				((linked_category->getPreferredType() == LLAssetType::AT_NONE) ||
-				 (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType()))));
+				((linked_category->getPreferredType() == LLFolderType::FT_NONE) ||
+				 (LLFolderType::lookupIsEnsembleType(linked_category->getPreferredType()))));
 	}
 }
 
@@ -2140,7 +2142,7 @@ void LLFolderBridge::determineFolderType()
 BOOL LLFolderBridge::isItemRenameable() const
 {
 	LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)getCategory();
-	if(cat && !LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())
+	if(cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType())
 	   && (cat->getOwnerID() == gAgent.getID()))
 	{
 		return TRUE;
@@ -2155,15 +2157,15 @@ void LLFolderBridge::restoreItem()
 	if(cat)
 	{
 		LLInventoryModel* model = getInventoryModel();
-		LLUUID new_parent = model->findCategoryUUIDForType(cat->getType());
+		const LLUUID new_parent = model->findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(cat->getType()));
 		// do not restamp children on restore
 		LLInvFVBridge::changeCategoryParent(model, cat, new_parent, FALSE);
 	}
 }
 
-LLAssetType::EType LLFolderBridge::getPreferredType() const
+LLFolderType::EType LLFolderBridge::getPreferredType() const
 {
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
 	LLViewerInventoryCategory* cat = getCategory();
 	if(cat)
 	{
@@ -2176,7 +2178,7 @@ LLAssetType::EType LLFolderBridge::getPreferredType() const
 // Icons for folders are based on the preferred type
 LLUIImagePtr LLFolderBridge::getIcon() const
 {
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
 	LLViewerInventoryCategory* cat = getCategory();
 	if(cat)
 	{
@@ -2185,7 +2187,7 @@ LLUIImagePtr LLFolderBridge::getIcon() const
 	return getIcon(preferred_type);
 }
 
-LLUIImagePtr LLFolderBridge::getIcon(LLAssetType::EType preferred_type)
+LLUIImagePtr LLFolderBridge::getIcon(LLFolderType::EType preferred_type)
 {
 	// we only have one folder image now
 	return LLUI::getUIImage("Inv_FolderClosed");
@@ -2224,7 +2226,7 @@ BOOL LLFolderBridge::removeItem()
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return FALSE;
 
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 
 	// Look for any gestures and deactivate them
 	LLInventoryModel::cat_array_t	descendent_categories;
@@ -2342,12 +2344,11 @@ void LLFolderBridge::folderOptionsMenu()
 	if(!model) return;
 
 	const LLInventoryCategory* category = model->getCategory(mUUID);
-	LLAssetType::EType type = category->getPreferredType();
-	const bool is_default_folder = category && LLAssetType::lookupIsProtectedCategoryType(type);
+	LLFolderType::EType type = category->getPreferredType();
+	const bool is_default_folder = category && LLFolderType::lookupIsProtectedType(type);
 	// BAP change once we're no longer treating regular categories as ensembles.
-	const bool is_ensemble = category && (type == LLAssetType::AT_NONE ||
-										  LLAssetType::lookupIsEnsembleCategoryType(type));
-	
+	const bool is_ensemble = category && (type == LLFolderType::FT_NONE ||
+										  LLFolderType::lookupIsEnsembleType(type));
 	// calling card related functionality for folders.
 
 	// Only enable calling-card related options for non-default folders.
@@ -2412,8 +2413,8 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 //	std::vector<std::string> disabled_items;
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
+	const LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 
 	mItems.clear(); //adding code to clear out member Items (which means Items should not have other data here at this point)
 	mDisabledItems.clear(); //adding code to clear out disabled members from previous 
@@ -2443,7 +2444,6 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	else if(isAgentInventory()) // do not allow creating in library
 	{
 		LLViewerInventoryCategory *cat =  getCategory();
-
 		// BAP removed protected check to re-enable standard ops in untyped folders.
 		// Not sure what the right thing is to do here.
 		if (!isCOFFolder() && cat /*&&
@@ -2460,7 +2460,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			mItems.push_back(std::string("Change Type"));
 			
 			LLViewerInventoryCategory *cat = getCategory();
-			if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))
+			if (cat && LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
 			{
 				mDisabledItems.push_back(std::string("Change Type"));
 			}
@@ -2470,7 +2470,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		else
 		{
 			// Want some but not all of the items from getClipboardEntries for outfits.
-			if (cat && cat->getPreferredType()==LLAssetType::AT_OUTFIT)
+			if (cat && cat->getPreferredType()==LLFolderType::FT_OUTFIT)
 			{
 				mItems.push_back(std::string("Rename"));
 				mItems.push_back(std::string("Delete"));
@@ -2606,7 +2606,7 @@ void LLFolderBridge::createNewCategory(void* user_data)
 	if(!model) return;
 	LLUUID id;
 	id = model->createNewCategory(bridge->getUUID(),
-								  LLAssetType::AT_NONE,
+								  LLFolderType::FT_NONE,
 								  LLStringUtil::null);
 	model->notifyObservers();
 
@@ -2691,7 +2691,7 @@ void LLFolderBridge::createWearable(LLFolderBridge* bridge, EWearableType type)
 // Separate function so can be called by global menu as well as right-click
 // menu.
 // static
-void LLFolderBridge::createWearable(LLUUID parent_id, EWearableType type)
+void LLFolderBridge::createWearable(const LLUUID &parent_id, EWearableType type)
 {
 	LLWearable* wearable = LLWearableList::instance().createNewWearable(type);
 	LLAssetType::EType asset_type = wearable->getAssetType();
@@ -2834,17 +2834,17 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 			break;
 
 		case LLAssetType::AT_CATEGORY:
-			is_movable = !LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)inv_item)->getPreferredType());
+			is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType());
 			break;
 		default:
 			break;
 		}
 
-		LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
-		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
+		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
 		
 		if(is_movable && move_is_into_trash)
 		{
@@ -2874,7 +2874,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 				.isObjDirectDescendentOfCategory (inv_item, getCategory());
 		}
  
-		LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+		const LLUUID& favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 
 		// we can move item inside a folder only if this folder is Favorites. See EXT-719
 		accept = is_movable && ((mUUID != inv_item->getParentUUID()) || (mUUID == favorites_id));
@@ -4915,7 +4915,7 @@ void	LLLSLTextBridgeAction::doIt()
 BOOL LLWearableBridgeAction::isInTrash() const
 {
 	if(!mModel) return FALSE;
-	LLUUID trash_id = mModel->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = mModel->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	return mModel->isObjectDescendentOf(mUUID, trash_id);
 }
 
@@ -5054,7 +5054,7 @@ std::string LLLinkFolderBridge::sPrefix("Link: ");
 
 LLUIImagePtr LLLinkFolderBridge::getIcon() const
 {
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
 	if (LLViewerInventoryItem *item = getItem())
 	{
 		if (const LLViewerInventoryCategory* cat = item->getLinkedCategory())
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 6b2a2d32dec..abf9905b73e 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -158,7 +158,7 @@ class LLInvFVBridge : public LLFolderViewEventListener
 	virtual const std::string& getName() const;
 	virtual const std::string& getDisplayName() const;
 	virtual PermissionMask getPermissionMask() const;
-	virtual LLAssetType::EType getPreferredType() const;
+	virtual LLFolderType::EType getPreferredType() const;
 	virtual time_t getCreationDate() const;
 	virtual LLFontGL::StyleFlags getLabelStyle() const
 	{
@@ -297,9 +297,9 @@ class LLFolderBridge : public LLInvFVBridge
 	virtual void selectItem();
 	virtual void restoreItem();
 
-	virtual LLAssetType::EType getPreferredType() const;
+	virtual LLFolderType::EType getPreferredType() const;
 	virtual LLUIImagePtr getIcon() const;
-	static LLUIImagePtr getIcon(LLAssetType::EType asset_type);
+	static LLUIImagePtr getIcon(LLFolderType::EType preferred_type);
 
 	virtual BOOL renameItem(const std::string& new_name);
 	virtual BOOL removeItem();
@@ -320,7 +320,7 @@ class LLFolderBridge : public LLInvFVBridge
 	virtual BOOL copyToClipboard() const;
 	
 	static void createWearable(LLFolderBridge* bridge, EWearableType type);
-	static void createWearable(LLUUID parent_folder_id, EWearableType type);
+	static void createWearable(const LLUUID &parent_folder_id, EWearableType type);
 
 	LLViewerInventoryCategory* getCategory() const;
 
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 6009e8e6100..091a7c8f4fa 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -47,6 +47,7 @@
 #include "llfocusmgr.h"
 #include "llinventorybridge.h"
 #include "llfloaterinventory.h"
+#include "llviewerfoldertype.h"
 #include "llviewerinventory.h"
 #include "llviewermessage.h"
 #include "llviewerwindow.h"
@@ -305,7 +306,7 @@ void LLInventoryModel::unlockDirectDescendentArrays(const LLUUID& cat_id)
 // specifies 'type' as what it defaults to containing. The category is
 // not necessarily only for that type. *NOTE: This will create a new
 // inventory category on the fly if one does not exist.
-LLUUID LLInventoryModel::findCategoryUUIDForType(LLAssetType::EType t, bool create_folder)
+const LLUUID LLInventoryModel::findCategoryUUIDForType(LLFolderType::EType t, bool create_folder)
 {
 	const LLUUID &rv = findCatUUID(t);
 	if(rv.isNull() && isInventoryUsable() && create_folder)
@@ -321,10 +322,10 @@ LLUUID LLInventoryModel::findCategoryUUIDForType(LLAssetType::EType t, bool crea
 
 // Internal method which looks for a category with the specified
 // preferred type. Returns LLUUID::null if not found.
-const LLUUID &LLInventoryModel::findCatUUID(LLAssetType::EType preferred_type) const
+const LLUUID &LLInventoryModel::findCatUUID(LLFolderType::EType preferred_type) const
 {
 	const LLUUID &root_id = gInventory.getRootFolderID();
-	if(LLAssetType::AT_CATEGORY == preferred_type)
+	if(LLFolderType::FT_CATEGORY == preferred_type)
 	{
 		return root_id;
 	}
@@ -352,7 +353,7 @@ const LLUUID &LLInventoryModel::findCatUUID(LLAssetType::EType preferred_type) c
 // version will take care of details like what the name should be
 // based on preferred type. Returns the UUID of the new category.
 LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
-										   LLAssetType::EType preferred_type,
+										   LLFolderType::EType preferred_type,
 										   const std::string& pname)
 {
 	LLUUID id;
@@ -362,9 +363,9 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
 		return id;
 	}
 
-	if(preferred_type == LLAssetType::AT_SIMSTATE)
+	if(LLFolderType::lookup(preferred_type) == LLFolderType::badLookup())
 	{
-		lldebugs << "Attempt to create simstate category." << llendl;
+		lldebugs << "Attempt to create undefined category." << llendl;
 		return id;
 	}
 
@@ -376,7 +377,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
 	}
 	else
 	{
-		name.assign(LLAssetType::lookupCategoryName(preferred_type));
+		name.assign(LLViewerFolderType::lookupNewCategoryName(preferred_type));
 	}
 
 	// Add the category to the internal representation
@@ -440,7 +441,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id,
 	// Start with categories
 	if(!include_trash)
 	{
-		const LLUUID trash_id = findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if(trash_id.notNull() && (trash_id == id))
 			return;
 	}
@@ -474,7 +475,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id,
 			if (item->getActualType() == LLAssetType::AT_LINK_FOLDER)
 			{
 				LLViewerInventoryCategory *linked_cat = item->getLinkedCategory();
-				if (linked_cat && linked_cat->getPreferredType() != LLAssetType::AT_OUTFIT)
+				if (linked_cat && linked_cat->getPreferredType() != LLFolderType::FT_OUTFIT)
 					// BAP - was 
 					// LLAssetType::lookupIsEnsembleCategoryType(linked_cat->getPreferredType()))
 					// Change back once ensemble typing is in place.
@@ -654,7 +655,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
 
 		if(item->getParentUUID().isNull())
 		{
-			LLUUID category_id = findCategoryUUIDForType(new_item->getType());
+			const LLUUID category_id = findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(new_item->getType()));
 			new_item->setParent(category_id);
 			item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, category_id);
 			if( item_array )
@@ -678,7 +679,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
 			LLUUID parent_id = item->getParentUUID();
 			if(parent_id == CATEGORIZE_LOST_AND_FOUND_ID)
 			{
-				parent_id = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+				parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 				new_item->setParent(parent_id);
 			}
 			item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, parent_id);
@@ -691,7 +692,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
 				// Whoops! No such parent, make one.
 				llinfos << "Lost item: " << new_item->getUUID() << " - "
 						<< new_item->getName() << llendl;
-				parent_id = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+				parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 				new_item->setParent(parent_id);
 				item_array = get_ptr_in_map(mParentChildItemTree, parent_id);
 				if(item_array)
@@ -1173,7 +1174,7 @@ void LLInventoryModel::mock(const LLUUID& root_id)
 		root_id,
 		LLUUID::null,
 		LLAssetType::AT_CATEGORY,
-		LLAssetType::lookupCategoryName(LLAssetType::AT_ROOT_CATEGORY),
+		LLFolderType::lookupNewCategoryName(LLFolderType::FT_ROOT_CATEGORY),
 		gAgent.getID());
 	addCategory(cat);
 	gInventory.buildParentChildMap();
@@ -1331,7 +1332,7 @@ void  fetchDescendentsResponder::result(const LLSD& content)
 				    item_it != folder_sd["items"].endArray();
 				    ++item_it)
 			    {	
-                    LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+                    const LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
                     if (lost_uuid.notNull())
                     {
 				        LLSD item = *item_it;
@@ -2021,7 +2022,7 @@ bool LLInventoryModel::loadSkeleton(
 	update_map_t child_counts;
 
 	LLUUID id;
-	LLAssetType::EType preferred_type;
+	LLFolderType::EType preferred_type;
 	bool rv = true;
 	for(options_t::const_iterator it = options.begin(); it < options.end(); ++it)
 	{
@@ -2044,12 +2045,12 @@ bool LLInventoryModel::loadSkeleton(
 		skel = (*it).find("type_default");
 		if(skel == no_response)
 		{
-			preferred_type = LLAssetType::AT_NONE;
+			preferred_type = LLFolderType::FT_NONE;
 		}
 		else
 		{
 			S32 t = atoi((*skel).second.c_str());
-			preferred_type = (LLAssetType::EType)t;
+			preferred_type = (LLFolderType::EType)t;
 		}
 		cat->setPreferredType(preferred_type);
 		skel = (*it).find("version");
@@ -2397,12 +2398,12 @@ void LLInventoryModel::buildParentChildMap()
 					<< cat->getName() << llendl;
 			++lost;
 			// plop it into the lost & found.
-			LLAssetType::EType pref = cat->getPreferredType();
-			if(LLAssetType::AT_NONE == pref)
+			LLFolderType::EType pref = cat->getPreferredType();
+			if(LLFolderType::FT_NONE == pref)
 			{
-				cat->setParent(findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND));
+				cat->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND));
 			}
-			else if(LLAssetType::AT_CATEGORY == pref)
+			else if(LLFolderType::FT_CATEGORY == pref)
 			{
 				// it's the root
 				cat->setParent(LLUUID::null);
@@ -2461,7 +2462,7 @@ void LLInventoryModel::buildParentChildMap()
 			++lost;
 			// plop it into the lost & found.
 			//
-			item->setParent(findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND));
+			item->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND));
 			// move it later using a special message to move items. If
 			// we update server here, the client might crash.
 			//item->updateServer();
@@ -2482,7 +2483,7 @@ void LLInventoryModel::buildParentChildMap()
 		llwarns << "Found " << lost << " lost items." << llendl;
 		LLMessageSystem* msg = gMessageSystem;
 		BOOL start_new_message = TRUE;
-		LLUUID lnf = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+		const LLUUID lnf = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 		for(std::vector<LLUUID>::iterator it = lost_item_ids.begin() ; it < lost_item_ids.end(); ++it)
 		{
 			if(start_new_message)
@@ -2935,7 +2936,7 @@ void LLInventoryModel::processUpdateInventoryFolder(LLMessageSystem* msg,
 		lastfolder = tfolder;
 		tfolder->unpackMessage(msg, _PREHASH_FolderData, i);
 		// make sure it's not a protected folder
-		tfolder->setPreferredType(LLAssetType::AT_NONE);
+		tfolder->setPreferredType(LLFolderType::FT_NONE);
 		folders.push_back(tfolder);
 		// examine update for changes.
 		LLViewerInventoryCategory* folderp = gInventory.getCategory(tfolder->getUUID());
@@ -3322,31 +3323,31 @@ void LLInventoryModel::processMoveInventoryItem(LLMessageSystem* msg, void**)
 
 //----------------------------------------------------------------------------
 
-// Trash: LLAssetType::AT_TRASH, "ConfirmEmptyTrash"
-// Lost&Found: LLAssetType::AT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound"
+// Trash: LLFolderType::FT_TRASH, "ConfirmEmptyTrash"
+// Lost&Found: LLFolderType::FT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound"
 
-bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLAssetType::EType folder_type)
+bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type)
 {
 	S32 option = LLNotification::getSelectedOption(notification, response);
 	if (option == 0) // YES
 	{
-		LLUUID folder_id = findCategoryUUIDForType(folder_type);
+		const LLUUID folder_id = findCategoryUUIDForType(preferred_type);
 		purgeDescendentsOf(folder_id);
 		notifyObservers();
 	}
 	return false;
 }
 
-void LLInventoryModel::emptyFolderType(const std::string notification, LLAssetType::EType folder_type)
+void LLInventoryModel::emptyFolderType(const std::string notification, LLFolderType::EType preferred_type)
 {
 	if (!notification.empty())
 	{
 		LLNotifications::instance().add(notification, LLSD(), LLSD(),
-										boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, folder_type));
+										boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, preferred_type));
 	}
 	else
 	{
-		LLUUID folder_id = findCategoryUUIDForType(folder_type);
+		const LLUUID folder_id = findCategoryUUIDForType(preferred_type);
 		purgeDescendentsOf(folder_id);
 		notifyObservers();
 	}
@@ -3357,7 +3358,7 @@ void LLInventoryModel::emptyFolderType(const std::string notification, LLAssetTy
 void LLInventoryModel::removeItem(const LLUUID& item_id)
 {
 	LLViewerInventoryItem* item = getItem(item_id);
-	const LLUUID new_parent = findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if (item && item->getParentUUID() != new_parent)
 	{
 		LLInventoryModel::update_list_t update;
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index c2d8717b709..ed7ba5db8b3 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -34,6 +34,7 @@
 #define LL_LLINVENTORYMODEL_H
 
 #include "llassettype.h"
+#include "llfoldertype.h"
 #include "lldarray.h"
 #include "llframetimer.h"
 #include "llhttpclient.h"
@@ -278,7 +279,7 @@ class LLInventoryModel
 
 	// SDK: Added flag to specify whether the folder should be created if not found.  This fixes the horrible
 	// multiple trash can bug.
-	LLUUID findCategoryUUIDForType(LLAssetType::EType preferred_type, bool create_folder = true);
+	const LLUUID findCategoryUUIDForType(LLFolderType::EType preferred_type, bool create_folder = true);
 
 	// Call this method when it's time to update everyone on a new
 	// state, by default, the inventory model will not update
@@ -327,7 +328,7 @@ class LLInventoryModel
 	// category. If you want to use the default name based on type,
 	// pass in a NULL to the 'name parameter.
 	LLUUID createNewCategory(const LLUUID& parent_id,
-							 LLAssetType::EType preferred_type,
+							 LLFolderType::EType preferred_type,
 							 const std::string& name);
 
 	// methods to load up inventory skeleton & meat. These are used
@@ -385,9 +386,9 @@ class LLInventoryModel
 	bool isCategoryComplete(const LLUUID& cat_id) const;
 	
 	// callbacks
-	// Trigger a notification and empty the folder type (AT_TRASH or AT_LOST_AND_FOUND) if confirmed
-	void emptyFolderType(const std::string notification, LLAssetType::EType folder_type);
-	bool callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLAssetType::EType folder_type);
+	// Trigger a notification and empty the folder type (FT_TRASH or FT_LOST_AND_FOUND) if confirmed
+	void emptyFolderType(const std::string notification, LLFolderType::EType folder_type);
+	bool callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type);
 
 	// Utility Functions
 	void removeItem(const LLUUID& item_id);
@@ -431,7 +432,7 @@ class LLInventoryModel
 	// 
 	// Internal method which looks for a category with the specified
 	// preferred type. Returns LLUUID::null if not found
- 	const LLUUID &findCatUUID(LLAssetType::EType preferred_type) const;
+ 	const LLUUID &findCatUUID(LLFolderType::EType preferred_type) const;
 
 	// Empty the entire contents
 	void empty();
diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp
index b36b7cf50ed..a341720aec3 100644
--- a/indra/newview/lllandmarkactions.cpp
+++ b/indra/newview/lllandmarkactions.cpp
@@ -138,8 +138,7 @@ static void fetch_landmarks(LLInventoryModel::cat_array_t& cats,
 							LLInventoryCollectFunctor& add)
 {
 	// Look in "My Favorites"
-	LLUUID favorites_folder_id =
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+	const LLUUID favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 	gInventory.collectDescendentsIf(favorites_folder_id,
 		cats,
 		items,
@@ -147,8 +146,7 @@ static void fetch_landmarks(LLInventoryModel::cat_array_t& cats,
 		add);
 
 	// Look in "Landmarks"
-	LLUUID landmarks_folder_id = 
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+	const LLUUID landmarks_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 	gInventory.collectDescendentsIf(landmarks_folder_id,
 		cats,
 		items,
@@ -250,7 +248,7 @@ void LLLandmarkActions::createLandmarkHere()
 
 	LLAgentUI::buildLocationString(landmark_name, LLAgentUI::LOCATION_FORMAT_LANDMARK);
 	LLAgentUI::buildLocationString(landmark_desc, LLAgentUI::LOCATION_FORMAT_FULL);
-	LLUUID folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+	const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 
 	createLandmarkHere(landmark_name, landmark_desc, folder_id);
 }
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index ea528a1df89..a4ff78ee9b1 100644
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -59,6 +59,7 @@
 #include "lltoolcomp.h"
 #include "lltoolmgr.h"
 #include "lltrans.h"
+#include "llviewerassettype.h"
 #include "llviewerobject.h"
 #include "llviewerregion.h"
 #include "llviewerwindow.h"
@@ -167,7 +168,7 @@ void LLPanelContents::onClickNewScript(void *userdata)
 			PERM_NONE,
 			PERM_MOVE | PERM_TRANSFER);
 		std::string desc;
-		LLAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc);
+		LLViewerAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc);
 		LLPointer<LLViewerInventoryItem> new_item =
 			new LLViewerInventoryItem(
 				LLUUID::null,
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index faa938c772a..e0c92fd4ab1 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -531,7 +531,7 @@ void LLLandmarksPanel::onAddFolderButtonClick() const
 		menu_create_inventory_item(mCurrentSelectedList->getRootFolder()
 			, dynamic_cast<LLFolderBridge*>(folder_bridge)
 			, LLSD("category")
-			, gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK)
+			, gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK)
 			);
 	}
 }
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 609b2059209..38ec9612a6a 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -912,7 +912,7 @@ void LLPanelPlaceInfo::createLandmark(const LLUUID& folder_id)
 	LLStringUtil::replaceChar(desc, '\n', ' ');
 	// If no folder chosen use the "Landmarks" folder.
 	LLLandmarkActions::createLandmarkHere(name, desc,
-		folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK));
+		folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK));
 }
 
 void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel)
@@ -960,7 +960,7 @@ void LLPanelPlaceInfo::populateFoldersList()
 	mFolderCombo->removeall();
 
 	// Put the "Landmarks" folder first in list.
-	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+	const LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 	const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id);
 	if (!cat)
 	{
@@ -1058,7 +1058,7 @@ static std::string getFullFolderName(const LLViewerInventoryCategory* cat)
 
 static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats)
 {
-	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+	const LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 
 	// Add descendent folders of the "Landmarks" category.
 	LLInventoryModel::item_array_t items; // unused
@@ -1071,7 +1071,7 @@ static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats)
 		is_category);
 
 	// Add the "My Favorites" category.
-	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+	const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 	LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id);
 	if (!favorites_cat)
 	{
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 5ab823b6e53..aa9b698b374 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -588,7 +588,7 @@ void LLPanelPlaces::onOverflowButtonClicked()
 		if (mItem.notNull())
 		{
 			const LLUUID& item_id = mItem->getUUID();
-			const LLUUID& trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+			const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 			is_landmark_removable = gInventory.isObjectDescendentOf(item_id, gInventory.getRootFolderID()) &&
 									!gInventory.isObjectDescendentOf(item_id, trash_id);
 		}
@@ -668,7 +668,7 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
     {
         if ( mItem.notNull() ) 
         {
-            LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+            const LLUUID& favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
             if ( favorites_id.notNull() )
             {
                 copy_inventory_item(gAgent.getID(),
diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp
index b06e70c00af..34e78b5c469 100644
--- a/indra/newview/llpreview.cpp
+++ b/indra/newview/llpreview.cpp
@@ -45,6 +45,7 @@
 #include "lltooldraganddrop.h"
 #include "llradiogroup.h"
 #include "llassetstorage.h"
+#include "llviewerassettype.h"
 #include "llviewerobject.h"
 #include "llviewerobjectlist.h"
 #include "lldbstrings.h"
@@ -317,7 +318,7 @@ BOOL LLPreview::handleHover(S32 x, S32 y, MASK mask)
 		   && LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y))
 		{
 			EDragAndDropType type;
-			type = LLAssetType::lookupDragAndDropType(item->getType());
+			type = LLViewerAssetType::lookupDragAndDropType(item->getType());
 			LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_LIBRARY;
 			if(!mObjectUUID.isNull())
 			{
@@ -406,7 +407,7 @@ void LLPreview::onDiscardBtn(void* data)
 	*/
 
 	// Move the item to the trash
-	LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if (item->getParentUUID() != trash_id)
 	{
 		LLInventoryModel::update_list_t update;
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index ab2afb80560..7b3a20d1020 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -130,10 +130,10 @@ LLPreviewGesture* LLPreviewGesture::show(const LLUUID& item_id, const LLUUID& ob
 	preview->setObjectID(object_id);
 	
 	// Start speculative download of sounds and animations
-	LLUUID animation_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_ANIMATION);
+	const LLUUID animation_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_ANIMATION);
 	gInventory.startBackgroundFetch(animation_folder_id);
 
-	LLUUID sound_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_SOUND);
+	const LLUUID sound_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SOUND);
 	gInventory.startBackgroundFetch(sound_folder_id);
 
 	// this will call refresh when we have everything.
diff --git a/indra/newview/llresourcedata.h b/indra/newview/llresourcedata.h
index 46b79150bbf..b4b90426895 100644
--- a/indra/newview/llresourcedata.h
+++ b/indra/newview/llresourcedata.h
@@ -39,11 +39,12 @@
 struct LLResourceData
 {
 	LLAssetInfo mAssetInfo;
-	LLAssetType::EType mPreferredLocation;
+	LLFolderType::EType mPreferredLocation;
 	LLInventoryType::EType mInventoryType;
 	U32 mNextOwnerPerm;
 	S32 mExpectedUploadCost;
 	void *mUserData;
+	static const S8 INVALID_LOCATION = -2;
 };
 
 #endif
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index a7f0ce16d38..1e5ee29529a 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -2820,7 +2820,7 @@ bool LLSelectMgr::confirmDelete(const LLSD& notification, const LLSD& response,
 	case 0:
 		{
 			// TODO: Make sure you have delete permissions on all of them.
-			LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+			const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 			// attempt to derez into the trash.
 			LLDeRezInfo* info = new LLDeRezInfo(DRD_TRASH, trash_id);
 			LLSelectMgr::getInstance()->sendListToRegions("DeRezObject",
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 8793d226464..51b651d58ee 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -330,7 +330,7 @@ void populate_favorites_bar()
 	S32 count = lib_cats->count();
 	for(S32 i = 0; i < count; ++i)
 	{
-		if(lib_cats->get(i)->getPreferredType() == LLAssetType::AT_LANDMARK)
+		if(lib_cats->get(i)->getPreferredType() == LLFolderType::FT_LANDMARK)
 		{
 			lib_landmarks = lib_cats->get(i)->getUUID();
 			break;
@@ -347,7 +347,7 @@ void populate_favorites_bar()
 	gInventory.getDirectDescendentsOf(lib_landmarks, lm_cats, lm_items);
 	if (!lm_items) return;
 
-	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+	const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 	if (favorites_id.isNull())
 	{
 		llerror("My Inventory is missing My Favorites", 0);
@@ -2178,7 +2178,7 @@ bool idle_startup()
 		gInventory.buildParentChildMap();
 
 		//all categories loaded. lets create "My Favorites" category
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE,true);
+		gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE,true);
 
 		// lets create "Friends" and "Friends/All" in the Inventory "Calling Cards" and fill it with buddies
 		LLFriendCardsManager::instance().syncFriendsFolder();
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index b5aec1b80bc..0fcbb60c724 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -424,7 +424,7 @@ BOOL LLFloaterTexturePicker::postBuild()
 		mInventoryPanel->getRootFolder()->getFilter()->markDefault();
 
 		// Commented out to stop opening all folders with textures
-		// mInventoryPanel->openDefaultFolderForType(LLAssetType::AT_TEXTURE);
+		// mInventoryPanel->openDefaultFolderForType(LLFolderType::FT_TEXTURE);
 
 		// don't put keyboard focus on selected item, because the selection callback
 		// will assume that this was user input
@@ -1071,7 +1071,7 @@ BOOL LLTextureCtrl::handleMouseDown(S32 x, S32 y, MASK mask)
 	{
 		showPicker(FALSE);
 		//grab textures first...
-		gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLAssetType::AT_TEXTURE));
+		gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE));
 		//...then start full inventory fetch.
 		gInventory.startBackgroundFetch();
 		handled = TRUE;
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index e26a0776ff4..2529ac9cf6e 100644
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -219,7 +219,6 @@ bool LLToastGroupNotifyPanel::isAttachmentOpenable(LLAssetType::EType type)
 	switch(type)
 	{
 	case LLAssetType::AT_LANDMARK:
-	case LLAssetType::AT_FAVORITE:
 	case LLAssetType::AT_NOTECARD:
 	case LLAssetType::AT_IMAGE_JPEG:
 	case LLAssetType::AT_IMAGE_TGA:
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 9a63f07a7e5..959cb3f1822 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -92,7 +92,7 @@ class LLNoPreferredType : public LLInventoryCollectFunctor
 	virtual bool operator()(LLInventoryCategory* cat,
 							LLInventoryItem* item)
 	{
-		if(cat && (cat->getPreferredType() == LLAssetType::AT_NONE))
+		if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE))
 		{
 			return true;
 		}
@@ -109,7 +109,7 @@ class LLNoPreferredTypeOrItem : public LLInventoryCollectFunctor
 							LLInventoryItem* item)
 	{
 		if(item) return true;
-		if(cat && (cat->getPreferredType() == LLAssetType::AT_NONE))
+		if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE))
 		{
 			return true;
 		}
@@ -1317,8 +1317,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
 
 	// Check if it's in the trash.
 	bool is_in_trash = false;
-	LLUUID trash_id;
-	trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
 	{
 		is_in_trash = true;
@@ -2088,7 +2087,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv(
 	if(!item || !item->isComplete()) return ACCEPT_NO;
 
 	// must not be in the trash
-	LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH));
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) )
 	{
 		return ACCEPT_NO;
@@ -2170,8 +2169,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand(
 	}
 
 	// Check if it's in the trash.
-	LLUUID trash_id;
-	trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
 	{
 		accept = ACCEPT_YES_SINGLE;
@@ -2249,8 +2247,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject(
 	}
 
 	// Check if it's in the trash.
-	LLUUID trash_id;
-	trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
 	{
 		accept = ACCEPT_YES_SINGLE;
@@ -2388,7 +2385,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearItem(
 	if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY)
 	{
 		// it's in the agent inventory
-		LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) )
 		{
 			return ACCEPT_NO;
@@ -2443,7 +2440,7 @@ EAcceptance LLToolDragAndDrop::dad3dActivateGesture(
 	if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY)
 	{
 		// it's in the agent inventory
-		LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) )
 		{
 			return ACCEPT_NO;
@@ -2502,7 +2499,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory(
 
 	if(mSource == SOURCE_AGENT)
 	{
-		LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH));
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if( gInventory.isObjectDescendentOf( category->getUUID(), trash_id ) )
 		{
 			return ACCEPT_NO;
diff --git a/indra/newview/llviewerassettype.cpp b/indra/newview/llviewerassettype.cpp
new file mode 100644
index 00000000000..c974171c2c2
--- /dev/null
+++ b/indra/newview/llviewerassettype.cpp
@@ -0,0 +1,114 @@
+/** 
+ * @file llassettype.cpp
+ * @brief Implementatino of LLViewerAssetType functionality.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llviewerassettype.h"
+#include "lldictionary.h"
+#include "llmemory.h"
+#include "llsingleton.h"
+
+static const std::string empty_string;
+
+struct ViewerAssetEntry : public LLDictionaryEntry
+{
+	ViewerAssetEntry(EDragAndDropType dad_type // drag and drop type
+		)
+		:
+		LLDictionaryEntry(empty_string), // no reverse lookup needed for now, so just leave this blank
+		mDadType(dad_type)
+	{
+	}
+	EDragAndDropType mDadType;
+};
+
+class LLViewerAssetDictionary : public LLSingleton<LLViewerAssetDictionary>,
+						  public LLDictionary<LLViewerAssetType::EType, ViewerAssetEntry>
+{
+public:
+	LLViewerAssetDictionary();
+};
+
+LLViewerAssetDictionary::LLViewerAssetDictionary()
+{
+	//       												      	   	   	 DRAG&DROP TYPE		    
+	//   	   	   	   	   	   	   	   	   	   	   	   	   	   	   	   	   	|--------------------|
+	addEntry(LLViewerAssetType::AT_TEXTURE, 			new ViewerAssetEntry(DAD_TEXTURE));
+	addEntry(LLViewerAssetType::AT_SOUND, 				new ViewerAssetEntry(DAD_SOUND));
+	addEntry(LLViewerAssetType::AT_CALLINGCARD, 		new ViewerAssetEntry(DAD_CALLINGCARD));
+	addEntry(LLViewerAssetType::AT_LANDMARK, 			new ViewerAssetEntry(DAD_LANDMARK));
+	addEntry(LLViewerAssetType::AT_SCRIPT, 				new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_CLOTHING, 			new ViewerAssetEntry(DAD_CLOTHING));
+	addEntry(LLViewerAssetType::AT_OBJECT, 				new ViewerAssetEntry(DAD_OBJECT));
+	addEntry(LLViewerAssetType::AT_NOTECARD, 			new ViewerAssetEntry(DAD_NOTECARD));
+	addEntry(LLViewerAssetType::AT_CATEGORY, 			new ViewerAssetEntry(DAD_CATEGORY));
+	addEntry(LLViewerAssetType::AT_ROOT_CATEGORY, 		new ViewerAssetEntry(DAD_ROOT_CATEGORY));
+	addEntry(LLViewerAssetType::AT_LSL_TEXT, 			new ViewerAssetEntry(DAD_SCRIPT));
+	addEntry(LLViewerAssetType::AT_LSL_BYTECODE, 		new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_TEXTURE_TGA, 		new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_BODYPART, 			new ViewerAssetEntry(DAD_BODYPART));
+	addEntry(LLViewerAssetType::AT_SOUND_WAV, 			new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_IMAGE_TGA, 			new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_IMAGE_JPEG, 			new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_ANIMATION, 			new ViewerAssetEntry(DAD_ANIMATION));
+	addEntry(LLViewerAssetType::AT_GESTURE, 			new ViewerAssetEntry(DAD_GESTURE));
+	addEntry(LLViewerAssetType::AT_SIMSTATE, 			new ViewerAssetEntry(DAD_NONE));
+
+	addEntry(LLViewerAssetType::AT_LINK, 				new ViewerAssetEntry(DAD_LINK));
+	addEntry(LLViewerAssetType::AT_LINK_FOLDER, 		new ViewerAssetEntry(DAD_LINK));
+
+	addEntry(LLViewerAssetType::AT_NONE, 				new ViewerAssetEntry(DAD_NONE));
+};
+
+EDragAndDropType LLViewerAssetType::lookupDragAndDropType(EType asset_type)
+{
+	const LLViewerAssetDictionary *dict = LLViewerAssetDictionary::getInstance();
+	const ViewerAssetEntry *entry = dict->lookup(asset_type);
+	if (entry)
+		return entry->mDadType;
+	else
+		return DAD_NONE;
+}
+
+// Generate a good default description
+void LLViewerAssetType::generateDescriptionFor(LLViewerAssetType::EType asset_type,
+											   std::string& description)
+{
+	const S32 BUF_SIZE = 30;
+	char time_str[BUF_SIZE];	/* Flawfinder: ignore */
+	time_t now;
+	time(&now);
+	memset(time_str, '\0', BUF_SIZE);
+	strftime(time_str, BUF_SIZE - 1, "%Y-%m-%d %H:%M:%S ", localtime(&now));
+	description.assign(time_str);
+	description.append(LLAssetType::lookupHumanReadable(asset_type));
+}
diff --git a/indra/newview/llviewerassettype.h b/indra/newview/llviewerassettype.h
new file mode 100644
index 00000000000..01158885cec
--- /dev/null
+++ b/indra/newview/llviewerassettype.h
@@ -0,0 +1,54 @@
+/** 
+ * @file llviewerassettype.h
+ * @brief Declaration of LLViewerViewerAssetType.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLVIEWERASSETTYPE_H
+#define LL_LLVIEWERASSETTYPE_H
+
+#include <string>
+#include "llassettype.h"
+
+// This class is similar to llassettype, but contains methods
+// only used by the viewer.
+class LLViewerAssetType : public LLAssetType
+{
+public:
+	// Generate a good default description. You may want to add a verb
+	// or agent name after this depending on your application.
+	static void 				generateDescriptionFor(LLViewerAssetType::EType asset_type,
+													   std::string& description);
+	static EDragAndDropType   	lookupDragAndDropType(EType asset_type);
+protected:
+	LLViewerAssetType() {}
+	~LLViewerAssetType() {}
+};
+
+#endif // LL_LLVIEWERASSETTYPE_H
diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp
new file mode 100644
index 00000000000..384538364f0
--- /dev/null
+++ b/indra/newview/llviewerfoldertype.cpp
@@ -0,0 +1,263 @@
+/** 
+ * @file llfoldertype.cpp
+ * @brief Implementation of LLViewerFolderType functionality.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llviewerfoldertype.h"
+#include "lldictionary.h"
+#include "llmemory.h"
+#include "llvisualparam.h"
+
+static const std::string empty_string;
+
+struct ViewerFolderEntry : public LLDictionaryEntry
+{
+	// Constructor for non-ensembles
+	ViewerFolderEntry(const std::string &new_category_name, // default name when creating a new category of this type
+					  const std::string &icon_name 			// name of the folder icon
+		) 
+		:
+		LLDictionaryEntry(empty_string), // no reverse lookup needed on non-ensembles, so just leave this blank
+		mIconName(icon_name),
+		mNewCategoryName(new_category_name)
+	{
+		mAllowedNames.clear();
+	}
+
+	// Constructor for ensembles
+	ViewerFolderEntry(const std::string &xui_name, 			// name of the xui menu item
+					  const std::string &new_category_name, // default name when creating a new category of this type
+					  const std::string &icon_name, 		// name of the folder icon
+					  const std::string allowed_names 		// allowed item typenames for this folder type
+		) 
+		:
+		LLDictionaryEntry(xui_name),
+		mIconName(icon_name),
+		mNewCategoryName(new_category_name)
+	{
+		const std::string delims (",");
+		LLStringUtilBase<char>::getTokens(allowed_names, mAllowedNames, delims);
+	}
+
+	bool getIsAllowedName(const std::string &name) const
+	{
+		if (mAllowedNames.empty())
+			return false;
+		for (name_vec_t::const_iterator iter = mAllowedNames.begin();
+			 iter != mAllowedNames.end();
+			 iter++)
+		{
+			if (name == (*iter))
+				return true;
+		}
+		return false;
+	}
+	const std::string mIconName;
+	const std::string mNewCategoryName;
+	typedef std::vector<std::string> name_vec_t;
+	name_vec_t mAllowedNames;
+};
+
+class LLViewerFolderDictionary : public LLSingleton<LLViewerFolderDictionary>,
+								 public LLDictionary<LLFolderType::EType, ViewerFolderEntry>
+{
+public:
+	LLViewerFolderDictionary();
+protected:
+	bool initEnsemblesFromFile(); // Reads in ensemble information from foldertypes.xml
+};
+
+LLViewerFolderDictionary::LLViewerFolderDictionary()
+{
+	initEnsemblesFromFile();
+
+	//       													    	  NEW CATEGORY NAME         FOLDER ICON NAME
+	//      												  		     |-------------------------|---------------------------|
+	addEntry(LLFolderType::FT_TEXTURE, 				new ViewerFolderEntry("Textures",				"inv_folder_texture.tga"));
+	addEntry(LLFolderType::FT_SOUND, 				new ViewerFolderEntry("Sounds",					"inv_folder_sound.tga"));
+	addEntry(LLFolderType::FT_CALLINGCARD, 			new ViewerFolderEntry("Calling Cards",			"inv_folder_callingcard.tga"));
+	addEntry(LLFolderType::FT_LANDMARK, 			new ViewerFolderEntry("Landmarks",				"inv_folder_landmark.tga"));
+	addEntry(LLFolderType::FT_CLOTHING, 			new ViewerFolderEntry("Clothing",				"inv_folder_clothing.tga"));
+	addEntry(LLFolderType::FT_OBJECT, 				new ViewerFolderEntry("Objects",				"inv_folder_object.tga"));
+	addEntry(LLFolderType::FT_NOTECARD, 			new ViewerFolderEntry("Notecards",				"inv_folder_notecard.tga"));
+	addEntry(LLFolderType::FT_CATEGORY, 			new ViewerFolderEntry("New Folder",				"inv_folder_plain_closed.tga"));
+	addEntry(LLFolderType::FT_ROOT_CATEGORY, 		new ViewerFolderEntry("Inventory",				""));
+	addEntry(LLFolderType::FT_LSL_TEXT, 			new ViewerFolderEntry("Scripts",				"inv_folder_script.tga"));
+	addEntry(LLFolderType::FT_BODYPART, 			new ViewerFolderEntry("Body Parts",				"inv_folder_bodypart.tga"));
+	addEntry(LLFolderType::FT_TRASH, 				new ViewerFolderEntry("Trash",					"inv_folder_trash.tga"));
+	addEntry(LLFolderType::FT_SNAPSHOT_CATEGORY, 	new ViewerFolderEntry("Photo Album",			"inv_folder_snapshot.tga"));
+	addEntry(LLFolderType::FT_LOST_AND_FOUND, 		new ViewerFolderEntry("Lost And Found",	   		"inv_folder_lostandfound.tga"));
+	addEntry(LLFolderType::FT_ANIMATION, 			new ViewerFolderEntry("Animations",				"inv_folder_animation.tga"));
+	addEntry(LLFolderType::FT_GESTURE, 				new ViewerFolderEntry("Gestures",				"inv_folder_gesture.tga"));
+	addEntry(LLFolderType::FT_FAVORITE, 			new ViewerFolderEntry("Favorite",				"inv_folder_plain_closed.tga"));
+
+	addEntry(LLFolderType::FT_CURRENT_OUTFIT, 		new ViewerFolderEntry("Current Outfit",			"inv_folder_current_outfit.tga"));
+	addEntry(LLFolderType::FT_OUTFIT, 				new ViewerFolderEntry("New Outfit",				"inv_folder_outfit.tga"));
+	addEntry(LLFolderType::FT_MY_OUTFITS, 			new ViewerFolderEntry("My Outfits",				"inv_folder_my_outfits.tga"));
+	addEntry(LLFolderType::FT_INBOX, 				new ViewerFolderEntry("Inbox",					"inv_folder_inbox.tga"));
+		 
+	addEntry(LLFolderType::FT_NONE, 				new ViewerFolderEntry("New Folder",				"inv_folder_plain_closed.tga"));
+}
+
+bool LLViewerFolderDictionary::initEnsemblesFromFile()
+{
+	std::string xml_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"foldertypes.xml");
+	LLXmlTree folder_def;
+	if (!folder_def.parseFile(xml_filename))
+	{
+		llerrs << "Failed to parse folders file " << xml_filename << llendl;
+		return false;
+	}
+
+	LLXmlTreeNode* rootp = folder_def.getRoot();
+	for (LLXmlTreeNode* ensemble = rootp->getFirstChild();
+		 ensemble;
+		 ensemble = rootp->getNextChild())
+	{
+		if (!ensemble->hasName("ensemble"))
+		{
+			llwarns << "Invalid ensemble definition node " << ensemble->getName() << llendl;
+			continue;
+		}
+
+		S32 ensemble_type;
+		static LLStdStringHandle ensemble_num_string = LLXmlTree::addAttributeString("foldertype_num");
+		if (!ensemble->getFastAttributeS32(ensemble_num_string, ensemble_type))
+		{
+			llwarns << "No ensemble type defined" << llendl;
+			continue;
+		}
+
+
+		if (ensemble_type < S32(LLFolderType::FT_ENSEMBLE_START) || ensemble_type > S32(LLFolderType::FT_ENSEMBLE_END))
+		{
+			llwarns << "Exceeded maximum ensemble index" << LLFolderType::FT_ENSEMBLE_END << llendl;
+			break;
+		}
+
+		std::string xui_name;
+		static LLStdStringHandle xui_name_string = LLXmlTree::addAttributeString("xui_name");
+		if (!ensemble->getFastAttributeString(xui_name_string, xui_name))
+		{
+			llwarns << "No xui name defined" << llendl;
+			continue;
+		}
+
+		std::string icon_name;
+		static LLStdStringHandle icon_name_string = LLXmlTree::addAttributeString("icon_name");
+		if (!ensemble->getFastAttributeString(icon_name_string, icon_name))
+		{
+			llwarns << "No ensemble icon name defined" << llendl;
+			continue;
+		}
+
+		std::string allowed_names;
+		static LLStdStringHandle allowed_names_string = LLXmlTree::addAttributeString("allowed");
+		if (!ensemble->getFastAttributeString(allowed_names_string, allowed_names))
+		{
+		}
+
+		// Add the entry and increment the asset number.
+		const static std::string new_ensemble_name = "New Ensemble";
+		addEntry(LLFolderType::EType(ensemble_type), new ViewerFolderEntry(xui_name, new_ensemble_name, icon_name, allowed_names));
+	}
+
+	return true;
+}
+
+
+const std::string &LLViewerFolderType::lookupXUIName(LLFolderType::EType folder_type)
+{
+	const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mName;
+	}
+	return badLookup();
+}
+
+LLFolderType::EType LLViewerFolderType::lookupTypeFromXUIName(const std::string &name)
+{
+	return LLViewerFolderDictionary::getInstance()->lookup(name);
+}
+
+const std::string &LLViewerFolderType::lookupIconName(LLFolderType::EType folder_type)
+{
+	const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mIconName;
+	}
+	return badLookup();
+}
+
+const std::string &LLViewerFolderType::lookupNewCategoryName(LLFolderType::EType folder_type)
+{
+	const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mNewCategoryName;
+	}
+	return badLookup();
+}
+
+LLFolderType::EType LLViewerFolderType::lookupTypeFromNewCategoryName(const std::string& name)
+{
+	for (LLViewerFolderDictionary::const_iterator iter = LLViewerFolderDictionary::getInstance()->begin();
+		 iter != LLViewerFolderDictionary::getInstance()->end();
+		 iter++)
+	{
+		const ViewerFolderEntry *entry = iter->second;
+		if (entry->mNewCategoryName == name)
+		{
+			return iter->first;
+		}
+	}
+	return FT_NONE;
+}
+
+
+U64 LLViewerFolderType::lookupValidFolderTypes(const std::string& item_name)
+{
+	U64 matching_folders = 0;
+	for (LLViewerFolderDictionary::const_iterator iter = LLViewerFolderDictionary::getInstance()->begin();
+		 iter != LLViewerFolderDictionary::getInstance()->end();
+		 iter++)
+	{
+		const ViewerFolderEntry *entry = iter->second;
+		if (entry->getIsAllowedName(item_name))
+		{
+			matching_folders |= 1LL << iter->first;
+		}
+	}
+	return matching_folders;
+}
diff --git a/indra/newview/llviewerfoldertype.h b/indra/newview/llviewerfoldertype.h
new file mode 100644
index 00000000000..a6aea62b2a3
--- /dev/null
+++ b/indra/newview/llviewerfoldertype.h
@@ -0,0 +1,57 @@
+/** 
+ * @file llviewerfoldertype.h
+ * @brief Declaration of LLAssetType.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLVIEWERFOLDERTYPE_H
+#define LL_LLVIEWERFOLDERTYPE_H
+
+#include <string>
+#include "llfoldertype.h"
+
+// This class is similar to llfoldertype, but contains methods
+// only used by the viewer.  This also handles ensembles.
+class LLViewerFolderType : public LLFolderType
+{
+public:
+	static const std::string&   lookupXUIName(EType folder_type); // name used by the UI
+	static LLFolderType::EType 	lookupTypeFromXUIName(const std::string& name);
+
+	static const std::string&   lookupIconName(EType asset_type); // folder icon name
+	static const std::string&	lookupNewCategoryName(EType folder_type); // default name when creating new category
+	static LLFolderType::EType	lookupTypeFromNewCategoryName(const std::string& name); // default name when creating new category
+
+	static U64					lookupValidFolderTypes(const std::string& item_name); // which folders allow an item of this type?
+protected:
+	LLViewerFolderType() {}
+	~LLViewerFolderType() {}
+};
+
+#endif // LL_LLVIEWERFOLDERTYPE_H
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 57a4117d5d5..38ff5a20640 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -37,7 +37,7 @@
 #include "indra_constants.h"
 
 #include "llagent.h"
-#include "llfoldertype.h"
+#include "llviewerfoldertype.h"
 #include "llviewercontrol.h"
 #include "llconsole.h"
 #include "llinventorymodel.h"
@@ -48,6 +48,7 @@
 #include "llinventorybridge.h"
 #include "llfloaterinventory.h"
 
+#include "llviewerassettype.h"
 #include "llviewerregion.h"
 #include "llviewerobjectlist.h"
 #include "llpreviewgesture.h"
@@ -359,7 +360,7 @@ void LLViewerInventoryItem::updateParentOnServer(BOOL restamp) const
 
 LLViewerInventoryCategory::LLViewerInventoryCategory(const LLUUID& uuid,
 													 const LLUUID& parent_uuid,
-													 LLAssetType::EType pref,
+													 LLFolderType::EType pref,
 													 const std::string& name,
 													 const LLUUID& owner_id) :
 	LLInventoryCategory(uuid, parent_uuid, pref, name),
@@ -416,7 +417,7 @@ void LLViewerInventoryCategory::updateServer(BOOL is_new) const
 {
 	// communicate that change with the server.
 
-	if (LLAssetType::lookupIsProtectedCategoryType(mPreferredType))
+	if (LLFolderType::lookupIsProtectedType(mPreferredType))
 	{
 		LLNotifications::instance().add("CannotModifyProtectedCategories");
 		return;
@@ -440,7 +441,7 @@ void LLViewerInventoryCategory::removeFromServer( void )
 	llinfos << "Removing inventory category " << mUUID << " from server."
 			<< llendl;
 	// communicate that change with the server.
-	if(LLAssetType::lookupIsProtectedCategoryType(mPreferredType))
+	if(LLFolderType::lookupIsProtectedType(mPreferredType))
 	{
 		LLNotifications::instance().add("CannotRemoveProtectedCategories");
 		return;
@@ -543,7 +544,7 @@ bool LLViewerInventoryCategory::importFileLocal(LLFILE* fp)
 		}
 		else if(0 == strcmp("pref_type", keyword))
 		{
-			mPreferredType = LLAssetType::lookup(valuestr);
+			mPreferredType = LLFolderType::lookup(valuestr);
 		}
 		else if(0 == strcmp("name", keyword))
 		{
@@ -581,7 +582,7 @@ bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const
 	mParentUUID.toString(uuid_str);
 	fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str());
 	fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
-	fprintf(fp, "\t\tpref_type\t%s\n", LLAssetType::lookup(mPreferredType));
+	fprintf(fp, "\t\tpref_type\t%s\n", LLFolderType::lookup(mPreferredType).c_str());
 	fprintf(fp, "\t\tname\t%s|\n", mName.c_str());
 	mOwnerID.toString(uuid_str);
 	fprintf(fp, "\t\towner_id\t%s\n", uuid_str.c_str());
@@ -592,8 +593,8 @@ bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const
 
 void LLViewerInventoryCategory::determineFolderType()
 {
-	LLAssetType::EType original_type = getPreferredType();
-	if (LLAssetType::lookupIsProtectedCategoryType(original_type))
+	LLFolderType::EType original_type = getPreferredType();
+	if (LLFolderType::lookupIsProtectedType(original_type))
 		return;
 
 	U64 folder_valid = 0;
@@ -616,28 +617,28 @@ void LLViewerInventoryCategory::determineFolderType()
 			{
 				const EWearableType wearable_type = item->getWearableType();
 				const std::string& wearable_name = LLWearableDictionary::getTypeName(wearable_type);
-				U64 valid_folder_types = LLFolderType::lookupValidFolderTypes(wearable_name);
+				U64 valid_folder_types = LLViewerFolderType::lookupValidFolderTypes(wearable_name);
 				folder_valid |= valid_folder_types;
 				folder_invalid |= ~valid_folder_types;
 			}
 		}
-		for (U8 i = LLAssetType::AT_FOLDER_ENSEMBLE_START; i <= LLAssetType::AT_FOLDER_ENSEMBLE_END; i++)
+		for (U8 i = LLFolderType::FT_ENSEMBLE_START; i <= LLFolderType::FT_ENSEMBLE_END; i++)
 		{
 			if ((folder_valid & (1LL << i)) &&
 				!(folder_invalid & (1LL << i)))
 			{
-				changeType((LLAssetType::EType)i);
+				changeType((LLFolderType::EType)i);
 				return;
 			}
 		}
 	}
-	if (LLAssetType::lookupIsEnsembleCategoryType(original_type))
+	if (LLFolderType::lookupIsEnsembleType(original_type))
 	{
-		changeType(LLAssetType::AT_NONE);
+		changeType(LLFolderType::FT_NONE);
 	}
 }
 
-void LLViewerInventoryCategory::changeType(LLAssetType::EType new_folder_type)
+void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type)
 {
 	const LLUUID &folder_id = getUUID();
 	const LLUUID &parent_id = getParentUUID();
@@ -948,7 +949,7 @@ void copy_inventory_from_notecard(const LLUUID& object_id, const LLUUID& notecar
     body["notecard-id"] = notecard_inv_id;
     body["object-id"] = object_id;
     body["item-id"] = src->getUUID();
-    body["folder-id"] = gInventory.findCategoryUUIDForType(src->getType());
+	body["folder-id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(src->getType()));
     body["callback-id"] = (LLSD::Integer)callback_id;
 
     request["message"] = "CopyInventoryFromNotecard";
@@ -964,7 +965,7 @@ void create_new_item(const std::string& name,
 				   U32 next_owner_perm)
 {
 	std::string desc;
-	LLAssetType::generateDescriptionFor(asset_type, desc);
+	LLViewerAssetType::generateDescriptionFor(asset_type, desc);
 	next_owner_perm = (next_owner_perm) ? next_owner_perm : PERM_MOVE | PERM_TRANSFER;
 
 	
@@ -989,19 +990,14 @@ const std::string NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not
 const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably not)
 const std::string NEW_GESTURE_NAME = "New Gesture"; // *TODO:Translate? (probably not)
 
+// ! REFACTOR ! Really need to refactor this so that it's not a bunch of if-then statements...
 void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, const LLSD& userdata, const LLUUID& default_parent_uuid)
 {
-	std::string type = userdata.asString();
+	std::string type_name = userdata.asString();
 	
-	if (("category" == type) || ("current" == type) || ("outfit" == type) || ("my_otfts" == type) )
+	if (("category" == type_name) || ("current" == type_name) || ("outfit" == type_name) || ("my_otfts" == type_name))
 	{
-		LLAssetType::EType a_type = LLAssetType::AT_NONE;
-		if ("current" == type)
-			a_type = LLAssetType::AT_CURRENT_OUTFIT;
-		if ("outfit" == type)
-			a_type = LLAssetType::AT_OUTFIT;
-		if ("my_otfts" == type)
-			a_type = LLAssetType::AT_MY_OUTFITS;
+		LLFolderType::EType preferred_type = LLFolderType::lookup(type_name);
 
 		LLUUID parent_id;
 		if (bridge)
@@ -1017,100 +1013,100 @@ void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, co
 			parent_id = gInventory.getRootFolderID();
 		}
 
-		LLUUID category = gInventory.createNewCategory(parent_id, a_type, LLStringUtil::null);
+		LLUUID category = gInventory.createNewCategory(parent_id, preferred_type, LLStringUtil::null);
 		gInventory.notifyObservers();
 		folder->setSelectionByID(category, TRUE);
 	}
-	else if ("lsl" == type)
+	else if ("lsl" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_LSL_TEXT);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_LSL_TEXT);
 		create_new_item(NEW_LSL_NAME,
 					  parent_id,
 					  LLAssetType::AT_LSL_TEXT,
 					  LLInventoryType::IT_LSL,
 					  PERM_MOVE | PERM_TRANSFER);
 	}
-	else if ("notecard" == type)
+	else if ("notecard" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_NOTECARD);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_NOTECARD);
 		create_new_item(NEW_NOTECARD_NAME,
 					  parent_id,
 					  LLAssetType::AT_NOTECARD,
 					  LLInventoryType::IT_NOTECARD,
 					  PERM_ALL);
 	}
-	else if ("gesture" == type)
+	else if ("gesture" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_GESTURE);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE);
 		create_new_item(NEW_GESTURE_NAME,
 					  parent_id,
 					  LLAssetType::AT_GESTURE,
 					  LLInventoryType::IT_GESTURE,
 					  PERM_ALL);
 	}
-	else if ("shirt" == type)
+	else if ("shirt" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_SHIRT);
 	}
-	else if ("pants" == type)
+	else if ("pants" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_PANTS);
 	}
-	else if ("shoes" == type)
+	else if ("shoes" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_SHOES);
 	}
-	else if ("socks" == type)
+	else if ("socks" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_SOCKS);
 	}
-	else if ("jacket" == type)
+	else if ("jacket" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_JACKET);
 	}
-	else if ("skirt" == type)
+	else if ("skirt" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_SKIRT);
 	}
-	else if ("gloves" == type)
+	else if ("gloves" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_GLOVES);
 	}
-	else if ("undershirt" == type)
+	else if ("undershirt" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_UNDERSHIRT);
 	}
-	else if ("underpants" == type)
+	else if ("underpants" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_UNDERPANTS);
 	}
-	else if ("shape" == type)
+	else if ("shape" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART);
 		LLFolderBridge::createWearable(parent_id, WT_SHAPE);
 	}
-	else if ("skin" == type)
+	else if ("skin" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART);
 		LLFolderBridge::createWearable(parent_id, WT_SKIN);
 	}
-	else if ("hair" == type)
+	else if ("hair" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART);
 		LLFolderBridge::createWearable(parent_id, WT_HAIR);
 	}
-	else if ("eyes" == type)
+	else if ("eyes" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART);
 		LLFolderBridge::createWearable(parent_id, WT_EYES);
 	}
 	
diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h
index d523bf28594..529425aa258 100644
--- a/indra/newview/llviewerinventory.h
+++ b/indra/newview/llviewerinventory.h
@@ -185,7 +185,7 @@ class LLViewerInventoryCategory  : public LLInventoryCategory
 	
 public:
 	LLViewerInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid,
-							  LLAssetType::EType preferred_type,
+							  LLFolderType::EType preferred_type,
 							  const std::string& name,
 							  const LLUUID& owner_id);
 	LLViewerInventoryCategory(const LLUUID& owner_id);
@@ -221,7 +221,7 @@ class LLViewerInventoryCategory  : public LLInventoryCategory
 	bool exportFileLocal(LLFILE* fp) const;
 	bool importFileLocal(LLFILE* fp);
 	void determineFolderType();
-	void changeType(LLAssetType::EType new_folder_type);
+	void changeType(LLFolderType::EType new_folder_type);
 protected:
 	LLUUID mOwnerID;
 	S32 mVersion;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index dc291d6c34c..e4643a15b58 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -4190,12 +4190,10 @@ void handle_take_copy()
 {
 	if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return;
 
-	LLUUID category_id =
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+	const LLUUID category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
 	derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id);
 }
 
-
 // You can return an object to its owner if it is on your land.
 class LLObjectReturn : public view_listener_t
 {
@@ -4276,7 +4274,7 @@ class LLObjectEnableReturn : public view_listener_t
 void force_take_copy(void*)
 {
 	if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return;
-	const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+	const LLUUID category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
 	derez_objects(DRD_FORCE_TO_GOD_INVENTORY, category_id);
 }
 
@@ -4337,8 +4335,7 @@ void handle_take()
 		if(category_id.notNull())
 		{
 		        // check trash
-			LLUUID trash;
-			trash = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+			const LLUUID trash = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 			if(category_id == trash || gInventory.isObjectDescendentOf(category_id, trash))
 			{
 				category_id.setNull();
@@ -4354,7 +4351,7 @@ void handle_take()
 	}
 	if(category_id.isNull())
 	{
-		category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+		category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
 	}
 	LLSD payload;
 	payload["folder_id"] = category_id;
@@ -6933,7 +6930,7 @@ void handle_grab_texture(void* data)
 		LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl;
 		LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE;
 		LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE;
-		LLUUID folder_id(gInventory.findCategoryUUIDForType(asset_type));
+		const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(asset_type));
 		if(folder_id.notNull())
 		{
 			std::string name = "Unknown";
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index d3a9e1cef8a..d17c7e486fe 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -319,7 +319,7 @@ class LLFileUploadBulk : public view_listener_t
 			LLAssetStorage::LLStoreAssetCallback callback = NULL;
 			S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
 			void *userdata = NULL;
-			upload_new_resource(filename, asset_name, asset_name, 0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE,
+			upload_new_resource(filename, asset_name, asset_name, 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
 				LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
 					    display_name,
 					    callback, expected_upload_cost, userdata);
@@ -493,7 +493,7 @@ void handle_compress_image(void*)
 
 void upload_new_resource(const std::string& src_filename, std::string name,
 			 std::string desc, S32 compression_info,
-			 LLAssetType::EType destination_folder_type,
+			 LLFolderType::EType destination_folder_type,
 			 LLInventoryType::EType inv_type,
 			 U32 next_owner_perms,
 			 U32 group_perms,
@@ -810,7 +810,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt
 
 	if(result >= 0)
 	{
-		LLAssetType::EType dest_loc = (data->mPreferredLocation == LLAssetType::AT_NONE) ? data->mAssetInfo.mType : data->mPreferredLocation;
+		LLFolderType::EType dest_loc = (data->mPreferredLocation == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(data->mAssetInfo.mType) : data->mPreferredLocation;
 
 		if (LLAssetType::AT_SOUND == data->mAssetInfo.mType ||
 			LLAssetType::AT_TEXTURE == data->mAssetInfo.mType ||
@@ -856,7 +856,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt
 		{
 			// Actually add the upload to inventory
 			llinfos << "Adding " << uuid << " to inventory." << llendl;
-			LLUUID folder_id(gInventory.findCategoryUUIDForType(dest_loc));
+			const LLUUID folder_id = gInventory.findCategoryUUIDForType(dest_loc);
 			if(folder_id.notNull())
 			{
 				U32 next_owner_perms = data->mNextOwnerPerm;
@@ -903,7 +903,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt
 		LLAssetStorage::LLStoreAssetCallback callback = NULL;
 		void *userdata = NULL;
 		upload_new_resource(next_file, asset_name, asset_name,	// file
-				    0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE,
+				    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
 				    PERM_NONE, PERM_NONE, PERM_NONE,
 				    display_name,
 				    callback,
@@ -915,7 +915,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt
 void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_type,
 			 std::string name,
 			 std::string desc, S32 compression_info,
-			 LLAssetType::EType destination_folder_type,
+			 LLFolderType::EType destination_folder_type,
 			 LLInventoryType::EType inv_type,
 			 U32 next_owner_perms,
 			 U32 group_perms,
@@ -973,14 +973,14 @@ void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ty
 	llinfos << "Name: " << name << llendl;
 	llinfos << "Desc: " << desc << llendl;
 	llinfos << "Expected Upload Cost: " << expected_upload_cost << llendl;
-	lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLAssetType::AT_NONE) ? asset_type : destination_folder_type) << llendl;
+	lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type) << llendl;
 	lldebugs << "Asset Type: " << LLAssetType::lookup(asset_type) << llendl;
 	std::string url = gAgent.getRegion()->getCapability("NewFileAgentInventory");
 	if (!url.empty())
 	{
 		llinfos << "New Agent Inventory via capability" << llendl;
 		LLSD body;
-		body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLAssetType::AT_NONE) ? asset_type : destination_folder_type);
+		body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type);
 		body["asset_type"] = LLAssetType::lookup(asset_type);
 		body["inventory_type"] = LLInventoryType::lookup(inv_type);
 		body["name"] = name;
diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h
index bf21292082b..da78537a295 100644
--- a/indra/newview/llviewermenufile.h
+++ b/indra/newview/llviewermenufile.h
@@ -33,7 +33,7 @@
 #ifndef LLVIEWERMENUFILE_H
 #define LLVIEWERMENUFILE_H
 
-#include "llassettype.h"
+#include "llfoldertype.h"
 #include "llinventorytype.h"
 
 class LLTransactionID;
@@ -45,7 +45,7 @@ void upload_new_resource(const std::string& src_filename,
 			 std::string name,
 			 std::string desc, 
 			 S32 compression_info,
-			 LLAssetType::EType destination_folder_type,
+			 LLFolderType::EType destination_folder_type,
 			 LLInventoryType::EType inv_type,
 			 U32 next_owner_perms,
 			 U32 group_perms,
@@ -60,7 +60,7 @@ void upload_new_resource(const LLTransactionID &tid,
 			 std::string name,
 			 std::string desc, 
 			 S32 compression_info,
-			 LLAssetType::EType destination_folder_type,
+			 LLFolderType::EType destination_folder_type,
 			 LLInventoryType::EType inv_type,
 			 U32 next_owner_perms,
 			 U32 group_perms,
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 791ec073491..966ddad5580 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -210,7 +210,6 @@ const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] =
 bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotification::getSelectedOption(notification, response);
-	LLUUID fid;
 	LLMessageSystem* msg = gMessageSystem;
 	const LLSD& payload = notification["payload"];
 
@@ -220,10 +219,11 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
 	switch(option)
 	{
 	case 0:
+	{
 		// accept
 		LLAvatarTracker::formFriendship(payload["from_id"]);
 
-		fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+		const LLUUID fid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 
 		// This will also trigger an onlinenotification if the user is online
 		msg->newMessageFast(_PREHASH_AcceptFriendship);
@@ -236,7 +236,9 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
 		msg->addUUIDFast(_PREHASH_FolderID, fid);
 		msg->sendReliable(LLHost(payload["sender"].asString()));
 		break;
+	}
 	case 1:
+	{
 		// decline
 		// We no longer notify other viewers, but we DO still send
 		// the rejection to the simulator to delete the pending userop.
@@ -248,6 +250,7 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
 		msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]);
 		msg->sendReliable(LLHost(payload["sender"].asString()));
 		break;
+	}
 	default:
 		// close button probably, possibly timed out
 		break;
@@ -768,8 +771,7 @@ class LLDiscardAgentOffer : public LLInventoryFetchComboObserver
 	virtual void done()
 	{
 		LL_DEBUGS("Messaging") << "LLDiscardAgentOffer::done()" << LL_ENDL;
-		LLUUID trash_id;
-		trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		bool notify = false;
 		if(trash_id.notNull() && mObjectID.notNull())
 		{
@@ -876,7 +878,7 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
 {
 	std::vector<LLUUID>::const_iterator it = items.begin();
 	std::vector<LLUUID>::const_iterator end = items.end();
-	LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH));
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	LLInventoryItem* item;
 	for(; it != end; ++it)
 	{
@@ -947,13 +949,12 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
 		}
 
 		//Trash Check
-		LLUUID trash_id;
-		trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
 		{
 			return;
 		}
-		LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+		const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 		//BOOL inventory_has_focus = gFocusMgr.childHasKeyboardFocus(view);
 		BOOL user_is_away = gAwayTimer.getStarted();
 
@@ -1713,7 +1714,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				info->mFromGroup = from_group;
 				info->mTransactionID = session_id;
 				info->mType = (LLAssetType::EType) asset_type;
-				info->mFolderID = gInventory.findCategoryUUIDForType(info->mType);
+				info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType));
 				std::string from_name;
 
 				from_name += "A group member named ";
@@ -1847,7 +1848,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 			info->mFromID = from_id;
 			info->mFromGroup = from_group;
 			info->mTransactionID = session_id;
-			info->mFolderID = gInventory.findCategoryUUIDForType(info->mType);
+			info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType));
 
 			if (dialog == IM_TASK_INVENTORY_OFFERED)
 			{
@@ -2141,7 +2142,7 @@ bool callingcard_offer_callback(const LLSD& notification, const LLSD& response)
 		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
 		msg->nextBlockFast(_PREHASH_TransactionBlock);
 		msg->addUUIDFast(_PREHASH_TransactionID, notification["payload"]["transaction_id"].asUUID());
-		fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+		fid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 		msg->nextBlockFast(_PREHASH_FolderData);
 		msg->addUUIDFast(_PREHASH_FolderID, fid);
 		msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
@@ -2594,11 +2595,10 @@ BOOL LLPostTeleportNotifiers::tick()
 	{
 		// get callingcards and landmarks available to the user arriving.
 		LLInventoryFetchDescendentsObserver::folder_ref_t folders;
-		LLUUID folder_id;
-		folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
-		if(folder_id.notNull()) 
-			folders.push_back(folder_id);
-		folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+		const LLUUID callingcard_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
+		if(callingcard_id.notNull()) 
+			folders.push_back(callingcard_id);
+		const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 		if(folder_id.notNull()) 
 			folders.push_back(folder_id);
 		if(!folders.empty())
@@ -4816,7 +4816,7 @@ void container_inventory_arrived(LLViewerObject* object,
 		// create a new inventory category to put this in
 		LLUUID cat_id;
 		cat_id = gInventory.createNewCategory(gInventory.getRootFolderID(),
-											  LLAssetType::AT_NONE,
+											  LLFolderType::FT_NONE,
 											  LLTrans::getString("AcquiredItems"));
 
 		InventoryObjectList::const_iterator it = inventory->begin();
@@ -4866,7 +4866,7 @@ void container_inventory_arrived(LLViewerObject* object,
 		}
 
 		LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
-		LLUUID category = gInventory.findCategoryUUIDForType(item->getType());
+		const LLUUID category = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(item->getType()));
 
 		LLUUID item_id;
 		item_id.generate();
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index 65994dfb308..4ce0e2476ba 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -59,6 +59,7 @@
 #include "lltooltip.h"
 #include "lltrans.h"
 #include "lluictrlfactory.h"
+#include "llviewerassettype.h"
 #include "llviewercontrol.h"
 #include "llviewerinventory.h"
 #include "llviewertexturelist.h"
@@ -465,19 +466,17 @@ LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const
 				}
 
 				break;
-			case LLAssetType::AT_SOUND:			img_name = "Inv_Sound";	break;
+			case LLAssetType::AT_SOUND:			img_name = "Inv_Sound";		break;
 			case LLAssetType::AT_CLOTHING:		img_name = "Inv_Clothing";	break;
-			case LLAssetType::AT_OBJECT:		img_name = "Inv_Object"; break;
+			case LLAssetType::AT_OBJECT:		img_name = "Inv_Object"; 	break;
 			case LLAssetType::AT_CALLINGCARD:	img_name = "Inv_CallingCard"; break;
-			case LLAssetType::AT_LANDMARK:		img_name = "Inv_Landmark"; break;
+			case LLAssetType::AT_LANDMARK:		img_name = "Inv_Landmark"; 	break;
 			case LLAssetType::AT_NOTECARD:		img_name = "Inv_Notecard";	break;
 			case LLAssetType::AT_LSL_TEXT:		img_name = "Inv_Script";	break;
-			case LLAssetType::AT_BODYPART:		img_name = "Inv_Skin";	break;
-			case LLAssetType::AT_ANIMATION:		img_name = "Inv_Animation";break;
-			case LLAssetType::AT_GESTURE:			img_name = "Inv_Gesture";	break;
-				//TODO need img_name
-			case LLAssetType::AT_FAVORITE:		img_name = "Inv_Landmark";	 break;
-			default: llassert(0); 
+			case LLAssetType::AT_BODYPART:		img_name = "Inv_Skin";		break;
+			case LLAssetType::AT_ANIMATION:		img_name = "Inv_Animation";	break;
+			case LLAssetType::AT_GESTURE:		img_name = "Inv_Gesture";	break;
+			default: llassert(0);
 		}
 
 		return LLUI::getUIImage(img_name);
@@ -692,11 +691,10 @@ BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask)
 		if( LLToolDragAndDrop::getInstance()->isOverThreshold( screen_x, screen_y ) )
 		{
 			LLToolDragAndDrop::getInstance()->beginDrag(
-				LLAssetType::lookupDragAndDropType( mDragItem->getType() ),
+				LLViewerAssetType::lookupDragAndDropType( mDragItem->getType() ),
 				mDragItem->getUUID(),
 				LLToolDragAndDrop::SOURCE_NOTECARD,
 				mPreviewID, mObjectID);
-
 			return LLToolDragAndDrop::getInstance()->handleHover( x, y, mask );
 		}
 		getWindow()->setCursor(UI_CURSOR_HAND);
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 964b16df046..9a115ea4e6c 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -35,53 +35,22 @@
 #include "llvoavatarself.h"
 #include "llvoavatar.h"
 
-#include <stdio.h>
-#include <ctype.h>
-
-#include "llaudioengine.h"
-#include "noise.h"
+#include "pipeline.h"
 
-// TODO: Seraph - Remove unnecessary headers.  These are copied from llvoavatar.h.
 #include "llagent.h" //  Get state values from here
 #include "llagentwearables.h"
-#include "llviewercontrol.h"
-#include "lldrawpoolavatar.h"
-#include "lldriverparam.h"
-#include "lleditingmotion.h"
-#include "llemote.h"
-#include "llface.h"
-#include "llfirstuse.h"
-#include "llheadrotmotion.h"
 #include "llhudeffecttrail.h"
 #include "llhudmanager.h"
-#include "llkeyframefallmotion.h"
-#include "llkeyframestandmotion.h"
-#include "llkeyframewalkmotion.h"
-#include "llmutelist.h"
 #include "llselectmgr.h"
-#include "llsprite.h"
-#include "lltargetingmotion.h"
-#include "lltexlayer.h"
-#include "lltexglobalcolor.h"
 #include "lltoolgrab.h"	// for needsRenderBeam
 #include "lltoolmgr.h" // for needsRenderBeam
 #include "lltoolmorph.h"
 #include "lltrans.h"
 #include "llviewercamera.h"
-#include "llviewertexturelist.h"
 #include "llviewermenu.h"
 #include "llviewerobjectlist.h"
-#include "llviewerparcelmgr.h"
 #include "llviewerstats.h"
-#include "llvovolume.h"
-#include "llworld.h"
-#include "pipeline.h"
-#include "llviewershadermgr.h"
-#include "llsky.h"
-#include "llanimstatelabels.h"
-#include "llgesturemgr.h" //needed to trigger the voice gesticulations
-#include "llvoiceclient.h"
-#include "llvoicevisualizer.h" // Ventrella
+#include "llviewerregion.h"
 #include "llappearancemgr.h"
 
 #include "boost/lexical_cast.hpp"
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 3fe02088c4c..94194b5c0b7 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -1123,7 +1123,7 @@ void LLWearable::saveNewAsset() const
 		{
 			llinfos << "Update Agent Inventory via capability" << llendl;
 			LLSD body;
-			body["folder_id"] = gInventory.findCategoryUUIDForType(getAssetType());
+			body["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetToFolderType(getAssetType()));
 			body["asset_type"] = LLAssetType::lookup(getAssetType());
 			body["inventory_type"] = LLInventoryType::lookup(LLInventoryType::IT_WEARABLE);
 			body["name"] = getName();
diff --git a/indra/newview/skins/default/textures/inv_folder_inbox.tga b/indra/newview/skins/default/textures/inv_folder_inbox.tga
new file mode 100644
index 0000000000000000000000000000000000000000..04539c2cc4f002c9c1c4724215e5b7cf08cfb177
GIT binary patch
literal 2085
zcmeHF!A`<J5M4AHk9>fKet>f010<nM6C<Rk@xY~Nuo|!!T2CB$X+NS#6Am0oNjUUJ
z`U(7kM~>sZRfwUbA~8l2HhG<$H#7UTvr}RRY`My;%%l@WL_Y$4EbRj5voIthO}`E3
zE$dUh3Hc}d$|8pYdYO7&t0)TDwoScWF9Yz17u8#qMU%;dMxzmp$77n!X2QY;k9bkN
zX__KGiXsYvfHX}L7Cz2H9RIlK{*L2N9LLmdx2amKlIMBC!UvCdk-jX;RIAm<_kBu|
zgr?J}u<*enUZjtnx~@yZ;gGuBuIM2weDH{G(#IQagFOAB`N4eUfy=FCAMwRvvC@YI
zAnHEm>~ntJK2KvgV|n?1fqO0S8}8RX=z#j9n;oU256+|u!+5d#_l~4mMkRCg`H__2
z)`@HFrhcoo)W+5MovdEgD{T8gXsjQ$_kXnmP5sewq}D_KS!xdYyGb9O9={i62jLCQ
C7t+N5

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml
index c33f68eaf7a..1181493393b 100644
--- a/indra/newview/skins/default/xui/en/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml
@@ -31,7 +31,7 @@
              left="0"
              mouse_opaque="true"
              name="favorites_list"
-             start_folder="favorite"
+             start_folder="Favorite"
              width="380"/>
         </accordion_tab>
         <accordion_tab
@@ -47,7 +47,7 @@
              left="0"
              mouse_opaque="true"
              name="landmarks_list"
-             start_folder="landmark"
+             start_folder="Landmarks"
              width="380"/>
         </accordion_tab>
         <accordion_tab
@@ -63,13 +63,13 @@
              left="0"
              mouse_opaque="true"
              name="my_inventory_list"
-             start_folder="inventory"
+             start_folder="INVENTORY"
              width="380"/>
-        </accordion_tab>
-        <accordion_tab
-         layout="topleft"
-         name="tab_library"
-         title="Library">
+          </accordion_tab>
+          <accordion_tab
+           layout="topleft"
+           name="tab_library"
+           title="Library">
             <inventory_subtree_panel
              allow_multi_select="true"
              border="true"
@@ -79,7 +79,7 @@
              left="0"
              mouse_opaque="true"
              name="library_list"
-             start_folder="library"
+             start_folder="LIBRARY"
              width="380"/>
         </accordion_tab>
     </accordion>
-- 
GitLab


From d220211b4dc7e5d39fc1c5f26b3b2bf528a90910 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 2 Nov 2009 17:32:36 -0800
Subject: [PATCH 028/306] EXT-1803 Fix group inspectors closing before you can
 see them if you can't join the group. Focus issue -- the inspector had no
 focusable widgets in that case. Reviewed with Richard.

---
 indra/newview/skins/default/xui/en/inspect_group.xml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/inspect_group.xml b/indra/newview/skins/default/xui/en/inspect_group.xml
index db12daa6e04..42a492090d5 100644
--- a/indra/newview/skins/default/xui/en/inspect_group.xml
+++ b/indra/newview/skins/default/xui/en/inspect_group.xml
@@ -73,6 +73,8 @@ L$123 to join
      name="group_icon"
      top="24"
      width="38" />
+  <!-- Must be tab_stop="true" so something can hold focus even when the
+    other buttons are disabled or invisible, otherwise inspector closes -->
     <button
      follows="top|left"
      height="18"
@@ -84,7 +86,7 @@ L$123 to join
      right="-8"
      top="35"
      left_delta="110"
-     tab_stop="false"
+     tab_stop="true"
      width="18"
      commit_callback.function="InspectGroup.ViewProfile" />
   <button
-- 
GitLab


From 3c1c0d7544805df7d77b7f2af4ab1f83ebf0839c Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Mon, 2 Nov 2009 17:58:10 -0800
Subject: [PATCH 029/306] Changed the operation of the "mute all" button in the
 nearby media floater to be closer to spec-compliant, per a design discussion
 this afternoon.

---
 indra/newview/llviewermediafocus.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
index 2f7040aaa30..657c58364f6 100644
--- a/indra/newview/llviewermediafocus.cpp
+++ b/indra/newview/llviewermediafocus.cpp
@@ -86,6 +86,9 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
 		mFocusedObjectID = objectp->getID();
 		mFocusedObjectFace = face;
 		mFocusedObjectNormal = pick_normal;
+		
+		// Focusing on a media face clears its disable flag.
+		media_impl->setDisabled(false);
 
 		LLTextureEntry* tep = objectp->getTE(face);
 		if(tep->hasMedia())
-- 
GitLab


From 995c18b1c7eb8fd23c0a35d5f504c03b7f2b144f Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Mon, 2 Nov 2009 19:28:24 -0800
Subject: [PATCH 030/306] removed picture_style from LLButton::Params and allow
 empty labels

---
 indra/llui/llbutton.cpp                       | 32 +++----------------
 indra/llui/llbutton.h                         |  5 +--
 indra/llui/llfloater.cpp                      |  1 -
 indra/llui/llflyoutbutton.cpp                 |  1 +
 indra/llui/llmenugl.cpp                       |  2 --
 indra/llui/llscrollbar.cpp                    |  2 ++
 indra/llui/lltabcontainer.cpp                 |  4 ++-
 indra/newview/llchiclet.cpp                   |  3 --
 indra/newview/lldebugmessagebox.cpp           |  1 +
 indra/newview/llfavoritesbar.cpp              |  1 +
 .../xui/en/floater_animation_preview.xml      |  2 --
 .../default/xui/en/floater_avatar_picker.xml  |  2 --
 .../skins/default/xui/en/floater_camera.xml   |  7 ----
 .../default/xui/en/floater_color_picker.xml   |  1 -
 .../skins/default/xui/en/floater_gesture.xml  |  3 --
 .../skins/default/xui/en/floater_lagmeter.xml |  3 --
 .../default/xui/en/floater_media_browser.xml  |  2 --
 .../skins/default/xui/en/floater_moveview.xml |  6 ----
 .../default/xui/en/floater_report_abuse.xml   |  1 -
 .../default/xui/en/floater_test_button.xml    |  2 --
 .../default/xui/en/floater_texture_ctrl.xml   |  1 -
 .../skins/default/xui/en/floater_tools.xml    | 27 ----------------
 .../skins/default/xui/en/inspect_avatar.xml   |  4 ---
 .../skins/default/xui/en/inspect_group.xml    |  1 -
 .../skins/default/xui/en/inspect_object.xml   |  2 --
 .../default/xui/en/panel_avatar_list_item.xml |  2 --
 .../skins/default/xui/en/panel_bottomtray.xml |  1 -
 .../skins/default/xui/en/panel_edit_pick.xml  |  1 -
 .../default/xui/en/panel_edit_wearable.xml    |  1 -
 .../xui/en/panel_group_info_sidetray.xml      |  2 --
 .../default/xui/en/panel_group_list_item.xml  |  2 --
 .../skins/default/xui/en/panel_landmarks.xml  |  3 --
 .../default/xui/en/panel_navigation_bar.xml   |  4 ---
 .../xui/en/panel_notifications_channel.xml    |  1 -
 .../skins/default/xui/en/panel_people.xml     | 11 -------
 .../skins/default/xui/en/panel_pick_info.xml  |  1 -
 .../default/xui/en/panel_pick_list_item.xml   |  1 -
 .../skins/default/xui/en/panel_picks.xml      |  3 --
 .../skins/default/xui/en/panel_places.xml     |  1 -
 .../xui/en/panel_preferences_alerts.xml       |  2 --
 .../xui/en/panel_preferences_sound.xml        |  7 ----
 .../xui/en/panel_prim_media_controls.xml      | 18 -----------
 .../default/xui/en/panel_profile_view.xml     |  1 -
 .../skins/default/xui/en/panel_progress.xml   |  1 -
 .../default/xui/en/panel_scrolling_param.xml  |  2 --
 .../default/xui/en/panel_teleport_history.xml |  1 -
 .../xui/en/panel_teleport_history_item.xml    |  2 --
 .../default/xui/en/widgets/combo_box.xml      |  2 --
 .../default/xui/en/widgets/location_input.xml |  2 --
 .../default/xui/en/widgets/search_editor.xml  |  4 +--
 .../default/xui/es/floater_script_debug.xml   |  2 +-
 .../default/xui/it/floater_script_debug.xml   |  2 +-
 .../default/xui/nl/floater_script_debug.xml   |  2 +-
 .../default/xui/pt/floater_script_debug.xml   |  2 +-
 54 files changed, 19 insertions(+), 181 deletions(-)

diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index a7946cacf54..8daceb9485d 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -95,8 +95,7 @@ LLButton::Params::Params()
 	is_toggle("is_toggle", false),
 	scale_image("scale_image", true),
 	hover_glow_amount("hover_glow_amount"),
-	commit_on_return("commit_on_return", true),
-	picture_style("picture_style", false)
+	commit_on_return("commit_on_return", true)
 {
 	addSynonym(is_toggle, "toggle");
 	held_down_delay.seconds = 0.5f;
@@ -153,17 +152,9 @@ LLButton::LLButton(const LLButton::Params& p)
 	static LLUICachedControl<S32> llbutton_orig_h_pad ("UIButtonOrigHPad", 0);
 	static Params default_params(LLUICtrlFactory::getDefaultParams<LLButton>());
 
-	//if we aren't a picture_style button set label as name if not provided
-	if (!p.picture_style.isProvided() || !p.picture_style)
+	if (!p.label_selected.isProvided())
 	{
-		if (!p.label.isProvided()) 
-		{
-			mUnselectedLabel = p.name();
-		}
-		if (!p.label_selected.isProvided())	
-		{
-			mSelectedLabel = mUnselectedLabel.getString();
-		}
+		mSelectedLabel = mUnselectedLabel;
 	}
 
 	// Hack to make sure there is space for at least one character
@@ -1099,19 +1090,4 @@ void LLButton::resetMouseDownTimer()
 {
 	mMouseDownTimer.stop();
 	mMouseDownTimer.reset();
-}
-
-
-// *TODO: Remove this function after the initial XUI XML re-export pass.
-// static
-void LLButton::setupParamsForExport(Params& p, LLView* parent)
-{
-	std::string label = p.label;
-	if (label.empty())
-	{
-		//if our label is empty this is a picture style button
-		p.picture_style = true;
-	}
-
-	LLUICtrl::setupParamsForExport(p, parent);
-}
+}
\ No newline at end of file
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 85580a98bf2..08f289092f2 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -115,8 +115,7 @@ class LLButton
 		// misc
 		Optional<bool>			is_toggle,
 								scale_image,
-								commit_on_return,
-								picture_style;      //if true, don't display label
+								commit_on_return;
 		
 		Optional<F32>				hover_glow_amount;
 		Optional<TimeIntervalParam>	held_down_delay;
@@ -247,8 +246,6 @@ class LLButton
 
 	LLFrameTimer	mMouseDownTimer;
 
-	// If the label is empty, set the picture_style attribute
-	static void setupParamsForExport(Params& p, LLView* parent);
 private:
 	void			drawBorder(LLUIImage* imagep, const LLColor4& color, S32 size);
 	void			resetMouseDownTimer();
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 26a8b6c48f8..90ba2dc41ff 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -1826,7 +1826,6 @@ void LLFloater::buildButtons()
 		LLButton::Params p;
 		p.name(sButtonNames[i]);
 		p.rect(btn_rect);
-		p.label("");
 		p.image_unselected.name(sButtonActiveImageNames[i]);
 		// Selected, no matter if hovered or not, is "pressed"
 		p.image_selected.name(sButtonPressedImageNames[i]);
diff --git a/indra/llui/llflyoutbutton.cpp b/indra/llui/llflyoutbutton.cpp
index 3483bac7820..abb0b869eb8 100644
--- a/indra/llui/llflyoutbutton.cpp
+++ b/indra/llui/llflyoutbutton.cpp
@@ -48,6 +48,7 @@ LLFlyoutButton::LLFlyoutButton(const Params& p)
 	// Text label button
 	LLButton::Params bp(p.action_button);
 	bp.name(p.label);
+	bp.label(p.label);
 	bp.rect.left(0).bottom(0).width(getRect().getWidth() - FLYOUT_BUTTON_ARROW_WIDTH).height(getRect().getHeight());
 	bp.click_callback.function(boost::bind(&LLFlyoutButton::onActionButtonClick, this, _2));
 	bp.follows.flags(FOLLOWS_ALL);
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 91e7e46195d..7847cc17902 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -1555,8 +1555,6 @@ LLMenuScrollItem::LLMenuScrollItem(const Params& p)
 	}
 
 	LLButton::Params bparams;
-	bparams.label("");
-	bparams.label_selected("");
 	bparams.mouse_opaque(true);
 	bparams.scale_image(false);
 	bparams.click_callback(p.scroll_callback);
diff --git a/indra/llui/llscrollbar.cpp b/indra/llui/llscrollbar.cpp
index dfd315d4516..b450ecbbf91 100644
--- a/indra/llui/llscrollbar.cpp
+++ b/indra/llui/llscrollbar.cpp
@@ -115,6 +115,7 @@ LLScrollbar::LLScrollbar(const Params & p)
 
 	LLButton::Params up_btn(mOrientation == VERTICAL ? p.up_button : p.left_button);
 	up_btn.name(std::string("Line Up"));
+	up_btn.label(std::string("Line Up"));
 	up_btn.rect(line_up_rect);
 	up_btn.click_callback.function(boost::bind(&LLScrollbar::onLineUpBtnPressed, this, _2));
 	up_btn.mouse_held_callback.function(boost::bind(&LLScrollbar::onLineUpBtnPressed, this, _2));
@@ -125,6 +126,7 @@ LLScrollbar::LLScrollbar(const Params & p)
 
 	LLButton::Params down_btn(mOrientation == VERTICAL ? p.down_button : p.right_button);
 	down_btn.name(std::string("Line Down"));
+	down_btn.label(std::string("Line Down"));
 	down_btn.rect(line_down_rect);
 	down_btn.follows.flags(FOLLOWS_RIGHT|FOLLOWS_BOTTOM);
 	down_btn.click_callback.function(boost::bind(&LLScrollbar::onLineDownBtnPressed, this, _2));
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index cde4c755184..6ca9c4ceda7 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -927,7 +927,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
 		textbox = LLUICtrlFactory::create<LLTextBox> (params);
 		
 		LLButton::Params p;
-		p.name("");
+		p.name("placeholder");
 		btn = LLUICtrlFactory::create<LLButton>(p);
 	}
 	else
@@ -1645,6 +1645,7 @@ void LLTabContainer::initButtons()
 
 		LLButton::Params prev_btn_params;
 		prev_btn_params.name(std::string("Up Arrow"));
+		prev_btn_params.label(std::string("Up Arrow"));
 		prev_btn_params.rect(up_arrow_btn_rect);
 		prev_btn_params.follows.flags(FOLLOWS_TOP | FOLLOWS_LEFT);
 		prev_btn_params.image_unselected.name("scrollbutton_up_out_blue.tga");
@@ -1654,6 +1655,7 @@ void LLTabContainer::initButtons()
 
 		LLButton::Params next_btn_params;
 		next_btn_params.name(std::string("Down Arrow"));
+		next_btn_params.label(std::string("Down Arrow"));
 		next_btn_params.rect(down_arrow_btn_rect);
 		next_btn_params.follows.flags(FOLLOWS_BOTTOM | FOLLOWS_LEFT);
 		next_btn_params.image_unselected.name("scrollbutton_down_out_blue.tga");
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index bad61101c1b..7214ac2886f 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -1264,17 +1264,14 @@ LLTalkButton::Params::Params()
 	speak_button.font(LLFontGL::getFontSansSerifSmall());
 	speak_button.tab_stop(false);
 	speak_button.is_toggle(true);
-	speak_button.picture_style(true);
 	// Use default button art. JC
 	//speak_button.image_selected(LLUI::getUIImage("SegmentedBtn_Left_Selected"));
 	//speak_button.image_unselected(LLUI::getUIImage("SegmentedBtn_Left_Off"));
 
 	show_button.name("right");
-	show_button.label(LLStringUtil::null);
 	show_button.rect(LLRect(0, 0, 20, 0));
 	show_button.tab_stop(false);
 	show_button.is_toggle(true);
-	show_button.picture_style(true);
 	show_button.image_selected(LLUI::getUIImage("ComboButton_Selected"));
 	show_button.image_unselected(LLUI::getUIImage("ComboButton_Off"));
 
diff --git a/indra/newview/lldebugmessagebox.cpp b/indra/newview/lldebugmessagebox.cpp
index 29e375c9faf..7814e94dfd6 100644
--- a/indra/newview/lldebugmessagebox.cpp
+++ b/indra/newview/lldebugmessagebox.cpp
@@ -124,6 +124,7 @@ LLDebugVarMessageBox::LLDebugVarMessageBox(const std::string& title, EDebugVarTy
 
 	LLButton::Params p;
 	p.name(std::string("Animate"));
+	p.label(std::string("Animate"));
 	p.rect(LLRect(20, 45, 180, 25));
 	p.click_callback.function(boost::bind(&LLDebugVarMessageBox::onAnimateClicked, this, _2));
 	mAnimateButton = LLUICtrlFactory::create<LLButton>(p);
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index a6afbc05bec..04860b061c7 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -750,6 +750,7 @@ void LLFavoritesBarCtrl::updateButtons(U32 bar_width)
 			bparams.tab_stop(false);
 			bparams.font(mFont);
 			bparams.name(">>");
+			bparams.label(">>");
 			bparams.tool_tip(mChevronButtonToolTip);
 			bparams.click_callback.function(boost::bind(&LLFavoritesBarCtrl::showDropDownMenu, this));
 
diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
index ab3d5722f0a..ebce758d3d7 100644
--- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
@@ -455,7 +455,6 @@ Maximum animation length is [MAX_LENGTH] seconds.
      layout="topleft"
      left="10"
      name="play_btn"
-     picture_style="true"
      tool_tip="Play/pause your animation"
      top_pad="0"
      width="28" />
@@ -467,7 +466,6 @@ Maximum animation length is [MAX_LENGTH] seconds.
      layout="topleft"
      left_pad="4"
      name="stop_btn"
-     picture_style="true"
      tool_tip="Stop animation playback"
      top_delta="0"
      width="28" />
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
index 3f4f8b197f6..8cfe5288fd3 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
@@ -116,7 +116,6 @@
              height="20"
              width="20"
              name="RefreshFriends"
-             picture_style="true"
              image_overlay="Refresh_Off">
              <button.commit_callback 
               function="Refresh.FriendList"/>
@@ -188,7 +187,6 @@
              height="28"
              width="28"
              name="Refresh"
-             picture_style="true"
              image_overlay="Refresh_Off" />
             <scroll_list
              follows="all"
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
index 1b694180130..a569b62e967 100644
--- a/indra/newview/skins/default/xui/en/floater_camera.xml
+++ b/indra/newview/skins/default/xui/en/floater_camera.xml
@@ -42,7 +42,6 @@
          layout="topleft"
          left="45"
          name="cam_track_stick"
-         picture_style="true"
          quadrant="left"
          scale_image="false"
          sound_flags="3"
@@ -59,7 +58,6 @@
          left="7"
          minus_image="ScrollThumb_Vert"
          name="zoom"
-         picture_style="true"
          plus_image="ScrollThumb_Vert"
          quadrant="left"
          scale_image="false"
@@ -75,7 +73,6 @@
          layout="topleft"
          left="45"
          name="cam_rotate_stick"
-         picture_style="true"
          quadrant="left"
          scale_image="false"
          sound_flags="3"
@@ -98,7 +95,6 @@
              layout="topleft"
              left="5"
              name="rear_view"
-             picture_style="true"
              tool_tip="Rear View"
              top="2"
              width="30">
@@ -113,7 +109,6 @@
              layout="topleft"
              left_pad="5"
              name="group_view"
-             picture_style="true"
              tool_tip="Group View"
              top="2"
              width="30">
@@ -128,7 +123,6 @@
              layout="topleft"
              left="5"
              name="front_view"
-             picture_style="true"
              tool_tip="Front View"
              top_pad="5"
              width="30">
@@ -143,7 +137,6 @@
              layout="topleft"
              left_pad="5"
              name="mouselook_view"
-             picture_style="true"
              tool_tip="Mouselook View"
              top_pad="-30"
              width="30">
diff --git a/indra/newview/skins/default/xui/en/floater_color_picker.xml b/indra/newview/skins/default/xui/en/floater_color_picker.xml
index 686b8dc40fb..7c6376d84a6 100644
--- a/indra/newview/skins/default/xui/en/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_color_picker.xml
@@ -180,7 +180,6 @@
      layout="topleft"
      left_pad="30"
      name="color_pipette"
-     picture_style="true"
      width="32" />
     <button
      follows="right|bottom"
diff --git a/indra/newview/skins/default/xui/en/floater_gesture.xml b/indra/newview/skins/default/xui/en/floater_gesture.xml
index 128d518e12a..90b3339225e 100644
--- a/indra/newview/skins/default/xui/en/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/en/floater_gesture.xml
@@ -68,7 +68,6 @@
                layout="topleft"
                left="10"
                name="recent_viewsort_btn"
-               picture_style="true"
                top="5"
                width="18" />
               <button
@@ -81,7 +80,6 @@
                  layout="topleft"
                  left_pad="5"
                  name="new_gesture_btn"
-                 picture_style="true"
                  tool_tip="Make new gesture"
                  top_delta="0"
                  width="18" />
@@ -95,7 +93,6 @@
                  layout="topleft"
                  left_pad="230"
                  name="del_btn"
-                 picture_style="true"
                  tool_tip="Delete this gesture"
                  top_delta="0"
                  width="18" />
diff --git a/indra/newview/skins/default/xui/en/floater_lagmeter.xml b/indra/newview/skins/default/xui/en/floater_lagmeter.xml
index d98fdc5118b..1ee6fd57e78 100644
--- a/indra/newview/skins/default/xui/en/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/en/floater_lagmeter.xml
@@ -184,7 +184,6 @@
      layout="topleft"
      left="8"
      name="client_lagmeter"
-     picture_style="true"
      tab_stop="false"
      tool_tip="Client lag status"
      top="24"
@@ -233,7 +232,6 @@
      layout="topleft"
      left="8"
      name="network_lagmeter"
-     picture_style="true"
      tab_stop="false"
      tool_tip="Network lag status"
      top="64"
@@ -282,7 +280,6 @@
      layout="topleft"
      left="8"
      name="server_lagmeter"
-     picture_style="true"
      tab_stop="false"
      tool_tip="Server lag status"
      top="104"
diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml
index b11892be74c..bc590dc6120 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -127,7 +127,6 @@
              layout="topleft"
              left_delta="55"
              name="play"
-             picture_style="true"
              top_delta="0"
              width="55" />
             <button
@@ -138,7 +137,6 @@
              layout="topleft"
              left_delta="0"
              name="pause"
-             picture_style="true"
              top_delta="0"
              width="55" />
             <button
diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml
index 02cbef5987e..5a8ffcebea5 100644
--- a/indra/newview/skins/default/xui/en/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/en/floater_moveview.xml
@@ -56,7 +56,6 @@
          layout="topleft"
          left="17"
          name="turn left btn"
-         picture_style="true"
          scale_image="false"
          tool_tip="Turn left (press Left Arrow or A)"
          top="45"
@@ -70,7 +69,6 @@
          layout="topleft"
          left_pad="34"
          name="turn right btn"
-         picture_style="true"
          scale_image="false"
          tool_tip="Turn right (press Right Arrow or D)"
          top_delta="0"
@@ -84,7 +82,6 @@
          layout="topleft"
          left="10"
          name="move up btn"
-         picture_style="true"
          scale_image="false"
          tool_tip="Fly up, press &quot;E&quot;"
          top="14"
@@ -98,7 +95,6 @@
          layout="topleft"
          left_pad="45"
          name="move down btn"
-         picture_style="true"
          scale_image="false"
          tool_tip="Fly down, press &quot;C&quot;"
          top_delta="0"
@@ -112,7 +108,6 @@
          layout="topleft"
          left="46"
          name="forward btn"
-         picture_style="true"
          quadrant="up"
          scale_image="false"
          tool_tip="Walk forward (press up arrow or W)"
@@ -127,7 +122,6 @@
          layout="topleft"
          left_delta="0"
          name="backward btn"
-         picture_style="true"
          quadrant="down"
          scale_image="false"
          tool_tip="Walk backward (press down arrow or S)"
diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
index 88f09b521cc..0b61dcef583 100644
--- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
@@ -126,7 +126,6 @@
      layout="topleft"
      left_delta="0"
      name="pick_btn"
-     picture_style="true"
      image_overlay="Inv_Object"
      tool_tip="Object Picker - Identify an object as the subject of this report"
      top_pad="0"
diff --git a/indra/newview/skins/default/xui/en/floater_test_button.xml b/indra/newview/skins/default/xui/en/floater_test_button.xml
index 89a1ddda99e..2bd0d1a0fab 100644
--- a/indra/newview/skins/default/xui/en/floater_test_button.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_button.xml
@@ -96,7 +96,6 @@
      layout="topleft"
      left="200"
      name="image_button"
-     picture_style="true"
      top="20"
      width="16" />
     <button
@@ -107,7 +106,6 @@
      layout="topleft"
      left_delta="0"
      name="image_color_button"
-     picture_style="true"
      top_pad="10"
      width="16" />
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
index 0a1f6e0e297..7b0baa5de22 100644
--- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
@@ -125,7 +125,6 @@
      layout="topleft"
      left="139"
      name="Pipette"
-     picture_style="true"
      top="250"
      width="32" />
     <button
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index ca125383023..0202e8b5828 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -75,7 +75,6 @@
      layout="topleft"
      left="10"
      name="button focus"
-     picture_style="true"
      tool_tip="Focus"
      width="20">
 	  <button.commit_callback
@@ -92,7 +91,6 @@
      layout="topleft"
      left_pad="20"
      name="button move"
-     picture_style="true"
      tool_tip="Move"
      width="20">
 	  <button.commit_callback
@@ -109,7 +107,6 @@
      layout="topleft"
      left_pad="20"
      name="button edit"
-     picture_style="true"
      tool_tip="Edit"
      width="20">
 	  <button.commit_callback
@@ -126,7 +123,6 @@
      layout="topleft"
      left_pad="20"
      name="button create"
-     picture_style="true"
      tool_tip="Create"
      width="20">
 	  <button.commit_callback
@@ -143,7 +139,6 @@
      layout="topleft"
      left_pad="20"
      name="button land"
-     picture_style="true"
      tool_tip="Land"
      width="20">
 	  <button.commit_callback
@@ -320,8 +315,6 @@
      image_disabled="ForwardArrow_Disabled"
      image_selected="ForwardArrow_Press"
      image_unselected="ForwardArrow_Off"
-     picture_style="true"
-     label_selected="Options"
      layout="topleft"
      name="Options..."
      tool_tip="Grid options"
@@ -342,7 +335,6 @@
      layout="topleft"
      left="4"
      name="ToolCube"
-     picture_style="true"
      tool_tip="Cube"
      top="51"
      width="20" />
@@ -356,7 +348,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolPrism"
-     picture_style="true"
      tool_tip="Prism"
      top_delta="0"
      width="20" />
@@ -370,7 +361,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolPyramid"
-     picture_style="true"
      tool_tip="Pyramid"
      top_delta="0"
      width="20" />
@@ -384,7 +374,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolTetrahedron"
-     picture_style="true"
      tool_tip="Tetrahedron"
      top_delta="0"
      width="20" />
@@ -398,7 +387,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolCylinder"
-     picture_style="true"
      tool_tip="Cylinder"
      top_delta="0"
      width="20" />
@@ -412,7 +400,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolHemiCylinder"
-     picture_style="true"
      tool_tip="Hemicylinder"
      top_delta="0"
      width="20" />
@@ -426,7 +413,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolCone"
-     picture_style="true"
      tool_tip="Cone"
      top_delta="0"
      width="20" />
@@ -440,7 +426,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolHemiCone"
-     picture_style="true"
      tool_tip="Hemicone"
      top_delta="0"
      width="20" />
@@ -454,7 +439,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolSphere"
-     picture_style="true"
      tool_tip="Sphere"
      top_delta="0"
      width="20" />
@@ -468,7 +452,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolHemiSphere"
-     picture_style="true"
      tool_tip="Hemisphere"
      top_delta="0"
      width="20" />
@@ -482,7 +465,6 @@
      layout="topleft"
      left="4"
      name="ToolTorus"
-     picture_style="true"
      tool_tip="Torus"
      top="77"
      width="20" />
@@ -496,7 +478,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolTube"
-     picture_style="true"
      tool_tip="Tube"
      top_delta="0"
      width="20" />
@@ -510,7 +491,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolRing"
-     picture_style="true"
      tool_tip="Ring"
      top_delta="0"
      width="20" />
@@ -524,7 +504,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolTree"
-     picture_style="true"
      tool_tip="Tree"
      top_delta="0"
      width="20" />
@@ -538,7 +517,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolGrass"
-     picture_style="true"
      tool_tip="Grass"
      top_delta="0"
      width="20" />
@@ -927,7 +905,6 @@
 			 left_pad="0"
 			 top_delta="0"
 			 name="button set group"
-			 picture_style="true"
 			 tab_stop="false"
 			 tool_tip="Choose a group to share this object's permissions"
 			 width="10" />
@@ -2700,7 +2677,6 @@
 			 layout="topleft"
 			 left_pad="0"
 			 name="add_media"
-			 picture_style="true"
 			 tab_stop="false"
 			 top_delta="0"
 			 tool_tip="Add Media"
@@ -2716,7 +2692,6 @@
 			 layout="topleft"
 			 left_pad="5"
 			 name="delete_media"
-			 picture_style="true"
 			 tool_tip="Delete this media texture"
 			 top_delta="0"
 			 width="18">
@@ -2733,7 +2708,6 @@
 			 layout="topleft"
 			 left_pad="10"
 			 name="edit_media"
-			 picture_style="true"
 			 top_delta="0"
 			 width="18">
 				<button.commit_callback
@@ -2871,7 +2845,6 @@
         <!--TODO: HOOK UP TO HELP VIEWER-->
        <!-- <button
          image_overlay="Arrow_Right_Off"
-         picture_style="true"
          left_pad="5"
          name="button show owners help"
          tool_tip="See an explanation of colors"
diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index 6b13e2f1c7c..920b2d4fbf9 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -102,7 +102,6 @@
      left_pad="0"
      top_delta="4"
      name="mute_btn"
-     picture_style="true"
      width="16" />
     <avatar_icon
      follows="all"
@@ -122,7 +121,6 @@
      image_unselected="ForwardArrow_Off"
      layout="topleft"
      name="view_profile_btn"
-     picture_style="true"
      right="-8"
      top="35"
      left_delta="110"
@@ -144,7 +142,6 @@
      image_unselected="OptionsMenu_Off"
      menu_filename="menu_inspect_avatar_gear.xml"
      name="gear_btn"
-     picture_style="true"
      right="-10"
      top="249"
      width="18" />
@@ -157,7 +154,6 @@
      image_unselected="OptionsMenu_Off"
      menu_filename="menu_inspect_self_gear.xml"
      name="gear_self_btn"
-     picture_style="true"
      right="-10"
      top="249"
      width="18" />
diff --git a/indra/newview/skins/default/xui/en/inspect_group.xml b/indra/newview/skins/default/xui/en/inspect_group.xml
index db12daa6e04..bc9c9244d74 100644
--- a/indra/newview/skins/default/xui/en/inspect_group.xml
+++ b/indra/newview/skins/default/xui/en/inspect_group.xml
@@ -80,7 +80,6 @@ L$123 to join
      image_selected="ForwardArrow_Press"
      image_unselected="ForwardArrow_Off"
      name="view_profile_btn"
-     picture_style="true"
      right="-8"
      top="35"
      left_delta="110"
diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml
index fe492e0ae80..8bd4bb76c69 100644
--- a/indra/newview/skins/default/xui/en/inspect_object.xml
+++ b/indra/newview/skins/default/xui/en/inspect_object.xml
@@ -168,7 +168,6 @@ This is a really long description for an object being as how it is at least 80 c
      image_unselected="OptionsMenu_Off"
      menu_filename="menu_inspect_object_gear.xml"
      name="gear_btn"
-     picture_style="true"
      right="-10"
      top_delta="5"
      width="18" />
@@ -180,7 +179,6 @@ This is a really long description for an object being as how it is at least 80 c
      image_unselected="ForwardArrow_Off"
      layout="topleft"
      name="more_info_btn"
-     picture_style="true"
      right="-5"
      top="20"
      left_delta="110"
diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
index 18761c3bb9a..0c426865310 100644
--- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
@@ -76,7 +76,6 @@
      left_pad="3"
      right="-31"
      name="info_btn"
-     picture_style="true"
      top_delta="-2"
      width="16" />
     <button
@@ -87,7 +86,6 @@
      left_pad="5"
      right="-3"
      name="profile_btn"
-     picture_style="true"
      top_delta="-2"
      width="20" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 73a1bae1c65..e08a282d570 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -281,7 +281,6 @@
                follows="right"
                flash_color="EmphasisColor"
                name="Unread"
-               picture_style="true"
                image_overlay="Widget_UpArrow" />
                <unread_notifications
                width="34"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
index bac6f6e4d1b..282b3f3e554 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -17,7 +17,6 @@
      image_overlay="BackArrow_Off"
      layout="topleft"
      name="back_btn"
-     picture_style="true"
      left="10"
      tab_stop="false"
      top="2"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
index 77b887de9ba..f76a56bda49 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -137,7 +137,6 @@ left="0"
      image_overlay="BackArrow_Off"
      layout="topleft"
      name="back_btn"
-     picture_style="true"
      left="10"
      top="7" />
 	<text
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index d8d47c40084..f3304bf4e50 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -32,7 +32,6 @@ background_visible="true"
      image_overlay="BackArrow_Off"
      layout="topleft"
      name="back"
-     picture_style="true"
      left="10"
      tab_stop="false"
      top="2"
@@ -194,7 +193,6 @@ background_visible="true"
      image_overlay="Refresh_Off"
      layout="topleft"
      name="btn_refresh"
-     picture_style="true"
      left="5"
      width="20" />
      <button
diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml
index ffa485051c7..5f6b911620f 100644
--- a/indra/newview/skins/default/xui/en/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_list_item.xml
@@ -54,7 +54,6 @@
      left_pad="3"
      right="-31"
      name="info_btn"
-     picture_style="true"
      top_delta="-2"
      width="16" />
    <!--*TODO: Should only appear on rollover-->
@@ -66,7 +65,6 @@
      left_pad="5"
      right="-3"
      name="profile_btn"
-     picture_style="true"
      top_delta="-2"
      width="20" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml
index 5293043ba7d..a2ddc7a43b4 100644
--- a/indra/newview/skins/default/xui/en/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml
@@ -103,7 +103,6 @@
          layout="topleft"
          left="10"
          name="options_gear_btn"
-         picture_style="true"
          top="6"
          width="18" />
         <button
@@ -115,7 +114,6 @@
          layout="topleft"
          left_pad="5"
          name="add_btn"
-         picture_style="true"
          tool_tip="Add new landmark"
          width="18" />
         <dnd_button
@@ -126,7 +124,6 @@
          layout="topleft"
          right="-5"
          name="trash_btn"
-         picture_style="true"
          tool_tip="Remove selected landmark"
          top="6"
          width="18" />
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index 4175d21639b..ddfa6e72a39 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -51,7 +51,6 @@
 	     layout="topleft"
 	     left="10"
 	     name="back_btn"
-	     picture_style="true"
 	     tool_tip="Go back to previous location"
 	     top="3"
 	     width="31" />
@@ -69,7 +68,6 @@
 	     layout="topleft"
 	     left_pad="0"
 	     name="forward_btn"
-	     picture_style="true"
 	     tool_tip="Go forward one location"
 	     top_delta="0"
 	     width="31" />
@@ -86,7 +84,6 @@
 	     layout="topleft"
 	     left_pad="7"
 	     name="home_btn"
-	     picture_style="true"
 	     tool_tip="Teleport to my home location"
 	     top_delta="0"
 	     width="32" />
@@ -127,7 +124,6 @@
 	<!--      left_pad="5" -->
 	<!--      mouse_opaque="false" -->
 	<!--      name="search_bg" -->
-	<!--      picture_style="true" -->
 	<!--      top_delta="0" -->
 	<!--      width="168" /> -->
 
diff --git a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
index c67ae416773..7b6c0f33da8 100644
--- a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
+++ b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
@@ -71,7 +71,6 @@
      layout="topleft"
      left_delta="0"
      name="header"
-     picture_style="true"
      top_delta="-20"
      width="100" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index e234a7b358e..c8194a286b8 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -95,7 +95,6 @@ background_visible="true"
              layout="topleft"
              left="10"
              name="nearby_view_sort_btn"
-             picture_style="true"
              top="5"
              width="18" />
              <button
@@ -107,7 +106,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="add_friend_btn"
-                 picture_style="true"
                  top_delta="0"
                  tool_tip="Add selected resident to your friends List"
                  width="18" />
@@ -183,7 +181,6 @@ background_visible="true"
                layout="topleft"
                left="10"
                name="friends_viewsort_btn"
-               picture_style="true"
                top="5"
                width="18" />
                 <button
@@ -195,7 +192,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="add_btn"
-                 picture_style="true"
                  tool_tip="Offer friendship to a resident"
                  top_delta="0"
                  width="18" />
@@ -209,7 +205,6 @@ background_visible="true"
                  left_pad="10"
                  right="-10"
                  name="del_btn"
-                 picture_style="true"
                  tool_tip="Remove selected person from your Friends list"
                  top_delta="0"
                  width="18" />
@@ -252,7 +247,6 @@ background_visible="true"
                layout="topleft"
                left="10"
                name="groups_viewsort_btn"
-               picture_style="true"
                top="7"
                width="18" />
                 <button
@@ -264,7 +258,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="plus_btn"
-                 picture_style="true"
                  tool_tip="Join group/Create new group"
                  top_delta="0"
                  width="18" />
@@ -277,7 +270,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="24"
                  name="activate_btn"
-                 picture_style="true"
                  tool_tip="Activate selected group"
                  top_delta="5"
                  width="10" />
@@ -290,7 +282,6 @@ background_visible="true"
                 left_pad="10"
                  right="-10"
                  name="minus_btn"
-                 picture_style="true"
                  tool_tip="Leave selected group"
                  top_delta="-5"
                  width="18" />
@@ -336,7 +327,6 @@ background_visible="true"
                layout="topleft"
                left="10"
                name="recent_viewsort_btn"
-               picture_style="true"
                top="7"
                width="18" />
               <button
@@ -348,7 +338,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="add_friend_btn"
-                 picture_style="true"
                  top_delta="0"
                  tool_tip="Add selected resident to your friends List"
                  width="18" />
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index a67ae59b4a4..42a1363b1bd 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -15,7 +15,6 @@
      image_overlay="BackArrow_Off"
      layout="topleft"
      name="back_btn"
-     picture_style="true"
      left="10"
      tab_stop="false"
      top="2"
diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
index 38ea6b6196e..7ff227ecb60 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
@@ -75,7 +75,6 @@
      image_unselected="BuyArrow_Press"
      layout="topleft"
      name="info_chevron"
-     picture_style="true"
      right="-7"
      tab_stop="false"
      top="27"
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index cbe1f11e3d7..ae61852f68d 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -41,7 +41,6 @@
              layout="topleft"
              left="0"
              name="gear_menu_btn"
-             picture_style="true"
              top="5"
              width="18" />
             <button
@@ -53,7 +52,6 @@
              layout="topleft"
              left_pad="15"
              name="new_btn"
-             picture_style="true"
              tool_tip="Create new pick at current location"
              top="5"
              width="18" />
@@ -65,7 +63,6 @@
              image_unselected="TrashItem_Off"
              layout="topleft"
              name="trash_btn"
-             picture_style="true"
              right="-10"
              top="5"
              width="18" />
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 5aa53ab46b1..5887d05d7ca 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -106,7 +106,6 @@ background_visible="true"
          image_disabled="ForwardArrow_Disabled"
          image_selected="ForwardArrow_Press"
          image_unselected="ForwardArrow_Off"
-         picture_style="true"
          layout="topleft"
          name="overflow_btn"
          right="-10"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
index 159323538ca..a94df4150da 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
@@ -73,7 +73,6 @@
      layout="topleft"
      left_delta="137"
      name="enable_this_popup"
-     picture_style="true"
      top_pad="10"
      width="43">
         <button.commit_callback
@@ -92,7 +91,6 @@
      layout="topleft"
      left_pad="50"
      name="disable_this_popup"
-     picture_style="true"
      top_delta="0"
      width="43">
         <button.commit_callback
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index 832c9775ce2..705c7ee0af0 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -40,7 +40,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_audio"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
@@ -86,7 +85,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_wind"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
@@ -122,7 +120,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_ui"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
@@ -158,7 +155,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_media"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
@@ -194,7 +190,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_sfx"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
@@ -230,7 +225,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_music"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
@@ -278,7 +272,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_voice"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
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 b21fbc1795f..7b34e2931ee 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
@@ -82,7 +82,6 @@
 		  image_unselected="media_btn_back.png"
 		  layout="topleft"
 		  tool_tip="Step back"
-		  picture_style="true"
 		  width="22"
 		  top_delta="4">
 		<button.commit_callback
@@ -103,7 +102,6 @@
 		  image_unselected="media_btn_forward.png"
 		  layout="topleft"
 		  tool_tip="Step forward"
-		  picture_style="true"
 		  top_delta="0"
 		  min_width="17"
 		  width="17">
@@ -141,7 +139,6 @@
 		  image_unselected="media_btn_home.png"
 		  layout="topleft"
 		  tool_tip="Home page"
-		  picture_style="true"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
@@ -162,7 +159,6 @@
 		  image_unselected="button_anim_stop.tga"
 		  layout="topleft"
 		  tool_tip="Stop media"
-		  picture_style="true"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
@@ -199,7 +195,6 @@
 		  image_unselected="media_btn_reload.png"
 		  layout="topleft"
 		  tool_tip="Reload"
-		  picture_style="true"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
@@ -219,7 +214,6 @@
 		  image_selected="media_btn_stoploading.png"
 		  image_unselected="media_btn_stoploading.png"
 		  layout="topleft"
-		  picture_style="true"
 		  tool_tip = "Stop loading"
 		  min_width="22"
 		  width="22">
@@ -241,7 +235,6 @@
 		  image_unselected="button_anim_play.tga"
 		  layout="topleft"
 		  tool_tip = "Play media"
-		  picture_style="true"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
@@ -262,7 +255,6 @@
 		  image_unselected="button_anim_pause.tga"
 		  layout="topleft"
 		  tool_tip = "Pause media"
-		  picture_style="true">
 		<button.commit_callback
 			function="MediaCtrl.Pause" />
 	  </button>
@@ -367,7 +359,6 @@ function="MediaCtrl.CommitURL" />
 		  is_toggle="true"
 		  layout="topleft"
 		  scale_image="false" 
-		  picture_style="true"
 		  tool_tip="Mute This Media"
 		  top_delta="22"
 		  min_width="24"
@@ -391,7 +382,6 @@ function="MediaCtrl.CommitURL" />
 		  image_unselected="media_btn_scrollup.png"
 		  layout="topleft"
 		  tool_tip="Volume up"
-		  picture_style="true"
 		  scale_image="true"
 		  min_width="20"
 		  width="20" >
@@ -414,7 +404,6 @@ function="MediaCtrl.CommitURL" />
 		  image_unselected="media_btn_scrolldown.png"
 		  layout="topleft"
 		  tool_tip="Volume down"
-		  picture_style="true"
 		  scale_image="true"
 		  min_width="20"
 		  width="20">
@@ -446,7 +435,6 @@ function="MediaCtrl.CommitURL" />
 		  image_unselected="media_btn_scrollup.png"
 		  layout="topleft"
 		  tool_tip="Scroll up"
-		  picture_style="true"
 		  scale_image="false"
 		  left="12"
 		  top_delta="4"
@@ -460,7 +448,6 @@ function="MediaCtrl.CommitURL" />
 		  layout="topleft"
 		  left="3"
 		  tool_tip="Scroll left"
-		  picture_style="true"
 		  scale_image="false"
 		  top="12"
 		  min_width="8"
@@ -473,7 +460,6 @@ function="MediaCtrl.CommitURL" />
 		  layout="topleft"
 		  left_pad="9"
 		  tool_tip="Scroll right"
-		  picture_style="true"
 		  scale_image="false"
 		  top_delta="0"
 		  min_width="8"
@@ -486,7 +472,6 @@ function="MediaCtrl.CommitURL" />
 		  layout="topleft"
 		  left="12"
 		  tool_tip="Scroll down"
-		  picture_style="true"
 		  scale_image="false"
 		  top="20"
 		  min_width="8"
@@ -506,7 +491,6 @@ function="MediaCtrl.CommitURL" />
 		  image_unselected="media_btn_optimalzoom.png"
 		  layout="topleft"
 		  tool_tip="Zoom"
-		  picture_style="true"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
@@ -542,7 +526,6 @@ function="MediaCtrl.CommitURL" />
 		  image_unselected="media_btn_newwindow.png"
 		  layout="topleft"
 		  tool_tip = "Open URL in browser"
-		  picture_style="true"
 		  top_delta="-3"
 		  min_width="24"
 		  width="24" >
@@ -579,7 +562,6 @@ function="MediaCtrl.CommitURL" />
 		  image_unselected="media_btn_done.png"
 		  layout="topleft"
 		  tool_tip ="Close media control"
-		  picture_style="true"
 		  top_delta="-4"
 		  width="21" >
 		<button.commit_callback
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 195b7315313..70e6a08e96b 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -21,7 +21,6 @@
      image_overlay="BackArrow_Off"
      layout="topleft"
      name="back"
-     picture_style="true"
      left="10"
      tab_stop="false"
      top="2"
diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml
index a312e4cf13f..18c22289062 100644
--- a/indra/newview/skins/default/xui/en/panel_progress.xml
+++ b/indra/newview/skins/default/xui/en/panel_progress.xml
@@ -129,7 +129,6 @@
      layout="topleft"
      left="-106"
      name="cancel_btn"
-     picture_style="true"
      top="700"
      width="90" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml
index 21ecd018397..44afadf65a6 100644
--- a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml
+++ b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml
@@ -56,7 +56,6 @@
      layout="topleft"
      left="2"
      name="less"
-     picture_style="true"
      tab_stop="false"
      top="0"
      width="132" />
@@ -70,7 +69,6 @@
      layout="topleft"
      left_pad="2"
      name="more"
-     picture_style="true"
      tab_stop="false"
      top_delta="0"
      width="132" />
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
index 4169c6245b1..bbfffe7baba 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
@@ -176,7 +176,6 @@
          layout="topleft"
          left="10"
          name="gear_btn"
-         picture_style="true"
          top="5"
          width="18" />
     </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
index 73a7d95ff47..289daee7c25 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
@@ -56,7 +56,6 @@
      left_pad="3"
      right="-31"
      name="info_btn"
-     picture_style="true"
      top_delta="-2"
      width="16" />
     <button
@@ -67,7 +66,6 @@
      left_pad="5"
      right="-3"
      name="profile_btn"
-     picture_style="true"
      top_delta="-2"
      width="20" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/widgets/combo_box.xml b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
index 9ed3749308b..fa3cb9275ec 100644
--- a/indra/newview/skins/default/xui/en/widgets/combo_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
@@ -4,7 +4,6 @@
            max_chars="20"
            follows="right|top">
   <combo_box.combo_button name="Combobox Button"
-                          label=""
                           hover_glow_amount="0.15"
                           font="SansSerifSmall"
                           scale_image="false"
@@ -12,7 +11,6 @@
                           image_selected="ComboButton_Selected"
                           image_disabled="ComboButton_Disabled" />
   <combo_box.drop_down_button name="Drop Down Button"
-                              label=""
                               hover_glow_amount="0.15"
                               font="SansSerifSmall"
                               scale_image="true"
diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml
index f2e48c517d8..d88bcfab1d7 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -20,7 +20,6 @@
                 allow_new_values="true"
                 >
   <info_button name="Place Information"
-                          label=""
                           width="16"
                           height="16"
                           follows="left|top"
@@ -30,7 +29,6 @@
                           image_disabled_selected="Info_Off"
                           image_disabled="Info_Off" />
   <add_landmark_button name="Add Landmark"
-                          label=""
                           hover_glow_amount="0.15"
                           image_hover_selected="Favorite_Star_Over"
                           image_hover_unselected="Favorite_Star_Over"
diff --git a/indra/newview/skins/default/xui/en/widgets/search_editor.xml b/indra/newview/skins/default/xui/en/widgets/search_editor.xml
index f482ff3b894..9a79243b033 100644
--- a/indra/newview/skins/default/xui/en/widgets/search_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/search_editor.xml
@@ -7,14 +7,14 @@
   background_image="TextField_Search_Off"
   background_image_disabled="TextField_Search_Disabled"
   background_image_focused="TextField_Search_Active" >
-  <search_button label=""
+  <search_button 
     top_pad="4"
     left_pad="4" 
     width="13"
     height="13" 
 	  image_unselected="Search"
 	  image_selected="Search" />
-  <clear_button label=""
+  <clear_button 
    image_unselected="Icon_Close_Foreground"
    image_selected="Icon_Close_Press" />
 </search_editor>
diff --git a/indra/newview/skins/default/xui/es/floater_script_debug.xml b/indra/newview/skins/default/xui/es/floater_script_debug.xml
index e33ffb7d96e..e9b66c74d20 100644
--- a/indra/newview/skins/default/xui/es/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/es/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <multi_floater name="script debug floater" title="Alerta/Error de los scripts">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[Todos los scripts]"/>
+		<floater label="Script" name="all_scripts" title="[All scripts]"/>
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/it/floater_script_debug.xml b/indra/newview/skins/default/xui/it/floater_script_debug.xml
index 39736dde673..66e0af264f0 100644
--- a/indra/newview/skins/default/xui/it/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/it/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <multi_floater name="script debug floater" title="Avvisi/Errori Script">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[Tutti gli script]"/>
+		<floater label="Script" name="all_scripts" title="[All scripts]"/>
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_script_debug.xml b/indra/newview/skins/default/xui/nl/floater_script_debug.xml
index 306ad5d1a3d..df9531473e4 100644
--- a/indra/newview/skins/default/xui/nl/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/nl/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <multi_floater name="script debug floater" title="Script waarschuwing/fout">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[Alle scripts]"/>
+		<floater label="Script" name="all_scripts" title="[All scripts]"/>
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_script_debug.xml b/indra/newview/skins/default/xui/pt/floater_script_debug.xml
index 48c73b93a3e..d7a9bc6f879 100644
--- a/indra/newview/skins/default/xui/pt/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/pt/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <multi_floater name="script debug floater" title="Aviso de script/erro">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[Todos os scripts]"/>
+		<floater label="Script" name="all_scripts" title="[All scripts]"/>
 	</tab_container>
 </multi_floater>
-- 
GitLab


From b270a792abbfdef95b930cfc61b1e8f0e2aa4c6c Mon Sep 17 00:00:00 2001
From: angela <angela@lindenlab.com>
Date: Tue, 3 Nov 2009 13:28:39 +0800
Subject: [PATCH 031/306] (i) in inspectors is squished, maybe rectangle too
 small

---
 indra/llui/lltooltip.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp
index 23c87c7522c..4bc9a9c0426 100644
--- a/indra/llui/lltooltip.cpp
+++ b/indra/llui/lltooltip.cpp
@@ -198,6 +198,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
 	{
 		LLButton::Params icon_params;
 		icon_params.name = "tooltip_info";
+		icon_params.label(""); // provid label but set to empty so name does not overwrite it -angela
 		LLRect icon_rect;
 		LLUIImage* imagep = p.image;
 		TOOLTIP_ICON_SIZE = (imagep ? imagep->getWidth() : 16);
@@ -206,6 +207,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
 		//icon_params.follows.flags = FOLLOWS_LEFT | FOLLOWS_BOTTOM;
 		icon_params.image_unselected(imagep);
 		icon_params.image_selected(imagep);
+
 		icon_params.scale_image(true);
 		icon_params.flash_color(icon_params.highlight_color());
 		mInfoButton  = LLUICtrlFactory::create<LLButton>(icon_params);
@@ -223,6 +225,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
 	{
 		LLButton::Params p_button;
 		p_button.name(std::string("play_media"));
+		p_button.label(""); // provid label but set to empty so name does not overwrite it -angela
 		TOOLTIP_PLAYBUTTON_SIZE = 16;
 		LLRect button_rect;
 		button_rect.setOriginAndSize((mPadding +TOOLTIP_ICON_SIZE+ mPadding ), mPadding, TOOLTIP_ICON_SIZE, TOOLTIP_ICON_SIZE);
@@ -247,6 +250,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
 	{
 		LLButton::Params p_w_button;
 		p_w_button.name(std::string("home_page"));
+		p_w_button.label(""); // provid label but set to empty so name does not overwrite it -angela
 		TOOLTIP_PLAYBUTTON_SIZE = 16;
 		LLRect button_rect;
 		button_rect.setOriginAndSize((mPadding +TOOLTIP_ICON_SIZE+ mPadding ), mPadding, TOOLTIP_ICON_SIZE, TOOLTIP_ICON_SIZE);
-- 
GitLab


From b4af6c3da8e5ef3e897cedfb2e1d677a3f37abe9 Mon Sep 17 00:00:00 2001
From: angela <angela@lindenlab.com>
Date: Tue, 3 Nov 2009 14:14:39 +0800
Subject: [PATCH 032/306] display the current URL in object inspector for media
 without going through media plugin

---
 indra/newview/llinspectobject.cpp | 33 +++++++++++++++-----------
 indra/newview/lltoolpie.cpp       | 39 +++++++++++++++----------------
 2 files changed, 39 insertions(+), 33 deletions(-)

diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp
index 050a61c79b2..e3780f93ff6 100644
--- a/indra/newview/llinspectobject.cpp
+++ b/indra/newview/llinspectobject.cpp
@@ -112,6 +112,7 @@ class LLInspectObject : public LLInspect
 	LLUUID				mObjectID;
 	S32					mObjectFace;
 	viewer_media_t		mMediaImpl;
+	LLMediaEntry*       mMediaEntry;
 	LLSafeHandle<LLObjectSelection> mObjectSelection;
 };
 
@@ -120,7 +121,8 @@ LLInspectObject::LLInspectObject(const LLSD& sd)
 	mObjectID(NULL),			// set in onOpen()
 	mObjectFace(0),
 	mObjectSelection(NULL),
-	mMediaImpl(NULL)
+	mMediaImpl(NULL),
+	mMediaEntry(NULL)
 {
 	// can't make the properties request until the widgets are constructed
 	// as it might return immediately, so do it in postBuild.
@@ -231,11 +233,11 @@ void LLInspectObject::onOpen(const LLSD& data)
 		if (!tep)
 			return;
 		
-		const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL;
-		if(!mep)
+		mMediaEntry = tep->hasMedia() ? tep->getMediaData() : NULL;
+		if(!mMediaEntry)
 			return;
 		
-		mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+		mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mMediaEntry->getMediaID());
 	}
 }
 
@@ -282,11 +284,11 @@ void LLInspectObject::update()
 	if (!tep)
 		return;
 	
-	const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL;
-	if(!mep)
+	mMediaEntry = tep->hasMedia() ? tep->getMediaData() : NULL;
+	if(!mMediaEntry)
 		return;
 	
-	mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+	mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mMediaEntry->getMediaID());
 	
 	updateMediaCurrentURL();
 	updateSecureBrowsing();
@@ -430,14 +432,17 @@ void LLInspectObject::updateDescription(LLSelectNode* nodep)
 
 void LLInspectObject::updateMediaCurrentURL()
 {	
+	if(!mMediaEntry)
+		return;
 	LLTextBox* textbox = getChild<LLTextBox>("object_media_url");
 	std::string media_url = "";
 	textbox->setValue(media_url);
 	textbox->setToolTip(media_url);
+	LLStringUtil::format_map_t args;
 	
 	if(mMediaImpl.notNull() && mMediaImpl->hasMedia())
 	{
-		LLStringUtil::format_map_t args;
+		
 		LLPluginClassMedia* media_plugin = NULL;
 		media_plugin = mMediaImpl->getMediaPlugin();
 		if(media_plugin)
@@ -451,15 +456,17 @@ void LLInspectObject::updateMediaCurrentURL()
 				args["[CurrentURL]"] =  media_plugin->getLocation();
 			}
 			media_url = LLTrans::getString("CurrentURL", args);
-			textbox->setText(media_url);
-			textbox->setToolTip(media_url);
+
 		}
 	}
-	else
+	else if(mMediaEntry->getCurrentURL() != "")
 	{
-		textbox->setText(media_url);
-		textbox->setToolTip(media_url);
+		args["[CurrentURL]"] = mMediaEntry->getCurrentURL();
+		media_url = LLTrans::getString("CurrentURL", args);
 	}
+
+	textbox->setText(media_url);
+	textbox->setToolTip(media_url);
 }
 
 void LLInspectObject::updateCreator(LLSelectNode* nodep)
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 0a9e72506b4..24017202cc6 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -761,14 +761,14 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
 								{
 									is_time_based_media = true;
 									is_web_based_media = false;
-									args["[CurrentURL]"] =  media_impl->getMediaURL();
+									//args["[CurrentURL]"] =  media_impl->getMediaURL();
 									is_media_playing = media_impl->isMediaPlaying();
 								}
 								else
 								{
 									is_time_based_media = false;
 									is_web_based_media = true;
-									args["[CurrentURL]"] =  media_plugin->getLocation();
+									//args["[CurrentURL]"] =  media_plugin->getLocation();
 								}
 								//tooltip_msg.append(LLTrans::getString("CurrentURL", args));
 							}
@@ -1039,31 +1039,28 @@ void LLToolPie::playCurrentMedia(const LLPickInfo& info)
 	if(!mep)
 		return;
 	
+	//TODO: Can you Use it? 
+
 	LLPluginClassMedia* media_plugin = NULL;
 	
-//	if (gSavedSettings.getBOOL("MediaOnAPrimUI"))
-//	{		
-		viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+	viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
 		
-		if(media_impl.notNull() && media_impl->hasMedia())
+	if(media_impl.notNull() && media_impl->hasMedia())
+	{
+		media_plugin = media_impl->getMediaPlugin();
+		if (media_plugin && media_plugin->pluginSupportsMediaTime())
 		{
-			media_plugin = media_impl->getMediaPlugin();
-			
-			if (media_plugin && media_plugin->pluginSupportsMediaTime())
+			if(media_impl->isMediaPlaying())
 			{
-				if(media_impl->isMediaPlaying())
-				{
-					media_impl->pause();
-				}
-				else //if(media_impl->isMediaPaused())
-				{
-					media_impl->play();
-				}
-				
+				media_impl->pause();
+			}
+			else 
+			{
+				media_impl->play();
 			}
-					
 		}
-//	 }
+	}
+
 
 }
 
@@ -1094,6 +1091,8 @@ void LLToolPie::VisitHomePage(const LLPickInfo& info)
 	if(!mep)
 		return;
 	
+	//TODO: Can you Use it? 
+	
 	LLPluginClassMedia* media_plugin = NULL;
 	
 	viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
-- 
GitLab


From d3bb2931abefc817af38e1db56fdc93197d01d12 Mon Sep 17 00:00:00 2001
From: CG Linden <cg@lindenlab.com>
Date: Mon, 2 Nov 2009 22:21:36 -0800
Subject: [PATCH 033/306] Add missing eol at eof

---
 indra/llui/lliconctrl.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/indra/llui/lliconctrl.cpp b/indra/llui/lliconctrl.cpp
index 82ffac9580f..b1bd2b89a95 100644
--- a/indra/llui/lliconctrl.cpp
+++ b/indra/llui/lliconctrl.cpp
@@ -123,4 +123,5 @@ void LLIconCtrl::setIconImageDrawSize()
 			mImagep->getImage()->setKnownDrawSize(mDrawWidth, mDrawHeight) ;
 		}
 	}
-}
\ No newline at end of file
+}
+
-- 
GitLab


From 6508b4f13fd056e6a4ddf1b9845829452a7c3599 Mon Sep 17 00:00:00 2001
From: Dmitry Zaporozhan <dzaporozhan@productengine.com>
Date: Tue, 3 Nov 2009 11:39:43 +0200
Subject: [PATCH 034/306] Fixed potencial bug in People Panel.

--HG--
branch : product-engine
---
 indra/newview/llpanelpeople.cpp | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 4580eeb336a..0d16b0a041b 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -797,14 +797,15 @@ void LLPanelPeople::reSelectedCurrentTab()
 
 void LLPanelPeople::onFilterEdit(const std::string& search_string)
 {
-	if (mFilterSubString == search_string)
-		return;
+	std::string search_upper = search_string;
+	// Searches are case-insensitive
+	LLStringUtil::toUpper(search_upper);
+	LLStringUtil::trimHead(search_upper);
 
-	mFilterSubString = search_string;
+	if (mFilterSubString == search_upper)
+		return;
 
-	// Searches are case-insensitive
-	LLStringUtil::toUpper(mFilterSubString);
-	LLStringUtil::trimHead(mFilterSubString);
+	mFilterSubString = search_upper;
 
 	// Apply new filter.
 	mNearbyList->setNameFilter(mFilterSubString);
-- 
GitLab


From 077025fa1ed40c4b7876e753a71c0cfab25308d0 Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Tue, 3 Nov 2009 10:28:57 +0000
Subject: [PATCH 035/306] DEV-39999: Removed all legacy help buttons and
 notifications from the code. All help should now go through the new help
 server, via the Help Browser floater. There should no longer be any custom
 "?" buttons in the UI - all <button> and <notification> XUI references
 relating to custom help buttons have been expunged.

(I previously extracted all of the help strings from notifications.xml
and passed these to the doc team to include in the help server pages.)

I have checked that none of the XUI elements that are removed here are
still referenced by any C++ code. I've also confirmed that there are
no new notifications removed that I have not already passed on to the
doc team. And I've also done a pass through the UI to make sure that
all of the floaters still look as they should. Finally, I've confirmed
that the new help system for floaters and side panels still works.

2,276 lines deleted - 0 lines added.
---
 indra/newview/llfloaterbulkpermission.cpp     |    8 -
 indra/newview/llfloaterbulkpermission.h       |    1 -
 indra/newview/llfloaterdaycycle.cpp           |   12 -
 indra/newview/llfloaterdaycycle.h             |    3 -
 indra/newview/llfloaterenvsettings.cpp        |    6 -
 indra/newview/llfloaterenvsettings.h          |    3 -
 indra/newview/llfloaterhardwaresettings.cpp   |    6 -
 indra/newview/llfloaterhardwaresettings.h     |    3 -
 indra/newview/llfloaterland.cpp               |   33 -
 indra/newview/llfloaterland.h                 |    2 -
 indra/newview/llfloaterpreference.cpp         |    7 -
 indra/newview/llfloaterpreference.h           |    1 -
 indra/newview/llfloaterregioninfo.cpp         |   52 -
 indra/newview/llfloaterregioninfo.h           |    4 -
 indra/newview/llfloaterwater.cpp              |   27 -
 indra/newview/llfloaterwater.h                |    4 -
 indra/newview/llfloaterwindlight.cpp          |   40 -
 indra/newview/llfloaterwindlight.h            |    4 -
 indra/newview/llnavigationbar.h               |    1 -
 indra/newview/llpanelgroup.cpp                |   17 -
 indra/newview/llpanelgroup.h                  |    9 -
 indra/newview/llpanelgrouproles.cpp           |   14 -
 indra/newview/llpanelgrouproles.h             |    1 -
 indra/newview/llpanelland.cpp                 |    6 -
 indra/newview/llpanelland.h                   |    1 -
 .../default/xui/en/floater_about_land.xml     |   20 -
 .../xui/en/floater_day_cycle_options.xml      |   10 -
 .../skins/default/xui/en/floater_lagmeter.xml |    9 -
 .../default/xui/en/floater_perm_prefs.xml     |   14 -
 .../skins/default/xui/en/floater_tools.xml    |    9 -
 .../skins/default/xui/en/floater_water.xml    |  120 --
 .../xui/en/floater_windlight_options.xml      |  220 ---
 .../skins/default/xui/en/notifications.xml    | 1174 +++--------------
 .../default/xui/en/panel_group_land_money.xml |   11 -
 .../default/xui/en/panel_group_notices.xml    |   12 +-
 .../default/xui/en/panel_group_roles.xml      |   11 -
 .../default/xui/en/panel_region_covenant.xml  |   11 -
 .../default/xui/en/panel_region_debug.xml     |   60 -
 .../default/xui/en/panel_region_estate.xml    |  100 --
 .../default/xui/en/panel_region_general.xml   |  100 --
 .../xui/en/panel_region_general_layout.xml    |  100 --
 .../default/xui/en/panel_region_terrain.xml   |   80 --
 42 files changed, 166 insertions(+), 2160 deletions(-)

diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp
index a73ebf4e06f..7cb8987879a 100644
--- a/indra/newview/llfloaterbulkpermission.cpp
+++ b/indra/newview/llfloaterbulkpermission.cpp
@@ -72,8 +72,6 @@ LLFloaterBulkPermission::LLFloaterBulkPermission(const LLSD& seed)
 
 BOOL LLFloaterBulkPermission::postBuild()
 {
-//	childSetAction("help", onHelpBtn, this);  // this is not in use
-
 	return TRUE;
 }
 
@@ -157,12 +155,6 @@ void LLFloaterBulkPermission::onApplyBtn()
 	doApply();
 }
 
-// angela -- this is not in use
-//void LLFloaterBulkPermission::onHelpBtn(void* user_data)
-//{
-//	LLNotifications::instance().add("HelpBulkPermission");
-//}
-
 void LLFloaterBulkPermission::onCloseBtn()
 {
 	closeFloater();
diff --git a/indra/newview/llfloaterbulkpermission.h b/indra/newview/llfloaterbulkpermission.h
index c34e4413ccc..31f4f5c3e16 100644
--- a/indra/newview/llfloaterbulkpermission.h
+++ b/indra/newview/llfloaterbulkpermission.h
@@ -79,7 +79,6 @@ class LLFloaterBulkPermission : public LLFloater, public LLVOInventoryListener
 								U8 key,
 								bool is_new);
 
-//	static void onHelpBtn(void* user_data);
 	void onCloseBtn();
 	void onApplyBtn();
 	void onCommitCopy();
diff --git a/indra/newview/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp
index 7f3b988dfe2..48d552022f9 100644
--- a/indra/newview/llfloaterdaycycle.cpp
+++ b/indra/newview/llfloaterdaycycle.cpp
@@ -105,20 +105,8 @@ LLFloaterDayCycle::~LLFloaterDayCycle()
 {
 }
 
-void LLFloaterDayCycle::onClickHelp(std::string xml_alert)
-{
-	LLNotifications::instance().add(contextualNotification(xml_alert));
-}
-
-void LLFloaterDayCycle::initHelpBtn(const std::string& name, const std::string& xml_alert)
-{
-	getChild<LLButton>(name)->setClickedCallback(boost::bind(&LLFloaterDayCycle::onClickHelp, this, xml_alert));
-}
-
 void LLFloaterDayCycle::initCallbacks(void) 
 {
-	initHelpBtn("WLDayCycleHelp", "HelpDayCycle");
-
 	// WL Day Cycle
 	getChild<LLUICtrl>("WLTimeSlider")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onTimeSliderMoved, this, _1));
 	getChild<LLUICtrl>("WLDayCycleKeys")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onKeyTimeMoved, this, _1));
diff --git a/indra/newview/llfloaterdaycycle.h b/indra/newview/llfloaterdaycycle.h
index 43c347d4f21..c250902b656 100644
--- a/indra/newview/llfloaterdaycycle.h
+++ b/indra/newview/llfloaterdaycycle.h
@@ -59,9 +59,6 @@ class LLFloaterDayCycle : public LLFloater
 	LLFloaterDayCycle(const LLSD& key);
 	virtual ~LLFloaterDayCycle();
 	/*virtual*/	BOOL	postBuild();
-	/// help button stuff
-	void onClickHelp(std::string xml_alert);
-	void initHelpBtn(const std::string& name, const std::string& xml_alert);
 
 	/// initialize all
 	void initCallbacks(void);
diff --git a/indra/newview/llfloaterenvsettings.cpp b/indra/newview/llfloaterenvsettings.cpp
index a520df36dec..2fffa6eece2 100644
--- a/indra/newview/llfloaterenvsettings.cpp
+++ b/indra/newview/llfloaterenvsettings.cpp
@@ -70,10 +70,6 @@ BOOL LLFloaterEnvSettings::postBuild()
 	syncMenu();
 	return TRUE;
 }
-void LLFloaterEnvSettings::onClickHelp()
-{
-	LLNotifications::instance().add(contextualNotification("EnvSettingsHelpButton"));
-}
 
 void LLFloaterEnvSettings::initCallbacks(void) 
 {
@@ -89,10 +85,8 @@ void LLFloaterEnvSettings::initCallbacks(void)
 	getChild<LLUICtrl>("EnvAdvancedSkyButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onOpenAdvancedSky, this));
  	getChild<LLUICtrl>("EnvAdvancedWaterButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onOpenAdvancedWater, this));
 	getChild<LLUICtrl>("EnvUseEstateTimeButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onUseEstateTime, this));
-	getChild<LLUICtrl>("EnvSettingsHelpButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onClickHelp, this));
 }
 
-
 // menu maintenance functions
 
 void LLFloaterEnvSettings::syncMenu()
diff --git a/indra/newview/llfloaterenvsettings.h b/indra/newview/llfloaterenvsettings.h
index 083e3636d1b..02bc5021207 100644
--- a/indra/newview/llfloaterenvsettings.h
+++ b/indra/newview/llfloaterenvsettings.h
@@ -53,9 +53,6 @@ class LLFloaterEnvSettings : public LLFloater
 	/// initialize all the callbacks for the menu
 	void initCallbacks(void);
 
-	/// callback for the menus help button
-	void onClickHelp();
-	
 	/// handle if time of day is changed
 	void onChangeDayTime(LLUICtrl* ctrl);
 
diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
index 9947cdc2173..31b494b590d 100644
--- a/indra/newview/llfloaterhardwaresettings.cpp
+++ b/indra/newview/llfloaterhardwaresettings.cpp
@@ -59,12 +59,6 @@ LLFloaterHardwareSettings::~LLFloaterHardwareSettings()
 {
 }
 
-void LLFloaterHardwareSettings::onClickHelp(void* data)
-{
-	const char* xml_alert = "HardwareSettingsHelpButton";
-	LLNotifications::instance().add(xml_alert);
-}
-
 void LLFloaterHardwareSettings::initCallbacks(void) 
 {
 }
diff --git a/indra/newview/llfloaterhardwaresettings.h b/indra/newview/llfloaterhardwaresettings.h
index 3f19d89cbbb..ef0b0c905e0 100644
--- a/indra/newview/llfloaterhardwaresettings.h
+++ b/indra/newview/llfloaterhardwaresettings.h
@@ -50,9 +50,6 @@ class LLFloaterHardwareSettings : public LLFloater
 	/// initialize all the callbacks for the menu
 	void initCallbacks(void);
 
-	/// callback for the menus help button
-	static void onClickHelp(void* data);
-
 	/// OK button
 	static void onBtnOK( void* userdata );
 	
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index bdf9842b015..0711e650b2d 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -1743,7 +1743,6 @@ LLPanelLandOptions::LLPanelLandOptions(LLParcelSelectionHandle& parcel)
 	mClearBtn(NULL),
 	mMatureCtrl(NULL),
 	mPushRestrictionCtrl(NULL),
-	mPublishHelpButton(NULL),
 	mParcel(parcel)
 {
 }
@@ -1812,14 +1811,9 @@ BOOL LLPanelLandOptions::postBuild()
 	mMatureCtrl = getChild<LLCheckBoxCtrl>( "MatureCheck");
 	childSetCommitCallback("MatureCheck", onCommitAny, this);
 	
-	mPublishHelpButton = getChild<LLButton>("?");
-	mPublishHelpButton->setClickedCallback(onClickPublishHelp, this);
-
 	if (gAgent.wantsPGOnly())
 	{
 		// Disable these buttons if they are PG (Teen) users
-		mPublishHelpButton->setVisible(FALSE);
-		mPublishHelpButton->setEnabled(FALSE);
 		mMatureCtrl->setVisible(FALSE);
 		mMatureCtrl->setEnabled(FALSE);
 	}
@@ -1912,7 +1906,6 @@ void LLPanelLandOptions::refresh()
 		mClearBtn->setEnabled(FALSE);
 
 		mMatureCtrl->setEnabled(FALSE);
-		mPublishHelpButton->setEnabled(FALSE);
 	}
 	else
 	{
@@ -1988,13 +1981,9 @@ void LLPanelLandOptions::refresh()
 		mSetBtn->setEnabled( can_change_landing_point );
 		mClearBtn->setEnabled( can_change_landing_point );
 
-		mPublishHelpButton->setEnabled( can_change_identity );
-
 		if (gAgent.wantsPGOnly())
 		{
 			// Disable these buttons if they are PG (Teen) users
-			mPublishHelpButton->setVisible(FALSE);
-			mPublishHelpButton->setEnabled(FALSE);
 			mMatureCtrl->setVisible(FALSE);
 			mMatureCtrl->setEnabled(FALSE);
 		}
@@ -2247,28 +2236,6 @@ void LLPanelLandOptions::onClickClear(void* userdata)
 	self->refresh();
 }
 
-// static
-void LLPanelLandOptions::onClickPublishHelp(void*)
-{
-	LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
-	LLParcel *parcel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection()->getParcel();
-	llassert(region); // Region should never be null.
-
-	bool can_change_identity = region && parcel ? 
-		LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY) &&
-		! (region->getRegionFlags() & REGION_FLAGS_BLOCK_PARCEL_SEARCH) : false;
-
-	if(! can_change_identity)
-	{
-		LLNotifications::instance().add("ClickPublishHelpLandDisabled");
-	}
-	else
-	{
-		LLNotifications::instance().add("ClickPublishHelpLand");
-	}
-}
-
-
 
 //---------------------------------------------------------------------------
 // LLPanelLandAccess
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index 749c3951477..f7fb978c2a1 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -320,7 +320,6 @@ class LLPanelLandOptions
 	static void onCommitAny(LLUICtrl* ctrl, void *userdata);
 	static void onClickSet(void* userdata);
 	static void onClickClear(void* userdata);
-	static void onClickPublishHelp(void*);
 
 private:
 	LLCheckBoxCtrl*	mCheckEditObjects;
@@ -345,7 +344,6 @@ class LLPanelLandOptions
 
 	LLCheckBoxCtrl		*mMatureCtrl;
 	LLCheckBoxCtrl		*mPushRestrictionCtrl;
-	LLButton			*mPublishHelpButton;
 
 	LLSafeHandle<LLParcelSelection>&	mParcel;
 };
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 8b3391726a7..f65897fc33b 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -339,7 +339,6 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 	mCommitCallbackRegistrar.add("Pref.ClickDisablePopup",		boost::bind(&LLFloaterPreference::onClickDisablePopup, this));	
 	mCommitCallbackRegistrar.add("Pref.LogPath",				boost::bind(&LLFloaterPreference::onClickLogPath, this));
 	mCommitCallbackRegistrar.add("Pref.Logging",				boost::bind(&LLFloaterPreference::onCommitLogging, this));
-	mCommitCallbackRegistrar.add("Pref.OpenHelp",				boost::bind(&LLFloaterPreference::onOpenHelp, this));	
 	mCommitCallbackRegistrar.add("Pref.UpdateMeterText",		boost::bind(&LLFloaterPreference::updateMeterText, this, _1));	
 	mCommitCallbackRegistrar.add("Pref.HardwareSettings",       boost::bind(&LLFloaterPreference::onOpenHardwareSettings, this));	
 	mCommitCallbackRegistrar.add("Pref.HardwareDefaults",       boost::bind(&LLFloaterPreference::setHardwareDefaults, this));	
@@ -608,12 +607,6 @@ void LLFloaterPreference::onBtnOK()
 	LLPanelLogin::refreshLocation( false );
 }
 
-void LLFloaterPreference::onOpenHelp()
-{
-	const char* xml_alert = "GraphicsPreferencesHelp";
-	LLNotifications::instance().add(this->contextualNotification(xml_alert));
-}
-
 // static 
 void LLFloaterPreference::onBtnApply( )
 {
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 34723b8c7e3..b1ad0348c0d 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -84,7 +84,6 @@ class LLFloaterPreference : public LLFloater
 	void		onBtnOK();
 	void		onBtnCancel();
 	void		onBtnApply();
-	void		onOpenHelp();
 
 //	void		onClickClearCache();
 	void		onClickBrowserClearCache();
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 11544f5b7b5..56646196fb2 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -544,16 +544,6 @@ void LLPanelRegionInfo::initCtrl(const std::string& name)
 	getChild<LLUICtrl>(name)->setCommitCallback(boost::bind(&LLPanelRegionInfo::onChangeAnything, this));
 }
 
-void LLPanelRegionInfo::initHelpBtn(const std::string& name, const std::string& xml_alert)
-{
-	getChild<LLUICtrl>(name)->setCommitCallback(boost::bind(&LLPanelRegionInfo::onClickHelp, this, xml_alert));
-}
-
-void LLPanelRegionInfo::onClickHelp(std::string xml_alert)
-{
-	LLNotifications::instance().add(xml_alert);
-}
-
 /////////////////////////////////////////////////////////////////////////////
 // LLPanelRegionGeneralInfo
 //
@@ -589,17 +579,6 @@ BOOL LLPanelRegionGeneralInfo::postBuild()
 	initCtrl("restrict_pushobject");
 	initCtrl("block_parcel_search_check");
 
-	initHelpBtn("terraform_help",		"HelpRegionBlockTerraform");
-	initHelpBtn("fly_help",				"HelpRegionBlockFly");
-	initHelpBtn("damage_help",			"HelpRegionAllowDamage");
-	initHelpBtn("agent_limit_help",		"HelpRegionAgentLimit");
-	initHelpBtn("object_bonus_help",	"HelpRegionObjectBonus");
-	initHelpBtn("access_help",			"HelpRegionMaturity");
-	initHelpBtn("restrict_pushobject_help",		"HelpRegionRestrictPushObject");
-	initHelpBtn("land_resell_help",	"HelpRegionLandResell");
-	initHelpBtn("parcel_changes_help", "HelpParcelChanges");
-	initHelpBtn("parcel_search_help", "HelpRegionSearch");
-
 	childSetAction("kick_btn", onClickKick, this);
 	childSetAction("kick_all_btn", onClickKickAll, this);
 	childSetAction("im_btn", onClickMessage, this);
@@ -809,13 +788,6 @@ BOOL LLPanelRegionDebugInfo::postBuild()
 	initCtrl("disable_collisions_check");
 	initCtrl("disable_physics_check");
 
-	initHelpBtn("disable_scripts_help",		"HelpRegionDisableScripts");
-	initHelpBtn("disable_collisions_help",	"HelpRegionDisableCollisions");
-	initHelpBtn("disable_physics_help",		"HelpRegionDisablePhysics");
-	initHelpBtn("top_colliders_help",		"HelpRegionTopColliders");
-	initHelpBtn("top_scripts_help",			"HelpRegionTopScripts");
-	initHelpBtn("restart_help",				"HelpRegionRestart");
-
 	childSetAction("choose_avatar_btn", onClickChooseAvatar, this);
 	childSetAction("return_btn", onClickReturn, this);
 	childSetAction("top_colliders_btn", onClickTopColliders, this);
@@ -1182,15 +1154,6 @@ BOOL LLPanelRegionTerrainInfo::postBuild()
 {
 	LLPanelRegionInfo::postBuild();
 
-	initHelpBtn("water_height_help",	"HelpRegionWaterHeight");
-	initHelpBtn("terrain_raise_help",	"HelpRegionTerrainRaise");
-	initHelpBtn("terrain_lower_help",	"HelpRegionTerrainLower");
-	initHelpBtn("upload_raw_help",		"HelpRegionUploadRaw");
-	initHelpBtn("download_raw_help",	"HelpRegionDownloadRaw");
-	initHelpBtn("use_estate_sun_help",	"HelpRegionUseEstateSun");
-	initHelpBtn("fixed_sun_help",		"HelpRegionFixedSun");
-	initHelpBtn("bake_terrain_help",	"HelpRegionBakeTerrain");
-
 	initCtrl("water_height_spin");
 	initCtrl("terrain_raise_spin");
 	initCtrl("terrain_lower_spin");
@@ -2103,20 +2066,6 @@ BOOL LLPanelEstateInfo::postBuild()
 	getChild<LLUICtrl>("abuse_email_address")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeAnything, this));
 	getChild<LLLineEditor>("abuse_email_address")->setKeystrokeCallback(onChangeText, this);
 
-	initHelpBtn("estate_manager_help",			"HelpEstateEstateManager");
-	initHelpBtn("use_global_time_help",			"HelpEstateUseGlobalTime");
-	initHelpBtn("fixed_sun_help",				"HelpEstateFixedSun");
-	initHelpBtn("WLEditSkyHelp",				"HelpEditSky");
-	initHelpBtn("WLEditDayCycleHelp",			"HelpEditDayCycle");
-
-	initHelpBtn("externally_visible_help",		"HelpEstateExternallyVisible");
-	initHelpBtn("allow_direct_teleport_help",	"HelpEstateAllowDirectTeleport");
-	initHelpBtn("allow_resident_help",			"HelpEstateAllowResident");
-	initHelpBtn("allow_group_help",				"HelpEstateAllowGroup");
-	initHelpBtn("ban_resident_help",			"HelpEstateBanResident");
-	initHelpBtn("abuse_email_address_help",     "HelpEstateAbuseEmailAddress");
-	initHelpBtn("voice_chat_help",              "HelpEstateVoiceChat");
-
 	// set up the use global time checkbox
 	getChild<LLUICtrl>("use_global_time_check")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeUseGlobalTime, this));
 	getChild<LLUICtrl>("fixed_sun_check")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeFixedSun, this));
@@ -2694,7 +2643,6 @@ bool LLPanelEstateCovenant::estateUpdate(LLMessageSystem* msg)
 // virtual 
 BOOL LLPanelEstateCovenant::postBuild()
 {
-	initHelpBtn("covenant_help",		"HelpEstateCovenant");
 	mEstateNameText = getChild<LLTextBox>("estate_name_text");
 	mEstateOwnerText = getChild<LLTextBox>("estate_owner_text");
 	mLastModifiedText = getChild<LLTextBox>("covenant_timestamp_text");
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 95833af8a10..4958243d5bd 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -125,10 +125,6 @@ class LLPanelRegionInfo : public LLPanel
 	
 protected:
 	void initCtrl(const std::string& name);
-	void initHelpBtn(const std::string& name, const std::string& xml_alert);
-
-	// Callback for all help buttons, data is name of XML alert to show.
-	void onClickHelp(std::string xml_alert);
 	
 	// Returns TRUE if update sent and apply button should be
 	// disabled.
diff --git a/indra/newview/llfloaterwater.cpp b/indra/newview/llfloaterwater.cpp
index 72c82c178b6..a0fe42bf617 100644
--- a/indra/newview/llfloaterwater.cpp
+++ b/indra/newview/llfloaterwater.cpp
@@ -110,23 +110,6 @@ BOOL LLFloaterWater::postBuild()
 }
 void LLFloaterWater::initCallbacks(void) {
 
-	// help buttons
-	initHelpBtn("WaterFogColorHelp", "HelpWaterFogColor");
-	initHelpBtn("WaterFogDensityHelp", "HelpWaterFogDensity");
-	initHelpBtn("WaterUnderWaterFogModHelp", "HelpUnderWaterFogMod");
-	initHelpBtn("WaterGlowHelp", "HelpWaterGlow");	
-	initHelpBtn("WaterNormalScaleHelp", "HelpWaterNormalScale");
-	initHelpBtn("WaterFresnelScaleHelp", "HelpWaterFresnelScale");
-	initHelpBtn("WaterFresnelOffsetHelp", "HelpWaterFresnelOffset");
-
-	initHelpBtn("WaterBlurMultiplierHelp", "HelpWaterBlurMultiplier");
-	initHelpBtn("WaterScaleBelowHelp", "HelpWaterScaleBelow");
-	initHelpBtn("WaterScaleAboveHelp", "HelpWaterScaleAbove");
-
-	initHelpBtn("WaterNormalMapHelp", "HelpWaterNormalMap");
-	initHelpBtn("WaterWave1Help", "HelpWaterWave1");
-	initHelpBtn("WaterWave2Help", "HelpWaterWave2");
-
 	LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
 
 	getChild<LLUICtrl>("WaterFogColor")->setCommitCallback(boost::bind(&LLFloaterWater::onWaterFogColorMoved, this, _1, &param_mgr->mFogColor));
@@ -173,16 +156,6 @@ void LLFloaterWater::initCallbacks(void) {
 	getChild<LLUICtrl>("WaterNormalMap")->setCommitCallback(boost::bind(&LLFloaterWater::onNormalMapPicked, this, _1));
 }
 
-void LLFloaterWater::onClickHelp(std::string xml_alert)
-{
-	LLNotifications::instance().add(contextualNotification(xml_alert));
-}
-
-void LLFloaterWater::initHelpBtn(const std::string& name, const std::string& xml_alert)
-{
-	getChild<LLButton>(name)->setClickedCallback(boost::bind(&LLFloaterWater::onClickHelp, this, xml_alert));
-}
-
 bool LLFloaterWater::newPromptCallback(const LLSD& notification, const LLSD& response)
 {
 	std::string text = response["message"].asString();
diff --git a/indra/newview/llfloaterwater.h b/indra/newview/llfloaterwater.h
index 08c630c69e3..0ea2436dbea 100644
--- a/indra/newview/llfloaterwater.h
+++ b/indra/newview/llfloaterwater.h
@@ -59,10 +59,6 @@ class LLFloaterWater : public LLFloater
 	/// initialize all
 	void initCallbacks(void);
 
-	// help button stuff
-	void onClickHelp(std::string xml_alert);
-	void initHelpBtn(const std::string& name, const std::string& xml_alert);
-
 	bool newPromptCallback(const LLSD& notification, const LLSD& response);
 
 	/// general purpose callbacks for dealing with color controllers
diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp
index 02979acdd72..60494f3cce4 100644
--- a/indra/newview/llfloaterwindlight.cpp
+++ b/indra/newview/llfloaterwindlight.cpp
@@ -119,36 +119,6 @@ BOOL LLFloaterWindLight::postBuild()
 }
 void LLFloaterWindLight::initCallbacks(void) {
 
-	// help buttons
-	initHelpBtn("WLBlueHorizonHelp", "HelpBlueHorizon");
-	initHelpBtn("WLHazeHorizonHelp", "HelpHazeHorizon");
-	initHelpBtn("WLBlueDensityHelp", "HelpBlueDensity");
-	initHelpBtn("WLHazeDensityHelp", "HelpHazeDensity");
-
-	initHelpBtn("WLDensityMultHelp", "HelpDensityMult");
-	initHelpBtn("WLDistanceMultHelp", "HelpDistanceMult");
-	initHelpBtn("WLMaxAltitudeHelp", "HelpMaxAltitude");
-
-	initHelpBtn("WLSunlightColorHelp", "HelpSunlightColor");
-	initHelpBtn("WLAmbientHelp", "HelpSunAmbient");
-	initHelpBtn("WLSunGlowHelp", "HelpSunGlow");
-	initHelpBtn("WLTimeOfDayHelp", "HelpTimeOfDay");
-	initHelpBtn("WLEastAngleHelp", "HelpEastAngle");
-
-	initHelpBtn("WLSceneGammaHelp", "HelpSceneGamma");
-	initHelpBtn("WLStarBrightnessHelp", "HelpStarBrightness");
-
-	initHelpBtn("WLCloudColorHelp", "HelpCloudColor");
-	initHelpBtn("WLCloudDetailHelp", "HelpCloudDetail");
-	initHelpBtn("WLCloudDensityHelp", "HelpCloudDensity");
-	initHelpBtn("WLCloudCoverageHelp", "HelpCloudCoverage");
-
-	initHelpBtn("WLCloudScaleHelp", "HelpCloudScale");
-	initHelpBtn("WLCloudScrollXHelp", "HelpCloudScrollX");
-	initHelpBtn("WLCloudScrollYHelp", "HelpCloudScrollY");
-
-	initHelpBtn("WLClassicCloudsHelp", "HelpClassicClouds");
-
 	LLWLParamManager * param_mgr = LLWLParamManager::instance();
 
 	// blue horizon
@@ -237,16 +207,6 @@ void LLFloaterWindLight::initCallbacks(void) {
 	getChild<LLUICtrl>("WLStarAlpha")->setCommitCallback(boost::bind(&LLFloaterWindLight::onStarAlphaMoved, this, _1));
 }
 
-void LLFloaterWindLight::onClickHelp(std::string xml_alert)
-{
-	LLNotifications::instance().add(contextualNotification(xml_alert));
-}
-
-void LLFloaterWindLight::initHelpBtn(const std::string& name, const std::string& xml_alert)
-{
-	getChild<LLButton>(name)->setClickedCallback(boost::bind(&LLFloaterWindLight::onClickHelp, this, xml_alert));
-}
-
 bool LLFloaterWindLight::newPromptCallback(const LLSD& notification, const LLSD& response)
 {
 	std::string text = response["message"].asString();
diff --git a/indra/newview/llfloaterwindlight.h b/indra/newview/llfloaterwindlight.h
index 56c2c6623b1..ed9322c4509 100644
--- a/indra/newview/llfloaterwindlight.h
+++ b/indra/newview/llfloaterwindlight.h
@@ -57,10 +57,6 @@ class LLFloaterWindLight : public LLFloater
 	/// initialize all
 	void initCallbacks(void);
 
-	// help button stuff
-	void onClickHelp(std::string alert);
-	void initHelpBtn(const std::string& name, const std::string& xml_alert);
-
 	bool newPromptCallback(const LLSD& notification, const LLSD& response);
 
 	/// general purpose callbacks for dealing with color controllers
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index 8b625e7fa62..04707d8d48a 100644
--- a/indra/newview/llnavigationbar.h
+++ b/indra/newview/llnavigationbar.h
@@ -77,7 +77,6 @@ class LLNavigationBar
 	void onBackOrForwardButtonHeldDown(const LLSD& param);
 	void onForwardButtonClicked();
 	void onHomeButtonClicked();
-	void onHelpButtonClicked();
 	void onLocationSelection();
 	void onLocationPrearrange(const LLSD& data);
 	void onSearchCommit();
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index 4708d7ba364..10f015774af 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -86,23 +86,6 @@ BOOL LLPanelGroupTab::postBuild()
 	return TRUE;
 }
 
-
-
-void LLPanelGroupTab::handleClickHelp()
-{
-	// Display the help text.
-	std::string help_text( getHelpText() );
-	if ( !help_text.empty() )
-	{
-		LLSD args;
-		args["MESSAGE"] = help_text;
-		LLFloater* parent_floater = gFloaterView->getParentFloater(this);
-		LLNotification::Params params(parent_floater->contextualNotification("GenericAlert"));
-		params.substitutions(args);
-		LLNotifications::instance().add(params);
-	}
-}
-
 LLPanelGroup::LLPanelGroup()
 :	LLPanel(),
 	LLGroupMgrObserver( LLUUID() ),
diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h
index 5c7b0ddd060..306e6575fc7 100644
--- a/indra/newview/llpanelgroup.h
+++ b/indra/newview/llpanelgroup.h
@@ -148,12 +148,6 @@ class LLPanelGroupTab : public LLPanel
 	// Triggered when group information changes in the group manager.
 	virtual void update(LLGroupChange gc) { }
 
-	// This is the text to be displayed when a help button is pressed.
-	virtual std::string getHelpText() const { return mHelpText; }
-
-	// Display anything returned by getHelpText
-	void handleClickHelp();
-
 	// This just connects the help button callback.
 	virtual BOOL postBuild();
 
@@ -171,11 +165,8 @@ class LLPanelGroupTab : public LLPanel
 
 protected:
 	LLUUID	mGroupID;
-	std::string	mHelpText;
-
 	BOOL mAllowEdit;
 	BOOL mHasModal;
-
 };
 
 #endif // LL_LLPANELGROUP_H
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index 71486c908cc..88aad4923d6 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -361,20 +361,6 @@ void LLPanelGroupRoles::cancel()
 	panelp->cancel();
 }
 
-// Pass all of these messages to the currently visible sub tab.
-std::string LLPanelGroupRoles::getHelpText() const
-{
-	LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
-	if (panelp)
-	{
-		return panelp->getHelpText();
-	}
-	else
-	{
-		return mHelpText;
-	}
-}
-
 void LLPanelGroupRoles::update(LLGroupChange gc)
 {
 	if (mGroupID.isNull()) return;
diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h
index bd5fc1d2350..b6e2245e70d 100644
--- a/indra/newview/llpanelgrouproles.h
+++ b/indra/newview/llpanelgrouproles.h
@@ -78,7 +78,6 @@ class LLPanelGroupRoles : public LLPanelGroupTab
 	bool onModalClose(const LLSD& notification, const LLSD& response);
 
 	// Most of these messages are just passed on to the current sub-tab.
-	virtual std::string getHelpText() const;
 	virtual void activate();
 	virtual void deactivate();
 	virtual bool needsApply(std::string& mesg);
diff --git a/indra/newview/llpanelland.cpp b/indra/newview/llpanelland.cpp
index bce5525a406..417a8048347 100644
--- a/indra/newview/llpanelland.cpp
+++ b/indra/newview/llpanelland.cpp
@@ -70,7 +70,6 @@ BOOL	LLPanelLandInfo::postBuild()
 	childSetAction("button subdivide land",onClickDivide,this);
 	childSetAction("button join land",onClickJoin,this);
 	childSetAction("button about land",onClickAbout,this);
-	childSetAction("button show owners help", onShowOwnersHelp, this);
 
 	mCheckShowOwners = getChild<LLCheckBoxCtrl>("checkbox show owners");
 	childSetValue("checkbox show owners", gSavedSettings.getBOOL("ShowParcelOwners"));
@@ -265,8 +264,3 @@ void LLPanelLandInfo::onClickAbout(void*)
 
 	LLFloaterReg::showInstance("about_land");
 }
-
-void LLPanelLandInfo::onShowOwnersHelp(void* user_data)
-{
-	LLNotifications::instance().add("ShowOwnersHelp");
-}
diff --git a/indra/newview/llpanelland.h b/indra/newview/llpanelland.h
index 92fe3134052..02e7e7bf385 100644
--- a/indra/newview/llpanelland.h
+++ b/indra/newview/llpanelland.h
@@ -60,7 +60,6 @@ class LLPanelLandInfo
 	static void onClickDivide(void*);
 	static void onClickJoin(void*);
 	static void onClickAbout(void*);
-	static void onShowOwnersHelp(void*);
 
 protected:
 	//LLTextBox*		mTextPriceLabel;
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index e13aa610e53..033e18a1395 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -1492,16 +1492,6 @@ Only large parcels can be listed in search.
                  name="item12"
                  value="other" />
             </combo_box>
-            <button
-             follows="left|top"
-             height="18"
-             label="?"
-             label_selected="?"
-             layout="topleft"
-             left_pad="15"
-             name="?"
-             top_delta="0"
-             width="18" />
             <check_box
              height="16"
              label="Mature Content"
@@ -1916,16 +1906,6 @@ Only large parcels can be listed in search.
              name="check sound local"
              top_delta="0"
              width="292" />
-            <button
-             follows="left|top"
-             height="18"
-             label="?"
-             label_selected="?"
-             layout="topleft"
-             left_delta="292"
-             name="?"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
diff --git a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
index b8fa104352a..b0d636445d5 100644
--- a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
@@ -28,16 +28,6 @@
          name="Day Cycle"
          top="0"
          width="642">
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="15"
-             label="?"
-             layout="topleft"
-             left="612"
-             name="WLDayCycleHelp"
-             top="3"
-             width="18" />
             <multi_slider
              can_edit_text="true"
              control_name="WLTimeSlider"
diff --git a/indra/newview/skins/default/xui/en/floater_lagmeter.xml b/indra/newview/skins/default/xui/en/floater_lagmeter.xml
index d98fdc5118b..309475098f3 100644
--- a/indra/newview/skins/default/xui/en/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/en/floater_lagmeter.xml
@@ -323,15 +323,6 @@
      left="40"
      name="server_lag_cause"
      right="-32" />
-    <!--button
-     bottom="145"
-     follows="left|top"
-     height="18"
-     label="?"
-     layout="topleft"
-     name="server_help"
-     right="-10"
-     width="18" /-->
     <button
      follows="left|top"
      height="20"
diff --git a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml
index eb0c22b9c49..0967706cc29 100644
--- a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml
@@ -17,20 +17,6 @@
      name="permissions"
      top="20"
      width="315">
-        <button
-         follows="left"
-         height="18"
-         label="?"
-         label_selected="?"
-         layout="topleft"
-         left="260"
-         name="help"
-         top="7"
-         width="22">
-            <button.commit_callback
-            function="Notification.Show" 
-			parameter="ClickUploadHelpPermissions" />
-        </button>
         <check_box
          control_name="ShareWithGroup"
          height="16"
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index ca125383023..f566dbdb75f 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -2868,15 +2868,6 @@
          tool_tip="Colorize the parcels according to the type of owner: &#10;&#10;Green = Your land &#10;Aqua = Your group&apos;s land &#10;Red = Owned by others &#10;Yellow = For sale &#10;Purple = For auction &#10;Grey = Public"
          top_pad="8"
          width="205" />
-        <!--TODO: HOOK UP TO HELP VIEWER-->
-       <!-- <button
-         image_overlay="Arrow_Right_Off"
-         picture_style="true"
-         left_pad="5"
-         name="button show owners help"
-         tool_tip="See an explanation of colors"
-         width="26"
-         height="22" />-->
         <text
          type="string"
          length="1"
diff --git a/indra/newview/skins/default/xui/en/floater_water.xml b/indra/newview/skins/default/xui/en/floater_water.xml
index af3606fd1c0..012b69c3e3f 100644
--- a/indra/newview/skins/default/xui/en/floater_water.xml
+++ b/indra/newview/skins/default/xui/en/floater_water.xml
@@ -95,16 +95,6 @@
              width="355">
                 Water Fog Color
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterFogColorHelp"
-             top_delta="-2"
-             width="18" />
             <color_swatch
              border_color="0.45098 0.517647 0.607843 1"
              can_apply_immediately="true"
@@ -130,16 +120,6 @@
              width="355">
                 Fog Density Exponent
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterFogDensityHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WaterFogDensity"
              decimal_digits="1"
@@ -165,16 +145,6 @@
              width="355">
                 Underwater Fog Modifier
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterUnderWaterFogModHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              decimal_digits="2"
              follows="left"
@@ -200,16 +170,6 @@
              width="355">
                 Reflection Wavelet Scale
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterNormalScaleHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -298,16 +258,6 @@
              width="355">
                 Fresnel Scale
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterFresnelScaleHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WaterFresnelScale"
              decimal_digits="2"
@@ -333,16 +283,6 @@
              width="355">
                 Fresnel Offset
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterFresnelOffsetHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WaterFresnelOffset"
              decimal_digits="2"
@@ -368,16 +308,6 @@
              width="355">
                 Refract Scale Above
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterScaleAboveHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WaterScaleAbove"
              decimal_digits="2"
@@ -403,16 +333,6 @@
              width="355">
                 Refract Scale Below
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterScaleBelowHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WaterScaleBelow"
              decimal_digits="2"
@@ -438,16 +358,6 @@
              width="355">
                 Blur Multiplier
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterBlurMultiplierHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WaterBlurMult"
              follows="left"
@@ -486,16 +396,6 @@
              width="355">
                 Big Wave Direction
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="145"
-             name="WaterWave1Help"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -563,16 +463,6 @@
              width="355">
                 Little Wave Direction
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="145"
-             name="WaterWave2Help"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -640,16 +530,6 @@
              width="355">
                 Normal Map
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="125"
-             name="WaterNormalMapHelp"
-             top_delta="-2"
-             width="18" />
             <texture_picker
              height="143"
              layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_windlight_options.xml b/indra/newview/skins/default/xui/en/floater_windlight_options.xml
index 2c09e82f087..fd905d7a14e 100644
--- a/indra/newview/skins/default/xui/en/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_windlight_options.xml
@@ -104,16 +104,6 @@
              width="355">
                 Blue Horizon
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLBlueHorizonHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -227,16 +217,6 @@
              width="355">
                 Haze Horizon
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLHazeHorizonHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLHazeHorizon"
              decimal_digits="2"
@@ -262,16 +242,6 @@
              width="355">
                 Blue Density
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLBlueDensityHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -385,16 +355,6 @@
              width="355">
                 Haze Density
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLHazeDensityHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLHazeDensity"
              decimal_digits="2"
@@ -421,16 +381,6 @@
              width="355">
                 Density Multiplier
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLDensityMultHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLDensityMult"
              decimal_digits="2"
@@ -457,16 +407,6 @@
              width="355">
                 Distance Multiplier
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLDistanceMultHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLDistancMult"
              decimal_digits="1"
@@ -492,16 +432,6 @@
              width="355">
                 Max Altitude
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLMaxAltitudeHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLMaxAltitude"
              decimal_digits="0"
@@ -540,16 +470,6 @@
              width="355">
                 Sun/Moon Color
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLSunlightColorHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -663,16 +583,6 @@
              width="355">
                 Sun/Moon Position
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLTimeOfDayHelp"
-             top_delta="-2"
-             width="18" />
             <icon
              height="20"
              image_name="icon_diurnal.tga"
@@ -705,16 +615,6 @@
              width="355">
                 Ambient
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLAmbientHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -828,16 +728,6 @@
              width="355">
                 East Angle
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLEastAngleHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLEastAngle"
              decimal_digits="2"
@@ -863,16 +753,6 @@
              width="355">
                 Sun Glow
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLSunGlowHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLGlowB"
              decimal_digits="2"
@@ -915,16 +795,6 @@
              width="200">
                 Scene Gamma
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLSceneGammaHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLGamma"
              decimal_digits="2"
@@ -951,16 +821,6 @@
              width="355">
                 Star Brightness
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLStarBrightnessHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLStarAlpha"
              decimal_digits="2"
@@ -1000,16 +860,6 @@
              width="355">
                 Cloud Color
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLCloudColorHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -1123,16 +973,6 @@
              width="355">
                 Cloud XY/Density
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLCloudDensityHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -1221,16 +1061,6 @@
              width="355">
                 Cloud Coverage
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLCloudCoverageHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLCloudCoverage"
              decimal_digits="2"
@@ -1256,16 +1086,6 @@
              width="355">
                 Cloud Scale
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLCloudScaleHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLCloudScale"
              decimal_digits="2"
@@ -1292,16 +1112,6 @@
              width="355">
                 Cloud Detail (XY/Density)
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLCloudDetailHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -1390,16 +1200,6 @@
              width="355">
                 Cloud Scroll X
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="125"
-             name="WLCloudScrollXHelp"
-             top_delta="-2"
-             width="18" />
             <check_box
              control_name="WLCloudLockX"
              follows="left"
@@ -1436,16 +1236,6 @@
              width="355">
                 Cloud Scroll Y
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="125"
-             name="WLCloudScrollYHelp"
-             top_delta="-2"
-             width="18" />
             <check_box
              control_name="WLCloudLockY"
              follows="left"
@@ -1479,16 +1269,6 @@
              name="DrawClassicClouds"
              top="104"
              width="200" />
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left="608"
-             name="WLClassicCloudsHelp"
-             top="84"
-             width="18" />
         </panel>
     </tab_container>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index d51cb130931..babed28f10e 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -370,99 +370,12 @@ Add this Ability to &apos;[ROLE_NAME]&apos;?
   </notification>
 
   <notification
-   icon="alertmodal.tga"
-   name="ClickPublishHelpLand"
-   type="alertmodal">
-Selecting the &quot;Publish in Search&quot;
-Checking this box will show:
-- this parcel in search results
-- this parcel&apos;s public objects
-- this parcel in web search
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickSoundHelpLand"
-   type="alertmodal">Media and Music can only be experienced within the parcel. Sound and Voice options can be restricted to the parcel or will be heard by residents outside the parcel depending on their maturity Rating. Go to Knowledge Base to learn more about how to set these options?
-    <url option="0" name="url">
-	https://support.secondlife.com/ics/support/default.asp?deptID=4417&amp;task=knowledge&amp;questionID=5046
-    </url>
-    <usetemplate
-     name="okcancelbuttons"
-     yestext="Go to Knowledge Base"
-	 notext="Close" />
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickSearchHelpAll"
-   type="alertmodal">
-Search results are organized based on the tab you are in, your maturity Rating, the category chosen, and other factors. For more details, please see the Knowledge Base.
-    <url option="0" name="url">
-	https://support.secondlife.com/ics/support/default.asp?deptID=4417&amp;task=knowledge&amp;questionID=4722
-    </url>
-    <usetemplate
-     name="okcancelbuttons"
-     yestext="Go to Knowledge Base"
-	 notext="Close" />
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickPublishHelpLandDisabled"
-   type="alertmodal">
-You can&apos;t make this parcel show in search because it is located in a region that forbids this.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickPublishHelpAvatar"
-   type="alertmodal">
-Selecting &quot;Show in Search&quot; will show:
-- my profile in search results
-- a link to my profile in public group pages
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickPartnerHelpAvatar"
-   type="alertmodal">
-You can propose to another Resident or dissolve an existing partnership through the [SECOND_LIFE] website.
-
-Go to the [SECOND_LIFE] web site for more information on partnering?
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="Go to Page"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickUploadHelpPermissions"
-   type="alertmodal">
-Your default permissions may not work in older regions.
-  </notification>
-
-<notification
     icon="alertmodal.tga"
     name="ClickUnimplemented"
     type="alertmodal">
 Sorry, not implemented yet.
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   name="ClickWebProfileHelpAvatar"
-   type="alertmodal">
-If this Resident has set a web profile URL then you can:
- * Click &apos;Load&apos; to see the page in this Web tab.
- * Click Load &gt; &apos;In external browser&apos; to view the page in your default web browser.
- * Click Load &gt; &apos;Home URL&apos; to return to this Resident&apos;s web profile if you&apos;ve navigated away.
-
-When viewing your own profile, you can enter any URL as your web profile and click OK to set it.
-Other residents can visit the URL you set when they look at your profile.
-  </notification>
-
   <notification
    icon="alertmodal.tga"
    name="JoinGroupCanAfford"
@@ -1957,21 +1870,6 @@ Join land?
      yestext="OK"/>
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   name="ShowOwnersHelp"
-   type="alertmodal">
-Show owners:
-Color parcels to show the owner type.
-
-Green = Your land
-Aqua = Your Group&apos;s land
-Red = Owned by others
-Yellow = For sale
-Purple = For auction
-Grey = Public
-  </notification>
-
   <notification
    icon="alertmodal.tga"
    name="ConfirmNotecardSave"
@@ -2845,18 +2743,6 @@ Visit the [SECOND_LIFE] Public Issue Tracker, where you can report bugs and othe
      yestext="Go to page"/>
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   name="WebLaunchPublicIssueHelp"
-   type="alertmodal">
-Visit the [SECOND_LIFE] Wiki for info on how to use the Public Issue Tracker.
-    <usetemplate
-     ignoretext="Launch my browser to view instructions for the Public Issue Tracker"
-     name="okcancelignore"
-     notext="Cancel"
-     yestext="Go to page"/>
-  </notification>
-
   <notification
    icon="alertmodal.tga"
    name="WebLaunchSupportWiki"
@@ -3634,669 +3520,272 @@ Type a short announcement which will be sent to everyone in this region.
 
   <notification
    icon="alertmodal.tga"
-   label="Block Terraform"
-   name="HelpRegionBlockTerraform"
+   label="Changed Region Maturity"
+   name="RegionMaturityChange"
    type="alertmodal">
-If this box is checked, land owners will not be able to terraform their land regardless of the per-parcel &apos;Edit Terrain&apos; setting.
-
-Default: off
+The maturity rating for this region has been updated.
+It may take some time for the change to be reflected on the map.
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Block Fly"
-   name="HelpRegionBlockFly"
+   label="Voice Version Mismatch"
+   name="VoiceVersionMismatch"
    type="alertmodal">
-If this box is checked, people will not be able to fly in this region regardless of the per-parcel &apos;Fly&apos; setting.
-
-Default: off
+This version of [APP_NAME] is not compatible with the Voice Chat feature in this region. In order for Voice Chat to function correctly you will need to update [APP_NAME].
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Bulk Change Content Permissions"
-   name="HelpBulkPermission"
+   label="Can&apos;t Buy Objects"
+   name="BuyObjectOneOwner"
    type="alertmodal">
-The Bulk Permissions tool helps you to quickly change the permissions on multiple items in the contents of the selected object(s).  However, please note that you are only setting permissions on the items in the Contents of the selected objects -- not permissions on the container object(s) themselves.
-
-Also note, the permissions are not applied to the nested contents of any of the contained items.  Your request only operates on items exactly one level deep.
-
-You can selectively choose which types of items to modify by using the checklist under &apos;Content Types&apos; here. Snapshots are included when you select Textures.
-
-* This tool will only succeed at changing permissions on items you are allowed to change.
-* You cannot grant any Next owner permissions which you do not already have.
-* The Next owner permissions are merely requests. If any item cannot take all of the new permissions, none of its permissions will change.
-
-When you are ready to change the permissions in bulk, click &apos;Apply&apos; and wait for the results to display.
-
-If you close the Bulk Permissions window while permissions are being changed, it will halt the operation.
+Cannot buy objects from different owners at the same time.
+Please select only one object and try again.
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Allow Damage"
-   name="HelpRegionAllowDamage"
+   label="Can&apos;t Buy Contents"
+   name="BuyContentsOneOnly"
    type="alertmodal">
-If this box is checked, the health system across all parcels regardless of individual parcel settings. If this box is left unchecked, individual parcel owners will still be able to activate the health system on their parcels.
-
-Default: off
+Unable to buy the contents of more than one object at a time.
+Please select only one object and try again.
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Agent Limit"
-   name="HelpRegionAgentLimit"
+   label="Can&apos;t Buy Contents"
+   name="BuyContentsOneOwner"
    type="alertmodal">
-Sets the maximum number of avatars allowed in this region.
-Performance may vary depending on the number avatars present.
-
-Default: 40
+Cannot buy objects from different owners at the same time.
+Please select only one object and try again.
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Object Bonus"
-   name="HelpRegionObjectBonus"
+   name="BuyOriginal"
    type="alertmodal">
-The Object Bonus is a multiplier for primitives allowed on any given parcel. The range allowed is 1 to 10. Set at &apos;1&apos;, each 512m² parcel is allowed 117 objects. Set at &apos;2&apos;, each 512m² parcel is allowed 234, or twice as many, and so on. The max number of objects allowed per region remains 15,000 no matter what the Object Bonus is. Once set, be aware that lowering the Object Bonus may cause objects to be returned or deleted.
-
-Default: 1.0
+Buy original object from [OWNER] for L$[PRICE]?
+You will become the owner of this object.
+You will be able to:
+ Modify: [MODIFYPERM]
+ Copy: [COPYPERM]
+ Resell or Give Away: [RESELLPERM]
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Maturity"
-   name="HelpRegionMaturity"
+   name="BuyOriginalNoOwner"
    type="alertmodal">
-Sets the maturity Rating of the Region, as shown in the menu bar at the top of any Resident&apos;s viewer, and in tooltips on the World Map when the cursor hovers over this Region. This setting also affects access to this Region and search results. Other Residents may only enter Regions or view search results with the same maturity Ratings they have chosen in their preferences.
-
-It may take some time for this change to be reflected on the map.
+Buy original object for L$[PRICE]?
+You will become the owner of this object.
+You will be able to:
+ Modify: [MODIFYPERM]
+ Copy: [COPYPERM]
+ Resell or Give Away: [RESELLPERM]
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Restrict Pushing"
-   name="HelpRegionRestrictPushObject"
+   name="BuyCopy"
    type="alertmodal">
-This checkbox sets the full region to restricted push permissions.
-When enabled, Residents may only be pushed by themselves or by the parcel&apos;s owner.
-(Push refers to the llPushObject() LSL function.)
-
-Default: Off
+Buy a copy from [OWNER] for L$[PRICE]?
+The object will be copied to your inventory.
+You will be able to:
+ Modify: [MODIFYPERM]
+ Copy: [COPYPERM]
+ Resell or Give Away: [RESELLPERM]
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Parcel Join/Subdivide"
-   name="HelpParcelChanges"
+   name="BuyCopyNoOwner"
    type="alertmodal">
-This checkbox sets whether or not parcels not owned by the estate owner can be joined or subdivided.
-If this option is unchecked:
- * Only estate owners or managers can join or subdivide parcels.
- * They may only join or subdivide parcels belonging to the owner, or to a group where they have the appropriate group powers.
-If this option is checked:
- * All parcel owners can join or subdivide the parcels they own.
- * For group owned parcels, those with appropriate group powers may join or subdivide parcels.
-
-Default: Checked
+Buy a copy for L$[PRICE]?
+The object will be copied to your inventory.
+You will be able to:
+ Modify: [MODIFYPERM]
+ Copy: [COPYPERM]
+ Resell or Give Away: [RESELLPERM]
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Do Not Show In Search"
-   name="HelpRegionSearch"
+   name="BuyContents"
    type="alertmodal">
-Checking this box will block parcel owners from listing their parcels in search.
-
-Default: Off
+Buy contents from [OWNER] for L$[PRICE]?
+They will be copied to your inventory.
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Changed Region Maturity"
-   name="RegionMaturityChange"
+   name="BuyContentsNoOwner"
    type="alertmodal">
-The maturity rating for this region has been updated.
-It may take some time for the change to be reflected on the map.
+Buy contents for L$[PRICE]?
+They will be copied to your inventory.
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Land Resale"
-   name="HelpRegionLandResell"
+   name="ConfirmPurchase"
    type="alertmodal">
-Estate owners and managers can sell any land owned by the estate owner.
-If this option is left unchecked, buyers cannot resell their land in this region.
-If this option is checked, buyers can resell their land in this region.
+This transaction will:
+[ACTION]
 
-Default: Disallow
+Are you sure you want to proceed with this purchase?
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Disable Scripts"
-   name="HelpRegionDisableScripts"
-   type="alertmodal">
-When sim performance is poor, a script may be to blame. Open the Statistics Bar (Ctrl+Shift+1). Look at the Simulator Physics FPS.
-If it is lower than 45,  open the Time panel located at the bottom of the Stats Bar. If Script Time reads 25 ms or higher, click the Get Top Scripts button. You will be given the name and location of scripts that may be causing poor performance.
+   name="ConfirmPurchasePassword"
+   type="password">
+This transaction will:
+[ACTION]
 
-Checking the Disable Scripts box and then pressing the Apply button will temporarily disable all scripts in this region. You may need to do this in order to travel to the location of a noted &apos;top script&apos;. Once you have arrived at the location, investigate the script to determine if it is causing the problem. You may want to contact the owner of the script or delete or return the object.
-Uncheck the Disable Script box and then Apply to reactivate the scripts in the region.
+Are you sure you want to proceed with this purchase?
+Please re-enter your password and click OK.
+    <form name="form">
+      <input
+       name="message"
+       type="password"/>
+      <button
+       default="true"
+       index="0"
+       name="ConfirmPurchase"
+       text="OK"/>
+      <button
+       index="1"
+       name="Cancel"
+       text="Cancel"/>
+    </form>
+  </notification>
 
-Default: off
+  <notification
+   icon="alert.tga"
+   name="SetPickLocation"
+   type="alert">
+Note:
+You have updated the location of this pick but the other details will retain their original values.
+    <usetemplate
+     name="okbutton"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Disable Collisions"
-   name="HelpRegionDisableCollisions"
+   name="MoveInventoryFromObject"
    type="alertmodal">
-When sim performance is poor, physical objects may be to blame.
-Open the Statistics Bar (Ctrl+Shift+1). Look at the Simulator Physics FPS.  If it is lower than 45, open the Time panel located at the bottom of the Stats Bar. If Sim Time (Physics) reads 20 ms or higher, click the Get Top Colliders button.
-You will be given the name and location of physical objects that may be causing poor performance.
-
-Checking the Disable Collisions box and then pressing the Apply button will temporarily disable object-object collisions. You may need to do this in order to travel to the location of a noted &apos;top collider&apos;. Once you have arrived at the location, investigate the object - is it constantly colliding with other objects? You may want to contact the owner of the object or delete or return the object.
-Uncheck the Disable Collisions box and then Apply to reactivate collisions in the region.
+You have selected &apos;no copy&apos; inventory items.
+These items will be moved to your inventory, not copied.
 
-Default: off
+Move the inventory item(s)?
+    <usetemplate
+     ignoretext="Warn me before I move &apos;no-copy&apos; items from an object"
+     name="okcancelignore"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Disable Physics"
-   name="HelpRegionDisablePhysics"
+   name="MoveInventoryFromScriptedObject"
    type="alertmodal">
-Disable Physics is similar to Disable Collisions, except all physics simulation is disabled.  This means that not only will objects stop colliding, but avatars will be unable to move.
-
-This should only be used when Disable Collisions does not give back enough performance to the region to investigate a physics problem or Top Collider.
+You have selected &apos;no copy&apos; inventory items.  These items will be moved to your inventory, not copied.
+Because this object is scripted, moving these items to your inventory may cause the script to malfunction.
 
-Be sure to re-enable physics when you are done, or avatars will continue to be unable to move.
+Move the inventory item(s)?
+    <usetemplate
+     ignoretext="Warn me before I move &apos;no-copy&apos; items which might break a scripted object"
+     name="okcancelignore"
+     notext="Cancel"
+     yestext="OK"/>
+  </notification>
 
-Default: off
+  <notification
+   icon="alert.tga"
+   name="ClickActionNotPayable"
+   type="alert">
+Warning: The &apos;Pay object&apos; click action has been set, but it will only work if a script is added with a money() event.
+    <form name="form">
+      <ignore name="ignore"
+       text="I set the action &apos;Pay object&apos; when building an object without a money() script"/>
+    </form>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Top Colliders"
-   name="HelpRegionTopColliders"
+   name="OpenObjectCannotCopy"
    type="alertmodal">
-Show a list of objects experiencing the greatest number of potential object-object collisions.  These objects can slow performance.  Select Advanced &gt; Performance Tools &gt; Statistics Bar and look under Simulator &gt; Time &gt; Physics Time to see if more than 20 ms is being spent in physics.
+There are no items in this object that you are allowed to copy.
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Top Scripts"
-   name="HelpRegionTopScripts"
+   name="WebLaunchAccountHistory"
    type="alertmodal">
-Show a list of objects spending the most time running LSL scripts.  These objects can slow performance.
-Select Advanced &gt; Performance Tools &gt; Statistics Bar and look under Simulator &gt; Time &gt; Script Time to see if more than 25 ms is being spent in scripts.
+Go to  your [http://secondlife.com/account/ Dashboard] to see your account history?
+    <usetemplate
+     ignoretext="Launch my browser to see my account history"
+     name="okcancelignore"
+     notext="Cancel"
+     yestext="Go to page"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Restart Region"
-   name="HelpRegionRestart"
+   name="ConfirmQuit"
    type="alertmodal">
-Restart the server process running this region after a two minute warning.  All Residents in the region will be disconnected.  The region will save its data, and should come back up within 90 seconds.
-
-Restarting the region will not fix most performance problems, and should usually be used only when directed.
+Are you sure you want to quit?
+    <usetemplate
+     ignoretext="Confirm before I quit"
+     name="okcancelignore"
+     notext="Don&apos;t Quit"
+     yestext="Quit"/>
+     <unique/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Water Height"
-   name="HelpRegionWaterHeight"
+   name="HelpReportAbuseEmailLL"
    type="alertmodal">
-This is the height in meters where water appears. If this setting is anything other than 20 and you have water that is adjacent to the edge of world or &apos;void&apos; water, there will be a visible gap.
+Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards].
 
-Default: 20
+All reported abuses are investigated and resolved. You can view the resolution by reading the [http://secondlife.com/support/incidentreport.php Incident Report].
+   <unique/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Terrain Raise"
-   name="HelpRegionTerrainRaise"
-   type="alertmodal">
-This is the distance in meters that parcel owners can raise their terrain above the &apos;baked&apos; terrain default height.
-
-Default: 4
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Terrain Lower"
-   name="HelpRegionTerrainLower"
-   type="alertmodal">
-This is the distance in meters that parcel owners can lower their terrain below the &apos;baked&apos; terrain default height.
-
-Default: -4
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Upload RAW Terrain"
-   name="HelpRegionUploadRaw"
-   type="alertmodal">
-This button uploads a .RAW file to the region you are in.
-The file must have the correct dimensions (RGB, 256x256) and 13 channels.  The best way to create a terrain file is to download the existing RAW file.  A good first step is to modify the red channel (land height), and upload it.
-
-The upload can take up to 45 seconds. Note that uploading a terrain file *will not* move the objects that are on the land, only the terrain itself and the permissions associated with the parcels.  This can result in objects going underground.
-
-For more information on editing region height fields, consult F1 Help.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Download RAW Terrain"
-   name="HelpRegionDownloadRaw"
-   type="alertmodal">
-This button downloads a file containing the height field data, parcel dimensions, parcel for sale status and some parcel permissions for this region. When opening the file in a program such as Photoshop you must specify the document&apos;s dimensions which are: RGB, 256x256 with 13 channels. This terrain file cannot be opened in any other way.
-
-For more information on editing region height fields, consult F1 help.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Use Estate Sun"
-   name="HelpRegionUseEstateSun"
-   type="alertmodal">
-This checkbox makes the sun position in this region the same as the sun position in the rest of the estate.
-
-Default: on
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Fixed Sun"
-   name="HelpRegionFixedSun"
-   type="alertmodal">
-This checkbox sets the sun position to the position in the Phase slider and stops the sun from moving.
-
-Default: off
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Bake Terrain"
-   name="HelpRegionBakeTerrain"
-   type="alertmodal">
-This button saves the current shape of the terrain as the new default for the region. Once baked, the land can revert to the saved shape whenever you or others use the Edit Terrain &apos;Revert&apos; option. The baked terrain is also the middle point for the terrain raise and lower limits.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Estate Managers"
-   name="HelpEstateEstateManager"
-   type="alertmodal">
-An estate manager is a Resident to whom you have delegated control of region and estate settings.  An estate manager can change any setting in these panels, except for uploading, downloading, and baking terrain.  In particular, they can allow or ban Residents from your estate.
-
-Estate managers can only be added or removed by the owner of the estate, not by each other.  Please only choose Residents you trust as estate managers, as you will be ultimately responsible for their actions.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Use Global Time"
-   name="HelpEstateUseGlobalTime"
-   type="alertmodal">
-This checkbox makes the sun in your estate follow the same position as on the Linden-owned &apos;mainland&apos; estates.
-
-Default: on
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Fixed Sun"
-   name="HelpEstateFixedSun"
-   type="alertmodal">
-This checkbox sets the sun position to the position in the Phase slider and stops the sun from moving.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Public Access"
-   name="HelpEstateExternallyVisible"
-   type="alertmodal">
-This checkbox sets whether Residents who are on other estates can enter this estate without being on an access list.
-
-Default: on
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Allow Direct Teleport"
-   name="HelpEstateAllowDirectTeleport"
-   type="alertmodal">
-When checked, allows Residents to directly teleport to any point in your estate.  When unchecked, Residents teleport to the nearest telehub.
-
-Default: off
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Allow Access"
-   name="HelpEstateAllowResident"
-   type="alertmodal">
-Access to this estate will be limited to Residents listed here and any groups below.  This setting is only available when Public Access is unchecked.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Allow Group Access"
-   name="HelpEstateAllowGroup"
-   type="alertmodal">
-Access to this estate will be limited to groups listed here and any Residents above.  This setting is only available when Public Access is unchecked.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Abuse Email Address"
-   name="HelpEstateAbuseEmailAddress"
-   type="alertmodal">
-Setting this to a valid email address will cause abuse reports on this estate to be sent to that address.
-Setting it blank will cause abuse reports to be sent only to Linden Lab.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Deny Access"
-   name="HelpEstateBanResident"
-   type="alertmodal">
-Residents on this list are denied access to your estate, regardless of any other settings.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Allow Voice Chat"
-   name="HelpEstateVoiceChat"
-   type="alertmodal">
-Parcels in this estate are allowed to have their own voice channels in which residents may hear and talk with others nearby.
-
-Default: off
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Voice Version Mismatch"
-   name="VoiceVersionMismatch"
-   type="alertmodal">
-This version of [APP_NAME] is not compatible with the Voice Chat feature in this region. In order for Voice Chat to function correctly you will need to update [APP_NAME].
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Estate Covenant"
-   name="HelpEstateCovenant"
-   type="alertmodal">
-Setting an estate covenant enables you to sell parcels within that estate. If a covenant is not set, you cannot sell the land. The notecard for your covenant can be empty if you do not wish to apply any rules or advise buyers of anything in relation to the land before they buy it.
-
-A covenant can be used to communicate rules, guidelines, cultural information or simply your own expectations to the prospective buyer. This can include zoning, building regulations, payment options or any other information you feel it is important for the new owner to have seen and to have agreed to before they purchase.
-
-The buyer must agree to the covenant by ticking the check box before they will be able to finish the purchase. Estate covenants are always visible in the About Land dialog for any parcels that have one set.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Can&apos;t Buy Objects"
-   name="BuyObjectOneOwner"
-   type="alertmodal">
-Cannot buy objects from different owners at the same time.
-Please select only one object and try again.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Can&apos;t Buy Contents"
-   name="BuyContentsOneOnly"
-   type="alertmodal">
-Unable to buy the contents of more than one object at a time.
-Please select only one object and try again.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Can&apos;t Buy Contents"
-   name="BuyContentsOneOwner"
-   type="alertmodal">
-Cannot buy objects from different owners at the same time.
-Please select only one object and try again.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="BuyOriginal"
-   type="alertmodal">
-Buy original object from [OWNER] for L$[PRICE]?
-You will become the owner of this object.
-You will be able to:
- Modify: [MODIFYPERM]
- Copy: [COPYPERM]
- Resell or Give Away: [RESELLPERM]
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="BuyOriginalNoOwner"
-   type="alertmodal">
-Buy original object for L$[PRICE]?
-You will become the owner of this object.
-You will be able to:
- Modify: [MODIFYPERM]
- Copy: [COPYPERM]
- Resell or Give Away: [RESELLPERM]
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="BuyCopy"
-   type="alertmodal">
-Buy a copy from [OWNER] for L$[PRICE]?
-The object will be copied to your inventory.
-You will be able to:
- Modify: [MODIFYPERM]
- Copy: [COPYPERM]
- Resell or Give Away: [RESELLPERM]
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="BuyCopyNoOwner"
-   type="alertmodal">
-Buy a copy for L$[PRICE]?
-The object will be copied to your inventory.
-You will be able to:
- Modify: [MODIFYPERM]
- Copy: [COPYPERM]
- Resell or Give Away: [RESELLPERM]
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="BuyContents"
-   type="alertmodal">
-Buy contents from [OWNER] for L$[PRICE]?
-They will be copied to your inventory.
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="BuyContentsNoOwner"
-   type="alertmodal">
-Buy contents for L$[PRICE]?
-They will be copied to your inventory.
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ConfirmPurchase"
-   type="alertmodal">
-This transaction will:
-[ACTION]
-
-Are you sure you want to proceed with this purchase?
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ConfirmPurchasePassword"
-   type="password">
-This transaction will:
-[ACTION]
-
-Are you sure you want to proceed with this purchase?
-Please re-enter your password and click OK.
-    <form name="form">
-      <input
-       name="message"
-       type="password"/>
-      <button
-       default="true"
-       index="0"
-       name="ConfirmPurchase"
-       text="OK"/>
-      <button
-       index="1"
-       name="Cancel"
-       text="Cancel"/>
-    </form>
-  </notification>
-
-  <notification
-   icon="alert.tga"
-   name="SetPickLocation"
-   type="alert">
-Note:
-You have updated the location of this pick but the other details will retain their original values.
-    <usetemplate
-     name="okbutton"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="MoveInventoryFromObject"
-   type="alertmodal">
-You have selected &apos;no copy&apos; inventory items.
-These items will be moved to your inventory, not copied.
-
-Move the inventory item(s)?
-    <usetemplate
-     ignoretext="Warn me before I move &apos;no-copy&apos; items from an object"
-     name="okcancelignore"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="MoveInventoryFromScriptedObject"
-   type="alertmodal">
-You have selected &apos;no copy&apos; inventory items.  These items will be moved to your inventory, not copied.
-Because this object is scripted, moving these items to your inventory may cause the script to malfunction.
-
-Move the inventory item(s)?
-    <usetemplate
-     ignoretext="Warn me before I move &apos;no-copy&apos; items which might break a scripted object"
-     name="okcancelignore"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alert.tga"
-   name="ClickActionNotPayable"
-   type="alert">
-Warning: The &apos;Pay object&apos; click action has been set, but it will only work if a script is added with a money() event.
-    <form name="form">
-      <ignore name="ignore"
-       text="I set the action &apos;Pay object&apos; when building an object without a money() script"/>
-    </form>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="OpenObjectCannotCopy"
-   type="alertmodal">
-There are no items in this object that you are allowed to copy.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="WebLaunchAccountHistory"
-   type="alertmodal">
-Go to  your [http://secondlife.com/account/ Dashboard] to see your account history?
-    <usetemplate
-     ignoretext="Launch my browser to see my account history"
-     name="okcancelignore"
-     notext="Cancel"
-     yestext="Go to page"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickOpenF1Help"
-   type="alertmodal">
-Do you want to visit [SECOND_LIFE] help?
-    <usetemplate
-     ignoretext="Launch my browser to view Help/Support"
-     name="okcancelignore"
-     notext="Cancel"
-     yestext="Go"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ConfirmQuit"
-   type="alertmodal">
-Are you sure you want to quit?
-    <usetemplate
-     ignoretext="Confirm before I quit"
-     name="okcancelignore"
-     notext="Don&apos;t Quit"
-     yestext="Quit"/>
-     <unique/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpReportAbuseEmailLL"
-   type="alertmodal">
-Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards].
-
-All reported abuses are investigated and resolved. You can view the resolution by reading the [http://secondlife.com/support/incidentreport.php Incident Report].
-   <unique/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpReportAbuseEmailEO"
+   name="HelpReportAbuseEmailEO"
    type="alertmodal">
 IMPORTANT: This report will go to the owner of the region you are currently in and not to Linden Lab.
 
@@ -4499,31 +3988,6 @@ Link to this from a web page to give others easy access to this location, or try
     </form>
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   name="GraphicsPreferencesHelp"
-   type="alertmodal">
-This panel controls window size and resolution and the quality of the client&apos;s graphics.  The Preferences &gt; Graphics interface allows you to choose between four graphics levels: Low, Mid, High, and Ultra. You may also customize your graphics settings by clicking the Advanced button and manipulating the following settings:
-
-Shaders: Enable or disable various types of pixel shaders.
-
-Reflection Detail: Sets the types of objects that water can reflect.
-
-Avatar Rendering: Sets options that affect how the client renders avatars.
-
-Draw Distance: Affects how far out from your viewpoint objects will be rendered in the scene.
-
-Max Particle Count: Sets the maximum number of particles you are able to see on your screen at once.
-
-Post Process Quality: Sets the resolution with which Glow is rendered.
-
-Mesh Detail: Sets the amount of detail or number of triangles used in rendering certain objects. A higher value takes longer to render, but makes these objects appear with more detail.
-
-Lighting Detail: Selects what types of lights you would like to render.
-
-Terrain Detail: Sets the amount of detail you would like to see for the terrain texture.
-  </notification>
-
   <notification
    icon="alertmodal.tga"
    name="WLSavePresetAlert"
@@ -4571,306 +4035,6 @@ PostProcess Effect exists. Do you still wish overwrite it?
      yestext="Yes"/>
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   name="HelpEditSky"
-   type="alertmodal">
-Edit the WindLight sliders to create and save a set of skies.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpEditDayCycle"
-   type="alertmodal">
-Set which skies to turn to throughout the day.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="EnvSettingsHelpButton"
-   type="alertmodal">
-These settings adjust the way the environment looks locally on your computer.  Your graphics card needs to support atmospheric shaders in order to have access to all of the settings.
-
-Adjust the &quot;Time of Day&quot; slider to change the day&apos;s phase locally on the viewer.
-
-Adjust the &quot;Cloud Cover&quot; slider to control how much the clouds cover the sky.
-
-Pick a color in the &quot;Water Color&quot; color picker to change the color of the water.
-
-Adjust the &quot;Water Fog&quot; slider to control how dense the fog is underwater.
-
-Click &quot;Use Estate Time&quot; to reset the time of day to the region&apos;s current time of day and remain linked to it.
-
-Click &quot;Advanced Sky&quot; to bring up an editor with more advanced settings for the sky.
-
-Click &quot;Advanced Water&quot; to bring up an editor with more advanced settings for the water.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpDayCycle"
-   type="alertmodal">
-The Day Cycle Editor gives you control over the sky during [SECOND_LIFE]&apos;s day/night cycle. This is the cycle that is used by the Basic Environment Editor&apos;s Time of Day slider.
-
-The Day Cycle Editor works by setting keyframes. These are nodes (represented by the gray blips on the time graph) that have Sky Presets associated with them. As the Time of Day progresses, the WindLight sky &quot;animates&quot; as it interpolates between these keyframes.
-
-The yellow arrow above the timeline represents your current view, based on Time of Day. Click and drag it to see how your day will animate. You may add or delete keyframes by pressing the Add Key and Delete Key buttons to the right of the timeline.
-
-You can set the time position of a keyframe by either dragging it along the timeline, or by setting its value manually in the Key Frame Settings frame. Within the Key Frame Settings frame, you&apos;ll be able to associate the keyframe with its respective WindLight preset.
-
-Length of Cycle dictates the overall duration of a &quot;day&quot;. Setting this to a low value (for instance, 2 min.) will mean your entire 24-hour timeline will animate in only two real minutes! Once you are satisfied with your timeline and keyframe cycle, use the Play and Stop buttons to preview the results. Remember- you can also move the yellow time-indicator arrow above the timeline to see the cycle animate interactively. Using the Use Estate Time button will synchronize your day length and time of day with the Estate&apos;s day cycle.
-
-Once you are pleased with your Day Cycle, you can save and load it with the Save Test Day and Load Test Day buttons. Note that, for now, we only allow one Day Cycle.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpBlueHorizon"
-   type="alertmodal">
-Use the Red/Green/Blue (RGB) sliders to adjust the color of the sky. You can use the Intensity (I) slider to move all three RGB sliders in unison.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpHazeHorizon"
-   type="alertmodal">
-Haze Horizon is one of the most useful parameters for adjusting overall light exposure in the scene.  It is effective for simulating many exposure settings, such as white-outs from the sun and darker, closed-iris settings.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpBlueDensity"
-   type="alertmodal">
-Blue Density affects the overall color saturation of the sky and fog. If you move the Intensity (I) slider to the right, colors will become brighter and more vibrant. If you move it all the way to the left, the colors will become duller, eventually fading to black and white. If you want to fine-tune the sky&apos;s color balance, you can control individual elements of saturation by using the Red/Green/Blue (RGB) sliders.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpHazeDensity"
-   type="alertmodal">
-Haze Density controls the level of dull, gray haze in the atmosphere.  It is effective for simulating scenes with high levels of smoke and man-made pollutants.  It is also effective for simulating fog and mist.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpDensityMult"
-   type="alertmodal">
-The Density Multiplier can be used to affect the overall atmospheric density. At lower settings, it creates a feeling of &quot;thin air&quot;, and at higher settings, it creates a very heavy, smoggy effect.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpDistanceMult"
-   type="alertmodal">
-Adjusts WindLight&apos;s perceived distance.  A value of zero effectively turns off WindLight&apos;s influence on terrain and objects.  Values greater than 1 simulate greater distances for thicker atmospheric effects.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpMaxAltitude"
-   type="alertmodal">
-Max Altitude adjusts the altitude calculations WindLight performs when computing its atmospheric lighting.  At later times of day, it is useful for adjusting how &quot;deep&quot; the sunset appears.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpSunlightColor"
-   type="alertmodal">
-Adjusts the color and intensity of the direct light in the scene.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpSunAmbient"
-   type="alertmodal">
-Adjusts the color and intensity of ambient atmospheric light in the scene.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpSunGlow"
-   type="alertmodal">
-The Size slider controls the size of the sun.
-The Focus slider controls how blurred the sun is over the sky.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpSceneGamma"
-   type="alertmodal">
-Adjust the screen&apos;s distribution of light and dark.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpStarBrightness"
-   type="alertmodal">
-Adjusts the brightness of the stars in the sky.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpTimeOfDay"
-   type="alertmodal">
-Controls the location of the sun in the sky.
-Similar to elevation.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpEastAngle"
-   type="alertmodal">
-Controls the location of the sun in the sky.
-Similar to azimuth.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudColor"
-   type="alertmodal">
-Edits the color of the clouds.  It is generally recommended to keep it whitish, but hey, have fun if you want.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudDetail"
-   type="alertmodal">
-Controls the detail image layered on top of the main cloud image.  X and Y control its position.  D (Density) controls how puffy or fractured the clouds appear.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudDensity"
-   type="alertmodal">
-Allows you to control the position of the clouds with the X and Y sliders and how dense they are with the the D slider.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudCoverage"
-   type="alertmodal">
-Controls how much the clouds cover the sky.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudScale"
-   type="alertmodal">
-Controls the scaling of the cloud image on the sky dome.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudScrollX"
-   type="alertmodal">
-Controls the speed of the clouds as they move in the X direction.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudScrollY"
-   type="alertmodal">
-Controls the speed of the clouds as they move in the Y direction.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpClassicClouds"
-   type="alertmodal">
-Check this box to enable rendering of [SECOND_LIFE]&apos;s older classic clouds in addition to WindLight&apos;s clouds.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterFogColor"
-   type="alertmodal">
-Chooses the color of the underwater fog.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterFogDensity"
-   type="alertmodal">
-Controls how dense the water fog is and how far you can see underwater.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpUnderWaterFogMod"
-   type="alertmodal">
-Modifies the effect of the Fog Density Exponent to control how far you can see when your avatar is underwater.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterGlow"
-   type="alertmodal">
-Controls how much the surface of the water glows.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterNormalScale"
-   type="alertmodal">
-Controls the scaling of the three wavelets that make up the water.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterFresnelScale"
-   type="alertmodal">
-Controls how much light is reflected at different angles.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterFresnelOffset"
-   type="alertmodal">
-Controls how much light intensity is reflected.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterScaleAbove"
-   type="alertmodal">
-Controls how much light is refracted from looking above the surface of the water.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterScaleBelow"
-   type="alertmodal">
-Controls how much light is refracted from looking from below the surface of the water.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterBlurMultiplier"
-   type="alertmodal">
-Controls how waves and reflections are mixed.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterNormalMap"
-   type="alertmodal">
-Controls what normal map is layered across the water to determine reflections/refractions.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterWave1"
-   type="alertmodal">
-Controls where and how fast the large scaled version of the normal map moves in the X and Y direction.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterWave2"
-   type="alertmodal">
-Controls where and how fast the the small scaled version of the normal map moves in the X and Y direction.
-  </notification>
-
   <notification
    icon="alert.tga"
    name="NewSkyPreset"
@@ -5618,14 +4782,6 @@ You are banned from the region.
 Your account cannot connect to this teen grid region.
   </notification>
 
-  <notification
-	icon="notify.tga"
-	name="NoHelpIslandTP"
-	type="notify">
-You cannot teleport back to Help Island.
-Go to &apos;Help Island Public&apos; to repeat the tutorial.
-  </notification>
-
   <notification
 	icon="notify.tga"
 	name="ImproperPaymentStatus"
diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
index 04e0ad3be8a..c81c7113ae2 100644
--- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
@@ -29,17 +29,6 @@
      name="land_contrib_error">
         Unable to set your land contribution.
     </panel.string>
-    <!--
-    <button
-      follows="left|top"
-     height="16"
-     label="?"
-     layout="topleft"
-     left="250"
-     name="help_button"
-     top="8"
-     width="20" />
-    -->
    <!-- <text
      type="string"
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml
index d9fb9629982..0e4d490369a 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml
@@ -22,16 +22,6 @@ the General tab.
      name="no_notices_text">
         There are no past notices.
     </panel.string>
-   <!-- <button
-      follows="left|top"
-     height="16"
-     label="?"
-     label_selected="?"
-     layout="topleft"
-     left="250"
-     name="help_button"
-     top="8"
-     width="20" /> -->
      <!--<text
       follows="left|top"
      type="string"
@@ -383,4 +373,4 @@ the General tab.
          top_pad="10"
          width="135" />
         </panel>
-</panel>
\ No newline at end of file
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index 909c3f45776..e87859f788a 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -18,17 +18,6 @@
     </panel.string>
     <panel.string
      name="help_text" />
-    <!--
-    <button
-     follows="left|top"
-     height="16"
-     label="?"
-     layout="topleft"
-     left="250"
-     name="help_button"
-     top="8"
-     width="20" />
-    -->
     <!--<panel
      follows="left|top"
      height="80"
diff --git a/indra/newview/skins/default/xui/en/panel_region_covenant.xml b/indra/newview/skins/default/xui/en/panel_region_covenant.xml
index b3147f5e6ba..49fc930cd8a 100644
--- a/indra/newview/skins/default/xui/en/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_covenant.xml
@@ -103,17 +103,6 @@
      width="308">
         Last Modified Wed Dec 31 16:00:00 1969
     </text>
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="5"
-     name="covenant_help"
-     top_delta="-2"
-     width="18" />
-
     <text_editor
      enabled="false"
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml
index 25e1171688c..a1bca4229dc 100644
--- a/indra/newview/skins/default/xui/en/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml
@@ -40,16 +40,6 @@
      tool_tip="Disable all scripts in this region"
      top="30"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="70"
-     name="disable_scripts_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Disable Collisions"
@@ -59,16 +49,6 @@
      tool_tip="Disable non-avatar collisions in this region"
      top="50"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="70"
-     name="disable_collisions_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Disable Physics"
@@ -78,16 +58,6 @@
      tool_tip="Disable all physics in this region"
      top="70"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="70"
-     name="disable_physics_help"
-     top_delta="2"
-     width="18" />
     <button
      enabled="false"
      follows="left|top"
@@ -204,16 +174,6 @@
      tool_tip="List of objects experiencing the most potential collisions"
      top="313"
      width="150" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="top_colliders_help"
-     top_delta="2"
-     width="18" />
     <button
      follows="left|top"
      font="SansSerifSmall"
@@ -225,16 +185,6 @@
      tool_tip="List of objects spending the most time running scripts"
      top_pad="5"
      width="150" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="top_scripts_help"
-     top_delta="2"
-     width="18" />
     <button
      follows="left|top"
      font="SansSerifSmall"
@@ -246,16 +196,6 @@
      tool_tip="Give 2 minute countdown and restart region"
      top_pad="5"
      width="130" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="restart_help"
-     top_delta="2"
-     width="18" />
     <button
      follows="left|top"
      font="SansSerifSmall"
diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml
index c7a60ed2e48..add14761791 100644
--- a/indra/newview/skins/default/xui/en/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml
@@ -94,16 +94,6 @@ regions in the estate.
      name="use_global_time_check"
      top="132"
      width="200" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="20"
-     name="use_global_time_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Fixed Sun"
@@ -112,16 +102,6 @@ regions in the estate.
      name="fixed_sun_check"
      top="152"
      width="100" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="120"
-     name="fixed_sun_help"
-     top_delta="2"
-     width="18" />
     <icon
      height="20"
      image_name="icon_day_cycle.tga"
@@ -151,16 +131,6 @@ regions in the estate.
      name="externally_visible_check"
      top_pad="6"
      width="200" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="20"
-     name="externally_visible_help"
-     top_delta="2"
-     width="18" />
     <text
      type="string"
      length="1"
@@ -201,16 +171,6 @@ regions in the estate.
      name="voice_chat_check"
      top="304"
      width="200" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="20"
-     name="voice_chat_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Direct Teleport"
@@ -219,16 +179,6 @@ regions in the estate.
      name="allow_direct_teleport"
      top_pad="4"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="140"
-     name="allow_direct_teleport_help"
-     top_delta="2"
-     width="18" />
     <text
      type="string"
      length="1"
@@ -249,16 +199,6 @@ regions in the estate.
      name="abuse_email_address"
      top_pad="5"
      width="205" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="12"
-     name="abuse_email_address_help"
-     top_dekta="0"
-     width="18" />
     <button
      enabled="false"
      follows="left|top"
@@ -300,16 +240,6 @@ regions in the estate.
      width="200">
         Estate Managers:
     </text>
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_delta="182"
-     name="estate_manager_help"
-     top_delta="-1"
-     width="18" />
     <view_border
      bevel_style="none"
      follows="top|left"
@@ -357,16 +287,6 @@ regions in the estate.
      width="200">
         Allowed Residents:
     </text>
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_delta="182"
-     name="allow_resident_help"
-     top_delta="-1"
-     width="18" />
     <view_border
      bevel_style="none"
      follows="top|left"
@@ -414,16 +334,6 @@ regions in the estate.
      width="200">
         Allowed Groups:
     </text>
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_delta="182"
-     name="allow_group_help"
-     top_delta="-1"
-     width="18" />
     <view_border
      bevel_style="none"
      follows="top|left"
@@ -471,16 +381,6 @@ regions in the estate.
      width="200">
         Banned Residents:
     </text>
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_delta="182"
-     name="ban_resident_help"
-     top_delta="-1"
-     width="18" />
     <view_border
      bevel_style="none"
      follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/panel_region_general.xml b/indra/newview/skins/default/xui/en/panel_region_general.xml
index 160ae96fc4e..7f477bdc647 100644
--- a/indra/newview/skins/default/xui/en/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_general.xml
@@ -83,16 +83,6 @@
      name="block_terraform_check"
      top="70"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="terraform_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Block Fly"
@@ -101,16 +91,6 @@
      name="block_fly_check"
      top="90"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="fly_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Damage"
@@ -119,16 +99,6 @@
      name="allow_damage_check"
      top="110"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="damage_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Restrict Pushing"
@@ -137,16 +107,6 @@
      name="restrict_pushobject"
      top="130"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="restrict_pushobject_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Land Resell"
@@ -155,16 +115,6 @@
      name="allow_land_resell_check"
      top="160"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="land_resell_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Land Join/Divide"
@@ -173,16 +123,6 @@
      name="allow_parcel_changes_check"
      top="180"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="parcel_changes_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Block Land Show in Search"
@@ -192,16 +132,6 @@
      tool_tip="Let people see this region and its parcels in search results"
      top="200"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="parcel_search_help"
-     top_delta="2"
-     width="18" />
     <spinner
      follows="left|top"
      height="20"
@@ -215,16 +145,6 @@
      name="agent_limit_spin"
      top="240"
      width="170" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="25"
-     name="agent_limit_help"
-     top_delta="2"
-     width="18" />
     <spinner
      follows="left|top"
      height="20"
@@ -238,16 +158,6 @@
      name="object_bonus_spin"
      top="260"
      width="170" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="25"
-     name="object_bonus_help"
-     top_delta="2"
-     width="18" />
     <text
      follows="left|top"
      height="20"
@@ -280,16 +190,6 @@
          name="PG"
          value="13" />
     </combo_box>
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="access_help"
-     top_delta="2"
-     width="18" />
     <button
      enabled="false"
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
index 9b9c62dbf9d..b199339628d 100644
--- a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
@@ -83,16 +83,6 @@
      name="block_terraform_check"
      top="70"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="terraform_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Block Fly"
@@ -101,16 +91,6 @@
      name="block_fly_check"
      top="90"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="fly_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Damage"
@@ -119,16 +99,6 @@
      name="allow_damage_check"
      top="110"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="damage_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Restrict Pushing"
@@ -137,16 +107,6 @@
      name="restrict_pushobject"
      top="130"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="restrict_pushobject_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Land Resell"
@@ -155,16 +115,6 @@
      name="allow_land_resell_check"
      top="160"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="land_resell_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Land Join/Divide"
@@ -173,16 +123,6 @@
      name="allow_parcel_changes_check"
      top="180"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="parcel_changes_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Block Land Show in Search"
@@ -192,16 +132,6 @@
      tool_tip="Let people see this region and its parcels in search results"
      top="200"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="parcel_search_help"
-     top_delta="2"
-     width="18" />
     <spinner
      follows="left|top"
      height="20"
@@ -215,16 +145,6 @@
      name="agent_limit_spin"
      top="240"
      width="170" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="25"
-     name="agent_limit_help"
-     top_delta="2"
-     width="18" />
     <spinner
      follows="left|top"
      height="20"
@@ -238,16 +158,6 @@
      name="object_bonus_spin"
      top="260"
      width="170" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="25"
-     name="object_bonus_help"
-     top_delta="2"
-     width="18" />
     <text
      follows="left|top"
      height="20"
@@ -280,16 +190,6 @@
          name="PG"
          value="13" />
     </combo_box> 
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="access_help"
-     top_delta="2"
-     width="18" />
     <button
      enabled="false"
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_region_terrain.xml b/indra/newview/skins/default/xui/en/panel_region_terrain.xml
index 148d9500bb8..ffd51bf510f 100644
--- a/indra/newview/skins/default/xui/en/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_terrain.xml
@@ -42,16 +42,6 @@
      name="water_height_spin"
      top="40"
      width="180" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="5"
-     name="water_height_help"
-     top_delta="2"
-     width="18" />
     <spinner
      follows="left|top"
      height="20"
@@ -64,16 +54,6 @@
      name="terrain_raise_spin"
      top="60"
      width="180" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="5"
-     name="terrain_raise_help"
-     top_delta="2"
-     width="18" />
     <spinner
      follows="left|top"
      height="20"
@@ -87,16 +67,6 @@
      name="terrain_lower_spin"
      top="80"
      width="180" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="5"
-     name="terrain_lower_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Use Estate Sun"
@@ -105,16 +75,6 @@
      name="use_estate_sun_check"
      top="35"
      width="100" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="70"
-     name="use_estate_sun_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Fixed Sun"
@@ -123,16 +83,6 @@
      name="fixed_sun_check"
      top="55"
      width="100" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="70"
-     name="fixed_sun_help"
-     top_delta="2"
-     width="18" />
     <icon
      height="20"
      image_name="icon_day_cycle.tga"
@@ -182,16 +132,6 @@
      tool_tip="Available only to estate owners, not managers"
      top_pad="60"
      width="170" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="download_raw_help"
-     top_delta="2"
-     width="18" />
     <button
      follows="left|top"
      height="20"
@@ -202,16 +142,6 @@
      tool_tip="Available only to estate owners, not managers"
      top="243"
      width="170" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="upload_raw_help"
-     top_delta="2"
-     width="18" />
     <button
      follows="left|top"
      height="20"
@@ -222,14 +152,4 @@
      tool_tip="Set current terrain as mid-point for raise/lower limits"
      top="283"
      width="100" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="bake_terrain_help"
-     top_delta="2"
-     width="18" />
 </panel>
-- 
GitLab


From 5f30904db45c8cd3eec5506503128eaf3df4e429 Mon Sep 17 00:00:00 2001
From: Dmitry Zaporozhan <dzaporozhan@productengine.com>
Date: Tue, 3 Nov 2009 12:30:09 +0200
Subject: [PATCH 036/306] Fixed Windows build.

--HG--
branch : product-engine
---
 indra/newview/llagentui.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
index 41c8066aca4..2911a35581b 100644
--- a/indra/newview/llagentui.cpp
+++ b/indra/newview/llagentui.cpp
@@ -92,8 +92,8 @@ std::string LLAgentUI::buildSLURL(const bool escaped /*= true*/)
 //static
 BOOL LLAgentUI::checkAgentDistance(const LLVector3& pole, F32 radius)
 {
-	S32 delta_x = gAgent.getPositionAgent().mV[VX] - pole.mV[VX];
-	S32 delta_y = gAgent.getPositionAgent().mV[VY] - pole.mV[VY];
+	F32 delta_x = gAgent.getPositionAgent().mV[VX] - pole.mV[VX];
+	F32 delta_y = gAgent.getPositionAgent().mV[VY] - pole.mV[VY];
 	
 	return  sqrt( delta_x* delta_x + delta_y* delta_y ) < radius;
 }
-- 
GitLab


From 3a09e94c7cc23279a4e5353baf81b3ba2dc3e6f4 Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Tue, 3 Nov 2009 12:57:21 +0200
Subject: [PATCH 037/306] got rid of exit crash and warning messages 'Trying to
 access deleted singleton'

--HG--
branch : product-engine
---
 indra/newview/llagentpicksinfo.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llagentpicksinfo.cpp b/indra/newview/llagentpicksinfo.cpp
index 6e5835bace2..3c8d0dac426 100644
--- a/indra/newview/llagentpicksinfo.cpp
+++ b/indra/newview/llagentpicksinfo.cpp
@@ -47,7 +47,8 @@ class LLAgentPicksInfo::LLAgentPicksObserver : public LLAvatarPropertiesObserver
 
 	~LLAgentPicksObserver()
 	{
-		LLAvatarPropertiesProcessor::getInstance()->removeObserver(gAgent.getID(), this);
+		if (LLAvatarPropertiesProcessor::instanceExists())
+			LLAvatarPropertiesProcessor::getInstance()->removeObserver(gAgent.getID(), this);
 	}
 
 	void sendAgentPicksRequest()
-- 
GitLab


From c940d3d5b92ba915a51e98c9141243ccd6b5145b Mon Sep 17 00:00:00 2001
From: Eugene Kondrashev <ekondrashev@productengine.com>
Date: Tue, 3 Nov 2009 13:11:49 +0200
Subject: [PATCH 038/306] Added 'Loading...' message to avatarlist while
 opening group/adhoc chat

--HG--
branch : product-engine
---
 indra/newview/llparticipantlist.cpp | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index e97eb1df2b6..918c7989eda 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -32,6 +32,9 @@
 
 #include "llviewerprecompiledheaders.h"
 
+// common includes
+#include "lltrans.h"
+
 #include "llparticipantlist.h"
 #include "llavatarlist.h"
 #include "llspeakers.h"
@@ -49,6 +52,8 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
 	mSpeakerMgr->addListener(mSpeakerRemoveListener, "remove");
 	mSpeakerMgr->addListener(mSpeakerClearListener, "clear");
 
+	mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
+
 	//Lets fill avatarList with existing speakers
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
 
-- 
GitLab


From 01724523cffec8b01ae873ed46cd05ec27a26379 Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Tue, 3 Nov 2009 13:15:15 +0200
Subject: [PATCH 039/306] IM: defensive fix to get rid of warnings about
 attempts to get speaker mgr for removed sessions

--HG--
branch : product-engine
---
 indra/newview/llimfloater.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index dee86f4a222..7bad9499211 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -106,6 +106,8 @@ void LLIMFloater::onFocusReceived()
 // virtual
 void LLIMFloater::onClose(bool app_quitting)
 {
+	if (!gIMMgr->hasSession(mSessionID)) return;
+	
 	setTyping(false);
 	gIMMgr->leaveSession(mSessionID);
 }
-- 
GitLab


From 3b17d74cb0998bbdbd70e3fc70255a2ba5df385b Mon Sep 17 00:00:00 2001
From: Yuri Chebotarev <ychebotarev@productengine.com>
Date: Tue, 3 Nov 2009 13:34:19 +0200
Subject: [PATCH 040/306] fix for normal task EXT-2099 Make the Log button
 toggleable

--HG--
branch : product-engine
---
 .../newview/skins/default/xui/en/panel_nearby_chat_bar.xml  | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
index 2182163da5b..555fedb1ffb 100644
--- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
@@ -42,13 +42,17 @@
      width="20" />
     <button
      follows="right"
+     is_toggle="true"
      width="45"
      top="0"
      layout="topleft"
      left_pad="8"
      label="Log"
      height="23"
+     name="show_nearby_chat"
      tool_tip="Show/hide nearby chat log">
-    <button.commit_callback function="Floater.Toggle" parameter="nearby_chat"/>
+        <button.init_callback
+           function="Button.SetDockableFloaterToggle"
+           parameter="nearby_chat" />
     </button>
 </panel>
-- 
GitLab


From 645e2588511ff55b773e22fe3c9ee2c4de37843c Mon Sep 17 00:00:00 2001
From: Andrew Dyukov <adyukov@productengine.com>
Date: Tue, 3 Nov 2009 14:01:33 +0200
Subject: [PATCH 041/306] Fixed EXT-1854 (Area of working for nav bar context
 menu is changed)

--HG--
branch : product-engine
---
 indra/newview/llnavigationbar.cpp | 7 +++++++
 indra/newview/llnavigationbar.h   | 1 +
 2 files changed, 8 insertions(+)

diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index e63daac4afb..b35fd6134b7 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -50,6 +50,7 @@
 #include "llslurl.h"
 #include "llurlsimstring.h"
 #include "llviewerinventory.h"
+#include "llviewermenu.h"
 #include "llviewerparcelmgr.h"
 #include "llworldmap.h"
 #include "llappviewer.h"
@@ -271,6 +272,12 @@ void LLNavigationBar::draw()
 	LLPanel::draw();
 }
 
+BOOL LLNavigationBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
+{
+	show_navbar_context_menu(this,x,y);
+	return TRUE;
+}
+
 void LLNavigationBar::onBackButtonClicked()
 {
 	LLTeleportHistory::getInstance()->goBack();
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index 8b625e7fa62..21645664dad 100644
--- a/indra/newview/llnavigationbar.h
+++ b/indra/newview/llnavigationbar.h
@@ -54,6 +54,7 @@ class LLNavigationBar
 	virtual ~LLNavigationBar();
 	
 	/*virtual*/ void	draw();
+	/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 	/*virtual*/ BOOL	postBuild();
 
 	void handleLoginComplete();
-- 
GitLab


From c4935ea25b8a3fcf93df07ee2f39fd54b48c5960 Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Tue, 3 Nov 2009 14:24:57 +0200
Subject: [PATCH 042/306] no ticket. Mistyped class name has been corrected.

--HG--
branch : product-engine
---
 indra/newview/lllandmarkactions.cpp | 6 +++---
 indra/newview/lllandmarkactions.h   | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp
index 0b07dd4f212..319212f6043 100644
--- a/indra/newview/lllandmarkactions.cpp
+++ b/indra/newview/lllandmarkactions.cpp
@@ -135,13 +135,13 @@ use_substring(if_use_substring)
 
 // Returns true if the given inventory item is a landmark pointing to the current parcel.
 // Used to find out if there is at least one landmark from current parcel.
-class LLFistAgentParcelLandmark : public LLInventoryCollectFunctor
+class LLFirstAgentParcelLandmark : public LLInventoryCollectFunctor
 {
 private:	
 	bool mFounded;// to avoid unnecessary  check
 	
 public:
-	LLFistAgentParcelLandmark(): mFounded(false){}
+	LLFirstAgentParcelLandmark(): mFounded(false){}
 	
 	/*virtual*/ bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)
 	{
@@ -202,7 +202,7 @@ bool LLLandmarkActions::landmarkAlreadyExists()
 //static
 bool LLLandmarkActions::hasParcelLandmark()
 {
-	LLFistAgentParcelLandmark get_first_agent_landmark;
+	LLFirstAgentParcelLandmark get_first_agent_landmark;
 	LLInventoryModel::cat_array_t cats;
 	LLInventoryModel::item_array_t items;
 	fetch_landmarks(cats, items, get_first_agent_landmark);
diff --git a/indra/newview/lllandmarkactions.h b/indra/newview/lllandmarkactions.h
index 312426cab01..1c524c820c9 100644
--- a/indra/newview/lllandmarkactions.h
+++ b/indra/newview/lllandmarkactions.h
@@ -55,7 +55,7 @@ class LLLandmarkActions
 	static bool landmarkAlreadyExists();
 	
 	/**
-	 * @brief Checks whether landmark exists for current parcel.
+	 * @brief Checks whether landmark exists for current agent parcel.
 	 */
 	static bool hasParcelLandmark();
 
-- 
GitLab


From 24179cbcc609953ec05c75bcdad5b042e1d62e92 Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Tue, 3 Nov 2009 14:25:08 +0200
Subject: [PATCH 043/306] fixed normal EXT-1131 Message Well counts
 non-interactive notifications however chiclet-window is opened

--HG--
branch : product-engine
---
 indra/newview/llchiclet.cpp | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index a854eb852fe..1049348684f 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -830,13 +830,21 @@ LLChicletPanel::~LLChicletPanel()
 void im_chiclet_callback(LLChicletPanel* panel, const LLSD& data){
 	
 	LLUUID session_id = data["session_id"].asUUID();
+	S32 unread = data["num_unread"].asInteger();
+
+	LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);
+	if (im_floater && im_floater->getVisible())
+	{
+		unread = 0;
+	}
+
 	std::list<LLChiclet*> chiclets = LLIMChiclet::sFindChicletsSignal(session_id);
 	std::list<LLChiclet *>::iterator iter;
 	for (iter = chiclets.begin(); iter != chiclets.end(); iter++) {
 		LLChiclet* chiclet = *iter;
 		if (chiclet != NULL)
 		{
-			chiclet->setCounter(data["num_unread"].asInteger());
+			chiclet->setCounter(unread);
 		}
 	    else
 	    {
-- 
GitLab


From 37742cbbf242abcd9f70a8a179ec740e6867e121 Mon Sep 17 00:00:00 2001
From: Eugene Kondrashev <ekondrashev@productengine.com>
Date: Tue, 3 Nov 2009 14:35:00 +0200
Subject: [PATCH 044/306] Added double click avatar list item callback showing
 new IM session

--HG--
branch : product-engine
---
 indra/newview/llparticipantlist.cpp | 13 +++++++++++++
 indra/newview/llparticipantlist.h   |  2 ++
 2 files changed, 15 insertions(+)

diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index 918c7989eda..133f13aab84 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -34,6 +34,8 @@
 
 // common includes
 #include "lltrans.h"
+#include "llavataractions.h"
+#include "llagent.h"
 
 #include "llparticipantlist.h"
 #include "llavatarlist.h"
@@ -53,6 +55,7 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
 	mSpeakerMgr->addListener(mSpeakerClearListener, "clear");
 
 	mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
+	mAvatarList->setDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList));
 
 	//Lets fill avatarList with existing speakers
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
@@ -67,6 +70,16 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
 	mAvatarList->sortByName();
 }
 
+void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list)
+{
+	LLUUID clicked_id = list->getSelectedUUID();
+
+	if (clicked_id.isNull() || clicked_id == gAgent.getID())
+		return;
+	
+	LLAvatarActions::startIM(clicked_id);
+}
+
 LLParticipantList::~LLParticipantList()
 {
 	delete mSpeakerAddListener;
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index 68aae0aee54..a3a55303c01 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -74,6 +74,8 @@ class LLParticipantList
 			LLAvatarList* mAvatarList;
 		};
 	private:
+		void onAvatarListDoubleClicked(LLAvatarList* list);
+
 		LLSpeakerMgr*		mSpeakerMgr;
 		LLAvatarList* 		mAvatarList;
 
-- 
GitLab


From a7d82c0d0e02f53929e5a5574f6efcb7db91b5af Mon Sep 17 00:00:00 2001
From: Sergey Borushevsky <sborushevsky@productengine.com>
Date: Tue, 3 Nov 2009 14:54:43 +0200
Subject: [PATCH 045/306] Temporary fix for normal task EXT-1510 (Implement
 left side sticking control panels for IM floaters) Disabled resizing of left
 side control panel to not occupy space for chat history on the right side.
 Changed follows properties for icon and buttons in panel_im_control_panel,
 icon sticked to top, buttons to bottom.

--HG--
branch : product-engine
---
 .../newview/skins/default/xui/en/floater_im_session.xml  | 2 +-
 .../skins/default/xui/en/panel_im_control_panel.xml      | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index c314fce42dc..c4324b425a9 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -28,10 +28,10 @@
       name="panel_im_control_panel"
       layout="topleft"
       top_delta="-3"
-      width="146"
       height="305"
       follows="left"
       label="IM Control Panel"
+      auto_resize="false"
       user_resize="false" />
     <layout_panel height="305"
                   width="200"
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index a9396661e0a..04ee1a19cb1 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -5,26 +5,31 @@
        border="false">
 
   <avatar_icon name="avatar_icon"
+               follows="left|top"
                width="96"
                height="96" />
 
   <button name="view_profile_btn"
+          follows="left|bottom"
           label="View Profile"
           left_delta="3"
           width="125"
 		  height="20" />
 
   <button name="add_friend_btn"
+          follows="left|bottom"
           label="Add Friend"
           width="125"
           height="20" />
 
   <button name="call_btn"
+          follows="left|bottom"
           label="Call"
           width="125"
           height="20" />
 
     <button
+     follows="left|bottom"
      height="20"
      label="End Call"
      name="end_call_btn"
@@ -33,6 +38,7 @@
 
   <button
 	 enabled="false"
+     follows="left|bottom"
      name="voice_ctrls_btn"
      label="Open Voice Controls"
      width="125"
@@ -40,14 +46,17 @@
      visible="false"/>
 
   <button name="teleport_btn"
+          follows="left|bottom"
           label="Teleport"
           width="125"
           height="20" />
   <button name="share_btn"
+          follows="left|bottom"
           label="Share"
           width="125"
           height="20" />
   <button name="pay_btn"
+          follows="left|bottom"
           label="Pay"
           width="125"
           height="20" />
-- 
GitLab


From 4fa120feb419f7ab99998466623696584b7b282d Mon Sep 17 00:00:00 2001
From: Dmitry Zaporozhan <dzaporozhan@productengine.com>
Date: Tue, 3 Nov 2009 14:58:31 +0200
Subject: [PATCH 046/306] Fixed low bug EXT-1620 - Collapsed accordion panels
 should expand while filtering if they contain matched items.

--HG--
branch : product-engine
---
 indra/newview/llavatarlist.cpp  | 35 +++++++++++++++++++++
 indra/newview/llavatarlist.h    |  7 +++++
 indra/newview/llpanelpeople.cpp | 54 +++++++++++++++++++++++++++++++++
 indra/newview/llpanelpeople.h   |  6 ++++
 4 files changed, 102 insertions(+)

diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 7b2dc02864f..8609ba8b1c6 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -239,11 +239,46 @@ void LLAvatarList::refresh()
 	bool dirty = add_limit_exceeded || (have_filter && !have_names);
 	setDirty(dirty);
 
+	// Refreshed all items, lets send refresh_complete signal.
+	if(!dirty)
+	{
+		std::vector<LLSD> cur_values;
+		getValues(cur_values);
+		mRefreshCompleteSignal(this, LLSD((S32)cur_values.size()));
+	}
+
 	// Commit if we've added/removed items.
 	if (modified)
 		onCommit();
 }
 
+bool LLAvatarList::filterHasMatches()
+{
+	uuid_vector_t values = getIDs();
+
+	for (uuid_vector_t::const_iterator it=values.begin(); it != values.end(); it++)
+	{
+		std::string name;
+		const LLUUID& buddy_id = *it;
+		BOOL have_name = gCacheName->getFullName(buddy_id, name);
+
+		// If name has not been loaded yet we consider it as a match.
+		// When the name will be loaded the filter will be applied again(in refresh()).
+
+		if (have_name && !findInsensitive(name, mNameFilter))
+		{
+			continue;
+		}
+
+		return true;
+	}
+	return false;
+}
+
+boost::signals2::connection LLAvatarList::setRefreshCompleteCallback(const commit_signal_t::slot_type& cb)
+{
+	return mRefreshCompleteSignal.connect(cb);
+}
 
 void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos)
 {
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 51d3760d393..195d9e5b550 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -82,6 +82,11 @@ class LLAvatarList : public LLFlatListView
 	const std::string getIconParamName() const{return mIconParamName;}
 	virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 
+	// Return true if filter has at least one match.
+	bool filterHasMatches();
+
+	boost::signals2::connection setRefreshCompleteCallback(const commit_signal_t::slot_type& cb);
+
 protected:
 	void refresh();
 
@@ -107,6 +112,8 @@ class LLAvatarList : public LLFlatListView
 	uuid_vector_t			mIDs;
 
 	LLAvatarListItem::ContextMenu* mContextMenu;
+
+	commit_signal_t mRefreshCompleteSignal;
 };
 
 /** Abstract comparator for avatar items */
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 0d16b0a041b..2f8fae0f5de 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -42,6 +42,7 @@
 #include "llpanelpeople.h"
 
 // newview
+#include "llaccordionctrl.h"
 #include "llaccordionctrltab.h"
 #include "llagent.h"
 #include "llavataractions.h"
@@ -516,6 +517,9 @@ BOOL LLPanelPeople::postBuild()
 	// call this method in case some list is empty and buttons can be in inconsistent state
 	updateButtons();
 
+	mOnlineFriendList->setRefreshCompleteCallback(boost::bind(&LLPanelPeople::onFriendListRefreshComplete, this, _1, _2));
+	mAllFriendList->setRefreshCompleteCallback(boost::bind(&LLPanelPeople::onFriendListRefreshComplete, this, _1, _2));
+
 	return TRUE;
 }
 
@@ -560,6 +564,8 @@ void LLPanelPeople::updateFriendList()
 
 	mOnlineFriendList->setDirty();
 	mAllFriendList->setDirty();
+
+	showFriendsAccordionsIfNeeded();
 }
 
 void LLPanelPeople::updateNearbyList()
@@ -813,6 +819,8 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string)
 	mAllFriendList->setNameFilter(mFilterSubString);
 	mRecentList->setNameFilter(mFilterSubString);
 	mGroupList->setNameFilter(mFilterSubString);
+
+	showFriendsAccordionsIfNeeded();
 }
 
 void LLPanelPeople::onTabSelected(const LLSD& param)
@@ -1125,3 +1133,49 @@ void	LLPanelPeople::onOpen(const LLSD& key)
 	else
 		reSelectedCurrentTab();
 }
+
+void LLPanelPeople::showAccordion(const std::string name, bool show)
+{
+	if(name.empty())
+	{
+		llwarns << "No name provided" << llendl;
+		return;
+	}
+
+	LLAccordionCtrlTab* tab = getChild<LLAccordionCtrlTab>(name);
+	tab->setVisible(show);
+	if(show)
+	{
+		// expand accordion
+		tab->changeOpenClose(false);
+	}
+}
+
+void LLPanelPeople::showFriendsAccordionsIfNeeded()
+{
+	if(FRIENDS_TAB_NAME == getActiveTabName())
+	{
+		// Expand and show accordions if needed, else - hide them
+		showAccordion("tab_online", mOnlineFriendList->filterHasMatches());
+		showAccordion("tab_all", mAllFriendList->filterHasMatches());
+
+		// Rearrange accordions
+		LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion");
+		accordion->arrange();
+	}
+}
+
+void LLPanelPeople::onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param)
+{
+	if(ctrl == mOnlineFriendList)
+	{
+		showAccordion("tab_online", param.asInteger());
+	}
+	else if(ctrl == mAllFriendList)
+	{
+		showAccordion("tab_all", param.asInteger());
+	}
+
+	LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion");
+	accordion->arrange();
+}
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index dc0aaeb70f1..9bf9befe906 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -124,6 +124,12 @@ class LLPanelPeople : public LLPanel
 
 	void					onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAvatarList* avatar_list);
 
+	void					showAccordion(const std::string name, bool show);
+
+	void					showFriendsAccordionsIfNeeded();
+
+	void					onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param);
+
 	LLFilterEditor*			mFilterEditor;
 	LLTabContainer*			mTabContainer;
 	LLAvatarList*			mOnlineFriendList;
-- 
GitLab


From 1e4877244d34d2c31459cc42a351736c6494e99e Mon Sep 17 00:00:00 2001
From: "lynx@eniac45.lindenlab.com" <lynx@eniac45.lindenlab.com>
Date: Tue, 3 Nov 2009 06:39:21 -0800
Subject: [PATCH 047/306] Trivial whitespace change to test mercurial process
 with tofu and soft.

---
 indra/llwindow/llwindowsdl.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 9f03c8f6956..1df2b5eba84 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -59,7 +59,7 @@ extern "C" {
 
 #if LL_LINUX || LL_SOLARIS
 // not necessarily available on random SDL platforms, so #if LL_LINUX
-// for execv(), waitpid(), fork()
+// for execv(), waitpid(), fork() 
 # include <unistd.h>
 # include <sys/types.h>
 # include <sys/wait.h>
-- 
GitLab


From efa9c7a5ba1fa1facaa15d22418e9d4199c3f773 Mon Sep 17 00:00:00 2001
From: Andrew Polunin <apolunin@productengine.com>
Date: Tue, 3 Nov 2009 17:26:57 +0200
Subject: [PATCH 048/306] fixed bug EXT-1480 [BSI] Cannot give invenotry offers
 by dragging an item to profile on the sidebar

--HG--
branch : product-engine
---
 indra/newview/llpanelprofileview.h | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/indra/newview/llpanelprofileview.h b/indra/newview/llpanelprofileview.h
index b59d1d42f31..45c2fc116e7 100644
--- a/indra/newview/llpanelprofileview.h
+++ b/indra/newview/llpanelprofileview.h
@@ -36,6 +36,8 @@
 #include "llpanel.h"
 #include "llpanelprofile.h"
 #include "llavatarpropertiesprocessor.h"
+#include "llagent.h"
+#include "lltooldraganddrop.h"
 
 class LLPanelProfile;
 class LLPanelProfileTab;
@@ -64,6 +66,18 @@ class LLPanelProfileView : public LLPanelProfile
 
 	/*virtual*/ void togglePanel(LLPanel* panel);
 
+	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
+						   BOOL drop, EDragAndDropType cargo_type,
+						   void *cargo_data, EAcceptance *accept,
+						   std::string& tooltip_msg)
+	{
+		LLToolDragAndDrop::handleGiveDragAndDrop(getAvatarId(), gAgent.getSessionID(), drop,
+				 cargo_type, cargo_data, accept);
+
+		return TRUE;
+	}
+
+
 protected:
 
 	void onBackBtnClick();
-- 
GitLab


From f1d834c50d7155102a6482e1c4e4205ddca65be2 Mon Sep 17 00:00:00 2001
From: Yuri Chebotarev <ychebotarev@productengine.com>
Date: Tue, 3 Nov 2009 17:31:26 +0200
Subject: [PATCH 049/306] fix for normal task EXT-239 Save chat window state
 and position between sessions

--HG--
branch : product-engine
---
 indra/llui/llfloater.cpp       |  6 ++++++
 indra/llui/llfloater.h         |  3 +++
 indra/llui/llfloaterreg.cpp    |  3 +--
 indra/newview/llnearbychat.cpp | 37 +++++++++++++++++++++++++---------
 indra/newview/llnearbychat.h   |  7 +++----
 5 files changed, 41 insertions(+), 15 deletions(-)

diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 8c72b079eee..99aebbcb308 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -772,6 +772,12 @@ LLMultiFloater* LLFloater::getHost()
 	return (LLMultiFloater*)mHostHandle.get(); 
 }
 
+void    LLFloater::applySavedVariables()
+{
+	applyRectControl();
+	applyDockState();
+}
+
 void LLFloater::applyRectControl()
 {
 	if (mRectControl.size() > 1)
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index ef0d06a58ea..95c8dd84f65 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -280,6 +280,9 @@ friend class LLMultiFloater;
 protected:
 
 	void			setRectControl(const std::string& rectname) { mRectControl = rectname; };
+
+	virtual void    applySavedVariables();
+
 	void			applyRectControl();
 	void			applyDockState();
 	void			storeRectControl();
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index aca4dc56eed..f8e07913fbf 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -134,8 +134,7 @@ 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;
 				res->setInstanceName(name);
-				res->applyRectControl(); // Can't apply rect control until setting instance name
-				res->applyDockState();//same...
+				res->applySavedVariables(); // Can't apply rect and dock state until setting instance name
 				if (res->mAutoTile && !res->getHost() && index > 0)
 				{
 					const LLRect& cur_rect = res->getRect();
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 12638ab8551..81d033d7f98 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -97,14 +97,39 @@ BOOL LLNearbyChat::postBuild()
 	if (getDockControl() == NULL)
 	{
 		setDockControl(new LLDockControl(
-				LLBottomTray::getInstance()->getNearbyChatBar(), this,
-				getDockTongue(), LLDockControl::LEFT, boost::bind(&LLNearbyChat::getAllowedRect, this, _1)));
+			LLBottomTray::getInstance()->getNearbyChatBar(), this,
+			getDockTongue(), LLDockControl::LEFT, boost::bind(&LLNearbyChat::getAllowedRect, this, _1)));
 	}
 
 	return true;
 }
 
 
+void    LLNearbyChat::applySavedVariables()
+{
+
+	if (mRectControl.size() > 1)
+	{
+		const LLRect& rect = LLUI::sSettingGroups["floater"]->getRect(mRectControl);
+		reshape(rect.getWidth(), rect.getHeight());
+		setRect(rect);
+	}
+
+
+	if(!LLUI::sSettingGroups["floater"]->controlExists(mDocStateControl))
+	{
+		setDocked(true);
+	}
+	else
+	{
+		if (mDocStateControl.size() > 1)
+		{
+			bool dockState = LLUI::sSettingGroups["floater"]->getBOOL(mDocStateControl);
+			setDocked(dockState);
+		}
+	}
+}
+
 LLColor4 nearbychat_get_text_color(const LLChat& chat)
 {
 	LLColor4 text_color;
@@ -265,11 +290,5 @@ void LLNearbyChat::getAllowedRect(LLRect& rect)
 {
 	rect = gViewerWindow->getWorldViewRect();
 }
-void LLNearbyChat::setVisible	(BOOL visible)
-{
-	LLDockableFloater::setVisible(visible);
-}
-void LLNearbyChat::toggleWindow()
-{
-}
+
 
diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h
index 20cbf7537d6..cb4654654a9 100644
--- a/indra/newview/llnearbychat.h
+++ b/indra/newview/llnearbychat.h
@@ -52,16 +52,15 @@ class LLNearbyChat: public LLDockableFloater
 	void	onNearbyChatContextMenuItemClicked(const LLSD& userdata);
 	bool	onNearbyChatCheckContextMenuItem(const LLSD& userdata);
 
-	void	setDocked			(bool docked, bool pop_on_undock);
-	void	toggleWindow		();
+	void	setDocked			(bool docked, bool pop_on_undock = true);
 
 	/*virtual*/ void	onOpen	(const LLSD& key);
 
-	virtual void setVisible		(BOOL visible);
-
 	virtual void setRect		(const LLRect &rect);
 
 private:
+	virtual void    applySavedVariables();
+
 	void	getAllowedRect		(LLRect& rect);
 
 	void	onNearbySpeakers	();
-- 
GitLab


From 3483f9e0d04f7a956921b9ac60e85b4371f97322 Mon Sep 17 00:00:00 2001
From: Mike Antipov <mantipov@productengine.com>
Date: Tue, 3 Nov 2009 17:40:26 +0200
Subject: [PATCH 050/306] Fixed major bug EXT-2098 (Unable to delete landmarks)

The reason of this bug is that moved (removed to trash) Inventory Item exists in Panel which has no Trash folder
 in View hierarchy (Favorites & Landmarks accordions).

I have updated LLInventoryPanel::modelChanged for case Inventory structure is changed:
- added condition to verify if moved item is in Inventory Panel having content of some Inventory Folder
 and is not moved into the same folder. In this case appropriate View is removed from the Panel hierarchy.

--HG--
branch : product-engine
---
 indra/newview/llfloaterinventory.cpp | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp
index a47916b7d7b..274c2234de3 100644
--- a/indra/newview/llfloaterinventory.cpp
+++ b/indra/newview/llfloaterinventory.cpp
@@ -1447,6 +1447,19 @@ void LLInventoryPanel::modelChanged(U32 mask)
 							view_item->getParentFolder()->extractItem(view_item);
 							view_item->addToFolder(new_parent, mFolders);
 						}
+/*
+						 on the other side in case Inventory Panel has content of the any folder
+						 it is possible that item moved to some folder which is absent in current
+						 Panel. For ex. removing item (via moving to trash).
+						 In this case we need to check if new parent is other then inventory start folder
+						 and simply remove its View from the hierarchy.
+						 See details in EXT-2098.
+*/
+						// So, let check if item was moved into folder out of this Inventory Panel.
+						else if (mStartFolderID.notNull() && NULL == new_parent && model_item->getParentUUID() != mStartFolderID)
+						{
+							view_item->getParentFolder()->extractItem(view_item);
+						}
 					}
 				}
 				else
-- 
GitLab


From 5ea6474aebb7f81ce797de1449863bac1543fb03 Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Tue, 3 Nov 2009 17:47:20 +0200
Subject: [PATCH 051/306] Implemented low task EXT-1787 (Implement sorting of
 participant list)

--HG--
branch : product-engine
---
 indra/newview/llpanelimcontrolpanel.cpp | 14 ++++
 indra/newview/llpanelimcontrolpanel.h   |  1 +
 indra/newview/llparticipantlist.cpp     | 96 +++++++++++++++++--------
 indra/newview/llparticipantlist.h       | 56 +++++++++++----
 4 files changed, 121 insertions(+), 46 deletions(-)

diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index b5e0cdccc0c..21e88b6d07c 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -199,6 +199,20 @@ void LLPanelGroupControlPanel::onGroupInfoButtonClicked()
 	LLGroupActions::show(mGroupID);
 }
 
+void LLPanelGroupControlPanel::onSortMenuItemClicked(const LLSD& userdata)
+{
+	// TODO: Check this code when when sort order menu will be added. (EM)
+	if (false && !mParticipantList)
+		return;
+
+	std::string chosen_item = userdata.asString();
+
+	if (chosen_item == "sort_name")
+	{
+		mParticipantList->setSortOrder(LLParticipantList::E_SORT_BY_NAME);
+	}
+
+}
 
 void LLPanelGroupControlPanel::setSessionId(const LLUUID& session_id)
 {
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index b60ddc1d8d8..fa101f42803 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -99,6 +99,7 @@ class LLPanelGroupControlPanel : public LLPanelChatControlPanel
 
 private:
 	void onGroupInfoButtonClicked();
+	void onSortMenuItemClicked(const LLSD& userdata);
 };
 
 class LLPanelAdHocControlPanel : public LLPanelGroupControlPanel
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index 133f13aab84..9450bee3153 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -44,15 +44,15 @@
 //LLParticipantList retrieves add, clear and remove events and updates view accordingly 
 LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list):
 	mSpeakerMgr(data_source),
-	mAvatarList(avatar_list)
+	mAvatarList(avatar_list),
+	mSpeakerAddListener(*this),
+	mSpeakerRemoveListener(*this),
+	mSpeakerClearListener(*this),
+	mSortOrder(E_SORT_BY_NAME)
 {
-	mSpeakerAddListener = new SpeakerAddListener(mAvatarList);
-	mSpeakerRemoveListener = new SpeakerRemoveListener(mAvatarList);
-	mSpeakerClearListener = new SpeakerClearListener(mAvatarList);
-
-	mSpeakerMgr->addListener(mSpeakerAddListener, "add");
-	mSpeakerMgr->addListener(mSpeakerRemoveListener, "remove");
-	mSpeakerMgr->addListener(mSpeakerClearListener, "clear");
+	mSpeakerMgr->addListener(&mSpeakerAddListener, "add");
+	mSpeakerMgr->addListener(&mSpeakerRemoveListener, "remove");
+	mSpeakerMgr->addListener(&mSpeakerClearListener, "clear");
 
 	mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
 	mAvatarList->setDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList));
@@ -66,8 +66,11 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
 	{
 		group_members.push_back((*it)->mID);
 	}
-	mAvatarList->setDirty();
-	mAvatarList->sortByName();
+	sort();
+}
+
+LLParticipantList::~LLParticipantList()
+{
 }
 
 void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list)
@@ -80,20 +83,16 @@ void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list)
 	LLAvatarActions::startIM(clicked_id);
 }
 
-LLParticipantList::~LLParticipantList()
+void LLParticipantList::setSortOrder(EParticipantSortOrder order)
 {
-	delete mSpeakerAddListener;
-	delete mSpeakerRemoveListener;
-	delete mSpeakerClearListener;
-	mSpeakerAddListener = NULL;
-	mSpeakerRemoveListener = NULL;
-	mSpeakerClearListener = NULL;
+	if ( mSortOrder != order )
+	{
+		mSortOrder = order;
+		sort();
+	}
 }
 
-//
-// LLParticipantList::SpeakerAddListener
-//
-bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+bool LLParticipantList::onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
 	LLUUID uu_id = event->getValue().asUUID();
@@ -106,15 +105,11 @@ bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::L
 	}
 
 	group_members.push_back(uu_id);
-	mAvatarList->setDirty();
-	mAvatarList->sortByName();
+	sort();
 	return true;
 }
 
-//
-// LLParticipantList::SpeakerRemoveListener
-//
-bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+bool LLParticipantList::onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
 	LLAvatarList::uuid_vector_t::iterator pos = std::find(group_members.begin(), group_members.end(), event->getValue().asUUID());
@@ -126,10 +121,7 @@ bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents
 	return true;
 }
 
-//
-// LLParticipantList::SpeakerClearListener
-//
-bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+bool LLParticipantList::onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
 	group_members.clear();
@@ -137,3 +129,45 @@ bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents:
 	return true;
 }
 
+void LLParticipantList::sort()
+{
+	if ( !mAvatarList )
+		return;
+
+	// Mark AvatarList as dirty one
+	mAvatarList->setDirty();
+
+	// TODO: Implement more sorting orders after specs updating (EM)
+	switch ( mSortOrder ) {
+	case E_SORT_BY_NAME :
+		mAvatarList->sortByName();
+		break;
+	default :
+		llwarns << "Unrecognized sort order for " << mAvatarList->getName() << llendl;
+		return;
+	}
+}
+
+//
+// LLParticipantList::SpeakerAddListener
+//
+bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+	return mParent.onAddItemEvent(event, userdata);
+}
+
+//
+// LLParticipantList::SpeakerRemoveListener
+//
+bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+	return mParent.onRemoveItemEvent(event, userdata);
+}
+
+//
+// LLParticipantList::SpeakerClearListener
+//
+bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+	return mParent.onClearListEvent(event, userdata);
+}
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index a3a55303c01..04d9e292568 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -38,48 +38,74 @@ class LLAvatarList;
 
 class LLParticipantList
 {
+	LOG_CLASS(LLParticipantList);
 	public:
 		LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list);
 		~LLParticipantList();
 
+		typedef enum e_participant_sort_oder {
+			E_SORT_BY_NAME = 0,
+		} EParticipantSortOrder;
+
+		/**
+		  * Set and sort Avatarlist by given order
+		  */
+		void setSortOrder(EParticipantSortOrder order = E_SORT_BY_NAME);
+
 	protected:
+		/**
+		 * LLSpeakerMgr event handlers
+		 */
+		bool onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+		bool onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+		bool onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+
+		/**
+		 * Sorts the Avatarlist by stored order
+		 */
+		void sort();
 
 		//List of listeners implementing LLOldEvents::LLSimpleListener.
 		//There is no way to handle all the events in one listener as LLSpeakerMgr registers listeners in such a way
 		//that one listener can handle only one type of event
-		class SpeakerAddListener : public LLOldEvents::LLSimpleListener
+		class BaseSpeakerListner : public LLOldEvents::LLSimpleListener
 		{
 		public:
-			SpeakerAddListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {}
+			BaseSpeakerListner(LLParticipantList& parent) : mParent(parent) {}
+		protected:
+			LLParticipantList& mParent;
+		};
 
+		class SpeakerAddListener : public BaseSpeakerListner
+		{
+		public:
+			SpeakerAddListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-			LLAvatarList* mAvatarList;
 		};
 
-		class SpeakerRemoveListener : public LLOldEvents::LLSimpleListener
+		class SpeakerRemoveListener : public BaseSpeakerListner
 		{
 		public:
-			SpeakerRemoveListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {}
-
+			SpeakerRemoveListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-			LLAvatarList* mAvatarList;
 		};
 
-		class SpeakerClearListener : public LLOldEvents::LLSimpleListener
+		class SpeakerClearListener : public BaseSpeakerListner
 		{
 		public:
-			SpeakerClearListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {}
-
+			SpeakerClearListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-			LLAvatarList* mAvatarList;
 		};
+
 	private:
 		void onAvatarListDoubleClicked(LLAvatarList* list);
 
 		LLSpeakerMgr*		mSpeakerMgr;
-		LLAvatarList* 		mAvatarList;
+		LLAvatarList*		mAvatarList;
+
+		SpeakerAddListener		mSpeakerAddListener;
+		SpeakerRemoveListener	mSpeakerRemoveListener;
+		SpeakerClearListener	mSpeakerClearListener;
 
-		SpeakerAddListener* mSpeakerAddListener;
-		SpeakerRemoveListener* mSpeakerRemoveListener;
-		SpeakerClearListener* mSpeakerClearListener;
+		EParticipantSortOrder	mSortOrder;
 };
-- 
GitLab


From 4d88830a0ce6d097c02b743ad32be01ec31f99f0 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 3 Nov 2009 16:30:22 +0000
Subject: [PATCH 052/306] trivial whitespace change #2

---
 indra/llwindow/llwindowsdl.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 1df2b5eba84..cfc078ba897 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -33,6 +33,8 @@
 
 #if LL_SDL
 
+// 2
+
 #include "linden_common.h"
 
 #include "llwindowsdl.h"
-- 
GitLab


From 3c59a22bcfd7f676d119306b976a96621ee9b205 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 3 Nov 2009 16:30:40 +0000
Subject: [PATCH 053/306] trivial whitespace change #1

---
 indra/llwindow/llwindowsdl.cpp | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 1df2b5eba84..d57f9536569 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -31,6 +31,11 @@
  * $/LicenseInfo$
  */
 
+// 1
+
+
+
+
 #if LL_SDL
 
 #include "linden_common.h"
-- 
GitLab


From d37dcfd340777497538fafb7b2513f46cbfe14c1 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 3 Nov 2009 16:31:04 +0000
Subject: [PATCH 054/306] trivial comment change #3

---
 indra/llwindow/llwindowsdl.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index d57f9536569..aee161bd1d8 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -40,6 +40,8 @@
 
 #include "linden_common.h"
 
+// 3
+
 #include "llwindowsdl.h"
 
 #include "llwindowcallbacks.h"
-- 
GitLab


From fb8fa98367326141cee45fd2cfcc66f133d0ff77 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 3 Nov 2009 16:37:43 +0000
Subject: [PATCH 055/306] Backed out changeset ba150ce614d0

---
 indra/llwindow/llwindowsdl.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 1df2b5eba84..9f03c8f6956 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -59,7 +59,7 @@ extern "C" {
 
 #if LL_LINUX || LL_SOLARIS
 // not necessarily available on random SDL platforms, so #if LL_LINUX
-// for execv(), waitpid(), fork() 
+// for execv(), waitpid(), fork()
 # include <unistd.h>
 # include <sys/types.h>
 # include <sys/wait.h>
-- 
GitLab


From ad5f5299fb9ca858372e3d33c2fa8b28d9c164ac Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 3 Nov 2009 16:37:57 +0000
Subject: [PATCH 056/306] Backed out changeset 776703433218

---
 indra/llwindow/llwindowsdl.cpp | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index d57f9536569..1df2b5eba84 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -31,11 +31,6 @@
  * $/LicenseInfo$
  */
 
-// 1
-
-
-
-
 #if LL_SDL
 
 #include "linden_common.h"
-- 
GitLab


From 29135c8154e31591af1825beb58c37f4966339af Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 3 Nov 2009 16:38:06 +0000
Subject: [PATCH 057/306] Backed out changeset 30592b61e452

---
 indra/llwindow/llwindowsdl.cpp | 2 --
 1 file changed, 2 deletions(-)

diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index aee161bd1d8..d57f9536569 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -40,8 +40,6 @@
 
 #include "linden_common.h"
 
-// 3
-
 #include "llwindowsdl.h"
 
 #include "llwindowcallbacks.h"
-- 
GitLab


From 27257fa210626527a6b0febfa61f141e55d2d813 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 3 Nov 2009 16:38:20 +0000
Subject: [PATCH 058/306] Backed out changeset 8bb55c0994a2

---
 indra/llwindow/llwindowsdl.cpp | 2 --
 1 file changed, 2 deletions(-)

diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index cfc078ba897..1df2b5eba84 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -33,8 +33,6 @@
 
 #if LL_SDL
 
-// 2
-
 #include "linden_common.h"
 
 #include "llwindowsdl.h"
-- 
GitLab


From 3cb64a8fdf5d7c973bcd28a80c9bb3ddcd3dcd30 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 3 Nov 2009 16:39:53 +0000
Subject: [PATCH 059/306] Backed out changeset 8d2ba8bb62a5

---
 indra/llwindow/llwindowsdl.cpp | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 145785ad694..cfc078ba897 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -31,19 +31,12 @@
  * $/LicenseInfo$
  */
 
-// 1
-
-
-
-
 #if LL_SDL
 
 // 2
 
 #include "linden_common.h"
 
-// 3
-
 #include "llwindowsdl.h"
 
 #include "llwindowcallbacks.h"
-- 
GitLab


From 22e6c3f952428750e68d08ed8788be37f20498a1 Mon Sep 17 00:00:00 2001
From: "Eric M. Tulla (BigPapi)" <tulla@lindenlab.com>
Date: Tue, 3 Nov 2009 11:45:54 -0500
Subject: [PATCH 060/306] Added .DS_Store to .hgignore and removed the checked
 in version from the repos. It's an OSX image cache file that was accidentally
 added to the repos. -Reviewed by brad.

---
 .hgignore | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.hgignore b/.hgignore
index 454be00dbff..cff2a14b940 100644
--- a/.hgignore
+++ b/.hgignore
@@ -7,6 +7,8 @@ syntax: glob
 # Emacs temp files
 *~
 .*.swp
+#OSX image cache file
+*.DS_Store
 LICENSES
 indra/.distcc
 indra/build-darwin-*
-- 
GitLab


From ed40da679530329fce0e7505dc90a898a10d7d86 Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Tue, 3 Nov 2009 19:13:36 +0200
Subject: [PATCH 061/306] Implemented sub-task EXT-1452 '"places" title should
 not be on this panel': - Made LLPlaceInfo a base class for two derived
 LLPlaceProfile and LLLandmarkInfo classes each representing a separate panel
 with its own XUI layout. - Fixed broken title change for Place Profile and
 Landmark cases.

--HG--
branch : product-engine
---
 indra/newview/CMakeLists.txt                  |   4 +
 indra/newview/llpanellandmarkinfo.cpp         | 437 ++++++++
 indra/newview/llpanellandmarkinfo.h           |  85 ++
 indra/newview/llpanelplaceinfo.cpp            | 931 +----------------
 indra/newview/llpanelplaceinfo.h              | 146 +--
 indra/newview/llpanelplaceprofile.cpp         | 541 ++++++++++
 indra/newview/llpanelplaceprofile.h           | 114 ++
 indra/newview/llpanelplaces.cpp               | 227 ++--
 indra/newview/llpanelplaces.h                 |  11 +-
 indra/newview/llviewermessage.cpp             |   6 +-
 .../default/xui/en/panel_landmark_info.xml    | 257 +++++
 .../default/xui/en/panel_place_profile.xml    | 979 ++++++++++++++++++
 .../skins/default/xui/en/panel_places.xml     |  18 +-
 13 files changed, 2647 insertions(+), 1109 deletions(-)
 create mode 100644 indra/newview/llpanellandmarkinfo.cpp
 create mode 100644 indra/newview/llpanellandmarkinfo.h
 create mode 100644 indra/newview/llpanelplaceprofile.cpp
 create mode 100644 indra/newview/llpanelplaceprofile.h
 create mode 100644 indra/newview/skins/default/xui/en/panel_landmark_info.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_place_profile.xml

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 0133d2222d9..be736c57c87 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -316,6 +316,7 @@ set(viewer_SOURCE_FILES
     llpanelinventory.cpp
     llpanelland.cpp
     llpanellandaudio.cpp
+    llpanellandmarkinfo.cpp
     llpanellandmarks.cpp
     llpanellandmedia.cpp
     llpanellogin.cpp
@@ -334,6 +335,7 @@ set(viewer_SOURCE_FILES
     llpanelpicks.cpp
     llpanelplace.cpp
     llpanelplaceinfo.cpp
+    llpanelplaceprofile.cpp
     llpanelplaces.cpp
     llpanelplacestab.cpp
     llpanelprimmediacontrols.cpp
@@ -794,6 +796,7 @@ set(viewer_HEADER_FILES
     llpanelinventory.h
     llpanelland.h
     llpanellandaudio.h
+    llpanellandmarkinfo.h
     llpanellandmarks.h
     llpanellandmedia.h
     llpanellogin.h
@@ -812,6 +815,7 @@ set(viewer_HEADER_FILES
     llpanelpicks.h
     llpanelplace.h
     llpanelplaceinfo.h
+    llpanelplaceprofile.h
     llpanelplaces.h
     llpanelplacestab.h
     llpanelprimmediacontrols.h
diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
new file mode 100644
index 00000000000..1152ca68736
--- /dev/null
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -0,0 +1,437 @@
+/**
+ * @file llpanellandmarkinfo.cpp
+ * @brief Displays landmark info in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanellandmarkinfo.h"
+
+#include "llinventory.h"
+
+#include "llcombobox.h"
+#include "lllineeditor.h"
+#include "lltextbox.h"
+#include "lltexteditor.h"
+#include "lltrans.h"
+
+#include "llagent.h"
+#include "llagentui.h"
+#include "llinventorymodel.h"
+#include "lllandmarkactions.h"
+#include "llviewerinventory.h"
+#include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
+
+//----------------------------------------------------------------------------
+// Aux types and methods
+//----------------------------------------------------------------------------
+
+typedef std::pair<LLUUID, std::string> folder_pair_t;
+
+static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right);
+static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats);
+
+static LLRegisterPanelClassWrapper<LLPanelLandmarkInfo> t_landmark_info("panel_landmark_info");
+
+LLPanelLandmarkInfo::LLPanelLandmarkInfo()
+:	LLPanelPlaceInfo()
+{}
+
+// virtual
+LLPanelLandmarkInfo::~LLPanelLandmarkInfo()
+{}
+
+// virtual
+BOOL LLPanelLandmarkInfo::postBuild()
+{
+	LLPanelPlaceInfo::postBuild();
+
+	mOwner = getChild<LLTextBox>("owner");
+	mCreator = getChild<LLTextBox>("creator");
+	mCreated = getChild<LLTextBox>("created");
+
+	mTitleEditor = getChild<LLLineEditor>("title_editor");
+	mNotesEditor = getChild<LLTextEditor>("notes_editor");
+	mFolderCombo = getChild<LLComboBox>("folder_combo");
+
+	return TRUE;
+}
+
+// virtual
+void LLPanelLandmarkInfo::resetLocation()
+{
+	LLPanelPlaceInfo::resetLocation();
+
+	std::string not_available = getString("not_available");
+	mCreator->setText(not_available);
+	mOwner->setText(not_available);
+	mCreated->setText(not_available);
+	mTitleEditor->setText(LLStringUtil::null);
+	mNotesEditor->setText(LLStringUtil::null);
+}
+
+// virtual
+void LLPanelLandmarkInfo::setInfoType(INFO_TYPE type)
+{
+	LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel");
+
+	bool is_info_type_create_landmark = type == CREATE_LANDMARK;
+	bool is_info_type_landmark = type == LANDMARK;
+
+	landmark_info_panel->setVisible(is_info_type_landmark);
+
+	getChild<LLTextBox>("folder_label")->setVisible(is_info_type_create_landmark);
+	mFolderCombo->setVisible(is_info_type_create_landmark);
+
+	switch(type)
+	{
+		case CREATE_LANDMARK:
+			mCurrentTitle = getString("title_create_landmark");
+
+			mTitleEditor->setEnabled(TRUE);
+			mNotesEditor->setEnabled(TRUE);
+		break;
+
+		case LANDMARK:
+		default:
+			mCurrentTitle = getString("title_landmark");
+
+			mTitleEditor->setEnabled(FALSE);
+			mNotesEditor->setEnabled(FALSE);
+		break;
+	}
+
+	populateFoldersList();
+
+	LLPanelPlaceInfo::setInfoType(type);
+}
+
+// virtual
+void LLPanelLandmarkInfo::processParcelInfo(const LLParcelData& parcel_data)
+{
+	LLPanelPlaceInfo::processParcelInfo(parcel_data);
+
+	// HACK: Flag 0x2 == adult region,
+	// Flag 0x1 == mature region, otherwise assume PG
+	std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
+	if (parcel_data.flags & 0x2)
+	{
+		rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
+	}
+	else if (parcel_data.flags & 0x1)
+	{
+		rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
+	}
+
+	mMaturityRatingText->setValue(rating);
+
+	S32 region_x;
+	S32 region_y;
+	S32 region_z;
+
+	// If the region position is zero, grab position from the global
+	if(mPosRegion.isExactlyZero())
+	{
+		region_x = llround(parcel_data.global_x) % REGION_WIDTH_UNITS;
+		region_y = llround(parcel_data.global_y) % REGION_WIDTH_UNITS;
+		region_z = llround(parcel_data.global_z);
+	}
+	else
+	{
+		region_x = llround(mPosRegion.mV[VX]);
+		region_y = llround(mPosRegion.mV[VY]);
+		region_z = llround(mPosRegion.mV[VZ]);
+	}
+
+	if (mInfoType == CREATE_LANDMARK)
+	{
+		if (parcel_data.name.empty())
+		{
+			mTitleEditor->setText(llformat("%s (%d, %d, %d)",
+								  parcel_data.sim_name.c_str(), region_x, region_y, region_z));
+		}
+		else
+		{
+			mTitleEditor->setText(parcel_data.name);
+		}
+
+		std::string desc;
+		LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, gAgent.getPositionAgent());
+		mNotesEditor->setText(desc);
+
+		if (!LLLandmarkActions::landmarkAlreadyExists())
+		{
+			createLandmark(mFolderCombo->getValue().asUUID());
+		}
+	}
+}
+
+void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem)
+{
+	if (!pItem)
+		return;
+
+	if(!gCacheName)
+		return;
+
+	const LLPermissions& perm = pItem->getPermissions();
+
+	//////////////////
+	// CREATOR NAME //
+	//////////////////
+	if (pItem->getCreatorUUID().notNull())
+	{
+		std::string name;
+		LLUUID creator_id = pItem->getCreatorUUID();
+		if (!gCacheName->getFullName(creator_id, name))
+		{
+			gCacheName->get(creator_id, FALSE,
+							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mCreator, _2, _3));
+		}
+		mCreator->setText(name);
+	}
+	else
+	{
+		mCreator->setText(getString("unknown"));
+	}
+
+	////////////////
+	// OWNER NAME //
+	////////////////
+	if(perm.isOwned())
+	{
+		std::string name;
+		if (perm.isGroupOwned())
+		{
+			LLUUID group_id = perm.getGroup();
+			if (!gCacheName->getGroupName(group_id, name))
+			{
+				gCacheName->get(group_id, TRUE,
+								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
+			}
+		}
+		else
+		{
+			LLUUID owner_id = perm.getOwner();
+			if (!gCacheName->getFullName(owner_id, name))
+			{
+				gCacheName->get(owner_id, FALSE,
+								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
+			}
+		}
+		mOwner->setText(name);
+	}
+	else
+	{
+		mOwner->setText(getString("public"));
+	}
+
+	//////////////////
+	// ACQUIRE DATE //
+	//////////////////
+	time_t time_utc = pItem->getCreationDate();
+	if (0 == time_utc)
+	{
+		mCreated->setText(getString("unknown"));
+	}
+	else
+	{
+		std::string timeStr = getString("acquired_date");
+		LLSD substitution;
+		substitution["datetime"] = (S32) time_utc;
+		LLStringUtil::format (timeStr, substitution);
+		mCreated->setText(timeStr);
+	}
+
+	mTitleEditor->setText(pItem->getName());
+	mNotesEditor->setText(pItem->getDescription());
+}
+
+void LLPanelLandmarkInfo::toggleLandmarkEditMode(BOOL enabled)
+{
+	// If switching to edit mode while creating landmark
+	// the "Create Landmark" title remains.
+	if (enabled && mInfoType != CREATE_LANDMARK)
+	{
+		mTitle->setText(getString("title_edit_landmark"));
+	}
+	else
+	{
+		mTitle->setText(mCurrentTitle);
+	}
+
+	if (mNotesEditor->getReadOnly() ==  (enabled == TRUE))
+	{
+		mTitleEditor->setEnabled(enabled);
+		mNotesEditor->setReadOnly(!enabled);
+		mFolderCombo->setVisible(enabled);
+		getChild<LLTextBox>("folder_label")->setVisible(enabled);
+
+		// HACK: To change the text color in a text editor
+		// when it was enabled/disabled we set the text once again.
+		mNotesEditor->setText(mNotesEditor->getText());
+	}
+}
+
+const std::string& LLPanelLandmarkInfo::getLandmarkTitle() const
+{
+	return mTitleEditor->getText();
+}
+
+const std::string LLPanelLandmarkInfo::getLandmarkNotes() const
+{
+	return mNotesEditor->getText();
+}
+
+const LLUUID LLPanelLandmarkInfo::getLandmarkFolder() const
+{
+	return mFolderCombo->getValue().asUUID();
+}
+
+BOOL LLPanelLandmarkInfo::setLandmarkFolder(const LLUUID& id)
+{
+	return mFolderCombo->setCurrentByID(id);
+}
+
+void LLPanelLandmarkInfo::createLandmark(const LLUUID& folder_id)
+{
+	std::string name = mTitleEditor->getText();
+	std::string desc = mNotesEditor->getText();
+
+	LLStringUtil::trim(name);
+	LLStringUtil::trim(desc);
+
+	// If typed name is empty use the parcel name instead.
+	if (name.empty())
+	{
+		name = mParcelName->getText();
+
+		// If no parcel exists use the region name instead.
+		if (name.empty())
+		{
+			name = mRegionName->getText();
+		}
+	}
+
+	LLStringUtil::replaceChar(desc, '\n', ' ');
+	// If no folder chosen use the "Landmarks" folder.
+	LLLandmarkActions::createLandmarkHere(name, desc,
+		folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK));
+}
+
+// static
+std::string LLPanelLandmarkInfo::getFullFolderName(const LLViewerInventoryCategory* cat)
+{
+	std::string name = cat->getName();
+	LLUUID parent_id;
+
+	// translate category name, if it's right below the root
+	// FIXME: it can throw notification about non existent string in strings.xml
+	if (cat->getParentUUID().notNull() && cat->getParentUUID() == gInventory.getRootFolderID())
+	{
+		LLTrans::findString(name, "InvFolder " + name);
+	}
+
+	// we don't want "My Inventory" to appear in the name
+	while ((parent_id = cat->getParentUUID()).notNull() && parent_id != gInventory.getRootFolderID())
+	{
+		cat = gInventory.getCategory(parent_id);
+		name = cat->getName() + "/" + name;
+	}
+
+	return name;
+}
+
+void LLPanelLandmarkInfo::populateFoldersList()
+{
+	// Collect all folders that can contain landmarks.
+	LLInventoryModel::cat_array_t cats;
+	collectLandmarkFolders(cats);
+
+	mFolderCombo->removeall();
+
+	// Put the "Landmarks" folder first in list.
+	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+	const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id);
+	if (!cat)
+	{
+		llwarns << "Cannot find the landmarks folder" << llendl;
+	}
+	std::string cat_full_name = getFullFolderName(cat);
+	mFolderCombo->add(cat_full_name, cat->getUUID());
+
+	typedef std::vector<folder_pair_t> folder_vec_t;
+	folder_vec_t folders;
+	// Sort the folders by their full name.
+	for (S32 i = 0; i < cats.count(); i++)
+	{
+		cat = cats.get(i);
+		cat_full_name = getFullFolderName(cat);
+		folders.push_back(folder_pair_t(cat->getUUID(), cat_full_name));
+	}
+	sort(folders.begin(), folders.end(), cmp_folders);
+
+	// Finally, populate the combobox.
+	for (folder_vec_t::const_iterator it = folders.begin(); it != folders.end(); it++)
+		mFolderCombo->add(it->second, LLSD(it->first));
+}
+
+static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right)
+{
+	return left.second < right.second;
+}
+
+static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats)
+{
+	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+
+	// Add descendent folders of the "Landmarks" category.
+	LLInventoryModel::item_array_t items; // unused
+	LLIsType is_category(LLAssetType::AT_CATEGORY);
+	gInventory.collectDescendentsIf(
+		landmarks_id,
+		cats,
+		items,
+		LLInventoryModel::EXCLUDE_TRASH,
+		is_category);
+
+	// Add the "My Favorites" category.
+	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+	LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id);
+	if (!favorites_cat)
+	{
+		llwarns << "Cannot find the favorites folder" << llendl;
+	}
+	else
+	{
+		cats.put(favorites_cat);
+	}
+}
diff --git a/indra/newview/llpanellandmarkinfo.h b/indra/newview/llpanellandmarkinfo.h
new file mode 100644
index 00000000000..03377986b31
--- /dev/null
+++ b/indra/newview/llpanellandmarkinfo.h
@@ -0,0 +1,85 @@
+/**
+ * @file llpanellandmarkinfo.h
+ * @brief Displays landmark info in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELLANDMARKINFO_H
+#define LL_LLPANELLANDMARKINFO_H
+
+#include "llpanelplaceinfo.h"
+
+class LLComboBox;
+class LLLineEditor;
+class LLTextEditor;
+
+class LLPanelLandmarkInfo : public LLPanelPlaceInfo
+{
+public:
+	LLPanelLandmarkInfo();
+	/*virtual*/ ~LLPanelLandmarkInfo();
+
+	/*virtual*/ BOOL postBuild();
+
+	/*virtual*/ void resetLocation();
+
+	/*virtual*/ void setInfoType(INFO_TYPE type);
+
+	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+
+	// Displays landmark owner, creator and creation date info.
+	void displayItemInfo(const LLInventoryItem* pItem);
+
+	void toggleLandmarkEditMode(BOOL enabled);
+
+	const std::string& getLandmarkTitle() const;
+	const std::string getLandmarkNotes() const;
+	const LLUUID getLandmarkFolder() const;
+
+	// Select current landmark folder in combobox.
+	BOOL setLandmarkFolder(const LLUUID& id);
+
+	// Create a landmark for the current location
+	// in a folder specified by folder_id.
+	void createLandmark(const LLUUID& folder_id);
+
+	static std::string getFullFolderName(const LLViewerInventoryCategory* cat);
+
+private:
+	void populateFoldersList();
+
+	LLTextBox*			mOwner;
+	LLTextBox*			mCreator;
+	LLTextBox*			mCreated;
+	LLLineEditor*		mTitleEditor;
+	LLTextEditor*		mNotesEditor;
+	LLComboBox*			mFolderCombo;
+};
+
+#endif // LL_LLPANELLANDMARKINFO_H
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 34644cfe42d..2c5f4b5afaa 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -1,6 +1,6 @@
 /**
  * @file llpanelplaceinfo.cpp
- * @brief Displays place information in Side Tray.
+ * @brief Base class for place information in Side Tray.
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
@@ -39,66 +39,34 @@
 #include "llsecondlifeurls.h"
 
 #include "llinventory.h"
-#include "llparcel.h"
 
-#include "llqueryflags.h"
+#include "llsdutil_math.h"
 
-#include "llbutton.h"
-#include "llcombobox.h"
-#include "lliconctrl.h"
 #include "llscrollcontainer.h"
 #include "lltextbox.h"
-#include "lltrans.h"
 
-#include "llaccordionctrl.h"
-#include "llaccordionctrltab.h"
 #include "llagent.h"
-#include "llagentui.h"
-#include "llappviewer.h"
 #include "llavatarpropertiesprocessor.h"
-#include "llcallbacklist.h"
 #include "llexpandabletextbox.h"
 #include "llfloaterworldmap.h"
-#include "llfloaterbuycurrency.h"
 #include "llinventorymodel.h"
-#include "lllandmarkactions.h"
 #include "llpanelpick.h"
 #include "lltexturectrl.h"
-#include "llstatusbar.h"
 #include "llviewerinventory.h"
 #include "llviewerparcelmgr.h"
 #include "llviewerregion.h"
-#include "llviewercontrol.h" 
 #include "llviewertexteditor.h"
 #include "llworldmap.h"
-#include "llsdutil_math.h"
-
-//----------------------------------------------------------------------------
-// Aux types and methods
-//----------------------------------------------------------------------------
-
-typedef std::pair<LLUUID, std::string> folder_pair_t;
-
-static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right);
-static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats);
-
-static LLRegisterPanelClassWrapper<LLPanelPlaceInfo> t_place_info("panel_place_info");
 
 LLPanelPlaceInfo::LLPanelPlaceInfo()
 :	LLPanel(),
 	mParcelID(),
 	mRequestedID(),
 	mPosRegion(),
-	mLandmarkID(),
-	mMinHeight(0),
-	mScrollingPanel(NULL),
-	mInfoPanel(NULL),
-	mMediaPanel(NULL),
-	mForSalePanel(NULL),
-	mYouAreHerePanel(NULL),
-	mSelectedParcelID(-1)
+	mMinHeight(0)
 {}
 
+//virtual
 LLPanelPlaceInfo::~LLPanelPlaceInfo()
 {
 	if (mParcelID.notNull())
@@ -107,220 +75,41 @@ LLPanelPlaceInfo::~LLPanelPlaceInfo()
 	}
 }
 
+//virtual
 BOOL LLPanelPlaceInfo::postBuild()
 {
-	mTitle = getChild<LLTextBox>("panel_title");
+	mTitle = getChild<LLTextBox>("title");
 	mCurrentTitle = mTitle->getText();
 
-	mForSalePanel = getChild<LLPanel>("for_sale_panel");
-	mYouAreHerePanel = getChild<LLPanel>("here_panel");
-	gIdleCallbacks.addFunction(&LLPanelPlaceInfo::updateYouAreHereBanner, this);
-	
-	//Icon value should contain sale price of last selected parcel. 
-	mForSalePanel->getChild<LLIconCtrl>("icon_for_sale")->
-				setMouseDownCallback(boost::bind(&LLPanelPlaceInfo::onForSaleBannerClick, this));
-
 	mSnapshotCtrl = getChild<LLTextureCtrl>("logo");
 	mRegionName = getChild<LLTextBox>("region_title");
 	mParcelName = getChild<LLTextBox>("parcel_title");
 	mDescEditor = getChild<LLExpandableTextBox>("description");
 
 	mMaturityRatingText = getChild<LLTextBox>("maturity_value");
-	mParcelOwner = getChild<LLTextBox>("owner_value");
-	mLastVisited = getChild<LLTextBox>("last_visited_value");
-
-	mRatingText = getChild<LLTextBox>("rating_value");
-	mVoiceText = getChild<LLTextBox>("voice_value");
-	mFlyText = getChild<LLTextBox>("fly_value");
-	mPushText = getChild<LLTextBox>("push_value");
-	mBuildText = getChild<LLTextBox>("build_value");
-	mScriptsText = getChild<LLTextBox>("scripts_value");
-	mDamageText = getChild<LLTextBox>("damage_value");
-
-	mRegionNameText = getChild<LLTextBox>("region_name");
-	mRegionTypeText = getChild<LLTextBox>("region_type");
-	mRegionRatingText = getChild<LLTextBox>("region_rating");
-	mRegionOwnerText = getChild<LLTextBox>("region_owner");
-	mRegionGroupText = getChild<LLTextBox>("region_group");
-
-	mEstateNameText = getChild<LLTextBox>("estate_name");
-	mEstateRatingText = getChild<LLTextBox>("estate_rating");
-	mEstateOwnerText = getChild<LLTextBox>("estate_owner");
-	mCovenantText = getChild<LLTextEditor>("covenant");
-
-	mSalesPriceText = getChild<LLTextBox>("sales_price");
-	mAreaText = getChild<LLTextBox>("area");
-	mTrafficText = getChild<LLTextBox>("traffic");
-	mPrimitivesText = getChild<LLTextBox>("primitives");
-	mParcelScriptsText = getChild<LLTextBox>("parcel_scripts");
-	mTerraformLimitsText = getChild<LLTextBox>("terraform_limits");
-	mSubdivideText = getChild<LLTextEditor>("subdivide");
-	mResaleText = getChild<LLTextEditor>("resale");
-	mSaleToText = getChild<LLTextBox>("sale_to");
 
-	mOwner = getChild<LLTextBox>("owner");
-	mCreator = getChild<LLTextBox>("creator");
-	mCreated = getChild<LLTextBox>("created");
-
-	mTitleEditor = getChild<LLLineEditor>("title_editor");
-	mNotesEditor = getChild<LLTextEditor>("notes_editor");
-	mFolderCombo = getChild<LLComboBox>("folder_combo");
-
-	LLScrollContainer* scroll_container = getChild<LLScrollContainer>("scroll_container");
+	LLScrollContainer* scroll_container = getChild<LLScrollContainer>("place_scroll");
 	scroll_container->setBorderVisible(FALSE);
 	mMinHeight = scroll_container->getScrolledViewRect().getHeight();
 
-	mScrollingPanel = getChild<LLPanel>("scrolling_panel");
-	mInfoPanel = getChild<LLPanel>("info_panel");
-	mMediaPanel = getChild<LLMediaPanel>("media_panel");
-	if (!mMediaPanel)
-		return FALSE;
-
 	return TRUE;
 }
 
-void LLPanelPlaceInfo::displayItemInfo(const LLInventoryItem* pItem)
-{
-	if (!pItem)
-		return;
-
-	mLandmarkID = pItem->getUUID();
-
-	if(!gCacheName)
-		return;
-
-	const LLPermissions& perm = pItem->getPermissions();
-
-	//////////////////
-	// CREATOR NAME //
-	//////////////////
-	if (pItem->getCreatorUUID().notNull())
-	{
-		std::string name;
-		LLUUID creator_id = pItem->getCreatorUUID();
-		if (!gCacheName->getFullName(creator_id, name))
-		{
-			gCacheName->get(creator_id, FALSE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mCreator, _2, _3));
-		}
-		mCreator->setText(name);
-	}
-	else
-	{
-		mCreator->setText(getString("unknown"));
-	}
-
-	////////////////
-	// OWNER NAME //
-	////////////////
-	if(perm.isOwned())
-	{
-		std::string name;
-		if (perm.isGroupOwned())
-		{
-			LLUUID group_id = perm.getGroup();
-			if (!gCacheName->getGroupName(group_id, name))
-			{
-				gCacheName->get(group_id, TRUE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mOwner, _2, _3));
-			}
-		}
-		else
-		{
-			LLUUID owner_id = perm.getOwner();
-			if (!gCacheName->getFullName(owner_id, name))
-			{
-				gCacheName->get(owner_id, FALSE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mOwner, _2, _3));
-			}
-		}
-		mOwner->setText(name);
-	}
-	else
-	{
-		mOwner->setText(getString("public"));
-	}
-	
-	//////////////////
-	// ACQUIRE DATE //
-	//////////////////
-	time_t time_utc = pItem->getCreationDate();
-	if (0 == time_utc)
-	{
-		mCreated->setText(getString("unknown"));
-	}
-	else
-	{
-		std::string timeStr = getString("acquired_date");
-		LLSD substitution;
-		substitution["datetime"] = (S32) time_utc;
-		LLStringUtil::format (timeStr, substitution);
-		mCreated->setText(timeStr);
-	}
-
-	mTitleEditor->setText(pItem->getName());
-	mNotesEditor->setText(pItem->getDescription());
-}
-
-void LLPanelPlaceInfo::nameUpdatedCallback(
-	LLTextBox* text,
-	const std::string& first,
-	const std::string& last)
-{
-	text->setText(first + " " + last);
-}
-
+//virtual
 void LLPanelPlaceInfo::resetLocation()
 {
 	mParcelID.setNull();
 	mRequestedID.setNull();
-	mLandmarkID.setNull();
 	mPosRegion.clearVec();
-	mForSalePanel->setVisible(FALSE);
-	mYouAreHerePanel->setVisible(FALSE);
+
 	std::string not_available = getString("not_available");
 	mMaturityRatingText->setValue(not_available);
-	mParcelOwner->setValue(not_available);
-	mLastVisited->setValue(not_available);
 	mRegionName->setText(not_available);
 	mParcelName->setText(not_available);
 	mDescEditor->setText(not_available);
-	mCreator->setText(not_available);
-	mOwner->setText(not_available);
-	mCreated->setText(not_available);
-	mTitleEditor->setText(LLStringUtil::null);
-	mNotesEditor->setText(LLStringUtil::null);
+
 	mSnapshotCtrl->setImageAssetID(LLUUID::null);
 	mSnapshotCtrl->setFallbackImageName("default_land_picture.j2c");
-
-	mRatingText->setText(not_available);
-	mVoiceText->setText(not_available);
-	mFlyText->setText(not_available);
-	mPushText->setText(not_available);
-	mBuildText->setText(not_available);
-	mParcelScriptsText->setText(not_available);
-	mDamageText->setText(not_available);
-
-	mRegionNameText->setValue(not_available);
-	mRegionTypeText->setValue(not_available);
-	mRegionRatingText->setValue(not_available);
-	mRegionOwnerText->setValue(not_available);
-	mRegionGroupText->setValue(not_available);
-
-	mEstateNameText->setValue(not_available);
-	mEstateRatingText->setValue(not_available);
-	mEstateOwnerText->setValue(not_available);
-	mCovenantText->setValue(not_available);
-
-	mSalesPriceText->setValue(not_available);
-	mAreaText->setValue(not_available);
-	mTrafficText->setValue(not_available);
-	mPrimitivesText->setValue(not_available);
-	mParcelScriptsText->setValue(not_available);
-	mTerraformLimitsText->setValue(not_available);
-	mSubdivideText->setValue(not_available);
-	mResaleText->setValue(not_available);
-	mSaleToText->setValue(not_available);
 }
 
 //virtual
@@ -330,108 +119,55 @@ void LLPanelPlaceInfo::setParcelID(const LLUUID& parcel_id)
 	sendParcelInfoRequest();
 }
 
+//virtual
 void LLPanelPlaceInfo::setInfoType(INFO_TYPE type)
 {
-	LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel");
-	LLPanel* landmark_edit_panel = getChild<LLPanel>("landmark_edit_panel");
-
-	bool is_info_type_agent = type == AGENT;
-	bool is_info_type_create_landmark = type == CREATE_LANDMARK;
-	bool is_info_type_landmark = type == LANDMARK;
-	bool is_info_type_teleport_history = type == TELEPORT_HISTORY;
-
-	getChild<LLTextBox>("maturity_label")->setVisible(!is_info_type_agent);
-	mMaturityRatingText->setVisible(!is_info_type_agent);
-
-	getChild<LLTextBox>("owner_label")->setVisible(is_info_type_agent);
-	mParcelOwner->setVisible(is_info_type_agent);
-
-	getChild<LLTextBox>("last_visited_label")->setVisible(is_info_type_teleport_history);
-	mLastVisited->setVisible(is_info_type_teleport_history);
-
-	landmark_info_panel->setVisible(is_info_type_landmark);
-	landmark_edit_panel->setVisible(is_info_type_landmark || is_info_type_create_landmark);
-
-	getChild<LLTextBox>("folder_lable")->setVisible(is_info_type_create_landmark);
-	mFolderCombo->setVisible(is_info_type_create_landmark);
-
-	getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent);
-
-	switch(type)
-	{
-		case CREATE_LANDMARK:
-			mCurrentTitle = getString("title_create_landmark");
-
-			mTitleEditor->setEnabled(TRUE);
-			mNotesEditor->setEnabled(TRUE);
-
-			populateFoldersList();
-		break;
-
-		case AGENT:
-		case PLACE:
-			mCurrentTitle = getString("title_place");
-
-			if (!isMediaPanelVisible())
-			{
-				mTitle->setText(mCurrentTitle);
-			}
-		break;
-
-		case LANDMARK:
-			mCurrentTitle = getString("title_landmark");
-
-			mTitleEditor->setEnabled(FALSE);
-			mNotesEditor->setEnabled(FALSE);
-
-			populateFoldersList();
-		break;
-
-		case TELEPORT_HISTORY:
-			mCurrentTitle = getString("title_teleport_history");
-		break;
-	}
-
-	if (type != AGENT)
-		toggleMediaPanel(FALSE);
+	mTitle->setText(mCurrentTitle);
 
 	mInfoType = type;
 }
 
-BOOL LLPanelPlaceInfo::isMediaPanelVisible()
+void LLPanelPlaceInfo::sendParcelInfoRequest()
 {
-	if (!mMediaPanel)
-		return FALSE;
+	if (mParcelID != mRequestedID)
+	{
+		LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this);
+		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID);
 
-	return mMediaPanel->getVisible();
+		mRequestedID = mParcelID;
+	}
 }
 
-void LLPanelPlaceInfo::toggleMediaPanel(BOOL visible)
+void LLPanelPlaceInfo::displayParcelInfo(const LLUUID& region_id,
+										 const LLVector3d& pos_global)
 {
-    if (!mMediaPanel)
-        return;
+	LLViewerRegion* region = gAgent.getRegion();
+	if (!region)
+		return;
+
+	mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
+					  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
+					  (F32)pos_global.mdV[VZ]);
 
-    if (visible)
+	LLSD body;
+	std::string url = region->getCapability("RemoteParcelRequest");
+	if (!url.empty())
 	{
-		mTitle->setText(getString("title_media"));
+		body["location"] = ll_sd_from_vector3(mPosRegion);
+		if (!region_id.isNull())
+		{
+			body["region_id"] = region_id;
+		}
+		if (!pos_global.isExactlyZero())
+		{
+			U64 region_handle = to_region_handle(pos_global);
+			body["region_handle"] = ll_sd_from_U64(region_handle);
+		}
+		LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle()));
 	}
 	else
 	{
-		mTitle->setText(mCurrentTitle);
-	}
-
-    mInfoPanel->setVisible(!visible);
-    mMediaPanel->setVisible(visible);
-}
-
-void LLPanelPlaceInfo::sendParcelInfoRequest()
-{
-	if (mParcelID != mRequestedID)
-	{
-		LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this);
-		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID);
-
-		mRequestedID = mParcelID;
+		mDescEditor->setText(getString("server_update_text"));
 	}
 }
 
@@ -473,27 +209,6 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)
 		mDescEditor->setText(parcel_data.desc);
 	}
 
-	// HACK: Flag 0x2 == adult region,
-	// Flag 0x1 == mature region, otherwise assume PG
-	std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
-	if (parcel_data.flags & 0x2)
-	{
-		rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
-	}
-	else if (parcel_data.flags & 0x1)
-	{
-		rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
-	}
-
-	mMaturityRatingText->setValue(rating);
-	mRatingText->setValue(rating);
-
-	//update for_sale banner, here we should use DFQ_FOR_SALE instead of PF_FOR_SALE
-	//because we deal with remote parcel response format
-	bool is_for_sale = (parcel_data.flags & DFQ_FOR_SALE) &&
-					 mInfoType == AGENT ? TRUE : FALSE;
-	mForSalePanel->setVisible(is_for_sale);
-
 	S32 region_x;
 	S32 region_y;
 	S32 region_z;
@@ -521,408 +236,25 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)
 	{
 		mParcelName->setText(getString("not_available"));
 	}
-
-	if (mInfoType == CREATE_LANDMARK)
-	{
-		if (parcel_data.name.empty())
-		{
-			mTitleEditor->setText(llformat("%s (%d, %d, %d)",
-								  parcel_data.sim_name.c_str(), region_x, region_y, region_z));
-		}
-		else
-		{
-			mTitleEditor->setText(parcel_data.name);
-		}
-
-		// FIXME: Creating landmark works only for current agent location.
-		std::string desc;
-		LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, gAgent.getPositionAgent());
-		mNotesEditor->setText(desc);
-
-		if (!LLLandmarkActions::landmarkAlreadyExists())
-		{
-			createLandmark(mFolderCombo->getValue().asUUID());
-		}
-	}
 }
 
-void LLPanelPlaceInfo::displayParcelInfo(const LLUUID& region_id,
-										 const LLVector3d& pos_global)
+// virtual
+void LLPanelPlaceInfo::handleVisibilityChange(BOOL new_visibility)
 {
-	LLViewerRegion* region = gAgent.getRegion();
-	if (!region)
-		return;
-
-	mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
-					  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
-					  (F32)pos_global.mdV[VZ]);
-
-	LLSD body;
-	std::string url = region->getCapability("RemoteParcelRequest");
-	if (!url.empty())
-	{
-		body["location"] = ll_sd_from_vector3(mPosRegion);
-		if (!region_id.isNull())
-		{
-			body["region_id"] = region_id;
-		}
-		if (!pos_global.isExactlyZero())
-		{
-			U64 region_handle = to_region_handle(pos_global);
-			body["region_handle"] = ll_sd_from_U64(region_handle);
-		}
-		LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle()));
-	}
-	else
-	{
-		mDescEditor->setText(getString("server_update_text"));
-	}
-}
+	LLPanel::handleVisibilityChange(new_visibility);
 
-void LLPanelPlaceInfo::displaySelectedParcelInfo(LLParcel* parcel,
-											  LLViewerRegion* region,
-											  const LLVector3d& pos_global,
-											  bool is_current_parcel)
-{
-	if (!region || !parcel)
+	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
+	if (!parcel_mgr)
 		return;
 
-	// send EstateCovenantInfo message
-	LLMessageSystem *msg = gMessageSystem;
-	msg->newMessage("EstateCovenantRequest");
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID,	gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
-	msg->sendReliable(region->getHost());
-
-	LLParcelData parcel_data;
-
-	// HACK: Converting sim access flags to the format
-	// returned by remote parcel response.
-	switch(region->getSimAccess())
-	{
-	case SIM_ACCESS_MATURE:
-		parcel_data.flags = 0x1;
-		break;
-
-	case SIM_ACCESS_ADULT:
-		parcel_data.flags = 0x2;
-		break;
-
-	default:
-		parcel_data.flags = 0;
-	}
-	parcel_data.desc = parcel->getDesc();
-	parcel_data.name = parcel->getName();
-	parcel_data.sim_name = region->getName();
-	parcel_data.snapshot_id = parcel->getSnapshotID();
-	mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
-					  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
-					  (F32)pos_global.mdV[VZ]);
-	parcel_data.global_x = pos_global.mdV[VX];
-	parcel_data.global_y = pos_global.mdV[VY];
-	parcel_data.global_z = pos_global.mdV[VZ];
-
-	std::string on = getString("on");
-	std::string off = getString("off");
-
-	// Processing parcel characteristics
-	if (parcel->getParcelFlagAllowVoice())
-	{
-		mVoiceText->setText(on);
-	}
-	else
-	{
-		mVoiceText->setText(off);
-	}
-
-	if (!region->getBlockFly() && parcel->getAllowFly())
-	{
-		mFlyText->setText(on);
-	}
-	else
-	{
-		mFlyText->setText(off);
-	}
-
-	if (region->getRestrictPushObject() || parcel->getRestrictPushObject())
-	{
-		mPushText->setText(off);
-	}
-	else
-	{
-		mPushText->setText(on);
-	}
-
-	if (parcel->getAllowModify())
-	{
-		mBuildText->setText(on);
-	}
-	else
-	{
-		mBuildText->setText(off);
-	}
-
-	if((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) ||
-	   (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) ||
-	   !parcel->getAllowOtherScripts())
-	{
-		mScriptsText->setText(off);
-	}
-	else
-	{
-		mScriptsText->setText(on);
-	}
-
-	if (region->getAllowDamage() || parcel->getAllowDamage())
-	{
-		mDamageText->setText(on);
-	}
-	else
-	{
-		mDamageText->setText(off);
-	}
-
-	mRegionNameText->setText(region->getName());
-	mRegionTypeText->setText(region->getSimProductName());
-	mRegionRatingText->setText(region->getSimAccessString());
-
-	// Determine parcel owner
-	if (parcel->isPublic())
-	{
-		mParcelOwner->setText(getString("public"));
-		mRegionOwnerText->setText(getString("public"));
-	}
-	else
-	{
-		if (parcel->getIsGroupOwned())
-		{
-			mRegionOwnerText->setText(getString("group_owned_text"));
-
-			if(!parcel->getGroupID().isNull())
-			{
-				// FIXME: Using parcel group as region group.
-				gCacheName->get(parcel->getGroupID(), TRUE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mRegionGroupText, _2, _3));
-
-				gCacheName->get(parcel->getGroupID(), TRUE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mParcelOwner, _2, _3));
-			}
-			else
-			{
-				std::string owner = getString("none_text");
-				mRegionGroupText->setText(owner);
-				mParcelOwner->setText(owner);
-			}
-		}
-		else
-		{
-			// Figure out the owner's name
-			gCacheName->get(parcel->getOwnerID(), FALSE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mParcelOwner, _2, _3));
-			gCacheName->get(region->getOwner(), FALSE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mRegionOwnerText, _2, _3));
-		}
-
-		if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus())
-		{
-			mRegionOwnerText->setText(mRegionOwnerText->getText() + getString("sale_pending_text"));
-		}
-	}
-
-	mEstateRatingText->setText(region->getSimAccessString());
-
-	S32 area;
-	S32 claim_price;
-	S32 rent_price;
-	F32 dwell;
-	BOOL for_sale = parcel->getForSale();
-	LLViewerParcelMgr::getInstance()->getDisplayInfo(&area,
-													 &claim_price,
-													 &rent_price,
-													 &for_sale,
-													 &dwell);
-	if (for_sale)
-	{
-		// Adding "For Sale" flag in remote parcel response format.
-		parcel_data.flags |= DFQ_FOR_SALE;
-
-		const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
-		if(auth_buyer_id.notNull())
-		{
-			gCacheName->get(auth_buyer_id, TRUE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mSaleToText, _2, _3));
-
-			// Show sales info to a specific person or a group he belongs to.
-			if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id))
-			{
-				for_sale = FALSE;
-			}
-		}
-		else
-		{
-			mSaleToText->setText(getString("anyone"));
-		}
-
-		const U8* sign = (U8*)getString("price_text").c_str();
-		const U8* sqm = (U8*)getString("area_text").c_str();
-
-		mSalesPriceText->setText(llformat("%s%d ", sign, parcel->getSalePrice()));
-		mAreaText->setText(llformat("%d %s", area, sqm));
-		mTrafficText->setText(llformat("%.0f", dwell));
-
-		// Can't have more than region max tasks, regardless of parcel
-		// object bonus factor.
-		S32 primitives = llmin(llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()),
-							   (S32)region->getMaxTasks());
-
-		const U8* available = (U8*)getString("available").c_str();
-		const U8* allocated = (U8*)getString("allocated").c_str();
-
-		mPrimitivesText->setText(llformat("%d %s, %d %s", primitives, available, parcel->getPrimCount(), allocated));
-
-		if (parcel->getAllowOtherScripts())
-		{
-			mParcelScriptsText->setText(getString("all_residents_text"));
-		}
-		else if (parcel->getAllowGroupScripts())
-		{
-			mParcelScriptsText->setText(getString("group_text"));
-		}
-		else
-		{
-			mParcelScriptsText->setText(off);
-		}
-
-		mTerraformLimitsText->setText(parcel->getAllowTerraform() ? on : off);
-
-		if (region->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES)
-		{
-			mSubdivideText->setText(getString("can_change"));
-		}
-		else
-		{
-			mSubdivideText->setText(getString("can_not_change"));
-		}
-		if (region->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL)
-		{
-			mResaleText->setText(getString("can_not_resell"));
-		}
-		else
-		{
-			mResaleText->setText(getString("can_resell"));
-		}
-	}
-
-	mSelectedParcelID = parcel->getLocalID();
-	mLastSelectedRegionID = region->getRegionID();
-	processParcelInfo(parcel_data);
-
-	mYouAreHerePanel->setVisible(is_current_parcel);
-	getChild<LLAccordionCtrlTab>("sales_tab")->setVisible(for_sale);
-}
-
-void LLPanelPlaceInfo::updateEstateName(const std::string& name)
-{
-	mEstateNameText->setText(name);
-}
-
-void LLPanelPlaceInfo::updateEstateOwnerName(const std::string& name)
-{
-	mEstateOwnerText->setText(name);
-}
-
-void LLPanelPlaceInfo::updateCovenantText(const std::string &text)
-{
-	mCovenantText->setText(text);
-}
-
-void LLPanelPlaceInfo::updateLastVisitedText(const LLDate &date)
-{
-	if (date.isNull())
-	{
-		mLastVisited->setText(getString("unknown"));
-	}
-	else
-	{
-		std::string timeStr = getString("acquired_date");
-		LLSD substitution;
-		substitution["datetime"] = (S32) date.secondsSinceEpoch();
-		LLStringUtil::format (timeStr, substitution);
-		mLastVisited->setText(timeStr);
-	}
-}
-
-void LLPanelPlaceInfo::toggleLandmarkEditMode(BOOL enabled)
-{
-	// If switching to edit mode while creating landmark
-	// the "Create Landmark" title remains.
-	if (enabled && mInfoType != CREATE_LANDMARK)
-	{
-		mTitle->setText(getString("title_edit_landmark"));
-	}
-	else
-	{
-		mTitle->setText(mCurrentTitle);
-	}
-
-	if (mNotesEditor->getReadOnly() ==  (enabled == TRUE))
-	{
-		mTitleEditor->setEnabled(enabled);
-		mNotesEditor->setReadOnly(!enabled);
-		mFolderCombo->setVisible(enabled);
-		getChild<LLTextBox>("folder_lable")->setVisible(enabled);
-
-		// HACK: To change the text color in a text editor
-		// when it was enabled/disabled we set the text once again.
-		mNotesEditor->setText(mNotesEditor->getText());
-	}
-}
-
-const std::string& LLPanelPlaceInfo::getLandmarkTitle() const
-{
-	return mTitleEditor->getText();
-}
-
-const std::string LLPanelPlaceInfo::getLandmarkNotes() const
-{
-	return mNotesEditor->getText();
-}
-
-const LLUUID LLPanelPlaceInfo::getLandmarkFolder() const
-{
-	return mFolderCombo->getValue().asUUID();
-}
-
-BOOL LLPanelPlaceInfo::setLandmarkFolder(const LLUUID& id)
-{
-	return mFolderCombo->setCurrentByID(id);
-}
-
-void LLPanelPlaceInfo::createLandmark(const LLUUID& folder_id)
-{
-	std::string name = mTitleEditor->getText();
-	std::string desc = mNotesEditor->getText();
-
-	LLStringUtil::trim(name);
-	LLStringUtil::trim(desc);
-
-	// If typed name is empty use the parcel name instead.
-	if (name.empty())
+	// Remove land selection when panel hides.
+	if (!new_visibility)
 	{
-		name = mParcelName->getText();
-
-		// If no parcel exists use the region name instead.
-		if (name.empty())
+		if (!parcel_mgr->selectionEmpty())
 		{
-			name = mRegionName->getText();
+			parcel_mgr->deselectLand();
 		}
 	}
-
-	LLStringUtil::replaceChar(desc, '\n', ' ');
-	// If no folder chosen use the "Landmarks" folder.
-	LLLandmarkActions::createLandmarkHere(name, desc,
-		folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK));
 }
 
 void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel)
@@ -942,159 +274,10 @@ void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global, LLPanelPickEdit*
 	pick_panel->setPickData(&data);
 }
 
-// virtual
-void LLPanelPlaceInfo::handleVisibilityChange (BOOL new_visibility)
-{
-	LLPanel::handleVisibilityChange(new_visibility);
-
-	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
-	if (!parcel_mgr)
-		return;
-
-	// Remove land selection when panel hides.
-	if (!new_visibility)
-	{
-		if (!parcel_mgr->selectionEmpty())
-		{
-			parcel_mgr->deselectLand();
-		}
-	}
-}
-
-void LLPanelPlaceInfo::populateFoldersList()
+// static
+void LLPanelPlaceInfo::nameUpdatedCallback(LLTextBox* text,
+										   const std::string& first,
+										   const std::string& last)
 {
-	// Collect all folders that can contain landmarks.
-	LLInventoryModel::cat_array_t cats;
-	collectLandmarkFolders(cats);
-
-	mFolderCombo->removeall();
-
-	// Put the "Landmarks" folder first in list.
-	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
-	const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id);
-	if (!cat)
-	{
-		llwarns << "Cannot find the landmarks folder" << llendl;
-	}
-	std::string cat_full_name = getFullFolderName(cat);
-	mFolderCombo->add(cat_full_name, cat->getUUID());
-
-	typedef std::vector<folder_pair_t> folder_vec_t;
-	folder_vec_t folders;
-	// Sort the folders by their full name.
-	for (S32 i = 0; i < cats.count(); i++)
-	{
-		cat = cats.get(i);
-		cat_full_name = getFullFolderName(cat);
-		folders.push_back(folder_pair_t(cat->getUUID(), cat_full_name));
-	}
-	sort(folders.begin(), folders.end(), cmp_folders);
-
-	// Finally, populate the combobox.
-	for (folder_vec_t::const_iterator it = folders.begin(); it != folders.end(); it++)
-		mFolderCombo->add(it->second, LLSD(it->first));
-}
-
-//static
-void LLPanelPlaceInfo::updateYouAreHereBanner(void* userdata)
-{
-	//YouAreHere Banner should be displayed only for selected places, 
-	// If you want to display it for landmark or teleport history item, you should check by mParcelId
-	
-	LLPanelPlaceInfo* self  = static_cast<LLPanelPlaceInfo*>(userdata);
-	if(!self->getVisible())
-		return;
-	if(!gDisconnected)
-	{
-		static F32 radius  = gSavedSettings.getF32("YouAreHereDistance");
-
-		BOOL display_banner = gAgent.getRegion()->getRegionID() == self->mLastSelectedRegionID && 
-			LLAgentUI::checkAgentDistance(self->mPosRegion, radius);
-
-		self->mYouAreHerePanel->setVisible(display_banner);
-	}
-}
-
-void LLPanelPlaceInfo::onForSaleBannerClick()
-{
-	LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance();
-	LLParcelSelectionHandle hParcel = mgr->getFloatingParcelSelection();
-	LLViewerRegion* selected_region =  mgr->getSelectionRegion();
-	if(!hParcel.isNull() && selected_region)
-	{
-		if(hParcel->getParcel()->getLocalID() == mSelectedParcelID && 
-				mLastSelectedRegionID ==selected_region->getRegionID())
-		{
-			if(hParcel->getParcel()->getSalePrice() - gStatusBar->getBalance() > 0)
-			{
-				LLFloaterBuyCurrency::buyCurrency("Buying selected land ", hParcel->getParcel()->getSalePrice());
-			}
-			else
-			{
-				LLViewerParcelMgr::getInstance()->startBuyLand();
-			}
-		}
-		else
-		{
-			LL_WARNS("Places") << "User  is trying  to buy remote parcel.Operation is not supported"<< LL_ENDL; 
-		}
-		
-	}
-	
-	
-}
-
-/*static*/
-std::string LLPanelPlaceInfo::getFullFolderName(const LLViewerInventoryCategory* cat)
-{
-	std::string name = cat->getName();
-	LLUUID parent_id;
-
-	// translate category name, if it's right below the root
-	// FIXME: it can throw notification about non existent string in strings.xml
-	if (cat->getParentUUID().notNull() && cat->getParentUUID() == gInventory.getRootFolderID())
-	{
-		LLTrans::findString(name, "InvFolder " + name);
-	}
-
-	// we don't want "My Inventory" to appear in the name
-	while ((parent_id = cat->getParentUUID()).notNull() && parent_id != gInventory.getRootFolderID())
-	{
-		cat = gInventory.getCategory(parent_id);
-		name = cat->getName() + "/" + name;
-	}
-
-	return name;
-}
-
-static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right)
-{
-	return left.second < right.second;
-}
-
-static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats)
-{
-	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
-
-	// Add descendent folders of the "Landmarks" category.
-	LLInventoryModel::item_array_t items; // unused
-	LLIsType is_category(LLAssetType::AT_CATEGORY);
-	gInventory.collectDescendentsIf(
-		landmarks_id,
-		cats,
-		items,
-		LLInventoryModel::EXCLUDE_TRASH,
-		is_category);
-
-	// Add the "My Favorites" category.
-	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
-	LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id);
-	if (!favorites_cat)
-	{
-		llwarns << "Cannot find the favorites folder" << llendl;
-	}
-	else
-	{
-		cats.put(favorites_cat);
-	}
+	text->setText(first + " " + last);
 }
diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h
index 07a2434d59f..c9e13475428 100644
--- a/indra/newview/llpanelplaceinfo.h
+++ b/indra/newview/llpanelplaceinfo.h
@@ -1,6 +1,6 @@
 /** 
  * @file llpanelplaceinfo.h
- * @brief Displays place information in Side Tray.
+ * @brief Base class for place information in Side Tray.
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
@@ -38,19 +38,13 @@
 #include "v3dmath.h"
 #include "lluuid.h"
 
-#include "llpanelmedia.h"
 #include "llremoteparcelrequest.h"
 
-class LLButton;
-class LLComboBox;
 class LLExpandableTextBox;
 class LLInventoryItem;
-class LLLineEditor;
 class LLPanelPickEdit;
 class LLParcel;
-class LLIconCtrl;
 class LLTextBox;
-class LLTextEditor;
 class LLTextureCtrl;
 class LLViewerRegion;
 class LLViewerInventoryCategory;
@@ -74,30 +68,18 @@ class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver
 
 	// Ignore all old location information, useful if you are 
 	// recycling an existing dialog and need to clear it.
-	void resetLocation();
+	virtual void resetLocation();
 
 	// Sends a request for data about the given parcel, which will
 	// only update the location if there is none already available.
 	/*virtual*/ void setParcelID(const LLUUID& parcel_id);
 
-	// Depending on how the panel was triggered 
-	// (from landmark or current location, or other) 
+	// Depending on how the panel was triggered
+	// (from landmark or current location, or other)
 	// sets a corresponding title and contents.
-	void setInfoType(INFO_TYPE type);
-
-	// Create a landmark for the current location
-	// in a folder specified by folder_id.
-	void createLandmark(const LLUUID& folder_id);
-	
-	// Create a pick for the location specified
-	// by global_pos.
-	void createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel);
-
-	BOOL isMediaPanelVisible();
-	void toggleMediaPanel(BOOL visible);
-	void displayItemInfo(const LLInventoryItem* pItem);
-	/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
+	virtual void setInfoType(INFO_TYPE type);
 
+	// Requests remote parcel info by parcel ID.
 	void sendParcelInfoRequest();
 
 	// Displays information about a remote parcel.
@@ -105,109 +87,37 @@ class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver
 	void displayParcelInfo(const LLUUID& region_id,
 						   const LLVector3d& pos_global);
 
-	// Displays information about the currently selected parcel
-	// without sending a request to the server.
-	// If is_current_parcel true shows "You Are Here" banner.
-	void displaySelectedParcelInfo(LLParcel* parcel,
-								LLViewerRegion* region,
-								const LLVector3d& pos_global,
-								bool is_current_parcel);
-
-	void updateEstateName(const std::string& name);
-	void updateEstateOwnerName(const std::string& name);
-	void updateCovenantText(const std::string &text);
-	void updateLastVisitedText(const LLDate &date);
-
-	void nameUpdatedCallback(LLTextBox* text,
-							 const std::string& first,
-							 const std::string& last);
-
-	void toggleLandmarkEditMode(BOOL enabled);
-
-	const std::string& getLandmarkTitle() const;
-	const std::string getLandmarkNotes() const;
-	const LLUUID getLandmarkFolder() const;
-
-	// Select current landmark folder in combobox.
-	BOOL setLandmarkFolder(const LLUUID& id);
+	/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
 
 	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+
 	/*virtual*/ void handleVisibilityChange (BOOL new_visibility);
-	
-	 static std::string getFullFolderName(const LLViewerInventoryCategory* cat);
 
-private:
+	// Create a pick for the location specified
+	// by global_pos.
+	void createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel);
 
-	void populateFoldersList();
-	static void updateYouAreHereBanner(void*);// added to gIdleCallbacks
-	void onForSaleBannerClick();
+protected:
+	static void nameUpdatedCallback(LLTextBox* text,
+									const std::string& first,
+									const std::string& last);
 
 	/**
 	 * mParcelID is valid only for remote places, in other cases it's null. See resetLocation() 
 	 */
-	LLUUID			mParcelID;
-	LLUUID			mRequestedID;
-	LLUUID			mLandmarkID;
-	LLVector3		mPosRegion;
-	std::string		mCurrentTitle;
-	S32				mMinHeight;
-	INFO_TYPE 		mInfoType;
-
-	/**
-	 * Hold last displayed parcel. Needs for YouAreHere banner.
-	 */
-	S32			mSelectedParcelID;
-	LLUUID		mLastSelectedRegionID;
-
-	LLTextBox*			mTitle;
-	LLPanel*			mForSalePanel;
-	LLPanel*			mYouAreHerePanel;
-	LLTextureCtrl*		mSnapshotCtrl;
-	LLTextBox*			mRegionName;
-	LLTextBox*			mParcelName;
-	LLExpandableTextBox*mDescEditor;
-	LLTextBox*			mMaturityRatingText;
-	LLTextBox*			mParcelOwner;
-	LLTextBox*			mLastVisited;
-
-	LLTextBox*			mRatingText;
-	LLTextBox*			mVoiceText;
-	LLTextBox*			mFlyText;
-	LLTextBox*			mPushText;
-	LLTextBox*			mBuildText;
-	LLTextBox*			mScriptsText;
-	LLTextBox*			mDamageText;
-
-	LLTextBox*			mRegionNameText;
-	LLTextBox*			mRegionTypeText;
-	LLTextBox*			mRegionRatingText;
-	LLTextBox*			mRegionOwnerText;
-	LLTextBox*			mRegionGroupText;
-
-	LLTextBox*			mEstateNameText;
-	LLTextBox*			mEstateRatingText;
-	LLTextBox*			mEstateOwnerText;
-	LLTextEditor*		mCovenantText;
-
-	LLTextBox*			mSalesPriceText;
-	LLTextBox*			mAreaText;
-	LLTextBox*			mTrafficText;
-	LLTextBox*			mPrimitivesText;
-	LLTextBox*			mParcelScriptsText;
-	LLTextBox*			mTerraformLimitsText;
-	LLTextEditor*		mSubdivideText;
-	LLTextEditor*		mResaleText;
-	LLTextBox*			mSaleToText;
-
-	LLTextBox*			mOwner;
-	LLTextBox*			mCreator;
-	LLTextBox*			mCreated;
-	LLLineEditor*		mTitleEditor;
-	LLTextEditor*		mNotesEditor;
-	LLComboBox*			mFolderCombo;
-	LLPanel*            mScrollingPanel;
-	LLPanel*			mInfoPanel;
-	LLMediaPanel*		mMediaPanel;
+	LLUUID					mParcelID;
+	LLUUID					mRequestedID;
+	LLVector3				mPosRegion;
+	std::string				mCurrentTitle;
+	S32						mMinHeight;
+	INFO_TYPE 				mInfoType;
+
+	LLTextBox*				mTitle;
+	LLTextureCtrl*			mSnapshotCtrl;
+	LLTextBox*				mRegionName;
+	LLTextBox*				mParcelName;
+	LLExpandableTextBox*	mDescEditor;
+	LLTextBox*				mMaturityRatingText;
 };
 
 #endif // LL_LLPANELPLACEINFO_H
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
new file mode 100644
index 00000000000..9ba72fe6cff
--- /dev/null
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -0,0 +1,541 @@
+/**
+ * @file llpanelplaceprofile.cpp
+ * @brief Displays place profile in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelplaceprofile.h"
+
+#include "llparcel.h"
+
+#include "llqueryflags.h"
+
+#include "lliconctrl.h"
+#include "lllineeditor.h"
+#include "lltextbox.h"
+#include "lltexteditor.h"
+
+#include "llaccordionctrl.h"
+#include "llaccordionctrltab.h"
+#include "llagent.h"
+#include "llagentui.h"
+#include "llappviewer.h"
+#include "llcallbacklist.h"
+#include "llfloaterbuycurrency.h"
+#include "llstatusbar.h"
+#include "llviewercontrol.h"
+#include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
+
+static LLRegisterPanelClassWrapper<LLPanelPlaceProfile> t_place_profile("panel_place_profile");
+
+LLPanelPlaceProfile::LLPanelPlaceProfile()
+:	LLPanelPlaceInfo(),
+	mForSalePanel(NULL),
+	mYouAreHerePanel(NULL),
+	mSelectedParcelID(-1)
+{}
+
+// virtual
+LLPanelPlaceProfile::~LLPanelPlaceProfile()
+{}
+
+// virtual
+BOOL LLPanelPlaceProfile::postBuild()
+{
+	LLPanelPlaceInfo::postBuild();
+
+	mForSalePanel = getChild<LLPanel>("for_sale_panel");
+	mYouAreHerePanel = getChild<LLPanel>("here_panel");
+	gIdleCallbacks.addFunction(&LLPanelPlaceProfile::updateYouAreHereBanner, this);
+
+	//Icon value should contain sale price of last selected parcel.
+	mForSalePanel->getChild<LLIconCtrl>("icon_for_sale")->
+				setMouseDownCallback(boost::bind(&LLPanelPlaceProfile::onForSaleBannerClick, this));
+
+	mParcelOwner = getChild<LLTextBox>("owner_value");
+	mLastVisited = getChild<LLTextBox>("last_visited_value");
+
+	mRatingText = getChild<LLTextBox>("rating_value");
+	mVoiceText = getChild<LLTextBox>("voice_value");
+	mFlyText = getChild<LLTextBox>("fly_value");
+	mPushText = getChild<LLTextBox>("push_value");
+	mBuildText = getChild<LLTextBox>("build_value");
+	mScriptsText = getChild<LLTextBox>("scripts_value");
+	mDamageText = getChild<LLTextBox>("damage_value");
+
+	mRegionNameText = getChild<LLTextBox>("region_name");
+	mRegionTypeText = getChild<LLTextBox>("region_type");
+	mRegionRatingText = getChild<LLTextBox>("region_rating");
+	mRegionOwnerText = getChild<LLTextBox>("region_owner");
+	mRegionGroupText = getChild<LLTextBox>("region_group");
+
+	mEstateNameText = getChild<LLTextBox>("estate_name");
+	mEstateRatingText = getChild<LLTextBox>("estate_rating");
+	mEstateOwnerText = getChild<LLTextBox>("estate_owner");
+	mCovenantText = getChild<LLTextEditor>("covenant");
+
+	mSalesPriceText = getChild<LLTextBox>("sales_price");
+	mAreaText = getChild<LLTextBox>("area");
+	mTrafficText = getChild<LLTextBox>("traffic");
+	mPrimitivesText = getChild<LLTextBox>("primitives");
+	mParcelScriptsText = getChild<LLTextBox>("parcel_scripts");
+	mTerraformLimitsText = getChild<LLTextBox>("terraform_limits");
+	mSubdivideText = getChild<LLTextEditor>("subdivide");
+	mResaleText = getChild<LLTextEditor>("resale");
+	mSaleToText = getChild<LLTextBox>("sale_to");
+
+	return TRUE;
+}
+
+// virtual
+void LLPanelPlaceProfile::resetLocation()
+{
+	LLPanelPlaceInfo::resetLocation();
+
+	mForSalePanel->setVisible(FALSE);
+	mYouAreHerePanel->setVisible(FALSE);
+
+	std::string not_available = getString("not_available");
+	mParcelOwner->setValue(not_available);
+	mLastVisited->setValue(not_available);
+
+	mRatingText->setText(not_available);
+	mVoiceText->setText(not_available);
+	mFlyText->setText(not_available);
+	mPushText->setText(not_available);
+	mBuildText->setText(not_available);
+	mParcelScriptsText->setText(not_available);
+	mDamageText->setText(not_available);
+
+	mRegionNameText->setValue(not_available);
+	mRegionTypeText->setValue(not_available);
+	mRegionRatingText->setValue(not_available);
+	mRegionOwnerText->setValue(not_available);
+	mRegionGroupText->setValue(not_available);
+
+	mEstateNameText->setValue(not_available);
+	mEstateRatingText->setValue(not_available);
+	mEstateOwnerText->setValue(not_available);
+	mCovenantText->setValue(not_available);
+
+	mSalesPriceText->setValue(not_available);
+	mAreaText->setValue(not_available);
+	mTrafficText->setValue(not_available);
+	mPrimitivesText->setValue(not_available);
+	mParcelScriptsText->setValue(not_available);
+	mTerraformLimitsText->setValue(not_available);
+	mSubdivideText->setValue(not_available);
+	mResaleText->setValue(not_available);
+	mSaleToText->setValue(not_available);
+}
+
+// virtual
+void LLPanelPlaceProfile::setInfoType(INFO_TYPE type)
+{
+	bool is_info_type_agent = type == AGENT;
+	bool is_info_type_teleport_history = type == TELEPORT_HISTORY;
+
+	getChild<LLTextBox>("maturity_label")->setVisible(!is_info_type_agent);
+	mMaturityRatingText->setVisible(!is_info_type_agent);
+
+	getChild<LLTextBox>("owner_label")->setVisible(is_info_type_agent);
+	mParcelOwner->setVisible(is_info_type_agent);
+
+	getChild<LLTextBox>("last_visited_label")->setVisible(is_info_type_teleport_history);
+	mLastVisited->setVisible(is_info_type_teleport_history);
+
+	getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent);
+
+	switch(type)
+	{
+		case AGENT:
+		case PLACE:
+		default:
+			mCurrentTitle = getString("title_place");
+		break;
+
+		case TELEPORT_HISTORY:
+			mCurrentTitle = getString("title_teleport_history");
+		break;
+	}
+
+	LLPanelPlaceInfo::setInfoType(type);
+}
+
+// virtual
+void LLPanelPlaceProfile::processParcelInfo(const LLParcelData& parcel_data)
+{
+	LLPanelPlaceInfo::processParcelInfo(parcel_data);
+
+	// HACK: Flag 0x2 == adult region,
+	// Flag 0x1 == mature region, otherwise assume PG
+	std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
+	if (parcel_data.flags & 0x2)
+	{
+		rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
+	}
+	else if (parcel_data.flags & 0x1)
+	{
+		rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
+	}
+
+	mMaturityRatingText->setValue(rating);
+	mRatingText->setValue(rating);
+
+	//update for_sale banner, here we should use DFQ_FOR_SALE instead of PF_FOR_SALE
+	//because we deal with remote parcel response format
+	bool is_for_sale = (parcel_data.flags & DFQ_FOR_SALE) &&
+					 mInfoType == AGENT ? TRUE : FALSE;
+	mForSalePanel->setVisible(is_for_sale);
+}
+
+void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
+													LLViewerRegion* region,
+													const LLVector3d& pos_global,
+													bool is_current_parcel)
+{
+	if (!region || !parcel)
+		return;
+
+	// send EstateCovenantInfo message
+	LLMessageSystem *msg = gMessageSystem;
+	msg->newMessage("EstateCovenantRequest");
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID,	gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
+	msg->sendReliable(region->getHost());
+
+	LLParcelData parcel_data;
+
+	// HACK: Converting sim access flags to the format
+	// returned by remote parcel response.
+	switch(region->getSimAccess())
+	{
+	case SIM_ACCESS_MATURE:
+		parcel_data.flags = 0x1;
+		break;
+
+	case SIM_ACCESS_ADULT:
+		parcel_data.flags = 0x2;
+		break;
+
+	default:
+		parcel_data.flags = 0;
+	}
+	parcel_data.desc = parcel->getDesc();
+	parcel_data.name = parcel->getName();
+	parcel_data.sim_name = region->getName();
+	parcel_data.snapshot_id = parcel->getSnapshotID();
+	mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
+					  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
+					  (F32)pos_global.mdV[VZ]);
+	parcel_data.global_x = pos_global.mdV[VX];
+	parcel_data.global_y = pos_global.mdV[VY];
+	parcel_data.global_z = pos_global.mdV[VZ];
+
+	std::string on = getString("on");
+	std::string off = getString("off");
+
+	// Processing parcel characteristics
+	if (parcel->getParcelFlagAllowVoice())
+	{
+		mVoiceText->setText(on);
+	}
+	else
+	{
+		mVoiceText->setText(off);
+	}
+
+	if (!region->getBlockFly() && parcel->getAllowFly())
+	{
+		mFlyText->setText(on);
+	}
+	else
+	{
+		mFlyText->setText(off);
+	}
+
+	if (region->getRestrictPushObject() || parcel->getRestrictPushObject())
+	{
+		mPushText->setText(off);
+	}
+	else
+	{
+		mPushText->setText(on);
+	}
+
+	if (parcel->getAllowModify())
+	{
+		mBuildText->setText(on);
+	}
+	else
+	{
+		mBuildText->setText(off);
+	}
+
+	if((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) ||
+	   (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) ||
+	   !parcel->getAllowOtherScripts())
+	{
+		mScriptsText->setText(off);
+	}
+	else
+	{
+		mScriptsText->setText(on);
+	}
+
+	if (region->getAllowDamage() || parcel->getAllowDamage())
+	{
+		mDamageText->setText(on);
+	}
+	else
+	{
+		mDamageText->setText(off);
+	}
+
+	mRegionNameText->setText(region->getName());
+	mRegionTypeText->setText(region->getSimProductName());
+	mRegionRatingText->setText(region->getSimAccessString());
+
+	// Determine parcel owner
+	if (parcel->isPublic())
+	{
+		mParcelOwner->setText(getString("public"));
+		mRegionOwnerText->setText(getString("public"));
+	}
+	else
+	{
+		if (parcel->getIsGroupOwned())
+		{
+			mRegionOwnerText->setText(getString("group_owned_text"));
+
+			if(!parcel->getGroupID().isNull())
+			{
+				// FIXME: Using parcel group as region group.
+				gCacheName->get(parcel->getGroupID(), TRUE,
+								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionGroupText, _2, _3));
+
+				gCacheName->get(parcel->getGroupID(), TRUE,
+								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3));
+			}
+			else
+			{
+				std::string owner = getString("none_text");
+				mRegionGroupText->setText(owner);
+				mParcelOwner->setText(owner);
+			}
+		}
+		else
+		{
+			// Figure out the owner's name
+			gCacheName->get(parcel->getOwnerID(), FALSE,
+							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3));
+			gCacheName->get(region->getOwner(), FALSE,
+							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionOwnerText, _2, _3));
+		}
+
+		if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus())
+		{
+			mRegionOwnerText->setText(mRegionOwnerText->getText() + getString("sale_pending_text"));
+		}
+	}
+
+	mEstateRatingText->setText(region->getSimAccessString());
+
+	S32 area;
+	S32 claim_price;
+	S32 rent_price;
+	F32 dwell;
+	BOOL for_sale = parcel->getForSale();
+	LLViewerParcelMgr::getInstance()->getDisplayInfo(&area,
+													 &claim_price,
+													 &rent_price,
+													 &for_sale,
+													 &dwell);
+	if (for_sale)
+	{
+		// Adding "For Sale" flag in remote parcel response format.
+		parcel_data.flags |= DFQ_FOR_SALE;
+
+		const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
+		if(auth_buyer_id.notNull())
+		{
+			gCacheName->get(auth_buyer_id, TRUE,
+							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mSaleToText, _2, _3));
+
+			// Show sales info to a specific person or a group he belongs to.
+			if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id))
+			{
+				for_sale = FALSE;
+			}
+		}
+		else
+		{
+			mSaleToText->setText(getString("anyone"));
+		}
+
+		const U8* sign = (U8*)getString("price_text").c_str();
+		const U8* sqm = (U8*)getString("area_text").c_str();
+
+		mSalesPriceText->setText(llformat("%s%d ", sign, parcel->getSalePrice()));
+		mAreaText->setText(llformat("%d %s", area, sqm));
+		mTrafficText->setText(llformat("%.0f", dwell));
+
+		// Can't have more than region max tasks, regardless of parcel
+		// object bonus factor.
+		S32 primitives = llmin(llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()),
+							   (S32)region->getMaxTasks());
+
+		const U8* available = (U8*)getString("available").c_str();
+		const U8* allocated = (U8*)getString("allocated").c_str();
+
+		mPrimitivesText->setText(llformat("%d %s, %d %s", primitives, available, parcel->getPrimCount(), allocated));
+
+		if (parcel->getAllowOtherScripts())
+		{
+			mParcelScriptsText->setText(getString("all_residents_text"));
+		}
+		else if (parcel->getAllowGroupScripts())
+		{
+			mParcelScriptsText->setText(getString("group_text"));
+		}
+		else
+		{
+			mParcelScriptsText->setText(off);
+		}
+
+		mTerraformLimitsText->setText(parcel->getAllowTerraform() ? on : off);
+
+		if (region->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES)
+		{
+			mSubdivideText->setText(getString("can_change"));
+		}
+		else
+		{
+			mSubdivideText->setText(getString("can_not_change"));
+		}
+		if (region->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL)
+		{
+			mResaleText->setText(getString("can_not_resell"));
+		}
+		else
+		{
+			mResaleText->setText(getString("can_resell"));
+		}
+	}
+
+	mSelectedParcelID = parcel->getLocalID();
+	mLastSelectedRegionID = region->getRegionID();
+	processParcelInfo(parcel_data);
+
+	mYouAreHerePanel->setVisible(is_current_parcel);
+	getChild<LLAccordionCtrlTab>("sales_tab")->setVisible(for_sale);
+}
+
+void LLPanelPlaceProfile::updateEstateName(const std::string& name)
+{
+	mEstateNameText->setText(name);
+}
+
+void LLPanelPlaceProfile::updateEstateOwnerName(const std::string& name)
+{
+	mEstateOwnerText->setText(name);
+}
+
+void LLPanelPlaceProfile::updateCovenantText(const std::string &text)
+{
+	mCovenantText->setText(text);
+}
+
+void LLPanelPlaceProfile::updateLastVisitedText(const LLDate &date)
+{
+	if (date.isNull())
+	{
+		mLastVisited->setText(getString("unknown"));
+	}
+	else
+	{
+		std::string timeStr = getString("acquired_date");
+		LLSD substitution;
+		substitution["datetime"] = (S32) date.secondsSinceEpoch();
+		LLStringUtil::format (timeStr, substitution);
+		mLastVisited->setText(timeStr);
+	}
+}
+
+void LLPanelPlaceProfile::onForSaleBannerClick()
+{
+	LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance();
+	LLParcelSelectionHandle hParcel = mgr->getFloatingParcelSelection();
+	LLViewerRegion* selected_region =  mgr->getSelectionRegion();
+	if(!hParcel.isNull() && selected_region)
+	{
+		if(hParcel->getParcel()->getLocalID() == mSelectedParcelID &&
+				mLastSelectedRegionID ==selected_region->getRegionID())
+		{
+			if(hParcel->getParcel()->getSalePrice() - gStatusBar->getBalance() > 0)
+			{
+				LLFloaterBuyCurrency::buyCurrency("Buying selected land ", hParcel->getParcel()->getSalePrice());
+			}
+			else
+			{
+				LLViewerParcelMgr::getInstance()->startBuyLand();
+			}
+		}
+		else
+		{
+			LL_WARNS("Places") << "User  is trying  to buy remote parcel.Operation is not supported"<< LL_ENDL;
+		}
+
+	}
+}
+
+// static
+void LLPanelPlaceProfile::updateYouAreHereBanner(void* userdata)
+{
+	//YouAreHere Banner should be displayed only for selected places,
+	// If you want to display it for landmark or teleport history item, you should check by mParcelId
+
+	LLPanelPlaceProfile* self = static_cast<LLPanelPlaceProfile*>(userdata);
+	if(!self->getVisible())
+		return;
+
+	if(!gDisconnected)
+	{
+		static F32 radius = gSavedSettings.getF32("YouAreHereDistance");
+
+		BOOL display_banner = gAgent.getRegion()->getRegionID() == self->mLastSelectedRegionID &&
+										LLAgentUI::checkAgentDistance(self->mPosRegion, radius);
+
+		self->mYouAreHerePanel->setVisible(display_banner);
+	}
+}
diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h
new file mode 100644
index 00000000000..d8e4bcb6bdb
--- /dev/null
+++ b/indra/newview/llpanelplaceprofile.h
@@ -0,0 +1,114 @@
+/**
+ * @file llpanelplaceprofile.h
+ * @brief Displays place profile in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELPLACEPROFILE_H
+#define LL_LLPANELPLACEPROFILE_H
+
+#include "llpanelplaceinfo.h"
+
+class LLTextEditor;
+
+class LLPanelPlaceProfile : public LLPanelPlaceInfo
+{
+public:
+	LLPanelPlaceProfile();
+	/*virtual*/ ~LLPanelPlaceProfile();
+
+	/*virtual*/ BOOL postBuild();
+
+	/*virtual*/ void resetLocation();
+
+	/*virtual*/ void setInfoType(INFO_TYPE type);
+
+	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+
+	// Displays information about the currently selected parcel
+	// without sending a request to the server.
+	// If is_current_parcel true shows "You Are Here" banner.
+	void displaySelectedParcelInfo(LLParcel* parcel,
+								   LLViewerRegion* region,
+								   const LLVector3d& pos_global,
+								   bool is_current_parcel);
+
+	void updateEstateName(const std::string& name);
+	void updateEstateOwnerName(const std::string& name);
+	void updateCovenantText(const std::string &text);
+	void updateLastVisitedText(const LLDate &date);
+
+private:
+	void onForSaleBannerClick();
+
+	static void updateYouAreHereBanner(void*);// added to gIdleCallbacks
+
+	/**
+	 * Holds last displayed parcel. Needed for YouAreHere banner.
+	 */
+	S32					mSelectedParcelID;
+	LLUUID				mLastSelectedRegionID;
+
+	LLPanel*			mForSalePanel;
+	LLPanel*			mYouAreHerePanel;
+
+	LLTextBox*			mParcelOwner;
+	LLTextBox*			mLastVisited;
+
+	LLTextBox*			mRatingText;
+	LLTextBox*			mVoiceText;
+	LLTextBox*			mFlyText;
+	LLTextBox*			mPushText;
+	LLTextBox*			mBuildText;
+	LLTextBox*			mScriptsText;
+	LLTextBox*			mDamageText;
+
+	LLTextBox*			mRegionNameText;
+	LLTextBox*			mRegionTypeText;
+	LLTextBox*			mRegionRatingText;
+	LLTextBox*			mRegionOwnerText;
+	LLTextBox*			mRegionGroupText;
+
+	LLTextBox*			mEstateNameText;
+	LLTextBox*			mEstateRatingText;
+	LLTextBox*			mEstateOwnerText;
+	LLTextEditor*		mCovenantText;
+
+	LLTextBox*			mSalesPriceText;
+	LLTextBox*			mAreaText;
+	LLTextBox*			mTrafficText;
+	LLTextBox*			mPrimitivesText;
+	LLTextBox*			mParcelScriptsText;
+	LLTextBox*			mTerraformLimitsText;
+	LLTextEditor*		mSubdivideText;
+	LLTextEditor*		mResaleText;
+	LLTextBox*			mSaleToText;
+};
+
+#endif // LL_LLPANELPLACEPROFILE_H
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index b2e9110e966..42e4a6e40b1 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -57,9 +57,10 @@
 #include "llinventorymodel.h"
 #include "lllandmarkactions.h"
 #include "lllandmarklist.h"
-#include "llpanelplaceinfo.h"
+#include "llpanellandmarkinfo.h"
 #include "llpanellandmarks.h"
 #include "llpanelpick.h"
+#include "llpanelplaceprofile.h"
 #include "llpanelteleporthistory.h"
 #include "llteleporthistorystorage.h"
 #include "lltoggleablemenu.h"
@@ -121,7 +122,8 @@ LLPanelPlaces::LLPanelPlaces()
 		mFilterSubString(LLStringUtil::null),
 		mActivePanel(NULL),
 		mFilterEditor(NULL),
-		mPlaceInfo(NULL),
+		mPlaceProfile(NULL),
+		mLandmarkInfo(NULL),
 		mPickPanel(NULL),
 		mItem(NULL),
 		mPlaceMenu(NULL),
@@ -135,7 +137,7 @@ LLPanelPlaces::LLPanelPlaces()
 	gInventory.addObserver(mInventoryObserver);
 
 	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
-			boost::bind(&LLPanelPlaces::onAgentParcelChange, this));
+			boost::bind(&LLPanelPlaces::updateVerbs, this));
 
 	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
 }
@@ -206,25 +208,32 @@ BOOL LLPanelPlaces::postBuild()
 		mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2, false));
 	}
 
-	mPlaceInfo = getChild<LLPanelPlaceInfo>("panel_place_info");
+	mPlaceProfile = getChild<LLPanelPlaceProfile>("panel_place_profile");
+	mLandmarkInfo = getChild<LLPanelLandmarkInfo>("panel_landmark_info");
+	if (!mPlaceProfile || !mLandmarkInfo)
+		return FALSE;
 
-	LLButton* back_btn = mPlaceInfo->getChild<LLButton>("back_btn");
+	LLButton* back_btn = mPlaceProfile->getChild<LLButton>("back_btn");
 	back_btn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this));
 
-	LLLineEditor* title_editor = mPlaceInfo->getChild<LLLineEditor>("title_editor");
+	back_btn = mLandmarkInfo->getChild<LLButton>("back_btn");
+	back_btn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this));
+
+	LLLineEditor* title_editor = mLandmarkInfo->getChild<LLLineEditor>("title_editor");
 	title_editor->setKeystrokeCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this), NULL);
 
-	LLTextEditor* notes_editor = mPlaceInfo->getChild<LLTextEditor>("notes_editor");
+	LLTextEditor* notes_editor = mLandmarkInfo->getChild<LLTextEditor>("notes_editor");
 	notes_editor->setKeystrokeCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this));
 
-	LLComboBox* folder_combo = mPlaceInfo->getChild<LLComboBox>("folder_combo");
+	LLComboBox* folder_combo = mLandmarkInfo->getChild<LLComboBox>("folder_combo");
 	folder_combo->setSelectionCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this));
+
 	return TRUE;
 }
 
 void LLPanelPlaces::onOpen(const LLSD& key)
 {
-	if(mPlaceInfo == NULL || key.size() == 0)
+	if(!mPlaceProfile || !mLandmarkInfo || key.size() == 0)
 		return;
 
 	mFilterEditor->clear();
@@ -239,11 +248,11 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 
 	if (mPlaceInfoType == AGENT_INFO_TYPE)
 	{
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::AGENT);
+		mPlaceProfile->setInfoType(LLPanelPlaceInfo::AGENT);
 	}
 	else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE)
 	{
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK);
+		mLandmarkInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK);
 
 		if (key.has("x") && key.has("y") && key.has("z"))
 		{
@@ -256,11 +265,11 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 			mPosGlobal = gAgent.getPositionGlobal();
 		}
 
-		mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal);
+		mLandmarkInfo->displayParcelInfo(LLUUID(), mPosGlobal);
 	}
 	else if (mPlaceInfoType == LANDMARK_INFO_TYPE)
 	{
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::LANDMARK);
+		mLandmarkInfo->setInfoType(LLPanelPlaceInfo::LANDMARK);
 
 		LLInventoryItem* item = gInventory.getItem(key["id"].asUUID());
 		if (!item)
@@ -270,17 +279,12 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 	}
 	else if (mPlaceInfoType == REMOTE_PLACE_INFO_TYPE)
 	{
-		if (mPlaceInfo->isMediaPanelVisible())
-		{
-			toggleMediaPanel();
-		}
-
 		mPosGlobal = LLVector3d(key["x"].asReal(),
 								key["y"].asReal(),
 								key["z"].asReal());
 
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::PLACE);
-		mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal);
+		mPlaceProfile->setInfoType(LLPanelPlaceInfo::PLACE);
+		mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal);
 	}
 	else if (mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
 	{
@@ -291,9 +295,9 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 
 		mPosGlobal = hist_items[index].mGlobalPos;
 
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY);
-		mPlaceInfo->updateLastVisitedText(hist_items[index].mDate);
-		mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal);
+		mPlaceProfile->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY);
+		mPlaceProfile->updateLastVisitedText(hist_items[index].mDate);
+		mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal);
 	}
 
 	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
@@ -321,7 +325,7 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 
 void LLPanelPlaces::setItem(LLInventoryItem* item)
 {
-	if (!mPlaceInfo || !item)
+	if (!mLandmarkInfo || !item)
 		return;
 
 	mItem = item;
@@ -351,19 +355,19 @@ void LLPanelPlaces::setItem(LLInventoryItem* item)
 
 	if (is_landmark_editable)
 	{
-		if(!mPlaceInfo->setLandmarkFolder(mItem->getParentUUID()) && !mItem->getParentUUID().isNull())
+		if(!mLandmarkInfo->setLandmarkFolder(mItem->getParentUUID()) && !mItem->getParentUUID().isNull())
 		{
 			const LLViewerInventoryCategory* cat = gInventory.getCategory(mItem->getParentUUID());
-			if(cat)
+			if (cat)
 			{
-				std::string cat_fullname = LLPanelPlaceInfo::getFullFolderName(cat);
-				LLComboBox* folderList = mPlaceInfo->getChild<LLComboBox>("folder_combo");
-				folderList->add(cat_fullname, cat->getUUID(),ADD_TOP);
+				std::string cat_fullname = LLPanelLandmarkInfo::getFullFolderName(cat);
+				LLComboBox* folderList = mLandmarkInfo->getChild<LLComboBox>("folder_combo");
+				folderList->add(cat_fullname, cat->getUUID(), ADD_TOP);
 			}
 		}
 	}
 
-	mPlaceInfo->displayItemInfo(mItem);
+	mLandmarkInfo->displayItemInfo(mItem);
 
 	LLLandmark* lm = gLandmarkList.getAsset(mItem->getAssetUUID(),
 											boost::bind(&LLPanelPlaces::onLandmarkLoaded, this, _1));
@@ -375,13 +379,13 @@ void LLPanelPlaces::setItem(LLInventoryItem* item)
 
 void LLPanelPlaces::onLandmarkLoaded(LLLandmark* landmark)
 {
-	if (!mPlaceInfo)
+	if (!mLandmarkInfo)
 		return;
 
 	LLUUID region_id;
 	landmark->getRegionID(region_id);
 	landmark->getGlobalPos(mPosGlobal);
-	mPlaceInfo->displayParcelInfo(region_id, mPosGlobal);
+	mLandmarkInfo->displayParcelInfo(region_id, mPosGlobal);
 }
 
 void LLPanelPlaces::onFilterEdit(const std::string& search_string, bool force_filter)
@@ -418,10 +422,8 @@ void LLPanelPlaces::onShareButtonClicked()
 
 void LLPanelPlaces::onTeleportButtonClicked()
 {
-	if (!mPlaceInfo)
-		return;
-
-	if (mPlaceInfo->getVisible())
+	LLPanelPlaceInfo* panel = getCurrentInfoPanel();
+	if (panel && panel->getVisible())
 	{
 		if (mPlaceInfoType == LANDMARK_INFO_TYPE)
 		{
@@ -450,10 +452,8 @@ void LLPanelPlaces::onTeleportButtonClicked()
 
 void LLPanelPlaces::onShowOnMapButtonClicked()
 {
-	if (!mPlaceInfo)
-		return;
-
-	if (mPlaceInfo->getVisible())
+	LLPanelPlaceInfo* panel = getCurrentInfoPanel();
+	if (panel && panel->getVisible())
 	{
 		LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
 		if(!worldmap_instance)
@@ -496,31 +496,31 @@ void LLPanelPlaces::onShowOnMapButtonClicked()
 
 void LLPanelPlaces::onEditButtonClicked()
 {
-	if (!mPlaceInfo || isLandmarkEditModeOn)
+	if (!mLandmarkInfo || isLandmarkEditModeOn)
 		return;
 
 	isLandmarkEditModeOn = true;
 
-	mPlaceInfo->toggleLandmarkEditMode(TRUE);
+	mLandmarkInfo->toggleLandmarkEditMode(TRUE);
 
 	updateVerbs();
 }
 
 void LLPanelPlaces::onSaveButtonClicked()
 {
-	if (!mPlaceInfo || mItem.isNull())
+	if (!mLandmarkInfo || mItem.isNull())
 		return;
 
-	std::string current_title_value = mPlaceInfo->getLandmarkTitle();
+	std::string current_title_value = mLandmarkInfo->getLandmarkTitle();
 	std::string item_title_value = mItem->getName();
-	std::string current_notes_value = mPlaceInfo->getLandmarkNotes();
+	std::string current_notes_value = mLandmarkInfo->getLandmarkNotes();
 	std::string item_notes_value = mItem->getDescription();
 
 	LLStringUtil::trim(current_title_value);
 	LLStringUtil::trim(current_notes_value);
 
 	LLUUID item_id = mItem->getUUID();
-	LLUUID folder_id = mPlaceInfo->getLandmarkFolder();
+	LLUUID folder_id = mLandmarkInfo->getLandmarkFolder();
 
 	LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(mItem);
 
@@ -553,7 +553,7 @@ void LLPanelPlaces::onSaveButtonClicked()
 
 void LLPanelPlaces::onCancelButtonClicked()
 {
-	if (!mPlaceInfo)
+	if (!mLandmarkInfo)
 		return;
 
 	if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE)
@@ -562,13 +562,13 @@ void LLPanelPlaces::onCancelButtonClicked()
 	}
 	else
 	{
-		mPlaceInfo->toggleLandmarkEditMode(FALSE);
+		mLandmarkInfo->toggleLandmarkEditMode(FALSE);
 		isLandmarkEditModeOn = false;
 
 		updateVerbs();
 
 		// Reload the landmark properties.
-		mPlaceInfo->displayItemInfo(mItem);
+		mLandmarkInfo->displayItemInfo(mItem);
 	}
 }
 
@@ -652,9 +652,6 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
 	}
 	else if (item == "pick")
 	{
-		if (!mPlaceInfo)
-			return;
-
 		if (mPickPanel == NULL)
 		{
 			mPickPanel = LLPanelPickEdit::create();
@@ -667,7 +664,12 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
 
 		togglePickPanel(TRUE);
 		mPickPanel->onOpen(LLSD());
-		mPlaceInfo->createPick(mPosGlobal, mPickPanel);
+
+		LLPanelPlaceInfo* panel = getCurrentInfoPanel();
+		if (panel)
+		{
+			panel->createPick(mPosGlobal, mPickPanel);
+		}
 
 		LLRect rect = getRect();
 		mPickPanel->reshape(rect.getWidth(), rect.getHeight());
@@ -694,39 +696,16 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
 
 void LLPanelPlaces::onBackButtonClicked()
 {
-	if (!mPlaceInfo)
-		return;
-	
-	if (mPlaceInfo->isMediaPanelVisible())
-	{
-		toggleMediaPanel();
-	}
-	else
-	{
-		togglePlaceInfoPanel(FALSE);
+	togglePlaceInfoPanel(FALSE);
 
-		// Resetting mPlaceInfoType when Place Info panel is closed.
-		mPlaceInfoType = LLStringUtil::null;
+	// Resetting mPlaceInfoType when Place Info panel is closed.
+	mPlaceInfoType = LLStringUtil::null;
 
-		isLandmarkEditModeOn = false;
-	}
+	isLandmarkEditModeOn = false;
 
 	updateVerbs();
 }
 
-void LLPanelPlaces::toggleMediaPanel()
-{
-	if (!mPlaceInfo)
-		return;
-
-	mPlaceInfo->toggleMediaPanel(!mPlaceInfo->isMediaPanelVisible());
-
-	// Refresh the current place info because
-	// the media panel controls can't refer to
-	// the remote parcel media.
-	onOpen(LLSD().insert("type", AGENT_INFO_TYPE));
-}
-
 void LLPanelPlaces::togglePickPanel(BOOL visible)
 {
 	setAllChildrenVisible(this, !visible);
@@ -737,26 +716,50 @@ void LLPanelPlaces::togglePickPanel(BOOL visible)
 
 void LLPanelPlaces::togglePlaceInfoPanel(BOOL visible)
 {
-	if (!mPlaceInfo)
+	if (!mPlaceProfile || !mLandmarkInfo)
 		return;
 
-	mPlaceInfo->setVisible(visible);
 	mFilterEditor->setVisible(!visible);
 	mTabContainer->setVisible(!visible);
 
-	if (visible)
+	if (mPlaceInfoType == AGENT_INFO_TYPE ||
+		mPlaceInfoType == REMOTE_PLACE_INFO_TYPE ||
+		mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
 	{
-		mPlaceInfo->resetLocation();
+		mPlaceProfile->setVisible(visible);
 
-		LLRect rect = getRect();
-		LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
-		mPlaceInfo->reshape(new_rect.getWidth(),new_rect.getHeight());
+		if (visible)
+		{
+			mPlaceProfile->resetLocation();
+
+			LLRect rect = getRect();
+			LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
+			mPlaceProfile->reshape(new_rect.getWidth(), new_rect.getHeight());
+
+			mLandmarkInfo->setVisible(FALSE);
+		}
+	}
+	else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE ||
+			 mPlaceInfoType == LANDMARK_INFO_TYPE)
+	{
+		mLandmarkInfo->setVisible(visible);
+
+		if (visible)
+		{
+			mLandmarkInfo->resetLocation();
+
+			LLRect rect = getRect();
+			LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
+			mLandmarkInfo->reshape(new_rect.getWidth(), new_rect.getHeight());
+
+			mPlaceProfile->setVisible(FALSE);
+		}
 	}
 }
 
 void LLPanelPlaces::changedParcelSelection()
 {
-	if (!mPlaceInfo)
+	if (!mPlaceProfile)
 		return;
 
 	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
@@ -782,8 +785,8 @@ void LLPanelPlaces::changedParcelSelection()
 		}
 	}
 
-	mPlaceInfo->resetLocation();
-	mPlaceInfo->displaySelectedParcelInfo(parcel, region, mPosGlobal, is_current_parcel);
+	mPlaceProfile->resetLocation();
+	mPlaceProfile->displaySelectedParcelInfo(parcel, region, mPosGlobal, is_current_parcel);
 
 	updateVerbs();
 }
@@ -830,30 +833,22 @@ void LLPanelPlaces::changedInventory(U32 mask)
 	gInventory.removeObserver(mInventoryObserver);
 }
 
-void LLPanelPlaces::onAgentParcelChange()
+void LLPanelPlaces::updateVerbs()
 {
-	if (!mPlaceInfo)
-		return;
+	bool is_place_info_visible;
 
-	if (mPlaceInfo->isMediaPanelVisible())
+	LLPanelPlaceInfo* panel = getCurrentInfoPanel();
+	if (panel)
 	{
-		onOpen(LLSD().insert("type", AGENT_INFO_TYPE));
+		is_place_info_visible = panel->getVisible();
 	}
 	else
 	{
-		updateVerbs();
+		is_place_info_visible = false;
 	}
-}
 
-void LLPanelPlaces::updateVerbs()
-{
-	if (!mPlaceInfo)
-		return;
-
-	bool is_place_info_visible = mPlaceInfo->getVisible();
 	bool is_agent_place_info_visible = mPlaceInfoType == AGENT_INFO_TYPE;
 	bool is_create_landmark_visible = mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE;
-	bool is_media_panel_visible = mPlaceInfo->isMediaPanelVisible();
 
 	mTeleportBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
 	mShowOnMapBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
@@ -864,7 +859,7 @@ void LLPanelPlaces::updateVerbs()
 	mCancelBtn->setVisible(isLandmarkEditModeOn);
 	mCloseBtn->setVisible(is_create_landmark_visible && !isLandmarkEditModeOn);
 
-	mOverflowBtn->setEnabled(is_place_info_visible && !is_media_panel_visible && !is_create_landmark_visible);
+	mOverflowBtn->setEnabled(is_place_info_visible && !is_create_landmark_visible);
 
 	if (is_place_info_visible)
 	{
@@ -872,16 +867,13 @@ void LLPanelPlaces::updateVerbs()
 		{
 			// We don't need to teleport to the current location
 			// so check if the location is not within the current parcel.
-			mTeleportBtn->setEnabled(!is_media_panel_visible &&
-									 !mPosGlobal.isExactlyZero() &&
+			mTeleportBtn->setEnabled(!mPosGlobal.isExactlyZero() &&
 									 !LLViewerParcelMgr::getInstance()->inAgentParcel(mPosGlobal));
 		}
 		else if (mPlaceInfoType == LANDMARK_INFO_TYPE || mPlaceInfoType == REMOTE_PLACE_INFO_TYPE)
 		{
 			mTeleportBtn->setEnabled(TRUE);
 		}
-
-		mShowOnMapBtn->setEnabled(!is_media_panel_visible);
 	}
 	else
 	{
@@ -890,6 +882,23 @@ void LLPanelPlaces::updateVerbs()
 	}
 }
 
+LLPanelPlaceInfo* LLPanelPlaces::getCurrentInfoPanel()
+{
+	if (mPlaceInfoType == AGENT_INFO_TYPE ||
+		mPlaceInfoType == REMOTE_PLACE_INFO_TYPE ||
+		mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
+	{
+		return mPlaceProfile;
+	}
+	else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE ||
+			 mPlaceInfoType == LANDMARK_INFO_TYPE)
+	{
+		return mLandmarkInfo;
+	}
+
+	return NULL;
+}
+
 static bool is_agent_in_selected_parcel(LLParcel* parcel)
 {
 	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
index e2d281dd840..39eb5261db4 100644
--- a/indra/newview/llpanelplaces.h
+++ b/indra/newview/llpanelplaces.h
@@ -37,6 +37,10 @@
 class LLInventoryItem;
 class LLFilterEditor;
 class LLLandmark;
+
+class LLPanelLandmarkInfo;
+class LLPanelPlaceProfile;
+
 class LLPanelPickEdit;
 class LLPanelPlaceInfo;
 class LLPanelPlacesTab;
@@ -85,13 +89,16 @@ class LLPanelPlaces : public LLPanel
 	void togglePickPanel(BOOL visible);
 	void togglePlaceInfoPanel(BOOL visible);
 
-	void onAgentParcelChange();
 	void updateVerbs();
 
+	LLPanelPlaceInfo* getCurrentInfoPanel();
+
 	LLFilterEditor*				mFilterEditor;
 	LLPanelPlacesTab*			mActivePanel;
 	LLTabContainer*				mTabContainer;
-	LLPanelPlaceInfo*			mPlaceInfo;
+	LLPanelPlaceProfile*		mPlaceProfile;
+	LLPanelLandmarkInfo*		mLandmarkInfo;
+
 	LLPanelPickEdit*			mPickPanel;
 	LLToggleableMenu*			mPlaceMenu;
 	LLToggleableMenu*			mLandmarkMenu;
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 5fd762ab3d3..caa668836db 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -139,7 +139,7 @@
 #include "llgroupactions.h"
 #include "llagentui.h"
 #include "llpanelblockedlist.h"
-#include "llpanelplaceinfo.h"
+#include "llpanelplaceprofile.h"
 
 #include <boost/tokenizer.hpp>
 #include <boost/algorithm/string/split.hpp>
@@ -5548,7 +5548,7 @@ void process_covenant_reply(LLMessageSystem* msg, void**)
 	LLPanelLandCovenant::updateEstateOwnerName(owner_name);
 	LLFloaterBuyLand::updateEstateOwnerName(owner_name);
 
-	LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info");
+	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile");
 	if (panel)
 	{
 		panel->updateEstateName(estate_name);
@@ -5682,7 +5682,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
 	LLPanelLandCovenant::updateCovenantText(covenant_text);
 	LLFloaterBuyLand::updateCovenantText(covenant_text, asset_uuid);
 
-	LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info");
+	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile");
 	if (panel)
 	{
 		panel->updateCovenantText(covenant_text);
diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
new file mode 100644
index 00000000000..03ba7f7c81f
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="570"
+ layout="topleft"
+ left="0"
+ min_height="350"
+ name="landmark_info"
+ top="20"
+ width="330">
+    <string
+     name="title_create_landmark"
+     value="Create Landmark" />
+    <string
+     name="title_edit_landmark"
+     value="Edit Landmark" />
+    <string
+     name="title_landmark"
+     value="Landmark" />
+    <string
+     name="not_available"
+     value="(N\A)" />
+    <string
+     name="unknown"
+     value="(unknown)" />
+    <string
+     name="public"
+     value="(public)" />
+    <string
+     name="server_update_text">
+        Place information not available without server update.
+    </string>
+    <string
+     name="server_error_text">
+        Information about this location is unavailable at this time, please try again later.
+    </string>
+    <string
+     name="server_forbidden_text">
+        Information about this location is unavailable due to access restrictions.  Please check your permissions with the parcel owner.
+    </string>
+    <string
+     name="acquired_date">
+        [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+    </string>
+    <button
+     follows="top|right"
+     height="23"
+     image_overlay="BackArrow_Off"
+     layout="topleft"
+     left="10"
+     name="back_btn"
+     picture_style="true"
+     tab_stop="false"
+     top="0"
+     width="23" />
+    <text
+     follows="top|left|right"
+     font="SansSerifHugeBold"
+     height="26"
+     layout="topleft"
+     left_pad="10"
+     name="title"
+     text_color="white"
+     top="0"
+     use_ellipses="true"
+     value="Place Profile"
+     width="275" />
+    <scroll_container
+     color="DkGray2"
+     follows="all"
+     height="533"
+     layout="topleft"
+     left="10"
+     name="place_scroll"
+     opaque="true"
+     top_pad="5"
+     width="313">
+        <panel
+         bg_alpha_color="DkGray2"
+         follows="all"
+         height="533"
+         layout="topleft"
+         left="0"
+         min_height="300"
+         name="scrolling_panel"
+         top="0"
+         width="313">
+            <texture_picker
+             enabled="false"
+             follows="top|left"
+             height="190"
+             layout="topleft"
+             left="10"
+             name="logo"
+             top="10"
+             width="290" />
+            <text
+             follows="left|top|right"
+             font="SansSerifLarge"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="region_title"
+             text_color="white"
+             top_pad="5"
+             use_ellipses="true"
+             value="SampleRegion"
+             width="290" />
+            <text
+             follows="left|top|right"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="parcel_title"
+             top_pad="4"
+             use_ellipses="true"
+             value="SampleParcel, Name Long (145, 228, 26)"
+             width="285" />
+            <expandable_text
+             follows="left|top|right"
+             height="50"
+             layout="topleft"
+             left="5"
+             name="description"
+             top_pad="10"
+             value="Du waltz die spritz"
+             width="300" />
+            <panel
+             follows="left|top|right"
+             height="55"
+             layout="topleft"
+             left="10"
+             name="landmark_info_panel"
+             top_pad="10"
+             width="290">
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="owner_label"
+                 top_pad="10"
+                 value="Owner:"
+                 width="90" />
+                <text
+                 follows="left|top|right"
+                 height="15"
+                 layout="topleft"
+                 left="70"
+                 name="owner"
+                 top_delta="0"
+                 width="200" />
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="creator_label"
+                 value="Creator:"
+                 width="90" />
+                <text
+                 follows="left|top|right"
+                 height="15"
+                 layout="topleft"
+                 left="70"
+                 name="creator"
+                 top_delta="0"
+                 width="200" />
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="created_label"
+                 value="Created:"
+                 width="50" />
+                <text
+                 follows="left|top|right"
+                 height="15"
+                 layout="topleft"
+                 left="70"
+                 name="created"
+                 top_delta="0"
+                 width="200" />
+            </panel>
+            <panel
+             follows="left|top|right"
+             height="210"
+             layout="topleft"
+             left="10"
+             name="landmark_edit_panel"
+             width="290">
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="title_label"
+                 top_pad="10"
+                 value="Title:"
+                 width="290" />
+                <line_editor
+                 background_image_disabled="task_panel_background.png"
+                 follows="left|top|right"
+                 height="22"
+                 layout="topleft"
+                 left="0"
+                 max_length="63"
+                 name="title_editor"
+                 prevalidate_callback="ascii"
+                 text_readonly_color="white"
+                 top_pad="5"
+                 width="290" />
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="notes_label"
+                 top_pad="10"
+                 value="My notes:"
+                 width="290" />
+                <text_editor
+                 bg_readonly_color="DkGray2"
+                 follows="all"
+                 height="70"
+                 layout="topleft"
+                 left="0"
+                 max_length="127"
+                 name="notes_editor"
+                 read_only="true"
+                 text_readonly_color="white"
+                 top_pad="5"
+                 width="290"
+                 wrap="true" />
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="folder_label"
+                 top_pad="15"
+                 value="Landmark location:"
+                 width="290" />
+                <combo_box
+                 follows="bottom|left|right"
+                 height="20"
+                 layout="topleft"
+                 left="0"
+                 name="folder_combo"
+                 top_pad="5"
+                 width="200" />
+            </panel>
+        </panel>
+    </scroll_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
new file mode 100644
index 00000000000..7e073f064d7
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -0,0 +1,979 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="570"
+ layout="topleft"
+ left="0"
+ min_height="350"
+ name="place_profile"
+ top="20"
+ width="330">
+    <string
+     name="on"
+     value="On" />
+    <string
+     name="off"
+     value="Off" />
+    <string
+     name="anyone"
+     value="Anyone" />
+    <string
+     name="available"
+     value="available" />
+    <string
+     name="allocated"
+     value="allocated" />
+    <string
+     name="title_place"
+     value="Place Profile" />
+    <string
+     name="title_teleport_history"
+     value="Teleport History Location" />
+    <string
+     name="not_available"
+     value="(N\A)" />
+    <string
+     name="unknown"
+     value="(unknown)" />
+    <string
+     name="public"
+     value="(public)" />
+    <string
+     name="none_text"
+     value="(none)" />
+    <string
+     name="sale_pending_text"
+     value="(Sale Pending)" />
+    <string
+     name="group_owned_text"
+     value="(Group Owned)" />
+    <string
+     name="price_text"
+     value="L$" />
+    <string
+     name="area_text"
+     value="m²" />
+    <string
+     name="all_residents_text"
+     value="All Residents" />
+    <string
+     name="group_text"
+     value="Group" />
+    <string
+     name="can_resell">
+        Purchased land in this region may be resold.
+    </string>
+    <string
+     name="can_not_resell">
+        Purchased land in this region may not be resold.
+    </string>
+    <string
+     name="can_change">
+        Purchased land in this region may be joined or subdivided.
+    </string>
+    <string
+     name="can_not_change">
+        Purchased land in this region may not be joined or subdivided.
+    </string>
+    <string
+     name="server_update_text">
+        Place information not available without server update.
+    </string>
+    <string
+     name="server_error_text">
+        Information about this location is unavailable at this time, please try again later.
+    </string>
+    <string
+     name="server_forbidden_text">
+        Information about this location is unavailable due to access restrictions.  Please check your permissions with the parcel owner.
+    </string>
+    <string
+     name="acquired_date">
+        [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+    </string>
+    <button
+     follows="top|right"
+     height="23"
+     image_overlay="BackArrow_Off"
+     layout="topleft"
+     left="10"
+     name="back_btn"
+     picture_style="true"
+     tab_stop="false"
+     top="0"
+     width="23" />
+    <text
+     follows="top|left|right"
+     font="SansSerifHugeBold"
+     height="26"
+     layout="topleft"
+     left_pad="10"
+     name="title"
+     text_color="white"
+     top="0"
+     use_ellipses="true"
+     value="Place Profile"
+     width="275" />
+    <scroll_container
+     color="DkGray2"
+     follows="all"
+     height="533"
+     layout="topleft"
+     left="10"
+     name="place_scroll"
+     opaque="true"
+     top_pad="5"
+     width="313">
+        <panel
+         bg_alpha_color="DkGray2"
+         follows="all"
+         height="533"
+         layout="topleft"
+         left="0"
+         min_height="300"
+         name="scrolling_panel"
+         top="0"
+         value="&gt;"
+         width="313">
+            <texture_picker
+             enabled="false"
+             follows="top|left"
+             height="190"
+             layout="topleft"
+             left="10"
+             name="logo"
+             top="10"
+             width="290" />
+            <layout_stack
+             border_size="0"
+             clip="false"
+             follows="all"
+             height="50"
+             layout="topleft"
+             mouse_opaque="false"
+             name="panel_stack"
+             orientation="horizontal"
+             top_pad="-65"
+             width="100">
+                <layout_panel
+                 follows="left|right"
+                 height="50"
+                 layout="topleft"
+                 left="0"
+                 min_height="50"
+                 min_width="50"
+                 mouse_opaque="false"
+                 name="here_panel"
+                 top="0"
+                 user_resize="false"
+                 width="60">
+                    <icon
+                     follows="top|left"
+                     height="50"
+                     image_name="YouAreHere_Badge"
+                     layout="topleft"
+                     left="0"
+                     name="icon_you_are_here"
+                     top="0"
+                     width="50" />
+                </layout_panel>
+                <layout_panel
+                 follows="left|right"
+                 height="60"
+                 layout="topleft"
+                 min_height="50"
+                 min_width="60"
+                 mouse_opaque="false"
+                 name="for_sale_panel"
+                 top="0"
+                 user_resize="false"
+                 width="60">
+                    <icon
+                     follows="top|left"
+                     height="50"
+                     image_name="ForSale_Badge"
+                     layout="topleft"
+                     left="10"
+                     name="icon_for_sale"
+                     top="0"
+                     width="50" />
+                </layout_panel>
+            </layout_stack>
+            <text
+             follows="left|top|right"
+             font="SansSerifLarge"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="region_title"
+             text_color="white"
+             top_pad="5"
+             use_ellipses="true"
+             value="SampleRegion"
+             width="290" />
+       <!-- <icon
+             follows="top|right"
+             height="16"
+             image_name="Icon_For_Sale"
+             layout="topleft"
+             left="3"
+             mouse_opaque="true"
+             name="icon_for_sale"
+             width="16" />-->
+            <text
+             follows="left|top|right"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="parcel_title"
+             top_pad="4"
+             use_ellipses="true"
+             value="SampleParcel, Name Long (145, 228, 26)"
+             width="285" />
+            <expandable_text
+             follows="left|top|right"
+             height="50"
+             layout="topleft"
+             left="5"
+             name="description"
+             top_pad="10"
+             value="Du waltz die spritz"
+             width="300" />
+            <text
+             follows="left|top"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="owner_label"
+             text_color="White"
+             top_pad="0"
+             value="Owner:"
+             width="90" />
+         <!--TODO: HOOK THIS NAME UP WITH AN INSPECTOR  -->
+            <text
+             follows="left|top|right"
+             height="14"
+             layout="topleft"
+             left_pad="1"
+             name="owner_value"
+             top_delta="0"
+             value="Alex Superduperlongenamenton"
+             width="205" />
+            <accordion
+             follows="all"
+             height="230"
+             layout="topleft"
+             left="0"
+             name="advanced_info_accordion"
+             top_pad="10"
+             width="313">
+                <accordion_tab
+                 layout="topleft"
+                 name="parcel_characteristics_tab"
+                 title="Parcel">
+                    <scroll_container
+                     color="DkGray2"
+                     follows="all"
+                     height="132"
+                     layout="topleft"
+                     left="0"
+                     name="parcel_scroll"
+                     opaque="true"
+                     top="0"
+                     width="290">
+                        <panel
+                         follows="all"
+                         height="165"
+                         layout="topleft"
+                         left="0"
+                         top="0"
+                         width="275">
+                            <icon
+                             follows="top|left"
+                             height="16"
+                             image_name="parcel_drk_M"
+                             layout="topleft"
+                             left="20"
+                             name="icon_M"
+                             top="0"
+                             width="18" />
+                            <icon
+                             follows="top|left"
+                             height="16"
+                             image_name="parcel_drk_R"
+                             layout="topleft"
+                             left="20"
+                             name="icon_R"
+                             top="0"
+                             width="18" />
+                            <icon
+                             follows="top|left"
+                             height="16"
+                             image_name="parcel_drk_PG"
+                             layout="topleft"
+                             left="20"
+                             name="icon_PG"
+                             top="0"
+                             visible="false"
+                             width="18" />
+                            <text
+                             follows="left|top"
+                             height="16"
+                             layout="topleft"
+                             left_pad="8"
+                             name="rating_label"
+                             value="Rating:"
+                             width="80" />
+                            <text
+                             follows="right|top"
+                             height="16"
+                             layout="topleft"
+                             left_pad="0"
+                             name="rating_value"
+                             top_delta="0"
+                             value="Mature"
+                             width="120" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Voice"
+                             layout="topleft"
+                             left="20"
+                             name="icon_Voice"
+                             top_pad="5"
+                             width="22" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_VoiceNo"
+                             layout="topleft"
+                             left="20"
+                             name="icon_VoiceNo"
+                             top_delta="0"
+                             visible="false"
+                             width="22" />
+                            <text
+                             follows="left|top"
+                             height="18"
+                             layout="topleft"
+                             left_pad="8"
+                             name="voice_label"
+                             top_delta="0"
+                             value="Voice:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="18"
+                             layout="topleft"
+                             left_pad="0"
+                             name="voice_value"
+                             top_delta="0"
+                             value="On"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Fly"
+                             layout="topleft"
+                             left="20"
+                             name="icon_Fly"
+                             top_pad="3"
+                             width="22" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_FlyNo"
+                             layout="topleft"
+                             left="20"
+                             name="icon_FlyNo"
+                             top_delta="0"
+                             visible="false"
+                             width="22" />
+                            <text
+                             follows="left|top"
+                             height="16"
+                             layout="topleft"
+                             left_pad="8"
+                             name="fly_label"
+                             value="Fly:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="16"
+                             layout="topleft"
+                             left_pad="0"
+                             name="fly_value"
+                             top_delta="0"
+                             value="On"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Push"
+                             layout="topleft"
+                             left="20"
+                             name="icon_Push"
+                             top_pad="3"
+                             visible="false"
+                             width="22" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_PushNo"
+                             layout="topleft"
+                             left="20"
+                             name="icon_PushNo"
+                             top_delta="0"
+                             width="22" />
+                            <text
+                             follows="left|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="8"
+                             name="push_label"
+                             value="Push:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="0"
+                             name="push_value"
+                             top_delta="0"
+                             value="Off"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Build"
+                             layout="topleft"
+                             left="20"
+                             name="icon_Build"
+                             top_pad="3"
+                             width="22" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_BuildNo"
+                             layout="topleft"
+                             left="20"
+                             name="icon_BuildNo"
+                             top_delta="0"
+                             visible="false" />
+                            <text
+                             follows="left|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="8"
+                             name="build_label"
+                             value="Build:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="15"
+                             layout="topleft"
+                             left_pad="0"
+                             name="build_value"
+                             top_delta="0"
+                             value="On"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Scripts"
+                             layout="topleft"
+                             left="20"
+                             name="icon_Scripts"
+                             top_pad="3"
+                             width="22" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_ScriptsNo"
+                             layout="topleft"
+                             left="20"
+                             name="icon_ScriptsNo"
+                             top_delta="0"
+                             visible="false" />
+                            <text
+                             follows="left|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="8"
+                             name="scripts_label"
+                             value="Scripts:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="0"
+                             name="scripts_value"
+                             top_delta="0"
+                             value="On"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Damage"
+                             layout="topleft"
+                             left="20"
+                             name="icon_Damage"
+                             top_pad="7"
+                             visible="false"
+                             width="22" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_DamageNo"
+                             layout="topleft"
+                             left="20"
+                             name="icon_DamageNo"
+                             top_delta="0" />
+                            <text
+                             follows="left|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="8"
+                             name="damage_label"
+                             value="Damage:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="0"
+                             name="damage_value"
+                             top_delta="0"
+                             value="Off"
+                             width="60" />
+                            <button
+                             follows="bottom|right"
+                             height="19"
+                             label="About Land"
+                             layout="topleft"
+                             name="about_land_btn"
+                             right="-5"
+                             tab_stop="false"
+                             top="138"
+                             width="90">
+                                <click_callback
+                                 function="ShowFloater"
+                                 parameter="about_land" />
+                            </button>
+                        </panel>
+                    </scroll_container>
+                </accordion_tab>
+                <accordion_tab
+                 expanded="false"
+                 layout="topleft"
+                 name="region_information_tab"
+                 title="Region">
+                    <panel
+                     follows="all"
+                     height="125"
+                     layout="topleft"
+                     left="0"
+                     top="0"
+                     width="290">
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_name_label"
+                         top_pad="5"
+                         value="Region:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_name"
+                         top_delta="0"
+                         value="Mooseland"
+                         width="195" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_type_label"
+                         top_pad="5"
+                         value="Type:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_type"
+                         top_delta="0"
+                         value="Moose"
+                         width="195" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_rating_label"
+                         top_pad="7"
+                         value="Rating:"
+                         width="80" />
+                        <icon
+                         follows="top|left"
+                         height="16"
+                         image_name="parcel_drk_M"
+                         layout="topleft"
+                         left_pad="0"
+                         name="icon_M"
+                         width="18" />
+                        <icon
+                         follows="top|left"
+                         height="16"
+                         image_name="parcel_drk_R"
+                         layout="topleft"
+                         left_delta="0"
+                         name="icon_R"
+                         top_delta="0"
+                         visible="false"
+                         width="18" />
+                        <icon
+                         follows="top|left"
+                         height="16"
+                         image_name="parcel_drk_PG"
+                         layout="topleft"
+                         left_delta="0"
+                         name="icon_PG"
+                         top_delta="0"
+                         visible="false"
+                         width="18" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="10"
+                         name="region_rating"
+                         value="Explicit"
+                         width="100" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_owner_label"
+                         top_pad="5"
+                         value="Owner:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_owner"
+                         top_delta="0"
+                         value="moose Van Moose"
+                         width="195" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_group_label"
+                         top_pad="5"
+                         value="Group:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_group"
+                         top_delta="0"
+                         use_ellipses="true"
+                         width="195">
+                            The Mighty Moose of mooseville soundvillemoose
+                        </text>
+                        <button
+                         follows="bottom|right"
+                         height="19"
+                         label="Region/Estate"
+                         layout="topleft"
+                         name="region_info_btn"
+                         right="-5"
+                         tab_stop="false"
+                         width="105">
+                            <click_callback
+                             function="ShowFloater"
+                             parameter="region_info" />
+                        </button>
+                    </panel>
+                </accordion_tab>
+                <accordion_tab
+                 expanded="false"
+                 layout="topleft"
+                 name="estate_information_tab"
+                 title="Estate">
+                    <panel
+                     follows="all"
+                     height="189"
+                     layout="topleft"
+                     left="0"
+                     top="0"
+                     width="290">
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="estate_name_label"
+                         top_pad="5"
+                         value="Estate:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="90"
+                         name="estate_name"
+                         top_delta="0"
+                         width="160" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="estate_rating_label"
+                         top_pad="5"
+                         value="Rating:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="90"
+                         name="estate_rating"
+                         top_delta="0"
+                         width="160" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="estate_owner_label"
+                         top_pad="5"
+                         value="Owner:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="90"
+                         name="estate_owner"
+                         top_delta="0"
+                         width="160" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="covenant_label"
+                         top_pad="5"
+                         value="Covenant:"
+                         width="220" />
+                        <text_editor
+                         bg_focus_color="DkGray2"
+                         bg_readonly_color="DkGray2"
+                         follows="left|top|right"
+                         handle_edit_keys_directly="true"
+                         height="90"
+                         layout="topleft"
+                         left="10"
+                         max_length="65535"
+                         name="covenant"
+                         read_only="true"
+                         top_pad="0"
+                         width="280" />
+                    </panel>
+                </accordion_tab>
+                <accordion_tab
+                 expanded="false"
+                 layout="topleft"
+                 name="sales_tab"
+                 title="For Sale">
+                    <panel
+                     follows="all"
+                     height="300"
+                     layout="topleft"
+                     left="0"
+                     top="0"
+                     width="290">
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="sales_price_label"
+                         top_pad="5"
+                         value="Price:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="sales_price"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="area_label"
+                         top_pad="5"
+                         value="Area:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="area"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="traffic_label"
+                         top_pad="5"
+                         value="Traffic:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="traffic"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="primitives_label"
+                         top_pad="5"
+                         value="Primitives:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="primitives"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="parcel_scripts_label"
+                         top_pad="5"
+                         value="Scripts:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="parcel_scripts"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="terraform_limits_label"
+                         top_pad="5"
+                         value="Terraform limits:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="terraform_limits"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="subdivide_label"
+                         top_pad="5"
+                         value="Subdivide/Join ability:"
+                         width="220" />
+                        <text_editor
+                         bg_focus_color="DkGray2"
+                         bg_readonly_color="DkGray2"
+                         follows="left|top|right"
+                         height="45"
+                         layout="topleft"
+                         left="10"
+                         max_length="65535"
+                         name="subdivide"
+                         read_only="true"
+                         top_pad="5"
+                         width="245" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="resale_label"
+                         top_pad="5"
+                         value="ReSale ability:"
+                         width="80" />
+                        <text_editor
+                         bg_focus_color="DkGray2"
+                         bg_readonly_color="DkGray2"
+                         follows="left|top|right"
+                         height="45"
+                         layout="topleft"
+                         left="10"
+                         max_length="65535"
+                         name="resale"
+                         read_only="true"
+                         top_pad="5"
+                         width="245" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="sale_to_label"
+                         top_pad="5"
+                         value="For sale to:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="90"
+                         name="sale_to"
+                         top_delta="0"
+                         width="160" />
+                    </panel>
+                </accordion_tab>
+            </accordion>
+        </panel>
+    </scroll_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 5aa53ab46b1..87ac5be74a1 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -40,14 +40,26 @@ background_visible="true"
      top_pad="10"
      width="313" />
     <panel
-     class="panel_place_info"
-     filename="panel_place_info.xml"
+     class="panel_place_profile"
+     filename="panel_place_profile.xml"
      follows="all"
      height="533"
      layout="topleft"
      left="0"
      help_topic="places_info_tab"
-     name="panel_place_info"
+     name="panel_place_profile"
+     top="5"
+     visible="false"
+     width="313" />
+    <panel
+     class="panel_landmark_info"
+     filename="panel_landmark_info.xml"
+     follows="all"
+     height="533"
+     layout="topleft"
+     left="0"
+     help_topic="places_info_tab"
+     name="panel_landmark_info"
      top="5"
      visible="false"
      width="313" />
-- 
GitLab


From 97f9ad9f4c049a76287968f2d4fd5133e883984b Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Tue, 3 Nov 2009 17:16:37 +0000
Subject: [PATCH 062/306] DEV-41358 DEV-41361: Added support for new SLAPP
 URLs, needed for the new Search web pages. These are:

secondlife:///app/worldmap/{NAME}/{COORDS}
  Show the given coordinate on the World Map
secondlife:///app/agent/{UUID}/pay
  Pay the specified Resident
secondlife:///app/agent/{UUID}/im
  IM the specified Resident
secondlife:///app/agent/{UUID}/requestfriend
  Request friendship of the specificed Resident
secondlife:///app/agent/{UUID}/offerteleport
  Offer to Teleport the specified Resident
secondlife:///app/agent/{UUID}/mute
  Mute/Block Resident
secondlife:///app/agent/{UUID}/unmute
  Unmute/Unblock Resident
---
 indra/newview/llfloaterworldmap.cpp | 30 ++++++++++++++++++
 indra/newview/llpanelprofile.cpp    | 48 +++++++++++++++++++++++++++--
 2 files changed, 76 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index b7e8835fb88..f3f600149f9 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -45,6 +45,7 @@
 #include "llcallingcard.h"
 #include "llcombobox.h"
 #include "llviewercontrol.h"
+#include "llcommandhandler.h"
 #include "lldraghandle.h"
 #include "llfirstuse.h"
 #include "llfloaterreg.h"		// getTypedInstance()
@@ -96,6 +97,35 @@ static const F32 SIM_COORD_DEFAULT = 128.f;
 // Globals
 //---------------------------------------------------------------------------
 
+// handle secondlife:///app/worldmap/{NAME}/{COORDS} URLs
+class LLWorldMapHandler : public LLCommandHandler
+{
+public:
+	// requires trusted browser to trigger
+	LLWorldMapHandler() : LLCommandHandler("worldmap", UNTRUSTED_THROTTLE) { }
+
+	bool handle(const LLSD& params, const LLSD& query_map,
+				LLMediaCtrl* web)
+	{
+		if (params.size() == 0)
+		{
+			return false;
+		}
+
+		const std::string region_name = params[0].asString();
+		S32 x = (params.size() > 1) ? params[1].asInteger() : 128;
+		S32 y = (params.size() > 2) ? params[2].asInteger() : 128;
+		S32 z = (params.size() > 3) ? params[3].asInteger() : 0;
+
+		LLFloaterWorldMap::getInstance()->trackURL(region_name, x, y, z);
+		LLFloaterReg::showInstance("world_map", "center");
+
+		return true;
+	}
+};
+LLWorldMapHandler gWorldMapHandler;
+
+
 LLFloaterWorldMap* gFloaterWorldMap = NULL;
 
 class LLMapInventoryObserver : public LLInventoryObserver
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index bec670cdaa7..8147ff17f0f 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -59,17 +59,61 @@ class LLAgentHandler : public LLCommandHandler
 			return false;
 		}
 
-		if (params[1].asString() == "about")
+		const std::string verb = params[1].asString();
+		if (verb == "about")
 		{
 			LLAvatarActions::showProfile(avatar_id);
 			return true;
 		}
 
-		if (params[1].asString() == "inspect")
+		if (verb == "inspect")
 		{
 			LLFloaterReg::showInstance("inspect_avatar", LLSD().insert("avatar_id", avatar_id));
 			return true;
 		}
+
+		if (verb == "im")
+		{
+			LLAvatarActions::startIM(avatar_id);
+			return true;
+		}
+
+		if (verb == "pay")
+		{
+			LLAvatarActions::pay(avatar_id);
+			return true;
+		}
+
+		if (verb == "offerteleport")
+		{
+			LLAvatarActions::offerTeleport(avatar_id);
+			return true;
+		}
+
+		if (verb == "requestfriend")
+		{
+			LLAvatarActions::requestFriendshipDialog(avatar_id);
+			return true;
+		}
+
+		if (verb == "mute")
+		{
+			if (! LLAvatarActions::isBlocked(avatar_id))
+			{
+				LLAvatarActions::toggleBlock(avatar_id);
+			}
+			return true;
+		}
+
+		if (verb == "unmute")
+		{
+			if (LLAvatarActions::isBlocked(avatar_id))
+			{
+				LLAvatarActions::toggleBlock(avatar_id);
+			}
+			return true;
+		}
+
 		return false;
 	}
 };
-- 
GitLab


From 9109809fb18968edfcd8e8f01428309fcc2e7578 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Tue, 3 Nov 2009 12:22:31 -0500
Subject: [PATCH 063/306] For EXT-1591: Current Outfit Folder contains
 duplicate attachment items after relog.

--HG--
branch : avatar-pipeline
---
 indra/newview/llagentwearables.cpp |  3 ++-
 indra/newview/llappearancemgr.cpp  | 37 ++++++++++++++++++++++++++++++
 indra/newview/llappearancemgr.h    |  3 ++-
 indra/newview/llvoavatarself.cpp   | 13 -----------
 4 files changed, 41 insertions(+), 15 deletions(-)

diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 380469f5b36..d1d6e496b65 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -2014,7 +2014,8 @@ void LLInitialWearablesFetch::done()
 	LLFindWearables is_wearable;
 	gInventory.collectDescendentsIf(mCompleteFolders.front(), cat_array, wearable_array, 
 									LLInventoryModel::EXCLUDE_TRASH, is_wearable);
-	
+
+	LLAppearanceManager::setAttachmentInvLinkEnable(true);
 	if (wearable_array.count() > 0)
 	{
 		LLAppearanceManager::instance().updateAppearanceFromCOF();
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index c297f8db298..8d0f11e021e 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -1181,6 +1181,14 @@ void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& it
 
 
 std::set<LLUUID> LLAppearanceManager::sRegisteredAttachments;
+bool LLAppearanceManager::sAttachmentInvLinkEnabled(false);
+
+/* static */
+void LLAppearanceManager::setAttachmentInvLinkEnable(bool val)
+{
+	llinfos << "setAttachmentInvLinkEnable => " << (int) val << llendl;
+	sAttachmentInvLinkEnabled = val;
+}
 
 void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)
 {
@@ -1204,6 +1212,22 @@ void LLAppearanceManager::registerAttachment(const LLUUID& item_id)
 {
        sRegisteredAttachments.insert(item_id);
        dumpAttachmentSet(sRegisteredAttachments,"after register:");
+
+	   if (sAttachmentInvLinkEnabled)
+	   {
+		   LLViewerInventoryItem *item = gInventory.getItem(item_id);
+		   if (item)
+		   {
+			   LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:");
+			   LLAppearanceManager::wearItem(item,false);  // Add COF link for item.
+			   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+			   gInventory.notifyObservers();
+		   }
+	   }
+	   else
+	   {
+		   llinfos << "no link changes, inv link not enabled" << llendl;
+	   }
 }
 
 /* static */
@@ -1211,4 +1235,17 @@ void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id)
 {
        sRegisteredAttachments.erase(item_id);
        dumpAttachmentSet(sRegisteredAttachments,"after unregister:");
+
+	   if (sAttachmentInvLinkEnabled)
+	   {
+		   LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:");
+		   LLAppearanceManager::removeItemLinks(item_id, false);
+		   // BAP - needs to change for label to track link.
+		   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+		   gInventory.notifyObservers();
+	   }
+	   else
+	   {
+		   llinfos << "no link changes, inv link not enabled" << llendl;
+	   }
 }
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index 45c6e23bae7..56f54dfc23d 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -70,7 +70,7 @@ class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
 	static void dumpItemArray(const LLInventoryModel::item_array_t& items, const std::string& msg);
 	static void unregisterAttachment(const LLUUID& item_id);
 	static void registerAttachment(const LLUUID& item_id);
-
+	static void setAttachmentInvLinkEnable(bool val);
 
 private:
 	static void filterWearableItems(LLInventoryModel::item_array_t& items, S32 max_per_type);
@@ -99,6 +99,7 @@ class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
 	static void purgeCategory(const LLUUID& category, bool keep_outfit_links);
 
 	static std::set<LLUUID> sRegisteredAttachments;
+	static bool sAttachmentInvLinkEnabled;
 
 };
 
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 44fd81f0d17..a964f431719 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -1081,15 +1081,7 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view
 	{
 		const LLUUID& attachment_id = viewer_object->getItemID();
 		LLAppearanceManager::registerAttachment(attachment_id);
-		LLViewerInventoryItem *item = gInventory.getItem(attachment_id);
-		if (item)
-		{
-			LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:");
-			LLAppearanceManager::wearItem(item,false);  // Add COF link for item.
-			gInventory.addChangedMask(LLInventoryObserver::LABEL, attachment_id);
-		}
 	}
-	gInventory.notifyObservers();
 
 	return attachment;
 }
@@ -1127,14 +1119,9 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
 		}
 		else
 		{
-			LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:");
-			LLAppearanceManager::removeItemLinks(attachment_id, false);
 			LLAppearanceManager::unregisterAttachment(attachment_id);
 		}
 		
-		// BAP - needs to change for label to track link.
-		gInventory.addChangedMask(LLInventoryObserver::LABEL, attachment_id);
-		gInventory.notifyObservers();
 		return TRUE;
 	}
 	return FALSE;
-- 
GitLab


From 7b4a5d7ba8457bcab2fd371a48e10fa21c52d7fd Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Tue, 3 Nov 2009 19:38:53 +0200
Subject: [PATCH 064/306] EXT-1976	 Voice indicator in Nearby Chat entry
 field is active during a private call. Cause: Nearbychat bar had used
 LLActiveSpeakerMgr instead of LLlocalSpeakerMgr.

--HG--
branch : product-engine
---
 indra/newview/llnearbychatbar.cpp | 5 +++--
 indra/newview/llnearbychatbar.h   | 2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 32dc5e59278..10a5a415ce9 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -207,6 +207,7 @@ LLNearbyChatBar::LLNearbyChatBar()
 	: LLPanel()
 	, mChatBox(NULL)
 {
+	mSpeakerMgr = LLLocalSpeakerMgr::getInstance();
 }
 
 //virtual
@@ -516,8 +517,8 @@ void LLNearbyChatBar::displaySpeakingIndicator()
 	LLUUID id;
 
 	id.setNull();
-	mSpeakerMgr.update(TRUE);
-	mSpeakerMgr.getSpeakerList(&speaker_list, FALSE);
+	mSpeakerMgr->update(TRUE);
+	mSpeakerMgr->getSpeakerList(&speaker_list, FALSE);
 
 	for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i)
 	{
diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h
index 06204e6367b..0307eee7bf0 100644
--- a/indra/newview/llnearbychatbar.h
+++ b/indra/newview/llnearbychatbar.h
@@ -127,7 +127,7 @@ class LLNearbyChatBar
 	LLLineEditor*		mChatBox;
 	LLTalkButton*		mTalkBtn;
 	LLOutputMonitorCtrl* mOutputMonitor;
-	LLActiveSpeakerMgr  mSpeakerMgr;
+	LLLocalSpeakerMgr*  mSpeakerMgr;
 };
 
 #endif
-- 
GitLab


From fd3a9fb152dd7bd828d56efb535d0d08330fc2b9 Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Tue, 3 Nov 2009 19:47:26 +0200
Subject: [PATCH 065/306] Fixed major bug EXT-2007 (Friends Conference: Names
 of partisipants are invisible)

--HG--
branch : product-engine
---
 .../skins/default/xui/en/floater_im_session.xml        | 10 +++++-----
 .../skins/default/xui/en/panel_adhoc_control_panel.xml |  5 +++--
 .../skins/default/xui/en/panel_group_control_panel.xml |  6 +++---
 .../skins/default/xui/en/panel_im_control_panel.xml    |  2 +-
 4 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index c4324b425a9..cdcee9ab641 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -12,13 +12,13 @@
  can_dock="true"
  can_minimize="true"
  visible="true" 
- width="365"
+ width="400"
  can_resize="true"
  min_width="200"
  min_height="150">
   <layout_stack follows="left|top|right|bottom"
                 height="305"
-                width="365"
+                width="400"
                 layout="topleft"
                 orientation="horizontal"
                 name="im_panels"
@@ -34,7 +34,7 @@
       auto_resize="false"
       user_resize="false" />
     <layout_panel height="305"
-                  width="200"
+                  width="235"
                   left_delta="146" 
                   top="0"
                   user_resize="false">
@@ -61,9 +61,9 @@
        name="chat_history"
        parse_highlights="true"
        allow_html="true" 
-       width="195">
+       width="230">
       </chat_history>
-      <line_editor follows="left|right" name="chat_editor" height="20" layout="topleft" width="190">
+      <line_editor follows="left|right" name="chat_editor" height="20" layout="topleft" width="225">
       </line_editor>
     </layout_panel>
   </layout_stack>
diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
index f50acc224f0..87c4e2787f4 100644
--- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  name="panel_im_control_panel"
- width="146"
+ width="180"
  height="215"
  border="false">
     <avatar_list
@@ -16,10 +16,11 @@
      show_info_btn="false"
      show_profile_btn="false"
      top="10"
-     width="140" />
+     width="180" />
     <button
      name="call_btn"
      label="Call"
+     left_delta="27"
      width="125"
      height="20" />
     <button
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index 9ed510dff3e..3358015335d 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  name="panel_im_control_panel"
- width="146"
+ width="180"
  height="238"
  border="false">
     <avatar_list
@@ -16,11 +16,11 @@
      show_info_btn="false"
      show_profile_btn="false"
      top="10"
-     width="140" />
+     width="180" />
     <button
      name="group_info_btn"
      label="Group Info"
-     left_delta="3"
+     left_delta="27"
      width="125"
      height="20" />
     <button
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index 04ee1a19cb1..1831f58e199 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel name="panel_im_control_panel"
-       width="125"
+       width="128"
        height="298"
        border="false">
 
-- 
GitLab


From e299bea7e92dadbda09fb33339a04000e679aa2e Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Tue, 3 Nov 2009 12:59:10 -0500
Subject: [PATCH 066/306] Added missing llinventorypanel files from previous
 checkin.

--HG--
branch : avatar-pipeline
---
 indra/newview/llinventorypanel.cpp | 888 +++++++++++++++++++++++++++++
 indra/newview/llinventorypanel.h   | 206 +++++++
 2 files changed, 1094 insertions(+)
 create mode 100644 indra/newview/llinventorypanel.cpp
 create mode 100644 indra/newview/llinventorypanel.h

diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
new file mode 100644
index 00000000000..c17a035503b
--- /dev/null
+++ b/indra/newview/llinventorypanel.cpp
@@ -0,0 +1,888 @@
+/** 
+ * @file llfloaterinventory.cpp
+ * @brief Implementation of the inventory view and associated stuff.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include <utility> // for std::pair<>
+
+#include "llinventorypanel.h"
+
+// Seraph TODO: Remove unnecessary headers
+
+// library includes
+#include "llagent.h"
+#include "llagentwearables.h"
+#include "llcallingcard.h"
+#include "llfloaterreg.h"
+#include "llsdserialize.h"
+#include "llfiltereditor.h"
+#include "llspinctrl.h"
+#include "llui.h"
+#include "message.h"
+
+// newview includes
+#include "llappearancemgr.h"
+#include "llappviewer.h"
+#include "llfirstuse.h"
+#include "llfloaterchat.h"
+#include "llfloatercustomize.h"
+#include "llfocusmgr.h"
+#include "llfolderview.h"
+#include "llgesturemgr.h"
+#include "lliconctrl.h"
+#include "llimview.h"
+#include "llinventorybridge.h"
+#include "llinventoryclipboard.h"
+#include "llinventorymodel.h"
+#include "lllineeditor.h"
+#include "llmenugl.h"
+#include "llpreviewanim.h"
+#include "llpreviewgesture.h"
+#include "llpreviewnotecard.h"
+#include "llpreviewscript.h"
+#include "llpreviewsound.h"
+#include "llpreviewtexture.h"
+#include "llresmgr.h"
+#include "llscrollbar.h"
+#include "llscrollcontainer.h"
+#include "llselectmgr.h"
+#include "lltabcontainer.h"
+#include "lltooldraganddrop.h"
+#include "lluictrlfactory.h"
+#include "llviewerinventory.h"
+#include "llviewermessage.h"
+#include "llviewerobjectlist.h"
+#include "llviewerregion.h"
+#include "llviewerwindow.h"
+#include "llvoavatarself.h"
+#include "llwearablelist.h"
+
+static LLDefaultChildRegistry::Register<LLInventoryPanel> r("inventory_panel");
+
+const std::string LLInventoryPanel::DEFAULT_SORT_ORDER = std::string("InventorySortOrder");
+const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("RecentItemsSortOrder");
+const std::string LLInventoryPanel::INHERIT_SORT_ORDER = std::string("");
+static const LLInventoryFVBridgeBuilder INVENTORY_BRIDGE_BUILDER;
+
+LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :	
+	LLPanel(p),
+	mInventoryObserver(NULL),
+	mFolders(NULL),
+	mScroller(NULL),
+	mSortOrderSetting(p.sort_order_setting),
+	mInventory(p.inventory),
+	mAllowMultiSelect(p.allow_multi_select),
+	mHasInventoryConnection(false),
+	mStartFolderString(p.start_folder),	
+	mBuildDefaultHierarchy(true),
+	mInvFVBridgeBuilder(NULL)
+{
+	mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER;
+
+	// contex menu callbacks
+	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLInventoryPanel::doToSelected, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLInventoryPanel::doCreate, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));
+	
+	setBackgroundColor(LLUIColorTable::instance().getColor("InventoryBackgroundColor"));
+	setBackgroundVisible(TRUE);
+	setBackgroundOpaque(TRUE);
+}
+
+BOOL LLInventoryPanel::postBuild()
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_POST_BUILD);
+
+	mCommitCallbackRegistrar.pushScope(); // registered as a widget; need to push callback scope ourselves
+	
+	// create root folder
+	{
+		LLRect folder_rect(0,
+						   0,
+						   getRect().getWidth(),
+						   0);
+		LLFolderView::Params p;
+		p.name = getName();
+		p.rect = folder_rect;
+		p.parent_panel = this;
+		mFolders = LLUICtrlFactory::create<LLFolderView>(p);
+		mFolders->setAllowMultiSelect(mAllowMultiSelect);
+	}
+
+	mCommitCallbackRegistrar.popScope();
+	
+	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
+	
+	// scroller
+	{
+		LLRect scroller_view_rect = getRect();
+		scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
+		LLScrollContainer::Params p;
+		p.name("Inventory Scroller");
+		p.rect(scroller_view_rect);
+		p.follows.flags(FOLLOWS_ALL);
+		p.reserve_scroll_corner(true);
+		p.tab_stop(true);
+		mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
+	}
+	addChild(mScroller);
+	mScroller->addChild(mFolders);
+	
+	mFolders->setScrollContainer(mScroller);
+
+	// set up the callbacks from the inventory we're viewing, and then
+	// build everything.
+	mInventoryObserver = new LLInventoryPanelObserver(this);
+	mInventory->addObserver(mInventoryObserver);
+
+	// determine the root folder, if any, so inventory contents show just the children
+	// of that folder (i.e. not including the folder itself).
+	const LLAssetType::EType preferred_type = LLAssetType::lookupHumanReadable(mStartFolderString);
+
+	if ("inventory" == mStartFolderString)
+	{
+		mStartFolderID = gInventory.getRootFolderID();
+	}
+	else if ("library" == mStartFolderString)
+	{
+		mStartFolderID = gInventory.getLibraryRootFolderID();
+	}
+	else
+	{
+		mStartFolderID = (preferred_type != LLAssetType::AT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
+	}
+
+	// build view of inventory if we need default full hierarchy and inventory ready, otherwise wait for modelChanged() callback
+	if (mBuildDefaultHierarchy && mInventory->isInventoryUsable() && !mHasInventoryConnection)
+	{
+		rebuildViewsFor(mStartFolderID);
+		mHasInventoryConnection = true;
+	}
+
+	// bit of a hack to make sure the inventory is open.
+	mFolders->openFolder(preferred_type != LLAssetType::AT_NONE ? LLAssetType::lookupCategoryName(preferred_type) : "My Inventory");
+
+	if (mSortOrderSetting != INHERIT_SORT_ORDER)
+	{
+		setSortOrder(gSavedSettings.getU32(mSortOrderSetting));
+	}
+	else
+	{
+		setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER));
+	}
+	mFolders->setSortOrder(mFolders->getFilter()->getSortOrder());
+
+	return TRUE;
+}
+
+LLInventoryPanel::~LLInventoryPanel()
+{
+	// should this be a global setting?
+	if (mFolders)
+	{
+		U32 sort_order = mFolders->getSortOrder();
+		if (mSortOrderSetting != INHERIT_SORT_ORDER)
+		{
+			gSavedSettings.setU32(mSortOrderSetting, sort_order);
+		}
+	}
+
+	// LLView destructor will take care of the sub-views.
+	mInventory->removeObserver(mInventoryObserver);
+	delete mInventoryObserver;
+	mScroller = NULL;
+}
+
+LLMemType mt(LLMemType::MTYPE_INVENTORY_FROM_XML); // ! BUG ! Should this be removed?
+void LLInventoryPanel::draw()
+{
+	// select the desired item (in case it wasn't loaded when the selection was requested)
+	mFolders->updateSelection();
+	LLPanel::draw();
+}
+
+LLInventoryFilter* LLInventoryPanel::getFilter()
+{
+	if (mFolders) return mFolders->getFilter();
+	return NULL;
+}
+
+void LLInventoryPanel::setFilterTypes(U64 filter_types, BOOL filter_for_categories)
+{
+	mFolders->getFilter()->setFilterTypes(filter_types, filter_for_categories);
+}	
+
+void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask)
+{
+	mFolders->getFilter()->setFilterPermissions(filter_perm_mask);
+}
+
+void LLInventoryPanel::setFilterSubString(const std::string& string)
+{
+	mFolders->getFilter()->setFilterSubString(string);
+}
+
+void LLInventoryPanel::setSortOrder(U32 order)
+{
+	mFolders->getFilter()->setSortOrder(order);
+	if (mFolders->getFilter()->isModified())
+	{
+		mFolders->setSortOrder(order);
+		// try to keep selection onscreen, even if it wasn't to start with
+		mFolders->scrollToShowSelection();
+	}
+}
+
+void LLInventoryPanel::setSinceLogoff(BOOL sl)
+{
+	mFolders->getFilter()->setDateRangeLastLogoff(sl);
+}
+
+void LLInventoryPanel::setHoursAgo(U32 hours)
+{
+	mFolders->getFilter()->setHoursAgo(hours);
+}
+
+void LLInventoryPanel::setShowFolderState(LLInventoryFilter::EFolderShow show)
+{
+	mFolders->getFilter()->setShowFolderState(show);
+}
+
+LLInventoryFilter::EFolderShow LLInventoryPanel::getShowFolderState()
+{
+	return mFolders->getFilter()->getShowFolderState();
+}
+
+static LLFastTimer::DeclareTimer FTM_REFRESH("Inventory Refresh");
+
+void LLInventoryPanel::modelChanged(U32 mask)
+{
+	LLFastTimer t2(FTM_REFRESH);
+
+	bool handled = false;
+
+	// inventory just initialized, do complete build
+	if ((mask & LLInventoryObserver::ADD) && gInventory.getChangedIDs().empty() && !mHasInventoryConnection)
+	{
+		rebuildViewsFor(mStartFolderID);
+		mHasInventoryConnection = true;
+		return;
+	}
+
+	if(mask & LLInventoryObserver::LABEL)
+	{
+		handled = true;
+		// label change - empty out the display name for each object
+		// in this change set.
+		const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
+		std::set<LLUUID>::const_iterator id_it = changed_items.begin();
+		std::set<LLUUID>::const_iterator id_end = changed_items.end();
+		LLFolderViewItem* view = NULL;
+		LLInvFVBridge* bridge = NULL;
+		for (;id_it != id_end; ++id_it)
+		{
+			view = mFolders->getItemByID(*id_it);
+			if(view)
+			{
+				// request refresh on this item (also flags for filtering)
+				bridge = (LLInvFVBridge*)view->getListener();
+				if(bridge)
+				{	// Clear the display name first, so it gets properly re-built during refresh()
+					bridge->clearDisplayName();
+				}
+				view->refresh();
+			}
+		}
+	}
+	if((mask & (LLInventoryObserver::STRUCTURE
+				| LLInventoryObserver::ADD
+				| LLInventoryObserver::REMOVE)) != 0)
+	{
+		handled = true;
+		// Record which folders are open by uuid.
+		LLInventoryModel* model = getModel();
+		if (model)
+		{
+			const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
+
+			std::set<LLUUID>::const_iterator id_it = changed_items.begin();
+			std::set<LLUUID>::const_iterator id_end = changed_items.end();
+			for (;id_it != id_end; ++id_it)
+			{
+				// sync view with model
+				LLInventoryObject* model_item = model->getObject(*id_it);
+				LLFolderViewItem* view_item = mFolders->getItemByID(*id_it);
+
+				if (model_item)
+				{
+					if (!view_item)
+					{
+						// this object was just created, need to build a view for it
+						if ((mask & LLInventoryObserver::ADD) != LLInventoryObserver::ADD)
+						{
+							llwarns << *id_it << " is in model but not in view, but ADD flag not set" << llendl;
+						}
+						buildNewViews(*id_it);
+						
+						// select any newly created object
+						// that has the auto rename at top of folder
+						// root set
+						if(mFolders->getRoot()->needsAutoRename())
+						{
+							setSelection(*id_it, FALSE);
+						}
+					}
+					else
+					{
+						// this object was probably moved, check its parent
+						if ((mask & LLInventoryObserver::STRUCTURE) != LLInventoryObserver::STRUCTURE)
+						{
+							llwarns << *id_it << " is in model and in view, but STRUCTURE flag not set" << llendl;
+						}
+
+						LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID());
+
+						// added check against NULL for cases when Inventory panel contains startFolder.
+						// in this case parent is LLFolderView (LLInventoryPanel::mFolders) itself.
+						// this check is a fix for bug EXT-1859.
+						if (NULL != new_parent && view_item->getParentFolder() != new_parent)
+						{
+							view_item->getParentFolder()->extractItem(view_item);
+							view_item->addToFolder(new_parent, mFolders);
+						}
+					}
+				}
+				else
+				{
+					if (view_item)
+					{
+						if ((mask & LLInventoryObserver::REMOVE) != LLInventoryObserver::REMOVE)
+						{
+							llwarns << *id_it << " is not in model but in view, but REMOVE flag not set" << llendl;
+						}
+						// item in view but not model, need to delete view
+						view_item->destroyView();
+					}
+					else
+					{
+						llwarns << *id_it << "Item does not exist in either view or model, but notification triggered" << llendl;
+					}
+				}
+			}
+		}
+	}
+
+	if (!handled)
+	{
+		// it's a small change that only requires a refresh.
+		// *TODO: figure out a more efficient way to do the refresh
+		// since it is expensive on large inventories
+		mFolders->refresh();
+	}
+}
+
+
+void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
+{
+	LLFolderViewItem* old_view = NULL;
+
+	// get old LLFolderViewItem
+	old_view = mFolders->getItemByID(id);
+	if (old_view && id.notNull())
+	{
+		old_view->destroyView();
+	}
+
+	buildNewViews(id);
+}
+
+void LLInventoryPanel::buildNewViews(const LLUUID& id)
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_BUILD_NEW_VIEWS);
+	LLFolderViewItem* itemp = NULL;
+	LLInventoryObject* objectp = NULL;
+
+	// Don't add the start folder (the inventory panel will show contents
+	// beginning with the children of the starting folder, excluding the starting folder itself).
+	if (id != mStartFolderID)
+	{
+		objectp = gInventory.getObject(id);
+		if (objectp)
+		{		
+			const LLUUID &parent_id = objectp->getParentUUID();
+			// If this item's parent is the starting folder, then just add it to the top level (recall that 
+			// the starting folder isn't actually represented in the view, parent_folder would be NULL in
+			// this case otherwise).
+			LLFolderViewFolder* parent_folder = (parent_id == mStartFolderID ?
+				mFolders : (LLFolderViewFolder*)mFolders->getItemByID(parent_id));
+
+			// This item exists outside the inventory's hierarchy, so don't add it.
+			if (!parent_folder)
+			{
+				return;
+			}
+
+			if (objectp->getType() <= LLAssetType::AT_NONE ||
+				objectp->getType() >= LLAssetType::AT_COUNT)
+			{
+				llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << 
+					((S32) objectp->getType()) << llendl;
+				return;
+			}
+			
+			if (objectp->getType() == LLAssetType::AT_CATEGORY &&
+					 objectp->getActualType() != LLAssetType::AT_LINK_FOLDER) 
+			{
+				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
+																				objectp->getType(),
+																				LLInventoryType::IT_CATEGORY,
+																				this,
+																				objectp->getUUID());
+
+				if (new_listener)
+				{
+					LLFolderViewFolder::Params p;
+					p.name = new_listener->getDisplayName();
+					p.icon = new_listener->getIcon();
+					p.root = mFolders;
+					p.listener = new_listener;
+					LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(p);
+				
+					folderp->setItemSortOrder(mFolders->getSortOrder());
+					itemp = folderp;
+				}
+			}
+			else 
+			{
+				// Build new view for item
+				LLInventoryItem* item = (LLInventoryItem*)objectp;
+				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
+																				item->getActualType(),
+																				item->getInventoryType(),
+																				this,
+																				item->getUUID(),
+																				item->getFlags());
+
+				if (new_listener)
+				{
+					LLFolderViewItem::Params params;
+					params.name(new_listener->getDisplayName());
+					params.icon(new_listener->getIcon());
+					params.creation_date(new_listener->getCreationDate());
+					params.root(mFolders);
+					params.listener(new_listener);
+					params.rect(LLRect (0, 0, 0, 0));
+					itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
+				}
+			}
+
+			if (itemp)
+			{
+				itemp->addToFolder(parent_folder, mFolders);
+			}
+		}
+	}
+
+	// If this is a folder, add the children of the folder and recursively add any 
+	// child folders.
+	if ((id == mStartFolderID) ||
+		(objectp && objectp->getType() == LLAssetType::AT_CATEGORY))
+	{
+		LLViewerInventoryCategory::cat_array_t* categories;
+		LLViewerInventoryItem::item_array_t* items;
+
+		mInventory->lockDirectDescendentArrays(id, categories, items);
+		if(categories)
+		{
+			S32 count = categories->count();
+			for(S32 i = 0; i < count; ++i)
+			{
+				LLInventoryCategory* cat = categories->get(i);
+				buildNewViews(cat->getUUID());
+			}
+		}
+		if(items)
+		{
+			S32 count = items->count();
+			for(S32 i = 0; i < count; ++i)
+			{
+				LLInventoryItem* item = items->get(i);
+				buildNewViews(item->getUUID());
+			}
+		}
+		mInventory->unlockDirectDescendentArrays(id);
+	}
+}
+
+struct LLConfirmPurgeData
+{
+	LLUUID mID;
+	LLInventoryModel* mModel;
+};
+
+class LLIsNotWorn : public LLInventoryCollectFunctor
+{
+public:
+	LLIsNotWorn() {}
+	virtual ~LLIsNotWorn() {}
+	virtual bool operator()(LLInventoryCategory* cat,
+							LLInventoryItem* item)
+	{
+		return !gAgentWearables.isWearingItem(item->getUUID());
+	}
+};
+
+class LLOpenFolderByID : public LLFolderViewFunctor
+{
+public:
+	LLOpenFolderByID(const LLUUID& id) : mID(id) {}
+	virtual ~LLOpenFolderByID() {}
+	virtual void doFolder(LLFolderViewFolder* folder)
+		{
+			if (folder->getListener() && folder->getListener()->getUUID() == mID) folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+		}
+	virtual void doItem(LLFolderViewItem* item) {}
+protected:
+	const LLUUID& mID;
+};
+
+
+void LLInventoryPanel::openSelected()
+{
+	LLFolderViewItem* folder_item = mFolders->getCurSelectedItem();
+	if(!folder_item) return;
+	LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
+	if(!bridge) return;
+	bridge->openItem();
+}
+
+BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask)
+{
+	BOOL handled = LLView::handleHover(x, y, mask);
+	if(handled)
+	{
+		ECursorType cursor = getWindow()->getCursor();
+		if (LLInventoryModel::backgroundFetchActive() && cursor == UI_CURSOR_ARROW)
+		{
+			// replace arrow cursor with arrow and hourglass cursor
+			getWindow()->setCursor(UI_CURSOR_WORKING);
+		}
+	}
+	else
+	{
+		getWindow()->setCursor(UI_CURSOR_ARROW);
+	}
+	return TRUE;
+}
+
+BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+								   EDragAndDropType cargo_type,
+								   void* cargo_data,
+								   EAcceptance* accept,
+								   std::string& tooltip_msg)
+{
+
+	BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+
+	if (handled)
+	{
+		mFolders->setDragAndDropThisFrame();
+	}
+
+	return handled;
+}
+
+void LLInventoryPanel::onFocusLost()
+{
+	// inventory no longer handles cut/copy/paste/delete
+	if (LLEditMenuHandler::gEditMenuHandler == mFolders)
+	{
+		LLEditMenuHandler::gEditMenuHandler = NULL;
+	}
+
+	LLPanel::onFocusLost();
+}
+
+void LLInventoryPanel::onFocusReceived()
+{
+	// inventory now handles cut/copy/paste/delete
+	LLEditMenuHandler::gEditMenuHandler = mFolders;
+
+	LLPanel::onFocusReceived();
+}
+
+
+void LLInventoryPanel::openAllFolders()
+{
+	mFolders->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
+	mFolders->arrangeAll();
+}
+
+void LLInventoryPanel::openDefaultFolderForType(LLAssetType::EType type)
+{
+	LLUUID category_id = mInventory->findCategoryUUIDForType(type);
+	LLOpenFolderByID opener(category_id);
+	mFolders->applyFunctorRecursively(opener);
+}
+
+void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus)
+{
+	// Don't select objects in COF (e.g. to prevent refocus when items are worn).
+	const LLInventoryObject *obj = gInventory.getObject(obj_id);
+	if (obj && obj->getParentUUID() == LLAppearanceManager::getCOF())
+	{
+		return;
+	}
+	mFolders->setSelectionByID(obj_id, take_keyboard_focus);
+}
+
+void LLInventoryPanel::clearSelection()
+{
+	mFolders->clearSelection();
+}
+
+void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& items, BOOL user_action)
+{
+	LLFolderView* fv = getRootFolder();
+	if (fv->needsAutoRename()) // auto-selecting a new user-created asset and preparing to rename
+	{
+		fv->setNeedsAutoRename(FALSE);
+		if (items.size()) // new asset is visible and selected
+		{
+			fv->startRenamingSelectedItem();
+		}
+	}
+	// Seraph - Put determineFolderType in here for ensemble typing?
+}
+
+//----------------------------------------------------------------------------
+
+void LLInventoryPanel::doToSelected(const LLSD& userdata)
+{
+	mFolders->doToSelected(&gInventory, userdata);
+}
+
+void LLInventoryPanel::doCreate(const LLSD& userdata)
+{
+	menu_create_inventory_item(mFolders, LLFolderBridge::sSelf, userdata);
+}
+
+bool LLInventoryPanel::beginIMSession()
+{
+	std::set<LLUUID> selected_items;
+	mFolders->getSelectionList(selected_items);
+
+	std::string name;
+	static int session_num = 1;
+
+	LLDynamicArray<LLUUID> members;
+	EInstantMessage type = IM_SESSION_CONFERENCE_START;
+
+	std::set<LLUUID>::const_iterator iter;
+	for (iter = selected_items.begin(); iter != selected_items.end(); iter++)
+	{
+
+		LLUUID item = *iter;
+		LLFolderViewItem* folder_item = mFolders->getItemByID(item);
+			
+		if(folder_item) 
+		{
+			LLFolderViewEventListener* fve_listener = folder_item->getListener();
+			if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY))
+			{
+
+				LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getListener();
+				if(!bridge) return true;
+				LLViewerInventoryCategory* cat = bridge->getCategory();
+				if(!cat) return true;
+				name = cat->getName();
+				LLUniqueBuddyCollector is_buddy;
+				LLInventoryModel::cat_array_t cat_array;
+				LLInventoryModel::item_array_t item_array;
+				gInventory.collectDescendentsIf(bridge->getUUID(),
+												cat_array,
+												item_array,
+												LLInventoryModel::EXCLUDE_TRASH,
+												is_buddy);
+				S32 count = item_array.count();
+				if(count > 0)
+				{
+					LLFloaterReg::showInstance("communicate");
+					// create the session
+					LLAvatarTracker& at = LLAvatarTracker::instance();
+					LLUUID id;
+					for(S32 i = 0; i < count; ++i)
+					{
+						id = item_array.get(i)->getCreatorUUID();
+						if(at.isBuddyOnline(id))
+						{
+							members.put(id);
+						}
+					}
+				}
+			}
+			else
+			{
+				LLFolderViewItem* folder_item = mFolders->getItemByID(item);
+				if(!folder_item) return true;
+				LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener();
+
+				if (listenerp->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
+				{
+					LLInventoryItem* inv_item = gInventory.getItem(listenerp->getUUID());
+
+					if (inv_item)
+					{
+						LLAvatarTracker& at = LLAvatarTracker::instance();
+						LLUUID id = inv_item->getCreatorUUID();
+
+						if(at.isBuddyOnline(id))
+						{
+							members.put(id);
+						}
+					}
+				} //if IT_CALLINGCARD
+			} //if !IT_CATEGORY
+		}
+	} //for selected_items	
+
+	// the session_id is randomly generated UUID which will be replaced later
+	// with a server side generated number
+
+	if (name.empty())
+	{
+		name = llformat("Session %d", session_num++);
+	}
+
+	gIMMgr->addSession(name, type, members[0], members);
+		
+	return true;
+}
+
+bool LLInventoryPanel::attachObject(const LLSD& userdata)
+{
+	std::set<LLUUID> selected_items;
+	mFolders->getSelectionList(selected_items);
+
+	std::string joint_name = userdata.asString();
+	LLVOAvatar *avatarp = static_cast<LLVOAvatar*>(gAgent.getAvatarObject());
+	LLViewerJointAttachment* attachmentp = NULL;
+	for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); 
+		 iter != avatarp->mAttachmentPoints.end(); )
+	{
+		LLVOAvatar::attachment_map_t::iterator curiter = iter++;
+		LLViewerJointAttachment* attachment = curiter->second;
+		if (attachment->getName() == joint_name)
+		{
+			attachmentp = attachment;
+			break;
+		}
+	}
+	if (attachmentp == NULL)
+	{
+		return true;
+	}
+
+	for (std::set<LLUUID>::const_iterator set_iter = selected_items.begin(); 
+		 set_iter != selected_items.end(); 
+		 ++set_iter)
+	{
+		const LLUUID &id = *set_iter;
+		LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem(id);
+		if(item && gInventory.isObjectDescendentOf(id, gInventory.getRootFolderID()))
+		{
+			rez_attachment(item, attachmentp);
+		}
+		else if(item && item->isComplete())
+		{
+			// must be in library. copy it to our inventory and put it on.
+			LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(attachmentp);
+			copy_inventory_item(gAgent.getID(),
+								item->getPermissions().getOwner(),
+								item->getUUID(),
+								LLUUID::null,
+								std::string(),
+								cb);
+		}
+	}
+	gFocusMgr.setKeyboardFocus(NULL);
+
+	return true;
+}
+
+
+//----------------------------------------------------------------------------
+
+// static DEBUG ONLY:
+void LLInventoryPanel::dumpSelectionInformation(void* user_data)
+{
+	LLInventoryPanel* iv = (LLInventoryPanel*)user_data;
+	iv->mFolders->dumpSelectionInformation();
+}
+
+BOOL LLInventoryPanel::getSinceLogoff()
+{
+	return mFolders->getFilter()->isSinceLogoff();
+}
+
+void example_param_block_usage()
+{
+	LLInventoryPanel::Params param_block;
+	param_block.name(std::string("inventory"));
+
+	param_block.sort_order_setting(LLInventoryPanel::RECENTITEMS_SORT_ORDER);
+	param_block.allow_multi_select(true);
+	param_block.filter(LLInventoryPanel::Filter()
+			.sort_order(1)
+			.types(0xffff0000));
+	param_block.inventory(&gInventory);
+	param_block.has_border(true);
+
+	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
+
+	param_block = LLInventoryPanel::Params();
+	param_block.name(std::string("inventory"));
+
+	//LLSD param_block_sd;
+	//param_block_sd["sort_order_setting"] = LLInventoryPanel::RECENTITEMS_SORT_ORDER;
+	//param_block_sd["allow_multi_select"] = true;
+	//param_block_sd["filter"]["sort_order"] = 1;
+	//param_block_sd["filter"]["types"] = (S32)0xffff0000;
+	//param_block_sd["has_border"] = true;
+
+	//LLInitParam::LLSDParser(param_block_sd).parse(param_block);
+
+	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
+}
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
new file mode 100644
index 00000000000..f958aaf839d
--- /dev/null
+++ b/indra/newview/llinventorypanel.h
@@ -0,0 +1,206 @@
+/** 
+ * @file llinventorypanel.h
+ * @brief LLInventoryPanel
+ * class definition
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLINVENTORYPANEL_H
+#define LL_LLINVENTORYPANEL_H
+
+#include "llassetstorage.h"
+#include "lldarray.h"
+#include "llfloater.h"
+#include "llinventory.h"
+#include "llinventoryfilter.h"
+#include "llfolderview.h"
+#include "llinventorymodel.h"
+#include "lluictrlfactory.h"
+#include <set>
+
+class LLFolderViewItem;
+class LLInventoryFilter;
+class LLInventoryModel;
+class LLInvFVBridge;
+class LLInventoryFVBridgeBuilder;
+class LLMenuBarGL;
+class LLCheckBoxCtrl;
+class LLSpinCtrl;
+class LLScrollContainer;
+class LLTextBox;
+class LLIconCtrl;
+class LLSaveFolderState;
+class LLFilterEditor;
+class LLTabContainer;
+
+class LLInventoryPanel : public LLPanel
+{
+public:
+	static const std::string DEFAULT_SORT_ORDER;
+	static const std::string RECENTITEMS_SORT_ORDER;
+	static const std::string INHERIT_SORT_ORDER;
+
+	struct Filter : public LLInitParam::Block<Filter>
+	{
+		Optional<U32>			sort_order;
+		Optional<U32>			types;
+		Optional<std::string>	search_string;
+
+		Filter()
+		:	sort_order("sort_order"),
+			types("types", 0xffffffff),
+			search_string("search_string")
+		{}
+	};
+
+	struct Params 
+	:	public LLInitParam::Block<Params, LLPanel::Params>
+	{
+		Optional<std::string>				sort_order_setting;
+		Optional<LLInventoryModel*>			inventory;
+		Optional<bool>						allow_multi_select;
+		Optional<Filter>					filter;
+		Optional<std::string>               start_folder;
+
+		Params()
+		:	sort_order_setting("sort_order_setting"),
+			inventory("", &gInventory),
+			allow_multi_select("allow_multi_select", true),
+			filter("filter"),
+			start_folder("start_folder")
+		{}
+	};
+
+protected:
+	LLInventoryPanel(const Params&);
+	friend class LLUICtrlFactory;
+
+public:
+	virtual ~LLInventoryPanel();
+
+	LLInventoryModel* getModel() { return mInventory; }
+
+	BOOL postBuild();
+
+	// LLView methods
+	void draw();
+	BOOL handleHover(S32 x, S32 y, MASK mask);
+	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+								   EDragAndDropType cargo_type,
+								   void* cargo_data,
+								   EAcceptance* accept,
+								   std::string& tooltip_msg);
+	// LLUICtrl methods
+	 /*virtual*/ void onFocusLost();
+	 /*virtual*/ void onFocusReceived();
+
+	// Call this method to set the selection.
+	void openAllFolders();
+	void openDefaultFolderForType(LLAssetType::EType);
+	void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
+	void setSelectCallback(const LLFolderView::signal_t::slot_type& cb) { if (mFolders) mFolders->setSelectCallback(cb); }
+	void clearSelection();
+	LLInventoryFilter* getFilter();
+	void setFilterTypes(U64 filter, BOOL filter_for_categories = FALSE); // if filter_for_categories is true, operate on folder preferred asset type
+	U32 getFilterTypes() const { return mFolders->getFilterTypes(); }
+	void setFilterPermMask(PermissionMask filter_perm_mask);
+	U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); }
+	void setFilterSubString(const std::string& string);
+	const std::string getFilterSubString() { return mFolders->getFilterSubString(); }
+	void setSortOrder(U32 order);
+	U32 getSortOrder() { return mFolders->getSortOrder(); }
+	void setSinceLogoff(BOOL sl);
+	void setHoursAgo(U32 hours);
+	BOOL getSinceLogoff();
+	
+	void setShowFolderState(LLInventoryFilter::EFolderShow show);
+	LLInventoryFilter::EFolderShow getShowFolderState();
+	void setAllowMultiSelect(BOOL allow) { mFolders->setAllowMultiSelect(allow); }
+	// This method is called when something has changed about the inventory.
+	void modelChanged(U32 mask);
+	LLFolderView* getRootFolder() { return mFolders; }
+	LLScrollContainer* getScrollableContainer() { return mScroller; }
+	
+	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
+	
+	// Callbacks
+	void doToSelected(const LLSD& userdata);
+	void doCreate(const LLSD& userdata);
+	bool beginIMSession();
+	bool attachObject(const LLSD& userdata);
+	
+	// DEBUG ONLY:
+	static void dumpSelectionInformation(void* user_data);
+
+	void openSelected();
+	void unSelectAll()	{ mFolders->setSelection(NULL, FALSE, FALSE); }
+	
+protected:
+	// Given the id and the parent, build all of the folder views.
+	void rebuildViewsFor(const LLUUID& id);
+	virtual void buildNewViews(const LLUUID& id); // made virtual to support derived classes. EXT-719
+
+protected:
+	LLInventoryModel*			mInventory;
+	LLInventoryObserver*		mInventoryObserver;
+	BOOL 						mAllowMultiSelect;
+	std::string					mSortOrderSetting;
+
+//private: // Can not make these private - needed by llinventorysubtreepanel
+	LLFolderView*				mFolders;
+	std::string                 mStartFolderString;
+
+	/**
+	 * Contains UUID of Inventory item from which hierarchy should be built.
+	 * Can be set with the "start_folder" xml property.
+	 * Default is LLUUID::null that means total Inventory hierarchy.
+	 */
+	LLUUID						mStartFolderID;
+	LLScrollContainer*			mScroller;
+	bool						mHasInventoryConnection;
+
+	/**
+	 * Flag specified if default inventory hierarchy should be created in postBuild()
+	 */
+	bool						mBuildDefaultHierarchy;
+
+	LLUUID						mRootInventoryItemUUID;
+
+	/**
+	 * Pointer to LLInventoryFVBridgeBuilder.
+	 *
+	 * It is set in LLInventoryPanel's constructor and can be overridden in derived classes with 
+	 * another implementation.
+	 * Take into account it will not be deleted by LLInventoryPanel itself.
+	 */
+	const LLInventoryFVBridgeBuilder* mInvFVBridgeBuilder;
+
+};
+
+#endif // LL_LLINVENTORYPANEL_H
-- 
GitLab


From ebfe3d93d99b9028bc04e0c0e8043b3dd2719971 Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Tue, 3 Nov 2009 20:04:57 +0200
Subject: [PATCH 067/306] implemented  minor  task  EXT-1617 No need to expand
 all accordion panels in the My Landmarks

--HG--
branch : product-engine
---
 indra/newview/llpanellandmarks.cpp | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index c9598a25768..704bc309ee5 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -615,19 +615,21 @@ void LLLandmarksPanel::onClipboardAction(const LLSD& userdata) const
 
 void LLLandmarksPanel::onFoldingAction(const LLSD& userdata)
 {
-	if(!mCurrentSelectedList) return;
-
-	LLFolderView* root_folder = mCurrentSelectedList->getRootFolder();
+	LLFolderView* landmarks_folder = mLandmarksInventoryPanel->getRootFolder();
+	LLFolderView* fav_folder = mFavoritesInventoryPanel->getRootFolder();
 	std::string command_name = userdata.asString();
 
 	if ("expand_all" == command_name)
 	{
-		root_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
-		root_folder->arrangeAll();
+		landmarks_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
+		fav_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
+		landmarks_folder->arrangeAll();
+		fav_folder->arrangeAll();
 	}
 	else if ("collapse_all" == command_name)
 	{
-		root_folder->closeAllFolders();
+		landmarks_folder->closeAllFolders();
+		fav_folder->closeAllFolders();
 	}
 	else if ( "sort_by_date" == command_name)
 	{
@@ -638,6 +640,9 @@ void LLLandmarksPanel::onFoldingAction(const LLSD& userdata)
 	}
 	else
 	{
+		if(!mCurrentSelectedList) return;
+
+		LLFolderView* root_folder = mCurrentSelectedList->getRootFolder();
 		root_folder->doToSelected(&gInventory, userdata);
 	}
 }
-- 
GitLab


From 864594f68e20210d30d1d65b7350f173af13867a Mon Sep 17 00:00:00 2001
From: Sergey Borushevsky <sborushevsky@productengine.com>
Date: Tue, 3 Nov 2009 20:05:57 +0200
Subject: [PATCH 068/306] Fixed normal bug EXT-2041 (Gestures toolbar button
 should be a button like move/view, not a dropdown).

--HG--
branch : product-engine
---
 indra/newview/llnearbychatbar.cpp                      |  4 ++++
 .../skins/default/xui/en/widgets/gesture_combo_box.xml | 10 +++++-----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 10a5a415ce9..d7a5ff289c2 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -77,6 +77,10 @@ LLGestureComboBox::LLGestureComboBox(const LLGestureComboBox::Params& p)
 
 	// refresh list from current active gestures
 	refreshGestures();
+
+	// This forces using of halign from xml, since LLComboBox
+	// sets it to LLFontGL::LEFT, if text entry is disabled
+	mButton->setHAlign(p.drop_down_button.font_halign);
 }
 
 LLGestureComboBox::~LLGestureComboBox()
diff --git a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
index ab4ad940893..6171be034f4 100644
--- a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
@@ -15,14 +15,14 @@
                           image_disabled_selected="ComboButton_Disabled_Selected" />
   <gesture_combo_box.drop_down_button name="Drop Down Button"
                               label=""
+                              halign="center"
                               hover_glow_amount="0.15"
                               font="SansSerif"
                               scale_image="true"
-                              pad_right="24"
-                              image_unselected="DropDown_Off"
-                              image_selected="DropDown_Selected"
-                              image_disabled="DropDown_Disabled"
-                              image_disabled_selected="DropDown_Disabled_Selected" />
+                              image_unselected="PushButton_Off"
+                              image_selected="PushButton_Selected"
+                              image_disabled="PushButton_Disabled"
+                              image_disabled_selected="PushButton_Selected_Disabled" />
   <gesture_combo_box.combo_list bg_writeable_color="MenuDefaultBgColor"
                                 scroll_bar_bg_visible="true" />
   <gesture_combo_box.combo_editor name="Combo Text Entry"
-- 
GitLab


From 73573688c550c8a1e9ab4822d92f33f3523778af Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Tue, 3 Nov 2009 13:32:31 -0500
Subject: [PATCH 069/306] Removed declared but never defined function, which
 was causing a build failure on Mac

--HG--
branch : avatar-pipeline
---
 indra/newview/llsidepanelinventory.cpp | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 8a1b97695d1..5197a9bbc3e 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -47,9 +47,6 @@ static const std::string LANDMARK_INFO_TYPE			= "landmark";
 static const std::string REMOTE_PLACE_INFO_TYPE		= "remote_place";
 static const std::string TELEPORT_HISTORY_INFO_TYPE	= "teleport_history";
 
-// Helper functions
-static void setAllChildrenVisible(LLView* view, BOOL visible);
-
 static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
 
 LLSidepanelInventory::LLSidepanelInventory()
-- 
GitLab


From 506738926d9eca873d8ebaf16af5184c2cc76b90 Mon Sep 17 00:00:00 2001
From: Lis Pardi <lis@lindenlab.com>
Date: Tue, 3 Nov 2009 13:33:26 -0500
Subject: [PATCH 070/306] Ext-1766 about land --> object page titles crammed

---
 .../default/xui/en/floater_about_land.xml     | 202 +++++++++---------
 1 file changed, 102 insertions(+), 100 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index e13aa610e53..1efc5455549 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
- legacy_header_height="18"
  can_tear_off="false"
  height="420"
  layout="topleft"
@@ -26,28 +25,24 @@
         remaining
     </floater.string>
     <tab_container
-     follows="all"
+     follows="left|top|right|bottom"
      height="400"
-   halign="center"
      layout="topleft"
-     font="SansSerifSmall"
      left="1"
-      tab_padding_right="5"
-      tab_height="20"
      name="landtab"
      tab_position="top"
      top="20"
      width="459">
-   <panel
+        <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="380"
          label="General"
          layout="topleft"
          left="1"
          help_topic="land_general_tab"
          name="land_general_panel"
-         top="0"
+         top="-31"
          width="458">
             <panel.string
              name="new users only">
@@ -536,7 +531,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
         </panel>
         <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="380"
          label="Covenant"
          layout="topleft"
@@ -632,7 +627,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              length="1"
              enabled="false"
              follows="left|top|right|bottom"
-             handle_edit_keys_directly="true"
+             handle_edit_keys_directly="true" 
              height="115"
              layout="topleft"
              left_delta="0"
@@ -803,7 +798,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
         </panel>
         <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="380"
          label="Objects"
          layout="topleft"
@@ -854,7 +849,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              left_delta="152"
              name="objects_available"
              top_delta="0"
-             width="212">
+             width="260">
                 [COUNT] out of [MAX] ([AVAILABLE] available)
             </text>
             <text
@@ -875,7 +870,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="152"
+             left_delta="200"
              name="object_contrib_text"
              top_delta="0"
              width="212">
@@ -899,7 +894,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="152"
+             left_delta="200"
              name="total_objects_text"
              top_delta="0"
              width="48">
@@ -914,7 +909,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              left="28"
              name="Owned by parcel owner:"
              top="84"
-             width="128">
+             width="176">
                 Owned by parcel owner:
             </text>
             <text
@@ -923,7 +918,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="128"
+             left_delta="176"
              name="owner_objects_text"
              top_delta="0"
              width="48">
@@ -939,7 +934,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              label_selected="Show"
              layout="topleft"
              name="ShowOwner"
-             right="-190"
+             right="-140"
              width="60" />
             <button
              bottom="100"
@@ -951,7 +946,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              label_selected="Return..."
              layout="topleft"
              name="ReturnOwner..."
-             right="-60"
+             right="-10"
              tool_tip="Return objects to their owners."
              width="119" />
             <text
@@ -963,7 +958,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              left="28"
              name="Set to group:"
              top="104"
-             width="128">
+             width="176">
                 Set to group:
             </text>
             <text
@@ -972,7 +967,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="128"
+             left_delta="176"
              name="group_objects_text"
              top_delta="0"
              width="48">
@@ -988,7 +983,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              label_selected="Show"
              layout="topleft"
              name="ShowGroup"
-             right="-190"
+             right="-140"
              width="60" />
             <button
              bottom="120"
@@ -1000,7 +995,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              label_selected="Return..."
              layout="topleft"
              name="ReturnGroup..."
-             right="-60"
+             right="-10"
              tool_tip="Return objects to their owners."
              width="119" />
             <text
@@ -1012,7 +1007,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              left="28"
              name="Owned by others:"
              top="124"
-             width="128">
+             width="176">
                 Owned by others:
             </text>
             <text
@@ -1021,7 +1016,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="128"
+             left_delta="176"
              name="other_objects_text"
              top_delta="0"
              width="48">
@@ -1037,7 +1032,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              label_selected="Show"
              layout="topleft"
              name="ShowOther"
-             right="-190"
+             right="-140"
              width="60" />
             <button
              bottom="140"
@@ -1049,7 +1044,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              label_selected="Return..."
              layout="topleft"
              name="ReturnOther..."
-             right="-60"
+             right="-10"
              tool_tip="Return objects to their owners."
              width="119" />
             <text
@@ -1061,7 +1056,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              left="28"
              name="Selected / sat upon:"
              top="144"
-             width="128">
+             width="176">
                 Selected / sat upon:
             </text>
             <text
@@ -1070,7 +1065,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="128"
+             left_delta="176"
              name="selected_objects_text"
              top_delta="0"
              width="48">
@@ -1097,7 +1092,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              layout="topleft"
              max_length="6"
              name="clean other time"
-             right="-100"
+             right="-50"
              width="56" />
             <text
              type="string"
@@ -1169,7 +1164,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
         </panel>
         <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="333"
          label="Options"
          layout="topleft"
@@ -1605,15 +1600,16 @@ Only large parcels can be listed in search.
                  value="Anywhere" />
             </combo_box>
         </panel>
-     <panel
+        <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="363"
          label="Media"
          layout="topleft"
          left_delta="0"
          help_topic="land_media_tab"
          name="land_media_panel"
+         top_delta="1"
          width="458">
             <text
              type="string"
@@ -1624,22 +1620,24 @@ Only large parcels can be listed in search.
              left="10"
              name="with media:"
              top="9"
-             width="100">
+             width="65">
                 Type:
             </text>
             <combo_box
-            height="20"
+             height="18"
              layout="topleft"
-             left_pad="10"
+             left_pad="5"
              name="media type"
              tool_tip="Specify if the URL is a movie, web page, or other media"
-             width="150" />
+             top_delta="-2"
+             width="120" />
             <text
              follows="left|top"
              height="16"
              layout="topleft"
              left_pad="10"
              name="mime_type"
+             top_delta="2"
              width="200" />
             <text
              type="string"
@@ -1649,30 +1647,32 @@ Only large parcels can be listed in search.
              layout="topleft"
              left="10"
              name="at URL:"
-             top_pad="10"
-             width="100">
+             top="29"
+             width="65">
                 Home URL:
             </text>
             <line_editor
+             bottom_delta="0"
              follows="left|top"
-             height="20"
+             height="16"
              layout="topleft"
-             left_pad="10"
+             left="80"
              max_length="255"
              name="media_url"
+             right="-80"
              select_on_focus="true"
-             width="270"
-            />
+             text_readonly_color="0.576471 0.662745 0.835294 1" />
             <button
              follows="left|top"
              font="SansSerifSmall"
-             height="20"
-             label="Set"
-             label_selected="Set"
+             height="16"
+             label="Set..."
+             label_selected="Set..."
              layout="topleft"
-             left_pad="5"
+             left_pad="8"
              name="set_media_url"
-             width="50" />
+             top_delta="0"
+             width="60" />
             <text
              type="string"
              length="1"
@@ -1681,34 +1681,37 @@ Only large parcels can be listed in search.
              layout="topleft"
              left="10"
              name="CurrentURL:"
-             top_pad="10"
-             width="100">
+             top="49"
+             width="65">
                 Current URL:
             </text>
             <text
              follows="left|top"
              height="16"
              layout="topleft"
-             left_pad="10"
+             left_pad="5"
              name="current_url"
-             width="260">http://</text>
+             top_delta="0"
+             width="300" />
             <button
              follows="left|top"
-             height="20"
-             label="Reset"
-             label_selected="Reset"
+             font="SansSerifSmall"
+             height="16"
+             label="Reset..."
+             label_selected="Reset..."
              layout="topleft"
              left_pad="6"
              name="reset_media_url"
+             top_delta="0"
              width="60" />
             <check_box
              height="16"
              label="Hide URL"
              layout="topleft"
-             left="120"
+             left="100"
              name="hide_media_url"
              tool_tip="Checking this option will hide the media url to any non-authorized viewers of this parcel information. Note this is not available for HTML types."
-             top_pad="2"
+             top="89"
              width="200" />
             <text
              type="string"
@@ -1718,20 +1721,23 @@ Only large parcels can be listed in search.
              layout="topleft"
              left="10"
              name="Description:"
-             top_pad="10"
-             width="100">
+             top="49"
+             width="364">
                 Description:
             </text>
             <line_editor
+             border_style="line"
+             border_thickness="1"
+             bottom_delta="0"
              follows="left|top"
-             height="35"
+             height="16"
              layout="topleft"
+             left="80"
+             max_length="255"
              name="url_description"
-             left_pad="10"
+             right="-80"
              select_on_focus="true"
-             tool_tip="Text displayed next to play/load button"
-             top_delta="0"
-             width="270" />
+             tool_tip="Text displayed next to play/load button" />
             <text
              type="string"
              length="1"
@@ -1740,9 +1746,10 @@ Only large parcels can be listed in search.
              layout="topleft"
              left="10"
              name="Media texture:"
-             top_pad="10"
-             width="100">
-                Replace Texture:
+             top="69"
+             width="364">
+                Replace
+Texture:
             </text>
             <texture_picker
              allow_no_texture="true"
@@ -1750,7 +1757,7 @@ Only large parcels can be listed in search.
              follows="left|top"
              height="80"
              layout="topleft"
-             left_pad="10"
+             left_delta="70"
              name="media texture"
              tool_tip="Click to choose a picture"
              top_delta="0"
@@ -1759,22 +1766,25 @@ Only large parcels can be listed in search.
              type="string"
              length="1"
              follows="left|top"
-             height="50"
+             height="16"
              layout="topleft"
-             left_pad="10"
+             left_delta="75"
              name="replace_texture_help"
-             top_delta="0"
-             word_wrap="true"
-             width="240">
-                Objects using this texture will show the movie or  web page after you click the play arrow.
+             top="85"
+             width="270">
+                Objects using this texture will show the movie or
+        web page after you click the play arrow.
+
+        Select the thumbnail to choose a different texture.
             </text>
             <check_box
              height="16"
              label="Auto scale"
              layout="topleft"
+             left_delta="70"
              name="media_auto_scale"
              tool_tip="Checking this option will scale the content for this parcel automatically. It may be slightly slower and lower quality visually but no other texture scaling or alignment will be required."
-             top_pad="3"
+             top_delta="0"
              width="200" />
             <text
              type="string"
@@ -1782,11 +1792,11 @@ Only large parcels can be listed in search.
              follows="left|top"
              height="16"
              layout="topleft"
-             left="10"
-             top_pad="10"
+             left="85"
              name="media_size"
              tool_tip="Size to render Web media, leave 0 for default."
-             width="100">
+             top="185"
+             width="85">
                 Size:
             </text>
             <spinner
@@ -1798,22 +1808,12 @@ Only large parcels can be listed in search.
              increment="1"
              initial_value="0"
              layout="topleft"
-             left_pad="10"
+             left_delta="65"
              max_val="1024"
              name="media_size_width"
              tool_tip="Size to render Web media, leave 0 for default."
              top_delta="0"
              width="64" />
-                         <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left_pad="5"
-             name="pixels">
-                px wide
-            </text>
             <spinner
              decimal_digits="0"
              enabled="false"
@@ -1823,21 +1823,23 @@ Only large parcels can be listed in search.
              increment="1"
              initial_value="0"
              layout="topleft"
-             left="120"
-             top_pad="3"
+             left_pad="16"
              max_val="1024"
              name="media_size_height"
              tool_tip="Size to render Web media, leave 0 for default."
+             top_delta="0"
              width="64" />
             <text
              type="string"
              length="1"
+             bottom_delta="0"
              follows="left|top"
              height="16"
              layout="topleft"
-             left_pad="5"
-             name="pixels">
-                px high
+             left_delta="70"
+             name="pixels"
+             right="-10">
+                pixels
             </text>
             <text
              type="string"
@@ -1847,15 +1849,15 @@ Only large parcels can be listed in search.
              layout="topleft"
              left="10"
              name="Options:"
-             top_pad="10"
-             width="100">
+             top="237"
+             width="292">
                 Options:
             </text>
             <check_box
              height="16"
              label="Loop"
              layout="topleft"
-             left_pad="10"
+             left_delta="70"
              name="media_loop"
              tool_tip="Play media in a loop.  When the media has finished playing, it will restart from the beginning."
              top_delta="0"
@@ -1863,9 +1865,9 @@ Only large parcels can be listed in search.
         </panel>
         <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="363"
-         label="Sound"
+         label="Audio"
          layout="topleft"
          left_delta="0"
          help_topic="land_audio_tab"
@@ -1967,7 +1969,7 @@ Only large parcels can be listed in search.
         </panel>
         <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="333"
          label="Access"
          layout="topleft"
-- 
GitLab


From 1ceee1b80b4a1788581f9a59435c4901a99549ac Mon Sep 17 00:00:00 2001
From: Sergey Borushevsky <sborushevsky@productengine.com>
Date: Tue, 3 Nov 2009 20:51:18 +0200
Subject: [PATCH 071/306] Fixed EXT-2025 (Gesture btn couses nothing)

--HG--
branch : product-engine
---
 indra/newview/skins/default/xui/en/panel_bottomtray.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 61bd1d186e5..920593e7ae3 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -93,7 +93,7 @@
          min_width="76"
          name="gesture_panel"
          user_resize="false">
-         <button
+         <gesture_combo_box
            follows="right"
           height="23"
           label="Gesture"
-- 
GitLab


From 90f03ea00b0db2de6a09f176c634ae8836a404e8 Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Tue, 3 Nov 2009 20:57:55 +0200
Subject: [PATCH 072/306] rollback changes after commit fcc1a5f44ee8

--HG--
branch : product-engine
---
 indra/integration_tests/CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/integration_tests/CMakeLists.txt b/indra/integration_tests/CMakeLists.txt
index 664a3ee853c..67e8fbf1f2c 100644
--- a/indra/integration_tests/CMakeLists.txt
+++ b/indra/integration_tests/CMakeLists.txt
@@ -1,3 +1,3 @@
 # -*- cmake -*-
 
-#add_subdirectory(llui_libtest)
+add_subdirectory(llui_libtest)
-- 
GitLab


From 5884c2fa4c01a959edaf68a4197c9d1913899d17 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Tue, 3 Nov 2009 13:58:08 -0500
Subject: [PATCH 073/306] EXT-2131 : object properties sidepanel EXT-2128 :
 remove multi-properties ability, disable from inventory menu

Also includes llsidepanelinventory cleanup.

--HG--
branch : avatar-pipeline
---
 indra/newview/llinventorybridge.cpp      |    6 +
 indra/newview/llpanelobjectinventory.cpp | 3818 +++++++++++-----------
 indra/newview/llsidepanelinventory.cpp   |  523 ++-
 indra/newview/llsidepanelinventory.h     |  165 +-
 4 files changed, 2246 insertions(+), 2266 deletions(-)

diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 336025e55ee..b9775cf0e9c 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -604,6 +604,12 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
 	{
 		disabled_items.push_back(std::string("Delete"));
 	}
+
+	// If multiple items are selected, disable properties (if it exists).
+	if ((flags & FIRST_SELECTED_ITEM) == 0)
+	{
+		disabled_items.push_back(std::string("Properties"));
+	}
 }
 
 void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 365a6e632fa..63fad7ddfdb 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -1,1905 +1,1913 @@
-/**
- * @file llsidepanelinventory.cpp
- * @brief LLPanelObjectInventory class implementation
- *
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- * 
- * Copyright (c) 2002-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-//*****************************************************************************
-//
-// Implementation of the panel inventory - used to view and control a
-// task's inventory.
-//
-//*****************************************************************************
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llpanelobjectinventory.h"
-
-#include "roles_constants.h"
-
-#include "llagent.h"
-#include "llcallbacklist.h"
-#include "llfloaterbuycurrency.h"
-#include "llfloaterreg.h"
-#include "llinventorybridge.h"
-#include "llinventoryfunctions.h"
-#include "llpreviewanim.h"
-#include "llpreviewgesture.h"
-#include "llpreviewnotecard.h"
-#include "llpreviewscript.h"
-#include "llpreviewsound.h"
-#include "llpreviewtexture.h"
-#include "llscrollcontainer.h"
-#include "llselectmgr.h"
-#include "llstatusbar.h"
-#include "lltrans.h"
-#include "llviewerregion.h"
-#include "llviewerobjectlist.h"
-#include "llviewermessage.h"
-
-
-///----------------------------------------------------------------------------
-/// Class LLTaskInvFVBridge
-///----------------------------------------------------------------------------
-
-class LLTaskInvFVBridge : public LLFolderViewEventListener
-{
-protected:
-	LLUUID mUUID;
-	std::string mName;
-	mutable std::string mDisplayName;
-	LLPanelObjectInventory* mPanel;
-	U32 mFlags;
-
-	LLInventoryItem* findItem() const;
-
-public:
-	LLTaskInvFVBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name,
-		U32 flags=0);
-	virtual ~LLTaskInvFVBridge( void ) {}
-
-	virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; }
-	virtual std::string getLabelSuffix() const { return LLStringUtil::null; }
-
-	static LLTaskInvFVBridge* createObjectBridge(LLPanelObjectInventory* panel,
-												 LLInventoryObject* object);
-	void showProperties();
-	void buyItem();
-	S32 getPrice();
-	static bool commitBuyItem(const LLSD& notification, const LLSD& response);
-
-	// LLFolderViewEventListener functionality
-	virtual const std::string& getName() const;
-	virtual const std::string& getDisplayName() const;
-	virtual PermissionMask getPermissionMask() const { return PERM_NONE; }
-	/*virtual*/ LLAssetType::EType getPreferredType() const { return LLAssetType::AT_NONE; }
-	virtual const LLUUID& getUUID() const { return mUUID; }
-	virtual time_t getCreationDate() const;
-	virtual LLUIImagePtr getIcon() const;
-	virtual void openItem();
-	virtual void closeItem() {}
-	virtual void previewItem();
-	virtual void selectItem() {}
-	virtual BOOL isItemRenameable() const;
-	virtual BOOL renameItem(const std::string& new_name);
-	virtual BOOL isItemMovable() const;
-	virtual BOOL isItemRemovable();
-	virtual BOOL removeItem();
-	virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch);
-	virtual void move(LLFolderViewEventListener* parent_listener);
-	virtual BOOL isItemCopyable() const;
-	virtual BOOL copyToClipboard() const;
-	virtual void cutToClipboard();
-	virtual BOOL isClipboardPasteable() const;
-	virtual void pasteFromClipboard();
-	virtual void pasteLinkFromClipboard();
-	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
-	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
-	virtual BOOL isUpToDate() const { return TRUE; }
-	virtual BOOL hasChildren() const { return FALSE; }
-	virtual LLInventoryType::EType getInventoryType() const { return LLInventoryType::IT_NONE; }
-	// LLDragAndDropBridge functionality
-	virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;
-	virtual BOOL dragOrDrop(MASK mask, BOOL drop,
-							EDragAndDropType cargo_type,
-							void* cargo_data);
-};
-
-LLTaskInvFVBridge::LLTaskInvFVBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name,
-	U32 flags):
-	mUUID(uuid),
-	mName(name),
-	mPanel(panel),
-	mFlags(flags)
-{
-
-}
-
-LLInventoryItem* LLTaskInvFVBridge::findItem() const
-{
-	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-	if(object)
-	{
-		return (LLInventoryItem*)(object->getInventoryObject(mUUID));
-	}
-	return NULL;
-}
-
-void LLTaskInvFVBridge::showProperties()
-{
-	LLFloaterProperties* floater = LLFloaterReg::showTypedInstance<LLFloaterProperties>("properties", mUUID);
-	if (floater)
-	{
-		floater->setObjectID(mPanel->getTaskUUID());
-	}
-}
-
-struct LLBuyInvItemData
-{
-	LLUUID mTaskID;
-	LLUUID mItemID;
-	LLAssetType::EType mType;
-
-	LLBuyInvItemData(const LLUUID& task,
-					 const LLUUID& item,
-					 LLAssetType::EType type) :
-		mTaskID(task), mItemID(item), mType(type)
-	{}
-};
-
-void LLTaskInvFVBridge::buyItem()
-{
-	llinfos << "LLTaskInvFVBridge::buyItem()" << llendl;
-	LLInventoryItem* item = findItem();
-	if(!item || !item->getSaleInfo().isForSale()) return;
-	LLBuyInvItemData* inv = new LLBuyInvItemData(mPanel->getTaskUUID(),
-												 mUUID,
-												 item->getType());
-
-	const LLSaleInfo& sale_info = item->getSaleInfo();
-	const LLPermissions& perm = item->getPermissions();
-	const std::string owner_name; // no owner name currently... FIXME?
-
-	LLViewerObject* obj;
-	if( ( obj = gObjectList.findObject( mPanel->getTaskUUID() ) ) && obj->isAttachment() )
-	{
-		LLNotifications::instance().add("Cannot_Purchase_an_Attachment");
-		llinfos << "Attempt to purchase an attachment" << llendl;
-		delete inv;
-	}
-	else
-	{
-        LLSD args;
-        args["PRICE"] = llformat("%d",sale_info.getSalePrice());
-        args["OWNER"] = owner_name;
-        if (sale_info.getSaleType() != LLSaleInfo::FS_CONTENTS)
-        {
-        	U32 next_owner_mask = perm.getMaskNextOwner();
-        	args["MODIFYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_MODIFY) ? "PermYes" : "PermNo");
-        	args["COPYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_COPY) ? "PermYes" : "PermNo");
-        	args["RESELLPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_TRANSFER) ? "PermYes" : "PermNo");
-        }
-
-		std::string alertdesc;
-       	switch(sale_info.getSaleType())
-       	{
-       	  case LLSaleInfo::FS_ORIGINAL:
-       		alertdesc = owner_name.empty() ? "BuyOriginalNoOwner" : "BuyOriginal";
-       		break;
-       	  case LLSaleInfo::FS_CONTENTS:
-       		alertdesc = owner_name.empty() ? "BuyContentsNoOwner" : "BuyContents";
-       		break;
-		  case LLSaleInfo::FS_COPY:
-       	  default:
-       		alertdesc = owner_name.empty() ? "BuyCopyNoOwner" : "BuyCopy";
-       		break;
-       	}
-
-		LLSD payload;
-		payload["task_id"] = inv->mTaskID;
-		payload["item_id"] = inv->mItemID;
-		payload["type"] = inv->mType;
-		LLNotifications::instance().add(alertdesc, args, payload, LLTaskInvFVBridge::commitBuyItem);
-	}
-}
-
-S32 LLTaskInvFVBridge::getPrice()
-{
-	LLInventoryItem* item = findItem();
-	if(item)
-	{
-		return item->getSaleInfo().getSalePrice();
-	}
-	else
-	{
-		return -1;
-	}
-}
-
-// static
-bool LLTaskInvFVBridge::commitBuyItem(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotification::getSelectedOption(notification, response);
-	if(0 == option)
-	{
-		LLViewerObject* object = gObjectList.findObject(notification["payload"]["task_id"].asUUID());
-		if(!object || !object->getRegion()) return false;
-
-
-		LLMessageSystem* msg = gMessageSystem;
-		msg->newMessageFast(_PREHASH_BuyObjectInventory);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->nextBlockFast(_PREHASH_Data);
-		msg->addUUIDFast(_PREHASH_ObjectID, notification["payload"]["task_id"].asUUID());
-		msg->addUUIDFast(_PREHASH_ItemID, notification["payload"]["item_id"].asUUID());
-		msg->addUUIDFast(_PREHASH_FolderID,
-			gInventory.findCategoryUUIDForType((LLAssetType::EType)notification["payload"]["type"].asInteger()));
-		msg->sendReliable(object->getRegion()->getHost());
-	}
-	return false;
-}
-
-const std::string& LLTaskInvFVBridge::getName() const
-{
-	return mName;
-}
-
-const std::string& LLTaskInvFVBridge::getDisplayName() const
-{
-	LLInventoryItem* item = findItem();
-	if(item)
-	{
-		mDisplayName.assign(item->getName());
-
-		const LLPermissions& perm(item->getPermissions());
-		BOOL copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
-		BOOL mod  = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE);
-		BOOL xfer = gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE);
-
-		if(!copy)
-		{
-			mDisplayName.append(" (no copy)");
-		}
-		if(!mod)
-		{
-			mDisplayName.append(" (no modify)");
-		}
-		if(!xfer)
-		{
-			mDisplayName.append(" (no transfer)");
-		}
-	}
-
-	return mDisplayName;
-}
-
-// BUG: No creation dates for task inventory
-time_t LLTaskInvFVBridge::getCreationDate() const
-{
-	return 0;
-}
-
-LLUIImagePtr LLTaskInvFVBridge::getIcon() const
-{
-	BOOL item_is_multi = FALSE;
-	if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
-	{
-		item_is_multi = TRUE;
-	}
-
-	return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0, item_is_multi );
-}
-
-void LLTaskInvFVBridge::openItem()
-{
-	// no-op.
-	lldebugs << "LLTaskInvFVBridge::openItem()" << llendl;
-}
-
-void LLTaskInvFVBridge::previewItem()
-{
-	openItem();
-}
-
-BOOL LLTaskInvFVBridge::isItemRenameable() const
-{
-	if(gAgent.isGodlike()) return TRUE;
-	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-	if(object)
-	{
-		LLInventoryItem* item;
-		item = (LLInventoryItem*)(object->getInventoryObject(mUUID));
-		if(item && gAgent.allowOperation(PERM_MODIFY, item->getPermissions(),
-										 GP_OBJECT_MANIPULATE, GOD_LIKE))
-		{
-			return TRUE;
-		}
-	}
-	return FALSE;
-}
-
-BOOL LLTaskInvFVBridge::renameItem(const std::string& new_name)
-{
-	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-	if(object)
-	{
-		LLViewerInventoryItem* item = NULL;
-		item = (LLViewerInventoryItem*)object->getInventoryObject(mUUID);
-		if(item && (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(),
-										GP_OBJECT_MANIPULATE, GOD_LIKE)))
-		{
-			LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
-			new_item->rename(new_name);
-			object->updateInventory(
-				new_item,
-				TASK_INVENTORY_ITEM_KEY,
-				false);
-		}
-	}
-	return TRUE;
-}
-
-BOOL LLTaskInvFVBridge::isItemMovable() const
-{
-	//LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-	//if(object && (object->permModify() || gAgent.isGodlike()))
-	//{
-	//	return TRUE;
-	//}
-	//return FALSE;
-	return TRUE;
-}
-
-BOOL LLTaskInvFVBridge::isItemRemovable()
-{
-	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-	if(object
-	   && (object->permModify() || object->permYouOwner()))
-	{
-		return TRUE;
-	}
-	return FALSE;
-}
-
-bool remove_task_inventory_callback(const LLSD& notification, const LLSD& response, LLPanelObjectInventory* panel)
-{
-	S32 option = LLNotification::getSelectedOption(notification, response);
-	LLViewerObject* object = gObjectList.findObject(notification["payload"]["task_id"].asUUID());
-	if(option == 0 && object)
-	{
-		// yes
-		LLSD::array_const_iterator list_end = notification["payload"]["inventory_ids"].endArray();
-		for (LLSD::array_const_iterator list_it = notification["payload"]["inventory_ids"].beginArray();
-			list_it != list_end; 
-			++list_it)
-		{
-			object->removeInventory(list_it->asUUID());
-		}
-
-		// refresh the UI.
-		panel->refresh();
-	}
-	return false;
-}
-
-// helper for remove
-// ! REFACTOR ! two_uuids_list_t is also defined in llinevntorybridge.h, but differently.
-typedef std::pair<LLUUID, std::list<LLUUID> > panel_two_uuids_list_t;
-typedef std::pair<LLPanelObjectInventory*, panel_two_uuids_list_t> remove_data_t;
-BOOL LLTaskInvFVBridge::removeItem()
-{
-	if(isItemRemovable() && mPanel)
-	{
-		LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-		if(object)
-		{
-			if(object->permModify())
-			{
-				// just do it.
-				object->removeInventory(mUUID);
-				return TRUE;
-			}
-			else
-			{
-				remove_data_t* data = new remove_data_t;
-				data->first = mPanel;
-				data->second.first = mPanel->getTaskUUID();
-				data->second.second.push_back(mUUID);
-				LLSD payload;
-				payload["task_id"] = mPanel->getTaskUUID();
-				payload["inventory_ids"].append(mUUID);
-				LLNotifications::instance().add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
-				return FALSE;
-			}
-		}
-	}
-	return FALSE;
-}
-
-void LLTaskInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch)
-{
-	if (!mPanel)
-	{
-		return;
-	}
-
-	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-	if (!object)
-	{
-		return;
-	}
-
-	if (!object->permModify())
-	{
-		LLSD payload;
-		payload["task_id"] = mPanel->getTaskUUID();
-		for (S32 i = 0; i < (S32)batch.size(); i++)
-		{
-			LLTaskInvFVBridge* itemp = (LLTaskInvFVBridge*)batch[i];
-			payload["inventory_ids"].append(itemp->getUUID());
-		}
-		LLNotifications::instance().add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
-		
-	}
-	else
-	{
-		for (S32 i = 0; i < (S32)batch.size(); i++)
-		{
-			LLTaskInvFVBridge* itemp = (LLTaskInvFVBridge*)batch[i];
-
-			if(itemp->isItemRemovable())
-			{
-				// just do it.
-				object->removeInventory(itemp->getUUID());
-			}
-		}
-	}
-}
-
-void LLTaskInvFVBridge::move(LLFolderViewEventListener* parent_listener)
-{
-}
-
-BOOL LLTaskInvFVBridge::isItemCopyable() const
-{
-	LLInventoryItem* item = findItem();
-	if(!item) return FALSE;
-	return gAgent.allowOperation(PERM_COPY, item->getPermissions(),
-								GP_OBJECT_MANIPULATE);
-}
-
-BOOL LLTaskInvFVBridge::copyToClipboard() const
-{
-	return FALSE;
-}
-
-void LLTaskInvFVBridge::cutToClipboard()
-{
-}
-
-BOOL LLTaskInvFVBridge::isClipboardPasteable() const
-{
-	return FALSE;
-}
-
-void LLTaskInvFVBridge::pasteFromClipboard()
-{
-}
-
-void LLTaskInvFVBridge::pasteLinkFromClipboard()
-{
-}
-
-BOOL LLTaskInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
-{
-	//llinfos << "LLTaskInvFVBridge::startDrag()" << llendl;
-	if(mPanel)
-	{
-		LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-		if(object)
-		{
-			LLInventoryItem* inv = NULL;
-			if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID)))
-			{
-				const LLPermissions& perm = inv->getPermissions();
-				bool can_copy = gAgent.allowOperation(PERM_COPY, perm,
-														GP_OBJECT_MANIPULATE);
-				if (object->isAttachment() && !can_copy)
-				{
-                    //RN: no copy contents of attachments cannot be dragged out
-                    // due to a race condition and possible exploit where
-                    // attached objects do not update their inventory items
-                    // when their contents are manipulated
-                    return FALSE;
-				}
-				if((can_copy && perm.allowTransferTo(gAgent.getID()))
-				   || object->permYouOwner())
-//				   || gAgent.isGodlike())
-
-				{
-					*type = LLAssetType::lookupDragAndDropType(inv->getType());
-
-					*id = inv->getUUID();
-					return TRUE;
-				}
-			}
-		}
-	}
-	return FALSE;
-}
-
-BOOL LLTaskInvFVBridge::dragOrDrop(MASK mask, BOOL drop,
-								   EDragAndDropType cargo_type,
-								   void* cargo_data)
-{
-	//llinfos << "LLTaskInvFVBridge::dragOrDrop()" << llendl;
-	return FALSE;
-}
-
-// virtual
-void LLTaskInvFVBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if (action == "task_buy")
-	{
-		// Check the price of the item.
-		S32 price = getPrice();
-		if (-1 == price)
-		{
-			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
-		}
-		else
-		{
-			if (price > 0 && price > gStatusBar->getBalance())
-			{
-				LLFloaterBuyCurrency::buyCurrency("This costs", price);
-			}
-			else
-			{
-				buyItem();
-			}
-		}
-	}
-	else if (action == "task_open")
-	{
-		openItem();
-	}
-	else if (action == "task_properties")
-	{
-		showProperties();
-	}
-}
-
-void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	LLInventoryItem* item = findItem();
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-	
-	if (!item)
-	{
-		hide_context_entries(menu, items, disabled_items);
-		return;
-	}
-
-	if(gAgent.allowOperation(PERM_OWNER, item->getPermissions(),
-							 GP_OBJECT_MANIPULATE)
-	   && item->getSaleInfo().isForSale())
-	{
-		items.push_back(std::string("Task Buy"));
-
-		std::string label= LLTrans::getString("Buy");
-		// Check the price of the item.
-		S32 price = getPrice();
-		if (-1 == price)
-		{
-			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
-		}
-		else
-		{
-			std::ostringstream info;
-			info << LLTrans::getString("BuyforL$") << price;
-			label.assign(info.str());
-		}
-
-		const LLView::child_list_t *list = menu.getChildList();
-		LLView::child_list_t::const_iterator itor;
-		for (itor = list->begin(); itor != list->end(); ++itor)
-		{
-			std::string name = (*itor)->getName();
-			LLMenuItemCallGL* menu_itemp = dynamic_cast<LLMenuItemCallGL*>(*itor);
-			if (name == "Task Buy" && menu_itemp)
-			{
-				menu_itemp->setLabel(label);
-			}
-		}
-	}
-	else
-	{
-		items.push_back(std::string("Task Open"));
-		if (!isItemCopyable())
-		{
-			disabled_items.push_back(std::string("Task Open"));
-		}
-	}
-	items.push_back(std::string("Task Properties"));
-	if(isItemRenameable())
-	{
-		items.push_back(std::string("Task Rename"));
-	}
-	if(isItemRemovable())
-	{
-		items.push_back(std::string("Task Remove"));
-	}
-
-	hide_context_entries(menu, items, disabled_items);
-}
-
-
-///----------------------------------------------------------------------------
-/// Class LLTaskFolderBridge
-///----------------------------------------------------------------------------
-
-class LLTaskCategoryBridge : public LLTaskInvFVBridge
-{
-public:
-	LLTaskCategoryBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name);
-
-	virtual LLUIImagePtr getIcon() const;
-	virtual const std::string& getDisplayName() const { return getName(); }
-	virtual BOOL isItemRenameable() const;
-	virtual BOOL renameItem(const std::string& new_name);
-	virtual BOOL isItemRemovable();
-	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
-	virtual BOOL hasChildren() const;
-	virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;
-	virtual BOOL dragOrDrop(MASK mask, BOOL drop,
-							EDragAndDropType cargo_type,
-							void* cargo_data);
-};
-
-LLTaskCategoryBridge::LLTaskCategoryBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name) :
-	LLTaskInvFVBridge(panel, uuid, name)
-{
-}
-
-LLUIImagePtr LLTaskCategoryBridge::getIcon() const
-{
-	return LLUI::getUIImage("Inv_FolderClosed");
-}
-
-BOOL LLTaskCategoryBridge::isItemRenameable() const
-{
-	return FALSE;
-}
-
-BOOL LLTaskCategoryBridge::renameItem(const std::string& new_name)
-{
-	return FALSE;
-}
-
-BOOL LLTaskCategoryBridge::isItemRemovable()
-{
-	return FALSE;
-}
-
-void LLTaskCategoryBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-	items.push_back(std::string("Task Open"));
-	hide_context_entries(menu, items, disabled_items);
-}
-
-BOOL LLTaskCategoryBridge::hasChildren() const
-{
-	// return TRUE if we have or do know know if we have children.
-	// *FIX: For now, return FALSE - we will know for sure soon enough.
-	return FALSE;
-}
-
-BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
-{
-	//llinfos << "LLTaskInvFVBridge::startDrag()" << llendl;
-	if(mPanel)
-	{
-		LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-		if(object)
-		{
-			LLInventoryItem* inv = NULL;
-			if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID)))
-			{
-				const LLPermissions& perm = inv->getPermissions();
-				bool can_copy = gAgent.allowOperation(PERM_COPY, perm,
-														GP_OBJECT_MANIPULATE);
-				if((can_copy && perm.allowTransferTo(gAgent.getID()))
-				   || object->permYouOwner())
-//				   || gAgent.isGodlike())
-
-				{
-					*type = LLAssetType::lookupDragAndDropType(inv->getType());
-
-					*id = inv->getUUID();
-					return TRUE;
-				}
-			}
-		}
-	}
-	return FALSE;
-}
-
-BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop,
-									  EDragAndDropType cargo_type,
-									  void* cargo_data)
-{
-	//llinfos << "LLTaskCategoryBridge::dragOrDrop()" << llendl;
-	BOOL accept = FALSE;
-	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-	if(object)
-	{
-		switch(cargo_type)
-		{
-		case DAD_CATEGORY:
-			accept = LLToolDragAndDrop::getInstance()->dadUpdateInventoryCategory(object,drop);
-			break;
-		case DAD_TEXTURE:
-		case DAD_SOUND:
-		case DAD_LANDMARK:
-		case DAD_OBJECT:
-		case DAD_NOTECARD:
-		case DAD_CLOTHING:
-		case DAD_BODYPART:
-		case DAD_ANIMATION:
-		case DAD_GESTURE:
-		case DAD_CALLINGCARD:
-			accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data);
-			if(accept && drop)
-			{
-				LLToolDragAndDrop::dropInventory(object,
-												 (LLViewerInventoryItem*)cargo_data,
-												 LLToolDragAndDrop::getInstance()->getSource(),
-												 LLToolDragAndDrop::getInstance()->getSourceID());
-			}
-			break;
-		case DAD_SCRIPT:
-			// *HACK: In order to resolve SL-22177, we need to block
-			// drags from notecards and objects onto other
-			// objects. uncomment the simpler version when we have
-			// that right.
-			//accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data);
-			if(LLToolDragAndDrop::isInventoryDropAcceptable(
-				   object, (LLViewerInventoryItem*)cargo_data)
-			   && (LLToolDragAndDrop::SOURCE_WORLD != LLToolDragAndDrop::getInstance()->getSource())
-			   && (LLToolDragAndDrop::SOURCE_NOTECARD != LLToolDragAndDrop::getInstance()->getSource()))
-			{
-				accept = TRUE;
-			}
-			if(accept && drop)
-			{
-				LLViewerInventoryItem* item = (LLViewerInventoryItem*)cargo_data;
-				// rez in the script active by default, rez in
-				// inactive if the control key is being held down.
-				BOOL active = ((mask & MASK_CONTROL) == 0);
-				LLToolDragAndDrop::dropScript(object, item, active,
-											  LLToolDragAndDrop::getInstance()->getSource(),
-											  LLToolDragAndDrop::getInstance()->getSourceID());
-			}
-			break;
-		default:
-			break;
-		}
-	}
-	return accept;
-}
-
-///----------------------------------------------------------------------------
-/// Class LLTaskTextureBridge
-///----------------------------------------------------------------------------
-
-class LLTaskTextureBridge : public LLTaskInvFVBridge
-{
-public:
-	LLTaskTextureBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name,
-		LLInventoryType::EType it);
-
-	virtual LLUIImagePtr getIcon() const;
-	virtual void openItem();
-protected:
-	LLInventoryType::EType mInventoryType;
-};
-
-LLTaskTextureBridge::LLTaskTextureBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name,
-	LLInventoryType::EType it) :
-	LLTaskInvFVBridge(panel, uuid, name),
-	mInventoryType(it)
-{
-}
-
-LLUIImagePtr LLTaskTextureBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_TEXTURE, mInventoryType, 0, FALSE);
-}
-
-void LLTaskTextureBridge::openItem()
-{
-	llinfos << "LLTaskTextureBridge::openItem()" << llendl;
-	LLPreviewTexture* preview = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
-	if(preview)
-	{
-		preview->setObjectID(mPanel->getTaskUUID());
-	}
-}
-
-
-///----------------------------------------------------------------------------
-/// Class LLTaskSoundBridge
-///----------------------------------------------------------------------------
-
-class LLTaskSoundBridge : public LLTaskInvFVBridge
-{
-public:
-	LLTaskSoundBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name);
-
-	virtual LLUIImagePtr getIcon() const;
-	virtual void openItem();
-	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
-	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
-	static void openSoundPreview(void* data);
-};
-
-LLTaskSoundBridge::LLTaskSoundBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name) :
-	LLTaskInvFVBridge(panel, uuid, name)
-{
-}
-
-LLUIImagePtr LLTaskSoundBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE);
-}
-
-void LLTaskSoundBridge::openItem()
-{
-	openSoundPreview((void*)this);
-}
-
-void LLTaskSoundBridge::openSoundPreview(void* data)
-{
-	LLTaskSoundBridge* self = (LLTaskSoundBridge*)data;
-	if(!self)
-		return;
-
-	LLPreviewSound* preview = LLFloaterReg::showTypedInstance<LLPreviewSound>("preview_sound", LLSD(self->mUUID), TAKE_FOCUS_YES);
-	if (preview)
-	{
-		preview->setObjectID(self->mPanel->getTaskUUID());
-	}
-}
-
-// virtual
-void LLTaskSoundBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if (action == "task_play")
-	{
-		LLInventoryItem* item = findItem();
-		if(item)
-		{
-			send_sound_trigger(item->getAssetUUID(), 1.0);
-		}
-	}
-	LLTaskInvFVBridge::performAction(folder, model, action);
-}
-
-void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	LLInventoryItem* item = findItem();
-	if(!item) return;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	if(item->getPermissions().getOwner() != gAgent.getID()
-	   && item->getSaleInfo().isForSale())
-	{
-		items.push_back(std::string("Task Buy"));
-
-		std::string label= LLTrans::getString("Buy");
-		// Check the price of the item.
-		S32 price = getPrice();
-		if (-1 == price)
-		{
-			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
-		}
-		else
-		{
-			std::ostringstream info;
-			info <<  LLTrans::getString("BuyforL$") << price;
-			label.assign(info.str());
-		}
-
-		const LLView::child_list_t *list = menu.getChildList();
-		LLView::child_list_t::const_iterator itor;
-		for (itor = list->begin(); itor != list->end(); ++itor)
-		{
-			std::string name = (*itor)->getName();
-			LLMenuItemCallGL* menu_itemp = dynamic_cast<LLMenuItemCallGL*>(*itor);
-			if (name == "Task Buy" && menu_itemp)
-			{
-				menu_itemp->setLabel(label);
-			}
-		}
-	}
-	else
-	{
-		items.push_back(std::string("Task Open")); 
-		if (!isItemCopyable())
-		{
-			disabled_items.push_back(std::string("Task Open"));
-		}
-	}
-	items.push_back(std::string("Task Properties"));
-	if(isItemRenameable())
-	{
-		items.push_back(std::string("Task Rename"));
-	}
-	if(isItemRemovable())
-	{
-		items.push_back(std::string("Task Remove"));
-	}
-
-	items.push_back(std::string("Task Play"));
-
-
-	hide_context_entries(menu, items, disabled_items);
-}
-
-///----------------------------------------------------------------------------
-/// Class LLTaskLandmarkBridge
-///----------------------------------------------------------------------------
-
-class LLTaskLandmarkBridge : public LLTaskInvFVBridge
-{
-public:
-	LLTaskLandmarkBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name);
-
-	virtual LLUIImagePtr getIcon() const;
-};
-
-LLTaskLandmarkBridge::LLTaskLandmarkBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name) :
-	LLTaskInvFVBridge(panel, uuid, name)
-{
-}
-
-LLUIImagePtr LLTaskLandmarkBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, 0, FALSE);
-}
-
-
-///----------------------------------------------------------------------------
-/// Class LLTaskCallingCardBridge
-///----------------------------------------------------------------------------
-
-class LLTaskCallingCardBridge : public LLTaskInvFVBridge
-{
-public:
-	LLTaskCallingCardBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name);
-
-	virtual LLUIImagePtr getIcon() const;
-	virtual BOOL isItemRenameable() const;
-	virtual BOOL renameItem(const std::string& new_name);
-};
-
-LLTaskCallingCardBridge::LLTaskCallingCardBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name) :
-	LLTaskInvFVBridge(panel, uuid, name)
-{
-}
-
-LLUIImagePtr LLTaskCallingCardBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, 0, FALSE);
-}
-
-BOOL LLTaskCallingCardBridge::isItemRenameable() const
-{
-	return FALSE;
-}
-
-BOOL LLTaskCallingCardBridge::renameItem(const std::string& new_name)
-{
-	return FALSE;
-}
-
-
-///----------------------------------------------------------------------------
-/// Class LLTaskScriptBridge
-///----------------------------------------------------------------------------
-
-class LLTaskScriptBridge : public LLTaskInvFVBridge
-{
-public:
-	LLTaskScriptBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name);
-
-	virtual LLUIImagePtr getIcon() const;
-	//static BOOL enableIfCopyable( void* userdata );
-};
-
-LLTaskScriptBridge::LLTaskScriptBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name) :
-	LLTaskInvFVBridge(panel, uuid, name)
-{
-}
-
-LLUIImagePtr LLTaskScriptBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
-}
-
-
-class LLTaskLSLBridge : public LLTaskScriptBridge
-{
-public:
-	LLTaskLSLBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name);
-
-	virtual void openItem();
-	virtual BOOL removeItem();
-	//virtual void buildContextMenu(LLMenuGL& menu);
-
-	//static void copyToInventory(void* userdata);
-};
-
-LLTaskLSLBridge::LLTaskLSLBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name) :
-	LLTaskScriptBridge(panel, uuid, name)
-{
-}
-
-void LLTaskLSLBridge::openItem()
-{
-	llinfos << "LLTaskLSLBridge::openItem() " << mUUID << llendl;
-	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-	if(!object || object->isInventoryPending())
-	{
-		return;
-	}
-	LLLiveLSLEditor* preview = LLFloaterReg::showTypedInstance<LLLiveLSLEditor>("preview_scriptedit", LLSD(mUUID), TAKE_FOCUS_YES);
-	if (preview && (object->permModify() || gAgent.isGodlike()))
-	{
-		preview->setObjectID(mPanel->getTaskUUID());
-	}
-}
-
-BOOL LLTaskLSLBridge::removeItem()
-{
-	LLFloaterReg::hideInstance("preview_scriptedit", LLSD(mUUID));
-	return LLTaskInvFVBridge::removeItem();
-}
-
-///----------------------------------------------------------------------------
-/// Class LLTaskObjectBridge
-///----------------------------------------------------------------------------
-
-class LLTaskObjectBridge : public LLTaskInvFVBridge
-{
-public:
-	LLTaskObjectBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name);
-
-	virtual LLUIImagePtr getIcon() const;
-};
-
-LLTaskObjectBridge::LLTaskObjectBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name) :
-	LLTaskInvFVBridge(panel, uuid, name)
-{
-}
-
-LLUIImagePtr LLTaskObjectBridge::getIcon() const
-{
-	BOOL item_is_multi = FALSE;
-	if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
-	{
-		item_is_multi = TRUE;
-	}
-
-	return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0, item_is_multi);
-}
-
-///----------------------------------------------------------------------------
-/// Class LLTaskNotecardBridge
-///----------------------------------------------------------------------------
-
-class LLTaskNotecardBridge : public LLTaskInvFVBridge
-{
-public:
-	LLTaskNotecardBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name);
-
-	virtual LLUIImagePtr getIcon() const;
-	virtual void openItem();
-	virtual BOOL removeItem();
-};
-
-LLTaskNotecardBridge::LLTaskNotecardBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name) :
-	LLTaskInvFVBridge(panel, uuid, name)
-{
-}
-
-LLUIImagePtr LLTaskNotecardBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE);
-}
-
-void LLTaskNotecardBridge::openItem()
-{
-	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-	if(!object || object->isInventoryPending())
-	{
-		return;
-	}
-	if(object->permModify() || gAgent.isGodlike())
-	{
-		LLPreviewNotecard* preview = LLFloaterReg::showTypedInstance<LLPreviewNotecard>("preview_notecard", LLSD(mUUID), TAKE_FOCUS_YES);
-		if (preview)
-		{
-			preview->setObjectID(mPanel->getTaskUUID());
-		}
-	}
-}
-
-BOOL LLTaskNotecardBridge::removeItem()
-{
-	LLFloaterReg::hideInstance("preview_notecard", LLSD(mUUID));
-	return LLTaskInvFVBridge::removeItem();
-}
-
-///----------------------------------------------------------------------------
-/// Class LLTaskGestureBridge
-///----------------------------------------------------------------------------
-
-class LLTaskGestureBridge : public LLTaskInvFVBridge
-{
-public:
-	LLTaskGestureBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name);
-
-	virtual LLUIImagePtr getIcon() const;
-	virtual void openItem();
-	virtual BOOL removeItem();
-};
-
-LLTaskGestureBridge::LLTaskGestureBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name) :
-	LLTaskInvFVBridge(panel, uuid, name)
-{
-}
-
-LLUIImagePtr LLTaskGestureBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE);
-}
-
-void LLTaskGestureBridge::openItem()
-{
-	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-	if(!object || object->isInventoryPending())
-	{
-		return;
-	}
-	LLPreviewGesture::show(mUUID, mPanel->getTaskUUID());
-}
-
-BOOL LLTaskGestureBridge::removeItem()
-{
-	// Don't need to deactivate gesture because gestures inside objects can never be active.
-	LLFloaterReg::hideInstance("preview_gesture", LLSD(mUUID));
-	return LLTaskInvFVBridge::removeItem();
-}
-
-///----------------------------------------------------------------------------
-/// Class LLTaskAnimationBridge
-///----------------------------------------------------------------------------
-
-class LLTaskAnimationBridge : public LLTaskInvFVBridge
-{
-public:
-	LLTaskAnimationBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name);
-
-	virtual LLUIImagePtr getIcon() const;
-	virtual void openItem();
-	virtual BOOL removeItem();
-};
-
-LLTaskAnimationBridge::LLTaskAnimationBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name) :
-	LLTaskInvFVBridge(panel, uuid, name)
-{
-}
-
-LLUIImagePtr LLTaskAnimationBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE);
-}
-
-void LLTaskAnimationBridge::openItem()
-{
-	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
-	if(!object || object->isInventoryPending())
-	{
-		return;
-	}
-
-	LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
-	if (preview && (object->permModify() || gAgent.isGodlike()))
-	{
-		preview->setObjectID(mPanel->getTaskUUID());
-	}
-}
-
-BOOL LLTaskAnimationBridge::removeItem()
-{
-	LLFloaterReg::hideInstance("preview_anim", LLSD(mUUID));
-	return LLTaskInvFVBridge::removeItem();
-}
-
-///----------------------------------------------------------------------------
-/// Class LLTaskWearableBridge
-///----------------------------------------------------------------------------
-
-class LLTaskWearableBridge : public LLTaskInvFVBridge
-{
-public:
-	LLTaskWearableBridge(
-		LLPanelObjectInventory* panel,
-		const LLUUID& uuid,
-		const std::string& name,
-		LLAssetType::EType asset_type,
-		U32 flags);
-
-	virtual LLUIImagePtr getIcon() const;
-
-protected:
-	LLAssetType::EType		mAssetType;
-};
-
-LLTaskWearableBridge::LLTaskWearableBridge(
-	LLPanelObjectInventory* panel,
-	const LLUUID& uuid,
-	const std::string& name,
-	LLAssetType::EType asset_type,
-	U32 flags) :
-	LLTaskInvFVBridge(panel, uuid, name, flags),
-	mAssetType( asset_type )
-{
-}
-
-LLUIImagePtr LLTaskWearableBridge::getIcon() const
-{
-	return get_item_icon(mAssetType, LLInventoryType::IT_WEARABLE, mFlags, FALSE );
-}
-
-
-///----------------------------------------------------------------------------
-/// LLTaskInvFVBridge impl
-//----------------------------------------------------------------------------
-
-LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory* panel,
-														 LLInventoryObject* object)
-{
-	LLTaskInvFVBridge* new_bridge = NULL;
-	LLAssetType::EType type = object->getType();
-	LLInventoryItem* item = NULL;
-	switch(type)
-	{
-	case LLAssetType::AT_TEXTURE:
-		item = (LLInventoryItem*)object;
-		new_bridge = new LLTaskTextureBridge(panel,
-											 object->getUUID(),
-											 object->getName(),
-											 item->getInventoryType());
-		break;
-	case LLAssetType::AT_SOUND:
-		new_bridge = new LLTaskSoundBridge(panel,
-										   object->getUUID(),
-										   object->getName());
-		break;
-	case LLAssetType::AT_LANDMARK:
-		new_bridge = new LLTaskLandmarkBridge(panel,
-											  object->getUUID(),
-											  object->getName());
-		break;
-	case LLAssetType::AT_CALLINGCARD:
-		new_bridge = new LLTaskCallingCardBridge(panel,
-												 object->getUUID(),
-												 object->getName());
-		break;
-	case LLAssetType::AT_SCRIPT:
-		// OLD SCRIPTS DEPRECATED - JC
-		llwarns << "Old script" << llendl;
-		//new_bridge = new LLTaskOldScriptBridge(panel,
-		//									   object->getUUID(),
-		//									   object->getName());
-		break;
-	case LLAssetType::AT_OBJECT:
-		new_bridge = new LLTaskObjectBridge(panel,
-											object->getUUID(),
-											object->getName());
-		break;
-	case LLAssetType::AT_NOTECARD:
-		new_bridge = new LLTaskNotecardBridge(panel,
-											  object->getUUID(),
-											  object->getName());
-		break;
-	case LLAssetType::AT_ANIMATION:
-		new_bridge = new LLTaskAnimationBridge(panel,
-											  object->getUUID(),
-											  object->getName());
-		break;
-	case LLAssetType::AT_GESTURE:
-		new_bridge = new LLTaskGestureBridge(panel,
-											  object->getUUID(),
-											  object->getName());
-		break;
-	case LLAssetType::AT_CLOTHING:
-	case LLAssetType::AT_BODYPART:
-		item = (LLInventoryItem*)object;
-		new_bridge = new LLTaskWearableBridge(panel,
-											  object->getUUID(),
-											  object->getName(),
-											  type,
-											  item->getFlags());
-		break;
-	case LLAssetType::AT_CATEGORY:
-	case LLAssetType::AT_FAVORITE:
-		new_bridge = new LLTaskCategoryBridge(panel,
-											  object->getUUID(),
-											  object->getName());
-		break;
-	case LLAssetType::AT_LSL_TEXT:
-		new_bridge = new LLTaskLSLBridge(panel,
-										 object->getUUID(),
-										 object->getName());
-		break;
-	
-		break;
-	default:
-		llinfos << "Unhandled inventory type (llassetstorage.h): "
-				<< (S32)type << llendl;
-		break;
-	}
-	return new_bridge;
-}
-
-
-///----------------------------------------------------------------------------
-/// Class LLPanelObjectInventory
-///----------------------------------------------------------------------------
-
-static LLDefaultChildRegistry::Register<LLPanelObjectInventory> r("panel_inventory_object");
-
-void do_nothing()
-{
-}
-
-// Default constructor
-LLPanelObjectInventory::LLPanelObjectInventory(const LLPanelObjectInventory::Params& p) :
-	LLPanel(p),
-	mScroller(NULL),
-	mFolders(NULL),
-	mHaveInventory(FALSE),
-	mIsInventoryEmpty(TRUE),
-	mInventoryNeedsUpdate(FALSE)
-{
-	// Setup context menu callbacks
-	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelObjectInventory::doToSelected, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
-	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
-	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&do_nothing));
-	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&do_nothing));
-	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&do_nothing));
-}
-
-// Destroys the object
-LLPanelObjectInventory::~LLPanelObjectInventory()
-{
-	if (!gIdleCallbacks.deleteFunction(idle, this))
-	{
-		llwarns << "LLPanelObjectInventory::~LLPanelObjectInventory() failed to delete callback" << llendl;
-	}
-}
-
-BOOL LLPanelObjectInventory::postBuild()
-{
-	// clear contents and initialize menus, sets up mFolders
-	reset();
-
-	// Register an idle update callback
-	gIdleCallbacks.addFunction(idle, this);
-
-	return TRUE;
-}
-
-void LLPanelObjectInventory::doToSelected(const LLSD& userdata)
-{
-	mFolders->doToSelected(&gInventory, userdata);
-}
-
-void LLPanelObjectInventory::clearContents()
-{
-	mHaveInventory = FALSE;
-	mIsInventoryEmpty = TRUE;
-	if (LLToolDragAndDrop::getInstance() && LLToolDragAndDrop::getInstance()->getSource() == LLToolDragAndDrop::SOURCE_WORLD)
-	{
-		LLToolDragAndDrop::getInstance()->endDrag();
-	}
-
-	if( mScroller )
-	{
-		// removes mFolders
-		removeChild( mScroller ); //*TODO: Really shouldn't do this during draw()/refresh()
-		mScroller->die();
-		mScroller = NULL;
-		mFolders = NULL;
-	}
-}
-
-
-void LLPanelObjectInventory::reset()
-{
-	clearContents();
-
-	setBorderVisible(FALSE);
-	
-	mCommitCallbackRegistrar.pushScope(); // push local callbacks
-	
-	LLRect dummy_rect(0, 1, 1, 0);
-	LLFolderView::Params p;
-	p.name = "task inventory";
-	p.task_id = getTaskUUID();
-	p.parent_panel = this;
-	mFolders = LLUICtrlFactory::create<LLFolderView>(p);
-	// this ensures that we never say "searching..." or "no items found"
-	mFolders->getFilter()->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
-	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
-
-	LLRect scroller_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
-	LLScrollContainer::Params scroll_p;
-	scroll_p.name("task inventory scroller");
-	scroll_p.rect(scroller_rect);
-	scroll_p.follows.flags(FOLLOWS_ALL);
-	mScroller = LLUICtrlFactory::create<LLScrollContainer>(scroll_p);
-	addChild(mScroller);
-	mScroller->addChild(mFolders);
-	
-	mFolders->setScrollContainer( mScroller );
-	
-	mCommitCallbackRegistrar.popScope();
-}
-
-void LLPanelObjectInventory::inventoryChanged(LLViewerObject* object,
-										InventoryObjectList* inventory,
-										S32 serial_num,
-										void* data)
-{
-	if(!object) return;
-
-	//llinfos << "invetnory arrived: \n"
-	//		<< " panel UUID: " << panel->mTaskUUID << "\n"
-	//		<< " task  UUID: " << object->mID << llendl;
-	if(mTaskUUID == object->mID)
-	{
-		mInventoryNeedsUpdate = TRUE;
-	}
-
-	// refresh any properties floaters that are hanging around.
-	if(inventory)
-	{
-		for (InventoryObjectList::const_iterator iter = inventory->begin();
-			 iter != inventory->end(); )
-		{
-			LLInventoryObject* item = *iter++;
-			LLFloaterProperties* floater = LLFloaterReg::findTypedInstance<LLFloaterProperties>("properites", item->getUUID());
-			if(floater)
-			{
-				floater->refresh();
-			}
-		}
-	}
-}
-
-void LLPanelObjectInventory::updateInventory()
-{
-	//llinfos << "inventory arrived: \n"
-	//		<< " panel UUID: " << panel->mTaskUUID << "\n"
-	//		<< " task  UUID: " << object->mID << llendl;
-	// We're still interested in this task's inventory.
-	std::set<LLUUID> selected_items;
-	BOOL inventory_has_focus = FALSE;
-	if (mHaveInventory && mFolders->getNumSelectedDescendants())
-	{
-		mFolders->getSelectionList(selected_items);
-		inventory_has_focus = gFocusMgr.childHasKeyboardFocus(mFolders);
-	}
-
-	reset();
-
-	LLViewerObject* objectp = gObjectList.findObject(mTaskUUID);
-	if (objectp)
-	{
-		LLInventoryObject* inventory_root = objectp->getInventoryRoot();
-		InventoryObjectList contents;
-		objectp->getInventoryContents(contents);
-		if (inventory_root)
-		{
-			createFolderViews(inventory_root, contents);
-			mHaveInventory = TRUE;
-			mIsInventoryEmpty = FALSE;
-			mFolders->setEnabled(TRUE);
-		}
-		else
-		{
-			// TODO: create an empty inventory
-			mIsInventoryEmpty = TRUE;
-			mHaveInventory = TRUE;
-		}
-	}
-	else
-	{
-		// TODO: create an empty inventory
-		mIsInventoryEmpty = TRUE;
-		mHaveInventory = TRUE;
-	}
-
-	// restore previous selection
-	std::set<LLUUID>::iterator selection_it;
-	BOOL first_item = TRUE;
-	for (selection_it = selected_items.begin(); selection_it != selected_items.end(); ++selection_it)
-	{
-		LLFolderViewItem* selected_item = mFolders->getItemByID(*selection_it);
-		if (selected_item)
-		{
-			//HACK: "set" first item then "change" each other one to get keyboard focus right
-			if (first_item)
-			{
-				mFolders->setSelection(selected_item, TRUE, inventory_has_focus);
-				first_item = FALSE;
-			}
-			else
-			{
-				mFolders->changeSelection(selected_item, TRUE);
-			}
-		}
-	}
-
-	mFolders->requestArrange();
-	mInventoryNeedsUpdate = FALSE;
-}
-
-// *FIX: This is currently a very expensive operation, because we have
-// to iterate through the inventory one time for each category. This
-// leads to an N^2 based on the category count. This could be greatly
-// speeded with an efficient multimap implementation, but we don't
-// have that in our current arsenal.
-void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents)
-{
-	if (!inventory_root)
-	{
-		return;
-	}
-	// Create a visible root category.
-	LLTaskInvFVBridge* bridge = NULL;
-	bridge = LLTaskInvFVBridge::createObjectBridge(this, inventory_root);
-	if(bridge)
-	{
-		LLFolderViewFolder* new_folder = NULL;
-		LLFolderViewFolder::Params p;
-		p.name = inventory_root->getName();
-		p.icon = LLUI::getUIImage("Inv_FolderClosed");
-		p.icon_open = LLUI::getUIImage("Inv_FolderOpen");
-		p.root = mFolders;
-		p.listener = bridge;
-		new_folder = LLUICtrlFactory::create<LLFolderViewFolder>(p);
-		new_folder->addToFolder(mFolders, mFolders);
-		new_folder->toggleOpen();
-
-		createViewsForCategory(&contents, inventory_root, new_folder);
-	}
-}
-
-typedef std::pair<LLInventoryObject*, LLFolderViewFolder*> obj_folder_pair;
-
-void LLPanelObjectInventory::createViewsForCategory(InventoryObjectList* inventory, 
-											  LLInventoryObject* parent,
-											  LLFolderViewFolder* folder)
-{
-	// Find all in the first pass
-	LLDynamicArray<obj_folder_pair*> child_categories;
-	LLTaskInvFVBridge* bridge;
-	LLFolderViewItem* view;
-
-	InventoryObjectList::iterator it = inventory->begin();
-	InventoryObjectList::iterator end = inventory->end();
-	for( ; it != end; ++it)
-	{
-		LLInventoryObject* obj = *it;
-
-		if(parent->getUUID() == obj->getParentUUID())
-		{
-			bridge = LLTaskInvFVBridge::createObjectBridge(this, obj);
-			if(!bridge)
-			{
-				continue;
-			}
-			if(LLAssetType::AT_CATEGORY == obj->getType())
-			{
-				LLFolderViewFolder::Params p;
-				p.name = obj->getName();
-				p.icon = LLUI::getUIImage("Inv_FolderClosed");
-				p.icon_open = LLUI::getUIImage("Inv_FolderOpen");
-				p.root = mFolders;
-				p.listener = bridge;
-				view = LLUICtrlFactory::create<LLFolderViewFolder>(p);
-				child_categories.put(new obj_folder_pair(obj,
-														 (LLFolderViewFolder*)view));
-			}
-			else
-			{
-				LLFolderViewItem::Params params;
-				params.name(obj->getName());
-				params.icon(bridge->getIcon());
-				params.creation_date(bridge->getCreationDate());
-				params.root(mFolders);
-				params.listener(bridge);
-				params.rect(LLRect());
-				view = LLUICtrlFactory::create<LLFolderViewItem> (params);
-			}
-			view->addToFolder(folder, mFolders);
-		}
-	}
-
-	// now, for each category, do the second pass
-	for(S32 i = 0; i < child_categories.count(); i++)
-	{
-		createViewsForCategory(inventory, child_categories[i]->first,
-							   child_categories[i]->second );
-		delete child_categories[i];
-	}
-}
-
-void LLPanelObjectInventory::refresh()
-{
-	//llinfos << "LLPanelObjectInventory::refresh()" << llendl;
-	BOOL has_inventory = FALSE;
-	const BOOL non_root_ok = TRUE;
-	LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(NULL, non_root_ok);
-	if(node)
-	{
-		LLViewerObject* object = node->getObject();
-		if(object && ((LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() == 1)
-					  || (LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1)))
-		{
-			// determine if we need to make a request. Start with a
-			// default based on if we have inventory at all.
-			BOOL make_request = !mHaveInventory;
-
-			// If the task id is different than what we've stored,
-			// then make the request.
-			if(mTaskUUID != object->mID)
-			{
-				mTaskUUID = object->mID;
-				make_request = TRUE;
-
-				// This is a new object so pre-emptively clear the contents
-				// Otherwise we show the old stuff until the update comes in
-				clearContents();
-
-				// Register for updates from this object,
-				registerVOInventoryListener(object,NULL);
-			}
-
-			// Based on the node information, we may need to dirty the
-			// object inventory and get it again.
-			if(node->mValid)
-			{
-				if(node->mInventorySerial != object->getInventorySerial() || object->isInventoryDirty())
-				{
-					make_request = TRUE;
-				}
-			}
-
-			// do the request if necessary.
-			if(make_request)
-			{
-				requestVOInventory();
-			}
-			has_inventory = TRUE;
-		}
-	}
-	if(!has_inventory)
-	{
-		mTaskUUID = LLUUID::null;
-		removeVOInventoryListener();
-		clearContents();
-	}
-	//llinfos << "LLPanelObjectInventory::refresh() " << mTaskUUID << llendl;
-}
-
-void LLPanelObjectInventory::removeSelectedItem()
-{
-	if(mFolders)
-	{
-		mFolders->removeSelectedItems();
-	}
-}
-
-void LLPanelObjectInventory::startRenamingSelectedItem()
-{
-	if(mFolders)
-	{
-		mFolders->startRenamingSelectedItem();
-	}
-}
-
-void LLPanelObjectInventory::draw()
-{
-	LLPanel::draw();
-
-	if(mIsInventoryEmpty)
-	{
-		if((LLUUID::null != mTaskUUID) && (!mHaveInventory))
-		{
-			LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("LoadingContents"), 0,
-													 (S32)(getRect().getWidth() * 0.5f),
-													 10,
-													 LLColor4( 1, 1, 1, 1 ),
-													 LLFontGL::HCENTER,
-													 LLFontGL::BOTTOM);
-		}
-		else if(mHaveInventory)
-		{
-			LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("NoContents"), 0,
-													 (S32)(getRect().getWidth() * 0.5f),
-													 10,
-													 LLColor4( 1, 1, 1, 1 ),
-													 LLFontGL::HCENTER,
-													 LLFontGL::BOTTOM);
-		}
-	}
-}
-
-void LLPanelObjectInventory::deleteAllChildren()
-{
-	mScroller = NULL;
-	mFolders = NULL;
-	LLView::deleteAllChildren();
-}
-
-BOOL LLPanelObjectInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg)
-{
-	if (mFolders && mHaveInventory)
-	{
-		LLFolderViewItem* folderp = mFolders->getNextFromChild(NULL);
-		if (!folderp)
-		{
-			return FALSE;
-		}
-		// Try to pass on unmodified mouse coordinates
-		S32 local_x = x - mFolders->getRect().mLeft;
-		S32 local_y = y - mFolders->getRect().mBottom;
-
-		if (mFolders->pointInView(local_x, local_y))
-		{
-			return mFolders->handleDragAndDrop(local_x, local_y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
-		}
-		else
-		{
-			//force mouse coordinates to be inside folder rectangle
-			return mFolders->handleDragAndDrop(5, 1, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
-		}
-	}
-	else
-	{
-		return FALSE;
-	}
-}
-
-//static
-void LLPanelObjectInventory::idle(void* user_data)
-{
-	LLPanelObjectInventory* self = (LLPanelObjectInventory*)user_data;
-
-
-	if (self->mInventoryNeedsUpdate)
-	{
-		self->updateInventory();
-	}
-}
+/**
+ * @file llsidepanelinventory.cpp
+ * @brief LLPanelObjectInventory class implementation
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+//*****************************************************************************
+//
+// Implementation of the panel inventory - used to view and control a
+// task's inventory.
+//
+//*****************************************************************************
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelobjectinventory.h"
+
+#include "roles_constants.h"
+
+#include "llagent.h"
+#include "llcallbacklist.h"
+#include "llfloaterbuycurrency.h"
+#include "llfloaterreg.h"
+#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llpreviewanim.h"
+#include "llpreviewgesture.h"
+#include "llpreviewnotecard.h"
+#include "llpreviewscript.h"
+#include "llpreviewsound.h"
+#include "llpreviewtexture.h"
+#include "llscrollcontainer.h"
+#include "llselectmgr.h"
+#include "llsidetray.h"
+#include "llstatusbar.h"
+#include "lltrans.h"
+#include "llviewerregion.h"
+#include "llviewerobjectlist.h"
+#include "llviewermessage.h"
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskInvFVBridge
+///----------------------------------------------------------------------------
+
+class LLTaskInvFVBridge : public LLFolderViewEventListener
+{
+protected:
+	LLUUID mUUID;
+	std::string mName;
+	mutable std::string mDisplayName;
+	LLPanelObjectInventory* mPanel;
+	U32 mFlags;
+
+	LLInventoryItem* findItem() const;
+
+public:
+	LLTaskInvFVBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name,
+		U32 flags=0);
+	virtual ~LLTaskInvFVBridge( void ) {}
+
+	virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; }
+	virtual std::string getLabelSuffix() const { return LLStringUtil::null; }
+
+	static LLTaskInvFVBridge* createObjectBridge(LLPanelObjectInventory* panel,
+												 LLInventoryObject* object);
+	void showProperties();
+	void buyItem();
+	S32 getPrice();
+	static bool commitBuyItem(const LLSD& notification, const LLSD& response);
+
+	// LLFolderViewEventListener functionality
+	virtual const std::string& getName() const;
+	virtual const std::string& getDisplayName() const;
+	virtual PermissionMask getPermissionMask() const { return PERM_NONE; }
+	/*virtual*/ LLAssetType::EType getPreferredType() const { return LLAssetType::AT_NONE; }
+	virtual const LLUUID& getUUID() const { return mUUID; }
+	virtual time_t getCreationDate() const;
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual void closeItem() {}
+	virtual void previewItem();
+	virtual void selectItem() {}
+	virtual BOOL isItemRenameable() const;
+	virtual BOOL renameItem(const std::string& new_name);
+	virtual BOOL isItemMovable() const;
+	virtual BOOL isItemRemovable();
+	virtual BOOL removeItem();
+	virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch);
+	virtual void move(LLFolderViewEventListener* parent_listener);
+	virtual BOOL isItemCopyable() const;
+	virtual BOOL copyToClipboard() const;
+	virtual void cutToClipboard();
+	virtual BOOL isClipboardPasteable() const;
+	virtual void pasteFromClipboard();
+	virtual void pasteLinkFromClipboard();
+	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+	virtual BOOL isUpToDate() const { return TRUE; }
+	virtual BOOL hasChildren() const { return FALSE; }
+	virtual LLInventoryType::EType getInventoryType() const { return LLInventoryType::IT_NONE; }
+	// LLDragAndDropBridge functionality
+	virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;
+	virtual BOOL dragOrDrop(MASK mask, BOOL drop,
+							EDragAndDropType cargo_type,
+							void* cargo_data);
+};
+
+LLTaskInvFVBridge::LLTaskInvFVBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name,
+	U32 flags):
+	mUUID(uuid),
+	mName(name),
+	mPanel(panel),
+	mFlags(flags)
+{
+
+}
+
+LLInventoryItem* LLTaskInvFVBridge::findItem() const
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object)
+	{
+		return (LLInventoryItem*)(object->getInventoryObject(mUUID));
+	}
+	return NULL;
+}
+
+void LLTaskInvFVBridge::showProperties()
+{
+	LLSD key;
+	key["object"] = mPanel->getTaskUUID();
+	key["id"] = mUUID;
+	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
+	
+	/*
+	LLFloaterProperties* floater = LLFloaterReg::showTypedInstance<LLFloaterProperties>("properties", mUUID);
+	if (floater)
+	{
+		floater->setObjectID(mPanel->getTaskUUID());
+	}
+	*/
+}
+
+struct LLBuyInvItemData
+{
+	LLUUID mTaskID;
+	LLUUID mItemID;
+	LLAssetType::EType mType;
+
+	LLBuyInvItemData(const LLUUID& task,
+					 const LLUUID& item,
+					 LLAssetType::EType type) :
+		mTaskID(task), mItemID(item), mType(type)
+	{}
+};
+
+void LLTaskInvFVBridge::buyItem()
+{
+	llinfos << "LLTaskInvFVBridge::buyItem()" << llendl;
+	LLInventoryItem* item = findItem();
+	if(!item || !item->getSaleInfo().isForSale()) return;
+	LLBuyInvItemData* inv = new LLBuyInvItemData(mPanel->getTaskUUID(),
+												 mUUID,
+												 item->getType());
+
+	const LLSaleInfo& sale_info = item->getSaleInfo();
+	const LLPermissions& perm = item->getPermissions();
+	const std::string owner_name; // no owner name currently... FIXME?
+
+	LLViewerObject* obj;
+	if( ( obj = gObjectList.findObject( mPanel->getTaskUUID() ) ) && obj->isAttachment() )
+	{
+		LLNotifications::instance().add("Cannot_Purchase_an_Attachment");
+		llinfos << "Attempt to purchase an attachment" << llendl;
+		delete inv;
+	}
+	else
+	{
+        LLSD args;
+        args["PRICE"] = llformat("%d",sale_info.getSalePrice());
+        args["OWNER"] = owner_name;
+        if (sale_info.getSaleType() != LLSaleInfo::FS_CONTENTS)
+        {
+        	U32 next_owner_mask = perm.getMaskNextOwner();
+        	args["MODIFYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_MODIFY) ? "PermYes" : "PermNo");
+        	args["COPYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_COPY) ? "PermYes" : "PermNo");
+        	args["RESELLPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_TRANSFER) ? "PermYes" : "PermNo");
+        }
+
+		std::string alertdesc;
+       	switch(sale_info.getSaleType())
+       	{
+       	  case LLSaleInfo::FS_ORIGINAL:
+       		alertdesc = owner_name.empty() ? "BuyOriginalNoOwner" : "BuyOriginal";
+       		break;
+       	  case LLSaleInfo::FS_CONTENTS:
+       		alertdesc = owner_name.empty() ? "BuyContentsNoOwner" : "BuyContents";
+       		break;
+		  case LLSaleInfo::FS_COPY:
+       	  default:
+       		alertdesc = owner_name.empty() ? "BuyCopyNoOwner" : "BuyCopy";
+       		break;
+       	}
+
+		LLSD payload;
+		payload["task_id"] = inv->mTaskID;
+		payload["item_id"] = inv->mItemID;
+		payload["type"] = inv->mType;
+		LLNotifications::instance().add(alertdesc, args, payload, LLTaskInvFVBridge::commitBuyItem);
+	}
+}
+
+S32 LLTaskInvFVBridge::getPrice()
+{
+	LLInventoryItem* item = findItem();
+	if(item)
+	{
+		return item->getSaleInfo().getSalePrice();
+	}
+	else
+	{
+		return -1;
+	}
+}
+
+// static
+bool LLTaskInvFVBridge::commitBuyItem(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	if(0 == option)
+	{
+		LLViewerObject* object = gObjectList.findObject(notification["payload"]["task_id"].asUUID());
+		if(!object || !object->getRegion()) return false;
+
+
+		LLMessageSystem* msg = gMessageSystem;
+		msg->newMessageFast(_PREHASH_BuyObjectInventory);
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		msg->nextBlockFast(_PREHASH_Data);
+		msg->addUUIDFast(_PREHASH_ObjectID, notification["payload"]["task_id"].asUUID());
+		msg->addUUIDFast(_PREHASH_ItemID, notification["payload"]["item_id"].asUUID());
+		msg->addUUIDFast(_PREHASH_FolderID,
+			gInventory.findCategoryUUIDForType((LLAssetType::EType)notification["payload"]["type"].asInteger()));
+		msg->sendReliable(object->getRegion()->getHost());
+	}
+	return false;
+}
+
+const std::string& LLTaskInvFVBridge::getName() const
+{
+	return mName;
+}
+
+const std::string& LLTaskInvFVBridge::getDisplayName() const
+{
+	LLInventoryItem* item = findItem();
+	if(item)
+	{
+		mDisplayName.assign(item->getName());
+
+		const LLPermissions& perm(item->getPermissions());
+		BOOL copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
+		BOOL mod  = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE);
+		BOOL xfer = gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE);
+
+		if(!copy)
+		{
+			mDisplayName.append(" (no copy)");
+		}
+		if(!mod)
+		{
+			mDisplayName.append(" (no modify)");
+		}
+		if(!xfer)
+		{
+			mDisplayName.append(" (no transfer)");
+		}
+	}
+
+	return mDisplayName;
+}
+
+// BUG: No creation dates for task inventory
+time_t LLTaskInvFVBridge::getCreationDate() const
+{
+	return 0;
+}
+
+LLUIImagePtr LLTaskInvFVBridge::getIcon() const
+{
+	BOOL item_is_multi = FALSE;
+	if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+	{
+		item_is_multi = TRUE;
+	}
+
+	return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0, item_is_multi );
+}
+
+void LLTaskInvFVBridge::openItem()
+{
+	// no-op.
+	lldebugs << "LLTaskInvFVBridge::openItem()" << llendl;
+}
+
+void LLTaskInvFVBridge::previewItem()
+{
+	openItem();
+}
+
+BOOL LLTaskInvFVBridge::isItemRenameable() const
+{
+	if(gAgent.isGodlike()) return TRUE;
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object)
+	{
+		LLInventoryItem* item;
+		item = (LLInventoryItem*)(object->getInventoryObject(mUUID));
+		if(item && gAgent.allowOperation(PERM_MODIFY, item->getPermissions(),
+										 GP_OBJECT_MANIPULATE, GOD_LIKE))
+		{
+			return TRUE;
+		}
+	}
+	return FALSE;
+}
+
+BOOL LLTaskInvFVBridge::renameItem(const std::string& new_name)
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object)
+	{
+		LLViewerInventoryItem* item = NULL;
+		item = (LLViewerInventoryItem*)object->getInventoryObject(mUUID);
+		if(item && (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(),
+										GP_OBJECT_MANIPULATE, GOD_LIKE)))
+		{
+			LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+			new_item->rename(new_name);
+			object->updateInventory(
+				new_item,
+				TASK_INVENTORY_ITEM_KEY,
+				false);
+		}
+	}
+	return TRUE;
+}
+
+BOOL LLTaskInvFVBridge::isItemMovable() const
+{
+	//LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	//if(object && (object->permModify() || gAgent.isGodlike()))
+	//{
+	//	return TRUE;
+	//}
+	//return FALSE;
+	return TRUE;
+}
+
+BOOL LLTaskInvFVBridge::isItemRemovable()
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object
+	   && (object->permModify() || object->permYouOwner()))
+	{
+		return TRUE;
+	}
+	return FALSE;
+}
+
+bool remove_task_inventory_callback(const LLSD& notification, const LLSD& response, LLPanelObjectInventory* panel)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	LLViewerObject* object = gObjectList.findObject(notification["payload"]["task_id"].asUUID());
+	if(option == 0 && object)
+	{
+		// yes
+		LLSD::array_const_iterator list_end = notification["payload"]["inventory_ids"].endArray();
+		for (LLSD::array_const_iterator list_it = notification["payload"]["inventory_ids"].beginArray();
+			list_it != list_end; 
+			++list_it)
+		{
+			object->removeInventory(list_it->asUUID());
+		}
+
+		// refresh the UI.
+		panel->refresh();
+	}
+	return false;
+}
+
+// helper for remove
+// ! REFACTOR ! two_uuids_list_t is also defined in llinevntorybridge.h, but differently.
+typedef std::pair<LLUUID, std::list<LLUUID> > panel_two_uuids_list_t;
+typedef std::pair<LLPanelObjectInventory*, panel_two_uuids_list_t> remove_data_t;
+BOOL LLTaskInvFVBridge::removeItem()
+{
+	if(isItemRemovable() && mPanel)
+	{
+		LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+		if(object)
+		{
+			if(object->permModify())
+			{
+				// just do it.
+				object->removeInventory(mUUID);
+				return TRUE;
+			}
+			else
+			{
+				remove_data_t* data = new remove_data_t;
+				data->first = mPanel;
+				data->second.first = mPanel->getTaskUUID();
+				data->second.second.push_back(mUUID);
+				LLSD payload;
+				payload["task_id"] = mPanel->getTaskUUID();
+				payload["inventory_ids"].append(mUUID);
+				LLNotifications::instance().add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
+				return FALSE;
+			}
+		}
+	}
+	return FALSE;
+}
+
+void LLTaskInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch)
+{
+	if (!mPanel)
+	{
+		return;
+	}
+
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if (!object)
+	{
+		return;
+	}
+
+	if (!object->permModify())
+	{
+		LLSD payload;
+		payload["task_id"] = mPanel->getTaskUUID();
+		for (S32 i = 0; i < (S32)batch.size(); i++)
+		{
+			LLTaskInvFVBridge* itemp = (LLTaskInvFVBridge*)batch[i];
+			payload["inventory_ids"].append(itemp->getUUID());
+		}
+		LLNotifications::instance().add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
+		
+	}
+	else
+	{
+		for (S32 i = 0; i < (S32)batch.size(); i++)
+		{
+			LLTaskInvFVBridge* itemp = (LLTaskInvFVBridge*)batch[i];
+
+			if(itemp->isItemRemovable())
+			{
+				// just do it.
+				object->removeInventory(itemp->getUUID());
+			}
+		}
+	}
+}
+
+void LLTaskInvFVBridge::move(LLFolderViewEventListener* parent_listener)
+{
+}
+
+BOOL LLTaskInvFVBridge::isItemCopyable() const
+{
+	LLInventoryItem* item = findItem();
+	if(!item) return FALSE;
+	return gAgent.allowOperation(PERM_COPY, item->getPermissions(),
+								GP_OBJECT_MANIPULATE);
+}
+
+BOOL LLTaskInvFVBridge::copyToClipboard() const
+{
+	return FALSE;
+}
+
+void LLTaskInvFVBridge::cutToClipboard()
+{
+}
+
+BOOL LLTaskInvFVBridge::isClipboardPasteable() const
+{
+	return FALSE;
+}
+
+void LLTaskInvFVBridge::pasteFromClipboard()
+{
+}
+
+void LLTaskInvFVBridge::pasteLinkFromClipboard()
+{
+}
+
+BOOL LLTaskInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
+{
+	//llinfos << "LLTaskInvFVBridge::startDrag()" << llendl;
+	if(mPanel)
+	{
+		LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+		if(object)
+		{
+			LLInventoryItem* inv = NULL;
+			if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID)))
+			{
+				const LLPermissions& perm = inv->getPermissions();
+				bool can_copy = gAgent.allowOperation(PERM_COPY, perm,
+														GP_OBJECT_MANIPULATE);
+				if (object->isAttachment() && !can_copy)
+				{
+                    //RN: no copy contents of attachments cannot be dragged out
+                    // due to a race condition and possible exploit where
+                    // attached objects do not update their inventory items
+                    // when their contents are manipulated
+                    return FALSE;
+				}
+				if((can_copy && perm.allowTransferTo(gAgent.getID()))
+				   || object->permYouOwner())
+//				   || gAgent.isGodlike())
+
+				{
+					*type = LLAssetType::lookupDragAndDropType(inv->getType());
+
+					*id = inv->getUUID();
+					return TRUE;
+				}
+			}
+		}
+	}
+	return FALSE;
+}
+
+BOOL LLTaskInvFVBridge::dragOrDrop(MASK mask, BOOL drop,
+								   EDragAndDropType cargo_type,
+								   void* cargo_data)
+{
+	//llinfos << "LLTaskInvFVBridge::dragOrDrop()" << llendl;
+	return FALSE;
+}
+
+// virtual
+void LLTaskInvFVBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if (action == "task_buy")
+	{
+		// Check the price of the item.
+		S32 price = getPrice();
+		if (-1 == price)
+		{
+			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
+		}
+		else
+		{
+			if (price > 0 && price > gStatusBar->getBalance())
+			{
+				LLFloaterBuyCurrency::buyCurrency("This costs", price);
+			}
+			else
+			{
+				buyItem();
+			}
+		}
+	}
+	else if (action == "task_open")
+	{
+		openItem();
+	}
+	else if (action == "task_properties")
+	{
+		showProperties();
+	}
+}
+
+void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	LLInventoryItem* item = findItem();
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	
+	if (!item)
+	{
+		hide_context_entries(menu, items, disabled_items);
+		return;
+	}
+
+	if(gAgent.allowOperation(PERM_OWNER, item->getPermissions(),
+							 GP_OBJECT_MANIPULATE)
+	   && item->getSaleInfo().isForSale())
+	{
+		items.push_back(std::string("Task Buy"));
+
+		std::string label= LLTrans::getString("Buy");
+		// Check the price of the item.
+		S32 price = getPrice();
+		if (-1 == price)
+		{
+			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
+		}
+		else
+		{
+			std::ostringstream info;
+			info << LLTrans::getString("BuyforL$") << price;
+			label.assign(info.str());
+		}
+
+		const LLView::child_list_t *list = menu.getChildList();
+		LLView::child_list_t::const_iterator itor;
+		for (itor = list->begin(); itor != list->end(); ++itor)
+		{
+			std::string name = (*itor)->getName();
+			LLMenuItemCallGL* menu_itemp = dynamic_cast<LLMenuItemCallGL*>(*itor);
+			if (name == "Task Buy" && menu_itemp)
+			{
+				menu_itemp->setLabel(label);
+			}
+		}
+	}
+	else
+	{
+		items.push_back(std::string("Task Open"));
+		if (!isItemCopyable())
+		{
+			disabled_items.push_back(std::string("Task Open"));
+		}
+	}
+	items.push_back(std::string("Task Properties"));
+	if(isItemRenameable())
+	{
+		items.push_back(std::string("Task Rename"));
+	}
+	if(isItemRemovable())
+	{
+		items.push_back(std::string("Task Remove"));
+	}
+
+	hide_context_entries(menu, items, disabled_items);
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskFolderBridge
+///----------------------------------------------------------------------------
+
+class LLTaskCategoryBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskCategoryBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual const std::string& getDisplayName() const { return getName(); }
+	virtual BOOL isItemRenameable() const;
+	virtual BOOL renameItem(const std::string& new_name);
+	virtual BOOL isItemRemovable();
+	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+	virtual BOOL hasChildren() const;
+	virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;
+	virtual BOOL dragOrDrop(MASK mask, BOOL drop,
+							EDragAndDropType cargo_type,
+							void* cargo_data);
+};
+
+LLTaskCategoryBridge::LLTaskCategoryBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskCategoryBridge::getIcon() const
+{
+	return LLUI::getUIImage("Inv_FolderClosed");
+}
+
+BOOL LLTaskCategoryBridge::isItemRenameable() const
+{
+	return FALSE;
+}
+
+BOOL LLTaskCategoryBridge::renameItem(const std::string& new_name)
+{
+	return FALSE;
+}
+
+BOOL LLTaskCategoryBridge::isItemRemovable()
+{
+	return FALSE;
+}
+
+void LLTaskCategoryBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	items.push_back(std::string("Task Open"));
+	hide_context_entries(menu, items, disabled_items);
+}
+
+BOOL LLTaskCategoryBridge::hasChildren() const
+{
+	// return TRUE if we have or do know know if we have children.
+	// *FIX: For now, return FALSE - we will know for sure soon enough.
+	return FALSE;
+}
+
+BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
+{
+	//llinfos << "LLTaskInvFVBridge::startDrag()" << llendl;
+	if(mPanel)
+	{
+		LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+		if(object)
+		{
+			LLInventoryItem* inv = NULL;
+			if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID)))
+			{
+				const LLPermissions& perm = inv->getPermissions();
+				bool can_copy = gAgent.allowOperation(PERM_COPY, perm,
+														GP_OBJECT_MANIPULATE);
+				if((can_copy && perm.allowTransferTo(gAgent.getID()))
+				   || object->permYouOwner())
+//				   || gAgent.isGodlike())
+
+				{
+					*type = LLAssetType::lookupDragAndDropType(inv->getType());
+
+					*id = inv->getUUID();
+					return TRUE;
+				}
+			}
+		}
+	}
+	return FALSE;
+}
+
+BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop,
+									  EDragAndDropType cargo_type,
+									  void* cargo_data)
+{
+	//llinfos << "LLTaskCategoryBridge::dragOrDrop()" << llendl;
+	BOOL accept = FALSE;
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object)
+	{
+		switch(cargo_type)
+		{
+		case DAD_CATEGORY:
+			accept = LLToolDragAndDrop::getInstance()->dadUpdateInventoryCategory(object,drop);
+			break;
+		case DAD_TEXTURE:
+		case DAD_SOUND:
+		case DAD_LANDMARK:
+		case DAD_OBJECT:
+		case DAD_NOTECARD:
+		case DAD_CLOTHING:
+		case DAD_BODYPART:
+		case DAD_ANIMATION:
+		case DAD_GESTURE:
+		case DAD_CALLINGCARD:
+			accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data);
+			if(accept && drop)
+			{
+				LLToolDragAndDrop::dropInventory(object,
+												 (LLViewerInventoryItem*)cargo_data,
+												 LLToolDragAndDrop::getInstance()->getSource(),
+												 LLToolDragAndDrop::getInstance()->getSourceID());
+			}
+			break;
+		case DAD_SCRIPT:
+			// *HACK: In order to resolve SL-22177, we need to block
+			// drags from notecards and objects onto other
+			// objects. uncomment the simpler version when we have
+			// that right.
+			//accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data);
+			if(LLToolDragAndDrop::isInventoryDropAcceptable(
+				   object, (LLViewerInventoryItem*)cargo_data)
+			   && (LLToolDragAndDrop::SOURCE_WORLD != LLToolDragAndDrop::getInstance()->getSource())
+			   && (LLToolDragAndDrop::SOURCE_NOTECARD != LLToolDragAndDrop::getInstance()->getSource()))
+			{
+				accept = TRUE;
+			}
+			if(accept && drop)
+			{
+				LLViewerInventoryItem* item = (LLViewerInventoryItem*)cargo_data;
+				// rez in the script active by default, rez in
+				// inactive if the control key is being held down.
+				BOOL active = ((mask & MASK_CONTROL) == 0);
+				LLToolDragAndDrop::dropScript(object, item, active,
+											  LLToolDragAndDrop::getInstance()->getSource(),
+											  LLToolDragAndDrop::getInstance()->getSourceID());
+			}
+			break;
+		default:
+			break;
+		}
+	}
+	return accept;
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskTextureBridge
+///----------------------------------------------------------------------------
+
+class LLTaskTextureBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskTextureBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name,
+		LLInventoryType::EType it);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+protected:
+	LLInventoryType::EType mInventoryType;
+};
+
+LLTaskTextureBridge::LLTaskTextureBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name,
+	LLInventoryType::EType it) :
+	LLTaskInvFVBridge(panel, uuid, name),
+	mInventoryType(it)
+{
+}
+
+LLUIImagePtr LLTaskTextureBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_TEXTURE, mInventoryType, 0, FALSE);
+}
+
+void LLTaskTextureBridge::openItem()
+{
+	llinfos << "LLTaskTextureBridge::openItem()" << llendl;
+	LLPreviewTexture* preview = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
+	if(preview)
+	{
+		preview->setObjectID(mPanel->getTaskUUID());
+	}
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskSoundBridge
+///----------------------------------------------------------------------------
+
+class LLTaskSoundBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskSoundBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+	static void openSoundPreview(void* data);
+};
+
+LLTaskSoundBridge::LLTaskSoundBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskSoundBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE);
+}
+
+void LLTaskSoundBridge::openItem()
+{
+	openSoundPreview((void*)this);
+}
+
+void LLTaskSoundBridge::openSoundPreview(void* data)
+{
+	LLTaskSoundBridge* self = (LLTaskSoundBridge*)data;
+	if(!self)
+		return;
+
+	LLPreviewSound* preview = LLFloaterReg::showTypedInstance<LLPreviewSound>("preview_sound", LLSD(self->mUUID), TAKE_FOCUS_YES);
+	if (preview)
+	{
+		preview->setObjectID(self->mPanel->getTaskUUID());
+	}
+}
+
+// virtual
+void LLTaskSoundBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if (action == "task_play")
+	{
+		LLInventoryItem* item = findItem();
+		if(item)
+		{
+			send_sound_trigger(item->getAssetUUID(), 1.0);
+		}
+	}
+	LLTaskInvFVBridge::performAction(folder, model, action);
+}
+
+void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	LLInventoryItem* item = findItem();
+	if(!item) return;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	if(item->getPermissions().getOwner() != gAgent.getID()
+	   && item->getSaleInfo().isForSale())
+	{
+		items.push_back(std::string("Task Buy"));
+
+		std::string label= LLTrans::getString("Buy");
+		// Check the price of the item.
+		S32 price = getPrice();
+		if (-1 == price)
+		{
+			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
+		}
+		else
+		{
+			std::ostringstream info;
+			info <<  LLTrans::getString("BuyforL$") << price;
+			label.assign(info.str());
+		}
+
+		const LLView::child_list_t *list = menu.getChildList();
+		LLView::child_list_t::const_iterator itor;
+		for (itor = list->begin(); itor != list->end(); ++itor)
+		{
+			std::string name = (*itor)->getName();
+			LLMenuItemCallGL* menu_itemp = dynamic_cast<LLMenuItemCallGL*>(*itor);
+			if (name == "Task Buy" && menu_itemp)
+			{
+				menu_itemp->setLabel(label);
+			}
+		}
+	}
+	else
+	{
+		items.push_back(std::string("Task Open")); 
+		if (!isItemCopyable())
+		{
+			disabled_items.push_back(std::string("Task Open"));
+		}
+	}
+	items.push_back(std::string("Task Properties"));
+	if(isItemRenameable())
+	{
+		items.push_back(std::string("Task Rename"));
+	}
+	if(isItemRemovable())
+	{
+		items.push_back(std::string("Task Remove"));
+	}
+
+	items.push_back(std::string("Task Play"));
+
+
+	hide_context_entries(menu, items, disabled_items);
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskLandmarkBridge
+///----------------------------------------------------------------------------
+
+class LLTaskLandmarkBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskLandmarkBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+};
+
+LLTaskLandmarkBridge::LLTaskLandmarkBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskLandmarkBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, 0, FALSE);
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskCallingCardBridge
+///----------------------------------------------------------------------------
+
+class LLTaskCallingCardBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskCallingCardBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual BOOL isItemRenameable() const;
+	virtual BOOL renameItem(const std::string& new_name);
+};
+
+LLTaskCallingCardBridge::LLTaskCallingCardBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskCallingCardBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, 0, FALSE);
+}
+
+BOOL LLTaskCallingCardBridge::isItemRenameable() const
+{
+	return FALSE;
+}
+
+BOOL LLTaskCallingCardBridge::renameItem(const std::string& new_name)
+{
+	return FALSE;
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskScriptBridge
+///----------------------------------------------------------------------------
+
+class LLTaskScriptBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskScriptBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	//static BOOL enableIfCopyable( void* userdata );
+};
+
+LLTaskScriptBridge::LLTaskScriptBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskScriptBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
+}
+
+
+class LLTaskLSLBridge : public LLTaskScriptBridge
+{
+public:
+	LLTaskLSLBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual void openItem();
+	virtual BOOL removeItem();
+	//virtual void buildContextMenu(LLMenuGL& menu);
+
+	//static void copyToInventory(void* userdata);
+};
+
+LLTaskLSLBridge::LLTaskLSLBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskScriptBridge(panel, uuid, name)
+{
+}
+
+void LLTaskLSLBridge::openItem()
+{
+	llinfos << "LLTaskLSLBridge::openItem() " << mUUID << llendl;
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(!object || object->isInventoryPending())
+	{
+		return;
+	}
+	LLLiveLSLEditor* preview = LLFloaterReg::showTypedInstance<LLLiveLSLEditor>("preview_scriptedit", LLSD(mUUID), TAKE_FOCUS_YES);
+	if (preview && (object->permModify() || gAgent.isGodlike()))
+	{
+		preview->setObjectID(mPanel->getTaskUUID());
+	}
+}
+
+BOOL LLTaskLSLBridge::removeItem()
+{
+	LLFloaterReg::hideInstance("preview_scriptedit", LLSD(mUUID));
+	return LLTaskInvFVBridge::removeItem();
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskObjectBridge
+///----------------------------------------------------------------------------
+
+class LLTaskObjectBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskObjectBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+};
+
+LLTaskObjectBridge::LLTaskObjectBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskObjectBridge::getIcon() const
+{
+	BOOL item_is_multi = FALSE;
+	if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+	{
+		item_is_multi = TRUE;
+	}
+
+	return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0, item_is_multi);
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskNotecardBridge
+///----------------------------------------------------------------------------
+
+class LLTaskNotecardBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskNotecardBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual BOOL removeItem();
+};
+
+LLTaskNotecardBridge::LLTaskNotecardBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskNotecardBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE);
+}
+
+void LLTaskNotecardBridge::openItem()
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(!object || object->isInventoryPending())
+	{
+		return;
+	}
+	if(object->permModify() || gAgent.isGodlike())
+	{
+		LLPreviewNotecard* preview = LLFloaterReg::showTypedInstance<LLPreviewNotecard>("preview_notecard", LLSD(mUUID), TAKE_FOCUS_YES);
+		if (preview)
+		{
+			preview->setObjectID(mPanel->getTaskUUID());
+		}
+	}
+}
+
+BOOL LLTaskNotecardBridge::removeItem()
+{
+	LLFloaterReg::hideInstance("preview_notecard", LLSD(mUUID));
+	return LLTaskInvFVBridge::removeItem();
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskGestureBridge
+///----------------------------------------------------------------------------
+
+class LLTaskGestureBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskGestureBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual BOOL removeItem();
+};
+
+LLTaskGestureBridge::LLTaskGestureBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskGestureBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE);
+}
+
+void LLTaskGestureBridge::openItem()
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(!object || object->isInventoryPending())
+	{
+		return;
+	}
+	LLPreviewGesture::show(mUUID, mPanel->getTaskUUID());
+}
+
+BOOL LLTaskGestureBridge::removeItem()
+{
+	// Don't need to deactivate gesture because gestures inside objects can never be active.
+	LLFloaterReg::hideInstance("preview_gesture", LLSD(mUUID));
+	return LLTaskInvFVBridge::removeItem();
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskAnimationBridge
+///----------------------------------------------------------------------------
+
+class LLTaskAnimationBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskAnimationBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual BOOL removeItem();
+};
+
+LLTaskAnimationBridge::LLTaskAnimationBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskAnimationBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE);
+}
+
+void LLTaskAnimationBridge::openItem()
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(!object || object->isInventoryPending())
+	{
+		return;
+	}
+
+	LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
+	if (preview && (object->permModify() || gAgent.isGodlike()))
+	{
+		preview->setObjectID(mPanel->getTaskUUID());
+	}
+}
+
+BOOL LLTaskAnimationBridge::removeItem()
+{
+	LLFloaterReg::hideInstance("preview_anim", LLSD(mUUID));
+	return LLTaskInvFVBridge::removeItem();
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskWearableBridge
+///----------------------------------------------------------------------------
+
+class LLTaskWearableBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskWearableBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name,
+		LLAssetType::EType asset_type,
+		U32 flags);
+
+	virtual LLUIImagePtr getIcon() const;
+
+protected:
+	LLAssetType::EType		mAssetType;
+};
+
+LLTaskWearableBridge::LLTaskWearableBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name,
+	LLAssetType::EType asset_type,
+	U32 flags) :
+	LLTaskInvFVBridge(panel, uuid, name, flags),
+	mAssetType( asset_type )
+{
+}
+
+LLUIImagePtr LLTaskWearableBridge::getIcon() const
+{
+	return get_item_icon(mAssetType, LLInventoryType::IT_WEARABLE, mFlags, FALSE );
+}
+
+
+///----------------------------------------------------------------------------
+/// LLTaskInvFVBridge impl
+//----------------------------------------------------------------------------
+
+LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory* panel,
+														 LLInventoryObject* object)
+{
+	LLTaskInvFVBridge* new_bridge = NULL;
+	LLAssetType::EType type = object->getType();
+	LLInventoryItem* item = NULL;
+	switch(type)
+	{
+	case LLAssetType::AT_TEXTURE:
+		item = (LLInventoryItem*)object;
+		new_bridge = new LLTaskTextureBridge(panel,
+											 object->getUUID(),
+											 object->getName(),
+											 item->getInventoryType());
+		break;
+	case LLAssetType::AT_SOUND:
+		new_bridge = new LLTaskSoundBridge(panel,
+										   object->getUUID(),
+										   object->getName());
+		break;
+	case LLAssetType::AT_LANDMARK:
+		new_bridge = new LLTaskLandmarkBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_CALLINGCARD:
+		new_bridge = new LLTaskCallingCardBridge(panel,
+												 object->getUUID(),
+												 object->getName());
+		break;
+	case LLAssetType::AT_SCRIPT:
+		// OLD SCRIPTS DEPRECATED - JC
+		llwarns << "Old script" << llendl;
+		//new_bridge = new LLTaskOldScriptBridge(panel,
+		//									   object->getUUID(),
+		//									   object->getName());
+		break;
+	case LLAssetType::AT_OBJECT:
+		new_bridge = new LLTaskObjectBridge(panel,
+											object->getUUID(),
+											object->getName());
+		break;
+	case LLAssetType::AT_NOTECARD:
+		new_bridge = new LLTaskNotecardBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_ANIMATION:
+		new_bridge = new LLTaskAnimationBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_GESTURE:
+		new_bridge = new LLTaskGestureBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_CLOTHING:
+	case LLAssetType::AT_BODYPART:
+		item = (LLInventoryItem*)object;
+		new_bridge = new LLTaskWearableBridge(panel,
+											  object->getUUID(),
+											  object->getName(),
+											  type,
+											  item->getFlags());
+		break;
+	case LLAssetType::AT_CATEGORY:
+	case LLAssetType::AT_FAVORITE:
+		new_bridge = new LLTaskCategoryBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_LSL_TEXT:
+		new_bridge = new LLTaskLSLBridge(panel,
+										 object->getUUID(),
+										 object->getName());
+		break;
+	
+		break;
+	default:
+		llinfos << "Unhandled inventory type (llassetstorage.h): "
+				<< (S32)type << llendl;
+		break;
+	}
+	return new_bridge;
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLPanelObjectInventory
+///----------------------------------------------------------------------------
+
+static LLDefaultChildRegistry::Register<LLPanelObjectInventory> r("panel_inventory_object");
+
+void do_nothing()
+{
+}
+
+// Default constructor
+LLPanelObjectInventory::LLPanelObjectInventory(const LLPanelObjectInventory::Params& p) :
+	LLPanel(p),
+	mScroller(NULL),
+	mFolders(NULL),
+	mHaveInventory(FALSE),
+	mIsInventoryEmpty(TRUE),
+	mInventoryNeedsUpdate(FALSE)
+{
+	// Setup context menu callbacks
+	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelObjectInventory::doToSelected, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&do_nothing));
+	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&do_nothing));
+	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&do_nothing));
+}
+
+// Destroys the object
+LLPanelObjectInventory::~LLPanelObjectInventory()
+{
+	if (!gIdleCallbacks.deleteFunction(idle, this))
+	{
+		llwarns << "LLPanelObjectInventory::~LLPanelObjectInventory() failed to delete callback" << llendl;
+	}
+}
+
+BOOL LLPanelObjectInventory::postBuild()
+{
+	// clear contents and initialize menus, sets up mFolders
+	reset();
+
+	// Register an idle update callback
+	gIdleCallbacks.addFunction(idle, this);
+
+	return TRUE;
+}
+
+void LLPanelObjectInventory::doToSelected(const LLSD& userdata)
+{
+	mFolders->doToSelected(&gInventory, userdata);
+}
+
+void LLPanelObjectInventory::clearContents()
+{
+	mHaveInventory = FALSE;
+	mIsInventoryEmpty = TRUE;
+	if (LLToolDragAndDrop::getInstance() && LLToolDragAndDrop::getInstance()->getSource() == LLToolDragAndDrop::SOURCE_WORLD)
+	{
+		LLToolDragAndDrop::getInstance()->endDrag();
+	}
+
+	if( mScroller )
+	{
+		// removes mFolders
+		removeChild( mScroller ); //*TODO: Really shouldn't do this during draw()/refresh()
+		mScroller->die();
+		mScroller = NULL;
+		mFolders = NULL;
+	}
+}
+
+
+void LLPanelObjectInventory::reset()
+{
+	clearContents();
+
+	setBorderVisible(FALSE);
+	
+	mCommitCallbackRegistrar.pushScope(); // push local callbacks
+	
+	LLRect dummy_rect(0, 1, 1, 0);
+	LLFolderView::Params p;
+	p.name = "task inventory";
+	p.task_id = getTaskUUID();
+	p.parent_panel = this;
+	mFolders = LLUICtrlFactory::create<LLFolderView>(p);
+	// this ensures that we never say "searching..." or "no items found"
+	mFolders->getFilter()->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
+	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
+
+	LLRect scroller_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
+	LLScrollContainer::Params scroll_p;
+	scroll_p.name("task inventory scroller");
+	scroll_p.rect(scroller_rect);
+	scroll_p.follows.flags(FOLLOWS_ALL);
+	mScroller = LLUICtrlFactory::create<LLScrollContainer>(scroll_p);
+	addChild(mScroller);
+	mScroller->addChild(mFolders);
+	
+	mFolders->setScrollContainer( mScroller );
+	
+	mCommitCallbackRegistrar.popScope();
+}
+
+void LLPanelObjectInventory::inventoryChanged(LLViewerObject* object,
+										InventoryObjectList* inventory,
+										S32 serial_num,
+										void* data)
+{
+	if(!object) return;
+
+	//llinfos << "invetnory arrived: \n"
+	//		<< " panel UUID: " << panel->mTaskUUID << "\n"
+	//		<< " task  UUID: " << object->mID << llendl;
+	if(mTaskUUID == object->mID)
+	{
+		mInventoryNeedsUpdate = TRUE;
+	}
+
+	// refresh any properties floaters that are hanging around.
+	if(inventory)
+	{
+		for (InventoryObjectList::const_iterator iter = inventory->begin();
+			 iter != inventory->end(); )
+		{
+			LLInventoryObject* item = *iter++;
+			LLFloaterProperties* floater = LLFloaterReg::findTypedInstance<LLFloaterProperties>("properites", item->getUUID());
+			if(floater)
+			{
+				floater->refresh();
+			}
+		}
+	}
+}
+
+void LLPanelObjectInventory::updateInventory()
+{
+	//llinfos << "inventory arrived: \n"
+	//		<< " panel UUID: " << panel->mTaskUUID << "\n"
+	//		<< " task  UUID: " << object->mID << llendl;
+	// We're still interested in this task's inventory.
+	std::set<LLUUID> selected_items;
+	BOOL inventory_has_focus = FALSE;
+	if (mHaveInventory && mFolders->getNumSelectedDescendants())
+	{
+		mFolders->getSelectionList(selected_items);
+		inventory_has_focus = gFocusMgr.childHasKeyboardFocus(mFolders);
+	}
+
+	reset();
+
+	LLViewerObject* objectp = gObjectList.findObject(mTaskUUID);
+	if (objectp)
+	{
+		LLInventoryObject* inventory_root = objectp->getInventoryRoot();
+		InventoryObjectList contents;
+		objectp->getInventoryContents(contents);
+		if (inventory_root)
+		{
+			createFolderViews(inventory_root, contents);
+			mHaveInventory = TRUE;
+			mIsInventoryEmpty = FALSE;
+			mFolders->setEnabled(TRUE);
+		}
+		else
+		{
+			// TODO: create an empty inventory
+			mIsInventoryEmpty = TRUE;
+			mHaveInventory = TRUE;
+		}
+	}
+	else
+	{
+		// TODO: create an empty inventory
+		mIsInventoryEmpty = TRUE;
+		mHaveInventory = TRUE;
+	}
+
+	// restore previous selection
+	std::set<LLUUID>::iterator selection_it;
+	BOOL first_item = TRUE;
+	for (selection_it = selected_items.begin(); selection_it != selected_items.end(); ++selection_it)
+	{
+		LLFolderViewItem* selected_item = mFolders->getItemByID(*selection_it);
+		if (selected_item)
+		{
+			//HACK: "set" first item then "change" each other one to get keyboard focus right
+			if (first_item)
+			{
+				mFolders->setSelection(selected_item, TRUE, inventory_has_focus);
+				first_item = FALSE;
+			}
+			else
+			{
+				mFolders->changeSelection(selected_item, TRUE);
+			}
+		}
+	}
+
+	mFolders->requestArrange();
+	mInventoryNeedsUpdate = FALSE;
+}
+
+// *FIX: This is currently a very expensive operation, because we have
+// to iterate through the inventory one time for each category. This
+// leads to an N^2 based on the category count. This could be greatly
+// speeded with an efficient multimap implementation, but we don't
+// have that in our current arsenal.
+void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents)
+{
+	if (!inventory_root)
+	{
+		return;
+	}
+	// Create a visible root category.
+	LLTaskInvFVBridge* bridge = NULL;
+	bridge = LLTaskInvFVBridge::createObjectBridge(this, inventory_root);
+	if(bridge)
+	{
+		LLFolderViewFolder* new_folder = NULL;
+		LLFolderViewFolder::Params p;
+		p.name = inventory_root->getName();
+		p.icon = LLUI::getUIImage("Inv_FolderClosed");
+		p.icon_open = LLUI::getUIImage("Inv_FolderOpen");
+		p.root = mFolders;
+		p.listener = bridge;
+		new_folder = LLUICtrlFactory::create<LLFolderViewFolder>(p);
+		new_folder->addToFolder(mFolders, mFolders);
+		new_folder->toggleOpen();
+
+		createViewsForCategory(&contents, inventory_root, new_folder);
+	}
+}
+
+typedef std::pair<LLInventoryObject*, LLFolderViewFolder*> obj_folder_pair;
+
+void LLPanelObjectInventory::createViewsForCategory(InventoryObjectList* inventory, 
+											  LLInventoryObject* parent,
+											  LLFolderViewFolder* folder)
+{
+	// Find all in the first pass
+	LLDynamicArray<obj_folder_pair*> child_categories;
+	LLTaskInvFVBridge* bridge;
+	LLFolderViewItem* view;
+
+	InventoryObjectList::iterator it = inventory->begin();
+	InventoryObjectList::iterator end = inventory->end();
+	for( ; it != end; ++it)
+	{
+		LLInventoryObject* obj = *it;
+
+		if(parent->getUUID() == obj->getParentUUID())
+		{
+			bridge = LLTaskInvFVBridge::createObjectBridge(this, obj);
+			if(!bridge)
+			{
+				continue;
+			}
+			if(LLAssetType::AT_CATEGORY == obj->getType())
+			{
+				LLFolderViewFolder::Params p;
+				p.name = obj->getName();
+				p.icon = LLUI::getUIImage("Inv_FolderClosed");
+				p.icon_open = LLUI::getUIImage("Inv_FolderOpen");
+				p.root = mFolders;
+				p.listener = bridge;
+				view = LLUICtrlFactory::create<LLFolderViewFolder>(p);
+				child_categories.put(new obj_folder_pair(obj,
+														 (LLFolderViewFolder*)view));
+			}
+			else
+			{
+				LLFolderViewItem::Params params;
+				params.name(obj->getName());
+				params.icon(bridge->getIcon());
+				params.creation_date(bridge->getCreationDate());
+				params.root(mFolders);
+				params.listener(bridge);
+				params.rect(LLRect());
+				view = LLUICtrlFactory::create<LLFolderViewItem> (params);
+			}
+			view->addToFolder(folder, mFolders);
+		}
+	}
+
+	// now, for each category, do the second pass
+	for(S32 i = 0; i < child_categories.count(); i++)
+	{
+		createViewsForCategory(inventory, child_categories[i]->first,
+							   child_categories[i]->second );
+		delete child_categories[i];
+	}
+}
+
+void LLPanelObjectInventory::refresh()
+{
+	//llinfos << "LLPanelObjectInventory::refresh()" << llendl;
+	BOOL has_inventory = FALSE;
+	const BOOL non_root_ok = TRUE;
+	LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(NULL, non_root_ok);
+	if(node)
+	{
+		LLViewerObject* object = node->getObject();
+		if(object && ((LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() == 1)
+					  || (LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1)))
+		{
+			// determine if we need to make a request. Start with a
+			// default based on if we have inventory at all.
+			BOOL make_request = !mHaveInventory;
+
+			// If the task id is different than what we've stored,
+			// then make the request.
+			if(mTaskUUID != object->mID)
+			{
+				mTaskUUID = object->mID;
+				make_request = TRUE;
+
+				// This is a new object so pre-emptively clear the contents
+				// Otherwise we show the old stuff until the update comes in
+				clearContents();
+
+				// Register for updates from this object,
+				registerVOInventoryListener(object,NULL);
+			}
+
+			// Based on the node information, we may need to dirty the
+			// object inventory and get it again.
+			if(node->mValid)
+			{
+				if(node->mInventorySerial != object->getInventorySerial() || object->isInventoryDirty())
+				{
+					make_request = TRUE;
+				}
+			}
+
+			// do the request if necessary.
+			if(make_request)
+			{
+				requestVOInventory();
+			}
+			has_inventory = TRUE;
+		}
+	}
+	if(!has_inventory)
+	{
+		mTaskUUID = LLUUID::null;
+		removeVOInventoryListener();
+		clearContents();
+	}
+	//llinfos << "LLPanelObjectInventory::refresh() " << mTaskUUID << llendl;
+}
+
+void LLPanelObjectInventory::removeSelectedItem()
+{
+	if(mFolders)
+	{
+		mFolders->removeSelectedItems();
+	}
+}
+
+void LLPanelObjectInventory::startRenamingSelectedItem()
+{
+	if(mFolders)
+	{
+		mFolders->startRenamingSelectedItem();
+	}
+}
+
+void LLPanelObjectInventory::draw()
+{
+	LLPanel::draw();
+
+	if(mIsInventoryEmpty)
+	{
+		if((LLUUID::null != mTaskUUID) && (!mHaveInventory))
+		{
+			LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("LoadingContents"), 0,
+													 (S32)(getRect().getWidth() * 0.5f),
+													 10,
+													 LLColor4( 1, 1, 1, 1 ),
+													 LLFontGL::HCENTER,
+													 LLFontGL::BOTTOM);
+		}
+		else if(mHaveInventory)
+		{
+			LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("NoContents"), 0,
+													 (S32)(getRect().getWidth() * 0.5f),
+													 10,
+													 LLColor4( 1, 1, 1, 1 ),
+													 LLFontGL::HCENTER,
+													 LLFontGL::BOTTOM);
+		}
+	}
+}
+
+void LLPanelObjectInventory::deleteAllChildren()
+{
+	mScroller = NULL;
+	mFolders = NULL;
+	LLView::deleteAllChildren();
+}
+
+BOOL LLPanelObjectInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg)
+{
+	if (mFolders && mHaveInventory)
+	{
+		LLFolderViewItem* folderp = mFolders->getNextFromChild(NULL);
+		if (!folderp)
+		{
+			return FALSE;
+		}
+		// Try to pass on unmodified mouse coordinates
+		S32 local_x = x - mFolders->getRect().mLeft;
+		S32 local_y = y - mFolders->getRect().mBottom;
+
+		if (mFolders->pointInView(local_x, local_y))
+		{
+			return mFolders->handleDragAndDrop(local_x, local_y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+		}
+		else
+		{
+			//force mouse coordinates to be inside folder rectangle
+			return mFolders->handleDragAndDrop(5, 1, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+		}
+	}
+	else
+	{
+		return FALSE;
+	}
+}
+
+//static
+void LLPanelObjectInventory::idle(void* user_data)
+{
+	LLPanelObjectInventory* self = (LLPanelObjectInventory*)user_data;
+
+
+	if (self->mInventoryNeedsUpdate)
+	{
+		self->updateInventory();
+	}
+}
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 8a1b97695d1..b5481cdf2dc 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -1,276 +1,247 @@
-/**
- * @file LLSidepanelInventory.cpp
- * @brief Side Bar "Inventory" panel
- *
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llsidepanelinventory.h"
-
-#include "llagent.h"
-#include "llbutton.h"
-#include "llinventorybridge.h"
-#include "llinventorypanel.h"
-#include "llpanelmaininventory.h"
-#include "llsidepanelobjectinfo.h"
-#include "lltabcontainer.h"
-
-static const S32 LANDMARK_FOLDERS_MENU_WIDTH = 250;
-static const std::string AGENT_INFO_TYPE			= "agent";
-static const std::string CREATE_LANDMARK_INFO_TYPE	= "create_landmark";
-static const std::string LANDMARK_INFO_TYPE			= "landmark";
-static const std::string REMOTE_PLACE_INFO_TYPE		= "remote_place";
-static const std::string TELEPORT_HISTORY_INFO_TYPE	= "teleport_history";
-
-// Helper functions
-static void setAllChildrenVisible(LLView* view, BOOL visible);
-
-static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
-
-LLSidepanelInventory::LLSidepanelInventory()
-	:	LLPanel(),
-		mSidepanelObjectInfo(NULL),
-		mItem(NULL)
-{
-
-	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
-}
-
-LLSidepanelInventory::~LLSidepanelInventory()
-{
-}
-
-BOOL LLSidepanelInventory::postBuild()
-{
-	mInfoBtn = getChild<LLButton>("info_btn");
-	mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this));
-
-	mShareBtn = getChild<LLButton>("share_btn");
-	mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
-
-	mShareBtn = getChild<LLButton>("share_btn");
-	mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
-
-	mWearBtn = getChild<LLButton>("wear_btn");
-	mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this));
-
-	mPlayBtn = getChild<LLButton>("play_btn");
-	mPlayBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onPlayButtonClicked, this));
-
-	mTeleportBtn = getChild<LLButton>("teleport_btn");
-	mTeleportBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onTeleportButtonClicked, this));
-
-	mOverflowBtn = getChild<LLButton>("overflow_btn");
-	mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
-
-	mTabContainer = getChild<LLTabContainer>("Inventory Tabs");
-	mSidepanelObjectInfo = getChild<LLSidepanelObjectInfo>("sidepanel_object_info");
-
-	mPanelMainInventory = getChild<LLPanelMainInventory>("panel_main_inventory");
-	mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
-
-	LLButton* back_btn = mSidepanelObjectInfo->getChild<LLButton>("back_btn");
-	back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
-
-	return TRUE;
-}
-
-void LLSidepanelInventory::onOpen(const LLSD& key)
-{
-	if(mSidepanelObjectInfo == NULL || key.size() == 0)
-		return;
-
-	mItem = NULL;
-
-	LLInventoryItem* item = gInventory.getItem(key["id"].asUUID());
-	if (!item)
-	{
-		return;
-	}
-	setItem(item);
-	toggleObjectInfoPanel(TRUE);
-}
-
-void LLSidepanelInventory::setItem(LLInventoryItem* item)
-{
-	if (!mSidepanelObjectInfo || !item)
-		return;
-
-	mItem = item;
-
-	LLAssetType::EType item_type = mItem->getActualType();
-	if (item_type == LLAssetType::AT_LINK)
-	{
-		mItem = gInventory.getItem(mItem->getLinkedUUID());
-		if (mItem.isNull())
-			return;
-	}
-
-	// Check if item is in agent's inventory and he has the permission to modify it.
-	BOOL is_object_editable = gInventory.isObjectDescendentOf(mItem->getUUID(), gInventory.getRootFolderID()) &&
-		mItem->getPermissions().allowModifyBy(gAgent.getID());
-
-	mInfoBtn->setEnabled(is_object_editable);
-	// mSaveBtn->setEnabled(is_object_editable);
-
-	mSidepanelObjectInfo->displayItemInfo(mItem);
-}
-
-void LLSidepanelInventory::onInfoButtonClicked()
-{
-	LLInventoryItem *item = getSelectedItem();
-	if (item)
-	{
-		setItem(item);
-		toggleObjectInfoPanel(TRUE);
-	}
-}
-
-void LLSidepanelInventory::onShareButtonClicked()
-{
-}
-
-void LLSidepanelInventory::performActionOnSelection(const std::string &action)
-{
-	LLInventoryPanel *panel = mPanelMainInventory->getActivePanel();
-	LLFolderViewItem* current_item = panel->getRootFolder()->getCurSelectedItem();
-	if (!current_item)
-	{
-		return;
-	}
-	current_item->getListener()->performAction(panel->getRootFolder(), panel->getModel(), action);
-}
-
-void LLSidepanelInventory::onWearButtonClicked()
-{
-	performActionOnSelection("wear");
-	performActionOnSelection("attach");
-}
-
-void LLSidepanelInventory::onPlayButtonClicked()
-{
-	performActionOnSelection("activate");
-}
-
-void LLSidepanelInventory::onTeleportButtonClicked()
-{
-	performActionOnSelection("teleport");
-}
-
-void LLSidepanelInventory::onOverflowButtonClicked()
-{
-}
-
-void LLSidepanelInventory::onBackButtonClicked()
-{
-	if (!mSidepanelObjectInfo)
-		return;
-	
-	toggleObjectInfoPanel(FALSE);
-
-	
-	updateVerbs();
-}
-
-void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
-{
-	updateVerbs();
-}
-
-void LLSidepanelInventory::toggleObjectInfoPanel(BOOL visible)
-{
-	if (!mSidepanelObjectInfo)
-		return;
-
-	mSidepanelObjectInfo->setVisible(visible);
-	mTabContainer->setVisible(!visible);
-
-	if (visible)
-	{
-		mSidepanelObjectInfo->reset();
-		mSidepanelObjectInfo->setEditMode(FALSE);
-
-		LLRect rect = getRect();
-		LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
-		mSidepanelObjectInfo->reshape(new_rect.getWidth(),new_rect.getHeight());
-	}
-}
-
-void LLSidepanelInventory::updateVerbs()
-{
-	mInfoBtn->setEnabled(FALSE);
-	mShareBtn->setEnabled(FALSE);
-
-	mWearBtn->setVisible(FALSE);
-	mWearBtn->setEnabled(FALSE);
-	mPlayBtn->setVisible(FALSE);
-	mPlayBtn->setEnabled(FALSE);
- 	mTeleportBtn->setVisible(FALSE);
- 	mTeleportBtn->setEnabled(FALSE);
-	
-	const LLInventoryItem *item = getSelectedItem();
-	if (!item)
-		return;
-
-	mInfoBtn->setEnabled(TRUE);
-	mShareBtn->setEnabled(TRUE);
-
-	switch(item->getInventoryType())
-	{
-		case LLInventoryType::IT_WEARABLE:
-		case LLInventoryType::IT_OBJECT:
-		case LLInventoryType::IT_ATTACHMENT:
-			mWearBtn->setVisible(TRUE);
-			mWearBtn->setEnabled(TRUE);
-			break;
-		case LLInventoryType::IT_SOUND:
-		case LLInventoryType::IT_GESTURE:
-		case LLInventoryType::IT_ANIMATION:
-			mPlayBtn->setVisible(TRUE);
-			mPlayBtn->setEnabled(TRUE);
-			break;
-		case LLInventoryType::IT_LANDMARK:
-			mTeleportBtn->setVisible(TRUE);
-			mTeleportBtn->setEnabled(TRUE);
-			break;
-		default:
-			break;
-	}
-}
-
-LLInventoryItem *LLSidepanelInventory::getSelectedItem()
-{
-	LLFolderViewItem* current_item = mPanelMainInventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
-	if (!current_item)
-	{
-		return NULL;
-	}
-	const LLUUID &item_id = current_item->getListener()->getUUID();
-	LLInventoryItem *item = gInventory.getItem(item_id);
-	return item;
-}
+/**
+ * @file LLSidepanelInventory.cpp
+ * @brief Side Bar "Inventory" panel
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llsidepanelinventory.h"
+
+#include "llagent.h"
+#include "llbutton.h"
+#include "llinventorybridge.h"
+#include "llinventorypanel.h"
+#include "llpanelmaininventory.h"
+#include "llsidepanelobjectinfo.h"
+#include "lltabcontainer.h"
+
+static const S32 LANDMARK_FOLDERS_MENU_WIDTH = 250;
+static const std::string AGENT_INFO_TYPE			= "agent";
+static const std::string CREATE_LANDMARK_INFO_TYPE	= "create_landmark";
+static const std::string LANDMARK_INFO_TYPE			= "landmark";
+static const std::string REMOTE_PLACE_INFO_TYPE		= "remote_place";
+static const std::string TELEPORT_HISTORY_INFO_TYPE	= "teleport_history";
+
+// Helper functions
+static void setAllChildrenVisible(LLView* view, BOOL visible);
+
+static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
+
+LLSidepanelInventory::LLSidepanelInventory()
+	:	LLPanel(),
+		mSidepanelObjectInfo(NULL)
+{
+
+	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
+}
+
+LLSidepanelInventory::~LLSidepanelInventory()
+{
+}
+
+BOOL LLSidepanelInventory::postBuild()
+{
+	mInfoBtn = getChild<LLButton>("info_btn");
+	mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this));
+
+	mShareBtn = getChild<LLButton>("share_btn");
+	mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
+
+	mShareBtn = getChild<LLButton>("share_btn");
+	mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
+
+	mWearBtn = getChild<LLButton>("wear_btn");
+	mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this));
+
+	mPlayBtn = getChild<LLButton>("play_btn");
+	mPlayBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onPlayButtonClicked, this));
+
+	mTeleportBtn = getChild<LLButton>("teleport_btn");
+	mTeleportBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onTeleportButtonClicked, this));
+
+	mOverflowBtn = getChild<LLButton>("overflow_btn");
+	mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
+
+	mTabContainer = getChild<LLTabContainer>("Inventory Tabs");
+	mSidepanelObjectInfo = getChild<LLSidepanelObjectInfo>("sidepanel_object_info");
+
+	mPanelMainInventory = getChild<LLPanelMainInventory>("panel_main_inventory");
+	mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
+
+	LLButton* back_btn = mSidepanelObjectInfo->getChild<LLButton>("back_btn");
+	back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
+
+	return TRUE;
+}
+
+void LLSidepanelInventory::onOpen(const LLSD& key)
+{
+	if(key.size() == 0)
+		return;
+
+	mSidepanelObjectInfo->reset();
+
+	if (key.has("id"))
+	{
+		mSidepanelObjectInfo->setItemID(key["id"].asUUID());
+	}
+	
+	if (key.has("object"))
+	{
+		mSidepanelObjectInfo->setObjectID(key["object"].asUUID());
+	}
+
+	toggleObjectInfoPanel(TRUE);
+}
+
+void LLSidepanelInventory::onInfoButtonClicked()
+{
+	LLInventoryItem *item = getSelectedItem();
+	if (item)
+	{
+		mSidepanelObjectInfo->reset();
+		mSidepanelObjectInfo->setItemID(item->getUUID());
+		toggleObjectInfoPanel(TRUE);
+	}
+}
+
+void LLSidepanelInventory::onShareButtonClicked()
+{
+}
+
+void LLSidepanelInventory::performActionOnSelection(const std::string &action)
+{
+	LLInventoryPanel *panel = mPanelMainInventory->getActivePanel();
+	LLFolderViewItem* current_item = panel->getRootFolder()->getCurSelectedItem();
+	if (!current_item)
+	{
+		return;
+	}
+	current_item->getListener()->performAction(panel->getRootFolder(), panel->getModel(), action);
+}
+
+void LLSidepanelInventory::onWearButtonClicked()
+{
+	performActionOnSelection("wear");
+	performActionOnSelection("attach");
+}
+
+void LLSidepanelInventory::onPlayButtonClicked()
+{
+	performActionOnSelection("activate");
+}
+
+void LLSidepanelInventory::onTeleportButtonClicked()
+{
+	performActionOnSelection("teleport");
+}
+
+void LLSidepanelInventory::onOverflowButtonClicked()
+{
+}
+
+void LLSidepanelInventory::onBackButtonClicked()
+{
+	toggleObjectInfoPanel(FALSE);
+	updateVerbs();
+}
+
+void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
+{
+	updateVerbs();
+}
+
+void LLSidepanelInventory::toggleObjectInfoPanel(BOOL visible)
+{
+	mSidepanelObjectInfo->setVisible(visible);
+	mTabContainer->setVisible(!visible);
+
+	if (visible)
+	{
+		mSidepanelObjectInfo->reset();
+		mSidepanelObjectInfo->setEditMode(FALSE);
+
+		LLRect rect = getRect();
+		LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
+		mSidepanelObjectInfo->reshape(new_rect.getWidth(),new_rect.getHeight());
+	}
+}
+
+void LLSidepanelInventory::updateVerbs()
+{
+	mInfoBtn->setEnabled(FALSE);
+	mShareBtn->setEnabled(FALSE);
+
+	mWearBtn->setVisible(FALSE);
+	mWearBtn->setEnabled(FALSE);
+	mPlayBtn->setVisible(FALSE);
+	mPlayBtn->setEnabled(FALSE);
+ 	mTeleportBtn->setVisible(FALSE);
+ 	mTeleportBtn->setEnabled(FALSE);
+	
+	const LLInventoryItem *item = getSelectedItem();
+	if (!item)
+		return;
+
+	mInfoBtn->setEnabled(TRUE);
+	mShareBtn->setEnabled(TRUE);
+
+	switch(item->getInventoryType())
+	{
+		case LLInventoryType::IT_WEARABLE:
+		case LLInventoryType::IT_OBJECT:
+		case LLInventoryType::IT_ATTACHMENT:
+			mWearBtn->setVisible(TRUE);
+			mWearBtn->setEnabled(TRUE);
+			break;
+		case LLInventoryType::IT_SOUND:
+		case LLInventoryType::IT_GESTURE:
+		case LLInventoryType::IT_ANIMATION:
+			mPlayBtn->setVisible(TRUE);
+			mPlayBtn->setEnabled(TRUE);
+			break;
+		case LLInventoryType::IT_LANDMARK:
+			mTeleportBtn->setVisible(TRUE);
+			mTeleportBtn->setEnabled(TRUE);
+			break;
+		default:
+			break;
+	}
+}
+
+LLInventoryItem *LLSidepanelInventory::getSelectedItem()
+{
+	LLFolderViewItem* current_item = mPanelMainInventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+	if (!current_item)
+	{
+		return NULL;
+	}
+	const LLUUID &item_id = current_item->getListener()->getUUID();
+	LLInventoryItem *item = gInventory.getItem(item_id);
+	return item;
+}
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index 784f5e43b7c..62eeecc5e23 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -1,85 +1,80 @@
-/** 
- * @file LLSidepanelInventory.h
- * @brief Side Bar "Inventory" panel
- *
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLSIDEPANELINVENTORY_H
-#define LL_LLSIDEPANELINVENTORY_H
-
-#include "llpanel.h"
-
-class LLInventoryItem;
-class LLSidepanelObjectInfo;
-class LLTabContainer;
-class LLPanelMainInventory;
-class LLFolderViewItem;
-
-class LLSidepanelInventory : public LLPanel
-{
-public:
-	LLSidepanelInventory();
-	virtual ~LLSidepanelInventory();
-
-	/*virtual*/ BOOL postBuild();
-	/*virtual*/ void onOpen(const LLSD& key);
-
-	void setItem(LLInventoryItem* item);
-
-protected:
-	LLInventoryItem *getSelectedItem();
-	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
-	void onTabSelected();
-	void toggleObjectInfoPanel(BOOL visible);
-	void updateVerbs();
-	void performActionOnSelection(const std::string &action);
-
-	LLTabContainer*				mTabContainer;
-	LLSidepanelObjectInfo*		mSidepanelObjectInfo;
-	LLPanelMainInventory*		mPanelMainInventory;
-
-	void 						onInfoButtonClicked();
-	void 						onShareButtonClicked();
-	void 						onWearButtonClicked();
-	void 						onPlayButtonClicked();
-	void 						onTeleportButtonClicked();
-	void 						onOverflowButtonClicked();
-	void 						onBackButtonClicked();
-	
-	LLButton*					mInfoBtn;
-	LLButton*					mShareBtn;
-	LLButton*					mWearBtn;
-	LLButton*					mPlayBtn;
-	LLButton*					mTeleportBtn;
-	LLButton*					mOverflowBtn;
-
-	// Pointer to a item
-	LLPointer<LLInventoryItem>	mItem;
-};
-
-#endif //LL_LLSIDEPANELINVENTORY_H
+/** 
+ * @file LLSidepanelInventory.h
+ * @brief Side Bar "Inventory" panel
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSIDEPANELINVENTORY_H
+#define LL_LLSIDEPANELINVENTORY_H
+
+#include "llpanel.h"
+
+class LLInventoryItem;
+class LLSidepanelObjectInfo;
+class LLTabContainer;
+class LLPanelMainInventory;
+class LLFolderViewItem;
+
+class LLSidepanelInventory : public LLPanel
+{
+public:
+	LLSidepanelInventory();
+	virtual ~LLSidepanelInventory();
+
+	/*virtual*/ BOOL postBuild();
+	/*virtual*/ void onOpen(const LLSD& key);
+
+protected:
+	LLInventoryItem *getSelectedItem();
+	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
+	void onTabSelected();
+	void toggleObjectInfoPanel(BOOL visible);
+	void updateVerbs();
+	void performActionOnSelection(const std::string &action);
+
+	LLTabContainer*				mTabContainer;
+	LLSidepanelObjectInfo*		mSidepanelObjectInfo;
+	LLPanelMainInventory*		mPanelMainInventory;
+
+	void 						onInfoButtonClicked();
+	void 						onShareButtonClicked();
+	void 						onWearButtonClicked();
+	void 						onPlayButtonClicked();
+	void 						onTeleportButtonClicked();
+	void 						onOverflowButtonClicked();
+	void 						onBackButtonClicked();
+	
+	LLButton*					mInfoBtn;
+	LLButton*					mShareBtn;
+	LLButton*					mWearBtn;
+	LLButton*					mPlayBtn;
+	LLButton*					mTeleportBtn;
+	LLButton*					mOverflowBtn;
+};
+
+#endif //LL_LLSIDEPANELINVENTORY_H
-- 
GitLab


From d3e270da51fbd1053ed3482da69f9c987b13c63f Mon Sep 17 00:00:00 2001
From: "Justin C. Rounds (Chuck)" <chuck@lindenlab.com>
Date: Tue, 3 Nov 2009 14:08:05 -0500
Subject: [PATCH 074/306] "Uncrammed" the layout.
 http://jira.secondlife.com/browse/EXT-1974
 http://jira.secondlife.com/browse/EXT-1580

---
 .../default/xui/en/floater_land_holdings.xml  | 101 +++++++++---------
 1 file changed, 50 insertions(+), 51 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_land_holdings.xml b/indra/newview/skins/default/xui/en/floater_land_holdings.xml
index 46d74b6aff8..85f0e6411bf 100644
--- a/indra/newview/skins/default/xui/en/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/en/floater_land_holdings.xml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  legacy_header_height="18"
- height="400"
+ height="430"
  layout="topleft"
  name="land holdings floater"
  help_topic="land_holdings_floater"
- title="My Land"
- width="280">
+ title="MY LAND"
+ width="600">
     <floater.string
      name="area_string">
         [AREA] m²
@@ -15,81 +15,82 @@
      draw_heading="true"
      height="170"
      layout="topleft"
-     left="8"
+     left="10"
      name="parcel list"
-     top="24"
-     width="270">
+     top="28"
+     width="580">
         <scroll_list.columns
          label="Parcel"
          name="name"
-         width="69" />
+         width="167" />
         <scroll_list.columns
          label="Region"
          name="location"
-         width="74" />
+         width="180" />
         <scroll_list.columns
          label="Type"
          name="type"
-         width="55" />
+         width="145" />
         <scroll_list.columns
          label="Area"
          name="area"
-         width="10" />
+         width="88" />
         <scroll_list.columns
          label=""
          name="hidden"
          width="-1" />
     </scroll_list>
     <button
-     height="20"
-     font="SansSerifSmall"
+     height="23"
+     font="SansSerifBold"
      label="Teleport"
      label_selected="Teleport"
      layout="topleft"
-     left_delta="4"
+     top="208"
+     left="10"
      name="Teleport"
      tool_tip="Teleport to the center of this land."
-     top_pad="4"
-     width="100" />
+     width="80" />
     <button
-     height="20"
-     font="SansSerifSmall"
+     height="23"
+     font="SansSerifBold"
      label="Map"
      label_selected="Map"
      layout="topleft"
-     left_pad="4"
+     top="208"
+     left="95"
      name="Show on Map"
      tool_tip="Show this land on the world map"
-     top_delta="0"
-     width="100" />
+     width="80" />
     <text
      type="string"
      length="1"
      follows="left|top"
-     height="16"
      layout="topleft"
-     left="12"
+     top="251"
+     left="10"
      name="contrib_label"
-     top="222"
-     width="480">
+     height="16"
+     width="580">
         Contributions to your groups:
     </text>
     <scroll_list
      draw_heading="true"
      height="75"
      layout="topleft"
-     left_delta="-4"
      name="grant list"
-     top_pad="4"
-     width="270">
+     top="271"
+     left="10"
+     width="580">
         <scroll_list.columns
          label="Group"
          name="group"
-         width="125" />
+         width="290"
+	 left_pad="10" />
         <scroll_list.columns
          label="Area"
          name="area"
-         width="125" />
+         width="290" />
     </scroll_list>
     <text
      type="string"
@@ -97,12 +98,11 @@
      follows="left|top"
      height="16"
      layout="topleft"
-     left_delta="4"
      name="allowed_label"
-     top_pad="4"
-     width="150">
-        Allowed land holdings at
-current payment plan:
+     top="366"
+     left="10"
+     width="290">
+        Allowed land holdings at current payment plan:
     </text>
     <text
      type="string"
@@ -110,10 +110,10 @@ current payment plan:
      follows="left|top"
      height="16"
      layout="topleft"
-     left_pad="5"
      name="allowed_text"
-     top_delta="10"
-     width="132">
+     top="366"
+     left="305"
+     width="290">
         [AREA] m²
     </text>
     <text
@@ -122,10 +122,10 @@ current payment plan:
      follows="left|top"
      height="16"
      layout="topleft"
-     left="12"
+     top="386"
+     left="10"
      name="current_label"
-     top_pad="5"
-     width="150">
+     width="290">
         Current land holdings:
     </text>
     <text
@@ -134,10 +134,10 @@ current payment plan:
      follows="left|top"
      height="16"
      layout="topleft"
-     left_pad="5"
+     top="386"
+     left="305"
      name="current_text"
-     top_delta="0"
-     width="132">
+     width="290">
         [AREA] m²
     </text>
     <text
@@ -147,12 +147,11 @@ current payment plan:
      font="SansSerifBold"
      height="16"
      layout="topleft"
-     left="12"
+     top="406"
+     left="10"
      name="available_label"
-     top_pad="5"
-     width="150">
-        Available for land
-purchases:
+     width="290">
+        Available for land purchases:
     </text>
     <text
      type="string"
@@ -161,10 +160,10 @@ purchases:
      font="SansSerifBold"
      height="16"
      layout="topleft"
-     left_pad="5"
      name="available_text"
-     top_delta="5"
-     width="140">
+     top="406"
+     left="305"
+     width="290">
         [AREA] m²
     </text>
 </floater>
\ No newline at end of file
-- 
GitLab


From 00e56b09071f4e29ccec1a5451161817ffba4d96 Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Tue, 3 Nov 2009 19:08:11 +0000
Subject: [PATCH 075/306] DEV-41358 DEV-41361: Added support for
 secondlife:///app/worldmap SLurls to the LLUrlRegistry. These are now
 displayed with the more human-readable label of "Show Map for XXXX" and sport
 a context menu with various operations.

I also added "Show on Map" options to the context menus for other
location-based SLurls.

I also internationalized the text for "Teleport to" and the new "Show
Map for" strings.
---
 indra/llui/lltextbase.cpp                     |  1 +
 indra/llui/llurlaction.cpp                    | 12 ++++
 indra/llui/llurlaction.h                      |  3 +
 indra/llui/llurlentry.cpp                     | 58 +++++++++++++++++--
 indra/llui/llurlentry.h                       | 12 ++++
 indra/llui/llurlregistry.cpp                  |  1 +
 .../skins/default/xui/en/menu_url_map.xml     | 30 ++++++++++
 .../default/xui/en/menu_url_objectim.xml      |  7 +++
 .../skins/default/xui/en/menu_url_parcel.xml  |  9 +++
 .../skins/default/xui/en/menu_url_slurl.xml   |  7 +++
 .../default/xui/en/menu_url_teleport.xml      |  9 +++
 .../newview/skins/default/xui/en/strings.xml  |  5 ++
 12 files changed, 150 insertions(+), 4 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/en/menu_url_map.xml

diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 9a26f0b4726..e11e5f446e5 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -1419,6 +1419,7 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url)
 	registrar.add("Url.OpenExternal", boost::bind(&LLUrlAction::openURLExternal, url));
 	registrar.add("Url.Execute", boost::bind(&LLUrlAction::executeSLURL, url));
 	registrar.add("Url.Teleport", boost::bind(&LLUrlAction::teleportToLocation, url));
+	registrar.add("Url.ShowOnMap", boost::bind(&LLUrlAction::showLocationOnMap, url));
 	registrar.add("Url.CopyLabel", boost::bind(&LLUrlAction::copyLabelToClipboard, url));
 	registrar.add("Url.CopyUrl", boost::bind(&LLUrlAction::copyURLToClipboard, url));
 
diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp
index f3401f91f7a..679db5e39ba 100644
--- a/indra/llui/llurlaction.cpp
+++ b/indra/llui/llurlaction.cpp
@@ -121,6 +121,18 @@ void LLUrlAction::teleportToLocation(std::string url)
 	}	
 }
 
+void LLUrlAction::showLocationOnMap(std::string url)
+{
+	LLUrlMatch match;
+	if (LLUrlRegistry::instance().findUrl(url, match))
+	{
+		if (! match.getLocation().empty())
+		{
+			executeSLURL("secondlife:///app/worldmap/" + match.getLocation());
+		}
+	}	
+}
+
 void LLUrlAction::copyURLToClipboard(std::string url)
 {
 	LLView::getWindow()->copyTextToClipboard(utf8str_to_wstring(url));
diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h
index 6b9d565b44c..4830cf27ef9 100644
--- a/indra/llui/llurlaction.h
+++ b/indra/llui/llurlaction.h
@@ -67,6 +67,9 @@ class LLUrlAction
 	/// if the Url specifies an SL location, teleport there
 	static void teleportToLocation(std::string url);
 
+	/// if the Url specifies an SL location, show it on a map
+	static void showLocationOnMap(std::string url);
+
 	/// perform the appropriate action for left-clicking on a Url
 	static void clickAction(std::string url);
 
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 52e4229fb4d..ddb6c6baffe 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -468,6 +468,7 @@ std::string LLUrlEntryTeleport::getLabel(const std::string &url, const LLUrlLabe
 	LLURI uri(url);
 	LLSD path_array = uri.pathArray();
 	S32 path_parts = path_array.size();
+	const std::string label = LLTrans::getString("SLurlLabelTeleport");
 	if (path_parts == 6)
 	{
 		// handle teleport url with (X,Y,Z) coordinates
@@ -475,7 +476,7 @@ std::string LLUrlEntryTeleport::getLabel(const std::string &url, const LLUrlLabe
 		std::string x = path_array[path_parts-3];
 		std::string y = path_array[path_parts-2];
 		std::string z = path_array[path_parts-1];
-		return "Teleport to " + location + " (" + x + "," + y + "," + z + ")";
+		return label + " " + location + " (" + x + "," + y + "," + z + ")";
 	}
 	else if (path_parts == 5)
 	{
@@ -483,20 +484,20 @@ std::string LLUrlEntryTeleport::getLabel(const std::string &url, const LLUrlLabe
 		std::string location = unescapeUrl(path_array[path_parts-3]);
 		std::string x = path_array[path_parts-2];
 		std::string y = path_array[path_parts-1];
-		return "Teleport to " + location + " (" + x + "," + y + ")";
+		return label + " " + location + " (" + x + "," + y + ")";
 	}
 	else if (path_parts == 4)
 	{
 		// handle teleport url with (X) coordinate only
 		std::string location = unescapeUrl(path_array[path_parts-2]);
 		std::string x = path_array[path_parts-1];
-		return "Teleport to " + location + " (" + x + ")";
+		return label + " " + location + " (" + x + ")";
 	}
 	else if (path_parts == 3)
 	{
 		// handle teleport url with no coordinates
 		std::string location = unescapeUrl(path_array[path_parts-1]);
-		return "Teleport to " + location;
+		return label + " " + location;
 	}
 
 	return url;
@@ -599,3 +600,52 @@ std::string LLUrlEntrySLLabel::getUrl(const std::string &string)
 	return getUrlFromWikiLink(string);
 }
 
+//
+// LLUrlEntryWorldMap Describes secondlife:///<location> URLs
+//
+LLUrlEntryWorldMap::LLUrlEntryWorldMap()
+{
+	mPattern = boost::regex("secondlife:///app/worldmap/\\S+/?(\\d+)?/?(\\d+)?/?(\\d+)?/?\\S*",
+							boost::regex::perl|boost::regex::icase);
+	mMenuName = "menu_url_map.xml";
+	mTooltip = LLTrans::getString("TooltipMapUrl");
+}
+
+std::string LLUrlEntryWorldMap::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
+{
+	//
+	// we handle SLURLs in the following formats:
+	//   - secondlife:///app/worldmap/PLACE/X/Y/Z
+	//   - secondlife:///app/worldmap/PLACE/X/Y
+	//   - secondlife:///app/worldmap/PLACE/X
+	//
+	LLURI uri(url);
+	LLSD path_array = uri.pathArray();
+	S32 path_parts = path_array.size();
+	if (path_parts < 3)
+	{
+		return url;
+	}
+
+	const std::string label = LLTrans::getString("SLurlLabelShowOnMap");
+	std::string location = path_array[2];
+	std::string x = (path_parts > 3) ? path_array[3] : "128";
+	std::string y = (path_parts > 4) ? path_array[4] : "128";
+	std::string z = (path_parts > 5) ? path_array[5] : "0";
+	return label + " " + location + " (" + x + "," + y + "," + z + ")";
+}
+
+std::string LLUrlEntryWorldMap::getLocation(const std::string &url) const
+{
+	// return the part of the Url after secondlife:///app/worldmap/ part
+	const std::string search_string = "//app/worldmap/";
+	size_t pos = url.find(search_string);
+	if (pos == std::string::npos)
+	{
+		return "";
+	}
+
+	pos += search_string.size();
+	return url.substr(pos, url.size() - pos);
+}
+
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
index afb2fdcde9f..180ef856737 100644
--- a/indra/llui/llurlentry.h
+++ b/indra/llui/llurlentry.h
@@ -243,4 +243,16 @@ class LLUrlEntrySLLabel : public LLUrlEntryBase
 	/*virtual*/ std::string getUrl(const std::string &string);
 };
 
+///
+/// LLUrlEntryWorldMap Describes a Second Life worldmap Url, e.g.,
+/// secondlife:///app/worldmap/Ahern/50/50/50
+///
+class LLUrlEntryWorldMap : public LLUrlEntryBase
+{
+public:
+	LLUrlEntryWorldMap();
+	/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
+	/*virtual*/ std::string getLocation(const std::string &url) const;
+};
+
 #endif
diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
index 249c7320d69..60275b60bc2 100644
--- a/indra/llui/llurlregistry.cpp
+++ b/indra/llui/llurlregistry.cpp
@@ -51,6 +51,7 @@ LLUrlRegistry::LLUrlRegistry()
 	registerUrl(new LLUrlEntryGroup());
 	registerUrl(new LLUrlEntryParcel());
 	registerUrl(new LLUrlEntryTeleport());
+	registerUrl(new LLUrlEntryWorldMap());
 	registerUrl(new LLUrlEntryObjectIM());
 	registerUrl(new LLUrlEntryPlace());
 	registerUrl(new LLUrlEntrySL());
diff --git a/indra/newview/skins/default/xui/en/menu_url_map.xml b/indra/newview/skins/default/xui/en/menu_url_map.xml
new file mode 100644
index 00000000000..2ca9e3b3fe6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_url_map.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Url Popup">
+    <menu_item_call
+     label="Show on Map"
+     layout="topleft"
+     name="show_on_map">
+        <menu_item_call.on_click
+         function="Url.Execute" />
+    </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Teleport to Location"
+     layout="topleft"
+     name="teleport_to_location">
+        <menu_item_call.on_click
+         function="Url.Teleport" />
+    </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Copy SLurl to clipboard"
+     layout="topleft"
+     name="url_copy">
+        <menu_item_call.on_click
+         function="Url.CopyUrl" />
+    </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_url_objectim.xml b/indra/newview/skins/default/xui/en/menu_url_objectim.xml
index 6f7e659f48d..35c2269b0d1 100644
--- a/indra/newview/skins/default/xui/en/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_objectim.xml
@@ -11,6 +11,13 @@
     </menu_item_call>
     <menu_item_separator
      layout="topleft" />
+    <menu_item_call
+     label="Show on Map"
+     layout="topleft"
+     name="show_on_map">
+        <menu_item_call.on_click
+         function="Url.ShowOnMap" />
+    </menu_item_call>
     <menu_item_call
      label="Teleport to Object Location"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/menu_url_parcel.xml b/indra/newview/skins/default/xui/en/menu_url_parcel.xml
index 3804f7f7802..f477c310fb7 100644
--- a/indra/newview/skins/default/xui/en/menu_url_parcel.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_parcel.xml
@@ -9,6 +9,15 @@
         <menu_item_call.on_click
          function="Url.Execute" />
     </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Show on Map"
+     layout="topleft"
+     name="show_on_map">
+        <menu_item_call.on_click
+         function="Url.ShowOnMap" />
+    </menu_item_call>
     <menu_item_separator
      layout="topleft" />
     <menu_item_call
diff --git a/indra/newview/skins/default/xui/en/menu_url_slurl.xml b/indra/newview/skins/default/xui/en/menu_url_slurl.xml
index 58714f1f42f..98abc206a59 100644
--- a/indra/newview/skins/default/xui/en/menu_url_slurl.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_slurl.xml
@@ -11,6 +11,13 @@
     </menu_item_call>
     <menu_item_separator
      layout="topleft" />
+    <menu_item_call
+     label="Show on Map"
+     layout="topleft"
+     name="show_on_map">
+        <menu_item_call.on_click
+         function="Url.ShowOnMap" />
+    </menu_item_call>
     <menu_item_call
      label="Teleport to Location"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/menu_url_teleport.xml b/indra/newview/skins/default/xui/en/menu_url_teleport.xml
index ff52d7e1092..289e32bcf41 100644
--- a/indra/newview/skins/default/xui/en/menu_url_teleport.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_teleport.xml
@@ -9,6 +9,15 @@
         <menu_item_call.on_click
          function="Url.Execute" />
     </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Show on Map"
+     layout="topleft"
+     name="show_on_map">
+        <menu_item_call.on_click
+         function="Url.ShowOnMap" />
+    </menu_item_call>
     <menu_item_separator
      layout="topleft" />
     <menu_item_call
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index e842517853d..0f7e8cb1377 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -73,8 +73,13 @@
 	<string name="TooltipParcelUrl">Click to view this parcel's description</string>
 	<string name="TooltipTeleportUrl">Click to teleport to this location</string>
 	<string name="TooltipObjectIMUrl">Click to view this object's description</string>
+	<string name="TooltipMapUrl">Click to view this location on a map</string>
 	<string name="TooltipSLAPP">Click to run the secondlife:// command</string>
 	<string name="CurrentURL" value=" CurrentURL: [CurrentURL]" />
+
+	<!-- text for SLURL labels -->
+	<string name="SLurlLabelTeleport">Teleport to</string>
+	<string name="SLurlLabelShowOnMap">Show Map for</string>
 	
 	<!-- ButtonToolTips, llfloater.cpp -->
 	<string name="BUTTON_CLOSE_DARWIN">Close (&#8984;W)</string>
-- 
GitLab


From 80ec865c2b4863d0c9b29885ee834c8af75c8813 Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Tue, 3 Nov 2009 21:34:14 +0200
Subject: [PATCH 076/306] fixed minor bug EXT-1618  Add Landmark does nothing
 if resident stands exactly in the location of existing landmark

--HG--
branch : product-engine
---
 indra/newview/llpanellandmarks.cpp | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 704bc309ee5..5f717b51cc5 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -552,14 +552,16 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const
 	std::string command_name = userdata.asString();
 	if("add_landmark" == command_name)
 	{
-		if(LLLandmarkActions::landmarkAlreadyExists())
+		LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos();
+		if(landmark)
+		{
+			LLSideTray::getInstance()->showPanel("panel_places", 
+								LLSD().insert("type", "landmark").insert("id",landmark->getUUID()));
+		}
+		else
 		{
-			std::string location;
-			LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_FULL);
-			llwarns<<" Landmark already exists at location:  "<< location<<llendl;
-			return;
+			LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
 		}
-		LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
 	} 
 	else if ("category" == command_name)
 	{
-- 
GitLab


From fc7ac26ea315f3d60779f3b3ba775395d57654c9 Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Tue, 3 Nov 2009 21:38:19 +0200
Subject: [PATCH 077/306] Implemented major sub-task EXT-2140 (Avatar icon in
 p2p should take all available space on Control Panel)

--HG--
branch : product-engine
---
 .../skins/default/xui/en/floater_im_session.xml        | 10 +++++-----
 .../skins/default/xui/en/panel_im_control_panel.xml    |  8 ++++----
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index cdcee9ab641..88aca005cfe 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -3,7 +3,7 @@
  legacy_header_height="18"
  background_visible="true"
  follows="left|top|right|bottom"
- height="330"
+ height="359"
  layout="topleft"
  left="0"
  name="panel_im"
@@ -17,7 +17,7 @@
  min_width="200"
  min_height="150">
   <layout_stack follows="left|top|right|bottom"
-                height="305"
+                height="344"
                 width="400"
                 layout="topleft"
                 orientation="horizontal"
@@ -28,12 +28,12 @@
       name="panel_im_control_panel"
       layout="topleft"
       top_delta="-3"
-      height="305"
+      height="344"
       follows="left"
       label="IM Control Panel"
       auto_resize="false"
       user_resize="false" />
-    <layout_panel height="305"
+    <layout_panel height="344"
                   width="235"
                   left_delta="146" 
                   top="0"
@@ -56,7 +56,7 @@
        length="1"
        follows="left|top|right|bottom"
        font="SansSerif"
-       height="255"
+       height="290"
        layout="topleft"
        name="chat_history"
        parse_highlights="true"
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index 1831f58e199..0dd38784263 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -1,18 +1,18 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel name="panel_im_control_panel"
        width="128"
-       height="298"
+       height="327"
        border="false">
 
   <avatar_icon name="avatar_icon"
                follows="left|top"
-               width="96"
-               height="96" />
+               left_delta="3"
+               width="125"
+               height="125" />
 
   <button name="view_profile_btn"
           follows="left|bottom"
           label="View Profile"
-          left_delta="3"
           width="125"
 		  height="20" />
 
-- 
GitLab


From 9d8bd3625a01e38fb6b1af6153a43408933495df Mon Sep 17 00:00:00 2001
From: "Nyx (Neal Orman)" <nyx@lindenlab.com>
Date: Tue, 3 Nov 2009 14:41:53 -0500
Subject: [PATCH 078/306] DEV-1186 possibly typo in avatar_lad.xml

bumped wearable definition number and fixed minor typo in avatar_lad.xml - fix submitted by external contributor.
Verified the change is correct and gave credit - change is de minimis, but we haven't caught this/noticed on our
own for a while.

Code reviewed by Bigpapi
---
 doc/contributions.txt                  | 1 +
 indra/newview/character/avatar_lad.xml | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 942ba0f0b97..990756d76dd 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -372,6 +372,7 @@ Michelle2 Zenovka
 	VWR-8310
 	VWR-9499
 Mm Alder
+	VWR-197
 	VWR-3777
 	VWR-4794
 	VWR-13578
diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index c43ba279846..10c197d09eb 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
 <linden_avatar
- version="1.0" wearable_definition_version="23"> 
+ version="1.0" wearable_definition_version="24"> 
   <!-- The wearable_definition_version is checked during asset upload. -->
   <!-- If you increment it, check indra/lib/python/indra/assetutil.py.  -->
   <skeleton
@@ -8985,7 +8985,7 @@ render_pass="bump">
          id="1017" />
 
         <driven
-         id="1033" />
+         id="1035" />
 
         <driven
          id="914"
-- 
GitLab


From de2fe92bb9df5f5f64dff79a4e6df35330c15329 Mon Sep 17 00:00:00 2001
From: Sergey Borushevsky <sborushevsky@productengine.com>
Date: Tue, 3 Nov 2009 21:58:09 +0200
Subject: [PATCH 079/306] Fixed normal bug EXT-2150 (IM Floaters should display
 their title in CAPS (p2p, group, ad-hoc)).

--HG--
branch : product-engine
---
 indra/newview/llimfloater.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 7bad9499211..19fa66fd0e4 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -236,7 +236,10 @@ BOOL LLIMFloater::postBuild()
 	
 	mChatHistory = getChild<LLChatHistory>("chat_history");
 		
-	setTitle(LLIMModel::instance().getName(mSessionID));
+	std::string session_name(LLIMModel::instance().getName(mSessionID));
+	LLStringUtil::toUpper(session_name);
+	setTitle(session_name);
+
 	setDocked(true);
 
 	mTypingStart = LLTrans::getString("IM_typing_start_string");
-- 
GitLab


From 90d92647f417601814c3e7fffac357435f485c79 Mon Sep 17 00:00:00 2001
From: "Nyx (Neal Orman)" <nyx@lindenlab.com>
Date: Tue, 3 Nov 2009 15:17:27 -0500
Subject: [PATCH 080/306] EXT-2141 baked texture not keyed on version #

We actually already have this, stored in our baked texture dictionary.
Generated new UUIDs for the baked texture hashes -
this will ensure that new baked textures will be generated when users switch
to viewer-2, and should clear up the invisibility issues people see from old
1.22 bakes being used as alpha-enabled.

Code reviewed by Bigpapi
---
 indra/newview/llvoavatardefines.cpp | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/indra/newview/llvoavatardefines.cpp b/indra/newview/llvoavatardefines.cpp
index 5624f19c8d0..49c4a1a6c89 100644
--- a/indra/newview/llvoavatardefines.cpp
+++ b/indra/newview/llvoavatardefines.cpp
@@ -84,34 +84,34 @@ LLVOAvatarDictionary::BakedTextures::BakedTextures()
 {
 	// Baked textures
 	addEntry(BAKED_HEAD,       new BakedEntry(TEX_HEAD_BAKED,  
-											  "head", "18ded8d6-bcfc-e415-8539-944c0f5ea7a6", 
+											  "head", "a4b9dc38-e13b-4df9-b284-751efb0566ff", 
 											  3, TEX_HEAD_BODYPAINT, TEX_HEAD_TATTOO, TEX_HEAD_ALPHA,
 											  5, WT_SHAPE, WT_SKIN, WT_HAIR, WT_TATTOO, WT_ALPHA));
 
 	addEntry(BAKED_UPPER,      new BakedEntry(TEX_UPPER_BAKED, 
-											  "upper_body", "338c29e3-3024-4dbb-998d-7c04cf4fa88f", 
+											  "upper_body", "5943ff64-d26c-4a90-a8c0-d61f56bd98d4", 
 											  7, TEX_UPPER_SHIRT,TEX_UPPER_BODYPAINT, TEX_UPPER_JACKET,
 											  TEX_UPPER_GLOVES, TEX_UPPER_UNDERSHIRT, TEX_UPPER_TATTOO, TEX_UPPER_ALPHA,
 											  8, WT_SHAPE, WT_SKIN,	WT_SHIRT, WT_JACKET, WT_GLOVES, WT_UNDERSHIRT, WT_TATTOO, WT_ALPHA));											  
 
 	addEntry(BAKED_LOWER,      new BakedEntry(TEX_LOWER_BAKED, 
-											  "lower_body", "91b4a2c7-1b1a-ba16-9a16-1f8f8dcc1c3f",
+											  "lower_body", "2944ee70-90a7-425d-a5fb-d749c782ed7d",
 											  8, TEX_LOWER_PANTS,TEX_LOWER_BODYPAINT,TEX_LOWER_SHOES, TEX_LOWER_SOCKS,
 											  TEX_LOWER_JACKET, TEX_LOWER_UNDERPANTS, TEX_LOWER_TATTOO, TEX_LOWER_ALPHA,
 											  9, WT_SHAPE, WT_SKIN,	WT_PANTS, WT_SHOES,	 WT_SOCKS,  WT_JACKET, WT_UNDERPANTS, WT_TATTOO, WT_ALPHA));
 
 	addEntry(BAKED_EYES,       new BakedEntry(TEX_EYES_BAKED,  
-											  "eyes", "b2cf28af-b840-1071-3c6a-78085d8128b5",
+											  "eyes", "27b1bc0f-979f-4b13-95fe-b981c2ba9788",
 											  2, TEX_EYES_IRIS, TEX_EYES_ALPHA,
 											  2, WT_EYES, WT_ALPHA));
 
 	addEntry(BAKED_SKIRT,      new BakedEntry(TEX_SKIRT_BAKED,
-											  "skirt", "ea800387-ea1a-14e0-56cb-24f2022f969a", 
+											  "skirt", "03e7e8cb-1368-483b-b6f3-74850838ba63", 
 											  1, TEX_SKIRT,
 											  1, WT_SKIRT));
 
 	addEntry(BAKED_HAIR,       new BakedEntry(TEX_HAIR_BAKED,
-											  "hair", "0af1ef7c-ad24-11dd-8790-001f5bf833e8", 
+											  "hair", "a60e85a9-74e8-48d8-8a2d-8129f28d9b61", 
 											  2, TEX_HAIR, TEX_HAIR_ALPHA,
 											  2, WT_HAIR, WT_ALPHA));
 }
-- 
GitLab


From f75ce16477af31c2df1d79bcb492ae43c3b380e8 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 3 Nov 2009 12:24:07 -0800
Subject: [PATCH 081/306] Clean up login panel XML and code. Kill dead "web
 based login" viewer-auth mWebLoginKey. Port over my reg-in-client code from
 svn, off by default. Reviewed with Ambroff.

---
 indra/newview/app_settings/settings.xml       |  11 ++
 indra/newview/llloginhandler.cpp              |  31 +++--
 indra/newview/llloginhandler.h                |   6 +-
 indra/newview/llpanellogin.cpp                | 121 +++++++++++-------
 indra/newview/llpanellogin.h                  |   6 +-
 indra/newview/llstartup.cpp                   |  12 +-
 .../skins/default/xui/en/panel_login.xml      |  16 ++-
 7 files changed, 135 insertions(+), 68 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 768fdd41030..7254fff664a 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5558,6 +5558,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>RegInClient</key>
+    <map>
+      <key>Comment</key>
+      <string>Experimental: Embed registration in login screen</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RegionTextureSize</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp
index 6f0b8a3c1e6..2a1f42c3c4b 100644
--- a/indra/newview/llloginhandler.cpp
+++ b/indra/newview/llloginhandler.cpp
@@ -56,7 +56,7 @@ bool LLLoginHandler::parseDirectLogin(std::string url)
 	LLURI uri(url);
 	parse(uri.queryMap());
 
-	if (mWebLoginKey.isNull() ||
+	if (/*mWebLoginKey.isNull() ||*/
 		mFirstName.empty() ||
 		mLastName.empty())
 	{
@@ -71,7 +71,7 @@ bool LLLoginHandler::parseDirectLogin(std::string url)
 
 void LLLoginHandler::parse(const LLSD& queryMap)
 {
-	mWebLoginKey = queryMap["web_login_key"].asUUID();
+	//mWebLoginKey = queryMap["web_login_key"].asUUID();
 	mFirstName = queryMap["first_name"].asString();
 	mLastName = queryMap["last_name"].asString();
 	
@@ -165,7 +165,15 @@ void LLLoginHandler::parse(const LLSD& queryMap)
 bool LLLoginHandler::handle(const LLSD& tokens,
 							const LLSD& query_map,
 							LLMediaCtrl* web)
-{	
+{
+	if (tokens.size() == 1
+		&& tokens[0].asString() == "show")
+	{
+		// We're using reg-in-client, so show the XUI login widgets
+		LLPanelLogin::showLoginWidgets();
+		return true;
+	}
+
 	parse(query_map);
 	
 	//if we haven't initialized stuff yet, this is 
@@ -200,14 +208,15 @@ bool LLLoginHandler::handle(const LLSD& tokens,
 			LLPanelLogin::setFields(mFirstName, mLastName, password);
 		}
 
-		if (mWebLoginKey.isNull())
-		{
-			LLPanelLogin::loadLoginPage();
-		}
-		else
-		{
-			LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
-		}
+		//if (mWebLoginKey.isNull())
+		//{
+		//	LLPanelLogin::loadLoginPage();
+		//}
+		//else
+		//{
+		//	LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
+		//}
+		LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
 	}
 	return true;
 }
diff --git a/indra/newview/llloginhandler.h b/indra/newview/llloginhandler.h
index d36ceaf3cc0..ac4648761b2 100644
--- a/indra/newview/llloginhandler.h
+++ b/indra/newview/llloginhandler.h
@@ -48,7 +48,9 @@ class LLLoginHandler : public LLCommandHandler
 
 	std::string getFirstName() const { return mFirstName; }
 	std::string getLastName() const { return mLastName; }
-	LLUUID getWebLoginKey() const { return mWebLoginKey; }
+
+	// Web-based login unsupported
+	//LLUUID getWebLoginKey() const { return mWebLoginKey; }
 
 private:
 	void parse(const LLSD& queryMap);
@@ -56,7 +58,7 @@ class LLLoginHandler : public LLCommandHandler
 private:
 	std::string mFirstName;
 	std::string mLastName;
-	LLUUID mWebLoginKey;
+	//LLUUID mWebLoginKey;
 };
 
 extern LLLoginHandler gLoginHandler;
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 24e76e2c6e0..5d826f0a561 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -198,7 +198,16 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	//leave room for the login menu bar
 	setRect(LLRect(0, rect.getHeight()-18, rect.getWidth(), 0)); 
 #endif
-	reshape(rect.getWidth(), rect.getHeight());
+	// Legacy login web page is hidden under the menu bar.
+	// Adjust reg-in-client web browser widget to not be hidden.
+	if (gSavedSettings.getBOOL("RegInClient"))
+	{
+		reshape(rect.getWidth(), rect.getHeight() - MENU_BAR_HEIGHT);
+	}
+	else
+	{
+		reshape(rect.getWidth(), rect.getHeight());
+	}
 
 #if !USE_VIEWER_AUTH
 	childSetPrevalidate("first_name_edit", LLLineEditor::prevalidatePrintableNoSpace);
@@ -234,9 +243,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 
 	childSetAction("connect_btn", onClickConnect, this);
 
-	setDefaultBtn("connect_btn");
-
-	// childSetAction("quit_btn", onClickQuit, this);
+	getChild<LLPanel>("login_widgets")->setDefaultBtn("connect_btn");
 
 	std::string channel = gSavedSettings.getString("VersionChannelName");
 	std::string version = llformat("%d.%d.%d (%d)",
@@ -267,19 +274,20 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	web_browser->setTabStop(FALSE);
 	// web_browser->navigateToLocalPage( "loading", "loading.html" );
 
-	// make links open in external browser
-	web_browser->setOpenInExternalBrowser( true );
+	if (gSavedSettings.getBOOL("RegInClient"))
+	{
+		// need to follow links in the internal browser
+		web_browser->setOpenInExternalBrowser( false );
 
-	// force the size to be correct (XML doesn't seem to be sufficient to do this) (with some padding so the other login screen doesn't show through)
-	LLRect htmlRect = getRect();
-#if USE_VIEWER_AUTH
-	htmlRect.setCenterAndSize( getRect().getCenterX() - 2, getRect().getCenterY(), getRect().getWidth() + 6, getRect().getHeight());
-#else
-	htmlRect.setCenterAndSize( getRect().getCenterX() - 2, getRect().getCenterY() + 40, getRect().getWidth() + 6, getRect().getHeight() - 78 );
-#endif
-	web_browser->setRect( htmlRect );
-	web_browser->reshape( htmlRect.getWidth(), htmlRect.getHeight(), TRUE );
-	reshape( getRect().getWidth(), getRect().getHeight(), 1 );
+		getChild<LLView>("login_widgets")->setVisible(false);
+	}
+	else
+	{
+		// make links open in external browser
+		web_browser->setOpenInExternalBrowser( true );
+
+		reshapeBrowser();
+	}
 
 	// kick off a request to grab the url manually
 	gResponsePtr = LLIamHereLogin::build( this );
@@ -297,6 +305,27 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 
 }
 
+// force the size to be correct (XML doesn't seem to be sufficient to do this)
+// (with some padding so the other login screen doesn't show through)
+void LLPanelLogin::reshapeBrowser()
+{
+	LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html");
+	LLRect rect = gViewerWindow->getVirtualWindowRect();
+	LLRect html_rect;
+#if USE_VIEWER_AUTH
+	html_rect.setCenterAndSize( 
+		rect.getCenterX() - 2, rect.getCenterY(), 
+		rect.getWidth() + 6, rect.getHeight());
+#else
+	html_rect.setCenterAndSize(
+		rect.getCenterX() - 2, rect.getCenterY() + 40,
+		rect.getWidth() + 6, rect.getHeight() - 78 );
+#endif
+	web_browser->setRect( html_rect );
+	web_browser->reshape( html_rect.getWidth(), html_rect.getHeight(), TRUE );
+	reshape( rect.getWidth(), rect.getHeight(), 1 );
+}
+
 void LLPanelLogin::setSiteIsAlive( bool alive )
 {
 	LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html");
@@ -384,10 +413,14 @@ void LLPanelLogin::draw()
 		if ( mHtmlAvailable )
 		{
 #if !USE_VIEWER_AUTH
-			// draw a background box in black
-			gl_rect_2d( 0, height - 264, width, 264, LLColor4( 0.0f, 0.0f, 0.0f, 1.f ) );
-			// draw the bottom part of the background image - just the blue background to the native client UI
-			mLogoImage->draw(0, -264, width + 8, mLogoImage->getHeight());
+			if (getChild<LLView>("login_widgets")->getVisible())
+			{
+				// draw a background box in black
+				gl_rect_2d( 0, height - 264, width, 264, LLColor4::black );
+				// draw the bottom part of the background image
+				// just the blue background to the native client UI
+				mLogoImage->draw(0, -264, width + 8, mLogoImage->getHeight());
+			}
 #endif
 		}
 		else
@@ -418,12 +451,6 @@ BOOL LLPanelLogin::handleKeyHere(KEY key, MASK mask)
 		return TRUE;
 	}
 
-	if (KEY_RETURN == key && MASK_NONE == mask)
-	{
-		// let the panel handle UICtrl processing: calls onClickConnect()
-		return LLPanel::handleKeyHere(key, mask);
-	}
-
 	return LLPanel::handleKeyHere(key, mask);
 }
 
@@ -483,6 +510,19 @@ void LLPanelLogin::giveFocus()
 #endif
 }
 
+// static
+void LLPanelLogin::showLoginWidgets()
+{
+	sInstance->childSetVisible("login_widgets", true);
+	LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html");
+	web_browser->setOpenInExternalBrowser( true );
+	sInstance->reshapeBrowser();
+	// *TODO: Append all the usual login parameters, like first_login=Y etc.
+	std::string splash_screen_url = sInstance->getString("real_url");
+	web_browser->navigateTo( splash_screen_url, "text/html" );
+	LLUICtrl* first_name_edit = sInstance->getChild<LLUICtrl>("first_name_edit");
+	first_name_edit->setFocus(TRUE);
+}
 
 // static
 void LLPanelLogin::show(const LLRect &rect,
@@ -797,8 +837,17 @@ void LLPanelLogin::loadLoginPage()
 	
 	LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html");
 	
-	// navigate to the "real" page 
-	web_browser->navigateTo( oStr.str(), "text/html" );
+	// navigate to the "real" page
+	if (gSavedSettings.getBOOL("RegInClient"))
+	{
+		web_browser->setFocus(TRUE);
+		login_page = sInstance->getString("reg_in_client_url");
+		web_browser->navigateTo(login_page, "text/html");
+	}
+	else
+	{
+		web_browser->navigateTo( oStr.str(), "text/html" );
+	}
 }
 
 void LLPanelLogin::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent event)
@@ -883,22 +932,6 @@ void LLPanelLogin::onClickNewAccount(void*)
 }
 
 
-// *NOTE: This function is dead as of 2008 August.  I left it here in case
-// we suddenly decide to put the Quit button back. JC
-// static
-void LLPanelLogin::onClickQuit(void*)
-{
-	if (sInstance && sInstance->mCallback)
-	{
-		// tell the responder we're not here anymore
-		if ( gResponsePtr )
-			gResponsePtr->setParent( 0 );
-
-		sInstance->mCallback(1, sInstance->mCallbackData);
-	}
-}
-
-
 // static
 void LLPanelLogin::onClickVersion(void*)
 {
diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h
index 5692b8d345a..acb2001c22f 100644
--- a/indra/newview/llpanellogin.h
+++ b/indra/newview/llpanellogin.h
@@ -56,6 +56,10 @@ class LLPanelLogin:
 	virtual void draw();
 	virtual void setFocus( BOOL b );
 
+	// Show the XUI first name, last name, and password widgets.  They are
+	// hidden on startup for reg-in-client
+	static void showLoginWidgets();
+
 	static void show(const LLRect &rect, BOOL show_server, 
 		void (*callback)(S32 option, void* user_data), 
 		void* callback_data);
@@ -86,10 +90,10 @@ class LLPanelLogin:
 	/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
 
 private:
+	void reshapeBrowser();
 	static void onClickConnect(void*);
 	static void onClickNewAccount(void*);
 //	static bool newAccountAlertCallback(const LLSD& notification, const LLSD& response);
-	static void onClickQuit(void*);
 	static void onClickVersion(void*);
 	static void onClickForgotPassword(void*);
 	static void onPassKey(LLLineEditor* caller, void* user_data);
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 9aa74e8b9f9..9bdea57491a 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -738,7 +738,7 @@ bool idle_startup()
 		}
 		if (!gLoginHandler.getFirstName().empty()
 			|| !gLoginHandler.getLastName().empty()
-			|| !gLoginHandler.getWebLoginKey().isNull() )
+			/*|| !gLoginHandler.getWebLoginKey().isNull()*/ )
 		{
 			// We have at least some login information on a SLURL
 			gFirstname = gLoginHandler.getFirstName();
@@ -895,13 +895,9 @@ bool idle_startup()
 		gViewerWindow->moveProgressViewToFront();
 
 		//reset the values that could have come in from a slurl
-		if (!gLoginHandler.getWebLoginKey().isNull())
-		{
-			gFirstname = gLoginHandler.getFirstName();
-			gLastname = gLoginHandler.getLastName();
-//			gWebLoginKey = gLoginHandler.getWebLoginKey();
-		}
-				
+		gFirstname = gLoginHandler.getFirstName();
+		gLastname = gLoginHandler.getLastName();
+
 		if (show_connect_box)
 		{
 			// TODO if not use viewer auth
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index afe00271f7c..c3d199ee93d 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -15,10 +15,14 @@
      name="real_url">
         http://secondlife.com/app/login/
     </panel.string>
+    <string name="reg_in_client_url">
+      http://secondlife.eniac15.lindenlab.com/reg-in-client/
+    </string>
     <panel.string
      name="forgot_password_url">
         http://secondlife.com/account/request.php
     </panel.string>
+  <!-- *NOTE: Custom resize logic for login_html in llpanellogin.cpp -->
     <web_browser
      border_visible="false"
      bottom="600"
@@ -26,9 +30,16 @@
      layout="topleft"
      left="0"
      name="login_html"
-     right="-1"
      start_url=""
-     top="1" />
+     top="0"
+     height="600"
+     width="800"/>
+    <panel
+     follows="left|bottom|right"
+     name="login_widgets"
+     layout="topleft"
+     left="0"
+     top="0">
     <text
      type="string"
      length="1"
@@ -215,4 +226,5 @@
      width="300">
         [VERSION]
     </text>
+  </panel>
 </panel>
-- 
GitLab


From b7d020e744e69749dc946ce63fdb18d613a18e0a Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Tue, 3 Nov 2009 16:28:52 -0500
Subject: [PATCH 082/306] EXT-2168 : Rename ObjectInfo to ItemInfo

Renaming for better clarity as to what llsidepaneliteminfo does.
Also fixed an error where Edit was not enabling the panel.
Also did some superficial cleanup and reorganization of llsidepanel- files.

--HG--
branch : avatar-pipeline
---
 indra/newview/CMakeLists.txt                  |   4 +-
 indra/newview/llsidepanelinventory.cpp        | 481 +++++----
 indra/newview/llsidepanelinventory.h          | 166 +--
 indra/newview/llsidepaneliteminfo.cpp         | 961 ++++++++++++++++++
 indra/newview/llsidepaneliteminfo.h           | 107 ++
 .../default/xui/en/sidepanel_inventory.xml    | 244 ++---
 .../default/xui/en/sidepanel_item_info.xml    | 531 ++++++++++
 7 files changed, 2046 insertions(+), 448 deletions(-)
 create mode 100644 indra/newview/llsidepaneliteminfo.cpp
 create mode 100644 indra/newview/llsidepaneliteminfo.h
 create mode 100644 indra/newview/skins/default/xui/en/sidepanel_item_info.xml

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index e138b431c59..8882f02df47 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -370,7 +370,7 @@ set(viewer_SOURCE_FILES
     llsearchhistory.cpp
     llselectmgr.cpp
     llsidepanelinventory.cpp
-    llsidepanelobjectinfo.cpp
+    llsidepaneliteminfo.cpp
     llsidetray.cpp
     llsidetraypanelcontainer.cpp
     llsky.cpp
@@ -855,7 +855,7 @@ set(viewer_HEADER_FILES
     llsearchhistory.h
     llselectmgr.h
     llsidepanelinventory.h
-    llsidepanelobjectinfo.h
+    llsidepaneliteminfo.h
     llsidetray.h
     llsidetraypanelcontainer.h
     llsky.h
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 3cf17fb7f27..dbe7e9fec6d 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -1,244 +1,237 @@
-/**
- * @file LLSidepanelInventory.cpp
- * @brief Side Bar "Inventory" panel
- *
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llsidepanelinventory.h"
-
-#include "llagent.h"
-#include "llbutton.h"
-#include "llinventorybridge.h"
-#include "llinventorypanel.h"
-#include "llpanelmaininventory.h"
-#include "llsidepanelobjectinfo.h"
-#include "lltabcontainer.h"
-
-static const S32 LANDMARK_FOLDERS_MENU_WIDTH = 250;
-static const std::string AGENT_INFO_TYPE			= "agent";
-static const std::string CREATE_LANDMARK_INFO_TYPE	= "create_landmark";
-static const std::string LANDMARK_INFO_TYPE			= "landmark";
-static const std::string REMOTE_PLACE_INFO_TYPE		= "remote_place";
-static const std::string TELEPORT_HISTORY_INFO_TYPE	= "teleport_history";
-
-static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
-
-LLSidepanelInventory::LLSidepanelInventory()
-	:	LLPanel(),
-		mSidepanelObjectInfo(NULL)
-{
-
-	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
-}
-
-LLSidepanelInventory::~LLSidepanelInventory()
-{
-}
-
-BOOL LLSidepanelInventory::postBuild()
-{
-	mInfoBtn = getChild<LLButton>("info_btn");
-	mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this));
-
-	mShareBtn = getChild<LLButton>("share_btn");
-	mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
-
-	mShareBtn = getChild<LLButton>("share_btn");
-	mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
-
-	mWearBtn = getChild<LLButton>("wear_btn");
-	mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this));
-
-	mPlayBtn = getChild<LLButton>("play_btn");
-	mPlayBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onPlayButtonClicked, this));
-
-	mTeleportBtn = getChild<LLButton>("teleport_btn");
-	mTeleportBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onTeleportButtonClicked, this));
-
-	mOverflowBtn = getChild<LLButton>("overflow_btn");
-	mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
-
-	mTabContainer = getChild<LLTabContainer>("Inventory Tabs");
-	mSidepanelObjectInfo = getChild<LLSidepanelObjectInfo>("sidepanel_object_info");
-
-	mPanelMainInventory = getChild<LLPanelMainInventory>("panel_main_inventory");
-	mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
-
-	LLButton* back_btn = mSidepanelObjectInfo->getChild<LLButton>("back_btn");
-	back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
-
-	return TRUE;
-}
-
-void LLSidepanelInventory::onOpen(const LLSD& key)
-{
-	if(key.size() == 0)
-		return;
-
-	mSidepanelObjectInfo->reset();
-
-	if (key.has("id"))
-	{
-		mSidepanelObjectInfo->setItemID(key["id"].asUUID());
-	}
-	
-	if (key.has("object"))
-	{
-		mSidepanelObjectInfo->setObjectID(key["object"].asUUID());
-	}
-
-	toggleObjectInfoPanel(TRUE);
-}
-
-void LLSidepanelInventory::onInfoButtonClicked()
-{
-	LLInventoryItem *item = getSelectedItem();
-	if (item)
-	{
-		mSidepanelObjectInfo->reset();
-		mSidepanelObjectInfo->setItemID(item->getUUID());
-		toggleObjectInfoPanel(TRUE);
-	}
-}
-
-void LLSidepanelInventory::onShareButtonClicked()
-{
-}
-
-void LLSidepanelInventory::performActionOnSelection(const std::string &action)
-{
-	LLInventoryPanel *panel = mPanelMainInventory->getActivePanel();
-	LLFolderViewItem* current_item = panel->getRootFolder()->getCurSelectedItem();
-	if (!current_item)
-	{
-		return;
-	}
-	current_item->getListener()->performAction(panel->getRootFolder(), panel->getModel(), action);
-}
-
-void LLSidepanelInventory::onWearButtonClicked()
-{
-	performActionOnSelection("wear");
-	performActionOnSelection("attach");
-}
-
-void LLSidepanelInventory::onPlayButtonClicked()
-{
-	performActionOnSelection("activate");
-}
-
-void LLSidepanelInventory::onTeleportButtonClicked()
-{
-	performActionOnSelection("teleport");
-}
-
-void LLSidepanelInventory::onOverflowButtonClicked()
-{
-}
-
-void LLSidepanelInventory::onBackButtonClicked()
-{
-	toggleObjectInfoPanel(FALSE);
-	updateVerbs();
-}
-
-void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
-{
-	updateVerbs();
-}
-
-void LLSidepanelInventory::toggleObjectInfoPanel(BOOL visible)
-{
-	mSidepanelObjectInfo->setVisible(visible);
-	mTabContainer->setVisible(!visible);
-
-	if (visible)
-	{
-		mSidepanelObjectInfo->reset();
-		mSidepanelObjectInfo->setEditMode(FALSE);
-
-		LLRect rect = getRect();
-		LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
-		mSidepanelObjectInfo->reshape(new_rect.getWidth(),new_rect.getHeight());
-	}
-}
-
-void LLSidepanelInventory::updateVerbs()
-{
-	mInfoBtn->setEnabled(FALSE);
-	mShareBtn->setEnabled(FALSE);
-
-	mWearBtn->setVisible(FALSE);
-	mWearBtn->setEnabled(FALSE);
-	mPlayBtn->setVisible(FALSE);
-	mPlayBtn->setEnabled(FALSE);
- 	mTeleportBtn->setVisible(FALSE);
- 	mTeleportBtn->setEnabled(FALSE);
-	
-	const LLInventoryItem *item = getSelectedItem();
-	if (!item)
-		return;
-
-	mInfoBtn->setEnabled(TRUE);
-	mShareBtn->setEnabled(TRUE);
-
-	switch(item->getInventoryType())
-	{
-		case LLInventoryType::IT_WEARABLE:
-		case LLInventoryType::IT_OBJECT:
-		case LLInventoryType::IT_ATTACHMENT:
-			mWearBtn->setVisible(TRUE);
-			mWearBtn->setEnabled(TRUE);
-			break;
-		case LLInventoryType::IT_SOUND:
-		case LLInventoryType::IT_GESTURE:
-		case LLInventoryType::IT_ANIMATION:
-			mPlayBtn->setVisible(TRUE);
-			mPlayBtn->setEnabled(TRUE);
-			break;
-		case LLInventoryType::IT_LANDMARK:
-			mTeleportBtn->setVisible(TRUE);
-			mTeleportBtn->setEnabled(TRUE);
-			break;
-		default:
-			break;
-	}
-}
-
-LLInventoryItem *LLSidepanelInventory::getSelectedItem()
-{
-	LLFolderViewItem* current_item = mPanelMainInventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
-	if (!current_item)
-	{
-		return NULL;
-	}
-	const LLUUID &item_id = current_item->getListener()->getUUID();
-	LLInventoryItem *item = gInventory.getItem(item_id);
-	return item;
-}
+/**
+ * @file LLSidepanelInventory.cpp
+ * @brief Side Bar "Inventory" panel
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llsidepanelinventory.h"
+
+#include "llagent.h"
+#include "llbutton.h"
+#include "llinventorybridge.h"
+#include "llinventorypanel.h"
+#include "llpanelmaininventory.h"
+#include "llsidepaneliteminfo.h"
+#include "lltabcontainer.h"
+
+static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
+
+LLSidepanelInventory::LLSidepanelInventory()
+	:	LLPanel(),
+		mSidepanelItemInfo(NULL)
+{
+
+	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
+}
+
+LLSidepanelInventory::~LLSidepanelInventory()
+{
+}
+
+BOOL LLSidepanelInventory::postBuild()
+{
+	mInfoBtn = getChild<LLButton>("info_btn");
+	mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this));
+
+	mShareBtn = getChild<LLButton>("share_btn");
+	mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
+
+	mShareBtn = getChild<LLButton>("share_btn");
+	mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
+
+	mWearBtn = getChild<LLButton>("wear_btn");
+	mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this));
+
+	mPlayBtn = getChild<LLButton>("play_btn");
+	mPlayBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onPlayButtonClicked, this));
+
+	mTeleportBtn = getChild<LLButton>("teleport_btn");
+	mTeleportBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onTeleportButtonClicked, this));
+
+	mOverflowBtn = getChild<LLButton>("overflow_btn");
+	mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
+
+	mTabContainer = getChild<LLTabContainer>("Inventory Tabs");
+	mSidepanelItemInfo = getChild<LLSidepanelItemInfo>("sidepanel_item_info");
+
+	mPanelMainInventory = getChild<LLPanelMainInventory>("panel_main_inventory");
+	mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
+
+	LLButton* back_btn = mSidepanelItemInfo->getChild<LLButton>("back_btn");
+	back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
+
+	return TRUE;
+}
+
+void LLSidepanelInventory::onOpen(const LLSD& key)
+{
+	if(key.size() == 0)
+		return;
+
+	mSidepanelItemInfo->reset();
+
+	if (key.has("id"))
+	{
+		mSidepanelItemInfo->setItemID(key["id"].asUUID());
+	}
+	
+	if (key.has("object"))
+	{
+		mSidepanelItemInfo->setObjectID(key["object"].asUUID());
+	}
+
+	toggleItemInfoPanel(TRUE);
+}
+
+void LLSidepanelInventory::onInfoButtonClicked()
+{
+	LLInventoryItem *item = getSelectedItem();
+	if (item)
+	{
+		mSidepanelItemInfo->reset();
+		mSidepanelItemInfo->setItemID(item->getUUID());
+		toggleItemInfoPanel(TRUE);
+	}
+}
+
+void LLSidepanelInventory::onShareButtonClicked()
+{
+}
+
+void LLSidepanelInventory::performActionOnSelection(const std::string &action)
+{
+	LLInventoryPanel *panel = mPanelMainInventory->getActivePanel();
+	LLFolderViewItem* current_item = panel->getRootFolder()->getCurSelectedItem();
+	if (!current_item)
+	{
+		return;
+	}
+	current_item->getListener()->performAction(panel->getRootFolder(), panel->getModel(), action);
+}
+
+void LLSidepanelInventory::onWearButtonClicked()
+{
+	performActionOnSelection("wear");
+	performActionOnSelection("attach");
+}
+
+void LLSidepanelInventory::onPlayButtonClicked()
+{
+	performActionOnSelection("activate");
+}
+
+void LLSidepanelInventory::onTeleportButtonClicked()
+{
+	performActionOnSelection("teleport");
+}
+
+void LLSidepanelInventory::onOverflowButtonClicked()
+{
+}
+
+void LLSidepanelInventory::onBackButtonClicked()
+{
+	toggleItemInfoPanel(FALSE);
+	updateVerbs();
+}
+
+void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
+{
+	updateVerbs();
+}
+
+void LLSidepanelInventory::toggleItemInfoPanel(BOOL visible)
+{
+	mSidepanelItemInfo->setVisible(visible);
+	mTabContainer->setVisible(!visible);
+
+	if (visible)
+	{
+		mSidepanelItemInfo->dirty();
+		mSidepanelItemInfo->setEditMode(FALSE);
+
+		LLRect rect = getRect();
+		LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
+		mSidepanelItemInfo->reshape(new_rect.getWidth(),new_rect.getHeight());
+	}
+}
+
+void LLSidepanelInventory::updateVerbs()
+{
+	mInfoBtn->setEnabled(FALSE);
+	mShareBtn->setEnabled(FALSE);
+
+	mWearBtn->setVisible(FALSE);
+	mWearBtn->setEnabled(FALSE);
+	mPlayBtn->setVisible(FALSE);
+	mPlayBtn->setEnabled(FALSE);
+ 	mTeleportBtn->setVisible(FALSE);
+ 	mTeleportBtn->setEnabled(FALSE);
+	
+	const LLInventoryItem *item = getSelectedItem();
+	if (!item)
+		return;
+
+	mInfoBtn->setEnabled(TRUE);
+	mShareBtn->setEnabled(TRUE);
+
+	switch(item->getInventoryType())
+	{
+		case LLInventoryType::IT_WEARABLE:
+		case LLInventoryType::IT_OBJECT:
+		case LLInventoryType::IT_ATTACHMENT:
+			mWearBtn->setVisible(TRUE);
+			mWearBtn->setEnabled(TRUE);
+			break;
+		case LLInventoryType::IT_SOUND:
+		case LLInventoryType::IT_GESTURE:
+		case LLInventoryType::IT_ANIMATION:
+			mPlayBtn->setVisible(TRUE);
+			mPlayBtn->setEnabled(TRUE);
+			break;
+		case LLInventoryType::IT_LANDMARK:
+			mTeleportBtn->setVisible(TRUE);
+			mTeleportBtn->setEnabled(TRUE);
+			break;
+		default:
+			break;
+	}
+}
+
+LLInventoryItem *LLSidepanelInventory::getSelectedItem()
+{
+	LLFolderViewItem* current_item = mPanelMainInventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+	if (!current_item)
+	{
+		return NULL;
+	}
+	const LLUUID &item_id = current_item->getListener()->getUUID();
+	LLInventoryItem *item = gInventory.getItem(item_id);
+	return item;
+}
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index 62eeecc5e23..fbffb39b8c9 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -1,80 +1,86 @@
-/** 
- * @file LLSidepanelInventory.h
- * @brief Side Bar "Inventory" panel
- *
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLSIDEPANELINVENTORY_H
-#define LL_LLSIDEPANELINVENTORY_H
-
-#include "llpanel.h"
-
-class LLInventoryItem;
-class LLSidepanelObjectInfo;
-class LLTabContainer;
-class LLPanelMainInventory;
-class LLFolderViewItem;
-
-class LLSidepanelInventory : public LLPanel
-{
-public:
-	LLSidepanelInventory();
-	virtual ~LLSidepanelInventory();
-
-	/*virtual*/ BOOL postBuild();
-	/*virtual*/ void onOpen(const LLSD& key);
-
-protected:
-	LLInventoryItem *getSelectedItem();
-	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
-	void onTabSelected();
-	void toggleObjectInfoPanel(BOOL visible);
-	void updateVerbs();
-	void performActionOnSelection(const std::string &action);
-
-	LLTabContainer*				mTabContainer;
-	LLSidepanelObjectInfo*		mSidepanelObjectInfo;
-	LLPanelMainInventory*		mPanelMainInventory;
-
-	void 						onInfoButtonClicked();
-	void 						onShareButtonClicked();
-	void 						onWearButtonClicked();
-	void 						onPlayButtonClicked();
-	void 						onTeleportButtonClicked();
-	void 						onOverflowButtonClicked();
-	void 						onBackButtonClicked();
-	
-	LLButton*					mInfoBtn;
-	LLButton*					mShareBtn;
-	LLButton*					mWearBtn;
-	LLButton*					mPlayBtn;
-	LLButton*					mTeleportBtn;
-	LLButton*					mOverflowBtn;
-};
-
-#endif //LL_LLSIDEPANELINVENTORY_H
+/** 
+ * @file LLSidepanelInventory.h
+ * @brief Side Bar "Inventory" panel
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSIDEPANELINVENTORY_H
+#define LL_LLSIDEPANELINVENTORY_H
+
+#include "llpanel.h"
+
+class LLInventoryItem;
+class LLSidepanelItemInfo;
+class LLTabContainer;
+class LLPanelMainInventory;
+class LLFolderViewItem;
+
+class LLSidepanelInventory : public LLPanel
+{
+public:
+	LLSidepanelInventory();
+	virtual ~LLSidepanelInventory();
+
+	/*virtual*/ BOOL postBuild();
+	/*virtual*/ void onOpen(const LLSD& key);
+
+protected:
+	// Tracks highlighted (selected) item in inventory panel.
+	LLInventoryItem *getSelectedItem();
+	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
+	// "wear", "teleport", etc.
+	void performActionOnSelection(const std::string &action);
+
+	void toggleItemInfoPanel(BOOL visible);
+	void updateVerbs();
+
+	//
+	// UI Elements
+	//
+protected:
+	void 						onInfoButtonClicked();
+	void 						onShareButtonClicked();
+	void 						onWearButtonClicked();
+	void 						onPlayButtonClicked();
+	void 						onTeleportButtonClicked();
+	void 						onOverflowButtonClicked();
+	void 						onBackButtonClicked();
+private:
+	LLButton*					mInfoBtn;
+	LLButton*					mShareBtn;
+	LLButton*					mWearBtn;
+	LLButton*					mPlayBtn;
+	LLButton*					mTeleportBtn;
+	LLButton*					mOverflowBtn;
+
+	LLTabContainer*				mTabContainer;
+	LLSidepanelItemInfo*		mSidepanelItemInfo;
+	LLPanelMainInventory*		mPanelMainInventory;
+};
+
+#endif //LL_LLSIDEPANELINVENTORY_H
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
new file mode 100644
index 00000000000..0b00c7fbe90
--- /dev/null
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -0,0 +1,961 @@
+/** 
+ * @file llsidepaneliteminfo.cpp
+ * @brief A floater which shows an inventory item's properties.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llsidepaneliteminfo.h"
+
+#include "roles_constants.h"
+
+#include "llagent.h"
+#include "llavataractions.h"
+#include "llbutton.h"
+#include "llfloaterreg.h"
+#include "llgroupactions.h"
+#include "llinventorymodel.h"
+#include "lllineeditor.h"
+#include "llradiogroup.h"
+#include "llviewercontrol.h"
+#include "llviewerinventory.h"
+#include "llviewerobjectlist.h"
+
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLItemPropertiesObserver
+//
+// Helper class to watch for changes to the item.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLItemPropertiesObserver : public LLInventoryObserver
+{
+public:
+	LLItemPropertiesObserver(LLSidepanelItemInfo* floater)
+		: mFloater(floater)
+	{
+		gInventory.addObserver(this);
+	}
+	virtual ~LLItemPropertiesObserver()
+	{
+		gInventory.removeObserver(this);
+	}
+	virtual void changed(U32 mask);
+private:
+	LLSidepanelItemInfo* mFloater;
+};
+
+void LLItemPropertiesObserver::changed(U32 mask)
+{
+	// if there's a change we're interested in.
+	if((mask & (LLInventoryObserver::LABEL | LLInventoryObserver::INTERNAL | LLInventoryObserver::REMOVE)) != 0)
+	{
+		mFloater->dirty();
+	}
+}
+
+
+
+///----------------------------------------------------------------------------
+/// Class LLSidepanelItemInfo
+///----------------------------------------------------------------------------
+
+static LLRegisterPanelClassWrapper<LLSidepanelItemInfo> t_item_info("sidepanel_item_info");
+
+// Default constructor
+LLSidepanelItemInfo::LLSidepanelItemInfo()
+  : LLPanel(),
+	mItemID(LLUUID::null),
+	mDirty(TRUE),
+	mEditMode(FALSE)
+{
+	mPropertiesObserver = new LLItemPropertiesObserver(this);
+	
+	//LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml");
+}
+
+// Destroys the object
+LLSidepanelItemInfo::~LLSidepanelItemInfo()
+{
+	delete mPropertiesObserver;
+	mPropertiesObserver = NULL;
+}
+
+// virtual
+BOOL LLSidepanelItemInfo::postBuild()
+{
+	mEditBtn = getChild<LLButton>("edit_btn");
+	mEditBtn->setClickedCallback(boost::bind(&LLSidepanelItemInfo::onEditButtonClicked, this));
+
+	mSaveBtn = getChild<LLButton>("save_btn");
+	mSaveBtn->setClickedCallback(boost::bind(&LLSidepanelItemInfo::onSaveButtonClicked, this));
+
+	mCancelBtn = getChild<LLButton>("cancel_btn");
+	mCancelBtn->setClickedCallback(boost::bind(&LLSidepanelItemInfo::onCancelButtonClicked, this));
+
+	// build the UI
+	// item name & description
+	childSetPrevalidate("LabelItemName",&LLLineEditor::prevalidatePrintableNotPipe);
+	//getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitName,this));
+	childSetPrevalidate("LabelItemDesc",&LLLineEditor::prevalidatePrintableNotPipe);
+	//getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLSidepanelItemInfo:: onCommitDescription, this));
+
+	// Creator information
+	getChild<LLUICtrl>("BtnCreator")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickCreator,this));
+
+	// owner information
+	getChild<LLUICtrl>("BtnOwner")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickOwner,this));
+
+	// acquired date
+	// owner permissions
+	// Permissions debug text
+	// group permissions
+	// getChild<LLUICtrl>("CheckShareWithGroup")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
+
+	// everyone permissions
+	// getChild<LLUICtrl>("CheckEveryoneCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
+
+	// next owner permissions
+	// getChild<LLUICtrl>("CheckNextOwnerModify")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
+	// getChild<LLUICtrl>("CheckNextOwnerCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
+	// getChild<LLUICtrl>("CheckNextOwnerTransfer")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
+
+	// Mark for sale or not, and sale info
+	// getChild<LLUICtrl>("CheckPurchase")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));
+	// getChild<LLUICtrl>("RadioSaleType")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleType, this));
+	
+	// "Price" label for edit
+	// getChild<LLUICtrl>("Edit Cost")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));
+
+	// The UI has been built, now fill in all the values
+	refresh();
+
+	return TRUE;
+}
+
+void LLSidepanelItemInfo::setVisible(BOOL visible)
+{
+	if (visible)
+	{
+		mDirty = TRUE;
+	}
+	LLPanel::setVisible(visible);
+}
+
+void LLSidepanelItemInfo::setObjectID(const LLUUID& object_id)
+{
+	mObjectID = object_id;
+}
+
+void LLSidepanelItemInfo::setItemID(const LLUUID& item_id)
+{
+	mItemID = item_id;
+}
+
+void LLSidepanelItemInfo::setEditMode(BOOL edit)
+{
+	mEditMode = edit;
+	mDirty = TRUE;
+}
+
+void LLSidepanelItemInfo::reset()
+{
+	mObjectID = LLUUID::null;
+	mItemID = LLUUID::null;
+	mDirty = TRUE;
+}
+
+void LLSidepanelItemInfo::refresh()
+{
+	LLInventoryItem* item = findItem();
+	if(item)
+	{
+		refreshFromItem(item);
+		updateVerbs();
+	}
+
+	if (!mEditMode || !item)
+	{
+		//RN: it is possible that the container object is in the middle of an inventory refresh
+		// causing findItem() to fail, so just temporarily disable everything
+		
+		mDirty = TRUE;
+
+		const std::string no_item_names[]={
+			"LabelItemName",
+			"LabelItemDesc",
+			"LabelCreatorName",
+			"LabelOwnerName",
+			"CheckOwnerModify",
+			"CheckOwnerCopy",
+			"CheckOwnerTransfer",
+			"CheckShareWithGroup",
+			"CheckEveryoneCopy",
+			"CheckNextOwnerModify",
+			"CheckNextOwnerCopy",
+			"CheckNextOwnerTransfer",
+			"CheckPurchase",
+			"RadioSaleType",
+			"Edit Cost"
+		};
+
+		for(size_t t=0; t<LL_ARRAY_SIZE(no_item_names); ++t)
+		{
+			childSetEnabled(no_item_names[t],false);
+		}
+		
+		const std::string hide_names[]={
+			"BaseMaskDebug",
+			"OwnerMaskDebug",
+			"GroupMaskDebug",
+			"EveryoneMaskDebug",
+			"NextMaskDebug"
+		};
+		for(size_t t=0; t<LL_ARRAY_SIZE(hide_names); ++t)
+		{
+			childSetVisible(hide_names[t],false);
+		}
+	}
+
+	if (!item)
+	{
+		const std::string no_edit_mode_names[]={
+			"BtnCreator",
+			"BtnOwner",
+		};
+		for(size_t t=0; t<LL_ARRAY_SIZE(no_edit_mode_names); ++t)
+		{
+			childSetEnabled(no_edit_mode_names[t],false);
+		}
+	}
+
+	updateVerbs();
+}
+
+void LLSidepanelItemInfo::draw()
+{
+	if (mDirty)
+	{
+		// RN: clear dirty first because refresh can set dirty to TRUE
+		mDirty = FALSE;
+		refresh();
+	}
+
+	LLPanel::draw();
+}
+
+void LLSidepanelItemInfo::dirty()
+{
+	mDirty = TRUE;
+}
+
+void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* 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);
+	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();
+
+	// You need permission to modify the object to modify an inventory
+	// item in it.
+	LLViewerObject* object = NULL;
+	if(!mObjectID.isNull()) object = gObjectList.findObject(mObjectID);
+	BOOL is_obj_modify = TRUE;
+	if(object)
+	{
+		is_obj_modify = object->permOwnerModify();
+	}
+
+	//////////////////////
+	// ITEM NAME & DESC //
+	//////////////////////
+	BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY, perm,
+											   GP_OBJECT_MANIPULATE)
+		&& is_obj_modify && is_complete;
+
+	childSetEnabled("LabelItemNameTitle",TRUE);
+	childSetEnabled("LabelItemName",is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards
+	childSetText("LabelItemName",item->getName());
+	childSetEnabled("LabelItemDescTitle",TRUE);
+	childSetEnabled("LabelItemDesc",is_modifiable);
+	childSetVisible("IconLocked",!is_modifiable);
+	childSetText("LabelItemDesc",item->getDescription());
+
+	//////////////////
+	// CREATOR NAME //
+	//////////////////
+	if(!gCacheName) return;
+	if(!gAgent.getRegion()) return;
+
+	if (item->getCreatorUUID().notNull())
+	{
+		std::string name;
+		gCacheName->getFullName(item->getCreatorUUID(), name);
+		childSetEnabled("BtnCreator",TRUE);
+		childSetEnabled("LabelCreatorTitle",TRUE);
+		childSetEnabled("LabelCreatorName",TRUE);
+		childSetText("LabelCreatorName",name);
+	}
+	else
+	{
+		childSetEnabled("BtnCreator",FALSE);
+		childSetEnabled("LabelCreatorTitle",FALSE);
+		childSetEnabled("LabelCreatorName",FALSE);
+		childSetText("LabelCreatorName",getString("unknown"));
+	}
+
+	////////////////
+	// OWNER NAME //
+	////////////////
+	if(perm.isOwned())
+	{
+		std::string name;
+		if (perm.isGroupOwned())
+		{
+			gCacheName->getGroupName(perm.getGroup(), name);
+		}
+		else
+		{
+			gCacheName->getFullName(perm.getOwner(), name);
+		}
+		childSetEnabled("BtnOwner",TRUE);
+		childSetEnabled("LabelOwnerTitle",TRUE);
+		childSetEnabled("LabelOwnerName",TRUE);
+		childSetText("LabelOwnerName",name);
+	}
+	else
+	{
+		childSetEnabled("BtnOwner",FALSE);
+		childSetEnabled("LabelOwnerTitle",FALSE);
+		childSetEnabled("LabelOwnerName",FALSE);
+		childSetText("LabelOwnerName",getString("public"));
+	}
+	
+	//////////////////
+	// ACQUIRE DATE //
+	//////////////////
+	
+	time_t time_utc = item->getCreationDate();
+	if (0 == time_utc)
+	{
+		childSetText("LabelAcquiredDate",getString("unknown"));
+	}
+	else
+	{
+		std::string timeStr = getString("acquiredDate");
+		LLSD substitution;
+		substitution["datetime"] = (S32) time_utc;
+		LLStringUtil::format (timeStr, substitution);
+		childSetText ("LabelAcquiredDate", timeStr);
+	}
+
+	///////////////////////
+	// OWNER PERMISSIONS //
+	///////////////////////
+	if(can_agent_manipulate)
+	{
+		childSetText("OwnerLabel",getString("you_can"));
+	}
+	else
+	{
+		childSetText("OwnerLabel",getString("owner_can"));
+	}
+
+	U32 base_mask		= perm.getMaskBase();
+	U32 owner_mask		= perm.getMaskOwner();
+	U32 group_mask		= perm.getMaskGroup();
+	U32 everyone_mask	= perm.getMaskEveryone();
+	U32 next_owner_mask	= perm.getMaskNextOwner();
+
+	childSetEnabled("OwnerLabel",TRUE);
+	childSetEnabled("CheckOwnerModify",FALSE);
+	childSetValue("CheckOwnerModify",LLSD((BOOL)(owner_mask & PERM_MODIFY)));
+	childSetEnabled("CheckOwnerCopy",FALSE);
+	childSetValue("CheckOwnerCopy",LLSD((BOOL)(owner_mask & PERM_COPY)));
+	childSetEnabled("CheckOwnerTransfer",FALSE);
+	childSetValue("CheckOwnerTransfer",LLSD((BOOL)(owner_mask & PERM_TRANSFER)));
+
+	///////////////////////
+	// DEBUG PERMISSIONS //
+	///////////////////////
+
+	if( gSavedSettings.getBOOL("DebugPermissions") )
+	{
+		BOOL slam_perm 			= FALSE;
+		BOOL overwrite_group	= FALSE;
+		BOOL overwrite_everyone	= FALSE;
+
+		if (item->getType() == LLAssetType::AT_OBJECT)
+		{
+			U32 flags = item->getFlags();
+			slam_perm 			= flags & LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM;
+			overwrite_everyone	= flags & LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
+			overwrite_group		= flags & LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
+		}
+		
+		std::string perm_string;
+
+		perm_string = "B: ";
+		perm_string += mask_to_string(base_mask);
+		childSetText("BaseMaskDebug",perm_string);
+		childSetVisible("BaseMaskDebug",TRUE);
+		
+		perm_string = "O: ";
+		perm_string += mask_to_string(owner_mask);
+		childSetText("OwnerMaskDebug",perm_string);
+		childSetVisible("OwnerMaskDebug",TRUE);
+		
+		perm_string = "G";
+		perm_string += overwrite_group ? "*: " : ": ";
+		perm_string += mask_to_string(group_mask);
+		childSetText("GroupMaskDebug",perm_string);
+		childSetVisible("GroupMaskDebug",TRUE);
+		
+		perm_string = "E";
+		perm_string += overwrite_everyone ? "*: " : ": ";
+		perm_string += mask_to_string(everyone_mask);
+		childSetText("EveryoneMaskDebug",perm_string);
+		childSetVisible("EveryoneMaskDebug",TRUE);
+		
+		perm_string = "N";
+		perm_string += slam_perm ? "*: " : ": ";
+		perm_string += mask_to_string(next_owner_mask);
+		childSetText("NextMaskDebug",perm_string);
+		childSetVisible("NextMaskDebug",TRUE);
+	}
+	else
+	{
+		childSetVisible("BaseMaskDebug",FALSE);
+		childSetVisible("OwnerMaskDebug",FALSE);
+		childSetVisible("GroupMaskDebug",FALSE);
+		childSetVisible("EveryoneMaskDebug",FALSE);
+		childSetVisible("NextMaskDebug",FALSE);
+	}
+
+	/////////////
+	// SHARING //
+	/////////////
+
+	// Check for ability to change values.
+	if (is_link || cannot_restrict_permissions)
+	{
+		childSetEnabled("CheckShareWithGroup",FALSE);
+		childSetEnabled("CheckEveryoneCopy",FALSE);
+	}
+	else if (is_obj_modify && can_agent_manipulate)
+	{
+		childSetEnabled("CheckShareWithGroup",TRUE);
+		childSetEnabled("CheckEveryoneCopy",(owner_mask & PERM_COPY) && (owner_mask & PERM_TRANSFER));
+	}
+	else
+	{
+		childSetEnabled("CheckShareWithGroup",FALSE);
+		childSetEnabled("CheckEveryoneCopy",FALSE);
+	}
+
+	// Set values.
+	BOOL is_group_copy = (group_mask & PERM_COPY) ? TRUE : FALSE;
+	BOOL is_group_modify = (group_mask & PERM_MODIFY) ? TRUE : FALSE;
+	BOOL is_group_move = (group_mask & PERM_MOVE) ? TRUE : FALSE;
+
+	if (is_group_copy && is_group_modify && is_group_move)
+	{
+		childSetValue("CheckShareWithGroup",LLSD((BOOL)TRUE));
+
+		LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
+		if(ctl)
+		{
+			ctl->setTentative(FALSE);
+		}
+	}
+	else if (!is_group_copy && !is_group_modify && !is_group_move)
+	{
+		childSetValue("CheckShareWithGroup",LLSD((BOOL)FALSE));
+		LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
+		if(ctl)
+		{
+			ctl->setTentative(FALSE);
+		}
+	}
+	else
+	{
+		LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
+		if(ctl)
+		{
+			ctl->setTentative(TRUE);
+			ctl->set(TRUE);
+		}
+	}
+	
+	childSetValue("CheckEveryoneCopy",LLSD((BOOL)(everyone_mask & PERM_COPY)));
+
+	///////////////
+	// SALE INFO //
+	///////////////
+
+	const LLSaleInfo& sale_info = item->getSaleInfo();
+	BOOL is_for_sale = sale_info.isForSale();
+	// Check for ability to change values.
+	if (is_obj_modify && can_agent_sell 
+		&& gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE))
+	{
+		childSetEnabled("SaleLabel",is_complete);
+		childSetEnabled("CheckPurchase",is_complete);
+
+		childSetEnabled("NextOwnerLabel",TRUE);
+		childSetEnabled("CheckNextOwnerModify",(base_mask & PERM_MODIFY) && !cannot_restrict_permissions);
+		childSetEnabled("CheckNextOwnerCopy",(base_mask & PERM_COPY) && !cannot_restrict_permissions);
+		childSetEnabled("CheckNextOwnerTransfer",(next_owner_mask & PERM_COPY) && !cannot_restrict_permissions);
+
+		childSetEnabled("RadioSaleType",is_complete && is_for_sale);
+		childSetEnabled("TextPrice",is_complete && is_for_sale);
+		childSetEnabled("Edit Cost",is_complete && is_for_sale);
+	}
+	else
+	{
+		childSetEnabled("SaleLabel",FALSE);
+		childSetEnabled("CheckPurchase",FALSE);
+
+		childSetEnabled("NextOwnerLabel",FALSE);
+		childSetEnabled("CheckNextOwnerModify",FALSE);
+		childSetEnabled("CheckNextOwnerCopy",FALSE);
+		childSetEnabled("CheckNextOwnerTransfer",FALSE);
+
+		childSetEnabled("RadioSaleType",FALSE);
+		childSetEnabled("TextPrice",FALSE);
+		childSetEnabled("Edit Cost",FALSE);
+	}
+
+	// Set values.
+	childSetValue("CheckPurchase", is_for_sale);
+	childSetEnabled("combobox sale copy", is_for_sale);
+	childSetEnabled("Edit Cost", is_for_sale);
+	childSetValue("CheckNextOwnerModify",LLSD(BOOL(next_owner_mask & PERM_MODIFY)));
+	childSetValue("CheckNextOwnerCopy",LLSD(BOOL(next_owner_mask & PERM_COPY)));
+	childSetValue("CheckNextOwnerTransfer",LLSD(BOOL(next_owner_mask & PERM_TRANSFER)));
+
+	LLRadioGroup* radioSaleType = getChild<LLRadioGroup>("RadioSaleType");
+	if (is_for_sale)
+	{
+		radioSaleType->setSelectedIndex((S32)sale_info.getSaleType() - 1);
+		S32 numerical_price;
+		numerical_price = sale_info.getSalePrice();
+		childSetText("Edit Cost",llformat("%d",numerical_price));
+	}
+	else
+	{
+		radioSaleType->setSelectedIndex(-1);
+		childSetText("Edit Cost",llformat("%d",0));
+	}
+}
+
+void LLSidepanelItemInfo::onClickCreator()
+{
+	LLInventoryItem* item = findItem();
+	if(!item) return;
+	if(!item->getCreatorUUID().isNull())
+	{
+		LLAvatarActions::showProfile(item->getCreatorUUID());
+	}
+}
+
+// static
+void LLSidepanelItemInfo::onClickOwner()
+{
+	LLInventoryItem* item = findItem();
+	if(!item) return;
+	if(item->getPermissions().isGroupOwned())
+	{
+		LLGroupActions::show(item->getPermissions().getGroup());
+	}
+	else
+	{
+		LLAvatarActions::showProfile(item->getPermissions().getOwner());
+	}
+}
+
+// static
+void LLSidepanelItemInfo::onCommitName()
+{
+	//llinfos << "LLSidepanelItemInfo::onCommitName()" << llendl;
+	LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	if(!item)
+	{
+		return;
+	}
+	LLLineEditor* labelItemName = getChild<LLLineEditor>("LabelItemName");
+
+	if(labelItemName&&
+	   (item->getName() != labelItemName->getText()) && 
+	   (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE)) )
+	{
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+		new_item->rename(labelItemName->getText());
+		if(mObjectID.isNull())
+		{
+			new_item->updateServer(FALSE);
+			gInventory.updateItem(new_item);
+			gInventory.notifyObservers();
+		}
+		else
+		{
+			LLViewerObject* object = gObjectList.findObject(mObjectID);
+			if(object)
+			{
+				object->updateInventory(
+					new_item,
+					TASK_INVENTORY_ITEM_KEY,
+					false);
+			}
+		}
+	}
+}
+
+void LLSidepanelItemInfo::onCommitDescription()
+{
+	//llinfos << "LLSidepanelItemInfo::onCommitDescription()" << llendl;
+	LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	if(!item) return;
+
+	LLLineEditor* labelItemDesc = getChild<LLLineEditor>("LabelItemDesc");
+	if(!labelItemDesc)
+	{
+		return;
+	}
+	if((item->getDescription() != labelItemDesc->getText()) && 
+	   (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE)))
+	{
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+
+		new_item->setDescription(labelItemDesc->getText());
+		if(mObjectID.isNull())
+		{
+			new_item->updateServer(FALSE);
+			gInventory.updateItem(new_item);
+			gInventory.notifyObservers();
+		}
+		else
+		{
+			LLViewerObject* object = gObjectList.findObject(mObjectID);
+			if(object)
+			{
+				object->updateInventory(
+					new_item,
+					TASK_INVENTORY_ITEM_KEY,
+					false);
+			}
+		}
+	}
+}
+
+// static
+void LLSidepanelItemInfo::onCommitPermissions()
+{
+	//llinfos << "LLSidepanelItemInfo::onCommitPermissions()" << llendl;
+	LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	if(!item) return;
+	LLPermissions perm(item->getPermissions());
+
+
+	LLCheckBoxCtrl* CheckShareWithGroup = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
+
+	if(CheckShareWithGroup)
+	{
+		perm.setGroupBits(gAgent.getID(), gAgent.getGroupID(),
+						CheckShareWithGroup->get(),
+						PERM_MODIFY | PERM_MOVE | PERM_COPY);
+	}
+	LLCheckBoxCtrl* CheckEveryoneCopy = getChild<LLCheckBoxCtrl>("CheckEveryoneCopy");
+	if(CheckEveryoneCopy)
+	{
+		perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(),
+						 CheckEveryoneCopy->get(), PERM_COPY);
+	}
+
+	LLCheckBoxCtrl* CheckNextOwnerModify = getChild<LLCheckBoxCtrl>("CheckNextOwnerModify");
+	if(CheckNextOwnerModify)
+	{
+		perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
+							CheckNextOwnerModify->get(), PERM_MODIFY);
+	}
+	LLCheckBoxCtrl* CheckNextOwnerCopy = getChild<LLCheckBoxCtrl>("CheckNextOwnerCopy");
+	if(CheckNextOwnerCopy)
+	{
+		perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
+							CheckNextOwnerCopy->get(), PERM_COPY);
+	}
+	LLCheckBoxCtrl* CheckNextOwnerTransfer = getChild<LLCheckBoxCtrl>("CheckNextOwnerTransfer");
+	if(CheckNextOwnerTransfer)
+	{
+		perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
+							CheckNextOwnerTransfer->get(), PERM_TRANSFER);
+	}
+	if(perm != item->getPermissions()
+		&& item->isComplete())
+	{
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+		new_item->setPermissions(perm);
+		U32 flags = new_item->getFlags();
+		// If next owner permissions have changed (and this is an object)
+		// then set the slam permissions flag so that they are applied on rez.
+		if((perm.getMaskNextOwner()!=item->getPermissions().getMaskNextOwner())
+		   && (item->getType() == LLAssetType::AT_OBJECT))
+		{
+			flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM;
+		}
+		// If everyone permissions have changed (and this is an object)
+		// then set the overwrite everyone permissions flag so they
+		// are applied on rez.
+		if ((perm.getMaskEveryone()!=item->getPermissions().getMaskEveryone())
+			&& (item->getType() == LLAssetType::AT_OBJECT))
+		{
+			flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
+		}
+		// If group permissions have changed (and this is an object)
+		// then set the overwrite group permissions flag so they
+		// are applied on rez.
+		if ((perm.getMaskGroup()!=item->getPermissions().getMaskGroup())
+			&& (item->getType() == LLAssetType::AT_OBJECT))
+		{
+			flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
+		}
+		new_item->setFlags(flags);
+		if(mObjectID.isNull())
+		{
+			new_item->updateServer(FALSE);
+			gInventory.updateItem(new_item);
+			gInventory.notifyObservers();
+		}
+		else
+		{
+			LLViewerObject* object = gObjectList.findObject(mObjectID);
+			if(object)
+			{
+				object->updateInventory(
+					new_item,
+					TASK_INVENTORY_ITEM_KEY,
+					false);
+			}
+		}
+	}
+	else
+	{
+		// need to make sure we don't just follow the click
+		refresh();
+	}
+}
+
+// static
+void LLSidepanelItemInfo::onCommitSaleInfo()
+{
+	//llinfos << "LLSidepanelItemInfo::onCommitSaleInfo()" << llendl;
+	updateSaleInfo();
+}
+
+// static
+void LLSidepanelItemInfo::onCommitSaleType()
+{
+	//llinfos << "LLSidepanelItemInfo::onCommitSaleType()" << llendl;
+	updateSaleInfo();
+}
+
+void LLSidepanelItemInfo::updateSaleInfo()
+{
+	LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	if(!item) return;
+	LLSaleInfo sale_info(item->getSaleInfo());
+	if(!gAgent.allowOperation(PERM_TRANSFER, item->getPermissions(), GP_OBJECT_SET_SALE))
+	{
+		childSetValue("CheckPurchase",LLSD((BOOL)FALSE));
+	}
+
+	if((BOOL)childGetValue("CheckPurchase"))
+	{
+		// turn on sale info
+		LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_COPY;
+	
+		LLRadioGroup* RadioSaleType = getChild<LLRadioGroup>("RadioSaleType");
+		if(RadioSaleType)
+		{
+			switch (RadioSaleType->getSelectedIndex())
+			{
+			case 0:
+				sale_type = LLSaleInfo::FS_ORIGINAL;
+				break;
+			case 1:
+				sale_type = LLSaleInfo::FS_COPY;
+				break;
+			case 2:
+				sale_type = LLSaleInfo::FS_CONTENTS;
+				break;
+			default:
+				sale_type = LLSaleInfo::FS_COPY;
+				break;
+			}
+		}
+
+		if (sale_type == LLSaleInfo::FS_COPY 
+			&& !gAgent.allowOperation(PERM_COPY, item->getPermissions(), 
+									  GP_OBJECT_SET_SALE))
+		{
+			sale_type = LLSaleInfo::FS_ORIGINAL;
+		}
+
+	     
+		
+		S32 price = -1;
+		price =  getChild<LLUICtrl>("Edit Cost")->getValue().asInteger();;
+
+		// Invalid data - turn off the sale
+		if (price < 0)
+		{
+			sale_type = LLSaleInfo::FS_NOT;
+			price = 0;
+		}
+
+		sale_info.setSaleType(sale_type);
+		sale_info.setSalePrice(price);
+	}
+	else
+	{
+		sale_info.setSaleType(LLSaleInfo::FS_NOT);
+	}
+	if(sale_info != item->getSaleInfo()
+		&& item->isComplete())
+	{
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+
+		// Force an update on the sale price at rez
+		if (item->getType() == LLAssetType::AT_OBJECT)
+		{
+			U32 flags = new_item->getFlags();
+			flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_SALE;
+			new_item->setFlags(flags);
+		}
+
+		new_item->setSaleInfo(sale_info);
+		if(mObjectID.isNull())
+		{
+			// This is in the agent's inventory.
+			new_item->updateServer(FALSE);
+			gInventory.updateItem(new_item);
+			gInventory.notifyObservers();
+		}
+		else
+		{
+			// This is in an object's contents.
+			LLViewerObject* object = gObjectList.findObject(mObjectID);
+			if(object)
+			{
+				object->updateInventory(
+					new_item,
+					TASK_INVENTORY_ITEM_KEY,
+					false);
+			}
+		}
+	}
+	else
+	{
+		// need to make sure we don't just follow the click
+		refresh();
+	}
+}
+
+LLInventoryItem* LLSidepanelItemInfo::findItem() const
+{
+	LLInventoryItem* item = NULL;
+	if(mObjectID.isNull())
+	{
+		// it is in agent inventory
+		item = gInventory.getItem(mItemID);
+	}
+	else
+	{
+		LLViewerObject* object = gObjectList.findObject(mObjectID);
+		if(object)
+		{
+			item = (LLInventoryItem*)object->getInventoryObject(mItemID);
+		}
+	}
+	return item;
+}
+
+void LLSidepanelItemInfo::updateVerbs()
+{
+	mEditBtn->setVisible(!mEditMode);
+	mSaveBtn->setVisible(mEditMode);
+	mCancelBtn->setVisible(mEditMode);
+
+	const LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	if (item)
+	{
+		const LLPermissions& perm = item->getPermissions();
+		BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY, perm,
+												   GP_OBJECT_MANIPULATE);
+		mEditBtn->setEnabled(is_modifiable);
+	}
+}
+
+void LLSidepanelItemInfo::onEditButtonClicked()
+{
+	setEditMode(TRUE);
+	refresh();
+	updateVerbs();
+}
+
+void LLSidepanelItemInfo::onSaveButtonClicked()
+{
+	onCommitName();
+	onCommitDescription();
+	onCommitPermissions();
+	onCommitSaleInfo();
+	onCommitSaleType();
+
+	setEditMode(FALSE);
+	refresh();
+	updateVerbs();
+}
+
+void LLSidepanelItemInfo::onCancelButtonClicked()
+{
+	setEditMode(FALSE);
+	refresh();
+	updateVerbs();
+}
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h
new file mode 100644
index 00000000000..21ca63894cf
--- /dev/null
+++ b/indra/newview/llsidepaneliteminfo.h
@@ -0,0 +1,107 @@
+/** 
+ * @file llsidepaneliteminfo.h
+ * @brief A panel which shows an inventory item's properties.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSIDEPANELITEMINFO_H
+#define LL_LLSIDEPANELITEMINFO_H
+
+#include <map>
+#include "llmultifloater.h"
+#include "lliconctrl.h"
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLSidepanelItemInfo
+// Object properties for inventory side panel.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLButton;
+class LLInventoryItem;
+class LLItemPropertiesObserver;
+
+class LLSidepanelItemInfo : public LLPanel
+{
+public:
+	LLSidepanelItemInfo();
+	virtual ~LLSidepanelItemInfo();
+	
+	/*virtual*/ BOOL postBuild();
+	/*virtual*/ void setVisible(BOOL visible);
+	/*virtual*/ void draw();
+
+	void setObjectID(const LLUUID& object_id);
+	void setItemID(const LLUUID& item_id);
+	void setEditMode(BOOL edit);
+
+	void reset();
+	void dirty();
+
+protected:
+	LLInventoryItem* findItem() const;
+	void refresh();
+	void refreshFromItem(LLInventoryItem* item);
+	void updateVerbs();
+
+private:
+	// The item id of the inventory item in question.
+	LLUUID mItemID;
+
+	// mObjectID will have a value if it is associated with a task in
+	// the world, and will be == LLUUID::null if it's in the agent
+	// inventory.
+	LLUUID mObjectID;
+
+	BOOL mDirty;
+	BOOL mEditMode;
+
+	LLItemPropertiesObserver* mPropertiesObserver;
+	
+	//
+	// UI Elements
+	// 
+protected:
+	void 						onEditButtonClicked();
+	void 						onSaveButtonClicked();
+	void 						onCancelButtonClicked();
+	void 						onClickCreator();
+	void 						onClickOwner();
+	void 						onCommitName();
+	void 						onCommitDescription();
+	void 						onCommitPermissions();
+	void 						onCommitSaleInfo();
+	void 						onCommitSaleType();
+	void 						updateSaleInfo();
+private:
+	LLButton*					mEditBtn;
+	LLButton*					mSaveBtn;
+	LLButton*					mCancelBtn;
+};
+
+#endif // LL_LLSIDEPANELITEMINFO_H
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index d0c3cdfafcf..0b4a0e1e24c 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -1,122 +1,122 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- background_visible="true"
- follows="all"
- height="400"
- label="Things"
- layout="topleft"
- min_height="350"
- min_width="240"
- name="objects panel"
- width="333">
-    <tab_container
-     follows="all"
-     height="390"
-     layout="topleft"
-     left="9"
-     name="Inventory Tabs"
-     tab_position="top"
-     top="0"
-     width="313"
-	 tab_height="0"
-	 visible="true">
-	 <panel
-	      class="panel_main_inventory"
-		  filename="panel_main_inventory.xml"
-		  follows="all"
-		  layout="topleft"
-		  left="0"
-		  name="panel_main_inventory"
-		  top="15"
-		  label=""
-		  height="330"
-		  width="467">
-    <panel
-     height="25"
-     layout="bottomright"
-     left="0"
-     help_topic="objects_button_tab"
-     name="button_panel"
-	 bottom="0"
-     width="313">
-        <button
-         enabled="true"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Info"
-         layout="topleft"
-         left="0"
-         name="info_btn"
-         top="0"
-         width="60" />
-        <button
-         enabled="true"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Share"
-         layout="topleft"
-         left_pad="5"
-         name="share_btn"
-         top="0"
-         width="60" />
-        <button
-         enabled="false"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Wear"
-         layout="topleft"
-         left="130"
-         name="wear_btn"
-         top="0"
-         width="60" />
-        <button
-         enabled="false"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Play"
-         layout="topleft"
-         name="play_btn"
-         left="130"
-         top="0"
-         width="50" />
-        <button
-         enabled="false"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Teleport"
-         layout="topleft"
-         left="130"
-         name="teleport_btn"
-         top="0"
-         width="77" />
-        <button
-         follows="bottom|right"
-         font="SansSerifSmallBold"
-         height="25"
-         label="v"
-         layout="topleft"
-         name="overflow_btn"
-         right="-10"
-         top="0"
-         width="30" />
-    </panel>
-    </panel>
-   </tab_container>
-
-    <panel
-     class="sidepanel_object_info"
-     filename="sidepanel_object_info.xml"
-     follows="all"
-     height="360"
-     layout="topleft"
-     left="0"
-     help_topic="objects_info_tab"
-     name="sidepanel_object_info"
-     top="30"
-     visible="false" />
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="400"
+ label="Things"
+ layout="topleft"
+ min_height="350"
+ min_width="240"
+ name="objects panel"
+ width="333">
+    <tab_container
+     follows="all"
+     height="390"
+     layout="topleft"
+     left="9"
+     name="Inventory Tabs"
+     tab_position="top"
+     top="0"
+     width="313"
+	 tab_height="0"
+	 visible="true">
+	 <panel
+	      class="panel_main_inventory"
+		  filename="panel_main_inventory.xml"
+		  follows="all"
+		  layout="topleft"
+		  left="0"
+		  name="panel_main_inventory"
+		  top="15"
+		  label=""
+		  height="330"
+		  width="467">
+    <panel
+     height="25"
+     layout="bottomright"
+     left="0"
+     help_topic="item_button_tab"
+     name="button_panel"
+	 bottom="0"
+     width="313">
+        <button
+         enabled="true"
+         follows="bottom|left"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Info"
+         layout="topleft"
+         left="0"
+         name="info_btn"
+         top="0"
+         width="60" />
+        <button
+         enabled="true"
+         follows="bottom|left"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Share"
+         layout="topleft"
+         left_pad="5"
+         name="share_btn"
+         top="0"
+         width="60" />
+        <button
+         enabled="false"
+         follows="bottom|left"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Wear"
+         layout="topleft"
+         left="130"
+         name="wear_btn"
+         top="0"
+         width="60" />
+        <button
+         enabled="false"
+         follows="bottom|left"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Play"
+         layout="topleft"
+         name="play_btn"
+         left="130"
+         top="0"
+         width="50" />
+        <button
+         enabled="false"
+         follows="bottom|left"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Teleport"
+         layout="topleft"
+         left="130"
+         name="teleport_btn"
+         top="0"
+         width="77" />
+        <button
+         follows="bottom|right"
+         font="SansSerifSmallBold"
+         height="25"
+         label="v"
+         layout="topleft"
+         name="overflow_btn"
+         right="-10"
+         top="0"
+         width="30" />
+    </panel>
+    </panel>
+   </tab_container>
+
+    <panel
+     class="sidepanel_item_info"
+     filename="sidepanel_item_info.xml"
+     follows="all"
+     height="360"
+     layout="topleft"
+     left="0"
+     help_topic="item_info_tab"
+     name="sidepanel_item_info"
+     top="30"
+     visible="false" />
+</panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
new file mode 100644
index 00000000000..6a6e22c2e65
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -0,0 +1,531 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ auto_tile="true"
+ height="560"
+ layout="topleft"
+ name="item properties"
+ help_topic="item_properties"
+ save_rect="true"
+ title="Inventory Item Properties"
+ width="325">
+    <panel.string
+     name="unknown">
+        (unknown)
+    </panel.string>
+    <panel.string
+     name="public">
+        (public)
+    </panel.string>
+    <panel.string
+     name="you_can">
+        You can:
+    </panel.string>
+    <panel.string
+     name="owner_can">
+        Owner can:
+    </panel.string>
+    <panel.string
+     name="acquiredDate">
+        [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+    </panel.string>
+    <icon
+     follows="top|right"
+     height="18"
+     image_name="Lock"
+     layout="topleft"
+     right="-50"
+     mouse_opaque="true"
+     name="IconLocked"
+     top="4"
+     width="18" />
+    <button
+     follows="top|right"
+     height="25"
+     image_overlay="BackArrow_Off"
+     layout="topleft"
+     name="back_btn"
+     picture_style="true"
+     right="-5"
+     tab_stop="false"
+     top="0"
+     width="25" />
+
+    <tab_container
+     follows="all"
+     height="450"
+     layout="topleft"
+     left="10"
+     name="tabs"
+     tab_min_width="70"
+     tab_height="0"
+     tab_position="top"
+     top_pad="10"
+     width="313">
+        <panel
+         follows="all"
+         height="500"
+         label=""
+         layout="topleft"
+         left="0"
+         help_topic="people_nearby_tab"
+         name="nearby_panel"
+         top="0"
+		 border="1"
+         width="313">
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left="5"
+     name="LabelItemNameTitle"
+     top="5"
+     width="78">
+        Name:
+    </text>
+    <line_editor
+     border_style="line"
+     border_thickness="1"
+     follows="left|top|right"
+     height="16"
+     layout="topleft"
+     left_delta="78"
+     max_length="63"
+     name="LabelItemName"
+     top_delta="0"
+     width="225" />
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left="5"
+     name="LabelItemDescTitle"
+     top_delta="20"
+     width="78">
+        Description:
+    </text>
+    <line_editor
+     border_style="line"
+     border_thickness="1"
+     follows="left|top|right"
+     height="16"
+     layout="topleft"
+     left_delta="78"
+     max_length="127"
+     name="LabelItemDesc"
+     top_delta="0"
+     width="225" />
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="16"
+     layout="topleft"
+     left="10"
+     name="LabelCreatorTitle"
+     top="65"
+     width="78">
+        Creator:
+    </text>
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="16"
+     layout="topleft"
+     left_delta="78"
+     name="LabelCreatorName"
+     top_delta="0"
+     width="200">
+        Nicole Linden
+    </text>
+    <button
+     follows="top|right"
+     font="SansSerifSmall"
+     height="16"
+     label="Profile..."
+     layout="topleft"
+     left_delta="144"
+     name="BtnCreator"
+     top_delta="0"
+     width="78" />
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="16"
+     layout="topleft"
+     left="10"
+     name="LabelOwnerTitle"
+     top="85"
+     width="78">
+        Owner:
+    </text>
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="16"
+     layout="topleft"
+     left_delta="78"
+     name="LabelOwnerName"
+     top_delta="0"
+     width="200">
+        Thrax Linden
+    </text>
+    <button
+     follows="top|right"
+     font="SansSerifSmall"
+     height="16"
+     label="Profile..."
+     layout="topleft"
+     left_delta="144"
+     name="BtnOwner"
+     top_delta="0"
+     width="78" />
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="16"
+     layout="topleft"
+     left="10"
+     name="LabelAcquiredTitle"
+     top="105"
+     width="78">
+        Acquired:
+    </text>
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="16"
+     layout="topleft"
+     left_delta="78"
+     name="LabelAcquiredDate"
+     top_delta="0"
+     width="252">
+        Wed May 24 12:50:46 2006
+    </text>
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left="10"
+     name="OwnerLabel"
+     top="125"
+     width="78">
+        You:
+    </text>
+    <check_box
+     height="16"
+     label="Edit"
+     layout="topleft"
+     left_pad="5"
+     name="CheckOwnerModify"
+     top_delta="0"
+     width="78" />
+    <check_box
+     height="16"
+     label="Copy"
+     layout="topleft"
+     left_delta="0"
+     name="CheckOwnerCopy"
+     top_pad="5"
+     width="88" />
+    <check_box
+     height="16"
+     label="Resell"
+     layout="topleft"
+     left_delta="0"
+     name="CheckOwnerTransfer"
+     top_pad="5"
+     width="106" />
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left="10"
+     name="AnyoneLabel"
+     top_pad="5"
+     width="78">
+        Anyone:
+    </text>
+    <check_box
+     height="16"
+     label="Copy"
+     layout="topleft"
+     left_pad="5"
+     name="CheckEveryoneCopy"
+     top_delta="0"
+     width="130" />
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left="10"
+     name="GroupLabel"
+     top_pad="5"
+     width="78">
+        Group:
+    </text>
+    <check_box
+     height="16"
+     label="Share"
+     layout="topleft"
+     left_pad="5"
+     name="CheckShareWithGroup"
+     top_delta="5"
+     width="106" />
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left="10"
+     name="NextOwnerLabel"
+     top_pad="5"
+     width="78">
+        Next owner:
+    </text>
+    <check_box
+     height="16"
+     label="Edit"
+     layout="topleft"
+     left_pad="5"
+     name="CheckNextOwnerModify"
+     top_delta="0"
+     width="78" />
+    <check_box
+     height="16"
+     label="Copy"
+     layout="topleft"
+     left_delta="0"
+     name="CheckNextOwnerCopy"
+     top_pad="5"
+     width="88" />
+    <check_box
+     height="16"
+     label="Resell"
+     layout="topleft"
+     left_delta="0"
+     name="CheckNextOwnerTransfer"
+     top_pad="5"
+     width="106" />
+    <check_box
+     height="16"
+     label="For Sale"
+     layout="topleft"
+     left="10"
+     name="CheckPurchase"
+     top_pad="5"
+     width="78" />
+     <combo_box
+     height="19"
+     left_pad="5"
+     layout="topleft"
+     follows="left|top"
+     name="combobox sale copy"
+     width="90">
+        <combo_box.item
+         label="Copy"
+         name="Copy"
+         value="Copy" />
+        <combo_box.item
+         label="Original"
+         name="Original"
+         value="Original" />
+    </combo_box>
+    <spinner
+        follows="left|top"
+        decimal_digits="0"
+        increment="1"
+        control_name="Edit Cost"
+        name="Edit Cost"
+        label="Price: L$"
+        label_width="60"
+        left="10"
+        width="180"
+        min_val="1"
+        height="19"
+        max_val="999999999"
+        top_pad="5"/>
+
+    <!--line_editor
+     border_style="line"
+     border_thickness="1"
+     follows="left|top|right"
+     height="16"
+     layout="topleft"
+     left_pad="5"
+     max_length="25"
+     name="EditPrice"
+     top_delta="0"
+     width="242" /-->
+
+    <!--text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left="10"
+     name="BaseMaskDebug"
+     top="155"
+     width="330">
+        B:
+    </text>
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left_delta="60"
+     name="OwnerMaskDebug"
+     top_delta="0"
+     width="270">
+        O:
+    </text>
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left_delta="60"
+     name="GroupMaskDebug"
+     top_delta="0"
+     width="210">
+        G:
+    </text>
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left_delta="60"
+     name="EveryoneMaskDebug"
+     top_delta="0"
+     width="150">
+        E:
+    </text>
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left_delta="60"
+     name="NextMaskDebug"
+     top_delta="0"
+     width="90">
+        N:
+    </text-->
+        <!--text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left="10"
+     name="SaleLabel"
+     top_pad="5"
+     width="330">
+        Mark Item:
+    </text-->
+
+
+    <!--radio_group
+     draw_border="false"
+     follows="left|top|right"
+     height="16"
+     layout="topleft"
+     left_delta="78"
+     name="RadioSaleType"
+     top_delta="0"
+     width="252">
+        <radio_item
+         height="16"
+         label="Original"
+         layout="topleft"
+         left="0"
+         name="radio"
+         top="0"
+         width="70" />
+        <radio_item
+         height="16"
+         label="Copy"
+         layout="topleft"
+         left_delta="60"
+         name="radio2"
+         top_delta="0"
+         width="70" />
+    </radio_group-->
+
+    <!--text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="16"
+     layout="topleft"
+     left="10"
+     name="TextPrice"
+     top_pad="5"
+     width="78">
+        Price: L$
+    </text-->
+	</panel>
+	</tab_container>
+    <panel
+     height="25"
+     layout="bottomright"
+     left="0"
+     help_topic="places_button_tab"
+     name="button_panel"
+	 bottom="5"
+     width="325">
+        <button
+         follows="bottom|left"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Edit"
+         layout="topleft"
+         left="10"
+         name="edit_btn"
+         top="0"
+         width="50" />
+        <button
+         follows="bottom|right"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Cancel"
+         layout="topleft"
+         name="cancel_btn"
+         right="-10"
+         top="0"
+         width="70" />
+        <button
+         follows="bottom|right"
+         font="SansSerifSmallBold"
+         height="25"
+         label="Save"
+         layout="topleft"
+         name="save_btn"
+         left_pad="-135"
+         top="0"
+         width="60" />
+    </panel>
+
+</panel>
-- 
GitLab


From fcecb648ef2e88715fd6a18765126650b635c367 Mon Sep 17 00:00:00 2001
From: Soft Linden <soft@lindenlab.com>
Date: Tue, 3 Nov 2009 15:39:20 -0600
Subject: [PATCH 083/306] DEV-41348 SNOW-278 Clean up mime_types.xml

---
 .../skins/default/xui/en/mime_types.xml       | 34 +++++++++----------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/mime_types.xml b/indra/newview/skins/default/xui/en/mime_types.xml
index 2de9449ea6c..76c0d027f33 100644
--- a/indra/newview/skins/default/xui/en/mime_types.xml
+++ b/indra/newview/skins/default/xui/en/mime_types.xml
@@ -163,8 +163,8 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 	<mimetype name="application/javascript">
 		<label name="application/javascript_label">
@@ -208,7 +208,7 @@
 	</mimetype>
 	<mimetype name="application/smil">
 		<label name="application/smil_label">
-		    Synchronized Multimedia Integration Language (SMIL)
+			Synchronized Multimedia Integration Language (SMIL)
 		</label>
 		<widgettype>
 			movie
@@ -348,8 +348,8 @@
 			web
 		</widgettype>
 		<impl>
-      media_plugin_webkit
-    </impl>
+			media_plugin_webkit
+		</impl>
 	</mimetype>
 	<mimetype menu="1" name="text/plain">
 		<label name="text/plain_label">
@@ -381,8 +381,8 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 	<mimetype name="video/mp4">
 		<label name="video/mp4_label">
@@ -392,8 +392,8 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 	<mimetype menu="1" name="video/quicktime">
 		<label name="video/quicktime_label">
@@ -403,8 +403,8 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 	<mimetype name="video/x-ms-asf">
 		<label name="video/x-ms-asf_label">
@@ -414,8 +414,8 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 	<mimetype name="video/x-ms-wmv">
 		<label name="video/x-ms-wmv_label">
@@ -425,8 +425,8 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 	<mimetype menu="1" name="video/x-msvideo">
 		<label name="video/x-msvideo_label">
@@ -436,7 +436,7 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 </mimetypes>
-- 
GitLab


From 4692244422fd45057164bcb85f040b258dd307b6 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Tue, 3 Nov 2009 16:41:38 -0500
Subject: [PATCH 084/306] Adding sidepanel_ .xml files to XUI preview tool.

--HG--
branch : avatar-pipeline
---
 indra/newview/llfloateruipreview.cpp | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 2fe21f28de1..663bd232f74 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -670,6 +670,15 @@ void LLFloaterUIPreview::refreshList()
 		}
 	}
 
+	found = TRUE;
+	while(found)				// for every sidepanel file that matches the pattern
+	{
+		if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "sidepanel_*.xml", name, FALSE)))	// get next file matching pattern
+		{
+			addFloaterEntry(name.c_str());	// and add it to the list (file name only; localization code takes care of rest of path)
+		}
+	}
+
 	if(!mFileList->isEmpty())	// if there were any matching files, just select the first one (so we don't have to worry about disabling buttons when no entry is selected)
 	{
 		mFileList->selectFirstItem();
-- 
GitLab


From 2a0697711aefaa25c698bae8e57c0964ba38b3fb Mon Sep 17 00:00:00 2001
From: Soft Linden <soft@lindenlab.com>
Date: Tue, 3 Nov 2009 15:45:30 -0600
Subject: [PATCH 085/306] DEV-41348 SNOW-278 Clean up mime_types.xml - missed
 credit

---
 doc/contributions.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 942ba0f0b97..f4ba643198a 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -139,6 +139,7 @@ Blakar Ogre
 blino Nakamura
 	VWR-17
 Boroondas Gupte
+	SNOW-278
 	VWR-233
 	WEB-262
 Bulli Schumann
-- 
GitLab


From 4e52e09fea81fbde6019afc39b1c028b393fb4c8 Mon Sep 17 00:00:00 2001
From: Soft Linden <soft@lindenlab.com>
Date: Tue, 3 Nov 2009 15:49:33 -0600
Subject: [PATCH 086/306] DEV-37978 VWR-8617: Missing / incorrect keywords
 TEXTURE_MEDIA and TEXTURE_DEFAULT

---
 doc/contributions.txt                   | 1 +
 indra/newview/app_settings/keywords.ini | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index f4ba643198a..4e3379d21fb 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -297,6 +297,7 @@ Jacek Antonelli
 	VWR-2947
 	VWR-2948
 	VWR-3605
+	VWR-8617
 JB Kraft
 	VWR-5283
 	VWR-7802
diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini
index 544f1c598e9..5f6fd6e4a73 100644
--- a/indra/newview/app_settings/keywords.ini
+++ b/indra/newview/app_settings/keywords.ini
@@ -560,7 +560,8 @@ STATUS_WHITELIST_FAILED                URL failed to pass whitelist
 NULL_KEY			Indicates an empty key
 EOF					Indicates the last line of a notecard was read
 TEXTURE_BLANK			UUID for the "Blank" texture
-TEXTURE_DEFAULT			UUID for the "Default Media" texture
+TEXTURE_DEFAULT			Alias for TEXTURE_PLYWOOD
+TEXTURE_MEDIA			UUID for the "Default Media" texture
 TEXTURE_PLYWOOD			UUID for the default "Plywood" texture
 TEXTURE_TRANSPARENT		UUID for the "White - Transparent" texture
 
-- 
GitLab


From 876bb9043c795872ee4d6b86924541fc5ebbf222 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 3 Nov 2009 13:51:11 -0800
Subject: [PATCH 087/306] Fixed strings to use our preferred <string> instead
 of <floater.string>

---
 .../skins/default/xui/en/floater_tools.xml    | 52 +++++++++----------
 1 file changed, 26 insertions(+), 26 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index f566dbdb75f..aee58df4910 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -13,58 +13,58 @@
  single_instance="true"
  sound_flags="0"
  width="280">
-    <floater.string
+    <string
      name="status_rotate">
         Drag colored bands to rotate object
-    </floater.string>
-    <floater.string
+    </string>
+    <string
      name="status_scale">
         Click and drag to stretch selected side
-    </floater.string>
-    <floater.string
+    </string>
+    <string
      name="status_move">
         Drag to move, shift-drag to copy
-    </floater.string>
-    <floater.string
+    </string>
+    <string
      name="status_modifyland">
         Click and hold to modify land
-    </floater.string>
-    <floater.string
+    </string>
+    <string
      name="status_camera">
         Click and drag to move camera
-    </floater.string>
-    <floater.string
+    </string>
+    <string
      name="status_grab">
         Drag to move, Ctrl to lift, Ctrl+Shift to rotate
-    </floater.string>
-    <floater.string
+    </string>
+    <string
      name="status_place">
         Click inworld to build
-    </floater.string>
-    <floater.string
+    </string>
+    <string
      name="status_selectland">
         Click and drag to select land
-    </floater.string>
-    <floater.string
+    </string>
+    <string
      name="grid_screen_text">
         Screen
-    </floater.string>
-    <floater.string
+    </string>
+    <string
      name="grid_local_text">
         Local
-    </floater.string>
-    <floater.string
+    </string>
+    <string
      name="grid_world_text">
         World
-    </floater.string>
-    <floater.string
+    </string>
+    <string
      name="grid_reference_text">
         Reference
-    </floater.string>
-    <floater.string
+    </string>
+    <string
      name="grid_attachment_text">
         Attachment
-    </floater.string>
+    </string>
     <button
      follows="left|top"
      height="20"
-- 
GitLab


From dbaa7e28cab9700e4342220410d49a608c600a0b Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 3 Nov 2009 13:59:12 -0800
Subject: [PATCH 088/306] fixing de dot

---
 indra/newview/llvoicevisualizer.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llvoicevisualizer.cpp b/indra/newview/llvoicevisualizer.cpp
index 9bafc03a6d1..e777d7362f7 100644
--- a/indra/newview/llvoicevisualizer.cpp
+++ b/indra/newview/llvoicevisualizer.cpp
@@ -142,7 +142,7 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type )
 	for (int i=0; i<NUM_VOICE_SYMBOL_WAVES; i++)
 	{
 		mSoundSymbol.mWaveFadeOutStartTime	[i] = mCurrentTime;
-		mSoundSymbol.mTexture				[i] = LLViewerTextureManager::getFetchedTextureFromFile(sound_level_img[i], FALSE, TRUE);
+		mSoundSymbol.mTexture				[i] = LLViewerTextureManager::getFetchedTextureFromFile(sound_level_img[i], FALSE, LLViewerTexture::BOOST_UI);
 		mSoundSymbol.mWaveActive			[i] = false;
 		mSoundSymbol.mWaveOpacity			[i] = 1.0f;
 		mSoundSymbol.mWaveExpansion			[i] = 1.0f;
-- 
GitLab


From c86ec95232d0211e15a67e7d10b138477af80530 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 3 Nov 2009 14:39:09 -0800
Subject: [PATCH 089/306] EXT-1865 Can now set objects for sale for L$0 Trivial
 XUI mistake, not reviewed

---
 indra/newview/skins/default/xui/en/floater_tools.xml | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 9294dc19ecf..1d87a0f9d26 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -1034,7 +1034,10 @@
            label="Original"
            value="1" />
       </combo_box>
-<!-- NEW PRICE SPINNER -->
+<!-- NEW PRICE SPINNER
+  Objects are allowed to be for sale for L$0 to invoke buy UI behavior
+  even though the user gets a free copy.
+-->
       <spinner
         follows="left|top"
         decimal_digits="0"
@@ -1046,7 +1049,7 @@
         label="Price: L$"
         label_width="65"
         width="150"
-        min_val="1"
+        min_val="0"
         height="20"
         max_val="999999999" />
       <check_box
-- 
GitLab


From 3f622037f83ff6c15a2634e174fb3cf6b7f7227b Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 3 Nov 2009 15:25:03 -0800
Subject: [PATCH 090/306] EXT-1345 Convert LLTalkButton to XUI XML Allows Erica
 and co to change and localize it. Trivial, not reviewed.

---
 indra/newview/llchiclet.cpp                   | 27 ++-----------------
 .../skins/default/xui/en/panel_bottomtray.xml |  2 +-
 2 files changed, 3 insertions(+), 26 deletions(-)

diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index bad61101c1b..21514b17d96 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -51,7 +51,7 @@
 #include "lltransientfloatermgr.h"
 
 static LLDefaultChildRegistry::Register<LLChicletPanel> t1("chiclet_panel");
-static LLDefaultChildRegistry::Register<LLTalkButton> t2("chiclet_talk");
+static LLDefaultChildRegistry::Register<LLTalkButton> t2("talk_button");
 static LLDefaultChildRegistry::Register<LLNotificationChiclet> t3("chiclet_notification");
 static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t4("chiclet_im_p2p");
 static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t5("chiclet_im_group");
@@ -1257,30 +1257,7 @@ LLTalkButton::Params::Params()
  , show_button("show_button")
  , monitor("monitor")
 {
-	// *TODO Vadim: move hardcoded labels (!) and other params to XUI.
-	speak_button.name("left");
-	speak_button.label("Speak");
-	speak_button.label_selected("Speak");
-	speak_button.font(LLFontGL::getFontSansSerifSmall());
-	speak_button.tab_stop(false);
-	speak_button.is_toggle(true);
-	speak_button.picture_style(true);
-	// Use default button art. JC
-	//speak_button.image_selected(LLUI::getUIImage("SegmentedBtn_Left_Selected"));
-	//speak_button.image_unselected(LLUI::getUIImage("SegmentedBtn_Left_Off"));
-
-	show_button.name("right");
-	show_button.label(LLStringUtil::null);
-	show_button.rect(LLRect(0, 0, 20, 0));
-	show_button.tab_stop(false);
-	show_button.is_toggle(true);
-	show_button.picture_style(true);
-	show_button.image_selected(LLUI::getUIImage("ComboButton_Selected"));
-	show_button.image_unselected(LLUI::getUIImage("ComboButton_Off"));
-
-	monitor.name("monitor");
-	// *TODO: Make this data driven.
-	monitor.rect(LLRect(0, 18, 18, 0));
+	// See widgets/talk_button.xml
 }
 
 LLTalkButton::LLTalkButton(const Params& p)
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 61bd1d186e5..c1837495874 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -60,7 +60,7 @@
          min_width="96"
          name="speak_panel"
          user_resize="false">
-         <chiclet_talk
+         <talk_button
           follows="right"
           height="23"
           speak_button.tab_stop="true"
-- 
GitLab


From c386169742df3053baa185a43f991f0db68c2bcc Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 3 Nov 2009 16:13:39 -0800
Subject: [PATCH 091/306] Removed unneeded layout="topleft" attributes.

---
 .../default/xui/en/menu_inspect_avatar_gear.xml   | 15 ++-------------
 .../default/xui/en/menu_inspect_self_gear.xml     |  7 +------
 2 files changed, 3 insertions(+), 19 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
index 6049476a43f..8ee67b9a020 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
@@ -7,7 +7,6 @@
          name="Gear Menu">
   <menu_item_call
    label="View Profile"
-   layout="topleft"
    enabled="true" 
    name="view_profile">
     <menu_item_call.on_click
@@ -15,49 +14,42 @@
   </menu_item_call>
   <menu_item_call
    label="Add Friend"
-   layout="topleft"
    name="add_friend">
     <menu_item_call.on_click
      function="InspectAvatar.AddFriend"/>
   </menu_item_call>
   <menu_item_call
    label="IM"
-   layout="topleft"
    name="im">
     <menu_item_call.on_click
      function="InspectAvatar.IM"/>
   </menu_item_call>
   <menu_item_call
    label="Call"
-   layout="topleft"
    enabled="true"
    name="call">
   </menu_item_call>
   <menu_item_call
    label="Teleport"
-   layout="topleft"
    name="teleport">
     <menu_item_call.on_click
      function="InspectAvatar.Teleport"/>
   </menu_item_call>
   <menu_item_call
    label="Invite to Group"
-   layout="topleft"
    name="invite_to_group">
     <menu_item_call.on_click
      function="InspectAvatar.InviteToGroup"/>
   </menu_item_call>
-  <menu_item_separator layout="topleft" />
+  <menu_item_separator />
   <menu_item_call
    label="Block"
-   layout="topleft"
    name="block">
     <menu_item_call.on_click
      function="InspectAvatar.Block"/>
   </menu_item_call>
   <menu_item_call
    label="Report"
-   layout="topleft"
    name="report">
     <menu_item_call.on_click
      function="InspectAvatar.Report"/>
@@ -88,7 +80,6 @@
   </menu_item_call>
   <menu_item_call
    label="Find On Map"
-   layout="topleft"
    name="find_on_map">
     <menu_item_call.on_click
      function="InspectAvatar.FindOnMap"/>
@@ -97,16 +88,14 @@
   </menu_item_call>
   <menu_item_call
    label="Zoom In"
-   layout="topleft"
    name="zoom_in">
     <menu_item_call.on_click
      function="InspectAvatar.ZoomIn"/>
   </menu_item_call>  
   <menu_item_call
    label="Pay"
-   layout="topleft"
    name="pay">
     <menu_item_call.on_click
      function="InspectAvatar.Pay"/>
   </menu_item_call>
-</menu>
\ No newline at end of file
+</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
index 19c2bf34969..ce5ee83f556 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
@@ -7,7 +7,6 @@
          name="Gear Menu">
   <menu_item_call
    label="Stand Up"
-   layout="topleft"
    enabled="true"
    name="stand_up">
     <menu_item_call.on_click
@@ -18,7 +17,6 @@
   </menu_item_call>
   <menu_item_call
    label="My Appearance"
-   layout="topleft"
    name="my_appearance">
     <menu_item_call.on_click
      function="ShowFloater"
@@ -28,7 +26,6 @@
   </menu_item_call>
   <menu_item_call
    label="My Profile"
-   layout="topleft"
    enabled="true" 
    name="my_profile">
     <menu_item_call.on_click
@@ -37,7 +34,6 @@
   </menu_item_call>
   <menu_item_call
    label="My Friends"
-   layout="topleft"
    name="my_friends">
     <menu_item_call.on_click
      function="Self.Friends"
@@ -45,9 +41,8 @@
   </menu_item_call>
   <menu_item_call
    label="My Groups"
-   layout="topleft"
    name="my_groups">
     <menu_item_call.on_click
      function="Self.Groups" />
   </menu_item_call>
-</menu>
\ No newline at end of file
+</menu>
-- 
GitLab


From a3f9b5d2d8cba2aa7de71aee0564a8125ca02e29 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 3 Nov 2009 16:13:54 -0800
Subject: [PATCH 092/306] EXT-2093 People inspectors should include an "IM"
 button

---
 indra/newview/llinspectavatar.cpp             | 19 +++++++++++++++++--
 .../skins/default/xui/en/inspect_avatar.xml   | 12 ++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index bfad2b16248..9989a3b4731 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -188,7 +188,8 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
 {
 	mCommitCallbackRegistrar.add("InspectAvatar.ViewProfile",	boost::bind(&LLInspectAvatar::onClickViewProfile, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.AddFriend",	boost::bind(&LLInspectAvatar::onClickAddFriend, this));	
-	mCommitCallbackRegistrar.add("InspectAvatar.IM",	boost::bind(&LLInspectAvatar::onClickIM, this));	
+	mCommitCallbackRegistrar.add("InspectAvatar.IM",
+		boost::bind(&LLInspectAvatar::onClickIM, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.Teleport",	boost::bind(&LLInspectAvatar::onClickTeleport, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.InviteToGroup",	boost::bind(&LLInspectAvatar::onClickInviteToGroup, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.Pay",	boost::bind(&LLInspectAvatar::onClickPay, this));	
@@ -306,7 +307,21 @@ void LLInspectAvatar::requestUpdate()
 	// You can't re-add someone as a friend if they are already your friend
 	bool is_friend = LLAvatarTracker::instance().getBuddyInfo(mAvatarID) != NULL;
 	bool is_self = (mAvatarID == gAgentID);
-	childSetEnabled("add_friend_btn", !is_friend && !is_self);
+	if (is_self)
+	{
+		getChild<LLUICtrl>("add_friend_btn")->setVisible(false);
+		getChild<LLUICtrl>("im_btn")->setVisible(false);
+	}
+	else if (is_friend)
+	{
+		getChild<LLUICtrl>("add_friend_btn")->setVisible(false);
+		getChild<LLUICtrl>("im_btn")->setVisible(true);
+	}
+	else
+	{
+		getChild<LLUICtrl>("add_friend_btn")->setVisible(true);
+		getChild<LLUICtrl>("im_btn")->setVisible(false);
+	}
 
 	// Use an avatar_icon even though the image id will come down with the
 	// avatar properties because the avatar_icon code maintains a cache of icons
diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index 6b13e2f1c7c..e2ae81e0b93 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -128,6 +128,8 @@
      left_delta="110"
      tab_stop="false"
      width="18" />
+  <!-- Overlapping buttons for default actions
+    llinspectavatar.cpp makes visible the most likely default action -->
     <button
      follows="bottom|left"
      height="23"
@@ -136,6 +138,16 @@
      top="246"
      name="add_friend_btn"
      width="100" />
+    <button
+     follows="bottom|left"
+     height="23"
+     label="IM"
+     left_delta="0"
+     top_delta="0"
+     name="im_btn"
+     width="100"
+     commit_callback.function="InspectAvatar.IM"
+     />
     <menu_button
      follows="top|left"
      height="18"
-- 
GitLab


From 0dce13377e6fe6ec6c575bdeb725cbf9fd60d107 Mon Sep 17 00:00:00 2001
From: Rick Pasetto <rick@lindenlab.com>
Date: Tue, 3 Nov 2009 16:21:55 -0800
Subject: [PATCH 093/306] Fix unposted bug: potential incorrect contract in
 LLMediaEntry::asLLSD(LLSD& sd) Review #26

Callum found this potential bug in LLMediaEntry::asLLSD(LLSD&). It
does not erase the incoming LLSD's WHITELIST_KEY. Every other key is
overwritten in this manner, but for the WHITELIST_KEY it is just
appended. Note that this is in code common to the server...but I do
not believe at this point that there is a bug exhibited by this.

Added unit test to test for this case.
---
 indra/llprimitive/llmediaentry.cpp            |   1 +
 indra/llprimitive/tests/llmediaentry_test.cpp | 116 ++++++++++--------
 2 files changed, 66 insertions(+), 51 deletions(-)

diff --git a/indra/llprimitive/llmediaentry.cpp b/indra/llprimitive/llmediaentry.cpp
index fa04bf80e7a..701300163a3 100644
--- a/indra/llprimitive/llmediaentry.cpp
+++ b/indra/llprimitive/llmediaentry.cpp
@@ -164,6 +164,7 @@ void LLMediaEntry::asLLSD(LLSD& sd) const
 
     // "security" fields
     sd[WHITELIST_ENABLE_KEY] = mWhiteListEnable;
+	sd.erase(WHITELIST_KEY);
     for (U32 i=0; i<mWhiteList.size(); i++) 
 	{
         sd[WHITELIST_KEY].append(mWhiteList[i]);
diff --git a/indra/llprimitive/tests/llmediaentry_test.cpp b/indra/llprimitive/tests/llmediaentry_test.cpp
index 9ce65609237..cd9608d56b7 100644
--- a/indra/llprimitive/tests/llmediaentry_test.cpp
+++ b/indra/llprimitive/tests/llmediaentry_test.cpp
@@ -223,8 +223,7 @@ namespace tut
 	{
 		set_test_name("Test LLMediaEntry Instantiation");
 		LLMediaEntry entry;
-        ensure_llsd_equals(get_test_name(), defaultMediaEntryLLSD, entry.asLLSD());
-
+        ensure_llsd_equals(get_test_name() + " failed", defaultMediaEntryLLSD, entry.asLLSD());
 	}
 
 	template<> template<>
@@ -251,12 +250,27 @@ namespace tut
         ensure_llsd_equals(get_test_name() + " failed", golden, entry.asLLSD());
     }
 
+    template<> template<>
+    void object::test<4>()
+    {
+        set_test_name("Test LLMediaEntry::asLLSD()");
+        LLMediaEntry entry;
+        LLSD sd;
+		// Put some cruft in the LLSD
+        sd[LLMediaEntry::CURRENT_URL_KEY] = "http://www.example.com";
+		LLSD whitelist;
+		whitelist.append("*.example.com");
+        sd[LLMediaEntry::WHITELIST_KEY] = whitelist;
+        entry.asLLSD(sd);
+        ensure_llsd_equals(get_test_name() + " failed", defaultMediaEntryLLSD, sd);
+    }
+
     // limit tests
     const char *URL_OK = "http://www.example.com";
     const char *URL_TOO_BIG = "http://www.example.com.qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
 
     template<> template<>
-    void object::test<4>()
+    void object::test<5>()
     {
         set_test_name("Test Limits on setting current URL");
         LLMediaEntry entry;
@@ -267,7 +281,7 @@ namespace tut
     }    
 
     template<> template<>
-    void object::test<5>()
+    void object::test<6>()
     {
         set_test_name("Test Limits on setting home URL");
         LLMediaEntry entry;
@@ -278,7 +292,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<6>()
+    void object::test<7>()
     {
         set_test_name("Test Limits on setting whitelist");
         
@@ -292,7 +306,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<7>()
+    void object::test<8>()
     {
         set_test_name("Test Limits on setting whitelist too big");
         
@@ -307,7 +321,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<8>()
+    void object::test<9>()
     {
         set_test_name("Test Limits on setting whitelist too many");
         
@@ -323,7 +337,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<9>()
+    void object::test<10>()
     {
         set_test_name("Test to make sure both setWhiteList() functions behave the same");
         
@@ -341,7 +355,7 @@ namespace tut
     }
     
     template<> template<>
-    void object::test<10>()
+    void object::test<11>()
     {
         set_test_name("Test to make sure both setWhiteList() functions behave the same");
 
@@ -362,7 +376,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<11>()
+    void object::test<12>()
     {
         set_test_name("Test to make sure both setWhiteList() functions behave the same");
 
@@ -386,99 +400,99 @@ namespace tut
     
     // Check the "empty whitelist" case
     template<> template<>
-    void object::test<12>() { whitelist_test("", "http://www.example.com", true); }
+    void object::test<13>() { whitelist_test("", "http://www.example.com", true); }
 
     // Check the "missing scheme" case
     template<> template<>
-    void object::test<13>() { whitelist_test("www.example.com", "http://www.example.com", true); }
+    void object::test<14>() { whitelist_test("www.example.com", "http://www.example.com", true); }
 
     // Check the "exactly the same" case
     template<> template<>
-    void object::test<14>() { whitelist_test("http://example.com", "http://example.com", true); }
+    void object::test<15>() { whitelist_test("http://example.com", "http://example.com", true); }
 
     // Check the enable flag
     template<> template<>
-    void object::test<15>() { whitelist_test(false, "www.example.com", "http://www.secondlife.com", true); }
+    void object::test<16>() { whitelist_test(false, "www.example.com", "http://www.secondlife.com", true); }
     template<> template<>
-    void object::test<16>() { whitelist_test(true, "www.example.com", "http://www.secondlife.com", false); }
+    void object::test<17>() { whitelist_test(true, "www.example.com", "http://www.secondlife.com", false); }
 
     // Check permutations of trailing slash:
     template<> template<>
-    void object::test<17>() { whitelist_test("http://www.example.com", "http://www.example.com/", true); }
+    void object::test<18>() { whitelist_test("http://www.example.com", "http://www.example.com/", true); }
     template<> template<>
-    void object::test<18>() { whitelist_test("http://www.example.com/", "http://www.example.com/", true); }
+    void object::test<19>() { whitelist_test("http://www.example.com/", "http://www.example.com/", true); }
     template<> template<>
-    void object::test<19>() { whitelist_test("http://www.example.com/", "http://www.example.com", false); }
+    void object::test<20>() { whitelist_test("http://www.example.com/", "http://www.example.com", false); }
     template<> template<>
-    void object::test<20>() { whitelist_test("http://www.example.com", "http://www.example.com/foobar", true); }
+    void object::test<21>() { whitelist_test("http://www.example.com", "http://www.example.com/foobar", true); }
     template<> template<>
-    void object::test<21>() { whitelist_test("http://www.example.com/", "http://www.example.com/foobar", false); }
+    void object::test<22>() { whitelist_test("http://www.example.com/", "http://www.example.com/foobar", false); }
 
     
     // More cases...
     template<> template<>
-    void object::test<22>() { whitelist_test("http://example.com", "http://example.com/wiki", true); }
+    void object::test<23>() { whitelist_test("http://example.com", "http://example.com/wiki", true); }
     template<> template<>
-    void object::test<23>() { whitelist_test("www.example.com", "http://www.example.com/help", true); }
+    void object::test<24>() { whitelist_test("www.example.com", "http://www.example.com/help", true); }
     template<> template<>
-    void object::test<24>() { whitelist_test("http://www.example.com", "http://wwwexample.com", false); }
+    void object::test<25>() { whitelist_test("http://www.example.com", "http://wwwexample.com", false); }
     template<> template<>
-    void object::test<25>() { whitelist_test("http://www.example.com", "http://www.example.com/wiki", true); }
+    void object::test<26>() { whitelist_test("http://www.example.com", "http://www.example.com/wiki", true); }
     template<> template<>
-    void object::test<26>() { whitelist_test("example.com", "http://wwwexample.com", false); }
+    void object::test<27>() { whitelist_test("example.com", "http://wwwexample.com", false); }
     template<> template<>
-    void object::test<27>() { whitelist_test("http://www.example.com/", "http://www.amazon.com/wiki", false); }
+    void object::test<28>() { whitelist_test("http://www.example.com/", "http://www.amazon.com/wiki", false); }
     template<> template<>
-    void object::test<28>() { whitelist_test("www.example.com", "http://www.amazon.com", false); }
+    void object::test<29>() { whitelist_test("www.example.com", "http://www.amazon.com", false); }
 
     // regexp cases
     template<> template<>
-    void object::test<29>() { whitelist_test("*.example.com", "http://www.example.com", true); }
+    void object::test<30>() { whitelist_test("*.example.com", "http://www.example.com", true); }
     template<> template<>
-    void object::test<30>() { whitelist_test("*.example.com", "http://www.amazon.com", false); }
+    void object::test<31>() { whitelist_test("*.example.com", "http://www.amazon.com", false); }
     template<> template<>
-    void object::test<31>() { whitelist_test("*.example.com", "http://www.example.com/foo/bar", true); }
+    void object::test<32>() { whitelist_test("*.example.com", "http://www.example.com/foo/bar", true); }
     template<> template<>
-    void object::test<32>() { whitelist_test("*.example.com", "http:/example.com/foo/bar", false); }
+    void object::test<33>() { whitelist_test("*.example.com", "http:/example.com/foo/bar", false); }
     template<> template<>
-    void object::test<33>() { whitelist_test("*example.com", "http://example.com/foo/bar", true); }
+    void object::test<34>() { whitelist_test("*example.com", "http://example.com/foo/bar", true); }
     template<> template<>
-    void object::test<34>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?example.com", false); }
+    void object::test<35>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?example.com", false); }
     template<> template<>
-    void object::test<35>() { whitelist_test("example.com", "http://my.virus.com/foo/bar?example.com", false); }
+    void object::test<36>() { whitelist_test("example.com", "http://my.virus.com/foo/bar?example.com", false); }
     template<> template<>
-    void object::test<36>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?*example.com", false); }
+    void object::test<37>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?*example.com", false); }
     template<> template<>
-    void object::test<37>() { whitelist_test("http://*example.com", "http://www.example.com", true); }
+    void object::test<38>() { whitelist_test("http://*example.com", "http://www.example.com", true); }
     template<> template<>
-    void object::test<38>() { whitelist_test("http://*.example.com", "http://www.example.com", true); }
+    void object::test<39>() { whitelist_test("http://*.example.com", "http://www.example.com", true); }
     template<> template<>
-    void object::test<39>() { whitelist_test("http://*.e$?^.com", "http://www.e$?^.com", true); }
+    void object::test<40>() { whitelist_test("http://*.e$?^.com", "http://www.e$?^.com", true); }
     template<> template<>
-    void object::test<40>() { whitelist_test("*.example.com/foo/bar", "http://www.example.com/", false); }
+    void object::test<41>() { whitelist_test("*.example.com/foo/bar", "http://www.example.com/", false); }
     template<> template<>
-    void object::test<41>() { whitelist_test("*.example.com/foo/bar", "http://example.com/foo/bar", false); }
+    void object::test<42>() { whitelist_test("*.example.com/foo/bar", "http://example.com/foo/bar", false); }
     template<> template<>
-    void object::test<42>() { whitelist_test("http://*.example.com/foo/bar", "http://www.example.com", false); }
+    void object::test<43>() { whitelist_test("http://*.example.com/foo/bar", "http://www.example.com", false); }
     template<> template<>
-    void object::test<43>() { whitelist_test("http://*.example.com", "https://www.example.com", false); }
+    void object::test<44>() { whitelist_test("http://*.example.com", "https://www.example.com", false); }
     template<> template<>
-    void object::test<44>() { whitelist_test("http*://*.example.com", "rtsp://www.example.com", false); }
+    void object::test<45>() { whitelist_test("http*://*.example.com", "rtsp://www.example.com", false); }
     template<> template<>
-    void object::test<45>() { whitelist_test("http*://*.example.com", "https://www.example.com", true); }
+    void object::test<46>() { whitelist_test("http*://*.example.com", "https://www.example.com", true); }
     template<> template<>
-    void object::test<46>() { whitelist_test("example.com", "http://www.example.com", false); }
+    void object::test<47>() { whitelist_test("example.com", "http://www.example.com", false); }
     template<> template<>
-    void object::test<47>() { whitelist_test("www.example.com", "http://www.example.com:80", false); }
+    void object::test<48>() { whitelist_test("www.example.com", "http://www.example.com:80", false); }
     template<> template<>
-    void object::test<48>() { whitelist_test("www.example.com", "http://www.example.com", true); }
+    void object::test<49>() { whitelist_test("www.example.com", "http://www.example.com", true); }
     template<> template<>
-    void object::test<49>() { whitelist_test("www.example.com/", "http://www.example.com", false); }
+    void object::test<50>() { whitelist_test("www.example.com/", "http://www.example.com", false); }
     template<> template<>
-    void object::test<50>() { whitelist_test("www.example.com/foo/bar/*", "http://www.example.com/foo/bar/baz", true); }
+    void object::test<51>() { whitelist_test("www.example.com/foo/bar/*", "http://www.example.com/foo/bar/baz", true); }
     // Path only
     template<> template<>
-    void object::test<51>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/baz", true); }
+    void object::test<52>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/baz", true); }
     template<> template<>
-    void object::test<52>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/", false); }
+    void object::test<53>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/", false); }
 }
-- 
GitLab


From fcb899be4789dfa8d93edad3f163fe260296285d Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 3 Nov 2009 16:39:58 -0800
Subject: [PATCH 094/306] Missed the talk_button.xml file add.

---
 .../default/xui/en/widgets/talk_button.xml    | 37 +++++++++++++++++++
 1 file changed, 37 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/en/widgets/talk_button.xml

diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
new file mode 100644
index 00000000000..725492052ca
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- Derives from LLUICtrl -->
+<talk_button>
+  <!-- To make speak button look green when selected set:
+    image_selected="SegmentedBtn_Left_Selected"
+    image_unselected="SegmentedBtn_Left_Off"
+  -->
+  <speak_button
+    name="left"
+    label="Speak"
+    label_selected="Speak"
+    font="SansSerifSmall"
+    tab_stop="false"
+    is_toggle="true"
+    picture_style="true"
+    />
+  <show_button
+    name="right"
+    label=""
+    left="0"
+    top="0"
+    right="20"
+    bottom="0"
+    tab_stop="false"
+    is_toggle="true"
+    picture_style="true"
+    image_selected="ComboButton_Selected"
+    image_unselected="ComboButton_Off"
+    />
+  <monitor
+    name="monitor"
+    left="0"
+    top="18"
+    right="18"
+    bottom="0"
+    />
+</talk_button>
-- 
GitLab


From f263d119c4c4a3816da15e327afc99fd94d39eef Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Tue, 3 Nov 2009 19:46:57 -0500
Subject: [PATCH 095/306] EXT-2130 : XUI cleanup

Reformatted sidepanel_inventory
Took out tab container from both sidepanel_inventory and sidepanel_item_info

--HG--
branch : avatar-pipeline
---
 indra/newview/llsidepanelinventory.cpp        |  98 ++-
 indra/newview/llsidepanelinventory.h          |   6 +-
 .../default/xui/en/panel_main_inventory.xml   | 830 +++++++++---------
 .../default/xui/en/sidepanel_inventory.xml    | 225 +++--
 .../default/xui/en/sidepanel_item_info.xml    |  35 +-
 5 files changed, 588 insertions(+), 606 deletions(-)

diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index dbe7e9fec6d..2ea84efd301 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -44,7 +44,7 @@ static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_
 
 LLSidepanelInventory::LLSidepanelInventory()
 	:	LLPanel(),
-		mSidepanelItemInfo(NULL)
+		mItemPanel(NULL)
 {
 
 	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
@@ -56,36 +56,40 @@ LLSidepanelInventory::~LLSidepanelInventory()
 
 BOOL LLSidepanelInventory::postBuild()
 {
-	mInfoBtn = getChild<LLButton>("info_btn");
-	mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this));
-
-	mShareBtn = getChild<LLButton>("share_btn");
-	mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
-
-	mShareBtn = getChild<LLButton>("share_btn");
-	mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
-
-	mWearBtn = getChild<LLButton>("wear_btn");
-	mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this));
-
-	mPlayBtn = getChild<LLButton>("play_btn");
-	mPlayBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onPlayButtonClicked, this));
-
-	mTeleportBtn = getChild<LLButton>("teleport_btn");
-	mTeleportBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onTeleportButtonClicked, this));
-
-	mOverflowBtn = getChild<LLButton>("overflow_btn");
-	mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
-
-	mTabContainer = getChild<LLTabContainer>("Inventory Tabs");
-	mSidepanelItemInfo = getChild<LLSidepanelItemInfo>("sidepanel_item_info");
-
-	mPanelMainInventory = getChild<LLPanelMainInventory>("panel_main_inventory");
-	mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
-
-	LLButton* back_btn = mSidepanelItemInfo->getChild<LLButton>("back_btn");
-	back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
+	// UI elements from inventory panel
+	{
+		mInventoryPanel = getChild<LLPanel>("sidepanel__inventory_panel");
+		
+		mInfoBtn = mInventoryPanel->getChild<LLButton>("info_btn");
+		mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this));
+		
+		mShareBtn = mInventoryPanel->getChild<LLButton>("share_btn");
+		mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
+		
+		mWearBtn = mInventoryPanel->getChild<LLButton>("wear_btn");
+		mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this));
+		
+		mPlayBtn = mInventoryPanel->getChild<LLButton>("play_btn");
+		mPlayBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onPlayButtonClicked, this));
+		
+		mTeleportBtn = mInventoryPanel->getChild<LLButton>("teleport_btn");
+		mTeleportBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onTeleportButtonClicked, this));
+		
+		mOverflowBtn = mInventoryPanel->getChild<LLButton>("overflow_btn");
+		mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
+		
+		LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+		panel_main_inventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
+	}
 
+	// UI elements from item panel
+	{
+		mItemPanel = getChild<LLSidepanelItemInfo>("sidepanel__item_panel");
+		
+		LLButton* back_btn = mItemPanel->getChild<LLButton>("back_btn");
+		back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
+	}
+	
 	return TRUE;
 }
 
@@ -94,16 +98,16 @@ void LLSidepanelInventory::onOpen(const LLSD& key)
 	if(key.size() == 0)
 		return;
 
-	mSidepanelItemInfo->reset();
+	mItemPanel->reset();
 
 	if (key.has("id"))
 	{
-		mSidepanelItemInfo->setItemID(key["id"].asUUID());
+		mItemPanel->setItemID(key["id"].asUUID());
 	}
 	
 	if (key.has("object"))
 	{
-		mSidepanelItemInfo->setObjectID(key["object"].asUUID());
+		mItemPanel->setObjectID(key["object"].asUUID());
 	}
 
 	toggleItemInfoPanel(TRUE);
@@ -114,8 +118,8 @@ void LLSidepanelInventory::onInfoButtonClicked()
 	LLInventoryItem *item = getSelectedItem();
 	if (item)
 	{
-		mSidepanelItemInfo->reset();
-		mSidepanelItemInfo->setItemID(item->getUUID());
+		mItemPanel->reset();
+		mItemPanel->setItemID(item->getUUID());
 		toggleItemInfoPanel(TRUE);
 	}
 }
@@ -126,13 +130,13 @@ void LLSidepanelInventory::onShareButtonClicked()
 
 void LLSidepanelInventory::performActionOnSelection(const std::string &action)
 {
-	LLInventoryPanel *panel = mPanelMainInventory->getActivePanel();
-	LLFolderViewItem* current_item = panel->getRootFolder()->getCurSelectedItem();
+	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+	LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
 	if (!current_item)
 	{
 		return;
 	}
-	current_item->getListener()->performAction(panel->getRootFolder(), panel->getModel(), action);
+	current_item->getListener()->performAction(panel_main_inventory->getActivePanel()->getRootFolder(), panel_main_inventory->getActivePanel()->getModel(), action);
 }
 
 void LLSidepanelInventory::onWearButtonClicked()
@@ -168,17 +172,18 @@ void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*>
 
 void LLSidepanelInventory::toggleItemInfoPanel(BOOL visible)
 {
-	mSidepanelItemInfo->setVisible(visible);
-	mTabContainer->setVisible(!visible);
+	mItemPanel->setVisible(visible);
+	mInventoryPanel->setVisible(!visible);
 
 	if (visible)
 	{
-		mSidepanelItemInfo->dirty();
-		mSidepanelItemInfo->setEditMode(FALSE);
-
+		mItemPanel->dirty();
+		mItemPanel->setEditMode(FALSE);
+		/*
 		LLRect rect = getRect();
-		LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
-		mSidepanelItemInfo->reshape(new_rect.getWidth(),new_rect.getHeight());
+		LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mInventoryPanel->getRect().mBottom);
+		mItemPanel->reshape(new_rect.getWidth(),new_rect.getHeight());
+		*/
 	}
 }
 
@@ -226,7 +231,8 @@ void LLSidepanelInventory::updateVerbs()
 
 LLInventoryItem *LLSidepanelInventory::getSelectedItem()
 {
-	LLFolderViewItem* current_item = mPanelMainInventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+	LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
 	if (!current_item)
 	{
 		return NULL;
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index fbffb39b8c9..f9fe3e4e0e9 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -36,7 +36,6 @@
 
 class LLInventoryItem;
 class LLSidepanelItemInfo;
-class LLTabContainer;
 class LLPanelMainInventory;
 class LLFolderViewItem;
 
@@ -78,9 +77,8 @@ class LLSidepanelInventory : public LLPanel
 	LLButton*					mTeleportBtn;
 	LLButton*					mOverflowBtn;
 
-	LLTabContainer*				mTabContainer;
-	LLSidepanelItemInfo*		mSidepanelItemInfo;
-	LLPanelMainInventory*		mPanelMainInventory;
+	LLPanel*					mInventoryPanel; // Main inventory view
+	LLSidepanelItemInfo*		mItemPanel; // Individual item view
 };
 
 #endif //LL_LLSIDEPANELINVENTORY_H
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index 9a3fdcc327b..8c5bf768d69 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -1,415 +1,415 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- background_visible="true"
- follows="all"
- height="400"
- label="Things"
- layout="topleft"
- min_height="350"
- min_width="240"
- name="inventory panel"
- width="330">
-    <panel.string
-     name="Title">
-        Things
-    </panel.string>
-    <filter_editor
-     text_pad_left="12"
-     follows="left|top|right"
-	 font="SanSerif"
-     height="20"
-     label="Filter"
-     layout="topleft"
-     left="15"
-     name="inventory search editor"
-     top="34"
-     width="300" />
-    <tab_container
-     follows="left|top|right|bottom"
-     height="300"
-     layout="topleft"
-     left_delta="-4"
-     name="inventory filter tabs"
-     tab_position="top"
-     top_pad="4"
-     width="305">
-        <inventory_panel
-         follows="left|top|right|bottom"
-         height="295"
-         label="All Items"
-         layout="topleft"
-         left="1"
-         name="All Items"
-         top="16"
-         width="290" />
-        <inventory_panel
-         follows="left|top|right|bottom"
-         height="295"
-         label="Recent Items"
-         layout="topleft"
-         left_delta="0"
-         name="Recent Items"
-         top_delta="0"
-         width="290" />
-    </tab_container>
-    <menu_bar
-     bg_visible="false"
-     follows="left|top|right"
-     height="18"
-     layout="topleft"
-     left_delta="0"
-     mouse_opaque="false"
-     name="Inventory Menu"
-     top_delta="-45"
-     width="290">
-        <menu
-         height="101"
-         label="File"
-         layout="topleft"
-         left="0"
-         mouse_opaque="false"
-         name="File"
-         tear_off="true"
-         top="-117"
-         width="128">
-            <menu_item_call
-             label="Open"
-             layout="topleft"
-             name="Open">
-                <menu_item_call.on_click
-                 function="Inventory.DoToSelected"
-                 parameter="open" />
-            </menu_item_call>
-            <menu
-             create_jump_keys="true"
-             label="Upload"
-             layout="topleft"
-             name="upload"
-             tear_off="true">
-                <menu_item_call
-                 label="Image (L$[COST])..."
-                 layout="topleft"
-                 name="Upload Image"
-                 shortcut="control|U">
-                    <menu_item_call.on_click
-                     function="File.UploadImage"
-                     parameter="" />
-                    <menu_item_call.on_enable
-                     function="File.EnableUpload" />
-                </menu_item_call>
-                <menu_item_call
-                 label="Sound (L$[COST])..."
-                 layout="topleft"
-                 name="Upload Sound">
-                    <menu_item_call.on_click
-                     function="File.UploadSound"
-                     parameter="" />
-                    <menu_item_call.on_enable
-                     function="File.EnableUpload" />
-                </menu_item_call>
-                <menu_item_call
-                 label="Animation (L$[COST])..."
-                 layout="topleft"
-                 name="Upload Animation">
-                    <menu_item_call.on_click
-                     function="File.UploadAnim"
-                     parameter="" />
-                    <menu_item_call.on_enable
-                     function="File.EnableUpload" />
-                </menu_item_call>
-                <menu_item_call
-                 label="Bulk (L$[COST] per file)..."
-                 layout="topleft"
-                 name="Bulk Upload">
-                    <menu_item_call.on_click
-                     function="File.UploadBulk"
-                     parameter="" />
-                </menu_item_call>
-                <menu_item_separator
-                 layout="topleft" />
-            </menu>
-            <menu_item_separator
-             layout="topleft" />
-            <menu_item_call
-             label="New Window"
-             layout="topleft"
-             name="New Window">
-                <menu_item_call.on_click
-                 function="Inventory.NewWindow" />
-            </menu_item_call>
-            <menu_item_separator
-             layout="topleft"
-             name="separator2" />
-            <menu_item_call
-             label="Show Filters"
-             layout="topleft"
-             name="Show Filters">
-                <menu_item_call.on_click
-                 function="Inventory.ShowFilters" />
-            </menu_item_call>
-            <menu_item_call
-             label="Reset Filters"
-             layout="topleft"
-             name="Reset Current">
-                <menu_item_call.on_click
-                 function="Inventory.ResetFilter" />
-            </menu_item_call>
-            <menu_item_call
-             label="Close All Folders"
-             layout="topleft"
-             name="Close All Folders">
-                <menu_item_call.on_click
-                 function="Inventory.CloseAllFolders" />
-            </menu_item_call>
-            <menu_item_separator
-             layout="topleft"
-             name="separator3" />
-            <menu_item_call
-             label="Empty Trash"
-             layout="topleft"
-             name="Empty Trash">
-                <menu_item_call.on_click
-                 function="Inventory.EmptyTrash" />
-            </menu_item_call>
-            <menu_item_call
-             label="Empty Lost And Found"
-             layout="topleft"
-             name="Empty Lost And Found">
-                <menu_item_call.on_click
-                 function="Inventory.EmptyLostAndFound" />
-            </menu_item_call>
-        </menu>
-        <menu
-         height="121"
-         label="Create"
-         layout="topleft"
-         left="0"
-         mouse_opaque="false"
-         name="Create"
-         tear_off="true"
-         top="-201"
-         width="121">
-            <menu_item_call
-             label="New Folder"
-             layout="topleft"
-             name="New Folder">
-                <menu_item_call.on_click
-                 function="Inventory.DoCreate"
-                 parameter="category" />
-            </menu_item_call>
-            <menu_item_call
-             label="New Script"
-             layout="topleft"
-             name="New Script">
-                <menu_item_call.on_click
-                 function="Inventory.DoCreate"
-                 parameter="lsl" />
-            </menu_item_call>
-            <menu_item_call
-             label="New Note"
-             layout="topleft"
-             name="New Note">
-                <menu_item_call.on_click
-                 function="Inventory.DoCreate"
-                 parameter="notecard" />
-            </menu_item_call>
-            <menu_item_call
-             label="New Gesture"
-             layout="topleft"
-             name="New Gesture">
-                <menu_item_call.on_click
-                 function="Inventory.DoCreate"
-                 parameter="gesture" />
-            </menu_item_call>
-            <menu
-             height="175"
-             label="New Clothes"
-             layout="topleft"
-             left_delta="0"
-             mouse_opaque="false"
-             name="New Clothes"
-             top_pad="514"
-             width="125">
-                <menu_item_call
-                 label="New Shirt"
-                 layout="topleft"
-                 name="New Shirt">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="shirt" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Pants"
-                 layout="topleft"
-                 name="New Pants">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="pants" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Shoes"
-                 layout="topleft"
-                 name="New Shoes">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="shoes" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Socks"
-                 layout="topleft"
-                 name="New Socks">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="socks" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Jacket"
-                 layout="topleft"
-                 name="New Jacket">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="jacket" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Skirt"
-                 layout="topleft"
-                 name="New Skirt">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="skirt" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Gloves"
-                 layout="topleft"
-                 name="New Gloves">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="gloves" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Undershirt"
-                 layout="topleft"
-                 name="New Undershirt">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="undershirt" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Underpants"
-                 layout="topleft"
-                 name="New Underpants">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="underpants" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Alpha"
-                 layout="topleft"
-                 name="New Alpha">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="alpha" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Tattoo"
-                 layout="topleft"
-                 name="New Tattoo">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="tattoo" />
-                </menu_item_call>
-            </menu>
-            <menu
-             height="85"
-             label="New Body Parts"
-             layout="topleft"
-             left_delta="0"
-             mouse_opaque="false"
-             name="New Body Parts"
-             top_pad="514"
-             width="118">
-                <menu_item_call
-                 label="New Shape"
-                 layout="topleft"
-                 name="New Shape">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="shape" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Skin"
-                 layout="topleft"
-                 name="New Skin">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="skin" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Hair"
-                 layout="topleft"
-                 name="New Hair">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="hair" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Eyes"
-                 layout="topleft"
-                 name="New Eyes">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="eyes" />
-                </menu_item_call>
-            </menu>
-        </menu>
-        <menu
-         height="49"
-         label="Sort"
-         layout="topleft"
-         left="0"
-         mouse_opaque="false"
-         name="Sort"
-         tear_off="true"
-         top="-113"
-         width="118">
-            <menu_item_check
-             control_name="Inventory.SortByName"
-             label="By Name"
-             layout="topleft"
-             name="By Name">
-                <menu_item_check.on_click
-                 function="Inventory.SetSortBy"
-                 parameter="name" />
-            </menu_item_check>
-            <menu_item_check
-             control_name="Inventory.SortByDate"
-             label="By Date"
-             layout="topleft"
-             name="By Date">
-                <menu_item_check.on_click
-                 function="Inventory.SetSortBy"
-                 parameter="date" />
-            </menu_item_check>
-            <menu_item_separator
-             layout="topleft" />
-            <menu_item_check
-             control_name="Inventory.FoldersAlwaysByName"
-             label="Folders Always By Name"
-             layout="topleft"
-             name="Folders Always By Name">
-                <menu_item_check.on_click
-                 function="Inventory.SetSortBy"
-                 parameter="foldersalwaysbyname" />
-            </menu_item_check>
-            <menu_item_check
-             control_name="Inventory.SystemFoldersToTop"
-             label="System Folders To Top"
-             layout="topleft"
-             name="System Folders To Top">
-                <menu_item_check.on_click
-                 function="Inventory.SetSortBy"
-                 parameter="systemfolderstotop" />
-            </menu_item_check>
-        </menu>
-    </menu_bar>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="400"
+ label="Things"
+ layout="topleft"
+ min_height="350"
+ min_width="240"
+ name="main inventory panel"
+ width="330">
+    <panel.string
+     name="Title">
+        Things
+    </panel.string>
+    <filter_editor
+     text_pad_left="12"
+     follows="left|top|right"
+	 font="SanSerif"
+     height="20"
+     label="Filter"
+     layout="topleft"
+     left="15"
+     name="inventory search editor"
+     top="34"
+     width="300" />
+    <tab_container
+     follows="left|top|right|bottom"
+     height="300"
+     layout="topleft"
+     left_delta="-4"
+     name="inventory filter tabs"
+     tab_position="top"
+     top_pad="4"
+     width="305">
+        <inventory_panel
+         follows="left|top|right|bottom"
+         height="295"
+         label="All Items"
+         layout="topleft"
+         left="1"
+         name="All Items"
+         top="16"
+         width="290" />
+        <inventory_panel
+         follows="left|top|right|bottom"
+         height="295"
+         label="Recent Items"
+         layout="topleft"
+         left_delta="0"
+         name="Recent Items"
+         top_delta="0"
+         width="290" />
+    </tab_container>
+    <menu_bar
+     bg_visible="false"
+     follows="left|top|right"
+     height="18"
+     layout="topleft"
+     left_delta="0"
+     mouse_opaque="false"
+     name="Inventory Menu"
+     top_delta="-45"
+     width="290">
+        <menu
+         height="101"
+         label="File"
+         layout="topleft"
+         left="0"
+         mouse_opaque="false"
+         name="File"
+         tear_off="true"
+         top="-117"
+         width="128">
+            <menu_item_call
+             label="Open"
+             layout="topleft"
+             name="Open">
+                <menu_item_call.on_click
+                 function="Inventory.DoToSelected"
+                 parameter="open" />
+            </menu_item_call>
+            <menu
+             create_jump_keys="true"
+             label="Upload"
+             layout="topleft"
+             name="upload"
+             tear_off="true">
+                <menu_item_call
+                 label="Image (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Image"
+                 shortcut="control|U">
+                    <menu_item_call.on_click
+                     function="File.UploadImage"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Sound (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Sound">
+                    <menu_item_call.on_click
+                     function="File.UploadSound"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Animation (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Animation">
+                    <menu_item_call.on_click
+                     function="File.UploadAnim"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Bulk (L$[COST] per file)..."
+                 layout="topleft"
+                 name="Bulk Upload">
+                    <menu_item_call.on_click
+                     function="File.UploadBulk"
+                     parameter="" />
+                </menu_item_call>
+                <menu_item_separator
+                 layout="topleft" />
+            </menu>
+            <menu_item_separator
+             layout="topleft" />
+            <menu_item_call
+             label="New Window"
+             layout="topleft"
+             name="New Window">
+                <menu_item_call.on_click
+                 function="Inventory.NewWindow" />
+            </menu_item_call>
+            <menu_item_separator
+             layout="topleft"
+             name="separator2" />
+            <menu_item_call
+             label="Show Filters"
+             layout="topleft"
+             name="Show Filters">
+                <menu_item_call.on_click
+                 function="Inventory.ShowFilters" />
+            </menu_item_call>
+            <menu_item_call
+             label="Reset Filters"
+             layout="topleft"
+             name="Reset Current">
+                <menu_item_call.on_click
+                 function="Inventory.ResetFilter" />
+            </menu_item_call>
+            <menu_item_call
+             label="Close All Folders"
+             layout="topleft"
+             name="Close All Folders">
+                <menu_item_call.on_click
+                 function="Inventory.CloseAllFolders" />
+            </menu_item_call>
+            <menu_item_separator
+             layout="topleft"
+             name="separator3" />
+            <menu_item_call
+             label="Empty Trash"
+             layout="topleft"
+             name="Empty Trash">
+                <menu_item_call.on_click
+                 function="Inventory.EmptyTrash" />
+            </menu_item_call>
+            <menu_item_call
+             label="Empty Lost And Found"
+             layout="topleft"
+             name="Empty Lost And Found">
+                <menu_item_call.on_click
+                 function="Inventory.EmptyLostAndFound" />
+            </menu_item_call>
+        </menu>
+        <menu
+         height="121"
+         label="Create"
+         layout="topleft"
+         left="0"
+         mouse_opaque="false"
+         name="Create"
+         tear_off="true"
+         top="-201"
+         width="121">
+            <menu_item_call
+             label="New Folder"
+             layout="topleft"
+             name="New Folder">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="category" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Script"
+             layout="topleft"
+             name="New Script">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="lsl" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Note"
+             layout="topleft"
+             name="New Note">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="notecard" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Gesture"
+             layout="topleft"
+             name="New Gesture">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="gesture" />
+            </menu_item_call>
+            <menu
+             height="175"
+             label="New Clothes"
+             layout="topleft"
+             left_delta="0"
+             mouse_opaque="false"
+             name="New Clothes"
+             top_pad="514"
+             width="125">
+                <menu_item_call
+                 label="New Shirt"
+                 layout="topleft"
+                 name="New Shirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Pants"
+                 layout="topleft"
+                 name="New Pants">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="pants" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Shoes"
+                 layout="topleft"
+                 name="New Shoes">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shoes" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Socks"
+                 layout="topleft"
+                 name="New Socks">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="socks" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Jacket"
+                 layout="topleft"
+                 name="New Jacket">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="jacket" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Skirt"
+                 layout="topleft"
+                 name="New Skirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="skirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Gloves"
+                 layout="topleft"
+                 name="New Gloves">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="gloves" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Undershirt"
+                 layout="topleft"
+                 name="New Undershirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="undershirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Underpants"
+                 layout="topleft"
+                 name="New Underpants">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="underpants" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Alpha"
+                 layout="topleft"
+                 name="New Alpha">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="alpha" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Tattoo"
+                 layout="topleft"
+                 name="New Tattoo">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="tattoo" />
+                </menu_item_call>
+            </menu>
+            <menu
+             height="85"
+             label="New Body Parts"
+             layout="topleft"
+             left_delta="0"
+             mouse_opaque="false"
+             name="New Body Parts"
+             top_pad="514"
+             width="118">
+                <menu_item_call
+                 label="New Shape"
+                 layout="topleft"
+                 name="New Shape">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shape" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Skin"
+                 layout="topleft"
+                 name="New Skin">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="skin" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Hair"
+                 layout="topleft"
+                 name="New Hair">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="hair" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Eyes"
+                 layout="topleft"
+                 name="New Eyes">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="eyes" />
+                </menu_item_call>
+            </menu>
+        </menu>
+        <menu
+         height="49"
+         label="Sort"
+         layout="topleft"
+         left="0"
+         mouse_opaque="false"
+         name="Sort"
+         tear_off="true"
+         top="-113"
+         width="118">
+            <menu_item_check
+             control_name="Inventory.SortByName"
+             label="By Name"
+             layout="topleft"
+             name="By Name">
+                <menu_item_check.on_click
+                 function="Inventory.SetSortBy"
+                 parameter="name" />
+            </menu_item_check>
+            <menu_item_check
+             control_name="Inventory.SortByDate"
+             label="By Date"
+             layout="topleft"
+             name="By Date">
+                <menu_item_check.on_click
+                 function="Inventory.SetSortBy"
+                 parameter="date" />
+            </menu_item_check>
+            <menu_item_separator
+             layout="topleft" />
+            <menu_item_check
+             control_name="Inventory.FoldersAlwaysByName"
+             label="Folders Always By Name"
+             layout="topleft"
+             name="Folders Always By Name">
+                <menu_item_check.on_click
+                 function="Inventory.SetSortBy"
+                 parameter="foldersalwaysbyname" />
+            </menu_item_check>
+            <menu_item_check
+             control_name="Inventory.SystemFoldersToTop"
+             label="System Folders To Top"
+             layout="topleft"
+             name="System Folders To Top">
+                <menu_item_check.on_click
+                 function="Inventory.SetSortBy"
+                 parameter="systemfolderstotop" />
+            </menu_item_check>
+        </menu>
+    </menu_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index 0b4a0e1e24c..fc37bc07b8e 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -1,122 +1,113 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- background_visible="true"
- follows="all"
- height="400"
- label="Things"
- layout="topleft"
- min_height="350"
- min_width="240"
- name="objects panel"
- width="333">
-    <tab_container
-     follows="all"
-     height="390"
-     layout="topleft"
-     left="9"
-     name="Inventory Tabs"
-     tab_position="top"
-     top="0"
-     width="313"
-	 tab_height="0"
-	 visible="true">
+	  background_visible="true"
+	  follows="all"
+	  height="570"
+	  label="Things"
+	  layout="topleft"
+	  min_height="350"
+	  min_width="240"
+	  name="objects panel"
+	  width="333">
 	 <panel
-	      class="panel_main_inventory"
-		  filename="panel_main_inventory.xml"
-		  follows="all"
-		  layout="topleft"
-		  left="0"
-		  name="panel_main_inventory"
-		  top="15"
-		  label=""
-		  height="330"
-		  width="467">
-    <panel
-     height="25"
-     layout="bottomright"
-     left="0"
-     help_topic="item_button_tab"
-     name="button_panel"
-	 bottom="0"
-     width="313">
-        <button
-         enabled="true"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Info"
-         layout="topleft"
-         left="0"
-         name="info_btn"
-         top="0"
-         width="60" />
-        <button
-         enabled="true"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Share"
-         layout="topleft"
-         left_pad="5"
-         name="share_btn"
-         top="0"
-         width="60" />
-        <button
-         enabled="false"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Wear"
-         layout="topleft"
-         left="130"
-         name="wear_btn"
-         top="0"
-         width="60" />
-        <button
-         enabled="false"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Play"
-         layout="topleft"
-         name="play_btn"
-         left="130"
-         top="0"
-         width="50" />
-        <button
-         enabled="false"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Teleport"
-         layout="topleft"
-         left="130"
-         name="teleport_btn"
-         top="0"
-         width="77" />
-        <button
-         follows="bottom|right"
-         font="SansSerifSmallBold"
-         height="25"
-         label="v"
-         layout="topleft"
-         name="overflow_btn"
-         right="-10"
-         top="0"
-         width="30" />
-    </panel>
-    </panel>
-   </tab_container>
+		 follows="all"
+		 layout="topleft"
+		 left="0"
+		 name="sidepanel__inventory_panel"
+		 top="0"
+		 label=""
+		 height="570"
+		 visible="true"
+		 width="330">
+		<panel
+			 class="panel_main_inventory"
+			 filename="panel_main_inventory.xml"
+			 follows="all"
+			 layout="topleft"
+			 left="0"
+			 name="panel_main_inventory"
+			 top="0"
+			 label=""
+			 height="500"
+			 width="330" />
+		<panel
+			 height="25"
+			 layout="bottomright"
+			 help_topic="item_button_tab"
+			 name="button_panel"
+			 left="5"
+			 bottom="5"
+			 width="313">
+			<button
+				 enabled="true"
+				 follows="bottom|left"
+				 font="SansSerifSmallBold"
+				 height="25"
+				 label="Info"
+				 layout="topleft"
+				 left="0"
+				 name="info_btn"
+				 top="0"
+				 width="60" />
+			<button
+				 enabled="true"
+				 follows="bottom|left"
+				 font="SansSerifSmallBold"
+				 height="25"
+				 label="Share"
+				 layout="topleft"
+				 left_pad="5"
+				 name="share_btn"
+				 top="0"
+				 width="60" />
+			<button
+				 enabled="false"
+				 follows="bottom|left"
+				 font="SansSerifSmallBold"
+				 height="25"
+				 label="Wear"
+				 layout="topleft"
+				 left="130"
+				 name="wear_btn"
+				 top="0"
+				 width="60" />
+			<button
+				 enabled="false"
+				 follows="bottom|left"
+				 font="SansSerifSmallBold"
+				 height="25"
+				 label="Play"
+				 layout="topleft"
+				 name="play_btn"
+				 left="130"
+				 top="0"
+				 width="50" />
+			<button
+				 enabled="false"
+				 follows="bottom|left"
+				 font="SansSerifSmallBold"
+				 height="25"
+				 label="Teleport"
+				 layout="topleft"
+				 left="130"
+				 name="teleport_btn"
+				 top="0"
+				 width="77" />
+		</panel>
+	</panel>
+
+	<panel
+		 follows="all"
+		 layout="topleft"
+		 left="0"
+		 class="sidepanel_item_info"
+		 filename="sidepanel_item_info.xml"
+		 name="sidepanel__item_panel"
+		 top="0"
+		 label=""
+		 height="570"
+		 visible="false"
+		 width="330">
+	</panel>
 
-    <panel
-     class="sidepanel_item_info"
-     filename="sidepanel_item_info.xml"
-     follows="all"
-     height="360"
-     layout="topleft"
-     left="0"
-     help_topic="item_info_tab"
-     name="sidepanel_item_info"
-     top="30"
-     visible="false" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index 6a6e22c2e65..faf310d5c9d 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  auto_tile="true"
- height="560"
+ height="570"
  layout="topleft"
  name="item properties"
  help_topic="item_properties"
  save_rect="true"
  title="Inventory Item Properties"
- width="325">
+ width="333">
     <panel.string
      name="unknown">
         (unknown)
@@ -49,28 +49,15 @@
      tab_stop="false"
      top="0"
      width="25" />
-
-    <tab_container
-     follows="all"
-     height="450"
-     layout="topleft"
-     left="10"
-     name="tabs"
-     tab_min_width="70"
-     tab_height="0"
-     tab_position="top"
-     top_pad="10"
-     width="313">
         <panel
          follows="all"
-         height="500"
+         height="450"
          label=""
          layout="topleft"
-         left="0"
+         left="5"
          help_topic="people_nearby_tab"
          name="nearby_panel"
-         top="0"
-		 border="1"
+         top="30"
          width="313">
     <text
      type="string"
@@ -487,22 +474,22 @@
         Price: L$
     </text-->
 	</panel>
-	</tab_container>
+
     <panel
      height="25"
      layout="bottomright"
-     left="0"
-     help_topic="places_button_tab"
+     help_topic="button_tab"
      name="button_panel"
+     left="5"
 	 bottom="5"
-     width="325">
+     width="313">
         <button
          follows="bottom|left"
          font="SansSerifSmallBold"
          height="25"
          label="Edit"
          layout="topleft"
-         left="10"
+         left="0"
          name="edit_btn"
          top="0"
          width="50" />
@@ -513,7 +500,7 @@
          label="Cancel"
          layout="topleft"
          name="cancel_btn"
-         right="-10"
+         right="-1"
          top="0"
          width="70" />
         <button
-- 
GitLab


From 99b90378069f91e49d2db0a58932545f480bc4f7 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Tue, 3 Nov 2009 20:09:31 -0500
Subject: [PATCH 096/306] EXT-2130 : XUI Cleanup

Tab/indent formatting for sidepanel_item_info

--HG--
branch : avatar-pipeline
---
 .../default/xui/en/sidepanel_item_info.xml    | 1019 +++++++++--------
 1 file changed, 521 insertions(+), 498 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index faf310d5c9d..f77fc204f34 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -1,518 +1,541 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- auto_tile="true"
- height="570"
- layout="topleft"
- name="item properties"
- help_topic="item_properties"
- save_rect="true"
- title="Inventory Item Properties"
- width="333">
-    <panel.string
-     name="unknown">
+	 auto_tile="true"
+	 height="570"
+	 layout="topleft"
+	 name="item properties"
+	 help_topic="item_properties"
+	 save_rect="true"
+	 title="Inventory Item Properties"
+	 width="333">
+	<panel.string
+		 name="unknown">
         (unknown)
-    </panel.string>
-    <panel.string
-     name="public">
+	</panel.string>
+	<panel.string
+		 name="public">
         (public)
     </panel.string>
-    <panel.string
-     name="you_can">
+	<panel.string
+    	 name="you_can">
         You can:
     </panel.string>
-    <panel.string
-     name="owner_can">
+	<panel.string
+    	 name="owner_can">
         Owner can:
     </panel.string>
-    <panel.string
-     name="acquiredDate">
+	<panel.string
+    	 name="acquiredDate">
         [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
-    </panel.string>
-    <icon
-     follows="top|right"
-     height="18"
-     image_name="Lock"
-     layout="topleft"
-     right="-50"
-     mouse_opaque="true"
-     name="IconLocked"
-     top="4"
-     width="18" />
+	</panel.string>
+	<icon
+     	 follows="top|right"
+     	 height="18"
+     	 image_name="Lock"
+	     layout="topleft"
+		 right="-50"
+	     mouse_opaque="true"
+	     name="IconLocked"
+	     top="4"
+	     width="18" />
     <button
-     follows="top|right"
-     height="25"
-     image_overlay="BackArrow_Off"
-     layout="topleft"
-     name="back_btn"
-     picture_style="true"
-     right="-5"
-     tab_stop="false"
-     top="0"
-     width="25" />
-        <panel
+	     follows="top|right"
+	     height="25"
+	     image_overlay="BackArrow_Off"
+	     layout="topleft"
+	     name="back_btn"
+	     picture_style="true"
+	     right="-5"
+	     tab_stop="false"
+	     top="0"
+	     width="25" />
+	<panel
          follows="all"
-         height="450"
+         height="500"
          label=""
          layout="topleft"
          left="5"
-         help_topic="people_nearby_tab"
-         name="nearby_panel"
+         help_topic=""
          top="30"
+		 border="1"
          width="313">
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left="5"
-     name="LabelItemNameTitle"
-     top="5"
-     width="78">
-        Name:
-    </text>
-    <line_editor
-     border_style="line"
-     border_thickness="1"
-     follows="left|top|right"
-     height="16"
-     layout="topleft"
-     left_delta="78"
-     max_length="63"
-     name="LabelItemName"
-     top_delta="0"
-     width="225" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left="5"
-     name="LabelItemDescTitle"
-     top_delta="20"
-     width="78">
-        Description:
-    </text>
-    <line_editor
-     border_style="line"
-     border_thickness="1"
-     follows="left|top|right"
-     height="16"
-     layout="topleft"
-     left_delta="78"
-     max_length="127"
-     name="LabelItemDesc"
-     top_delta="0"
-     width="225" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left="10"
-     name="LabelCreatorTitle"
-     top="65"
-     width="78">
-        Creator:
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left_delta="78"
-     name="LabelCreatorName"
-     top_delta="0"
-     width="200">
-        Nicole Linden
-    </text>
-    <button
-     follows="top|right"
-     font="SansSerifSmall"
-     height="16"
-     label="Profile..."
-     layout="topleft"
-     left_delta="144"
-     name="BtnCreator"
-     top_delta="0"
-     width="78" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left="10"
-     name="LabelOwnerTitle"
-     top="85"
-     width="78">
-        Owner:
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left_delta="78"
-     name="LabelOwnerName"
-     top_delta="0"
-     width="200">
-        Thrax Linden
-    </text>
-    <button
-     follows="top|right"
-     font="SansSerifSmall"
-     height="16"
-     label="Profile..."
-     layout="topleft"
-     left_delta="144"
-     name="BtnOwner"
-     top_delta="0"
-     width="78" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left="10"
-     name="LabelAcquiredTitle"
-     top="105"
-     width="78">
-        Acquired:
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left_delta="78"
-     name="LabelAcquiredDate"
-     top_delta="0"
-     width="252">
-        Wed May 24 12:50:46 2006
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="OwnerLabel"
-     top="125"
-     width="78">
-        You:
-    </text>
-    <check_box
-     height="16"
-     label="Edit"
-     layout="topleft"
-     left_pad="5"
-     name="CheckOwnerModify"
-     top_delta="0"
-     width="78" />
-    <check_box
-     height="16"
-     label="Copy"
-     layout="topleft"
-     left_delta="0"
-     name="CheckOwnerCopy"
-     top_pad="5"
-     width="88" />
-    <check_box
-     height="16"
-     label="Resell"
-     layout="topleft"
-     left_delta="0"
-     name="CheckOwnerTransfer"
-     top_pad="5"
-     width="106" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="AnyoneLabel"
-     top_pad="5"
-     width="78">
-        Anyone:
-    </text>
-    <check_box
-     height="16"
-     label="Copy"
-     layout="topleft"
-     left_pad="5"
-     name="CheckEveryoneCopy"
-     top_delta="0"
-     width="130" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="GroupLabel"
-     top_pad="5"
-     width="78">
-        Group:
-    </text>
-    <check_box
-     height="16"
-     label="Share"
-     layout="topleft"
-     left_pad="5"
-     name="CheckShareWithGroup"
-     top_delta="5"
-     width="106" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="NextOwnerLabel"
-     top_pad="5"
-     width="78">
-        Next owner:
-    </text>
-    <check_box
-     height="16"
-     label="Edit"
-     layout="topleft"
-     left_pad="5"
-     name="CheckNextOwnerModify"
-     top_delta="0"
-     width="78" />
-    <check_box
-     height="16"
-     label="Copy"
-     layout="topleft"
-     left_delta="0"
-     name="CheckNextOwnerCopy"
-     top_pad="5"
-     width="88" />
-    <check_box
-     height="16"
-     label="Resell"
-     layout="topleft"
-     left_delta="0"
-     name="CheckNextOwnerTransfer"
-     top_pad="5"
-     width="106" />
-    <check_box
-     height="16"
-     label="For Sale"
-     layout="topleft"
-     left="10"
-     name="CheckPurchase"
-     top_pad="5"
-     width="78" />
-     <combo_box
-     height="19"
-     left_pad="5"
-     layout="topleft"
-     follows="left|top"
-     name="combobox sale copy"
-     width="90">
-        <combo_box.item
-         label="Copy"
-         name="Copy"
-         value="Copy" />
-        <combo_box.item
-         label="Original"
-         name="Original"
-         value="Original" />
-    </combo_box>
-    <spinner
-        follows="left|top"
-        decimal_digits="0"
-        increment="1"
-        control_name="Edit Cost"
-        name="Edit Cost"
-        label="Price: L$"
-        label_width="60"
-        left="10"
-        width="180"
-        min_val="1"
-        height="19"
-        max_val="999999999"
-        top_pad="5"/>
-
-    <!--line_editor
-     border_style="line"
-     border_thickness="1"
-     follows="left|top|right"
-     height="16"
-     layout="topleft"
-     left_pad="5"
-     max_length="25"
-     name="EditPrice"
-     top_delta="0"
-     width="242" /-->
-
-    <!--text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="BaseMaskDebug"
-     top="155"
-     width="330">
-        B:
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_delta="60"
-     name="OwnerMaskDebug"
-     top_delta="0"
-     width="270">
-        O:
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_delta="60"
-     name="GroupMaskDebug"
-     top_delta="0"
-     width="210">
-        G:
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_delta="60"
-     name="EveryoneMaskDebug"
-     top_delta="0"
-     width="150">
-        E:
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_delta="60"
-     name="NextMaskDebug"
-     top_delta="0"
-     width="90">
-        N:
-    </text-->
-        <!--text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="SaleLabel"
-     top_pad="5"
-     width="330">
-        Mark Item:
-    </text-->
-
-
-    <!--radio_group
-     draw_border="false"
-     follows="left|top|right"
-     height="16"
-     layout="topleft"
-     left_delta="78"
-     name="RadioSaleType"
-     top_delta="0"
-     width="252">
-        <radio_item
-         height="16"
-         label="Original"
-         layout="topleft"
-         left="0"
-         name="radio"
-         top="0"
-         width="70" />
-        <radio_item
-         height="16"
-         label="Copy"
-         layout="topleft"
-         left_delta="60"
-         name="radio2"
-         top_delta="0"
-         width="70" />
-    </radio_group-->
-
-    <!--text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left="10"
-     name="TextPrice"
-     top_pad="5"
-     width="78">
-        Price: L$
-    </text-->
+	    <text	 	 	 
+		     type="string"
+		     length="1"
+		     follows="left|top"
+		     height="10"
+		     layout="topleft"
+		     left="5"
+		     name="LabelItemNameTitle"
+		     top="5"
+		     width="78">
+	        Name:
+	    </text>
+    	<line_editor
+		     border_style="line"
+		     border_thickness="1"
+	    	 follows="left|top|right"
+		     height="16"
+		     layout="topleft"
+	    	 left_delta="78"
+		     max_length="63"
+		     name="LabelItemName"
+	    	 top_delta="0"
+		     width="225" />
+	    <text
+		     type="string"
+		     length="1"
+	    	 follows="left|top"
+	    	 height="10"
+		     layout="topleft"
+    		 left="5"
+		     name="LabelItemDescTitle"
+    		 top_delta="20"
+	    	 width="78">
+	        Description:
+	    </text>
+	    <line_editor
+		     border_style="line"
+    		 border_thickness="1"
+	    	 follows="left|top|right"
+	    	 height="16"
+		     layout="topleft"
+    		 left_delta="78"
+		     max_length="127"
+    		 name="LabelItemDesc"
+	    	 top_delta="0"
+	    	 width="225" />
+	    <text
+		     type="string"
+		     length="1"
+		     follows="left|top"
+		     height="16"
+		     layout="topleft"
+		     left="10"
+		     name="LabelCreatorTitle"
+		     top="65"
+		     width="78">
+	        Creator:
+    	</text>
+	    <text
+		     type="string"
+		     length="1"
+		     follows="left|top"
+		     height="16"
+		     layout="topleft"
+		     left_delta="78"
+		     name="LabelCreatorName"
+		     top_delta="0"
+		     width="200">
+	        Nicole Linden
+	     </text>
+	     <button
+			 follows="top|right"
+			 font="SansSerifSmall"
+			 height="16"
+			 label="Profile..."
+			 layout="topleft"
+			 left_delta="144"
+			 name="BtnCreator"
+			 top_delta="0"
+			 width="78" />
+	     <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="16"
+			 layout="topleft"
+			 left="10"
+			 name="LabelOwnerTitle"
+			 top="85"
+			 width="78">
+			    Owner:
+	     </text>
+	     <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="16"
+			 layout="topleft"
+			 left_delta="78"
+			 name="LabelOwnerName"
+			 top_delta="0"
+			 width="200">
+			    Thrax Linden
+	     </text>
+	     <button
+			 follows="top|right"
+			 font="SansSerifSmall"
+			 height="16"
+			 label="Profile..."
+			 layout="topleft"
+			 left_delta="144"
+			 name="BtnOwner"
+			 top_delta="0"
+			 width="78" />
+	     <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="16"
+			 layout="topleft"
+			 left="10"
+			 name="LabelAcquiredTitle"
+			 top="105"
+			 width="78">
+			Acquired:
+	     </text>
+	     <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="16"
+			 layout="topleft"
+			 left_delta="78"
+			 name="LabelAcquiredDate"
+			 top_delta="0"
+			 width="252">
+			Wed May 24 12:50:46 2006
+	    </text>
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left="10"
+			 name="OwnerLabel"
+			 top="125"
+			 width="78">
+			You:
+	    </text>
+	    <check_box
+			 height="16"
+			 label="Edit"
+			 layout="topleft"
+			 left_pad="5"
+			 name="CheckOwnerModify"
+			 top_delta="0"
+			 width="78" />
+	    <check_box
+			 height="16"
+			 label="Copy"
+			 layout="topleft"
+			 left_delta="0"
+			 name="CheckOwnerCopy"
+			 top_pad="5"
+			 width="88" />
+	    <check_box
+			 height="16"
+			 label="Resell"
+			 layout="topleft"
+			 left_delta="0"
+			 name="CheckOwnerTransfer"
+			 top_pad="5"
+			 width="106" />
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left="10"
+			 name="AnyoneLabel"
+			 top_pad="5"
+			 width="78">
+			Anyone:
+	    </text>
+	    <check_box
+			 height="16"
+			 label="Copy"
+			 layout="topleft"
+			 left_pad="5"
+			 name="CheckEveryoneCopy"
+			 top_delta="0"
+			 width="130" />
+    	<text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left="10"
+			 name="GroupLabel"
+			 top_pad="5"
+			 width="78">
+			Group:
+    	</text>
+	    <check_box
+			 height="16"
+			 label="Share"
+			 layout="topleft"
+			 left_pad="5"
+			 name="CheckShareWithGroup"
+			 top_delta="5"
+			 width="106" />
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left="10"
+			 name="NextOwnerLabel"
+			 top_pad="5"
+			 width="78">
+			Next owner:
+	    </text>
+	    <check_box
+			 height="16"
+			 label="Edit"
+			 layout="topleft"
+			 left_pad="5"
+			 name="CheckNextOwnerModify"
+			 top_delta="0"
+			 width="78" />
+	    <check_box
+			 height="16"
+			 label="Copy"
+			 layout="topleft"
+			 left_delta="0"
+			 name="CheckNextOwnerCopy"
+			 top_pad="5"
+			 width="88" />
+	    <check_box
+			 height="16"
+			 label="Resell"
+			 layout="topleft"
+			 left_delta="0"
+			 name="CheckNextOwnerTransfer"
+			 top_pad="5"
+			 width="106" />
+	    <check_box
+			 height="16"
+			 label="For Sale"
+			 layout="topleft"
+			 left="10"
+			 name="CheckPurchase"
+			 top_pad="5"
+			 width="78" />
+		<combo_box
+			 height="19"
+			 left_pad="5"
+			 layout="topleft"
+			 follows="left|top"
+			 name="combobox sale copy"
+			 width="90">
+			<combo_box.item
+			     label="Copy"
+			     name="Copy"
+			     value="Copy" />
+			<combo_box.item
+			     label="Original"
+			     name="Original"
+			     value="Original" />
+	    </combo_box>
+	    <spinner
+			    follows="left|top"
+			    decimal_digits="0"
+			    increment="1"
+			    control_name="Edit Cost"
+			    name="Edit Cost"
+			    label="Price: L$"
+			    label_width="60"
+			    left="10"
+			    width="180"
+			    min_val="1"
+			    height="19"
+			    max_val="999999999"
+			    top_pad="5"/>
+	    <!--line_editor
+			 border_style="line"
+			 border_thickness="1"
+			 follows="left|top|right"
+			 height="16"
+			 layout="topleft"
+			 left_pad="5"
+			 max_length="25"
+			 name="EditPrice"
+			 top_delta="0"
+			 width="242" /-->
+	    <!--text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left="10"
+			 name="BaseMaskDebug"
+			 top="155"
+			 width="330">
+			B:
+	    </text>
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left_delta="60"
+			 name="OwnerMaskDebug"
+			 top_delta="0"
+			 width="270">
+			O:
+	    </text>
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left_delta="60"
+			 name="GroupMaskDebug"
+			 top_delta="0"
+			 width="210">
+			G:
+	    </text>
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left_delta="60"
+			 name="EveryoneMaskDebug"
+			 top_delta="0"
+			 width="150">
+			E:
+	    </text>
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left_delta="60"
+			 name="NextMaskDebug"
+			 top_delta="0"
+			 width="90">
+			N:
+	    </text-->
+			    <!--text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left="10"
+			 name="SaleLabel"
+			 top_pad="5"
+			 width="330">
+			Mark Item:
+	    </text-->
+	    <!--radio_group
+			 draw_border="false"
+			 follows="left|top|right"
+			 height="16"
+			 layout="topleft"
+			 left_delta="78"
+			 name="RadioSaleType"
+			 top_delta="0"
+			 width="252">
+			    <radio_item
+			     height="16"
+			     label="Original"
+			     layout="topleft"
+			     left="0"
+			     name="radio"
+			     top="0"
+			     width="70" />
+			    <radio_item
+			     height="16"
+			     label="Copy"
+			     layout="topleft"
+			     left_delta="60"
+			     name="radio2"
+			     top_delta="0"
+			     width="70" />
+	    </radio_group-->
+	    <!--text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="16"
+			 layout="topleft"
+			 left="10"
+			 name="TextPrice"
+			 top_pad="5"
+			 width="78">
+			Price: L$
+	    </text-->
 	</panel>
-
     <panel
-     height="25"
-     layout="bottomright"
-     help_topic="button_tab"
-     name="button_panel"
-     left="5"
-	 bottom="5"
-     width="313">
-        <button
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Edit"
-         layout="topleft"
-         left="0"
-         name="edit_btn"
-         top="0"
-         width="50" />
-        <button
-         follows="bottom|right"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Cancel"
-         layout="topleft"
-         name="cancel_btn"
-         right="-1"
-         top="0"
-         width="70" />
-        <button
-         follows="bottom|right"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Save"
-         layout="topleft"
-         name="save_btn"
-         left_pad="-135"
-         top="0"
-         width="60" />
-    </panel>
-
+		 height="25"
+		 layout="bottomright"
+		 help_topic="button_tab"
+		 name="button_panel"
+		 left="5"
+		 bottom="5"
+		 width="313">
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Edit"
+		     layout="topleft"
+		     left="0"
+		     name="edit_btn"
+		     top="0"
+		     width="50" />
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Open"
+		     layout="topleft"
+		     left_pad="5"
+		     name="edit_btn"
+		     top="0"
+		     width="60" />
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Build"
+		     layout="topleft"
+		     left_pad="5"
+		     name="edit_btn"
+		     top="0"
+		     width="60" />
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Buy"
+		     layout="topleft"
+		     left_pad="5"
+		     name="edit_btn"
+		     top="0"
+		     width="60" />
+	    <button
+		     follows="bottom|right"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Cancel"
+		     layout="topleft"
+		     name="cancel_btn"
+		     right="-1"
+		     top="0"
+		     width="70" />
+	    <button
+		     follows="bottom|right"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Save"
+		     layout="topleft"
+		     name="save_btn"
+		     left_pad="-135"
+		     top="0"
+		     width="60" />
+	</panel>
 </panel>
-- 
GitLab


From ce3dfcee3bec1ad782128ea891e21130911c9984 Mon Sep 17 00:00:00 2001
From: Erica <erica@lindenlab.com>
Date: Tue, 3 Nov 2009 17:35:07 -0800
Subject: [PATCH 097/306] EXT-2062  UI of Notice accordion in the Group Profile
 panel is corrupted, EXT-1528 Widen groups content to match new sidebar width

---
 .../default/xui/en/panel_group_general.xml    |   6 +-
 .../xui/en/panel_group_info_sidetray.xml      | 139 +++--
 .../default/xui/en/panel_group_land_money.xml | 207 +++----
 .../default/xui/en/panel_group_notices.xml    | 243 ++++-----
 .../default/xui/en/panel_group_roles.xml      | 503 ++++++------------
 5 files changed, 468 insertions(+), 630 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index a85c55f9b2c..4f24c7a745b 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  follows="all"
- height="412"
+     height="380"
  label="General"
  class="panel_group_general"
  layout="topleft"
  left="0"
  top="0"
  name="general_tab"
- width="313">
+ width="303">
     <panel.string
      name="help_text">
         The General tab contains general information about this group, a list of members, general Group Preferences and member options.
@@ -41,7 +41,7 @@ Hover your mouse over the options for more help.
      draw_heading="true"
      follows="left|top"
      heading_height="16"
-     height="160"
+     height="130"
      layout="topleft"
      left_delta="0"
      name="visible_members"
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index d8d47c40084..63e8ffcb1ee 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -5,7 +5,7 @@ background_visible="true"
  height="570"
  label="Group Info"
  layout="topleft"
- min_height="350"
+ min_height="425"
  left="0"
  top="20"
  name="GroupInfo"
@@ -60,7 +60,7 @@ background_visible="true"
      top_delta="5"
      width="250"
      height="20"
-     visible="true" />
+     visible="false" />
     <texture_picker
      follows="left|top"
      height="113"
@@ -112,33 +112,46 @@ background_visible="true"
      left_delta="0"
      top_pad="6"
      height="23"
-     label="Join now!"
-     label_selected="Join now!"
+     label="JOIN NOW!"
      name="btn_join"
      visible="true"
      width="120" />
    <accordion
              follows="all"
-             height="405"
+             height="425"
              layout="topleft"
              left="0"
+             multiple_expansion="false"
              name="groups_accordion"
-             top_pad="20"
-             width="333">
+             top_pad="15"
+             width="336">
              <accordion_tab
                  can_resize="false"
+                 expanded="true"
                  layout="topleft"
                  name="tab_general"
                  title="General">
-        <panel
-        border="false"
-         filename="panel_group_general.xml"
+         <scroll_container
+         color="DkGray2"
+         opaque="true"
+         height="323"
+         follows="all"
          layout="topleft"
          left="0"
-         help_topic="group_general_tab"
-         name="general_tab"
          top="0"
-         width="333" />
+         name="general_scroll"
+         reserve_scroll_corner="false"
+         width="333">
+            <panel
+            border="false"
+             filename="panel_group_general.xml"
+             layout="topleft"
+             left="0"
+             help_topic="group_general_tab"
+             name="general_tab"
+             top="0"
+             width="303" />
+         </scroll_container>
          </accordion_tab>
          <accordion_tab
                  can_resize="false"
@@ -146,15 +159,27 @@ background_visible="true"
                  layout="topleft"
                  name="tab_roles"
                  title="Roles">
-        <panel
-        border="false"
-         filename="panel_group_roles.xml"
-         layout="topleft"
-         left="0"
-         help_topic="group_roles_tab"
-         name="roles_tab"
-         top="0"
-         width="333" />
+               <scroll_container
+                  color="DkGray2"
+                  opaque="true"
+                  height="323"
+                  follows="all"
+                  layout="topleft"
+                  left="0"
+                  top="0"
+                  name="roles_scroll"
+                  reserve_scroll_corner="false"
+                  width="333">
+                 <panel
+                 border="false"
+                  filename="panel_group_roles.xml"
+                  layout="topleft"
+                  left="0"
+                  help_topic="group_roles_tab"
+                  name="roles_tab"
+                  top="0"
+             width="303" />
+         </scroll_container>
          </accordion_tab>
          <accordion_tab
                  can_resize="false"
@@ -162,21 +187,45 @@ background_visible="true"
                  layout="topleft"
                  name="tab_notices"
                  title="Notices">
+            <scroll_container
+                  color="DkGray2"
+                  opaque="true"
+                  height="323"
+                  follows="all"
+                  layout="topleft"
+                  left="0"
+                  top="0"
+                  name="notices_scroll"
+                  reserve_scroll_corner="false"
+                  width="333">
         <panel
+        border="false"
          filename="panel_group_notices.xml"
          layout="topleft"
          left="0"
          help_topic="group_notices_tab"
          name="notices_tab"
          top="0"
-         width="333" />
+         width="303" />
+         </scroll_container>
          </accordion_tab>
-                  <accordion_tab
+        <accordion_tab
                  can_resize="false"
                  expanded="false"
                  layout="topleft"
                  name="tab_notices"
                  title="Land/Assets">
+           <scroll_container
+                  color="DkGray2"
+                  opaque="true"
+                  height="323"
+                  follows="all"
+                  layout="topleft"
+                  left="0"
+                  top="0"
+                  name="land_scroll"
+                  reserve_scroll_corner="false"
+                  width="333">
         <panel
         border="false"
          filename="panel_group_land_money.xml"
@@ -185,41 +234,43 @@ background_visible="true"
          help_topic="group_land_money_tab"
          name="land_money_tab"
          top="0"
-         width="333" />
+         width="313" />
+         </scroll_container>
          </accordion_tab>
          </accordion>
-    <button
+   <button
      follows="top|left"
-     height="20"
+     height="22"
      image_overlay="Refresh_Off"
      layout="topleft"
+     left="5"
      name="btn_refresh"
      picture_style="true"
-     left="5"
-     width="20" />
-     <button
-     height="20"
-     font="SansSerifSmall"
-     label="Save"
-     label_selected="Save"
-     name="btn_apply"
-     left_pad="5"
-     width="65" />
-    <button
+     top_pad="-15"
+     width="23" />
+         <button
      height="20"
      label="Create"
-     label_selected="Create"
+     label_selected="New group"
      name="btn_create"
-     left_pad="5"
+     left_pad="10"
      visible="false"
-     width="65" />
-    <button
-     left_pad="5"
+     width="100" />
+   <!-- <button
+     left_pad="10"
      height="20"
      label="Cancel"
      label_selected="Cancel"
      name="btn_cancel"
      visible="false"
+     width="65" />-->
+     <button
+     height="20"
+     font="SansSerifSmall"
+     label="Save"
+     label_selected="Save"
+     name="btn_apply"
+     left_pad="10"
+     right="-10"
      width="65" />
-
 </panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
index c81c7113ae2..99fc39c466a 100644
--- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
@@ -1,25 +1,25 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- border="true"
+ border="false"
  follows="all"
  height="510"
  label="Land &amp; L$"
  layout="topleft"
  left="1"
  name="land_money_tab"
- top="490"
- width="280">
+ top="0"
+ width="313">
     <panel.string
      name="help_text">
-        Parcels owned by the group are listed along with contribution details. A warning appears until the Total Land in Use is less than or equal to the Total Contribution. The Planning, Details, and Sales tabs provide information about the group&apos;s finances.
+        Parcels owned by a group are listed along with contribution details. A warning appears until the Total Land in Use is less than or = to the Total Contribution.
     </panel.string>
     <panel.string
      name="cant_view_group_land_text">
-        You do not have permission to view group owned land.
+        You don&apos;t have permission to view group owned land
     </panel.string>
     <panel.string
      name="cant_view_group_accounting_text">
-        You do not have permission to view the group&apos;s accounting information.
+        You don&apos;t have permission to view the group&apos;s accounting information.
     </panel.string>
     <panel.string
      name="loading_txt">
@@ -27,7 +27,7 @@
     </panel.string>
     <panel.string
      name="land_contrib_error">
-        Unable to set your land contribution.
+        Unable to set your land contribution
     </panel.string>
    <!-- <text
      type="string"
@@ -44,29 +44,29 @@
     <scroll_list
      draw_heading="true"
      follows="top"
-     heading_height="14"
-     height="100"
+     heading_height="20"
+     height="150"
      layout="topleft"
-     left="5"
+     left="0"
      name="group_parcel_list"
-     top_pad="10"
-     width="265">
+     top_pad="0"
+     width="313">
         <scroll_list.columns
          label="Parcel"
          name="name"
-         width="67" />
+         width="78" />
         <scroll_list.columns
          label="Region"
          name="location"
-         width="72" />
+         width="78" />
         <scroll_list.columns
          label="Type"
          name="type"
-         width="60" />
+         width="70" />
         <scroll_list.columns
          label="Area"
          name="area"
-         width="20" />
+         width="50" />
         <scroll_list.columns
          label=""
          name="hidden"
@@ -74,14 +74,14 @@
     </scroll_list>
     <button
      follows="top"
-     height="20"
+     height="23"
      label="Map"
      label_selected="Map"
      layout="topleft"
-     left="150"
      name="map_button"
-     top_pad="10"
-     width="125"
+     right="-10"
+     top_pad="5"
+     width="95"
      enabled="false" />
     <text
      type="string"
@@ -91,11 +91,12 @@
      layout="topleft"
      left="5"
      name="total_contributed_land_label"
-     top_pad="10"
+     top_pad="0"
      width="130">
         Total Contribution:
     </text>
     <text
+    text_color="EmphasisColor"
      type="string"
      follows="left|top"
      height="16"
@@ -119,6 +120,7 @@
         Total Land In Use:
     </text>
     <text
+    text_color="EmphasisColor"
      type="string"
      follows="left|top"
      height="16"
@@ -142,6 +144,7 @@
         Land Available:
     </text>
     <text
+    text_color="EmphasisColor"
      type="string"
      follows="left|top"
      height="16"
@@ -168,19 +171,19 @@
      border_style="line"
      border_thickness="1"
      follows="left|top"
-     height="16"
+     height="19"
      layout="topleft"
      left_pad="5"
      max_length="10"
      name="your_contribution_line_editor"
-     top_delta="-2"
+     top_delta="0"
      width="95" />
     <text
      type="string"
      follows="left|top"
      height="16"
      layout="topleft"
-     left_pad="5"
+     left_pad="3"
      name="your_contribution_units"
      top_delta="2">
         m²
@@ -193,13 +196,13 @@
      layout="topleft"
      left="140"
      name="your_contribution_max_value"
-     top_pad="0"
+     top_pad="2"
      width="95">
         ([AMOUNT] max)
     </text>
     <icon
      height="16"
-     image_name="smicon_warn.tga"
+     image_name="notify_next"
      layout="topleft"
      left="9"
      name="group_over_limit_icon"
@@ -211,14 +214,14 @@
      type="string"
      word_wrap="true"
      font="SansSerifSmall"
-     height="40"
+     height="35"
      layout="topleft"
-     left_pad="5"
+     left_pad="0"
      name="group_over_limit_text"
-     text_color="GroupOverTierColor"
+     text_color="EmphasisColor"
      top_delta="0"
-     width="250">
-        Group members must contribute more land credits to support land in use.
+     width="290">
+        Group members must contribute more land credits to support land in use
     </text>
     <text
      type="string"
@@ -242,128 +245,126 @@
      name="group_money_tab_container"
      tab_position="top"
      tab_height="20"
-     top_pad="10"
-     width="265">
+     top_pad="2"
+     tab_min_width="70"
+     width="300">
         <panel
-         border="true"
+         border="false"
          follows="all"
          height="180"
-         label="Planning"
+         label="PLANNING"
          layout="topleft"
-         left="1"
+         left="0"
          help_topic="group_money_planning_tab"
          name="group_money_planning_tab"
          top="5"
-         width="265">
+         width="300">
             <text_editor
              type="string"
-             bg_readonly_color="0.784314 0.819608 0.8 1"
              follows="all"
-             font="Monospace"
-             height="168"
+             font="SansSerif"
+             height="140"
              layout="topleft"
-             left="8"
+             left="0"
              max_length="4096"
              name="group_money_planning_text"
-             top="5"
-             width="250"
+             top="0"
+             width="300"
              word_wrap="true">
-                Computing...
+                Loading...
             </text_editor>
         </panel>
       <panel
-         border="true"
-         follows="left|top|right|bottom"
+         border="false"
+         follows="all"
          height="180"
-         label="Details"
+         label="DETAILS"
          layout="topleft"
-         left_delta="0"
+         left="0"
          help_topic="group_money_details_tab"
          name="group_money_details_tab"
-         top_delta="0"
-         width="265">
+         top="5"
+         width="300">
           <text_editor
              type="string"
-             bg_readonly_color="0.784314 0.819608 0.8 1"
              follows="all"
-             font="Monospace"
              height="140"
              layout="topleft"
-             left="8"
+             left="0"
              max_length="4096"
              name="group_money_details_text"
-             top="7"
-             width="250"
+             top="0"
+             width="300"
              word_wrap="true">
-                Computing...
+                Loading...
             </text_editor>
-          <button
-             height="20"
-             label="&lt; Earlier"
-             label_selected="&lt; Earlier"
-             layout="topleft"
-             left="5"
-             name="earlier_details_button"
-             tool_tip="Go back in time"
-             top_pad="10"
-             width="125" />
             <button
-             height="20"
-             label="Later &gt;"
-             label_selected="Later &gt;"
-             layout="topleft"
-             left_pad="5"
+	     follows="left|top"
+	     height="23"
+	     image_overlay="Arrow_Left_Off"
+	     layout="topleft"
+	     name="earlier_details_button"
+	     picture_style="true"
+	     tool_tip="Back"
+	     top_pad="3"
+             right="-35"
+	     width="31" />
+             <button
+	     follows="left|top"
+	     height="23"
+	     image_overlay="Arrow_Right_Off"
+	     layout="topleft"
+	     left_pad="10"
              name="later_details_button"
-             tool_tip="Go forward in time"
-             top_delta="0"
-             width="125" />
+	     picture_style="true"
+	     tool_tip="Next"
+	     width="31" />
         </panel>
       <panel
-         border="true"
-         follows="left|top|right|bottom"
+         border="false"
+         follows="all"
          height="180"
-         label="Sales"
+         label="SALES"
          layout="topleft"
          left_delta="0"
          help_topic="group_money_sales_tab"
          name="group_money_sales_tab"
          top_delta="-1"
-         width="265">
+         width="300">
             <text_editor
              type="string"
-             bg_readonly_color="0.784314 0.819608 0.8 1"
              follows="all"
-             font="Monospace"
              height="140"
              layout="topleft"
-             left="8"
+             left="0"
              max_length="4096"
              name="group_money_sales_text"
-             top="7"
-             width="250"
+             top="0"
+             width="300"
              word_wrap="true">
-                Computing...
+                Loading...
             </text_editor>
-            <button
-             height="20"
-             label="&lt; Earlier"
-             label_selected="&lt; Earlier"
-             layout="topleft"
-             left="5"
-             name="earlier_sales_button"
-             tool_tip="Go back in time"
-             top_pad="10"
-             width="125" />
-            <button
-             height="20"
-             label="Later &gt;"
-             label_selected="Later &gt;"
-             layout="topleft"
-             left_pad="5"
+                         <button
+	     follows="left|top"
+	     height="23"
+	     image_overlay="Arrow_Left_Off"
+	     layout="topleft"
+	     name="earlier_sales_button"
+	     picture_style="true"
+	     tool_tip="Back"
+	     top_pad="3"
+             right="-35"
+	     width="31" />
+             <button
+	     follows="left|top"
+	     height="23"
+	     image_overlay="Arrow_Right_Off"
+	     layout="topleft"
+	     left_pad="10"
              name="later_sales_button"
-             tool_tip="Go forward in time"
-             top_delta="0"
-             width="125" />
+	     picture_style="true"
+	     tool_tip="Next"
+	     width="31" />
         </panel>
     </tab_container>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml
index 0e4d490369a..bfb49a60c25 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml
@@ -1,14 +1,13 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- border="true"
  follows="all"
  height="485"
  label="Notices"
  layout="topleft"
- left="1"
+ left="0"
  name="notices_tab"
- top="485"
- width="280">
+ top="0"
+ width="313">
     <panel.string
      name="help_text">
         Notices are a quick way to communicate across a 
@@ -20,60 +19,48 @@ the General tab.
     </panel.string>
     <panel.string
      name="no_notices_text">
-        There are no past notices.
+        There are no past notices
     </panel.string>
-     <!--<text
-      follows="left|top"
-     type="string"
-     font="SansSerifBig"
-     height="16"
-     layout="topleft"
-     left="10"
-     name="lbl"
-     top_pad="10"
-     width="269">
-        Group Notices Archive
-    </text> -->
     <text
       follows="left|top"
      type="string"
      word_wrap="true"
-     height="40"
+     height="30"
      layout="topleft"
-     left_delta="10"
+     left="10"
      name="lbl2"
-     text_color="EmphasisColor"
-     top_pad="10"
-     width="270">
-        Notices are kept for 14 days. Notice lists are limited to 200 notices per group on a daily basis.
+     top="5"
+     width="300">
+     Notices are kept for 14 days
+Groups are limited to 200 notices/group daily
     </text>
     <scroll_list
       follows="left|top"
      column_padding="0"
      draw_heading="true"
-     heading_height="14"
-     height="109"
+     heading_height="16"
+     height="125"
      layout="topleft"
-     left_delta="0"
+     left="0"
      name="notice_list"
      top_pad="0"
-     width="265">
+     width="303">
         <scroll_list.columns
          label=""
          name="icon"
-         width="16" />
+         width="20" />
         <scroll_list.columns
          label="Subject"
          name="subject"
-         width="100" />
+         width="125" />
         <scroll_list.columns
          label="From"
          name="from"
-         width="83" />
+         width="90" />
         <scroll_list.columns
          label="Date"
          name="date"
-         width="50" />
+         width="30" />
         <scroll_list.columns
          name="sort"
          width="-1" />
@@ -84,39 +71,42 @@ the General tab.
      layout="topleft"
      name="notice_list_none_found"
      visible="false">
-        None found.
+        None found
     </text>
-    <button
-      follows="left|top"
-     height="20"
-     font="SansSerifSmall"
-     label="New Notice"
-     label_selected="Create New Notice"
-     layout="topleft"
-     left_delta="0"
-     name="create_new_notice"
-     top_delta="4"
-     width="125" />
-    <button
-      follows="left|top"
-     height="20"
-     font="SansSerifSmall"
-     label="Refresh"
-     label_selected="Refresh List"
+         <button
+       follows="bottom|left"
+       height="18"
+       image_selected="AddItem_Press"
+       image_unselected="AddItem_Off"
+       image_disabled="AddItem_Disabled"
+       layout="topleft"
+       label="Create a new notice"
+       left="15"
+       name="create_new_notice"
+       picture_style="true"
+       tool_tip="Create a new notice"
+     top_delta="-5"
+       width="18" />
+     <button
+     follows="top|left"
+     height="22"
+     image_overlay="Refresh_Off"
      layout="topleft"
-     left_pad="12"
      name="refresh_notices"
-     top_delta="0"
-     width="125" />
+     picture_style="true"
+     right="-5"
+     top_delta="5"
+     width="23" />
     <panel
      follows="left|top"
-     height="268"
+     height="300"
      label="Create New Notice"
      layout="topleft"
      left="0"
-     name="panel_create_new_notice"
      top_pad="10"
-     width="265">
+     visible="false"
+     name="panel_create_new_notice"
+     width="303">
         <text
          follows="left|top"
          type="string"
@@ -127,30 +117,16 @@ the General tab.
          mouse_opaque="false"
          name="lbl"
          text_color="EmphasisColor"
-         top_pad="0"
-         width="265">
+         top="0"
+         width="200">
             Create a Notice
         </text>
-        <text
-         follows="left|top"
-         type="string"
-         word_wrap="true"
-         height="90"
-         layout="topleft"
-         left_delta="0"
-         name="lbl2"
-         text_color="EmphasisColor"
-         top_pad="4"
-         width="195">
-            You can add a single item to a notice by dragging it from your inventory to this panel. Attached items must be copiable and transferrable, and you can&apos;t send a folder.
-        </text>
         <text
          follows="left|top"
          type="string"
          halign="left"
          height="16"
          layout="topleft"
-         left_delta="0"
          name="lbl3"
          top_pad="10"
          width="60">
@@ -164,8 +140,7 @@ the General tab.
          left_pad="3"
          max_length="63"
          name="create_subject"
-         top_delta="-1"
-         width="200" />
+         width="220" />
         <text
          follows="left|top"
          type="string"
@@ -174,106 +149,100 @@ the General tab.
          layout="topleft"
          left="10"
          name="lbl4"
-         top_pad="10"
+         top_pad="5"
          width="60">
             Message:
         </text>
         <text_editor
-         height="75"
+         height="90"
          layout="topleft"
          left_pad="3"
          max_length="511"
          name="create_message"
          top_delta="0"
-         width="200"
+         width="220"
          word_wrap="true" />
         <text
          follows="left|top"
          type="string"
          halign="left"
-         height="16"
+         height="14"
          layout="topleft"
          left="10"
          name="lbl5"
-         top_pad="10"
-         width="60">
+         width="200">
             Attach:
         </text>
         <line_editor
          enabled="false"
-         height="16"
+         height="19"
          layout="topleft"
-         left_pad="3"
-         max_length="63"
+         max_length="90"
          mouse_opaque="false"
          name="create_inventory_name"
-         top_delta="0"
-         width="200" />
+         top_pad="2"
+         width="285" />
+        <text
+        text_color="EmphasisColor"
+         follows="left|top"
+         type="string"
+         halign="right"
+         height="34"
+         layout="topleft"
+         left="10"
+         name="string"
+         top_pad="15"
+         word_wrap="true"
+         width="150">
+            Drag here to attach something -- >
+        </text>
         <icon
-         height="16"
+         height="72"
+         image_name="DropTarget"
          layout="topleft"
-         left_delta="0"
-         name="create_inv_icon"
-         top_delta="0"
-         width="16" />
+         left_pad="10"
+         mouse_opaque="true"
+         name="drop_icon"
+         top_delta="-10"
+         width="72" />
         <button
          follows="left|top"
-         height="20"
-         font="SansSerifSmall"
-         label="Remove Attachment"
-         label_selected="Remove Attachment"
+         height="23"
+         label="Remove"
          layout="topleft"
-         left="10"
+         left="70"
          name="remove_attachment"
-         top_pad="10"
-         width="135" />
+         top_delta="45"
+         width="90" />
         <button
          follows="left|top"
-         height="20"
-         font="SansSerifSmall"
+         height="23"
          label="Send"
          label_selected="Send Notice"
          layout="topleft"
-         left_delta="138"
+         right="-10"
+         top_pad="20"
          name="send_notice"
-         top_delta="0"
-         width="125" />
-        <panel
-         bevel_style="in"
-         border="true"
-         height="71"
-         layout="topleft"
-         left="200"
-         name="drop_target2"
-         top="20"
-         width="71" />
-        <icon
-         height="59"
-         image_name="icon_groupnoticeinventory.tga"
-         layout="topleft"
-         left_delta="6"
-         mouse_opaque="true"
-         name="drop_icon"
-         top="26"
-         width="59" />
-        <group_drop_target
+         width="100" />
+      <group_drop_target
          height="466"
-         layout="topleft"
+         top="0"
          left="0"
+         layout="topleft"
          name="drop_target"
          tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice."
-         top="-198"
-         width="280" />
+         width="295" />
    </panel> 
     <panel
      follows="left|top"
-     height="268"
+     height="300"
      label="View Past Notice"
      layout="topleft"
      left="0"
+     visible="true"
      name="panel_view_past_notice"
-     top="197"
-     width="265">
+     top="180"
+     width="303">
         <text
          type="string"
          font="SansSerifBig"
@@ -294,9 +263,9 @@ the General tab.
          layout="topleft"
          left_delta="0"
          name="lbl2"
-         top_pad="4"
+         top_pad="2"
          width="265">
-            To send a new notice, click the &apos;New Notice&apos; button above.
+            To send a new notice, click the + button
         </text>
         <text
          type="string"
@@ -305,7 +274,7 @@ the General tab.
          layout="topleft"
          left_delta="0"
          name="lbl3"
-         top_pad="24"
+         top_pad="15"
          visible="false"
          width="60">
             Subject:
@@ -336,13 +305,13 @@ the General tab.
         </text>
         <text_editor
          enabled="false"
-         height="150"
+         height="205"
          layout="topleft"
          left="10"
          max_length="511"
          name="view_message"
          top_delta="-35"
-         width="260"
+         width="285"
          word_wrap="true" />
         <line_editor
          enabled="false"
@@ -353,7 +322,7 @@ the General tab.
          mouse_opaque="false"
          name="view_inventory_name"
          top_pad="10"
-         width="260" />
+         width="285" />
         <icon
          height="16"
          layout="topleft"
@@ -363,14 +332,12 @@ the General tab.
          width="16" />
         <button
          follows="left|top"
-         height="20"
-         font="SansSerifSmall"
-         label="Open Attachment"
-         label_selected="Open Attachment"
+         height="23"
+         label="Open attachment"
          layout="topleft"
-         left_delta="0"
+         right="-10"
          name="open_attachment"
-         top_pad="10"
+         top_pad="5"
          width="135" />
         </panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index e87859f788a..5ed464bcec8 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  border="false"
- height="412"
+ height="552"
  label="Members &amp; Roles"
  layout="topleft"
  left="0"
@@ -18,158 +18,28 @@
     </panel.string>
     <panel.string
      name="help_text" />
-    <!--<panel
-     follows="left|top"
-     height="80"
-     layout="topleft"
-     left="10"
-     name="members_header"
-     top_pad="10"
-     width="270">
-        <text
-         type="string"
-         font="SansSerifBig"
-         height="16"
-         layout="topleft"
-         left="0"
-         name="static"
-         top="0"
-         width="270">
-            Members &amp; Roles
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="40"
-         layout="topleft"
-         left_delta="0"
-         name="static2"
-         top_pad="4"
-         width="270">
-            Group Members are assigned Roles with Abilities. These settings can easily be customized, allowing for greater organization and flexibility.
-        </text>
-    </panel>
-    <panel
-     follows="left|top"
-     height="24"
-     layout="topleft"
-     left_delta="0"
-     name="roles_header"
-     top_delta="0"
-     visible="false"
-     width="270">
-        <text
-         type="string"
-         font="SansSerifBig"
-         height="16"
-         layout="topleft"
-         left="0"
-         name="static"
-         top="0"
-         width="270">
-            Roles
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="40"
-         layout="topleft"
-         left_delta="0"
-         name="role_properties_modifiable"
-         top_pad="4"
-         visible="false"
-         width="270">
-            Select a Role below.  You can modify its Name, Description and Member Title.
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="40"
-         layout="topleft"
-         left_delta="0"
-         name="role_properties_not_modifiable"
-         top_delta="0"
-         width="270">
-            Select a Role below to see its properties, Members and allowed Abilities.
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="16"
-         layout="topleft"
-         left_delta="0"
-         name="role_actions_modifiable"
-         top_delta="24"
-         visible="false"
-         width="270">
-            You can also assign Abilities to the Role.
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="16"
-         layout="topleft"
-         left_delta="0"
-         name="role_actions_not_modifiable"
-         top_delta="0"
-         width="270">
-            You may view, but not modify, assigned Abilities.
-        </text>
-    </panel>
-    <panel
-     follows="left|top"
-     height="24"
-     layout="topleft"
-     left_delta="0"
-     name="actions_header"
-     top_delta="0"
-     visible="false"
-     width="270">
-        <text
-         type="string"
-         font="SansSerifBig"
-         height="16"
-         layout="topleft"
-         left="0"
-         name="static"
-         top="0"
-         width="270">
-            Abilities
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="40"
-         layout="topleft"
-         left_delta="0"
-         name="static2"
-         top_pad="4"
-         width="270">
-            You can view an Ability&apos;s Description and which Roles and Members can execute the Ability.
-        </text>
-    </panel> -->
     <tab_container
-    border="true"
+    border="false"
      follows="left|top"
-     height="260"
+     height="245"
      halign="center"
      layout="topleft"
      left="5"
      name="roles_tab_container"
      tab_position="top"
      tab_height="20"
-     top="0"
+     tab_min_width="96"
+     top="3"
      width="303">
         <panel
          border="false"
-         height="260"
-         label="Members"
+         height="220"
+         label="MEMBERS"
          layout="topleft"
-         left="1"
+         left="0"
          help_topic="roles_members_tab"
          name="members_sub_tab"
          tool_tip="Members"
-         top="17"
          class="panel_group_members_subtab"
          width="300">
             <panel.string
@@ -187,8 +57,7 @@ clicking on their names.
          follows="left|top|right"
          max_length="250"
          label="Filter Members"
-         name="filter_input"
-         font="SansSerif" />
+         name="filter_input" />
           <!--  <button
              enabled="false"
              font="SansSerifSmall"
@@ -229,6 +98,7 @@ clicking on their names.
              font="SansSerifSmall"
              label="Invite"
              layout="topleft"
+             left="5"
              name="member_invite"
              top_pad="3"
              width="100" />
@@ -238,8 +108,10 @@ clicking on their names.
              label="Eject"
              layout="topleft"
              left_pad="5"
+             right="-5"
              name="member_eject"
              width="100" />
+             <!--What is this?-->
             <icon
              height="16"
              image_name="Inv_FolderClosed"
@@ -250,15 +122,14 @@ clicking on their names.
         </panel>
         <panel
          border="false"
-         height="164"
-         label="Roles"
+         height="220"
+         label="ROLES"
          layout="topleft"
-         left_delta="0"
+         left="0"
          help_topic="roles_roles_tab"
          name="roles_sub_tab"
          class="panel_group_roles_subtab"
-         top="17"
-         width="265">
+         width="300">
             <panel.string
              name="help_text">
                 Roles have a title and an allowed list of Abilities
@@ -282,40 +153,19 @@ including the Everyone and Owner Roles.
              name="power_partial_icon">
                 checkbox_enabled_false.tga
             </panel.string>
-            <filter_editor
-            layout="topleft"
-            top="10"
-            left="4"
-            width="260"
-            height="20"
-            follows="left|top|right"
-            max_length="250"
-            label="Filter Roles"
-            name="filter_input"
-            font="SansSerif" />
-            <!--<line_editor
-             border_style="line"
-             border_thickness="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="4"
-             max_length="63"
-             name="search_text"
-             top="10"
-             width="90" />
-            <button
-             font="SansSerifSmall"
-             height="20"
-             label="Search"
-             layout="topleft"
-             left_pad="5"
-             name="search_button"
-             top_delta="-2"
-             width="80" />
+         <filter_editor
+         layout="topleft"
+         top="10"
+         left="4"
+         width="280"
+         height="20"
+         follows="left|top|right"
+         max_length="250"
+         label="Filter Roles"
+         name="filter_input" />
+            <!--
             <button
              enabled="false"
-             font="SansSerifSmall"
              height="20"
              label="Show All"
              layout="topleft"
@@ -326,11 +176,13 @@ including the Everyone and Owner Roles.
             <scroll_list
              column_padding="0"
              draw_heading="true"
+             draw_stripes="false"
              follows="left|top"
              heading_height="20"
              height="150"
              layout="topleft"
-             left="4"
+             search_column="1"
+             left="0"
              name="role_list"
              top_pad="4"
              width="300">
@@ -352,7 +204,7 @@ including the Everyone and Owner Roles.
              font="SansSerifSmall"
              label="Add Role"
              layout="topleft"
-             left_delta="0"
+             left="5"
              name="role_create"
              top_pad="6"
              width="125" />
@@ -362,20 +214,20 @@ including the Everyone and Owner Roles.
              label="Delete Role"
              layout="topleft"
              left_pad="5"
+             right="-5"
              name="role_delete"
              top_delta="0"
              width="125" />
         </panel>
         <panel
          border="false"
-         height="164"
-         label="Abilities"
+         height="220"
+         label="ABILITIES"
          layout="topleft"
-         left_delta="0"
+         left="0"
          help_topic="roles_actions_tab"
          name="actions_sub_tab"
          class="panel_group_actions_subtab"
-         top="17"
          tool_tip="You can view an Ability&apos;s Description and which Roles and Members can execute the Ability."
          width="300">
             <panel.string
@@ -383,37 +235,17 @@ including the Everyone and Owner Roles.
                 Abilities allow Members in Roles to do specific
 things in this group. There&apos;s a broad variety of Abilities.
             </panel.string>
-            <filter_editor
-            layout="topleft"
-            top="10"
-            left="4"
-            width="255"
-            height="20"
-            follows="left|top|right"
-            max_length="250"
-            label="Filter Abilities"
-            name="filter_input"
-            font="SansSerif" />
-            <!--<line_editor
-             border_style="line"
-             border_thickness="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="4"
-             max_length="63"
-             name="search_text"
-             top="10"
-             width="90" />
-            <button
-             font="SansSerifSmall"
-             height="20"
-             label="Search"
-             layout="topleft"
-             left_pad="5"
-             name="search_button"
-             top_delta="-2"
-             width="80" />
+         <filter_editor
+         layout="topleft"
+         top="10"
+         left="4"
+         width="280"
+         height="20"
+         follows="left|top|right"
+         max_length="250"
+         label="Filter Abilities"
+         name="filter_input" />
+            <!--
             <button
              enabled="false"
              font="SansSerifSmall"
@@ -428,19 +260,19 @@ things in this group. There&apos;s a broad variety of Abilities.
              column_padding="0"
              draw_stripes="false"
              follows="left|top"
-             height="100"
+             height="160"
              layout="topleft"
-             left="6"
+             left="0"
              multi_select="true"
              name="action_list"
              search_column="1"
              tool_tip="Select an Ability to view more details"
              top_pad="6"
-             width="255">
+             width="300">
                 <scroll_list.columns
                  label=""
                  name="icon"
-                 width="18" />
+                 width="16" />
                 <scroll_list.columns
                  label=""
                  name="action"
@@ -448,7 +280,7 @@ things in this group. There&apos;s a broad variety of Abilities.
             </scroll_list>
             <icon
              height="16"
-             image_name="inv_folder_plain_closed.tga"
+             image_name="Inv_FolderClosed"
              layout="topleft"
              name="power_folder_icon"
              visible="false"
@@ -456,105 +288,93 @@ things in this group. There&apos;s a broad variety of Abilities.
         </panel>
     </tab_container>
     <panel
-     height="150"
+     height="252"
      layout="topleft"
      follows="left|top"
      left="10"
      name="members_footer"
-     top_pad="2"
+     top_pad="10"
+     top_delta="0"
      width="300">
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
          follows="left|top"
          left="0"
          name="static"
-         top_pad="0"
-         width="100">
+         top_pad="5"
+         width="295">
             Assigned Roles
         </text>
-        <text
-         type="string"
-         font="SansSerif"
-         height="16"
-         layout="topleft"
-         follows="left|top"
-         left_pad="35"
-         name="static2"
-         top_delta="0"
-         width="100">
-            Allowed Abilities
-        </text>
         <scroll_list
          draw_stripes="false"
          follows="left|top"
-         height="150"
+         height="80"
          layout="topleft"
          left="0"
          name="member_assigned_roles"
-         top_pad="5"
-         width="130">
+         top_pad="0"
+         width="295">
             <scroll_list.columns
              label=""
              name="checkbox"
-             width="18" />
+             width="30" />
             <scroll_list.columns
              label=""
              name="role"
-             width="107" />
+             width="265" />
         </scroll_list>
-        <scroll_list
-         draw_stripes="false"
-         height="150"
+                 <text
+         type="string"
+         height="16"
          layout="topleft"
          follows="left|top"
-         left_pad="5"
+         left="0"
+         name="static2"
+         top_pad="5"
+         width="295">
+            Allowed Abilities
+        </text>
+         <scroll_list
+         draw_stripes="false"
+         height="80"
+         layout="topleft"
+         left="0"
          name="member_allowed_actions"
+         search_column="2"
          tool_tip="For details of each allowed ability see the abilities tab"
-         top_delta="0"
-         width="130">
+         top_pad="0"
+         width="295">
             <scroll_list.columns
              label=""
              name="icon"
-             width="14" />
+             width="20" />
             <scroll_list.columns
              label=""
              name="action"
-             width="126" />
+             width="275" />
         </scroll_list>
     </panel>
     <panel
-     height="252"
+     height="297"
      layout="topleft"
-     left_delta="0"
+     left="10"
      name="roles_footer"
      top_delta="0"
+     top="245"
      visible="false"
-     width="270">
+     width="300">
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
          left="0"
          name="static"
          top="0"
-         width="100">
+         width="140">
             Name
         </text>
-        <text
-         type="string"
-         font="SansSerif"
-         height="16"
-         layout="topleft"
-         left_pad="35"
-         name="static2"
-         top_delta="0"
-         width="100">
-            Description
-        </text>
         <line_editor
          type="string"
          border_style="line"
@@ -563,21 +383,19 @@ things in this group. There&apos;s a broad variety of Abilities.
          height="20"
          layout="topleft"
          left="0"
-         max_length="20"
+         max_length="295"
          name="role_name"
          top_pad="0"
-         width="130">
+         width="295">
             Employees
         </line_editor>
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
-         left_delta="0"
          name="static3"
-         top_pad="10"
-         width="100">
+         top_pad="5"
+         width="295">
             Title
         </text>
         <line_editor
@@ -587,158 +405,159 @@ things in this group. There&apos;s a broad variety of Abilities.
          follows="left|top"
          height="20"
          layout="topleft"
-         left_delta="0"
-         max_length="20"
+         max_length="295"
          name="role_title"
          top_pad="0"
-         width="130">
-            (waiting)
+         width="295">
+          (waiting)
         </line_editor>
+                <text
+         type="string"
+         height="16"
+         layout="topleft"
+         left="0"
+         name="static2"
+         top_pad="5"
+         width="100">
+            Description
+        </text>
         <text_editor
          type="string"
          halign="left"
-         height="48"
+         height="35"
          layout="topleft"
-         left="135"
-         max_length="254"
+         left="0"
+         max_length="295"
          name="role_description"
-         top="16"
-         width="130"
+         top_pad="0"
+         width="295"
          word_wrap="true">
-            (waiting)
+          (waiting)
         </text_editor>
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
+         follows="left|top"
          left="0"
-         name="static4"
-         top="85"
-         width="120">
-            Assigned Members
-        </text>
-        <text
-         type="string"
-         font="SansSerif"
-         height="16"
-         layout="topleft"
-         left_pad="15"
-         name="static5"
-         tool_tip="A list of abilities the currently selected role can perform"
-         top_delta="0"
-         width="100">
-            Allowed Abilities
+         name="static"
+         top_pad="5"
+         width="295">
+            Assigned Roles
         </text>
         <name_list
          draw_stripes="false"
-         height="150"
+         height="50"
          layout="topleft"
          left="0"
          name="role_assigned_members"
          top_pad="0"
-         width="130" />
+         width="295" />
         <check_box
-         height="16"
-         label="Members are visible"
+         height="15"
+         label="Reveal members"
          layout="topleft"
-         left_delta="0"
          name="role_visible_in_list"
          tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group."
-         top_pad="10"
-         width="130" />
+         top_pad="3"
+         width="290" />
+         <text
+         type="string"
+         height="16"
+         layout="topleft"
+         follows="left|top"
+         left="0"
+         name="static2"
+         top_pad="5"
+         width="295">
+            Allowed Abilities
+        </text>
         <scroll_list
          draw_stripes="false"
-         height="150"
+         height="50"
          layout="topleft"
-         left="135"
+         left="0"
          name="role_allowed_actions"
          search_column="2"
          tool_tip="For details of each allowed ability see the abilities tab"
-         top="101"
-         width="130">
+         top_pad="0"
+         width="295">
             <scroll_list.columns
              label=""
              name="icon"
-             width="2" />
+             width="20" />
             <scroll_list.columns
              label=""
              name="checkbox"
-             width="16" />
+             width="20" />
             <scroll_list.columns
              label=""
              name="action"
-             width="220" />
+             width="250" />
         </scroll_list>
     </panel>
    <panel
-     height="215"
+     height="303"
      layout="topleft"
-     left_delta="0"
+     left="10"
      name="actions_footer"
      top_delta="0"
+     top="245"
      visible="false"
-     width="265">
+     width="300">
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
-         left="0"
          name="static"
-         top="0"
          width="200">
-            Description
+            Ability description
         </text>
         <text_editor
          type="string"
          enabled="false"
          halign="left"
-         height="48"
+         height="80"
          layout="topleft"
          left_delta="0"
          max_length="512"
          name="action_description"
          top_pad="0"
-         width="265"
+         width="295"
          word_wrap="true">
             This Ability is &apos;Eject Members from this Group&apos;. Only an Owner can eject another Owner.
         </text_editor>
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
          left_delta="0"
          name="static2"
-         top_pad="10"
-         width="125">
-            Roles with Ability
+         top_pad="5"
+         width="295">
+            Roles with this ability
         </text>
-        <text
+        <scroll_list
+         height="60"
+         layout="topleft"
+         left="0"
+         name="action_roles"
+         top_pad="0"
+         width="295" />
+                 <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
-         left_pad="10"
          name="static3"
-         top_delta="0"
-         width="125">
-            Members with Ability
+         top_pad="5"
+         width="295">
+            Members with this ability
         </text>
-        <scroll_list
-         height="150"
-         layout="topleft"
-         left="0"
-         name="action_roles"
-         top="90"
-         width="130" />
         <name_list
-         height="150"
+         height="100"
          layout="topleft"
-         left_pad="5"
          name="action_members"
-         top_delta="0"
-         width="130" />
+         top_pad="0"
+         width="295" />
     </panel>
 </panel>
-- 
GitLab


From abf77532d8534fe98b8c05ddf049ad429da34992 Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Tue, 3 Nov 2009 19:42:52 -0700
Subject: [PATCH 098/306] fix the bug that textuer boost level is mixed with
 boolean numbers.

---
 indra/newview/llcolorswatch.cpp        |  3 ++-
 indra/newview/lldrawpoolbump.cpp       |  2 +-
 indra/newview/lldrawpoolterrain.cpp    |  4 ++--
 indra/newview/lldrawpoolwater.cpp      |  4 ++--
 indra/newview/llface.cpp               |  4 ++--
 indra/newview/llfloaterreporter.cpp    |  2 +-
 indra/newview/llfloaterscriptdebug.cpp |  2 +-
 indra/newview/llpreviewtexture.cpp     |  2 +-
 indra/newview/llselectmgr.cpp          |  6 +++---
 indra/newview/llspatialpartition.cpp   |  2 +-
 indra/newview/lltexturectrl.cpp        |  4 ++--
 indra/newview/lltextureview.cpp        |  2 +-
 indra/newview/llviewerobject.cpp       |  6 +++---
 indra/newview/llviewertexture.cpp      | 14 ++++++++------
 indra/newview/llviewertexture.h        | 15 ++++++++-------
 indra/newview/llviewertexturelist.cpp  | 12 ++++++------
 indra/newview/llviewertexturelist.h    |  8 ++++----
 indra/newview/llvoavatar.cpp           |  2 +-
 indra/newview/llvograss.cpp            |  2 +-
 indra/newview/llvosky.cpp              |  8 ++++----
 indra/newview/llvotree.cpp             |  2 +-
 indra/newview/llvovolume.cpp           |  4 ++--
 indra/newview/llwearable.cpp           |  2 +-
 indra/newview/llworldmap.cpp           |  7 ++++---
 indra/newview/llworldmapview.cpp       |  5 +++--
 25 files changed, 65 insertions(+), 59 deletions(-)

diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp
index 7b75c77a1e3..ed304bdd345 100644
--- a/indra/newview/llcolorswatch.cpp
+++ b/indra/newview/llcolorswatch.cpp
@@ -228,7 +228,8 @@ void LLColorSwatchCtrl::draw()
 	{
 		if (!mFallbackImageName.empty())
 		{
-			LLPointer<LLViewerTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+			LLPointer<LLViewerTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, TRUE, 
+				LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 			if( fallback_image->getComponents() == 4 )
 			{	
 				gl_rect_2d_checkerboard( interior );
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index e087feeaecf..5f845c3721d 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -144,7 +144,7 @@ void LLStandardBumpmap::restoreGL()
 		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage = 
 			LLViewerTextureManager::getFetchedTexture(LLUUID(bump_image_id),
 										TRUE, 
-										FALSE, 
+										LLViewerTexture::BOOST_NONE, 
 										LLViewerTexture::LOD_TEXTURE,
 										0, 
 										0);																								
diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp
index 790e75cfaae..9dc22cddcd2 100644
--- a/indra/newview/lldrawpoolterrain.cpp
+++ b/indra/newview/lldrawpoolterrain.cpp
@@ -72,7 +72,7 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) :
 	sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale");
 	sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
 	mAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient.tga", 
-													TRUE, TRUE, 
+													TRUE, LLViewerTexture::BOOST_UI, 
 													LLViewerTexture::FETCHED_TEXTURE,
 													GL_ALPHA8, GL_ALPHA,
 													LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
@@ -81,7 +81,7 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) :
 	mAlphaRampImagep->setAddressMode(LLTexUnit::TAM_CLAMP);
 
 	m2DAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c", 
-													TRUE, TRUE, 
+													TRUE, LLViewerTexture::BOOST_UI, 
 													LLViewerTexture::FETCHED_TEXTURE,
 													GL_ALPHA8, GL_ALPHA,
 													LLUUID("38b86f85-2575-52a9-a531-23108d8da837"));
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index 21e17cc2074..107de934dfc 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -69,11 +69,11 @@ LLVector3 LLDrawPoolWater::sLightDir;
 LLDrawPoolWater::LLDrawPoolWater() :
 	LLFacePool(POOL_WATER)
 {
-	mHBTex[0] = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, TRUE);
+	mHBTex[0] = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLViewerTexture::BOOST_UI);
 	gGL.getTexUnit(0)->bind(mHBTex[0]) ;
 	mHBTex[0]->setAddressMode(LLTexUnit::TAM_CLAMP);
 
-	mHBTex[1] = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, TRUE);
+	mHBTex[1] = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLViewerTexture::BOOST_UI);
 	gGL.getTexUnit(0)->bind(mHBTex[1]);
 	mHBTex[1]->setAddressMode(LLTexUnit::TAM_CLAMP);
 
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 09b3ce1e863..8ec448e281c 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -515,8 +515,8 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)
 /* removed in lieu of raycast uv detection
 void LLFace::renderSelectedUV()
 {
-	LLViewerTexture* red_blue_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test1.j2c", TRUE, TRUE);
-	LLViewerTexture* green_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test2.tga", TRUE, TRUE);
+	LLViewerTexture* red_blue_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test1.j2c", TRUE, LLViewerTexture::BOOST_UI);
+	LLViewerTexture* green_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test2.tga", TRUE, LLViewerTexture::BOOST_UI);
 
 	LLGLSUVSelect object_select;
 
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 70a3ad5252d..ad2fe34e95e 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -789,7 +789,7 @@ void LLFloaterReporter::takeScreenshot()
 
 	// store in the image list so it doesn't try to fetch from the server
 	LLPointer<LLViewerFetchedTexture> image_in_list = 
-		LLViewerTextureManager::getFetchedTexture(mResourceDatap->mAssetInfo.mUuid, TRUE, FALSE, LLViewerTexture::FETCHED_TEXTURE);
+		LLViewerTextureManager::getFetchedTexture(mResourceDatap->mAssetInfo.mUuid, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::FETCHED_TEXTURE);
 	image_in_list->createGLTexture(0, raw);
 	
 	// the texture picker then uses that texture
diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp
index 3bf1848efb7..eeea71cc4cd 100644
--- a/indra/newview/llfloaterscriptdebug.cpp
+++ b/indra/newview/llfloaterscriptdebug.cpp
@@ -106,7 +106,7 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std:
 
 	if (objectp)
 	{
-		objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, TRUE));
+		objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, LLViewerTexture::BOOST_UI));
 		floater_label = llformat("%s(%.2f, %.2f)", user_name.c_str(), objectp->getPositionRegion().mV[VX], objectp->getPositionRegion().mV[VY]);
 	}
 	else
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 9c21faa3be5..86fa2c4695a 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -552,7 +552,7 @@ void LLPreviewTexture::onAspectRatioCommit(LLUICtrl* ctrl, void* userdata)
 
 void LLPreviewTexture::loadAsset()
 {
-	mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+	mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 	mImage->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);
 	mAssetStatus = PREVIEW_ASSET_LOADING;
 	updateDimensions();
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 759c86f3a02..b8ceef08991 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -1448,7 +1448,7 @@ void LLSelectMgr::selectionSetImage(const LLUUID& imageid)
 				// Texture picker defaults aren't inventory items
 				// * Don't need to worry about permissions for them
 				// * Can just apply the texture and be done with it.
-				objectp->setTEImage(te, LLViewerTextureManager::getFetchedTexture(mImageID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE));
+				objectp->setTEImage(te, LLViewerTextureManager::getFetchedTexture(mImageID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
 			}
 			return true;
 		}
@@ -1604,7 +1604,7 @@ BOOL LLSelectMgr::selectionRevertTextures()
 					}
 					else
 					{
-						object->setTEImage(te, LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE));
+						object->setTEImage(te, LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
 					}
 				}
 			}
@@ -4604,7 +4604,7 @@ void LLSelectMgr::updateSilhouettes()
 
 	if (!mSilhouetteImagep)
 	{
-		mSilhouetteImagep = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", TRUE, TRUE);
+		mSilhouetteImagep = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", TRUE, LLViewerTexture::BOOST_UI);
 	}
 
 	mHighlightedObjects->cleanupNodes();
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 9f317803ce7..279e1438519 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -2704,7 +2704,7 @@ void renderTexturePriority(LLDrawable* drawable)
 		drawBox(center, size);
 		
 		/*S32 boost = imagep->getBoostLevel();
-		if (boost)
+		if (boost>LLViewerTexture::BOOST_NONE)
 		{
 			F32 t = (F32) boost / (F32) (LLViewerTexture::BOOST_MAX_LEVEL-1);
 			LLVector4 col = lerp(boost_cold, boost_hot, t);
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 50ebc205a99..efe88047420 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -529,7 +529,7 @@ void LLFloaterTexturePicker::draw()
 		mTexturep = NULL;
 		if(mImageAssetID.notNull())
 		{
-			mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES, IMMEDIATE_NO);
+			mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES);
 			mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);
 		}
 		else if (!mFallbackImageName.empty())
@@ -1190,7 +1190,7 @@ void LLTextureCtrl::draw()
 	}
 	else if (!mImageAssetID.isNull())
 	{
-		mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES, IMMEDIATE_NO);
+		mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES);
 		mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);
 	}
 	else if (!mFallbackImageName.empty())
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index ea675c5a6e4..dafa4f25caa 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -168,7 +168,7 @@ void LLTextureBar::draw()
 	{
 		color = LLColor4::green4;
 	}
-	else if (mImagep->getBoostLevel())
+	else if (mImagep->getBoostLevel() > LLViewerTexture::BOOST_NONE)
 	{
 		color = LLColor4::magenta;
 	}
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 20cd516fa06..26411ce152a 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -2928,7 +2928,7 @@ void LLViewerObject::boostTexturePriority(BOOL boost_children /* = TRUE */)
 	{
 		LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT);
 		LLUUID sculpt_id = sculpt_params->getSculptTexture();
-		LLViewerTextureManager::getFetchedTexture(sculpt_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE)->setBoostLevel(LLViewerTexture::BOOST_SELECTED);
+		LLViewerTextureManager::getFetchedTexture(sculpt_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)->setBoostLevel(LLViewerTexture::BOOST_SELECTED);
 	}
 	
 	if (boost_children)
@@ -3691,7 +3691,7 @@ void LLViewerObject::setTE(const U8 te, const LLTextureEntry &texture_entry)
 //	if (mDrawable.notNull() && mDrawable->isVisible())
 //	{
 		const LLUUID& image_id = getTE(te)->getID();
-		mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+		mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 //	}
 }
 
@@ -3717,7 +3717,7 @@ S32 LLViewerObject::setTETextureCore(const U8 te, const LLUUID& uuid, LLHost hos
 		uuid == LLUUID::null)
 	{
 		retval = LLPrimitive::setTETexture(te, uuid);
-		mTEImages[te] = LLViewerTextureManager::getFetchedTexture(uuid, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE, 0, 0, host);
+		mTEImages[te] = LLViewerTextureManager::getFetchedTexture(uuid, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host);
 		setChanged(TEXTURE);
 		if (mDrawable.notNull())
 		{
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 758bf8c1aa0..6b8c8c01d4b 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -198,6 +198,7 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTexture(
 												   LLGLenum primary_format,
 												   LLHost request_from_host)
 {
+	llassert_always(boost_priority >= LLViewerTexture::BOOST_NONE) ;
 	return gTextureList.getImage(image_id, usemipmaps, boost_priority, texture_type, internal_format, primary_format, request_from_host) ;
 }
 	
@@ -210,6 +211,7 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromFile(
 												   LLGLenum primary_format, 
 												   const LLUUID& force_id)
 {
+	llassert_always(boost_priority >= LLViewerTexture::BOOST_NONE) ;
 	return gTextureList.getImageFromFile(filename, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id) ;
 }
 
@@ -256,10 +258,10 @@ void LLViewerTextureManager::init()
 	image_raw = NULL;
 	LLViewerFetchedTexture::sDefaultImagep->dontDiscard();
 #else
- 	LLViewerFetchedTexture::sDefaultImagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE);
+ 	LLViewerFetchedTexture::sDefaultImagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI);
 #endif
 	
- 	LLViewerFetchedTexture::sSmokeImagep = LLViewerTextureManager::getFetchedTexture(IMG_SMOKE, TRUE, TRUE);
+ 	LLViewerFetchedTexture::sSmokeImagep = LLViewerTextureManager::getFetchedTexture(IMG_SMOKE, TRUE, LLViewerTexture::BOOST_UI);
 	LLViewerFetchedTexture::sSmokeImagep->setNoDelete() ;
 
 	LLViewerTexture::initClass() ;
@@ -1240,7 +1242,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 		{
 			ddiscard+=2;
 		}
-		else if (mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == 0)
+		else if (mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == LLViewerTexture::BOOST_NONE)
 		{
 			ddiscard-=2;
 		}
@@ -1252,11 +1254,11 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 		pixel_priority = llclamp(pixel_priority, 0.0f, priority-1.f); // priority range = 100000-900000
 		if ( mBoostLevel > BOOST_HIGH)
 		{
-			priority = 1000000.f + pixel_priority + 1000.f * mBoostLevel;
+			priority = 1000000.f + pixel_priority + 1000.f * (mBoostLevel - LLViewerTexture::BOOST_NONE);
 		}
 		else
 		{
-			priority +=      0.f + pixel_priority + 1000.f * mBoostLevel;
+			priority +=      0.f + pixel_priority + 1000.f * (mBoostLevel - LLViewerTexture::BOOST_NONE);
 		}
 	}
 	return priority;
@@ -1436,7 +1438,7 @@ bool LLViewerFetchedTexture::updateFetch()
 		}
 		if (!mDontDiscard)
 		{
-			if (mBoostLevel == 0)
+			if (mBoostLevel == LLViewerTexture::BOOST_NONE)
 			{
 				desired_discard = llmax(desired_discard, current_discard-1);
 			}
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 020478beef2..ff8f14e8792 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -107,11 +107,12 @@ class LLViewerTexture : public LLTexture
 
 	enum EBoostLevel
 	{
-		BOOST_NONE 			= 0,
-		BOOST_AVATAR_BAKED	= 1,
-		BOOST_AVATAR		= 2,
-		BOOST_CLOUDS		= 3,
-		BOOST_SCULPTED      = 4,
+		//skip 0 and 1 to avoid mistakenly mixing boost level with boolean numbers.
+		BOOST_NONE 			= 2,
+		BOOST_AVATAR_BAKED	= 3,
+		BOOST_AVATAR		= 4,
+		BOOST_CLOUDS		= 5,
+		BOOST_SCULPTED      = 6,
 		
 		BOOST_HIGH 			= 10,
 		BOOST_TERRAIN		= 11, // has to be high priority for minimap / low detail
@@ -601,7 +602,7 @@ class LLViewerTextureManager
 
 	static LLViewerFetchedTexture* getFetchedTexture(const LLUUID &image_id,									 
 									 BOOL usemipmap = TRUE,
-									 BOOL level_immediate = FALSE,		// Get the requested level immediately upon creation.
+									 S32 boost_priority = LLViewerTexture::BOOST_NONE,		// Get the requested level immediately upon creation.
 									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
 									 LLGLint internal_format = 0,
 									 LLGLenum primary_format = 0,
@@ -610,7 +611,7 @@ class LLViewerTextureManager
 	
 	static LLViewerFetchedTexture* getFetchedTextureFromFile(const std::string& filename,									 
 									 BOOL usemipmap = TRUE,
-									 BOOL level_immediate = FALSE,		// Get the requested level immediately upon creation.
+									 S32 boost_priority = LLViewerTexture::BOOST_NONE,		// Get the requested level immediately upon creation.
 									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
 									 LLGLint internal_format = 0,
 									 LLGLenum primary_format = 0,
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index b5986c70f58..d2be1ac9b55 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -197,7 +197,7 @@ void LLViewerTextureList::doPrefetchImages()
 
 		if(LLViewerTexture::FETCHED_TEXTURE == texture_type || LLViewerTexture::LOD_TEXTURE == texture_type)
 		{
-			LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, MIPMAP_TRUE, FALSE, texture_type);
+			LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, texture_type);
 			if (image)
 			{
 				image->addTextureStats((F32)pixel_area);
@@ -325,14 +325,14 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&
 	{
 		// Never mind that this ignores image_set_id;
 		// getImage() will handle that later.
-		return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE);
+		return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI);
 	}
 
 	std::string full_path = gDirUtilp->findSkinnedFilename("textures", filename);
 	if (full_path.empty())
 	{
 		llwarns << "Failed to find local image file: " << filename << llendl;
-		return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE);
+		return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI);
 	}
 
 	// generate UUID based on hash of filename
@@ -400,7 +400,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
 	
 	if ((&image_id == NULL) || image_id.isNull())
 	{
-		return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE));
+		return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI));
 	}
 	
 	LLPointer<LLViewerFetchedTexture> imagep = findImage(image_id);
@@ -1171,7 +1171,7 @@ void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_d
 	U8 *data = new U8[data_size];
 	msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size);
 	
-	LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+	LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 	if (!image)
 	{
 		delete [] data;
@@ -1235,7 +1235,7 @@ void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_d
 	U8 *data = new U8[data_size];
 	msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size);
 	
-	LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+	LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 	if (!image)
 	{
 		delete [] data;
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index fda57ce981b..6948db70f83 100644
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -131,7 +131,7 @@ class LLViewerTextureList
 
 	LLViewerFetchedTexture * getImage(const LLUUID &image_id,									 
 									 BOOL usemipmap = TRUE,
-									 BOOL level_immediate = FALSE,		// Get the requested level immediately upon creation.
+									 S32 boost_priority = LLViewerTexture::BOOST_NONE,		// Get the requested level immediately upon creation.
 									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
 									 LLGLint internal_format = 0,
 									 LLGLenum primary_format = 0,
@@ -140,7 +140,7 @@ class LLViewerTextureList
 	
 	LLViewerFetchedTexture * getImageFromFile(const std::string& filename,									 
 									 BOOL usemipmap = TRUE,
-									 BOOL level_immediate = FALSE,		// Get the requested level immediately upon creation.
+									 S32 boost_priority = LLViewerTexture::BOOST_NONE,		// Get the requested level immediately upon creation.
 									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
 									 LLGLint internal_format = 0,
 									 LLGLenum primary_format = 0,
@@ -149,7 +149,7 @@ class LLViewerTextureList
 
 	LLViewerFetchedTexture* createImage(const LLUUID &image_id,
 									 BOOL usemipmap = TRUE,
-									 BOOL level_immediate = FALSE,		// Get the requested level immediately upon creation.
+									 S32 boost_priority = LLViewerTexture::BOOST_NONE,		// Get the requested level immediately upon creation.
 									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
 									 LLGLint internal_format = 0,
 									 LLGLenum primary_format = 0,
@@ -159,7 +159,7 @@ class LLViewerTextureList
 	// Request image from a specific host, used for baked avatar textures.
 	// Implemented in header in case someone changes default params above. JC
 	LLViewerFetchedTexture* getImageFromHost(const LLUUID& image_id, LLHost host)
-	{ return getImage(image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); }
+	{ return getImage(image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); }
 
 public:
 	typedef std::set<LLPointer<LLViewerFetchedTexture> > image_list_t;	
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 4bf66ba17e0..240f87d104e 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -6520,7 +6520,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
 			&& baked_index != BAKED_SKIRT)
 		{
 			setTEImage(mBakedTextureDatas[baked_index].mTextureIndex, 
-				LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureIndex, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE));
+				LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureIndex, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
 		}
 	}
 
diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp
index 570a3334b9e..110433a27d4 100644
--- a/indra/newview/llvograss.cpp
+++ b/indra/newview/llvograss.cpp
@@ -106,7 +106,7 @@ void LLVOGrass::updateSpecies()
 		SpeciesMap::const_iterator it = sSpeciesTable.begin();
 		mSpecies = (*it).first;
 	}
-	setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE));
+	setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
 }
 
 
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
index d44c5432669..d37deaf53d1 100644
--- a/indra/newview/llvosky.cpp
+++ b/indra/newview/llvosky.cpp
@@ -376,9 +376,9 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
 	mSun.setIntensity(SUN_INTENSITY);
 	mMoon.setIntensity(0.1f * SUN_INTENSITY);
 
-	mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, TRUE);
+	mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLViewerTexture::BOOST_UI);
 	mSunTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
-	mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, TRUE);
+	mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLViewerTexture::BOOST_UI);
 	mMoonTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
 	mBloomTexturep = LLViewerTextureManager::getFetchedTexture(IMG_BLOOM1);
 	mBloomTexturep->setNoDelete() ;
@@ -472,9 +472,9 @@ void LLVOSky::restoreGL()
 	{
 		mSkyTex[i].restoreGL();
 	}
-	mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, TRUE);
+	mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLViewerTexture::BOOST_UI);
 	mSunTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
-	mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, TRUE);
+	mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLViewerTexture::BOOST_UI);
 	mMoonTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
 	mBloomTexturep = LLViewerTextureManager::getFetchedTexture(IMG_BLOOM1);
 	mBloomTexturep->setNoDelete() ;
diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp
index 615ae13bc2c..ec118d89bcc 100644
--- a/indra/newview/llvotree.cpp
+++ b/indra/newview/llvotree.cpp
@@ -311,7 +311,7 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys,
 	//
 	//  Load Species-Specific data 
 	//
-	mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+	mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 	mBranchLength = sSpeciesTable[mSpecies]->mBranchLength;
 	mTrunkLength = sSpeciesTable[mSpecies]->mTrunkLength;
 	mLeafScale = sSpeciesTable[mSpecies]->mLeafScale;
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 7d4bef3f7d3..1d94e9118e0 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -665,7 +665,7 @@ void LLVOVolume::updateTextures()
 	{
 		LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT);
 		LLUUID id =  sculpt_params->getSculptTexture(); 
-		mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+		mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 		if (mSculptTexture.notNull())
 		{
 			S32 lod = llmin(mLOD, 3);
@@ -876,7 +876,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &volume_params, const S32 detail
 		
 		if (isSculpted())
 		{
-			mSculptTexture = LLViewerTextureManager::getFetchedTexture(volume_params.getSculptID(), TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+			mSculptTexture = LLViewerTextureManager::getFetchedTexture(volume_params.getSculptID(), TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 			if (mSculptTexture.notNull())
 			{
 				//ignore sculpt GL usage since bao fixed this in a separate branch
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 4cd29bb8386..f2cf84c2281 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -661,7 +661,7 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater
 			{	
 				image_id = LLVOAvatarDictionary::getDefaultTextureImageID((ETextureIndex) te);
 			}
-			LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE );
+			LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE );
 			// MULTI-WEARABLE: replace hard-coded 0
 			avatar->setLocalTextureTE(te, image, set_by_user, 0);
 		}
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
index f198f3a0cf5..355d4141c35 100644
--- a/indra/newview/llworldmap.cpp
+++ b/indra/newview/llworldmap.cpp
@@ -525,7 +525,7 @@ void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**)
 		LLWorldMapLayer new_layer;
 		new_layer.LayerDefined = TRUE;
 		msg->getUUIDFast(_PREHASH_LayerData, _PREHASH_ImageID, new_layer.LayerImageID, block);
-		new_layer.LayerImage = LLViewerTextureManager::getFetchedTexture(new_layer.LayerImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+		new_layer.LayerImage = LLViewerTextureManager::getFetchedTexture(new_layer.LayerImageID, MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 
 		gGL.getTexUnit(0)->bind(new_layer.LayerImage);
 		new_layer.LayerImage->setAddressMode(LLTexUnit::TAM_CLAMP);
@@ -640,14 +640,15 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
 			siminfo->mMapImageID[agent_flags] = image_id;
 
 #ifdef IMMEDIATE_IMAGE_LOAD
-			siminfo->mCurrentImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+			siminfo->mCurrentImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], 
+				MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 			siminfo->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP);
 #endif
 			
 			if (siminfo->mMapImageID[2].notNull())
 			{
 #ifdef IMMEDIATE_IMAGE_LOAD
-				siminfo->mOverlayImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[2], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+				siminfo->mOverlayImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[2], MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 #endif
 			}
 			else
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 823db027eeb..920415873e9 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -511,7 +511,8 @@ void LLWorldMapView::draw()
 				 (textures_requested_this_tick < MAX_REQUEST_PER_TICK)))
 			{
 				textures_requested_this_tick++;
-				info->mCurrentImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+				info->mCurrentImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], 
+					MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
                 info->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP);
 				simimage = info->mCurrentImage;
 				gGL.getTexUnit(0)->bind(simimage);
@@ -524,7 +525,7 @@ void LLWorldMapView::draw()
 				 (textures_requested_this_tick < MAX_REQUEST_PER_TICK)))
 			{
 				textures_requested_this_tick++;
-				info->mOverlayImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[2], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+				info->mOverlayImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[2], MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 				info->mOverlayImage->setAddressMode(LLTexUnit::TAM_CLAMP);
 				overlayimage = info->mOverlayImage;
 				gGL.getTexUnit(0)->bind(overlayimage);
-- 
GitLab


From e8afde0ed3f37ab5920bee3b66060489c53ef380 Mon Sep 17 00:00:00 2001
From: Steve Bennetts <steve@lindenlab.com>
Date: Tue, 3 Nov 2009 20:06:26 -0800
Subject: [PATCH 099/306] merge fixes. Includes a refactoring of
 LLParticipantList to fix compile errors on Windows.

---
 indra/newview/llpanellandmarkinfo.cpp |  8 ++++----
 indra/newview/llparticipantlist.cpp   | 29 +++++++++++++++++----------
 indra/newview/llparticipantlist.h     | 16 +++++++--------
 3 files changed, 30 insertions(+), 23 deletions(-)

diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
index 1152ca68736..6f3b0db498c 100644
--- a/indra/newview/llpanellandmarkinfo.cpp
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -344,7 +344,7 @@ void LLPanelLandmarkInfo::createLandmark(const LLUUID& folder_id)
 	LLStringUtil::replaceChar(desc, '\n', ' ');
 	// If no folder chosen use the "Landmarks" folder.
 	LLLandmarkActions::createLandmarkHere(name, desc,
-		folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK));
+		folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK));
 }
 
 // static
@@ -379,7 +379,7 @@ void LLPanelLandmarkInfo::populateFoldersList()
 	mFolderCombo->removeall();
 
 	// Put the "Landmarks" folder first in list.
-	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 	const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id);
 	if (!cat)
 	{
@@ -411,7 +411,7 @@ static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right)
 
 static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats)
 {
-	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 
 	// Add descendent folders of the "Landmarks" category.
 	LLInventoryModel::item_array_t items; // unused
@@ -424,7 +424,7 @@ static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats)
 		is_category);
 
 	// Add the "My Favorites" category.
-	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 	LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id);
 	if (!favorites_cat)
 	{
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index 9450bee3153..c00c07e53ad 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -1,5 +1,5 @@
-/** 
- * @file llparticipantlist.cpp
+llparticipantlist /** 
+ * @file.cpp
  * @brief LLParticipantList intended to update view(LLAvatarList) according to incoming messages
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
@@ -45,14 +45,18 @@
 LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list):
 	mSpeakerMgr(data_source),
 	mAvatarList(avatar_list),
-	mSpeakerAddListener(*this),
-	mSpeakerRemoveListener(*this),
-	mSpeakerClearListener(*this),
+	mSpeakerAddListener(NULL),
+	mSpeakerRemoveListener(NULL),
+	mSpeakerClearListener(NULL),
 	mSortOrder(E_SORT_BY_NAME)
 {
-	mSpeakerMgr->addListener(&mSpeakerAddListener, "add");
-	mSpeakerMgr->addListener(&mSpeakerRemoveListener, "remove");
-	mSpeakerMgr->addListener(&mSpeakerClearListener, "clear");
+	mSpeakerAddListener = new SpeakerAddListener(this);
+	mSpeakerRemoveListener = new SpeakerRemoveListener(this);
+	mSpeakerClearListener = new SpeakerClearListener(this);
+	
+	mSpeakerMgr->addListener(mSpeakerAddListener, "add");
+	mSpeakerMgr->addListener(mSpeakerRemoveListener, "remove");
+	mSpeakerMgr->addListener(mSpeakerClearListener, "clear");
 
 	mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
 	mAvatarList->setDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList));
@@ -71,6 +75,9 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
 
 LLParticipantList::~LLParticipantList()
 {
+	delete mSpeakerAddListener;
+	delete mSpeakerRemoveListener;
+	delete mSpeakerClearListener;
 }
 
 void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list)
@@ -153,7 +160,7 @@ void LLParticipantList::sort()
 //
 bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
-	return mParent.onAddItemEvent(event, userdata);
+	return mParent->onAddItemEvent(event, userdata);
 }
 
 //
@@ -161,7 +168,7 @@ bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::L
 //
 bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
-	return mParent.onRemoveItemEvent(event, userdata);
+	return mParent->onRemoveItemEvent(event, userdata);
 }
 
 //
@@ -169,5 +176,5 @@ bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents
 //
 bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
-	return mParent.onClearListEvent(event, userdata);
+	return mParent->onClearListEvent(event, userdata);
 }
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index 04d9e292568..e8d72249069 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -71,29 +71,29 @@ class LLParticipantList
 		class BaseSpeakerListner : public LLOldEvents::LLSimpleListener
 		{
 		public:
-			BaseSpeakerListner(LLParticipantList& parent) : mParent(parent) {}
+			BaseSpeakerListner(LLParticipantList* parent) : mParent(parent) {}
 		protected:
-			LLParticipantList& mParent;
+			LLParticipantList* mParent;
 		};
 
 		class SpeakerAddListener : public BaseSpeakerListner
 		{
 		public:
-			SpeakerAddListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
+			SpeakerAddListener(LLParticipantList* parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
 		};
 
 		class SpeakerRemoveListener : public BaseSpeakerListner
 		{
 		public:
-			SpeakerRemoveListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
+			SpeakerRemoveListener(LLParticipantList* parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
 		};
 
 		class SpeakerClearListener : public BaseSpeakerListner
 		{
 		public:
-			SpeakerClearListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
+			SpeakerClearListener(LLParticipantList* parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
 		};
 
@@ -103,9 +103,9 @@ class LLParticipantList
 		LLSpeakerMgr*		mSpeakerMgr;
 		LLAvatarList*		mAvatarList;
 
-		SpeakerAddListener		mSpeakerAddListener;
-		SpeakerRemoveListener	mSpeakerRemoveListener;
-		SpeakerClearListener	mSpeakerClearListener;
+		SpeakerAddListener*		mSpeakerAddListener;
+		SpeakerRemoveListener*	mSpeakerRemoveListener;
+		SpeakerClearListener*	mSpeakerClearListener;
 
 		EParticipantSortOrder	mSortOrder;
 };
-- 
GitLab


From de0687d93032710d7d814a37feb20e04e3811adc Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 3 Nov 2009 20:55:38 -0800
Subject: [PATCH 100/306] Clean up menu_login.xml debug menu Strip out
 unnecessary layout=topleft Add debug option for reg in client Trivial, not
 reviewed.

---
 .../skins/default/xui/en/menu_login.xml       | 45 ++++++-------------
 1 file changed, 13 insertions(+), 32 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index c3ee6e250b0..dfa5adb743a 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -10,22 +10,18 @@
     <menu
      create_jump_keys="true"
      label="Me"
-     layout="topleft"
      name="File">
         <menu_item_call
          label="Preferences"
-         layout="topleft"
          name="Preferences..."
          shortcut="control|P">
             <menu_item_call.on_click
              function="ShowFloater"
              parameter="preferences" />
         </menu_item_call>
-        <menu_item_separator
-         layout="topleft" />
+        <menu_item_separator />
         <menu_item_call
          label="Quit [APP_NAME]"
-         layout="topleft"
          name="Quit"
          shortcut="control|Q">
             <menu_item_call.on_click
@@ -36,7 +32,6 @@
     <menu
      create_jump_keys="true"
      label="Edit"
-     layout="topleft"
      name="Edit"
      width="153">
     </menu>
@@ -44,22 +39,18 @@
     <menu
      create_jump_keys="true"
      label="Help"
-     layout="topleft"
      name="Help">
         <menu_item_call
          label="[SECOND_LIFE] Help"
-         layout="topleft"
          name="Second Life Help"
          shortcut="F1">
             <menu_item_call.on_click
              function="ShowFloater"
              parameter="help f1" />
         </menu_item_call>
-        <menu_item_separator
-         layout="topleft" />
+        <menu_item_separator />
         <menu_item_call
          label="About [APP_NAME]"
-         layout="topleft"
          name="About Second Life">
             <menu_item_call.on_click
              function="ShowFloater"
@@ -69,7 +60,6 @@
     <menu
      create_jump_keys="true"
      label="Debug"
-     layout="topleft"
      name="Debug"
      tear_off="true">
       <!-- Need a copy of the edit menu here so keyboard shortcuts like
@@ -78,12 +68,10 @@
       <menu
        create_jump_keys="true"
        label="Edit"
-       layout="topleft"
        name="Edit"
        tear_off="true">
         <menu_item_call
          label="Undo"
-         layout="topleft"
          name="Undo"
          shortcut="control|Z">
           <menu_item_call.on_click
@@ -93,7 +81,6 @@
         </menu_item_call>
         <menu_item_call
          label="Redo"
-         layout="topleft"
          name="Redo"
          shortcut="control|Y">
           <menu_item_call.on_click
@@ -101,11 +88,9 @@
           <menu_item_call.on_enable
            function="Edit.EnableRedo" />
         </menu_item_call>
-        <menu_item_separator
-         layout="topleft" />
+        <menu_item_separator />
         <menu_item_call
          label="Cut"
-         layout="topleft"
          name="Cut"
          shortcut="control|X">
           <menu_item_call.on_click
@@ -115,7 +100,6 @@
         </menu_item_call>
         <menu_item_call
          label="Copy"
-         layout="topleft"
          name="Copy"
          shortcut="control|C">
           <menu_item_call.on_click
@@ -125,7 +109,6 @@
         </menu_item_call>
         <menu_item_call
          label="Paste"
-         layout="topleft"
          name="Paste"
          shortcut="control|V">
           <menu_item_call.on_click
@@ -135,7 +118,6 @@
         </menu_item_call>
         <menu_item_call
          label="Delete"
-         layout="topleft"
          name="Delete"
          shortcut="Del">
           <menu_item_call.on_click
@@ -145,7 +127,6 @@
         </menu_item_call>
         <menu_item_call
          label="Duplicate"
-         layout="topleft"
          name="Duplicate"
          shortcut="control|D">
           <menu_item_call.on_click
@@ -153,11 +134,9 @@
           <menu_item_call.on_enable
            function="Edit.EnableDuplicate" />
         </menu_item_call>
-        <menu_item_separator
-         layout="topleft" />
+        <menu_item_separator />
         <menu_item_call
          label="Select All"
-         layout="topleft"
          name="Select All"
          shortcut="control|A">
           <menu_item_call.on_click
@@ -167,7 +146,6 @@
         </menu_item_call>
         <menu_item_call
          label="Deselect"
-         layout="topleft"
          name="Deselect"
          shortcut="control|E">
           <menu_item_call.on_click
@@ -179,7 +157,6 @@
       <menu_item_separator />
       <menu_item_call
          label="Show Debug Settings"
-         layout="topleft"
          name="Debug Settings">
             <menu_item_call.on_click
              function="Advanced.ShowDebugSettings"
@@ -187,7 +164,6 @@
         </menu_item_call>
         <menu_item_call
          label="UI/Color Settings"
-         layout="topleft"
          name="UI/Color Settings">
             <menu_item_call.on_click
              function="Advanced.ShowDebugSettings"
@@ -196,7 +172,6 @@
         <menu_item_separator />
         <menu_item_call
          label="XUI Preview Tool"
-         layout="topleft"
          name="UI Preview Tool"
          shortcut="control|T">
             <menu_item_call.on_click
@@ -206,7 +181,6 @@
       <menu_item_separator />
       <menu_item_call
          label="Widget Test"
-         layout="topleft"
          name="Widget Test"
          shortcut="control|shift|T">
         <menu_item_call.on_click
@@ -228,10 +202,18 @@
         <menu_item_call.on_click
          function="Advanced.ShowSideTray" />
       </menu_item_call>
+      <menu_item_check
+         label="Reg In Client Test (restart)"
+         name="Reg In Client Test (restart)">
+            <menu_item_check.on_check
+               control="RegInClient" />
+            <menu_item_check.on_click
+               function="ToggleControl"
+               parameter="RegInClient" />
+      </menu_item_check>
       <menu_item_separator />
         <menu_item_call
          label="Show TOS"
-         layout="topleft"
          name="TOS">
             <menu_item_call.on_click
              function="ShowFloater"
@@ -239,7 +221,6 @@
         </menu_item_call>
         <menu_item_call
          label="Show Critical Message"
-         layout="topleft"
          name="Critical">
             <menu_item_call.on_click
              function="ShowFloater"
-- 
GitLab


From bf092de246b26c3bf085b1ff22a7200594016063 Mon Sep 17 00:00:00 2001
From: angela <angela@lindenlab.com>
Date: Wed, 4 Nov 2009 15:58:49 +0800
Subject: [PATCH 101/306] EXT-1781 selecting Freeze frame (fullscreen preview)
 in the snapshot tool locks out mouse-clicks when closed

---
 indra/newview/llfloatersnapshot.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 235e8192186..68dcdba852d 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -1373,8 +1373,10 @@ void LLFloaterSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp,
 void LLFloaterSnapshot::Impl::onClickDiscard(void* data)
 {
 	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
+	
 	if (view)
 	{
+		view->getParent()->setMouseOpaque(FALSE);
 		view->closeFloater();
 	}
 }
-- 
GitLab


From 068e1320399510afea2b2e2925c9755153d05423 Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Wed, 4 Nov 2009 09:12:32 +0000
Subject: [PATCH 102/306] DEV-41358 DEV-41362: Get an authentication token from
 login.cgi and pass this token through to the search web pages via a q= query
 parameter in the search URL. This will let the search facility determine the
 user's maturity and teen settings.

I also now escape the search string that the user typed in, 'cos they
could type anything.

Thanks to Mani for showing me how to get responses from login.cgi.
---
 indra/newview/llfloatersearch.cpp | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index bd9798c18e1..97c573ddea5 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -34,8 +34,8 @@
 #include "llviewerprecompiledheaders.h"
 #include "llfloatersearch.h"
 #include "llmediactrl.h"
-#include "llagent.h"
-
+#include "lllogininstance.h"
+#include "lluri.h"
 
 LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
 	LLFloater(key),
@@ -116,15 +116,11 @@ void LLFloaterSearch::search(const LLSD &key)
 
 	// append the search query string
 	std::string search_text = key.has("id") ? key["id"].asString() : "";
-	url += std::string("?q=") + search_text;
+	url += std::string("?q=") + LLURI::escape(search_text);
 
-	// append the maturity and teen capabilities for this agent
-	BOOL godlike = gAgent.isGodlike();
-	bool mature_enabled = gAgent.canAccessMature() || godlike;
-	bool adult_enabled = gAgent.canAccessAdult() || godlike;
-	std::string mature = (mature_enabled) ? "True" : "False";
-	std::string teen = (!adult_enabled) ? "True" : "False";
-	url += "&t=" + teen + "&m=" + mature;
+	// append the permissions token that login.cgi gave us
+	LLSD search_token = LLLoginInstance::getInstance()->getResponse("search_token");
+	url += "&p=" + search_token.asString();
 
 	// and load the URL in the web view
 	mBrowser->navigateTo(url);
-- 
GitLab


From 5202334de82a8dbf8f2616fd323291826c17077b Mon Sep 17 00:00:00 2001
From: Mike Antipov <mantipov@productengine.com>
Date: Wed, 4 Nov 2009 12:02:04 +0200
Subject: [PATCH 103/306] Fixed Windows build, broken in changeset 698ac0866792
 - Made member Speaker Listeners as LLpointers in LLParticipantList

--HG--
branch : product-engine
---
 indra/newview/llparticipantlist.cpp | 13 +++++++------
 indra/newview/llparticipantlist.h   |  6 +++---
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index 9450bee3153..edff706fee5 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -45,14 +45,15 @@
 LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list):
 	mSpeakerMgr(data_source),
 	mAvatarList(avatar_list),
-	mSpeakerAddListener(*this),
-	mSpeakerRemoveListener(*this),
-	mSpeakerClearListener(*this),
 	mSortOrder(E_SORT_BY_NAME)
 {
-	mSpeakerMgr->addListener(&mSpeakerAddListener, "add");
-	mSpeakerMgr->addListener(&mSpeakerRemoveListener, "remove");
-	mSpeakerMgr->addListener(&mSpeakerClearListener, "clear");
+	mSpeakerAddListener = new SpeakerAddListener(*this);
+	mSpeakerRemoveListener = new SpeakerRemoveListener(*this);
+	mSpeakerClearListener = new SpeakerClearListener(*this);
+
+	mSpeakerMgr->addListener(mSpeakerAddListener, "add");
+	mSpeakerMgr->addListener(mSpeakerRemoveListener, "remove");
+	mSpeakerMgr->addListener(mSpeakerClearListener, "clear");
 
 	mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
 	mAvatarList->setDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList));
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index 04d9e292568..8c209c0b208 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -103,9 +103,9 @@ class LLParticipantList
 		LLSpeakerMgr*		mSpeakerMgr;
 		LLAvatarList*		mAvatarList;
 
-		SpeakerAddListener		mSpeakerAddListener;
-		SpeakerRemoveListener	mSpeakerRemoveListener;
-		SpeakerClearListener	mSpeakerClearListener;
+		LLPointer<SpeakerAddListener>		mSpeakerAddListener;
+		LLPointer<SpeakerRemoveListener>	mSpeakerRemoveListener;
+		LLPointer<SpeakerClearListener>		mSpeakerClearListener;
 
 		EParticipantSortOrder	mSortOrder;
 };
-- 
GitLab


From 459e7e268462e93d7e3ec680f4ecf8c120b19a05 Mon Sep 17 00:00:00 2001
From: Eugene Kondrashev <ekondrashev@productengine.com>
Date: Wed, 4 Nov 2009 12:54:44 +0200
Subject: [PATCH 104/306] Implemented normal subtask EXT-1516 - Implement
 chiclet for ad-hoc chat.

--HG--
branch : product-engine
---
 indra/newview/llchiclet.cpp | 3 +++
 indra/newview/llchiclet.h   | 2 ++
 2 files changed, 5 insertions(+)

diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 1049348684f..8a4650763fd 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -455,6 +455,7 @@ LLAdHocChiclet::Params::Params()
 , unread_notifications("unread_notifications")
 , speaker("speaker")
 , show_speaker("show_speaker")
+, avatar_icon_color("avatar_icon_color", LLColor4::green)
 {
 	// *TODO Vadim: Get rid of hardcoded values.
 	rect(LLRect(0, 25, 45, 0));
@@ -492,6 +493,8 @@ LLAdHocChiclet::LLAdHocChiclet(const Params& p)
 {
 	LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon;
 	mChicletIconCtrl = LLUICtrlFactory::create<LLChicletAvatarIconCtrl>(avatar_params);
+	//Make the avatar modified
+	mChicletIconCtrl->setColor(p.avatar_icon_color);
 	addChild(mChicletIconCtrl);
 
 	LLChicletNotificationCounterCtrl::Params unread_params = p.unread_notifications;
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index 6eefd9829f1..f82259c73e8 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -457,6 +457,8 @@ class LLAdHocChiclet : public LLIMChiclet
 
 		Optional<bool>	show_speaker;
 
+		Optional<LLColor4>	avatar_icon_color;
+
 		Params();
 	};
 
-- 
GitLab


From 7ad64438430de9a26d2c7c790eb196db4817f259 Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Wed, 4 Nov 2009 13:45:27 +0200
Subject: [PATCH 105/306] Implemented normal sub-task EXT-2145 (Incorrect names
 of Call button on IM Control Panels)

--HG--
branch : product-engine
---
 .../skins/default/xui/en/panel_adhoc_control_panel.xml        | 4 ++--
 .../skins/default/xui/en/panel_group_control_panel.xml        | 4 ++--
 indra/newview/skins/default/xui/en/panel_im_control_panel.xml | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
index 87c4e2787f4..0c1e777fa1b 100644
--- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
@@ -19,13 +19,13 @@
      width="180" />
     <button
      name="call_btn"
-     label="Call"
+     label="Call Group"
      left_delta="27"
      width="125"
      height="20" />
     <button
      name="end_call_btn"
-     label="End Call"
+     label="Leave Call"
      width="125"
      height="20" 
      visible="false"/>
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index 3358015335d..560d353d00d 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -25,12 +25,12 @@
      height="20" />
     <button
      name="call_btn"
-     label="Call"
+     label="Call Group"
      width="125"
      height="20" />
     <button
      name="end_call_btn"
-     label="End Call"
+     label="Leave Call"
      width="125"
      height="20" 
      visible="false"/>
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index 0dd38784263..7308ca3c29e 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -31,7 +31,7 @@
     <button
      follows="left|bottom"
      height="20"
-     label="End Call"
+     label="Leave Call"
      name="end_call_btn"
      visible="false"
      width="125" />
-- 
GitLab


From c10a40e54ea32825f46f91525814c19f1cb818e6 Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Wed, 4 Nov 2009 11:53:29 +0000
Subject: [PATCH 106/306] DEV-41358: corrected a minor typo in a comment and
 refactored some code to avoid duplication.

---
 indra/llui/llurlentry.cpp | 46 ++++++++++++++-------------------------
 indra/llui/llurlentry.h   |  2 +-
 2 files changed, 17 insertions(+), 31 deletions(-)

diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index ddb6c6baffe..dae4b512d15 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -145,6 +145,18 @@ void LLUrlEntryBase::callObservers(const std::string &id, const std::string &lab
 	}
 }
 
+static std::string getStringAfterToken(const std::string str, const std::string token)
+{
+	size_t pos = str.find(token);
+	if (pos == std::string::npos)
+	{
+		return "";
+	}
+
+	pos += token.size();
+	return str.substr(pos, str.size() - pos);
+}
+
 //
 // LLUrlEntryHTTP Describes generic http: and https: Urls
 //
@@ -154,7 +166,6 @@ LLUrlEntryHTTP::LLUrlEntryHTTP()
 							boost::regex::perl|boost::regex::icase);
 	mMenuName = "menu_url_http.xml";
 	mTooltip = LLTrans::getString("TooltipHttpUrl");
-	//mIcon = "gear.tga";
 }
 
 std::string LLUrlEntryHTTP::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
@@ -390,7 +401,7 @@ std::string LLUrlEntryParcel::getLabel(const std::string &url, const LLUrlLabelC
 }
 
 //
-// LLUrlEntryPlace Describes secondlife:///<location> URLs
+// LLUrlEntryPlace Describes secondlife://<location> URLs
 //
 LLUrlEntryPlace::LLUrlEntryPlace()
 {
@@ -433,15 +444,7 @@ std::string LLUrlEntryPlace::getLabel(const std::string &url, const LLUrlLabelCa
 std::string LLUrlEntryPlace::getLocation(const std::string &url) const
 {
 	// return the part of the Url after secondlife:// part
-	const std::string search_string = "://";
-	size_t pos = url.find(search_string);
-	if (pos == std::string::npos)
-	{
-		return "";
-	}
-
-	pos += search_string.size();
-	return url.substr(pos, url.size() - pos);
+	return ::getStringAfterToken(url, "://");
 }
 
 //
@@ -506,15 +509,7 @@ std::string LLUrlEntryTeleport::getLabel(const std::string &url, const LLUrlLabe
 std::string LLUrlEntryTeleport::getLocation(const std::string &url) const
 {
 	// return the part of the Url after ///app/teleport
-	const std::string search_string = "teleport";
-	size_t pos = url.find(search_string);
-	if (pos == std::string::npos)
-	{
-		return "";
-	}
-
-	pos += search_string.size() + 1;
-	return url.substr(pos, url.size() - pos);
+	return ::getStringAfterToken(url, "app/teleport/");
 }
 
 ///
@@ -638,14 +633,5 @@ std::string LLUrlEntryWorldMap::getLabel(const std::string &url, const LLUrlLabe
 std::string LLUrlEntryWorldMap::getLocation(const std::string &url) const
 {
 	// return the part of the Url after secondlife:///app/worldmap/ part
-	const std::string search_string = "//app/worldmap/";
-	size_t pos = url.find(search_string);
-	if (pos == std::string::npos)
-	{
-		return "";
-	}
-
-	pos += search_string.size();
-	return url.substr(pos, url.size() - pos);
+	return ::getStringAfterToken(url, "app/worldmap/");
 }
-
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
index 180ef856737..4507572b1e1 100644
--- a/indra/llui/llurlentry.h
+++ b/indra/llui/llurlentry.h
@@ -186,7 +186,7 @@ class LLUrlEntryParcel : public LLUrlEntryBase
 
 ///
 /// LLUrlEntryPlace Describes a Second Life location Url, e.g.,
-/// secondlife:///Ahern/50/50/50
+/// secondlife://Ahern/50/50/50
 ///
 class LLUrlEntryPlace : public LLUrlEntryBase
 {
-- 
GitLab


From 8bd0c9058d3d24218cf59dd01f152b41240853a4 Mon Sep 17 00:00:00 2001
From: Yuri Chebotarev <ychebotarev@productengine.com>
Date: Wed, 4 Nov 2009 14:25:41 +0200
Subject: [PATCH 107/306] fix for some group_info bugs. EXT-1091 "Refresh"
 button is overlapped by "Cancel" button in "Group Profile" panel

--HG--
branch : product-engine
---
 .../xui/en/panel_group_info_sidetray.xml      | 20 +++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index 132c031942c..7e24ad2c940 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -128,15 +128,16 @@ background_visible="true"
              <accordion_tab
                  can_resize="false"
                  layout="topleft"
-                 name="tab_general"
+                 name="group_general_tab"
                  title="General">
         <panel
         border="false"
+         class="panel_group_general" 
          filename="panel_group_general.xml"
          layout="topleft"
          left="0"
          help_topic="group_general_tab"
-         name="general_tab"
+         name="group_general_tab_panel"
          top="0"
          width="333" />
          </accordion_tab>
@@ -144,15 +145,16 @@ background_visible="true"
                  can_resize="false"
                  expanded="false"
                  layout="topleft"
-                 name="tab_roles"
+                 name="group_roles_tab"
                  title="Roles">
         <panel
         border="false"
+         class="panel_group_roles"
          filename="panel_group_roles.xml"
          layout="topleft"
          left="0"
          help_topic="group_roles_tab"
-         name="roles_tab"
+         name="group_roles_tab_panel"
          top="0"
          width="333" />
          </accordion_tab>
@@ -160,14 +162,15 @@ background_visible="true"
                  can_resize="false"
                  expanded="false"
                  layout="topleft"
-                 name="tab_notices"
+                 name="group_notices_tab"
                  title="Notices">
         <panel
+         class="panel_group_notices"
          filename="panel_group_notices.xml"
          layout="topleft"
          left="0"
          help_topic="group_notices_tab"
-         name="notices_tab"
+         name="group_notices_tab_panel"
          top="0"
          width="333" />
          </accordion_tab>
@@ -175,15 +178,16 @@ background_visible="true"
                  can_resize="false"
                  expanded="false"
                  layout="topleft"
-                 name="tab_notices"
+                 name="group_land_tab"
                  title="Land/Assets">
         <panel
         border="false"
+         class="panel_group_land_money"
          filename="panel_group_land_money.xml"
          layout="topleft"
          left="0"
          help_topic="group_land_money_tab"
-         name="land_money_tab"
+         name="group_land_tab_panel"
          top="0"
          width="333" />
          </accordion_tab>
-- 
GitLab


From 2715e94a5ae969956f493609561f0cc144ec2c37 Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Wed, 4 Nov 2009 14:33:00 +0200
Subject: [PATCH 108/306] Implemented major task EXT-2054 "Hook up parcel
 permission icons to parcel profile": - Added icon representation of parcel
 permissions to Place Profile panel.

--HG--
branch : product-engine
---
 indra/newview/llpanellandmarkinfo.cpp         |  14 ---
 indra/newview/llpanelplaceinfo.cpp            |  14 +++
 indra/newview/llpanelplaceprofile.cpp         |  86 +++++++------
 indra/newview/llpanelplaceprofile.h           |  13 +-
 .../default/xui/en/panel_place_profile.xml    | 116 ++----------------
 5 files changed, 84 insertions(+), 159 deletions(-)

diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
index 1152ca68736..fd6a41c5058 100644
--- a/indra/newview/llpanellandmarkinfo.cpp
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -139,20 +139,6 @@ void LLPanelLandmarkInfo::processParcelInfo(const LLParcelData& parcel_data)
 {
 	LLPanelPlaceInfo::processParcelInfo(parcel_data);
 
-	// HACK: Flag 0x2 == adult region,
-	// Flag 0x1 == mature region, otherwise assume PG
-	std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
-	if (parcel_data.flags & 0x2)
-	{
-		rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
-	}
-	else if (parcel_data.flags & 0x1)
-	{
-		rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
-	}
-
-	mMaturityRatingText->setValue(rating);
-
 	S32 region_x;
 	S32 region_y;
 	S32 region_z;
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 2c5f4b5afaa..e6d10be8582 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -209,6 +209,20 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)
 		mDescEditor->setText(parcel_data.desc);
 	}
 
+	// HACK: Flag 0x2 == adult region,
+	// Flag 0x1 == mature region, otherwise assume PG
+	std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
+	if (parcel_data.flags & 0x2)
+	{
+		rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
+	}
+	else if (parcel_data.flags & 0x1)
+	{
+		rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
+	}
+
+	mMaturityRatingText->setValue(rating);
+
 	S32 region_x;
 	S32 region_y;
 	S32 region_z;
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 9ba72fe6cff..814139607cc 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -84,16 +84,24 @@ BOOL LLPanelPlaceProfile::postBuild()
 	mParcelOwner = getChild<LLTextBox>("owner_value");
 	mLastVisited = getChild<LLTextBox>("last_visited_value");
 
-	mRatingText = getChild<LLTextBox>("rating_value");
+	mParcelRatingIcon = getChild<LLIconCtrl>("rating_icon");
+	mParcelRatingText = getChild<LLTextBox>("rating_value");
+	mVoiceIcon = getChild<LLIconCtrl>("voice_icon");
 	mVoiceText = getChild<LLTextBox>("voice_value");
+	mFlyIcon = getChild<LLIconCtrl>("fly_icon");
 	mFlyText = getChild<LLTextBox>("fly_value");
+	mPushIcon = getChild<LLIconCtrl>("push_icon");
 	mPushText = getChild<LLTextBox>("push_value");
+	mBuildIcon = getChild<LLIconCtrl>("build_icon");
 	mBuildText = getChild<LLTextBox>("build_value");
+	mScriptsIcon = getChild<LLIconCtrl>("scripts_icon");
 	mScriptsText = getChild<LLTextBox>("scripts_value");
+	mDamageIcon = getChild<LLIconCtrl>("damage_icon");
 	mDamageText = getChild<LLTextBox>("damage_value");
 
 	mRegionNameText = getChild<LLTextBox>("region_name");
 	mRegionTypeText = getChild<LLTextBox>("region_type");
+	mRegionRatingIcon = getChild<LLIconCtrl>("region_rating_icon");
 	mRegionRatingText = getChild<LLTextBox>("region_rating");
 	mRegionOwnerText = getChild<LLTextBox>("region_owner");
 	mRegionGroupText = getChild<LLTextBox>("region_group");
@@ -128,16 +136,24 @@ void LLPanelPlaceProfile::resetLocation()
 	mParcelOwner->setValue(not_available);
 	mLastVisited->setValue(not_available);
 
-	mRatingText->setText(not_available);
+	mParcelRatingIcon->setValue(not_available);
+	mParcelRatingText->setText(not_available);
+	mVoiceIcon->setValue(not_available);
 	mVoiceText->setText(not_available);
+	mFlyIcon->setValue(not_available);
 	mFlyText->setText(not_available);
+	mPushIcon->setValue(not_available);
 	mPushText->setText(not_available);
+	mBuildIcon->setValue(not_available);
 	mBuildText->setText(not_available);
-	mParcelScriptsText->setText(not_available);
+	mScriptsIcon->setValue(not_available);
+	mScriptsText->setText(not_available);
+	mDamageIcon->setValue(not_available);
 	mDamageText->setText(not_available);
 
 	mRegionNameText->setValue(not_available);
 	mRegionTypeText->setValue(not_available);
+	mRegionRatingIcon->setValue(not_available);
 	mRegionRatingText->setValue(not_available);
 	mRegionOwnerText->setValue(not_available);
 	mRegionGroupText->setValue(not_available);
@@ -191,33 +207,6 @@ void LLPanelPlaceProfile::setInfoType(INFO_TYPE type)
 	LLPanelPlaceInfo::setInfoType(type);
 }
 
-// virtual
-void LLPanelPlaceProfile::processParcelInfo(const LLParcelData& parcel_data)
-{
-	LLPanelPlaceInfo::processParcelInfo(parcel_data);
-
-	// HACK: Flag 0x2 == adult region,
-	// Flag 0x1 == mature region, otherwise assume PG
-	std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
-	if (parcel_data.flags & 0x2)
-	{
-		rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
-	}
-	else if (parcel_data.flags & 0x1)
-	{
-		rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
-	}
-
-	mMaturityRatingText->setValue(rating);
-	mRatingText->setValue(rating);
-
-	//update for_sale banner, here we should use DFQ_FOR_SALE instead of PF_FOR_SALE
-	//because we deal with remote parcel response format
-	bool is_for_sale = (parcel_data.flags & DFQ_FOR_SALE) &&
-					 mInfoType == AGENT ? TRUE : FALSE;
-	mForSalePanel->setVisible(is_for_sale);
-}
-
 void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 													LLViewerRegion* region,
 													const LLVector3d& pos_global,
@@ -238,19 +227,34 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 
 	// HACK: Converting sim access flags to the format
 	// returned by remote parcel response.
-	switch(region->getSimAccess())
+	U8 sim_access = region->getSimAccess();
+	switch(sim_access)
 	{
 	case SIM_ACCESS_MATURE:
 		parcel_data.flags = 0x1;
+
+		mParcelRatingIcon->setValue("parcel_drk_M");
+		mRegionRatingIcon->setValue("parcel_drk_M");
 		break;
 
 	case SIM_ACCESS_ADULT:
 		parcel_data.flags = 0x2;
+
+		mParcelRatingIcon->setValue("parcel_drk_R");
+		mRegionRatingIcon->setValue("parcel_drk_R");
 		break;
 
 	default:
 		parcel_data.flags = 0;
+
+		mParcelRatingIcon->setValue("parcel_drk_PG");
+		mRegionRatingIcon->setValue("parcel_drk_PG");
 	}
+
+	std::string rating = LLViewerRegion::accessToString(sim_access);
+	mParcelRatingText->setText(rating);
+	mRegionRatingText->setText(rating);
+
 	parcel_data.desc = parcel->getDesc();
 	parcel_data.name = parcel->getName();
 	parcel_data.sim_name = region->getName();
@@ -268,37 +272,45 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 	// Processing parcel characteristics
 	if (parcel->getParcelFlagAllowVoice())
 	{
+		mVoiceIcon->setValue("parcel_drk_Voice");
 		mVoiceText->setText(on);
 	}
 	else
 	{
+		mVoiceIcon->setValue("parcel_drk_VoiceNo");
 		mVoiceText->setText(off);
 	}
 
 	if (!region->getBlockFly() && parcel->getAllowFly())
 	{
+		mFlyIcon->setValue("parcel_drk_Fly");
 		mFlyText->setText(on);
 	}
 	else
 	{
+		mFlyIcon->setValue("parcel_drk_FlyNo");
 		mFlyText->setText(off);
 	}
 
 	if (region->getRestrictPushObject() || parcel->getRestrictPushObject())
 	{
+		mPushIcon->setValue("parcel_drk_PushNo");
 		mPushText->setText(off);
 	}
 	else
 	{
+		mPushIcon->setValue("parcel_drk_Push");
 		mPushText->setText(on);
 	}
 
 	if (parcel->getAllowModify())
 	{
+		mBuildIcon->setValue("parcel_drk_Build");
 		mBuildText->setText(on);
 	}
 	else
 	{
+		mBuildIcon->setValue("parcel_drk_BuildNo");
 		mBuildText->setText(off);
 	}
 
@@ -306,25 +318,28 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 	   (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) ||
 	   !parcel->getAllowOtherScripts())
 	{
+		mScriptsIcon->setValue("parcel_drk_ScriptsNo");
 		mScriptsText->setText(off);
 	}
 	else
 	{
+		mScriptsIcon->setValue("parcel_drk_Scripts");
 		mScriptsText->setText(on);
 	}
 
 	if (region->getAllowDamage() || parcel->getAllowDamage())
 	{
+		mDamageIcon->setValue("parcel_drk_Damage");
 		mDamageText->setText(on);
 	}
 	else
 	{
+		mDamageIcon->setValue("parcel_drk_DamageNo");
 		mDamageText->setText(off);
 	}
 
 	mRegionNameText->setText(region->getName());
 	mRegionTypeText->setText(region->getSimProductName());
-	mRegionRatingText->setText(region->getSimAccessString());
 
 	// Determine parcel owner
 	if (parcel->isPublic())
@@ -383,9 +398,6 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 													 &dwell);
 	if (for_sale)
 	{
-		// Adding "For Sale" flag in remote parcel response format.
-		parcel_data.flags |= DFQ_FOR_SALE;
-
 		const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
 		if(auth_buyer_id.notNull())
 		{
@@ -403,6 +415,8 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 			mSaleToText->setText(getString("anyone"));
 		}
 
+		mForSalePanel->setVisible(for_sale);
+
 		const U8* sign = (U8*)getString("price_text").c_str();
 		const U8* sqm = (U8*)getString("area_text").c_str();
 
@@ -455,7 +469,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 
 	mSelectedParcelID = parcel->getLocalID();
 	mLastSelectedRegionID = region->getRegionID();
-	processParcelInfo(parcel_data);
+	LLPanelPlaceInfo::processParcelInfo(parcel_data);
 
 	mYouAreHerePanel->setVisible(is_current_parcel);
 	getChild<LLAccordionCtrlTab>("sales_tab")->setVisible(for_sale);
diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h
index d8e4bcb6bdb..db54ff8af93 100644
--- a/indra/newview/llpanelplaceprofile.h
+++ b/indra/newview/llpanelplaceprofile.h
@@ -35,6 +35,7 @@
 
 #include "llpanelplaceinfo.h"
 
+class LLIconCtrl;
 class LLTextEditor;
 
 class LLPanelPlaceProfile : public LLPanelPlaceInfo
@@ -49,8 +50,6 @@ class LLPanelPlaceProfile : public LLPanelPlaceInfo
 
 	/*virtual*/ void setInfoType(INFO_TYPE type);
 
-	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
-
 	// Displays information about the currently selected parcel
 	// without sending a request to the server.
 	// If is_current_parcel true shows "You Are Here" banner.
@@ -81,16 +80,24 @@ class LLPanelPlaceProfile : public LLPanelPlaceInfo
 	LLTextBox*			mParcelOwner;
 	LLTextBox*			mLastVisited;
 
-	LLTextBox*			mRatingText;
+	LLIconCtrl*			mParcelRatingIcon;
+	LLTextBox*			mParcelRatingText;
+	LLIconCtrl*			mVoiceIcon;
 	LLTextBox*			mVoiceText;
+	LLIconCtrl*			mFlyIcon;
 	LLTextBox*			mFlyText;
+	LLIconCtrl*			mPushIcon;
 	LLTextBox*			mPushText;
+	LLIconCtrl*			mBuildIcon;
 	LLTextBox*			mBuildText;
+	LLIconCtrl*			mScriptsIcon;
 	LLTextBox*			mScriptsText;
+	LLIconCtrl*			mDamageIcon;
 	LLTextBox*			mDamageText;
 
 	LLTextBox*			mRegionNameText;
 	LLTextBox*			mRegionTypeText;
+	LLIconCtrl*			mRegionRatingIcon;
 	LLTextBox*			mRegionRatingText;
 	LLTextBox*			mRegionOwnerText;
 	LLTextBox*			mRegionGroupText;
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index 7e073f064d7..4dc65fa7363 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -289,33 +289,14 @@
                          left="0"
                          top="0"
                          width="275">
-                            <icon
-                             follows="top|left"
-                             height="16"
-                             image_name="parcel_drk_M"
-                             layout="topleft"
-                             left="20"
-                             name="icon_M"
-                             top="0"
-                             width="18" />
-                            <icon
-                             follows="top|left"
-                             height="16"
-                             image_name="parcel_drk_R"
-                             layout="topleft"
-                             left="20"
-                             name="icon_R"
-                             top="0"
-                             width="18" />
                             <icon
                              follows="top|left"
                              height="16"
                              image_name="parcel_drk_PG"
                              layout="topleft"
                              left="20"
-                             name="icon_PG"
+                             name="rating_icon"
                              top="0"
-                             visible="false"
                              width="18" />
                             <text
                              follows="left|top"
@@ -332,7 +313,7 @@
                              left_pad="0"
                              name="rating_value"
                              top_delta="0"
-                             value="Mature"
+                             value="unknown"
                              width="120" />
                             <icon
                              follows="top|left"
@@ -340,19 +321,9 @@
                              image_name="parcel_drk_Voice"
                              layout="topleft"
                              left="20"
-                             name="icon_Voice"
+                             name="voice_icon"
                              top_pad="5"
                              width="22" />
-                            <icon
-                             follows="top|left"
-                             height="18"
-                             image_name="parcel_drk_VoiceNo"
-                             layout="topleft"
-                             left="20"
-                             name="icon_VoiceNo"
-                             top_delta="0"
-                             visible="false"
-                             width="22" />
                             <text
                              follows="left|top"
                              height="18"
@@ -377,19 +348,9 @@
                              image_name="parcel_drk_Fly"
                              layout="topleft"
                              left="20"
-                             name="icon_Fly"
+                             name="fly_icon"
                              top_pad="3"
                              width="22" />
-                            <icon
-                             follows="top|left"
-                             height="18"
-                             image_name="parcel_drk_FlyNo"
-                             layout="topleft"
-                             left="20"
-                             name="icon_FlyNo"
-                             top_delta="0"
-                             visible="false"
-                             width="22" />
                             <text
                              follows="left|top"
                              height="16"
@@ -413,18 +374,8 @@
                              image_name="parcel_drk_Push"
                              layout="topleft"
                              left="20"
-                             name="icon_Push"
+                             name="push_icon"
                              top_pad="3"
-                             visible="false"
-                             width="22" />
-                            <icon
-                             follows="top|left"
-                             height="18"
-                             image_name="parcel_drk_PushNo"
-                             layout="topleft"
-                             left="20"
-                             name="icon_PushNo"
-                             top_delta="0"
                              width="22" />
                             <text
                              follows="left|top"
@@ -449,18 +400,9 @@
                              image_name="parcel_drk_Build"
                              layout="topleft"
                              left="20"
-                             name="icon_Build"
+                             name="build_icon"
                              top_pad="3"
                              width="22" />
-                            <icon
-                             follows="top|left"
-                             height="18"
-                             image_name="parcel_drk_BuildNo"
-                             layout="topleft"
-                             left="20"
-                             name="icon_BuildNo"
-                             top_delta="0"
-                             visible="false" />
                             <text
                              follows="left|top"
                              height="14"
@@ -484,18 +426,9 @@
                              image_name="parcel_drk_Scripts"
                              layout="topleft"
                              left="20"
-                             name="icon_Scripts"
+                             name="scripts_icon"
                              top_pad="3"
                              width="22" />
-                            <icon
-                             follows="top|left"
-                             height="18"
-                             image_name="parcel_drk_ScriptsNo"
-                             layout="topleft"
-                             left="20"
-                             name="icon_ScriptsNo"
-                             top_delta="0"
-                             visible="false" />
                             <text
                              follows="left|top"
                              height="14"
@@ -519,18 +452,9 @@
                              image_name="parcel_drk_Damage"
                              layout="topleft"
                              left="20"
-                             name="icon_Damage"
+                             name="damage_icon"
                              top_pad="7"
-                             visible="false"
                              width="22" />
-                            <icon
-                             follows="top|left"
-                             height="18"
-                             image_name="parcel_drk_DamageNo"
-                             layout="topleft"
-                             left="20"
-                             name="icon_DamageNo"
-                             top_delta="0" />
                             <text
                              follows="left|top"
                              height="14"
@@ -622,33 +546,13 @@
                          top_pad="7"
                          value="Rating:"
                          width="80" />
-                        <icon
-                         follows="top|left"
-                         height="16"
-                         image_name="parcel_drk_M"
-                         layout="topleft"
-                         left_pad="0"
-                         name="icon_M"
-                         width="18" />
-                        <icon
-                         follows="top|left"
-                         height="16"
-                         image_name="parcel_drk_R"
-                         layout="topleft"
-                         left_delta="0"
-                         name="icon_R"
-                         top_delta="0"
-                         visible="false"
-                         width="18" />
                         <icon
                          follows="top|left"
                          height="16"
                          image_name="parcel_drk_PG"
                          layout="topleft"
-                         left_delta="0"
-                         name="icon_PG"
-                         top_delta="0"
-                         visible="false"
+                         left_pad="0"
+                         name="region_rating_icon"
                          width="18" />
                         <text
                          follows="left|top|right"
-- 
GitLab


From 380bb0ce09913ae05000c86fb0a0ed410ead1089 Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Wed, 4 Nov 2009 15:24:11 +0200
Subject: [PATCH 109/306] No ticket. Removed extra includes. Fixed copyright
 years.

--HG--
branch : product-engine
---
 indra/newview/llpanellandmarkinfo.cpp    | 5 +----
 indra/newview/llpanellandmarkinfo.h      | 2 +-
 indra/newview/llpanellandmarks.cpp       | 2 +-
 indra/newview/llpanellandmarks.h         | 2 +-
 indra/newview/llpanelpicks.cpp           | 2 +-
 indra/newview/llpanelpicks.h             | 2 +-
 indra/newview/llpanelplaceinfo.cpp       | 7 +------
 indra/newview/llpanelplaceinfo.h         | 2 +-
 indra/newview/llpanelplaceprofile.cpp    | 4 +---
 indra/newview/llpanelplaceprofile.h      | 2 +-
 indra/newview/llpanelplaces.cpp          | 2 +-
 indra/newview/llpanelplaces.h            | 2 +-
 indra/newview/llpanelplacestab.cpp       | 2 +-
 indra/newview/llpanelplacestab.h         | 2 +-
 indra/newview/llpanelteleporthistory.cpp | 2 +-
 indra/newview/llpanelteleporthistory.h   | 2 +-
 16 files changed, 16 insertions(+), 26 deletions(-)

diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
index fd6a41c5058..fe01fc63073 100644
--- a/indra/newview/llpanellandmarkinfo.cpp
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  *
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  *
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
@@ -34,8 +34,6 @@
 
 #include "llpanellandmarkinfo.h"
 
-#include "llinventory.h"
-
 #include "llcombobox.h"
 #include "lllineeditor.h"
 #include "lltextbox.h"
@@ -44,7 +42,6 @@
 
 #include "llagent.h"
 #include "llagentui.h"
-#include "llinventorymodel.h"
 #include "lllandmarkactions.h"
 #include "llviewerinventory.h"
 #include "llviewerparcelmgr.h"
diff --git a/indra/newview/llpanellandmarkinfo.h b/indra/newview/llpanellandmarkinfo.h
index 03377986b31..73e0ddb9cc9 100644
--- a/indra/newview/llpanellandmarkinfo.h
+++ b/indra/newview/llpanellandmarkinfo.h
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  *
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  *
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 5f717b51cc5..34c146826f5 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  *
- * Copyright (c) 2001-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  *
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h
index 0e7abb48650..d54761ed590 100644
--- a/indra/newview/llpanellandmarks.h
+++ b/indra/newview/llpanellandmarks.h
@@ -5,7 +5,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  *
- * Copyright (c) 2001-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  *
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 6181531f82e..2bf04f96814 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h
index 06a0f0a0fdb..5a2754ad106 100644
--- a/indra/newview/llpanelpicks.h
+++ b/indra/newview/llpanelpicks.h
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index e6d10be8582..c6006510158 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
@@ -38,8 +38,6 @@
 #include "llsdutil.h"
 #include "llsecondlifeurls.h"
 
-#include "llinventory.h"
-
 #include "llsdutil_math.h"
 
 #include "llscrollcontainer.h"
@@ -48,15 +46,12 @@
 #include "llagent.h"
 #include "llavatarpropertiesprocessor.h"
 #include "llexpandabletextbox.h"
-#include "llfloaterworldmap.h"
-#include "llinventorymodel.h"
 #include "llpanelpick.h"
 #include "lltexturectrl.h"
 #include "llviewerinventory.h"
 #include "llviewerparcelmgr.h"
 #include "llviewerregion.h"
 #include "llviewertexteditor.h"
-#include "llworldmap.h"
 
 LLPanelPlaceInfo::LLPanelPlaceInfo()
 :	LLPanel(),
diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h
index c9e13475428..ec30397cff5 100644
--- a/indra/newview/llpanelplaceinfo.h
+++ b/indra/newview/llpanelplaceinfo.h
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 814139607cc..b2a9f6f2513 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  *
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  *
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
@@ -36,8 +36,6 @@
 
 #include "llparcel.h"
 
-#include "llqueryflags.h"
-
 #include "lliconctrl.h"
 #include "lllineeditor.h"
 #include "lltextbox.h"
diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h
index db54ff8af93..b3ef4acf511 100644
--- a/indra/newview/llpanelplaceprofile.h
+++ b/indra/newview/llpanelplaceprofile.h
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  *
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  *
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 42e4a6e40b1..6f15e53299e 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  *
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  *
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
index 39eb5261db4..8faed613f48 100644
--- a/indra/newview/llpanelplaces.h
+++ b/indra/newview/llpanelplaces.h
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelplacestab.cpp b/indra/newview/llpanelplacestab.cpp
index 7c0a7b0cc4a..f5e7ff3c409 100644
--- a/indra/newview/llpanelplacestab.cpp
+++ b/indra/newview/llpanelplacestab.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelplacestab.h b/indra/newview/llpanelplacestab.h
index 1c70869414f..3f56dcb2839 100644
--- a/indra/newview/llpanelplacestab.h
+++ b/indra/newview/llpanelplacestab.h
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 7dd9df674c0..437af1c4e71 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h
index 7c1b4034324..b34d9e876c7 100644
--- a/indra/newview/llpanelteleporthistory.h
+++ b/indra/newview/llpanelteleporthistory.h
@@ -5,7 +5,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
-- 
GitLab


From 14af8485fd3759cda8b5471b0f6171b832d3e1b4 Mon Sep 17 00:00:00 2001
From: Mike Antipov <mantipov@productengine.com>
Date: Wed, 4 Nov 2009 16:02:12 +0200
Subject: [PATCH 110/306] Fixed normal bug EXT-2061 ("All" list doesn't contain
 any friends while "Online" list isn't empty in "Friends" tab on People Panel)
 - added code to force fetching of Inventory "Friends/All" folder in case it
 is incomplete on startup.

--HG--
branch : product-engine
---
 indra/newview/llfriendcard.cpp | 71 +++++++++++++++++++++++++++++++++-
 indra/newview/llfriendcard.h   | 13 ++++++-
 2 files changed, 82 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp
index fbcaeee01f2..724b18ded2a 100644
--- a/indra/newview/llfriendcard.cpp
+++ b/indra/newview/llfriendcard.cpp
@@ -91,8 +91,44 @@ const LLUUID& get_folder_uuid(const LLUUID& parentFolderUUID, LLInventoryCollect
 	return LLUUID::null;
 }
 
+
+// LLViewerInventoryCategory::fetchDescendents has it own period of fetching.
+// for now it is FETCH_TIMER_EXPIRY = 10.0f; So made our period a bit more.
+const F32 FETCH_FRIENDS_DESCENDENTS_PERIOD = 11.0f;
+
+
+/**
+ * Intended to call passed callback after the specified period of time.
+ *
+ * Implemented to fix an issue when Inventory folders are in incomplete state. See EXT-2061, EXT-1935, EXT-813.
+ * For now it uses to periodically sync Inventory Friends/All folder with a Agent's Friends List
+ * until it is complete.
+ */ 
+class FriendListUpdater : public LLEventTimer
+{
+public:
+	typedef boost::function<bool()> callback_t;
+
+	FriendListUpdater(callback_t cb, F32 period)
+		:	LLEventTimer(period)
+		,	mCallback(cb)
+	{
+		mEventTimer.start();
+	}
+
+	virtual BOOL tick() // from LLEventTimer
+	{
+		return mCallback();
+	}
+
+private:
+	callback_t		mCallback;
+};
+
+
 // LLFriendCardsManager Constructor / Destructor
 LLFriendCardsManager::LLFriendCardsManager()
+: mFriendsAllFolderCompleted(true)
 {
 	LLAvatarTracker::instance().addObserver(this);
 }
@@ -269,7 +305,7 @@ bool LLFriendCardsManager::isAnyFriendCategory(const LLUUID& catID) const
 	return TRUE == gInventory.isObjectDescendentOf(catID, friendFolderID);
 }
 
-void LLFriendCardsManager::syncFriendsFolder()
+bool LLFriendCardsManager::syncFriendsFolder()
 {
 	//lets create "Friends" and "Friends/All" in the Inventory "Calling Cards" if they are absent
 	LLFriendCardsManager::instance().ensureFriendFoldersExist();
@@ -297,11 +333,35 @@ void LLFriendCardsManager::syncFriendsFolder()
 	// 2. Add missing Friend Cards for friends
 	LLAvatarTracker::buddy_map_t::const_iterator buddy_it = all_buddies.begin();
 	llinfos << "try to build friends, count: " << all_buddies.size() << llendl; 
+	mFriendsAllFolderCompleted = true;
 	for(; buddy_it != all_buddies.end(); ++buddy_it)
 	{
 		const LLUUID& buddy_id = (*buddy_it).first;
 		addFriendCardToInventory(buddy_id);
 	}
+
+	if (!mFriendsAllFolderCompleted)
+	{
+		forceFriendListIsLoaded(findFriendAllSubfolderUUIDImpl());
+
+		static bool timer_started = false;
+		if (!timer_started)
+		{
+			lldebugs << "Create and start timer to sync Inventory Friends All folder with Friends list" << llendl;
+
+			// do not worry about destruction of the FriendListUpdater. 
+			// It will be deleted by LLEventTimer::updateClass when FriendListUpdater::tick() returns true.
+			new FriendListUpdater(boost::bind(&LLFriendCardsManager::syncFriendsFolder, this),
+				FETCH_FRIENDS_DESCENDENTS_PERIOD);
+		}
+		timer_started = true;
+	}
+	else
+	{
+		lldebugs << "Friends/All Inventory folder is synchronized with the Agent's Friends List" << llendl;
+	}
+
+	return mFriendsAllFolderCompleted;
 }
 
 void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBuddiesMap) const
@@ -461,7 +521,9 @@ bool LLFriendCardsManager::addFriendCardToInventory(const LLUUID& avatarID)
 	LLUUID friendListFolderID = findFriendAllSubfolderUUIDImpl();
 	if (shouldBeAdded && !invModel->isCategoryComplete(friendListFolderID))
 	{
+		mFriendsAllFolderCompleted = false;
 		shouldBeAdded = false;
+		lldebugs << "Friends/All category is not completed" << llendl; 
 	}
 	if (shouldBeAdded)
 	{
@@ -520,4 +582,11 @@ void LLFriendCardsManager::onFriendListUpdate(U32 changed_mask)
 	}
 }
 
+void LLFriendCardsManager::forceFriendListIsLoaded(const LLUUID& folder_id) const
+{
+	bool fetching_inventory = gInventory.fetchDescendentsOf(folder_id);
+	lldebugs << "Trying to fetch descendants of Friends/All Inventory folder, fetched: "
+		<< fetching_inventory << llendl;
+}
+
 // EOF
diff --git a/indra/newview/llfriendcard.h b/indra/newview/llfriendcard.h
index 6ada3428311..feea05bc1dc 100644
--- a/indra/newview/llfriendcard.h
+++ b/indra/newview/llfriendcard.h
@@ -89,8 +89,10 @@ class LLFriendCardsManager
 
 	/**
 	 *	Synchronizes content of the Calling Card/Friends/All Global Inventory folder with Agent's Friend List
+	 *
+	 *	@return true - if folder is already synchronized, false otherwise.
 	 */
-	void syncFriendsFolder();
+	bool syncFriendsFolder();
 
 	/*!
 	 * \brief
@@ -144,11 +146,20 @@ class LLFriendCardsManager
 
 	void onFriendListUpdate(U32 changed_mask);
 
+	/**
+	 * Force fetching of the Inventory folder specified by passed folder's LLUUID.
+	 *
+	 * It only sends request to server, server reply should be processed in other place.
+	 * Because request can be sent via UDP we need to periodically check if request was completed with success.
+	 */
+	void forceFriendListIsLoaded(const LLUUID& folder_id) const;
+
 
 private:
 	typedef std::set<LLUUID> avatar_uuid_set_t;
 
 	avatar_uuid_set_t mBuddyIDSet;
+	bool mFriendsAllFolderCompleted;
 };
 
 #endif // LL_LLFRIENDCARD_H
-- 
GitLab


From e634f2f42d5a7165f4cab2910f144144bc7a31d0 Mon Sep 17 00:00:00 2001
From: Andrew Dyukov <adyukov@productengine.com>
Date: Wed, 4 Nov 2009 16:13:47 +0200
Subject: [PATCH 111/306] Fixed problems caused by a160d0dfb897

--HG--
branch : product-engine
---
 indra/newview/llnavigationbar.cpp                      | 10 ++++++++--
 .../skins/default/xui/en/panel_navigation_bar.xml      |  2 +-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index b35fd6134b7..1312949f540 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -274,8 +274,14 @@ void LLNavigationBar::draw()
 
 BOOL LLNavigationBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
 {
-	show_navbar_context_menu(this,x,y);
-	return TRUE;
+	BOOL handled = childrenHandleRightMouseDown( x, y, mask) != NULL;
+	if(!handled && !gMenuHolder->hasVisibleMenu())
+	{
+		show_navbar_context_menu(this,x,y);
+		handled = true;
+	}
+					
+	return handled;
 }
 
 void LLNavigationBar::onBackButtonClicked()
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index 4175d21639b..a289ce3cf72 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -11,7 +11,7 @@
 	<icon
 	 follows="all"
 	 image_name="NavBar_BG"
-	 mouse_opaque="true"
+	 mouse_opaque="false"
 	 name="bg_icon"
 	 scale_image="true"
 	 visible="true"
-- 
GitLab


From 347f2614804d2b681358822c6bd018409aadde83 Mon Sep 17 00:00:00 2001
From: Dmitry Oleshko <doleshko@productengine.com>
Date: Wed, 4 Nov 2009 16:35:48 +0200
Subject: [PATCH 112/306] implemented a normal Sub-task (EXT-988) Change
 indication of unread messges in chiclets

--HG--
branch : product-engine
---
 indra/newview/llchiclet.cpp | 98 ++++++++++++++++---------------------
 indra/newview/llchiclet.h   | 32 +++++++++---
 2 files changed, 68 insertions(+), 62 deletions(-)

diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 8a4650763fd..594385b4ef0 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -198,9 +198,38 @@ void LLChiclet::setValue(const LLSD& value)
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 
-LLIMChiclet::LLIMChiclet(const LLChiclet::Params& p)
+LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p)
 : LLChiclet(p)
+, mNewMessagesIcon(NULL)
+, mCounterCtrl(NULL)
+{
+	// initialize an overlay icon for new messages
+	LLIconCtrl::Params icon_params;
+	icon_params.visible = false;
+	icon_params.image = LLUI::getUIImage(p.new_messages_icon_name);
+	mNewMessagesIcon = LLUICtrlFactory::create<LLIconCtrl>(icon_params);
+	// adjust size and position of an icon
+	LLRect chiclet_rect = p.rect;
+	LLRect overlay_icon_rect = LLRect(chiclet_rect.getWidth()/2, chiclet_rect.mTop, chiclet_rect.mRight, chiclet_rect.getHeight()/2); 
+	// shift an icon a little bit to the right and up corner of a chiclet
+	overlay_icon_rect.translate(overlay_icon_rect.getWidth()/4, overlay_icon_rect.getHeight()/4);
+	mNewMessagesIcon->setRect(overlay_icon_rect);
+	addChild(mNewMessagesIcon);
+
+	setShowCounter(false);
+}
+
+void LLIMChiclet::setShowNewMessagesIcon(bool show)
+{
+	if(mNewMessagesIcon)
+	{
+		mNewMessagesIcon->setVisible(show);
+	}
+}
+
+bool LLIMChiclet::getShowNewMessagesIcon()
 {
+	return mNewMessagesIcon->getVisible();
 }
 
 void LLIMChiclet::onMouseDown()
@@ -274,7 +303,7 @@ LLIMP2PChiclet::Params::Params()
 , show_speaker("show_speaker")
 {
 	// *TODO Vadim: Get rid of hardcoded values.
-	rect(LLRect(0, 25, 45, 0));
+	rect(LLRect(0, 25, 25, 0));
 
 	avatar_icon.name("avatar_icon");
 	avatar_icon.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP | FOLLOWS_BOTTOM);
@@ -293,6 +322,7 @@ LLIMP2PChiclet::Params::Params()
 	unread_notifications.v_pad(5);
 	unread_notifications.text_color(LLColor4::white);
 	unread_notifications.mouse_opaque(false);
+	unread_notifications.visible(false);
 
 	speaker.name("speaker");
 	speaker.rect(LLRect(45, 25, 65, 0));
@@ -303,7 +333,6 @@ LLIMP2PChiclet::Params::Params()
 LLIMP2PChiclet::LLIMP2PChiclet(const Params& p)
 : LLIMChiclet(p)
 , mChicletIconCtrl(NULL)
-, mCounterCtrl(NULL)
 , mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
@@ -322,28 +351,14 @@ LLIMP2PChiclet::LLIMP2PChiclet(const Params& p)
 	mSpeakerCtrl = LLUICtrlFactory::create<LLChicletSpeakerCtrl>(speaker_params);
 	addChild(mSpeakerCtrl);
 
+	sendChildToFront(mNewMessagesIcon);
 	setShowSpeaker(p.show_speaker);
 }
 
 void LLIMP2PChiclet::setCounter(S32 counter)
 {
 	mCounterCtrl->setCounter(counter);
-
-	if(getShowCounter())
-	{
-		LLRect counter_rect = mCounterCtrl->getRect();
-		LLRect required_rect = mCounterCtrl->getRequiredRect();
-		bool needs_resize = required_rect.getWidth() != counter_rect.getWidth();
-
-		if(needs_resize)
-		{
-			counter_rect.mRight = counter_rect.mLeft + required_rect.getWidth();
-			mCounterCtrl->reshape(counter_rect.getWidth(), counter_rect.getHeight());
-			mCounterCtrl->setRect(counter_rect);
-
-			onChicletSizeChanged();
-		}
-	}
+	setShowNewMessagesIcon(counter);
 }
 
 LLRect LLIMP2PChiclet::getRequiredRect()
@@ -458,7 +473,7 @@ LLAdHocChiclet::Params::Params()
 , avatar_icon_color("avatar_icon_color", LLColor4::green)
 {
 	// *TODO Vadim: Get rid of hardcoded values.
-	rect(LLRect(0, 25, 45, 0));
+	rect(LLRect(0, 25, 25, 0));
 
 	avatar_icon.name("avatar_icon");
 	avatar_icon.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP | FOLLOWS_BOTTOM);
@@ -477,6 +492,8 @@ LLAdHocChiclet::Params::Params()
 	unread_notifications.v_pad(5);
 	unread_notifications.text_color(LLColor4::white);
 	unread_notifications.mouse_opaque(false);
+	unread_notifications.visible(false);
+
 
 	speaker.name("speaker");
 	speaker.rect(LLRect(45, 25, 65, 0));
@@ -487,7 +504,6 @@ LLAdHocChiclet::Params::Params()
 LLAdHocChiclet::LLAdHocChiclet(const Params& p)
 : LLIMChiclet(p)
 , mChicletIconCtrl(NULL)
-, mCounterCtrl(NULL)
 , mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
@@ -508,6 +524,7 @@ LLAdHocChiclet::LLAdHocChiclet(const Params& p)
 	mSpeakerCtrl = LLUICtrlFactory::create<LLChicletSpeakerCtrl>(speaker_params);
 	addChild(mSpeakerCtrl);
 
+	sendChildToFront(mNewMessagesIcon);
 	setShowSpeaker(p.show_speaker);
 }
 
@@ -521,22 +538,7 @@ void LLAdHocChiclet::setSessionId(const LLUUID& session_id)
 void LLAdHocChiclet::setCounter(S32 counter)
 {
 	mCounterCtrl->setCounter(counter);
-
-	if(getShowCounter())
-	{
-		LLRect counter_rect = mCounterCtrl->getRect();
-		LLRect required_rect = mCounterCtrl->getRequiredRect();
-		bool needs_resize = required_rect.getWidth() != counter_rect.getWidth();
-
-		if(needs_resize)
-		{
-			counter_rect.mRight = counter_rect.mLeft + required_rect.getWidth();
-			mCounterCtrl->reshape(counter_rect.getWidth(), counter_rect.getHeight());
-			mCounterCtrl->setRect(counter_rect);
-
-			onChicletSizeChanged();
-		}
-	}
+	setShowNewMessagesIcon(counter);
 }
 
 LLRect LLAdHocChiclet::getRequiredRect()
@@ -565,7 +567,7 @@ BOOL LLAdHocChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask)
 LLIMGroupChiclet::Params::Params()
 : group_icon("group_icon")
 {
-	rect(LLRect(0, 25, 45, 0));
+	rect(LLRect(0, 25, 25, 0));
 
 	group_icon.name("group_icon");
 	
@@ -581,6 +583,7 @@ LLIMGroupChiclet::Params::Params()
 	unread_notifications.font_halign(LLFontGL::HCENTER);
 	unread_notifications.v_pad(5);
 	unread_notifications.text_color(LLColor4::white);
+	unread_notifications.visible(false);
 
 	speaker.name("speaker");
 	speaker.rect(LLRect(45, 25, 65, 0));
@@ -592,7 +595,6 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p)
 : LLIMChiclet(p)
 , LLGroupMgrObserver(LLUUID::null)
 , mChicletIconCtrl(NULL)
-, mCounterCtrl(NULL)
 , mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
@@ -611,6 +613,7 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p)
 	mSpeakerCtrl = LLUICtrlFactory::create<LLChicletSpeakerCtrl>(speaker_params);
 	addChild(mSpeakerCtrl);
 
+	sendChildToFront(mNewMessagesIcon);
 	setShowSpeaker(p.show_speaker);
 }
 
@@ -622,22 +625,7 @@ LLIMGroupChiclet::~LLIMGroupChiclet()
 void LLIMGroupChiclet::setCounter(S32 counter)
 {
 	mCounterCtrl->setCounter(counter);
-
-	if(getShowCounter())
-	{
-		LLRect counter_rect = mCounterCtrl->getRect();
-		LLRect required_rect = mCounterCtrl->getRequiredRect();
-		bool needs_resize = required_rect.getWidth() != counter_rect.getWidth();
-
-		if(needs_resize)
-		{
-			counter_rect.mRight = counter_rect.mLeft + required_rect.getWidth();
-			mCounterCtrl->reshape(counter_rect.getWidth(), counter_rect.getHeight());
-			mCounterCtrl->setRect(counter_rect);
-
-			onChicletSizeChanged();
-		}
-	}
+	setShowNewMessagesIcon(counter);
 }
 
 LLRect LLIMGroupChiclet::getRequiredRect()
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index f82259c73e8..a830240b7d4 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -278,6 +278,14 @@ class LLIMChiclet : public LLChiclet
 		TYPE_GROUP,
 		TYPE_AD_HOC
 	};
+	struct Params : public LLInitParam::Block<Params, LLChiclet::Params>
+	{
+		Optional<std::string> new_messages_icon_name;
+
+		Params() : new_messages_icon_name("new_messages_icon_name", "icn_voice-localchat.tga")
+		{}
+	};
+
 	
 	/*virtual*/ ~LLIMChiclet() {};
 
@@ -307,6 +315,16 @@ class LLIMChiclet : public LLChiclet
 	*/
 	virtual bool getShowSpeaker() {return mShowSpeaker;};
 
+	/*
+	* Shows/hides overlay icon concerning new unread messages.
+	*/
+	virtual void setShowNewMessagesIcon(bool show);
+
+	/*
+	* Returns visibility of overlay icon concerning new unread messages.
+	*/
+	virtual bool getShowNewMessagesIcon();
+
 	/*
 	 * Draws border around chiclet.
 	*/
@@ -335,7 +353,7 @@ class LLIMChiclet : public LLChiclet
 
 protected:
 
-	LLIMChiclet(const LLChiclet::Params& p);
+	LLIMChiclet(const LLIMChiclet::Params& p);
 
 	/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
 
@@ -343,6 +361,9 @@ class LLIMChiclet : public LLChiclet
 
 	bool mShowSpeaker;
 
+	LLIconCtrl* mNewMessagesIcon;
+	LLChicletNotificationCounterCtrl* mCounterCtrl;
+
 	/** the id of another participant, either an avatar id or a group id*/
 	LLUUID mOtherParticipantId;
 
@@ -374,7 +395,7 @@ class LLIMChiclet : public LLChiclet
 class LLIMP2PChiclet : public LLIMChiclet
 {
 public:
-	struct Params : public LLInitParam::Block<Params, LLChiclet::Params>
+	struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
 	{
 		Optional<LLChicletAvatarIconCtrl::Params> avatar_icon;
 
@@ -436,7 +457,6 @@ class LLIMP2PChiclet : public LLIMChiclet
 private:
 
 	LLChicletAvatarIconCtrl* mChicletIconCtrl;
-	LLChicletNotificationCounterCtrl* mCounterCtrl;
 	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
@@ -447,7 +467,7 @@ class LLIMP2PChiclet : public LLIMChiclet
 class LLAdHocChiclet : public LLIMChiclet
 {
 public:
-	struct Params : public LLInitParam::Block<Params, LLChiclet::Params>
+	struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
 	{
 		Optional<LLChicletAvatarIconCtrl::Params> avatar_icon;
 
@@ -497,7 +517,6 @@ class LLAdHocChiclet : public LLIMChiclet
 private:
 
 	LLChicletAvatarIconCtrl* mChicletIconCtrl;
-	LLChicletNotificationCounterCtrl* mCounterCtrl;
 	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
@@ -509,7 +528,7 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 {
 public:
 
-	struct Params : public LLInitParam::Block<Params, LLChiclet::Params>
+	struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
 	{
 		Optional<LLChicletGroupIconCtrl::Params> group_icon;
 
@@ -578,7 +597,6 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 private:
 
 	LLChicletGroupIconCtrl* mChicletIconCtrl;
-	LLChicletNotificationCounterCtrl* mCounterCtrl;
 	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
-- 
GitLab


From a1e7bef9e70312929b6c1b437a17954e6198c1db Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Wed, 4 Nov 2009 17:48:27 +0200
Subject: [PATCH 113/306] No ticket,has sorted xml attributes in alphabetical
 order.

--HG--
branch : product-engine
---
 .../xui/en/panel_adhoc_control_panel.xml      |  35 +++---
 .../xui/en/panel_group_control_panel.xml      |  44 ++++----
 .../default/xui/en/panel_im_control_panel.xml | 100 ++++++++++--------
 3 files changed, 100 insertions(+), 79 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
index 0c1e777fa1b..8dbcfe6360a 100644
--- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
@@ -1,9 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- name="panel_im_control_panel"
- width="180"
+ border="false"
  height="215"
- border="false">
+ name="panel_im_control_panel"
+ width="180">
+
     <avatar_list
      color="DkGray2"
      follows="left|top|right|bottom"
@@ -16,24 +17,28 @@
      show_info_btn="false"
      show_profile_btn="false"
      top="10"
-     width="180" />
+     width="180"/>
+
     <button
-     name="call_btn"
+     height="20"
      label="Call Group"
      left_delta="27"
-     width="125"
-     height="20" />
+     name="call_btn"
+     width="125"/>
+
     <button
-     name="end_call_btn"
+     height="20"
      label="Leave Call"
-     width="125"
-     height="20" 
-     visible="false"/>
+     name="end_call_btn"
+     visible="false"
+     width="125"/>
+
     <button
      enabled="false"
-     name="voice_ctrls_btn"
-     label="Open Voice Controls"
-     width="125"
      height="20"
-     visible="false"/>
+     label="Open Voice Controls"
+     name="voice_ctrls_btn"
+     visible="false"
+     width="125"/>
+
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index 560d353d00d..737bb5bcb6d 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -1,9 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- name="panel_im_control_panel"
- width="180"
+ border="false"
  height="238"
- border="false">
+ name="panel_im_control_panel"
+ width="180">
+
     <avatar_list
      color="DkGray2"
      follows="left|top|right|bottom"
@@ -16,29 +17,34 @@
      show_info_btn="false"
      show_profile_btn="false"
      top="10"
-     width="180" />
+     width="180"/>
+
     <button
-     name="group_info_btn"
+     height="20"
      label="Group Info"
      left_delta="27"
-     width="125"
-     height="20" />
+     name="group_info_btn"
+     width="125"/>
+
     <button
-     name="call_btn"
+     height="20"
      label="Call Group"
-     width="125"
-     height="20" />
+     name="call_btn"
+     width="125"/>
+
     <button
-     name="end_call_btn"
+     height="20"
      label="Leave Call"
-     width="125"
-     height="20" 
-     visible="false"/>
+     name="end_call_btn"
+     visible="false"
+     width="125"/>
+
     <button
-	 enabled="false"
-     name="voice_ctrls_btn"
-     label="Open Voice Controls"
-     width="125"
+     enabled="false"
      height="20"
-     visible="false"/>
+     label="Open Voice Controls"
+     name="voice_ctrls_btn"
+     visible="false"
+     width="125"/>
+
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index 7308ca3c29e..35be31983cc 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -1,32 +1,37 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="panel_im_control_panel"
-       width="128"
-       height="327"
-       border="false">
+<panel
+ border="false"
+ height="327"
+ name="panel_im_control_panel"
+ width="128">
 
-  <avatar_icon name="avatar_icon"
-               follows="left|top"
-               left_delta="3"
-               width="125"
-               height="125" />
+    <avatar_icon
+     follows="left|top"
+     height="125"
+     left_delta="3"
+     name="avatar_icon"
+     width="125"/>
 
-  <button name="view_profile_btn"
-          follows="left|bottom"
-          label="View Profile"
-          width="125"
-		  height="20" />
+    <button
+     follows="left|bottom"
+     height="20"
+     label="View Profile"
+     name="view_profile_btn"
+     width="125"/>
 
-  <button name="add_friend_btn"
-          follows="left|bottom"
-          label="Add Friend"
-          width="125"
-          height="20" />
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Add Friend"
+     name="add_friend_btn"
+     width="125"/>
 
-  <button name="call_btn"
-          follows="left|bottom"
-          label="Call"
-          width="125"
-          height="20" />
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Call"
+     name="call_btn"
+     width="125"/>
 
     <button
      follows="left|bottom"
@@ -34,31 +39,36 @@
      label="Leave Call"
      name="end_call_btn"
      visible="false"
-     width="125" />
+     width="125"/>
 
-  <button
-	 enabled="false"
+    <button
+     enabled="false"
      follows="left|bottom"
-     name="voice_ctrls_btn"
+     height="20"
      label="Open Voice Controls"
-     width="125"
+     name="voice_ctrls_btn"
+     visible="false"
+     width="125"/>
+
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Teleport"
+     name="teleport_btn"
+     width="125"/>
+
+    <button
+     follows="left|bottom"
      height="20"
-     visible="false"/>
+     label="Share"
+     name="share_btn"
+     width="125"/>
 
-  <button name="teleport_btn"
-          follows="left|bottom"
-          label="Teleport"
-          width="125"
-          height="20" />
-  <button name="share_btn"
-          follows="left|bottom"
-          label="Share"
-          width="125"
-          height="20" />
-  <button name="pay_btn"
-          follows="left|bottom"
-          label="Pay"
-          width="125"
-          height="20" />
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Pay"
+     name="pay_btn"
+     width="125"/>
 
 </panel>
-- 
GitLab


From 0fd7ff59f58dc9c5d9b043830d513020ac7a6cdd Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Wed, 4 Nov 2009 18:19:32 +0200
Subject: [PATCH 114/306] Implemented normal sub-task EXT-2142 (Call, End Call
 and Oen Voice Controls buttons should be located on their own panel at the
 bottom of the control panel (all types of IMs))

--HG--
branch : product-engine
---
 .../default/xui/en/floater_im_session.xml     |  10 +-
 .../xui/en/panel_adhoc_control_panel.xml      |  51 +++++---
 .../xui/en/panel_group_control_panel.xml      |  60 +++++----
 .../default/xui/en/panel_im_control_panel.xml | 117 ++++++++++--------
 4 files changed, 139 insertions(+), 99 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 88aca005cfe..8eeff0a9e42 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -12,13 +12,13 @@
  can_dock="true"
  can_minimize="true"
  visible="true" 
- width="400"
+ width="520"
  can_resize="true"
  min_width="200"
  min_height="150">
   <layout_stack follows="left|top|right|bottom"
                 height="344"
-                width="400"
+                width="520"
                 layout="topleft"
                 orientation="horizontal"
                 name="im_panels"
@@ -34,7 +34,7 @@
       auto_resize="false"
       user_resize="false" />
     <layout_panel height="344"
-                  width="235"
+                  width="355"
                   left_delta="146" 
                   top="0"
                   user_resize="false">
@@ -61,9 +61,9 @@
        name="chat_history"
        parse_highlights="true"
        allow_html="true" 
-       width="230">
+       width="350">
       </chat_history>
-      <line_editor follows="left|right" name="chat_editor" height="20" layout="topleft" width="225">
+      <line_editor follows="left|right" name="chat_editor" height="20" layout="topleft" width="345">
       </line_editor>
     </layout_panel>
   </layout_stack>
diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
index 8dbcfe6360a..52017218d6c 100644
--- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
@@ -19,26 +19,39 @@
      top="10"
      width="180"/>
 
-    <button
-     height="20"
-     label="Call Group"
-     left_delta="27"
-     name="call_btn"
-     width="125"/>
+    <panel
+     background_visible="true"
+     bg_alpha_color="0.2 0.2 0.2 1"
+     border="false"
+     bottom="1"
+     follows="left|bottom"
+     height="78"
+     left="0"
+     name="panel_buttons"
+     width="180">
 
-    <button
-     height="20"
-     label="Leave Call"
-     name="end_call_btn"
-     visible="false"
-     width="125"/>
+        <button
+         height="20"
+         label="Call Group"
+         left_delta="27"
+         name="call_btn"
+         width="125"/>
 
-    <button
-     enabled="false"
-     height="20"
-     label="Open Voice Controls"
-     name="voice_ctrls_btn"
-     visible="false"
-     width="125"/>
+        <button
+         height="20"
+         label="Leave Call"
+         name="end_call_btn"
+         visible="false"
+         width="125"/>
+
+        <button
+         enabled="false"
+         height="20"
+         label="Open Voice Controls"
+         name="voice_ctrls_btn"
+         visible="false"
+         width="125"/>
+
+    </panel>
 
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index 737bb5bcb6d..daa44ac75ce 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -19,32 +19,44 @@
      top="10"
      width="180"/>
 
-    <button
-     height="20"
-     label="Group Info"
-     left_delta="27"
-     name="group_info_btn"
-     width="125"/>
+    <panel
+     background_visible="true"
+     bg_alpha_color="0.2 0.2 0.2 1"
+     border="false"
+     bottom="1"
+     follows="left|bottom"
+     height="98"
+     left="0"
+     name="panel_buttons"
+     width="180">
 
-    <button
-     height="20"
-     label="Call Group"
-     name="call_btn"
-     width="125"/>
+        <button
+         height="20"
+         label="Group Info"
+         left_delta="28"
+         name="group_info_btn"
+         width="125"/>
 
-    <button
-     height="20"
-     label="Leave Call"
-     name="end_call_btn"
-     visible="false"
-     width="125"/>
+        <button
+         height="20"
+         label="Call Group"
+         name="call_btn"
+         width="125"/>
 
-    <button
-     enabled="false"
-     height="20"
-     label="Open Voice Controls"
-     name="voice_ctrls_btn"
-     visible="false"
-     width="125"/>
+        <button
+         height="20"
+         label="Leave Call"
+         name="end_call_btn"
+         visible="false"
+         width="125"/>
 
+        <button
+         enabled="false"
+         height="20"
+         label="Open Voice Controls"
+         name="voice_ctrls_btn"
+         visible="false"
+         width="125"/>
+
+    </panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index 35be31983cc..d144d71dcee 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -2,73 +2,88 @@
 <panel
  border="false"
  height="327"
+ layout="topleft"
  name="panel_im_control_panel"
- width="128">
+ width="131">
 
     <avatar_icon
      follows="left|top"
      height="125"
      left_delta="3"
      name="avatar_icon"
+     top="-10"
      width="125"/>
 
-    <button
+    <panel
+     background_visible="true"
+     bg_alpha_color="0.2 0.2 0.2 1"
+     border="false"
+     bottom="1"
      follows="left|bottom"
-     height="20"
-     label="View Profile"
-     name="view_profile_btn"
-     width="125"/>
+     height="195"
+     left="0"
+     name="panel_buttons"
+     width="131">
 
-    <button
-     follows="left|bottom"
-     height="20"
-     label="Add Friend"
-     name="add_friend_btn"
-     width="125"/>
+        <button
+         follows="left|bottom"
+         height="20"
+         label="View Profile"
+         left_delta="3"
+         name="view_profile_btn"
+         width="125"/>
 
-    <button
-     follows="left|bottom"
-     height="20"
-     label="Call"
-     name="call_btn"
-     width="125"/>
+        <button
+         follows="left|bottom"
+         height="20"
+         label="Add Friend"
+         name="add_friend_btn"
+         width="125"/>
 
-    <button
-     follows="left|bottom"
-     height="20"
-     label="Leave Call"
-     name="end_call_btn"
-     visible="false"
-     width="125"/>
+        <button
+         follows="left|bottom"
+         height="20"
+         label="Call"
+         name="call_btn"
+         width="125"/>
 
-    <button
-     enabled="false"
-     follows="left|bottom"
-     height="20"
-     label="Open Voice Controls"
-     name="voice_ctrls_btn"
-     visible="false"
-     width="125"/>
+        <button
+         follows="left|bottom"
+         height="20"
+         label="Leave Call"
+         name="end_call_btn"
+         visible="false"
+         width="125"/>
 
-    <button
-     follows="left|bottom"
-     height="20"
-     label="Teleport"
-     name="teleport_btn"
-     width="125"/>
+        <button
+         enabled="false"
+         follows="left|bottom"
+         height="20"
+         label="Open Voice Controls"
+         name="voice_ctrls_btn"
+         visible="false"
+         width="125"/>
 
-    <button
-     follows="left|bottom"
-     height="20"
-     label="Share"
-     name="share_btn"
-     width="125"/>
+        <button
+         follows="left|bottom"
+         height="20"
+         label="Teleport"
+         name="teleport_btn"
+         width="125"/>
 
-    <button
-     follows="left|bottom"
-     height="20"
-     label="Pay"
-     name="pay_btn"
-     width="125"/>
+        <button
+         follows="left|bottom"
+         height="20"
+         label="Share"
+         name="share_btn"
+         width="125"/>
+
+        <button
+         follows="left|bottom"
+         height="20"
+         label="Pay"
+         name="pay_btn"
+         width="125"/>
 
+    </panel>
 </panel>
-- 
GitLab


From 8346cd6806f479053a5b81b496dbb9b88ed26bb5 Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Wed, 4 Nov 2009 19:53:17 +0200
Subject: [PATCH 115/306] Fixed normal bug EXT-2192 "Remove "Share" button from
 all Places Tabs (including Place/Landmark info)". - Removed "Share" button
 and resized other buttons to take its place.

--HG--
branch : product-engine
---
 indra/newview/llpanelplaces.cpp                 | 11 -----------
 indra/newview/llpanelplaces.h                   |  2 --
 indra/newview/llpanelplacestab.cpp              |  1 -
 indra/newview/llpanelplacestab.h                |  3 ---
 .../skins/default/xui/en/panel_places.xml       | 17 +++--------------
 5 files changed, 3 insertions(+), 31 deletions(-)

diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 6f15e53299e..0784e4555f8 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -160,9 +160,6 @@ BOOL LLPanelPlaces::postBuild()
 	
 	mShowOnMapBtn = getChild<LLButton>("map_btn");
 	mShowOnMapBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onShowOnMapButtonClicked, this));
-	
-	mShareBtn = getChild<LLButton>("share_btn");
-	//mShareBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onShareButtonClicked, this));
 
 	mEditBtn = getChild<LLButton>("edit_btn");
 	mEditBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this));
@@ -413,13 +410,6 @@ void LLPanelPlaces::onTabSelected()
 	mActivePanel->updateVerbs();
 }
 
-/*
-void LLPanelPlaces::onShareButtonClicked()
-{
-	// TODO: Launch the "Things" Share wizard
-}
-*/
-
 void LLPanelPlaces::onTeleportButtonClicked()
 {
 	LLPanelPlaceInfo* panel = getCurrentInfoPanel();
@@ -852,7 +842,6 @@ void LLPanelPlaces::updateVerbs()
 
 	mTeleportBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
 	mShowOnMapBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
-	mShareBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
 	mOverflowBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
 	mEditBtn->setVisible(mPlaceInfoType == LANDMARK_INFO_TYPE && !isLandmarkEditModeOn);
 	mSaveBtn->setVisible(isLandmarkEditModeOn);
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
index 8faed613f48..0d97353b661 100644
--- a/indra/newview/llpanelplaces.h
+++ b/indra/newview/llpanelplaces.h
@@ -73,7 +73,6 @@ class LLPanelPlaces : public LLPanel
 	void onFilterEdit(const std::string& search_string, bool force_filter);
 	void onTabSelected();
 
-	//void onShareButtonClicked();
 	void onTeleportButtonClicked();
 	void onShowOnMapButtonClicked();
 	void onEditButtonClicked();
@@ -105,7 +104,6 @@ class LLPanelPlaces : public LLPanel
 
 	LLButton*					mTeleportBtn;
 	LLButton*					mShowOnMapBtn;
-	LLButton*					mShareBtn;
 	LLButton*					mEditBtn;
 	LLButton*					mSaveBtn;
 	LLButton*					mCancelBtn;
diff --git a/indra/newview/llpanelplacestab.cpp b/indra/newview/llpanelplacestab.cpp
index f5e7ff3c409..42c871a41aa 100644
--- a/indra/newview/llpanelplacestab.cpp
+++ b/indra/newview/llpanelplacestab.cpp
@@ -51,7 +51,6 @@ bool LLPanelPlacesTab::isTabVisible()
 
 void LLPanelPlacesTab::setPanelPlacesButtons(LLPanelPlaces* panel)
 {
-	//mShareBtn = panel->getChild<LLButton>("share_btn");
 	mTeleportBtn = panel->getChild<LLButton>("teleport_btn");
 	mShowOnMapBtn = panel->getChild<LLButton>("map_btn");
 }
diff --git a/indra/newview/llpanelplacestab.h b/indra/newview/llpanelplacestab.h
index 3f56dcb2839..458694d766d 100644
--- a/indra/newview/llpanelplacestab.h
+++ b/indra/newview/llpanelplacestab.h
@@ -44,10 +44,8 @@ class LLPanelPlacesTab : public LLPanel
 
 	virtual void onSearchEdit(const std::string& string) = 0;
 	virtual void updateVerbs() = 0;		// Updates buttons at the bottom of Places panel
-	//virtual void onShare() = 0;
 	virtual void onShowOnMap() = 0;
 	virtual void onTeleport() = 0;
-	//virtual void onCopySLURL() = 0;
 
 	bool isTabVisible(); // Check if parent TabContainer is visible.
 
@@ -58,7 +56,6 @@ class LLPanelPlacesTab : public LLPanel
 										const LLUUID& snapshot_id,
 										bool teleport);
 protected:
-	//LLButton*				mShareBtn;
 	LLButton*				mTeleportBtn;
 	LLButton*				mShowOnMapBtn;
 };
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 87ac5be74a1..488b9582d55 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -79,7 +79,7 @@ background_visible="true"
          left="5"
          name="teleport_btn"
          top="0"
-         width="77" />
+         width="100" />
         <button
          follows="bottom|left"
          font="SansSerifSmall"
@@ -89,18 +89,7 @@ background_visible="true"
          left_pad="5"
          name="map_btn"
          top="0"
-         width="50" />
-        <button
-         enabled="false"
-         follows="bottom|left"
-         font="SansSerifSmall"
-         height="19"
-         label="Share"
-         layout="topleft"
-         left_pad="5"
-         name="share_btn"
-         top="0"
-         width="60" />
+         width="70" />
         <button
          follows="bottom|left"
          font="SansSerifSmall"
@@ -110,7 +99,7 @@ background_visible="true"
          left_pad="5"
          name="edit_btn"
          top="0"
-         width="50" />
+         width="70" />
         <button
          follows="bottom|right"
          font="SansSerifSmall"
-- 
GitLab


From 8f58f4e681a19a66c9c2bc83a11d5d2a6367661c Mon Sep 17 00:00:00 2001
From: "Eric M. Tulla (BigPapi)" <tulla@lindenlab.com>
Date: Wed, 4 Nov 2009 13:04:55 -0500
Subject: [PATCH 116/306] Fix for EXT-2086 & EXT-2087 - No Make Outfit button &
 Save As behaving as make outfit. Created a dedicated make outfit button, and
 made save as go back to saving a copy of the current wearable. -Reviewed by
 nyx

---
 .../newview/skins/default/xui/en/floater_customize.xml | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml
index 07d76f48100..c021dd79de1 100644
--- a/indra/newview/skins/default/xui/en/floater_customize.xml
+++ b/indra/newview/skins/default/xui/en/floater_customize.xml
@@ -3378,6 +3378,16 @@ scratch and wear it.
          layout="topleft"
          name="panel_list" />
     </scroll_container>
+	<button
+     bottom="536"
+     follows="right|bottom"
+     height="20"
+     label="Make Outfit"
+     label_selected="Make Outfit"
+     layout="topleft"
+     name="make_outfit_btn"
+     right="-216"
+     width="100" />
     <button
      bottom="536"
      follows="right|bottom"
-- 
GitLab


From f59c8b5e4e2625930e24ea28cd8e3a713cffed43 Mon Sep 17 00:00:00 2001
From: Sergey Borushevsky <sborushevsky@productengine.com>
Date: Wed, 4 Nov 2009 20:09:06 +0200
Subject: [PATCH 117/306] Implemented normal task EXT-2149 (IM Text Editors
 should display grayed text "TO [avatar_name/group_name/ad-hoc conference]")

--HG--
branch : product-engine
---
 indra/llui/lllineeditor.h                            |  2 ++
 indra/newview/llimfloater.cpp                        | 12 ++++++++----
 .../skins/default/xui/en/floater_im_session.xml      |  8 +++++++-
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index 3d7bbdff893..d3daa941cfe 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -172,6 +172,8 @@ class LLLineEditor
 	virtual BOOL	setLabelArg( const std::string& key, const LLStringExplicit& text );
 
 	void			setLabel(const LLStringExplicit &new_label) { mLabel = new_label; }
+	const std::string& 	getLabel()	{ return mLabel.getString(); }
+
 	void			setText(const LLStringExplicit &new_text);
 
 	const std::string& getText() const		{ return mText.getString(); }
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 19fa66fd0e4..85863ed85bf 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -225,6 +225,7 @@ BOOL LLIMFloater::postBuild()
 	// enable line history support for instant message bar
 	mInputEditor->setEnableLineHistory(TRUE);
 	
+	
 	mInputEditor->setFocusReceivedCallback( boost::bind(onInputEditorFocusReceived, _1, this) );
 	mInputEditor->setFocusLostCallback( boost::bind(onInputEditorFocusLost, _1, this) );
 	mInputEditor->setKeystrokeCallback( onInputEditorKeystroke, this );
@@ -232,14 +233,17 @@ BOOL LLIMFloater::postBuild()
 	mInputEditor->setRevertOnEsc( FALSE );
 	mInputEditor->setReplaceNewlinesWithSpaces( FALSE );
 
-	childSetCommitCallback("chat_editor", onSendMsg, this);
-	
-	mChatHistory = getChild<LLChatHistory>("chat_history");
-		
 	std::string session_name(LLIMModel::instance().getName(mSessionID));
+
+	mInputEditor->setLabel(mInputEditor->getLabel() + " " + session_name);
+
 	LLStringUtil::toUpper(session_name);
 	setTitle(session_name);
 
+	childSetCommitCallback("chat_editor", onSendMsg, this);
+	
+	mChatHistory = getChild<LLChatHistory>("chat_history");
+
 	setDocked(true);
 
 	mTypingStart = LLTrans::getString("IM_typing_start_string");
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 8eeff0a9e42..1585d976b36 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -63,7 +63,13 @@
        allow_html="true" 
        width="350">
       </chat_history>
-      <line_editor follows="left|right" name="chat_editor" height="20" layout="topleft" width="345">
+      <line_editor
+       follows="left|right"
+       height="20"
+       label="To"
+       layout="topleft"
+       name="chat_editor"
+       width="345">
       </line_editor>
     </layout_panel>
   </layout_stack>
-- 
GitLab


From ec8e27b8bf3cdc5056ecd1492b515e4ca79ad4f6 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 4 Nov 2009 13:14:57 -0500
Subject: [PATCH 118/306] Remove existing wearables of a type when putting on
 new ones.  This will need to be revisited when we go to multi-wearables.

---
 indra/newview/llappearancemgr.cpp | 40 +++++++++++++++++++++++++++----
 1 file changed, 35 insertions(+), 5 deletions(-)

diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 8d0f11e021e..382947e4647 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -300,14 +300,25 @@ struct LLWearableHoldingPattern
 {
 	LLInventoryModel::item_array_t new_items;
 	std::set<LLUUID> items_seen;
-	for (S32 i=0; i<items.count(); i++)
+	std::deque<LLViewerInventoryItem*> tmp_list;
+	// Traverse from the front and keep the first of each item
+	// encountered, so we actually keep the *last* of each duplicate
+	// item.  This is needed to give the right priority when adding
+	// duplicate items to an existing outfit.
+	for (S32 i=items.count()-1; i>=0; i--)
 	{
 		LLViewerInventoryItem *item = items.get(i);
 		LLUUID item_id = item->getLinkedUUID();
 		if (items_seen.find(item_id)!=items_seen.end())
 			continue;
 		items_seen.insert(item_id);
-		new_items.push_back(item);
+		tmp_list.push_front(item);
+	}
+	for (std::deque<LLViewerInventoryItem*>::iterator it = tmp_list.begin();
+		 it != tmp_list.end();
+		 ++it)
+	{
+		new_items.put(*it);
 	}
 	items = new_items;
 }
@@ -1068,9 +1079,21 @@ void LLAppearanceManager::wearOutfitByName(const std::string& name)
 	//dec_busy_count();
 }
 
+bool areMatchingWearables(const LLViewerInventoryItem *a, const LLViewerInventoryItem *b)
+{
+	return (a->isWearableType() && b->isWearableType() &&
+			(a->getWearableType() == b->getWearableType()));
+}
 /* static */
 void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update )
 {
+	LLViewerInventoryItem *vitem = dynamic_cast<LLViewerInventoryItem*>(item);
+	if (!vitem)
+	{
+		llwarns << "not an llviewerinventoryitem, failed" << llendl;
+		return;
+	}
+		
 	LLInventoryModel::cat_array_t cat_array;
 	LLInventoryModel::item_array_t item_array;
 	gInventory.collectDescendents(LLAppearanceManager::getCOF(),
@@ -1080,12 +1103,19 @@ void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update )
 	bool linked_already = false;
 	for (S32 i=0; i<item_array.count(); i++)
 	{
-		const LLInventoryItem* inv_item = item_array.get(i).get();
+		const LLViewerInventoryItem* inv_item = item_array.get(i).get();
 		if (inv_item->getLinkedUUID() == item->getLinkedUUID())
 		{
 			linked_already = true;
 			break;
 		}
+		// Are of same type but are not the same - new item will replace old.
+		if (areMatchingWearables(vitem,inv_item))
+		{
+			gAgentWearables.removeWearable(inv_item->getWearableType(),true,0);
+			gInventory.purgeObject(inv_item->getUUID());
+			gInventory.notifyObservers();
+		}
 	}
 	if (linked_already)
 	{
@@ -1096,9 +1126,9 @@ void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update )
 	{
 		LLPointer<LLInventoryCallback> cb = do_update ? new ModifiedCOFCallback : 0;
 		link_inventory_item( gAgent.getID(),
-							 item->getLinkedUUID(),
+							 vitem->getLinkedUUID(),
 							 getCOF(),
-							 item->getName(),
+							 vitem->getName(),
 							 LLAssetType::AT_LINK,
 							 cb);
 	}
-- 
GitLab


From 7383cfe14bd1522d921b96c6ab0804f888f8c5c0 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Wed, 4 Nov 2009 13:18:29 -0500
Subject: [PATCH 119/306] EXT-2216 : Task properties sidepanel

Guts of task properteis sidepanel created.

--HG--
branch : avatar-pipeline
---
 indra/newview/CMakeLists.txt                  |    2 +
 indra/newview/llsidepanelinventory.cpp        |   59 +-
 indra/newview/llsidepanelinventory.h          |   16 +-
 indra/newview/llsidepaneliteminfo.cpp         |    1 -
 indra/newview/llsidepaneliteminfo.h           |   30 +-
 indra/newview/llsidepaneltaskinfo.cpp         | 1066 +++++++++++++++++
 indra/newview/llsidepaneltaskinfo.h           |  113 ++
 indra/newview/llviewermenu.cpp                |   17 +-
 .../default/xui/en/sidepanel_inventory.xml    |   14 +
 .../default/xui/en/sidepanel_item_info.xml    |   30 -
 10 files changed, 1275 insertions(+), 73 deletions(-)
 create mode 100644 indra/newview/llsidepaneltaskinfo.cpp
 create mode 100644 indra/newview/llsidepaneltaskinfo.h

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 8882f02df47..c490c31393c 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -371,6 +371,7 @@ set(viewer_SOURCE_FILES
     llselectmgr.cpp
     llsidepanelinventory.cpp
     llsidepaneliteminfo.cpp
+    llsidepaneltaskinfo.cpp
     llsidetray.cpp
     llsidetraypanelcontainer.cpp
     llsky.cpp
@@ -856,6 +857,7 @@ set(viewer_HEADER_FILES
     llselectmgr.h
     llsidepanelinventory.h
     llsidepaneliteminfo.h
+    llsidepaneltaskinfo.h
     llsidetray.h
     llsidetraypanelcontainer.h
     llsky.h
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 2ea84efd301..9b67bc701da 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -38,6 +38,7 @@
 #include "llinventorypanel.h"
 #include "llpanelmaininventory.h"
 #include "llsidepaneliteminfo.h"
+#include "llsidepaneltaskinfo.h"
 #include "lltabcontainer.h"
 
 static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
@@ -89,6 +90,13 @@ BOOL LLSidepanelInventory::postBuild()
 		LLButton* back_btn = mItemPanel->getChild<LLButton>("back_btn");
 		back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
 	}
+
+	// UI elements from task panel
+	{
+		mTaskPanel = getChild<LLSidepanelTaskInfo>("sidepanel__task_panel");
+		LLButton* back_btn = mTaskPanel->getChild<LLButton>("back_btn");
+		back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
+	}
 	
 	return TRUE;
 }
@@ -103,14 +111,16 @@ void LLSidepanelInventory::onOpen(const LLSD& key)
 	if (key.has("id"))
 	{
 		mItemPanel->setItemID(key["id"].asUUID());
+		if (key.has("object"))
+		{
+			mItemPanel->setObjectID(key["object"].asUUID());
+		}
+		showItemInfoPanel();
 	}
-	
-	if (key.has("object"))
+	if (key.has("task"))
 	{
-		mItemPanel->setObjectID(key["object"].asUUID());
+		showTaskInfoPanel();
 	}
-
-	toggleItemInfoPanel(TRUE);
 }
 
 void LLSidepanelInventory::onInfoButtonClicked()
@@ -120,7 +130,7 @@ void LLSidepanelInventory::onInfoButtonClicked()
 	{
 		mItemPanel->reset();
 		mItemPanel->setItemID(item->getUUID());
-		toggleItemInfoPanel(TRUE);
+		showItemInfoPanel();
 	}
 }
 
@@ -161,8 +171,7 @@ void LLSidepanelInventory::onOverflowButtonClicked()
 
 void LLSidepanelInventory::onBackButtonClicked()
 {
-	toggleItemInfoPanel(FALSE);
-	updateVerbs();
+	showInventoryPanel();
 }
 
 void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
@@ -170,21 +179,29 @@ void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*>
 	updateVerbs();
 }
 
-void LLSidepanelInventory::toggleItemInfoPanel(BOOL visible)
+void LLSidepanelInventory::showItemInfoPanel()
 {
-	mItemPanel->setVisible(visible);
-	mInventoryPanel->setVisible(!visible);
+	mItemPanel->setVisible(TRUE);
+	mTaskPanel->setVisible(FALSE);
+	mInventoryPanel->setVisible(FALSE);
 
-	if (visible)
-	{
-		mItemPanel->dirty();
-		mItemPanel->setEditMode(FALSE);
-		/*
-		LLRect rect = getRect();
-		LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mInventoryPanel->getRect().mBottom);
-		mItemPanel->reshape(new_rect.getWidth(),new_rect.getHeight());
-		*/
-	}
+	mItemPanel->dirty();
+	mItemPanel->setEditMode(FALSE);
+}
+
+void LLSidepanelInventory::showTaskInfoPanel()
+{
+	mItemPanel->setVisible(FALSE);
+	mTaskPanel->setVisible(TRUE);
+	mInventoryPanel->setVisible(FALSE);
+}
+
+void LLSidepanelInventory::showInventoryPanel()
+{
+	mItemPanel->setVisible(FALSE);
+	mTaskPanel->setVisible(FALSE);
+	mInventoryPanel->setVisible(TRUE);
+	updateVerbs();
 }
 
 void LLSidepanelInventory::updateVerbs()
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index f9fe3e4e0e9..681af7fafab 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -34,10 +34,11 @@
 
 #include "llpanel.h"
 
+class LLFolderViewItem;
 class LLInventoryItem;
-class LLSidepanelItemInfo;
 class LLPanelMainInventory;
-class LLFolderViewItem;
+class LLSidepanelItemInfo;
+class LLSidepanelTaskInfo;
 
 class LLSidepanelInventory : public LLPanel
 {
@@ -55,12 +56,19 @@ class LLSidepanelInventory : public LLPanel
 	// "wear", "teleport", etc.
 	void performActionOnSelection(const std::string &action);
 
-	void toggleItemInfoPanel(BOOL visible);
+	void showItemInfoPanel();
+	void showTaskInfoPanel();
+	void showInventoryPanel();
 	void updateVerbs();
 
 	//
 	// UI Elements
 	//
+private:
+	LLPanel*					mInventoryPanel; // Main inventory view
+	LLSidepanelItemInfo*		mItemPanel; // Individual item view
+	LLSidepanelTaskInfo*		mTaskPanel; // Individual in-world object view
+
 protected:
 	void 						onInfoButtonClicked();
 	void 						onShareButtonClicked();
@@ -77,8 +85,6 @@ class LLSidepanelInventory : public LLPanel
 	LLButton*					mTeleportBtn;
 	LLButton*					mOverflowBtn;
 
-	LLPanel*					mInventoryPanel; // Main inventory view
-	LLSidepanelItemInfo*		mItemPanel; // Individual item view
 };
 
 #endif //LL_LLSIDEPANELINVENTORY_H
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index 0b00c7fbe90..c857afc6527 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -261,7 +261,6 @@ void LLSidepanelItemInfo::draw()
 {
 	if (mDirty)
 	{
-		// RN: clear dirty first because refresh can set dirty to TRUE
 		mDirty = FALSE;
 		refresh();
 	}
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h
index 21ca63894cf..9f5ab402eab 100644
--- a/indra/newview/llsidepaneliteminfo.h
+++ b/indra/newview/llsidepaneliteminfo.h
@@ -36,6 +36,7 @@
 #include <map>
 #include "llmultifloater.h"
 #include "lliconctrl.h"
+#include "llpermissions.h"
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLSidepanelItemInfo
@@ -45,6 +46,7 @@
 class LLButton;
 class LLInventoryItem;
 class LLItemPropertiesObserver;
+class LLViewerObject;
 
 class LLSidepanelItemInfo : public LLPanel
 {
@@ -65,31 +67,24 @@ class LLSidepanelItemInfo : public LLPanel
 
 protected:
 	LLInventoryItem* findItem() const;
+	LLViewerObject*  findObject() const;
 	void refresh();
 	void refreshFromItem(LLInventoryItem* item);
+	void refreshFromPermissions(const LLPermissions& perm);
 	void updateVerbs();
+	BOOL isUpdatingObject() const;
 
 private:
-	// The item id of the inventory item in question.
-	LLUUID mItemID;
-
-	// mObjectID will have a value if it is associated with a task in
-	// the world, and will be == LLUUID::null if it's in the agent
-	// inventory.
-	LLUUID mObjectID;
-
-	BOOL mDirty;
-	BOOL mEditMode;
-
-	LLItemPropertiesObserver* mPropertiesObserver;
+	LLUUID mItemID; 	// inventory UUID for the inventory item.
+	LLUUID mObjectID; 	// in-world task UUID, or null if in agent inventory.
+	BOOL mDirty; 		// item properties need to be updated
+	BOOL mEditMode; 	// if we're in edit mode
+	LLItemPropertiesObserver* mPropertiesObserver; // for syncing changes to item
 	
 	//
 	// UI Elements
 	// 
 protected:
-	void 						onEditButtonClicked();
-	void 						onSaveButtonClicked();
-	void 						onCancelButtonClicked();
 	void 						onClickCreator();
 	void 						onClickOwner();
 	void 						onCommitName();
@@ -98,6 +93,11 @@ class LLSidepanelItemInfo : public LLPanel
 	void 						onCommitSaleInfo();
 	void 						onCommitSaleType();
 	void 						updateSaleInfo();
+
+protected:
+	void 						onEditButtonClicked();
+	void 						onSaveButtonClicked();
+	void 						onCancelButtonClicked();
 private:
 	LLButton*					mEditBtn;
 	LLButton*					mSaveBtn;
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
new file mode 100644
index 00000000000..203fc35187b
--- /dev/null
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -0,0 +1,1066 @@
+/** 
+ * @file llsidepaneltaskinfo.cpp
+ * @brief LLSidepanelTaskInfo class implementation
+ * This class represents the panel in the build view for
+ * viewing/editing object names, owners, permissions, etc.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llsidepaneltaskinfo.h"
+
+#include "lluuid.h"
+#include "llpermissions.h"
+#include "llcategory.h"
+#include "llclickaction.h"
+#include "llfocusmgr.h"
+#include "llstring.h"
+
+#include "llviewerwindow.h"
+#include "llresmgr.h"
+#include "lltextbox.h"
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "llviewerobject.h"
+#include "llselectmgr.h"
+#include "llagent.h"
+#include "llstatusbar.h"		// for getBalance()
+#include "lllineeditor.h"
+#include "llcombobox.h"
+#include "lluiconstants.h"
+#include "lldbstrings.h"
+#include "llfloatergroups.h"
+#include "llfloaterreg.h"
+#include "llavataractions.h"
+#include "llnamebox.h"
+#include "llviewercontrol.h"
+#include "lluictrlfactory.h"
+#include "llspinctrl.h"
+#include "roles_constants.h"
+#include "llgroupactions.h"
+
+///----------------------------------------------------------------------------
+/// Class llsidepaneltaskinfo
+///----------------------------------------------------------------------------
+
+static LLRegisterPanelClassWrapper<LLSidepanelTaskInfo> t_task_info("sidepanel_task_info");
+
+// Default constructor
+LLSidepanelTaskInfo::LLSidepanelTaskInfo() :
+	LLPanel()
+{
+	setMouseOpaque(FALSE);
+}
+
+BOOL LLSidepanelTaskInfo::postBuild()
+{
+	childSetCommitCallback("Object Name",LLSidepanelTaskInfo::onCommitName,this);
+	childSetPrevalidate("Object Name",LLLineEditor::prevalidatePrintableNotPipe);
+	childSetCommitCallback("Object Description",LLSidepanelTaskInfo::onCommitDesc,this);
+	childSetPrevalidate("Object Description",LLLineEditor::prevalidatePrintableNotPipe);
+
+	
+	getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLSidepanelTaskInfo::onClickGroup,this));
+
+	childSetCommitCallback("checkbox share with group",LLSidepanelTaskInfo::onCommitGroupShare,this);
+
+	childSetAction("button deed",LLSidepanelTaskInfo::onClickDeedToGroup,this);
+
+	childSetCommitCallback("checkbox allow everyone move",LLSidepanelTaskInfo::onCommitEveryoneMove,this);
+
+	childSetCommitCallback("checkbox allow everyone copy",LLSidepanelTaskInfo::onCommitEveryoneCopy,this);
+	
+	childSetCommitCallback("checkbox for sale",LLSidepanelTaskInfo::onCommitSaleInfo,this);
+
+	childSetCommitCallback("sale type",LLSidepanelTaskInfo::onCommitSaleType,this);
+
+	childSetCommitCallback("Edit Cost", LLSidepanelTaskInfo::onCommitSaleInfo, this);
+	
+	childSetCommitCallback("checkbox next owner can modify",LLSidepanelTaskInfo::onCommitNextOwnerModify,this);
+	childSetCommitCallback("checkbox next owner can copy",LLSidepanelTaskInfo::onCommitNextOwnerCopy,this);
+	childSetCommitCallback("checkbox next owner can transfer",LLSidepanelTaskInfo::onCommitNextOwnerTransfer,this);
+	childSetCommitCallback("clickaction",LLSidepanelTaskInfo::onCommitClickAction,this);
+	childSetCommitCallback("search_check",LLSidepanelTaskInfo::onCommitIncludeInSearch,this);
+	
+	mLabelGroupName = getChild<LLNameBox>("Group Name Proxy");
+
+	return TRUE;
+}
+
+void LLSidepanelTaskInfo::setVisible(BOOL visible)
+{
+	if (visible)
+	{
+		mDirty = TRUE;
+	}
+	LLPanel::setVisible(visible);
+}
+
+void LLSidepanelTaskInfo::draw()
+{
+	if (mDirty)
+	{
+		mDirty = FALSE;
+		refresh();
+	}
+
+	LLPanel::draw();
+}
+
+LLSidepanelTaskInfo::~LLSidepanelTaskInfo()
+{
+	// base class will take care of everything
+}
+
+
+void LLSidepanelTaskInfo::refresh()
+{
+	LLButton*	BtnDeedToGroup = getChild<LLButton>("button deed");
+	if(BtnDeedToGroup)
+	{	
+		std::string deedText;
+		if (gWarningSettings.getBOOL("DeedObject"))
+		{
+			deedText = getString("text deed continued");
+		}
+		else
+		{
+			deedText = getString("text deed");
+		}
+		BtnDeedToGroup->setLabelSelected(deedText);
+		BtnDeedToGroup->setLabelUnselected(deedText);
+	}
+	BOOL root_selected = TRUE;
+	LLSelectNode* nodep = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
+	S32 object_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
+	if(!nodep || 0 == object_count)
+	{
+		nodep = LLSelectMgr::getInstance()->getSelection()->getFirstNode();
+		object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
+		root_selected = FALSE;
+	}
+
+	//BOOL attachment_selected = LLSelectMgr::getInstance()->getSelection()->isAttachment();
+	//attachment_selected = false;
+	LLViewerObject* objectp = NULL;
+	if(nodep) objectp = nodep->getObject();
+	if(!nodep || !objectp)// || attachment_selected)
+	{
+		// ...nothing selected
+		childSetEnabled("perm_modify",false);
+		childSetText("perm_modify",LLStringUtil::null);
+
+		childSetEnabled("Creator:",false);
+		childSetText("Creator Name",LLStringUtil::null);
+		childSetEnabled("Creator Name",false);
+
+		childSetEnabled("Owner:",false);
+		childSetText("Owner Name",LLStringUtil::null);
+		childSetEnabled("Owner Name",false);
+
+		childSetEnabled("Group:",false);
+		childSetText("Group Name",LLStringUtil::null);
+		childSetEnabled("Group Name",false);
+		childSetEnabled("button set group",false);
+
+		childSetText("Object Name",LLStringUtil::null);
+		childSetEnabled("Object Name",false);
+		childSetEnabled("Name:",false);
+		childSetText("Group Name",LLStringUtil::null);
+		childSetEnabled("Group Name",false);
+		childSetEnabled("Description:",false);
+		childSetText("Object Description",LLStringUtil::null);
+		childSetEnabled("Object Description",false);
+
+		childSetEnabled("Permissions:",false);
+		
+		childSetValue("checkbox share with group",FALSE);
+		childSetEnabled("checkbox share with group",false);
+		childSetEnabled("button deed",false);
+
+		childSetValue("checkbox allow everyone move",FALSE);
+		childSetEnabled("checkbox allow everyone move",false);
+		childSetValue("checkbox allow everyone copy",FALSE);
+		childSetEnabled("checkbox allow everyone copy",false);
+
+		//Next owner can:
+		childSetEnabled("Next owner can:",false);
+		childSetValue("checkbox next owner can modify",FALSE);
+		childSetEnabled("checkbox next owner can modify",false);
+		childSetValue("checkbox next owner can copy",FALSE);
+		childSetEnabled("checkbox next owner can copy",false);
+		childSetValue("checkbox next owner can transfer",FALSE);
+		childSetEnabled("checkbox next owner can transfer",false);
+
+		//checkbox for sale
+		childSetValue("checkbox for sale",FALSE);
+		childSetEnabled("checkbox for sale",false);
+
+		//checkbox include in search
+		childSetValue("search_check", FALSE);
+		childSetEnabled("search_check", false);
+		
+		LLComboBox*	combo_sale_type = getChild<LLComboBox>("sale type");
+		combo_sale_type->setValue(LLSaleInfo::FS_COPY);
+		combo_sale_type->setEnabled(FALSE);
+		
+		childSetEnabled("Cost",false);
+		childSetText("Cost",getString("Cost Default"));
+		childSetText("Edit Cost",LLStringUtil::null);
+		childSetEnabled("Edit Cost",false);
+		
+		childSetEnabled("label click action",false);
+		LLComboBox*	ComboClickAction = getChild<LLComboBox>("clickaction");
+		if(ComboClickAction)
+		{
+			ComboClickAction->setEnabled(FALSE);
+			ComboClickAction->clear();
+		}
+		childSetVisible("B:",false);
+		childSetVisible("O:",false);
+		childSetVisible("G:",false);
+		childSetVisible("E:",false);
+		childSetVisible("N:",false);
+		childSetVisible("F:",false);
+
+		return;
+	}
+
+	// figure out a few variables
+	BOOL is_one_object = (object_count == 1);
+
+	// BUG: fails if a root and non-root are both single-selected.
+	BOOL is_perm_modify = (LLSelectMgr::getInstance()->getSelection()->getFirstRootNode() 
+							&& LLSelectMgr::getInstance()->selectGetRootsModify()) 
+							|| LLSelectMgr::getInstance()->selectGetModify();
+	const LLFocusableElement* keyboard_focus_view = gFocusMgr.getKeyboardFocus();
+	S32 string_index = 0;
+	std::string MODIFY_INFO_STRINGS[] =
+	{
+		getString("text modify info 1"),
+		getString("text modify info 2"),
+		getString("text modify info 3"),
+		getString("text modify info 4")
+	};
+	if(!is_perm_modify)
+	{
+		string_index += 2;
+	}
+	if(!is_one_object)
+	{
+		++string_index;
+	}
+	childSetEnabled("perm_modify",true);
+	childSetText("perm_modify",MODIFY_INFO_STRINGS[string_index]);
+
+	childSetEnabled("Permissions:",true);
+	
+	// Update creator text field
+	childSetEnabled("Creator:",true);
+	BOOL creators_identical;
+	std::string creator_name;
+	creators_identical = LLSelectMgr::getInstance()->selectGetCreator(mCreatorID,
+													  creator_name);
+
+	childSetText("Creator Name",creator_name);
+	childSetEnabled("Creator Name",TRUE);
+
+	// Update owner text field
+	childSetEnabled("Owner:",true);
+
+	BOOL owners_identical;
+	std::string owner_name;
+	owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name);
+
+//	llinfos << "owners_identical " << (owners_identical ? "TRUE": "FALSE") << llendl;
+
+	if (mOwnerID.isNull())
+	{
+		if(LLSelectMgr::getInstance()->selectIsGroupOwned())
+		{
+			// Group owned already displayed by selectGetOwner
+		}
+		else
+		{
+			// Display last owner if public
+			std::string last_owner_name;
+			LLSelectMgr::getInstance()->selectGetLastOwner(mLastOwnerID, last_owner_name);
+
+			// It should never happen that the last owner is null and the owner
+			// is null, but it seems to be a bug in the simulator right now. JC
+			if (!mLastOwnerID.isNull() && !last_owner_name.empty())
+			{
+				owner_name.append(", last ");
+				owner_name.append( last_owner_name );
+			}
+		}
+	}
+
+	childSetText("Owner Name",owner_name);
+	childSetEnabled("Owner Name",TRUE);
+
+	// update group text field
+	childSetEnabled("Group:",true);
+	childSetText("Group Name",LLStringUtil::null);
+	LLUUID group_id;
+	BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
+	if (groups_identical)
+	{
+		if(mLabelGroupName)
+		{
+			mLabelGroupName->setNameID(group_id, TRUE);
+			mLabelGroupName->setEnabled(TRUE);
+		}
+	}
+	else
+	{
+		if(mLabelGroupName)
+		{
+			mLabelGroupName->setNameID(LLUUID::null, TRUE);
+			mLabelGroupName->refresh(LLUUID::null, LLStringUtil::null, LLStringUtil::null, TRUE);
+			mLabelGroupName->setEnabled(FALSE);
+		}
+	}
+	
+	childSetEnabled("button set group",owners_identical && (mOwnerID == gAgent.getID()));
+
+	// figure out the contents of the name, description, & category
+	BOOL edit_name_desc = FALSE;
+	if(is_one_object && objectp->permModify())
+	{
+		edit_name_desc = TRUE;
+	}
+
+	childSetEnabled("Name:",true);
+	LLLineEditor* LineEditorObjectName = getChild<LLLineEditor>("Object Name");
+	childSetEnabled("Description:",true);
+	LLLineEditor*	LineEditorObjectDesc = getChild<LLLineEditor>("Object Description");
+
+	if(is_one_object)
+	{
+		if(keyboard_focus_view != LineEditorObjectName)
+		{
+			childSetText("Object Name",nodep->mName);
+		}
+
+		if(LineEditorObjectDesc)
+		{
+			if(keyboard_focus_view != LineEditorObjectDesc)
+			{
+				LineEditorObjectDesc->setText(nodep->mDescription);
+			}
+		}
+	}
+	else
+	{
+		childSetText("Object Name",LLStringUtil::null);
+		LineEditorObjectDesc->setText(LLStringUtil::null);
+	}
+
+	if(edit_name_desc)
+	{
+		childSetEnabled("Object Name",true);
+		childSetEnabled("Object Description",true);
+	}
+	else
+	{
+		childSetEnabled("Object Name",false);
+		childSetEnabled("Object Description",false);
+	}
+
+	S32 total_sale_price = 0;
+	S32 individual_sale_price = 0;
+	BOOL is_for_sale_mixed = FALSE;
+	BOOL is_sale_price_mixed = FALSE;
+	U32 num_for_sale = FALSE;
+    LLSelectMgr::getInstance()->selectGetAggregateSaleInfo(num_for_sale,
+										   is_for_sale_mixed,
+										   is_sale_price_mixed,
+										   total_sale_price,
+										   individual_sale_price);
+
+	const BOOL self_owned = (gAgent.getID() == mOwnerID);
+	const BOOL group_owned = LLSelectMgr::getInstance()->selectIsGroupOwned() ;
+	const BOOL public_owned = (mOwnerID.isNull() && !LLSelectMgr::getInstance()->selectIsGroupOwned());
+	const BOOL can_transfer = LLSelectMgr::getInstance()->selectGetRootsTransfer();
+	const BOOL can_copy = LLSelectMgr::getInstance()->selectGetRootsCopy();
+
+	if(!owners_identical)
+	{
+		childSetEnabled("Cost",false);
+		childSetText("Edit Cost",LLStringUtil::null);
+		childSetEnabled("Edit Cost",false);
+	}
+	// You own these objects.
+	else if(self_owned || (group_owned && gAgent.hasPowerInGroup(group_id,GP_OBJECT_SET_SALE)))
+	{
+		// If there are multiple items for sale then set text to PRICE PER UNIT.
+		if (num_for_sale > 1)
+		{
+			childSetText("Cost",getString("Cost Per Unit"));
+		}
+		else
+		{
+			childSetText("Cost",getString("Cost Default"));
+		}
+		
+		LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost");
+		if(!edit_price->hasFocus())
+		{
+			// If the sale price is mixed then set the cost to MIXED, otherwise
+			// set to the actual cost.
+			if (num_for_sale > 0 && is_for_sale_mixed)
+			{
+				edit_price->setTentative(TRUE);
+			}
+			else if (num_for_sale > 0 && is_sale_price_mixed)
+			{
+				edit_price->setTentative(TRUE);
+			}
+			else 
+			{
+				edit_price->setValue(individual_sale_price);
+			}
+		}
+		// The edit fields are only enabled if you can sell this object
+		// and the sale price is not mixed.
+		bool enable_edit = (num_for_sale && can_transfer) ? !is_for_sale_mixed : false;
+		childSetEnabled("Cost",enable_edit);
+		childSetEnabled("Edit Cost",enable_edit);
+	}
+	// Someone, not you, owns these objects.
+	else if(!public_owned)
+	{
+		childSetEnabled("Cost",false);
+		childSetEnabled("Edit Cost",false);
+		
+		// Don't show a price if none of the items are for sale.
+		if (num_for_sale)
+			childSetText("Edit Cost",llformat("%d",total_sale_price));
+		else
+			childSetText("Edit Cost",LLStringUtil::null);
+
+		// If multiple items are for sale, set text to TOTAL PRICE.
+		if (num_for_sale > 1)
+			childSetText("Cost",getString("Cost Total"));
+		else
+			childSetText("Cost",getString("Cost Default"));
+	}
+	// This is a public object.
+	else
+	{
+		childSetEnabled("Cost",false);
+		childSetText("Cost",getString("Cost Default"));
+		
+		childSetText("Edit Cost",LLStringUtil::null);
+		childSetEnabled("Edit Cost",false);
+	}
+
+	// Enable and disable the permissions checkboxes
+	// based on who owns the object.
+	// TODO: Creator permissions
+
+	BOOL valid_base_perms		= FALSE;
+	BOOL valid_owner_perms		= FALSE;
+	BOOL valid_group_perms		= FALSE;
+	BOOL valid_everyone_perms	= FALSE;
+	BOOL valid_next_perms		= FALSE;
+
+	U32 base_mask_on;
+	U32 base_mask_off;
+	U32 owner_mask_on;
+	U32 owner_mask_off;
+	U32 group_mask_on;
+	U32 group_mask_off;
+	U32 everyone_mask_on;
+	U32 everyone_mask_off;
+	U32 next_owner_mask_on = 0;
+	U32 next_owner_mask_off = 0;
+
+	valid_base_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_BASE,
+									  &base_mask_on,
+									  &base_mask_off);
+
+	valid_owner_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER,
+									  &owner_mask_on,
+									  &owner_mask_off);
+
+	valid_group_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_GROUP,
+									  &group_mask_on,
+									  &group_mask_off);
+	
+	valid_everyone_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_EVERYONE,
+									  &everyone_mask_on,
+									  &everyone_mask_off);
+	
+	valid_next_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_NEXT_OWNER,
+									  &next_owner_mask_on,
+									  &next_owner_mask_off);
+
+	
+	if( gSavedSettings.getBOOL("DebugPermissions") )
+	{
+		std::string perm_string;
+		if (valid_base_perms)
+		{
+			perm_string = "B: ";
+			perm_string += mask_to_string(base_mask_on);
+			childSetText("B:",perm_string);
+			childSetVisible("B:",true);
+			
+			perm_string = "O: ";
+			perm_string += mask_to_string(owner_mask_on);
+			childSetText("O:",perm_string);
+			childSetVisible("O:",true);
+			
+			perm_string = "G: ";
+			perm_string += mask_to_string(group_mask_on);
+			childSetText("G:",perm_string);
+			childSetVisible("G:",true);
+			
+			perm_string = "E: ";
+			perm_string += mask_to_string(everyone_mask_on);
+			childSetText("E:",perm_string);
+			childSetVisible("E:",true);
+			
+			perm_string = "N: ";
+			perm_string += mask_to_string(next_owner_mask_on);
+			childSetText("N:",perm_string);
+			childSetVisible("N:",true);
+		}
+		perm_string = "F: ";
+		U32 flag_mask = 0x0;
+		if (objectp->permMove())
+			flag_mask |= PERM_MOVE;
+		if (objectp->permModify())
+			flag_mask |= PERM_MODIFY;
+		if (objectp->permCopy())
+			flag_mask |= PERM_COPY;
+		if (objectp->permTransfer())
+			flag_mask |= PERM_TRANSFER;
+		perm_string += mask_to_string(flag_mask);
+		childSetText("F:",perm_string);
+		childSetVisible("F:",true);
+	}
+	else
+	{
+		childSetVisible("B:",false);
+		childSetVisible("O:",false);
+		childSetVisible("G:",false);
+		childSetVisible("E:",false);
+		childSetVisible("N:",false);
+		childSetVisible("F:",false);
+	}
+
+	bool has_change_perm_ability = false;
+	bool has_change_sale_ability = false;
+
+	if(valid_base_perms 
+	   && (self_owned 
+		   || (group_owned && gAgent.hasPowerInGroup(group_id, GP_OBJECT_MANIPULATE))))
+	{
+		has_change_perm_ability = true;
+	}
+	if(valid_base_perms 
+	   && (self_owned 
+		   || (group_owned && gAgent.hasPowerInGroup(group_id, GP_OBJECT_SET_SALE))))
+	{
+		has_change_sale_ability = true;
+	}
+
+	if (!has_change_perm_ability && !has_change_sale_ability && !root_selected)
+	{
+		// ...must select root to choose permissions
+		childSetValue("perm_modify", getString("text modify warning"));
+	}
+
+	if (has_change_perm_ability)
+	{
+		childSetEnabled("checkbox share with group",true);
+		childSetEnabled("checkbox allow everyone move",owner_mask_on & PERM_MOVE);
+		childSetEnabled("checkbox allow everyone copy",owner_mask_on & PERM_COPY && owner_mask_on & PERM_TRANSFER);
+	}
+	else
+	{
+		childSetEnabled("checkbox share with group", FALSE);
+		childSetEnabled("checkbox allow everyone move", FALSE);
+		childSetEnabled("checkbox allow everyone copy", FALSE);
+	}
+
+	if (has_change_sale_ability && (owner_mask_on & PERM_TRANSFER))
+	{
+		childSetEnabled("checkbox for sale", can_transfer || (!can_transfer && num_for_sale));
+		// Set the checkbox to tentative if the prices of each object selected
+		// are not the same.
+		childSetTentative("checkbox for sale", is_for_sale_mixed);
+		childSetEnabled("sale type",num_for_sale && can_transfer && !is_sale_price_mixed);
+
+		childSetEnabled("Next owner can:", TRUE);
+		childSetEnabled("checkbox next owner can modify",base_mask_on & PERM_MODIFY);
+		childSetEnabled("checkbox next owner can copy",base_mask_on & PERM_COPY);
+		childSetEnabled("checkbox next owner can transfer",next_owner_mask_on & PERM_COPY);
+	}
+	else 
+	{
+		childSetEnabled("checkbox for sale",FALSE);
+		childSetEnabled("sale type",FALSE);
+
+		childSetEnabled("Next owner can:",FALSE);
+		childSetEnabled("checkbox next owner can modify",FALSE);
+		childSetEnabled("checkbox next owner can copy",FALSE);
+		childSetEnabled("checkbox next owner can transfer",FALSE);
+	}
+
+	if(valid_group_perms)
+	{
+		if((group_mask_on & PERM_COPY) && (group_mask_on & PERM_MODIFY) && (group_mask_on & PERM_MOVE))
+		{
+			childSetValue("checkbox share with group",TRUE);
+			childSetTentative("checkbox share with group",FALSE);
+			childSetEnabled("button deed",gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer);
+		}
+		else if((group_mask_off & PERM_COPY) && (group_mask_off & PERM_MODIFY) && (group_mask_off & PERM_MOVE))
+		{
+			childSetValue("checkbox share with group",FALSE);
+			childSetTentative("checkbox share with group",false);
+			childSetEnabled("button deed",false);
+		}
+		else
+		{
+			childSetValue("checkbox share with group",TRUE);
+			childSetTentative("checkbox share with group",true);
+			childSetEnabled("button deed",gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (group_mask_on & PERM_MOVE) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer);
+		}
+	}			
+
+	if(valid_everyone_perms)
+	{
+		// Move
+		if(everyone_mask_on & PERM_MOVE)
+		{
+			childSetValue("checkbox allow everyone move",TRUE);
+			childSetTentative("checkbox allow everyone move",false);
+		}
+		else if(everyone_mask_off & PERM_MOVE)
+		{
+			childSetValue("checkbox allow everyone move",FALSE);
+			childSetTentative("checkbox allow everyone move",false);
+		}
+		else
+		{
+			childSetValue("checkbox allow everyone move",TRUE);
+			childSetTentative("checkbox allow everyone move",true);
+		}
+
+		// Copy == everyone can't copy
+		if(everyone_mask_on & PERM_COPY)
+		{
+			childSetValue("checkbox allow everyone copy",TRUE);
+			childSetTentative("checkbox allow everyone copy",!can_copy || !can_transfer);
+		}
+		else if(everyone_mask_off & PERM_COPY)
+		{
+			childSetValue("checkbox allow everyone copy",FALSE);
+			childSetTentative("checkbox allow everyone copy",false);
+		}
+		else
+		{
+			childSetValue("checkbox allow everyone copy",TRUE);
+			childSetTentative("checkbox allow everyone copy",true);
+		}
+	}
+
+	if(valid_next_perms)
+	{
+		// Modify == next owner canot modify
+		if(next_owner_mask_on & PERM_MODIFY)
+		{
+			childSetValue("checkbox next owner can modify",TRUE);
+			childSetTentative("checkbox next owner can modify",false);
+		}
+		else if(next_owner_mask_off & PERM_MODIFY)
+		{
+			childSetValue("checkbox next owner can modify",FALSE);
+			childSetTentative("checkbox next owner can modify",false);
+		}
+		else
+		{
+			childSetValue("checkbox next owner can modify",TRUE);
+			childSetTentative("checkbox next owner can modify",true);
+		}
+
+		// Copy == next owner cannot copy
+		if(next_owner_mask_on & PERM_COPY)
+		{			
+			childSetValue("checkbox next owner can copy",TRUE);
+			childSetTentative("checkbox next owner can copy",!can_copy);
+		}
+		else if(next_owner_mask_off & PERM_COPY)
+		{
+			childSetValue("checkbox next owner can copy",FALSE);
+			childSetTentative("checkbox next owner can copy",FALSE);
+		}
+		else
+		{
+			childSetValue("checkbox next owner can copy",TRUE);
+			childSetTentative("checkbox next owner can copy",TRUE);
+		}
+
+		// Transfer == next owner cannot transfer
+		if(next_owner_mask_on & PERM_TRANSFER)
+		{
+			childSetValue("checkbox next owner can transfer",TRUE);
+			childSetTentative("checkbox next owner can transfer",!can_transfer);
+		}
+		else if(next_owner_mask_off & PERM_TRANSFER)
+		{
+			childSetValue("checkbox next owner can transfer",FALSE);
+			childSetTentative("checkbox next owner can transfer",FALSE);
+		}
+		else
+		{
+			childSetValue("checkbox next owner can transfer",TRUE);
+			childSetTentative("checkbox next owner can transfer",TRUE);
+		}
+	}
+
+	// reflect sale information
+	LLSaleInfo sale_info;
+	BOOL valid_sale_info = LLSelectMgr::getInstance()->selectGetSaleInfo(sale_info);
+	LLSaleInfo::EForSale sale_type = sale_info.getSaleType();
+
+	LLComboBox* combo_sale_type = getChild<LLComboBox>("sale type");
+	if (valid_sale_info)
+	{
+		combo_sale_type->setValue(sale_type == LLSaleInfo::FS_NOT ? LLSaleInfo::FS_COPY : sale_type);
+		combo_sale_type->setTentative(FALSE); // unfortunately this doesn't do anything at the moment.
+	}
+	else
+	{
+		// default option is sell copy, determined to be safest
+		combo_sale_type->setValue(LLSaleInfo::FS_COPY);
+		combo_sale_type->setTentative(TRUE); // unfortunately this doesn't do anything at the moment.
+	}
+
+	childSetValue("checkbox for sale", num_for_sale != 0);
+
+	// HACK: There are some old objects in world that are set for sale,
+	// but are no-transfer.  We need to let users turn for-sale off, but only
+	// if for-sale is set.
+	bool cannot_actually_sell = !can_transfer || (!can_copy && sale_type == LLSaleInfo::FS_COPY);
+	if (num_for_sale && has_change_sale_ability && cannot_actually_sell)
+	{
+		childSetEnabled("checkbox for sale", true);
+	}
+		
+	// Check search status of objects
+	BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
+	bool include_in_search;
+	bool all_include_in_search = LLSelectMgr::getInstance()->selectionGetIncludeInSearch(&include_in_search);
+	childSetEnabled("search_check", has_change_sale_ability && all_volume);
+	childSetValue("search_check", include_in_search);
+	childSetTentative("search_check", ! all_include_in_search);
+
+	// Click action (touch, sit, buy)
+	U8 click_action = 0;
+	if (LLSelectMgr::getInstance()->selectionGetClickAction(&click_action))
+	{
+		LLComboBox*	ComboClickAction = getChild<LLComboBox>("clickaction");
+		if(ComboClickAction)
+		{
+			ComboClickAction->setCurrentByIndex((S32)click_action);
+		}
+	}
+	childSetEnabled("label click action",is_perm_modify && all_volume);
+	childSetEnabled("clickaction",is_perm_modify && all_volume);
+}
+
+
+// static
+void LLSidepanelTaskInfo::onClickClaim(void*)
+{
+	// try to claim ownership
+	LLSelectMgr::getInstance()->sendOwner(gAgent.getID(), gAgent.getGroupID());
+}
+
+// static
+void LLSidepanelTaskInfo::onClickRelease(void*)
+{
+	// try to release ownership
+	LLSelectMgr::getInstance()->sendOwner(LLUUID::null, LLUUID::null);
+}
+
+void LLSidepanelTaskInfo::onClickGroup()
+{
+	LLUUID owner_id;
+	std::string name;
+	BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, name);
+	LLFloater* parent_floater = gFloaterView->getParentFloater(this);
+
+	if(owners_identical && (owner_id == gAgent.getID()))
+	{
+		LLFloaterGroupPicker* fg = 	LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(gAgent.getID()));
+		if (fg)
+		{
+			fg->setSelectGroupCallback( boost::bind(&LLSidepanelTaskInfo::cbGroupID, this, _1) );
+
+			if (parent_floater)
+			{
+				LLRect new_rect = gFloaterView->findNeighboringPosition(parent_floater, fg);
+				fg->setOrigin(new_rect.mLeft, new_rect.mBottom);
+				parent_floater->addDependentFloater(fg);
+			}
+		}
+	}
+}
+
+void LLSidepanelTaskInfo::cbGroupID(LLUUID group_id)
+{
+	if(mLabelGroupName)
+	{
+		mLabelGroupName->setNameID(group_id, TRUE);
+	}
+	LLSelectMgr::getInstance()->sendGroup(group_id);
+}
+
+static bool callback_deed_to_group(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	if (0 == option)
+	{
+		LLUUID group_id;
+		BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
+		if(group_id.notNull() && groups_identical && (gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED)))
+		{
+			LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE);
+//			LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT);
+		}
+	}
+	return false;
+}
+
+void LLSidepanelTaskInfo::onClickDeedToGroup(void* data)
+{
+	LLNotifications::instance().add( "DeedObjectToGroup", LLSD(), LLSD(), callback_deed_to_group);
+}
+
+///----------------------------------------------------------------------------
+/// Permissions checkboxes
+///----------------------------------------------------------------------------
+
+// static
+void LLSidepanelTaskInfo::onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32 perm)
+{
+	LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject();
+	if(!object) return;
+
+	// Checkbox will have toggled itself
+	// LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
+	LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
+	BOOL new_state = check->get();
+	
+	LLSelectMgr::getInstance()->selectionSetObjectPermissions(field, new_state, perm);
+}
+
+// static
+void LLSidepanelTaskInfo::onCommitGroupShare(LLUICtrl *ctrl, void *data)
+{
+	onCommitPerm(ctrl, data, PERM_GROUP, PERM_MODIFY | PERM_MOVE | PERM_COPY);
+}
+
+// static
+void LLSidepanelTaskInfo::onCommitEveryoneMove(LLUICtrl *ctrl, void *data)
+{
+	onCommitPerm(ctrl, data, PERM_EVERYONE, PERM_MOVE);
+}
+
+
+// static
+void LLSidepanelTaskInfo::onCommitEveryoneCopy(LLUICtrl *ctrl, void *data)
+{
+	onCommitPerm(ctrl, data, PERM_EVERYONE, PERM_COPY);
+}
+
+// static
+void LLSidepanelTaskInfo::onCommitNextOwnerModify(LLUICtrl* ctrl, void* data)
+{
+	//llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerModify" << llendl;
+	onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_MODIFY);
+}
+
+// static
+void LLSidepanelTaskInfo::onCommitNextOwnerCopy(LLUICtrl* ctrl, void* data)
+{
+	//llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerCopy" << llendl;
+	onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_COPY);
+}
+
+// static
+void LLSidepanelTaskInfo::onCommitNextOwnerTransfer(LLUICtrl* ctrl, void* data)
+{
+	//llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerTransfer" << llendl;
+	onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_TRANSFER);
+}
+
+// static
+void LLSidepanelTaskInfo::onCommitName(LLUICtrl*, void* data)
+{
+	//llinfos << "LLSidepanelTaskInfo::onCommitName()" << llendl;
+	LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
+	LLLineEditor*	tb = self->getChild<LLLineEditor>("Object Name");
+	if(tb)
+	{
+		LLSelectMgr::getInstance()->selectionSetObjectName(tb->getText());
+//		LLSelectMgr::getInstance()->selectionSetObjectName(self->mLabelObjectName->getText());
+	}
+}
+
+
+// static
+void LLSidepanelTaskInfo::onCommitDesc(LLUICtrl*, void* data)
+{
+	//llinfos << "LLSidepanelTaskInfo::onCommitDesc()" << llendl;
+	LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
+	LLLineEditor*	le = self->getChild<LLLineEditor>("Object Description");
+	if(le)
+	{
+		LLSelectMgr::getInstance()->selectionSetObjectDescription(le->getText());
+	}
+}
+
+// static
+void LLSidepanelTaskInfo::onCommitSaleInfo(LLUICtrl*, void* data)
+{
+	LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
+	self->setAllSaleInfo();
+}
+
+// static
+void LLSidepanelTaskInfo::onCommitSaleType(LLUICtrl*, void* data)
+{
+	LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
+	self->setAllSaleInfo();
+}
+
+void LLSidepanelTaskInfo::setAllSaleInfo()
+{
+	llinfos << "LLSidepanelTaskInfo::setAllSaleInfo()" << llendl;
+	LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_NOT;
+
+	LLCheckBoxCtrl *checkPurchase = getChild<LLCheckBoxCtrl>("checkbox for sale");
+	
+	// Set the sale type if the object(s) are for sale.
+	if(checkPurchase && checkPurchase->get())
+	{
+		sale_type = static_cast<LLSaleInfo::EForSale>(getChild<LLComboBox>("sale type")->getValue().asInteger());
+	}
+
+	S32 price = -1;
+	
+	LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost");
+	price = (edit_price->getTentative()) ? DEFAULT_PRICE : edit_price->getValue().asInteger();
+
+	// If somehow an invalid price, turn the sale off.
+	if (price < 0)
+		sale_type = LLSaleInfo::FS_NOT;
+
+	LLSaleInfo sale_info(sale_type, price);
+	LLSelectMgr::getInstance()->selectionSetObjectSaleInfo(sale_info);
+	
+	// If turned off for-sale, make sure click-action buy is turned
+	// off as well
+	if (sale_type == LLSaleInfo::FS_NOT)
+	{
+		U8 click_action = 0;
+		LLSelectMgr::getInstance()->selectionGetClickAction(&click_action);
+		if (click_action == CLICK_ACTION_BUY)
+		{
+			LLSelectMgr::getInstance()->selectionSetClickAction(CLICK_ACTION_TOUCH);
+		}
+	}
+}
+
+struct LLSelectionPayable : public LLSelectedObjectFunctor
+{
+	virtual bool apply(LLViewerObject* obj)
+	{
+		// can pay if you or your parent has money() event in script
+		LLViewerObject* parent = (LLViewerObject*)obj->getParent();
+		return (obj->flagTakesMoney() 
+			   || (parent && parent->flagTakesMoney()));
+	}
+};
+
+// static
+void LLSidepanelTaskInfo::onCommitClickAction(LLUICtrl* ctrl, void*)
+{
+	LLComboBox* box = (LLComboBox*)ctrl;
+	if (!box) return;
+
+	U8 click_action = (U8)box->getCurrentIndex();
+	if (click_action == CLICK_ACTION_BUY)
+	{
+		LLSaleInfo sale_info;
+		LLSelectMgr::getInstance()->selectGetSaleInfo(sale_info);
+		if (!sale_info.isForSale())
+		{
+			LLNotifications::instance().add("CantSetBuyObject");
+
+			// Set click action back to its old value
+			U8 click_action = 0;
+			LLSelectMgr::getInstance()->selectionGetClickAction(&click_action);
+			box->setCurrentByIndex((S32)click_action);
+
+			return;
+		}
+	}
+	else if (click_action == CLICK_ACTION_PAY)
+	{
+		// Verify object has script with money() handler
+		LLSelectionPayable payable;
+		bool can_pay = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&payable);
+		if (!can_pay)
+		{
+			// Warn, but do it anyway.
+			LLNotifications::instance().add("ClickActionNotPayable");
+		}
+	}
+	LLSelectMgr::getInstance()->selectionSetClickAction(click_action);
+}
+
+// static
+void LLSidepanelTaskInfo::onCommitIncludeInSearch(LLUICtrl* ctrl, void*)
+{
+	LLCheckBoxCtrl* box = (LLCheckBoxCtrl*)ctrl;
+	llassert(box);
+
+	LLSelectMgr::getInstance()->selectionSetIncludeInSearch(box->get());
+}
+
diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h
new file mode 100644
index 00000000000..2b9b4b66b6b
--- /dev/null
+++ b/indra/newview/llsidepaneltaskinfo.h
@@ -0,0 +1,113 @@
+/** 
+ * @file llsidepaneltaskinfo.h
+ * @brief LLSidepanelTaskInfo class header file
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSIDEPANELTASKINFO_H
+#define LL_LLSIDEPANELTASKINFO_H
+
+#include "llpanel.h"
+#include "lluuid.h"
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLSidepanelTaskInfo
+//
+// Panel for permissions of an object.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLNameBox;
+
+class LLSidepanelTaskInfo : public LLPanel
+{
+public:
+	LLSidepanelTaskInfo();
+	virtual ~LLSidepanelTaskInfo();
+
+	/*virtual*/	BOOL postBuild();
+	/*virtual*/ void draw();
+	/*virtual*/ void setVisible(BOOL visible);
+
+protected:
+	void refresh();							// refresh all labels as needed
+
+	// statics
+	static void onClickClaim(void*);
+	static void onClickRelease(void*);
+		   void onClickGroup();
+		   void cbGroupID(LLUUID group_id);
+	static void onClickDeedToGroup(void*);
+
+	static void onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32 perm);
+
+	static void onCommitGroupShare(LLUICtrl *ctrl, void *data);
+
+	static void onCommitEveryoneMove(LLUICtrl *ctrl, void *data);
+	static void onCommitEveryoneCopy(LLUICtrl *ctrl, void *data);
+
+	static void onCommitNextOwnerModify(LLUICtrl* ctrl, void* data);
+	static void onCommitNextOwnerCopy(LLUICtrl* ctrl, void* data);
+	static void onCommitNextOwnerTransfer(LLUICtrl* ctrl, void* data);
+	
+	static void onCommitName(LLUICtrl* ctrl, void* data);
+	static void onCommitDesc(LLUICtrl* ctrl, void* data);
+
+	static void onCommitSaleInfo(LLUICtrl* ctrl, void* data);
+	static void onCommitSaleType(LLUICtrl* ctrl, void* data);
+	void setAllSaleInfo();
+
+	static void	onCommitClickAction(LLUICtrl* ctrl, void*);
+	static void onCommitIncludeInSearch(LLUICtrl* ctrl, void*);
+
+private:
+	LLNameBox*		mLabelGroupName;		// group name
+
+	LLUUID			mCreatorID;
+	LLUUID			mOwnerID;
+	LLUUID			mLastOwnerID;
+	BOOL mDirty; 		// item properties need to be updated
+
+protected:
+	void 						onEditButtonClicked();
+	void 						onSaveButtonClicked();
+	void 						onCancelButtonClicked();
+	void 						onOpenButtonClicked();
+	void 						onBuildButtonClicked();
+	void 						onBuyButtonClicked();
+private:
+	LLButton*					mEditBtn;
+	LLButton*					mSaveBtn;
+	LLButton*					mCancelBtn;
+	LLButton*					mOpenBtn;
+	LLButton*					mBuildBtn;
+	LLButton*					mBuyBtn;
+};
+
+
+#endif // LL_LLSIDEPANELTASKINFO_H
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 23ceb1e72d9..526b7967874 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2648,8 +2648,22 @@ void handle_object_edit()
 	// Could be first use
 	LLFirstUse::useBuild();
 	return;
-	
 }
+
+void handle_object_inspect()
+{
+	LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
+	LLViewerObject* selected_objectp = selection->getFirstRootObject();
+	if (selected_objectp)
+	{
+		LLSD key;
+		key["task"] = "task";
+		LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
+	}
+
+	LLFloaterReg::showInstance("inspect", LLSD());
+}
+
 //---------------------------------------------------------------------------
 // Land pie menu
 //---------------------------------------------------------------------------
@@ -8062,6 +8076,7 @@ void initialize_menus()
 
 	commit.add("Object.Buy", boost::bind(&handle_buy));
 	commit.add("Object.Edit", boost::bind(&handle_object_edit));
+	commit.add("Object.Inspect", boost::bind(&handle_object_inspect));
 	
 	commit.add("Object.Take", boost::bind(&handle_take));
 
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index fc37bc07b8e..cbcc3f10ad2 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -110,4 +110,18 @@
 		 width="330">
 	</panel>
 
+	<panel
+		 follows="all"
+		 layout="topleft"
+		 left="0"
+		 class="sidepanel_task_info"
+		 filename="sidepanel_task_info.xml"
+		 name="sidepanel__task_panel"
+		 top="0"
+		 label=""
+		 height="570"
+		 visible="false"
+		 width="330">
+	</panel>
+
 </panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index f77fc204f34..39cd75074e5 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -487,36 +487,6 @@
 		     name="edit_btn"
 		     top="0"
 		     width="50" />
-	    <button
-		     follows="bottom|left"
-		     font="SansSerifSmallBold"
-		     height="25"
-		     label="Open"
-		     layout="topleft"
-		     left_pad="5"
-		     name="edit_btn"
-		     top="0"
-		     width="60" />
-	    <button
-		     follows="bottom|left"
-		     font="SansSerifSmallBold"
-		     height="25"
-		     label="Build"
-		     layout="topleft"
-		     left_pad="5"
-		     name="edit_btn"
-		     top="0"
-		     width="60" />
-	    <button
-		     follows="bottom|left"
-		     font="SansSerifSmallBold"
-		     height="25"
-		     label="Buy"
-		     layout="topleft"
-		     left_pad="5"
-		     name="edit_btn"
-		     top="0"
-		     width="60" />
 	    <button
 		     follows="bottom|right"
 		     font="SansSerifSmallBold"
-- 
GitLab


From e8ee119da107c0c473c836f1f0233621f14e2a15 Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Wed, 4 Nov 2009 20:23:41 +0200
Subject: [PATCH 120/306] Major sub-task EXT-2142, additional commit: moved
 call buttons panel to control panel bottom, removed other buttons from
 panel_call_button

--HG--
branch : product-engine
---
 .../xui/en/panel_adhoc_control_panel.xml      | 13 ++-
 .../xui/en/panel_group_control_panel.xml      | 26 ++++--
 .../default/xui/en/panel_im_control_panel.xml | 86 ++++++++++---------
 3 files changed, 70 insertions(+), 55 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
index 52017218d6c..24c46b314ff 100644
--- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
@@ -25,19 +25,23 @@
      border="false"
      bottom="1"
      follows="left|bottom"
-     height="78"
+     height="70"
      left="0"
-     name="panel_buttons"
+     left_pad="0"
+     name="panel_call_buttons"
+     top_pad="0"
      width="180">
 
         <button
+         bottom="10"
          height="20"
-         label="Call Group"
-         left_delta="27"
+         label="Call"
+         left_delta="28"
          name="call_btn"
          width="125"/>
 
         <button
+         bottom="40"
          height="20"
          label="Leave Call"
          name="end_call_btn"
@@ -46,6 +50,7 @@
 
         <button
          enabled="false"
+         bottom="10"
          height="20"
          label="Open Voice Controls"
          name="voice_ctrls_btn"
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index daa44ac75ce..46f34949a83 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -19,31 +19,37 @@
      top="10"
      width="180"/>
 
+    <button
+     bottom_pad="0"
+     height="20"
+     label="Group Info"
+     left_delta="28"
+     name="group_info_btn"
+     width="125"/>
+
     <panel
      background_visible="true"
      bg_alpha_color="0.2 0.2 0.2 1"
      border="false"
      bottom="1"
      follows="left|bottom"
-     height="98"
+     height="70"
      left="0"
-     name="panel_buttons"
+     left_pad="0"
+     name="panel_call_buttons"
+     top_pad="0"
      width="180">
 
         <button
-         height="20"
-         label="Group Info"
-         left_delta="28"
-         name="group_info_btn"
-         width="125"/>
-
-        <button
+         bottom="10"
          height="20"
          label="Call Group"
+         left_delta="28"
          name="call_btn"
          width="125"/>
 
         <button
+         bottom="40"
          height="20"
          label="Leave Call"
          name="end_call_btn"
@@ -52,6 +58,7 @@
 
         <button
          enabled="false"
+         bottom="10"
          height="20"
          label="Open Voice Controls"
          name="voice_ctrls_btn"
@@ -59,4 +66,5 @@
          width="125"/>
 
     </panel>
+
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index d144d71dcee..f77a2ec730d 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -2,7 +2,6 @@
 <panel
  border="false"
  height="327"
- layout="topleft"
  name="panel_im_control_panel"
  width="131">
 
@@ -14,41 +13,64 @@
      top="-10"
      width="125"/>
 
+    <button
+     follows="left|bottom"
+     height="20"
+     label="View Profile"
+     name="view_profile_btn"
+     width="125"/>
+
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Add Friend"
+     name="add_friend_btn"
+     width="125"/>
+
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Teleport"
+     name="teleport_btn"
+     width="125"/>
+
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Share"
+     name="share_btn"
+     width="125"/>
+
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Pay"
+     name="pay_btn"
+     width="125"/>
+
     <panel
      background_visible="true"
      bg_alpha_color="0.2 0.2 0.2 1"
      border="false"
      bottom="1"
      follows="left|bottom"
-     height="195"
+     height="70"
      left="0"
-     name="panel_buttons"
+     left_pad="0"
+     name="panel_call_buttons"
+     top_pad="0"
      width="131">
 
         <button
-         follows="left|bottom"
-         height="20"
-         label="View Profile"
-         left_delta="3"
-         name="view_profile_btn"
-         width="125"/>
-
-        <button
-         follows="left|bottom"
-         height="20"
-         label="Add Friend"
-         name="add_friend_btn"
-         width="125"/>
-
-        <button
-         follows="left|bottom"
+         bottom="10"
          height="20"
          label="Call"
+         left_delta="3"
          name="call_btn"
          width="125"/>
 
         <button
-         follows="left|bottom"
+         bottom="40"
          height="20"
          label="Leave Call"
          name="end_call_btn"
@@ -57,33 +79,13 @@
 
         <button
          enabled="false"
-         follows="left|bottom"
+         bottom="10"
          height="20"
          label="Open Voice Controls"
          name="voice_ctrls_btn"
          visible="false"
          width="125"/>
 
-        <button
-         follows="left|bottom"
-         height="20"
-         label="Teleport"
-         name="teleport_btn"
-         width="125"/>
-
-        <button
-         follows="left|bottom"
-         height="20"
-         label="Share"
-         name="share_btn"
-         width="125"/>
-
-        <button
-         follows="left|bottom"
-         height="20"
-         label="Pay"
-         name="pay_btn"
-         width="125"/>
-
     </panel>
+
 </panel>
-- 
GitLab


From 77f58385d8ec0440da8c943a8b814a73369ef0d3 Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Wed, 4 Nov 2009 20:24:34 +0200
Subject: [PATCH 121/306] Implemented normal task EXT-704 "Remove Place Media
 panel". - Removed Place Media panel. This also fixes bug EXT-454 "Place -
 Media: Gear near 'All nearby media' shoudl be removed according to the latest
 changes in the spec".

--HG--
branch : product-engine
---
 indra/newview/CMakeLists.txt | 2 --
 1 file changed, 2 deletions(-)

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index be736c57c87..fde942ad116 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -322,7 +322,6 @@ set(viewer_SOURCE_FILES
     llpanellogin.cpp
     llpanellookinfo.cpp
     llpanellooks.cpp
-    llpanelmedia.cpp
     llpanelmediasettingsgeneral.cpp
     llpanelmediasettingspermissions.cpp
     llpanelmediasettingssecurity.cpp
@@ -802,7 +801,6 @@ set(viewer_HEADER_FILES
     llpanellogin.h
     llpanellookinfo.h
     llpanellooks.h
-    llpanelmedia.h
     llpanelmediasettingsgeneral.h
     llpanelmediasettingspermissions.h
     llpanelmediasettingssecurity.h
-- 
GitLab


From cf9d9237bed3ddf063b2744a009e8e8de55388fe Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 4 Nov 2009 18:30:59 +0000
Subject: [PATCH 122/306] more splitting of code.

---
 indra/newview/CMakeLists.txt | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index e138b431c59..b989f0c2306 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -386,6 +386,7 @@ set(viewer_SOURCE_FILES
     llsurfacepatch.cpp
     llsyswellitem.cpp
     llsyswellwindow.cpp
+    lltalkbutton.cpp
     llteleporthistory.cpp
     llteleporthistorystorage.cpp
     lltexglobalcolor.cpp
@@ -872,6 +873,7 @@ set(viewer_HEADER_FILES
     llsyswellitem.h
     llsyswellwindow.h    
     lltable.h
+    lltalkbutton.h
     llteleporthistory.h
     llteleporthistorystorage.h
     lltexglobalcolor.h
-- 
GitLab


From 7573cb61126ef7db439b9c4b690fd77d21aabbc9 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 4 Nov 2009 18:34:11 +0000
Subject: [PATCH 123/306] split code.

---
 indra/newview/llchiclet.cpp | 153 +-----------------------------------
 1 file changed, 3 insertions(+), 150 deletions(-)

diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index bad61101c1b..a3c0a171865 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -51,10 +51,9 @@
 #include "lltransientfloatermgr.h"
 
 static LLDefaultChildRegistry::Register<LLChicletPanel> t1("chiclet_panel");
-static LLDefaultChildRegistry::Register<LLTalkButton> t2("chiclet_talk");
-static LLDefaultChildRegistry::Register<LLNotificationChiclet> t3("chiclet_notification");
-static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t4("chiclet_im_p2p");
-static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t5("chiclet_im_group");
+static LLDefaultChildRegistry::Register<LLNotificationChiclet> t2("chiclet_notification");
+static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t3("chiclet_im_p2p");
+static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t4("chiclet_im_group");
 
 S32 LLNotificationChiclet::mUreadSystemNotifications = 0;
 
@@ -1250,152 +1249,6 @@ bool LLChicletPanel::isAnyIMFloaterDoked()
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 
-// *TODO Vadim: Move this out of llchiclet.cpp.
-
-LLTalkButton::Params::Params()
- : speak_button("speak_button")
- , show_button("show_button")
- , monitor("monitor")
-{
-	// *TODO Vadim: move hardcoded labels (!) and other params to XUI.
-	speak_button.name("left");
-	speak_button.label("Speak");
-	speak_button.label_selected("Speak");
-	speak_button.font(LLFontGL::getFontSansSerifSmall());
-	speak_button.tab_stop(false);
-	speak_button.is_toggle(true);
-	speak_button.picture_style(true);
-	// Use default button art. JC
-	//speak_button.image_selected(LLUI::getUIImage("SegmentedBtn_Left_Selected"));
-	//speak_button.image_unselected(LLUI::getUIImage("SegmentedBtn_Left_Off"));
-
-	show_button.name("right");
-	show_button.label(LLStringUtil::null);
-	show_button.rect(LLRect(0, 0, 20, 0));
-	show_button.tab_stop(false);
-	show_button.is_toggle(true);
-	show_button.picture_style(true);
-	show_button.image_selected(LLUI::getUIImage("ComboButton_Selected"));
-	show_button.image_unselected(LLUI::getUIImage("ComboButton_Off"));
-
-	monitor.name("monitor");
-	// *TODO: Make this data driven.
-	monitor.rect(LLRect(0, 18, 18, 0));
-}
-
-LLTalkButton::LLTalkButton(const Params& p)
-: LLUICtrl(p)
-, mPrivateCallPanel(NULL)
-, mOutputMonitor(NULL)
-, mSpeakBtn(NULL)
-, mShowBtn(NULL)
-{
-	LLRect rect = p.rect();
-	LLRect speak_rect(0, rect.getHeight(), rect.getWidth(), 0);
-	LLRect show_rect = p.show_button.rect();
-	show_rect.set(0, rect.getHeight(), show_rect.getWidth(), 0);
-
-	speak_rect.mRight -= show_rect.getWidth();
-	show_rect.mLeft = speak_rect.getWidth();
-	show_rect.mRight = rect.getWidth();
-
-	LLButton::Params speak_params = p.speak_button;
-	speak_params.rect(speak_rect);
-	mSpeakBtn = LLUICtrlFactory::create<LLButton>(speak_params);
-	addChild(mSpeakBtn);
-	LLTransientFloaterMgr::getInstance()->addControlView(mSpeakBtn);
-
-	mSpeakBtn->setClickedCallback(boost::bind(&LLTalkButton::onClick_SpeakBtn, this));
-	mSpeakBtn->setToggleState(FALSE);
-
-	LLButton::Params show_params = p.show_button;
-	show_params.rect(show_rect);
-	mShowBtn = LLUICtrlFactory::create<LLButton>(show_params);
-	addChild(mShowBtn);
-	LLTransientFloaterMgr::getInstance()->addControlView(mShowBtn);
-
-	mShowBtn->setClickedCallback(boost::bind(&LLTalkButton::onClick_ShowBtn, this));
-	mShowBtn->setToggleState(FALSE);
-
-	static const S32 MONITOR_RIGHT_PAD = 2;
-
-	LLRect monitor_rect = p.monitor.rect();
-	S32 monitor_height = monitor_rect.getHeight();
-	monitor_rect.mLeft = speak_rect.getWidth() - monitor_rect.getWidth() - MONITOR_RIGHT_PAD;
-	monitor_rect.mRight = speak_rect.getWidth() - MONITOR_RIGHT_PAD;
-	monitor_rect.mBottom = (rect.getHeight() / 2) - (monitor_height / 2);
-	monitor_rect.mTop = monitor_rect.mBottom + monitor_height;
-
-	LLOutputMonitorCtrl::Params monitor_params = p.monitor;
-	monitor_params.draw_border(false);
-	monitor_params.rect(monitor_rect);
-	monitor_params.auto_update(true);
-	monitor_params.speaker_id(gAgentID);
-	mOutputMonitor = LLUICtrlFactory::create<LLOutputMonitorCtrl>(monitor_params);
-	mSpeakBtn->addChild(mOutputMonitor);
-
-	// never show "muted" because you can't mute yourself
-	mOutputMonitor->setIsMuted(false);
-}
-
-LLTalkButton::~LLTalkButton()
-{
-}
-
-void LLTalkButton::setSpeakBtnToggleState(bool state)
-{
-	mSpeakBtn->setToggleState(state);
-}
-
-void LLTalkButton::onClick_SpeakBtn()
-{
-	bool speaking = mSpeakBtn->getToggleState();
-	gVoiceClient->setUserPTTState(speaking);
-}
-
-void LLTalkButton::onClick_ShowBtn()
-{
-	if(!mShowBtn->getToggleState())
-	{
-		mPrivateCallPanel->onClickClose(mPrivateCallPanel);
-		delete mPrivateCallPanel;
-		mPrivateCallPanel = NULL;
-		mShowBtn->setToggleState(FALSE);
-		return;
-	}
-
-	S32 x = mSpeakBtn->getRect().mLeft;
-	S32 y = 0;
-
-	localPointToScreen(x, y, &x, &y);
-
-	mPrivateCallPanel = new LLVoiceControlPanel;
-	getRootView()->addChild(mPrivateCallPanel);
-
-	y = LLBottomTray::getInstance()->getRect().getHeight() + mPrivateCallPanel->getRect().getHeight();
-
-	LLRect rect;
-	rect.setLeftTopAndSize(x, y, mPrivateCallPanel->getRect().getWidth(), mPrivateCallPanel->getRect().getHeight());
-	mPrivateCallPanel->setRect(rect);
-
-
-	LLAvatarListItem* item = new LLAvatarListItem();
-	item->showLastInteractionTime(false);
-	item->showInfoBtn(true);
-	item->showSpeakingIndicator(true);
-	item->reshape(mPrivateCallPanel->getRect().getWidth(), item->getRect().getHeight(), FALSE);
-
-	mPrivateCallPanel->addItem(item);
-	mPrivateCallPanel->setVisible(TRUE);
-	mPrivateCallPanel->setFrontmost(TRUE);
-
-	mShowBtn->setToggleState(TRUE);
-}
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-
 LLChicletNotificationCounterCtrl::LLChicletNotificationCounterCtrl(const Params& p)
  : LLTextBox(p)
  , mCounter(0)
-- 
GitLab


From 5eaf4731770419fa4b32efb498d641a7d9d2f521 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 4 Nov 2009 18:37:05 +0000
Subject: [PATCH 124/306] more refactoring/paring/splitting....

---
 indra/newview/llnearbychatbar.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h
index 06204e6367b..3fa1d3ea8ac 100644
--- a/indra/newview/llnearbychatbar.h
+++ b/indra/newview/llnearbychatbar.h
@@ -37,11 +37,14 @@
 #include "llcombobox.h"
 #include "llgesturemgr.h"
 #include "llchat.h"
-#include "llchiclet.h"
 #include "llvoiceclient.h"
 #include "lloutputmonitorctrl.h"
 #include "llspeakers.h"
 
+
+class LLTalkButton;
+
+
 class LLGestureComboBox
 	: public LLComboBox
 	, public LLGestureManagerObserver
-- 
GitLab


From 0ee426016aeae605eeb8ab3aa535b2b52462a3d9 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Wed, 4 Nov 2009 10:37:13 -0800
Subject: [PATCH 125/306] added newline at end of llbutton.cpp removed
 non-localized, invisible labels from scrollbar and tab container arrows
 EXT-1626 - there is text overlaping in group info mini inspector

reviewed by James
---
 indra/llui/llbutton.cpp       | 2 +-
 indra/llui/llscrollbar.cpp    | 2 --
 indra/llui/lltabcontainer.cpp | 4 +---
 indra/llui/lltextbase.cpp     | 6 +-----
 4 files changed, 3 insertions(+), 11 deletions(-)

diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 8daceb9485d..bbaf908d2e5 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -1090,4 +1090,4 @@ void LLButton::resetMouseDownTimer()
 {
 	mMouseDownTimer.stop();
 	mMouseDownTimer.reset();
-}
\ No newline at end of file
+}
diff --git a/indra/llui/llscrollbar.cpp b/indra/llui/llscrollbar.cpp
index b450ecbbf91..dfd315d4516 100644
--- a/indra/llui/llscrollbar.cpp
+++ b/indra/llui/llscrollbar.cpp
@@ -115,7 +115,6 @@ LLScrollbar::LLScrollbar(const Params & p)
 
 	LLButton::Params up_btn(mOrientation == VERTICAL ? p.up_button : p.left_button);
 	up_btn.name(std::string("Line Up"));
-	up_btn.label(std::string("Line Up"));
 	up_btn.rect(line_up_rect);
 	up_btn.click_callback.function(boost::bind(&LLScrollbar::onLineUpBtnPressed, this, _2));
 	up_btn.mouse_held_callback.function(boost::bind(&LLScrollbar::onLineUpBtnPressed, this, _2));
@@ -126,7 +125,6 @@ LLScrollbar::LLScrollbar(const Params & p)
 
 	LLButton::Params down_btn(mOrientation == VERTICAL ? p.down_button : p.right_button);
 	down_btn.name(std::string("Line Down"));
-	down_btn.label(std::string("Line Down"));
 	down_btn.rect(line_down_rect);
 	down_btn.follows.flags(FOLLOWS_RIGHT|FOLLOWS_BOTTOM);
 	down_btn.click_callback.function(boost::bind(&LLScrollbar::onLineDownBtnPressed, this, _2));
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index 6ca9c4ceda7..6073b54371a 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -986,7 +986,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
 				p.follows.flags = p.follows.flags() | FOLLOWS_BOTTOM;
 			}
 
-			btn = LLUICtrlFactory::create<LLButton>(p);
+++			btn = LLUICtrlFactory::create<LLButton>(p);
 		}
 	}
 	
@@ -1645,7 +1645,6 @@ void LLTabContainer::initButtons()
 
 		LLButton::Params prev_btn_params;
 		prev_btn_params.name(std::string("Up Arrow"));
-		prev_btn_params.label(std::string("Up Arrow"));
 		prev_btn_params.rect(up_arrow_btn_rect);
 		prev_btn_params.follows.flags(FOLLOWS_TOP | FOLLOWS_LEFT);
 		prev_btn_params.image_unselected.name("scrollbutton_up_out_blue.tga");
@@ -1655,7 +1654,6 @@ void LLTabContainer::initButtons()
 
 		LLButton::Params next_btn_params;
 		next_btn_params.name(std::string("Down Arrow"));
-		next_btn_params.label(std::string("Down Arrow"));
 		next_btn_params.rect(down_arrow_btn_rect);
 		next_btn_params.follows.flags(FOLLOWS_BOTTOM | FOLLOWS_LEFT);
 		next_btn_params.image_unselected.name("scrollbutton_down_out_blue.tga");
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 9a26f0b4726..8cbb53dda28 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -1450,9 +1450,7 @@ void LLTextBase::setText(const LLStringExplicit &utf8str)
 
 	appendText(text, false);
 
-	//resetDirty();
 	onValueChange(0, getLength());
-	needsReflow();
 }
 
 //virtual
@@ -1630,8 +1628,6 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepen
 		insertStringNoUndo(getLength(), wide_text, &segments);
 	}
 
-	needsReflow();
-	
 	// Set the cursor and scroll position
 	if( selection_start != selection_end )
 	{
@@ -2115,7 +2111,7 @@ LLRect LLTextBase::getVisibleDocumentRect() const
 		LLRect doc_rect = mDocumentView->getLocalRect();
 		doc_rect.mLeft -= mDocumentView->getRect().mLeft;
 		// adjust for height of text above widget baseline
-		doc_rect.mBottom = llmin(0, doc_rect.getHeight() - mTextRect.getHeight());
+		doc_rect.mBottom = doc_rect.getHeight() - mTextRect.getHeight();
 		return doc_rect;
 	}
 }
-- 
GitLab


From ad25be8af388ee38c2f0af731d30a6336caf3ad5 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Wed, 4 Nov 2009 10:50:14 -0800
Subject: [PATCH 126/306] fixed up bad merge

---
 .../skins/default/xui/en/floater_tools.xml    | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 0202e8b5828..0614653d76f 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -1011,8 +1011,11 @@
            label="Original"
            value="1" />
       </combo_box>
-<!-- NEW PRICE SPINNER -->
-      <spinner
+<!-- NEW PRICE SPINNER
+Objects are allowed to be for sale for L$0 to invoke buy UI behavior
+even though the user gets a free copy.
+-->
+    <spinner
         follows="left|top"
         decimal_digits="0"
         increment="1"
@@ -1023,7 +1026,7 @@
         label="Price: L$"
         label_width="65"
         width="150"
-        min_val="1"
+        min_val="0"
         height="20"
         max_val="999999999" />
       <check_box
@@ -2767,7 +2770,7 @@
              left_pad="8"
              name="button permissions"
              width="130" />
-            <panel_inventory
+            <panel_inventory_object
              follows="left|top"
              height="210"
              layout="topleft"
@@ -2842,14 +2845,6 @@
          tool_tip="Colorize the parcels according to the type of owner: &#10;&#10;Green = Your land &#10;Aqua = Your group&apos;s land &#10;Red = Owned by others &#10;Yellow = For sale &#10;Purple = For auction &#10;Grey = Public"
          top_pad="8"
          width="205" />
-        <!--TODO: HOOK UP TO HELP VIEWER-->
-       <!-- <button
-         image_overlay="Arrow_Right_Off"
-         left_pad="5"
-         name="button show owners help"
-         tool_tip="See an explanation of colors"
-         width="26"
-         height="22" />-->
         <text
          type="string"
          length="1"
-- 
GitLab


From c9ac2b54b94b4b4bb30e9f0750601b6289a802a0 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 4 Nov 2009 19:24:09 +0000
Subject: [PATCH 127/306] fix up the refactoring...

---
 indra/newview/llnearbychatbar.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 32dc5e59278..730939861b2 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -36,6 +36,7 @@
 #include "lltrans.h"
 
 #include "llnearbychatbar.h"
+#include "lltalkbutton.h"
 #include "llbottomtray.h"
 #include "llagent.h"
 #include "llgesturemgr.h"
-- 
GitLab


From eb02d77ff5d20b99cc35fe9082cf5a22f634a7e1 Mon Sep 17 00:00:00 2001
From: Eugene Kondrashev <ekondrashev@productengine.com>
Date: Wed, 4 Nov 2009 21:33:14 +0200
Subject: [PATCH 128/306] Implemented major sub-task EXT-2131 - Output monitor
 contols should only be shown for Group Chat and Adhoc Chat when in a Voice
 Call. Added onStateChange callback support for voice channel. Added
 showing/hiding logic of speaking indicator.

--HG--
branch : product-engine
---
 indra/newview/llavatarlist.cpp                | 17 ++++++++++
 indra/newview/llavatarlist.h                  |  3 ++
 indra/newview/llavatarlistitem.cpp            | 13 ++++++++
 indra/newview/llavatarlistitem.h              |  6 ++--
 indra/newview/llpanelimcontrolpanel.cpp       | 32 +++++++++++++------
 indra/newview/llpanelimcontrolpanel.h         |  6 +++-
 indra/newview/llvoicechannel.cpp              | 14 ++++++--
 indra/newview/llvoicechannel.h                | 11 +++++++
 .../xui/en/panel_adhoc_control_panel.xml      |  1 +
 .../xui/en/panel_group_control_panel.xml      |  1 +
 10 files changed, 89 insertions(+), 15 deletions(-)

diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 8609ba8b1c6..bb03f47f46f 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -65,6 +65,20 @@ void LLAvatarList::toggleIcons()
 	}
 }
 
+void LLAvatarList::setSpeakingIndicatorsVisible(bool visible)
+{
+	// Save the new value for new items to use.
+	mShowSpeakingIndicator = visible;
+	
+	// Show/hide icons for all existing items.
+	std::vector<LLPanel*> items;
+	getItems(items);
+	for( std::vector<LLPanel*>::const_iterator it = items.begin(); it != items.end(); it++)
+	{
+		static_cast<LLAvatarListItem*>(*it)->setSpeakingIndicatorVisible(mShowSpeakingIndicator);
+	}
+}
+
 static bool findInsensitive(std::string haystack, const std::string& needle_upper)
 {
     LLStringUtil::toUpper(haystack);
@@ -81,6 +95,7 @@ LLAvatarList::Params::Params()
 , show_last_interaction_time("show_last_interaction_time", false)
 , show_info_btn("show_info_btn", true)
 , show_profile_btn("show_profile_btn", true)
+, show_speaking_indicator("show_speaking_indicator", true)
 {
 }
 
@@ -94,6 +109,7 @@ LLAvatarList::LLAvatarList(const Params& p)
 , mShowIcons(true)
 , mShowInfoBtn(p.show_info_btn)
 , mShowProfileBtn(p.show_profile_btn)
+, mShowSpeakingIndicator(p.show_speaking_indicator)
 {
 	setCommitOnSelectionChange(true);
 
@@ -295,6 +311,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is
 	item->setAvatarIconVisible(mShowIcons);
 	item->setShowInfoBtn(mShowInfoBtn);
 	item->setShowProfileBtn(mShowProfileBtn);
+	item->setSpeakingIndicatorVisible(mShowSpeakingIndicator);
 
 	addItem(item, id, pos);
 }
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 195d9e5b550..490f93e5015 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -61,6 +61,7 @@ class LLAvatarList : public LLFlatListView
 		Optional<bool> show_last_interaction_time; // show most recent interaction time. *HACK: move this to a derived class
 		Optional<bool> show_info_btn;
 		Optional<bool> show_profile_btn;
+		Optional<bool> show_speaking_indicator;
 		Params();
 	};
 
@@ -76,6 +77,7 @@ class LLAvatarList : public LLFlatListView
 	void setContextMenu(LLAvatarListItem::ContextMenu* menu) { mContextMenu = menu; }
 
 	void toggleIcons();
+	void setSpeakingIndicatorsVisible(bool visible);
 	void sortByName();
 	void setShowIcons(std::string param_name);
 	bool getIconsVisible() const { return mShowIcons; }
@@ -105,6 +107,7 @@ class LLAvatarList : public LLFlatListView
 	bool mShowIcons;
 	bool mShowInfoBtn;
 	bool mShowProfileBtn;
+	bool mShowSpeakingIndicator;
 
 	LLTimer*				mLITUpdateTimer; // last interaction time update timer
 	std::string				mIconParamName;
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index a7ac14c9486..7df278d887b 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -62,6 +62,7 @@ LLAvatarListItem::LLAvatarListItem()
 	mIconWidth = mAvatarName->getRect().mLeft - mAvatarIcon->getRect().mLeft;
 	mInfoBtnWidth = mInfoBtn->getRect().mRight - mSpeakingIndicator->getRect().mRight;
 	mProfileBtnWidth = mProfileBtn->getRect().mRight - mInfoBtn->getRect().mRight;
+	mSpeakingIndicatorWidth = mSpeakingIndicator->getRect().mRight - mAvatarName->getRect().mRight; 
 }
 
 LLAvatarListItem::~LLAvatarListItem()
@@ -230,6 +231,18 @@ void LLAvatarListItem::setShowProfileBtn(bool show)
 	mAvatarName->reshape(mAvatarName->getRect().getWidth() + width_delta, mAvatarName->getRect().getHeight());
 }
 
+void LLAvatarListItem::setSpeakingIndicatorVisible(bool visible)
+{
+	// Already done? Then do nothing.
+	if (mSpeakingIndicator->getVisible() == (BOOL)visible)
+		return;
+	mSpeakingIndicator->setVisible(visible);
+	S32 width_delta = visible ? - mSpeakingIndicatorWidth : mSpeakingIndicatorWidth;
+
+	//Reshaping avatar name
+	mAvatarName->reshape(mAvatarName->getRect().getWidth() + width_delta, mAvatarName->getRect().getHeight());
+}
+
 void LLAvatarListItem::setAvatarIconVisible(bool visible)
 {
 	// Already done? Then do nothing.
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index cd7a85c3dc5..d379797a464 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -65,8 +65,9 @@ class LLAvatarListItem : public LLPanel, public LLFriendObserver
 	void setAvatarId(const LLUUID& id, bool ignore_status_changes = false);
 	void setLastInteractionTime(const std::string& val);
 	//Show/hide profile/info btn, translating speaker indicator and avatar name coordinates accordingly
-	void setShowProfileBtn(bool hide);
-	void setShowInfoBtn(bool hide);
+	void setShowProfileBtn(bool show);
+	void setShowInfoBtn(bool show);
+	void setSpeakingIndicatorVisible(bool visible);
 	void setAvatarIconVisible(bool visible);
 	
 	const LLUUID& getAvatarId() const;
@@ -109,6 +110,7 @@ class LLAvatarListItem : public LLPanel, public LLFriendObserver
 	S32	 mIconWidth; // icon width + padding
 	S32  mInfoBtnWidth; //info btn width + padding
 	S32  mProfileBtnWidth; //profile btn width + padding
+	S32  mSpeakingIndicatorWidth; //speaking indicator width + padding
 };
 
 #endif //LL_LLAVATARLISTITEM_H
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index 21e88b6d07c..80b29c4fa79 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -59,6 +59,14 @@ void LLPanelChatControlPanel::onOpenVoiceControlsClicked()
 	// TODO: implement Voice Control Panel opening
 }
 
+void LLPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state)
+{
+	bool is_call_started = ( new_state >= LLVoiceChannel::STATE_CALL_STARTED );
+	childSetVisible("end_call_btn", is_call_started);
+	childSetVisible("voice_ctrls_btn", is_call_started);
+	childSetVisible("call_btn", ! is_call_started);
+}
+
 BOOL LLPanelChatControlPanel::postBuild()
 {
 	childSetAction("call_btn", boost::bind(&LLPanelChatControlPanel::onCallButtonClicked, this));
@@ -76,15 +84,6 @@ void LLPanelChatControlPanel::draw()
 	LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(mSessionId);
 	if (!session) return;
 
-	LLVoiceChannel* voice_channel = session->mVoiceChannel;
-	if (voice_channel && voice_enabled)
-	{
-		bool is_call_started = ( voice_channel->getState() >= LLVoiceChannel::STATE_CALL_STARTED );
-		childSetVisible("end_call_btn", is_call_started);
-		childSetVisible("voice_ctrls_btn", is_call_started);
-		childSetVisible("call_btn", ! is_call_started);
-	}
-
 	bool session_initialized = session->mSessionInitialized;
 	bool callback_enabled = session->mCallBackEnabled;
 	LLViewerRegion* region = gAgent.getRegion();
@@ -98,6 +97,15 @@ void LLPanelChatControlPanel::draw()
 	LLPanel::draw();
 }
 
+void LLPanelChatControlPanel::setSessionId(const LLUUID& session_id)
+{
+	//Method is called twice for AdHoc and Group chat. Second time when server init reply received
+	mSessionId = session_id;
+	LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionId);
+	if(voice_channel)
+		voice_channel->setStateChangedCallback(boost::bind(&LLPanelChatControlPanel::onVoiceChannelStateChanged, this, _1, _2));
+}
+
 LLPanelIMControlPanel::LLPanelIMControlPanel()
 {
 }
@@ -214,6 +222,12 @@ void LLPanelGroupControlPanel::onSortMenuItemClicked(const LLSD& userdata)
 
 }
 
+void LLPanelGroupControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state)
+{
+	LLPanelChatControlPanel::onVoiceChannelStateChanged(old_state, new_state);
+	mAvatarList->setSpeakingIndicatorsVisible(new_state >= LLVoiceChannel::STATE_CALL_STARTED);
+}
+
 void LLPanelGroupControlPanel::setSessionId(const LLUUID& session_id)
 {
 	LLPanelChatControlPanel::setSessionId(session_id);
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index fa101f42803..1f38bffb538 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -34,6 +34,7 @@
 #define LL_LLPANELIMCONTROLPANEL_H
 
 #include "llpanel.h"
+#include "llvoicechannel.h"
 
 class LLSpeakerMgr;
 class LLAvatarList;
@@ -52,7 +53,9 @@ class LLPanelChatControlPanel : public LLPanel
 	void onEndCallButtonClicked();
 	void onOpenVoiceControlsClicked();
 
-	virtual void setSessionId(const LLUUID& session_id) { mSessionId = session_id; }
+	virtual void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state);
+
+	virtual void setSessionId(const LLUUID& session_id);
 
 private:
 	LLUUID mSessionId;
@@ -100,6 +103,7 @@ class LLPanelGroupControlPanel : public LLPanelChatControlPanel
 private:
 	void onGroupInfoButtonClicked();
 	void onSortMenuItemClicked(const LLSD& userdata);
+	/*virtual*/ void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state);
 };
 
 class LLPanelAdHocControlPanel : public LLPanelGroupControlPanel
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 96fcf61e628..cefc88ebee8 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -390,7 +390,15 @@ void LLVoiceChannel::setState(EState state)
 		break;
 	}
 
-	mState = state;
+	doSetState(state);
+}
+
+void LLVoiceChannel::doSetState(const EState& new_state)
+{
+	EState old_state = mState;
+	mState = new_state;
+	if (!mStateChangedCallback.empty())
+		mStateChangedCallback(old_state, mState);
 }
 
 void LLVoiceChannel::toggleCallWindowIfNeeded(EState state)
@@ -620,7 +628,7 @@ void LLVoiceChannelGroup::setState(EState state)
 			gIMMgr->addSystemMessage(mSessionID, "ringing", mNotifyArgs);
 		}
 
-		mState = state;
+		doSetState(state);
 		break;
 	default:
 		LLVoiceChannel::setState(state);
@@ -865,7 +873,7 @@ void LLVoiceChannelP2P::setState(EState state)
 	if (mReceivedCall && state == STATE_RINGING)
 	{
 		gIMMgr->addSystemMessage(mSessionID, "answering", mNotifyArgs);
-		mState = state;
+		doSetState(state);
 		return;
 	}
 	LLVoiceChannel::setState(state);
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index 9966bdd5abf..8f1e9ff02d3 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -52,6 +52,8 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver
 		STATE_CONNECTED
 	} EState;
 
+	typedef boost::function<void(const EState& old_state, const EState& new_state)> state_changed_callback_t;
+
 	LLVoiceChannel(const LLUUID& session_id, const std::string& session_name);
 	virtual ~LLVoiceChannel();
 
@@ -69,6 +71,8 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver
 	virtual BOOL callStarted();
 	const std::string& getSessionName() const { return mSessionName; }
 
+	void setStateChangedCallback(state_changed_callback_t callback) { mStateChangedCallback = callback; }
+
 	const LLUUID getSessionID() { return mSessionID; }
 	EState getState() { return mState; }
 
@@ -85,6 +89,10 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver
 
 protected:
 	virtual void setState(EState state);
+	/**
+	 * Use this method if you want mStateChangedCallback to be executed while state is changed
+	 */
+	void doSetState(const EState& state);
 	void toggleCallWindowIfNeeded(EState state);
 	void setURI(std::string uri);
 
@@ -106,6 +114,9 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver
 	static LLVoiceChannel* sCurrentVoiceChannel;
 	static LLVoiceChannel* sSuspendedVoiceChannel;
 	static BOOL sSuspended;
+
+private:
+	state_changed_callback_t mStateChangedCallback;
 };
 
 class LLVoiceChannelGroup : public LLVoiceChannel
diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
index 24c46b314ff..0246e21d254 100644
--- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
@@ -16,6 +16,7 @@
      opaque="false"
      show_info_btn="false"
      show_profile_btn="false"
+     show_speaking_indicator="false"
      top="10"
      width="180"/>
 
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index 46f34949a83..763dd7b9220 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -16,6 +16,7 @@
      opaque="false"
      show_info_btn="false"
      show_profile_btn="false"
+     show_speaking_indicator="false"
      top="10"
      width="180"/>
 
-- 
GitLab


From 5a2424d01026327ae8eb17ec2b319495c6f5e9b1 Mon Sep 17 00:00:00 2001
From: Vadim Savchuk <vsavchuk@productengine.com>
Date: Wed, 4 Nov 2009 21:45:16 +0200
Subject: [PATCH 129/306] Fixed minor bug EXT-1769 (Edit Pick: '+' icon blinks
 on mouse over)

--HG--
branch : product-engine
---
 indra/newview/llpanelpick.cpp | 24 ++++++++++++++++++++++--
 indra/newview/llpanelpick.h   | 11 +++++++++++
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
index e725479abb5..103f0416865 100644
--- a/indra/newview/llpanelpick.cpp
+++ b/indra/newview/llpanelpick.cpp
@@ -40,6 +40,7 @@
 #include "llagent.h"
 #include "llagentpicksinfo.h"
 #include "llbutton.h"
+#include "lliconctrl.h"
 #include "lllineeditor.h"
 #include "llparcel.h"
 #include "llviewerparcelmgr.h"
@@ -62,6 +63,7 @@
 #define XML_SNAPSHOT	"pick_snapshot"
 #define XML_LOCATION	"pick_location"
 
+#define XML_BTN_ON_TXTR "edit_icon"
 #define XML_BTN_SAVE "save_changes_btn"
 
 #define SAVE_BTN_LABEL "[WHAT]"
@@ -401,8 +403,6 @@ BOOL LLPanelPickEdit::postBuild()
 	LLPanelPickInfo::postBuild();
 
 	mSnapshotCtrl->setOnSelectCallback(boost::bind(&LLPanelPickEdit::onPickChanged, this, _1));
-	mSnapshotCtrl->setMouseEnterCallback(boost::bind(&LLPanelPickEdit::childSetVisible, this, "edit_icon", true));
-	mSnapshotCtrl->setMouseLeaveCallback(boost::bind(&LLPanelPickEdit::childSetVisible, this, "edit_icon", false));
 
 	LLLineEditor* line_edit = getChild<LLLineEditor>("pick_name");
 	line_edit->setKeystrokeCallback(boost::bind(&LLPanelPickEdit::onPickChanged, this, _1), NULL);
@@ -547,3 +547,23 @@ void LLPanelPickEdit::processProperties(void* data, EAvatarProcessorType type)
 		LLPanelPickInfo::processProperties(data, type);
 	}
 }
+
+// PRIVATE AREA
+
+void LLPanelPickEdit::initTexturePickerMouseEvents()
+{
+	text_icon = getChild<LLIconCtrl>(XML_BTN_ON_TXTR);
+	mSnapshotCtrl->setMouseEnterCallback(boost::bind(&LLPanelPickEdit::onTexturePickerMouseEnter, this, _1));
+	mSnapshotCtrl->setMouseLeaveCallback(boost::bind(&LLPanelPickEdit::onTexturePickerMouseLeave, this, _1));
+	text_icon->setVisible(FALSE);
+}
+		
+void LLPanelPickEdit::onTexturePickerMouseEnter(LLUICtrl* ctrl)
+{
+        text_icon->setVisible(TRUE);
+}
+
+void LLPanelPickEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
+{
+	text_icon->setVisible(FALSE);
+}
diff --git a/indra/newview/llpanelpick.h b/indra/newview/llpanelpick.h
index 9b605cd6b1a..2c0830f2ac7 100644
--- a/indra/newview/llpanelpick.h
+++ b/indra/newview/llpanelpick.h
@@ -41,6 +41,7 @@
 #include "llremoteparcelrequest.h"
 #include "llavatarpropertiesprocessor.h"
 
+class LLIconCtrl;
 class LLTextureCtrl;
 class LLMessageSystem;
 class LLAvatarPropertiesObserver;
@@ -236,6 +237,16 @@ class LLPanelPickEdit : public LLPanelPickInfo
 	bool mLocationChanged;
 	bool mNeedData;
 	bool mNewPick;
+
+private:
+
+	void initTexturePickerMouseEvents();
+        void onTexturePickerMouseEnter(LLUICtrl* ctrl);
+	void onTexturePickerMouseLeave(LLUICtrl* ctrl);
+
+private:
+
+	LLIconCtrl* text_icon;
 };
 
 #endif // LL_LLPANELPICK_H
-- 
GitLab


From fe7750152b69aa89731ca95ac59ef402b6df137d Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 4 Nov 2009 14:49:48 -0500
Subject: [PATCH 130/306] Added placeholder art for missing icons.

---
 .../skins/default/textures/icons/Inv_Alpha.png    | Bin 0 -> 253 bytes
 .../skins/default/textures/icons/Inv_Tattoo.png   | Bin 0 -> 253 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/icons/Inv_Alpha.png
 create mode 100644 indra/newview/skins/default/textures/icons/Inv_Tattoo.png

diff --git a/indra/newview/skins/default/textures/icons/Inv_Alpha.png b/indra/newview/skins/default/textures/icons/Inv_Alpha.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8d246c6faf0aeaa4b4ff49b8f28e79cf8c92d52
GIT binary patch
literal 253
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5X=6kw0hE&{2`tkq2Ju_R~|A6@#h6-scf(aiU2HH)~VMt=_
zU}$D&Zn)#VLdL$MrOTe-5vRk>P6a;Y6Db=Qn46iIwRSKZVGQ`jreNkU*`8sOK+1vY
z4Y^Mm`F#RzpJWww(3{ZytDEtaztcL$u*C;hczW6c{&PG0_2r0ZSXIjKGPSW~`yI!O
y4B_Vm9&Z}H8W;v}xbaHxuqhNN&ty<Iz>sk-YU8;#>o)+M%HZkh=d#Wzp$PyS5m?~>

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/Inv_Tattoo.png b/indra/newview/skins/default/textures/icons/Inv_Tattoo.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8d246c6faf0aeaa4b4ff49b8f28e79cf8c92d52
GIT binary patch
literal 253
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5X=6kw0hE&{2`tkq2Ju_R~|A6@#h6-scf(aiU2HH)~VMt=_
zU}$D&Zn)#VLdL$MrOTe-5vRk>P6a;Y6Db=Qn46iIwRSKZVGQ`jreNkU*`8sOK+1vY
z4Y^Mm`F#RzpJWww(3{ZytDEtaztcL$u*C;hczW6c{&PG0_2r0ZSXIjKGPSW~`yI!O
y4B_Vm9&Z}H8W;v}xbaHxuqhNN&ty<Iz>sk-YU8;#>o)+M%HZkh=d#Wzp$PyS5m?~>

literal 0
HcmV?d00001

-- 
GitLab


From c3e9536b6fae9fbd751d4a63e243f502e056175d Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Wed, 4 Nov 2009 11:58:39 -0800
Subject: [PATCH 131/306] updated floater_test_textbox to test case of texbox
 too big for its text removed picture_style from sidepanel_object_info.xml
 made mime_type error notification unique on mime type

reviewed by Leyla
---
 indra/newview/skins/default/xui/en/floater_test_textbox.xml | 4 ++--
 indra/newview/skins/default/xui/en/notifications.xml        | 3 +++
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_test_textbox.xml b/indra/newview/skins/default/xui/en/floater_test_textbox.xml
index f39d27761cd..9e2e9e74e3f 100644
--- a/indra/newview/skins/default/xui/en/floater_test_textbox.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_textbox.xml
@@ -145,11 +145,11 @@
   <text
  type="string"
  length="1"
- bottom="390"
+ height="60" 
  label="N"
  layout="topleft"
  left="10"
- name="centered_text"
+ name="left_aligned_text"
  width="380"
  halign="left"
  text_color="1 1 1 0.7"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index babed28f10e..8679e87f49f 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4629,6 +4629,9 @@ If you want to view streaming media on parcels that support it you should go to
    name="NoPlugin"
    type="notify">
 No Media Plugin was found to handle the "[MIME_TYPE]" mime type.  Media of this type will be unavailable.
+  <unique>
+    <context key="MIME_TYPE" />
+  </unique>
   </notification>
   <notification
    icon="alertmodal.tga"
-- 
GitLab


From 321f5ac36ce04b01bd24d62eb4c7585e83c110f9 Mon Sep 17 00:00:00 2001
From: "Eric M. Tulla (BigPapi)" <tulla@lindenlab.com>
Date: Wed, 4 Nov 2009 15:06:52 -0500
Subject: [PATCH 132/306] Fix for EXT-2050 - Duplicate entries in strings.xml
 Removed all duplicates (verifying their dupe status and removing the second
 example).

---
 .../newview/skins/default/xui/en/strings.xml  | 45 -------------------
 1 file changed, 45 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 0f7e8cb1377..ec2673644f0 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2047,9 +2047,6 @@ this texture in your inventory
 	<!-- panel contents -->
 	<string name="PanelContentsNewScript">New Script</string>
 	
-	<!-- panel avatar -->
-	<!-- <string name="None">None</string>	Duplicate-->
-	
 	<!-- Mute -->
 	<string name="MuteByName">(by name)</string>
 	<string name="MuteAgent">(resident)</string>
@@ -2306,9 +2303,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Body Thick">Body Thick</string>
 <string name="Body Thickness">Body Thickness</string>
 <string name="Body Thin">Body Thin</string>
-<string name="Bottom">Bottom</string>
-<string name="Bottom Left">Bottom Left</string>
-<string name="Bottom Right">Bottom Right</string>
 
 <string name="Bow Legged">Bow Legged</string>
 <string name="Breast Buoyancy">Breast Buoyancy</string>
@@ -2330,13 +2324,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="no bustle">No Bustle</string>
 <string name="more bustle">More Bustle</string>
 
-<string name="Center">Center</string>
-<string name="Center 2">Center 2</string>
 <string name="Chaplin">Chaplin</string>
 <string name="Cheek Bones">Cheek Bones</string>
-<string name="Chest">Chest</string>
 <string name="Chest Size">Chest Size</string>
-<string name="Chin">Chin</string>
 <string name="Chin Angle">Chin Angle</string>
 <string name="Chin Cleft">Chin Cleft</string>
 <string name="Chin Curtains">Chin Curtains</string>
@@ -2500,22 +2490,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Jowls">Jowls</string>
 <string name="Knee Angle">Knee Angle</string>
 <string name="Knock Kneed">Knock Kneed</string>
-<string name="L Forearm">L Forearm</string>
-<string name="L Lower Leg">L Lower Leg</string>
-<string name="L Upper Arm">L Upper Arm</string>
-<string name="L Upper Leg">L Upper Leg</string>
 
 <string name="Large">Large</string>
 <string name="Large Hands">Large Hands</string>
-<string name="Left">Left</string>
-<string name="Left Ear">Left Ear</string>
-<string name="Left Eyeball">Left Eyeball</string>
-<string name="Left Foot">Left Foot</string>
-<string name="Left Hand">Left Hand</string>
-<string name="Left Hip">Left Hip</string>
 <string name="Left Part">Left Part</string>
-<string name="Left Pec">Left Pec</string>
-<string name="Left Shoulder">Left Shoulder</string>
 <string name="Leg Length">Leg Length</string>
 <string name="Leg Muscles">Leg Muscles</string>
 <string name="Less">Less</string>
@@ -2533,7 +2511,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Less Square">Less Square</string>
 <string name="Less Volume">Less Volume</string>
 <string name="Less soul">Less soul</string>
-<string name="Light">Light</string>
 <string name="Lighter">Lighter</string>
 <string name="Lip Cleft">Lip Cleft</string>
 <string name="Lip Cleft Depth">Lip Cleft Depth</string>
@@ -2596,7 +2573,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="More soul">More soul</string>
 <string name="Moustache">Moustache</string>
 
-<string name="Mouth">Mouth</string>
 <string name="Mouth Corner">Mouth Corner</string>
 <string name="Mouth Position">Mouth Position</string>
 <string name="Mowhawk">Mowhawk</string>
@@ -2624,10 +2600,8 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="No Spikes">No Spikes</string>
 <string name="No White">No White</string>
 <string name="No Wrinkles">No Wrinkles</string>
-<string name="None">None</string>
 <string name="Normal Lower">Normal Lower</string>
 <string name="Normal Upper">Normal Upper</string>
-<string name="Nose">Nose</string>
 <string name="Nose Left">Nose Left</string>
 <string name="Nose Right">Nose Right</string>
 <string name="Nose Size">Nose Size</string>
@@ -2667,7 +2641,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Part">Part</string>
 <string name="Part Bangs">Part Bangs</string>
 <string name="Pectorals">Pectorals</string>
-<string name="Pelvis">Pelvis</string>
 <string name="Pigment">Pigment</string>
 <string name="Pigtails">Pigtails</string>
 <string name="Pink">Pink</string>
@@ -2683,24 +2656,12 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Pop Right Eye">Pop Right Eye</string>
 <string name="Puffy">Puffy</string>
 <string name="Puffy Eyelids">Puffy Eyelids</string>
-<string name="R Forearm">R Forearm</string>
-<string name="R Lower Leg">R Lower Leg</string>
-<string name="R Upper Arm">R Upper Arm</string>
-<string name="R Upper Leg">R Upper Leg</string>
 <string name="Rainbow Color">Rainbow Color</string>
 <string name="Red Hair">Red Hair</string>
 <string name="Red Skin">Red Skin</string>
 <string name="Regular">Regular</string>
 <string name="Regular Muscles">Regular Muscles</string>
-<string name="Right">Right</string>
-<string name="Right Ear">Right Ear</string>
-<string name="Right Eyeball">Right Eyeball</string>
-<string name="Right Foot">Right Foot</string>
-<string name="Right Hand">Right Hand</string>
-<string name="Right Hip">Right Hip</string>
 <string name="Right Part">Right Part</string>
-<string name="Right Pec">Right Pec</string>
-<string name="Right Shoulder">Right Shoulder</string>
 <string name="Rosy Complexion">Rosy Complexion</string>
 <string name="Round">Round</string>
 <string name="Round Forehead">Round Forehead</string>
@@ -2757,7 +2718,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Skinny Neck">Skinny Neck</string>
 <string name="Skirt Fit">Skirt Fit</string>
 <string name="Skirt Length">Skirt Length</string>
-<string name="Skull">Skull</string>
 <string name="Slanted Forehead">Slanted Forehead</string>
 <string name="Sleeve Length">Sleeve Length</string>
 
@@ -2780,12 +2740,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 
 <string name="Sparse">Sparse</string>
 <string name="Spiked Hair">Spiked Hair</string>
-<string name="Spine">Spine</string>
 <string name="Square">Square</string>
 <string name="Square Toe">Square Toe</string>
 <string name="Squash Head">Squash Head</string>
 <string name="Squash/Stretch Head">Squash/Stretch Head</string>
-<string name="Stomach">Stomach</string>
 <string name="Stretch Head">Stretch Head</string>
 <string name="Sunken">Sunken</string>
 <string name="Sunken Chest">Sunken Chest</string>
@@ -2817,9 +2775,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Tilt Right">Tilt Right</string>
 <string name="Toe Shape">Toe Shape</string>
 <string name="Toe Thickness">Toe Thickness</string>
-<string name="Top">Top</string>
-<string name="Top Left">Top Left</string>
-<string name="Top Right">Top Right</string>
 <string name="Torso Length">Torso Length</string>
 <string name="Torso Muscles">Torso Muscles</string>
 <string name="Torso Scrawny">Torso Scrawny</string>
-- 
GitLab


From 8c27615aa5c1fc61fa0a5877717699d5df47476d Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Wed, 4 Nov 2009 22:17:23 +0200
Subject: [PATCH 133/306] Implemented normal sub-task EXT-2144 (IM P2p control
 panel should contain avatar name under avatar icon aligned to the left side)

--HG--
branch : product-engine
---
 indra/newview/llpanelimcontrolpanel.cpp        | 18 ++++++++++++++++++
 indra/newview/llpanelimcontrolpanel.h          |  3 +++
 .../default/xui/en/floater_im_session.xml      | 14 +++++++-------
 .../default/xui/en/panel_im_control_panel.xml  | 12 +++++++++++-
 4 files changed, 39 insertions(+), 8 deletions(-)

diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index 80b29c4fa79..76612f2dd1e 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -123,6 +123,8 @@ BOOL LLPanelIMControlPanel::postBuild()
 	childSetAction("teleport_btn", boost::bind(&LLPanelIMControlPanel::onTeleportButtonClicked, this));
 	childSetAction("pay_btn", boost::bind(&LLPanelIMControlPanel::onPayButtonClicked, this));
 	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId()));
+
+	
 	
 	return LLPanelChatControlPanel::postBuild();
 }
@@ -166,6 +168,9 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
 
 	getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(mAvatarID);
 
+	// Fetch the currect name
+	gCacheName->get(mAvatarID, FALSE, boost::bind(&LLPanelIMControlPanel::nameUpdatedCallback, this, _1, _2, _3, _4));
+	llwarns << "gCacheName->get" << llendl;
 	// Disable profile button if participant is not realy SL avatar
 	LLIMModel::LLIMSession* im_session =
 		im_model.findIMSession(session_id);
@@ -173,6 +178,19 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
 		childSetEnabled("view_profile_btn", FALSE);
 }
 
+void LLPanelIMControlPanel::nameUpdatedCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)
+{
+	llwarns << "LLPanelIMControlPanel::nameUpdatedCallback" << llendl;
+	if ( id == mAvatarID )
+	{
+		llwarns << "LLPanelIMControlPanel::nameUpdatedCallback id == mAvatarID" << llendl;
+		std::string avatar_name;
+		avatar_name.assign(first);
+		avatar_name.append(" ");
+		avatar_name.append(last);
+		getChild<LLTextBox>("avatar_name")->setValue(avatar_name);
+	}
+}
 
 LLPanelGroupControlPanel::LLPanelGroupControlPanel(const LLUUID& session_id)
 {
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index 1f38bffb538..ac5d86345e8 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -72,6 +72,9 @@ class LLPanelIMControlPanel : public LLPanelChatControlPanel
 
 	void setSessionId(const LLUUID& session_id);
 
+protected:
+	void nameUpdatedCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group);
+
 private:
 	void onViewProfileButtonClicked();
 	void onAddFriendButtonClicked();
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 1585d976b36..70af2f63b64 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -3,7 +3,7 @@
  legacy_header_height="18"
  background_visible="true"
  follows="left|top|right|bottom"
- height="359"
+ height="369"
  layout="topleft"
  left="0"
  name="panel_im"
@@ -14,10 +14,10 @@
  visible="true" 
  width="520"
  can_resize="true"
- min_width="200"
- min_height="150">
+ min_width="350"
+ min_height="350">
   <layout_stack follows="left|top|right|bottom"
-                height="344"
+                height="354"
                 width="520"
                 layout="topleft"
                 orientation="horizontal"
@@ -28,12 +28,12 @@
       name="panel_im_control_panel"
       layout="topleft"
       top_delta="-3"
-      height="344"
+      height="354"
       follows="left"
       label="IM Control Panel"
       auto_resize="false"
       user_resize="false" />
-    <layout_panel height="344"
+    <layout_panel height="354"
                   width="355"
                   left_delta="146" 
                   top="0"
@@ -56,7 +56,7 @@
        length="1"
        follows="left|top|right|bottom"
        font="SansSerif"
-       height="290"
+       height="300"
        layout="topleft"
        name="chat_history"
        parse_highlights="true"
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index f77a2ec730d..c8b134cdf0d 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  border="false"
- height="327"
+ height="350"
  name="panel_im_control_panel"
  width="131">
 
@@ -13,6 +13,16 @@
      top="-10"
      width="125"/>
 
+    <text
+     follows="left|right"
+     font="SansSerifBig"
+     height="16"
+     layout="topleft"
+     name="avatar_name"
+     use_ellipses="true"
+     value="Unknown"
+     width="125" />
+
     <button
      follows="left|bottom"
      height="20"
-- 
GitLab


From eca4416855b97ee017e55581616b8e4aa0c5e4d4 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Wed, 4 Nov 2009 12:22:06 -0800
Subject: [PATCH 134/306] reverted uniqueness constraint on mime_type errors
 due to bug in notifications uniqueness filtering

---
 indra/newview/skins/default/xui/en/notifications.xml | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 8679e87f49f..babed28f10e 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4629,9 +4629,6 @@ If you want to view streaming media on parcels that support it you should go to
    name="NoPlugin"
    type="notify">
 No Media Plugin was found to handle the "[MIME_TYPE]" mime type.  Media of this type will be unavailable.
-  <unique>
-    <context key="MIME_TYPE" />
-  </unique>
   </notification>
   <notification
    icon="alertmodal.tga"
-- 
GitLab


From 98a24938b3cd95f7c93283b91dc95582925265f5 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 4 Nov 2009 15:28:07 -0500
Subject: [PATCH 135/306] LLAppearanceManager::wearItem() - always check for
 extra links of same type, even if requested object is already linked.

---
 indra/newview/llappearancemgr.cpp | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 382947e4647..033df053ad9 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -1103,14 +1103,16 @@ void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update )
 	bool linked_already = false;
 	for (S32 i=0; i<item_array.count(); i++)
 	{
+		// Are these links to the same object?
 		const LLViewerInventoryItem* inv_item = item_array.get(i).get();
 		if (inv_item->getLinkedUUID() == item->getLinkedUUID())
 		{
 			linked_already = true;
-			break;
 		}
-		// Are of same type but are not the same - new item will replace old.
-		if (areMatchingWearables(vitem,inv_item))
+		// Are these links to different items of the same wearable
+		// type? If so, new item will replace old.
+		// MULTI-WEARABLES: revisit if more than one per type is allowed.
+		else if (areMatchingWearables(vitem,inv_item))
 		{
 			gAgentWearables.removeWearable(inv_item->getWearableType(),true,0);
 			gInventory.purgeObject(inv_item->getUUID());
-- 
GitLab


From 179f18d1ab5cc93509339684029cf7e4fe0b3eaa Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 4 Nov 2009 20:34:11 +0000
Subject: [PATCH 136/306] LLTalkButton -> LLSpeakButton, 'cos that's what it
 is.

---
 indra/newview/CMakeLists.txt      |   4 +-
 indra/newview/llbottomtray.cpp    |   2 +-
 indra/newview/llbottomtray.h      |   4 +-
 indra/newview/llchiclet.h         |  36 ------
 indra/newview/llnearbychatbar.cpp |  10 +-
 indra/newview/llnearbychatbar.h   |   4 +-
 indra/newview/llspeakbutton.cpp   | 196 ++++++++++++++++++++++++++++++
 indra/newview/llspeakbutton.h     |  81 ++++++++++++
 8 files changed, 289 insertions(+), 48 deletions(-)
 create mode 100644 indra/newview/llspeakbutton.cpp
 create mode 100644 indra/newview/llspeakbutton.h

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index b989f0c2306..03bf41b1181 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -376,6 +376,7 @@ set(viewer_SOURCE_FILES
     llsky.cpp
     llslurl.cpp
     llspatialpartition.cpp
+    llspeakbutton.cpp
     llspeakers.cpp
     llsplitbutton.cpp
     llsprite.cpp
@@ -386,7 +387,6 @@ set(viewer_SOURCE_FILES
     llsurfacepatch.cpp
     llsyswellitem.cpp
     llsyswellwindow.cpp
-    lltalkbutton.cpp
     llteleporthistory.cpp
     llteleporthistorystorage.cpp
     lltexglobalcolor.cpp
@@ -862,6 +862,7 @@ set(viewer_HEADER_FILES
     llsky.h
     llslurl.h
     llspatialpartition.h
+    llspeakbutton.h
     llspeakers.h
     llsplitbutton.h
     llsprite.h
@@ -873,7 +874,6 @@ set(viewer_HEADER_FILES
     llsyswellitem.h
     llsyswellwindow.h    
     lltable.h
-    lltalkbutton.h
     llteleporthistory.h
     llteleporthistorystorage.h
     lltexglobalcolor.h
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index ddcee5f4536..a17ba79078b 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -47,7 +47,7 @@
 LLBottomTray::LLBottomTray(const LLSD&)
 :	mChicletPanel(NULL),
 	mSysWell(NULL),
-	mTalkBtn(NULL),
+	mSpeakBtn(NULL),
 	mNearbyChatBar(NULL),
 	mToolbarStack(NULL)
 
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index a28f1e42ecd..02588a1975f 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -43,7 +43,7 @@ class LLChicletPanel;
 class LLLineEditor;
 class LLLayoutStack;
 class LLNotificationChiclet;
-class LLTalkButton;
+class LLSpeakButton;
 class LLNearbyChatBar;
 class LLIMChiclet;
 
@@ -110,7 +110,7 @@ class LLBottomTray
 
 	LLChicletPanel* 	mChicletPanel;
 	LLNotificationChiclet* 	mSysWell;
-	LLTalkButton* 		mTalkBtn;
+	LLSpeakButton* 		mSpeakBtn;
 	LLNearbyChatBar*	mNearbyChatBar;
 	LLLayoutStack*		mToolbarStack;
 	LLMenuGL*			mBottomTrayContextMenu;
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index 6eefd9829f1..e84111c53a6 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -833,42 +833,6 @@ class LLChicletPanel : public LLPanel
 	bool mShowControls;
 };
 
-/*
- * Button displaying voice chat status. Displays voice chat options When clicked.
-*/
-class LLTalkButton : public LLUICtrl
-{
-public:
-
-	struct Params :	public LLInitParam::Block<Params, LLUICtrl::Params>
-	{
-		Optional<LLButton::Params>	speak_button,
-									show_button;
-
-		Optional<LLOutputMonitorCtrl::Params> monitor;
-
-		Params();
-	};
-
-	/*virtual*/ ~LLTalkButton();
-
-	void setSpeakBtnToggleState(bool state);
-
-protected:
-	friend class LLUICtrlFactory;
-	LLTalkButton(const Params& p);
-
-	void onClick_SpeakBtn();
-
-	void onClick_ShowBtn();
-
-private:
-	LLButton*	mSpeakBtn;
-	LLButton*	mShowBtn;
-	LLVoiceControlPanel* mPrivateCallPanel;
-	LLOutputMonitorCtrl* mOutputMonitor;
-};
-
 template<class T> 
 T* LLChicletPanel::createChiclet(const LLUUID& session_id, S32 index)
 {
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 730939861b2..7c26264c9dc 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -36,7 +36,7 @@
 #include "lltrans.h"
 
 #include "llnearbychatbar.h"
-#include "lltalkbutton.h"
+#include "llspeakbutton.h"
 #include "llbottomtray.h"
 #include "llagent.h"
 #include "llgesturemgr.h"
@@ -229,11 +229,11 @@ BOOL LLNearbyChatBar::postBuild()
 
 	mOutputMonitor = getChild<LLOutputMonitorCtrl>("chat_zone_indicator");
 	mOutputMonitor->setVisible(FALSE);
-	mTalkBtn = getParent()->getChild<LLTalkButton>("talk");
+	mSpeakBtn = getParent()->getChild<LLSpeakButton>("talk");
 
 	// Speak button should be initially disabled because
 	// it takes some time between logging in to world and connecting to voice channel.
-	mTalkBtn->setEnabled(FALSE);
+	mSpeakBtn->setEnabled(FALSE);
 
 	// Registering Chat Bar to receive Voice client status change notifications.
 	gVoiceClient->addObserver(this);
@@ -692,7 +692,7 @@ LLWString LLNearbyChatBar::stripChannelNumber(const LLWString &mesg, S32* channe
 
 void LLNearbyChatBar::setPTTState(bool state)
 {
-	mTalkBtn->setSpeakBtnToggleState(state);
+	mSpeakBtn->setSpeakBtnToggleState(state);
 }
 
 void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel)
@@ -748,7 +748,7 @@ void LLNearbyChatBar::onChange(EStatusType status, const std::string &channelURI
 		break;
 	}
 
-	mTalkBtn->setEnabled(enable);
+	mSpeakBtn->setEnabled(enable);
 }
 
 // Creating the object registers with the dispatcher.
diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h
index 3fa1d3ea8ac..9645c6b4689 100644
--- a/indra/newview/llnearbychatbar.h
+++ b/indra/newview/llnearbychatbar.h
@@ -42,7 +42,7 @@
 #include "llspeakers.h"
 
 
-class LLTalkButton;
+class LLSpeakButton;
 
 
 class LLGestureComboBox
@@ -128,7 +128,7 @@ class LLNearbyChatBar
 	static S32 sLastSpecialChatChannel;
 
 	LLLineEditor*		mChatBox;
-	LLTalkButton*		mTalkBtn;
+	LLSpeakButton*		mSpeakBtn;
 	LLOutputMonitorCtrl* mOutputMonitor;
 	LLActiveSpeakerMgr  mSpeakerMgr;
 };
diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp
new file mode 100644
index 00000000000..c03495ada7b
--- /dev/null
+++ b/indra/newview/llspeakbutton.cpp
@@ -0,0 +1,196 @@
+/** 
+* @file llspeakbutton.cpp
+* @brief LLSpeakButton class implementation
+*
+* $LicenseInfo:firstyear=2002&license=viewergpl$
+* 
+* Copyright (c) 2002-2009, Linden Research, Inc.
+* 
+* Second Life Viewer Source Code
+* The source code in this file ("Source Code") is provided by Linden Lab
+* to you under the terms of the GNU General Public License, version 2.0
+* ("GPL"), unless you have obtained a separate licensing agreement
+* ("Other License"), formally executed by you and Linden Lab.  Terms of
+* the GPL can be found in doc/GPL-license.txt in this distribution, or
+* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+* 
+* There are special exceptions to the terms and conditions of the GPL as
+* it is applied to this Source Code. View the full text of the exception
+* in the file doc/FLOSS-exception.txt in this software distribution, or
+* online at
+* http://secondlifegrid.net/programs/open_source/licensing/flossexception
+* 
+* By copying, modifying or distributing this software, you acknowledge
+* that you have read and understood your obligations described above,
+* and agree to abide by those obligations.
+* 
+* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+* COMPLETENESS OR PERFORMANCE.
+* $/LicenseInfo$
+*/
+
+#include "llviewerprecompiledheaders.h" // must be first include
+
+#include "llagent.h"
+#include "llbottomtray.h"
+#include "llfloaterreg.h"
+#include "llvoiceclient.h"
+#include "llvoicecontrolpanel.h"
+#include "lltransientfloatermgr.h"
+
+#include "llavatariconctrl.h"
+#include "llbutton.h"
+#include "llpanel.h"
+#include "lltextbox.h"
+#include "lloutputmonitorctrl.h"
+#include "llgroupmgr.h"
+
+#include "llspeakbutton.h"
+
+static LLDefaultChildRegistry::Register<LLSpeakButton> t1("chiclet_talk");
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLSpeakButton::Params::Params()
+ : speak_button("speak_button")
+ , show_button("show_button")
+ , monitor("monitor")
+{
+	// *TODO Vadim: move hardcoded labels (!) and other params to XUI.
+	speak_button.name("left");
+	speak_button.label("Speak");
+	speak_button.label_selected("Speak");
+	speak_button.font(LLFontGL::getFontSansSerifSmall());
+	speak_button.tab_stop(false);
+	speak_button.is_toggle(true);
+	speak_button.picture_style(true);
+	// Use default button art. JC
+	//speak_button.image_selected(LLUI::getUIImage("SegmentedBtn_Left_Selected"));
+	//speak_button.image_unselected(LLUI::getUIImage("SegmentedBtn_Left_Off"));
+
+	show_button.name("right");
+	show_button.label(LLStringUtil::null);
+	show_button.rect(LLRect(0, 0, 20, 0));
+	show_button.tab_stop(false);
+	show_button.is_toggle(true);
+	show_button.picture_style(true);
+	show_button.image_selected(LLUI::getUIImage("ComboButton_Selected"));
+	show_button.image_unselected(LLUI::getUIImage("ComboButton_Off"));
+
+	monitor.name("monitor");
+	// *TODO: Make this data driven.
+	monitor.rect(LLRect(0, 18, 18, 0));
+}
+
+LLSpeakButton::LLSpeakButton(const Params& p)
+: LLUICtrl(p)
+, mPrivateCallPanel(NULL)
+, mOutputMonitor(NULL)
+, mSpeakBtn(NULL)
+, mShowBtn(NULL)
+{
+	LLRect rect = p.rect();
+	LLRect speak_rect(0, rect.getHeight(), rect.getWidth(), 0);
+	LLRect show_rect = p.show_button.rect();
+	show_rect.set(0, rect.getHeight(), show_rect.getWidth(), 0);
+
+	speak_rect.mRight -= show_rect.getWidth();
+	show_rect.mLeft = speak_rect.getWidth();
+	show_rect.mRight = rect.getWidth();
+
+	LLButton::Params speak_params = p.speak_button;
+	speak_params.rect(speak_rect);
+	mSpeakBtn = LLUICtrlFactory::create<LLButton>(speak_params);
+	addChild(mSpeakBtn);
+	LLTransientFloaterMgr::getInstance()->addControlView(mSpeakBtn);
+
+	mSpeakBtn->setClickedCallback(boost::bind(&LLSpeakButton::onClick_SpeakBtn, this));
+	mSpeakBtn->setToggleState(FALSE);
+
+	LLButton::Params show_params = p.show_button;
+	show_params.rect(show_rect);
+	mShowBtn = LLUICtrlFactory::create<LLButton>(show_params);
+	addChild(mShowBtn);
+	LLTransientFloaterMgr::getInstance()->addControlView(mShowBtn);
+
+	mShowBtn->setClickedCallback(boost::bind(&LLSpeakButton::onClick_ShowBtn, this));
+	mShowBtn->setToggleState(FALSE);
+
+	static const S32 MONITOR_RIGHT_PAD = 2;
+
+	LLRect monitor_rect = p.monitor.rect();
+	S32 monitor_height = monitor_rect.getHeight();
+	monitor_rect.mLeft = speak_rect.getWidth() - monitor_rect.getWidth() - MONITOR_RIGHT_PAD;
+	monitor_rect.mRight = speak_rect.getWidth() - MONITOR_RIGHT_PAD;
+	monitor_rect.mBottom = (rect.getHeight() / 2) - (monitor_height / 2);
+	monitor_rect.mTop = monitor_rect.mBottom + monitor_height;
+
+	LLOutputMonitorCtrl::Params monitor_params = p.monitor;
+	monitor_params.draw_border(false);
+	monitor_params.rect(monitor_rect);
+	monitor_params.auto_update(true);
+	monitor_params.speaker_id(gAgentID);
+	mOutputMonitor = LLUICtrlFactory::create<LLOutputMonitorCtrl>(monitor_params);
+	mSpeakBtn->addChild(mOutputMonitor);
+
+	// never show "muted" because you can't mute yourself
+	mOutputMonitor->setIsMuted(false);
+}
+
+LLSpeakButton::~LLSpeakButton()
+{
+}
+
+void LLSpeakButton::setSpeakBtnToggleState(bool state)
+{
+	mSpeakBtn->setToggleState(state);
+}
+
+void LLSpeakButton::onClick_SpeakBtn()
+{
+	bool speaking = mSpeakBtn->getToggleState();
+	gVoiceClient->setUserPTTState(speaking);
+}
+
+void LLSpeakButton::onClick_ShowBtn()
+{
+	if(!mShowBtn->getToggleState())
+	{
+		mPrivateCallPanel->onClickClose(mPrivateCallPanel);
+		delete mPrivateCallPanel;
+		mPrivateCallPanel = NULL;
+		mShowBtn->setToggleState(FALSE);
+		return;
+	}
+
+	S32 x = mSpeakBtn->getRect().mLeft;
+	S32 y = 0;
+
+	localPointToScreen(x, y, &x, &y);
+
+	mPrivateCallPanel = new LLVoiceControlPanel;
+	getRootView()->addChild(mPrivateCallPanel);
+
+	y = LLBottomTray::getInstance()->getRect().getHeight() + mPrivateCallPanel->getRect().getHeight();
+
+	LLRect rect;
+	rect.setLeftTopAndSize(x, y, mPrivateCallPanel->getRect().getWidth(), mPrivateCallPanel->getRect().getHeight());
+	mPrivateCallPanel->setRect(rect);
+
+
+	LLAvatarListItem* item = new LLAvatarListItem();
+	item->showLastInteractionTime(false);
+	item->showInfoBtn(true);
+	item->showSpeakingIndicator(true);
+	item->reshape(mPrivateCallPanel->getRect().getWidth(), item->getRect().getHeight(), FALSE);
+
+	mPrivateCallPanel->addItem(item);
+	mPrivateCallPanel->setVisible(TRUE);
+	mPrivateCallPanel->setFrontmost(TRUE);
+
+	mShowBtn->setToggleState(TRUE);
+}
+
diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h
new file mode 100644
index 00000000000..f1d15ebd707
--- /dev/null
+++ b/indra/newview/llspeakbutton.h
@@ -0,0 +1,81 @@
+/** 
+* @file llspeakbutton.h
+* @brief LLSpeakButton class header file
+*
+* $LicenseInfo:firstyear=2002&license=viewergpl$
+* 
+* Copyright (c) 2002-2009, Linden Research, Inc.
+* 
+* Second Life Viewer Source Code
+* The source code in this file ("Source Code") is provided by Linden Lab
+* to you under the terms of the GNU General Public License, version 2.0
+* ("GPL"), unless you have obtained a separate licensing agreement
+* ("Other License"), formally executed by you and Linden Lab.  Terms of
+* the GPL can be found in doc/GPL-license.txt in this distribution, or
+* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+* 
+* There are special exceptions to the terms and conditions of the GPL as
+* it is applied to this Source Code. View the full text of the exception
+* in the file doc/FLOSS-exception.txt in this software distribution, or
+* online at
+* http://secondlifegrid.net/programs/open_source/licensing/flossexception
+* 
+* By copying, modifying or distributing this software, you acknowledge
+* that you have read and understood your obligations described above,
+* and agree to abide by those obligations.
+* 
+* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+* COMPLETENESS OR PERFORMANCE.
+* $/LicenseInfo$
+*/
+
+#ifndef LL_LLSPEAKBUTTON_H
+#define LL_LLSPEAKBUTTON_H
+
+#include "llinitparam.h"
+#include "lluictrl.h"
+
+class LLVoiceControlPanel;
+class LLButton;
+class LLOutputMonitorCtrl;
+
+/*
+ * Button displaying voice chat status. Displays voice chat options when
+ * clicked.
+*/
+class LLSpeakButton : public LLUICtrl
+{
+public:
+
+	struct Params :	public LLInitParam::Block<Params, LLUICtrl::Params>
+	{
+		Optional<LLButton::Params>
+			speak_button,
+			show_button;
+
+		Optional<LLOutputMonitorCtrl::Params> monitor;
+
+		Params();
+	};
+
+	/*virtual*/ ~LLSpeakButton();
+
+	void setSpeakBtnToggleState(bool state);
+
+protected:
+	friend class LLUICtrlFactory;
+	LLSpeakButton(const Params& p);
+
+	void onClick_SpeakBtn();
+
+	void onClick_ShowBtn();
+
+private:
+	LLButton*	mSpeakBtn;
+	LLButton*	mShowBtn;
+	LLVoiceControlPanel* mPrivateCallPanel;
+	LLOutputMonitorCtrl* mOutputMonitor;
+};
+
+#endif // LL_LLSPEAKBUTTON_H
-- 
GitLab


From 15df55ecafd2f6d72f25988401ddb7ed58030b79 Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Wed, 4 Nov 2009 22:37:46 +0200
Subject: [PATCH 137/306] No ticket, removed unnecessary warnings from
 3d35bc1f0cc6 commit.

--HG--
branch : product-engine
---
 indra/newview/llpanelimcontrolpanel.cpp | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index 76612f2dd1e..c9168670d5c 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -170,7 +170,7 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
 
 	// Fetch the currect name
 	gCacheName->get(mAvatarID, FALSE, boost::bind(&LLPanelIMControlPanel::nameUpdatedCallback, this, _1, _2, _3, _4));
-	llwarns << "gCacheName->get" << llendl;
+
 	// Disable profile button if participant is not realy SL avatar
 	LLIMModel::LLIMSession* im_session =
 		im_model.findIMSession(session_id);
@@ -180,10 +180,8 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
 
 void LLPanelIMControlPanel::nameUpdatedCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)
 {
-	llwarns << "LLPanelIMControlPanel::nameUpdatedCallback" << llendl;
 	if ( id == mAvatarID )
 	{
-		llwarns << "LLPanelIMControlPanel::nameUpdatedCallback id == mAvatarID" << llendl;
 		std::string avatar_name;
 		avatar_name.assign(first);
 		avatar_name.append(" ");
-- 
GitLab


From ec9da605c120b9df648eb163dc8647f955275f5f Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Wed, 4 Nov 2009 16:25:13 -0500
Subject: [PATCH 138/306] EXT-2216 : Task properties sidepanel

Subclassing sidepanel item/task info with llsidepanelinventorysubpanel.
Some bug fixing and cleanup.

--HG--
branch : avatar-pipeline
---
 indra/newview/CMakeLists.txt                  |   2 +
 indra/newview/llsidepanelinventory.cpp        |   5 +-
 .../newview/llsidepanelinventorysubpanel.cpp  | 155 ++++++++++++++++++
 indra/newview/llsidepanelinventorysubpanel.h  |  82 +++++++++
 indra/newview/llsidepaneliteminfo.cpp         | 104 +-----------
 indra/newview/llsidepaneliteminfo.h           |  34 +---
 indra/newview/llsidepaneltaskinfo.cpp         |  61 ++++---
 indra/newview/llsidepaneltaskinfo.h           |  17 +-
 8 files changed, 305 insertions(+), 155 deletions(-)
 create mode 100644 indra/newview/llsidepanelinventorysubpanel.cpp
 create mode 100644 indra/newview/llsidepanelinventorysubpanel.h

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index c490c31393c..b3de276e9c5 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -370,6 +370,7 @@ set(viewer_SOURCE_FILES
     llsearchhistory.cpp
     llselectmgr.cpp
     llsidepanelinventory.cpp
+    llsidepanelinventorysubpanel.cpp
     llsidepaneliteminfo.cpp
     llsidepaneltaskinfo.cpp
     llsidetray.cpp
@@ -856,6 +857,7 @@ set(viewer_HEADER_FILES
     llsearchhistory.h
     llselectmgr.h
     llsidepanelinventory.h
+    llsidepanelinventorysubpanel.h
     llsidepaneliteminfo.h
     llsidepaneltaskinfo.h
     llsidetray.h
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 9b67bc701da..c4779cd29a8 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -186,7 +186,7 @@ void LLSidepanelInventory::showItemInfoPanel()
 	mInventoryPanel->setVisible(FALSE);
 
 	mItemPanel->dirty();
-	mItemPanel->setEditMode(FALSE);
+	mItemPanel->setIsEditing(FALSE);
 }
 
 void LLSidepanelInventory::showTaskInfoPanel()
@@ -194,6 +194,9 @@ void LLSidepanelInventory::showTaskInfoPanel()
 	mItemPanel->setVisible(FALSE);
 	mTaskPanel->setVisible(TRUE);
 	mInventoryPanel->setVisible(FALSE);
+
+	mTaskPanel->dirty();
+	mTaskPanel->setIsEditing(FALSE);
 }
 
 void LLSidepanelInventory::showInventoryPanel()
diff --git a/indra/newview/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp
new file mode 100644
index 00000000000..85224567771
--- /dev/null
+++ b/indra/newview/llsidepanelinventorysubpanel.cpp
@@ -0,0 +1,155 @@
+/** 
+ * @file llsidepanelinventorysubpanel.cpp
+ * @brief A floater which shows an inventory item's properties.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llsidepanelinventorysubpanel.h"
+
+#include "roles_constants.h"
+
+#include "llagent.h"
+#include "llavataractions.h"
+#include "llbutton.h"
+#include "llfloaterreg.h"
+#include "llgroupactions.h"
+#include "llinventorymodel.h"
+#include "lllineeditor.h"
+#include "llradiogroup.h"
+#include "llviewercontrol.h"
+#include "llviewerinventory.h"
+#include "llviewerobjectlist.h"
+
+
+///----------------------------------------------------------------------------
+/// Class LLSidepanelInventorySubpanel
+///----------------------------------------------------------------------------
+
+// Default constructor
+LLSidepanelInventorySubpanel::LLSidepanelInventorySubpanel()
+  : LLPanel(),
+	mIsDirty(TRUE),
+	mIsEditing(FALSE),
+	mEditBtn(NULL),
+	mCancelBtn(NULL),
+	mSaveBtn(NULL)
+{
+}
+
+// Destroys the object
+LLSidepanelInventorySubpanel::~LLSidepanelInventorySubpanel()
+{
+}
+
+// virtual
+BOOL LLSidepanelInventorySubpanel::postBuild()
+{
+	mEditBtn = getChild<LLButton>("edit_btn");
+	mEditBtn->setClickedCallback(boost::bind(&LLSidepanelInventorySubpanel::onEditButtonClicked, this));
+
+	mSaveBtn = getChild<LLButton>("save_btn");
+	mSaveBtn->setClickedCallback(boost::bind(&LLSidepanelInventorySubpanel::onSaveButtonClicked, this));
+
+	mCancelBtn = getChild<LLButton>("cancel_btn");
+	mCancelBtn->setClickedCallback(boost::bind(&LLSidepanelInventorySubpanel::onCancelButtonClicked, this));
+	return TRUE;
+}
+
+void LLSidepanelInventorySubpanel::setVisible(BOOL visible)
+{
+	if (visible)
+	{
+		dirty();
+		setIsEditing(FALSE);
+	}
+	LLPanel::setVisible(visible);
+}
+
+void LLSidepanelInventorySubpanel::setIsEditing(BOOL edit)
+{
+	mIsEditing = edit;
+	mIsDirty = TRUE;
+}
+
+BOOL LLSidepanelInventorySubpanel::getIsEditing() const
+{
+	return mIsEditing;
+}
+
+void LLSidepanelInventorySubpanel::reset()
+{
+	mIsDirty = TRUE;
+}
+
+void LLSidepanelInventorySubpanel::draw()
+{
+	if (mIsDirty)
+	{
+		mIsDirty = FALSE;
+		refresh();
+		updateVerbs();
+	}
+
+	LLPanel::draw();
+}
+
+void LLSidepanelInventorySubpanel::dirty()
+{
+	mIsDirty = TRUE;
+}
+
+void LLSidepanelInventorySubpanel::updateVerbs()
+{
+	mEditBtn->setVisible(!mIsEditing);
+	mSaveBtn->setVisible(mIsEditing);
+	mCancelBtn->setVisible(mIsEditing);
+}
+
+void LLSidepanelInventorySubpanel::onEditButtonClicked()
+{
+	setIsEditing(TRUE);
+	refresh();
+	updateVerbs();
+}
+
+void LLSidepanelInventorySubpanel::onSaveButtonClicked()
+{
+	save();
+	setIsEditing(FALSE);
+	refresh();
+	updateVerbs();
+}
+
+void LLSidepanelInventorySubpanel::onCancelButtonClicked()
+{
+	setIsEditing(FALSE);
+	refresh();
+	updateVerbs();
+}
diff --git a/indra/newview/llsidepanelinventorysubpanel.h b/indra/newview/llsidepanelinventorysubpanel.h
new file mode 100644
index 00000000000..6503887cd1a
--- /dev/null
+++ b/indra/newview/llsidepanelinventorysubpanel.h
@@ -0,0 +1,82 @@
+/** 
+ * @file llsidepanelinventorysubpanel.h
+ * @brief A panel which shows an inventory item's properties.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSIDEPANELINVENTORYSUBPANEL_H
+#define LL_LLSIDEPANELINVENTORYSUBPANEL_H
+
+#include "llpanel.h"
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLSidepanelInventorySubpanel
+// Base class for inventory sidepanel panels (e.g. item info, task info).
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLButton;
+class LLInventoryItem;
+
+class LLSidepanelInventorySubpanel : public LLPanel
+{
+public:
+	LLSidepanelInventorySubpanel();
+	virtual ~LLSidepanelInventorySubpanel();
+
+	/*virtual*/ void setVisible(BOOL visible);
+	virtual BOOL postBuild();
+	virtual void draw();
+	virtual void reset();
+
+	void dirty();
+	void setIsEditing(BOOL edit);
+protected:
+	virtual void refresh() = 0;
+	virtual void save() = 0;
+	virtual void updateVerbs();
+	
+	BOOL getIsEditing() const;
+	
+	//
+	// UI Elements
+	// 
+protected:
+	void 						onEditButtonClicked();
+	void 						onSaveButtonClicked();
+	void 						onCancelButtonClicked();
+	LLButton*					mEditBtn;
+	LLButton*					mSaveBtn;
+	LLButton*					mCancelBtn;
+
+private:
+	BOOL mIsDirty; 		// item properties need to be updated
+	BOOL mIsEditing; 	// if we're in edit mode
+};
+
+#endif // LL_LLSIDEPANELINVENTORYSUBPANEL_H
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index c857afc6527..d36ffc9a9cc 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -89,10 +89,7 @@ static LLRegisterPanelClassWrapper<LLSidepanelItemInfo> t_item_info("sidepanel_i
 
 // Default constructor
 LLSidepanelItemInfo::LLSidepanelItemInfo()
-  : LLPanel(),
-	mItemID(LLUUID::null),
-	mDirty(TRUE),
-	mEditMode(FALSE)
+  : mItemID(LLUUID::null)
 {
 	mPropertiesObserver = new LLItemPropertiesObserver(this);
 	
@@ -109,14 +106,7 @@ LLSidepanelItemInfo::~LLSidepanelItemInfo()
 // virtual
 BOOL LLSidepanelItemInfo::postBuild()
 {
-	mEditBtn = getChild<LLButton>("edit_btn");
-	mEditBtn->setClickedCallback(boost::bind(&LLSidepanelItemInfo::onEditButtonClicked, this));
-
-	mSaveBtn = getChild<LLButton>("save_btn");
-	mSaveBtn->setClickedCallback(boost::bind(&LLSidepanelItemInfo::onSaveButtonClicked, this));
-
-	mCancelBtn = getChild<LLButton>("cancel_btn");
-	mCancelBtn->setClickedCallback(boost::bind(&LLSidepanelItemInfo::onCancelButtonClicked, this));
+	LLSidepanelInventorySubpanel::postBuild();
 
 	// build the UI
 	// item name & description
@@ -131,42 +121,10 @@ BOOL LLSidepanelItemInfo::postBuild()
 	// owner information
 	getChild<LLUICtrl>("BtnOwner")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickOwner,this));
 
-	// acquired date
-	// owner permissions
-	// Permissions debug text
-	// group permissions
-	// getChild<LLUICtrl>("CheckShareWithGroup")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
-
-	// everyone permissions
-	// getChild<LLUICtrl>("CheckEveryoneCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
-
-	// next owner permissions
-	// getChild<LLUICtrl>("CheckNextOwnerModify")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
-	// getChild<LLUICtrl>("CheckNextOwnerCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
-	// getChild<LLUICtrl>("CheckNextOwnerTransfer")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
-
-	// Mark for sale or not, and sale info
-	// getChild<LLUICtrl>("CheckPurchase")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));
-	// getChild<LLUICtrl>("RadioSaleType")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleType, this));
-	
-	// "Price" label for edit
-	// getChild<LLUICtrl>("Edit Cost")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));
-
-	// The UI has been built, now fill in all the values
 	refresh();
-
 	return TRUE;
 }
 
-void LLSidepanelItemInfo::setVisible(BOOL visible)
-{
-	if (visible)
-	{
-		mDirty = TRUE;
-	}
-	LLPanel::setVisible(visible);
-}
-
 void LLSidepanelItemInfo::setObjectID(const LLUUID& object_id)
 {
 	mObjectID = object_id;
@@ -177,17 +135,12 @@ void LLSidepanelItemInfo::setItemID(const LLUUID& item_id)
 	mItemID = item_id;
 }
 
-void LLSidepanelItemInfo::setEditMode(BOOL edit)
-{
-	mEditMode = edit;
-	mDirty = TRUE;
-}
-
 void LLSidepanelItemInfo::reset()
 {
+	LLSidepanelInventorySubpanel::reset();
+
 	mObjectID = LLUUID::null;
 	mItemID = LLUUID::null;
-	mDirty = TRUE;
 }
 
 void LLSidepanelItemInfo::refresh()
@@ -199,13 +152,8 @@ void LLSidepanelItemInfo::refresh()
 		updateVerbs();
 	}
 
-	if (!mEditMode || !item)
+	if (!getIsEditing() || !item)
 	{
-		//RN: it is possible that the container object is in the middle of an inventory refresh
-		// causing findItem() to fail, so just temporarily disable everything
-		
-		mDirty = TRUE;
-
 		const std::string no_item_names[]={
 			"LabelItemName",
 			"LabelItemDesc",
@@ -257,22 +205,6 @@ void LLSidepanelItemInfo::refresh()
 	updateVerbs();
 }
 
-void LLSidepanelItemInfo::draw()
-{
-	if (mDirty)
-	{
-		mDirty = FALSE;
-		refresh();
-	}
-
-	LLPanel::draw();
-}
-
-void LLSidepanelItemInfo::dirty()
-{
-	mDirty = TRUE;
-}
-
 void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item)
 {
 	////////////////////////
@@ -916,11 +848,10 @@ LLInventoryItem* LLSidepanelItemInfo::findItem() const
 	return item;
 }
 
+// virtual
 void LLSidepanelItemInfo::updateVerbs()
 {
-	mEditBtn->setVisible(!mEditMode);
-	mSaveBtn->setVisible(mEditMode);
-	mCancelBtn->setVisible(mEditMode);
+	LLSidepanelInventorySubpanel::updateVerbs();
 
 	const LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
 	if (item)
@@ -932,29 +863,12 @@ void LLSidepanelItemInfo::updateVerbs()
 	}
 }
 
-void LLSidepanelItemInfo::onEditButtonClicked()
-{
-	setEditMode(TRUE);
-	refresh();
-	updateVerbs();
-}
-
-void LLSidepanelItemInfo::onSaveButtonClicked()
+// virtual
+void LLSidepanelItemInfo::save()
 {
 	onCommitName();
 	onCommitDescription();
 	onCommitPermissions();
 	onCommitSaleInfo();
 	onCommitSaleType();
-
-	setEditMode(FALSE);
-	refresh();
-	updateVerbs();
-}
-
-void LLSidepanelItemInfo::onCancelButtonClicked()
-{
-	setEditMode(FALSE);
-	refresh();
-	updateVerbs();
 }
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h
index 9f5ab402eab..b348b5cceba 100644
--- a/indra/newview/llsidepaneliteminfo.h
+++ b/indra/newview/llsidepaneliteminfo.h
@@ -33,10 +33,7 @@
 #ifndef LL_LLSIDEPANELITEMINFO_H
 #define LL_LLSIDEPANELITEMINFO_H
 
-#include <map>
-#include "llmultifloater.h"
-#include "lliconctrl.h"
-#include "llpermissions.h"
+#include "llsidepanelinventorysubpanel.h"
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLSidepanelItemInfo
@@ -47,38 +44,34 @@ class LLButton;
 class LLInventoryItem;
 class LLItemPropertiesObserver;
 class LLViewerObject;
+class LLPermissions;
 
-class LLSidepanelItemInfo : public LLPanel
+class LLSidepanelItemInfo : public LLSidepanelInventorySubpanel
 {
 public:
 	LLSidepanelItemInfo();
 	virtual ~LLSidepanelItemInfo();
 	
 	/*virtual*/ BOOL postBuild();
-	/*virtual*/ void setVisible(BOOL visible);
-	/*virtual*/ void draw();
+	/*virtual*/ void reset();
 
 	void setObjectID(const LLUUID& object_id);
 	void setItemID(const LLUUID& item_id);
 	void setEditMode(BOOL edit);
 
-	void reset();
-	void dirty();
-
 protected:
+	/*virtual*/ void refresh();
+	/*virtual*/ void save();
+	/*virtual*/ void updateVerbs();
+
 	LLInventoryItem* findItem() const;
 	LLViewerObject*  findObject() const;
-	void refresh();
+	
 	void refreshFromItem(LLInventoryItem* item);
-	void refreshFromPermissions(const LLPermissions& perm);
-	void updateVerbs();
-	BOOL isUpdatingObject() const;
 
 private:
 	LLUUID mItemID; 	// inventory UUID for the inventory item.
 	LLUUID mObjectID; 	// in-world task UUID, or null if in agent inventory.
-	BOOL mDirty; 		// item properties need to be updated
-	BOOL mEditMode; 	// if we're in edit mode
 	LLItemPropertiesObserver* mPropertiesObserver; // for syncing changes to item
 	
 	//
@@ -93,15 +86,6 @@ class LLSidepanelItemInfo : public LLPanel
 	void 						onCommitSaleInfo();
 	void 						onCommitSaleType();
 	void 						updateSaleInfo();
-
-protected:
-	void 						onEditButtonClicked();
-	void 						onSaveButtonClicked();
-	void 						onCancelButtonClicked();
-private:
-	LLButton*					mEditBtn;
-	LLButton*					mSaveBtn;
-	LLButton*					mCancelBtn;
 };
 
 #endif // LL_LLSIDEPANELITEMINFO_H
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index 203fc35187b..3608e2c097e 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -73,14 +73,22 @@
 static LLRegisterPanelClassWrapper<LLSidepanelTaskInfo> t_task_info("sidepanel_task_info");
 
 // Default constructor
-LLSidepanelTaskInfo::LLSidepanelTaskInfo() :
-	LLPanel()
+LLSidepanelTaskInfo::LLSidepanelTaskInfo()
 {
 	setMouseOpaque(FALSE);
 }
 
 BOOL LLSidepanelTaskInfo::postBuild()
 {
+	LLSidepanelInventorySubpanel::postBuild();
+
+	mOpenBtn = getChild<LLButton>("open_btn");
+	mOpenBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onOpenButtonClicked, this));
+	mBuildBtn = getChild<LLButton>("build_btn");
+	mBuildBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onBuildButtonClicked, this));
+	mBuyBtn = getChild<LLButton>("buy_btn");
+	mBuyBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onBuyButtonClicked, this));
+
 	childSetCommitCallback("Object Name",LLSidepanelTaskInfo::onCommitName,this);
 	childSetPrevalidate("Object Name",LLLineEditor::prevalidatePrintableNotPipe);
 	childSetCommitCallback("Object Description",LLSidepanelTaskInfo::onCommitDesc,this);
@@ -114,26 +122,6 @@ BOOL LLSidepanelTaskInfo::postBuild()
 	return TRUE;
 }
 
-void LLSidepanelTaskInfo::setVisible(BOOL visible)
-{
-	if (visible)
-	{
-		mDirty = TRUE;
-	}
-	LLPanel::setVisible(visible);
-}
-
-void LLSidepanelTaskInfo::draw()
-{
-	if (mDirty)
-	{
-		mDirty = FALSE;
-		refresh();
-	}
-
-	LLPanel::draw();
-}
-
 LLSidepanelTaskInfo::~LLSidepanelTaskInfo()
 {
 	// base class will take care of everything
@@ -800,6 +788,8 @@ void LLSidepanelTaskInfo::refresh()
 	}
 	childSetEnabled("label click action",is_perm_modify && all_volume);
 	childSetEnabled("clickaction",is_perm_modify && all_volume);
+
+	updateVerbs();
 }
 
 
@@ -1064,3 +1054,30 @@ void LLSidepanelTaskInfo::onCommitIncludeInSearch(LLUICtrl* ctrl, void*)
 	LLSelectMgr::getInstance()->selectionSetIncludeInSearch(box->get());
 }
 
+// virtual
+void LLSidepanelTaskInfo::updateVerbs()
+{
+	LLSidepanelInventorySubpanel::updateVerbs();
+
+	mOpenBtn->setVisible(!getIsEditing());
+	mBuildBtn->setVisible(!getIsEditing());
+	mBuyBtn->setVisible(!getIsEditing());
+}
+
+void LLSidepanelTaskInfo::onOpenButtonClicked()
+{
+}
+
+void LLSidepanelTaskInfo::onBuildButtonClicked()
+{
+}
+
+void LLSidepanelTaskInfo::onBuyButtonClicked()
+{
+}
+
+// virtual
+void LLSidepanelTaskInfo::save()
+{
+}
+
diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h
index 2b9b4b66b6b..aea65c11706 100644
--- a/indra/newview/llsidepaneltaskinfo.h
+++ b/indra/newview/llsidepaneltaskinfo.h
@@ -33,7 +33,7 @@
 #ifndef LL_LLSIDEPANELTASKINFO_H
 #define LL_LLSIDEPANELTASKINFO_H
 
-#include "llpanel.h"
+#include "llsidepanelinventorysubpanel.h"
 #include "lluuid.h"
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -44,18 +44,18 @@
 
 class LLNameBox;
 
-class LLSidepanelTaskInfo : public LLPanel
+class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel
 {
 public:
 	LLSidepanelTaskInfo();
 	virtual ~LLSidepanelTaskInfo();
 
 	/*virtual*/	BOOL postBuild();
-	/*virtual*/ void draw();
-	/*virtual*/ void setVisible(BOOL visible);
 
 protected:
-	void refresh();							// refresh all labels as needed
+	/*virtual*/ void refresh();	// refresh all labels as needed
+	/*virtual*/ void save();
+	/*virtual*/ void updateVerbs();
 
 	// statics
 	static void onClickClaim(void*);
@@ -91,19 +91,12 @@ class LLSidepanelTaskInfo : public LLPanel
 	LLUUID			mCreatorID;
 	LLUUID			mOwnerID;
 	LLUUID			mLastOwnerID;
-	BOOL mDirty; 		// item properties need to be updated
 
 protected:
-	void 						onEditButtonClicked();
-	void 						onSaveButtonClicked();
-	void 						onCancelButtonClicked();
 	void 						onOpenButtonClicked();
 	void 						onBuildButtonClicked();
 	void 						onBuyButtonClicked();
 private:
-	LLButton*					mEditBtn;
-	LLButton*					mSaveBtn;
-	LLButton*					mCancelBtn;
 	LLButton*					mOpenBtn;
 	LLButton*					mBuildBtn;
 	LLButton*					mBuyBtn;
-- 
GitLab


From b806edf4ac47d18e1a43fb8dbb5fbcad8d13192f Mon Sep 17 00:00:00 2001
From: Bryan O'Sullivan <bos@lindenlab.com>
Date: Wed, 4 Nov 2009 14:59:23 -0800
Subject: [PATCH 139/306] Redo Bao's broken merge

---
 indra/llcommon/CMakeLists.txt                 |   2 +
 indra/llcommon/llassettype.cpp                | 154 +--
 indra/llcommon/llassettype.h                  |  62 +-
 indra/llcommon/llfoldertype.cpp               | 165 +++
 indra/llcommon/llfoldertype.h                 | 123 +++
 indra/llinventory/llinventory.cpp             |  62 +-
 indra/llinventory/llinventory.h               |  13 +-
 indra/llinventory/llinventorytype.cpp         |  34 -
 indra/llinventory/llinventorytype.h           |   3 +-
 .../llinventory/tests/inventorymisc_test.cpp  |   4 +-
 indra/llmessage/lltransfersourceasset.cpp     |   1 -
 indra/llprimitive/llmediaentry.cpp            |   1 +
 indra/llprimitive/tests/llmediaentry_test.cpp | 116 ++-
 indra/llui/llfloater.cpp                      |   6 +
 indra/llui/llfloater.h                        |   3 +
 indra/llui/llfloaterreg.cpp                   |   3 +-
 indra/newview/CMakeLists.txt                  |  10 +-
 indra/newview/app_settings/foldertypes.xml    |  25 +-
 indra/newview/llagentpicksinfo.cpp            |   3 +-
 indra/newview/llagentui.cpp                   |   5 +-
 indra/newview/llagentwearables.cpp            |  17 +-
 indra/newview/llappearancemgr.cpp             |  24 +-
 indra/newview/llassetuploadresponders.cpp     |   2 +-
 indra/newview/llavataractions.cpp             |   4 +-
 indra/newview/llavatarlist.cpp                |  35 +
 indra/newview/llavatarlist.h                  |   7 +
 indra/newview/llchiclet.cpp                   |  38 +-
 indra/newview/llfavoritesbar.cpp              |   6 +-
 indra/newview/llfloateranimpreview.cpp        |   2 +-
 indra/newview/llfloaterbulkpermission.cpp     |   1 -
 indra/newview/llfloaterbuy.cpp                |   2 +-
 indra/newview/llfloaterbuycontents.cpp        |   2 +-
 indra/newview/llfloaterinventory.cpp          |   1 +
 indra/newview/llfloaterinventory.h            |   1 +
 indra/newview/llfloaternamedesc.cpp           |   2 +-
 indra/newview/llfloateropenobject.cpp         |   4 +-
 indra/newview/llfloaterreporter.cpp           |   4 +-
 indra/newview/llfloatersnapshot.cpp           |   2 +-
 indra/newview/llfloaterworldmap.cpp           |   2 +-
 indra/newview/llfolderview.cpp                |   5 +-
 indra/newview/llfolderview.h                  |   2 +-
 indra/newview/llfoldervieweventlistener.h     |   3 +-
 indra/newview/llfolderviewitem.cpp            |  10 +-
 indra/newview/llfriendcard.cpp                |   8 +-
 indra/newview/llimfloater.cpp                 |   7 +-
 indra/newview/llinspectavatar.cpp             |  19 +-
 indra/newview/llinventorybridge.cpp           |  95 +-
 indra/newview/llinventorybridge.h             |   8 +-
 indra/newview/llinventoryfunctions.cpp        |   4 -
 indra/newview/llinventorymodel.cpp            |  63 +-
 indra/newview/llinventorymodel.h              |  13 +-
 indra/newview/llinventorypanel.cpp            |  30 +-
 indra/newview/llinventorypanel.h              |   2 +-
 indra/newview/lllandmarkactions.cpp           |  14 +-
 indra/newview/lllandmarkactions.h             |   2 +-
 indra/newview/llnavigationbar.cpp             |   7 +
 indra/newview/llnavigationbar.h               |   1 +
 indra/newview/llnearbychat.cpp                |  37 +-
 indra/newview/llnearbychat.h                  |   7 +-
 indra/newview/llnearbychatbar.cpp             |   9 +-
 indra/newview/llnearbychatbar.h               |   2 +-
 indra/newview/lloutputmonitorctrl.cpp         |  12 +-
 indra/newview/lloutputmonitorctrl.h           |   3 +
 indra/newview/llpanelcontents.cpp             |   3 +-
 indra/newview/llpanelimcontrolpanel.cpp       |  35 +-
 indra/newview/llpanelimcontrolpanel.h         |   3 +
 indra/newview/llpanellandmarkinfo.cpp         | 437 ++++++++
 indra/newview/llpanellandmarkinfo.h           |  85 ++
 indra/newview/llpanellandmarks.cpp            |  33 +-
 indra/newview/llpanelmaininventory.cpp        |   4 +-
 indra/newview/llpanelobjectinventory.cpp      |  14 +-
 indra/newview/llpanelpeople.cpp               |  67 +-
 indra/newview/llpanelpeople.h                 |   6 +
 indra/newview/llpanelplaceinfo.cpp            | 931 +----------------
 indra/newview/llpanelplaceinfo.h              | 146 +--
 indra/newview/llpanelplaceprofile.cpp         | 541 ++++++++++
 indra/newview/llpanelplaceprofile.h           | 114 ++
 indra/newview/llpanelplaces.cpp               | 231 +++--
 indra/newview/llpanelplaces.h                 |  11 +-
 indra/newview/llpanelprofileview.h            |  14 +
 indra/newview/llparticipantlist.cpp           | 110 +-
 indra/newview/llparticipantlist.h             |  58 +-
 indra/newview/llpreview.cpp                   |   5 +-
 indra/newview/llpreviewgesture.cpp            |   4 +-
 indra/newview/llresourcedata.h                |   3 +-
 indra/newview/llselectmgr.cpp                 |   2 +-
 indra/newview/llstartup.cpp                   |   6 +-
 indra/newview/lltexturectrl.cpp               |   4 +-
 indra/newview/lltoastgroupnotifypanel.cpp     |   1 -
 indra/newview/lltooldraganddrop.cpp           |  21 +-
 indra/newview/llviewerassettype.cpp           | 114 ++
 indra/newview/llviewerassettype.h             |  54 +
 indra/newview/llviewerfoldertype.cpp          | 263 +++++
 indra/newview/llviewerfoldertype.h            |  57 +
 indra/newview/llviewerinventory.cpp           | 112 +-
 indra/newview/llviewerinventory.h             |   4 +-
 indra/newview/llviewermenu.cpp                |  13 +-
 indra/newview/llviewermenufile.cpp            |  16 +-
 indra/newview/llviewermenufile.h              |   6 +-
 indra/newview/llviewermessage.cpp             |  42 +-
 indra/newview/llviewertexteditor.cpp          |  20 +-
 indra/newview/llvoavatarself.cpp              |  35 +-
 indra/newview/llwearable.cpp                  |   2 +-
 .../default/textures/inv_folder_inbox.tga     | Bin 0 -> 2085 bytes
 .../default/xui/en/floater_im_session.xml     |  22 +-
 .../skins/default/xui/en/inspect_avatar.xml   |  12 +
 .../xui/en/menu_inspect_avatar_gear.xml       |  15 +-
 .../default/xui/en/menu_inspect_self_gear.xml |   7 +-
 .../xui/en/panel_adhoc_control_panel.xml      |   5 +-
 .../skins/default/xui/en/panel_bottomtray.xml |   4 +-
 .../xui/en/panel_group_control_panel.xml      |   6 +-
 .../default/xui/en/panel_group_general.xml    |   6 +-
 .../xui/en/panel_group_info_sidetray.xml      | 141 ++-
 .../default/xui/en/panel_group_land_money.xml | 207 ++--
 .../default/xui/en/panel_group_notices.xml    | 243 ++---
 .../default/xui/en/panel_group_roles.xml      | 503 +++------
 .../default/xui/en/panel_im_control_panel.xml |  27 +-
 .../default/xui/en/panel_landmark_info.xml    | 257 +++++
 .../skins/default/xui/en/panel_landmarks.xml  |  18 +-
 .../default/xui/en/panel_nearby_chat_bar.xml  |   6 +-
 .../skins/default/xui/en/panel_pick_info.xml  |   2 +-
 .../default/xui/en/panel_place_profile.xml    | 979 ++++++++++++++++++
 .../skins/default/xui/en/panel_places.xml     |  18 +-
 .../skins/default/xui/en/panel_profile.xml    |   2 +-
 .../default/xui/en/panel_profile_view.xml     |   2 +-
 .../xui/en/widgets/gesture_combo_box.xml      |  10 +-
 .../default/xui/en/widgets/talk_button.xml    |  37 +
 127 files changed, 4882 insertions(+), 2588 deletions(-)
 create mode 100644 indra/llcommon/llfoldertype.cpp
 create mode 100644 indra/llcommon/llfoldertype.h
 create mode 100644 indra/newview/llpanellandmarkinfo.cpp
 create mode 100644 indra/newview/llpanellandmarkinfo.h
 create mode 100644 indra/newview/llpanelplaceprofile.cpp
 create mode 100644 indra/newview/llpanelplaceprofile.h
 create mode 100644 indra/newview/llviewerassettype.cpp
 create mode 100644 indra/newview/llviewerassettype.h
 create mode 100644 indra/newview/llviewerfoldertype.cpp
 create mode 100644 indra/newview/llviewerfoldertype.h
 create mode 100644 indra/newview/skins/default/textures/inv_folder_inbox.tga
 create mode 100644 indra/newview/skins/default/xui/en/panel_landmark_info.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_place_profile.xml
 create mode 100644 indra/newview/skins/default/xui/en/widgets/talk_button.xml

diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index e7aaf3c984d..f7856986121 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -50,6 +50,7 @@ set(llcommon_SOURCE_FILES
     llfile.cpp
     llfindlocale.cpp
     llfixedbuffer.cpp
+    llfoldertype.cpp
     llformat.cpp
     llframetimer.cpp
     llheartbeat.cpp
@@ -150,6 +151,7 @@ set(llcommon_HEADER_FILES
     llfile.h
     llfindlocale.h
     llfixedbuffer.h
+    llfoldertype.h
     llformat.h
     llframetimer.h
     llhash.h
diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp
index b2a92861cc3..6d5b12d840b 100644
--- a/indra/llcommon/llassettype.cpp
+++ b/indra/llcommon/llassettype.cpp
@@ -43,30 +43,21 @@
 struct AssetEntry : public LLDictionaryEntry
 {
 	AssetEntry(const char *desc_name,
-			   const char *type_name, // 8 character limit!
-			   const char *human_name, // for decoding to human readable form; put any and as many printable characters you want in each one
-			   const char *category_name, // used by llinventorymodel when creating new categories
-			   EDragAndDropType dad_type,
-			   bool can_link, // can you create a link to this type?
-			   bool is_protected) // can the viewer change categories of this type?
+			   const char *type_name, 	// 8 character limit!
+			   const char *human_name, 	// for decoding to human readable form; put any and as many printable characters you want in each one
+			   bool can_link) 			// can you create a link to this type?
 		:
 		LLDictionaryEntry(desc_name),
 		mTypeName(type_name),
 		mHumanName(human_name),
-		mCategoryName(category_name),
-		mDadType(dad_type),
-		mCanLink(can_link),
-		mIsProtected(is_protected)
+		mCanLink(can_link)
 	{
 		llassert(strlen(mTypeName) <= 8);
 	}
 
 	const char *mTypeName;
 	const char *mHumanName;
-	const char *mCategoryName;
-	EDragAndDropType mDadType;
 	bool mCanLink;
-	bool mIsProtected;
 };
 
 class LLAssetDictionary : public LLSingleton<LLAssetDictionary>,
@@ -78,48 +69,32 @@ class LLAssetDictionary : public LLSingleton<LLAssetDictionary>,
 
 LLAssetDictionary::LLAssetDictionary()
 {
-	//       												   DESCRIPTION			TYPE NAME	HUMAN NAME			CATEGORY NAME 		DRAG&DROP		CAN LINK?	PROTECTED?
-	//      												  |--------------------|-----------|-------------------|-------------------|---------------|-----------|-----------|
-	addEntry(LLAssetType::AT_TEXTURE, 			new AssetEntry("TEXTURE",			"texture",	"texture",			"Textures", 		DAD_TEXTURE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_SOUND, 			new AssetEntry("SOUND",				"sound",	"sound",			"Sounds", 			DAD_SOUND,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_CALLINGCARD, 		new AssetEntry("CALLINGCARD",		"callcard",	"calling card",		"Calling Cards", 	DAD_CALLINGCARD, TRUE,		TRUE));
-	addEntry(LLAssetType::AT_LANDMARK, 			new AssetEntry("LANDMARK",			"landmark",	"landmark",			"Landmarks", 		DAD_LANDMARK,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_SCRIPT, 			new AssetEntry("SCRIPT",			"script",	"legacy script",	"Scripts", 			DAD_NONE,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_CLOTHING, 			new AssetEntry("CLOTHING",			"clothing",	"clothing",			"Clothing", 		DAD_CLOTHING,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_OBJECT, 			new AssetEntry("OBJECT",			"object",	"object",			"Objects", 			DAD_OBJECT,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_NOTECARD, 			new AssetEntry("NOTECARD",			"notecard",	"note card",		"Notecards", 		DAD_NOTECARD,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_CATEGORY, 			new AssetEntry("CATEGORY",			"category",	"folder",			"New Folder", 		DAD_CATEGORY,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_ROOT_CATEGORY, 	new AssetEntry("ROOT_CATEGORY",		"root",		"root",				"Inventory", 		DAD_ROOT_CATEGORY, TRUE,	TRUE));
-	addEntry(LLAssetType::AT_LSL_TEXT, 			new AssetEntry("LSL_TEXT",			"lsltext",	"lsl2 script",		"Scripts", 			DAD_SCRIPT,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_LSL_BYTECODE, 		new AssetEntry("LSL_BYTECODE",		"lslbyte",	"lsl bytecode",		"Scripts", 			DAD_NONE,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_TEXTURE_TGA, 		new AssetEntry("TEXTURE_TGA",		"txtr_tga",	"tga texture",		"Uncompressed Images", DAD_NONE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_BODYPART, 			new AssetEntry("BODYPART",			"bodypart",	"body part",		"Body Parts", 		DAD_BODYPART,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_TRASH, 			new AssetEntry("TRASH",				"trash",	"trash",			"Trash", 			DAD_NONE,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_SNAPSHOT_CATEGORY, new AssetEntry("SNAPSHOT_CATEGORY", "snapshot",	"snapshot",			"Photo Album", 		DAD_NONE,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_LOST_AND_FOUND, 	new AssetEntry("LOST_AND_FOUND", 	"lstndfnd",	"lost and found",	"Lost And Found", 	DAD_NONE,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_SOUND_WAV, 		new AssetEntry("SOUND_WAV",			"snd_wav",	"sound",			"Uncompressed SoundS", DAD_NONE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_IMAGE_TGA, 		new AssetEntry("IMAGE_TGA",			"img_tga",	"targa image",		"Uncompressed Images", DAD_NONE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_IMAGE_JPEG, 		new AssetEntry("IMAGE_JPEG",		"jpeg",		"jpeg image",		"Uncompressed Images", DAD_NONE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_ANIMATION, 		new AssetEntry("ANIMATION",			"animatn",	"animation",		"Animations", 		DAD_ANIMATION,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_GESTURE, 			new AssetEntry("GESTURE",			"gesture",	"gesture",			"Gestures", 		DAD_GESTURE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_SIMSTATE, 			new AssetEntry("SIMSTATE",			"simstate",	"simstate",			"New Folder", 		DAD_NONE,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_FAVORITE, 			new AssetEntry("FAVORITE",			"favorite",	"favorite",			"favorite", 		DAD_NONE,		FALSE,		TRUE));
-
-	addEntry(LLAssetType::AT_LINK, 				new AssetEntry("LINK",				"link",		"symbolic link",	"Link", 			DAD_LINK,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_LINK_FOLDER, 		new AssetEntry("FOLDER_LINK",		"link_f", 	"symbolic folder link", "New Folder", 	DAD_LINK,		FALSE,		TRUE));
-
-	for (S32 ensemble_num = S32(LLAssetType::AT_FOLDER_ENSEMBLE_START); 
-		 ensemble_num <= S32(LLAssetType::AT_FOLDER_ENSEMBLE_END); 
-		 ensemble_num++)
-	{
-		addEntry(LLAssetType::EType(ensemble_num), new AssetEntry("ENSEMBLE",		"ensemble", "ensemble", 		"New Folder", 		DAD_CATEGORY,	FALSE,		FALSE)); 
-	}
-
-	addEntry(LLAssetType::AT_CURRENT_OUTFIT, 	new AssetEntry("CURRENT",			"current",	"current outfit",	"Current Look", 	DAD_CATEGORY,	FALSE,		TRUE));
-	addEntry(LLAssetType::AT_OUTFIT, 			new AssetEntry("OUTFIT",			"outfit",	"outfit",			"New Look", 		DAD_CATEGORY,	FALSE,		FALSE));
-	addEntry(LLAssetType::AT_MY_OUTFITS, 		new AssetEntry("MY_OUTFITS",		"my_otfts",	"my outfits",		"My Looks", 		DAD_CATEGORY,	FALSE,		TRUE));
-		 
-	addEntry(LLAssetType::AT_NONE, 				new AssetEntry("NONE",				"-1",		NULL,		  		"New Folder", 		DAD_NONE,		FALSE,		FALSE));
+	//       												   DESCRIPTION			TYPE NAME	HUMAN NAME			CAN LINK?	
+	//      												  |--------------------|-----------|-------------------|-----------|
+	addEntry(LLAssetType::AT_TEXTURE, 			new AssetEntry("TEXTURE",			"texture",	"texture",			FALSE));
+	addEntry(LLAssetType::AT_SOUND, 			new AssetEntry("SOUND",				"sound",	"sound",			FALSE));
+	addEntry(LLAssetType::AT_CALLINGCARD, 		new AssetEntry("CALLINGCARD",		"callcard",	"calling card",		FALSE));
+	addEntry(LLAssetType::AT_LANDMARK, 			new AssetEntry("LANDMARK",			"landmark",	"landmark",			FALSE));
+	addEntry(LLAssetType::AT_SCRIPT, 			new AssetEntry("SCRIPT",			"script",	"legacy script",	FALSE));
+	addEntry(LLAssetType::AT_CLOTHING, 			new AssetEntry("CLOTHING",			"clothing",	"clothing",			TRUE));
+	addEntry(LLAssetType::AT_OBJECT, 			new AssetEntry("OBJECT",			"object",	"object",			TRUE));
+	addEntry(LLAssetType::AT_NOTECARD, 			new AssetEntry("NOTECARD",			"notecard",	"note card",		FALSE));
+	addEntry(LLAssetType::AT_CATEGORY, 			new AssetEntry("CATEGORY",			"category",	"folder",			TRUE));
+	addEntry(LLAssetType::AT_LSL_TEXT, 			new AssetEntry("LSL_TEXT",			"lsltext",	"lsl2 script",		FALSE));
+	addEntry(LLAssetType::AT_LSL_BYTECODE, 		new AssetEntry("LSL_BYTECODE",		"lslbyte",	"lsl bytecode",		FALSE));
+	addEntry(LLAssetType::AT_TEXTURE_TGA, 		new AssetEntry("TEXTURE_TGA",		"txtr_tga",	"tga texture",		FALSE));
+	addEntry(LLAssetType::AT_BODYPART, 			new AssetEntry("BODYPART",			"bodypart",	"body part",		TRUE));
+	addEntry(LLAssetType::AT_SOUND_WAV, 		new AssetEntry("SOUND_WAV",			"snd_wav",	"sound",			FALSE));
+	addEntry(LLAssetType::AT_IMAGE_TGA, 		new AssetEntry("IMAGE_TGA",			"img_tga",	"targa image",		FALSE));
+	addEntry(LLAssetType::AT_IMAGE_JPEG, 		new AssetEntry("IMAGE_JPEG",		"jpeg",		"jpeg image",		FALSE));
+	addEntry(LLAssetType::AT_ANIMATION, 		new AssetEntry("ANIMATION",			"animatn",	"animation",		FALSE));
+	addEntry(LLAssetType::AT_GESTURE, 			new AssetEntry("GESTURE",			"gesture",	"gesture",			TRUE));
+	addEntry(LLAssetType::AT_SIMSTATE, 			new AssetEntry("SIMSTATE",			"simstate",	"simstate",			FALSE));
+
+	addEntry(LLAssetType::AT_LINK, 				new AssetEntry("LINK",				"link",		"symbolic link",	FALSE));
+	addEntry(LLAssetType::AT_LINK_FOLDER, 		new AssetEntry("FOLDER_LINK",		"link_f", 	"symbolic folder link", FALSE));
+
+	addEntry(LLAssetType::AT_NONE, 				new AssetEntry("NONE",				"-1",		NULL,		  		FALSE));
 };
 
 // static
@@ -140,8 +115,7 @@ const std::string &LLAssetType::getDesc(LLAssetType::EType asset_type)
 	}
 	else
 	{
-		static const std::string error_string = "BAD TYPE";
-		return error_string;
+		return badLookup();
 	}
 }
 
@@ -156,7 +130,7 @@ const char *LLAssetType::lookup(LLAssetType::EType asset_type)
 	}
 	else
 	{
-		return "-1";
+		return badLookup().c_str();
 	}
 }
 
@@ -166,6 +140,7 @@ LLAssetType::EType LLAssetType::lookup(const char* name)
 	return lookup(ll_safe_string(name));
 }
 
+// static
 LLAssetType::EType LLAssetType::lookup(const std::string& type_name)
 {
 	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
@@ -193,7 +168,7 @@ const char *LLAssetType::lookupHumanReadable(LLAssetType::EType asset_type)
 	}
 	else
 	{
-		return NULL;
+		return badLookup().c_str();
 	}
 }
 
@@ -203,6 +178,7 @@ LLAssetType::EType LLAssetType::lookupHumanReadable(const char* name)
 	return lookupHumanReadable(ll_safe_string(name));
 }
 
+// static
 LLAssetType::EType LLAssetType::lookupHumanReadable(const std::string& readable_name)
 {
 	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
@@ -219,32 +195,6 @@ LLAssetType::EType LLAssetType::lookupHumanReadable(const std::string& readable_
 	return AT_NONE;
 }
 
-// static
-const char *LLAssetType::lookupCategoryName(LLAssetType::EType asset_type)
-{
-	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
-	const AssetEntry *entry = dict->lookup(asset_type);
-	if (entry)
-	{
-		return entry->mCategoryName;
-	}
-	else
-	{
-		return "New Folder";
-	}
-}
-
-// static
-EDragAndDropType LLAssetType::lookupDragAndDropType(EType asset_type)
-{
-	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
-	const AssetEntry *entry = dict->lookup(asset_type);
-	if (entry)
-		return entry->mDadType;
-	else
-		return DAD_NONE;
-}
-
 // static
 bool LLAssetType::lookupCanLink(EType asset_type)
 {
@@ -269,37 +219,9 @@ bool LLAssetType::lookupIsLinkType(EType asset_type)
 }
 
 // static
-// Only ensembles and plain folders aren't protected.  "Protected" means
-// you can't change certain properties such as their type.
-bool LLAssetType::lookupIsProtectedCategoryType(EType asset_type)
+const std::string &LLAssetType::badLookup()
 {
-	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
-	const AssetEntry *entry = dict->lookup(asset_type);
-	if (entry)
-	{
-		return entry->mIsProtected;
-	}
-	return true;
-}
+	static const std::string sBadLookup = "llassettype_bad_lookup";
+	return sBadLookup;
 
-// static
-bool LLAssetType::lookupIsEnsembleCategoryType(EType asset_type)
-{
-	return (asset_type >= AT_FOLDER_ENSEMBLE_START &&
-			asset_type <= AT_FOLDER_ENSEMBLE_END);
-}
-
-
-// static. Generate a good default description
-void LLAssetType::generateDescriptionFor(LLAssetType::EType asset_type,
-										 std::string& description)
-{
-	const S32 BUF_SIZE = 30;
-	char time_str[BUF_SIZE];	/* Flawfinder: ignore */
-	time_t now;
-	time(&now);
-	memset(time_str, '\0', BUF_SIZE);
-	strftime(time_str, BUF_SIZE - 1, "%Y-%m-%d %H:%M:%S ", localtime(&now));
-	description.assign(time_str);
-	description.append(LLAssetType::lookupHumanReadable(asset_type));
 }
diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h
index 3c760e4d917..ec2290d30e8 100644
--- a/indra/llcommon/llassettype.h
+++ b/indra/llcommon/llassettype.h
@@ -94,18 +94,6 @@ class LL_COMMON_API LLAssetType
 		AT_BODYPART = 13,
 			// A collection of textures and parameters that can be worn by an avatar.
 
-		AT_TRASH = 14,
-			// Only to be used as a marker for a category preferred type. 
-			// Using this, we can throw things in the trash before completely deleting.
-
-		AT_SNAPSHOT_CATEGORY = 15,
-			// A marker for a folder meant for snapshots. 
-			// No actual assets will be snapshots, though if there were, you
-			// could interpret them as textures.
-
-		AT_LOST_AND_FOUND = 16,
-			// Used to stuff lost&found items into.
-
 		AT_SOUND_WAV = 17,
 			// Uncompressed sound.
 
@@ -126,38 +114,22 @@ class LL_COMMON_API LLAssetType
 		AT_SIMSTATE = 22,
 			// Simstate file.
 
-		AT_FAVORITE = 23,
-			// favorite items
-
 		AT_LINK = 24,
 			// Inventory symbolic link
 
 		AT_LINK_FOLDER = 25,
 			// Inventory folder link
-
-		AT_FOLDER_ENSEMBLE_START = 26,
-		AT_FOLDER_ENSEMBLE_END = 45,
-			// This range is reserved for special clothing folder types.
-
-		AT_CURRENT_OUTFIT = 46,
-			// Current outfit
-
-		AT_OUTFIT = 47,
-			// Predefined outfit ("look")
-
-		AT_MY_OUTFITS = 48,
-			// Folder that holds your outfits.
-
 		
-		AT_COUNT = 49,
+		AT_COUNT = 26,
 
 			// +*********************************************************+
 			// |  TO ADD AN ELEMENT TO THIS ENUM:                        |
 			// +*********************************************************+
 			// | 1. INSERT BEFORE AT_COUNT                               |
 			// | 2. INCREMENT AT_COUNT BY 1                              |
-			// | 3. ADD TO LLAssetDictionary in LLAssetType.cpp          |
-			// | 3. ADD TO DEFAULT_ASSET_FOR_INV in LLInventoryType.cpp  |
+			// | 3. ADD TO LLAssetType.cpp                               |
+			// | 4. ADD TO LLViewerAssetType.cpp                         |
+			// | 5. ADD TO DEFAULT_ASSET_FOR_INV in LLInventoryType.cpp  |
 			// +*********************************************************+
 
 		AT_NONE = -1
@@ -173,33 +145,17 @@ class LL_COMMON_API LLAssetType
 	static EType 				lookupHumanReadable(const std::string& readable_name);
 	static const char*			lookupHumanReadable(EType asset_type);
 
-	// Generate a good default description. You may want to add a verb
-	// or agent name after this depending on your application.
-	static void 				generateDescriptionFor(LLAssetType::EType asset_type,
-													   std::string& description);
-
 	static EType 				getType(const std::string& desc_name);
 	static const std::string&	getDesc(EType asset_type);
-	static EDragAndDropType   	lookupDragAndDropType(EType asset_type);
 
 	static bool 				lookupCanLink(EType asset_type);
 	static bool 				lookupIsLinkType(EType asset_type);
 
-	static const char*  		lookupCategoryName(EType asset_type);
-	static bool 				lookupIsProtectedCategoryType(EType asset_type);
-	static bool 				lookupIsEnsembleCategoryType(EType asset_type);
-
-	/* TODO: Change return types from "const char *" to "const std::string &".
-	This is fairly straightforward, but requires changing some calls to use .c_str().
-	e.g.:
-	-	fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
-	+	fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType).c_str());
-	*/
-	
-private:
-	// don't instantiate or derive one of these objects
-	LLAssetType( void ) {}
-	~LLAssetType( void ) {}
+	static const std::string&	badLookup(); // error string when a lookup fails
+
+protected:
+	LLAssetType() {}
+	~LLAssetType() {}
 };
 
 #endif // LL_LLASSETTYPE_H
diff --git a/indra/llcommon/llfoldertype.cpp b/indra/llcommon/llfoldertype.cpp
new file mode 100644
index 00000000000..9107b11597e
--- /dev/null
+++ b/indra/llcommon/llfoldertype.cpp
@@ -0,0 +1,165 @@
+/** 
+ * @file llfoldertype.cpp
+ * @brief Implementatino of LLFolderType functionality.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llfoldertype.h"
+#include "lldictionary.h"
+#include "llmemory.h"
+#include "llsingleton.h"
+
+///----------------------------------------------------------------------------
+/// Class LLFolderType
+///----------------------------------------------------------------------------
+struct FolderEntry : public LLDictionaryEntry
+{
+	FolderEntry(const std::string &type_name, // 8 character limit!
+				bool is_protected) // can the viewer change categories of this type?
+		:
+	LLDictionaryEntry(type_name),
+	mIsProtected(is_protected)
+	{
+		llassert(type_name.length() <= 8);
+	}
+
+	const bool mIsProtected;
+};
+
+class LLFolderDictionary : public LLSingleton<LLFolderDictionary>,
+						   public LLDictionary<LLFolderType::EType, FolderEntry>
+{
+public:
+	LLFolderDictionary();
+};
+
+LLFolderDictionary::LLFolderDictionary()
+{
+	//       													    TYPE NAME	PROTECTED
+	//      													   |-----------|---------|
+	addEntry(LLFolderType::FT_TEXTURE, 				new FolderEntry("texture",	TRUE));
+	addEntry(LLFolderType::FT_SOUND, 				new FolderEntry("sound",	TRUE));
+	addEntry(LLFolderType::FT_CALLINGCARD, 			new FolderEntry("callcard",	TRUE));
+	addEntry(LLFolderType::FT_LANDMARK, 			new FolderEntry("landmark",	TRUE));
+	addEntry(LLFolderType::FT_CLOTHING, 			new FolderEntry("clothing",	TRUE));
+	addEntry(LLFolderType::FT_OBJECT, 				new FolderEntry("object",	TRUE));
+	addEntry(LLFolderType::FT_NOTECARD, 			new FolderEntry("notecard",	TRUE));
+	addEntry(LLFolderType::FT_CATEGORY, 			new FolderEntry("category",	TRUE));
+	addEntry(LLFolderType::FT_ROOT_CATEGORY, 		new FolderEntry("root",		TRUE));
+	addEntry(LLFolderType::FT_LSL_TEXT, 			new FolderEntry("lsltext",	TRUE));
+	addEntry(LLFolderType::FT_BODYPART, 			new FolderEntry("bodypart",	TRUE));
+	addEntry(LLFolderType::FT_TRASH, 				new FolderEntry("trash",	TRUE));
+	addEntry(LLFolderType::FT_SNAPSHOT_CATEGORY, 	new FolderEntry("snapshot", TRUE));
+	addEntry(LLFolderType::FT_LOST_AND_FOUND, 		new FolderEntry("lstndfnd",	TRUE));
+	addEntry(LLFolderType::FT_ANIMATION, 			new FolderEntry("animatn",	TRUE));
+	addEntry(LLFolderType::FT_GESTURE, 				new FolderEntry("gesture",	TRUE));
+	addEntry(LLFolderType::FT_FAVORITE, 			new FolderEntry("favorite",	TRUE));
+	
+	for (S32 ensemble_num = S32(LLFolderType::FT_ENSEMBLE_START); ensemble_num <= S32(LLFolderType::FT_ENSEMBLE_END); ensemble_num++)
+	{
+		addEntry(LLFolderType::EType(ensemble_num), new FolderEntry("ensemble", FALSE)); 
+	}
+
+	addEntry(LLFolderType::FT_CURRENT_OUTFIT, 		new FolderEntry("current",	TRUE));
+	addEntry(LLFolderType::FT_OUTFIT, 				new FolderEntry("outfit",	FALSE));
+	addEntry(LLFolderType::FT_MY_OUTFITS, 			new FolderEntry("my_otfts",	TRUE));
+	addEntry(LLFolderType::FT_INBOX, 				new FolderEntry("inbox",	TRUE));
+		 
+	addEntry(LLFolderType::FT_NONE, 				new FolderEntry("-1",		FALSE));
+};
+
+// static
+LLFolderType::EType LLFolderType::lookup(const std::string& name)
+{
+	return LLFolderDictionary::getInstance()->lookup(name);
+}
+
+// static
+const std::string &LLFolderType::lookup(LLFolderType::EType folder_type)
+{
+	const FolderEntry *entry = LLFolderDictionary::getInstance()->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mName;
+	}
+	else
+	{
+		return badLookup();
+	}
+}
+
+// static
+// Only ensembles and plain folders aren't protected.  "Protected" means
+// you can't change certain properties such as their type.
+bool LLFolderType::lookupIsProtectedType(EType folder_type)
+{
+	const LLFolderDictionary *dict = LLFolderDictionary::getInstance();
+	const FolderEntry *entry = dict->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mIsProtected;
+	}
+	return true;
+}
+
+// static
+bool LLFolderType::lookupIsEnsembleType(EType folder_type)
+{
+	return (folder_type >= FT_ENSEMBLE_START &&
+			folder_type <= FT_ENSEMBLE_END);
+}
+
+// static
+LLAssetType::EType LLFolderType::folderTypeToAssetType(LLFolderType::EType folder_type)
+{
+	if (LLAssetType::lookup(LLAssetType::EType(folder_type)) == LLAssetType::badLookup())
+	{
+		llwarns << "Converting to unknown asset type " << folder_type << llendl;
+	}
+	return (LLAssetType::EType)folder_type;
+}
+
+// static
+LLFolderType::EType LLFolderType::assetTypeToFolderType(LLAssetType::EType asset_type)
+{
+	if (LLFolderType::lookup(LLFolderType::EType(asset_type)) == LLFolderType::badLookup())
+	{
+		llwarns << "Converting to unknown folder type " << asset_type << llendl;
+	}
+	return (LLFolderType::EType)asset_type;
+}
+
+// static
+const std::string &LLFolderType::badLookup()
+{
+	static const std::string sBadLookup = "llfoldertype_bad_lookup";
+	return sBadLookup;
+}
diff --git a/indra/llcommon/llfoldertype.h b/indra/llcommon/llfoldertype.h
new file mode 100644
index 00000000000..5374ffd829a
--- /dev/null
+++ b/indra/llcommon/llfoldertype.h
@@ -0,0 +1,123 @@
+/** 
+ * @file llfoldertype.h
+ * @brief Declaration of LLFolderType.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFOLDERTYPE_H
+#define LL_LLFOLDERTYPE_H
+
+#include <string>
+#include "llassettype.h"
+
+// This class handles folder types (similar to assettype, except for folders)
+// and operations on those.
+class LL_COMMON_API LLFolderType
+{
+public:
+	// ! BACKWARDS COMPATIBILITY ! Folder type enums must match asset type enums.
+	enum EType
+	{
+		FT_TEXTURE = 0,
+
+		FT_SOUND = 1, 
+
+		FT_CALLINGCARD = 2,
+
+		FT_LANDMARK = 3,
+
+		// FT_SCRIPT = 4,
+
+		FT_CLOTHING = 5,
+
+		FT_OBJECT = 6,
+
+		FT_NOTECARD = 7,
+
+		FT_CATEGORY = 8,
+
+		FT_ROOT_CATEGORY = 9,
+
+		FT_LSL_TEXT = 10,
+
+		// FT_LSL_BYTECODE = 11,
+		// FT_TEXTURE_TGA = 12,
+
+		FT_BODYPART = 13,
+
+		FT_TRASH = 14,
+
+		FT_SNAPSHOT_CATEGORY = 15,
+
+		FT_LOST_AND_FOUND = 16,
+
+		// FT_SOUND_WAV = 17,
+		// FT_IMAGE_TGA = 18,
+		// FT_IMAGE_JPEG = 19,
+
+		FT_ANIMATION = 20,
+
+		FT_GESTURE = 21,
+
+		// FT_SIMSTATE = 22,
+
+		FT_FAVORITE = 23,
+
+		FT_ENSEMBLE_START = 26,
+		FT_ENSEMBLE_END = 45,
+			// This range is reserved for special clothing folder types.
+
+		FT_CURRENT_OUTFIT = 46,
+		FT_OUTFIT = 47,
+		FT_MY_OUTFITS = 48,
+		
+		FT_INBOX = 49,
+
+		FT_COUNT = 50,
+
+		FT_NONE = -1
+	};
+
+	static EType 				lookup(const std::string& type_name);
+	static const std::string&	lookup(EType folder_type);
+
+	static bool 				lookupIsProtectedType(EType folder_type);
+	static bool 				lookupIsEnsembleType(EType folder_type);
+
+	static LLAssetType::EType	folderTypeToAssetType(LLFolderType::EType folder_type);
+	static LLFolderType::EType	assetTypeToFolderType(LLAssetType::EType asset_type);
+
+	static const std::string&	badLookup(); // error string when a lookup fails
+
+protected:
+	LLFolderType() {}
+	~LLFolderType() {}
+};
+
+#endif // LL_LLFOLDERTYPE_H
diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp
index 5d3fbe51289..d665deb6050 100644
--- a/indra/llinventory/llinventory.cpp
+++ b/indra/llinventory/llinventory.cpp
@@ -1324,7 +1324,7 @@ BOOL item_date_sort( LLInventoryItem* a, LLInventoryItem* b )
 LLInventoryCategory::LLInventoryCategory(
 	const LLUUID& uuid,
 	const LLUUID& parent_uuid,
-	LLAssetType::EType preferred_type,
+	LLFolderType::EType preferred_type,
 	const std::string& name) :
 	LLInventoryObject(uuid, parent_uuid, LLAssetType::AT_CATEGORY, name),
 	mPreferredType(preferred_type)
@@ -1332,7 +1332,7 @@ LLInventoryCategory::LLInventoryCategory(
 }
 
 LLInventoryCategory::LLInventoryCategory() :
-	mPreferredType(LLAssetType::AT_NONE)
+	mPreferredType(LLFolderType::FT_NONE)
 {
 	mType = LLAssetType::AT_CATEGORY;
 }
@@ -1354,12 +1354,12 @@ void LLInventoryCategory::copyCategory(const LLInventoryCategory* other)
 	mPreferredType = other->mPreferredType;
 }
 
-LLAssetType::EType LLInventoryCategory::getPreferredType() const
+LLFolderType::EType LLInventoryCategory::getPreferredType() const
 {
 	return mPreferredType;
 }
 
-void LLInventoryCategory::setPreferredType(LLAssetType::EType type)
+void LLInventoryCategory::setPreferredType(LLFolderType::EType type)
 {
 	mPreferredType = type;
 }
@@ -1405,13 +1405,13 @@ bool LLInventoryCategory::fromLLSD(const LLSD& sd)
     if (sd.has(w))
     {
         S8 type = (U8)sd[w].asInteger();
-        mPreferredType = static_cast<LLAssetType::EType>(type);
+        mPreferredType = static_cast<LLFolderType::EType>(type);
     }
 	w = INV_ASSET_TYPE_LABEL_WS;
 	if (sd.has(w))
 	{
 		S8 type = (U8)sd[w].asInteger();
-        mPreferredType = static_cast<LLAssetType::EType>(type);
+        mPreferredType = static_cast<LLFolderType::EType>(type);
 	}
 
     w = INV_NAME_LABEL;
@@ -1433,7 +1433,7 @@ void LLInventoryCategory::unpackMessage(LLMessageSystem* msg,
 	msg->getUUIDFast(block, _PREHASH_ParentID, mParentUUID, block_num);
 	S8 type;
 	msg->getS8Fast(block, _PREHASH_Type, type, block_num);
-	mPreferredType = static_cast<LLAssetType::EType>(type);
+	mPreferredType = static_cast<LLFolderType::EType>(type);
 	msg->getStringFast(block, _PREHASH_Name, mName, block_num);
 	LLStringUtil::replaceNonstandardASCII(mName, ' ');
 }
@@ -1482,7 +1482,7 @@ BOOL LLInventoryCategory::importFile(LLFILE* fp)
 		}
 		else if(0 == strcmp("pref_type", keyword))
 		{
-			mPreferredType = LLAssetType::lookup(valuestr);
+			mPreferredType = LLFolderType::lookup(valuestr);
 		}
 		else if(0 == strcmp("name", keyword))
 		{
@@ -1514,7 +1514,7 @@ BOOL LLInventoryCategory::exportFile(LLFILE* fp, BOOL) const
 	mParentUUID.toString(uuid_str);
 	fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str());
 	fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
-	fprintf(fp, "\t\tpref_type\t%s\n", LLAssetType::lookup(mPreferredType));
+	fprintf(fp, "\t\tpref_type\t%s\n", LLFolderType::lookup(mPreferredType).c_str());
 	fprintf(fp, "\t\tname\t%s|\n", mName.c_str());
 	fprintf(fp,"\t}\n");
 	return TRUE;
@@ -1561,7 +1561,7 @@ BOOL LLInventoryCategory::importLegacyStream(std::istream& input_stream)
 		}
 		else if(0 == strcmp("pref_type", keyword))
 		{
-			mPreferredType = LLAssetType::lookup(valuestr);
+			mPreferredType = LLFolderType::lookup(valuestr);
 		}
 		else if(0 == strcmp("name", keyword))
 		{
@@ -1593,7 +1593,7 @@ BOOL LLInventoryCategory::exportLegacyStream(std::ostream& output_stream, BOOL)
 	mParentUUID.toString(uuid_str);
 	output_stream << "\t\tparent_id\t" << uuid_str << "\n";
 	output_stream << "\t\ttype\t" << LLAssetType::lookup(mType) << "\n";
-	output_stream << "\t\tpref_type\t" << LLAssetType::lookup(mPreferredType) << "\n";
+	output_stream << "\t\tpref_type\t" << LLFolderType::lookup(mPreferredType) << "\n";
 	output_stream << "\t\tname\t" << mName.c_str() << "|\n";
 	output_stream << "\t}\n";
 	return TRUE;
@@ -1629,38 +1629,6 @@ LLSD ll_create_sd_from_inventory_item(LLPointer<LLInventoryItem> item)
 	return rv;
 }
 
-/* deprecated, use LLInventoryItem::fromLLSD() instead
-LLPointer<LLInventoryItem> ll_create_item_from_sd(const LLSD& sd_item)
-{
-	LLPointer<LLInventoryItem> rv = new LLInventoryItem;
-	rv->setUUID(sd_item[INV_ITEM_ID_LABEL].asUUID());
-	rv->setParent(sd_item[INV_PARENT_ID_LABEL].asUUID());
-	rv->rename(sd_item[INV_NAME_LABEL].asString());
-	rv->setType(
-		LLAssetType::lookup(sd_item[INV_ASSET_TYPE_LABEL].asString()));
-	if (sd_item.has("shadow_id"))
-	{
-		LLUUID asset_id = sd_item["shadow_id"];
-		LLXORCipher cipher(MAGIC_ID.mData, UUID_BYTES);
-		cipher.decrypt(asset_id.mData, UUID_BYTES);
-		rv->setAssetUUID(asset_id);
-	}
-	if (sd_item.has(INV_ASSET_ID_LABEL))
-	{
-		rv->setAssetUUID(sd_item[INV_ASSET_ID_LABEL].asUUID());
-	}
-	rv->setDescription(sd_item[INV_DESC_LABEL].asString());
-	rv->setSaleInfo(ll_sale_info_from_sd(sd_item[INV_SALE_INFO_LABEL]));
-	rv->setPermissions(ll_permissions_from_sd(sd_item[INV_PERMISSIONS_LABEL]));
-	rv->setInventoryType(
-		LLInventoryType::lookup(
-			sd_item[INV_INVENTORY_TYPE_LABEL].asString()));
-	rv->setFlags((U32)(sd_item[INV_FLAGS_LABEL].asInteger()));
-	rv->setCreationDate(sd_item[INV_CREATION_DATE_LABEL].asInteger());
-	return rv;
-}
-*/
-
 LLSD ll_create_sd_from_inventory_category(LLPointer<LLInventoryCategory> cat)
 {
 	LLSD rv;
@@ -1675,10 +1643,10 @@ LLSD ll_create_sd_from_inventory_category(LLPointer<LLInventoryCategory> cat)
 	rv[INV_PARENT_ID_LABEL] = cat->getParentUUID();
 	rv[INV_NAME_LABEL] = cat->getName();
 	rv[INV_ASSET_TYPE_LABEL] = LLAssetType::lookup(cat->getType());
-	if(LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))
+	if(LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
 	{
 		rv[INV_PREFERRED_TYPE_LABEL] =
-			LLAssetType::lookup(cat->getPreferredType());
+			LLFolderType::lookup(cat->getPreferredType()).c_str();
 	}
 	return rv;
 }
@@ -1692,7 +1660,7 @@ LLPointer<LLInventoryCategory> ll_create_category_from_sd(const LLSD& sd_cat)
 	rv->setType(
 		LLAssetType::lookup(sd_cat[INV_ASSET_TYPE_LABEL].asString()));
 	rv->setPreferredType(
-		LLAssetType::lookup(
-			sd_cat[INV_PREFERRED_TYPE_LABEL].asString()));
+			LLFolderType::lookup(
+				sd_cat[INV_PREFERRED_TYPE_LABEL].asString()));
 	return rv;
 }
diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h
index bd581e860f3..3de9d14f542 100644
--- a/indra/llinventory/llinventory.h
+++ b/indra/llinventory/llinventory.h
@@ -37,6 +37,7 @@
 
 #include "llassetstorage.h"
 #include "lldarray.h"
+#include "llfoldertype.h"
 #include "llinventorytype.h"
 #include "llmemtype.h"
 #include "llpermissions.h"
@@ -321,15 +322,15 @@ class LLInventoryCategory : public LLInventoryObject
 public:
 	MEM_TYPE_NEW(LLMemType::MTYPE_INVENTORY);
 	LLInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid,
-						LLAssetType::EType preferred_type,
+						LLFolderType::EType preferred_type,
 						const std::string& name);
 	LLInventoryCategory();
 	LLInventoryCategory(const LLInventoryCategory* other);
 	void copyCategory(const LLInventoryCategory* other); // LLRefCount requires custom copy
 
 	// accessors and mutators
-	LLAssetType::EType getPreferredType() const;
-	void setPreferredType(LLAssetType::EType type);
+	LLFolderType::EType getPreferredType() const;
+	void setPreferredType(LLFolderType::EType type);
 	// For messaging system support
 	virtual void packMessage(LLMessageSystem* msg) const;
 	virtual void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
@@ -345,10 +346,8 @@ class LLInventoryCategory : public LLInventoryObject
 	virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const;
 
 protected:
-	// The type of asset that this category was "meant" to hold
-	// (although it may in fact hold any type).
-	LLAssetType::EType	mPreferredType;		
-
+	// May be the type that this category was "meant" to hold (although it may hold any type).	
+	LLFolderType::EType	mPreferredType;		
 };
 
 
diff --git a/indra/llinventory/llinventorytype.cpp b/indra/llinventory/llinventorytype.cpp
index a445466b26a..0e71c0d12d8 100644
--- a/indra/llinventory/llinventorytype.cpp
+++ b/indra/llinventory/llinventorytype.cpp
@@ -79,24 +79,16 @@ LLInventoryDictionary::LLInventoryDictionary()
 	addEntry(LLInventoryType::IT_SOUND,               new InventoryEntry("sound",     "sound",         1, LLAssetType::AT_SOUND));
 	addEntry(LLInventoryType::IT_CALLINGCARD,         new InventoryEntry("callcard",  "calling card",  1, LLAssetType::AT_CALLINGCARD));
 	addEntry(LLInventoryType::IT_LANDMARK,            new InventoryEntry("landmark",  "landmark",      1, LLAssetType::AT_LANDMARK));
-	//addEntry(LLInventoryType::IT_SCRIPT,            new InventoryEntry(NULL,NULL));
-	//addEntry(LLInventoryType::IT_CLOTHING,          new InventoryEntry(NULL,NULL));
 	addEntry(LLInventoryType::IT_OBJECT,              new InventoryEntry("object",    "object",        1, LLAssetType::AT_OBJECT));
 	addEntry(LLInventoryType::IT_NOTECARD,            new InventoryEntry("notecard",  "note card",     1, LLAssetType::AT_NOTECARD));
 	addEntry(LLInventoryType::IT_CATEGORY,            new InventoryEntry("category",  "folder"         ));
 	addEntry(LLInventoryType::IT_ROOT_CATEGORY,       new InventoryEntry("root",      "root"           ));
 	addEntry(LLInventoryType::IT_LSL,                 new InventoryEntry("script",    "script",        2, LLAssetType::AT_LSL_TEXT, LLAssetType::AT_LSL_BYTECODE));
-	//addEntry(LLInventoryType::IT_LSL_BYTECODE,      new InventoryEntry(NULL,NULL));
-	//addEntry(LLInventoryType::IT_TEXTURE_TGA,       new InventoryEntry(NULL,NULL));
-	//addEntry(LLInventoryType::IT_BODYPART,          new InventoryEntry(NULL,NULL));
-	//addEntry(LLInventoryType::IT_TRASH,             new InventoryEntry(NULL,NULL));
 	addEntry(LLInventoryType::IT_SNAPSHOT,            new InventoryEntry("snapshot",  "snapshot",      1, LLAssetType::AT_TEXTURE));
-	//addEntry(LLInventoryType::IT_LOST_AND_FOUND,    new InventoryEntry(NULL,NULL, ));
 	addEntry(LLInventoryType::IT_ATTACHMENT,          new InventoryEntry("attach",    "attachment",    1, LLAssetType::AT_OBJECT));
 	addEntry(LLInventoryType::IT_WEARABLE,            new InventoryEntry("wearable",  "wearable",      2, LLAssetType::AT_CLOTHING, LLAssetType::AT_BODYPART));
 	addEntry(LLInventoryType::IT_ANIMATION,           new InventoryEntry("animation", "animation",     1, LLAssetType::AT_ANIMATION));  
 	addEntry(LLInventoryType::IT_GESTURE,             new InventoryEntry("gesture",   "gesture",       1, LLAssetType::AT_GESTURE)); 
-	addEntry(LLInventoryType::IT_FAVORITE,            new InventoryEntry("favorite",  "favorite",      1, LLAssetType::AT_FAVORITE)); 
 }
 
 
@@ -128,35 +120,9 @@ DEFAULT_ASSET_FOR_INV_TYPE[LLAssetType::AT_COUNT] =
 	LLInventoryType::IT_ANIMATION,		// AT_ANIMATION
 	LLInventoryType::IT_GESTURE,		// AT_GESTURE
 	LLInventoryType::IT_NONE,			// AT_SIMSTATE
-	LLInventoryType::IT_FAVORITE,		// AT_FAVORITE
 
 	LLInventoryType::IT_NONE,			// AT_LINK
 	LLInventoryType::IT_NONE,			// AT_LINK_FOLDER
-
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-
-	LLInventoryType::IT_CATEGORY,		// AT_CURRENT_OUTFIT
-	LLInventoryType::IT_CATEGORY,		// AT_OUTFIT
-	LLInventoryType::IT_CATEGORY,		// AT_MY_OUTFITS
 };
 
 // static
diff --git a/indra/llinventory/llinventorytype.h b/indra/llinventory/llinventorytype.h
index 14b28bfe4b8..e515b8a304b 100644
--- a/indra/llinventory/llinventorytype.h
+++ b/indra/llinventory/llinventorytype.h
@@ -67,8 +67,7 @@ class LLInventoryType
 		IT_WEARABLE = 18,
 		IT_ANIMATION = 19,
 		IT_GESTURE = 20,
-		IT_FAVORITE = 21,
-		IT_COUNT = 22,
+		IT_COUNT = 21,
 
 		IT_NONE = -1
 	};
diff --git a/indra/llinventory/tests/inventorymisc_test.cpp b/indra/llinventory/tests/inventorymisc_test.cpp
index 770594dc9df..c797a70c506 100644
--- a/indra/llinventory/tests/inventorymisc_test.cpp
+++ b/indra/llinventory/tests/inventorymisc_test.cpp
@@ -94,7 +94,7 @@ LLPointer<LLInventoryCategory> create_random_inventory_cat()
 	LLPointer<LLInventoryCategory> cat = new LLInventoryCategory(
 		item_id,
 		parent_id,
-		LLAssetType::AT_NONE,
+		LLFolderType::FT_NONE,
 		std::string("Sample category"));
 	return cat;
 }
@@ -452,7 +452,7 @@ namespace tut
 		ensure_equals("4.type::getType() failed", dst->getType(), src->getType());
 		ensure_equals("5.preferred type::getPreferredType() failed", dst->getPreferredType(), src->getPreferredType());
 
-		src->setPreferredType( LLAssetType::AT_TEXTURE);
+		src->setPreferredType( LLFolderType::FT_TEXTURE);
 		sd = ll_create_sd_from_inventory_category(src);
 		dst = ll_create_category_from_sd(sd);
 		ensure_equals("6.preferred type::getPreferredType() failed", dst->getPreferredType(), src->getPreferredType());
diff --git a/indra/llmessage/lltransfersourceasset.cpp b/indra/llmessage/lltransfersourceasset.cpp
index 41f3f3f607d..7332f5c9540 100644
--- a/indra/llmessage/lltransfersourceasset.cpp
+++ b/indra/llmessage/lltransfersourceasset.cpp
@@ -292,7 +292,6 @@ bool is_asset_id_knowable(LLAssetType::EType type)
 		case LLAssetType::AT_BODYPART:
 		case LLAssetType::AT_ANIMATION:
 		case LLAssetType::AT_GESTURE:
-		case LLAssetType::AT_FAVORITE:
 		case LLAssetType::AT_LINK:
 		case LLAssetType::AT_LINK_FOLDER:
 			rv = true;
diff --git a/indra/llprimitive/llmediaentry.cpp b/indra/llprimitive/llmediaentry.cpp
index fa04bf80e7a..701300163a3 100644
--- a/indra/llprimitive/llmediaentry.cpp
+++ b/indra/llprimitive/llmediaentry.cpp
@@ -164,6 +164,7 @@ void LLMediaEntry::asLLSD(LLSD& sd) const
 
     // "security" fields
     sd[WHITELIST_ENABLE_KEY] = mWhiteListEnable;
+	sd.erase(WHITELIST_KEY);
     for (U32 i=0; i<mWhiteList.size(); i++) 
 	{
         sd[WHITELIST_KEY].append(mWhiteList[i]);
diff --git a/indra/llprimitive/tests/llmediaentry_test.cpp b/indra/llprimitive/tests/llmediaentry_test.cpp
index 9ce65609237..cd9608d56b7 100644
--- a/indra/llprimitive/tests/llmediaentry_test.cpp
+++ b/indra/llprimitive/tests/llmediaentry_test.cpp
@@ -223,8 +223,7 @@ namespace tut
 	{
 		set_test_name("Test LLMediaEntry Instantiation");
 		LLMediaEntry entry;
-        ensure_llsd_equals(get_test_name(), defaultMediaEntryLLSD, entry.asLLSD());
-
+        ensure_llsd_equals(get_test_name() + " failed", defaultMediaEntryLLSD, entry.asLLSD());
 	}
 
 	template<> template<>
@@ -251,12 +250,27 @@ namespace tut
         ensure_llsd_equals(get_test_name() + " failed", golden, entry.asLLSD());
     }
 
+    template<> template<>
+    void object::test<4>()
+    {
+        set_test_name("Test LLMediaEntry::asLLSD()");
+        LLMediaEntry entry;
+        LLSD sd;
+		// Put some cruft in the LLSD
+        sd[LLMediaEntry::CURRENT_URL_KEY] = "http://www.example.com";
+		LLSD whitelist;
+		whitelist.append("*.example.com");
+        sd[LLMediaEntry::WHITELIST_KEY] = whitelist;
+        entry.asLLSD(sd);
+        ensure_llsd_equals(get_test_name() + " failed", defaultMediaEntryLLSD, sd);
+    }
+
     // limit tests
     const char *URL_OK = "http://www.example.com";
     const char *URL_TOO_BIG = "http://www.example.com.qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
 
     template<> template<>
-    void object::test<4>()
+    void object::test<5>()
     {
         set_test_name("Test Limits on setting current URL");
         LLMediaEntry entry;
@@ -267,7 +281,7 @@ namespace tut
     }    
 
     template<> template<>
-    void object::test<5>()
+    void object::test<6>()
     {
         set_test_name("Test Limits on setting home URL");
         LLMediaEntry entry;
@@ -278,7 +292,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<6>()
+    void object::test<7>()
     {
         set_test_name("Test Limits on setting whitelist");
         
@@ -292,7 +306,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<7>()
+    void object::test<8>()
     {
         set_test_name("Test Limits on setting whitelist too big");
         
@@ -307,7 +321,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<8>()
+    void object::test<9>()
     {
         set_test_name("Test Limits on setting whitelist too many");
         
@@ -323,7 +337,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<9>()
+    void object::test<10>()
     {
         set_test_name("Test to make sure both setWhiteList() functions behave the same");
         
@@ -341,7 +355,7 @@ namespace tut
     }
     
     template<> template<>
-    void object::test<10>()
+    void object::test<11>()
     {
         set_test_name("Test to make sure both setWhiteList() functions behave the same");
 
@@ -362,7 +376,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<11>()
+    void object::test<12>()
     {
         set_test_name("Test to make sure both setWhiteList() functions behave the same");
 
@@ -386,99 +400,99 @@ namespace tut
     
     // Check the "empty whitelist" case
     template<> template<>
-    void object::test<12>() { whitelist_test("", "http://www.example.com", true); }
+    void object::test<13>() { whitelist_test("", "http://www.example.com", true); }
 
     // Check the "missing scheme" case
     template<> template<>
-    void object::test<13>() { whitelist_test("www.example.com", "http://www.example.com", true); }
+    void object::test<14>() { whitelist_test("www.example.com", "http://www.example.com", true); }
 
     // Check the "exactly the same" case
     template<> template<>
-    void object::test<14>() { whitelist_test("http://example.com", "http://example.com", true); }
+    void object::test<15>() { whitelist_test("http://example.com", "http://example.com", true); }
 
     // Check the enable flag
     template<> template<>
-    void object::test<15>() { whitelist_test(false, "www.example.com", "http://www.secondlife.com", true); }
+    void object::test<16>() { whitelist_test(false, "www.example.com", "http://www.secondlife.com", true); }
     template<> template<>
-    void object::test<16>() { whitelist_test(true, "www.example.com", "http://www.secondlife.com", false); }
+    void object::test<17>() { whitelist_test(true, "www.example.com", "http://www.secondlife.com", false); }
 
     // Check permutations of trailing slash:
     template<> template<>
-    void object::test<17>() { whitelist_test("http://www.example.com", "http://www.example.com/", true); }
+    void object::test<18>() { whitelist_test("http://www.example.com", "http://www.example.com/", true); }
     template<> template<>
-    void object::test<18>() { whitelist_test("http://www.example.com/", "http://www.example.com/", true); }
+    void object::test<19>() { whitelist_test("http://www.example.com/", "http://www.example.com/", true); }
     template<> template<>
-    void object::test<19>() { whitelist_test("http://www.example.com/", "http://www.example.com", false); }
+    void object::test<20>() { whitelist_test("http://www.example.com/", "http://www.example.com", false); }
     template<> template<>
-    void object::test<20>() { whitelist_test("http://www.example.com", "http://www.example.com/foobar", true); }
+    void object::test<21>() { whitelist_test("http://www.example.com", "http://www.example.com/foobar", true); }
     template<> template<>
-    void object::test<21>() { whitelist_test("http://www.example.com/", "http://www.example.com/foobar", false); }
+    void object::test<22>() { whitelist_test("http://www.example.com/", "http://www.example.com/foobar", false); }
 
     
     // More cases...
     template<> template<>
-    void object::test<22>() { whitelist_test("http://example.com", "http://example.com/wiki", true); }
+    void object::test<23>() { whitelist_test("http://example.com", "http://example.com/wiki", true); }
     template<> template<>
-    void object::test<23>() { whitelist_test("www.example.com", "http://www.example.com/help", true); }
+    void object::test<24>() { whitelist_test("www.example.com", "http://www.example.com/help", true); }
     template<> template<>
-    void object::test<24>() { whitelist_test("http://www.example.com", "http://wwwexample.com", false); }
+    void object::test<25>() { whitelist_test("http://www.example.com", "http://wwwexample.com", false); }
     template<> template<>
-    void object::test<25>() { whitelist_test("http://www.example.com", "http://www.example.com/wiki", true); }
+    void object::test<26>() { whitelist_test("http://www.example.com", "http://www.example.com/wiki", true); }
     template<> template<>
-    void object::test<26>() { whitelist_test("example.com", "http://wwwexample.com", false); }
+    void object::test<27>() { whitelist_test("example.com", "http://wwwexample.com", false); }
     template<> template<>
-    void object::test<27>() { whitelist_test("http://www.example.com/", "http://www.amazon.com/wiki", false); }
+    void object::test<28>() { whitelist_test("http://www.example.com/", "http://www.amazon.com/wiki", false); }
     template<> template<>
-    void object::test<28>() { whitelist_test("www.example.com", "http://www.amazon.com", false); }
+    void object::test<29>() { whitelist_test("www.example.com", "http://www.amazon.com", false); }
 
     // regexp cases
     template<> template<>
-    void object::test<29>() { whitelist_test("*.example.com", "http://www.example.com", true); }
+    void object::test<30>() { whitelist_test("*.example.com", "http://www.example.com", true); }
     template<> template<>
-    void object::test<30>() { whitelist_test("*.example.com", "http://www.amazon.com", false); }
+    void object::test<31>() { whitelist_test("*.example.com", "http://www.amazon.com", false); }
     template<> template<>
-    void object::test<31>() { whitelist_test("*.example.com", "http://www.example.com/foo/bar", true); }
+    void object::test<32>() { whitelist_test("*.example.com", "http://www.example.com/foo/bar", true); }
     template<> template<>
-    void object::test<32>() { whitelist_test("*.example.com", "http:/example.com/foo/bar", false); }
+    void object::test<33>() { whitelist_test("*.example.com", "http:/example.com/foo/bar", false); }
     template<> template<>
-    void object::test<33>() { whitelist_test("*example.com", "http://example.com/foo/bar", true); }
+    void object::test<34>() { whitelist_test("*example.com", "http://example.com/foo/bar", true); }
     template<> template<>
-    void object::test<34>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?example.com", false); }
+    void object::test<35>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?example.com", false); }
     template<> template<>
-    void object::test<35>() { whitelist_test("example.com", "http://my.virus.com/foo/bar?example.com", false); }
+    void object::test<36>() { whitelist_test("example.com", "http://my.virus.com/foo/bar?example.com", false); }
     template<> template<>
-    void object::test<36>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?*example.com", false); }
+    void object::test<37>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?*example.com", false); }
     template<> template<>
-    void object::test<37>() { whitelist_test("http://*example.com", "http://www.example.com", true); }
+    void object::test<38>() { whitelist_test("http://*example.com", "http://www.example.com", true); }
     template<> template<>
-    void object::test<38>() { whitelist_test("http://*.example.com", "http://www.example.com", true); }
+    void object::test<39>() { whitelist_test("http://*.example.com", "http://www.example.com", true); }
     template<> template<>
-    void object::test<39>() { whitelist_test("http://*.e$?^.com", "http://www.e$?^.com", true); }
+    void object::test<40>() { whitelist_test("http://*.e$?^.com", "http://www.e$?^.com", true); }
     template<> template<>
-    void object::test<40>() { whitelist_test("*.example.com/foo/bar", "http://www.example.com/", false); }
+    void object::test<41>() { whitelist_test("*.example.com/foo/bar", "http://www.example.com/", false); }
     template<> template<>
-    void object::test<41>() { whitelist_test("*.example.com/foo/bar", "http://example.com/foo/bar", false); }
+    void object::test<42>() { whitelist_test("*.example.com/foo/bar", "http://example.com/foo/bar", false); }
     template<> template<>
-    void object::test<42>() { whitelist_test("http://*.example.com/foo/bar", "http://www.example.com", false); }
+    void object::test<43>() { whitelist_test("http://*.example.com/foo/bar", "http://www.example.com", false); }
     template<> template<>
-    void object::test<43>() { whitelist_test("http://*.example.com", "https://www.example.com", false); }
+    void object::test<44>() { whitelist_test("http://*.example.com", "https://www.example.com", false); }
     template<> template<>
-    void object::test<44>() { whitelist_test("http*://*.example.com", "rtsp://www.example.com", false); }
+    void object::test<45>() { whitelist_test("http*://*.example.com", "rtsp://www.example.com", false); }
     template<> template<>
-    void object::test<45>() { whitelist_test("http*://*.example.com", "https://www.example.com", true); }
+    void object::test<46>() { whitelist_test("http*://*.example.com", "https://www.example.com", true); }
     template<> template<>
-    void object::test<46>() { whitelist_test("example.com", "http://www.example.com", false); }
+    void object::test<47>() { whitelist_test("example.com", "http://www.example.com", false); }
     template<> template<>
-    void object::test<47>() { whitelist_test("www.example.com", "http://www.example.com:80", false); }
+    void object::test<48>() { whitelist_test("www.example.com", "http://www.example.com:80", false); }
     template<> template<>
-    void object::test<48>() { whitelist_test("www.example.com", "http://www.example.com", true); }
+    void object::test<49>() { whitelist_test("www.example.com", "http://www.example.com", true); }
     template<> template<>
-    void object::test<49>() { whitelist_test("www.example.com/", "http://www.example.com", false); }
+    void object::test<50>() { whitelist_test("www.example.com/", "http://www.example.com", false); }
     template<> template<>
-    void object::test<50>() { whitelist_test("www.example.com/foo/bar/*", "http://www.example.com/foo/bar/baz", true); }
+    void object::test<51>() { whitelist_test("www.example.com/foo/bar/*", "http://www.example.com/foo/bar/baz", true); }
     // Path only
     template<> template<>
-    void object::test<51>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/baz", true); }
+    void object::test<52>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/baz", true); }
     template<> template<>
-    void object::test<52>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/", false); }
+    void object::test<53>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/", false); }
 }
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 8c72b079eee..99aebbcb308 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -772,6 +772,12 @@ LLMultiFloater* LLFloater::getHost()
 	return (LLMultiFloater*)mHostHandle.get(); 
 }
 
+void    LLFloater::applySavedVariables()
+{
+	applyRectControl();
+	applyDockState();
+}
+
 void LLFloater::applyRectControl()
 {
 	if (mRectControl.size() > 1)
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index ef0d06a58ea..95c8dd84f65 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -280,6 +280,9 @@ friend class LLMultiFloater;
 protected:
 
 	void			setRectControl(const std::string& rectname) { mRectControl = rectname; };
+
+	virtual void    applySavedVariables();
+
 	void			applyRectControl();
 	void			applyDockState();
 	void			storeRectControl();
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index aca4dc56eed..f8e07913fbf 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -134,8 +134,7 @@ 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;
 				res->setInstanceName(name);
-				res->applyRectControl(); // Can't apply rect control until setting instance name
-				res->applyDockState();//same...
+				res->applySavedVariables(); // Can't apply rect and dock state until setting instance name
 				if (res->mAutoTile && !res->getHost() && index > 0)
 				{
 					const LLRect& cur_rect = res->getRect();
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index e138b431c59..643f89068f2 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -216,7 +216,6 @@ set(viewer_SOURCE_FILES
     llfloaterwhitelistentry.cpp
     llfloaterwindlight.cpp
     llfloaterworldmap.cpp
-    llfoldertype.cpp
     llfolderview.cpp
     llfolderviewitem.cpp
     llfollowcam.cpp
@@ -317,6 +316,7 @@ set(viewer_SOURCE_FILES
     llpanelimcontrolpanel.cpp
     llpanelland.cpp
     llpanellandaudio.cpp
+    llpanellandmarkinfo.cpp
     llpanellandmarks.cpp
     llpanellandmedia.cpp
     llpanellogin.cpp
@@ -337,6 +337,7 @@ set(viewer_SOURCE_FILES
     llpanelpicks.cpp
     llpanelplace.cpp
     llpanelplaceinfo.cpp
+    llpanelplaceprofile.cpp
     llpanelplaces.cpp
     llpanelplacestab.cpp
     llpanelprimmediacontrols.cpp
@@ -436,12 +437,14 @@ set(viewer_SOURCE_FILES
     llvectorperfoptions.cpp
     llviewchildren.cpp
     llviewerassetstorage.cpp
+    llviewerassettype.cpp
     llvieweraudio.cpp
     llviewercamera.cpp
     llviewercontrol.cpp
     llviewercontrollistener.cpp
     llviewerdisplay.cpp
     llviewerfloaterreg.cpp
+    llviewerfoldertype.cpp
     llviewergenericmessage.cpp
     llviewergesture.cpp    
     llviewerhelp.cpp
@@ -702,7 +705,6 @@ set(viewer_HEADER_FILES
     llfloaterwhitelistentry.h
     llfloaterwindlight.h
     llfloaterworldmap.h
-    llfoldertype.h
     llfolderview.h
     llfoldervieweventlistener.h
     llfolderviewitem.h
@@ -800,6 +802,7 @@ set(viewer_HEADER_FILES
     llpanelimcontrolpanel.h
     llpanelland.h
     llpanellandaudio.h
+    llpanellandmarkinfo.h
     llpanellandmarks.h
     llpanellandmedia.h
     llpanellogin.h
@@ -820,6 +823,7 @@ set(viewer_HEADER_FILES
     llpanelpicks.h
     llpanelplace.h
     llpanelplaceinfo.h
+    llpanelplaceprofile.h
     llpanelplaces.h
     llpanelplacestab.h
     llpanelprimmediacontrols.h
@@ -923,6 +927,7 @@ set(viewer_HEADER_FILES
     llvectorperfoptions.h
     llviewchildren.h
     llviewerassetstorage.h
+    llviewerassettype.h
     llvieweraudio.h
     llviewerbuild.h
     llviewercamera.h
@@ -930,6 +935,7 @@ set(viewer_HEADER_FILES
     llviewercontrollistener.h
     llviewerdisplay.h
     llviewerfloaterreg.h
+    llviewerfoldertype.h
     llviewergenericmessage.h
     llviewergesture.h    
     llviewerhelp.h
diff --git a/indra/newview/app_settings/foldertypes.xml b/indra/newview/app_settings/foldertypes.xml
index 2038779c4f5..0d539177f38 100644
--- a/indra/newview/app_settings/foldertypes.xml
+++ b/indra/newview/app_settings/foldertypes.xml
@@ -1,66 +1,61 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <ensemble_defs>
   <ensemble
-    asset_num="-1"
-    xui_name="default"
-    icon_name="inv_plain_closed.tga"
-     />
-  <ensemble
-    asset_num="27"
+    foldertype_num="27"
     xui_name="head"
     icon_name="inv_folder_outfit_head.tga"
 	allowed="hair,eyes"
      />
   <ensemble
-    asset_num="28"
+    foldertype_num="28"
     xui_name="gloves"
     icon_name="inv_folder_outfit_gloves.tga"
 	allowed="gloves"
      />
   <ensemble
-    asset_num="29"
+    foldertype_num="29"
     xui_name="jacket"
     icon_name="inv_folder_outfit_jacket.tga"
 	allowed="jacket"
      />
   <ensemble
-    asset_num="30"
+    foldertype_num="30"
     xui_name="pants"
     icon_name="inv_folder_outfit_pants.tga"
 	allowed="pants,underpants"
      />
   <ensemble
-    asset_num="31"
+    foldertype_num="31"
     xui_name="shape"
     icon_name="inv_folder_outfit_shape.tga"
 	allowed="shape,skin,hair,eyes"
      />
   <ensemble
-    asset_num="32"
+    foldertype_num="32"
     xui_name="shoes"
     icon_name="inv_folder_outfit_shoes.tga"
 	allowed="shoes,socks"
      />
   <ensemble
-    asset_num="33"
+    foldertype_num="33"
     xui_name="shirt"
     icon_name="inv_folder_outfit_shirt.tga"
 	allowed="shirt,undershirt"
      />
   <ensemble
-    asset_num="34"
+    foldertype_num="34"
     xui_name="skirt"
     icon_name="inv_folder_outfit_skirt.tga"
 	allowed=""
      />
   <ensemble
-    asset_num="35"
+    foldertype_num="35"
     xui_name="underpants"
     icon_name="inv_folder_outfit_underpants.tga"
 	allowed="underpants"
      />
   <ensemble
-    asset_num="36"
+    foldertype_num="36"
     xui_name="undershirt"
     icon_name="inv_folder_outfit_undershirt.tga"
 	allowed="undershirt"
diff --git a/indra/newview/llagentpicksinfo.cpp b/indra/newview/llagentpicksinfo.cpp
index 6e5835bace2..3c8d0dac426 100644
--- a/indra/newview/llagentpicksinfo.cpp
+++ b/indra/newview/llagentpicksinfo.cpp
@@ -47,7 +47,8 @@ class LLAgentPicksInfo::LLAgentPicksObserver : public LLAvatarPropertiesObserver
 
 	~LLAgentPicksObserver()
 	{
-		LLAvatarPropertiesProcessor::getInstance()->removeObserver(gAgent.getID(), this);
+		if (LLAvatarPropertiesProcessor::instanceExists())
+			LLAvatarPropertiesProcessor::getInstance()->removeObserver(gAgent.getID(), this);
 	}
 
 	void sendAgentPicksRequest()
diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
index 09f7c49f23d..2911a35581b 100644
--- a/indra/newview/llagentui.cpp
+++ b/indra/newview/llagentui.cpp
@@ -92,7 +92,10 @@ std::string LLAgentUI::buildSLURL(const bool escaped /*= true*/)
 //static
 BOOL LLAgentUI::checkAgentDistance(const LLVector3& pole, F32 radius)
 {
-	return  (gAgent.getPositionAgent() - pole).length() < radius;
+	F32 delta_x = gAgent.getPositionAgent().mV[VX] - pole.mV[VX];
+	F32 delta_y = gAgent.getPositionAgent().mV[VY] - pole.mV[VY];
+	
+	return  sqrt( delta_x* delta_x + delta_y* delta_y ) < radius;
 }
 BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const LLVector3& agent_pos_region)
 {
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 4b3d27767c8..8c76a219a07 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -434,7 +434,7 @@ void LLAgentWearables::saveWearableAs(const EWearableType type,
 	if (save_in_lost_and_found)
 	{
 		category_id = gInventory.findCategoryUUIDForType(
-			LLAssetType::AT_LOST_AND_FOUND);
+			LLFolderType::FT_LOST_AND_FOUND);
 	}
 	else
 	{
@@ -840,7 +840,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
 		}
 
 		// Get the UUID of the current outfit folder (will be created if it doesn't exist)
-		LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 		
 		LLInitialWearablesFetch* outfit = new LLInitialWearablesFetch();
 		
@@ -981,8 +981,7 @@ void LLAgentWearables::recoverMissingWearable(const EWearableType type, U32 inde
 	// Add a new one in the lost and found folder.
 	// (We used to overwrite the "not found" one, but that could potentially
 	// destory content.) JC
-	LLUUID lost_and_found_id = 
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+	const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 	LLPointer<LLInventoryCallback> cb =
 		new addWearableToAgentInventoryCallback(
 			LLPointer<LLRefCount>(NULL),
@@ -1123,8 +1122,8 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name,
 
 	// First, make a folder in the Clothes directory.
 	LLUUID folder_id = gInventory.createNewCategory(
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING),
-		LLAssetType::AT_NONE,
+		gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING),
+		LLFolderType::FT_NONE,
 		new_folder_name);
 
 	bool found_first_item = false;
@@ -1257,10 +1256,10 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name)
 	}
 
 	// First, make a folder in the My Outfits directory.
-	LLUUID parent_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_MY_OUTFITS);
+	const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
 	LLUUID folder_id = gInventory.createNewCategory(
 		parent_id,
-		LLAssetType::AT_OUTFIT,
+		LLFolderType::FT_OUTFIT,
 		new_folder_name);
 
 	LLAppearanceManager::shallowCopyCategory(LLAppearanceManager::getCOF(),folder_id, NULL);
@@ -2032,7 +2031,7 @@ void LLInitialWearablesFetch::processWearablesMessage()
 {
 	if (!mAgentInitialWearables.empty()) // We have an empty current outfit folder, use the message data instead.
 	{
-		LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 		for (U8 i = 0; i < mAgentInitialWearables.size(); ++i)
 		{
 			// Populate the current outfit folder with links to the wearables passed in the message
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 8d0f11e021e..80086de3dc6 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -130,11 +130,11 @@ void LLOutfitObserver::done()
 			{
 				if(LLInventoryType::IT_GESTURE == item->getInventoryType())
 				{
-					pid = gInventory.findCategoryUUIDForType(LLAssetType::AT_GESTURE);
+					pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE);
 				}
 				else
 				{
-					pid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+					pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 				}
 				break;
 			}
@@ -146,7 +146,7 @@ void LLOutfitObserver::done()
 		
 		LLUUID cat_id = gInventory.createNewCategory(
 			pid,
-			LLAssetType::AT_NONE,
+			LLFolderType::FT_NONE,
 			name);
 		mCatID = cat_id;
 		LLPointer<LLInventoryCallback> cb = new LLWearInventoryCategoryCallback(mCatID, mAppend);
@@ -353,7 +353,7 @@ void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventory
 /* static */ 
 LLUUID LLAppearanceManager::getCOF()
 {
-	return gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+	return gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 }
 
 // Update appearance from outfit folder.
@@ -373,12 +373,12 @@ void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, boo
 	else
 	{
 		LLViewerInventoryCategory* catp = gInventory.getCategory(category);
-		if (catp->getPreferredType() == LLAssetType::AT_NONE ||
-			LLAssetType::lookupIsEnsembleCategoryType(catp->getPreferredType()))
+		if (catp->getPreferredType() == LLFolderType::FT_NONE ||
+			LLFolderType::lookupIsEnsembleType(catp->getPreferredType()))
 		{
 			updateCOFFromCategory(category, append);  // append is false - rebuild COF.
 		}
-		else if (catp->getPreferredType() == LLAssetType::AT_OUTFIT)
+		else if (catp->getPreferredType() == LLFolderType::FT_OUTFIT)
 		{
 			rebuildCOFFromOutfit(category);
 		}
@@ -405,7 +405,7 @@ void LLAppearanceManager::updateCOFFromCategory(const LLUUID& category, bool app
 		return;
 	}
 		
-	const LLUUID &current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+	const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 	// Processes that take time should show the busy cursor
 	//inc_busy_count();
 		
@@ -503,7 +503,7 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 		{
 			LLViewerInventoryCategory *catp = item->getLinkedCategory();
 			// Skip copying outfit links.
-			if (catp && catp->getPreferredType() != LLAssetType::AT_OUTFIT)
+			if (catp && catp->getPreferredType() != LLFolderType::FT_OUTFIT)
 			{
 				link_inventory_item(gAgent.getID(),
 									item->getLinkedUUID(),
@@ -641,7 +641,7 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 
 	// Add link to outfit if category is an outfit. 
 	LLViewerInventoryCategory* catp = gInventory.getCategory(category);
-	if (!append && catp && catp->getPreferredType() == LLAssetType::AT_OUTFIT)
+	if (!append && catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT)
 	{
 		link_inventory_item(gAgent.getID(), category, cof, catp->getName(),
 							LLAssetType::AT_LINK_FOLDER, link_waiter);
@@ -732,7 +732,7 @@ void LLAppearanceManager::rebuildCOFFromOutfit(const LLUUID& category)
 		LLNotifications::instance().add("CouldNotPutOnOutfit");
 		return;
 	}
-		
+
 	// Processes that take time should show the busy cursor
 	//inc_busy_count();
 
@@ -750,7 +750,7 @@ void LLAppearanceManager::rebuildCOFFromOutfit(const LLUUID& category)
 
 	// Create a link to the outfit that we wore.
 	LLViewerInventoryCategory* catp = gInventory.getCategory(category);
-	if (catp && catp->getPreferredType() == LLAssetType::AT_OUTFIT)
+	if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT)
 	{
 		link_inventory_item(gAgent.getID(), category, current_outfit_id, catp->getName(),
 							LLAssetType::AT_LINK_FOLDER, link_waiter);
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index 5dbf57c9bef..d4df6dfbe73 100644
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -334,7 +334,7 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content)
 		LLAssetStorage::LLStoreAssetCallback callback = NULL;
 		void *userdata = NULL;
 		upload_new_resource(next_file, asset_name, asset_name,
-				    0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE,
+				    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
 				    next_owner_perms, group_perms,
 				    everyone_perms, display_name,
 				    callback, expected_upload_cost, userdata);
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 2f674013017..97e0aa5f461 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -343,7 +343,7 @@ bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& re
 		// Servers older than 1.25 require the text of the message to be the
 		// calling card folder ID for the offering user. JC
 		LLUUID calling_card_folder_id = 
-			gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+			gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 		std::string message = calling_card_folder_id.asString();
 		requestFriendship(notification["payload"]["id"].asUUID(), 
 		    notification["payload"]["name"].asString(),
@@ -355,7 +355,7 @@ bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& re
 // static
 void LLAvatarActions::requestFriendship(const LLUUID& target_id, const std::string& target_name, const std::string& message)
 {
-	LLUUID calling_card_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+	const LLUUID calling_card_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 	send_improved_im(target_id,
 					 target_name,
 					 message,
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 7b2dc02864f..8609ba8b1c6 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -239,11 +239,46 @@ void LLAvatarList::refresh()
 	bool dirty = add_limit_exceeded || (have_filter && !have_names);
 	setDirty(dirty);
 
+	// Refreshed all items, lets send refresh_complete signal.
+	if(!dirty)
+	{
+		std::vector<LLSD> cur_values;
+		getValues(cur_values);
+		mRefreshCompleteSignal(this, LLSD((S32)cur_values.size()));
+	}
+
 	// Commit if we've added/removed items.
 	if (modified)
 		onCommit();
 }
 
+bool LLAvatarList::filterHasMatches()
+{
+	uuid_vector_t values = getIDs();
+
+	for (uuid_vector_t::const_iterator it=values.begin(); it != values.end(); it++)
+	{
+		std::string name;
+		const LLUUID& buddy_id = *it;
+		BOOL have_name = gCacheName->getFullName(buddy_id, name);
+
+		// If name has not been loaded yet we consider it as a match.
+		// When the name will be loaded the filter will be applied again(in refresh()).
+
+		if (have_name && !findInsensitive(name, mNameFilter))
+		{
+			continue;
+		}
+
+		return true;
+	}
+	return false;
+}
+
+boost::signals2::connection LLAvatarList::setRefreshCompleteCallback(const commit_signal_t::slot_type& cb)
+{
+	return mRefreshCompleteSignal.connect(cb);
+}
 
 void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos)
 {
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 51d3760d393..195d9e5b550 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -82,6 +82,11 @@ class LLAvatarList : public LLFlatListView
 	const std::string getIconParamName() const{return mIconParamName;}
 	virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 
+	// Return true if filter has at least one match.
+	bool filterHasMatches();
+
+	boost::signals2::connection setRefreshCompleteCallback(const commit_signal_t::slot_type& cb);
+
 protected:
 	void refresh();
 
@@ -107,6 +112,8 @@ class LLAvatarList : public LLFlatListView
 	uuid_vector_t			mIDs;
 
 	LLAvatarListItem::ContextMenu* mContextMenu;
+
+	commit_signal_t mRefreshCompleteSignal;
 };
 
 /** Abstract comparator for avatar items */
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index bad61101c1b..b9e8c5394da 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -51,7 +51,7 @@
 #include "lltransientfloatermgr.h"
 
 static LLDefaultChildRegistry::Register<LLChicletPanel> t1("chiclet_panel");
-static LLDefaultChildRegistry::Register<LLTalkButton> t2("chiclet_talk");
+static LLDefaultChildRegistry::Register<LLTalkButton> t2("talk_button");
 static LLDefaultChildRegistry::Register<LLNotificationChiclet> t3("chiclet_notification");
 static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t4("chiclet_im_p2p");
 static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t5("chiclet_im_group");
@@ -830,13 +830,21 @@ LLChicletPanel::~LLChicletPanel()
 void im_chiclet_callback(LLChicletPanel* panel, const LLSD& data){
 	
 	LLUUID session_id = data["session_id"].asUUID();
+	S32 unread = data["num_unread"].asInteger();
+
+	LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);
+	if (im_floater && im_floater->getVisible())
+	{
+		unread = 0;
+	}
+
 	std::list<LLChiclet*> chiclets = LLIMChiclet::sFindChicletsSignal(session_id);
 	std::list<LLChiclet *>::iterator iter;
 	for (iter = chiclets.begin(); iter != chiclets.end(); iter++) {
 		LLChiclet* chiclet = *iter;
 		if (chiclet != NULL)
 		{
-			chiclet->setCounter(data["num_unread"].asInteger());
+			chiclet->setCounter(unread);
 		}
 	    else
 	    {
@@ -1257,30 +1265,7 @@ LLTalkButton::Params::Params()
  , show_button("show_button")
  , monitor("monitor")
 {
-	// *TODO Vadim: move hardcoded labels (!) and other params to XUI.
-	speak_button.name("left");
-	speak_button.label("Speak");
-	speak_button.label_selected("Speak");
-	speak_button.font(LLFontGL::getFontSansSerifSmall());
-	speak_button.tab_stop(false);
-	speak_button.is_toggle(true);
-	speak_button.picture_style(true);
-	// Use default button art. JC
-	//speak_button.image_selected(LLUI::getUIImage("SegmentedBtn_Left_Selected"));
-	//speak_button.image_unselected(LLUI::getUIImage("SegmentedBtn_Left_Off"));
-
-	show_button.name("right");
-	show_button.label(LLStringUtil::null);
-	show_button.rect(LLRect(0, 0, 20, 0));
-	show_button.tab_stop(false);
-	show_button.is_toggle(true);
-	show_button.picture_style(true);
-	show_button.image_selected(LLUI::getUIImage("ComboButton_Selected"));
-	show_button.image_unselected(LLUI::getUIImage("ComboButton_Off"));
-
-	monitor.name("monitor");
-	// *TODO: Make this data driven.
-	monitor.rect(LLRect(0, 18, 18, 0));
+	// See widgets/talk_button.xml
 }
 
 LLTalkButton::LLTalkButton(const Params& p)
@@ -1336,6 +1321,7 @@ LLTalkButton::LLTalkButton(const Params& p)
 
 	// never show "muted" because you can't mute yourself
 	mOutputMonitor->setIsMuted(false);
+	mOutputMonitor->setIsAgentControl(true);
 }
 
 LLTalkButton::~LLTalkButton()
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index a6afbc05bec..a3980457b98 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -437,7 +437,7 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
 			}
 			else
 			{
-				LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+				const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 				if (item->getParentUUID() == favorites_id)
 				{
 					llwarns << "Attemt to copy a favorite item into the same folder." << llendl;
@@ -539,7 +539,7 @@ void LLFavoritesBarCtrl::handleNewFavoriteDragAndDrop(LLInventoryItem *item, con
 	LLToolDragAndDrop* tool_dad = LLToolDragAndDrop::getInstance();
 	if (tool_dad->getSource() == LLToolDragAndDrop::SOURCE_NOTECARD)
 	{
-		viewer_item->setType(LLAssetType::AT_FAVORITE);
+		viewer_item->setType(LLAssetType::AT_LANDMARK);
 		copy_inventory_from_notecard(tool_dad->getObjectID(), tool_dad->getSourceID(), viewer_item.get(), gInventoryCallbacks.registerCB(cb));
 	}
 	else
@@ -561,7 +561,7 @@ void LLFavoritesBarCtrl::changed(U32 mask)
 {
 	if (mFavoriteFolderId.isNull())
 	{
-		mFavoriteFolderId = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+		mFavoriteFolderId = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 		
 		if (mFavoriteFolderId.notNull())
 		{
diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp
index 55b7ed0c99c..095fe0a220f 100644
--- a/indra/newview/llfloateranimpreview.cpp
+++ b/indra/newview/llfloateranimpreview.cpp
@@ -989,7 +989,7 @@ void LLFloaterAnimPreview::onBtnOK(void* userdata)
 						    name,
 						    desc,
 						    0,
-						    LLAssetType::AT_NONE,
+						    LLFolderType::FT_NONE,
 						    LLInventoryType::IT_ANIMATION,
 						    LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
 						    name,
diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp
index 7cb8987879a..538b44c0565 100644
--- a/indra/newview/llfloaterbulkpermission.cpp
+++ b/indra/newview/llfloaterbulkpermission.cpp
@@ -264,7 +264,6 @@ void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, Invent
 			( asstype == LLAssetType::AT_BODYPART  && gSavedSettings.getBOOL("BulkChangeIncludeBodyParts" )) ||
 			( asstype == LLAssetType::AT_CLOTHING  && gSavedSettings.getBOOL("BulkChangeIncludeClothing"  )) ||
 			( asstype == LLAssetType::AT_GESTURE   && gSavedSettings.getBOOL("BulkChangeIncludeGestures"  )) ||
-			( asstype == LLAssetType::AT_FAVORITE  && gSavedSettings.getBOOL("BulkChangeIncludeFavourite" )) ||
 			( asstype == LLAssetType::AT_NOTECARD  && gSavedSettings.getBOOL("BulkChangeIncludeNotecards" )) ||
 			( asstype == LLAssetType::AT_OBJECT    && gSavedSettings.getBOOL("BulkChangeIncludeObjects"   )) ||
 			( asstype == LLAssetType::AT_LSL_TEXT  && gSavedSettings.getBOOL("BulkChangeIncludeScripts"   )) ||
diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp
index 3da06fa7b32..cefd7a38080 100644
--- a/indra/newview/llfloaterbuy.cpp
+++ b/indra/newview/llfloaterbuy.cpp
@@ -293,7 +293,7 @@ void LLFloaterBuy::onClickBuy()
 {
 	// Put the items where we put new folders.
 	LLUUID category_id;
-	category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+	category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
 
 	// *NOTE: doesn't work for multiple object buy, which UI does not
 	// currently support sale info is used for verification only, if
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
index f3eaa0c9163..32802f6a200 100644
--- a/indra/newview/llfloaterbuycontents.cpp
+++ b/indra/newview/llfloaterbuycontents.cpp
@@ -286,7 +286,7 @@ void LLFloaterBuyContents::onClickBuy()
 
 	// Put the items where we put new folders.
 	LLUUID category_id;
-	category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CATEGORY);
+	category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CATEGORY);
 
 	// *NOTE: doesn't work for multiple object buy, which UI does not
 	// currently support sale info is used for verification only, if
diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp
index 8570b5eb4a7..92778510e70 100644
--- a/indra/newview/llfloaterinventory.cpp
+++ b/indra/newview/llfloaterinventory.cpp
@@ -40,6 +40,7 @@
 #include "llinventorymodel.h"
 #include "llpanelmaininventory.h"
 #include "llresmgr.h"
+#include "llviewerfoldertype.h"
 
 ///----------------------------------------------------------------------------
 /// LLFloaterInventory
diff --git a/indra/newview/llfloaterinventory.h b/indra/newview/llfloaterinventory.h
index f2f2963a333..c0de89bff22 100644
--- a/indra/newview/llfloaterinventory.h
+++ b/indra/newview/llfloaterinventory.h
@@ -35,6 +35,7 @@
 #define LL_LLFLOATERINVENTORY_H
 
 #include "llfloater.h"
+#include "llfoldertype.h"
 
 class LLInventoryPanel;
 class LLPanelMainInventory;
diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp
index ed7d2c71eaa..b7296518d46 100644
--- a/indra/newview/llfloaternamedesc.cpp
+++ b/indra/newview/llfloaternamedesc.cpp
@@ -176,7 +176,7 @@ void LLFloaterNameDesc::onBtnOK( )
 	upload_new_resource(mFilenameAndPath, // file
 			    childGetValue("name_form").asString(), 
 			    childGetValue("description_form").asString(), 
-			    0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE,
+			    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
 			    LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
 			    display_name, callback, expected_upload_cost, nruserdata);
 	closeFloater(false);
diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp
index b6ec0868cfd..e277aba493c 100644
--- a/indra/newview/llfloateropenobject.cpp
+++ b/indra/newview/llfloateropenobject.cpp
@@ -158,14 +158,14 @@ void LLFloaterOpenObject::moveToInventory(bool wear)
 	if (wear)
 	{
 		parent_category_id = gInventory.findCategoryUUIDForType(
-			LLAssetType::AT_CLOTHING);
+			LLFolderType::FT_CLOTHING);
 	}
 	else
 	{
 		parent_category_id = gInventory.getRootFolderID();
 	}
 	LLUUID category_id = gInventory.createNewCategory(parent_category_id, 
-		LLAssetType::AT_NONE, 
+		LLFolderType::FT_NONE, 
 		name);
 
 	LLCatAndWear* data = new LLCatAndWear;
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index ad2fe34e95e..0f4d6e33a36 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -770,7 +770,7 @@ void LLFloaterReporter::takeScreenshot()
 	if (COMPLAINT_REPORT == mReportType)
 	{
 		mResourceDatap->mAssetInfo.mType = LLAssetType::AT_TEXTURE;
-		mResourceDatap->mPreferredLocation = LLAssetType::EType(-2);
+		mResourceDatap->mPreferredLocation = LLFolderType::EType(LLResourceData::INVALID_LOCATION);
 	}
 	else
 	{
@@ -838,7 +838,7 @@ void LLFloaterReporter::uploadDoneCallback(const LLUUID &uuid, void *user_data,
 	}
 
 	EReportType report_type = UNKNOWN_REPORT;
-	if (data->mPreferredLocation == -2)
+	if (data->mPreferredLocation == LLResourceData::INVALID_LOCATION)
 	{
 		report_type = COMPLAINT_REPORT;
 	}
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 235e8192186..541e2a26648 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -980,7 +980,7 @@ void LLSnapshotLivePreview::saveTexture()
 				    "Snapshot : " + pos_string,
 				    "Taken by " + who_took_it + " at " + pos_string,
 				    0,
-				    LLAssetType::AT_SNAPSHOT_CATEGORY,
+				    LLFolderType::FT_SNAPSHOT_CATEGORY,
 				    LLInventoryType::IT_SNAPSHOT,
 				    PERM_ALL,  // Note: Snapshots to inventory is a special case of content upload
 				    PERM_NONE, // that ignores the user's premissions preferences and continues to
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index f3f600149f9..6567c1a649f 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -327,7 +327,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
 		LLFirstUse::useMap();
 
 		// Start speculative download of landmarks
-		LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+		const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 		gInventory.startBackgroundFetch(landmark_folder_id);
 
 		childSetFocus("location", TRUE);
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index a963c96da43..7863c373c62 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -55,6 +55,7 @@
 #include "llviewermenu.h"
 #include "lluictrlfactory.h"
 #include "llviewercontrol.h"
+#include "llviewerfoldertype.h"
 #include "llviewerwindow.h"
 #include "llvoavatar.h"
 #include "llfloaterproperties.h"
@@ -1108,7 +1109,7 @@ void LLFolderView::propertiesSelectedItems( void )
 	}
 }
 
-void LLFolderView::changeType(LLInventoryModel *model, LLAssetType::EType new_folder_type)
+void LLFolderView::changeType(LLInventoryModel *model, LLFolderType::EType new_folder_type)
 {
 	LLFolderBridge *folder_bridge = LLFolderBridge::sSelf;
 
@@ -1958,7 +1959,7 @@ bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata)
 	if (action.length() > change_folder_string.length() && 
 		(action.compare(0,change_folder_string.length(),"change_folder_type_") == 0))
 	{
-		LLAssetType::EType new_folder_type = LLFolderType::lookupTypeFromXUIName(action.substr(change_folder_string.length()));
+		LLFolderType::EType new_folder_type = LLViewerFolderType::lookupTypeFromXUIName(action.substr(change_folder_string.length()));
 		changeType(model, new_folder_type);
 		return true;
 	}
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index ebfb4efde2d..0bd65b5f909 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -192,7 +192,7 @@ class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler
 	void propertiesSelectedItems( void );
 
 	// change the folder type
-	void changeType(LLInventoryModel *model, LLAssetType::EType new_folder_type);
+	void changeType(LLInventoryModel *model, LLFolderType::EType new_folder_type);
 
 	void autoOpenItem(LLFolderViewFolder* item);
 	void closeAutoOpenedFolders();
diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h
index ff38da279a5..60ece75cead 100644
--- a/indra/newview/llfoldervieweventlistener.h
+++ b/indra/newview/llfoldervieweventlistener.h
@@ -32,6 +32,7 @@
 #define LLFOLDERVIEWEVENTLISTENER_H
 
 #include "lldarray.h"	// JAMESDEBUG convert to std::vector
+#include "llfoldertype.h"
 #include "llfontgl.h"	// just for StyleFlags enum
 #include "llpointer.h"
 
@@ -57,7 +58,7 @@ class LLFolderViewEventListener
 	virtual const LLUUID& getUUID() const = 0;
 	virtual time_t getCreationDate() const = 0;	// UTC seconds
 	virtual PermissionMask getPermissionMask() const = 0;
-	virtual LLAssetType::EType getPreferredType() const = 0;
+	virtual LLFolderType::EType getPreferredType() const = 0;
 	virtual LLPointer<LLUIImage> getIcon() const = 0;
 	virtual LLFontGL::StyleFlags getLabelStyle() const = 0;
 	virtual std::string getLabelSuffix() const = 0;
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index f83a426cdab..6fdaefd21ab 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -248,13 +248,13 @@ void LLFolderViewItem::refreshFromListener()
 	if(mListener)
 	{
 		mLabel = mListener->getDisplayName();
-		LLAssetType::EType preferred_type = mListener->getPreferredType();
+		LLFolderType::EType preferred_type = mListener->getPreferredType();
 
 		// *TODO: to be removed when database supports multi language. This is a
 		// temporary attempt to display the inventory folder in the user locale.
 		// mantipov: *NOTE: be sure this code is synchronized with LLFriendCardsManager::findChildFolderUUID
 		//		it uses the same way to find localized string
-		if (LLAssetType::lookupIsProtectedCategoryType(preferred_type))
+		if (LLFolderType::lookupIsProtectedType(preferred_type))
 		{
 			LLTrans::findString(mLabel, "InvFolder " + mLabel);
 		};
@@ -1753,7 +1753,7 @@ bool LLFolderViewFolder::isTrash() const
 {
 	if (mAmTrash == LLFolderViewFolder::UNKNOWN)
 	{
-		mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH, false) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH;
+		mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH, false) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH;
 	}
 	return mAmTrash == LLFolderViewFolder::TRASH;
 }
@@ -2167,7 +2167,7 @@ BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )
 {
 	const LLUUID &cat_uuid = getListener()->getUUID();
 	const LLViewerInventoryCategory *cat = gInventory.getCategory(cat_uuid);
-	if (cat && cat->getPreferredType() == LLAssetType::AT_OUTFIT)
+	if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT)
 	{
 		getListener()->performAction(NULL, NULL,"replaceoutfit");
 		return TRUE;
@@ -2490,7 +2490,7 @@ bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolde
 		&& b->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
 	{
 
-		static LLUUID favorites_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+		static const LLUUID& favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 
 		LLUUID a_uuid = a->getParentFolder()->getListener()->getUUID();
 		LLUUID b_uuid = b->getParentFolder()->getListener()->getUUID();
diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp
index fbcaeee01f2..5f79fe8b201 100644
--- a/indra/newview/llfriendcard.cpp
+++ b/indra/newview/llfriendcard.cpp
@@ -135,14 +135,14 @@ const LLUUID LLFriendCardsManager::extractAvatarID(const LLUUID& avatarID)
 // and this method must be called before any actions with friend list
 void LLFriendCardsManager::ensureFriendFoldersExist()
 {
-	LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+	const LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 
 	LLUUID friendFolderUUID = findFriendFolderUUIDImpl();
 
 	if (friendFolderUUID.isNull())
 	{
 		friendFolderUUID = gInventory.createNewCategory(callingCardsFolderID,
-			LLAssetType::AT_CALLINGCARD, get_friend_folder_name());
+			LLFolderType::FT_CALLINGCARD, get_friend_folder_name());
 	}
 
 	LLUUID friendAllSubfolderUUID = findFriendAllSubfolderUUIDImpl();
@@ -150,7 +150,7 @@ void LLFriendCardsManager::ensureFriendFoldersExist()
 	if (friendAllSubfolderUUID.isNull())
 	{
 		friendAllSubfolderUUID = gInventory.createNewCategory(friendFolderUUID,
-			LLAssetType::AT_CALLINGCARD, get_friend_all_subfolder_name());
+			LLFolderType::FT_CALLINGCARD, get_friend_all_subfolder_name());
 	}
 }
 
@@ -351,7 +351,7 @@ void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBud
 /************************************************************************/
 const LLUUID& LLFriendCardsManager::findFriendFolderUUIDImpl() const
 {
-	LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+	const LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 
 	std::string friendFolderName = get_friend_folder_name();
 
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index dee86f4a222..19fa66fd0e4 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -106,6 +106,8 @@ void LLIMFloater::onFocusReceived()
 // virtual
 void LLIMFloater::onClose(bool app_quitting)
 {
+	if (!gIMMgr->hasSession(mSessionID)) return;
+	
 	setTyping(false);
 	gIMMgr->leaveSession(mSessionID);
 }
@@ -234,7 +236,10 @@ BOOL LLIMFloater::postBuild()
 	
 	mChatHistory = getChild<LLChatHistory>("chat_history");
 		
-	setTitle(LLIMModel::instance().getName(mSessionID));
+	std::string session_name(LLIMModel::instance().getName(mSessionID));
+	LLStringUtil::toUpper(session_name);
+	setTitle(session_name);
+
 	setDocked(true);
 
 	mTypingStart = LLTrans::getString("IM_typing_start_string");
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index bfad2b16248..9989a3b4731 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -188,7 +188,8 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
 {
 	mCommitCallbackRegistrar.add("InspectAvatar.ViewProfile",	boost::bind(&LLInspectAvatar::onClickViewProfile, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.AddFriend",	boost::bind(&LLInspectAvatar::onClickAddFriend, this));	
-	mCommitCallbackRegistrar.add("InspectAvatar.IM",	boost::bind(&LLInspectAvatar::onClickIM, this));	
+	mCommitCallbackRegistrar.add("InspectAvatar.IM",
+		boost::bind(&LLInspectAvatar::onClickIM, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.Teleport",	boost::bind(&LLInspectAvatar::onClickTeleport, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.InviteToGroup",	boost::bind(&LLInspectAvatar::onClickInviteToGroup, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.Pay",	boost::bind(&LLInspectAvatar::onClickPay, this));	
@@ -306,7 +307,21 @@ void LLInspectAvatar::requestUpdate()
 	// You can't re-add someone as a friend if they are already your friend
 	bool is_friend = LLAvatarTracker::instance().getBuddyInfo(mAvatarID) != NULL;
 	bool is_self = (mAvatarID == gAgentID);
-	childSetEnabled("add_friend_btn", !is_friend && !is_self);
+	if (is_self)
+	{
+		getChild<LLUICtrl>("add_friend_btn")->setVisible(false);
+		getChild<LLUICtrl>("im_btn")->setVisible(false);
+	}
+	else if (is_friend)
+	{
+		getChild<LLUICtrl>("add_friend_btn")->setVisible(false);
+		getChild<LLUICtrl>("im_btn")->setVisible(true);
+	}
+	else
+	{
+		getChild<LLUICtrl>("add_friend_btn")->setVisible(true);
+		getChild<LLUICtrl>("im_btn")->setVisible(false);
+	}
 
 	// Use an avatar_icon even though the image id will come down with the
 	// avatar properties because the avatar_icon code maintains a cache of icons
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index b9775cf0e9c..b9a25d5dc74 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -78,6 +78,7 @@
 #include "llscrollcontainer.h"
 #include "llimview.h"
 #include "lltooldraganddrop.h"
+#include "llviewerfoldertype.h"
 #include "llviewertexturelist.h"
 #include "llviewerinventory.h"
 #include "llviewerobjectlist.h"
@@ -85,6 +86,7 @@
 #include "llvoavatar.h"
 #include "llwearable.h"
 #include "llwearablelist.h"
+#include "llviewerassettype.h"
 #include "llviewermessage.h"
 #include "llviewerregion.h"
 #include "llvoavatarself.h"
@@ -202,9 +204,9 @@ PermissionMask LLInvFVBridge::getPermissionMask() const
 }
 
 // virtual
-LLAssetType::EType LLInvFVBridge::getPreferredType() const
+LLFolderType::EType LLInvFVBridge::getPreferredType() const
 {
-	return LLAssetType::AT_NONE;
+	return LLFolderType::FT_NONE;
 }
 
 
@@ -339,7 +341,7 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return;
 	LLMessageSystem* msg = gMessageSystem;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	LLViewerInventoryItem* item = NULL;
 	LLViewerInventoryCategory* cat = NULL;
 	std::vector<LLUUID> move_ids;
@@ -504,7 +506,7 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
 			}
 		}
 		const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i));
-		if (cat && !LLAssetType::lookupCanLink(cat->getPreferredType()))
+		if (cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
 		{
 			return FALSE;
 		}
@@ -645,7 +647,7 @@ BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
 
 	if(obj)
 	{
-		*type = LLAssetType::lookupDragAndDropType(obj->getActualType());
+		*type = LLViewerAssetType::lookupDragAndDropType(obj->getActualType());
 		if(*type == DAD_NONE)
 		{
 			return FALSE;
@@ -686,7 +688,7 @@ BOOL LLInvFVBridge::isInTrash() const
 {
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return FALSE;
-	const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	return model->isObjectDescendentOf(mUUID, trash_id);
 }
 
@@ -699,7 +701,7 @@ BOOL LLInvFVBridge::isLinkedObjectInTrash() const
 	{
 		LLInventoryModel* model = getInventoryModel();
 		if(!model) return FALSE;
-		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		return model->isObjectDescendentOf(obj->getLinkedUUID(), trash_id);
 	}
 	return FALSE;
@@ -717,7 +719,7 @@ BOOL LLInvFVBridge::isCOFFolder() const
 {
 	const LLInventoryModel* model = getInventoryModel();
 	if(!model) return TRUE;
-	const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+	const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 	if (mUUID == cof_id || model->isObjectDescendentOf(mUUID, cof_id))
 	{
 		return TRUE;
@@ -1044,7 +1046,7 @@ void LLItemBridge::restoreItem()
 	if(item)
 	{
 		LLInventoryModel* model = getInventoryModel();
-		const LLUUID new_parent = model->findCategoryUUIDForType(item->getType());
+		const LLUUID new_parent = model->findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(item->getType()));
 		// do not restamp on restore.
 		LLInvFVBridge::changeItemParent(model, item, new_parent, FALSE);
 	}
@@ -1077,7 +1079,7 @@ void LLItemBridge::restoreToWorld()
 	}
 
 	// Check if it's in the trash. (again similar to the normal rez logic)
-	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id))
 	{
 		remove_from_inventory = TRUE;
@@ -1272,7 +1274,7 @@ BOOL LLItemBridge::removeItem()
 	LLPreview::hide(mUUID, TRUE);
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return FALSE;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	LLViewerInventoryItem* item = getItem();
 
 	// if item is not already in trash
@@ -1365,7 +1367,7 @@ BOOL LLFolderBridge::isItemMovable() const
 	LLInventoryObject* obj = getInventoryObject();
 	if(obj)
 	{
-		return (!LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)obj)->getPreferredType()));
+		return (!LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)obj)->getPreferredType()));
 	}
 	return FALSE;
 }
@@ -1401,7 +1403,7 @@ BOOL LLFolderBridge::isItemRemovable()
 		return FALSE;
 	}
 
-	if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+	if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
 	{
 		return FALSE;
 	}
@@ -1414,7 +1416,7 @@ BOOL LLFolderBridge::isItemRemovable()
 	for( i = 0; i < descendent_categories.count(); i++ )
 	{
 		LLInventoryCategory* category = descendent_categories[i];
-		if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+		if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
 		{
 			return FALSE;
 		}
@@ -1591,20 +1593,20 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 		const LLUUID& cat_id = inv_cat->getUUID();
 
 		// Is the destination the trash?
-		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		BOOL move_is_into_trash = (mUUID == trash_id)
 				|| model->isObjectDescendentOf(mUUID, trash_id);
-		BOOL is_movable = (!LLAssetType::lookupIsProtectedCategoryType(inv_cat->getPreferredType()));
-		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		BOOL is_movable = (!LLFolderType::lookupIsProtectedType(inv_cat->getPreferredType()));
+		const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
+		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
 		if (move_is_into_current_outfit || move_is_into_outfit)
 		{
 			// BAP - restrictions?
 			is_movable = true;
 		}
 
-		if (mUUID == gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE))
+		if (mUUID == gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE))
 		{
 			is_movable = FALSE; // It's generally movable but not into Favorites folder. EXT-1604
 		}
@@ -1616,7 +1618,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 			for( i = 0; i < descendent_categories.count(); i++ )
 			{
 				LLInventoryCategory* category = descendent_categories[i];
-				if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+				if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
 				{
 					// ...can't move "special folders" like Textures
 					is_movable = FALSE;
@@ -1849,8 +1851,8 @@ bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat,
 		LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe?
 		// BAP remove AT_NONE support after ensembles are fully working?
 		return (linked_category &&
-				((linked_category->getPreferredType() == LLAssetType::AT_NONE) ||
-				 (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType()))));
+				((linked_category->getPreferredType() == LLFolderType::FT_NONE) ||
+				 (LLFolderType::lookupIsEnsembleType(linked_category->getPreferredType()))));
 	}
 }
 
@@ -2152,7 +2154,7 @@ void LLFolderBridge::determineFolderType()
 BOOL LLFolderBridge::isItemRenameable() const
 {
 	LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)getCategory();
-	if(cat && !LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())
+	if(cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType())
 	   && (cat->getOwnerID() == gAgent.getID()))
 	{
 		return TRUE;
@@ -2167,15 +2169,15 @@ void LLFolderBridge::restoreItem()
 	if(cat)
 	{
 		LLInventoryModel* model = getInventoryModel();
-		LLUUID new_parent = model->findCategoryUUIDForType(cat->getType());
+		const LLUUID new_parent = model->findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(cat->getType()));
 		// do not restamp children on restore
 		LLInvFVBridge::changeCategoryParent(model, cat, new_parent, FALSE);
 	}
 }
 
-LLAssetType::EType LLFolderBridge::getPreferredType() const
+LLFolderType::EType LLFolderBridge::getPreferredType() const
 {
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
 	LLViewerInventoryCategory* cat = getCategory();
 	if(cat)
 	{
@@ -2188,7 +2190,7 @@ LLAssetType::EType LLFolderBridge::getPreferredType() const
 // Icons for folders are based on the preferred type
 LLUIImagePtr LLFolderBridge::getIcon() const
 {
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
 	LLViewerInventoryCategory* cat = getCategory();
 	if(cat)
 	{
@@ -2197,7 +2199,7 @@ LLUIImagePtr LLFolderBridge::getIcon() const
 	return getIcon(preferred_type);
 }
 
-LLUIImagePtr LLFolderBridge::getIcon(LLAssetType::EType preferred_type)
+LLUIImagePtr LLFolderBridge::getIcon(LLFolderType::EType preferred_type)
 {
 	// we only have one folder image now
 	return LLUI::getUIImage("Inv_FolderClosed");
@@ -2236,7 +2238,7 @@ BOOL LLFolderBridge::removeItem()
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return FALSE;
 
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 
 	// Look for any gestures and deactivate them
 	LLInventoryModel::cat_array_t	descendent_categories;
@@ -2354,11 +2356,11 @@ void LLFolderBridge::folderOptionsMenu()
 	if(!model) return;
 
 	const LLInventoryCategory* category = model->getCategory(mUUID);
-	LLAssetType::EType type = category->getPreferredType();
-	const bool is_default_folder = category && LLAssetType::lookupIsProtectedCategoryType(type);
+	LLFolderType::EType type = category->getPreferredType();
+	const bool is_default_folder = category && LLFolderType::lookupIsProtectedType(type);
 	// BAP change once we're no longer treating regular categories as ensembles.
-	const bool is_ensemble = category && (type == LLAssetType::AT_NONE ||
-										  LLAssetType::lookupIsEnsembleCategoryType(type));
+	const bool is_ensemble = category && (type == LLFolderType::FT_NONE ||
+										  LLFolderType::lookupIsEnsembleType(type));
 
 	// calling card related functionality for folders.
 
@@ -2424,8 +2426,8 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 //	std::vector<std::string> disabled_items;
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
+	const LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 
 	mItems.clear(); //adding code to clear out member Items (which means Items should not have other data here at this point)
 	mDisabledItems.clear(); //adding code to clear out disabled members from previous
@@ -2455,7 +2457,6 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	else if(isAgentInventory()) // do not allow creating in library
 	{
 		LLViewerInventoryCategory *cat =  getCategory();
-
 		// BAP removed protected check to re-enable standard ops in untyped folders.
 		// Not sure what the right thing is to do here.
 		if (!isCOFFolder() && cat /*&&
@@ -2472,7 +2473,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			mItems.push_back(std::string("Change Type"));
 
 			LLViewerInventoryCategory *cat = getCategory();
-			if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))
+			if (cat && LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
 			{
 				mDisabledItems.push_back(std::string("Change Type"));
 			}
@@ -2482,7 +2483,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		else
 		{
 			// Want some but not all of the items from getClipboardEntries for outfits.
-			if (cat && cat->getPreferredType()==LLAssetType::AT_OUTFIT)
+			if (cat && cat->getPreferredType()==LLFolderType::FT_OUTFIT)
 			{
 				mItems.push_back(std::string("Rename"));
 				mItems.push_back(std::string("Delete"));
@@ -2618,7 +2619,7 @@ void LLFolderBridge::createNewCategory(void* user_data)
 	if(!model) return;
 	LLUUID id;
 	id = model->createNewCategory(bridge->getUUID(),
-								  LLAssetType::AT_NONE,
+								  LLFolderType::FT_NONE,
 								  LLStringUtil::null);
 	model->notifyObservers();
 
@@ -2703,7 +2704,7 @@ void LLFolderBridge::createWearable(LLFolderBridge* bridge, EWearableType type)
 // Separate function so can be called by global menu as well as right-click
 // menu.
 // static
-void LLFolderBridge::createWearable(LLUUID parent_id, EWearableType type)
+void LLFolderBridge::createWearable(const LLUUID &parent_id, EWearableType type)
 {
 	LLWearable* wearable = LLWearableList::instance().createNewWearable(type);
 	LLAssetType::EType asset_type = wearable->getAssetType();
@@ -2846,17 +2847,17 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 			break;
 
 		case LLAssetType::AT_CATEGORY:
-			is_movable = !LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)inv_item)->getPreferredType());
+			is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType());
 			break;
 		default:
 			break;
 		}
 
-		LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
-		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
+		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
 
 		if(is_movable && move_is_into_trash)
 		{
@@ -2886,7 +2887,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 				.isObjDirectDescendentOfCategory (inv_item, getCategory());
 		}
 
-		LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+		const LLUUID& favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 
 		// we can move item inside a folder only if this folder is Favorites. See EXT-719
 		accept = is_movable && ((mUUID != inv_item->getParentUUID()) || (mUUID == favorites_id));
@@ -4934,7 +4935,7 @@ void	LLLSLTextBridgeAction::doIt()
 BOOL LLWearableBridgeAction::isInTrash() const
 {
 	if(!mModel) return FALSE;
-	LLUUID trash_id = mModel->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = mModel->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	return mModel->isObjectDescendentOf(mUUID, trash_id);
 }
 
@@ -5073,7 +5074,7 @@ std::string LLLinkFolderBridge::sPrefix("Link: ");
 
 LLUIImagePtr LLLinkFolderBridge::getIcon() const
 {
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
 	if (LLViewerInventoryItem *item = getItem())
 	{
 		if (const LLViewerInventoryCategory* cat = item->getLinkedCategory())
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 3f3513a665e..f95e8f93619 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -159,7 +159,7 @@ class LLInvFVBridge : public LLFolderViewEventListener
 	virtual const std::string& getName() const;
 	virtual const std::string& getDisplayName() const;
 	virtual PermissionMask getPermissionMask() const;
-	virtual LLAssetType::EType getPreferredType() const;
+	virtual LLFolderType::EType getPreferredType() const;
 	virtual time_t getCreationDate() const;
 	virtual LLFontGL::StyleFlags getLabelStyle() const
 	{
@@ -298,9 +298,9 @@ class LLFolderBridge : public LLInvFVBridge
 	virtual void selectItem();
 	virtual void restoreItem();
 
-	virtual LLAssetType::EType getPreferredType() const;
+	virtual LLFolderType::EType getPreferredType() const;
 	virtual LLUIImagePtr getIcon() const;
-	static LLUIImagePtr getIcon(LLAssetType::EType asset_type);
+	static LLUIImagePtr getIcon(LLFolderType::EType preferred_type);
 
 	virtual BOOL renameItem(const std::string& new_name);
 	virtual BOOL removeItem();
@@ -321,7 +321,7 @@ class LLFolderBridge : public LLInvFVBridge
 	virtual BOOL copyToClipboard() const;
 	
 	static void createWearable(LLFolderBridge* bridge, EWearableType type);
-	static void createWearable(LLUUID parent_folder_id, EWearableType type);
+	static void createWearable(const LLUUID &parent_folder_id, EWearableType type);
 
 	LLViewerInventoryCategory* getCategory() const;
 
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 77121bd922c..75218e98e0a 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -317,10 +317,6 @@ const std::string& get_item_icon_name(LLAssetType::EType asset_type,
 	case LLAssetType::AT_GESTURE:
 		idx = GESTURE_ICON_NAME;
 		break;
-	case LLAssetType::AT_FAVORITE:
-		//TODO - need bette idx
-		idx = LANDMARK_ICON_NAME;
-		break;
 	case LLAssetType::AT_LINK:
 		idx = LINKITEM_ICON_NAME;
 		break;
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 23439191f3d..baf34b42ff3 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -49,6 +49,7 @@
 #include "llinventoryfunctions.h"
 #include "llinventorypanel.h"
 #include "llfloaterinventory.h"
+#include "llviewerfoldertype.h"
 #include "llviewerinventory.h"
 #include "llviewermessage.h"
 #include "llviewerwindow.h"
@@ -316,7 +317,7 @@ void LLInventoryModel::unlockDirectDescendentArrays(const LLUUID& cat_id)
 // specifies 'type' as what it defaults to containing. The category is
 // not necessarily only for that type. *NOTE: This will create a new
 // inventory category on the fly if one does not exist.
-LLUUID LLInventoryModel::findCategoryUUIDForType(LLAssetType::EType t, bool create_folder)
+const LLUUID LLInventoryModel::findCategoryUUIDForType(LLFolderType::EType t, bool create_folder)
 {
 	const LLUUID &rv = findCatUUID(t);
 	if(rv.isNull() && isInventoryUsable() && create_folder)
@@ -332,10 +333,10 @@ LLUUID LLInventoryModel::findCategoryUUIDForType(LLAssetType::EType t, bool crea
 
 // Internal method which looks for a category with the specified
 // preferred type. Returns LLUUID::null if not found.
-const LLUUID &LLInventoryModel::findCatUUID(LLAssetType::EType preferred_type) const
+const LLUUID &LLInventoryModel::findCatUUID(LLFolderType::EType preferred_type) const
 {
 	const LLUUID &root_id = gInventory.getRootFolderID();
-	if(LLAssetType::AT_CATEGORY == preferred_type)
+	if(LLFolderType::FT_CATEGORY == preferred_type)
 	{
 		return root_id;
 	}
@@ -363,7 +364,7 @@ const LLUUID &LLInventoryModel::findCatUUID(LLAssetType::EType preferred_type) c
 // version will take care of details like what the name should be
 // based on preferred type. Returns the UUID of the new category.
 LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
-										   LLAssetType::EType preferred_type,
+										   LLFolderType::EType preferred_type,
 										   const std::string& pname)
 {
 	LLUUID id;
@@ -373,9 +374,9 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
 		return id;
 	}
 
-	if(preferred_type == LLAssetType::AT_SIMSTATE)
+	if(LLFolderType::lookup(preferred_type) == LLFolderType::badLookup())
 	{
-		lldebugs << "Attempt to create simstate category." << llendl;
+		lldebugs << "Attempt to create undefined category." << llendl;
 		return id;
 	}
 
@@ -387,7 +388,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
 	}
 	else
 	{
-		name.assign(LLAssetType::lookupCategoryName(preferred_type));
+		name.assign(LLViewerFolderType::lookupNewCategoryName(preferred_type));
 	}
 
 	// Add the category to the internal representation
@@ -451,7 +452,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id,
 	// Start with categories
 	if(!include_trash)
 	{
-		const LLUUID trash_id = findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if(trash_id.notNull() && (trash_id == id))
 			return;
 	}
@@ -485,7 +486,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id,
 			if (item->getActualType() == LLAssetType::AT_LINK_FOLDER)
 			{
 				LLViewerInventoryCategory *linked_cat = item->getLinkedCategory();
-				if (linked_cat && linked_cat->getPreferredType() != LLAssetType::AT_OUTFIT)
+				if (linked_cat && linked_cat->getPreferredType() != LLFolderType::FT_OUTFIT)
 					// BAP - was 
 					// LLAssetType::lookupIsEnsembleCategoryType(linked_cat->getPreferredType()))
 					// Change back once ensemble typing is in place.
@@ -665,7 +666,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
 
 		if(item->getParentUUID().isNull())
 		{
-			LLUUID category_id = findCategoryUUIDForType(new_item->getType());
+			const LLUUID category_id = findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(new_item->getType()));
 			new_item->setParent(category_id);
 			item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, category_id);
 			if( item_array )
@@ -689,7 +690,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
 			LLUUID parent_id = item->getParentUUID();
 			if(parent_id == CATEGORIZE_LOST_AND_FOUND_ID)
 			{
-				parent_id = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+				parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 				new_item->setParent(parent_id);
 			}
 			item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, parent_id);
@@ -702,7 +703,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
 				// Whoops! No such parent, make one.
 				llinfos << "Lost item: " << new_item->getUUID() << " - "
 						<< new_item->getName() << llendl;
-				parent_id = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+				parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 				new_item->setParent(parent_id);
 				item_array = get_ptr_in_map(mParentChildItemTree, parent_id);
 				if(item_array)
@@ -1184,7 +1185,7 @@ void LLInventoryModel::mock(const LLUUID& root_id)
 		root_id,
 		LLUUID::null,
 		LLAssetType::AT_CATEGORY,
-		LLAssetType::lookupCategoryName(LLAssetType::AT_ROOT_CATEGORY),
+		LLFolderType::lookupNewCategoryName(LLFolderType::FT_ROOT_CATEGORY),
 		gAgent.getID());
 	addCategory(cat);
 	gInventory.buildParentChildMap();
@@ -1342,7 +1343,7 @@ void  fetchDescendentsResponder::result(const LLSD& content)
 				    item_it != folder_sd["items"].endArray();
 				    ++item_it)
 			    {	
-                    LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+                    const LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
                     if (lost_uuid.notNull())
                     {
 				        LLSD item = *item_it;
@@ -2049,11 +2050,11 @@ bool LLInventoryModel::loadSkeleton(
 			cat->setUUID(folder_id.asUUID());
 			cat->setParent(parent_id.asUUID());
 
-			LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+			LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
 			LLSD type_default = (*it)["type_default"];
 			if(type_default.isDefined())
             {
-				preferred_type = (LLAssetType::EType)type_default.asInteger();
+				preferred_type = (LLFolderType::EType)type_default.asInteger();
             }
             cat->setPreferredType(preferred_type);
 			cat->setVersion(version.asInteger());
@@ -2400,12 +2401,12 @@ void LLInventoryModel::buildParentChildMap()
 					<< cat->getName() << llendl;
 			++lost;
 			// plop it into the lost & found.
-			LLAssetType::EType pref = cat->getPreferredType();
-			if(LLAssetType::AT_NONE == pref)
+			LLFolderType::EType pref = cat->getPreferredType();
+			if(LLFolderType::FT_NONE == pref)
 			{
-				cat->setParent(findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND));
+				cat->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND));
 			}
-			else if(LLAssetType::AT_CATEGORY == pref)
+			else if(LLFolderType::FT_CATEGORY == pref)
 			{
 				// it's the root
 				cat->setParent(LLUUID::null);
@@ -2464,7 +2465,7 @@ void LLInventoryModel::buildParentChildMap()
 			++lost;
 			// plop it into the lost & found.
 			//
-			item->setParent(findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND));
+			item->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND));
 			// move it later using a special message to move items. If
 			// we update server here, the client might crash.
 			//item->updateServer();
@@ -2485,7 +2486,7 @@ void LLInventoryModel::buildParentChildMap()
 		llwarns << "Found " << lost << " lost items." << llendl;
 		LLMessageSystem* msg = gMessageSystem;
 		BOOL start_new_message = TRUE;
-		LLUUID lnf = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+		const LLUUID lnf = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 		for(std::vector<LLUUID>::iterator it = lost_item_ids.begin() ; it < lost_item_ids.end(); ++it)
 		{
 			if(start_new_message)
@@ -2938,7 +2939,7 @@ void LLInventoryModel::processUpdateInventoryFolder(LLMessageSystem* msg,
 		lastfolder = tfolder;
 		tfolder->unpackMessage(msg, _PREHASH_FolderData, i);
 		// make sure it's not a protected folder
-		tfolder->setPreferredType(LLAssetType::AT_NONE);
+		tfolder->setPreferredType(LLFolderType::FT_NONE);
 		folders.push_back(tfolder);
 		// examine update for changes.
 		LLViewerInventoryCategory* folderp = gInventory.getCategory(tfolder->getUUID());
@@ -3325,31 +3326,31 @@ void LLInventoryModel::processMoveInventoryItem(LLMessageSystem* msg, void**)
 
 //----------------------------------------------------------------------------
 
-// Trash: LLAssetType::AT_TRASH, "ConfirmEmptyTrash"
-// Lost&Found: LLAssetType::AT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound"
+// Trash: LLFolderType::FT_TRASH, "ConfirmEmptyTrash"
+// Lost&Found: LLFolderType::FT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound"
 
-bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLAssetType::EType folder_type)
+bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type)
 {
 	S32 option = LLNotification::getSelectedOption(notification, response);
 	if (option == 0) // YES
 	{
-		LLUUID folder_id = findCategoryUUIDForType(folder_type);
+		const LLUUID folder_id = findCategoryUUIDForType(preferred_type);
 		purgeDescendentsOf(folder_id);
 		notifyObservers();
 	}
 	return false;
 }
 
-void LLInventoryModel::emptyFolderType(const std::string notification, LLAssetType::EType folder_type)
+void LLInventoryModel::emptyFolderType(const std::string notification, LLFolderType::EType preferred_type)
 {
 	if (!notification.empty())
 	{
 		LLNotifications::instance().add(notification, LLSD(), LLSD(),
-										boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, folder_type));
+										boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, preferred_type));
 	}
 	else
 	{
-		LLUUID folder_id = findCategoryUUIDForType(folder_type);
+		const LLUUID folder_id = findCategoryUUIDForType(preferred_type);
 		purgeDescendentsOf(folder_id);
 		notifyObservers();
 	}
@@ -3360,7 +3361,7 @@ void LLInventoryModel::emptyFolderType(const std::string notification, LLAssetTy
 void LLInventoryModel::removeItem(const LLUUID& item_id)
 {
 	LLViewerInventoryItem* item = getItem(item_id);
-	const LLUUID new_parent = findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if (item && item->getParentUUID() != new_parent)
 	{
 		LLInventoryModel::update_list_t update;
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index d51460b374c..aba0a619dba 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -34,6 +34,7 @@
 #define LL_LLINVENTORYMODEL_H
 
 #include "llassettype.h"
+#include "llfoldertype.h"
 #include "lldarray.h"
 #include "llframetimer.h"
 #include "llhttpclient.h"
@@ -280,7 +281,7 @@ class LLInventoryModel
 
 	// SDK: Added flag to specify whether the folder should be created if not found.  This fixes the horrible
 	// multiple trash can bug.
-	LLUUID findCategoryUUIDForType(LLAssetType::EType preferred_type, bool create_folder = true);
+	const LLUUID findCategoryUUIDForType(LLFolderType::EType preferred_type, bool create_folder = true);
 
 	// Call this method when it's time to update everyone on a new
 	// state, by default, the inventory model will not update
@@ -329,7 +330,7 @@ class LLInventoryModel
 	// category. If you want to use the default name based on type,
 	// pass in a NULL to the 'name parameter.
 	LLUUID createNewCategory(const LLUUID& parent_id,
-							 LLAssetType::EType preferred_type,
+							 LLFolderType::EType preferred_type,
 							 const std::string& name);
 
 	// methods to load up inventory skeleton & meat. These are used
@@ -385,9 +386,9 @@ class LLInventoryModel
 	bool isCategoryComplete(const LLUUID& cat_id) const;
 	
 	// callbacks
-	// Trigger a notification and empty the folder type (AT_TRASH or AT_LOST_AND_FOUND) if confirmed
-	void emptyFolderType(const std::string notification, LLAssetType::EType folder_type);
-	bool callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLAssetType::EType folder_type);
+	// Trigger a notification and empty the folder type (FT_TRASH or FT_LOST_AND_FOUND) if confirmed
+	void emptyFolderType(const std::string notification, LLFolderType::EType folder_type);
+	bool callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type);
 
 	// Utility Functions
 	void removeItem(const LLUUID& item_id);
@@ -431,7 +432,7 @@ class LLInventoryModel
 	// 
 	// Internal method which looks for a category with the specified
 	// preferred type. Returns LLUUID::null if not found
- 	const LLUUID &findCatUUID(LLAssetType::EType preferred_type) const;
+ 	const LLUUID &findCatUUID(LLFolderType::EType preferred_type) const;
 
 	// Empty the entire contents
 	void empty();
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index d1ca0efed35..178e7d0823e 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -78,6 +78,7 @@
 #include "lltabcontainer.h"
 #include "lltooldraganddrop.h"
 #include "lluictrlfactory.h"
+#include "llviewerfoldertype.h"
 #include "llviewerinventory.h"
 #include "llviewermessage.h"
 #include "llviewerobjectlist.h"
@@ -110,8 +111,8 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :
 
 	// contex menu callbacks
 	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLInventoryPanel::doToSelected, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
-	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND));
 	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLInventoryPanel::doCreate, this, _2));
 	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2));
 	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));
@@ -169,19 +170,19 @@ BOOL LLInventoryPanel::postBuild()
 
 	// determine the root folder, if any, so inventory contents show just the children
 	// of that folder (i.e. not including the folder itself).
-	const LLAssetType::EType preferred_type = LLAssetType::lookupHumanReadable(mStartFolderString);
+	const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(mStartFolderString);
 
-	if ("inventory" == mStartFolderString)
+	if ("INVENTORY" == mStartFolderString)
 	{
 		mStartFolderID = gInventory.getRootFolderID();
 	}
-	else if ("library" == mStartFolderString)
+	else if ("LIBRARY" == mStartFolderString)
 	{
 		mStartFolderID = gInventory.getLibraryRootFolderID();
 	}
 	else
 	{
-		mStartFolderID = (preferred_type != LLAssetType::AT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
+		mStartFolderID = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
 	}
 
 	// build view of inventory if we need default full hierarchy and inventory ready, otherwise wait for modelChanged() callback
@@ -192,7 +193,7 @@ BOOL LLInventoryPanel::postBuild()
 	}
 
 	// bit of a hack to make sure the inventory is open.
-	mFolders->openFolder(preferred_type != LLAssetType::AT_NONE ? LLAssetType::lookupCategoryName(preferred_type) : "My Inventory");
+	mFolders->openFolder(preferred_type != LLFolderType::FT_NONE ? LLViewerFolderType::lookupNewCategoryName(preferred_type) : "My Inventory");
 
 	if (mSortOrderSetting != INHERIT_SORT_ORDER)
 	{
@@ -382,6 +383,19 @@ void LLInventoryPanel::modelChanged(U32 mask)
 							view_item->getParentFolder()->extractItem(view_item);
 							view_item->addToFolder(new_parent, mFolders);
 						}
+/*
+						 on the other side in case Inventory Panel has content of the any folder
+						 it is possible that item moved to some folder which is absent in current
+						 Panel. For ex. removing item (via moving to trash).
+						 In this case we need to check if new parent is other then inventory start folder
+						 and simply remove its View from the hierarchy.
+						 See details in EXT-2098.
+*/
+						// So, let check if item was moved into folder out of this Inventory Panel.
+						else if (mStartFolderID.notNull() && NULL == new_parent && model_item->getParentUUID() != mStartFolderID)
+						{
+							view_item->getParentFolder()->extractItem(view_item);
+						}
 					}
 				}
 				else
@@ -650,7 +664,7 @@ void LLInventoryPanel::openAllFolders()
 	mFolders->arrangeAll();
 }
 
-void LLInventoryPanel::openDefaultFolderForType(LLAssetType::EType type)
+void LLInventoryPanel::openDefaultFolderForType(LLFolderType::EType type)
 {
 	LLUUID category_id = mInventory->findCategoryUUIDForType(type);
 	LLOpenFolderByID opener(category_id);
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 997678a4784..9f74fad5c1c 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -122,7 +122,7 @@ class LLInventoryPanel : public LLPanel
 
 	// Call this method to set the selection.
 	void openAllFolders();
-	void openDefaultFolderForType(LLAssetType::EType);
+	void openDefaultFolderForType(LLFolderType::EType);
 	void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
 	void setSelectCallback(const LLFolderView::signal_t::slot_type& cb) { if (mFolders) mFolders->setSelectCallback(cb); }
 	void clearSelection();
diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp
index 0b07dd4f212..b1829b39459 100644
--- a/indra/newview/lllandmarkactions.cpp
+++ b/indra/newview/lllandmarkactions.cpp
@@ -135,13 +135,13 @@ use_substring(if_use_substring)
 
 // Returns true if the given inventory item is a landmark pointing to the current parcel.
 // Used to find out if there is at least one landmark from current parcel.
-class LLFistAgentParcelLandmark : public LLInventoryCollectFunctor
+class LLFirstAgentParcelLandmark : public LLInventoryCollectFunctor
 {
 private:	
 	bool mFounded;// to avoid unnecessary  check
 	
 public:
-	LLFistAgentParcelLandmark(): mFounded(false){}
+	LLFirstAgentParcelLandmark(): mFounded(false){}
 	
 	/*virtual*/ bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)
 	{
@@ -165,8 +165,7 @@ static void fetch_landmarks(LLInventoryModel::cat_array_t& cats,
 							LLInventoryCollectFunctor& add)
 {
 	// Look in "My Favorites"
-	LLUUID favorites_folder_id =
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+	const LLUUID favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 	gInventory.collectDescendentsIf(favorites_folder_id,
 		cats,
 		items,
@@ -174,8 +173,7 @@ static void fetch_landmarks(LLInventoryModel::cat_array_t& cats,
 		add);
 
 	// Look in "Landmarks"
-	LLUUID landmarks_folder_id = 
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+	const LLUUID landmarks_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 	gInventory.collectDescendentsIf(landmarks_folder_id,
 		cats,
 		items,
@@ -202,7 +200,7 @@ bool LLLandmarkActions::landmarkAlreadyExists()
 //static
 bool LLLandmarkActions::hasParcelLandmark()
 {
-	LLFistAgentParcelLandmark get_first_agent_landmark;
+	LLFirstAgentParcelLandmark get_first_agent_landmark;
 	LLInventoryModel::cat_array_t cats;
 	LLInventoryModel::item_array_t items;
 	fetch_landmarks(cats, items, get_first_agent_landmark);
@@ -287,7 +285,7 @@ void LLLandmarkActions::createLandmarkHere()
 
 	LLAgentUI::buildLocationString(landmark_name, LLAgentUI::LOCATION_FORMAT_LANDMARK);
 	LLAgentUI::buildLocationString(landmark_desc, LLAgentUI::LOCATION_FORMAT_FULL);
-	LLUUID folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+	const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 
 	createLandmarkHere(landmark_name, landmark_desc, folder_id);
 }
diff --git a/indra/newview/lllandmarkactions.h b/indra/newview/lllandmarkactions.h
index 312426cab01..1c524c820c9 100644
--- a/indra/newview/lllandmarkactions.h
+++ b/indra/newview/lllandmarkactions.h
@@ -55,7 +55,7 @@ class LLLandmarkActions
 	static bool landmarkAlreadyExists();
 	
 	/**
-	 * @brief Checks whether landmark exists for current parcel.
+	 * @brief Checks whether landmark exists for current agent parcel.
 	 */
 	static bool hasParcelLandmark();
 
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index e63daac4afb..b35fd6134b7 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -50,6 +50,7 @@
 #include "llslurl.h"
 #include "llurlsimstring.h"
 #include "llviewerinventory.h"
+#include "llviewermenu.h"
 #include "llviewerparcelmgr.h"
 #include "llworldmap.h"
 #include "llappviewer.h"
@@ -271,6 +272,12 @@ void LLNavigationBar::draw()
 	LLPanel::draw();
 }
 
+BOOL LLNavigationBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
+{
+	show_navbar_context_menu(this,x,y);
+	return TRUE;
+}
+
 void LLNavigationBar::onBackButtonClicked()
 {
 	LLTeleportHistory::getInstance()->goBack();
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index 04707d8d48a..52f5a827e4b 100644
--- a/indra/newview/llnavigationbar.h
+++ b/indra/newview/llnavigationbar.h
@@ -54,6 +54,7 @@ class LLNavigationBar
 	virtual ~LLNavigationBar();
 	
 	/*virtual*/ void	draw();
+	/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 	/*virtual*/ BOOL	postBuild();
 
 	void handleLoginComplete();
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 12638ab8551..81d033d7f98 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -97,14 +97,39 @@ BOOL LLNearbyChat::postBuild()
 	if (getDockControl() == NULL)
 	{
 		setDockControl(new LLDockControl(
-				LLBottomTray::getInstance()->getNearbyChatBar(), this,
-				getDockTongue(), LLDockControl::LEFT, boost::bind(&LLNearbyChat::getAllowedRect, this, _1)));
+			LLBottomTray::getInstance()->getNearbyChatBar(), this,
+			getDockTongue(), LLDockControl::LEFT, boost::bind(&LLNearbyChat::getAllowedRect, this, _1)));
 	}
 
 	return true;
 }
 
 
+void    LLNearbyChat::applySavedVariables()
+{
+
+	if (mRectControl.size() > 1)
+	{
+		const LLRect& rect = LLUI::sSettingGroups["floater"]->getRect(mRectControl);
+		reshape(rect.getWidth(), rect.getHeight());
+		setRect(rect);
+	}
+
+
+	if(!LLUI::sSettingGroups["floater"]->controlExists(mDocStateControl))
+	{
+		setDocked(true);
+	}
+	else
+	{
+		if (mDocStateControl.size() > 1)
+		{
+			bool dockState = LLUI::sSettingGroups["floater"]->getBOOL(mDocStateControl);
+			setDocked(dockState);
+		}
+	}
+}
+
 LLColor4 nearbychat_get_text_color(const LLChat& chat)
 {
 	LLColor4 text_color;
@@ -265,11 +290,5 @@ void LLNearbyChat::getAllowedRect(LLRect& rect)
 {
 	rect = gViewerWindow->getWorldViewRect();
 }
-void LLNearbyChat::setVisible	(BOOL visible)
-{
-	LLDockableFloater::setVisible(visible);
-}
-void LLNearbyChat::toggleWindow()
-{
-}
+
 
diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h
index 20cbf7537d6..cb4654654a9 100644
--- a/indra/newview/llnearbychat.h
+++ b/indra/newview/llnearbychat.h
@@ -52,16 +52,15 @@ class LLNearbyChat: public LLDockableFloater
 	void	onNearbyChatContextMenuItemClicked(const LLSD& userdata);
 	bool	onNearbyChatCheckContextMenuItem(const LLSD& userdata);
 
-	void	setDocked			(bool docked, bool pop_on_undock);
-	void	toggleWindow		();
+	void	setDocked			(bool docked, bool pop_on_undock = true);
 
 	/*virtual*/ void	onOpen	(const LLSD& key);
 
-	virtual void setVisible		(BOOL visible);
-
 	virtual void setRect		(const LLRect &rect);
 
 private:
+	virtual void    applySavedVariables();
+
 	void	getAllowedRect		(LLRect& rect);
 
 	void	onNearbySpeakers	();
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 32dc5e59278..d7a5ff289c2 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -77,6 +77,10 @@ LLGestureComboBox::LLGestureComboBox(const LLGestureComboBox::Params& p)
 
 	// refresh list from current active gestures
 	refreshGestures();
+
+	// This forces using of halign from xml, since LLComboBox
+	// sets it to LLFontGL::LEFT, if text entry is disabled
+	mButton->setHAlign(p.drop_down_button.font_halign);
 }
 
 LLGestureComboBox::~LLGestureComboBox()
@@ -207,6 +211,7 @@ LLNearbyChatBar::LLNearbyChatBar()
 	: LLPanel()
 	, mChatBox(NULL)
 {
+	mSpeakerMgr = LLLocalSpeakerMgr::getInstance();
 }
 
 //virtual
@@ -516,8 +521,8 @@ void LLNearbyChatBar::displaySpeakingIndicator()
 	LLUUID id;
 
 	id.setNull();
-	mSpeakerMgr.update(TRUE);
-	mSpeakerMgr.getSpeakerList(&speaker_list, FALSE);
+	mSpeakerMgr->update(TRUE);
+	mSpeakerMgr->getSpeakerList(&speaker_list, FALSE);
 
 	for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i)
 	{
diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h
index 06204e6367b..0307eee7bf0 100644
--- a/indra/newview/llnearbychatbar.h
+++ b/indra/newview/llnearbychatbar.h
@@ -127,7 +127,7 @@ class LLNearbyChatBar
 	LLLineEditor*		mChatBox;
 	LLTalkButton*		mTalkBtn;
 	LLOutputMonitorCtrl* mOutputMonitor;
-	LLActiveSpeakerMgr  mSpeakerMgr;
+	LLLocalSpeakerMgr*  mSpeakerMgr;
 };
 
 #endif
diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp
index 8bac9937f0d..39381e3faae 100644
--- a/indra/newview/lloutputmonitorctrl.cpp
+++ b/indra/newview/lloutputmonitorctrl.cpp
@@ -80,7 +80,8 @@ LLOutputMonitorCtrl::LLOutputMonitorCtrl(const LLOutputMonitorCtrl::Params& p)
 	mImageLevel2(p.image_level_2),
 	mImageLevel3(p.image_level_3),
 	mAutoUpdate(p.auto_update),
-	mSpeakerId(p.speaker_id)
+	mSpeakerId(p.speaker_id),
+	mIsAgentControl(false)
 {
 	//static LLUIColor output_monitor_muted_color = LLUIColorTable::instance().getColor("OutputMonitorMutedColor", LLColor4::orange);
 	//static LLUIColor output_monitor_overdriven_color = LLUIColorTable::instance().getColor("OutputMonitorOverdrivenColor", LLColor4::red);
@@ -132,7 +133,14 @@ void LLOutputMonitorCtrl::draw()
 	if (getVisible() && mAutoUpdate && !mIsMuted && mSpeakerId.notNull())
 	{
 		setPower(gVoiceClient->getCurrentPower(mSpeakerId));
-		setIsTalking(gVoiceClient->getIsSpeaking(mSpeakerId));
+		if(mIsAgentControl)
+		{
+			setIsTalking(gVoiceClient->getUserPTTState());
+		}
+		else
+		{
+			setIsTalking(gVoiceClient->getIsSpeaking(mSpeakerId));
+		}
 	}
 
 	LLPointer<LLUIImage> icon;
diff --git a/indra/newview/lloutputmonitorctrl.h b/indra/newview/lloutputmonitorctrl.h
index 7a7b8bc3a18..85ea552a572 100644
--- a/indra/newview/lloutputmonitorctrl.h
+++ b/indra/newview/lloutputmonitorctrl.h
@@ -81,6 +81,8 @@ class LLOutputMonitorCtrl
 
 	// For the current user, need to know the PTT state to show
 	// correct button image.
+	void			setIsAgentControl(bool val) { mIsAgentControl = val; }
+
 	void			setIsTalking(bool val) { mIsTalking = val; }
 
 	void			setSpeakerId(const LLUUID& speaker_id);
@@ -100,6 +102,7 @@ class LLOutputMonitorCtrl
 	
 
 	F32				mPower;
+	bool			mIsAgentControl;
 	bool			mIsMuted;
 	bool			mIsTalking;
 	LLPointer<LLUIImage> mImageMute;
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index c28792a711d..9d591ef43d1 100644
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -59,6 +59,7 @@
 #include "lltoolcomp.h"
 #include "lltoolmgr.h"
 #include "lltrans.h"
+#include "llviewerassettype.h"
 #include "llviewerobject.h"
 #include "llviewerregion.h"
 #include "llviewerwindow.h"
@@ -167,7 +168,7 @@ void LLPanelContents::onClickNewScript(void *userdata)
 			PERM_NONE,
 			PERM_MOVE | PERM_TRANSFER);
 		std::string desc;
-		LLAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc);
+		LLViewerAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc);
 		LLPointer<LLViewerInventoryItem> new_item =
 			new LLViewerInventoryItem(
 				LLUUID::null,
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index b54975b76b6..21e88b6d07c 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -112,21 +112,32 @@ BOOL LLPanelIMControlPanel::postBuild()
 	childSetAction("add_friend_btn", boost::bind(&LLPanelIMControlPanel::onAddFriendButtonClicked, this));
 
 	childSetAction("share_btn", boost::bind(&LLPanelIMControlPanel::onShareButtonClicked, this));
+	childSetAction("teleport_btn", boost::bind(&LLPanelIMControlPanel::onTeleportButtonClicked, this));
+	childSetAction("pay_btn", boost::bind(&LLPanelIMControlPanel::onPayButtonClicked, this));
 	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId()));
 	
 	return LLPanelChatControlPanel::postBuild();
 }
 
+void LLPanelIMControlPanel::onTeleportButtonClicked()
+{
+	LLAvatarActions::offerTeleport(mAvatarID);
+}
+void LLPanelIMControlPanel::onPayButtonClicked()
+{
+	LLAvatarActions::pay(mAvatarID);
+}
+
 void LLPanelIMControlPanel::onViewProfileButtonClicked()
 {
-	LLAvatarActions::showProfile(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId());
+	LLAvatarActions::showProfile(mAvatarID);
 }
 
 void LLPanelIMControlPanel::onAddFriendButtonClicked()
 {
 	LLAvatarIconCtrl* avatar_icon = getChild<LLAvatarIconCtrl>("avatar_icon");
 	std::string full_name = avatar_icon->getFirstName() + " " + avatar_icon->getLastName();
-	LLAvatarActions::requestFriendshipDialog(avatar_icon->getAvatarId(), full_name);
+	LLAvatarActions::requestFriendshipDialog(mAvatarID, full_name);
 }
 
 void LLPanelIMControlPanel::onShareButtonClicked()
@@ -140,12 +151,12 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
 
 	LLIMModel& im_model = LLIMModel::instance();
 
-	LLUUID avatar_id = im_model.getOtherParticipantID(session_id);
+	mAvatarID = im_model.getOtherParticipantID(session_id);
 
 	// Disable "Add friend" button for friends.
-	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(avatar_id));
+	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID));
 
-	getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(avatar_id);
+	getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(mAvatarID);
 
 	// Disable profile button if participant is not realy SL avatar
 	LLIMModel::LLIMSession* im_session =
@@ -188,6 +199,20 @@ void LLPanelGroupControlPanel::onGroupInfoButtonClicked()
 	LLGroupActions::show(mGroupID);
 }
 
+void LLPanelGroupControlPanel::onSortMenuItemClicked(const LLSD& userdata)
+{
+	// TODO: Check this code when when sort order menu will be added. (EM)
+	if (false && !mParticipantList)
+		return;
+
+	std::string chosen_item = userdata.asString();
+
+	if (chosen_item == "sort_name")
+	{
+		mParticipantList->setSortOrder(LLParticipantList::E_SORT_BY_NAME);
+	}
+
+}
 
 void LLPanelGroupControlPanel::setSessionId(const LLUUID& session_id)
 {
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index d25f33935a3..fa101f42803 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -73,6 +73,8 @@ class LLPanelIMControlPanel : public LLPanelChatControlPanel
 	void onViewProfileButtonClicked();
 	void onAddFriendButtonClicked();
 	void onShareButtonClicked();
+	void onTeleportButtonClicked();
+	void onPayButtonClicked();
 
 	LLUUID mAvatarID;
 };
@@ -97,6 +99,7 @@ class LLPanelGroupControlPanel : public LLPanelChatControlPanel
 
 private:
 	void onGroupInfoButtonClicked();
+	void onSortMenuItemClicked(const LLSD& userdata);
 };
 
 class LLPanelAdHocControlPanel : public LLPanelGroupControlPanel
diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
new file mode 100644
index 00000000000..1152ca68736
--- /dev/null
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -0,0 +1,437 @@
+/**
+ * @file llpanellandmarkinfo.cpp
+ * @brief Displays landmark info in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanellandmarkinfo.h"
+
+#include "llinventory.h"
+
+#include "llcombobox.h"
+#include "lllineeditor.h"
+#include "lltextbox.h"
+#include "lltexteditor.h"
+#include "lltrans.h"
+
+#include "llagent.h"
+#include "llagentui.h"
+#include "llinventorymodel.h"
+#include "lllandmarkactions.h"
+#include "llviewerinventory.h"
+#include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
+
+//----------------------------------------------------------------------------
+// Aux types and methods
+//----------------------------------------------------------------------------
+
+typedef std::pair<LLUUID, std::string> folder_pair_t;
+
+static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right);
+static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats);
+
+static LLRegisterPanelClassWrapper<LLPanelLandmarkInfo> t_landmark_info("panel_landmark_info");
+
+LLPanelLandmarkInfo::LLPanelLandmarkInfo()
+:	LLPanelPlaceInfo()
+{}
+
+// virtual
+LLPanelLandmarkInfo::~LLPanelLandmarkInfo()
+{}
+
+// virtual
+BOOL LLPanelLandmarkInfo::postBuild()
+{
+	LLPanelPlaceInfo::postBuild();
+
+	mOwner = getChild<LLTextBox>("owner");
+	mCreator = getChild<LLTextBox>("creator");
+	mCreated = getChild<LLTextBox>("created");
+
+	mTitleEditor = getChild<LLLineEditor>("title_editor");
+	mNotesEditor = getChild<LLTextEditor>("notes_editor");
+	mFolderCombo = getChild<LLComboBox>("folder_combo");
+
+	return TRUE;
+}
+
+// virtual
+void LLPanelLandmarkInfo::resetLocation()
+{
+	LLPanelPlaceInfo::resetLocation();
+
+	std::string not_available = getString("not_available");
+	mCreator->setText(not_available);
+	mOwner->setText(not_available);
+	mCreated->setText(not_available);
+	mTitleEditor->setText(LLStringUtil::null);
+	mNotesEditor->setText(LLStringUtil::null);
+}
+
+// virtual
+void LLPanelLandmarkInfo::setInfoType(INFO_TYPE type)
+{
+	LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel");
+
+	bool is_info_type_create_landmark = type == CREATE_LANDMARK;
+	bool is_info_type_landmark = type == LANDMARK;
+
+	landmark_info_panel->setVisible(is_info_type_landmark);
+
+	getChild<LLTextBox>("folder_label")->setVisible(is_info_type_create_landmark);
+	mFolderCombo->setVisible(is_info_type_create_landmark);
+
+	switch(type)
+	{
+		case CREATE_LANDMARK:
+			mCurrentTitle = getString("title_create_landmark");
+
+			mTitleEditor->setEnabled(TRUE);
+			mNotesEditor->setEnabled(TRUE);
+		break;
+
+		case LANDMARK:
+		default:
+			mCurrentTitle = getString("title_landmark");
+
+			mTitleEditor->setEnabled(FALSE);
+			mNotesEditor->setEnabled(FALSE);
+		break;
+	}
+
+	populateFoldersList();
+
+	LLPanelPlaceInfo::setInfoType(type);
+}
+
+// virtual
+void LLPanelLandmarkInfo::processParcelInfo(const LLParcelData& parcel_data)
+{
+	LLPanelPlaceInfo::processParcelInfo(parcel_data);
+
+	// HACK: Flag 0x2 == adult region,
+	// Flag 0x1 == mature region, otherwise assume PG
+	std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
+	if (parcel_data.flags & 0x2)
+	{
+		rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
+	}
+	else if (parcel_data.flags & 0x1)
+	{
+		rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
+	}
+
+	mMaturityRatingText->setValue(rating);
+
+	S32 region_x;
+	S32 region_y;
+	S32 region_z;
+
+	// If the region position is zero, grab position from the global
+	if(mPosRegion.isExactlyZero())
+	{
+		region_x = llround(parcel_data.global_x) % REGION_WIDTH_UNITS;
+		region_y = llround(parcel_data.global_y) % REGION_WIDTH_UNITS;
+		region_z = llround(parcel_data.global_z);
+	}
+	else
+	{
+		region_x = llround(mPosRegion.mV[VX]);
+		region_y = llround(mPosRegion.mV[VY]);
+		region_z = llround(mPosRegion.mV[VZ]);
+	}
+
+	if (mInfoType == CREATE_LANDMARK)
+	{
+		if (parcel_data.name.empty())
+		{
+			mTitleEditor->setText(llformat("%s (%d, %d, %d)",
+								  parcel_data.sim_name.c_str(), region_x, region_y, region_z));
+		}
+		else
+		{
+			mTitleEditor->setText(parcel_data.name);
+		}
+
+		std::string desc;
+		LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, gAgent.getPositionAgent());
+		mNotesEditor->setText(desc);
+
+		if (!LLLandmarkActions::landmarkAlreadyExists())
+		{
+			createLandmark(mFolderCombo->getValue().asUUID());
+		}
+	}
+}
+
+void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem)
+{
+	if (!pItem)
+		return;
+
+	if(!gCacheName)
+		return;
+
+	const LLPermissions& perm = pItem->getPermissions();
+
+	//////////////////
+	// CREATOR NAME //
+	//////////////////
+	if (pItem->getCreatorUUID().notNull())
+	{
+		std::string name;
+		LLUUID creator_id = pItem->getCreatorUUID();
+		if (!gCacheName->getFullName(creator_id, name))
+		{
+			gCacheName->get(creator_id, FALSE,
+							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mCreator, _2, _3));
+		}
+		mCreator->setText(name);
+	}
+	else
+	{
+		mCreator->setText(getString("unknown"));
+	}
+
+	////////////////
+	// OWNER NAME //
+	////////////////
+	if(perm.isOwned())
+	{
+		std::string name;
+		if (perm.isGroupOwned())
+		{
+			LLUUID group_id = perm.getGroup();
+			if (!gCacheName->getGroupName(group_id, name))
+			{
+				gCacheName->get(group_id, TRUE,
+								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
+			}
+		}
+		else
+		{
+			LLUUID owner_id = perm.getOwner();
+			if (!gCacheName->getFullName(owner_id, name))
+			{
+				gCacheName->get(owner_id, FALSE,
+								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
+			}
+		}
+		mOwner->setText(name);
+	}
+	else
+	{
+		mOwner->setText(getString("public"));
+	}
+
+	//////////////////
+	// ACQUIRE DATE //
+	//////////////////
+	time_t time_utc = pItem->getCreationDate();
+	if (0 == time_utc)
+	{
+		mCreated->setText(getString("unknown"));
+	}
+	else
+	{
+		std::string timeStr = getString("acquired_date");
+		LLSD substitution;
+		substitution["datetime"] = (S32) time_utc;
+		LLStringUtil::format (timeStr, substitution);
+		mCreated->setText(timeStr);
+	}
+
+	mTitleEditor->setText(pItem->getName());
+	mNotesEditor->setText(pItem->getDescription());
+}
+
+void LLPanelLandmarkInfo::toggleLandmarkEditMode(BOOL enabled)
+{
+	// If switching to edit mode while creating landmark
+	// the "Create Landmark" title remains.
+	if (enabled && mInfoType != CREATE_LANDMARK)
+	{
+		mTitle->setText(getString("title_edit_landmark"));
+	}
+	else
+	{
+		mTitle->setText(mCurrentTitle);
+	}
+
+	if (mNotesEditor->getReadOnly() ==  (enabled == TRUE))
+	{
+		mTitleEditor->setEnabled(enabled);
+		mNotesEditor->setReadOnly(!enabled);
+		mFolderCombo->setVisible(enabled);
+		getChild<LLTextBox>("folder_label")->setVisible(enabled);
+
+		// HACK: To change the text color in a text editor
+		// when it was enabled/disabled we set the text once again.
+		mNotesEditor->setText(mNotesEditor->getText());
+	}
+}
+
+const std::string& LLPanelLandmarkInfo::getLandmarkTitle() const
+{
+	return mTitleEditor->getText();
+}
+
+const std::string LLPanelLandmarkInfo::getLandmarkNotes() const
+{
+	return mNotesEditor->getText();
+}
+
+const LLUUID LLPanelLandmarkInfo::getLandmarkFolder() const
+{
+	return mFolderCombo->getValue().asUUID();
+}
+
+BOOL LLPanelLandmarkInfo::setLandmarkFolder(const LLUUID& id)
+{
+	return mFolderCombo->setCurrentByID(id);
+}
+
+void LLPanelLandmarkInfo::createLandmark(const LLUUID& folder_id)
+{
+	std::string name = mTitleEditor->getText();
+	std::string desc = mNotesEditor->getText();
+
+	LLStringUtil::trim(name);
+	LLStringUtil::trim(desc);
+
+	// If typed name is empty use the parcel name instead.
+	if (name.empty())
+	{
+		name = mParcelName->getText();
+
+		// If no parcel exists use the region name instead.
+		if (name.empty())
+		{
+			name = mRegionName->getText();
+		}
+	}
+
+	LLStringUtil::replaceChar(desc, '\n', ' ');
+	// If no folder chosen use the "Landmarks" folder.
+	LLLandmarkActions::createLandmarkHere(name, desc,
+		folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK));
+}
+
+// static
+std::string LLPanelLandmarkInfo::getFullFolderName(const LLViewerInventoryCategory* cat)
+{
+	std::string name = cat->getName();
+	LLUUID parent_id;
+
+	// translate category name, if it's right below the root
+	// FIXME: it can throw notification about non existent string in strings.xml
+	if (cat->getParentUUID().notNull() && cat->getParentUUID() == gInventory.getRootFolderID())
+	{
+		LLTrans::findString(name, "InvFolder " + name);
+	}
+
+	// we don't want "My Inventory" to appear in the name
+	while ((parent_id = cat->getParentUUID()).notNull() && parent_id != gInventory.getRootFolderID())
+	{
+		cat = gInventory.getCategory(parent_id);
+		name = cat->getName() + "/" + name;
+	}
+
+	return name;
+}
+
+void LLPanelLandmarkInfo::populateFoldersList()
+{
+	// Collect all folders that can contain landmarks.
+	LLInventoryModel::cat_array_t cats;
+	collectLandmarkFolders(cats);
+
+	mFolderCombo->removeall();
+
+	// Put the "Landmarks" folder first in list.
+	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+	const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id);
+	if (!cat)
+	{
+		llwarns << "Cannot find the landmarks folder" << llendl;
+	}
+	std::string cat_full_name = getFullFolderName(cat);
+	mFolderCombo->add(cat_full_name, cat->getUUID());
+
+	typedef std::vector<folder_pair_t> folder_vec_t;
+	folder_vec_t folders;
+	// Sort the folders by their full name.
+	for (S32 i = 0; i < cats.count(); i++)
+	{
+		cat = cats.get(i);
+		cat_full_name = getFullFolderName(cat);
+		folders.push_back(folder_pair_t(cat->getUUID(), cat_full_name));
+	}
+	sort(folders.begin(), folders.end(), cmp_folders);
+
+	// Finally, populate the combobox.
+	for (folder_vec_t::const_iterator it = folders.begin(); it != folders.end(); it++)
+		mFolderCombo->add(it->second, LLSD(it->first));
+}
+
+static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right)
+{
+	return left.second < right.second;
+}
+
+static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats)
+{
+	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+
+	// Add descendent folders of the "Landmarks" category.
+	LLInventoryModel::item_array_t items; // unused
+	LLIsType is_category(LLAssetType::AT_CATEGORY);
+	gInventory.collectDescendentsIf(
+		landmarks_id,
+		cats,
+		items,
+		LLInventoryModel::EXCLUDE_TRASH,
+		is_category);
+
+	// Add the "My Favorites" category.
+	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+	LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id);
+	if (!favorites_cat)
+	{
+		llwarns << "Cannot find the favorites folder" << llendl;
+	}
+	else
+	{
+		cats.put(favorites_cat);
+	}
+}
diff --git a/indra/newview/llpanellandmarkinfo.h b/indra/newview/llpanellandmarkinfo.h
new file mode 100644
index 00000000000..03377986b31
--- /dev/null
+++ b/indra/newview/llpanellandmarkinfo.h
@@ -0,0 +1,85 @@
+/**
+ * @file llpanellandmarkinfo.h
+ * @brief Displays landmark info in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELLANDMARKINFO_H
+#define LL_LLPANELLANDMARKINFO_H
+
+#include "llpanelplaceinfo.h"
+
+class LLComboBox;
+class LLLineEditor;
+class LLTextEditor;
+
+class LLPanelLandmarkInfo : public LLPanelPlaceInfo
+{
+public:
+	LLPanelLandmarkInfo();
+	/*virtual*/ ~LLPanelLandmarkInfo();
+
+	/*virtual*/ BOOL postBuild();
+
+	/*virtual*/ void resetLocation();
+
+	/*virtual*/ void setInfoType(INFO_TYPE type);
+
+	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+
+	// Displays landmark owner, creator and creation date info.
+	void displayItemInfo(const LLInventoryItem* pItem);
+
+	void toggleLandmarkEditMode(BOOL enabled);
+
+	const std::string& getLandmarkTitle() const;
+	const std::string getLandmarkNotes() const;
+	const LLUUID getLandmarkFolder() const;
+
+	// Select current landmark folder in combobox.
+	BOOL setLandmarkFolder(const LLUUID& id);
+
+	// Create a landmark for the current location
+	// in a folder specified by folder_id.
+	void createLandmark(const LLUUID& folder_id);
+
+	static std::string getFullFolderName(const LLViewerInventoryCategory* cat);
+
+private:
+	void populateFoldersList();
+
+	LLTextBox*			mOwner;
+	LLTextBox*			mCreator;
+	LLTextBox*			mCreated;
+	LLLineEditor*		mTitleEditor;
+	LLTextEditor*		mNotesEditor;
+	LLComboBox*			mFolderCombo;
+};
+
+#endif // LL_LLPANELLANDMARKINFO_H
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 91e1590dc3e..6d6fd38ccee 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -553,14 +553,16 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const
 	std::string command_name = userdata.asString();
 	if("add_landmark" == command_name)
 	{
-		if(LLLandmarkActions::landmarkAlreadyExists())
+		LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos();
+		if(landmark)
+		{
+			LLSideTray::getInstance()->showPanel("panel_places", 
+								LLSD().insert("type", "landmark").insert("id",landmark->getUUID()));
+		}
+		else
 		{
-			std::string location;
-			LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_FULL);
-			llwarns<<" Landmark already exists at location:  "<< location<<llendl;
-			return;
+			LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
 		}
-		LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
 	} 
 	else if ("category" == command_name)
 	{
@@ -584,7 +586,7 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const
 			menu_create_inventory_item(mCurrentSelectedList->getRootFolder(),
 					dynamic_cast<LLFolderBridge*> (folder_bridge), LLSD(
 							"category"), gInventory.findCategoryUUIDForType(
-							LLAssetType::AT_LANDMARK));
+							LLFolderType::FT_LANDMARK));
 		}
 	}
 }
@@ -616,19 +618,21 @@ void LLLandmarksPanel::onClipboardAction(const LLSD& userdata) const
 
 void LLLandmarksPanel::onFoldingAction(const LLSD& userdata)
 {
-	if(!mCurrentSelectedList) return;
-
-	LLFolderView* root_folder = mCurrentSelectedList->getRootFolder();
+	LLFolderView* landmarks_folder = mLandmarksInventoryPanel->getRootFolder();
+	LLFolderView* fav_folder = mFavoritesInventoryPanel->getRootFolder();
 	std::string command_name = userdata.asString();
 
 	if ("expand_all" == command_name)
 	{
-		root_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
-		root_folder->arrangeAll();
+		landmarks_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
+		fav_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
+		landmarks_folder->arrangeAll();
+		fav_folder->arrangeAll();
 	}
 	else if ("collapse_all" == command_name)
 	{
-		root_folder->closeAllFolders();
+		landmarks_folder->closeAllFolders();
+		fav_folder->closeAllFolders();
 	}
 	else if ( "sort_by_date" == command_name)
 	{
@@ -639,6 +643,9 @@ void LLLandmarksPanel::onFoldingAction(const LLSD& userdata)
 	}
 	else
 	{
+		if(!mCurrentSelectedList) return;
+
+		LLFolderView* root_folder = mCurrentSelectedList->getRootFolder();
 		root_folder->doToSelected(&gInventory, userdata);
 	}
 }
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 617445a27f2..25be09fa24a 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -84,8 +84,8 @@ LLPanelMainInventory::LLPanelMainInventory()
 	// Menu Callbacks (non contex menus)
 	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelMainInventory::doToSelected, this, _2));
 	mCommitCallbackRegistrar.add("Inventory.CloseAllFolders", boost::bind(&LLPanelMainInventory::closeAllFolders, this));
-	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
-	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND));
 	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLPanelMainInventory::doCreate, this, _2));
  	mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLPanelMainInventory::newWindow, this));
 	mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLPanelMainInventory::toggleFindOptions, this));
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 68181f12b94..79b33e29f52 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -60,6 +60,7 @@
 #include "llsidetray.h"
 #include "llstatusbar.h"
 #include "lltrans.h"
+#include "llviewerassettype.h"
 #include "llviewerregion.h"
 #include "llviewerobjectlist.h"
 #include "llviewermessage.h"
@@ -102,7 +103,7 @@ class LLTaskInvFVBridge : public LLFolderViewEventListener
 	virtual const std::string& getName() const;
 	virtual const std::string& getDisplayName() const;
 	virtual PermissionMask getPermissionMask() const { return PERM_NONE; }
-	/*virtual*/ LLAssetType::EType getPreferredType() const { return LLAssetType::AT_NONE; }
+	/*virtual*/ LLFolderType::EType getPreferredType() const { return LLFolderType::FT_NONE; }
 	virtual const LLUUID& getUUID() const { return mUUID; }
 	virtual time_t getCreationDate() const;
 	virtual LLUIImagePtr getIcon() const;
@@ -275,7 +276,7 @@ bool LLTaskInvFVBridge::commitBuyItem(const LLSD& notification, const LLSD& resp
 		msg->addUUIDFast(_PREHASH_ObjectID, notification["payload"]["task_id"].asUUID());
 		msg->addUUIDFast(_PREHASH_ItemID, notification["payload"]["item_id"].asUUID());
 		msg->addUUIDFast(_PREHASH_FolderID,
-			gInventory.findCategoryUUIDForType((LLAssetType::EType)notification["payload"]["type"].asInteger()));
+			gInventory.findCategoryUUIDForType((LLFolderType::EType)notification["payload"]["type"].asInteger()));
 		msg->sendReliable(object->getRegion()->getHost());
 	}
 	return false;
@@ -573,7 +574,7 @@ BOOL LLTaskInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
 //				   || gAgent.isGodlike())
 
 				{
-					*type = LLAssetType::lookupDragAndDropType(inv->getType());
+					*type = LLViewerAssetType::lookupDragAndDropType(inv->getType());
 
 					*id = inv->getUUID();
 					return TRUE;
@@ -778,7 +779,7 @@ BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
 //				   || gAgent.isGodlike())
 
 				{
-					*type = LLAssetType::lookupDragAndDropType(inv->getType());
+					*type = LLViewerAssetType::lookupDragAndDropType(inv->getType());
 
 					*id = inv->getUUID();
 					return TRUE;
@@ -1461,7 +1462,6 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory*
 											  item->getFlags());
 		break;
 	case LLAssetType::AT_CATEGORY:
-	case LLAssetType::AT_FAVORITE:
 		new_bridge = new LLTaskCategoryBridge(panel,
 											  object->getUUID(),
 											  object->getName());
@@ -1503,8 +1503,8 @@ LLPanelObjectInventory::LLPanelObjectInventory(const LLPanelObjectInventory::Par
 {
 	// Setup context menu callbacks
 	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelObjectInventory::doToSelected, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
-	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND));
 	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&do_nothing));
 	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&do_nothing));
 	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&do_nothing));
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 4580eeb336a..2f8fae0f5de 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -42,6 +42,7 @@
 #include "llpanelpeople.h"
 
 // newview
+#include "llaccordionctrl.h"
 #include "llaccordionctrltab.h"
 #include "llagent.h"
 #include "llavataractions.h"
@@ -516,6 +517,9 @@ BOOL LLPanelPeople::postBuild()
 	// call this method in case some list is empty and buttons can be in inconsistent state
 	updateButtons();
 
+	mOnlineFriendList->setRefreshCompleteCallback(boost::bind(&LLPanelPeople::onFriendListRefreshComplete, this, _1, _2));
+	mAllFriendList->setRefreshCompleteCallback(boost::bind(&LLPanelPeople::onFriendListRefreshComplete, this, _1, _2));
+
 	return TRUE;
 }
 
@@ -560,6 +564,8 @@ void LLPanelPeople::updateFriendList()
 
 	mOnlineFriendList->setDirty();
 	mAllFriendList->setDirty();
+
+	showFriendsAccordionsIfNeeded();
 }
 
 void LLPanelPeople::updateNearbyList()
@@ -797,14 +803,15 @@ void LLPanelPeople::reSelectedCurrentTab()
 
 void LLPanelPeople::onFilterEdit(const std::string& search_string)
 {
-	if (mFilterSubString == search_string)
-		return;
+	std::string search_upper = search_string;
+	// Searches are case-insensitive
+	LLStringUtil::toUpper(search_upper);
+	LLStringUtil::trimHead(search_upper);
 
-	mFilterSubString = search_string;
+	if (mFilterSubString == search_upper)
+		return;
 
-	// Searches are case-insensitive
-	LLStringUtil::toUpper(mFilterSubString);
-	LLStringUtil::trimHead(mFilterSubString);
+	mFilterSubString = search_upper;
 
 	// Apply new filter.
 	mNearbyList->setNameFilter(mFilterSubString);
@@ -812,6 +819,8 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string)
 	mAllFriendList->setNameFilter(mFilterSubString);
 	mRecentList->setNameFilter(mFilterSubString);
 	mGroupList->setNameFilter(mFilterSubString);
+
+	showFriendsAccordionsIfNeeded();
 }
 
 void LLPanelPeople::onTabSelected(const LLSD& param)
@@ -1124,3 +1133,49 @@ void	LLPanelPeople::onOpen(const LLSD& key)
 	else
 		reSelectedCurrentTab();
 }
+
+void LLPanelPeople::showAccordion(const std::string name, bool show)
+{
+	if(name.empty())
+	{
+		llwarns << "No name provided" << llendl;
+		return;
+	}
+
+	LLAccordionCtrlTab* tab = getChild<LLAccordionCtrlTab>(name);
+	tab->setVisible(show);
+	if(show)
+	{
+		// expand accordion
+		tab->changeOpenClose(false);
+	}
+}
+
+void LLPanelPeople::showFriendsAccordionsIfNeeded()
+{
+	if(FRIENDS_TAB_NAME == getActiveTabName())
+	{
+		// Expand and show accordions if needed, else - hide them
+		showAccordion("tab_online", mOnlineFriendList->filterHasMatches());
+		showAccordion("tab_all", mAllFriendList->filterHasMatches());
+
+		// Rearrange accordions
+		LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion");
+		accordion->arrange();
+	}
+}
+
+void LLPanelPeople::onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param)
+{
+	if(ctrl == mOnlineFriendList)
+	{
+		showAccordion("tab_online", param.asInteger());
+	}
+	else if(ctrl == mAllFriendList)
+	{
+		showAccordion("tab_all", param.asInteger());
+	}
+
+	LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion");
+	accordion->arrange();
+}
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index dc0aaeb70f1..9bf9befe906 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -124,6 +124,12 @@ class LLPanelPeople : public LLPanel
 
 	void					onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAvatarList* avatar_list);
 
+	void					showAccordion(const std::string name, bool show);
+
+	void					showFriendsAccordionsIfNeeded();
+
+	void					onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param);
+
 	LLFilterEditor*			mFilterEditor;
 	LLTabContainer*			mTabContainer;
 	LLAvatarList*			mOnlineFriendList;
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 34644cfe42d..2c5f4b5afaa 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -1,6 +1,6 @@
 /**
  * @file llpanelplaceinfo.cpp
- * @brief Displays place information in Side Tray.
+ * @brief Base class for place information in Side Tray.
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
@@ -39,66 +39,34 @@
 #include "llsecondlifeurls.h"
 
 #include "llinventory.h"
-#include "llparcel.h"
 
-#include "llqueryflags.h"
+#include "llsdutil_math.h"
 
-#include "llbutton.h"
-#include "llcombobox.h"
-#include "lliconctrl.h"
 #include "llscrollcontainer.h"
 #include "lltextbox.h"
-#include "lltrans.h"
 
-#include "llaccordionctrl.h"
-#include "llaccordionctrltab.h"
 #include "llagent.h"
-#include "llagentui.h"
-#include "llappviewer.h"
 #include "llavatarpropertiesprocessor.h"
-#include "llcallbacklist.h"
 #include "llexpandabletextbox.h"
 #include "llfloaterworldmap.h"
-#include "llfloaterbuycurrency.h"
 #include "llinventorymodel.h"
-#include "lllandmarkactions.h"
 #include "llpanelpick.h"
 #include "lltexturectrl.h"
-#include "llstatusbar.h"
 #include "llviewerinventory.h"
 #include "llviewerparcelmgr.h"
 #include "llviewerregion.h"
-#include "llviewercontrol.h" 
 #include "llviewertexteditor.h"
 #include "llworldmap.h"
-#include "llsdutil_math.h"
-
-//----------------------------------------------------------------------------
-// Aux types and methods
-//----------------------------------------------------------------------------
-
-typedef std::pair<LLUUID, std::string> folder_pair_t;
-
-static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right);
-static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats);
-
-static LLRegisterPanelClassWrapper<LLPanelPlaceInfo> t_place_info("panel_place_info");
 
 LLPanelPlaceInfo::LLPanelPlaceInfo()
 :	LLPanel(),
 	mParcelID(),
 	mRequestedID(),
 	mPosRegion(),
-	mLandmarkID(),
-	mMinHeight(0),
-	mScrollingPanel(NULL),
-	mInfoPanel(NULL),
-	mMediaPanel(NULL),
-	mForSalePanel(NULL),
-	mYouAreHerePanel(NULL),
-	mSelectedParcelID(-1)
+	mMinHeight(0)
 {}
 
+//virtual
 LLPanelPlaceInfo::~LLPanelPlaceInfo()
 {
 	if (mParcelID.notNull())
@@ -107,220 +75,41 @@ LLPanelPlaceInfo::~LLPanelPlaceInfo()
 	}
 }
 
+//virtual
 BOOL LLPanelPlaceInfo::postBuild()
 {
-	mTitle = getChild<LLTextBox>("panel_title");
+	mTitle = getChild<LLTextBox>("title");
 	mCurrentTitle = mTitle->getText();
 
-	mForSalePanel = getChild<LLPanel>("for_sale_panel");
-	mYouAreHerePanel = getChild<LLPanel>("here_panel");
-	gIdleCallbacks.addFunction(&LLPanelPlaceInfo::updateYouAreHereBanner, this);
-	
-	//Icon value should contain sale price of last selected parcel. 
-	mForSalePanel->getChild<LLIconCtrl>("icon_for_sale")->
-				setMouseDownCallback(boost::bind(&LLPanelPlaceInfo::onForSaleBannerClick, this));
-
 	mSnapshotCtrl = getChild<LLTextureCtrl>("logo");
 	mRegionName = getChild<LLTextBox>("region_title");
 	mParcelName = getChild<LLTextBox>("parcel_title");
 	mDescEditor = getChild<LLExpandableTextBox>("description");
 
 	mMaturityRatingText = getChild<LLTextBox>("maturity_value");
-	mParcelOwner = getChild<LLTextBox>("owner_value");
-	mLastVisited = getChild<LLTextBox>("last_visited_value");
-
-	mRatingText = getChild<LLTextBox>("rating_value");
-	mVoiceText = getChild<LLTextBox>("voice_value");
-	mFlyText = getChild<LLTextBox>("fly_value");
-	mPushText = getChild<LLTextBox>("push_value");
-	mBuildText = getChild<LLTextBox>("build_value");
-	mScriptsText = getChild<LLTextBox>("scripts_value");
-	mDamageText = getChild<LLTextBox>("damage_value");
-
-	mRegionNameText = getChild<LLTextBox>("region_name");
-	mRegionTypeText = getChild<LLTextBox>("region_type");
-	mRegionRatingText = getChild<LLTextBox>("region_rating");
-	mRegionOwnerText = getChild<LLTextBox>("region_owner");
-	mRegionGroupText = getChild<LLTextBox>("region_group");
-
-	mEstateNameText = getChild<LLTextBox>("estate_name");
-	mEstateRatingText = getChild<LLTextBox>("estate_rating");
-	mEstateOwnerText = getChild<LLTextBox>("estate_owner");
-	mCovenantText = getChild<LLTextEditor>("covenant");
-
-	mSalesPriceText = getChild<LLTextBox>("sales_price");
-	mAreaText = getChild<LLTextBox>("area");
-	mTrafficText = getChild<LLTextBox>("traffic");
-	mPrimitivesText = getChild<LLTextBox>("primitives");
-	mParcelScriptsText = getChild<LLTextBox>("parcel_scripts");
-	mTerraformLimitsText = getChild<LLTextBox>("terraform_limits");
-	mSubdivideText = getChild<LLTextEditor>("subdivide");
-	mResaleText = getChild<LLTextEditor>("resale");
-	mSaleToText = getChild<LLTextBox>("sale_to");
 
-	mOwner = getChild<LLTextBox>("owner");
-	mCreator = getChild<LLTextBox>("creator");
-	mCreated = getChild<LLTextBox>("created");
-
-	mTitleEditor = getChild<LLLineEditor>("title_editor");
-	mNotesEditor = getChild<LLTextEditor>("notes_editor");
-	mFolderCombo = getChild<LLComboBox>("folder_combo");
-
-	LLScrollContainer* scroll_container = getChild<LLScrollContainer>("scroll_container");
+	LLScrollContainer* scroll_container = getChild<LLScrollContainer>("place_scroll");
 	scroll_container->setBorderVisible(FALSE);
 	mMinHeight = scroll_container->getScrolledViewRect().getHeight();
 
-	mScrollingPanel = getChild<LLPanel>("scrolling_panel");
-	mInfoPanel = getChild<LLPanel>("info_panel");
-	mMediaPanel = getChild<LLMediaPanel>("media_panel");
-	if (!mMediaPanel)
-		return FALSE;
-
 	return TRUE;
 }
 
-void LLPanelPlaceInfo::displayItemInfo(const LLInventoryItem* pItem)
-{
-	if (!pItem)
-		return;
-
-	mLandmarkID = pItem->getUUID();
-
-	if(!gCacheName)
-		return;
-
-	const LLPermissions& perm = pItem->getPermissions();
-
-	//////////////////
-	// CREATOR NAME //
-	//////////////////
-	if (pItem->getCreatorUUID().notNull())
-	{
-		std::string name;
-		LLUUID creator_id = pItem->getCreatorUUID();
-		if (!gCacheName->getFullName(creator_id, name))
-		{
-			gCacheName->get(creator_id, FALSE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mCreator, _2, _3));
-		}
-		mCreator->setText(name);
-	}
-	else
-	{
-		mCreator->setText(getString("unknown"));
-	}
-
-	////////////////
-	// OWNER NAME //
-	////////////////
-	if(perm.isOwned())
-	{
-		std::string name;
-		if (perm.isGroupOwned())
-		{
-			LLUUID group_id = perm.getGroup();
-			if (!gCacheName->getGroupName(group_id, name))
-			{
-				gCacheName->get(group_id, TRUE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mOwner, _2, _3));
-			}
-		}
-		else
-		{
-			LLUUID owner_id = perm.getOwner();
-			if (!gCacheName->getFullName(owner_id, name))
-			{
-				gCacheName->get(owner_id, FALSE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mOwner, _2, _3));
-			}
-		}
-		mOwner->setText(name);
-	}
-	else
-	{
-		mOwner->setText(getString("public"));
-	}
-	
-	//////////////////
-	// ACQUIRE DATE //
-	//////////////////
-	time_t time_utc = pItem->getCreationDate();
-	if (0 == time_utc)
-	{
-		mCreated->setText(getString("unknown"));
-	}
-	else
-	{
-		std::string timeStr = getString("acquired_date");
-		LLSD substitution;
-		substitution["datetime"] = (S32) time_utc;
-		LLStringUtil::format (timeStr, substitution);
-		mCreated->setText(timeStr);
-	}
-
-	mTitleEditor->setText(pItem->getName());
-	mNotesEditor->setText(pItem->getDescription());
-}
-
-void LLPanelPlaceInfo::nameUpdatedCallback(
-	LLTextBox* text,
-	const std::string& first,
-	const std::string& last)
-{
-	text->setText(first + " " + last);
-}
-
+//virtual
 void LLPanelPlaceInfo::resetLocation()
 {
 	mParcelID.setNull();
 	mRequestedID.setNull();
-	mLandmarkID.setNull();
 	mPosRegion.clearVec();
-	mForSalePanel->setVisible(FALSE);
-	mYouAreHerePanel->setVisible(FALSE);
+
 	std::string not_available = getString("not_available");
 	mMaturityRatingText->setValue(not_available);
-	mParcelOwner->setValue(not_available);
-	mLastVisited->setValue(not_available);
 	mRegionName->setText(not_available);
 	mParcelName->setText(not_available);
 	mDescEditor->setText(not_available);
-	mCreator->setText(not_available);
-	mOwner->setText(not_available);
-	mCreated->setText(not_available);
-	mTitleEditor->setText(LLStringUtil::null);
-	mNotesEditor->setText(LLStringUtil::null);
+
 	mSnapshotCtrl->setImageAssetID(LLUUID::null);
 	mSnapshotCtrl->setFallbackImageName("default_land_picture.j2c");
-
-	mRatingText->setText(not_available);
-	mVoiceText->setText(not_available);
-	mFlyText->setText(not_available);
-	mPushText->setText(not_available);
-	mBuildText->setText(not_available);
-	mParcelScriptsText->setText(not_available);
-	mDamageText->setText(not_available);
-
-	mRegionNameText->setValue(not_available);
-	mRegionTypeText->setValue(not_available);
-	mRegionRatingText->setValue(not_available);
-	mRegionOwnerText->setValue(not_available);
-	mRegionGroupText->setValue(not_available);
-
-	mEstateNameText->setValue(not_available);
-	mEstateRatingText->setValue(not_available);
-	mEstateOwnerText->setValue(not_available);
-	mCovenantText->setValue(not_available);
-
-	mSalesPriceText->setValue(not_available);
-	mAreaText->setValue(not_available);
-	mTrafficText->setValue(not_available);
-	mPrimitivesText->setValue(not_available);
-	mParcelScriptsText->setValue(not_available);
-	mTerraformLimitsText->setValue(not_available);
-	mSubdivideText->setValue(not_available);
-	mResaleText->setValue(not_available);
-	mSaleToText->setValue(not_available);
 }
 
 //virtual
@@ -330,108 +119,55 @@ void LLPanelPlaceInfo::setParcelID(const LLUUID& parcel_id)
 	sendParcelInfoRequest();
 }
 
+//virtual
 void LLPanelPlaceInfo::setInfoType(INFO_TYPE type)
 {
-	LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel");
-	LLPanel* landmark_edit_panel = getChild<LLPanel>("landmark_edit_panel");
-
-	bool is_info_type_agent = type == AGENT;
-	bool is_info_type_create_landmark = type == CREATE_LANDMARK;
-	bool is_info_type_landmark = type == LANDMARK;
-	bool is_info_type_teleport_history = type == TELEPORT_HISTORY;
-
-	getChild<LLTextBox>("maturity_label")->setVisible(!is_info_type_agent);
-	mMaturityRatingText->setVisible(!is_info_type_agent);
-
-	getChild<LLTextBox>("owner_label")->setVisible(is_info_type_agent);
-	mParcelOwner->setVisible(is_info_type_agent);
-
-	getChild<LLTextBox>("last_visited_label")->setVisible(is_info_type_teleport_history);
-	mLastVisited->setVisible(is_info_type_teleport_history);
-
-	landmark_info_panel->setVisible(is_info_type_landmark);
-	landmark_edit_panel->setVisible(is_info_type_landmark || is_info_type_create_landmark);
-
-	getChild<LLTextBox>("folder_lable")->setVisible(is_info_type_create_landmark);
-	mFolderCombo->setVisible(is_info_type_create_landmark);
-
-	getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent);
-
-	switch(type)
-	{
-		case CREATE_LANDMARK:
-			mCurrentTitle = getString("title_create_landmark");
-
-			mTitleEditor->setEnabled(TRUE);
-			mNotesEditor->setEnabled(TRUE);
-
-			populateFoldersList();
-		break;
-
-		case AGENT:
-		case PLACE:
-			mCurrentTitle = getString("title_place");
-
-			if (!isMediaPanelVisible())
-			{
-				mTitle->setText(mCurrentTitle);
-			}
-		break;
-
-		case LANDMARK:
-			mCurrentTitle = getString("title_landmark");
-
-			mTitleEditor->setEnabled(FALSE);
-			mNotesEditor->setEnabled(FALSE);
-
-			populateFoldersList();
-		break;
-
-		case TELEPORT_HISTORY:
-			mCurrentTitle = getString("title_teleport_history");
-		break;
-	}
-
-	if (type != AGENT)
-		toggleMediaPanel(FALSE);
+	mTitle->setText(mCurrentTitle);
 
 	mInfoType = type;
 }
 
-BOOL LLPanelPlaceInfo::isMediaPanelVisible()
+void LLPanelPlaceInfo::sendParcelInfoRequest()
 {
-	if (!mMediaPanel)
-		return FALSE;
+	if (mParcelID != mRequestedID)
+	{
+		LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this);
+		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID);
 
-	return mMediaPanel->getVisible();
+		mRequestedID = mParcelID;
+	}
 }
 
-void LLPanelPlaceInfo::toggleMediaPanel(BOOL visible)
+void LLPanelPlaceInfo::displayParcelInfo(const LLUUID& region_id,
+										 const LLVector3d& pos_global)
 {
-    if (!mMediaPanel)
-        return;
+	LLViewerRegion* region = gAgent.getRegion();
+	if (!region)
+		return;
+
+	mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
+					  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
+					  (F32)pos_global.mdV[VZ]);
 
-    if (visible)
+	LLSD body;
+	std::string url = region->getCapability("RemoteParcelRequest");
+	if (!url.empty())
 	{
-		mTitle->setText(getString("title_media"));
+		body["location"] = ll_sd_from_vector3(mPosRegion);
+		if (!region_id.isNull())
+		{
+			body["region_id"] = region_id;
+		}
+		if (!pos_global.isExactlyZero())
+		{
+			U64 region_handle = to_region_handle(pos_global);
+			body["region_handle"] = ll_sd_from_U64(region_handle);
+		}
+		LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle()));
 	}
 	else
 	{
-		mTitle->setText(mCurrentTitle);
-	}
-
-    mInfoPanel->setVisible(!visible);
-    mMediaPanel->setVisible(visible);
-}
-
-void LLPanelPlaceInfo::sendParcelInfoRequest()
-{
-	if (mParcelID != mRequestedID)
-	{
-		LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this);
-		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID);
-
-		mRequestedID = mParcelID;
+		mDescEditor->setText(getString("server_update_text"));
 	}
 }
 
@@ -473,27 +209,6 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)
 		mDescEditor->setText(parcel_data.desc);
 	}
 
-	// HACK: Flag 0x2 == adult region,
-	// Flag 0x1 == mature region, otherwise assume PG
-	std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
-	if (parcel_data.flags & 0x2)
-	{
-		rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
-	}
-	else if (parcel_data.flags & 0x1)
-	{
-		rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
-	}
-
-	mMaturityRatingText->setValue(rating);
-	mRatingText->setValue(rating);
-
-	//update for_sale banner, here we should use DFQ_FOR_SALE instead of PF_FOR_SALE
-	//because we deal with remote parcel response format
-	bool is_for_sale = (parcel_data.flags & DFQ_FOR_SALE) &&
-					 mInfoType == AGENT ? TRUE : FALSE;
-	mForSalePanel->setVisible(is_for_sale);
-
 	S32 region_x;
 	S32 region_y;
 	S32 region_z;
@@ -521,408 +236,25 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)
 	{
 		mParcelName->setText(getString("not_available"));
 	}
-
-	if (mInfoType == CREATE_LANDMARK)
-	{
-		if (parcel_data.name.empty())
-		{
-			mTitleEditor->setText(llformat("%s (%d, %d, %d)",
-								  parcel_data.sim_name.c_str(), region_x, region_y, region_z));
-		}
-		else
-		{
-			mTitleEditor->setText(parcel_data.name);
-		}
-
-		// FIXME: Creating landmark works only for current agent location.
-		std::string desc;
-		LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, gAgent.getPositionAgent());
-		mNotesEditor->setText(desc);
-
-		if (!LLLandmarkActions::landmarkAlreadyExists())
-		{
-			createLandmark(mFolderCombo->getValue().asUUID());
-		}
-	}
 }
 
-void LLPanelPlaceInfo::displayParcelInfo(const LLUUID& region_id,
-										 const LLVector3d& pos_global)
+// virtual
+void LLPanelPlaceInfo::handleVisibilityChange(BOOL new_visibility)
 {
-	LLViewerRegion* region = gAgent.getRegion();
-	if (!region)
-		return;
-
-	mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
-					  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
-					  (F32)pos_global.mdV[VZ]);
-
-	LLSD body;
-	std::string url = region->getCapability("RemoteParcelRequest");
-	if (!url.empty())
-	{
-		body["location"] = ll_sd_from_vector3(mPosRegion);
-		if (!region_id.isNull())
-		{
-			body["region_id"] = region_id;
-		}
-		if (!pos_global.isExactlyZero())
-		{
-			U64 region_handle = to_region_handle(pos_global);
-			body["region_handle"] = ll_sd_from_U64(region_handle);
-		}
-		LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle()));
-	}
-	else
-	{
-		mDescEditor->setText(getString("server_update_text"));
-	}
-}
+	LLPanel::handleVisibilityChange(new_visibility);
 
-void LLPanelPlaceInfo::displaySelectedParcelInfo(LLParcel* parcel,
-											  LLViewerRegion* region,
-											  const LLVector3d& pos_global,
-											  bool is_current_parcel)
-{
-	if (!region || !parcel)
+	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
+	if (!parcel_mgr)
 		return;
 
-	// send EstateCovenantInfo message
-	LLMessageSystem *msg = gMessageSystem;
-	msg->newMessage("EstateCovenantRequest");
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID,	gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
-	msg->sendReliable(region->getHost());
-
-	LLParcelData parcel_data;
-
-	// HACK: Converting sim access flags to the format
-	// returned by remote parcel response.
-	switch(region->getSimAccess())
-	{
-	case SIM_ACCESS_MATURE:
-		parcel_data.flags = 0x1;
-		break;
-
-	case SIM_ACCESS_ADULT:
-		parcel_data.flags = 0x2;
-		break;
-
-	default:
-		parcel_data.flags = 0;
-	}
-	parcel_data.desc = parcel->getDesc();
-	parcel_data.name = parcel->getName();
-	parcel_data.sim_name = region->getName();
-	parcel_data.snapshot_id = parcel->getSnapshotID();
-	mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
-					  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
-					  (F32)pos_global.mdV[VZ]);
-	parcel_data.global_x = pos_global.mdV[VX];
-	parcel_data.global_y = pos_global.mdV[VY];
-	parcel_data.global_z = pos_global.mdV[VZ];
-
-	std::string on = getString("on");
-	std::string off = getString("off");
-
-	// Processing parcel characteristics
-	if (parcel->getParcelFlagAllowVoice())
-	{
-		mVoiceText->setText(on);
-	}
-	else
-	{
-		mVoiceText->setText(off);
-	}
-
-	if (!region->getBlockFly() && parcel->getAllowFly())
-	{
-		mFlyText->setText(on);
-	}
-	else
-	{
-		mFlyText->setText(off);
-	}
-
-	if (region->getRestrictPushObject() || parcel->getRestrictPushObject())
-	{
-		mPushText->setText(off);
-	}
-	else
-	{
-		mPushText->setText(on);
-	}
-
-	if (parcel->getAllowModify())
-	{
-		mBuildText->setText(on);
-	}
-	else
-	{
-		mBuildText->setText(off);
-	}
-
-	if((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) ||
-	   (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) ||
-	   !parcel->getAllowOtherScripts())
-	{
-		mScriptsText->setText(off);
-	}
-	else
-	{
-		mScriptsText->setText(on);
-	}
-
-	if (region->getAllowDamage() || parcel->getAllowDamage())
-	{
-		mDamageText->setText(on);
-	}
-	else
-	{
-		mDamageText->setText(off);
-	}
-
-	mRegionNameText->setText(region->getName());
-	mRegionTypeText->setText(region->getSimProductName());
-	mRegionRatingText->setText(region->getSimAccessString());
-
-	// Determine parcel owner
-	if (parcel->isPublic())
-	{
-		mParcelOwner->setText(getString("public"));
-		mRegionOwnerText->setText(getString("public"));
-	}
-	else
-	{
-		if (parcel->getIsGroupOwned())
-		{
-			mRegionOwnerText->setText(getString("group_owned_text"));
-
-			if(!parcel->getGroupID().isNull())
-			{
-				// FIXME: Using parcel group as region group.
-				gCacheName->get(parcel->getGroupID(), TRUE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mRegionGroupText, _2, _3));
-
-				gCacheName->get(parcel->getGroupID(), TRUE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mParcelOwner, _2, _3));
-			}
-			else
-			{
-				std::string owner = getString("none_text");
-				mRegionGroupText->setText(owner);
-				mParcelOwner->setText(owner);
-			}
-		}
-		else
-		{
-			// Figure out the owner's name
-			gCacheName->get(parcel->getOwnerID(), FALSE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mParcelOwner, _2, _3));
-			gCacheName->get(region->getOwner(), FALSE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mRegionOwnerText, _2, _3));
-		}
-
-		if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus())
-		{
-			mRegionOwnerText->setText(mRegionOwnerText->getText() + getString("sale_pending_text"));
-		}
-	}
-
-	mEstateRatingText->setText(region->getSimAccessString());
-
-	S32 area;
-	S32 claim_price;
-	S32 rent_price;
-	F32 dwell;
-	BOOL for_sale = parcel->getForSale();
-	LLViewerParcelMgr::getInstance()->getDisplayInfo(&area,
-													 &claim_price,
-													 &rent_price,
-													 &for_sale,
-													 &dwell);
-	if (for_sale)
-	{
-		// Adding "For Sale" flag in remote parcel response format.
-		parcel_data.flags |= DFQ_FOR_SALE;
-
-		const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
-		if(auth_buyer_id.notNull())
-		{
-			gCacheName->get(auth_buyer_id, TRUE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mSaleToText, _2, _3));
-
-			// Show sales info to a specific person or a group he belongs to.
-			if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id))
-			{
-				for_sale = FALSE;
-			}
-		}
-		else
-		{
-			mSaleToText->setText(getString("anyone"));
-		}
-
-		const U8* sign = (U8*)getString("price_text").c_str();
-		const U8* sqm = (U8*)getString("area_text").c_str();
-
-		mSalesPriceText->setText(llformat("%s%d ", sign, parcel->getSalePrice()));
-		mAreaText->setText(llformat("%d %s", area, sqm));
-		mTrafficText->setText(llformat("%.0f", dwell));
-
-		// Can't have more than region max tasks, regardless of parcel
-		// object bonus factor.
-		S32 primitives = llmin(llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()),
-							   (S32)region->getMaxTasks());
-
-		const U8* available = (U8*)getString("available").c_str();
-		const U8* allocated = (U8*)getString("allocated").c_str();
-
-		mPrimitivesText->setText(llformat("%d %s, %d %s", primitives, available, parcel->getPrimCount(), allocated));
-
-		if (parcel->getAllowOtherScripts())
-		{
-			mParcelScriptsText->setText(getString("all_residents_text"));
-		}
-		else if (parcel->getAllowGroupScripts())
-		{
-			mParcelScriptsText->setText(getString("group_text"));
-		}
-		else
-		{
-			mParcelScriptsText->setText(off);
-		}
-
-		mTerraformLimitsText->setText(parcel->getAllowTerraform() ? on : off);
-
-		if (region->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES)
-		{
-			mSubdivideText->setText(getString("can_change"));
-		}
-		else
-		{
-			mSubdivideText->setText(getString("can_not_change"));
-		}
-		if (region->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL)
-		{
-			mResaleText->setText(getString("can_not_resell"));
-		}
-		else
-		{
-			mResaleText->setText(getString("can_resell"));
-		}
-	}
-
-	mSelectedParcelID = parcel->getLocalID();
-	mLastSelectedRegionID = region->getRegionID();
-	processParcelInfo(parcel_data);
-
-	mYouAreHerePanel->setVisible(is_current_parcel);
-	getChild<LLAccordionCtrlTab>("sales_tab")->setVisible(for_sale);
-}
-
-void LLPanelPlaceInfo::updateEstateName(const std::string& name)
-{
-	mEstateNameText->setText(name);
-}
-
-void LLPanelPlaceInfo::updateEstateOwnerName(const std::string& name)
-{
-	mEstateOwnerText->setText(name);
-}
-
-void LLPanelPlaceInfo::updateCovenantText(const std::string &text)
-{
-	mCovenantText->setText(text);
-}
-
-void LLPanelPlaceInfo::updateLastVisitedText(const LLDate &date)
-{
-	if (date.isNull())
-	{
-		mLastVisited->setText(getString("unknown"));
-	}
-	else
-	{
-		std::string timeStr = getString("acquired_date");
-		LLSD substitution;
-		substitution["datetime"] = (S32) date.secondsSinceEpoch();
-		LLStringUtil::format (timeStr, substitution);
-		mLastVisited->setText(timeStr);
-	}
-}
-
-void LLPanelPlaceInfo::toggleLandmarkEditMode(BOOL enabled)
-{
-	// If switching to edit mode while creating landmark
-	// the "Create Landmark" title remains.
-	if (enabled && mInfoType != CREATE_LANDMARK)
-	{
-		mTitle->setText(getString("title_edit_landmark"));
-	}
-	else
-	{
-		mTitle->setText(mCurrentTitle);
-	}
-
-	if (mNotesEditor->getReadOnly() ==  (enabled == TRUE))
-	{
-		mTitleEditor->setEnabled(enabled);
-		mNotesEditor->setReadOnly(!enabled);
-		mFolderCombo->setVisible(enabled);
-		getChild<LLTextBox>("folder_lable")->setVisible(enabled);
-
-		// HACK: To change the text color in a text editor
-		// when it was enabled/disabled we set the text once again.
-		mNotesEditor->setText(mNotesEditor->getText());
-	}
-}
-
-const std::string& LLPanelPlaceInfo::getLandmarkTitle() const
-{
-	return mTitleEditor->getText();
-}
-
-const std::string LLPanelPlaceInfo::getLandmarkNotes() const
-{
-	return mNotesEditor->getText();
-}
-
-const LLUUID LLPanelPlaceInfo::getLandmarkFolder() const
-{
-	return mFolderCombo->getValue().asUUID();
-}
-
-BOOL LLPanelPlaceInfo::setLandmarkFolder(const LLUUID& id)
-{
-	return mFolderCombo->setCurrentByID(id);
-}
-
-void LLPanelPlaceInfo::createLandmark(const LLUUID& folder_id)
-{
-	std::string name = mTitleEditor->getText();
-	std::string desc = mNotesEditor->getText();
-
-	LLStringUtil::trim(name);
-	LLStringUtil::trim(desc);
-
-	// If typed name is empty use the parcel name instead.
-	if (name.empty())
+	// Remove land selection when panel hides.
+	if (!new_visibility)
 	{
-		name = mParcelName->getText();
-
-		// If no parcel exists use the region name instead.
-		if (name.empty())
+		if (!parcel_mgr->selectionEmpty())
 		{
-			name = mRegionName->getText();
+			parcel_mgr->deselectLand();
 		}
 	}
-
-	LLStringUtil::replaceChar(desc, '\n', ' ');
-	// If no folder chosen use the "Landmarks" folder.
-	LLLandmarkActions::createLandmarkHere(name, desc,
-		folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK));
 }
 
 void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel)
@@ -942,159 +274,10 @@ void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global, LLPanelPickEdit*
 	pick_panel->setPickData(&data);
 }
 
-// virtual
-void LLPanelPlaceInfo::handleVisibilityChange (BOOL new_visibility)
-{
-	LLPanel::handleVisibilityChange(new_visibility);
-
-	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
-	if (!parcel_mgr)
-		return;
-
-	// Remove land selection when panel hides.
-	if (!new_visibility)
-	{
-		if (!parcel_mgr->selectionEmpty())
-		{
-			parcel_mgr->deselectLand();
-		}
-	}
-}
-
-void LLPanelPlaceInfo::populateFoldersList()
+// static
+void LLPanelPlaceInfo::nameUpdatedCallback(LLTextBox* text,
+										   const std::string& first,
+										   const std::string& last)
 {
-	// Collect all folders that can contain landmarks.
-	LLInventoryModel::cat_array_t cats;
-	collectLandmarkFolders(cats);
-
-	mFolderCombo->removeall();
-
-	// Put the "Landmarks" folder first in list.
-	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
-	const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id);
-	if (!cat)
-	{
-		llwarns << "Cannot find the landmarks folder" << llendl;
-	}
-	std::string cat_full_name = getFullFolderName(cat);
-	mFolderCombo->add(cat_full_name, cat->getUUID());
-
-	typedef std::vector<folder_pair_t> folder_vec_t;
-	folder_vec_t folders;
-	// Sort the folders by their full name.
-	for (S32 i = 0; i < cats.count(); i++)
-	{
-		cat = cats.get(i);
-		cat_full_name = getFullFolderName(cat);
-		folders.push_back(folder_pair_t(cat->getUUID(), cat_full_name));
-	}
-	sort(folders.begin(), folders.end(), cmp_folders);
-
-	// Finally, populate the combobox.
-	for (folder_vec_t::const_iterator it = folders.begin(); it != folders.end(); it++)
-		mFolderCombo->add(it->second, LLSD(it->first));
-}
-
-//static
-void LLPanelPlaceInfo::updateYouAreHereBanner(void* userdata)
-{
-	//YouAreHere Banner should be displayed only for selected places, 
-	// If you want to display it for landmark or teleport history item, you should check by mParcelId
-	
-	LLPanelPlaceInfo* self  = static_cast<LLPanelPlaceInfo*>(userdata);
-	if(!self->getVisible())
-		return;
-	if(!gDisconnected)
-	{
-		static F32 radius  = gSavedSettings.getF32("YouAreHereDistance");
-
-		BOOL display_banner = gAgent.getRegion()->getRegionID() == self->mLastSelectedRegionID && 
-			LLAgentUI::checkAgentDistance(self->mPosRegion, radius);
-
-		self->mYouAreHerePanel->setVisible(display_banner);
-	}
-}
-
-void LLPanelPlaceInfo::onForSaleBannerClick()
-{
-	LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance();
-	LLParcelSelectionHandle hParcel = mgr->getFloatingParcelSelection();
-	LLViewerRegion* selected_region =  mgr->getSelectionRegion();
-	if(!hParcel.isNull() && selected_region)
-	{
-		if(hParcel->getParcel()->getLocalID() == mSelectedParcelID && 
-				mLastSelectedRegionID ==selected_region->getRegionID())
-		{
-			if(hParcel->getParcel()->getSalePrice() - gStatusBar->getBalance() > 0)
-			{
-				LLFloaterBuyCurrency::buyCurrency("Buying selected land ", hParcel->getParcel()->getSalePrice());
-			}
-			else
-			{
-				LLViewerParcelMgr::getInstance()->startBuyLand();
-			}
-		}
-		else
-		{
-			LL_WARNS("Places") << "User  is trying  to buy remote parcel.Operation is not supported"<< LL_ENDL; 
-		}
-		
-	}
-	
-	
-}
-
-/*static*/
-std::string LLPanelPlaceInfo::getFullFolderName(const LLViewerInventoryCategory* cat)
-{
-	std::string name = cat->getName();
-	LLUUID parent_id;
-
-	// translate category name, if it's right below the root
-	// FIXME: it can throw notification about non existent string in strings.xml
-	if (cat->getParentUUID().notNull() && cat->getParentUUID() == gInventory.getRootFolderID())
-	{
-		LLTrans::findString(name, "InvFolder " + name);
-	}
-
-	// we don't want "My Inventory" to appear in the name
-	while ((parent_id = cat->getParentUUID()).notNull() && parent_id != gInventory.getRootFolderID())
-	{
-		cat = gInventory.getCategory(parent_id);
-		name = cat->getName() + "/" + name;
-	}
-
-	return name;
-}
-
-static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right)
-{
-	return left.second < right.second;
-}
-
-static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats)
-{
-	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
-
-	// Add descendent folders of the "Landmarks" category.
-	LLInventoryModel::item_array_t items; // unused
-	LLIsType is_category(LLAssetType::AT_CATEGORY);
-	gInventory.collectDescendentsIf(
-		landmarks_id,
-		cats,
-		items,
-		LLInventoryModel::EXCLUDE_TRASH,
-		is_category);
-
-	// Add the "My Favorites" category.
-	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
-	LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id);
-	if (!favorites_cat)
-	{
-		llwarns << "Cannot find the favorites folder" << llendl;
-	}
-	else
-	{
-		cats.put(favorites_cat);
-	}
+	text->setText(first + " " + last);
 }
diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h
index 07a2434d59f..c9e13475428 100644
--- a/indra/newview/llpanelplaceinfo.h
+++ b/indra/newview/llpanelplaceinfo.h
@@ -1,6 +1,6 @@
 /** 
  * @file llpanelplaceinfo.h
- * @brief Displays place information in Side Tray.
+ * @brief Base class for place information in Side Tray.
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
@@ -38,19 +38,13 @@
 #include "v3dmath.h"
 #include "lluuid.h"
 
-#include "llpanelmedia.h"
 #include "llremoteparcelrequest.h"
 
-class LLButton;
-class LLComboBox;
 class LLExpandableTextBox;
 class LLInventoryItem;
-class LLLineEditor;
 class LLPanelPickEdit;
 class LLParcel;
-class LLIconCtrl;
 class LLTextBox;
-class LLTextEditor;
 class LLTextureCtrl;
 class LLViewerRegion;
 class LLViewerInventoryCategory;
@@ -74,30 +68,18 @@ class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver
 
 	// Ignore all old location information, useful if you are 
 	// recycling an existing dialog and need to clear it.
-	void resetLocation();
+	virtual void resetLocation();
 
 	// Sends a request for data about the given parcel, which will
 	// only update the location if there is none already available.
 	/*virtual*/ void setParcelID(const LLUUID& parcel_id);
 
-	// Depending on how the panel was triggered 
-	// (from landmark or current location, or other) 
+	// Depending on how the panel was triggered
+	// (from landmark or current location, or other)
 	// sets a corresponding title and contents.
-	void setInfoType(INFO_TYPE type);
-
-	// Create a landmark for the current location
-	// in a folder specified by folder_id.
-	void createLandmark(const LLUUID& folder_id);
-	
-	// Create a pick for the location specified
-	// by global_pos.
-	void createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel);
-
-	BOOL isMediaPanelVisible();
-	void toggleMediaPanel(BOOL visible);
-	void displayItemInfo(const LLInventoryItem* pItem);
-	/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
+	virtual void setInfoType(INFO_TYPE type);
 
+	// Requests remote parcel info by parcel ID.
 	void sendParcelInfoRequest();
 
 	// Displays information about a remote parcel.
@@ -105,109 +87,37 @@ class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver
 	void displayParcelInfo(const LLUUID& region_id,
 						   const LLVector3d& pos_global);
 
-	// Displays information about the currently selected parcel
-	// without sending a request to the server.
-	// If is_current_parcel true shows "You Are Here" banner.
-	void displaySelectedParcelInfo(LLParcel* parcel,
-								LLViewerRegion* region,
-								const LLVector3d& pos_global,
-								bool is_current_parcel);
-
-	void updateEstateName(const std::string& name);
-	void updateEstateOwnerName(const std::string& name);
-	void updateCovenantText(const std::string &text);
-	void updateLastVisitedText(const LLDate &date);
-
-	void nameUpdatedCallback(LLTextBox* text,
-							 const std::string& first,
-							 const std::string& last);
-
-	void toggleLandmarkEditMode(BOOL enabled);
-
-	const std::string& getLandmarkTitle() const;
-	const std::string getLandmarkNotes() const;
-	const LLUUID getLandmarkFolder() const;
-
-	// Select current landmark folder in combobox.
-	BOOL setLandmarkFolder(const LLUUID& id);
+	/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
 
 	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+
 	/*virtual*/ void handleVisibilityChange (BOOL new_visibility);
-	
-	 static std::string getFullFolderName(const LLViewerInventoryCategory* cat);
 
-private:
+	// Create a pick for the location specified
+	// by global_pos.
+	void createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel);
 
-	void populateFoldersList();
-	static void updateYouAreHereBanner(void*);// added to gIdleCallbacks
-	void onForSaleBannerClick();
+protected:
+	static void nameUpdatedCallback(LLTextBox* text,
+									const std::string& first,
+									const std::string& last);
 
 	/**
 	 * mParcelID is valid only for remote places, in other cases it's null. See resetLocation() 
 	 */
-	LLUUID			mParcelID;
-	LLUUID			mRequestedID;
-	LLUUID			mLandmarkID;
-	LLVector3		mPosRegion;
-	std::string		mCurrentTitle;
-	S32				mMinHeight;
-	INFO_TYPE 		mInfoType;
-
-	/**
-	 * Hold last displayed parcel. Needs for YouAreHere banner.
-	 */
-	S32			mSelectedParcelID;
-	LLUUID		mLastSelectedRegionID;
-
-	LLTextBox*			mTitle;
-	LLPanel*			mForSalePanel;
-	LLPanel*			mYouAreHerePanel;
-	LLTextureCtrl*		mSnapshotCtrl;
-	LLTextBox*			mRegionName;
-	LLTextBox*			mParcelName;
-	LLExpandableTextBox*mDescEditor;
-	LLTextBox*			mMaturityRatingText;
-	LLTextBox*			mParcelOwner;
-	LLTextBox*			mLastVisited;
-
-	LLTextBox*			mRatingText;
-	LLTextBox*			mVoiceText;
-	LLTextBox*			mFlyText;
-	LLTextBox*			mPushText;
-	LLTextBox*			mBuildText;
-	LLTextBox*			mScriptsText;
-	LLTextBox*			mDamageText;
-
-	LLTextBox*			mRegionNameText;
-	LLTextBox*			mRegionTypeText;
-	LLTextBox*			mRegionRatingText;
-	LLTextBox*			mRegionOwnerText;
-	LLTextBox*			mRegionGroupText;
-
-	LLTextBox*			mEstateNameText;
-	LLTextBox*			mEstateRatingText;
-	LLTextBox*			mEstateOwnerText;
-	LLTextEditor*		mCovenantText;
-
-	LLTextBox*			mSalesPriceText;
-	LLTextBox*			mAreaText;
-	LLTextBox*			mTrafficText;
-	LLTextBox*			mPrimitivesText;
-	LLTextBox*			mParcelScriptsText;
-	LLTextBox*			mTerraformLimitsText;
-	LLTextEditor*		mSubdivideText;
-	LLTextEditor*		mResaleText;
-	LLTextBox*			mSaleToText;
-
-	LLTextBox*			mOwner;
-	LLTextBox*			mCreator;
-	LLTextBox*			mCreated;
-	LLLineEditor*		mTitleEditor;
-	LLTextEditor*		mNotesEditor;
-	LLComboBox*			mFolderCombo;
-	LLPanel*            mScrollingPanel;
-	LLPanel*			mInfoPanel;
-	LLMediaPanel*		mMediaPanel;
+	LLUUID					mParcelID;
+	LLUUID					mRequestedID;
+	LLVector3				mPosRegion;
+	std::string				mCurrentTitle;
+	S32						mMinHeight;
+	INFO_TYPE 				mInfoType;
+
+	LLTextBox*				mTitle;
+	LLTextureCtrl*			mSnapshotCtrl;
+	LLTextBox*				mRegionName;
+	LLTextBox*				mParcelName;
+	LLExpandableTextBox*	mDescEditor;
+	LLTextBox*				mMaturityRatingText;
 };
 
 #endif // LL_LLPANELPLACEINFO_H
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
new file mode 100644
index 00000000000..9ba72fe6cff
--- /dev/null
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -0,0 +1,541 @@
+/**
+ * @file llpanelplaceprofile.cpp
+ * @brief Displays place profile in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelplaceprofile.h"
+
+#include "llparcel.h"
+
+#include "llqueryflags.h"
+
+#include "lliconctrl.h"
+#include "lllineeditor.h"
+#include "lltextbox.h"
+#include "lltexteditor.h"
+
+#include "llaccordionctrl.h"
+#include "llaccordionctrltab.h"
+#include "llagent.h"
+#include "llagentui.h"
+#include "llappviewer.h"
+#include "llcallbacklist.h"
+#include "llfloaterbuycurrency.h"
+#include "llstatusbar.h"
+#include "llviewercontrol.h"
+#include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
+
+static LLRegisterPanelClassWrapper<LLPanelPlaceProfile> t_place_profile("panel_place_profile");
+
+LLPanelPlaceProfile::LLPanelPlaceProfile()
+:	LLPanelPlaceInfo(),
+	mForSalePanel(NULL),
+	mYouAreHerePanel(NULL),
+	mSelectedParcelID(-1)
+{}
+
+// virtual
+LLPanelPlaceProfile::~LLPanelPlaceProfile()
+{}
+
+// virtual
+BOOL LLPanelPlaceProfile::postBuild()
+{
+	LLPanelPlaceInfo::postBuild();
+
+	mForSalePanel = getChild<LLPanel>("for_sale_panel");
+	mYouAreHerePanel = getChild<LLPanel>("here_panel");
+	gIdleCallbacks.addFunction(&LLPanelPlaceProfile::updateYouAreHereBanner, this);
+
+	//Icon value should contain sale price of last selected parcel.
+	mForSalePanel->getChild<LLIconCtrl>("icon_for_sale")->
+				setMouseDownCallback(boost::bind(&LLPanelPlaceProfile::onForSaleBannerClick, this));
+
+	mParcelOwner = getChild<LLTextBox>("owner_value");
+	mLastVisited = getChild<LLTextBox>("last_visited_value");
+
+	mRatingText = getChild<LLTextBox>("rating_value");
+	mVoiceText = getChild<LLTextBox>("voice_value");
+	mFlyText = getChild<LLTextBox>("fly_value");
+	mPushText = getChild<LLTextBox>("push_value");
+	mBuildText = getChild<LLTextBox>("build_value");
+	mScriptsText = getChild<LLTextBox>("scripts_value");
+	mDamageText = getChild<LLTextBox>("damage_value");
+
+	mRegionNameText = getChild<LLTextBox>("region_name");
+	mRegionTypeText = getChild<LLTextBox>("region_type");
+	mRegionRatingText = getChild<LLTextBox>("region_rating");
+	mRegionOwnerText = getChild<LLTextBox>("region_owner");
+	mRegionGroupText = getChild<LLTextBox>("region_group");
+
+	mEstateNameText = getChild<LLTextBox>("estate_name");
+	mEstateRatingText = getChild<LLTextBox>("estate_rating");
+	mEstateOwnerText = getChild<LLTextBox>("estate_owner");
+	mCovenantText = getChild<LLTextEditor>("covenant");
+
+	mSalesPriceText = getChild<LLTextBox>("sales_price");
+	mAreaText = getChild<LLTextBox>("area");
+	mTrafficText = getChild<LLTextBox>("traffic");
+	mPrimitivesText = getChild<LLTextBox>("primitives");
+	mParcelScriptsText = getChild<LLTextBox>("parcel_scripts");
+	mTerraformLimitsText = getChild<LLTextBox>("terraform_limits");
+	mSubdivideText = getChild<LLTextEditor>("subdivide");
+	mResaleText = getChild<LLTextEditor>("resale");
+	mSaleToText = getChild<LLTextBox>("sale_to");
+
+	return TRUE;
+}
+
+// virtual
+void LLPanelPlaceProfile::resetLocation()
+{
+	LLPanelPlaceInfo::resetLocation();
+
+	mForSalePanel->setVisible(FALSE);
+	mYouAreHerePanel->setVisible(FALSE);
+
+	std::string not_available = getString("not_available");
+	mParcelOwner->setValue(not_available);
+	mLastVisited->setValue(not_available);
+
+	mRatingText->setText(not_available);
+	mVoiceText->setText(not_available);
+	mFlyText->setText(not_available);
+	mPushText->setText(not_available);
+	mBuildText->setText(not_available);
+	mParcelScriptsText->setText(not_available);
+	mDamageText->setText(not_available);
+
+	mRegionNameText->setValue(not_available);
+	mRegionTypeText->setValue(not_available);
+	mRegionRatingText->setValue(not_available);
+	mRegionOwnerText->setValue(not_available);
+	mRegionGroupText->setValue(not_available);
+
+	mEstateNameText->setValue(not_available);
+	mEstateRatingText->setValue(not_available);
+	mEstateOwnerText->setValue(not_available);
+	mCovenantText->setValue(not_available);
+
+	mSalesPriceText->setValue(not_available);
+	mAreaText->setValue(not_available);
+	mTrafficText->setValue(not_available);
+	mPrimitivesText->setValue(not_available);
+	mParcelScriptsText->setValue(not_available);
+	mTerraformLimitsText->setValue(not_available);
+	mSubdivideText->setValue(not_available);
+	mResaleText->setValue(not_available);
+	mSaleToText->setValue(not_available);
+}
+
+// virtual
+void LLPanelPlaceProfile::setInfoType(INFO_TYPE type)
+{
+	bool is_info_type_agent = type == AGENT;
+	bool is_info_type_teleport_history = type == TELEPORT_HISTORY;
+
+	getChild<LLTextBox>("maturity_label")->setVisible(!is_info_type_agent);
+	mMaturityRatingText->setVisible(!is_info_type_agent);
+
+	getChild<LLTextBox>("owner_label")->setVisible(is_info_type_agent);
+	mParcelOwner->setVisible(is_info_type_agent);
+
+	getChild<LLTextBox>("last_visited_label")->setVisible(is_info_type_teleport_history);
+	mLastVisited->setVisible(is_info_type_teleport_history);
+
+	getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent);
+
+	switch(type)
+	{
+		case AGENT:
+		case PLACE:
+		default:
+			mCurrentTitle = getString("title_place");
+		break;
+
+		case TELEPORT_HISTORY:
+			mCurrentTitle = getString("title_teleport_history");
+		break;
+	}
+
+	LLPanelPlaceInfo::setInfoType(type);
+}
+
+// virtual
+void LLPanelPlaceProfile::processParcelInfo(const LLParcelData& parcel_data)
+{
+	LLPanelPlaceInfo::processParcelInfo(parcel_data);
+
+	// HACK: Flag 0x2 == adult region,
+	// Flag 0x1 == mature region, otherwise assume PG
+	std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
+	if (parcel_data.flags & 0x2)
+	{
+		rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
+	}
+	else if (parcel_data.flags & 0x1)
+	{
+		rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
+	}
+
+	mMaturityRatingText->setValue(rating);
+	mRatingText->setValue(rating);
+
+	//update for_sale banner, here we should use DFQ_FOR_SALE instead of PF_FOR_SALE
+	//because we deal with remote parcel response format
+	bool is_for_sale = (parcel_data.flags & DFQ_FOR_SALE) &&
+					 mInfoType == AGENT ? TRUE : FALSE;
+	mForSalePanel->setVisible(is_for_sale);
+}
+
+void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
+													LLViewerRegion* region,
+													const LLVector3d& pos_global,
+													bool is_current_parcel)
+{
+	if (!region || !parcel)
+		return;
+
+	// send EstateCovenantInfo message
+	LLMessageSystem *msg = gMessageSystem;
+	msg->newMessage("EstateCovenantRequest");
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID,	gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
+	msg->sendReliable(region->getHost());
+
+	LLParcelData parcel_data;
+
+	// HACK: Converting sim access flags to the format
+	// returned by remote parcel response.
+	switch(region->getSimAccess())
+	{
+	case SIM_ACCESS_MATURE:
+		parcel_data.flags = 0x1;
+		break;
+
+	case SIM_ACCESS_ADULT:
+		parcel_data.flags = 0x2;
+		break;
+
+	default:
+		parcel_data.flags = 0;
+	}
+	parcel_data.desc = parcel->getDesc();
+	parcel_data.name = parcel->getName();
+	parcel_data.sim_name = region->getName();
+	parcel_data.snapshot_id = parcel->getSnapshotID();
+	mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
+					  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
+					  (F32)pos_global.mdV[VZ]);
+	parcel_data.global_x = pos_global.mdV[VX];
+	parcel_data.global_y = pos_global.mdV[VY];
+	parcel_data.global_z = pos_global.mdV[VZ];
+
+	std::string on = getString("on");
+	std::string off = getString("off");
+
+	// Processing parcel characteristics
+	if (parcel->getParcelFlagAllowVoice())
+	{
+		mVoiceText->setText(on);
+	}
+	else
+	{
+		mVoiceText->setText(off);
+	}
+
+	if (!region->getBlockFly() && parcel->getAllowFly())
+	{
+		mFlyText->setText(on);
+	}
+	else
+	{
+		mFlyText->setText(off);
+	}
+
+	if (region->getRestrictPushObject() || parcel->getRestrictPushObject())
+	{
+		mPushText->setText(off);
+	}
+	else
+	{
+		mPushText->setText(on);
+	}
+
+	if (parcel->getAllowModify())
+	{
+		mBuildText->setText(on);
+	}
+	else
+	{
+		mBuildText->setText(off);
+	}
+
+	if((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) ||
+	   (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) ||
+	   !parcel->getAllowOtherScripts())
+	{
+		mScriptsText->setText(off);
+	}
+	else
+	{
+		mScriptsText->setText(on);
+	}
+
+	if (region->getAllowDamage() || parcel->getAllowDamage())
+	{
+		mDamageText->setText(on);
+	}
+	else
+	{
+		mDamageText->setText(off);
+	}
+
+	mRegionNameText->setText(region->getName());
+	mRegionTypeText->setText(region->getSimProductName());
+	mRegionRatingText->setText(region->getSimAccessString());
+
+	// Determine parcel owner
+	if (parcel->isPublic())
+	{
+		mParcelOwner->setText(getString("public"));
+		mRegionOwnerText->setText(getString("public"));
+	}
+	else
+	{
+		if (parcel->getIsGroupOwned())
+		{
+			mRegionOwnerText->setText(getString("group_owned_text"));
+
+			if(!parcel->getGroupID().isNull())
+			{
+				// FIXME: Using parcel group as region group.
+				gCacheName->get(parcel->getGroupID(), TRUE,
+								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionGroupText, _2, _3));
+
+				gCacheName->get(parcel->getGroupID(), TRUE,
+								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3));
+			}
+			else
+			{
+				std::string owner = getString("none_text");
+				mRegionGroupText->setText(owner);
+				mParcelOwner->setText(owner);
+			}
+		}
+		else
+		{
+			// Figure out the owner's name
+			gCacheName->get(parcel->getOwnerID(), FALSE,
+							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3));
+			gCacheName->get(region->getOwner(), FALSE,
+							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionOwnerText, _2, _3));
+		}
+
+		if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus())
+		{
+			mRegionOwnerText->setText(mRegionOwnerText->getText() + getString("sale_pending_text"));
+		}
+	}
+
+	mEstateRatingText->setText(region->getSimAccessString());
+
+	S32 area;
+	S32 claim_price;
+	S32 rent_price;
+	F32 dwell;
+	BOOL for_sale = parcel->getForSale();
+	LLViewerParcelMgr::getInstance()->getDisplayInfo(&area,
+													 &claim_price,
+													 &rent_price,
+													 &for_sale,
+													 &dwell);
+	if (for_sale)
+	{
+		// Adding "For Sale" flag in remote parcel response format.
+		parcel_data.flags |= DFQ_FOR_SALE;
+
+		const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
+		if(auth_buyer_id.notNull())
+		{
+			gCacheName->get(auth_buyer_id, TRUE,
+							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mSaleToText, _2, _3));
+
+			// Show sales info to a specific person or a group he belongs to.
+			if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id))
+			{
+				for_sale = FALSE;
+			}
+		}
+		else
+		{
+			mSaleToText->setText(getString("anyone"));
+		}
+
+		const U8* sign = (U8*)getString("price_text").c_str();
+		const U8* sqm = (U8*)getString("area_text").c_str();
+
+		mSalesPriceText->setText(llformat("%s%d ", sign, parcel->getSalePrice()));
+		mAreaText->setText(llformat("%d %s", area, sqm));
+		mTrafficText->setText(llformat("%.0f", dwell));
+
+		// Can't have more than region max tasks, regardless of parcel
+		// object bonus factor.
+		S32 primitives = llmin(llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()),
+							   (S32)region->getMaxTasks());
+
+		const U8* available = (U8*)getString("available").c_str();
+		const U8* allocated = (U8*)getString("allocated").c_str();
+
+		mPrimitivesText->setText(llformat("%d %s, %d %s", primitives, available, parcel->getPrimCount(), allocated));
+
+		if (parcel->getAllowOtherScripts())
+		{
+			mParcelScriptsText->setText(getString("all_residents_text"));
+		}
+		else if (parcel->getAllowGroupScripts())
+		{
+			mParcelScriptsText->setText(getString("group_text"));
+		}
+		else
+		{
+			mParcelScriptsText->setText(off);
+		}
+
+		mTerraformLimitsText->setText(parcel->getAllowTerraform() ? on : off);
+
+		if (region->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES)
+		{
+			mSubdivideText->setText(getString("can_change"));
+		}
+		else
+		{
+			mSubdivideText->setText(getString("can_not_change"));
+		}
+		if (region->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL)
+		{
+			mResaleText->setText(getString("can_not_resell"));
+		}
+		else
+		{
+			mResaleText->setText(getString("can_resell"));
+		}
+	}
+
+	mSelectedParcelID = parcel->getLocalID();
+	mLastSelectedRegionID = region->getRegionID();
+	processParcelInfo(parcel_data);
+
+	mYouAreHerePanel->setVisible(is_current_parcel);
+	getChild<LLAccordionCtrlTab>("sales_tab")->setVisible(for_sale);
+}
+
+void LLPanelPlaceProfile::updateEstateName(const std::string& name)
+{
+	mEstateNameText->setText(name);
+}
+
+void LLPanelPlaceProfile::updateEstateOwnerName(const std::string& name)
+{
+	mEstateOwnerText->setText(name);
+}
+
+void LLPanelPlaceProfile::updateCovenantText(const std::string &text)
+{
+	mCovenantText->setText(text);
+}
+
+void LLPanelPlaceProfile::updateLastVisitedText(const LLDate &date)
+{
+	if (date.isNull())
+	{
+		mLastVisited->setText(getString("unknown"));
+	}
+	else
+	{
+		std::string timeStr = getString("acquired_date");
+		LLSD substitution;
+		substitution["datetime"] = (S32) date.secondsSinceEpoch();
+		LLStringUtil::format (timeStr, substitution);
+		mLastVisited->setText(timeStr);
+	}
+}
+
+void LLPanelPlaceProfile::onForSaleBannerClick()
+{
+	LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance();
+	LLParcelSelectionHandle hParcel = mgr->getFloatingParcelSelection();
+	LLViewerRegion* selected_region =  mgr->getSelectionRegion();
+	if(!hParcel.isNull() && selected_region)
+	{
+		if(hParcel->getParcel()->getLocalID() == mSelectedParcelID &&
+				mLastSelectedRegionID ==selected_region->getRegionID())
+		{
+			if(hParcel->getParcel()->getSalePrice() - gStatusBar->getBalance() > 0)
+			{
+				LLFloaterBuyCurrency::buyCurrency("Buying selected land ", hParcel->getParcel()->getSalePrice());
+			}
+			else
+			{
+				LLViewerParcelMgr::getInstance()->startBuyLand();
+			}
+		}
+		else
+		{
+			LL_WARNS("Places") << "User  is trying  to buy remote parcel.Operation is not supported"<< LL_ENDL;
+		}
+
+	}
+}
+
+// static
+void LLPanelPlaceProfile::updateYouAreHereBanner(void* userdata)
+{
+	//YouAreHere Banner should be displayed only for selected places,
+	// If you want to display it for landmark or teleport history item, you should check by mParcelId
+
+	LLPanelPlaceProfile* self = static_cast<LLPanelPlaceProfile*>(userdata);
+	if(!self->getVisible())
+		return;
+
+	if(!gDisconnected)
+	{
+		static F32 radius = gSavedSettings.getF32("YouAreHereDistance");
+
+		BOOL display_banner = gAgent.getRegion()->getRegionID() == self->mLastSelectedRegionID &&
+										LLAgentUI::checkAgentDistance(self->mPosRegion, radius);
+
+		self->mYouAreHerePanel->setVisible(display_banner);
+	}
+}
diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h
new file mode 100644
index 00000000000..d8e4bcb6bdb
--- /dev/null
+++ b/indra/newview/llpanelplaceprofile.h
@@ -0,0 +1,114 @@
+/**
+ * @file llpanelplaceprofile.h
+ * @brief Displays place profile in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELPLACEPROFILE_H
+#define LL_LLPANELPLACEPROFILE_H
+
+#include "llpanelplaceinfo.h"
+
+class LLTextEditor;
+
+class LLPanelPlaceProfile : public LLPanelPlaceInfo
+{
+public:
+	LLPanelPlaceProfile();
+	/*virtual*/ ~LLPanelPlaceProfile();
+
+	/*virtual*/ BOOL postBuild();
+
+	/*virtual*/ void resetLocation();
+
+	/*virtual*/ void setInfoType(INFO_TYPE type);
+
+	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+
+	// Displays information about the currently selected parcel
+	// without sending a request to the server.
+	// If is_current_parcel true shows "You Are Here" banner.
+	void displaySelectedParcelInfo(LLParcel* parcel,
+								   LLViewerRegion* region,
+								   const LLVector3d& pos_global,
+								   bool is_current_parcel);
+
+	void updateEstateName(const std::string& name);
+	void updateEstateOwnerName(const std::string& name);
+	void updateCovenantText(const std::string &text);
+	void updateLastVisitedText(const LLDate &date);
+
+private:
+	void onForSaleBannerClick();
+
+	static void updateYouAreHereBanner(void*);// added to gIdleCallbacks
+
+	/**
+	 * Holds last displayed parcel. Needed for YouAreHere banner.
+	 */
+	S32					mSelectedParcelID;
+	LLUUID				mLastSelectedRegionID;
+
+	LLPanel*			mForSalePanel;
+	LLPanel*			mYouAreHerePanel;
+
+	LLTextBox*			mParcelOwner;
+	LLTextBox*			mLastVisited;
+
+	LLTextBox*			mRatingText;
+	LLTextBox*			mVoiceText;
+	LLTextBox*			mFlyText;
+	LLTextBox*			mPushText;
+	LLTextBox*			mBuildText;
+	LLTextBox*			mScriptsText;
+	LLTextBox*			mDamageText;
+
+	LLTextBox*			mRegionNameText;
+	LLTextBox*			mRegionTypeText;
+	LLTextBox*			mRegionRatingText;
+	LLTextBox*			mRegionOwnerText;
+	LLTextBox*			mRegionGroupText;
+
+	LLTextBox*			mEstateNameText;
+	LLTextBox*			mEstateRatingText;
+	LLTextBox*			mEstateOwnerText;
+	LLTextEditor*		mCovenantText;
+
+	LLTextBox*			mSalesPriceText;
+	LLTextBox*			mAreaText;
+	LLTextBox*			mTrafficText;
+	LLTextBox*			mPrimitivesText;
+	LLTextBox*			mParcelScriptsText;
+	LLTextBox*			mTerraformLimitsText;
+	LLTextEditor*		mSubdivideText;
+	LLTextEditor*		mResaleText;
+	LLTextBox*			mSaleToText;
+};
+
+#endif // LL_LLPANELPLACEPROFILE_H
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index b2e9110e966..66efb96fc74 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -57,9 +57,10 @@
 #include "llinventorymodel.h"
 #include "lllandmarkactions.h"
 #include "lllandmarklist.h"
-#include "llpanelplaceinfo.h"
+#include "llpanellandmarkinfo.h"
 #include "llpanellandmarks.h"
 #include "llpanelpick.h"
+#include "llpanelplaceprofile.h"
 #include "llpanelteleporthistory.h"
 #include "llteleporthistorystorage.h"
 #include "lltoggleablemenu.h"
@@ -121,7 +122,8 @@ LLPanelPlaces::LLPanelPlaces()
 		mFilterSubString(LLStringUtil::null),
 		mActivePanel(NULL),
 		mFilterEditor(NULL),
-		mPlaceInfo(NULL),
+		mPlaceProfile(NULL),
+		mLandmarkInfo(NULL),
 		mPickPanel(NULL),
 		mItem(NULL),
 		mPlaceMenu(NULL),
@@ -135,7 +137,7 @@ LLPanelPlaces::LLPanelPlaces()
 	gInventory.addObserver(mInventoryObserver);
 
 	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
-			boost::bind(&LLPanelPlaces::onAgentParcelChange, this));
+			boost::bind(&LLPanelPlaces::updateVerbs, this));
 
 	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
 }
@@ -206,25 +208,32 @@ BOOL LLPanelPlaces::postBuild()
 		mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2, false));
 	}
 
-	mPlaceInfo = getChild<LLPanelPlaceInfo>("panel_place_info");
+	mPlaceProfile = getChild<LLPanelPlaceProfile>("panel_place_profile");
+	mLandmarkInfo = getChild<LLPanelLandmarkInfo>("panel_landmark_info");
+	if (!mPlaceProfile || !mLandmarkInfo)
+		return FALSE;
 
-	LLButton* back_btn = mPlaceInfo->getChild<LLButton>("back_btn");
+	LLButton* back_btn = mPlaceProfile->getChild<LLButton>("back_btn");
 	back_btn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this));
 
-	LLLineEditor* title_editor = mPlaceInfo->getChild<LLLineEditor>("title_editor");
+	back_btn = mLandmarkInfo->getChild<LLButton>("back_btn");
+	back_btn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this));
+
+	LLLineEditor* title_editor = mLandmarkInfo->getChild<LLLineEditor>("title_editor");
 	title_editor->setKeystrokeCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this), NULL);
 
-	LLTextEditor* notes_editor = mPlaceInfo->getChild<LLTextEditor>("notes_editor");
+	LLTextEditor* notes_editor = mLandmarkInfo->getChild<LLTextEditor>("notes_editor");
 	notes_editor->setKeystrokeCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this));
 
-	LLComboBox* folder_combo = mPlaceInfo->getChild<LLComboBox>("folder_combo");
+	LLComboBox* folder_combo = mLandmarkInfo->getChild<LLComboBox>("folder_combo");
 	folder_combo->setSelectionCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this));
+
 	return TRUE;
 }
 
 void LLPanelPlaces::onOpen(const LLSD& key)
 {
-	if(mPlaceInfo == NULL || key.size() == 0)
+	if(!mPlaceProfile || !mLandmarkInfo || key.size() == 0)
 		return;
 
 	mFilterEditor->clear();
@@ -239,11 +248,11 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 
 	if (mPlaceInfoType == AGENT_INFO_TYPE)
 	{
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::AGENT);
+		mPlaceProfile->setInfoType(LLPanelPlaceInfo::AGENT);
 	}
 	else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE)
 	{
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK);
+		mLandmarkInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK);
 
 		if (key.has("x") && key.has("y") && key.has("z"))
 		{
@@ -256,11 +265,11 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 			mPosGlobal = gAgent.getPositionGlobal();
 		}
 
-		mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal);
+		mLandmarkInfo->displayParcelInfo(LLUUID(), mPosGlobal);
 	}
 	else if (mPlaceInfoType == LANDMARK_INFO_TYPE)
 	{
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::LANDMARK);
+		mLandmarkInfo->setInfoType(LLPanelPlaceInfo::LANDMARK);
 
 		LLInventoryItem* item = gInventory.getItem(key["id"].asUUID());
 		if (!item)
@@ -270,17 +279,12 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 	}
 	else if (mPlaceInfoType == REMOTE_PLACE_INFO_TYPE)
 	{
-		if (mPlaceInfo->isMediaPanelVisible())
-		{
-			toggleMediaPanel();
-		}
-
 		mPosGlobal = LLVector3d(key["x"].asReal(),
 								key["y"].asReal(),
 								key["z"].asReal());
 
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::PLACE);
-		mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal);
+		mPlaceProfile->setInfoType(LLPanelPlaceInfo::PLACE);
+		mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal);
 	}
 	else if (mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
 	{
@@ -291,9 +295,9 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 
 		mPosGlobal = hist_items[index].mGlobalPos;
 
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY);
-		mPlaceInfo->updateLastVisitedText(hist_items[index].mDate);
-		mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal);
+		mPlaceProfile->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY);
+		mPlaceProfile->updateLastVisitedText(hist_items[index].mDate);
+		mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal);
 	}
 
 	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
@@ -321,7 +325,7 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 
 void LLPanelPlaces::setItem(LLInventoryItem* item)
 {
-	if (!mPlaceInfo || !item)
+	if (!mLandmarkInfo || !item)
 		return;
 
 	mItem = item;
@@ -351,19 +355,19 @@ void LLPanelPlaces::setItem(LLInventoryItem* item)
 
 	if (is_landmark_editable)
 	{
-		if(!mPlaceInfo->setLandmarkFolder(mItem->getParentUUID()) && !mItem->getParentUUID().isNull())
+		if(!mLandmarkInfo->setLandmarkFolder(mItem->getParentUUID()) && !mItem->getParentUUID().isNull())
 		{
 			const LLViewerInventoryCategory* cat = gInventory.getCategory(mItem->getParentUUID());
-			if(cat)
+			if (cat)
 			{
-				std::string cat_fullname = LLPanelPlaceInfo::getFullFolderName(cat);
-				LLComboBox* folderList = mPlaceInfo->getChild<LLComboBox>("folder_combo");
-				folderList->add(cat_fullname, cat->getUUID(),ADD_TOP);
+				std::string cat_fullname = LLPanelLandmarkInfo::getFullFolderName(cat);
+				LLComboBox* folderList = mLandmarkInfo->getChild<LLComboBox>("folder_combo");
+				folderList->add(cat_fullname, cat->getUUID(), ADD_TOP);
 			}
 		}
 	}
 
-	mPlaceInfo->displayItemInfo(mItem);
+	mLandmarkInfo->displayItemInfo(mItem);
 
 	LLLandmark* lm = gLandmarkList.getAsset(mItem->getAssetUUID(),
 											boost::bind(&LLPanelPlaces::onLandmarkLoaded, this, _1));
@@ -375,13 +379,13 @@ void LLPanelPlaces::setItem(LLInventoryItem* item)
 
 void LLPanelPlaces::onLandmarkLoaded(LLLandmark* landmark)
 {
-	if (!mPlaceInfo)
+	if (!mLandmarkInfo)
 		return;
 
 	LLUUID region_id;
 	landmark->getRegionID(region_id);
 	landmark->getGlobalPos(mPosGlobal);
-	mPlaceInfo->displayParcelInfo(region_id, mPosGlobal);
+	mLandmarkInfo->displayParcelInfo(region_id, mPosGlobal);
 }
 
 void LLPanelPlaces::onFilterEdit(const std::string& search_string, bool force_filter)
@@ -418,10 +422,8 @@ void LLPanelPlaces::onShareButtonClicked()
 
 void LLPanelPlaces::onTeleportButtonClicked()
 {
-	if (!mPlaceInfo)
-		return;
-
-	if (mPlaceInfo->getVisible())
+	LLPanelPlaceInfo* panel = getCurrentInfoPanel();
+	if (panel && panel->getVisible())
 	{
 		if (mPlaceInfoType == LANDMARK_INFO_TYPE)
 		{
@@ -450,10 +452,8 @@ void LLPanelPlaces::onTeleportButtonClicked()
 
 void LLPanelPlaces::onShowOnMapButtonClicked()
 {
-	if (!mPlaceInfo)
-		return;
-
-	if (mPlaceInfo->getVisible())
+	LLPanelPlaceInfo* panel = getCurrentInfoPanel();
+	if (panel && panel->getVisible())
 	{
 		LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
 		if(!worldmap_instance)
@@ -496,31 +496,31 @@ void LLPanelPlaces::onShowOnMapButtonClicked()
 
 void LLPanelPlaces::onEditButtonClicked()
 {
-	if (!mPlaceInfo || isLandmarkEditModeOn)
+	if (!mLandmarkInfo || isLandmarkEditModeOn)
 		return;
 
 	isLandmarkEditModeOn = true;
 
-	mPlaceInfo->toggleLandmarkEditMode(TRUE);
+	mLandmarkInfo->toggleLandmarkEditMode(TRUE);
 
 	updateVerbs();
 }
 
 void LLPanelPlaces::onSaveButtonClicked()
 {
-	if (!mPlaceInfo || mItem.isNull())
+	if (!mLandmarkInfo || mItem.isNull())
 		return;
 
-	std::string current_title_value = mPlaceInfo->getLandmarkTitle();
+	std::string current_title_value = mLandmarkInfo->getLandmarkTitle();
 	std::string item_title_value = mItem->getName();
-	std::string current_notes_value = mPlaceInfo->getLandmarkNotes();
+	std::string current_notes_value = mLandmarkInfo->getLandmarkNotes();
 	std::string item_notes_value = mItem->getDescription();
 
 	LLStringUtil::trim(current_title_value);
 	LLStringUtil::trim(current_notes_value);
 
 	LLUUID item_id = mItem->getUUID();
-	LLUUID folder_id = mPlaceInfo->getLandmarkFolder();
+	LLUUID folder_id = mLandmarkInfo->getLandmarkFolder();
 
 	LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(mItem);
 
@@ -553,7 +553,7 @@ void LLPanelPlaces::onSaveButtonClicked()
 
 void LLPanelPlaces::onCancelButtonClicked()
 {
-	if (!mPlaceInfo)
+	if (!mLandmarkInfo)
 		return;
 
 	if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE)
@@ -562,13 +562,13 @@ void LLPanelPlaces::onCancelButtonClicked()
 	}
 	else
 	{
-		mPlaceInfo->toggleLandmarkEditMode(FALSE);
+		mLandmarkInfo->toggleLandmarkEditMode(FALSE);
 		isLandmarkEditModeOn = false;
 
 		updateVerbs();
 
 		// Reload the landmark properties.
-		mPlaceInfo->displayItemInfo(mItem);
+		mLandmarkInfo->displayItemInfo(mItem);
 	}
 }
 
@@ -597,7 +597,7 @@ void LLPanelPlaces::onOverflowButtonClicked()
 		if (mItem.notNull())
 		{
 			const LLUUID& item_id = mItem->getUUID();
-			const LLUUID& trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+			const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 			is_landmark_removable = gInventory.isObjectDescendentOf(item_id, gInventory.getRootFolderID()) &&
 									!gInventory.isObjectDescendentOf(item_id, trash_id);
 		}
@@ -652,9 +652,6 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
 	}
 	else if (item == "pick")
 	{
-		if (!mPlaceInfo)
-			return;
-
 		if (mPickPanel == NULL)
 		{
 			mPickPanel = LLPanelPickEdit::create();
@@ -667,7 +664,12 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
 
 		togglePickPanel(TRUE);
 		mPickPanel->onOpen(LLSD());
-		mPlaceInfo->createPick(mPosGlobal, mPickPanel);
+
+		LLPanelPlaceInfo* panel = getCurrentInfoPanel();
+		if (panel)
+		{
+			panel->createPick(mPosGlobal, mPickPanel);
+		}
 
 		LLRect rect = getRect();
 		mPickPanel->reshape(rect.getWidth(), rect.getHeight());
@@ -677,7 +679,7 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
     {
         if ( mItem.notNull() ) 
         {
-            LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+            const LLUUID& favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
             if ( favorites_id.notNull() )
             {
                 copy_inventory_item(gAgent.getID(),
@@ -694,39 +696,16 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
 
 void LLPanelPlaces::onBackButtonClicked()
 {
-	if (!mPlaceInfo)
-		return;
-	
-	if (mPlaceInfo->isMediaPanelVisible())
-	{
-		toggleMediaPanel();
-	}
-	else
-	{
-		togglePlaceInfoPanel(FALSE);
+	togglePlaceInfoPanel(FALSE);
 
-		// Resetting mPlaceInfoType when Place Info panel is closed.
-		mPlaceInfoType = LLStringUtil::null;
+	// Resetting mPlaceInfoType when Place Info panel is closed.
+	mPlaceInfoType = LLStringUtil::null;
 
-		isLandmarkEditModeOn = false;
-	}
+	isLandmarkEditModeOn = false;
 
 	updateVerbs();
 }
 
-void LLPanelPlaces::toggleMediaPanel()
-{
-	if (!mPlaceInfo)
-		return;
-
-	mPlaceInfo->toggleMediaPanel(!mPlaceInfo->isMediaPanelVisible());
-
-	// Refresh the current place info because
-	// the media panel controls can't refer to
-	// the remote parcel media.
-	onOpen(LLSD().insert("type", AGENT_INFO_TYPE));
-}
-
 void LLPanelPlaces::togglePickPanel(BOOL visible)
 {
 	setAllChildrenVisible(this, !visible);
@@ -737,26 +716,50 @@ void LLPanelPlaces::togglePickPanel(BOOL visible)
 
 void LLPanelPlaces::togglePlaceInfoPanel(BOOL visible)
 {
-	if (!mPlaceInfo)
+	if (!mPlaceProfile || !mLandmarkInfo)
 		return;
 
-	mPlaceInfo->setVisible(visible);
 	mFilterEditor->setVisible(!visible);
 	mTabContainer->setVisible(!visible);
 
-	if (visible)
+	if (mPlaceInfoType == AGENT_INFO_TYPE ||
+		mPlaceInfoType == REMOTE_PLACE_INFO_TYPE ||
+		mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
 	{
-		mPlaceInfo->resetLocation();
+		mPlaceProfile->setVisible(visible);
 
-		LLRect rect = getRect();
-		LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
-		mPlaceInfo->reshape(new_rect.getWidth(),new_rect.getHeight());
+		if (visible)
+		{
+			mPlaceProfile->resetLocation();
+
+			LLRect rect = getRect();
+			LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
+			mPlaceProfile->reshape(new_rect.getWidth(), new_rect.getHeight());
+
+			mLandmarkInfo->setVisible(FALSE);
+		}
+	}
+	else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE ||
+			 mPlaceInfoType == LANDMARK_INFO_TYPE)
+	{
+		mLandmarkInfo->setVisible(visible);
+
+		if (visible)
+		{
+			mLandmarkInfo->resetLocation();
+
+			LLRect rect = getRect();
+			LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
+			mLandmarkInfo->reshape(new_rect.getWidth(), new_rect.getHeight());
+
+			mPlaceProfile->setVisible(FALSE);
+		}
 	}
 }
 
 void LLPanelPlaces::changedParcelSelection()
 {
-	if (!mPlaceInfo)
+	if (!mPlaceProfile)
 		return;
 
 	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
@@ -782,8 +785,8 @@ void LLPanelPlaces::changedParcelSelection()
 		}
 	}
 
-	mPlaceInfo->resetLocation();
-	mPlaceInfo->displaySelectedParcelInfo(parcel, region, mPosGlobal, is_current_parcel);
+	mPlaceProfile->resetLocation();
+	mPlaceProfile->displaySelectedParcelInfo(parcel, region, mPosGlobal, is_current_parcel);
 
 	updateVerbs();
 }
@@ -830,30 +833,22 @@ void LLPanelPlaces::changedInventory(U32 mask)
 	gInventory.removeObserver(mInventoryObserver);
 }
 
-void LLPanelPlaces::onAgentParcelChange()
+void LLPanelPlaces::updateVerbs()
 {
-	if (!mPlaceInfo)
-		return;
+	bool is_place_info_visible;
 
-	if (mPlaceInfo->isMediaPanelVisible())
+	LLPanelPlaceInfo* panel = getCurrentInfoPanel();
+	if (panel)
 	{
-		onOpen(LLSD().insert("type", AGENT_INFO_TYPE));
+		is_place_info_visible = panel->getVisible();
 	}
 	else
 	{
-		updateVerbs();
+		is_place_info_visible = false;
 	}
-}
 
-void LLPanelPlaces::updateVerbs()
-{
-	if (!mPlaceInfo)
-		return;
-
-	bool is_place_info_visible = mPlaceInfo->getVisible();
 	bool is_agent_place_info_visible = mPlaceInfoType == AGENT_INFO_TYPE;
 	bool is_create_landmark_visible = mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE;
-	bool is_media_panel_visible = mPlaceInfo->isMediaPanelVisible();
 
 	mTeleportBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
 	mShowOnMapBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
@@ -864,7 +859,7 @@ void LLPanelPlaces::updateVerbs()
 	mCancelBtn->setVisible(isLandmarkEditModeOn);
 	mCloseBtn->setVisible(is_create_landmark_visible && !isLandmarkEditModeOn);
 
-	mOverflowBtn->setEnabled(is_place_info_visible && !is_media_panel_visible && !is_create_landmark_visible);
+	mOverflowBtn->setEnabled(is_place_info_visible && !is_create_landmark_visible);
 
 	if (is_place_info_visible)
 	{
@@ -872,16 +867,13 @@ void LLPanelPlaces::updateVerbs()
 		{
 			// We don't need to teleport to the current location
 			// so check if the location is not within the current parcel.
-			mTeleportBtn->setEnabled(!is_media_panel_visible &&
-									 !mPosGlobal.isExactlyZero() &&
+			mTeleportBtn->setEnabled(!mPosGlobal.isExactlyZero() &&
 									 !LLViewerParcelMgr::getInstance()->inAgentParcel(mPosGlobal));
 		}
 		else if (mPlaceInfoType == LANDMARK_INFO_TYPE || mPlaceInfoType == REMOTE_PLACE_INFO_TYPE)
 		{
 			mTeleportBtn->setEnabled(TRUE);
 		}
-
-		mShowOnMapBtn->setEnabled(!is_media_panel_visible);
 	}
 	else
 	{
@@ -890,6 +882,23 @@ void LLPanelPlaces::updateVerbs()
 	}
 }
 
+LLPanelPlaceInfo* LLPanelPlaces::getCurrentInfoPanel()
+{
+	if (mPlaceInfoType == AGENT_INFO_TYPE ||
+		mPlaceInfoType == REMOTE_PLACE_INFO_TYPE ||
+		mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
+	{
+		return mPlaceProfile;
+	}
+	else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE ||
+			 mPlaceInfoType == LANDMARK_INFO_TYPE)
+	{
+		return mLandmarkInfo;
+	}
+
+	return NULL;
+}
+
 static bool is_agent_in_selected_parcel(LLParcel* parcel)
 {
 	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
index e2d281dd840..39eb5261db4 100644
--- a/indra/newview/llpanelplaces.h
+++ b/indra/newview/llpanelplaces.h
@@ -37,6 +37,10 @@
 class LLInventoryItem;
 class LLFilterEditor;
 class LLLandmark;
+
+class LLPanelLandmarkInfo;
+class LLPanelPlaceProfile;
+
 class LLPanelPickEdit;
 class LLPanelPlaceInfo;
 class LLPanelPlacesTab;
@@ -85,13 +89,16 @@ class LLPanelPlaces : public LLPanel
 	void togglePickPanel(BOOL visible);
 	void togglePlaceInfoPanel(BOOL visible);
 
-	void onAgentParcelChange();
 	void updateVerbs();
 
+	LLPanelPlaceInfo* getCurrentInfoPanel();
+
 	LLFilterEditor*				mFilterEditor;
 	LLPanelPlacesTab*			mActivePanel;
 	LLTabContainer*				mTabContainer;
-	LLPanelPlaceInfo*			mPlaceInfo;
+	LLPanelPlaceProfile*		mPlaceProfile;
+	LLPanelLandmarkInfo*		mLandmarkInfo;
+
 	LLPanelPickEdit*			mPickPanel;
 	LLToggleableMenu*			mPlaceMenu;
 	LLToggleableMenu*			mLandmarkMenu;
diff --git a/indra/newview/llpanelprofileview.h b/indra/newview/llpanelprofileview.h
index b59d1d42f31..45c2fc116e7 100644
--- a/indra/newview/llpanelprofileview.h
+++ b/indra/newview/llpanelprofileview.h
@@ -36,6 +36,8 @@
 #include "llpanel.h"
 #include "llpanelprofile.h"
 #include "llavatarpropertiesprocessor.h"
+#include "llagent.h"
+#include "lltooldraganddrop.h"
 
 class LLPanelProfile;
 class LLPanelProfileTab;
@@ -64,6 +66,18 @@ class LLPanelProfileView : public LLPanelProfile
 
 	/*virtual*/ void togglePanel(LLPanel* panel);
 
+	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
+						   BOOL drop, EDragAndDropType cargo_type,
+						   void *cargo_data, EAcceptance *accept,
+						   std::string& tooltip_msg)
+	{
+		LLToolDragAndDrop::handleGiveDragAndDrop(getAvatarId(), gAgent.getSessionID(), drop,
+				 cargo_type, cargo_data, accept);
+
+		return TRUE;
+	}
+
+
 protected:
 
 	void onBackBtnClick();
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index e97eb1df2b6..9450bee3153 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -32,6 +32,11 @@
 
 #include "llviewerprecompiledheaders.h"
 
+// common includes
+#include "lltrans.h"
+#include "llavataractions.h"
+#include "llagent.h"
+
 #include "llparticipantlist.h"
 #include "llavatarlist.h"
 #include "llspeakers.h"
@@ -39,15 +44,18 @@
 //LLParticipantList retrieves add, clear and remove events and updates view accordingly 
 LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list):
 	mSpeakerMgr(data_source),
-	mAvatarList(avatar_list)
+	mAvatarList(avatar_list),
+	mSpeakerAddListener(*this),
+	mSpeakerRemoveListener(*this),
+	mSpeakerClearListener(*this),
+	mSortOrder(E_SORT_BY_NAME)
 {
-	mSpeakerAddListener = new SpeakerAddListener(mAvatarList);
-	mSpeakerRemoveListener = new SpeakerRemoveListener(mAvatarList);
-	mSpeakerClearListener = new SpeakerClearListener(mAvatarList);
+	mSpeakerMgr->addListener(&mSpeakerAddListener, "add");
+	mSpeakerMgr->addListener(&mSpeakerRemoveListener, "remove");
+	mSpeakerMgr->addListener(&mSpeakerClearListener, "clear");
 
-	mSpeakerMgr->addListener(mSpeakerAddListener, "add");
-	mSpeakerMgr->addListener(mSpeakerRemoveListener, "remove");
-	mSpeakerMgr->addListener(mSpeakerClearListener, "clear");
+	mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
+	mAvatarList->setDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList));
 
 	//Lets fill avatarList with existing speakers
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
@@ -58,24 +66,33 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
 	{
 		group_members.push_back((*it)->mID);
 	}
-	mAvatarList->setDirty();
-	mAvatarList->sortByName();
+	sort();
 }
 
 LLParticipantList::~LLParticipantList()
 {
-	delete mSpeakerAddListener;
-	delete mSpeakerRemoveListener;
-	delete mSpeakerClearListener;
-	mSpeakerAddListener = NULL;
-	mSpeakerRemoveListener = NULL;
-	mSpeakerClearListener = NULL;
 }
 
-//
-// LLParticipantList::SpeakerAddListener
-//
-bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list)
+{
+	LLUUID clicked_id = list->getSelectedUUID();
+
+	if (clicked_id.isNull() || clicked_id == gAgent.getID())
+		return;
+	
+	LLAvatarActions::startIM(clicked_id);
+}
+
+void LLParticipantList::setSortOrder(EParticipantSortOrder order)
+{
+	if ( mSortOrder != order )
+	{
+		mSortOrder = order;
+		sort();
+	}
+}
+
+bool LLParticipantList::onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
 	LLUUID uu_id = event->getValue().asUUID();
@@ -88,15 +105,11 @@ bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::L
 	}
 
 	group_members.push_back(uu_id);
-	mAvatarList->setDirty();
-	mAvatarList->sortByName();
+	sort();
 	return true;
 }
 
-//
-// LLParticipantList::SpeakerRemoveListener
-//
-bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+bool LLParticipantList::onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
 	LLAvatarList::uuid_vector_t::iterator pos = std::find(group_members.begin(), group_members.end(), event->getValue().asUUID());
@@ -108,10 +121,7 @@ bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents
 	return true;
 }
 
-//
-// LLParticipantList::SpeakerClearListener
-//
-bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+bool LLParticipantList::onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
 	group_members.clear();
@@ -119,3 +129,45 @@ bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents:
 	return true;
 }
 
+void LLParticipantList::sort()
+{
+	if ( !mAvatarList )
+		return;
+
+	// Mark AvatarList as dirty one
+	mAvatarList->setDirty();
+
+	// TODO: Implement more sorting orders after specs updating (EM)
+	switch ( mSortOrder ) {
+	case E_SORT_BY_NAME :
+		mAvatarList->sortByName();
+		break;
+	default :
+		llwarns << "Unrecognized sort order for " << mAvatarList->getName() << llendl;
+		return;
+	}
+}
+
+//
+// LLParticipantList::SpeakerAddListener
+//
+bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+	return mParent.onAddItemEvent(event, userdata);
+}
+
+//
+// LLParticipantList::SpeakerRemoveListener
+//
+bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+	return mParent.onRemoveItemEvent(event, userdata);
+}
+
+//
+// LLParticipantList::SpeakerClearListener
+//
+bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+	return mParent.onClearListEvent(event, userdata);
+}
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index 68aae0aee54..04d9e292568 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -38,46 +38,74 @@ class LLAvatarList;
 
 class LLParticipantList
 {
+	LOG_CLASS(LLParticipantList);
 	public:
 		LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list);
 		~LLParticipantList();
 
+		typedef enum e_participant_sort_oder {
+			E_SORT_BY_NAME = 0,
+		} EParticipantSortOrder;
+
+		/**
+		  * Set and sort Avatarlist by given order
+		  */
+		void setSortOrder(EParticipantSortOrder order = E_SORT_BY_NAME);
+
 	protected:
+		/**
+		 * LLSpeakerMgr event handlers
+		 */
+		bool onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+		bool onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+		bool onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+
+		/**
+		 * Sorts the Avatarlist by stored order
+		 */
+		void sort();
 
 		//List of listeners implementing LLOldEvents::LLSimpleListener.
 		//There is no way to handle all the events in one listener as LLSpeakerMgr registers listeners in such a way
 		//that one listener can handle only one type of event
-		class SpeakerAddListener : public LLOldEvents::LLSimpleListener
+		class BaseSpeakerListner : public LLOldEvents::LLSimpleListener
 		{
 		public:
-			SpeakerAddListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {}
+			BaseSpeakerListner(LLParticipantList& parent) : mParent(parent) {}
+		protected:
+			LLParticipantList& mParent;
+		};
 
+		class SpeakerAddListener : public BaseSpeakerListner
+		{
+		public:
+			SpeakerAddListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-			LLAvatarList* mAvatarList;
 		};
 
-		class SpeakerRemoveListener : public LLOldEvents::LLSimpleListener
+		class SpeakerRemoveListener : public BaseSpeakerListner
 		{
 		public:
-			SpeakerRemoveListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {}
-
+			SpeakerRemoveListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-			LLAvatarList* mAvatarList;
 		};
 
-		class SpeakerClearListener : public LLOldEvents::LLSimpleListener
+		class SpeakerClearListener : public BaseSpeakerListner
 		{
 		public:
-			SpeakerClearListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {}
-
+			SpeakerClearListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-			LLAvatarList* mAvatarList;
 		};
+
 	private:
+		void onAvatarListDoubleClicked(LLAvatarList* list);
+
 		LLSpeakerMgr*		mSpeakerMgr;
-		LLAvatarList* 		mAvatarList;
+		LLAvatarList*		mAvatarList;
+
+		SpeakerAddListener		mSpeakerAddListener;
+		SpeakerRemoveListener	mSpeakerRemoveListener;
+		SpeakerClearListener	mSpeakerClearListener;
 
-		SpeakerAddListener* mSpeakerAddListener;
-		SpeakerRemoveListener* mSpeakerRemoveListener;
-		SpeakerClearListener* mSpeakerClearListener;
+		EParticipantSortOrder	mSortOrder;
 };
diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp
index b06e70c00af..34e78b5c469 100644
--- a/indra/newview/llpreview.cpp
+++ b/indra/newview/llpreview.cpp
@@ -45,6 +45,7 @@
 #include "lltooldraganddrop.h"
 #include "llradiogroup.h"
 #include "llassetstorage.h"
+#include "llviewerassettype.h"
 #include "llviewerobject.h"
 #include "llviewerobjectlist.h"
 #include "lldbstrings.h"
@@ -317,7 +318,7 @@ BOOL LLPreview::handleHover(S32 x, S32 y, MASK mask)
 		   && LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y))
 		{
 			EDragAndDropType type;
-			type = LLAssetType::lookupDragAndDropType(item->getType());
+			type = LLViewerAssetType::lookupDragAndDropType(item->getType());
 			LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_LIBRARY;
 			if(!mObjectUUID.isNull())
 			{
@@ -406,7 +407,7 @@ void LLPreview::onDiscardBtn(void* data)
 	*/
 
 	// Move the item to the trash
-	LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if (item->getParentUUID() != trash_id)
 	{
 		LLInventoryModel::update_list_t update;
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index ab2afb80560..7b3a20d1020 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -130,10 +130,10 @@ LLPreviewGesture* LLPreviewGesture::show(const LLUUID& item_id, const LLUUID& ob
 	preview->setObjectID(object_id);
 	
 	// Start speculative download of sounds and animations
-	LLUUID animation_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_ANIMATION);
+	const LLUUID animation_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_ANIMATION);
 	gInventory.startBackgroundFetch(animation_folder_id);
 
-	LLUUID sound_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_SOUND);
+	const LLUUID sound_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SOUND);
 	gInventory.startBackgroundFetch(sound_folder_id);
 
 	// this will call refresh when we have everything.
diff --git a/indra/newview/llresourcedata.h b/indra/newview/llresourcedata.h
index 46b79150bbf..b4b90426895 100644
--- a/indra/newview/llresourcedata.h
+++ b/indra/newview/llresourcedata.h
@@ -39,11 +39,12 @@
 struct LLResourceData
 {
 	LLAssetInfo mAssetInfo;
-	LLAssetType::EType mPreferredLocation;
+	LLFolderType::EType mPreferredLocation;
 	LLInventoryType::EType mInventoryType;
 	U32 mNextOwnerPerm;
 	S32 mExpectedUploadCost;
 	void *mUserData;
+	static const S8 INVALID_LOCATION = -2;
 };
 
 #endif
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index b8ceef08991..26e668adb5a 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -2827,7 +2827,7 @@ bool LLSelectMgr::confirmDelete(const LLSD& notification, const LLSD& response,
 	case 0:
 		{
 			// TODO: Make sure you have delete permissions on all of them.
-			LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+			const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 			// attempt to derez into the trash.
 			LLDeRezInfo* info = new LLDeRezInfo(DRD_TRASH, trash_id);
 			LLSelectMgr::getInstance()->sendListToRegions("DeRezObject",
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 9bdea57491a..b23e7feda23 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -334,7 +334,7 @@ void populate_favorites_bar()
 	S32 count = lib_cats->count();
 	for(S32 i = 0; i < count; ++i)
 	{
-		if(lib_cats->get(i)->getPreferredType() == LLAssetType::AT_LANDMARK)
+		if(lib_cats->get(i)->getPreferredType() == LLFolderType::FT_LANDMARK)
 		{
 			lib_landmarks = lib_cats->get(i)->getUUID();
 			break;
@@ -351,7 +351,7 @@ void populate_favorites_bar()
 	gInventory.getDirectDescendentsOf(lib_landmarks, lm_cats, lm_items);
 	if (!lm_items) return;
 
-	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+	const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 	if (favorites_id.isNull())
 	{
 		llerror("My Inventory is missing My Favorites", 0);
@@ -1673,7 +1673,7 @@ bool idle_startup()
 		gInventory.buildParentChildMap();
 
 		//all categories loaded. lets create "My Favorites" category
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE,true);
+		gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE,true);
 
 		// lets create "Friends" and "Friends/All" in the Inventory "Calling Cards" and fill it with buddies
 		LLFriendCardsManager::instance().syncFriendsFolder();
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index efe88047420..de00ca8420b 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -426,7 +426,7 @@ BOOL LLFloaterTexturePicker::postBuild()
 		mInventoryPanel->getRootFolder()->getFilter()->markDefault();
 
 		// Commented out to stop opening all folders with textures
-		// mInventoryPanel->openDefaultFolderForType(LLAssetType::AT_TEXTURE);
+		// mInventoryPanel->openDefaultFolderForType(LLFolderType::FT_TEXTURE);
 
 		// don't put keyboard focus on selected item, because the selection callback
 		// will assume that this was user input
@@ -1073,7 +1073,7 @@ BOOL LLTextureCtrl::handleMouseDown(S32 x, S32 y, MASK mask)
 	{
 		showPicker(FALSE);
 		//grab textures first...
-		gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLAssetType::AT_TEXTURE));
+		gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE));
 		//...then start full inventory fetch.
 		gInventory.startBackgroundFetch();
 		handled = TRUE;
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index e78737fe0d5..f82573f46cd 100644
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -220,7 +220,6 @@ bool LLToastGroupNotifyPanel::isAttachmentOpenable(LLAssetType::EType type)
 	switch(type)
 	{
 	case LLAssetType::AT_LANDMARK:
-	case LLAssetType::AT_FAVORITE:
 	case LLAssetType::AT_NOTECARD:
 	case LLAssetType::AT_IMAGE_JPEG:
 	case LLAssetType::AT_IMAGE_TGA:
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 9a63f07a7e5..959cb3f1822 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -92,7 +92,7 @@ class LLNoPreferredType : public LLInventoryCollectFunctor
 	virtual bool operator()(LLInventoryCategory* cat,
 							LLInventoryItem* item)
 	{
-		if(cat && (cat->getPreferredType() == LLAssetType::AT_NONE))
+		if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE))
 		{
 			return true;
 		}
@@ -109,7 +109,7 @@ class LLNoPreferredTypeOrItem : public LLInventoryCollectFunctor
 							LLInventoryItem* item)
 	{
 		if(item) return true;
-		if(cat && (cat->getPreferredType() == LLAssetType::AT_NONE))
+		if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE))
 		{
 			return true;
 		}
@@ -1317,8 +1317,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
 
 	// Check if it's in the trash.
 	bool is_in_trash = false;
-	LLUUID trash_id;
-	trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
 	{
 		is_in_trash = true;
@@ -2088,7 +2087,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv(
 	if(!item || !item->isComplete()) return ACCEPT_NO;
 
 	// must not be in the trash
-	LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH));
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) )
 	{
 		return ACCEPT_NO;
@@ -2170,8 +2169,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand(
 	}
 
 	// Check if it's in the trash.
-	LLUUID trash_id;
-	trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
 	{
 		accept = ACCEPT_YES_SINGLE;
@@ -2249,8 +2247,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject(
 	}
 
 	// Check if it's in the trash.
-	LLUUID trash_id;
-	trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
 	{
 		accept = ACCEPT_YES_SINGLE;
@@ -2388,7 +2385,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearItem(
 	if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY)
 	{
 		// it's in the agent inventory
-		LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) )
 		{
 			return ACCEPT_NO;
@@ -2443,7 +2440,7 @@ EAcceptance LLToolDragAndDrop::dad3dActivateGesture(
 	if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY)
 	{
 		// it's in the agent inventory
-		LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) )
 		{
 			return ACCEPT_NO;
@@ -2502,7 +2499,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory(
 
 	if(mSource == SOURCE_AGENT)
 	{
-		LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH));
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if( gInventory.isObjectDescendentOf( category->getUUID(), trash_id ) )
 		{
 			return ACCEPT_NO;
diff --git a/indra/newview/llviewerassettype.cpp b/indra/newview/llviewerassettype.cpp
new file mode 100644
index 00000000000..c974171c2c2
--- /dev/null
+++ b/indra/newview/llviewerassettype.cpp
@@ -0,0 +1,114 @@
+/** 
+ * @file llassettype.cpp
+ * @brief Implementatino of LLViewerAssetType functionality.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llviewerassettype.h"
+#include "lldictionary.h"
+#include "llmemory.h"
+#include "llsingleton.h"
+
+static const std::string empty_string;
+
+struct ViewerAssetEntry : public LLDictionaryEntry
+{
+	ViewerAssetEntry(EDragAndDropType dad_type // drag and drop type
+		)
+		:
+		LLDictionaryEntry(empty_string), // no reverse lookup needed for now, so just leave this blank
+		mDadType(dad_type)
+	{
+	}
+	EDragAndDropType mDadType;
+};
+
+class LLViewerAssetDictionary : public LLSingleton<LLViewerAssetDictionary>,
+						  public LLDictionary<LLViewerAssetType::EType, ViewerAssetEntry>
+{
+public:
+	LLViewerAssetDictionary();
+};
+
+LLViewerAssetDictionary::LLViewerAssetDictionary()
+{
+	//       												      	   	   	 DRAG&DROP TYPE		    
+	//   	   	   	   	   	   	   	   	   	   	   	   	   	   	   	   	   	|--------------------|
+	addEntry(LLViewerAssetType::AT_TEXTURE, 			new ViewerAssetEntry(DAD_TEXTURE));
+	addEntry(LLViewerAssetType::AT_SOUND, 				new ViewerAssetEntry(DAD_SOUND));
+	addEntry(LLViewerAssetType::AT_CALLINGCARD, 		new ViewerAssetEntry(DAD_CALLINGCARD));
+	addEntry(LLViewerAssetType::AT_LANDMARK, 			new ViewerAssetEntry(DAD_LANDMARK));
+	addEntry(LLViewerAssetType::AT_SCRIPT, 				new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_CLOTHING, 			new ViewerAssetEntry(DAD_CLOTHING));
+	addEntry(LLViewerAssetType::AT_OBJECT, 				new ViewerAssetEntry(DAD_OBJECT));
+	addEntry(LLViewerAssetType::AT_NOTECARD, 			new ViewerAssetEntry(DAD_NOTECARD));
+	addEntry(LLViewerAssetType::AT_CATEGORY, 			new ViewerAssetEntry(DAD_CATEGORY));
+	addEntry(LLViewerAssetType::AT_ROOT_CATEGORY, 		new ViewerAssetEntry(DAD_ROOT_CATEGORY));
+	addEntry(LLViewerAssetType::AT_LSL_TEXT, 			new ViewerAssetEntry(DAD_SCRIPT));
+	addEntry(LLViewerAssetType::AT_LSL_BYTECODE, 		new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_TEXTURE_TGA, 		new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_BODYPART, 			new ViewerAssetEntry(DAD_BODYPART));
+	addEntry(LLViewerAssetType::AT_SOUND_WAV, 			new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_IMAGE_TGA, 			new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_IMAGE_JPEG, 			new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_ANIMATION, 			new ViewerAssetEntry(DAD_ANIMATION));
+	addEntry(LLViewerAssetType::AT_GESTURE, 			new ViewerAssetEntry(DAD_GESTURE));
+	addEntry(LLViewerAssetType::AT_SIMSTATE, 			new ViewerAssetEntry(DAD_NONE));
+
+	addEntry(LLViewerAssetType::AT_LINK, 				new ViewerAssetEntry(DAD_LINK));
+	addEntry(LLViewerAssetType::AT_LINK_FOLDER, 		new ViewerAssetEntry(DAD_LINK));
+
+	addEntry(LLViewerAssetType::AT_NONE, 				new ViewerAssetEntry(DAD_NONE));
+};
+
+EDragAndDropType LLViewerAssetType::lookupDragAndDropType(EType asset_type)
+{
+	const LLViewerAssetDictionary *dict = LLViewerAssetDictionary::getInstance();
+	const ViewerAssetEntry *entry = dict->lookup(asset_type);
+	if (entry)
+		return entry->mDadType;
+	else
+		return DAD_NONE;
+}
+
+// Generate a good default description
+void LLViewerAssetType::generateDescriptionFor(LLViewerAssetType::EType asset_type,
+											   std::string& description)
+{
+	const S32 BUF_SIZE = 30;
+	char time_str[BUF_SIZE];	/* Flawfinder: ignore */
+	time_t now;
+	time(&now);
+	memset(time_str, '\0', BUF_SIZE);
+	strftime(time_str, BUF_SIZE - 1, "%Y-%m-%d %H:%M:%S ", localtime(&now));
+	description.assign(time_str);
+	description.append(LLAssetType::lookupHumanReadable(asset_type));
+}
diff --git a/indra/newview/llviewerassettype.h b/indra/newview/llviewerassettype.h
new file mode 100644
index 00000000000..01158885cec
--- /dev/null
+++ b/indra/newview/llviewerassettype.h
@@ -0,0 +1,54 @@
+/** 
+ * @file llviewerassettype.h
+ * @brief Declaration of LLViewerViewerAssetType.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLVIEWERASSETTYPE_H
+#define LL_LLVIEWERASSETTYPE_H
+
+#include <string>
+#include "llassettype.h"
+
+// This class is similar to llassettype, but contains methods
+// only used by the viewer.
+class LLViewerAssetType : public LLAssetType
+{
+public:
+	// Generate a good default description. You may want to add a verb
+	// or agent name after this depending on your application.
+	static void 				generateDescriptionFor(LLViewerAssetType::EType asset_type,
+													   std::string& description);
+	static EDragAndDropType   	lookupDragAndDropType(EType asset_type);
+protected:
+	LLViewerAssetType() {}
+	~LLViewerAssetType() {}
+};
+
+#endif // LL_LLVIEWERASSETTYPE_H
diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp
new file mode 100644
index 00000000000..384538364f0
--- /dev/null
+++ b/indra/newview/llviewerfoldertype.cpp
@@ -0,0 +1,263 @@
+/** 
+ * @file llfoldertype.cpp
+ * @brief Implementation of LLViewerFolderType functionality.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llviewerfoldertype.h"
+#include "lldictionary.h"
+#include "llmemory.h"
+#include "llvisualparam.h"
+
+static const std::string empty_string;
+
+struct ViewerFolderEntry : public LLDictionaryEntry
+{
+	// Constructor for non-ensembles
+	ViewerFolderEntry(const std::string &new_category_name, // default name when creating a new category of this type
+					  const std::string &icon_name 			// name of the folder icon
+		) 
+		:
+		LLDictionaryEntry(empty_string), // no reverse lookup needed on non-ensembles, so just leave this blank
+		mIconName(icon_name),
+		mNewCategoryName(new_category_name)
+	{
+		mAllowedNames.clear();
+	}
+
+	// Constructor for ensembles
+	ViewerFolderEntry(const std::string &xui_name, 			// name of the xui menu item
+					  const std::string &new_category_name, // default name when creating a new category of this type
+					  const std::string &icon_name, 		// name of the folder icon
+					  const std::string allowed_names 		// allowed item typenames for this folder type
+		) 
+		:
+		LLDictionaryEntry(xui_name),
+		mIconName(icon_name),
+		mNewCategoryName(new_category_name)
+	{
+		const std::string delims (",");
+		LLStringUtilBase<char>::getTokens(allowed_names, mAllowedNames, delims);
+	}
+
+	bool getIsAllowedName(const std::string &name) const
+	{
+		if (mAllowedNames.empty())
+			return false;
+		for (name_vec_t::const_iterator iter = mAllowedNames.begin();
+			 iter != mAllowedNames.end();
+			 iter++)
+		{
+			if (name == (*iter))
+				return true;
+		}
+		return false;
+	}
+	const std::string mIconName;
+	const std::string mNewCategoryName;
+	typedef std::vector<std::string> name_vec_t;
+	name_vec_t mAllowedNames;
+};
+
+class LLViewerFolderDictionary : public LLSingleton<LLViewerFolderDictionary>,
+								 public LLDictionary<LLFolderType::EType, ViewerFolderEntry>
+{
+public:
+	LLViewerFolderDictionary();
+protected:
+	bool initEnsemblesFromFile(); // Reads in ensemble information from foldertypes.xml
+};
+
+LLViewerFolderDictionary::LLViewerFolderDictionary()
+{
+	initEnsemblesFromFile();
+
+	//       													    	  NEW CATEGORY NAME         FOLDER ICON NAME
+	//      												  		     |-------------------------|---------------------------|
+	addEntry(LLFolderType::FT_TEXTURE, 				new ViewerFolderEntry("Textures",				"inv_folder_texture.tga"));
+	addEntry(LLFolderType::FT_SOUND, 				new ViewerFolderEntry("Sounds",					"inv_folder_sound.tga"));
+	addEntry(LLFolderType::FT_CALLINGCARD, 			new ViewerFolderEntry("Calling Cards",			"inv_folder_callingcard.tga"));
+	addEntry(LLFolderType::FT_LANDMARK, 			new ViewerFolderEntry("Landmarks",				"inv_folder_landmark.tga"));
+	addEntry(LLFolderType::FT_CLOTHING, 			new ViewerFolderEntry("Clothing",				"inv_folder_clothing.tga"));
+	addEntry(LLFolderType::FT_OBJECT, 				new ViewerFolderEntry("Objects",				"inv_folder_object.tga"));
+	addEntry(LLFolderType::FT_NOTECARD, 			new ViewerFolderEntry("Notecards",				"inv_folder_notecard.tga"));
+	addEntry(LLFolderType::FT_CATEGORY, 			new ViewerFolderEntry("New Folder",				"inv_folder_plain_closed.tga"));
+	addEntry(LLFolderType::FT_ROOT_CATEGORY, 		new ViewerFolderEntry("Inventory",				""));
+	addEntry(LLFolderType::FT_LSL_TEXT, 			new ViewerFolderEntry("Scripts",				"inv_folder_script.tga"));
+	addEntry(LLFolderType::FT_BODYPART, 			new ViewerFolderEntry("Body Parts",				"inv_folder_bodypart.tga"));
+	addEntry(LLFolderType::FT_TRASH, 				new ViewerFolderEntry("Trash",					"inv_folder_trash.tga"));
+	addEntry(LLFolderType::FT_SNAPSHOT_CATEGORY, 	new ViewerFolderEntry("Photo Album",			"inv_folder_snapshot.tga"));
+	addEntry(LLFolderType::FT_LOST_AND_FOUND, 		new ViewerFolderEntry("Lost And Found",	   		"inv_folder_lostandfound.tga"));
+	addEntry(LLFolderType::FT_ANIMATION, 			new ViewerFolderEntry("Animations",				"inv_folder_animation.tga"));
+	addEntry(LLFolderType::FT_GESTURE, 				new ViewerFolderEntry("Gestures",				"inv_folder_gesture.tga"));
+	addEntry(LLFolderType::FT_FAVORITE, 			new ViewerFolderEntry("Favorite",				"inv_folder_plain_closed.tga"));
+
+	addEntry(LLFolderType::FT_CURRENT_OUTFIT, 		new ViewerFolderEntry("Current Outfit",			"inv_folder_current_outfit.tga"));
+	addEntry(LLFolderType::FT_OUTFIT, 				new ViewerFolderEntry("New Outfit",				"inv_folder_outfit.tga"));
+	addEntry(LLFolderType::FT_MY_OUTFITS, 			new ViewerFolderEntry("My Outfits",				"inv_folder_my_outfits.tga"));
+	addEntry(LLFolderType::FT_INBOX, 				new ViewerFolderEntry("Inbox",					"inv_folder_inbox.tga"));
+		 
+	addEntry(LLFolderType::FT_NONE, 				new ViewerFolderEntry("New Folder",				"inv_folder_plain_closed.tga"));
+}
+
+bool LLViewerFolderDictionary::initEnsemblesFromFile()
+{
+	std::string xml_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"foldertypes.xml");
+	LLXmlTree folder_def;
+	if (!folder_def.parseFile(xml_filename))
+	{
+		llerrs << "Failed to parse folders file " << xml_filename << llendl;
+		return false;
+	}
+
+	LLXmlTreeNode* rootp = folder_def.getRoot();
+	for (LLXmlTreeNode* ensemble = rootp->getFirstChild();
+		 ensemble;
+		 ensemble = rootp->getNextChild())
+	{
+		if (!ensemble->hasName("ensemble"))
+		{
+			llwarns << "Invalid ensemble definition node " << ensemble->getName() << llendl;
+			continue;
+		}
+
+		S32 ensemble_type;
+		static LLStdStringHandle ensemble_num_string = LLXmlTree::addAttributeString("foldertype_num");
+		if (!ensemble->getFastAttributeS32(ensemble_num_string, ensemble_type))
+		{
+			llwarns << "No ensemble type defined" << llendl;
+			continue;
+		}
+
+
+		if (ensemble_type < S32(LLFolderType::FT_ENSEMBLE_START) || ensemble_type > S32(LLFolderType::FT_ENSEMBLE_END))
+		{
+			llwarns << "Exceeded maximum ensemble index" << LLFolderType::FT_ENSEMBLE_END << llendl;
+			break;
+		}
+
+		std::string xui_name;
+		static LLStdStringHandle xui_name_string = LLXmlTree::addAttributeString("xui_name");
+		if (!ensemble->getFastAttributeString(xui_name_string, xui_name))
+		{
+			llwarns << "No xui name defined" << llendl;
+			continue;
+		}
+
+		std::string icon_name;
+		static LLStdStringHandle icon_name_string = LLXmlTree::addAttributeString("icon_name");
+		if (!ensemble->getFastAttributeString(icon_name_string, icon_name))
+		{
+			llwarns << "No ensemble icon name defined" << llendl;
+			continue;
+		}
+
+		std::string allowed_names;
+		static LLStdStringHandle allowed_names_string = LLXmlTree::addAttributeString("allowed");
+		if (!ensemble->getFastAttributeString(allowed_names_string, allowed_names))
+		{
+		}
+
+		// Add the entry and increment the asset number.
+		const static std::string new_ensemble_name = "New Ensemble";
+		addEntry(LLFolderType::EType(ensemble_type), new ViewerFolderEntry(xui_name, new_ensemble_name, icon_name, allowed_names));
+	}
+
+	return true;
+}
+
+
+const std::string &LLViewerFolderType::lookupXUIName(LLFolderType::EType folder_type)
+{
+	const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mName;
+	}
+	return badLookup();
+}
+
+LLFolderType::EType LLViewerFolderType::lookupTypeFromXUIName(const std::string &name)
+{
+	return LLViewerFolderDictionary::getInstance()->lookup(name);
+}
+
+const std::string &LLViewerFolderType::lookupIconName(LLFolderType::EType folder_type)
+{
+	const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mIconName;
+	}
+	return badLookup();
+}
+
+const std::string &LLViewerFolderType::lookupNewCategoryName(LLFolderType::EType folder_type)
+{
+	const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mNewCategoryName;
+	}
+	return badLookup();
+}
+
+LLFolderType::EType LLViewerFolderType::lookupTypeFromNewCategoryName(const std::string& name)
+{
+	for (LLViewerFolderDictionary::const_iterator iter = LLViewerFolderDictionary::getInstance()->begin();
+		 iter != LLViewerFolderDictionary::getInstance()->end();
+		 iter++)
+	{
+		const ViewerFolderEntry *entry = iter->second;
+		if (entry->mNewCategoryName == name)
+		{
+			return iter->first;
+		}
+	}
+	return FT_NONE;
+}
+
+
+U64 LLViewerFolderType::lookupValidFolderTypes(const std::string& item_name)
+{
+	U64 matching_folders = 0;
+	for (LLViewerFolderDictionary::const_iterator iter = LLViewerFolderDictionary::getInstance()->begin();
+		 iter != LLViewerFolderDictionary::getInstance()->end();
+		 iter++)
+	{
+		const ViewerFolderEntry *entry = iter->second;
+		if (entry->getIsAllowedName(item_name))
+		{
+			matching_folders |= 1LL << iter->first;
+		}
+	}
+	return matching_folders;
+}
diff --git a/indra/newview/llviewerfoldertype.h b/indra/newview/llviewerfoldertype.h
new file mode 100644
index 00000000000..a6aea62b2a3
--- /dev/null
+++ b/indra/newview/llviewerfoldertype.h
@@ -0,0 +1,57 @@
+/** 
+ * @file llviewerfoldertype.h
+ * @brief Declaration of LLAssetType.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLVIEWERFOLDERTYPE_H
+#define LL_LLVIEWERFOLDERTYPE_H
+
+#include <string>
+#include "llfoldertype.h"
+
+// This class is similar to llfoldertype, but contains methods
+// only used by the viewer.  This also handles ensembles.
+class LLViewerFolderType : public LLFolderType
+{
+public:
+	static const std::string&   lookupXUIName(EType folder_type); // name used by the UI
+	static LLFolderType::EType 	lookupTypeFromXUIName(const std::string& name);
+
+	static const std::string&   lookupIconName(EType asset_type); // folder icon name
+	static const std::string&	lookupNewCategoryName(EType folder_type); // default name when creating new category
+	static LLFolderType::EType	lookupTypeFromNewCategoryName(const std::string& name); // default name when creating new category
+
+	static U64					lookupValidFolderTypes(const std::string& item_name); // which folders allow an item of this type?
+protected:
+	LLViewerFolderType() {}
+	~LLViewerFolderType() {}
+};
+
+#endif // LL_LLVIEWERFOLDERTYPE_H
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 470739baa90..1d62ead8437 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -37,7 +37,7 @@
 #include "indra_constants.h"
 
 #include "llagent.h"
-#include "llfoldertype.h"
+#include "llviewerfoldertype.h"
 #include "llfolderview.h"
 #include "llviewercontrol.h"
 #include "llconsole.h"
@@ -48,6 +48,7 @@
 #include "llinventorybridge.h"
 #include "llfloaterinventory.h"
 
+#include "llviewerassettype.h"
 #include "llviewerregion.h"
 #include "llviewerobjectlist.h"
 #include "llpreviewgesture.h"
@@ -359,7 +360,7 @@ void LLViewerInventoryItem::updateParentOnServer(BOOL restamp) const
 
 LLViewerInventoryCategory::LLViewerInventoryCategory(const LLUUID& uuid,
 													 const LLUUID& parent_uuid,
-													 LLAssetType::EType pref,
+													 LLFolderType::EType pref,
 													 const std::string& name,
 													 const LLUUID& owner_id) :
 	LLInventoryCategory(uuid, parent_uuid, pref, name),
@@ -416,7 +417,7 @@ void LLViewerInventoryCategory::updateServer(BOOL is_new) const
 {
 	// communicate that change with the server.
 
-	if (LLAssetType::lookupIsProtectedCategoryType(mPreferredType))
+	if (LLFolderType::lookupIsProtectedType(mPreferredType))
 	{
 		LLNotifications::instance().add("CannotModifyProtectedCategories");
 		return;
@@ -440,7 +441,7 @@ void LLViewerInventoryCategory::removeFromServer( void )
 	llinfos << "Removing inventory category " << mUUID << " from server."
 			<< llendl;
 	// communicate that change with the server.
-	if(LLAssetType::lookupIsProtectedCategoryType(mPreferredType))
+	if(LLFolderType::lookupIsProtectedType(mPreferredType))
 	{
 		LLNotifications::instance().add("CannotRemoveProtectedCategories");
 		return;
@@ -543,7 +544,7 @@ bool LLViewerInventoryCategory::importFileLocal(LLFILE* fp)
 		}
 		else if(0 == strcmp("pref_type", keyword))
 		{
-			mPreferredType = LLAssetType::lookup(valuestr);
+			mPreferredType = LLFolderType::lookup(valuestr);
 		}
 		else if(0 == strcmp("name", keyword))
 		{
@@ -581,7 +582,7 @@ bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const
 	mParentUUID.toString(uuid_str);
 	fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str());
 	fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
-	fprintf(fp, "\t\tpref_type\t%s\n", LLAssetType::lookup(mPreferredType));
+	fprintf(fp, "\t\tpref_type\t%s\n", LLFolderType::lookup(mPreferredType).c_str());
 	fprintf(fp, "\t\tname\t%s|\n", mName.c_str());
 	mOwnerID.toString(uuid_str);
 	fprintf(fp, "\t\towner_id\t%s\n", uuid_str.c_str());
@@ -592,8 +593,8 @@ bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const
 
 void LLViewerInventoryCategory::determineFolderType()
 {
-	LLAssetType::EType original_type = getPreferredType();
-	if (LLAssetType::lookupIsProtectedCategoryType(original_type))
+	LLFolderType::EType original_type = getPreferredType();
+	if (LLFolderType::lookupIsProtectedType(original_type))
 		return;
 
 	U64 folder_valid = 0;
@@ -616,28 +617,28 @@ void LLViewerInventoryCategory::determineFolderType()
 			{
 				const EWearableType wearable_type = item->getWearableType();
 				const std::string& wearable_name = LLWearableDictionary::getTypeName(wearable_type);
-				U64 valid_folder_types = LLFolderType::lookupValidFolderTypes(wearable_name);
+				U64 valid_folder_types = LLViewerFolderType::lookupValidFolderTypes(wearable_name);
 				folder_valid |= valid_folder_types;
 				folder_invalid |= ~valid_folder_types;
 			}
 		}
-		for (U8 i = LLAssetType::AT_FOLDER_ENSEMBLE_START; i <= LLAssetType::AT_FOLDER_ENSEMBLE_END; i++)
+		for (U8 i = LLFolderType::FT_ENSEMBLE_START; i <= LLFolderType::FT_ENSEMBLE_END; i++)
 		{
 			if ((folder_valid & (1LL << i)) &&
 				!(folder_invalid & (1LL << i)))
 			{
-				changeType((LLAssetType::EType)i);
+				changeType((LLFolderType::EType)i);
 				return;
 			}
 		}
 	}
-	if (LLAssetType::lookupIsEnsembleCategoryType(original_type))
+	if (LLFolderType::lookupIsEnsembleType(original_type))
 	{
-		changeType(LLAssetType::AT_NONE);
+		changeType(LLFolderType::FT_NONE);
 	}
 }
 
-void LLViewerInventoryCategory::changeType(LLAssetType::EType new_folder_type)
+void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type)
 {
 	const LLUUID &folder_id = getUUID();
 	const LLUUID &parent_id = getParentUUID();
@@ -948,7 +949,7 @@ void copy_inventory_from_notecard(const LLUUID& object_id, const LLUUID& notecar
     body["notecard-id"] = notecard_inv_id;
     body["object-id"] = object_id;
     body["item-id"] = src->getUUID();
-    body["folder-id"] = gInventory.findCategoryUUIDForType(src->getType());
+	body["folder-id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(src->getType()));
     body["callback-id"] = (LLSD::Integer)callback_id;
 
     request["message"] = "CopyInventoryFromNotecard";
@@ -964,7 +965,7 @@ void create_new_item(const std::string& name,
 				   U32 next_owner_perm)
 {
 	std::string desc;
-	LLAssetType::generateDescriptionFor(asset_type, desc);
+	LLViewerAssetType::generateDescriptionFor(asset_type, desc);
 	next_owner_perm = (next_owner_perm) ? next_owner_perm : PERM_MOVE | PERM_TRANSFER;
 
 	
@@ -989,19 +990,14 @@ const std::string NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not
 const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably not)
 const std::string NEW_GESTURE_NAME = "New Gesture"; // *TODO:Translate? (probably not)
 
+// ! REFACTOR ! Really need to refactor this so that it's not a bunch of if-then statements...
 void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, const LLSD& userdata, const LLUUID& default_parent_uuid)
 {
-	std::string type = userdata.asString();
+	std::string type_name = userdata.asString();
 	
-	if (("category" == type) || ("current" == type) || ("outfit" == type) || ("my_otfts" == type) )
+	if (("category" == type_name) || ("current" == type_name) || ("outfit" == type_name) || ("my_otfts" == type_name))
 	{
-		LLAssetType::EType a_type = LLAssetType::AT_NONE;
-		if ("current" == type)
-			a_type = LLAssetType::AT_CURRENT_OUTFIT;
-		if ("outfit" == type)
-			a_type = LLAssetType::AT_OUTFIT;
-		if ("my_otfts" == type)
-			a_type = LLAssetType::AT_MY_OUTFITS;
+		LLFolderType::EType preferred_type = LLFolderType::lookup(type_name);
 
 		LLUUID parent_id;
 		if (bridge)
@@ -1017,100 +1013,100 @@ void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, co
 			parent_id = gInventory.getRootFolderID();
 		}
 
-		LLUUID category = gInventory.createNewCategory(parent_id, a_type, LLStringUtil::null);
+		LLUUID category = gInventory.createNewCategory(parent_id, preferred_type, LLStringUtil::null);
 		gInventory.notifyObservers();
 		folder->setSelectionByID(category, TRUE);
 	}
-	else if ("lsl" == type)
+	else if ("lsl" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_LSL_TEXT);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_LSL_TEXT);
 		create_new_item(NEW_LSL_NAME,
 					  parent_id,
 					  LLAssetType::AT_LSL_TEXT,
 					  LLInventoryType::IT_LSL,
 					  PERM_MOVE | PERM_TRANSFER);
 	}
-	else if ("notecard" == type)
+	else if ("notecard" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_NOTECARD);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_NOTECARD);
 		create_new_item(NEW_NOTECARD_NAME,
 					  parent_id,
 					  LLAssetType::AT_NOTECARD,
 					  LLInventoryType::IT_NOTECARD,
 					  PERM_ALL);
 	}
-	else if ("gesture" == type)
+	else if ("gesture" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_GESTURE);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE);
 		create_new_item(NEW_GESTURE_NAME,
 					  parent_id,
 					  LLAssetType::AT_GESTURE,
 					  LLInventoryType::IT_GESTURE,
 					  PERM_ALL);
 	}
-	else if ("shirt" == type)
+	else if ("shirt" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_SHIRT);
 	}
-	else if ("pants" == type)
+	else if ("pants" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_PANTS);
 	}
-	else if ("shoes" == type)
+	else if ("shoes" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_SHOES);
 	}
-	else if ("socks" == type)
+	else if ("socks" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_SOCKS);
 	}
-	else if ("jacket" == type)
+	else if ("jacket" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_JACKET);
 	}
-	else if ("skirt" == type)
+	else if ("skirt" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_SKIRT);
 	}
-	else if ("gloves" == type)
+	else if ("gloves" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_GLOVES);
 	}
-	else if ("undershirt" == type)
+	else if ("undershirt" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_UNDERSHIRT);
 	}
-	else if ("underpants" == type)
+	else if ("underpants" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_UNDERPANTS);
 	}
-	else if ("shape" == type)
+	else if ("shape" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART);
 		LLFolderBridge::createWearable(parent_id, WT_SHAPE);
 	}
-	else if ("skin" == type)
+	else if ("skin" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART);
 		LLFolderBridge::createWearable(parent_id, WT_SKIN);
 	}
-	else if ("hair" == type)
+	else if ("hair" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART);
 		LLFolderBridge::createWearable(parent_id, WT_HAIR);
 	}
-	else if ("eyes" == type)
+	else if ("eyes" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART);
 		LLFolderBridge::createWearable(parent_id, WT_EYES);
 	}
 	
diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h
index d523bf28594..529425aa258 100644
--- a/indra/newview/llviewerinventory.h
+++ b/indra/newview/llviewerinventory.h
@@ -185,7 +185,7 @@ class LLViewerInventoryCategory  : public LLInventoryCategory
 	
 public:
 	LLViewerInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid,
-							  LLAssetType::EType preferred_type,
+							  LLFolderType::EType preferred_type,
 							  const std::string& name,
 							  const LLUUID& owner_id);
 	LLViewerInventoryCategory(const LLUUID& owner_id);
@@ -221,7 +221,7 @@ class LLViewerInventoryCategory  : public LLInventoryCategory
 	bool exportFileLocal(LLFILE* fp) const;
 	bool importFileLocal(LLFILE* fp);
 	void determineFolderType();
-	void changeType(LLAssetType::EType new_folder_type);
+	void changeType(LLFolderType::EType new_folder_type);
 protected:
 	LLUUID mOwnerID;
 	S32 mVersion;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 23ceb1e72d9..9a98264847d 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -4176,12 +4176,10 @@ void handle_take_copy()
 {
 	if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return;
 
-	LLUUID category_id =
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+	const LLUUID category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
 	derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id);
 }
 
-
 // You can return an object to its owner if it is on your land.
 class LLObjectReturn : public view_listener_t
 {
@@ -4262,7 +4260,7 @@ class LLObjectEnableReturn : public view_listener_t
 void force_take_copy(void*)
 {
 	if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return;
-	const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+	const LLUUID category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
 	derez_objects(DRD_FORCE_TO_GOD_INVENTORY, category_id);
 }
 
@@ -4323,8 +4321,7 @@ void handle_take()
 		if(category_id.notNull())
 		{
 		        // check trash
-			LLUUID trash;
-			trash = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+			const LLUUID trash = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 			if(category_id == trash || gInventory.isObjectDescendentOf(category_id, trash))
 			{
 				category_id.setNull();
@@ -4340,7 +4337,7 @@ void handle_take()
 	}
 	if(category_id.isNull())
 	{
-		category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+		category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
 	}
 	LLSD payload;
 	payload["folder_id"] = category_id;
@@ -6919,7 +6916,7 @@ void handle_grab_texture(void* data)
 		LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl;
 		LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE;
 		LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE;
-		LLUUID folder_id(gInventory.findCategoryUUIDForType(asset_type));
+		const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(asset_type));
 		if(folder_id.notNull())
 		{
 			std::string name = "Unknown";
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index d3a9e1cef8a..d17c7e486fe 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -319,7 +319,7 @@ class LLFileUploadBulk : public view_listener_t
 			LLAssetStorage::LLStoreAssetCallback callback = NULL;
 			S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
 			void *userdata = NULL;
-			upload_new_resource(filename, asset_name, asset_name, 0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE,
+			upload_new_resource(filename, asset_name, asset_name, 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
 				LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
 					    display_name,
 					    callback, expected_upload_cost, userdata);
@@ -493,7 +493,7 @@ void handle_compress_image(void*)
 
 void upload_new_resource(const std::string& src_filename, std::string name,
 			 std::string desc, S32 compression_info,
-			 LLAssetType::EType destination_folder_type,
+			 LLFolderType::EType destination_folder_type,
 			 LLInventoryType::EType inv_type,
 			 U32 next_owner_perms,
 			 U32 group_perms,
@@ -810,7 +810,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt
 
 	if(result >= 0)
 	{
-		LLAssetType::EType dest_loc = (data->mPreferredLocation == LLAssetType::AT_NONE) ? data->mAssetInfo.mType : data->mPreferredLocation;
+		LLFolderType::EType dest_loc = (data->mPreferredLocation == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(data->mAssetInfo.mType) : data->mPreferredLocation;
 
 		if (LLAssetType::AT_SOUND == data->mAssetInfo.mType ||
 			LLAssetType::AT_TEXTURE == data->mAssetInfo.mType ||
@@ -856,7 +856,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt
 		{
 			// Actually add the upload to inventory
 			llinfos << "Adding " << uuid << " to inventory." << llendl;
-			LLUUID folder_id(gInventory.findCategoryUUIDForType(dest_loc));
+			const LLUUID folder_id = gInventory.findCategoryUUIDForType(dest_loc);
 			if(folder_id.notNull())
 			{
 				U32 next_owner_perms = data->mNextOwnerPerm;
@@ -903,7 +903,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt
 		LLAssetStorage::LLStoreAssetCallback callback = NULL;
 		void *userdata = NULL;
 		upload_new_resource(next_file, asset_name, asset_name,	// file
-				    0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE,
+				    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
 				    PERM_NONE, PERM_NONE, PERM_NONE,
 				    display_name,
 				    callback,
@@ -915,7 +915,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt
 void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_type,
 			 std::string name,
 			 std::string desc, S32 compression_info,
-			 LLAssetType::EType destination_folder_type,
+			 LLFolderType::EType destination_folder_type,
 			 LLInventoryType::EType inv_type,
 			 U32 next_owner_perms,
 			 U32 group_perms,
@@ -973,14 +973,14 @@ void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ty
 	llinfos << "Name: " << name << llendl;
 	llinfos << "Desc: " << desc << llendl;
 	llinfos << "Expected Upload Cost: " << expected_upload_cost << llendl;
-	lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLAssetType::AT_NONE) ? asset_type : destination_folder_type) << llendl;
+	lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type) << llendl;
 	lldebugs << "Asset Type: " << LLAssetType::lookup(asset_type) << llendl;
 	std::string url = gAgent.getRegion()->getCapability("NewFileAgentInventory");
 	if (!url.empty())
 	{
 		llinfos << "New Agent Inventory via capability" << llendl;
 		LLSD body;
-		body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLAssetType::AT_NONE) ? asset_type : destination_folder_type);
+		body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type);
 		body["asset_type"] = LLAssetType::lookup(asset_type);
 		body["inventory_type"] = LLInventoryType::lookup(inv_type);
 		body["name"] = name;
diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h
index bf21292082b..da78537a295 100644
--- a/indra/newview/llviewermenufile.h
+++ b/indra/newview/llviewermenufile.h
@@ -33,7 +33,7 @@
 #ifndef LLVIEWERMENUFILE_H
 #define LLVIEWERMENUFILE_H
 
-#include "llassettype.h"
+#include "llfoldertype.h"
 #include "llinventorytype.h"
 
 class LLTransactionID;
@@ -45,7 +45,7 @@ void upload_new_resource(const std::string& src_filename,
 			 std::string name,
 			 std::string desc, 
 			 S32 compression_info,
-			 LLAssetType::EType destination_folder_type,
+			 LLFolderType::EType destination_folder_type,
 			 LLInventoryType::EType inv_type,
 			 U32 next_owner_perms,
 			 U32 group_perms,
@@ -60,7 +60,7 @@ void upload_new_resource(const LLTransactionID &tid,
 			 std::string name,
 			 std::string desc, 
 			 S32 compression_info,
-			 LLAssetType::EType destination_folder_type,
+			 LLFolderType::EType destination_folder_type,
 			 LLInventoryType::EType inv_type,
 			 U32 next_owner_perms,
 			 U32 group_perms,
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index ff1c7b526f6..d8e6c52c8cc 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -140,7 +140,7 @@
 #include "llgroupactions.h"
 #include "llagentui.h"
 #include "llpanelblockedlist.h"
-#include "llpanelplaceinfo.h"
+#include "llpanelplaceprofile.h"
 
 #include <boost/tokenizer.hpp>
 #include <boost/algorithm/string/split.hpp>
@@ -209,7 +209,6 @@ const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] =
 bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotification::getSelectedOption(notification, response);
-	LLUUID fid;
 	LLMessageSystem* msg = gMessageSystem;
 	const LLSD& payload = notification["payload"];
 
@@ -219,10 +218,11 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
 	switch(option)
 	{
 	case 0:
+	{
 		// accept
 		LLAvatarTracker::formFriendship(payload["from_id"]);
 
-		fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+		const LLUUID fid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 
 		// This will also trigger an onlinenotification if the user is online
 		msg->newMessageFast(_PREHASH_AcceptFriendship);
@@ -235,7 +235,9 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
 		msg->addUUIDFast(_PREHASH_FolderID, fid);
 		msg->sendReliable(LLHost(payload["sender"].asString()));
 		break;
+	}
 	case 1:
+	{
 		// decline
 		// We no longer notify other viewers, but we DO still send
 		// the rejection to the simulator to delete the pending userop.
@@ -247,6 +249,7 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
 		msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]);
 		msg->sendReliable(LLHost(payload["sender"].asString()));
 		break;
+	}
 	default:
 		// close button probably, possibly timed out
 		break;
@@ -767,8 +770,7 @@ class LLDiscardAgentOffer : public LLInventoryFetchComboObserver
 	virtual void done()
 	{
 		LL_DEBUGS("Messaging") << "LLDiscardAgentOffer::done()" << LL_ENDL;
-		LLUUID trash_id;
-		trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		bool notify = false;
 		if(trash_id.notNull() && mObjectID.notNull())
 		{
@@ -875,7 +877,7 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
 {
 	std::vector<LLUUID>::const_iterator it = items.begin();
 	std::vector<LLUUID>::const_iterator end = items.end();
-	LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH));
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	LLInventoryItem* item;
 	for(; it != end; ++it)
 	{
@@ -946,13 +948,12 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
 		}
 
 		//Trash Check
-		LLUUID trash_id;
-		trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
 		{
 			return;
 		}
-		LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+		const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 		//BOOL inventory_has_focus = gFocusMgr.childHasKeyboardFocus(view);
 		BOOL user_is_away = gAwayTimer.getStarted();
 
@@ -1716,7 +1717,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				info->mFromGroup = from_group;
 				info->mTransactionID = session_id;
 				info->mType = (LLAssetType::EType) asset_type;
-				info->mFolderID = gInventory.findCategoryUUIDForType(info->mType);
+				info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType));
 				std::string from_name;
 
 				from_name += "A group member named ";
@@ -1850,7 +1851,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 			info->mFromID = from_id;
 			info->mFromGroup = from_group;
 			info->mTransactionID = session_id;
-			info->mFolderID = gInventory.findCategoryUUIDForType(info->mType);
+			info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType));
 
 			if (dialog == IM_TASK_INVENTORY_OFFERED)
 			{
@@ -2144,7 +2145,7 @@ bool callingcard_offer_callback(const LLSD& notification, const LLSD& response)
 		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
 		msg->nextBlockFast(_PREHASH_TransactionBlock);
 		msg->addUUIDFast(_PREHASH_TransactionID, notification["payload"]["transaction_id"].asUUID());
-		fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+		fid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 		msg->nextBlockFast(_PREHASH_FolderData);
 		msg->addUUIDFast(_PREHASH_FolderID, fid);
 		msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
@@ -2597,11 +2598,10 @@ BOOL LLPostTeleportNotifiers::tick()
 	{
 		// get callingcards and landmarks available to the user arriving.
 		LLInventoryFetchDescendentsObserver::folder_ref_t folders;
-		LLUUID folder_id;
-		folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
-		if(folder_id.notNull()) 
-			folders.push_back(folder_id);
-		folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+		const LLUUID callingcard_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
+		if(callingcard_id.notNull()) 
+			folders.push_back(callingcard_id);
+		const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 		if(folder_id.notNull()) 
 			folders.push_back(folder_id);
 		if(!folders.empty())
@@ -4819,7 +4819,7 @@ void container_inventory_arrived(LLViewerObject* object,
 		// create a new inventory category to put this in
 		LLUUID cat_id;
 		cat_id = gInventory.createNewCategory(gInventory.getRootFolderID(),
-											  LLAssetType::AT_NONE,
+											  LLFolderType::FT_NONE,
 											  LLTrans::getString("AcquiredItems"));
 
 		InventoryObjectList::const_iterator it = inventory->begin();
@@ -4869,7 +4869,7 @@ void container_inventory_arrived(LLViewerObject* object,
 		}
 
 		LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
-		LLUUID category = gInventory.findCategoryUUIDForType(item->getType());
+		const LLUUID category = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(item->getType()));
 
 		LLUUID item_id;
 		item_id.generate();
@@ -5549,7 +5549,7 @@ void process_covenant_reply(LLMessageSystem* msg, void**)
 	LLPanelLandCovenant::updateEstateOwnerName(owner_name);
 	LLFloaterBuyLand::updateEstateOwnerName(owner_name);
 
-	LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info");
+	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile");
 	if (panel)
 	{
 		panel->updateEstateName(estate_name);
@@ -5683,7 +5683,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
 	LLPanelLandCovenant::updateCovenantText(covenant_text);
 	LLFloaterBuyLand::updateCovenantText(covenant_text, asset_uuid);
 
-	LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info");
+	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile");
 	if (panel)
 	{
 		panel->updateCovenantText(covenant_text);
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index 5c40f2a5402..90dff465c94 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -62,6 +62,7 @@
 #include "lltooltip.h"
 #include "lltrans.h"
 #include "lluictrlfactory.h"
+#include "llviewerassettype.h"
 #include "llviewercontrol.h"
 #include "llviewerinventory.h"
 #include "llviewertexturelist.h"
@@ -505,19 +506,17 @@ LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const
 				}
 
 				break;
-			case LLAssetType::AT_SOUND:			img_name = "Inv_Sound";	break;
+			case LLAssetType::AT_SOUND:			img_name = "Inv_Sound";		break;
 			case LLAssetType::AT_CLOTHING:		img_name = "Inv_Clothing";	break;
-			case LLAssetType::AT_OBJECT:		img_name = "Inv_Object"; break;
+			case LLAssetType::AT_OBJECT:		img_name = "Inv_Object"; 	break;
 			case LLAssetType::AT_CALLINGCARD:	img_name = "Inv_CallingCard"; break;
-			case LLAssetType::AT_LANDMARK:		img_name = "Inv_Landmark"; break;
+			case LLAssetType::AT_LANDMARK:		img_name = "Inv_Landmark"; 	break;
 			case LLAssetType::AT_NOTECARD:		img_name = "Inv_Notecard";	break;
 			case LLAssetType::AT_LSL_TEXT:		img_name = "Inv_Script";	break;
-			case LLAssetType::AT_BODYPART:		img_name = "Inv_Skin";	break;
-			case LLAssetType::AT_ANIMATION:		img_name = "Inv_Animation";break;
-			case LLAssetType::AT_GESTURE:			img_name = "Inv_Gesture";	break;
-				//TODO need img_name
-			case LLAssetType::AT_FAVORITE:		img_name = "Inv_Landmark";	 break;
-			default: llassert(0); 
+			case LLAssetType::AT_BODYPART:		img_name = "Inv_Skin";		break;
+			case LLAssetType::AT_ANIMATION:		img_name = "Inv_Animation";	break;
+			case LLAssetType::AT_GESTURE:		img_name = "Inv_Gesture";	break;
+			default: llassert(0);
 		}
 
 		return LLUI::getUIImage(img_name);
@@ -732,11 +731,10 @@ BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask)
 		if( LLToolDragAndDrop::getInstance()->isOverThreshold( screen_x, screen_y ) )
 		{
 			LLToolDragAndDrop::getInstance()->beginDrag(
-				LLAssetType::lookupDragAndDropType( mDragItem->getType() ),
+				LLViewerAssetType::lookupDragAndDropType( mDragItem->getType() ),
 				mDragItem->getUUID(),
 				LLToolDragAndDrop::SOURCE_NOTECARD,
 				mPreviewID, mObjectID);
-
 			return LLToolDragAndDrop::getInstance()->handleHover( x, y, mask );
 		}
 		getWindow()->setCursor(UI_CURSOR_HAND);
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index a964f431719..e7a43924db7 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -41,53 +41,22 @@
 #include "llvoavatarself.h"
 #include "llvoavatar.h"
 
-#include <stdio.h>
-#include <ctype.h>
-
-#include "llaudioengine.h"
-#include "noise.h"
+#include "pipeline.h"
 
-// TODO: Seraph - Remove unnecessary headers.  These are copied from llvoavatar.h.
 #include "llagent.h" //  Get state values from here
 #include "llagentwearables.h"
-#include "llviewercontrol.h"
-#include "lldrawpoolavatar.h"
-#include "lldriverparam.h"
-#include "lleditingmotion.h"
-#include "llemote.h"
-#include "llface.h"
-#include "llfirstuse.h"
-#include "llheadrotmotion.h"
 #include "llhudeffecttrail.h"
 #include "llhudmanager.h"
-#include "llkeyframefallmotion.h"
-#include "llkeyframestandmotion.h"
-#include "llkeyframewalkmotion.h"
-#include "llmutelist.h"
 #include "llselectmgr.h"
-#include "llsprite.h"
-#include "lltargetingmotion.h"
-#include "lltexlayer.h"
-#include "lltexglobalcolor.h"
 #include "lltoolgrab.h"	// for needsRenderBeam
 #include "lltoolmgr.h" // for needsRenderBeam
 #include "lltoolmorph.h"
 #include "lltrans.h"
 #include "llviewercamera.h"
-#include "llviewertexturelist.h"
 #include "llviewermenu.h"
 #include "llviewerobjectlist.h"
-#include "llviewerparcelmgr.h"
 #include "llviewerstats.h"
-#include "llvovolume.h"
-#include "llworld.h"
-#include "pipeline.h"
-#include "llviewershadermgr.h"
-#include "llsky.h"
-#include "llanimstatelabels.h"
-#include "llgesturemgr.h" //needed to trigger the voice gesticulations
-#include "llvoiceclient.h"
-#include "llvoicevisualizer.h" // Ventrella
+#include "llviewerregion.h"
 #include "llappearancemgr.h"
 
 #if LL_MSVC
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index f2cf84c2281..4288e4e6fd8 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -1123,7 +1123,7 @@ void LLWearable::saveNewAsset() const
 		{
 			llinfos << "Update Agent Inventory via capability" << llendl;
 			LLSD body;
-			body["folder_id"] = gInventory.findCategoryUUIDForType(getAssetType());
+			body["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetToFolderType(getAssetType()));
 			body["asset_type"] = LLAssetType::lookup(getAssetType());
 			body["inventory_type"] = LLInventoryType::lookup(LLInventoryType::IT_WEARABLE);
 			body["name"] = getName();
diff --git a/indra/newview/skins/default/textures/inv_folder_inbox.tga b/indra/newview/skins/default/textures/inv_folder_inbox.tga
new file mode 100644
index 0000000000000000000000000000000000000000..04539c2cc4f002c9c1c4724215e5b7cf08cfb177
GIT binary patch
literal 2085
zcmeHF!A`<J5M4AHk9>fKet>f010<nM6C<Rk@xY~Nuo|!!T2CB$X+NS#6Am0oNjUUJ
z`U(7kM~>sZRfwUbA~8l2HhG<$H#7UTvr}RRY`My;%%l@WL_Y$4EbRj5voIthO}`E3
zE$dUh3Hc}d$|8pYdYO7&t0)TDwoScWF9Yz17u8#qMU%;dMxzmp$77n!X2QY;k9bkN
zX__KGiXsYvfHX}L7Cz2H9RIlK{*L2N9LLmdx2amKlIMBC!UvCdk-jX;RIAm<_kBu|
zgr?J}u<*enUZjtnx~@yZ;gGuBuIM2weDH{G(#IQagFOAB`N4eUfy=FCAMwRvvC@YI
zAnHEm>~ntJK2KvgV|n?1fqO0S8}8RX=z#j9n;oU256+|u!+5d#_l~4mMkRCg`H__2
z)`@HFrhcoo)W+5MovdEgD{T8gXsjQ$_kXnmP5sewq}D_KS!xdYyGb9O9={i62jLCQ
C7t+N5

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 26d2f4e497f..88aca005cfe 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -3,7 +3,7 @@
  legacy_header_height="18"
  background_visible="true"
  follows="left|top|right|bottom"
- height="270"
+ height="359"
  layout="topleft"
  left="0"
  name="panel_im"
@@ -12,13 +12,13 @@
  can_dock="true"
  can_minimize="true"
  visible="true" 
- width="365"
+ width="400"
  can_resize="true"
  min_width="200"
  min_height="150">
   <layout_stack follows="left|top|right|bottom"
-                height="255"
-                width="365"
+                height="344"
+                width="400"
                 layout="topleft"
                 orientation="horizontal"
                 name="im_panels"
@@ -28,13 +28,13 @@
       name="panel_im_control_panel"
       layout="topleft"
       top_delta="-3"
-      width="146"
-      height="255"
+      height="344"
       follows="left"
       label="IM Control Panel"
+      auto_resize="false"
       user_resize="false" />
-    <layout_panel height="255"
-                  width="200"
+    <layout_panel height="344"
+                  width="235"
                   left_delta="146" 
                   top="0"
                   user_resize="false">
@@ -56,14 +56,14 @@
        length="1"
        follows="left|top|right|bottom"
        font="SansSerif"
-       height="205"
+       height="290"
        layout="topleft"
        name="chat_history"
        parse_highlights="true"
        allow_html="true" 
-       width="195">
+       width="230">
       </chat_history>
-      <line_editor follows="left|right" name="chat_editor" height="20" layout="topleft" width="190">
+      <line_editor follows="left|right" name="chat_editor" height="20" layout="topleft" width="225">
       </line_editor>
     </layout_panel>
   </layout_stack>
diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index 6b13e2f1c7c..e2ae81e0b93 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -128,6 +128,8 @@
      left_delta="110"
      tab_stop="false"
      width="18" />
+  <!-- Overlapping buttons for default actions
+    llinspectavatar.cpp makes visible the most likely default action -->
     <button
      follows="bottom|left"
      height="23"
@@ -136,6 +138,16 @@
      top="246"
      name="add_friend_btn"
      width="100" />
+    <button
+     follows="bottom|left"
+     height="23"
+     label="IM"
+     left_delta="0"
+     top_delta="0"
+     name="im_btn"
+     width="100"
+     commit_callback.function="InspectAvatar.IM"
+     />
     <menu_button
      follows="top|left"
      height="18"
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
index 6049476a43f..8ee67b9a020 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
@@ -7,7 +7,6 @@
          name="Gear Menu">
   <menu_item_call
    label="View Profile"
-   layout="topleft"
    enabled="true" 
    name="view_profile">
     <menu_item_call.on_click
@@ -15,49 +14,42 @@
   </menu_item_call>
   <menu_item_call
    label="Add Friend"
-   layout="topleft"
    name="add_friend">
     <menu_item_call.on_click
      function="InspectAvatar.AddFriend"/>
   </menu_item_call>
   <menu_item_call
    label="IM"
-   layout="topleft"
    name="im">
     <menu_item_call.on_click
      function="InspectAvatar.IM"/>
   </menu_item_call>
   <menu_item_call
    label="Call"
-   layout="topleft"
    enabled="true"
    name="call">
   </menu_item_call>
   <menu_item_call
    label="Teleport"
-   layout="topleft"
    name="teleport">
     <menu_item_call.on_click
      function="InspectAvatar.Teleport"/>
   </menu_item_call>
   <menu_item_call
    label="Invite to Group"
-   layout="topleft"
    name="invite_to_group">
     <menu_item_call.on_click
      function="InspectAvatar.InviteToGroup"/>
   </menu_item_call>
-  <menu_item_separator layout="topleft" />
+  <menu_item_separator />
   <menu_item_call
    label="Block"
-   layout="topleft"
    name="block">
     <menu_item_call.on_click
      function="InspectAvatar.Block"/>
   </menu_item_call>
   <menu_item_call
    label="Report"
-   layout="topleft"
    name="report">
     <menu_item_call.on_click
      function="InspectAvatar.Report"/>
@@ -88,7 +80,6 @@
   </menu_item_call>
   <menu_item_call
    label="Find On Map"
-   layout="topleft"
    name="find_on_map">
     <menu_item_call.on_click
      function="InspectAvatar.FindOnMap"/>
@@ -97,16 +88,14 @@
   </menu_item_call>
   <menu_item_call
    label="Zoom In"
-   layout="topleft"
    name="zoom_in">
     <menu_item_call.on_click
      function="InspectAvatar.ZoomIn"/>
   </menu_item_call>  
   <menu_item_call
    label="Pay"
-   layout="topleft"
    name="pay">
     <menu_item_call.on_click
      function="InspectAvatar.Pay"/>
   </menu_item_call>
-</menu>
\ No newline at end of file
+</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
index 19c2bf34969..ce5ee83f556 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
@@ -7,7 +7,6 @@
          name="Gear Menu">
   <menu_item_call
    label="Stand Up"
-   layout="topleft"
    enabled="true"
    name="stand_up">
     <menu_item_call.on_click
@@ -18,7 +17,6 @@
   </menu_item_call>
   <menu_item_call
    label="My Appearance"
-   layout="topleft"
    name="my_appearance">
     <menu_item_call.on_click
      function="ShowFloater"
@@ -28,7 +26,6 @@
   </menu_item_call>
   <menu_item_call
    label="My Profile"
-   layout="topleft"
    enabled="true" 
    name="my_profile">
     <menu_item_call.on_click
@@ -37,7 +34,6 @@
   </menu_item_call>
   <menu_item_call
    label="My Friends"
-   layout="topleft"
    name="my_friends">
     <menu_item_call.on_click
      function="Self.Friends"
@@ -45,9 +41,8 @@
   </menu_item_call>
   <menu_item_call
    label="My Groups"
-   layout="topleft"
    name="my_groups">
     <menu_item_call.on_click
      function="Self.Groups" />
   </menu_item_call>
-</menu>
\ No newline at end of file
+</menu>
diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
index f50acc224f0..87c4e2787f4 100644
--- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  name="panel_im_control_panel"
- width="146"
+ width="180"
  height="215"
  border="false">
     <avatar_list
@@ -16,10 +16,11 @@
      show_info_btn="false"
      show_profile_btn="false"
      top="10"
-     width="140" />
+     width="180" />
     <button
      name="call_btn"
      label="Call"
+     left_delta="27"
      width="125"
      height="20" />
     <button
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 61bd1d186e5..b5051523e59 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -60,7 +60,7 @@
          min_width="96"
          name="speak_panel"
          user_resize="false">
-         <chiclet_talk
+         <talk_button
           follows="right"
           height="23"
           speak_button.tab_stop="true"
@@ -93,7 +93,7 @@
          min_width="76"
          name="gesture_panel"
          user_resize="false">
-         <button
+         <gesture_combo_box
            follows="right"
           height="23"
           label="Gesture"
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index 9ed510dff3e..3358015335d 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  name="panel_im_control_panel"
- width="146"
+ width="180"
  height="238"
  border="false">
     <avatar_list
@@ -16,11 +16,11 @@
      show_info_btn="false"
      show_profile_btn="false"
      top="10"
-     width="140" />
+     width="180" />
     <button
      name="group_info_btn"
      label="Group Info"
-     left_delta="3"
+     left_delta="27"
      width="125"
      height="20" />
     <button
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index a85c55f9b2c..4f24c7a745b 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  follows="all"
- height="412"
+     height="380"
  label="General"
  class="panel_group_general"
  layout="topleft"
  left="0"
  top="0"
  name="general_tab"
- width="313">
+ width="303">
     <panel.string
      name="help_text">
         The General tab contains general information about this group, a list of members, general Group Preferences and member options.
@@ -41,7 +41,7 @@ Hover your mouse over the options for more help.
      draw_heading="true"
      follows="left|top"
      heading_height="16"
-     height="160"
+     height="130"
      layout="topleft"
      left_delta="0"
      name="visible_members"
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index d8d47c40084..ab0f956da0b 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -5,7 +5,7 @@ background_visible="true"
  height="570"
  label="Group Info"
  layout="topleft"
- min_height="350"
+ min_height="425"
  left="0"
  top="20"
  name="GroupInfo"
@@ -47,7 +47,7 @@ background_visible="true"
      text_color="white"
      top="0"
      value="(Loading...)"
-     use_elipsis="true"
+     use_ellipses="true"
      width="300" />
     <line_editor
      follows="left|top"
@@ -60,7 +60,7 @@ background_visible="true"
      top_delta="5"
      width="250"
      height="20"
-     visible="true" />
+     visible="false" />
     <texture_picker
      follows="left|top"
      height="113"
@@ -112,33 +112,46 @@ background_visible="true"
      left_delta="0"
      top_pad="6"
      height="23"
-     label="Join now!"
-     label_selected="Join now!"
+     label="JOIN NOW!"
      name="btn_join"
      visible="true"
      width="120" />
    <accordion
              follows="all"
-             height="405"
+             height="425"
              layout="topleft"
              left="0"
+             multiple_expansion="false"
              name="groups_accordion"
-             top_pad="20"
-             width="333">
+             top_pad="15"
+             width="336">
              <accordion_tab
                  can_resize="false"
+                 expanded="true"
                  layout="topleft"
                  name="tab_general"
                  title="General">
-        <panel
-        border="false"
-         filename="panel_group_general.xml"
+         <scroll_container
+         color="DkGray2"
+         opaque="true"
+         height="323"
+         follows="all"
          layout="topleft"
          left="0"
-         help_topic="group_general_tab"
-         name="general_tab"
          top="0"
-         width="333" />
+         name="general_scroll"
+         reserve_scroll_corner="false"
+         width="333">
+            <panel
+            border="false"
+             filename="panel_group_general.xml"
+             layout="topleft"
+             left="0"
+             help_topic="group_general_tab"
+             name="general_tab"
+             top="0"
+             width="303" />
+         </scroll_container>
          </accordion_tab>
          <accordion_tab
                  can_resize="false"
@@ -146,15 +159,27 @@ background_visible="true"
                  layout="topleft"
                  name="tab_roles"
                  title="Roles">
-        <panel
-        border="false"
-         filename="panel_group_roles.xml"
-         layout="topleft"
-         left="0"
-         help_topic="group_roles_tab"
-         name="roles_tab"
-         top="0"
-         width="333" />
+               <scroll_container
+                  color="DkGray2"
+                  opaque="true"
+                  height="323"
+                  follows="all"
+                  layout="topleft"
+                  left="0"
+                  top="0"
+                  name="roles_scroll"
+                  reserve_scroll_corner="false"
+                  width="333">
+                 <panel
+                 border="false"
+                  filename="panel_group_roles.xml"
+                  layout="topleft"
+                  left="0"
+                  help_topic="group_roles_tab"
+                  name="roles_tab"
+                  top="0"
+             width="303" />
+         </scroll_container>
          </accordion_tab>
          <accordion_tab
                  can_resize="false"
@@ -162,21 +187,45 @@ background_visible="true"
                  layout="topleft"
                  name="tab_notices"
                  title="Notices">
+            <scroll_container
+                  color="DkGray2"
+                  opaque="true"
+                  height="323"
+                  follows="all"
+                  layout="topleft"
+                  left="0"
+                  top="0"
+                  name="notices_scroll"
+                  reserve_scroll_corner="false"
+                  width="333">
         <panel
+        border="false"
          filename="panel_group_notices.xml"
          layout="topleft"
          left="0"
          help_topic="group_notices_tab"
          name="notices_tab"
          top="0"
-         width="333" />
+         width="303" />
+         </scroll_container>
          </accordion_tab>
-                  <accordion_tab
+        <accordion_tab
                  can_resize="false"
                  expanded="false"
                  layout="topleft"
                  name="tab_notices"
                  title="Land/Assets">
+           <scroll_container
+                  color="DkGray2"
+                  opaque="true"
+                  height="323"
+                  follows="all"
+                  layout="topleft"
+                  left="0"
+                  top="0"
+                  name="land_scroll"
+                  reserve_scroll_corner="false"
+                  width="333">
         <panel
         border="false"
          filename="panel_group_land_money.xml"
@@ -185,41 +234,43 @@ background_visible="true"
          help_topic="group_land_money_tab"
          name="land_money_tab"
          top="0"
-         width="333" />
+         width="313" />
+         </scroll_container>
          </accordion_tab>
          </accordion>
-    <button
+   <button
      follows="top|left"
-     height="20"
+     height="22"
      image_overlay="Refresh_Off"
      layout="topleft"
+     left="5"
      name="btn_refresh"
      picture_style="true"
-     left="5"
-     width="20" />
-     <button
-     height="20"
-     font="SansSerifSmall"
-     label="Save"
-     label_selected="Save"
-     name="btn_apply"
-     left_pad="5"
-     width="65" />
-    <button
+     top_pad="-15"
+     width="23" />
+         <button
      height="20"
      label="Create"
-     label_selected="Create"
+     label_selected="New group"
      name="btn_create"
-     left_pad="5"
+     left_pad="10"
      visible="false"
-     width="65" />
-    <button
-     left_pad="5"
+     width="100" />
+   <!-- <button
+     left_pad="10"
      height="20"
      label="Cancel"
      label_selected="Cancel"
      name="btn_cancel"
      visible="false"
+     width="65" />-->
+     <button
+     height="20"
+     font="SansSerifSmall"
+     label="Save"
+     label_selected="Save"
+     name="btn_apply"
+     left_pad="10"
+     right="-10"
      width="65" />
-
 </panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
index c81c7113ae2..99fc39c466a 100644
--- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
@@ -1,25 +1,25 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- border="true"
+ border="false"
  follows="all"
  height="510"
  label="Land &amp; L$"
  layout="topleft"
  left="1"
  name="land_money_tab"
- top="490"
- width="280">
+ top="0"
+ width="313">
     <panel.string
      name="help_text">
-        Parcels owned by the group are listed along with contribution details. A warning appears until the Total Land in Use is less than or equal to the Total Contribution. The Planning, Details, and Sales tabs provide information about the group&apos;s finances.
+        Parcels owned by a group are listed along with contribution details. A warning appears until the Total Land in Use is less than or = to the Total Contribution.
     </panel.string>
     <panel.string
      name="cant_view_group_land_text">
-        You do not have permission to view group owned land.
+        You don&apos;t have permission to view group owned land
     </panel.string>
     <panel.string
      name="cant_view_group_accounting_text">
-        You do not have permission to view the group&apos;s accounting information.
+        You don&apos;t have permission to view the group&apos;s accounting information.
     </panel.string>
     <panel.string
      name="loading_txt">
@@ -27,7 +27,7 @@
     </panel.string>
     <panel.string
      name="land_contrib_error">
-        Unable to set your land contribution.
+        Unable to set your land contribution
     </panel.string>
    <!-- <text
      type="string"
@@ -44,29 +44,29 @@
     <scroll_list
      draw_heading="true"
      follows="top"
-     heading_height="14"
-     height="100"
+     heading_height="20"
+     height="150"
      layout="topleft"
-     left="5"
+     left="0"
      name="group_parcel_list"
-     top_pad="10"
-     width="265">
+     top_pad="0"
+     width="313">
         <scroll_list.columns
          label="Parcel"
          name="name"
-         width="67" />
+         width="78" />
         <scroll_list.columns
          label="Region"
          name="location"
-         width="72" />
+         width="78" />
         <scroll_list.columns
          label="Type"
          name="type"
-         width="60" />
+         width="70" />
         <scroll_list.columns
          label="Area"
          name="area"
-         width="20" />
+         width="50" />
         <scroll_list.columns
          label=""
          name="hidden"
@@ -74,14 +74,14 @@
     </scroll_list>
     <button
      follows="top"
-     height="20"
+     height="23"
      label="Map"
      label_selected="Map"
      layout="topleft"
-     left="150"
      name="map_button"
-     top_pad="10"
-     width="125"
+     right="-10"
+     top_pad="5"
+     width="95"
      enabled="false" />
     <text
      type="string"
@@ -91,11 +91,12 @@
      layout="topleft"
      left="5"
      name="total_contributed_land_label"
-     top_pad="10"
+     top_pad="0"
      width="130">
         Total Contribution:
     </text>
     <text
+    text_color="EmphasisColor"
      type="string"
      follows="left|top"
      height="16"
@@ -119,6 +120,7 @@
         Total Land In Use:
     </text>
     <text
+    text_color="EmphasisColor"
      type="string"
      follows="left|top"
      height="16"
@@ -142,6 +144,7 @@
         Land Available:
     </text>
     <text
+    text_color="EmphasisColor"
      type="string"
      follows="left|top"
      height="16"
@@ -168,19 +171,19 @@
      border_style="line"
      border_thickness="1"
      follows="left|top"
-     height="16"
+     height="19"
      layout="topleft"
      left_pad="5"
      max_length="10"
      name="your_contribution_line_editor"
-     top_delta="-2"
+     top_delta="0"
      width="95" />
     <text
      type="string"
      follows="left|top"
      height="16"
      layout="topleft"
-     left_pad="5"
+     left_pad="3"
      name="your_contribution_units"
      top_delta="2">
         m²
@@ -193,13 +196,13 @@
      layout="topleft"
      left="140"
      name="your_contribution_max_value"
-     top_pad="0"
+     top_pad="2"
      width="95">
         ([AMOUNT] max)
     </text>
     <icon
      height="16"
-     image_name="smicon_warn.tga"
+     image_name="notify_next"
      layout="topleft"
      left="9"
      name="group_over_limit_icon"
@@ -211,14 +214,14 @@
      type="string"
      word_wrap="true"
      font="SansSerifSmall"
-     height="40"
+     height="35"
      layout="topleft"
-     left_pad="5"
+     left_pad="0"
      name="group_over_limit_text"
-     text_color="GroupOverTierColor"
+     text_color="EmphasisColor"
      top_delta="0"
-     width="250">
-        Group members must contribute more land credits to support land in use.
+     width="290">
+        Group members must contribute more land credits to support land in use
     </text>
     <text
      type="string"
@@ -242,128 +245,126 @@
      name="group_money_tab_container"
      tab_position="top"
      tab_height="20"
-     top_pad="10"
-     width="265">
+     top_pad="2"
+     tab_min_width="70"
+     width="300">
         <panel
-         border="true"
+         border="false"
          follows="all"
          height="180"
-         label="Planning"
+         label="PLANNING"
          layout="topleft"
-         left="1"
+         left="0"
          help_topic="group_money_planning_tab"
          name="group_money_planning_tab"
          top="5"
-         width="265">
+         width="300">
             <text_editor
              type="string"
-             bg_readonly_color="0.784314 0.819608 0.8 1"
              follows="all"
-             font="Monospace"
-             height="168"
+             font="SansSerif"
+             height="140"
              layout="topleft"
-             left="8"
+             left="0"
              max_length="4096"
              name="group_money_planning_text"
-             top="5"
-             width="250"
+             top="0"
+             width="300"
              word_wrap="true">
-                Computing...
+                Loading...
             </text_editor>
         </panel>
       <panel
-         border="true"
-         follows="left|top|right|bottom"
+         border="false"
+         follows="all"
          height="180"
-         label="Details"
+         label="DETAILS"
          layout="topleft"
-         left_delta="0"
+         left="0"
          help_topic="group_money_details_tab"
          name="group_money_details_tab"
-         top_delta="0"
-         width="265">
+         top="5"
+         width="300">
           <text_editor
              type="string"
-             bg_readonly_color="0.784314 0.819608 0.8 1"
              follows="all"
-             font="Monospace"
              height="140"
              layout="topleft"
-             left="8"
+             left="0"
              max_length="4096"
              name="group_money_details_text"
-             top="7"
-             width="250"
+             top="0"
+             width="300"
              word_wrap="true">
-                Computing...
+                Loading...
             </text_editor>
-          <button
-             height="20"
-             label="&lt; Earlier"
-             label_selected="&lt; Earlier"
-             layout="topleft"
-             left="5"
-             name="earlier_details_button"
-             tool_tip="Go back in time"
-             top_pad="10"
-             width="125" />
             <button
-             height="20"
-             label="Later &gt;"
-             label_selected="Later &gt;"
-             layout="topleft"
-             left_pad="5"
+	     follows="left|top"
+	     height="23"
+	     image_overlay="Arrow_Left_Off"
+	     layout="topleft"
+	     name="earlier_details_button"
+	     picture_style="true"
+	     tool_tip="Back"
+	     top_pad="3"
+             right="-35"
+	     width="31" />
+             <button
+	     follows="left|top"
+	     height="23"
+	     image_overlay="Arrow_Right_Off"
+	     layout="topleft"
+	     left_pad="10"
              name="later_details_button"
-             tool_tip="Go forward in time"
-             top_delta="0"
-             width="125" />
+	     picture_style="true"
+	     tool_tip="Next"
+	     width="31" />
         </panel>
       <panel
-         border="true"
-         follows="left|top|right|bottom"
+         border="false"
+         follows="all"
          height="180"
-         label="Sales"
+         label="SALES"
          layout="topleft"
          left_delta="0"
          help_topic="group_money_sales_tab"
          name="group_money_sales_tab"
          top_delta="-1"
-         width="265">
+         width="300">
             <text_editor
              type="string"
-             bg_readonly_color="0.784314 0.819608 0.8 1"
              follows="all"
-             font="Monospace"
              height="140"
              layout="topleft"
-             left="8"
+             left="0"
              max_length="4096"
              name="group_money_sales_text"
-             top="7"
-             width="250"
+             top="0"
+             width="300"
              word_wrap="true">
-                Computing...
+                Loading...
             </text_editor>
-            <button
-             height="20"
-             label="&lt; Earlier"
-             label_selected="&lt; Earlier"
-             layout="topleft"
-             left="5"
-             name="earlier_sales_button"
-             tool_tip="Go back in time"
-             top_pad="10"
-             width="125" />
-            <button
-             height="20"
-             label="Later &gt;"
-             label_selected="Later &gt;"
-             layout="topleft"
-             left_pad="5"
+                         <button
+	     follows="left|top"
+	     height="23"
+	     image_overlay="Arrow_Left_Off"
+	     layout="topleft"
+	     name="earlier_sales_button"
+	     picture_style="true"
+	     tool_tip="Back"
+	     top_pad="3"
+             right="-35"
+	     width="31" />
+             <button
+	     follows="left|top"
+	     height="23"
+	     image_overlay="Arrow_Right_Off"
+	     layout="topleft"
+	     left_pad="10"
              name="later_sales_button"
-             tool_tip="Go forward in time"
-             top_delta="0"
-             width="125" />
+	     picture_style="true"
+	     tool_tip="Next"
+	     width="31" />
         </panel>
     </tab_container>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml
index 0e4d490369a..bfb49a60c25 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml
@@ -1,14 +1,13 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- border="true"
  follows="all"
  height="485"
  label="Notices"
  layout="topleft"
- left="1"
+ left="0"
  name="notices_tab"
- top="485"
- width="280">
+ top="0"
+ width="313">
     <panel.string
      name="help_text">
         Notices are a quick way to communicate across a 
@@ -20,60 +19,48 @@ the General tab.
     </panel.string>
     <panel.string
      name="no_notices_text">
-        There are no past notices.
+        There are no past notices
     </panel.string>
-     <!--<text
-      follows="left|top"
-     type="string"
-     font="SansSerifBig"
-     height="16"
-     layout="topleft"
-     left="10"
-     name="lbl"
-     top_pad="10"
-     width="269">
-        Group Notices Archive
-    </text> -->
     <text
       follows="left|top"
      type="string"
      word_wrap="true"
-     height="40"
+     height="30"
      layout="topleft"
-     left_delta="10"
+     left="10"
      name="lbl2"
-     text_color="EmphasisColor"
-     top_pad="10"
-     width="270">
-        Notices are kept for 14 days. Notice lists are limited to 200 notices per group on a daily basis.
+     top="5"
+     width="300">
+     Notices are kept for 14 days
+Groups are limited to 200 notices/group daily
     </text>
     <scroll_list
       follows="left|top"
      column_padding="0"
      draw_heading="true"
-     heading_height="14"
-     height="109"
+     heading_height="16"
+     height="125"
      layout="topleft"
-     left_delta="0"
+     left="0"
      name="notice_list"
      top_pad="0"
-     width="265">
+     width="303">
         <scroll_list.columns
          label=""
          name="icon"
-         width="16" />
+         width="20" />
         <scroll_list.columns
          label="Subject"
          name="subject"
-         width="100" />
+         width="125" />
         <scroll_list.columns
          label="From"
          name="from"
-         width="83" />
+         width="90" />
         <scroll_list.columns
          label="Date"
          name="date"
-         width="50" />
+         width="30" />
         <scroll_list.columns
          name="sort"
          width="-1" />
@@ -84,39 +71,42 @@ the General tab.
      layout="topleft"
      name="notice_list_none_found"
      visible="false">
-        None found.
+        None found
     </text>
-    <button
-      follows="left|top"
-     height="20"
-     font="SansSerifSmall"
-     label="New Notice"
-     label_selected="Create New Notice"
-     layout="topleft"
-     left_delta="0"
-     name="create_new_notice"
-     top_delta="4"
-     width="125" />
-    <button
-      follows="left|top"
-     height="20"
-     font="SansSerifSmall"
-     label="Refresh"
-     label_selected="Refresh List"
+         <button
+       follows="bottom|left"
+       height="18"
+       image_selected="AddItem_Press"
+       image_unselected="AddItem_Off"
+       image_disabled="AddItem_Disabled"
+       layout="topleft"
+       label="Create a new notice"
+       left="15"
+       name="create_new_notice"
+       picture_style="true"
+       tool_tip="Create a new notice"
+     top_delta="-5"
+       width="18" />
+     <button
+     follows="top|left"
+     height="22"
+     image_overlay="Refresh_Off"
      layout="topleft"
-     left_pad="12"
      name="refresh_notices"
-     top_delta="0"
-     width="125" />
+     picture_style="true"
+     right="-5"
+     top_delta="5"
+     width="23" />
     <panel
      follows="left|top"
-     height="268"
+     height="300"
      label="Create New Notice"
      layout="topleft"
      left="0"
-     name="panel_create_new_notice"
      top_pad="10"
-     width="265">
+     visible="false"
+     name="panel_create_new_notice"
+     width="303">
         <text
          follows="left|top"
          type="string"
@@ -127,30 +117,16 @@ the General tab.
          mouse_opaque="false"
          name="lbl"
          text_color="EmphasisColor"
-         top_pad="0"
-         width="265">
+         top="0"
+         width="200">
             Create a Notice
         </text>
-        <text
-         follows="left|top"
-         type="string"
-         word_wrap="true"
-         height="90"
-         layout="topleft"
-         left_delta="0"
-         name="lbl2"
-         text_color="EmphasisColor"
-         top_pad="4"
-         width="195">
-            You can add a single item to a notice by dragging it from your inventory to this panel. Attached items must be copiable and transferrable, and you can&apos;t send a folder.
-        </text>
         <text
          follows="left|top"
          type="string"
          halign="left"
          height="16"
          layout="topleft"
-         left_delta="0"
          name="lbl3"
          top_pad="10"
          width="60">
@@ -164,8 +140,7 @@ the General tab.
          left_pad="3"
          max_length="63"
          name="create_subject"
-         top_delta="-1"
-         width="200" />
+         width="220" />
         <text
          follows="left|top"
          type="string"
@@ -174,106 +149,100 @@ the General tab.
          layout="topleft"
          left="10"
          name="lbl4"
-         top_pad="10"
+         top_pad="5"
          width="60">
             Message:
         </text>
         <text_editor
-         height="75"
+         height="90"
          layout="topleft"
          left_pad="3"
          max_length="511"
          name="create_message"
          top_delta="0"
-         width="200"
+         width="220"
          word_wrap="true" />
         <text
          follows="left|top"
          type="string"
          halign="left"
-         height="16"
+         height="14"
          layout="topleft"
          left="10"
          name="lbl5"
-         top_pad="10"
-         width="60">
+         width="200">
             Attach:
         </text>
         <line_editor
          enabled="false"
-         height="16"
+         height="19"
          layout="topleft"
-         left_pad="3"
-         max_length="63"
+         max_length="90"
          mouse_opaque="false"
          name="create_inventory_name"
-         top_delta="0"
-         width="200" />
+         top_pad="2"
+         width="285" />
+        <text
+        text_color="EmphasisColor"
+         follows="left|top"
+         type="string"
+         halign="right"
+         height="34"
+         layout="topleft"
+         left="10"
+         name="string"
+         top_pad="15"
+         word_wrap="true"
+         width="150">
+            Drag here to attach something -- >
+        </text>
         <icon
-         height="16"
+         height="72"
+         image_name="DropTarget"
          layout="topleft"
-         left_delta="0"
-         name="create_inv_icon"
-         top_delta="0"
-         width="16" />
+         left_pad="10"
+         mouse_opaque="true"
+         name="drop_icon"
+         top_delta="-10"
+         width="72" />
         <button
          follows="left|top"
-         height="20"
-         font="SansSerifSmall"
-         label="Remove Attachment"
-         label_selected="Remove Attachment"
+         height="23"
+         label="Remove"
          layout="topleft"
-         left="10"
+         left="70"
          name="remove_attachment"
-         top_pad="10"
-         width="135" />
+         top_delta="45"
+         width="90" />
         <button
          follows="left|top"
-         height="20"
-         font="SansSerifSmall"
+         height="23"
          label="Send"
          label_selected="Send Notice"
          layout="topleft"
-         left_delta="138"
+         right="-10"
+         top_pad="20"
          name="send_notice"
-         top_delta="0"
-         width="125" />
-        <panel
-         bevel_style="in"
-         border="true"
-         height="71"
-         layout="topleft"
-         left="200"
-         name="drop_target2"
-         top="20"
-         width="71" />
-        <icon
-         height="59"
-         image_name="icon_groupnoticeinventory.tga"
-         layout="topleft"
-         left_delta="6"
-         mouse_opaque="true"
-         name="drop_icon"
-         top="26"
-         width="59" />
-        <group_drop_target
+         width="100" />
+      <group_drop_target
          height="466"
-         layout="topleft"
+         top="0"
          left="0"
+         layout="topleft"
          name="drop_target"
          tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice."
-         top="-198"
-         width="280" />
+         width="295" />
    </panel> 
     <panel
      follows="left|top"
-     height="268"
+     height="300"
      label="View Past Notice"
      layout="topleft"
      left="0"
+     visible="true"
      name="panel_view_past_notice"
-     top="197"
-     width="265">
+     top="180"
+     width="303">
         <text
          type="string"
          font="SansSerifBig"
@@ -294,9 +263,9 @@ the General tab.
          layout="topleft"
          left_delta="0"
          name="lbl2"
-         top_pad="4"
+         top_pad="2"
          width="265">
-            To send a new notice, click the &apos;New Notice&apos; button above.
+            To send a new notice, click the + button
         </text>
         <text
          type="string"
@@ -305,7 +274,7 @@ the General tab.
          layout="topleft"
          left_delta="0"
          name="lbl3"
-         top_pad="24"
+         top_pad="15"
          visible="false"
          width="60">
             Subject:
@@ -336,13 +305,13 @@ the General tab.
         </text>
         <text_editor
          enabled="false"
-         height="150"
+         height="205"
          layout="topleft"
          left="10"
          max_length="511"
          name="view_message"
          top_delta="-35"
-         width="260"
+         width="285"
          word_wrap="true" />
         <line_editor
          enabled="false"
@@ -353,7 +322,7 @@ the General tab.
          mouse_opaque="false"
          name="view_inventory_name"
          top_pad="10"
-         width="260" />
+         width="285" />
         <icon
          height="16"
          layout="topleft"
@@ -363,14 +332,12 @@ the General tab.
          width="16" />
         <button
          follows="left|top"
-         height="20"
-         font="SansSerifSmall"
-         label="Open Attachment"
-         label_selected="Open Attachment"
+         height="23"
+         label="Open attachment"
          layout="topleft"
-         left_delta="0"
+         right="-10"
          name="open_attachment"
-         top_pad="10"
+         top_pad="5"
          width="135" />
         </panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index e87859f788a..5ed464bcec8 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  border="false"
- height="412"
+ height="552"
  label="Members &amp; Roles"
  layout="topleft"
  left="0"
@@ -18,158 +18,28 @@
     </panel.string>
     <panel.string
      name="help_text" />
-    <!--<panel
-     follows="left|top"
-     height="80"
-     layout="topleft"
-     left="10"
-     name="members_header"
-     top_pad="10"
-     width="270">
-        <text
-         type="string"
-         font="SansSerifBig"
-         height="16"
-         layout="topleft"
-         left="0"
-         name="static"
-         top="0"
-         width="270">
-            Members &amp; Roles
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="40"
-         layout="topleft"
-         left_delta="0"
-         name="static2"
-         top_pad="4"
-         width="270">
-            Group Members are assigned Roles with Abilities. These settings can easily be customized, allowing for greater organization and flexibility.
-        </text>
-    </panel>
-    <panel
-     follows="left|top"
-     height="24"
-     layout="topleft"
-     left_delta="0"
-     name="roles_header"
-     top_delta="0"
-     visible="false"
-     width="270">
-        <text
-         type="string"
-         font="SansSerifBig"
-         height="16"
-         layout="topleft"
-         left="0"
-         name="static"
-         top="0"
-         width="270">
-            Roles
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="40"
-         layout="topleft"
-         left_delta="0"
-         name="role_properties_modifiable"
-         top_pad="4"
-         visible="false"
-         width="270">
-            Select a Role below.  You can modify its Name, Description and Member Title.
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="40"
-         layout="topleft"
-         left_delta="0"
-         name="role_properties_not_modifiable"
-         top_delta="0"
-         width="270">
-            Select a Role below to see its properties, Members and allowed Abilities.
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="16"
-         layout="topleft"
-         left_delta="0"
-         name="role_actions_modifiable"
-         top_delta="24"
-         visible="false"
-         width="270">
-            You can also assign Abilities to the Role.
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="16"
-         layout="topleft"
-         left_delta="0"
-         name="role_actions_not_modifiable"
-         top_delta="0"
-         width="270">
-            You may view, but not modify, assigned Abilities.
-        </text>
-    </panel>
-    <panel
-     follows="left|top"
-     height="24"
-     layout="topleft"
-     left_delta="0"
-     name="actions_header"
-     top_delta="0"
-     visible="false"
-     width="270">
-        <text
-         type="string"
-         font="SansSerifBig"
-         height="16"
-         layout="topleft"
-         left="0"
-         name="static"
-         top="0"
-         width="270">
-            Abilities
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="40"
-         layout="topleft"
-         left_delta="0"
-         name="static2"
-         top_pad="4"
-         width="270">
-            You can view an Ability&apos;s Description and which Roles and Members can execute the Ability.
-        </text>
-    </panel> -->
     <tab_container
-    border="true"
+    border="false"
      follows="left|top"
-     height="260"
+     height="245"
      halign="center"
      layout="topleft"
      left="5"
      name="roles_tab_container"
      tab_position="top"
      tab_height="20"
-     top="0"
+     tab_min_width="96"
+     top="3"
      width="303">
         <panel
          border="false"
-         height="260"
-         label="Members"
+         height="220"
+         label="MEMBERS"
          layout="topleft"
-         left="1"
+         left="0"
          help_topic="roles_members_tab"
          name="members_sub_tab"
          tool_tip="Members"
-         top="17"
          class="panel_group_members_subtab"
          width="300">
             <panel.string
@@ -187,8 +57,7 @@ clicking on their names.
          follows="left|top|right"
          max_length="250"
          label="Filter Members"
-         name="filter_input"
-         font="SansSerif" />
+         name="filter_input" />
           <!--  <button
              enabled="false"
              font="SansSerifSmall"
@@ -229,6 +98,7 @@ clicking on their names.
              font="SansSerifSmall"
              label="Invite"
              layout="topleft"
+             left="5"
              name="member_invite"
              top_pad="3"
              width="100" />
@@ -238,8 +108,10 @@ clicking on their names.
              label="Eject"
              layout="topleft"
              left_pad="5"
+             right="-5"
              name="member_eject"
              width="100" />
+             <!--What is this?-->
             <icon
              height="16"
              image_name="Inv_FolderClosed"
@@ -250,15 +122,14 @@ clicking on their names.
         </panel>
         <panel
          border="false"
-         height="164"
-         label="Roles"
+         height="220"
+         label="ROLES"
          layout="topleft"
-         left_delta="0"
+         left="0"
          help_topic="roles_roles_tab"
          name="roles_sub_tab"
          class="panel_group_roles_subtab"
-         top="17"
-         width="265">
+         width="300">
             <panel.string
              name="help_text">
                 Roles have a title and an allowed list of Abilities
@@ -282,40 +153,19 @@ including the Everyone and Owner Roles.
              name="power_partial_icon">
                 checkbox_enabled_false.tga
             </panel.string>
-            <filter_editor
-            layout="topleft"
-            top="10"
-            left="4"
-            width="260"
-            height="20"
-            follows="left|top|right"
-            max_length="250"
-            label="Filter Roles"
-            name="filter_input"
-            font="SansSerif" />
-            <!--<line_editor
-             border_style="line"
-             border_thickness="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="4"
-             max_length="63"
-             name="search_text"
-             top="10"
-             width="90" />
-            <button
-             font="SansSerifSmall"
-             height="20"
-             label="Search"
-             layout="topleft"
-             left_pad="5"
-             name="search_button"
-             top_delta="-2"
-             width="80" />
+         <filter_editor
+         layout="topleft"
+         top="10"
+         left="4"
+         width="280"
+         height="20"
+         follows="left|top|right"
+         max_length="250"
+         label="Filter Roles"
+         name="filter_input" />
+            <!--
             <button
              enabled="false"
-             font="SansSerifSmall"
              height="20"
              label="Show All"
              layout="topleft"
@@ -326,11 +176,13 @@ including the Everyone and Owner Roles.
             <scroll_list
              column_padding="0"
              draw_heading="true"
+             draw_stripes="false"
              follows="left|top"
              heading_height="20"
              height="150"
              layout="topleft"
-             left="4"
+             search_column="1"
+             left="0"
              name="role_list"
              top_pad="4"
              width="300">
@@ -352,7 +204,7 @@ including the Everyone and Owner Roles.
              font="SansSerifSmall"
              label="Add Role"
              layout="topleft"
-             left_delta="0"
+             left="5"
              name="role_create"
              top_pad="6"
              width="125" />
@@ -362,20 +214,20 @@ including the Everyone and Owner Roles.
              label="Delete Role"
              layout="topleft"
              left_pad="5"
+             right="-5"
              name="role_delete"
              top_delta="0"
              width="125" />
         </panel>
         <panel
          border="false"
-         height="164"
-         label="Abilities"
+         height="220"
+         label="ABILITIES"
          layout="topleft"
-         left_delta="0"
+         left="0"
          help_topic="roles_actions_tab"
          name="actions_sub_tab"
          class="panel_group_actions_subtab"
-         top="17"
          tool_tip="You can view an Ability&apos;s Description and which Roles and Members can execute the Ability."
          width="300">
             <panel.string
@@ -383,37 +235,17 @@ including the Everyone and Owner Roles.
                 Abilities allow Members in Roles to do specific
 things in this group. There&apos;s a broad variety of Abilities.
             </panel.string>
-            <filter_editor
-            layout="topleft"
-            top="10"
-            left="4"
-            width="255"
-            height="20"
-            follows="left|top|right"
-            max_length="250"
-            label="Filter Abilities"
-            name="filter_input"
-            font="SansSerif" />
-            <!--<line_editor
-             border_style="line"
-             border_thickness="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="4"
-             max_length="63"
-             name="search_text"
-             top="10"
-             width="90" />
-            <button
-             font="SansSerifSmall"
-             height="20"
-             label="Search"
-             layout="topleft"
-             left_pad="5"
-             name="search_button"
-             top_delta="-2"
-             width="80" />
+         <filter_editor
+         layout="topleft"
+         top="10"
+         left="4"
+         width="280"
+         height="20"
+         follows="left|top|right"
+         max_length="250"
+         label="Filter Abilities"
+         name="filter_input" />
+            <!--
             <button
              enabled="false"
              font="SansSerifSmall"
@@ -428,19 +260,19 @@ things in this group. There&apos;s a broad variety of Abilities.
              column_padding="0"
              draw_stripes="false"
              follows="left|top"
-             height="100"
+             height="160"
              layout="topleft"
-             left="6"
+             left="0"
              multi_select="true"
              name="action_list"
              search_column="1"
              tool_tip="Select an Ability to view more details"
              top_pad="6"
-             width="255">
+             width="300">
                 <scroll_list.columns
                  label=""
                  name="icon"
-                 width="18" />
+                 width="16" />
                 <scroll_list.columns
                  label=""
                  name="action"
@@ -448,7 +280,7 @@ things in this group. There&apos;s a broad variety of Abilities.
             </scroll_list>
             <icon
              height="16"
-             image_name="inv_folder_plain_closed.tga"
+             image_name="Inv_FolderClosed"
              layout="topleft"
              name="power_folder_icon"
              visible="false"
@@ -456,105 +288,93 @@ things in this group. There&apos;s a broad variety of Abilities.
         </panel>
     </tab_container>
     <panel
-     height="150"
+     height="252"
      layout="topleft"
      follows="left|top"
      left="10"
      name="members_footer"
-     top_pad="2"
+     top_pad="10"
+     top_delta="0"
      width="300">
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
          follows="left|top"
          left="0"
          name="static"
-         top_pad="0"
-         width="100">
+         top_pad="5"
+         width="295">
             Assigned Roles
         </text>
-        <text
-         type="string"
-         font="SansSerif"
-         height="16"
-         layout="topleft"
-         follows="left|top"
-         left_pad="35"
-         name="static2"
-         top_delta="0"
-         width="100">
-            Allowed Abilities
-        </text>
         <scroll_list
          draw_stripes="false"
          follows="left|top"
-         height="150"
+         height="80"
          layout="topleft"
          left="0"
          name="member_assigned_roles"
-         top_pad="5"
-         width="130">
+         top_pad="0"
+         width="295">
             <scroll_list.columns
              label=""
              name="checkbox"
-             width="18" />
+             width="30" />
             <scroll_list.columns
              label=""
              name="role"
-             width="107" />
+             width="265" />
         </scroll_list>
-        <scroll_list
-         draw_stripes="false"
-         height="150"
+                 <text
+         type="string"
+         height="16"
          layout="topleft"
          follows="left|top"
-         left_pad="5"
+         left="0"
+         name="static2"
+         top_pad="5"
+         width="295">
+            Allowed Abilities
+        </text>
+         <scroll_list
+         draw_stripes="false"
+         height="80"
+         layout="topleft"
+         left="0"
          name="member_allowed_actions"
+         search_column="2"
          tool_tip="For details of each allowed ability see the abilities tab"
-         top_delta="0"
-         width="130">
+         top_pad="0"
+         width="295">
             <scroll_list.columns
              label=""
              name="icon"
-             width="14" />
+             width="20" />
             <scroll_list.columns
              label=""
              name="action"
-             width="126" />
+             width="275" />
         </scroll_list>
     </panel>
     <panel
-     height="252"
+     height="297"
      layout="topleft"
-     left_delta="0"
+     left="10"
      name="roles_footer"
      top_delta="0"
+     top="245"
      visible="false"
-     width="270">
+     width="300">
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
          left="0"
          name="static"
          top="0"
-         width="100">
+         width="140">
             Name
         </text>
-        <text
-         type="string"
-         font="SansSerif"
-         height="16"
-         layout="topleft"
-         left_pad="35"
-         name="static2"
-         top_delta="0"
-         width="100">
-            Description
-        </text>
         <line_editor
          type="string"
          border_style="line"
@@ -563,21 +383,19 @@ things in this group. There&apos;s a broad variety of Abilities.
          height="20"
          layout="topleft"
          left="0"
-         max_length="20"
+         max_length="295"
          name="role_name"
          top_pad="0"
-         width="130">
+         width="295">
             Employees
         </line_editor>
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
-         left_delta="0"
          name="static3"
-         top_pad="10"
-         width="100">
+         top_pad="5"
+         width="295">
             Title
         </text>
         <line_editor
@@ -587,158 +405,159 @@ things in this group. There&apos;s a broad variety of Abilities.
          follows="left|top"
          height="20"
          layout="topleft"
-         left_delta="0"
-         max_length="20"
+         max_length="295"
          name="role_title"
          top_pad="0"
-         width="130">
-            (waiting)
+         width="295">
+          (waiting)
         </line_editor>
+                <text
+         type="string"
+         height="16"
+         layout="topleft"
+         left="0"
+         name="static2"
+         top_pad="5"
+         width="100">
+            Description
+        </text>
         <text_editor
          type="string"
          halign="left"
-         height="48"
+         height="35"
          layout="topleft"
-         left="135"
-         max_length="254"
+         left="0"
+         max_length="295"
          name="role_description"
-         top="16"
-         width="130"
+         top_pad="0"
+         width="295"
          word_wrap="true">
-            (waiting)
+          (waiting)
         </text_editor>
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
+         follows="left|top"
          left="0"
-         name="static4"
-         top="85"
-         width="120">
-            Assigned Members
-        </text>
-        <text
-         type="string"
-         font="SansSerif"
-         height="16"
-         layout="topleft"
-         left_pad="15"
-         name="static5"
-         tool_tip="A list of abilities the currently selected role can perform"
-         top_delta="0"
-         width="100">
-            Allowed Abilities
+         name="static"
+         top_pad="5"
+         width="295">
+            Assigned Roles
         </text>
         <name_list
          draw_stripes="false"
-         height="150"
+         height="50"
          layout="topleft"
          left="0"
          name="role_assigned_members"
          top_pad="0"
-         width="130" />
+         width="295" />
         <check_box
-         height="16"
-         label="Members are visible"
+         height="15"
+         label="Reveal members"
          layout="topleft"
-         left_delta="0"
          name="role_visible_in_list"
          tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group."
-         top_pad="10"
-         width="130" />
+         top_pad="3"
+         width="290" />
+         <text
+         type="string"
+         height="16"
+         layout="topleft"
+         follows="left|top"
+         left="0"
+         name="static2"
+         top_pad="5"
+         width="295">
+            Allowed Abilities
+        </text>
         <scroll_list
          draw_stripes="false"
-         height="150"
+         height="50"
          layout="topleft"
-         left="135"
+         left="0"
          name="role_allowed_actions"
          search_column="2"
          tool_tip="For details of each allowed ability see the abilities tab"
-         top="101"
-         width="130">
+         top_pad="0"
+         width="295">
             <scroll_list.columns
              label=""
              name="icon"
-             width="2" />
+             width="20" />
             <scroll_list.columns
              label=""
              name="checkbox"
-             width="16" />
+             width="20" />
             <scroll_list.columns
              label=""
              name="action"
-             width="220" />
+             width="250" />
         </scroll_list>
     </panel>
    <panel
-     height="215"
+     height="303"
      layout="topleft"
-     left_delta="0"
+     left="10"
      name="actions_footer"
      top_delta="0"
+     top="245"
      visible="false"
-     width="265">
+     width="300">
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
-         left="0"
          name="static"
-         top="0"
          width="200">
-            Description
+            Ability description
         </text>
         <text_editor
          type="string"
          enabled="false"
          halign="left"
-         height="48"
+         height="80"
          layout="topleft"
          left_delta="0"
          max_length="512"
          name="action_description"
          top_pad="0"
-         width="265"
+         width="295"
          word_wrap="true">
             This Ability is &apos;Eject Members from this Group&apos;. Only an Owner can eject another Owner.
         </text_editor>
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
          left_delta="0"
          name="static2"
-         top_pad="10"
-         width="125">
-            Roles with Ability
+         top_pad="5"
+         width="295">
+            Roles with this ability
         </text>
-        <text
+        <scroll_list
+         height="60"
+         layout="topleft"
+         left="0"
+         name="action_roles"
+         top_pad="0"
+         width="295" />
+                 <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
-         left_pad="10"
          name="static3"
-         top_delta="0"
-         width="125">
-            Members with Ability
+         top_pad="5"
+         width="295">
+            Members with this ability
         </text>
-        <scroll_list
-         height="150"
-         layout="topleft"
-         left="0"
-         name="action_roles"
-         top="90"
-         width="130" />
         <name_list
-         height="150"
+         height="100"
          layout="topleft"
-         left_pad="5"
          name="action_members"
-         top_delta="0"
-         width="130" />
+         top_pad="0"
+         width="295" />
     </panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index c4cdaa41f97..0dd38784263 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -1,30 +1,35 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel name="panel_im_control_panel"
-       width="125"
-       height="248"
+       width="128"
+       height="327"
        border="false">
 
   <avatar_icon name="avatar_icon"
-               width="96"
-               height="96" />
+               follows="left|top"
+               left_delta="3"
+               width="125"
+               height="125" />
 
   <button name="view_profile_btn"
+          follows="left|bottom"
           label="View Profile"
-          left_delta="3"
           width="125"
 		  height="20" />
 
   <button name="add_friend_btn"
+          follows="left|bottom"
           label="Add Friend"
           width="125"
           height="20" />
 
   <button name="call_btn"
+          follows="left|bottom"
           label="Call"
           width="125"
           height="20" />
 
     <button
+     follows="left|bottom"
      height="20"
      label="End Call"
      name="end_call_btn"
@@ -33,15 +38,27 @@
 
   <button
 	 enabled="false"
+     follows="left|bottom"
      name="voice_ctrls_btn"
      label="Open Voice Controls"
      width="125"
      height="20"
      visible="false"/>
 
+  <button name="teleport_btn"
+          follows="left|bottom"
+          label="Teleport"
+          width="125"
+          height="20" />
   <button name="share_btn"
+          follows="left|bottom"
           label="Share"
           width="125"
           height="20" />
+  <button name="pay_btn"
+          follows="left|bottom"
+          label="Pay"
+          width="125"
+          height="20" />
 
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
new file mode 100644
index 00000000000..03ba7f7c81f
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="570"
+ layout="topleft"
+ left="0"
+ min_height="350"
+ name="landmark_info"
+ top="20"
+ width="330">
+    <string
+     name="title_create_landmark"
+     value="Create Landmark" />
+    <string
+     name="title_edit_landmark"
+     value="Edit Landmark" />
+    <string
+     name="title_landmark"
+     value="Landmark" />
+    <string
+     name="not_available"
+     value="(N\A)" />
+    <string
+     name="unknown"
+     value="(unknown)" />
+    <string
+     name="public"
+     value="(public)" />
+    <string
+     name="server_update_text">
+        Place information not available without server update.
+    </string>
+    <string
+     name="server_error_text">
+        Information about this location is unavailable at this time, please try again later.
+    </string>
+    <string
+     name="server_forbidden_text">
+        Information about this location is unavailable due to access restrictions.  Please check your permissions with the parcel owner.
+    </string>
+    <string
+     name="acquired_date">
+        [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+    </string>
+    <button
+     follows="top|right"
+     height="23"
+     image_overlay="BackArrow_Off"
+     layout="topleft"
+     left="10"
+     name="back_btn"
+     picture_style="true"
+     tab_stop="false"
+     top="0"
+     width="23" />
+    <text
+     follows="top|left|right"
+     font="SansSerifHugeBold"
+     height="26"
+     layout="topleft"
+     left_pad="10"
+     name="title"
+     text_color="white"
+     top="0"
+     use_ellipses="true"
+     value="Place Profile"
+     width="275" />
+    <scroll_container
+     color="DkGray2"
+     follows="all"
+     height="533"
+     layout="topleft"
+     left="10"
+     name="place_scroll"
+     opaque="true"
+     top_pad="5"
+     width="313">
+        <panel
+         bg_alpha_color="DkGray2"
+         follows="all"
+         height="533"
+         layout="topleft"
+         left="0"
+         min_height="300"
+         name="scrolling_panel"
+         top="0"
+         width="313">
+            <texture_picker
+             enabled="false"
+             follows="top|left"
+             height="190"
+             layout="topleft"
+             left="10"
+             name="logo"
+             top="10"
+             width="290" />
+            <text
+             follows="left|top|right"
+             font="SansSerifLarge"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="region_title"
+             text_color="white"
+             top_pad="5"
+             use_ellipses="true"
+             value="SampleRegion"
+             width="290" />
+            <text
+             follows="left|top|right"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="parcel_title"
+             top_pad="4"
+             use_ellipses="true"
+             value="SampleParcel, Name Long (145, 228, 26)"
+             width="285" />
+            <expandable_text
+             follows="left|top|right"
+             height="50"
+             layout="topleft"
+             left="5"
+             name="description"
+             top_pad="10"
+             value="Du waltz die spritz"
+             width="300" />
+            <panel
+             follows="left|top|right"
+             height="55"
+             layout="topleft"
+             left="10"
+             name="landmark_info_panel"
+             top_pad="10"
+             width="290">
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="owner_label"
+                 top_pad="10"
+                 value="Owner:"
+                 width="90" />
+                <text
+                 follows="left|top|right"
+                 height="15"
+                 layout="topleft"
+                 left="70"
+                 name="owner"
+                 top_delta="0"
+                 width="200" />
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="creator_label"
+                 value="Creator:"
+                 width="90" />
+                <text
+                 follows="left|top|right"
+                 height="15"
+                 layout="topleft"
+                 left="70"
+                 name="creator"
+                 top_delta="0"
+                 width="200" />
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="created_label"
+                 value="Created:"
+                 width="50" />
+                <text
+                 follows="left|top|right"
+                 height="15"
+                 layout="topleft"
+                 left="70"
+                 name="created"
+                 top_delta="0"
+                 width="200" />
+            </panel>
+            <panel
+             follows="left|top|right"
+             height="210"
+             layout="topleft"
+             left="10"
+             name="landmark_edit_panel"
+             width="290">
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="title_label"
+                 top_pad="10"
+                 value="Title:"
+                 width="290" />
+                <line_editor
+                 background_image_disabled="task_panel_background.png"
+                 follows="left|top|right"
+                 height="22"
+                 layout="topleft"
+                 left="0"
+                 max_length="63"
+                 name="title_editor"
+                 prevalidate_callback="ascii"
+                 text_readonly_color="white"
+                 top_pad="5"
+                 width="290" />
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="notes_label"
+                 top_pad="10"
+                 value="My notes:"
+                 width="290" />
+                <text_editor
+                 bg_readonly_color="DkGray2"
+                 follows="all"
+                 height="70"
+                 layout="topleft"
+                 left="0"
+                 max_length="127"
+                 name="notes_editor"
+                 read_only="true"
+                 text_readonly_color="white"
+                 top_pad="5"
+                 width="290"
+                 wrap="true" />
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="folder_label"
+                 top_pad="15"
+                 value="Landmark location:"
+                 width="290" />
+                <combo_box
+                 follows="bottom|left|right"
+                 height="20"
+                 layout="topleft"
+                 left="0"
+                 name="folder_combo"
+                 top_pad="5"
+                 width="200" />
+            </panel>
+        </panel>
+    </scroll_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml
index 5293043ba7d..91fcf4b5f23 100644
--- a/indra/newview/skins/default/xui/en/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml
@@ -31,7 +31,7 @@
              left="0"
              mouse_opaque="true"
              name="favorites_list"
-             start_folder="favorite"
+             start_folder="Favorite"
              width="380"/>
         </accordion_tab>
         <accordion_tab
@@ -47,7 +47,7 @@
              left="0"
              mouse_opaque="true"
              name="landmarks_list"
-             start_folder="landmark"
+             start_folder="Landmarks"
              width="380"/>
         </accordion_tab>
         <accordion_tab
@@ -63,13 +63,13 @@
              left="0"
              mouse_opaque="true"
              name="my_inventory_list"
-             start_folder="inventory"
+             start_folder="INVENTORY"
              width="380"/>
-        </accordion_tab>
-        <accordion_tab
-         layout="topleft"
-         name="tab_library"
-         title="Library">
+          </accordion_tab>
+          <accordion_tab
+           layout="topleft"
+           name="tab_library"
+           title="Library">
             <inventory_subtree_panel
              allow_multi_select="true"
              border="true"
@@ -79,7 +79,7 @@
              left="0"
              mouse_opaque="true"
              name="library_list"
-             start_folder="library"
+             start_folder="LIBRARY"
              width="380"/>
         </accordion_tab>
     </accordion>
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
index 2182163da5b..555fedb1ffb 100644
--- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
@@ -42,13 +42,17 @@
      width="20" />
     <button
      follows="right"
+     is_toggle="true"
      width="45"
      top="0"
      layout="topleft"
      left_pad="8"
      label="Log"
      height="23"
+     name="show_nearby_chat"
      tool_tip="Show/hide nearby chat log">
-    <button.commit_callback function="Floater.Toggle" parameter="nearby_chat"/>
+        <button.init_callback
+           function="Button.SetDockableFloaterToggle"
+           parameter="nearby_chat" />
     </button>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index a67ae59b4a4..3cc9c3f38a0 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -30,7 +30,7 @@
      text_color="white"
      top="0"
      value="Pick Info"
-     use_elipsis="true"
+     use_ellipses="true"
      width="275" />
     <scroll_container
      color="DkGray2"
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
new file mode 100644
index 00000000000..7e073f064d7
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -0,0 +1,979 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="570"
+ layout="topleft"
+ left="0"
+ min_height="350"
+ name="place_profile"
+ top="20"
+ width="330">
+    <string
+     name="on"
+     value="On" />
+    <string
+     name="off"
+     value="Off" />
+    <string
+     name="anyone"
+     value="Anyone" />
+    <string
+     name="available"
+     value="available" />
+    <string
+     name="allocated"
+     value="allocated" />
+    <string
+     name="title_place"
+     value="Place Profile" />
+    <string
+     name="title_teleport_history"
+     value="Teleport History Location" />
+    <string
+     name="not_available"
+     value="(N\A)" />
+    <string
+     name="unknown"
+     value="(unknown)" />
+    <string
+     name="public"
+     value="(public)" />
+    <string
+     name="none_text"
+     value="(none)" />
+    <string
+     name="sale_pending_text"
+     value="(Sale Pending)" />
+    <string
+     name="group_owned_text"
+     value="(Group Owned)" />
+    <string
+     name="price_text"
+     value="L$" />
+    <string
+     name="area_text"
+     value="m²" />
+    <string
+     name="all_residents_text"
+     value="All Residents" />
+    <string
+     name="group_text"
+     value="Group" />
+    <string
+     name="can_resell">
+        Purchased land in this region may be resold.
+    </string>
+    <string
+     name="can_not_resell">
+        Purchased land in this region may not be resold.
+    </string>
+    <string
+     name="can_change">
+        Purchased land in this region may be joined or subdivided.
+    </string>
+    <string
+     name="can_not_change">
+        Purchased land in this region may not be joined or subdivided.
+    </string>
+    <string
+     name="server_update_text">
+        Place information not available without server update.
+    </string>
+    <string
+     name="server_error_text">
+        Information about this location is unavailable at this time, please try again later.
+    </string>
+    <string
+     name="server_forbidden_text">
+        Information about this location is unavailable due to access restrictions.  Please check your permissions with the parcel owner.
+    </string>
+    <string
+     name="acquired_date">
+        [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+    </string>
+    <button
+     follows="top|right"
+     height="23"
+     image_overlay="BackArrow_Off"
+     layout="topleft"
+     left="10"
+     name="back_btn"
+     picture_style="true"
+     tab_stop="false"
+     top="0"
+     width="23" />
+    <text
+     follows="top|left|right"
+     font="SansSerifHugeBold"
+     height="26"
+     layout="topleft"
+     left_pad="10"
+     name="title"
+     text_color="white"
+     top="0"
+     use_ellipses="true"
+     value="Place Profile"
+     width="275" />
+    <scroll_container
+     color="DkGray2"
+     follows="all"
+     height="533"
+     layout="topleft"
+     left="10"
+     name="place_scroll"
+     opaque="true"
+     top_pad="5"
+     width="313">
+        <panel
+         bg_alpha_color="DkGray2"
+         follows="all"
+         height="533"
+         layout="topleft"
+         left="0"
+         min_height="300"
+         name="scrolling_panel"
+         top="0"
+         value="&gt;"
+         width="313">
+            <texture_picker
+             enabled="false"
+             follows="top|left"
+             height="190"
+             layout="topleft"
+             left="10"
+             name="logo"
+             top="10"
+             width="290" />
+            <layout_stack
+             border_size="0"
+             clip="false"
+             follows="all"
+             height="50"
+             layout="topleft"
+             mouse_opaque="false"
+             name="panel_stack"
+             orientation="horizontal"
+             top_pad="-65"
+             width="100">
+                <layout_panel
+                 follows="left|right"
+                 height="50"
+                 layout="topleft"
+                 left="0"
+                 min_height="50"
+                 min_width="50"
+                 mouse_opaque="false"
+                 name="here_panel"
+                 top="0"
+                 user_resize="false"
+                 width="60">
+                    <icon
+                     follows="top|left"
+                     height="50"
+                     image_name="YouAreHere_Badge"
+                     layout="topleft"
+                     left="0"
+                     name="icon_you_are_here"
+                     top="0"
+                     width="50" />
+                </layout_panel>
+                <layout_panel
+                 follows="left|right"
+                 height="60"
+                 layout="topleft"
+                 min_height="50"
+                 min_width="60"
+                 mouse_opaque="false"
+                 name="for_sale_panel"
+                 top="0"
+                 user_resize="false"
+                 width="60">
+                    <icon
+                     follows="top|left"
+                     height="50"
+                     image_name="ForSale_Badge"
+                     layout="topleft"
+                     left="10"
+                     name="icon_for_sale"
+                     top="0"
+                     width="50" />
+                </layout_panel>
+            </layout_stack>
+            <text
+             follows="left|top|right"
+             font="SansSerifLarge"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="region_title"
+             text_color="white"
+             top_pad="5"
+             use_ellipses="true"
+             value="SampleRegion"
+             width="290" />
+       <!-- <icon
+             follows="top|right"
+             height="16"
+             image_name="Icon_For_Sale"
+             layout="topleft"
+             left="3"
+             mouse_opaque="true"
+             name="icon_for_sale"
+             width="16" />-->
+            <text
+             follows="left|top|right"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="parcel_title"
+             top_pad="4"
+             use_ellipses="true"
+             value="SampleParcel, Name Long (145, 228, 26)"
+             width="285" />
+            <expandable_text
+             follows="left|top|right"
+             height="50"
+             layout="topleft"
+             left="5"
+             name="description"
+             top_pad="10"
+             value="Du waltz die spritz"
+             width="300" />
+            <text
+             follows="left|top"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="owner_label"
+             text_color="White"
+             top_pad="0"
+             value="Owner:"
+             width="90" />
+         <!--TODO: HOOK THIS NAME UP WITH AN INSPECTOR  -->
+            <text
+             follows="left|top|right"
+             height="14"
+             layout="topleft"
+             left_pad="1"
+             name="owner_value"
+             top_delta="0"
+             value="Alex Superduperlongenamenton"
+             width="205" />
+            <accordion
+             follows="all"
+             height="230"
+             layout="topleft"
+             left="0"
+             name="advanced_info_accordion"
+             top_pad="10"
+             width="313">
+                <accordion_tab
+                 layout="topleft"
+                 name="parcel_characteristics_tab"
+                 title="Parcel">
+                    <scroll_container
+                     color="DkGray2"
+                     follows="all"
+                     height="132"
+                     layout="topleft"
+                     left="0"
+                     name="parcel_scroll"
+                     opaque="true"
+                     top="0"
+                     width="290">
+                        <panel
+                         follows="all"
+                         height="165"
+                         layout="topleft"
+                         left="0"
+                         top="0"
+                         width="275">
+                            <icon
+                             follows="top|left"
+                             height="16"
+                             image_name="parcel_drk_M"
+                             layout="topleft"
+                             left="20"
+                             name="icon_M"
+                             top="0"
+                             width="18" />
+                            <icon
+                             follows="top|left"
+                             height="16"
+                             image_name="parcel_drk_R"
+                             layout="topleft"
+                             left="20"
+                             name="icon_R"
+                             top="0"
+                             width="18" />
+                            <icon
+                             follows="top|left"
+                             height="16"
+                             image_name="parcel_drk_PG"
+                             layout="topleft"
+                             left="20"
+                             name="icon_PG"
+                             top="0"
+                             visible="false"
+                             width="18" />
+                            <text
+                             follows="left|top"
+                             height="16"
+                             layout="topleft"
+                             left_pad="8"
+                             name="rating_label"
+                             value="Rating:"
+                             width="80" />
+                            <text
+                             follows="right|top"
+                             height="16"
+                             layout="topleft"
+                             left_pad="0"
+                             name="rating_value"
+                             top_delta="0"
+                             value="Mature"
+                             width="120" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Voice"
+                             layout="topleft"
+                             left="20"
+                             name="icon_Voice"
+                             top_pad="5"
+                             width="22" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_VoiceNo"
+                             layout="topleft"
+                             left="20"
+                             name="icon_VoiceNo"
+                             top_delta="0"
+                             visible="false"
+                             width="22" />
+                            <text
+                             follows="left|top"
+                             height="18"
+                             layout="topleft"
+                             left_pad="8"
+                             name="voice_label"
+                             top_delta="0"
+                             value="Voice:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="18"
+                             layout="topleft"
+                             left_pad="0"
+                             name="voice_value"
+                             top_delta="0"
+                             value="On"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Fly"
+                             layout="topleft"
+                             left="20"
+                             name="icon_Fly"
+                             top_pad="3"
+                             width="22" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_FlyNo"
+                             layout="topleft"
+                             left="20"
+                             name="icon_FlyNo"
+                             top_delta="0"
+                             visible="false"
+                             width="22" />
+                            <text
+                             follows="left|top"
+                             height="16"
+                             layout="topleft"
+                             left_pad="8"
+                             name="fly_label"
+                             value="Fly:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="16"
+                             layout="topleft"
+                             left_pad="0"
+                             name="fly_value"
+                             top_delta="0"
+                             value="On"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Push"
+                             layout="topleft"
+                             left="20"
+                             name="icon_Push"
+                             top_pad="3"
+                             visible="false"
+                             width="22" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_PushNo"
+                             layout="topleft"
+                             left="20"
+                             name="icon_PushNo"
+                             top_delta="0"
+                             width="22" />
+                            <text
+                             follows="left|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="8"
+                             name="push_label"
+                             value="Push:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="0"
+                             name="push_value"
+                             top_delta="0"
+                             value="Off"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Build"
+                             layout="topleft"
+                             left="20"
+                             name="icon_Build"
+                             top_pad="3"
+                             width="22" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_BuildNo"
+                             layout="topleft"
+                             left="20"
+                             name="icon_BuildNo"
+                             top_delta="0"
+                             visible="false" />
+                            <text
+                             follows="left|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="8"
+                             name="build_label"
+                             value="Build:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="15"
+                             layout="topleft"
+                             left_pad="0"
+                             name="build_value"
+                             top_delta="0"
+                             value="On"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Scripts"
+                             layout="topleft"
+                             left="20"
+                             name="icon_Scripts"
+                             top_pad="3"
+                             width="22" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_ScriptsNo"
+                             layout="topleft"
+                             left="20"
+                             name="icon_ScriptsNo"
+                             top_delta="0"
+                             visible="false" />
+                            <text
+                             follows="left|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="8"
+                             name="scripts_label"
+                             value="Scripts:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="0"
+                             name="scripts_value"
+                             top_delta="0"
+                             value="On"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Damage"
+                             layout="topleft"
+                             left="20"
+                             name="icon_Damage"
+                             top_pad="7"
+                             visible="false"
+                             width="22" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_DamageNo"
+                             layout="topleft"
+                             left="20"
+                             name="icon_DamageNo"
+                             top_delta="0" />
+                            <text
+                             follows="left|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="8"
+                             name="damage_label"
+                             value="Damage:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="0"
+                             name="damage_value"
+                             top_delta="0"
+                             value="Off"
+                             width="60" />
+                            <button
+                             follows="bottom|right"
+                             height="19"
+                             label="About Land"
+                             layout="topleft"
+                             name="about_land_btn"
+                             right="-5"
+                             tab_stop="false"
+                             top="138"
+                             width="90">
+                                <click_callback
+                                 function="ShowFloater"
+                                 parameter="about_land" />
+                            </button>
+                        </panel>
+                    </scroll_container>
+                </accordion_tab>
+                <accordion_tab
+                 expanded="false"
+                 layout="topleft"
+                 name="region_information_tab"
+                 title="Region">
+                    <panel
+                     follows="all"
+                     height="125"
+                     layout="topleft"
+                     left="0"
+                     top="0"
+                     width="290">
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_name_label"
+                         top_pad="5"
+                         value="Region:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_name"
+                         top_delta="0"
+                         value="Mooseland"
+                         width="195" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_type_label"
+                         top_pad="5"
+                         value="Type:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_type"
+                         top_delta="0"
+                         value="Moose"
+                         width="195" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_rating_label"
+                         top_pad="7"
+                         value="Rating:"
+                         width="80" />
+                        <icon
+                         follows="top|left"
+                         height="16"
+                         image_name="parcel_drk_M"
+                         layout="topleft"
+                         left_pad="0"
+                         name="icon_M"
+                         width="18" />
+                        <icon
+                         follows="top|left"
+                         height="16"
+                         image_name="parcel_drk_R"
+                         layout="topleft"
+                         left_delta="0"
+                         name="icon_R"
+                         top_delta="0"
+                         visible="false"
+                         width="18" />
+                        <icon
+                         follows="top|left"
+                         height="16"
+                         image_name="parcel_drk_PG"
+                         layout="topleft"
+                         left_delta="0"
+                         name="icon_PG"
+                         top_delta="0"
+                         visible="false"
+                         width="18" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="10"
+                         name="region_rating"
+                         value="Explicit"
+                         width="100" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_owner_label"
+                         top_pad="5"
+                         value="Owner:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_owner"
+                         top_delta="0"
+                         value="moose Van Moose"
+                         width="195" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_group_label"
+                         top_pad="5"
+                         value="Group:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_group"
+                         top_delta="0"
+                         use_ellipses="true"
+                         width="195">
+                            The Mighty Moose of mooseville soundvillemoose
+                        </text>
+                        <button
+                         follows="bottom|right"
+                         height="19"
+                         label="Region/Estate"
+                         layout="topleft"
+                         name="region_info_btn"
+                         right="-5"
+                         tab_stop="false"
+                         width="105">
+                            <click_callback
+                             function="ShowFloater"
+                             parameter="region_info" />
+                        </button>
+                    </panel>
+                </accordion_tab>
+                <accordion_tab
+                 expanded="false"
+                 layout="topleft"
+                 name="estate_information_tab"
+                 title="Estate">
+                    <panel
+                     follows="all"
+                     height="189"
+                     layout="topleft"
+                     left="0"
+                     top="0"
+                     width="290">
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="estate_name_label"
+                         top_pad="5"
+                         value="Estate:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="90"
+                         name="estate_name"
+                         top_delta="0"
+                         width="160" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="estate_rating_label"
+                         top_pad="5"
+                         value="Rating:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="90"
+                         name="estate_rating"
+                         top_delta="0"
+                         width="160" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="estate_owner_label"
+                         top_pad="5"
+                         value="Owner:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="90"
+                         name="estate_owner"
+                         top_delta="0"
+                         width="160" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="covenant_label"
+                         top_pad="5"
+                         value="Covenant:"
+                         width="220" />
+                        <text_editor
+                         bg_focus_color="DkGray2"
+                         bg_readonly_color="DkGray2"
+                         follows="left|top|right"
+                         handle_edit_keys_directly="true"
+                         height="90"
+                         layout="topleft"
+                         left="10"
+                         max_length="65535"
+                         name="covenant"
+                         read_only="true"
+                         top_pad="0"
+                         width="280" />
+                    </panel>
+                </accordion_tab>
+                <accordion_tab
+                 expanded="false"
+                 layout="topleft"
+                 name="sales_tab"
+                 title="For Sale">
+                    <panel
+                     follows="all"
+                     height="300"
+                     layout="topleft"
+                     left="0"
+                     top="0"
+                     width="290">
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="sales_price_label"
+                         top_pad="5"
+                         value="Price:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="sales_price"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="area_label"
+                         top_pad="5"
+                         value="Area:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="area"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="traffic_label"
+                         top_pad="5"
+                         value="Traffic:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="traffic"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="primitives_label"
+                         top_pad="5"
+                         value="Primitives:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="primitives"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="parcel_scripts_label"
+                         top_pad="5"
+                         value="Scripts:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="parcel_scripts"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="terraform_limits_label"
+                         top_pad="5"
+                         value="Terraform limits:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="terraform_limits"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="subdivide_label"
+                         top_pad="5"
+                         value="Subdivide/Join ability:"
+                         width="220" />
+                        <text_editor
+                         bg_focus_color="DkGray2"
+                         bg_readonly_color="DkGray2"
+                         follows="left|top|right"
+                         height="45"
+                         layout="topleft"
+                         left="10"
+                         max_length="65535"
+                         name="subdivide"
+                         read_only="true"
+                         top_pad="5"
+                         width="245" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="resale_label"
+                         top_pad="5"
+                         value="ReSale ability:"
+                         width="80" />
+                        <text_editor
+                         bg_focus_color="DkGray2"
+                         bg_readonly_color="DkGray2"
+                         follows="left|top|right"
+                         height="45"
+                         layout="topleft"
+                         left="10"
+                         max_length="65535"
+                         name="resale"
+                         read_only="true"
+                         top_pad="5"
+                         width="245" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="sale_to_label"
+                         top_pad="5"
+                         value="For sale to:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="90"
+                         name="sale_to"
+                         top_delta="0"
+                         width="160" />
+                    </panel>
+                </accordion_tab>
+            </accordion>
+        </panel>
+    </scroll_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 5aa53ab46b1..87ac5be74a1 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -40,14 +40,26 @@ background_visible="true"
      top_pad="10"
      width="313" />
     <panel
-     class="panel_place_info"
-     filename="panel_place_info.xml"
+     class="panel_place_profile"
+     filename="panel_place_profile.xml"
      follows="all"
      height="533"
      layout="topleft"
      left="0"
      help_topic="places_info_tab"
-     name="panel_place_info"
+     name="panel_place_profile"
+     top="5"
+     visible="false"
+     width="313" />
+    <panel
+     class="panel_landmark_info"
+     filename="panel_landmark_info.xml"
+     follows="all"
+     height="533"
+     layout="topleft"
+     left="0"
+     help_topic="places_info_tab"
+     name="panel_landmark_info"
      top="5"
      visible="false"
      width="313" />
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index 5af7d7d6744..c3a92f9d9ae 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -157,7 +157,7 @@
          value="http://librarianavengers.org"
          width="280"
          word_wrap="false"
-         use_elipsis="true"
+         use_ellipses="true"
          />
         <text
          follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 195b7315313..4b2e901718e 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -36,7 +36,7 @@
      text_color="white"
      top="0"
      value="(Loading...)"
-     use_elipsis="true"
+     use_ellipses="true"
      width="275" />
     <text
      follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
index ab4ad940893..6171be034f4 100644
--- a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
@@ -15,14 +15,14 @@
                           image_disabled_selected="ComboButton_Disabled_Selected" />
   <gesture_combo_box.drop_down_button name="Drop Down Button"
                               label=""
+                              halign="center"
                               hover_glow_amount="0.15"
                               font="SansSerif"
                               scale_image="true"
-                              pad_right="24"
-                              image_unselected="DropDown_Off"
-                              image_selected="DropDown_Selected"
-                              image_disabled="DropDown_Disabled"
-                              image_disabled_selected="DropDown_Disabled_Selected" />
+                              image_unselected="PushButton_Off"
+                              image_selected="PushButton_Selected"
+                              image_disabled="PushButton_Disabled"
+                              image_disabled_selected="PushButton_Selected_Disabled" />
   <gesture_combo_box.combo_list bg_writeable_color="MenuDefaultBgColor"
                                 scroll_bar_bg_visible="true" />
   <gesture_combo_box.combo_editor name="Combo Text Entry"
diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
new file mode 100644
index 00000000000..725492052ca
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- Derives from LLUICtrl -->
+<talk_button>
+  <!-- To make speak button look green when selected set:
+    image_selected="SegmentedBtn_Left_Selected"
+    image_unselected="SegmentedBtn_Left_Off"
+  -->
+  <speak_button
+    name="left"
+    label="Speak"
+    label_selected="Speak"
+    font="SansSerifSmall"
+    tab_stop="false"
+    is_toggle="true"
+    picture_style="true"
+    />
+  <show_button
+    name="right"
+    label=""
+    left="0"
+    top="0"
+    right="20"
+    bottom="0"
+    tab_stop="false"
+    is_toggle="true"
+    picture_style="true"
+    image_selected="ComboButton_Selected"
+    image_unselected="ComboButton_Off"
+    />
+  <monitor
+    name="monitor"
+    left="0"
+    top="18"
+    right="18"
+    bottom="0"
+    />
+</talk_button>
-- 
GitLab


From dc365be4d23d8070a4f9e670918dbe8ccbe8cc79 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 4 Nov 2009 18:03:04 -0500
Subject: [PATCH 140/306] For EXT-1985: Clothing previously taken off is
 re-worn when creating a new clothing item in appearance mode.

General problem with failing to update the COF when clothing items were removed.  Added hook in removeWearableFinal, which should guarantee that we're always removing clothing links when we need to.
---
 indra/newview/llagentwearables.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 4b3d27767c8..7d215b57781 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -1393,6 +1393,7 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem
 			const LLUUID &item_id = getWearableItemID(type,i);
 			popWearable(type,i);
 			gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+			LLAppearanceManager::removeItemLinks(item_id,false);
 
 			//queryWearableCache(); // moved below
 			if (old_wearable)
@@ -1409,6 +1410,7 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem
 		const LLUUID &item_id = getWearableItemID(type,index);
 		popWearable(type, index);
 		gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+		LLAppearanceManager::removeItemLinks(item_id,false);
 
 		//queryWearableCache(); // moved below
 
-- 
GitLab


From 0520ad677a380e81f6d166bfbcbed23333533b77 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 4 Nov 2009 15:06:56 -0800
Subject: [PATCH 141/306] EXT-1739   	 Preferences > Sounds > Device
 settings -- Input/Output controls don't work EXT-2073   	 Need ability
 to change font style of tab headers EXT-1505   	 Kill text drop shadow
 on Menu and Tabs reviewed by Richard

---
 indra/llui/llmenugl.cpp                       | 24 +++---------
 indra/llui/lltabcontainer.cpp                 |  4 +-
 .../newview/llfloatervoicedevicesettings.cpp  | 17 +++++++++
 indra/newview/llfloatervoicedevicesettings.h  |  2 +
 .../xui/en/panel_preferences_sound.xml        | 37 ++++++++++++-------
 .../default/xui/en/widgets/tab_container.xml  |  1 +
 6 files changed, 52 insertions(+), 33 deletions(-)

diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 91e7e46195d..36d8e5ed715 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -459,12 +459,6 @@ void LLMenuItemGL::draw( void )
 
 	LLColor4 color;
 
-	LLFontGL::ShadowType shadow_style = LLFontGL::NO_SHADOW;
-	if (getEnabled() && !mDrawTextDisabled )
-	{
-		shadow_style = LLFontGL::DROP_SHADOW_SOFT;
-	}
-
 	if ( getEnabled() && getHighlight() )
 	{
 		color = mHighlightForeground.get();
@@ -482,26 +476,26 @@ void LLMenuItemGL::draw( void )
 	if (mBriefItem)
 	{
 		mFont->render( mLabel, 0, BRIEF_PAD_PIXELS / 2, 0, color,
-					   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, shadow_style );
+					   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL);
 	}
 	else
 	{
 		if( !mDrawBoolLabel.empty() )
 		{
 			mFont->render( mDrawBoolLabel.getWString(), 0, (F32)LEFT_PAD_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color,
-						   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, shadow_style, S32_MAX, S32_MAX, NULL, FALSE );
+						   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
 		}
 		mFont->render( mLabel.getWString(), 0, (F32)LEFT_PLAIN_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color,
-					   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, shadow_style, S32_MAX, S32_MAX, NULL, FALSE );
+					   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
 		if( !mDrawAccelLabel.empty() )
 		{
 			mFont->render( mDrawAccelLabel.getWString(), 0, (F32)getRect().mRight - (F32)RIGHT_PLAIN_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color,
-						   LLFontGL::RIGHT, LLFontGL::BOTTOM, LLFontGL::NORMAL, shadow_style, S32_MAX, S32_MAX, NULL, FALSE );
+						   LLFontGL::RIGHT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
 		}
 		if( !mDrawBranchLabel.empty() )
 		{
 			mFont->render( mDrawBranchLabel.getWString(), 0, (F32)getRect().mRight - (F32)RIGHT_PAD_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color,
-						   LLFontGL::RIGHT, LLFontGL::BOTTOM, LLFontGL::NORMAL, shadow_style, S32_MAX, S32_MAX, NULL, FALSE );
+						   LLFontGL::RIGHT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
 		}
 	}
 
@@ -1460,12 +1454,6 @@ void LLMenuItemBranchDownGL::draw( void )
 		gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0 );
 	}
 
-	LLFontGL::ShadowType shadow_style = LLFontGL::NO_SHADOW;
-	if (getEnabled() && !getDrawTextDisabled() )
-	{
-		shadow_style = LLFontGL::DROP_SHADOW_SOFT;
-	}
-
 	LLColor4 color;
 	if (getHighlight())
 	{
@@ -1480,7 +1468,7 @@ void LLMenuItemBranchDownGL::draw( void )
 		color = mDisabledColor.get();
 	}
 	getFont()->render( mLabel.getWString(), 0, (F32)getRect().getWidth() / 2.f, (F32)LABEL_BOTTOM_PAD_PIXELS, color,
-				   LLFontGL::HCENTER, LLFontGL::BOTTOM, LLFontGL::NORMAL, shadow_style );
+				   LLFontGL::HCENTER, LLFontGL::BOTTOM, LLFontGL::NORMAL);
 
 
 	// underline navigation key only when keyboard navigation has been initiated
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index cde4c755184..04c57dcb4e1 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -155,7 +155,7 @@ LLTabContainer::LLTabContainer(const LLTabContainer::Params& p)
 	mTotalTabWidth(0),
 	mTabPosition(p.tab_position),
 	mFontHalign(p.font_halign),
-	mFont(p.font.isProvided() ? p.font() : (mIsVertical ? LLFontGL::getFontSansSerif() : LLFontGL::getFontSansSerifSmall())),
+	mFont(p.font),
 	mFirstTabParams(p.first_tab),
 	mMiddleTabParams(p.middle_tab),
 	mLastTabParams(p.last_tab)
@@ -946,6 +946,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
 			p.scale_image(true);
 			p.font_halign = mFontHalign;
 			p.tab_stop(false);
+			p.label_shadow(false);
 			if (indent)
 			{
 				p.pad_left(indent);
@@ -965,6 +966,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
 			p.image_unselected(tab_img);
 			p.image_selected(tab_selected_img);
 			p.tab_stop(false);
+			p.label_shadow(false);
 			// Try to squeeze in a bit more text
 			p.pad_left(4);
 			p.pad_right(2);
diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp
index aca9198f59a..bbeb2871714 100644
--- a/indra/newview/llfloatervoicedevicesettings.cpp
+++ b/indra/newview/llfloatervoicedevicesettings.cpp
@@ -49,6 +49,9 @@
 #include "lluictrlfactory.h"
 
 
+static LLRegisterPanelClassWrapper<LLPanelVoiceDeviceSettings> t_panel_group_general("panel_voice_device_settings");
+
+
 LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings()
 	: LLPanel()
 {
@@ -82,8 +85,22 @@ BOOL LLPanelVoiceDeviceSettings::postBuild()
 	return TRUE;
 }
 
+// virtual
+void LLPanelVoiceDeviceSettings::handleVisibilityChange ( BOOL new_visibility )
+{
+	if (new_visibility)
+	{
+		initialize();	
+	}
+	else
+	{
+		cleanup();
+	}
+}
 void LLPanelVoiceDeviceSettings::draw()
 {
+	refresh();
+
 	// let user know that volume indicator is not yet available
 	bool is_in_tuning_mode = gVoiceClient->inTuningMode();
 	childSetVisible("wait_text", !is_in_tuning_mode);
diff --git a/indra/newview/llfloatervoicedevicesettings.h b/indra/newview/llfloatervoicedevicesettings.h
index f1603dc4144..d67283d0a22 100644
--- a/indra/newview/llfloatervoicedevicesettings.h
+++ b/indra/newview/llfloatervoicedevicesettings.h
@@ -50,6 +50,8 @@ class LLPanelVoiceDeviceSettings : public LLPanel
 	void initialize();
 	void cleanup();
 
+	/*virtual*/ void handleVisibilityChange ( BOOL new_visibility );
+	
 protected:
 	static void onCommitInputDevice(LLUICtrl* ctrl, void* user_data);
 	static void onCommitOutputDevice(LLUICtrl* ctrl, void* user_data);
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index 832c9775ce2..c1df7bd5013 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -336,19 +336,20 @@
          top_delta="19"
          width="200" />
     </radio_group>
-    <button
-     control_name="ShowDeviceSettings"
-     follows="left|bottom"
-     height="19"
-     is_toggle="true"
-     label="Input / Output  Devices"
-     layout="topleft"
-     left="165"
-     top_pad="12"
-     name="device_settings_btn"
-     width="190" />
+  <button
+   control_name="ShowDeviceSettings"
+   follows="left|bottom"
+   height="19"
+   is_toggle="true"
+   label="Input / Output  Devices"
+   layout="topleft"
+   left="165"
+   top_pad="12"
+   name="device_settings_btn"
+   width="190">
+  </button>
     <panel
-    background_visible="true"
+     background_visible="true"
      bg_alpha_color="DkGray"
      visiblity_control="ShowDeviceSettings"
      border="false"
@@ -357,8 +358,13 @@
      label="DeviceSettings"
      layout="topleft"
      left="0"
-     name="Device Settings"
+     name="device_settings_panel"
+     class="panel_voice_device_settings"
      width="501">
+      <panel.string
+        name="default_text">
+        Default
+      </panel.string>
       <icon
              height="18"
              image_name="Microphone_On"
@@ -382,6 +388,7 @@
     </text>
     <combo_box
      height="19"
+     control_name="VoiceInputAudioDevice"
      layout="topleft"
      left="165"
      max_chars="128"
@@ -400,7 +407,8 @@
      width="200">
         My volume:
     </text>
-      <slider
+      <slider_bar
+        control_name="AudioLevelMic" 
      follows="left|top"
      height="17"
      increment="0.05"
@@ -492,6 +500,7 @@
         Output
     </text>
     <combo_box
+     control_name="VoiceOutputAudioDevice"
      height="19"
      layout="topleft"
      left="165"
diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml
index fe2f1423b74..f1401140deb 100644
--- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml
+++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml
@@ -2,6 +2,7 @@
 <tab_container tab_min_width="60"
                tab_max_width="150"
                font_halign="center"
+               font="SansSerif" 
                tab_height="21">
   <first_tab tab_top_image_unselected="TabTop_Left_Off"
                tab_top_image_selected="TabTop_Left_Selected"
-- 
GitLab


From 5c2d187d6fb296876c2c3cba5817c749598f4283 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 4 Nov 2009 18:58:27 -0500
Subject: [PATCH 142/306] Small cleanup in LLAgentWearables.cpp

---
 indra/newview/llagentwearables.cpp |   6 +-
 indra/newview/llagentwearables.h   |   6 +-
 indra/newview/llviewermenu.cpp     | 102 +++--------------------------
 3 files changed, 15 insertions(+), 99 deletions(-)

diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 7d215b57781..d8aca860d58 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -1724,10 +1724,8 @@ void LLAgentWearables::queryWearableCache()
 // MULTI_WEARABLE: need a way to specify by wearable rather than by type.
 // User has picked "remove from avatar" from a menu.
 // static
-void LLAgentWearables::userRemoveWearable(void* userdata)
+void LLAgentWearables::userRemoveWearable(EWearableType& type)
 {
-	EWearableType type = (EWearableType)(intptr_t)userdata;
-	
 	if (!(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR)) //&&
 		//!((!gAgent.isTeen()) && (type==WT_UNDERPANTS || type==WT_UNDERSHIRT)))
 	{
@@ -1737,7 +1735,7 @@ void LLAgentWearables::userRemoveWearable(void* userdata)
 }
 
 // static
-void LLAgentWearables::userRemoveAllClothes(void* userdata)
+void LLAgentWearables::userRemoveAllClothes()
 {
 	// We have to do this up front to avoid having to deal with the case of multiple wearables being dirty.
 	if (gFloaterCustomize)
diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h
index 97de785c871..317f4a7e4fb 100644
--- a/indra/newview/llagentwearables.h
+++ b/indra/newview/llagentwearables.h
@@ -191,9 +191,9 @@ class LLAgentWearables
 	//--------------------------------------------------------------------
 public:
 	// MULTI-WEARABLE: assuming one wearable per type.  Need upstream changes.
-	static void		userRemoveWearable(void* userdata);	// userdata is EWearableType
-	static void		userRemoveAllClothes(void* userdata);	// userdata is NULL
-
+	static void		userRemoveWearable(EWearableType& type);
+	static void		userRemoveAllClothes();	
+	
 	typedef std::vector<LLViewerObject*> llvo_vec_t;
 
 	static void 	userUpdateAttachments(LLInventoryModel::item_array_t& obj_item_array);
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 23ceb1e72d9..c85ed46cd60 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7461,52 +7461,10 @@ class LLEditEnableTakeOff : public view_listener_t
 	bool handleEvent(const LLSD& userdata)
 	{
 		std::string clothing = userdata.asString();
-		bool new_value = false;
-		if (clothing == "shirt")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_SHIRT);
-		}
-		if (clothing == "pants")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_PANTS);
-		}
-		if (clothing == "shoes")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_SHOES);
-		}
-		if (clothing == "socks")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_SOCKS);
-		}
-		if (clothing == "jacket")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_JACKET);
-		}
-		if (clothing == "gloves")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_GLOVES);
-		}
-		if (clothing == "undershirt")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_UNDERSHIRT);
-		}
-		if (clothing == "underpants")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_UNDERPANTS);
-		}
-		if (clothing == "skirt")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_SKIRT);
-		}
-		if (clothing == "alpha")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_ALPHA);
-		}
-		if (clothing == "tattoo")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_TATTOO);
-		}
-		return new_value;
+		EWearableType type = LLWearableDictionary::typeNameToType(clothing);
+		if (type >= WT_SHAPE && type < WT_COUNT)
+			return LLAgentWearables::selfHasWearable(type);
+		return false;
 	}
 };
 
@@ -7515,53 +7473,13 @@ class LLEditTakeOff : public view_listener_t
 	bool handleEvent(const LLSD& userdata)
 	{
 		std::string clothing = userdata.asString();
-		if (clothing == "shirt")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_SHIRT);
-		}
-		else if (clothing == "pants")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_PANTS);
-		}
-		else if (clothing == "shoes")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_SHOES);
-		}
-		else if (clothing == "socks")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_SOCKS);
-		}
-		else if (clothing == "jacket")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_JACKET);
-		}
-		else if (clothing == "gloves")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_GLOVES);
-		}
-		else if (clothing == "undershirt")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_UNDERSHIRT);
-		}
-		else if (clothing == "underpants")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_UNDERPANTS);
-		}
-		else if (clothing == "skirt")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_SKIRT);
-		}
-		else if (clothing == "alpha")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_ALPHA);
-		}
-		else if (clothing == "tattoo")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_TATTOO);
-		}
-		else if (clothing == "all")
+		if (clothing == "all")
+			LLAgentWearables::userRemoveAllClothes();
+		else
 		{
-			LLAgentWearables::userRemoveAllClothes(NULL);
+			EWearableType type = LLWearableDictionary::typeNameToType(clothing);
+			if (type >= WT_SHAPE && type < WT_COUNT)
+				LLAgentWearables::userRemoveWearable(type);
 		}
 		return true;
 	}
-- 
GitLab


From 0bd2567bf5648808a95c7826581199bb371597cb Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Wed, 4 Nov 2009 15:59:04 -0800
Subject: [PATCH 143/306] Fix for DEV-42076 (media controls should not fade out
 while mouse is hovered over them).

Updated LLPanelPrimMediaControls::isMouseOver() to do the right thing with the new structure of the panel.
---
 indra/newview/llpanelprimmediacontrols.cpp | 33 +++++++++++++---------
 1 file changed, 20 insertions(+), 13 deletions(-)

diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 58ca481b77b..0b2a7e8756b 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -691,24 +691,31 @@ bool LLPanelPrimMediaControls::isMouseOver()
 		getWindow()->getCursorPosition(&cursor_pos_window);
 		getWindow()->convertCoords(cursor_pos_window, &cursor_pos_gl);
 		
-		LLPanel* controls_panel = NULL;
-		controls_panel = getChild<LLPanel>("media_hover_controls");
-		if(controls_panel && !controls_panel->getVisible())
-		{
-			// The hover controls aren't visible -- use the focused controls instead.
-			controls_panel = getChild<LLPanel>("media_focused_controls");
-		}
+		LLView* controls_view = NULL;
+		controls_view = getChild<LLView>("media_controls");
 		
-		if(controls_panel && controls_panel->getVisible())
+		if(controls_view && controls_view->getVisible())
 		{
-			controls_panel->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y);
+			controls_view->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y);
 
-			LLView *hit_child = controls_panel->childFromPoint(x, y);
-			if(hit_child)
+			LLView *hit_child = controls_view->childFromPoint(x, y);
+			if(hit_child && hit_child->getVisible())
 			{
 				// This was useful for debugging both coordinate translation and view hieararchy problems...
-//				llinfos << "mouse coords: " << x << ", " << y << " hit child " << hit_child->getName() << llendl;
-				result = true;
+				// llinfos << "mouse coords: " << x << ", " << y << " hit child " << hit_child->getName() << llendl;
+
+				// This will be a direct child of the LLLayoutStack, which should be a layout_panel.
+				// These may not shown/hidden by the logic in updateShape(), so we need to do another hit test on the children of the layout panel,
+				// which are the actual controls.
+				hit_child->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y);
+				
+				LLView *hit_child_2 = hit_child->childFromPoint(x, y);
+				if(hit_child_2 && hit_child_2->getVisible())
+				{
+					// This was useful for debugging both coordinate translation and view hieararchy problems...
+					// llinfos << "    mouse coords: " << x << ", " << y << " hit child 2 " << hit_child_2->getName() << llendl;
+					result = true;
+				}
 			}
 		}
 	}
-- 
GitLab


From 33eac5dc0a1dfc0624dcfc75bec35155fbb9c917 Mon Sep 17 00:00:00 2001
From: Rick Pasetto <rick@lindenlab.com>
Date: Wed, 4 Nov 2009 16:11:39 -0800
Subject: [PATCH 144/306] Fix typo in XUI file that broke media controls

---
 .../newview/skins/default/xui/en/panel_prim_media_controls.xml  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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 7b34e2931ee..d384abf038a 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
@@ -254,7 +254,7 @@
 		  image_selected="button_anim_pause.tga"
 		  image_unselected="button_anim_pause.tga"
 		  layout="topleft"
-		  tool_tip = "Pause media"
+		  tool_tip = "Pause media">
 		<button.commit_callback
 			function="MediaCtrl.Pause" />
 	  </button>
-- 
GitLab


From c527ade45beb1db2e1801646945812344a520ed0 Mon Sep 17 00:00:00 2001
From: "Eric M. Tulla (BigPapi)" <tulla@lindenlab.com>
Date: Wed, 4 Nov 2009 19:27:00 -0500
Subject: [PATCH 145/306] Fix for DEV-32672 / VWR-13349. Prim move grid display
 wasn't mipmapping properly.

---
 indra/newview/llmaniptranslate.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index 2153f77336e..f1b3a37677a 100644
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -163,7 +163,7 @@ void LLManipTranslate::restoreGL()
 
 	GLuint* d = new GLuint[rez*rez];	
 
-	gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, sGridTex->getTexName());
+	gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, sGridTex->getTexName(), true);
 	gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_TRILINEAR);
 
 	while (rez >= 1)
-- 
GitLab


From 1f0848969c6464648c6c60b771037f7a9eb98cad Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Wed, 4 Nov 2009 16:33:08 -0800
Subject: [PATCH 146/306] converted all floater titles to uppercase

---
 indra/newview/skins/default/xui/da/floater_about.xml          | 2 +-
 indra/newview/skins/default/xui/da/floater_about_land.xml     | 2 +-
 indra/newview/skins/default/xui/da/floater_auction.xml        | 2 +-
 indra/newview/skins/default/xui/da/floater_avatar_picker.xml  | 2 +-
 .../newview/skins/default/xui/da/floater_avatar_textures.xml  | 2 +-
 indra/newview/skins/default/xui/da/floater_beacons.xml        | 2 +-
 indra/newview/skins/default/xui/da/floater_build_options.xml  | 2 +-
 indra/newview/skins/default/xui/da/floater_bulk_perms.xml     | 2 +-
 indra/newview/skins/default/xui/da/floater_bumps.xml          | 2 +-
 indra/newview/skins/default/xui/da/floater_buy_contents.xml   | 2 +-
 indra/newview/skins/default/xui/da/floater_buy_currency.xml   | 2 +-
 indra/newview/skins/default/xui/da/floater_buy_land.xml       | 2 +-
 indra/newview/skins/default/xui/da/floater_buy_object.xml     | 2 +-
 indra/newview/skins/default/xui/da/floater_choose_group.xml   | 2 +-
 indra/newview/skins/default/xui/da/floater_color_picker.xml   | 2 +-
 indra/newview/skins/default/xui/da/floater_customize.xml      | 2 +-
 .../skins/default/xui/da/floater_day_cycle_options.xml        | 2 +-
 .../newview/skins/default/xui/da/floater_device_settings.xml  | 2 +-
 indra/newview/skins/default/xui/da/floater_env_settings.xml   | 2 +-
 indra/newview/skins/default/xui/da/floater_font_test.xml      | 2 +-
 indra/newview/skins/default/xui/da/floater_gesture.xml        | 2 +-
 .../skins/default/xui/da/floater_hardware_settings.xml        | 2 +-
 indra/newview/skins/default/xui/da/floater_hud.xml            | 2 +-
 indra/newview/skins/default/xui/da/floater_inspect.xml        | 2 +-
 indra/newview/skins/default/xui/da/floater_inventory.xml      | 2 +-
 .../default/xui/da/floater_inventory_item_properties.xml      | 2 +-
 .../skins/default/xui/da/floater_inventory_view_finder.xml    | 2 +-
 indra/newview/skins/default/xui/da/floater_joystick.xml       | 2 +-
 indra/newview/skins/default/xui/da/floater_lagmeter.xml       | 2 +-
 indra/newview/skins/default/xui/da/floater_land_holdings.xml  | 2 +-
 indra/newview/skins/default/xui/da/floater_live_lsleditor.xml | 2 +-
 indra/newview/skins/default/xui/da/floater_lsl_guide.xml      | 2 +-
 indra/newview/skins/default/xui/da/floater_media_browser.xml  | 2 +-
 indra/newview/skins/default/xui/da/floater_mem_leaking.xml    | 2 +-
 indra/newview/skins/default/xui/da/floater_mute_object.xml    | 2 +-
 indra/newview/skins/default/xui/da/floater_my_friends.xml     | 2 +-
 indra/newview/skins/default/xui/da/floater_openobject.xml     | 2 +-
 indra/newview/skins/default/xui/da/floater_perm_prefs.xml     | 2 +-
 indra/newview/skins/default/xui/da/floater_postcard.xml       | 2 +-
 indra/newview/skins/default/xui/da/floater_preferences.xml    | 2 +-
 .../skins/default/xui/da/floater_preview_classified.xml       | 2 +-
 indra/newview/skins/default/xui/da/floater_preview_event.xml  | 2 +-
 .../newview/skins/default/xui/da/floater_preview_notecard.xml | 2 +-
 indra/newview/skins/default/xui/da/floater_region_info.xml    | 2 +-
 indra/newview/skins/default/xui/da/floater_report_abuse.xml   | 2 +-
 indra/newview/skins/default/xui/da/floater_script_debug.xml   | 2 +-
 indra/newview/skins/default/xui/da/floater_script_preview.xml | 2 +-
 indra/newview/skins/default/xui/da/floater_script_queue.xml   | 2 +-
 indra/newview/skins/default/xui/da/floater_script_search.xml  | 2 +-
 indra/newview/skins/default/xui/da/floater_sell_land.xml      | 2 +-
 indra/newview/skins/default/xui/da/floater_settings_debug.xml | 2 +-
 indra/newview/skins/default/xui/da/floater_snapshot.xml       | 2 +-
 indra/newview/skins/default/xui/da/floater_sound_preview.xml  | 2 +-
 indra/newview/skins/default/xui/da/floater_statistics.xml     | 2 +-
 indra/newview/skins/default/xui/da/floater_telehub.xml        | 2 +-
 indra/newview/skins/default/xui/da/floater_texture_ctrl.xml   | 2 +-
 indra/newview/skins/default/xui/da/floater_tools.xml          | 2 +-
 indra/newview/skins/default/xui/da/floater_top_objects.xml    | 2 +-
 indra/newview/skins/default/xui/da/floater_water.xml          | 2 +-
 .../skins/default/xui/da/floater_windlight_options.xml        | 2 +-
 indra/newview/skins/default/xui/da/floater_world_map.xml      | 2 +-
 indra/newview/skins/default/xui/de/floater_about.xml          | 2 +-
 indra/newview/skins/default/xui/de/floater_about_land.xml     | 2 +-
 indra/newview/skins/default/xui/de/floater_auction.xml        | 2 +-
 indra/newview/skins/default/xui/de/floater_avatar_picker.xml  | 2 +-
 .../newview/skins/default/xui/de/floater_avatar_textures.xml  | 2 +-
 indra/newview/skins/default/xui/de/floater_beacons.xml        | 2 +-
 indra/newview/skins/default/xui/de/floater_build_options.xml  | 2 +-
 indra/newview/skins/default/xui/de/floater_bulk_perms.xml     | 2 +-
 indra/newview/skins/default/xui/de/floater_bumps.xml          | 2 +-
 indra/newview/skins/default/xui/de/floater_buy_contents.xml   | 2 +-
 indra/newview/skins/default/xui/de/floater_buy_currency.xml   | 2 +-
 indra/newview/skins/default/xui/de/floater_buy_land.xml       | 2 +-
 indra/newview/skins/default/xui/de/floater_buy_object.xml     | 2 +-
 indra/newview/skins/default/xui/de/floater_choose_group.xml   | 2 +-
 indra/newview/skins/default/xui/de/floater_color_picker.xml   | 2 +-
 indra/newview/skins/default/xui/de/floater_customize.xml      | 2 +-
 .../skins/default/xui/de/floater_day_cycle_options.xml        | 2 +-
 .../newview/skins/default/xui/de/floater_device_settings.xml  | 2 +-
 indra/newview/skins/default/xui/de/floater_env_settings.xml   | 2 +-
 indra/newview/skins/default/xui/de/floater_font_test.xml      | 2 +-
 indra/newview/skins/default/xui/de/floater_gesture.xml        | 2 +-
 indra/newview/skins/default/xui/de/floater_god_tools.xml      | 2 +-
 .../skins/default/xui/de/floater_hardware_settings.xml        | 2 +-
 indra/newview/skins/default/xui/de/floater_hud.xml            | 2 +-
 indra/newview/skins/default/xui/de/floater_inspect.xml        | 2 +-
 indra/newview/skins/default/xui/de/floater_inventory.xml      | 2 +-
 .../default/xui/de/floater_inventory_item_properties.xml      | 2 +-
 .../skins/default/xui/de/floater_inventory_view_finder.xml    | 2 +-
 indra/newview/skins/default/xui/de/floater_joystick.xml       | 2 +-
 indra/newview/skins/default/xui/de/floater_lagmeter.xml       | 2 +-
 indra/newview/skins/default/xui/de/floater_land_holdings.xml  | 2 +-
 indra/newview/skins/default/xui/de/floater_live_lsleditor.xml | 2 +-
 indra/newview/skins/default/xui/de/floater_lsl_guide.xml      | 2 +-
 indra/newview/skins/default/xui/de/floater_media_browser.xml  | 2 +-
 indra/newview/skins/default/xui/de/floater_mem_leaking.xml    | 2 +-
 indra/newview/skins/default/xui/de/floater_mute_object.xml    | 2 +-
 indra/newview/skins/default/xui/de/floater_my_friends.xml     | 2 +-
 indra/newview/skins/default/xui/de/floater_notification.xml   | 2 +-
 .../skins/default/xui/de/floater_notifications_console.xml    | 2 +-
 indra/newview/skins/default/xui/de/floater_openobject.xml     | 2 +-
 indra/newview/skins/default/xui/de/floater_perm_prefs.xml     | 2 +-
 indra/newview/skins/default/xui/de/floater_post_process.xml   | 2 +-
 indra/newview/skins/default/xui/de/floater_postcard.xml       | 2 +-
 indra/newview/skins/default/xui/de/floater_preferences.xml    | 2 +-
 .../skins/default/xui/de/floater_preview_classified.xml       | 2 +-
 indra/newview/skins/default/xui/de/floater_preview_event.xml  | 2 +-
 .../newview/skins/default/xui/de/floater_preview_notecard.xml | 2 +-
 indra/newview/skins/default/xui/de/floater_region_info.xml    | 2 +-
 indra/newview/skins/default/xui/de/floater_report_abuse.xml   | 2 +-
 indra/newview/skins/default/xui/de/floater_script_debug.xml   | 2 +-
 indra/newview/skins/default/xui/de/floater_script_preview.xml | 2 +-
 indra/newview/skins/default/xui/de/floater_script_queue.xml   | 2 +-
 indra/newview/skins/default/xui/de/floater_script_search.xml  | 2 +-
 indra/newview/skins/default/xui/de/floater_sell_land.xml      | 2 +-
 indra/newview/skins/default/xui/de/floater_settings_debug.xml | 2 +-
 indra/newview/skins/default/xui/de/floater_snapshot.xml       | 2 +-
 indra/newview/skins/default/xui/de/floater_sound_preview.xml  | 2 +-
 indra/newview/skins/default/xui/de/floater_statistics.xml     | 2 +-
 indra/newview/skins/default/xui/de/floater_telehub.xml        | 2 +-
 indra/newview/skins/default/xui/de/floater_texture_ctrl.xml   | 2 +-
 indra/newview/skins/default/xui/de/floater_tools.xml          | 2 +-
 indra/newview/skins/default/xui/de/floater_top_objects.xml    | 2 +-
 indra/newview/skins/default/xui/de/floater_water.xml          | 2 +-
 .../skins/default/xui/de/floater_windlight_options.xml        | 2 +-
 indra/newview/skins/default/xui/de/floater_world_map.xml      | 2 +-
 indra/newview/skins/default/xui/en/floater_aaa.xml            | 2 +-
 indra/newview/skins/default/xui/en/floater_about.xml          | 2 +-
 indra/newview/skins/default/xui/en/floater_about_land.xml     | 4 ++--
 indra/newview/skins/default/xui/en/floater_activeim.xml       | 2 +-
 indra/newview/skins/default/xui/en/floater_auction.xml        | 2 +-
 indra/newview/skins/default/xui/en/floater_avatar_picker.xml  | 2 +-
 .../newview/skins/default/xui/en/floater_avatar_textures.xml  | 2 +-
 indra/newview/skins/default/xui/en/floater_beacons.xml        | 2 +-
 indra/newview/skins/default/xui/en/floater_build_options.xml  | 2 +-
 indra/newview/skins/default/xui/en/floater_bulk_perms.xml     | 2 +-
 indra/newview/skins/default/xui/en/floater_bumps.xml          | 2 +-
 indra/newview/skins/default/xui/en/floater_buy_contents.xml   | 2 +-
 indra/newview/skins/default/xui/en/floater_buy_currency.xml   | 2 +-
 indra/newview/skins/default/xui/en/floater_buy_land.xml       | 2 +-
 indra/newview/skins/default/xui/en/floater_buy_object.xml     | 2 +-
 indra/newview/skins/default/xui/en/floater_choose_group.xml   | 2 +-
 indra/newview/skins/default/xui/en/floater_color_picker.xml   | 2 +-
 indra/newview/skins/default/xui/en/floater_customize.xml      | 2 +-
 .../skins/default/xui/en/floater_day_cycle_options.xml        | 2 +-
 .../newview/skins/default/xui/en/floater_device_settings.xml  | 4 ++--
 indra/newview/skins/default/xui/en/floater_env_settings.xml   | 2 +-
 indra/newview/skins/default/xui/en/floater_font_test.xml      | 2 +-
 indra/newview/skins/default/xui/en/floater_gesture.xml        | 2 +-
 indra/newview/skins/default/xui/en/floater_god_tools.xml      | 2 +-
 .../skins/default/xui/en/floater_hardware_settings.xml        | 2 +-
 indra/newview/skins/default/xui/en/floater_help_browser.xml   | 2 +-
 indra/newview/skins/default/xui/en/floater_hud.xml            | 2 +-
 indra/newview/skins/default/xui/en/floater_incoming_call.xml  | 2 +-
 indra/newview/skins/default/xui/en/floater_inspect.xml        | 2 +-
 indra/newview/skins/default/xui/en/floater_inventory.xml      | 2 +-
 .../default/xui/en/floater_inventory_item_properties.xml      | 2 +-
 .../skins/default/xui/en/floater_inventory_view_finder.xml    | 2 +-
 indra/newview/skins/default/xui/en/floater_joystick.xml       | 2 +-
 indra/newview/skins/default/xui/en/floater_lagmeter.xml       | 2 +-
 indra/newview/skins/default/xui/en/floater_land_holdings.xml  | 2 +-
 indra/newview/skins/default/xui/en/floater_live_lsleditor.xml | 4 ++--
 indra/newview/skins/default/xui/en/floater_lsl_guide.xml      | 2 +-
 indra/newview/skins/default/xui/en/floater_media_browser.xml  | 2 +-
 indra/newview/skins/default/xui/en/floater_media_settings.xml | 2 +-
 indra/newview/skins/default/xui/en/floater_mem_leaking.xml    | 2 +-
 indra/newview/skins/default/xui/en/floater_mute_object.xml    | 4 ++--
 indra/newview/skins/default/xui/en/floater_my_friends.xml     | 2 +-
 indra/newview/skins/default/xui/en/floater_nearby_chat.xml    | 2 +-
 indra/newview/skins/default/xui/en/floater_notification.xml   | 2 +-
 .../skins/default/xui/en/floater_notifications_console.xml    | 2 +-
 indra/newview/skins/default/xui/en/floater_openobject.xml     | 2 +-
 indra/newview/skins/default/xui/en/floater_perm_prefs.xml     | 2 +-
 indra/newview/skins/default/xui/en/floater_post_process.xml   | 2 +-
 indra/newview/skins/default/xui/en/floater_postcard.xml       | 2 +-
 indra/newview/skins/default/xui/en/floater_preferences.xml    | 2 +-
 .../skins/default/xui/en/floater_preview_classified.xml       | 2 +-
 indra/newview/skins/default/xui/en/floater_preview_event.xml  | 4 ++--
 .../skins/default/xui/en/floater_preview_gesture_info.xml     | 4 ++--
 .../skins/default/xui/en/floater_preview_gesture_shortcut.xml | 4 ++--
 .../skins/default/xui/en/floater_preview_gesture_steps.xml    | 4 ++--
 .../newview/skins/default/xui/en/floater_preview_notecard.xml | 2 +-
 indra/newview/skins/default/xui/en/floater_region_info.xml    | 2 +-
 indra/newview/skins/default/xui/en/floater_report_abuse.xml   | 2 +-
 .../skins/default/xui/en/floater_script_debug_panel.xml       | 4 ++--
 indra/newview/skins/default/xui/en/floater_script_preview.xml | 2 +-
 indra/newview/skins/default/xui/en/floater_script_queue.xml   | 2 +-
 indra/newview/skins/default/xui/en/floater_script_search.xml  | 2 +-
 indra/newview/skins/default/xui/en/floater_search.xml         | 2 +-
 indra/newview/skins/default/xui/en/floater_sell_land.xml      | 2 +-
 indra/newview/skins/default/xui/en/floater_settings_debug.xml | 2 +-
 indra/newview/skins/default/xui/en/floater_snapshot.xml       | 2 +-
 indra/newview/skins/default/xui/en/floater_sound_preview.xml  | 2 +-
 indra/newview/skins/default/xui/en/floater_statistics.xml     | 2 +-
 indra/newview/skins/default/xui/en/floater_stats.xml          | 2 +-
 indra/newview/skins/default/xui/en/floater_telehub.xml        | 2 +-
 .../newview/skins/default/xui/en/floater_test_inspectors.xml  | 2 +-
 indra/newview/skins/default/xui/en/floater_test_widgets.xml   | 2 +-
 indra/newview/skins/default/xui/en/floater_texture_ctrl.xml   | 2 +-
 indra/newview/skins/default/xui/en/floater_tools.xml          | 2 +-
 indra/newview/skins/default/xui/en/floater_top_objects.xml    | 2 +-
 indra/newview/skins/default/xui/en/floater_ui_preview.xml     | 2 +-
 indra/newview/skins/default/xui/en/floater_water.xml          | 2 +-
 .../skins/default/xui/en/floater_windlight_options.xml        | 2 +-
 indra/newview/skins/default/xui/en/floater_world_map.xml      | 2 +-
 indra/newview/skins/default/xui/es/floater_about.xml          | 2 +-
 indra/newview/skins/default/xui/es/floater_about_land.xml     | 2 +-
 indra/newview/skins/default/xui/es/floater_auction.xml        | 2 +-
 indra/newview/skins/default/xui/es/floater_avatar_picker.xml  | 2 +-
 .../newview/skins/default/xui/es/floater_avatar_textures.xml  | 2 +-
 indra/newview/skins/default/xui/es/floater_beacons.xml        | 2 +-
 indra/newview/skins/default/xui/es/floater_build_options.xml  | 2 +-
 indra/newview/skins/default/xui/es/floater_bulk_perms.xml     | 2 +-
 indra/newview/skins/default/xui/es/floater_bumps.xml          | 2 +-
 indra/newview/skins/default/xui/es/floater_buy_contents.xml   | 2 +-
 indra/newview/skins/default/xui/es/floater_buy_currency.xml   | 2 +-
 indra/newview/skins/default/xui/es/floater_buy_land.xml       | 2 +-
 indra/newview/skins/default/xui/es/floater_buy_object.xml     | 2 +-
 indra/newview/skins/default/xui/es/floater_choose_group.xml   | 2 +-
 indra/newview/skins/default/xui/es/floater_color_picker.xml   | 2 +-
 indra/newview/skins/default/xui/es/floater_customize.xml      | 2 +-
 .../skins/default/xui/es/floater_day_cycle_options.xml        | 2 +-
 .../newview/skins/default/xui/es/floater_device_settings.xml  | 2 +-
 indra/newview/skins/default/xui/es/floater_env_settings.xml   | 2 +-
 indra/newview/skins/default/xui/es/floater_font_test.xml      | 2 +-
 indra/newview/skins/default/xui/es/floater_gesture.xml        | 2 +-
 indra/newview/skins/default/xui/es/floater_god_tools.xml      | 2 +-
 .../skins/default/xui/es/floater_hardware_settings.xml        | 2 +-
 indra/newview/skins/default/xui/es/floater_hud.xml            | 2 +-
 indra/newview/skins/default/xui/es/floater_inspect.xml        | 2 +-
 indra/newview/skins/default/xui/es/floater_inventory.xml      | 2 +-
 .../default/xui/es/floater_inventory_item_properties.xml      | 2 +-
 .../skins/default/xui/es/floater_inventory_view_finder.xml    | 2 +-
 indra/newview/skins/default/xui/es/floater_joystick.xml       | 2 +-
 indra/newview/skins/default/xui/es/floater_lagmeter.xml       | 2 +-
 indra/newview/skins/default/xui/es/floater_land_holdings.xml  | 2 +-
 indra/newview/skins/default/xui/es/floater_live_lsleditor.xml | 2 +-
 indra/newview/skins/default/xui/es/floater_lsl_guide.xml      | 2 +-
 indra/newview/skins/default/xui/es/floater_media_browser.xml  | 2 +-
 indra/newview/skins/default/xui/es/floater_mem_leaking.xml    | 2 +-
 indra/newview/skins/default/xui/es/floater_mute_object.xml    | 2 +-
 indra/newview/skins/default/xui/es/floater_my_friends.xml     | 2 +-
 indra/newview/skins/default/xui/es/floater_openobject.xml     | 2 +-
 indra/newview/skins/default/xui/es/floater_perm_prefs.xml     | 2 +-
 indra/newview/skins/default/xui/es/floater_post_process.xml   | 2 +-
 indra/newview/skins/default/xui/es/floater_postcard.xml       | 2 +-
 indra/newview/skins/default/xui/es/floater_preferences.xml    | 2 +-
 .../skins/default/xui/es/floater_preview_classified.xml       | 2 +-
 indra/newview/skins/default/xui/es/floater_preview_event.xml  | 2 +-
 .../newview/skins/default/xui/es/floater_preview_notecard.xml | 2 +-
 indra/newview/skins/default/xui/es/floater_region_info.xml    | 2 +-
 indra/newview/skins/default/xui/es/floater_report_abuse.xml   | 2 +-
 indra/newview/skins/default/xui/es/floater_script_debug.xml   | 2 +-
 indra/newview/skins/default/xui/es/floater_script_preview.xml | 2 +-
 indra/newview/skins/default/xui/es/floater_script_queue.xml   | 2 +-
 indra/newview/skins/default/xui/es/floater_script_search.xml  | 2 +-
 indra/newview/skins/default/xui/es/floater_sell_land.xml      | 2 +-
 indra/newview/skins/default/xui/es/floater_settings_debug.xml | 2 +-
 indra/newview/skins/default/xui/es/floater_snapshot.xml       | 2 +-
 indra/newview/skins/default/xui/es/floater_sound_preview.xml  | 2 +-
 indra/newview/skins/default/xui/es/floater_statistics.xml     | 2 +-
 indra/newview/skins/default/xui/es/floater_telehub.xml        | 2 +-
 indra/newview/skins/default/xui/es/floater_texture_ctrl.xml   | 2 +-
 indra/newview/skins/default/xui/es/floater_tools.xml          | 2 +-
 indra/newview/skins/default/xui/es/floater_top_objects.xml    | 2 +-
 indra/newview/skins/default/xui/es/floater_water.xml          | 2 +-
 .../skins/default/xui/es/floater_windlight_options.xml        | 2 +-
 indra/newview/skins/default/xui/es/floater_world_map.xml      | 2 +-
 indra/newview/skins/default/xui/fr/floater_about.xml          | 2 +-
 indra/newview/skins/default/xui/fr/floater_about_land.xml     | 2 +-
 indra/newview/skins/default/xui/fr/floater_auction.xml        | 2 +-
 indra/newview/skins/default/xui/fr/floater_avatar_picker.xml  | 2 +-
 .../newview/skins/default/xui/fr/floater_avatar_textures.xml  | 2 +-
 indra/newview/skins/default/xui/fr/floater_beacons.xml        | 2 +-
 indra/newview/skins/default/xui/fr/floater_build_options.xml  | 2 +-
 indra/newview/skins/default/xui/fr/floater_bulk_perms.xml     | 2 +-
 indra/newview/skins/default/xui/fr/floater_bumps.xml          | 2 +-
 indra/newview/skins/default/xui/fr/floater_buy_contents.xml   | 2 +-
 indra/newview/skins/default/xui/fr/floater_buy_currency.xml   | 2 +-
 indra/newview/skins/default/xui/fr/floater_buy_land.xml       | 2 +-
 indra/newview/skins/default/xui/fr/floater_buy_object.xml     | 2 +-
 indra/newview/skins/default/xui/fr/floater_choose_group.xml   | 2 +-
 indra/newview/skins/default/xui/fr/floater_color_picker.xml   | 2 +-
 indra/newview/skins/default/xui/fr/floater_customize.xml      | 2 +-
 .../skins/default/xui/fr/floater_day_cycle_options.xml        | 2 +-
 .../newview/skins/default/xui/fr/floater_device_settings.xml  | 2 +-
 indra/newview/skins/default/xui/fr/floater_env_settings.xml   | 2 +-
 indra/newview/skins/default/xui/fr/floater_font_test.xml      | 2 +-
 indra/newview/skins/default/xui/fr/floater_gesture.xml        | 2 +-
 indra/newview/skins/default/xui/fr/floater_god_tools.xml      | 2 +-
 .../skins/default/xui/fr/floater_hardware_settings.xml        | 2 +-
 indra/newview/skins/default/xui/fr/floater_hud.xml            | 2 +-
 indra/newview/skins/default/xui/fr/floater_inspect.xml        | 2 +-
 indra/newview/skins/default/xui/fr/floater_inventory.xml      | 2 +-
 .../default/xui/fr/floater_inventory_item_properties.xml      | 2 +-
 .../skins/default/xui/fr/floater_inventory_view_finder.xml    | 2 +-
 indra/newview/skins/default/xui/fr/floater_joystick.xml       | 2 +-
 indra/newview/skins/default/xui/fr/floater_lagmeter.xml       | 2 +-
 indra/newview/skins/default/xui/fr/floater_land_holdings.xml  | 2 +-
 indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml | 2 +-
 indra/newview/skins/default/xui/fr/floater_lsl_guide.xml      | 2 +-
 indra/newview/skins/default/xui/fr/floater_media_browser.xml  | 2 +-
 indra/newview/skins/default/xui/fr/floater_mem_leaking.xml    | 2 +-
 indra/newview/skins/default/xui/fr/floater_mute_object.xml    | 2 +-
 indra/newview/skins/default/xui/fr/floater_my_friends.xml     | 2 +-
 indra/newview/skins/default/xui/fr/floater_notification.xml   | 2 +-
 .../skins/default/xui/fr/floater_notifications_console.xml    | 2 +-
 indra/newview/skins/default/xui/fr/floater_openobject.xml     | 2 +-
 indra/newview/skins/default/xui/fr/floater_perm_prefs.xml     | 2 +-
 indra/newview/skins/default/xui/fr/floater_post_process.xml   | 2 +-
 indra/newview/skins/default/xui/fr/floater_postcard.xml       | 2 +-
 indra/newview/skins/default/xui/fr/floater_preferences.xml    | 2 +-
 .../skins/default/xui/fr/floater_preview_classified.xml       | 2 +-
 indra/newview/skins/default/xui/fr/floater_preview_event.xml  | 2 +-
 .../newview/skins/default/xui/fr/floater_preview_notecard.xml | 2 +-
 indra/newview/skins/default/xui/fr/floater_region_info.xml    | 2 +-
 indra/newview/skins/default/xui/fr/floater_report_abuse.xml   | 2 +-
 indra/newview/skins/default/xui/fr/floater_script_debug.xml   | 2 +-
 indra/newview/skins/default/xui/fr/floater_script_preview.xml | 2 +-
 indra/newview/skins/default/xui/fr/floater_script_queue.xml   | 2 +-
 indra/newview/skins/default/xui/fr/floater_script_search.xml  | 2 +-
 indra/newview/skins/default/xui/fr/floater_sell_land.xml      | 2 +-
 indra/newview/skins/default/xui/fr/floater_settings_debug.xml | 2 +-
 indra/newview/skins/default/xui/fr/floater_snapshot.xml       | 2 +-
 indra/newview/skins/default/xui/fr/floater_sound_preview.xml  | 2 +-
 indra/newview/skins/default/xui/fr/floater_statistics.xml     | 2 +-
 indra/newview/skins/default/xui/fr/floater_telehub.xml        | 2 +-
 indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml   | 2 +-
 indra/newview/skins/default/xui/fr/floater_tools.xml          | 2 +-
 indra/newview/skins/default/xui/fr/floater_top_objects.xml    | 2 +-
 indra/newview/skins/default/xui/fr/floater_water.xml          | 2 +-
 .../skins/default/xui/fr/floater_windlight_options.xml        | 2 +-
 indra/newview/skins/default/xui/fr/floater_world_map.xml      | 2 +-
 indra/newview/skins/default/xui/it/floater_about.xml          | 2 +-
 indra/newview/skins/default/xui/it/floater_about_land.xml     | 2 +-
 indra/newview/skins/default/xui/it/floater_auction.xml        | 2 +-
 indra/newview/skins/default/xui/it/floater_avatar_picker.xml  | 2 +-
 .../newview/skins/default/xui/it/floater_avatar_textures.xml  | 2 +-
 indra/newview/skins/default/xui/it/floater_beacons.xml        | 2 +-
 indra/newview/skins/default/xui/it/floater_build_options.xml  | 2 +-
 indra/newview/skins/default/xui/it/floater_bulk_perms.xml     | 2 +-
 indra/newview/skins/default/xui/it/floater_bumps.xml          | 2 +-
 indra/newview/skins/default/xui/it/floater_buy_contents.xml   | 2 +-
 indra/newview/skins/default/xui/it/floater_buy_currency.xml   | 2 +-
 indra/newview/skins/default/xui/it/floater_buy_land.xml       | 2 +-
 indra/newview/skins/default/xui/it/floater_buy_object.xml     | 2 +-
 indra/newview/skins/default/xui/it/floater_choose_group.xml   | 2 +-
 indra/newview/skins/default/xui/it/floater_color_picker.xml   | 2 +-
 indra/newview/skins/default/xui/it/floater_customize.xml      | 2 +-
 .../skins/default/xui/it/floater_day_cycle_options.xml        | 2 +-
 .../newview/skins/default/xui/it/floater_device_settings.xml  | 2 +-
 indra/newview/skins/default/xui/it/floater_env_settings.xml   | 2 +-
 indra/newview/skins/default/xui/it/floater_font_test.xml      | 2 +-
 indra/newview/skins/default/xui/it/floater_gesture.xml        | 2 +-
 .../skins/default/xui/it/floater_hardware_settings.xml        | 2 +-
 indra/newview/skins/default/xui/it/floater_hud.xml            | 2 +-
 indra/newview/skins/default/xui/it/floater_inspect.xml        | 2 +-
 indra/newview/skins/default/xui/it/floater_inventory.xml      | 2 +-
 .../default/xui/it/floater_inventory_item_properties.xml      | 2 +-
 .../skins/default/xui/it/floater_inventory_view_finder.xml    | 2 +-
 indra/newview/skins/default/xui/it/floater_joystick.xml       | 2 +-
 indra/newview/skins/default/xui/it/floater_lagmeter.xml       | 2 +-
 indra/newview/skins/default/xui/it/floater_land_holdings.xml  | 2 +-
 indra/newview/skins/default/xui/it/floater_live_lsleditor.xml | 2 +-
 indra/newview/skins/default/xui/it/floater_lsl_guide.xml      | 2 +-
 indra/newview/skins/default/xui/it/floater_media_browser.xml  | 2 +-
 indra/newview/skins/default/xui/it/floater_mem_leaking.xml    | 2 +-
 indra/newview/skins/default/xui/it/floater_mute_object.xml    | 2 +-
 indra/newview/skins/default/xui/it/floater_my_friends.xml     | 2 +-
 indra/newview/skins/default/xui/it/floater_openobject.xml     | 2 +-
 indra/newview/skins/default/xui/it/floater_perm_prefs.xml     | 2 +-
 indra/newview/skins/default/xui/it/floater_post_process.xml   | 2 +-
 indra/newview/skins/default/xui/it/floater_postcard.xml       | 2 +-
 indra/newview/skins/default/xui/it/floater_preferences.xml    | 2 +-
 .../skins/default/xui/it/floater_preview_classified.xml       | 2 +-
 indra/newview/skins/default/xui/it/floater_preview_event.xml  | 2 +-
 .../newview/skins/default/xui/it/floater_preview_notecard.xml | 2 +-
 indra/newview/skins/default/xui/it/floater_region_info.xml    | 2 +-
 indra/newview/skins/default/xui/it/floater_report_abuse.xml   | 2 +-
 indra/newview/skins/default/xui/it/floater_script_debug.xml   | 2 +-
 indra/newview/skins/default/xui/it/floater_script_preview.xml | 2 +-
 indra/newview/skins/default/xui/it/floater_script_queue.xml   | 2 +-
 indra/newview/skins/default/xui/it/floater_script_search.xml  | 2 +-
 indra/newview/skins/default/xui/it/floater_sell_land.xml      | 2 +-
 indra/newview/skins/default/xui/it/floater_settings_debug.xml | 2 +-
 indra/newview/skins/default/xui/it/floater_snapshot.xml       | 2 +-
 indra/newview/skins/default/xui/it/floater_sound_preview.xml  | 2 +-
 indra/newview/skins/default/xui/it/floater_statistics.xml     | 2 +-
 indra/newview/skins/default/xui/it/floater_telehub.xml        | 2 +-
 indra/newview/skins/default/xui/it/floater_texture_ctrl.xml   | 2 +-
 indra/newview/skins/default/xui/it/floater_tools.xml          | 2 +-
 indra/newview/skins/default/xui/it/floater_top_objects.xml    | 2 +-
 indra/newview/skins/default/xui/it/floater_water.xml          | 2 +-
 .../skins/default/xui/it/floater_windlight_options.xml        | 2 +-
 indra/newview/skins/default/xui/it/floater_world_map.xml      | 2 +-
 indra/newview/skins/default/xui/ja/floater_about.xml          | 2 +-
 .../newview/skins/default/xui/ja/floater_device_settings.xml  | 2 +-
 .../skins/default/xui/ja/floater_inventory_view_finder.xml    | 2 +-
 indra/newview/skins/default/xui/ja/floater_lsl_guide.xml      | 2 +-
 indra/newview/skins/default/xui/ja/floater_script_debug.xml   | 2 +-
 indra/newview/skins/default/xui/ja/floater_sound_preview.xml  | 2 +-
 indra/newview/skins/default/xui/nl/floater_about.xml          | 2 +-
 indra/newview/skins/default/xui/nl/floater_about_land.xml     | 2 +-
 indra/newview/skins/default/xui/nl/floater_auction.xml        | 2 +-
 indra/newview/skins/default/xui/nl/floater_beacons.xml        | 2 +-
 indra/newview/skins/default/xui/nl/floater_bulk_perms.xml     | 2 +-
 indra/newview/skins/default/xui/nl/floater_bumps.xml          | 2 +-
 indra/newview/skins/default/xui/nl/floater_buy_contents.xml   | 2 +-
 indra/newview/skins/default/xui/nl/floater_buy_currency.xml   | 2 +-
 indra/newview/skins/default/xui/nl/floater_buy_land.xml       | 2 +-
 indra/newview/skins/default/xui/nl/floater_buy_object.xml     | 2 +-
 indra/newview/skins/default/xui/nl/floater_choose_group.xml   | 2 +-
 indra/newview/skins/default/xui/nl/floater_color_picker.xml   | 2 +-
 indra/newview/skins/default/xui/nl/floater_customize.xml      | 2 +-
 indra/newview/skins/default/xui/nl/floater_env_settings.xml   | 2 +-
 indra/newview/skins/default/xui/nl/floater_font_test.xml      | 2 +-
 indra/newview/skins/default/xui/nl/floater_gesture.xml        | 2 +-
 indra/newview/skins/default/xui/nl/floater_hud.xml            | 2 +-
 indra/newview/skins/default/xui/nl/floater_inspect.xml        | 2 +-
 indra/newview/skins/default/xui/nl/floater_inventory.xml      | 2 +-
 indra/newview/skins/default/xui/nl/floater_joystick.xml       | 2 +-
 indra/newview/skins/default/xui/nl/floater_lagmeter.xml       | 2 +-
 indra/newview/skins/default/xui/nl/floater_lsl_guide.xml      | 2 +-
 indra/newview/skins/default/xui/nl/floater_mem_leaking.xml    | 2 +-
 indra/newview/skins/default/xui/nl/floater_mute_object.xml    | 2 +-
 indra/newview/skins/default/xui/nl/floater_my_friends.xml     | 2 +-
 indra/newview/skins/default/xui/nl/floater_openobject.xml     | 2 +-
 indra/newview/skins/default/xui/nl/floater_perm_prefs.xml     | 2 +-
 indra/newview/skins/default/xui/nl/floater_post_process.xml   | 2 +-
 indra/newview/skins/default/xui/nl/floater_postcard.xml       | 2 +-
 indra/newview/skins/default/xui/nl/floater_preferences.xml    | 2 +-
 indra/newview/skins/default/xui/nl/floater_region_info.xml    | 2 +-
 indra/newview/skins/default/xui/nl/floater_report_abuse.xml   | 2 +-
 indra/newview/skins/default/xui/nl/floater_script_debug.xml   | 2 +-
 indra/newview/skins/default/xui/nl/floater_script_queue.xml   | 2 +-
 indra/newview/skins/default/xui/nl/floater_sell_land.xml      | 2 +-
 indra/newview/skins/default/xui/nl/floater_snapshot.xml       | 2 +-
 indra/newview/skins/default/xui/nl/floater_statistics.xml     | 2 +-
 indra/newview/skins/default/xui/nl/floater_telehub.xml        | 2 +-
 indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml   | 2 +-
 indra/newview/skins/default/xui/nl/floater_tools.xml          | 2 +-
 indra/newview/skins/default/xui/nl/floater_top_objects.xml    | 2 +-
 indra/newview/skins/default/xui/nl/floater_water.xml          | 2 +-
 indra/newview/skins/default/xui/nl/floater_world_map.xml      | 2 +-
 indra/newview/skins/default/xui/pl/floater_about_land.xml     | 2 +-
 indra/newview/skins/default/xui/pl/floater_auction.xml        | 2 +-
 indra/newview/skins/default/xui/pl/floater_avatar_picker.xml  | 2 +-
 .../newview/skins/default/xui/pl/floater_avatar_textures.xml  | 2 +-
 indra/newview/skins/default/xui/pl/floater_beacons.xml        | 2 +-
 indra/newview/skins/default/xui/pl/floater_build_options.xml  | 2 +-
 indra/newview/skins/default/xui/pl/floater_bulk_perms.xml     | 2 +-
 indra/newview/skins/default/xui/pl/floater_bumps.xml          | 2 +-
 indra/newview/skins/default/xui/pl/floater_buy_contents.xml   | 2 +-
 indra/newview/skins/default/xui/pl/floater_buy_currency.xml   | 2 +-
 indra/newview/skins/default/xui/pl/floater_buy_land.xml       | 2 +-
 indra/newview/skins/default/xui/pl/floater_buy_object.xml     | 2 +-
 indra/newview/skins/default/xui/pl/floater_choose_group.xml   | 2 +-
 indra/newview/skins/default/xui/pl/floater_color_picker.xml   | 2 +-
 indra/newview/skins/default/xui/pl/floater_customize.xml      | 2 +-
 .../skins/default/xui/pl/floater_day_cycle_options.xml        | 2 +-
 .../newview/skins/default/xui/pl/floater_device_settings.xml  | 2 +-
 indra/newview/skins/default/xui/pl/floater_env_settings.xml   | 2 +-
 indra/newview/skins/default/xui/pl/floater_font_test.xml      | 2 +-
 indra/newview/skins/default/xui/pl/floater_gesture.xml        | 2 +-
 indra/newview/skins/default/xui/pl/floater_god_tools.xml      | 2 +-
 .../skins/default/xui/pl/floater_hardware_settings.xml        | 2 +-
 indra/newview/skins/default/xui/pl/floater_hud.xml            | 2 +-
 indra/newview/skins/default/xui/pl/floater_inspect.xml        | 2 +-
 indra/newview/skins/default/xui/pl/floater_inventory.xml      | 2 +-
 .../default/xui/pl/floater_inventory_item_properties.xml      | 2 +-
 .../skins/default/xui/pl/floater_inventory_view_finder.xml    | 2 +-
 indra/newview/skins/default/xui/pl/floater_joystick.xml       | 4 ++--
 indra/newview/skins/default/xui/pl/floater_lagmeter.xml       | 2 +-
 indra/newview/skins/default/xui/pl/floater_land_holdings.xml  | 2 +-
 indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml | 2 +-
 indra/newview/skins/default/xui/pl/floater_lsl_guide.xml      | 2 +-
 indra/newview/skins/default/xui/pl/floater_media_browser.xml  | 2 +-
 indra/newview/skins/default/xui/pl/floater_mem_leaking.xml    | 2 +-
 indra/newview/skins/default/xui/pl/floater_mute_object.xml    | 2 +-
 indra/newview/skins/default/xui/pl/floater_my_friends.xml     | 2 +-
 indra/newview/skins/default/xui/pl/floater_openobject.xml     | 2 +-
 indra/newview/skins/default/xui/pl/floater_perm_prefs.xml     | 2 +-
 indra/newview/skins/default/xui/pl/floater_post_process.xml   | 2 +-
 indra/newview/skins/default/xui/pl/floater_postcard.xml       | 2 +-
 indra/newview/skins/default/xui/pl/floater_preferences.xml    | 2 +-
 .../skins/default/xui/pl/floater_preview_classified.xml       | 2 +-
 indra/newview/skins/default/xui/pl/floater_preview_event.xml  | 2 +-
 .../newview/skins/default/xui/pl/floater_preview_notecard.xml | 2 +-
 indra/newview/skins/default/xui/pl/floater_region_info.xml    | 2 +-
 indra/newview/skins/default/xui/pl/floater_report_abuse.xml   | 2 +-
 indra/newview/skins/default/xui/pl/floater_script_debug.xml   | 2 +-
 indra/newview/skins/default/xui/pl/floater_script_preview.xml | 2 +-
 indra/newview/skins/default/xui/pl/floater_script_queue.xml   | 2 +-
 indra/newview/skins/default/xui/pl/floater_script_search.xml  | 2 +-
 indra/newview/skins/default/xui/pl/floater_sell_land.xml      | 2 +-
 indra/newview/skins/default/xui/pl/floater_settings_debug.xml | 2 +-
 indra/newview/skins/default/xui/pl/floater_snapshot.xml       | 2 +-
 indra/newview/skins/default/xui/pl/floater_sound_preview.xml  | 2 +-
 indra/newview/skins/default/xui/pl/floater_statistics.xml     | 2 +-
 indra/newview/skins/default/xui/pl/floater_telehub.xml        | 2 +-
 indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml   | 2 +-
 indra/newview/skins/default/xui/pl/floater_tools.xml          | 2 +-
 indra/newview/skins/default/xui/pl/floater_top_objects.xml    | 2 +-
 indra/newview/skins/default/xui/pl/floater_water.xml          | 2 +-
 .../skins/default/xui/pl/floater_windlight_options.xml        | 2 +-
 indra/newview/skins/default/xui/pl/floater_world_map.xml      | 2 +-
 indra/newview/skins/default/xui/pt/floater_about.xml          | 2 +-
 indra/newview/skins/default/xui/pt/floater_about_land.xml     | 2 +-
 indra/newview/skins/default/xui/pt/floater_auction.xml        | 2 +-
 indra/newview/skins/default/xui/pt/floater_avatar_picker.xml  | 2 +-
 .../newview/skins/default/xui/pt/floater_avatar_textures.xml  | 2 +-
 indra/newview/skins/default/xui/pt/floater_beacons.xml        | 2 +-
 indra/newview/skins/default/xui/pt/floater_build_options.xml  | 2 +-
 indra/newview/skins/default/xui/pt/floater_bulk_perms.xml     | 2 +-
 indra/newview/skins/default/xui/pt/floater_bumps.xml          | 2 +-
 indra/newview/skins/default/xui/pt/floater_buy_contents.xml   | 2 +-
 indra/newview/skins/default/xui/pt/floater_buy_currency.xml   | 2 +-
 indra/newview/skins/default/xui/pt/floater_buy_land.xml       | 2 +-
 indra/newview/skins/default/xui/pt/floater_buy_object.xml     | 2 +-
 indra/newview/skins/default/xui/pt/floater_choose_group.xml   | 2 +-
 indra/newview/skins/default/xui/pt/floater_color_picker.xml   | 2 +-
 indra/newview/skins/default/xui/pt/floater_customize.xml      | 2 +-
 .../skins/default/xui/pt/floater_day_cycle_options.xml        | 2 +-
 .../newview/skins/default/xui/pt/floater_device_settings.xml  | 2 +-
 indra/newview/skins/default/xui/pt/floater_env_settings.xml   | 2 +-
 indra/newview/skins/default/xui/pt/floater_font_test.xml      | 2 +-
 indra/newview/skins/default/xui/pt/floater_gesture.xml        | 2 +-
 indra/newview/skins/default/xui/pt/floater_god_tools.xml      | 2 +-
 .../skins/default/xui/pt/floater_hardware_settings.xml        | 2 +-
 indra/newview/skins/default/xui/pt/floater_hud.xml            | 2 +-
 indra/newview/skins/default/xui/pt/floater_inspect.xml        | 2 +-
 indra/newview/skins/default/xui/pt/floater_inventory.xml      | 2 +-
 .../default/xui/pt/floater_inventory_item_properties.xml      | 2 +-
 .../skins/default/xui/pt/floater_inventory_view_finder.xml    | 2 +-
 indra/newview/skins/default/xui/pt/floater_joystick.xml       | 2 +-
 indra/newview/skins/default/xui/pt/floater_lagmeter.xml       | 2 +-
 indra/newview/skins/default/xui/pt/floater_land_holdings.xml  | 2 +-
 indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml | 2 +-
 indra/newview/skins/default/xui/pt/floater_lsl_guide.xml      | 2 +-
 indra/newview/skins/default/xui/pt/floater_media_browser.xml  | 2 +-
 indra/newview/skins/default/xui/pt/floater_mem_leaking.xml    | 2 +-
 indra/newview/skins/default/xui/pt/floater_mute_object.xml    | 2 +-
 indra/newview/skins/default/xui/pt/floater_my_friends.xml     | 2 +-
 indra/newview/skins/default/xui/pt/floater_openobject.xml     | 2 +-
 indra/newview/skins/default/xui/pt/floater_perm_prefs.xml     | 2 +-
 indra/newview/skins/default/xui/pt/floater_post_process.xml   | 2 +-
 indra/newview/skins/default/xui/pt/floater_postcard.xml       | 2 +-
 indra/newview/skins/default/xui/pt/floater_preferences.xml    | 2 +-
 .../skins/default/xui/pt/floater_preview_classified.xml       | 2 +-
 indra/newview/skins/default/xui/pt/floater_preview_event.xml  | 2 +-
 .../newview/skins/default/xui/pt/floater_preview_notecard.xml | 2 +-
 indra/newview/skins/default/xui/pt/floater_region_info.xml    | 2 +-
 indra/newview/skins/default/xui/pt/floater_report_abuse.xml   | 2 +-
 indra/newview/skins/default/xui/pt/floater_script_debug.xml   | 2 +-
 indra/newview/skins/default/xui/pt/floater_script_preview.xml | 2 +-
 indra/newview/skins/default/xui/pt/floater_script_queue.xml   | 2 +-
 indra/newview/skins/default/xui/pt/floater_script_search.xml  | 2 +-
 indra/newview/skins/default/xui/pt/floater_sell_land.xml      | 2 +-
 indra/newview/skins/default/xui/pt/floater_settings_debug.xml | 2 +-
 indra/newview/skins/default/xui/pt/floater_snapshot.xml       | 2 +-
 indra/newview/skins/default/xui/pt/floater_sound_preview.xml  | 2 +-
 indra/newview/skins/default/xui/pt/floater_statistics.xml     | 2 +-
 indra/newview/skins/default/xui/pt/floater_telehub.xml        | 2 +-
 indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml   | 2 +-
 indra/newview/skins/default/xui/pt/floater_tools.xml          | 2 +-
 indra/newview/skins/default/xui/pt/floater_top_objects.xml    | 2 +-
 indra/newview/skins/default/xui/pt/floater_water.xml          | 2 +-
 .../skins/default/xui/pt/floater_windlight_options.xml        | 2 +-
 indra/newview/skins/default/xui/pt/floater_world_map.xml      | 2 +-
 569 files changed, 579 insertions(+), 579 deletions(-)

diff --git a/indra/newview/skins/default/xui/da/floater_about.xml b/indra/newview/skins/default/xui/da/floater_about.xml
index 81d4d3fdfdb..f0c9c45d041 100644
--- a/indra/newview/skins/default/xui/da/floater_about.xml
+++ b/indra/newview/skins/default/xui/da/floater_about.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="Om [APP_NAME]">
+<floater name="floater_about" title="OM [APP_NAME]">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
 	<text_editor name="credits_editor">
diff --git a/indra/newview/skins/default/xui/da/floater_about_land.xml b/indra/newview/skins/default/xui/da/floater_about_land.xml
index c4cf722159c..cb5d618dde2 100644
--- a/indra/newview/skins/default/xui/da/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/da/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="Om land">
+<floater name="floaterland" title="OM LAND">
 	<tab_container name="landtab">
 		<panel label="Generelt" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/da/floater_auction.xml b/indra/newview/skins/default/xui/da/floater_auction.xml
index f981242f8a9..8f793557bea 100644
--- a/indra/newview/skins/default/xui/da/floater_auction.xml
+++ b/indra/newview/skins/default/xui/da/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_auction" title="Start Linden land salg">
+<floater name="floater_auction" title="START LINDEN LAND SALG">
 	<check_box label="Vis også gul aftegning af område" name="fence_check" />
 	<button label="Foto" label_selected="Foto" name="snapshot_btn" />
 	<button label="OK" label_selected="OK" name="ok_btn" />
diff --git a/indra/newview/skins/default/xui/da/floater_avatar_picker.xml b/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
index f93f0a35254..0ddb6e9dbe5 100644
--- a/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Vælg beboer">
+<floater name="avatarpicker" title="VÆLG BEBOER">
 	<tab_container name="ResidentChooserTabs">
 		<panel label="Søg" name="SearchPanel">
 			<text name="InstructSearchResidentName">
diff --git a/indra/newview/skins/default/xui/da/floater_avatar_textures.xml b/indra/newview/skins/default/xui/da/floater_avatar_textures.xml
index e3a736b200d..27bfa367f65 100644
--- a/indra/newview/skins/default/xui/da/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/da/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="avatar_texture_debug" title="Avatar teksturer">
+<floater name="avatar_texture_debug" title="AVATAR TEKSTURER">
 	<text name="baked_label">
 		Faste teksturer
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_beacons.xml b/indra/newview/skins/default/xui/da/floater_beacons.xml
index 318a23df4c0..18bc7aeb31d 100644
--- a/indra/newview/skins/default/xui/da/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/da/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="beacons" title="Pejlelys">
+<floater name="beacons" title="PEJLELYS">
 	<panel name="beacons_panel">
 		<check_box label="Kun scriptede objekter med &quot;rør&quot;" name="touch_only" />
 		<check_box label="Scriptede objekter" name="scripted" />
diff --git a/indra/newview/skins/default/xui/da/floater_build_options.xml b/indra/newview/skins/default/xui/da/floater_build_options.xml
index 3b3e14ad642..7eb0d4c035c 100644
--- a/indra/newview/skins/default/xui/da/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/da/floater_build_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="build options floater" title="Gitter indstillinger">
+<floater name="build options floater" title="GITTER INDSTILLINGER">
 	<spinner label="Gitter enhed (meter)" name="GridResolution" width="200" label_width="136"/>
 	<spinner label="Gitter rækkevidde (meter)" name="GridDrawSize" width="200" label_width="136"/>
 	<check_box label="Aktiver låsning til under-enheder" name="GridSubUnit" />
diff --git a/indra/newview/skins/default/xui/da/floater_bulk_perms.xml b/indra/newview/skins/default/xui/da/floater_bulk_perms.xml
index 77ae7fe0608..9cf44d64791 100644
--- a/indra/newview/skins/default/xui/da/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/da/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Masse-ændring af rettigheder på indhold">
+<floater name="floaterbulkperms" title="MASSE-ÆNDRING AF RETTIGHEDER PÅ INDHOLD">
 	<text name="applyto">
 		Indholdstyper
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_bumps.xml b/indra/newview/skins/default/xui/da/floater_bumps.xml
index 62a1cd9e5c8..704e6c36085 100644
--- a/indra/newview/skins/default/xui/da/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/da/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_bumps" title="Bump, skub &amp; slag">
+<floater name="floater_bumps" title="BUMP, SKUB &amp; SLAG">
 	<string name="none_detected">
 		Ingen registreret
 	</string>
diff --git a/indra/newview/skins/default/xui/da/floater_buy_contents.xml b/indra/newview/skins/default/xui/da/floater_buy_contents.xml
index c9df548747a..8dccf32304d 100644
--- a/indra/newview/skins/default/xui/da/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/da/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_buy_contents" title="Køb indhold">
+<floater name="floater_buy_contents" title="KØB INDHOLD">
 	<text name="contains_text">
 		[NAME] indeholder:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_buy_currency.xml b/indra/newview/skins/default/xui/da/floater_buy_currency.xml
index 1c5876572b5..a2b6dec91c5 100644
--- a/indra/newview/skins/default/xui/da/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/da/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="buy currency" title="Køb valuta">
+<floater name="buy currency" title="KØB VALUTA">
 	<text name="info_buying">
 		Køber valuta:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_buy_land.xml b/indra/newview/skins/default/xui/da/floater_buy_land.xml
index 1d42ffb45a8..71e6eaa7f7d 100644
--- a/indra/newview/skins/default/xui/da/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/da/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Køb land">
+<floater name="buy land" title="KØB LAND">
 	<text name="region_name_label">
 		Region:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_buy_object.xml b/indra/newview/skins/default/xui/da/floater_buy_object.xml
index f0e22c8eeea..266753902ba 100644
--- a/indra/newview/skins/default/xui/da/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/da/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="contents" title="Køb kopi af objekt">
+<floater name="contents" title="KØB KOPI AF OBJEKT">
 	<text name="contents_text">
 		og dets indhold:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_choose_group.xml b/indra/newview/skins/default/xui/da/floater_choose_group.xml
index 01c5bf33672..9f02f281db3 100644
--- a/indra/newview/skins/default/xui/da/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/da/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="groups" title="Grupper">
+<floater name="groups" title="GRUPPER">
 	<text name="groupdesc">
 		Vælg en gruppe:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_color_picker.xml b/indra/newview/skins/default/xui/da/floater_color_picker.xml
index c8e1fc813b4..d0a47b76e03 100644
--- a/indra/newview/skins/default/xui/da/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/da/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="ColorPicker" title="Farve vælger">
+<floater name="ColorPicker" title="FARVE VÆLGER">
 	<text name="r_val_text">
 		Rød:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_customize.xml b/indra/newview/skins/default/xui/da/floater_customize.xml
index b434bea1ced..b2409f16822 100644
--- a/indra/newview/skins/default/xui/da/floater_customize.xml
+++ b/indra/newview/skins/default/xui/da/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Appearance" width="509">
+<floater name="floater customize" title="APPEARANCE" width="509">
 	<tab_container name="customize tab container" width="507">
 		<placeholder label="Krops Dele" name="body_parts_placeholder"/>
 		<panel label="Kropsbygning" name="Shape">
diff --git a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml
index 0ca7874c37b..94cf4546e31 100644
--- a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Day Cycle Floater" title="Dag cyklus opsætning">
+<floater name="Day Cycle Floater" title="DAG CYKLUS OPSÆTNING">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Dag cyklus" name="Day Cycle">
 			<button label="?" name="WLDayCycleHelp" />
diff --git a/indra/newview/skins/default/xui/da/floater_device_settings.xml b/indra/newview/skins/default/xui/da/floater_device_settings.xml
index 28afd7c459b..5e53a697f2f 100644
--- a/indra/newview/skins/default/xui/da/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/da/floater_device_settings.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_device_settings" title="Stemme chat indstillinger" />
+<floater name="floater_device_settings" title="STEMME CHAT INDSTILLINGER" />
diff --git a/indra/newview/skins/default/xui/da/floater_env_settings.xml b/indra/newview/skins/default/xui/da/floater_env_settings.xml
index 907771c67a2..6c5b6d3b6b1 100644
--- a/indra/newview/skins/default/xui/da/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/da/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Environment Editor Floater" title="Redigering af omgivelser">
+<floater name="Environment Editor Floater" title="REDIGERING AF OMGIVELSER">
 	<text name="EnvTimeText">
 		Tid på dagen
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_font_test.xml b/indra/newview/skins/default/xui/da/floater_font_test.xml
index 7d8ef1b3105..591d07188cf 100644
--- a/indra/newview/skins/default/xui/da/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/da/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Font test">
+<floater name="contents" title="FONT TEST">
 	<text name="linea">
 		OverrideTest, skal vises her som fonten &apos;Times&apos;. (Fra default/xui/en-us)
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_gesture.xml b/indra/newview/skins/default/xui/da/floater_gesture.xml
index 800693ea8c3..11ecc8bd9a8 100644
--- a/indra/newview/skins/default/xui/da/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/da/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="gestures" title="Aktive bevægelser">
+<floater name="gestures" title="AKTIVE BEVÆGELSER">
 	<text name="help_label">
 		Dobbelt-klik på en bevægelse for at afspille animation og lyd.
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_hardware_settings.xml b/indra/newview/skins/default/xui/da/floater_hardware_settings.xml
index dcc1b8d2e8e..fc1231ceef0 100644
--- a/indra/newview/skins/default/xui/da/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/da/floater_hardware_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Hardware Settings Floater" title="Hardware opsætning">
+<floater name="Hardware Settings Floater" title="HARDWARE OPSÆTNING">
 	<text name="Filtering:">
 		Filtrering:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_hud.xml b/indra/newview/skins/default/xui/da/floater_hud.xml
index 0f11e2346da..18584e57cae 100644
--- a/indra/newview/skins/default/xui/da/floater_hud.xml
+++ b/indra/newview/skins/default/xui/da/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_hud" title="Tutorial" />
+<floater name="floater_hud" title="TUTORIAL" />
diff --git a/indra/newview/skins/default/xui/da/floater_inspect.xml b/indra/newview/skins/default/xui/da/floater_inspect.xml
index 56c3f6f7844..0610e9408fb 100644
--- a/indra/newview/skins/default/xui/da/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/da/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Inspecér objekter">
+<floater name="inspect" title="INSPECÉR OBJEKTER">
 	<scroll_list name="object_list" tool_tip="Vælg et objekt fra listen for at markere det">
 		<column label="Objekt navn" name="object_name"/>
 		<column label="Objekt ejer" name="owner_name"/>
diff --git a/indra/newview/skins/default/xui/da/floater_inventory.xml b/indra/newview/skins/default/xui/da/floater_inventory.xml
index 0b931bd7f46..8bfe7164d0c 100644
--- a/indra/newview/skins/default/xui/da/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/da/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Inventory" title="Beholdning">
+<floater name="Inventory" title="BEHOLDNING">
 	<search_editor label="Skriv her for at søge" name="inventory search editor" />
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Alle ting" name="All Items" />
diff --git a/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml
index 9f28440fb0c..fbcf202c54d 100644
--- a/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="item properties" title="Egenskaber for Objekt i Beholdning">
+<floater name="item properties" title="EGENSKABER FOR OBJEKT I BEHOLDNING">
 	<text name="LabelItemNameTitle">
 		Navn:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml
index 60a7d78aead..af2910fe589 100644
--- a/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Inventory Finder" title="inventory_recent_items">
+<floater name="Inventory Finder" title="INVENTORY_RECENT_ITEMS">
 	<check_box label="Animation" name="check_animation" />
 	<check_box label="Visitkort" name="check_calling_card" />
 	<check_box label="Tøj" name="check_clothing" />
diff --git a/indra/newview/skins/default/xui/da/floater_joystick.xml b/indra/newview/skins/default/xui/da/floater_joystick.xml
index 280650a04b2..4954b7b619e 100644
--- a/indra/newview/skins/default/xui/da/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/da/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Joystick opsætning">
+<floater name="Joystick" title="JOYSTICK OPSÆTNING">
 	<check_box name="enable_joystick" label="Aktiver Joystick:"/>
 	<spinner label="X akse mapping" name="JoystickAxis1"/>
 	<spinner label="Y akse mapping" name="JoystickAxis2"/>
diff --git a/indra/newview/skins/default/xui/da/floater_lagmeter.xml b/indra/newview/skins/default/xui/da/floater_lagmeter.xml
index 7e7c2dc0d3e..bcf15ea9262 100644
--- a/indra/newview/skins/default/xui/da/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/da/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="Lag måler">
+<floater name="floater_lagmeter" title="LAG MÃ…LER">
 	<button label="" label_selected="" name="client_lagmeter" tool_tip="Status for klient lag"/>
 	<text name="client">
 		Klient:
diff --git a/indra/newview/skins/default/xui/da/floater_land_holdings.xml b/indra/newview/skins/default/xui/da/floater_land_holdings.xml
index bd623e7b757..39c906eb183 100644
--- a/indra/newview/skins/default/xui/da/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/da/floater_land_holdings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Mit land">
+<floater name="land holdings floater" title="MIT LAND">
 	<scroll_list name="parcel list">
 		<column label="Navn" name="name"/>
 		<column label="Region" name="location"/>
diff --git a/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml
index 112dc70e452..cfc5fb8860b 100644
--- a/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="Script: Nyt script">
+<floater name="script ed float" title="SCRIPT: NYT SCRIPT">
 	<button label="Nulstil" label_selected="Reset" name="Reset" />
 	<check_box label="Kører" name="running" />
 	<check_box label="Mono" name="mono" />
diff --git a/indra/newview/skins/default/xui/da/floater_lsl_guide.xml b/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
index d3454098591..ebc86c5c732 100644
--- a/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="LSL Wiki">
+<floater name="script ed float" title="LSL WIKI">
 	<check_box label="Følg markøreren" name="lock_check" />
 	<combo_box label="LÃ¥s" name="history_combo" left_delta="114" width="70"/>
 	<button label="Tilbage" name="back_btn" />
diff --git a/indra/newview/skins/default/xui/da/floater_media_browser.xml b/indra/newview/skins/default/xui/da/floater_media_browser.xml
index 50004cfa0c1..47667973ba3 100644
--- a/indra/newview/skins/default/xui/da/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/da/floater_media_browser.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="Medie vælger">
+<floater name="floater_about" title="MEDIE VÆLGER">
 	<layout_stack name="stack1">
 		<layout_panel name="nav_controls">
 			<button label="Tilbage" name="back" />
diff --git a/indra/newview/skins/default/xui/da/floater_mem_leaking.xml b/indra/newview/skins/default/xui/da/floater_mem_leaking.xml
index 6d5b5bc0cec..e7ad821d408 100644
--- a/indra/newview/skins/default/xui/da/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/da/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="Memory Leaking Simulation">
+<floater name="MemLeak" title="MEMORY LEAKING SIMULATION">
 	<spinner label="Leaking Speed (bytes per frame):" name="leak_speed" />
 	<spinner label="Max Leaked Memory (MB):" name="max_leak" />
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/da/floater_mute_object.xml b/indra/newview/skins/default/xui/da/floater_mute_object.xml
index e64557b177e..4145918b495 100644
--- a/indra/newview/skins/default/xui/da/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/da/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="mute by name" title="Bloker objekt via navn">
+<floater name="mute by name" title="BLOKER OBJEKT VIA NAVN">
 	<text name="message">
 		Blokering via navn har ikke betydning for lyde.
 Du skal skrive det præcise navn på objektet.
diff --git a/indra/newview/skins/default/xui/da/floater_my_friends.xml b/indra/newview/skins/default/xui/da/floater_my_friends.xml
index 687266a08a1..54b401076cd 100644
--- a/indra/newview/skins/default/xui/da/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/da/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_my_friends" title="Kontakter">
+<floater name="floater_my_friends" title="KONTAKTER">
 	<tab_container name="friends_and_groups">
 		<panel label="Venner" name="friends_panel" />
 		<panel label="Grupper" name="groups_panel" />
diff --git a/indra/newview/skins/default/xui/da/floater_openobject.xml b/indra/newview/skins/default/xui/da/floater_openobject.xml
index d37e3177fa1..5875b7a967f 100644
--- a/indra/newview/skins/default/xui/da/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/da/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="objectcontents" title="Objekt indhold">
+<floater name="objectcontents" title="OBJEKT INDHOLD">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_perm_prefs.xml b/indra/newview/skins/default/xui/da/floater_perm_prefs.xml
index f4b9b0a664e..69a8d3af94f 100644
--- a/indra/newview/skins/default/xui/da/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/da/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Standard tilladelser ved hentning">
+<floater name="perm prefs" title="STANDARD TILLADELSER VED HENTNING">
 	<panel label="Tilladelser" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Del med gruppe" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/da/floater_postcard.xml b/indra/newview/skins/default/xui/da/floater_postcard.xml
index 24d45062ae7..cd61e7ac975 100644
--- a/indra/newview/skins/default/xui/da/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/da/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Postcard" title="E-mail billede">
+<floater name="Postcard" title="E-MAIL BILLEDE">
 	<text name="to_label">
 		Send til:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_preferences.xml b/indra/newview/skins/default/xui/da/floater_preferences.xml
index 26e932e3ccb..e251c9ad2c6 100644
--- a/indra/newview/skins/default/xui/da/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/da/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Preferences" title="Indstillinger">
+<floater name="Preferences" title="INDSTILLINGER">
 	<button label="OK" label_selected="OK" name="OK" />
 	<button label="Annullér" label_selected="Annullér" name="Cancel" />
 	<button label="Gem" label_selected="Gem" name="Apply" />
diff --git a/indra/newview/skins/default/xui/da/floater_preview_classified.xml b/indra/newview/skins/default/xui/da/floater_preview_classified.xml
index 6cc4c139f1e..cf2d14b80a4 100644
--- a/indra/newview/skins/default/xui/da/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/da/floater_preview_classified.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="Annonce information" />
+<floater name="classified_preview" title="ANNONCE INFORMATION" />
diff --git a/indra/newview/skins/default/xui/da/floater_preview_event.xml b/indra/newview/skins/default/xui/da/floater_preview_event.xml
index f1be35e1c3f..584085fea0b 100644
--- a/indra/newview/skins/default/xui/da/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/da/floater_preview_event.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="Event information" />
+<floater name="event_preview" title="EVENT INFORMATION" />
diff --git a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
index 68d04d6f9b8..7258824878d 100644
--- a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview notecard" title="Note:">
+<floater name="preview notecard" title="NOTE:">
 	<button label="Gem" label_selected="Gem" name="Save"/>
 	<text name="desc txt">
 		Beskrivelse:
diff --git a/indra/newview/skins/default/xui/da/floater_region_info.xml b/indra/newview/skins/default/xui/da/floater_region_info.xml
index 9f6e326cf33..5c95c8ed5ef 100644
--- a/indra/newview/skins/default/xui/da/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/da/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="regioninfo" title="Region/Estate" />
+<floater name="regioninfo" title="REGION/ESTATE" />
diff --git a/indra/newview/skins/default/xui/da/floater_report_abuse.xml b/indra/newview/skins/default/xui/da/floater_report_abuse.xml
index 01f152c43ad..6f1e2884eb6 100644
--- a/indra/newview/skins/default/xui/da/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/da/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Rapportér misbrug">
+<floater name="floater_report_abuse" title="RAPPORTÉR MISBRUG">
 	<texture_picker label="" name="screenshot"/>
 	<check_box label="Inkludér billede" name="screen_check"/>
 	<text name="reporter_title">
diff --git a/indra/newview/skins/default/xui/da/floater_script_debug.xml b/indra/newview/skins/default/xui/da/floater_script_debug.xml
index 17e14cd9b95..df60a2e23f1 100644
--- a/indra/newview/skins/default/xui/da/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/da/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <multi_floater name="script debug floater" title="Script advarsel/fejl">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[All scripts]" />
+		<floater label="Script" name="all_scripts" title="[ALL SCRIPTS]" />
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/da/floater_script_preview.xml b/indra/newview/skins/default/xui/da/floater_script_preview.xml
index 6990e8db0ee..ede277bbd22 100644
--- a/indra/newview/skins/default/xui/da/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/da/floater_script_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="Script: Rotation Script">
+<floater name="preview lsl text" title="SCRIPT: ROTATION SCRIPT">
 	<text name="desc txt">
 		Beskrivelse:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_script_queue.xml b/indra/newview/skins/default/xui/da/floater_script_queue.xml
index 47dbf534bd0..3f54c924267 100644
--- a/indra/newview/skins/default/xui/da/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/da/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="queue" title="Nulstil forløb">
+<floater name="queue" title="NULSTIL FORLØB">
 	<button label="Luk" label_selected="Luk" name="close" />
 </floater>
diff --git a/indra/newview/skins/default/xui/da/floater_script_search.xml b/indra/newview/skins/default/xui/da/floater_script_search.xml
index d4dae8951f3..62f311be6e9 100644
--- a/indra/newview/skins/default/xui/da/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/da/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script search" title="Script søgning">
+<floater name="script search" title="SCRIPT SØGNING">
 	<check_box label="Store/små bogstaver har ingen betydning" name="case_text" />
 	<button label="Søg" label_selected="Søg" name="search_btn" />
 	<button label="Erstat" label_selected="Erstat" name="replace_btn" />
diff --git a/indra/newview/skins/default/xui/da/floater_sell_land.xml b/indra/newview/skins/default/xui/da/floater_sell_land.xml
index 87023b4f640..fcbe0abe081 100644
--- a/indra/newview/skins/default/xui/da/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/da/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="sell land" title="Sælg land">
+<floater name="sell land" title="SÆLG LAND">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/da/floater_settings_debug.xml b/indra/newview/skins/default/xui/da/floater_settings_debug.xml
index 60f99deae2e..c1429ed3a36 100644
--- a/indra/newview/skins/default/xui/da/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/da/floater_settings_debug.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="settings_debug" title="Tekniske indstillinger">
+<floater name="settings_debug" title="TEKNISKE INDSTILLINGER">
 	<combo_box name="boolean_combo">
 		<combo_box.item name="TRUE" label="TRUE (Valgt)" />
 		<combo_box.item name="FALSE" label="FALSE (Fravalgt)" />
diff --git a/indra/newview/skins/default/xui/da/floater_snapshot.xml b/indra/newview/skins/default/xui/da/floater_snapshot.xml
index d7a51798907..3eed869db44 100644
--- a/indra/newview/skins/default/xui/da/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/da/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Se foto">
+<floater name="Snapshot" title="SE FOTO">
 	<text name="type_label">
 		Hvor skal foto hen?
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_sound_preview.xml b/indra/newview/skins/default/xui/da/floater_sound_preview.xml
index 606d290e1db..e54bdf4f42c 100644
--- a/indra/newview/skins/default/xui/da/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/da/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		Navn:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_statistics.xml b/indra/newview/skins/default/xui/da/floater_statistics.xml
index 0443553d509..8c33f3ecb35 100644
--- a/indra/newview/skins/default/xui/da/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/da/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statistik"/>
+<floater name="stats floater" title="STATISTIK"/>
diff --git a/indra/newview/skins/default/xui/da/floater_telehub.xml b/indra/newview/skins/default/xui/da/floater_telehub.xml
index cd1fb338311..bf31da95158 100644
--- a/indra/newview/skins/default/xui/da/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/da/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="telehub" title="Telehub">
+<floater name="telehub" title="TELEHUB">
 	<text name="status_text_connected">
 		Telehub forbundet til objekt [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml
index c35e3aec4c8..4167e2938aa 100644
--- a/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="texture picker" title="Vælg: Tekstur">
+<floater name="texture picker" title="VÆLG: TEKSTUR">
 	<string name="choose_picture">
 		Klik for at vælge et billede
 	</string>
diff --git a/indra/newview/skins/default/xui/da/floater_tools.xml b/indra/newview/skins/default/xui/da/floater_tools.xml
index e50494ff9ed..c3287bac84e 100644
--- a/indra/newview/skins/default/xui/da/floater_tools.xml
+++ b/indra/newview/skins/default/xui/da/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Byg">
+<floater name="toolbox floater" title="" short_title="BYG">
 	<button label="" label_selected="" name="button focus" tool_tip="Fokus"/>
 	<button label="" label_selected="" name="button move" tool_tip="Flyt"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Redigér"/>
diff --git a/indra/newview/skins/default/xui/da/floater_top_objects.xml b/indra/newview/skins/default/xui/da/floater_top_objects.xml
index dc4605cc121..0cfbe77def7 100644
--- a/indra/newview/skins/default/xui/da/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/da/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="top_objects" title="Indlæser...">
+<floater name="top_objects" title="INDLÆSER...">
 	<text name="title_text">
 		Henter...
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_water.xml b/indra/newview/skins/default/xui/da/floater_water.xml
index 33a10579abb..63880b4a690 100644
--- a/indra/newview/skins/default/xui/da/floater_water.xml
+++ b/indra/newview/skins/default/xui/da/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Water Floater" title="Avanceret opsætning af vand">
+<floater name="Water Floater" title="AVANCERET OPSÆTNING AF VAND">
 	<text name="KeyFramePresetsText">
 		Vand opsætninger:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_windlight_options.xml b/indra/newview/skins/default/xui/da/floater_windlight_options.xml
index 9754b1f0743..4786609b539 100644
--- a/indra/newview/skins/default/xui/da/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/da/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="WindLight floater" title="Avanceret opsætning for himmel">
+<floater name="WindLight floater" title="AVANCERET OPSÆTNING FOR HIMMEL">
 	<text name="KeyFramePresetsText">
 		Faste indstillinger:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_world_map.xml b/indra/newview/skins/default/xui/da/floater_world_map.xml
index d4b58f62329..62930716ce4 100644
--- a/indra/newview/skins/default/xui/da/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/da/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Verdenskort">
+<floater name="worldmap" title="VERDENSKORT">
 	<tab_container name="maptab">
 		<panel label="Objekter" name="objects_mapview"/>
 		<panel label="Terræn" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml
index d36f5a43f6c..6e51fe3e2dd 100644
--- a/indra/newview/skins/default/xui/de/floater_about.xml
+++ b/indra/newview/skins/default/xui/de/floater_about.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="Ãœber [APP_NAME]">
+<floater name="floater_about" title="ÃœBER [APP_NAME]">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
 	<text_editor name="credits_editor">
diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml
index 853302d15c4..ceb831c12de 100644
--- a/indra/newview/skins/default/xui/de/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="Land-Info">
+<floater name="floaterland" title="LAND-INFO">
 	<tab_container name="landtab">
 		<panel label="Allgemein" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/de/floater_auction.xml b/indra/newview/skins/default/xui/de/floater_auction.xml
index 42f6a07dc37..9d0db766c9e 100644
--- a/indra/newview/skins/default/xui/de/floater_auction.xml
+++ b/indra/newview/skins/default/xui/de/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_auction" title="Linden-Landverkauf starten">
+<floater name="floater_auction" title="LINDEN-LANDVERKAUF STARTEN">
 	<check_box label="Gelben Auswahlrahmen einschließen" name="fence_check" />
 	<button label="Foto" label_selected="Foto" name="snapshot_btn" />
 	<button label="OK" label_selected="OK" name="ok_btn" />
diff --git a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
index c546d91d72c..e1ea7926944 100644
--- a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Einwohner auswählen">
+<floater name="avatarpicker" title="EINWOHNER AUSWÄHLEN">
 	<tab_container name="ResidentChooserTabs">
 		<panel label="Suchen" name="SearchPanel">
 			<text name="InstructSearchResidentName">
diff --git a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml
index 823d6de78b8..3072735c669 100644
--- a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatar_texture_debug" title="Avatar-Texturen">
+<floater name="avatar_texture_debug" title="AVATAR-TEXTUREN">
 	<text name="label">
 		Gebackene Texturen
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_beacons.xml b/indra/newview/skins/default/xui/de/floater_beacons.xml
index 0992727e730..58e2e2681f4 100644
--- a/indra/newview/skins/default/xui/de/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/de/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Beacons">
+<floater name="beacons" title="BEACONS">
 	<panel name="beacons_panel">
 		<check_box label="Auf Berührung beschränkte Skriptobjekte" name="touch_only"/>
 		<check_box label="Skripting-Objekte" name="scripted"/>
diff --git a/indra/newview/skins/default/xui/de/floater_build_options.xml b/indra/newview/skins/default/xui/de/floater_build_options.xml
index de3617ed258..58f117f6b16 100644
--- a/indra/newview/skins/default/xui/de/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_build_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="build options floater" title="Rasteroptionen">
+<floater name="build options floater" title="RASTEROPTIONEN">
 	<spinner label="Rastereinheit (Meter)" name="GridResolution" />
 	<spinner label="Rastergröße (Meter)" name="GridDrawSize" />
 	<check_box label="Einrasten von Untereinheiten aktivieren" name="GridSubUnit" />
diff --git a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
index f058a0ed967..fff6aa4b73e 100644
--- a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Mehrere Inhaltsberechtigungen ändern">
+<floater name="floaterbulkperms" title="MEHRERE INHALTSBERECHTIGUNGEN ÄNDERN">
 	<text name="applyto">
 		Inhaltsarten
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_bumps.xml b/indra/newview/skins/default/xui/de/floater_bumps.xml
index 7b21042c2b3..b7909bf02d8 100644
--- a/indra/newview/skins/default/xui/de/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/de/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_bumps" title="Rempler, Stöße und Schläge">
+<floater name="floater_bumps" title="REMPLER, STÖßE UND SCHLÄGE">
 	<text name="none_detected">
 		Nicht erkannt
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_buy_contents.xml b/indra/newview/skins/default/xui/de/floater_buy_contents.xml
index 01858b3c364..47ea6a1bd44 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_buy_contents" title="Inhalte kaufen" min_width="300">
+<floater name="floater_buy_contents" title="INHALTE KAUFEN" min_width="300">
 	<text name="contains_text">
 		[NAME] enthält:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_buy_currency.xml b/indra/newview/skins/default/xui/de/floater_buy_currency.xml
index 787f4698540..05750a17820 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="buy currency" title="Geld kaufen">
+<floater name="buy currency" title="GELD KAUFEN">
 	<text name="info_buying">
 		Kaufe Geld:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_buy_land.xml b/indra/newview/skins/default/xui/de/floater_buy_land.xml
index e0abf8fae97..72a35db78c8 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Land kaufen">
+<floater name="buy land" title="LAND KAUFEN">
 	<text name="region_name_label">
 		Region:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_buy_object.xml b/indra/newview/skins/default/xui/de/floater_buy_object.xml
index 3cfa59ff06d..df6bf76240d 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="contents" title="Objektkopie kaufen">
+<floater name="contents" title="OBJEKTKOPIE KAUFEN">
 	<text name="contents_text">
 		samt Inhalt:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_choose_group.xml b/indra/newview/skins/default/xui/de/floater_choose_group.xml
index dd29aa75501..398645347bd 100644
--- a/indra/newview/skins/default/xui/de/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/de/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="groups" title="Gruppen">
+<floater name="groups" title="GRUPPEN">
 	<text name="groupdesc">
 		Gruppe wählen:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_color_picker.xml b/indra/newview/skins/default/xui/de/floater_color_picker.xml
index fa2f616249d..47f256918a0 100644
--- a/indra/newview/skins/default/xui/de/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/de/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="ColorPicker" title="Farbauswahl">
+<floater name="ColorPicker" title="FARBAUSWAHL">
 	<text name="r_val_text">
 		Rot:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_customize.xml b/indra/newview/skins/default/xui/de/floater_customize.xml
index 06b53dd8b48..f1ecd21c014 100644
--- a/indra/newview/skins/default/xui/de/floater_customize.xml
+++ b/indra/newview/skins/default/xui/de/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Aussehen">
+<floater name="floater customize" title="AUSSEHEN">
 	<tab_container name="customize tab container">
 		<placeholder label="Körperteile" name="body_parts_placeholder"/>
 		<panel label="Form" name="Shape">
diff --git a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
index d5a216a0b56..7f4dc4a79e9 100644
--- a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Day Cycle Floater" title="Tageszyklus-Editor">
+<floater name="Day Cycle Floater" title="TAGESZYKLUS-EDITOR">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Tageszyklus" name="Day Cycle">
 			<button label=" ?" name="WLDayCycleHelp" />
diff --git a/indra/newview/skins/default/xui/de/floater_device_settings.xml b/indra/newview/skins/default/xui/de/floater_device_settings.xml
index 734f4e942cd..9108f3c2e5d 100644
--- a/indra/newview/skins/default/xui/de/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/de/floater_device_settings.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_device_settings" title="Geräte-Einstellungen für Voice-Chat" />
+<floater name="floater_device_settings" title="GERÄTE-EINSTELLUNGEN FÜR VOICE-CHAT" />
diff --git a/indra/newview/skins/default/xui/de/floater_env_settings.xml b/indra/newview/skins/default/xui/de/floater_env_settings.xml
index 3717ff6a48e..c9afcc84710 100644
--- a/indra/newview/skins/default/xui/de/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/de/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Environment Editor Floater" title="Umwelt-Editor">
+<floater name="Environment Editor Floater" title="UMWELT-EDITOR">
 	<text name="EnvTimeText">
 		Tageszeit
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_font_test.xml b/indra/newview/skins/default/xui/de/floater_font_test.xml
index 54278fc094a..522d966431a 100644
--- a/indra/newview/skins/default/xui/de/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/de/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Schriftart-Test">
+<floater name="contents" title="SCHRIFTART-TEST">
 	<text name="linea">
 		OverrideTest, sollte hier als Times angezeigt werden. (Aus default/xui/en-us)
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_gesture.xml b/indra/newview/skins/default/xui/de/floater_gesture.xml
index bdee3b86648..aff0a9b92dc 100644
--- a/indra/newview/skins/default/xui/de/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/de/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="gestures" title="Aktive Gesten">
+<floater name="gestures" title="AKTIVE GESTEN">
 	<text name="help_label">
 		Doppelklicken Sie auf eine Geste, um Animationen und Sound &#10;abzuspielen.
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_god_tools.xml b/indra/newview/skins/default/xui/de/floater_god_tools.xml
index c7cfb5d9d3d..f93a9b94761 100644
--- a/indra/newview/skins/default/xui/de/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_god_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="godtools floater" title="Gott-Werkzeuge">
+<floater name="godtools floater" title="GOTT-WERKZEUGE">
 	<tab_container name="GodTools Tabs">
 		<panel label="Raster" name="grid">
 			<button label="Alle Benutzer hinauswerfen" label_selected="Alle Benutzer hinauswerfen"
diff --git a/indra/newview/skins/default/xui/de/floater_hardware_settings.xml b/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
index 4051776b0d6..68f7d6872e8 100644
--- a/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Hardware Settings Floater" title="Hardware-Einstellungen">
+<floater name="Hardware Settings Floater" title="HARDWARE-EINSTELLUNGEN">
 	<text name="Filtering:">
 		Filtern:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_hud.xml b/indra/newview/skins/default/xui/de/floater_hud.xml
index 0f11e2346da..18584e57cae 100644
--- a/indra/newview/skins/default/xui/de/floater_hud.xml
+++ b/indra/newview/skins/default/xui/de/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_hud" title="Tutorial" />
+<floater name="floater_hud" title="TUTORIAL" />
diff --git a/indra/newview/skins/default/xui/de/floater_inspect.xml b/indra/newview/skins/default/xui/de/floater_inspect.xml
index f8c9b628243..f9421788bd7 100644
--- a/indra/newview/skins/default/xui/de/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/de/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="inspect" title="Objekt prüfen" min_width="450" >
+<floater name="inspect" title="OBJEKT PRÃœFEN" min_width="450" >
 	<scroll_list name="object_list"
 	     tool_tip="Wählen Sie ein Objekt aus dieser Liste, um es in der Second Life-Welt zu markieren">
 		<column label="Objektname" name="object_name" />
diff --git a/indra/newview/skins/default/xui/de/floater_inventory.xml b/indra/newview/skins/default/xui/de/floater_inventory.xml
index c8c67240d87..6444e878820 100644
--- a/indra/newview/skins/default/xui/de/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/de/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Inventory" title="Inventar">
+<floater name="Inventory" title="INVENTAR">
 	<search_editor label="Suchanfrage hier eintippen" name="inventory search editor" />
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Alle Objekte" name="All Items" />
diff --git a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
index 3e79a31abd0..ef85efdae0d 100644
--- a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="item properties" title="Inventarobjekt-Eigenschaften">
+<floater name="item properties" title="INVENTAROBJEKT-EIGENSCHAFTEN">
 	<text name="LabelItemNameTitle">
 		Name:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml
index 2f2eb5aa8d9..8dfffe06d19 100644
--- a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Inventory Finder" title="inventar_letzte_objekte">
+<floater name="Inventory Finder" title="INVENTAR_LETZTE_OBJEKTE">
 	<check_box label="Animation" name="check_animation" />
 	<check_box label="Visitenkarten" name="check_calling_card" />
 	<check_box label="Kleidung" name="check_clothing" />
diff --git a/indra/newview/skins/default/xui/de/floater_joystick.xml b/indra/newview/skins/default/xui/de/floater_joystick.xml
index ccf6f14eade..9507d063d12 100644
--- a/indra/newview/skins/default/xui/de/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/de/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Joystick-Konfiguration">
+<floater name="Joystick" title="JOYSTICK-KONFIGURATION">
 	<check_box name="enable_joystick" width="80" label="Joystick aktivieren:"/>
 	<text left="140" name="joystick_type" width="360"/>
 	<spinner label="X-Achse" name="JoystickAxis1"/>
diff --git a/indra/newview/skins/default/xui/de/floater_lagmeter.xml b/indra/newview/skins/default/xui/de/floater_lagmeter.xml
index 4dd9fd6c76d..9468557fc48 100644
--- a/indra/newview/skins/default/xui/de/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/de/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_lagmeter" title="Lag-Anzeige">
+<floater name="floater_lagmeter" title="LAG-ANZEIGE">
 	<button name="client_lagmeter" tool_tip="Client-Lag-Status" />
 	<text name="client">
 		Client:
diff --git a/indra/newview/skins/default/xui/de/floater_land_holdings.xml b/indra/newview/skins/default/xui/de/floater_land_holdings.xml
index 68549033829..39752111177 100644
--- a/indra/newview/skins/default/xui/de/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/de/floater_land_holdings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Mein Land">
+<floater name="land holdings floater" title="MEIN LAND">
 	<scroll_list name="parcel list">
 		<column label="Parzellenname" name="name"/>
 		<column label="Region" name="location"/>
diff --git a/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml
index 8d499bc3003..5afeb033951 100644
--- a/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="Skript: Neues Skript">
+<floater name="script ed float" title="SKRIPT: NEUES SKRIPT">
 	<button label="Zurücksetzen" label_selected="Zurücksetzen" name="Reset" />
 	<check_box label="Läuft" name="running" />
 	<check_box label="Mono" name="mono" />
diff --git a/indra/newview/skins/default/xui/de/floater_lsl_guide.xml b/indra/newview/skins/default/xui/de/floater_lsl_guide.xml
index d7f56b302df..dd6d559c404 100644
--- a/indra/newview/skins/default/xui/de/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/de/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="LSL-Wiki">
+<floater name="script ed float" title="LSL-WIKI">
 	<check_box label="Cursor folgen" name="lock_check" />
 	<combo_box label="Sperren" name="history_combo" />
 	<button label="Zurück" name="back_btn" />
diff --git a/indra/newview/skins/default/xui/de/floater_media_browser.xml b/indra/newview/skins/default/xui/de/floater_media_browser.xml
index ee2532127eb..a16c2408fec 100644
--- a/indra/newview/skins/default/xui/de/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/de/floater_media_browser.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="Medienbrowser">
+<floater name="floater_about" title="MEDIENBROWSER">
 	<layout_stack name="stack1">
 		<layout_panel name="nav_controls">
 			<button label="Zurück" name="back" />
diff --git a/indra/newview/skins/default/xui/de/floater_mem_leaking.xml b/indra/newview/skins/default/xui/de/floater_mem_leaking.xml
index 0b77a7fe9df..44249a6075e 100644
--- a/indra/newview/skins/default/xui/de/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/de/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="Speicherverlust-Simulation">
+<floater name="MemLeak" title="SPEICHERVERLUST-SIMULATION">
 	<spinner label="Verlustgeschwindigkeit (Bytes pro Frame):" name="leak_speed" />
 	<spinner label="Max. Speicherverlust (MB):" name="max_leak" />
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/de/floater_mute_object.xml b/indra/newview/skins/default/xui/de/floater_mute_object.xml
index 60c6ff008cb..8cc8a565233 100644
--- a/indra/newview/skins/default/xui/de/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/de/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="mute by name" title="Objekt nach Name stummschalten">
+<floater name="mute by name" title="OBJEKT NACH NAME STUMMSCHALTEN">
 	<text name="message">
 		Stummschalten nach Name betrifft nur Chat und IM, keine
 Sounds. Sie müssen den Objektnamen exakt angeben.
diff --git a/indra/newview/skins/default/xui/de/floater_my_friends.xml b/indra/newview/skins/default/xui/de/floater_my_friends.xml
index fc24bcece43..30614b75785 100644
--- a/indra/newview/skins/default/xui/de/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/de/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_my_friends" title="Kontakte">
+<floater name="floater_my_friends" title="KONTAKTE">
 	<tab_container name="friends_and_groups">
 		<panel label="Freunde" name="friends_panel" />
 		<panel label="Gruppen" name="groups_panel" />
diff --git a/indra/newview/skins/default/xui/de/floater_notification.xml b/indra/newview/skins/default/xui/de/floater_notification.xml
index 48ff900d5a9..48a26a0e986 100644
--- a/indra/newview/skins/default/xui/de/floater_notification.xml
+++ b/indra/newview/skins/default/xui/de/floater_notification.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="notification" title="Konsole: Meldungen">
+<floater name="notification" title="KONSOLE: MELDUNGEN">
 	<text_editor name="payload">
 		Wird geladen...
 	</text_editor>
diff --git a/indra/newview/skins/default/xui/de/floater_notifications_console.xml b/indra/newview/skins/default/xui/de/floater_notifications_console.xml
index a1cd69899c4..0c075dd63af 100644
--- a/indra/newview/skins/default/xui/de/floater_notifications_console.xml
+++ b/indra/newview/skins/default/xui/de/floater_notifications_console.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="notifications_console" title="Konsole: Meldungen">
+<floater name="notifications_console" title="KONSOLE: MELDUNGEN">
 	<combo_box label="Meldungsart auswählen" name="notification_types" width="412" />
 	<button label="Hinzufügen" name="add_notification" left="417" width="78" />
 </floater>
diff --git a/indra/newview/skins/default/xui/de/floater_openobject.xml b/indra/newview/skins/default/xui/de/floater_openobject.xml
index fa465c08c74..d7575876e18 100644
--- a/indra/newview/skins/default/xui/de/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/de/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="objectcontents" title="Objektinhalte">
+<floater name="objectcontents" title="OBJEKTINHALTE">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_perm_prefs.xml b/indra/newview/skins/default/xui/de/floater_perm_prefs.xml
index 83ec725487f..3641f41b8c9 100644
--- a/indra/newview/skins/default/xui/de/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/de/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Hochlade-Berechtigungen (Standard)">
+<floater name="perm prefs" title="HOCHLADE-BERECHTIGUNGEN (STANDARD)">
 	<panel label="Berechtigungen" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Mit Gruppe teilen" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/de/floater_post_process.xml b/indra/newview/skins/default/xui/de/floater_post_process.xml
index e10806d2551..a6ed8cc3df9 100644
--- a/indra/newview/skins/default/xui/de/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/de/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Post-Process Floater" title="Post-Processing-Einstellungen">
+<floater name="Post-Process Floater" title="POST-PROCESSING-EINSTELLUNGEN">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Farbfilter" name="wmiColorFilterPanel">
 			<check_box label="Ein" name="wmiColorFilterToggle" />
diff --git a/indra/newview/skins/default/xui/de/floater_postcard.xml b/indra/newview/skins/default/xui/de/floater_postcard.xml
index 27557046600..fc552339d3b 100644
--- a/indra/newview/skins/default/xui/de/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/de/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Postcard" title="Foto per E-Mail senden">
+<floater name="Postcard" title="FOTO PER E-MAIL SENDEN">
 	<text name="to_label">
 		E-Mail des Empfängers:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_preferences.xml b/indra/newview/skins/default/xui/de/floater_preferences.xml
index 5f68282b9fc..02aa440be75 100644
--- a/indra/newview/skins/default/xui/de/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/de/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Preferences" title="Einstellungen">
+<floater name="Preferences" title="EINSTELLUNGEN">
 	<button label="OK" label_selected="OK" name="OK" />
 	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel" />
 	<button label="Ãœbernehmen" label_selected="Ãœbernehmen" name="Apply" />
diff --git a/indra/newview/skins/default/xui/de/floater_preview_classified.xml b/indra/newview/skins/default/xui/de/floater_preview_classified.xml
index 2257785fdac..be702145c37 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_classified.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="Vertrauliche Informationen" />
+<floater name="classified_preview" title="VERTRAULICHE INFORMATIONEN" />
diff --git a/indra/newview/skins/default/xui/de/floater_preview_event.xml b/indra/newview/skins/default/xui/de/floater_preview_event.xml
index 75e1113eff0..21e8c67787d 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_event.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="Event-Informationen" />
+<floater name="event_preview" title="EVENT-INFORMATIONEN" />
diff --git a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
index da90d66e4df..2c3258440f2 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview notecard" title="Hinweis:">
+<floater name="preview notecard" title="HINWEIS:">
 	<button label="Speichern" label_selected="Speichern" name="Save" />
 	<text name="desc txt">
 		Beschreibung:
diff --git a/indra/newview/skins/default/xui/de/floater_region_info.xml b/indra/newview/skins/default/xui/de/floater_region_info.xml
index 4c28c7f5b0e..e7dd09d4dab 100644
--- a/indra/newview/skins/default/xui/de/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/de/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="regioninfo" title="Region/Grundstück" />
+<floater name="regioninfo" title="REGION/GRUNDSTÃœCK" />
diff --git a/indra/newview/skins/default/xui/de/floater_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
index a8df587cfad..a5dd9fa4b19 100644
--- a/indra/newview/skins/default/xui/de/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Missbrauch melden">
+<floater name="floater_report_abuse" title="MISSBRAUCH MELDEN">
 	<texture_picker label="" name="screenshot"/>
 	<check_box bottom_delta="-20" label="Screenshot einschließen" name="screen_check"/>
 	<text name="reporter_title">
diff --git a/indra/newview/skins/default/xui/de/floater_script_debug.xml b/indra/newview/skins/default/xui/de/floater_script_debug.xml
index f8c1543fdd4..585a6c36eaa 100644
--- a/indra/newview/skins/default/xui/de/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/de/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <multi_floater name="script debug floater" title="Skriptwarnung/Fehler">
 	<tab_container name="Preview Tabs">
-		<floater label="Skript" name="all_scripts" title="[All scripts]" />
+		<floater label="Skript" name="all_scripts" title="[ALL SCRIPTS]" />
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/de/floater_script_preview.xml b/indra/newview/skins/default/xui/de/floater_script_preview.xml
index 3ab5732055f..be6017cff51 100644
--- a/indra/newview/skins/default/xui/de/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_script_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="Skript: Rotationsskript">
+<floater name="preview lsl text" title="SKRIPT: ROTATIONSSKRIPT">
 	<text name="desc txt">
 		Beschreibung:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_script_queue.xml b/indra/newview/skins/default/xui/de/floater_script_queue.xml
index 63d5ef24788..b2011a4dfb4 100644
--- a/indra/newview/skins/default/xui/de/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/de/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="queue" title="Rückgängig">
+<floater name="queue" title="RÜCKGÄNGIG">
 	<button label="Schließen" label_selected="Schließen" name="close" left="215" width="72"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/de/floater_script_search.xml b/indra/newview/skins/default/xui/de/floater_script_search.xml
index bd934274566..aae302e2306 100644
--- a/indra/newview/skins/default/xui/de/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/de/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script search" title="Skriptsuche">
+<floater name="script search" title="SKRIPTSUCHE">
 	<check_box label="Groß-/Kleinschreibung irrelevant" name="case_text" />
 	<button label="Suchen" label_selected="Suchen" name="search_btn" />
 	<button label="Ersetzen" label_selected="Ersetzen" name="replace_btn" />
diff --git a/indra/newview/skins/default/xui/de/floater_sell_land.xml b/indra/newview/skins/default/xui/de/floater_sell_land.xml
index 1499bb01521..47ab51d5027 100644
--- a/indra/newview/skins/default/xui/de/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="sell land" title="Land verkaufen">
+<floater name="sell land" title="LAND VERKAUFEN">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/de/floater_settings_debug.xml b/indra/newview/skins/default/xui/de/floater_settings_debug.xml
index 034cfca017f..ea3295797d3 100644
--- a/indra/newview/skins/default/xui/de/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/de/floater_settings_debug.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="settings_debug" title="Debug-Einstellungen">
+<floater name="settings_debug" title="DEBUG-EINSTELLUNGEN">
 	<combo_box name="boolean_combo">
 		<combo_box.item name="TRUE" label="WAHR" />
 		<combo_box.item name="FALSE" label="FALSCH" />
diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml
index bc8a1f42f12..64db511aa9f 100644
--- a/indra/newview/skins/default/xui/de/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Foto-Vorschau">
+<floater name="Snapshot" title="FOTO-VORSCHAU">
 	<text name="type_label">
 		Zweck des Fotos
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_sound_preview.xml b/indra/newview/skins/default/xui/de/floater_sound_preview.xml
index 1e5ac179b5b..14126b6a44c 100644
--- a/indra/newview/skins/default/xui/de/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		Name:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_statistics.xml b/indra/newview/skins/default/xui/de/floater_statistics.xml
index 26e976a59c1..506c18bd98e 100644
--- a/indra/newview/skins/default/xui/de/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/de/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statistikleiste"/>
+<floater name="stats floater" title="STATISTIKLEISTE"/>
diff --git a/indra/newview/skins/default/xui/de/floater_telehub.xml b/indra/newview/skins/default/xui/de/floater_telehub.xml
index 264411c1665..2ba4e575a8e 100644
--- a/indra/newview/skins/default/xui/de/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/de/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="telehub" title="Telehub" min_height="310" height="310"  >
+<floater name="telehub" title="TELEHUB" min_height="310" height="310"  >
 	<text name="status_text_connected">
 		Telehub verbunden mit Objekt [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
index fff6ab5c746..7e2fc26fdfb 100644
--- a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="texture picker" title="Auswählen: Textur">
+<floater name="texture picker" title="AUSWÄHLEN: TEXTUR">
 	<string name="choose_picture">
 		Zum Auswählen eines Bildes hier klicken
 	</string>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index 2815fd34a24..6bad64324b9 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Bauen">
+<floater name="toolbox floater" title="" short_title="BAUEN">
 	<button label="" label_selected="" name="button focus" tool_tip="Fokus"/>
 	<button label="" label_selected="" name="button move" tool_tip="Verschieben"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Bearbeiten"/>
diff --git a/indra/newview/skins/default/xui/de/floater_top_objects.xml b/indra/newview/skins/default/xui/de/floater_top_objects.xml
index f9e7becee1c..082eb8894df 100644
--- a/indra/newview/skins/default/xui/de/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/de/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="wird geladen...">
+<floater name="top_objects" title="WIRD GELADEN...">
 	<text name="title_text">
 		Wird geladen...
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_water.xml b/indra/newview/skins/default/xui/de/floater_water.xml
index 95b469434a2..0880470c58e 100644
--- a/indra/newview/skins/default/xui/de/floater_water.xml
+++ b/indra/newview/skins/default/xui/de/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Water Floater" title="Erweiterter Wasser-Editor">
+<floater name="Water Floater" title="ERWEITERTER WASSER-EDITOR">
 	<text name="KeyFramePresetsText">
 		Voreinstellungen:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_windlight_options.xml b/indra/newview/skins/default/xui/de/floater_windlight_options.xml
index 8df412dab64..df0b513a85a 100644
--- a/indra/newview/skins/default/xui/de/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="WindLight floater" title="Erweiterter Himmel-Editor">
+<floater name="WindLight floater" title="ERWEITERTER HIMMEL-EDITOR">
 	<text name="KeyFramePresetsText">
 		Voreinstellungen:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_world_map.xml b/indra/newview/skins/default/xui/de/floater_world_map.xml
index d3366e58712..665eafe5b87 100644
--- a/indra/newview/skins/default/xui/de/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/de/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Weltkarte">
+<floater name="worldmap" title="WELTKARTE">
 	<tab_container name="maptab">
 		<panel label="Objekte" name="objects_mapview"/>
 		<panel label="Terrain" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml
index 3789369e743..4d5268681b6 100644
--- a/indra/newview/skins/default/xui/en/floater_aaa.xml
+++ b/indra/newview/skins/default/xui/en/floater_aaa.xml
@@ -7,7 +7,7 @@
  help_topic="floater_aaa"
  save_rect="true"
  can_resize="true" 
- title="About [APP_NAME]"
+ title="ABOUT [APP_NAME]"
  width="470">
     <text_editor
      follows="left|top|right|bottom"
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index 3f2636ae52c..c74b1929b47 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -6,7 +6,7 @@
  name="floater_about"
  help_topic="floater_about"
  save_rect="true"
- title="About [APP_NAME]"
+ title="ABOUT [APP_NAME]"
  width="470">
   <floater.string
      name="AboutHeader">
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 1def98d1bba..615d1bf18d4 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  can_tear_off="false"
  height="420"
@@ -6,7 +6,7 @@
  name="floaterland"
  help_topic="floaterland"
  save_rect="true"
- title="About Land"
+ title="ABOUT LAND"
  width="460">
     <floater.string
      name="Minutes">
diff --git a/indra/newview/skins/default/xui/en/floater_activeim.xml b/indra/newview/skins/default/xui/en/floater_activeim.xml
index 1bc9cde0442..96fe0aa70c1 100644
--- a/indra/newview/skins/default/xui/en/floater_activeim.xml
+++ b/indra/newview/skins/default/xui/en/floater_activeim.xml
@@ -30,4 +30,4 @@
 			name="chiclet_row_panel_list"
 			width="318"/>
 	</scroll_container>
-</floater>
\ No newline at end of file
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_auction.xml b/indra/newview/skins/default/xui/en/floater_auction.xml
index aae6508041f..9c6d114c4ca 100644
--- a/indra/newview/skins/default/xui/en/floater_auction.xml
+++ b/indra/newview/skins/default/xui/en/floater_auction.xml
@@ -8,7 +8,7 @@
  min_width="420"
  name="floater_auction"
  help_topic="floater_auction"
- title="Start Linden Land Sale"
+ title="START LINDEN LAND SALE"
  width="420">
     <floater.string
      name="already for sale">
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
index 592cf7e8fd5..a0f9bb59fd2 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
@@ -8,7 +8,7 @@
  min_width="265"
  name="avatarpicker"
  help_topic="avatarpicker"
- title="Choose Resident"
+ title="CHOOSE RESIDENT"
  width="265">
     <floater.string
      name="not_found">
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml
index 4f2a36e5182..a0cb94eb691 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="avatar_texture_debug"
  help_topic="avatar_texture_debug"
- title="Avatar Textures"
+ title="AVATAR TEXTURES"
  width="1250">
     <floater.string
      name="InvalidAvatar">
diff --git a/indra/newview/skins/default/xui/en/floater_beacons.xml b/indra/newview/skins/default/xui/en/floater_beacons.xml
index 1c83799e721..c8f6c613af2 100644
--- a/indra/newview/skins/default/xui/en/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/en/floater_beacons.xml
@@ -8,7 +8,7 @@
  save_rect="true"
  save_visibility="true"
  single_instance="true"
- title="Beacons"
+ title="BEACONS"
  width="240">
     <panel
      follows="left|top|right|bottom"
diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml
index bddbbdd3b2f..f0e678af003 100644
--- a/indra/newview/skins/default/xui/en/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_build_options.xml
@@ -7,7 +7,7 @@
  name="build options floater"
  help_topic="build_options_floater"
  save_rect="true"
- title="Grid Options"
+ title="GRID OPTIONS"
  width="264">
     <spinner
      control_name="GridResolution"
diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
index 02958bee743..7ae079f553a 100644
--- a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  name="floaterbulkperms"
  help_topic="floaterbulkperms"
- title="Edit Content Permissions"
+ title="EDIT CONTENT PERMISSIONS"
  width="270">
     <floater.string
      name="nothing_to_modify_text">
diff --git a/indra/newview/skins/default/xui/en/floater_bumps.xml b/indra/newview/skins/default/xui/en/floater_bumps.xml
index 2917096f3ce..303c28d7c88 100644
--- a/indra/newview/skins/default/xui/en/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/en/floater_bumps.xml
@@ -6,7 +6,7 @@
  name="floater_bumps"
  help_topic="floater_bumps"
  save_rect="true"
- title="Bumps, Pushes &amp; Hits"
+ title="BUMPS, PUSHES &amp; HITS"
  width="400">
     <floater.string
      name="none_detected">
diff --git a/indra/newview/skins/default/xui/en/floater_buy_contents.xml b/indra/newview/skins/default/xui/en/floater_buy_contents.xml
index aacc3ad8d0c..833e8beb8d4 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_contents.xml
@@ -9,7 +9,7 @@
  name="floater_buy_contents"
  help_topic="floater_buy_contents"
  save_rect="true"
- title="Buy Contents"
+ title="BUY CONTENTS"
  width="280">
     <floater.string
      name="no_copy_text">
diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
index 88712bda5e6..75711cdf89e 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
@@ -4,7 +4,7 @@
  can_minimize="false"
  height="275"
  layout="topleft"
- title="Buy L$"
+ title="BUY L$"
  name="buy currency"
  help_topic="buy_linden_dollars"
  single_instance="true"
diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml
index 83145491324..0f710a8047b 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml
@@ -7,7 +7,7 @@
  name="buy land"
  help_topic="buy_land"
  single_instance="true"
- title="Buy Land"
+ title="BUY LAND"
  width="740">
     <floater.string
      name="can_resell">
diff --git a/indra/newview/skins/default/xui/en/floater_buy_object.xml b/indra/newview/skins/default/xui/en/floater_buy_object.xml
index 49ea3f5dd15..f0e5e300109 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_object.xml
@@ -10,7 +10,7 @@
  help_topic="contents"
  save_rect="true"
  single_instance="true"
- title="Buy Copy of Object"
+ title="BUY COPY OF OBJECT"
  width="280">
     <floater.string
      name="title_buy_text">
diff --git a/indra/newview/skins/default/xui/en/floater_choose_group.xml b/indra/newview/skins/default/xui/en/floater_choose_group.xml
index 8b34fda96c6..dc1ee5f24e2 100644
--- a/indra/newview/skins/default/xui/en/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/en/floater_choose_group.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="groups"
  help_topic="groups"
- title="Groups"
+ title="GROUPS"
  width="280">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_color_picker.xml b/indra/newview/skins/default/xui/en/floater_color_picker.xml
index 7c6376d84a6..e4b9d3f6bc7 100644
--- a/indra/newview/skins/default/xui/en/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_color_picker.xml
@@ -7,7 +7,7 @@
  layout="topleft"
  name="ColorPicker"
  help_topic="colorpicker"
- title="Color Picker"
+ title="COLOR PICKER"
  width="440">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml
index c021dd79de1..a6dcb45e7a1 100644
--- a/indra/newview/skins/default/xui/en/floater_customize.xml
+++ b/indra/newview/skins/default/xui/en/floater_customize.xml
@@ -9,7 +9,7 @@
  name="floater customize"
  help_topic="floater_customize"
  save_rect="true"
- title="Appearance"
+ title="APPEARANCE"
  top_delta="-185"
  width="494">
     <tab_container
diff --git a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
index b0d636445d5..35f3e643c38 100644
--- a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
@@ -6,7 +6,7 @@
  name="Day Cycle Floater"
  help_topic="day_cycle_floater"
  save_rect="true"
- title="Day Cycle Editor"
+ title="DAY CYCLE EDITOR"
  width="646">
     <tab_container
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/floater_device_settings.xml b/indra/newview/skins/default/xui/en/floater_device_settings.xml
index 2b23980423c..91a7a678da1 100644
--- a/indra/newview/skins/default/xui/en/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_device_settings.xml
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  legacy_header_height="18"
  height="260"
  layout="topleft"
  name="floater_device_settings"
  help_topic="floater_device_settings"
- title="Voice Chat Device Settings"
+ title="VOICE CHAT DEVICE SETTINGS"
  width="405">
     <panel
      bottom="260"
diff --git a/indra/newview/skins/default/xui/en/floater_env_settings.xml b/indra/newview/skins/default/xui/en/floater_env_settings.xml
index 7c22311f66a..5233cb023d4 100644
--- a/indra/newview/skins/default/xui/en/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_env_settings.xml
@@ -6,7 +6,7 @@
  name="Environment Editor Floater"
  help_topic="environment_editor_floater"
  save_rect="true"
- title="Environment Editor"
+ title="ENVIRONMENT EDITOR"
  width="600">
     <floater.string
      name="timeStr">
diff --git a/indra/newview/skins/default/xui/en/floater_font_test.xml b/indra/newview/skins/default/xui/en/floater_font_test.xml
index 8b14f691d68..3ab19ec9d92 100644
--- a/indra/newview/skins/default/xui/en/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/en/floater_font_test.xml
@@ -8,7 +8,7 @@
  min_width="154"
  name="contents"
  help_topic="contents"
- title="Font Test"
+ title="FONT TEST"
  width="500">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_gesture.xml b/indra/newview/skins/default/xui/en/floater_gesture.xml
index 90b3339225e..b23482655cf 100644
--- a/indra/newview/skins/default/xui/en/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/en/floater_gesture.xml
@@ -5,7 +5,7 @@
  height="465"
  name="gestures"
  help_topic="gestures"
- title="Gestures"
+ title="GESTURES"
  background_visible="true"
  follows="all"
  label="Places"
diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml
index 97cb6e259c4..79eed52fbfa 100644
--- a/indra/newview/skins/default/xui/en/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_god_tools.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="godtools floater"
  help_topic="godtools_floater"
- title="God Tools"
+ title="GOD TOOLS"
  width="400">
     <tab_container
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
index cd98f219184..1e2440580e1 100644
--- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="Hardware Settings Floater"
  help_topic="hardware_settings_floater"
- title="Hardware Settings"
+ title="HARDWARE SETTINGS"
  width="500">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml
index d2fe8d0e6d7..f50ff01230c 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -10,7 +10,7 @@
  help_topic="floater_help_browser"
  save_rect="true"
  single_instance="true"
- title="Help Browser"
+ title="HELP BROWSER"
  width="620">
     <floater.string
      name="home_page_url">
diff --git a/indra/newview/skins/default/xui/en/floater_hud.xml b/indra/newview/skins/default/xui/en/floater_hud.xml
index 6e8950c49a4..99a6a95828e 100644
--- a/indra/newview/skins/default/xui/en/floater_hud.xml
+++ b/indra/newview/skins/default/xui/en/floater_hud.xml
@@ -8,7 +8,7 @@
  help_topic="floater_hud"
  save_rect="true"
  save_visibility="true"
- title="Tutorial"
+ title="TUTORIAL"
  width="362">
     <web_browser
      border_visible="false"
diff --git a/indra/newview/skins/default/xui/en/floater_incoming_call.xml b/indra/newview/skins/default/xui/en/floater_incoming_call.xml
index dcb93c6e2fa..16873df3101 100644
--- a/indra/newview/skins/default/xui/en/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/en/floater_incoming_call.xml
@@ -8,7 +8,7 @@
  layout="topleft"
  name="incoming call"
  help_topic="incoming_call"
- title="Unknown Person is calling"
+ title="UNKNOWN PERSON IS CALLING"
  width="240">
      <floater.string
      name="anonymous">
diff --git a/indra/newview/skins/default/xui/en/floater_inspect.xml b/indra/newview/skins/default/xui/en/floater_inspect.xml
index 9f7723c51bf..3f7642fafef 100644
--- a/indra/newview/skins/default/xui/en/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/en/floater_inspect.xml
@@ -9,7 +9,7 @@
  name="inspect"
  help_topic="inspect"
  save_rect="true"
- title="Inspect Objects"
+ title="INSPECT OBJECTS"
  width="400">
     <floater.string
      name="timeStamp">
diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml
index 3e19bdee0fe..30639f955f4 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory.xml
@@ -12,7 +12,7 @@
  save_rect="true"
  save_visibility="true"
  single_instance="true"
- title="Inventory"
+ title="INVENTORY"
  width="467">
     <floater.string
      name="Title">
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
index 4f0609c7f8a..4ca6002c13e 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
@@ -7,7 +7,7 @@
  name="item properties"
  help_topic="item_properties"
  save_rect="true"
- title="Inventory Item Properties"
+ title="INVENTORY ITEM PROPERTIES"
  width="350">
     <floater.string
      name="unknown">
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
index 0042f97a8ee..90fee857fbb 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  name="Inventory Finder"
  help_topic="inventory_finder"
- title="inventory_recent_items"
+ title="INVENTORY_RECENT_ITEMS"
  width="280">
     <icon
      height="16"
diff --git a/indra/newview/skins/default/xui/en/floater_joystick.xml b/indra/newview/skins/default/xui/en/floater_joystick.xml
index e2da059ace1..4d67e4c343c 100644
--- a/indra/newview/skins/default/xui/en/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/en/floater_joystick.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="Joystick"
  help_topic="joystick"
- title="Joystick Configuration"
+ title="JOYSTICK CONFIGURATION"
  width="550">
     <floater.string
      name="NoDevice">
diff --git a/indra/newview/skins/default/xui/en/floater_lagmeter.xml b/indra/newview/skins/default/xui/en/floater_lagmeter.xml
index c4b9463927c..19f5155f884 100644
--- a/indra/newview/skins/default/xui/en/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/en/floater_lagmeter.xml
@@ -6,7 +6,7 @@
  name="floater_lagmeter"
  help_topic="floater_lagmeter"
  save_rect="true"
- title="Lag Meter"
+ title="LAG METER"
  width="350">
     <floater.string
      name="max_title_msg">
diff --git a/indra/newview/skins/default/xui/en/floater_land_holdings.xml b/indra/newview/skins/default/xui/en/floater_land_holdings.xml
index 85f0e6411bf..2c04a946131 100644
--- a/indra/newview/skins/default/xui/en/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/en/floater_land_holdings.xml
@@ -166,4 +166,4 @@
      width="290">
         [AREA] m²
     </text>
-</floater>
\ No newline at end of file
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
index 93bbb0107ee..e94717fe324 100644
--- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  legacy_header_height="18"
  bevel_style="none"
@@ -12,7 +12,7 @@
  name="script ed float"
  help_topic="script_ed_float"
  save_rect="true"
- title="Script: New Script"
+ title="SCRIPT: NEW SCRIPT"
  width="500">
     <floater.string
      name="not_allowed">
diff --git a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
index 4dcf1686053..a5b477313cc 100644
--- a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
@@ -10,7 +10,7 @@
  name="script ed float"
  help_topic="script_ed_float"
  save_rect="true"
- title="LSL Wiki"
+ title="LSL WIKI"
  width="370">
     <check_box
      follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml
index bc590dc6120..d6b20c80159 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -10,7 +10,7 @@
  help_topic="floater_about"
  save_rect="true"
  single_instance="true"
- title="Media Browser"
+ title="MEDIA BROWSER"
  width="820">
     <floater.string
      name="home_page_url">
diff --git a/indra/newview/skins/default/xui/en/floater_media_settings.xml b/indra/newview/skins/default/xui/en/floater_media_settings.xml
index 4218c154081..6b884d46a77 100644
--- a/indra/newview/skins/default/xui/en/floater_media_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_settings.xml
@@ -17,7 +17,7 @@
  mouse_opaque="true" 
  name="Medis Settings" 
  help_topic = "media_settings"
- title="Media Settings">
+ title="MEDIA SETTINGS">
 	<button 
 	 bottom="-525" 
 	 enabled="true" 
diff --git a/indra/newview/skins/default/xui/en/floater_mem_leaking.xml b/indra/newview/skins/default/xui/en/floater_mem_leaking.xml
index 560acafd4f8..28a29c42aac 100644
--- a/indra/newview/skins/default/xui/en/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/en/floater_mem_leaking.xml
@@ -7,7 +7,7 @@
  layout="topleft"
  name="MemLeak"
  help_topic="memleak"
- title="Simulate a Memory Leak"
+ title="SIMULATE A MEMORY LEAK"
  width="350">
     <spinner
      decimal_digits="0"
diff --git a/indra/newview/skins/default/xui/en/floater_mute_object.xml b/indra/newview/skins/default/xui/en/floater_mute_object.xml
index 33b1dac8a55..454b1c43b2d 100644
--- a/indra/newview/skins/default/xui/en/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_mute_object.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  legacy_header_height="18"
  can_minimize="false"
@@ -6,7 +6,7 @@
  layout="topleft"
  name="block by name"
  help_topic="mute_by_name"
- title="Block object by name"
+ title="BLOCK OBJECT BY NAME"
  width="375">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_my_friends.xml b/indra/newview/skins/default/xui/en/floater_my_friends.xml
index 689221b9c79..e7efcc78444 100644
--- a/indra/newview/skins/default/xui/en/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/en/floater_my_friends.xml
@@ -11,7 +11,7 @@
  help_topic="floater_my_friends"
  save_rect="true"
  single_instance="true"
- title="Contacts"
+ title="CONTACTS"
  width="395">
     <tab_container
      follows="all"
diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
index e7c5bf85857..7f58ea132ea 100644
--- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
@@ -13,7 +13,7 @@
  name="nearby_chat"
  help_topic="nearby_chat"
  save_rect="true"
- title="Nearby Chat"
+ title="NEARBY CHAT"
  save_dock_state="true"
  save_visibility="true"
  single_instance="true"
diff --git a/indra/newview/skins/default/xui/en/floater_notification.xml b/indra/newview/skins/default/xui/en/floater_notification.xml
index f9cb22055ae..1f9ddecac27 100644
--- a/indra/newview/skins/default/xui/en/floater_notification.xml
+++ b/indra/newview/skins/default/xui/en/floater_notification.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  min_height="50"
  name="notification"
- title="Notifications Console"
+ title="NOTIFICATIONS CONSOLE"
  width="200">
     <text_editor
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_notifications_console.xml b/indra/newview/skins/default/xui/en/floater_notifications_console.xml
index 03a2aad96d4..ca81b9bcf0f 100644
--- a/indra/newview/skins/default/xui/en/floater_notifications_console.xml
+++ b/indra/newview/skins/default/xui/en/floater_notifications_console.xml
@@ -8,7 +8,7 @@
  name="notifications_console"
  help_topic="notifications_console"
  single_instance="true"
- title="Notifications Console"
+ title="NOTIFICATIONS CONSOLE"
  width="500">
     <combo_box
      follows="left|right|top"
diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml
index af8aadf0e0b..3fd118df1c3 100644
--- a/indra/newview/skins/default/xui/en/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/en/floater_openobject.xml
@@ -10,7 +10,7 @@
  name="objectcontents"
  help_topic="objectcontents"
  save_rect="true"
- title="Object Contents"
+ title="OBJECT CONTENTS"
  width="300">
    <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml
index 0967706cc29..6faab84159d 100644
--- a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml
@@ -6,7 +6,7 @@
  name="perm prefs"
  help_topic="perm_prefs"
  save_rect="true"
- title="Default Upload Permissions"
+ title="DEFAULT UPLOAD PERMISSIONS"
  width="315">
     <panel
      follows="left|top|right|bottom"
diff --git a/indra/newview/skins/default/xui/en/floater_post_process.xml b/indra/newview/skins/default/xui/en/floater_post_process.xml
index 46554beedea..05559adf89b 100644
--- a/indra/newview/skins/default/xui/en/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/en/floater_post_process.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="Post-Process Floater"
  help_topic="post_process_floater"
- title="Post-Process Settings"
+ title="POST-PROCESS SETTINGS"
  width="400">
     <tab_container
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/floater_postcard.xml b/indra/newview/skins/default/xui/en/floater_postcard.xml
index b13bd1740cd..3a7b6cc8323 100644
--- a/indra/newview/skins/default/xui/en/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/en/floater_postcard.xml
@@ -10,7 +10,7 @@
  min_width="450"
  name="Postcard"
  help_topic="postcard"
- title="Email Snapshot"
+ title="EMAIL SNAPSHOT"
  width="450">
     <floater.string
      name="default_subject">
diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml
index d2a2a7ce023..d182cdc6bbd 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences.xml
@@ -9,7 +9,7 @@
  name="Preferences"
  help_topic="preferences"
  single_instance="true"
- title="Preferences"
+ title="PREFERENCES"
  width="620">
     <button
      follows="right|bottom"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_classified.xml b/indra/newview/skins/default/xui/en/floater_preview_classified.xml
index 7c8c6d72077..2017cf2bd10 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_classified.xml
@@ -7,7 +7,7 @@
  name="classified_preview"
  help_topic="classified_preview"
  save_rect="true"
- title="Classified Information"
+ title="CLASSIFIED INFORMATION"
  width="440">
     <floater.string
      name="Title">
diff --git a/indra/newview/skins/default/xui/en/floater_preview_event.xml b/indra/newview/skins/default/xui/en/floater_preview_event.xml
index f5ab8c95d71..a4066b34c56 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_event.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  legacy_header_height="18"
  auto_tile="true"
@@ -7,7 +7,7 @@
  name="event_preview"
  help_topic="event_preview"
  save_rect="true"
- title="Event Information"
+ title="EVENT INFORMATION"
  width="440">
     <floater.string
      name="Title">
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml
index fc838f27b4b..66408a50572 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml
@@ -8,7 +8,7 @@
  name="Gesture"
  help_topic="gesture"
  save_rect="true"
- title="Gesture Shortcut"
+ title="GESTURE SHORTCUT"
  width="260">
     <scroll_list
      follows="top|left"
@@ -54,4 +54,4 @@
      name="save_btn"
      top_delta="0"
      width="80" /-->   
-</floater>
\ No newline at end of file
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml
index b489ae2e771..26252a7a16d 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml
@@ -8,7 +8,7 @@
  name="Gesture"
  help_topic="gesture"
  save_rect="true"
- title="Gesture Shortcut"
+ title="GESTURE SHORTCUT"
  width="260">
       <text
      type="string"
@@ -85,4 +85,4 @@
      tool_tip="Replace the trigger word(s) with these words. For example, trigger &apos;hello&apos; replace with &apos;howdy&apos; will turn the chat &apos;I wanted to say hello&apos; into &apos;I wanted to say howdy&apos; as well as playing the gesture"
      top_delta="-4"
      width="135" />
-</floater>
\ No newline at end of file
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml
index 8a07f3ad1ed..34f707cd2ae 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml
@@ -8,7 +8,7 @@
  name="Gesture"
  help_topic="gesture"
  save_rect="true"
- title="Gesture Shortcut"
+ title="GESTURE SHORTCUT"
  width="260">
     <scroll_list
      follows="top|left"
@@ -239,4 +239,4 @@ unless you add wait steps.
      name="wait_time_editor"
      top_delta="0"
      width="50" /-->   
-</floater>
\ No newline at end of file
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
index b44de8e1782..06dbdc95393 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
@@ -11,7 +11,7 @@
  min_width="234"
  name="preview notecard"
  help_topic="preview_notecard"
- title="Note:"
+ title="NOTE:"
  width="400">
     <floater.string
      name="no_object">
diff --git a/indra/newview/skins/default/xui/en/floater_region_info.xml b/indra/newview/skins/default/xui/en/floater_region_info.xml
index ae01d0bdf43..9bb30f8e86d 100644
--- a/indra/newview/skins/default/xui/en/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/en/floater_region_info.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  name="regioninfo"
  save_rect="true"
- title="Region/Estate"
+ title="REGION/ESTATE"
  width="480">
     <tab_container
      bottom="512"
diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
index 0b61dcef583..696233676cd 100644
--- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="floater_report_abuse"
  help_topic="floater_report_abuse"
- title="Report Abuse"
+ title="REPORT ABUSE"
  width="333">
     <floater.string
      name="Screenshot">
diff --git a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml
index 0029fcb09b5..bd9925be1da 100644
--- a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml
@@ -7,8 +7,8 @@
  layout="topleft"
  name="script"
  help_topic="script"
- short_title="[All scripts]"
- title="[All scripts]"
+ short_title="[ALL SCRIPTS]"
+ title="[ALL SCRIPTS]"
  width="440">
     <text_editor
      bottom="197"
diff --git a/indra/newview/skins/default/xui/en/floater_script_preview.xml b/indra/newview/skins/default/xui/en/floater_script_preview.xml
index c29a2f4516c..bb0702c3531 100644
--- a/indra/newview/skins/default/xui/en/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_preview.xml
@@ -11,7 +11,7 @@
  name="preview lsl text"
  help_topic="preview_lsl_text"
  save_rect="true"
- title="Script: Rotation Script"
+ title="SCRIPT: ROTATION SCRIPT"
  top_delta="0"
  width="500">
     <floater.string
diff --git a/indra/newview/skins/default/xui/en/floater_script_queue.xml b/indra/newview/skins/default/xui/en/floater_script_queue.xml
index 8a442524266..60a26fcf1d4 100644
--- a/indra/newview/skins/default/xui/en/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_queue.xml
@@ -8,7 +8,7 @@
  name="queue"
  help_topic="queue"
  save_rect="true"
- title="Reset Progress"
+ title="RESET PROGRESS"
  width="300">
     <floater.string
      name="Starting">
diff --git a/indra/newview/skins/default/xui/en/floater_script_search.xml b/indra/newview/skins/default/xui/en/floater_script_search.xml
index 79c4438dd6b..ade0156bc79 100644
--- a/indra/newview/skins/default/xui/en/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_search.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  name="script search"
  help_topic="script_search"
- title="Script Search"
+ title="SCRIPT SEARCH"
  width="300">
     <check_box
      control_name="LSLFindCaseInsensitivity"
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index 2f4d7c50a16..f7ba719dc26 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -10,7 +10,7 @@
  help_topic="floater_search"
  save_rect="true"
  single_instance="true"
- title="Search [SECOND_LIFE]"
+ title="SEARCH [SECOND_LIFE]"
  width="620">
     <floater.string
      name="search_url">
diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml
index 8fedd0a89f0..45d59e280bd 100644
--- a/indra/newview/skins/default/xui/en/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml
@@ -7,7 +7,7 @@
  name="sell land"
  help_topic="sell_land"
  single_instance="true"
- title="Sell Land"
+ title="SELL LAND"
  width="313">
     <scroll_container
      color="DkGray2"
diff --git a/indra/newview/skins/default/xui/en/floater_settings_debug.xml b/indra/newview/skins/default/xui/en/floater_settings_debug.xml
index 02b3cee97c2..ffb11f3f18f 100644
--- a/indra/newview/skins/default/xui/en/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/en/floater_settings_debug.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  name="settings_debug"
  help_topic="settings_debug"
- title="Debug Settings"
+ title="DEBUG SETTINGS"
  width="350">
     <combo_box
      allow_text_entry="true"
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 4f2be37ade6..95a40e27f75 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -8,7 +8,7 @@
  name="Snapshot"
  help_topic="snapshot"
  save_rect="true"
- title="Snapshot Preview"
+ title="SNAPSHOT PREVIEW"
  width="215">
     <floater.string
      name="unknown">
diff --git a/indra/newview/skins/default/xui/en/floater_sound_preview.xml b/indra/newview/skins/default/xui/en/floater_sound_preview.xml
index 6145b722f1c..ca54ee66049 100644
--- a/indra/newview/skins/default/xui/en/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_sound_preview.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="Sound Preview"
  help_topic="sound_preview"
- title="sound.wav"
+ title="SOUND.WAV"
  width="300">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_statistics.xml b/indra/newview/skins/default/xui/en/floater_statistics.xml
index ab783b0735a..3a4e8451411 100644
--- a/indra/newview/skins/default/xui/en/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/en/floater_statistics.xml
@@ -8,5 +8,5 @@
  mouse_opaque="false"
  name="stats floater"
  help_topic="stats_floater"
- title="Statistics"
+ title="STATISTICS"
  width="250" />
diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml
index bdc28742814..68a4867167f 100644
--- a/indra/newview/skins/default/xui/en/floater_stats.xml
+++ b/indra/newview/skins/default/xui/en/floater_stats.xml
@@ -9,7 +9,7 @@
  help_topic="statistics"
  save_rect="true"
  save_visibility="true"
- title="Statistics"
+ title="STATISTICS"
  width="250">
     <scroll_container
      follows="top|left|bottom|right"
diff --git a/indra/newview/skins/default/xui/en/floater_telehub.xml b/indra/newview/skins/default/xui/en/floater_telehub.xml
index faf1a378f25..cc0ab8c57e8 100644
--- a/indra/newview/skins/default/xui/en/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/en/floater_telehub.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="telehub"
  help_topic="telehub"
- title="Telehub"
+ title="TELEHUB"
  width="280">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
index c954607ffe7..9143048aeb8 100644
--- a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  name="floater_test_inspectors"
  help_topic="floater_test_inspectors"
- title="Test Inspectors" 
+ title="TEST INSPECTORS" 
  width="400">
   <text
    height="20"
diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
index 129fd863dd4..718d724aa6a 100644
--- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
@@ -18,7 +18,7 @@
  legacy_header_height="18"
  can_dock="true"
  can_resize="true"
- title="Test Floater"
+ title="TEST FLOATER"
  height="500"
  min_width="850"
  min_height="500"
diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
index 7b0baa5de22..88afa549725 100644
--- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
@@ -9,7 +9,7 @@
  min_width="410"
  name="texture picker"
  help_topic="texture_picker"
- title="Pick: Texture"
+ title="PICK: TEXTURE"
  width="410">
     <floater.string
      name="choose_picture">
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 0614653d76f..c33d7cf31d8 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -9,7 +9,7 @@
  name="toolbox floater"
  help_topic="toolbox_floater"
  save_rect="true"
- short_title="Build Tools"
+ short_title="BUILD TOOLS"
  single_instance="true"
  sound_flags="0"
  width="280">
diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml
index 2f53422d513..d2db26daec5 100644
--- a/indra/newview/skins/default/xui/en/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/en/floater_top_objects.xml
@@ -8,7 +8,7 @@
  min_width="450"
  name="top_objects"
  help_topic="top_objects"
- title="loading..."
+ title="LOADING..."
  width="550">
     <floater.string
      name="top_scripts_title">
diff --git a/indra/newview/skins/default/xui/en/floater_ui_preview.xml b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
index 380e51977f2..8b2136c2dc4 100644
--- a/indra/newview/skins/default/xui/en/floater_ui_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
@@ -9,7 +9,7 @@
  name="gui_preview_tool"
  help_topic="gui_preview_tool"
  single_instance="true"
- title="XUI Preview Tool"
+ title="XUI PREVIEW TOOL"
  width="750">
     <panel
      bottom="640"
diff --git a/indra/newview/skins/default/xui/en/floater_water.xml b/indra/newview/skins/default/xui/en/floater_water.xml
index 012b69c3e3f..a6876dcf7d3 100644
--- a/indra/newview/skins/default/xui/en/floater_water.xml
+++ b/indra/newview/skins/default/xui/en/floater_water.xml
@@ -6,7 +6,7 @@
  name="Water Floater"
  help_topic="water_floater"
  save_rect="true"
- title="Advanced Water Editor"
+ title="ADVANCED WATER EDITOR"
  width="700">
     <floater.string
      name="WLDefaultWaterNames">
diff --git a/indra/newview/skins/default/xui/en/floater_windlight_options.xml b/indra/newview/skins/default/xui/en/floater_windlight_options.xml
index fd905d7a14e..0cb7814c6a4 100644
--- a/indra/newview/skins/default/xui/en/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_windlight_options.xml
@@ -6,7 +6,7 @@
  name="WindLight floater"
  help_topic="windlight_floater"
  save_rect="true"
- title="Advanced Sky Editor"
+ title="ADVANCED SKY EDITOR"
  width="700">
     <floater.string
      name="WLDefaultSkyNames">
diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index 93755fa2532..f5ae611f937 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -13,7 +13,7 @@
  save_rect="true"
  save_visibility="true"
  single_instance="true"
- title="World Map"
+ title="WORLD MAP"
  width="800">
     <tab_container
      follows="left|top|right|bottom"
diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml
index 071d5055699..5545ab29e0c 100644
--- a/indra/newview/skins/default/xui/es/floater_about.xml
+++ b/indra/newview/skins/default/xui/es/floater_about.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Acerca de [APP_NAME]">
+<floater name="floater_about" title="ACERCA DE [APP_NAME]">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
 	<text_editor name="credits_editor">
diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml
index bc775c1b1c1..7575df4b98f 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="Acerca del terreno">
+<floater name="floaterland" title="ACERCA DEL TERRENO">
 	<tab_container name="landtab">
 		<panel label="General" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/es/floater_auction.xml b/indra/newview/skins/default/xui/es/floater_auction.xml
index c6d89891bca..5196ac0b78c 100644
--- a/indra/newview/skins/default/xui/es/floater_auction.xml
+++ b/indra/newview/skins/default/xui/es/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="Empezar venta de terreno Linden">
+<floater name="floater_auction" title="EMPEZAR VENTA DE TERRENO LINDEN">
 	<check_box label="Incluir la valla amarilla de selección" name="fence_check"/>
 	<button label="Foto" label_selected="Foto" name="snapshot_btn"/>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/es/floater_avatar_picker.xml b/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
index 68a56ac6782..df0147b191a 100644
--- a/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Elegir a un residente">
+<floater name="avatarpicker" title="ELEGIR A UN RESIDENTE">
 	<tab_container name="ResidentChooserTabs">
 		<panel label="Buscar" name="SearchPanel">
 			<text name="InstructSearchResidentName">
diff --git a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
index 6344768c7f3..8febe4b0a9d 100644
--- a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatar_texture_debug" title="Texturas del avatar">
+<floater name="avatar_texture_debug" title="TEXTURAS DEL AVATAR">
 	<text name="baked_label">
 		Texturas predeterminadas
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_beacons.xml b/indra/newview/skins/default/xui/es/floater_beacons.xml
index 9282cb04a69..2df90bc911f 100644
--- a/indra/newview/skins/default/xui/es/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/es/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Balizas">
+<floater name="beacons" title="BALIZAS">
 	<panel name="beacons_panel">
 		<check_box label="Objetos con script sólo al tocarlos" name="touch_only"/>
 		<check_box label="Objetos con script" name="scripted"/>
diff --git a/indra/newview/skins/default/xui/es/floater_build_options.xml b/indra/newview/skins/default/xui/es/floater_build_options.xml
index c3e4acacf09..3d839bf645f 100644
--- a/indra/newview/skins/default/xui/es/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_build_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="build options floater" title="Opciones de la cuadrícula">
+<floater name="build options floater" title="OPCIONES DE LA CUADRÍCULA">
 	<spinner label="Unidad de la cuadrícula (metros)" name="GridResolution" width="250" label_width="192"/>
 	<spinner label="Graduación de la cuadrícula (metros)" name="GridDrawSize" width="250" label_width="192"/>
 	<check_box label="Activar subunidades" name="GridSubUnit"/>
diff --git a/indra/newview/skins/default/xui/es/floater_bulk_perms.xml b/indra/newview/skins/default/xui/es/floater_bulk_perms.xml
index 32517130743..0553f4c6725 100644
--- a/indra/newview/skins/default/xui/es/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/es/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Cambio masivo de los permisos del contenido">
+<floater name="floaterbulkperms" title="CAMBIO MASIVO DE LOS PERMISOS DEL CONTENIDO">
 	<text name="applyto">
 		Tipos de contenido
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_bumps.xml b/indra/newview/skins/default/xui/es/floater_bumps.xml
index ed43e936880..0522f788bbd 100644
--- a/indra/newview/skins/default/xui/es/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/es/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_bumps" title="Choques, empujones, e impactos">
+<floater name="floater_bumps" title="CHOQUES, EMPUJONES, E IMPACTOS">
 	<text name="none_detected">
 		No se han detectado
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_buy_contents.xml b/indra/newview/skins/default/xui/es/floater_buy_contents.xml
index 2346798f94a..c4d269ff391 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_buy_contents" title="Comprar el contenido">
+<floater name="floater_buy_contents" title="COMPRAR EL CONTENIDO">
 	<text name="contains_text">
 		[NAME] contiene:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_buy_currency.xml b/indra/newview/skins/default/xui/es/floater_buy_currency.xml
index a01e07e694b..af542acbcef 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy currency" title="Comprar dinero">
+<floater name="buy currency" title="COMPRAR DINERO">
 	<text name="info_buying">
 		Comprando dinero:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_buy_land.xml b/indra/newview/skins/default/xui/es/floater_buy_land.xml
index 7ee15955eb3..7ff45fcf799 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Comprar terreno">
+<floater name="buy land" title="COMPRAR TERRENO">
 	<text name="region_name_label">
 		Región:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_buy_object.xml b/indra/newview/skins/default/xui/es/floater_buy_object.xml
index 8e713f362b4..26696bc8682 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Comprar una copia del objeto">
+<floater name="contents" title="COMPRAR UNA COPIA DEL OBJETO">
 	<text name="contents_text">
 		y sus contenidos:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_choose_group.xml b/indra/newview/skins/default/xui/es/floater_choose_group.xml
index 71331abb654..a5967b814eb 100644
--- a/indra/newview/skins/default/xui/es/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/es/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="groups" title="Grupos">
+<floater name="groups" title="GRUPOS">
 	<text name="groupdesc">
 		Elegir un grupo:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_color_picker.xml b/indra/newview/skins/default/xui/es/floater_color_picker.xml
index 616c373d187..4395ee6890e 100644
--- a/indra/newview/skins/default/xui/es/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/es/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="ColorPicker" title="Paleta de colores">
+<floater name="ColorPicker" title="PALETA DE COLORES">
 	<text name="r_val_text">
 		Rojo:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_customize.xml b/indra/newview/skins/default/xui/es/floater_customize.xml
index 1322b9a5cf2..94452dae6b0 100644
--- a/indra/newview/skins/default/xui/es/floater_customize.xml
+++ b/indra/newview/skins/default/xui/es/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Apariencia" width="527">
+<floater name="floater customize" title="APARIENCIA" width="527">
 	<tab_container name="customize tab container" width="525">
 		<placeholder label="Partes del cuerpo" name="body_parts_placeholder"/>
 		<panel label="Forma" name="Shape" width="389">
diff --git a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
index 9ee7fc3ead2..fc2b12d1e46 100644
--- a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="Editor del ciclo de un día">
+<floater name="Day Cycle Floater" title="EDITOR DEL CICLO DE UN DÍA">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Ciclo de un día" name="Day Cycle">
 			<button label="?" name="WLDayCycleHelp"/>
diff --git a/indra/newview/skins/default/xui/es/floater_device_settings.xml b/indra/newview/skins/default/xui/es/floater_device_settings.xml
index e8989f44ef8..eadf04a4170 100644
--- a/indra/newview/skins/default/xui/es/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/es/floater_device_settings.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="Configuración de los dispositivos del chat de voz"/>
+<floater name="floater_device_settings" title="CONFIGURACIÓN DE LOS DISPOSITIVOS DEL CHAT DE VOZ"/>
diff --git a/indra/newview/skins/default/xui/es/floater_env_settings.xml b/indra/newview/skins/default/xui/es/floater_env_settings.xml
index 65710fc5ed7..5d6ba47daf1 100644
--- a/indra/newview/skins/default/xui/es/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/es/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="Editor del entorno">
+<floater name="Environment Editor Floater" title="EDITOR DEL ENTORNO">
 	<text name="EnvTimeText">
 		Duración de
 un día
diff --git a/indra/newview/skins/default/xui/es/floater_font_test.xml b/indra/newview/skins/default/xui/es/floater_font_test.xml
index e6b8087b607..9a665321a46 100644
--- a/indra/newview/skins/default/xui/es/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/es/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Prueba de fuentes">
+<floater name="contents" title="PRUEBA DE FUENTES">
 	<text name="linea">
 		OverrideTest, debería de aparecer aquí en Times. (Desde default/xui/en-us)
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_gesture.xml b/indra/newview/skins/default/xui/es/floater_gesture.xml
index e7f1a7aca27..496881f2d23 100644
--- a/indra/newview/skins/default/xui/es/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/es/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="gestures" title="Gestos disponibles">
+<floater name="gestures" title="GESTOS DISPONIBLES">
 	<text name="help_label">
 		Pulse dos veces en un gesto para reproducir las animaciones
 y sonidos.
diff --git a/indra/newview/skins/default/xui/es/floater_god_tools.xml b/indra/newview/skins/default/xui/es/floater_god_tools.xml
index ea2571ecb88..78ec76e32bc 100644
--- a/indra/newview/skins/default/xui/es/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_god_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="godtools floater" title="Herramientas de Dios">
+<floater name="godtools floater" title="HERRAMIENTAS DE DIOS">
 	<tab_container name="GodTools Tabs">
 		<panel label="Red" name="grid">
 			<button label="Expulsar a todos los usuarios"
diff --git a/indra/newview/skins/default/xui/es/floater_hardware_settings.xml b/indra/newview/skins/default/xui/es/floater_hardware_settings.xml
index 29750ee7371..9418252036e 100644
--- a/indra/newview/skins/default/xui/es/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/es/floater_hardware_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Hardware Settings Floater" title="Configuración del hardware">
+<floater name="Hardware Settings Floater" title="CONFIGURACIÓN DEL HARDWARE">
 	<text name="Filtering:">
 		Filtrado:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_hud.xml b/indra/newview/skins/default/xui/es/floater_hud.xml
index d31bcedf05e..e458913452f 100644
--- a/indra/newview/skins/default/xui/es/floater_hud.xml
+++ b/indra/newview/skins/default/xui/es/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_hud" title="Tutorial"/>
+<floater name="floater_hud" title="TUTORIAL"/>
diff --git a/indra/newview/skins/default/xui/es/floater_inspect.xml b/indra/newview/skins/default/xui/es/floater_inspect.xml
index 026081bc042..3c8b38648f6 100644
--- a/indra/newview/skins/default/xui/es/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/es/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Examinar objetos" min_width="450">
+<floater name="inspect" title="EXAMINAR OBJETOS" min_width="450">
 	<scroll_list name="object_list" tool_tip="Seleccione un objeto de esta lista para realzarlo en el mundo">
 		<column label="Nombre del objeto" name="object_name"/>
 		<column label="Propietario" name="owner_name"/>
diff --git a/indra/newview/skins/default/xui/es/floater_inventory.xml b/indra/newview/skins/default/xui/es/floater_inventory.xml
index 7da14c0579d..8d16d6089ee 100644
--- a/indra/newview/skins/default/xui/es/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/es/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="Inventario">
+<floater name="Inventory" title="INVENTARIO">
 	<search_editor label="Escriba aquí para buscar" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Todos los ítems" name="All Items"/>
diff --git a/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml
index 4df3ca2cf6f..7abdfceb94e 100644
--- a/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="item properties" title="Propiedades del ítem del inventario">
+<floater name="item properties" title="PROPIEDADES DEL ÍTEM DEL INVENTARIO">
 	<text name="LabelItemNameTitle">
 		Nombre:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml
index 7cd787bfb51..0cbee11bfb8 100644
--- a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory Finder" title="ítems_recientes_del_inventario">
+<floater name="Inventory Finder" title="ÍTEMS_RECIENTES_DEL_INVENTARIO">
 	<check_box label="Animaciones" name="check_animation"/>
 	<check_box label="Tarjetas de visita" name="check_calling_card"/>
 	<check_box label="Ropa" name="check_clothing"/>
diff --git a/indra/newview/skins/default/xui/es/floater_joystick.xml b/indra/newview/skins/default/xui/es/floater_joystick.xml
index 2e0fb87744b..75c53dd646f 100644
--- a/indra/newview/skins/default/xui/es/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/es/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Configuración del joystick">
+<floater name="Joystick" title="CONFIGURACIÓN DEL JOYSTICK">
 	<check_box name="enable_joystick" label="Activar el joystick:"/>
 	<text left="140" name="joystick_type" width="360"/>
 	<spinner label="Mapping: eje X" name="JoystickAxis1" label_width="118" width="161"/>
diff --git a/indra/newview/skins/default/xui/es/floater_lagmeter.xml b/indra/newview/skins/default/xui/es/floater_lagmeter.xml
index 1af0bb065cb..54c4ce8c6ac 100644
--- a/indra/newview/skins/default/xui/es/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/es/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="Medidor del lag">
+<floater name="floater_lagmeter" title="MEDIDOR DEL LAG">
 	<button label="" label_selected="" name="client_lagmeter" tool_tip="Estado del lag del cliente"/>
 	<text name="client">
 		Cliente:
diff --git a/indra/newview/skins/default/xui/es/floater_land_holdings.xml b/indra/newview/skins/default/xui/es/floater_land_holdings.xml
index 5df319905df..bcdebf45884 100644
--- a/indra/newview/skins/default/xui/es/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/es/floater_land_holdings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Mi terreno">
+<floater name="land holdings floater" title="MI TERRENO">
 	<scroll_list name="parcel list">
 		<column label="Nombre de la parcela" name="name"/>
 		<column label="Región" name="location"/>
diff --git a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
index 226c3482af2..02be809319f 100644
--- a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="Script: script nuevo">
+<floater name="script ed float" title="SCRIPT: SCRIPT NUEVO">
 	<button label="Reiniciar" label_selected="Reiniciar" name="Reset"/>
 	<check_box label="Ejecutándose" name="running" left="4"/>
 	<check_box label="Mono" name="mono" left="106"/>
diff --git a/indra/newview/skins/default/xui/es/floater_lsl_guide.xml b/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
index 859a2d38124..0cde2fe5bc9 100644
--- a/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="Wiki de LSL">
+<floater name="script ed float" title="WIKI DE LSL">
 	<check_box label="Seguir al cursor" name="lock_check"/>
 	<combo_box label="Bloquear" name="history_combo" left_delta="120" width="70"/>
 	<button label="Atrás" name="back_btn" left_delta="75"/>
diff --git a/indra/newview/skins/default/xui/es/floater_media_browser.xml b/indra/newview/skins/default/xui/es/floater_media_browser.xml
index 79c8980c025..ff50b56a32f 100644
--- a/indra/newview/skins/default/xui/es/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/es/floater_media_browser.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Navegador">
+<floater name="floater_about" title="NAVEGADOR">
 	<layout_stack name="stack1">
 		<layout_panel name="nav_controls">
 			<button label="Atrás" name="back" width="75"/>
diff --git a/indra/newview/skins/default/xui/es/floater_mem_leaking.xml b/indra/newview/skins/default/xui/es/floater_mem_leaking.xml
index a2791d64327..6d5e987409e 100644
--- a/indra/newview/skins/default/xui/es/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/es/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="MemLeak" title="Prueba de la fuga de memoria">
+<floater name="MemLeak" title="PRUEBA DE LA FUGA DE MEMORIA">
 	<spinner label="Velocidad de la fuga (bites por fotograma):" name="leak_speed"/>
 	<spinner label="Fuga de memoria máx. (MB):" name="max_leak"/>
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/es/floater_mute_object.xml b/indra/newview/skins/default/xui/es/floater_mute_object.xml
index 0cf38c09ee0..390333cd1d5 100644
--- a/indra/newview/skins/default/xui/es/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/es/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="mute by name" title="Ignorar un objeto según su nombre">
+<floater name="mute by name" title="IGNORAR UN OBJETO SEGÚN SU NOMBRE">
 	<text name="message" bottom_delta="-40">
 		Ignorar según el nombre sólo afecta al chat y los MI del
 objeto, no a sus sonidos. 
diff --git a/indra/newview/skins/default/xui/es/floater_my_friends.xml b/indra/newview/skins/default/xui/es/floater_my_friends.xml
index d555eed305f..07f362560b9 100644
--- a/indra/newview/skins/default/xui/es/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/es/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="Contactos">
+<floater name="floater_my_friends" title="CONTACTOS">
 	<tab_container name="friends_and_groups">
 		<panel label="Amigos" name="friends_panel"/>
 		<panel label="Grupos" name="groups_panel"/>
diff --git a/indra/newview/skins/default/xui/es/floater_openobject.xml b/indra/newview/skins/default/xui/es/floater_openobject.xml
index 60487b829c5..89c79e88339 100644
--- a/indra/newview/skins/default/xui/es/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/es/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="objectcontents" title="Contenido del objeto">
+<floater name="objectcontents" title="CONTENIDO DEL OBJETO">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_perm_prefs.xml b/indra/newview/skins/default/xui/es/floater_perm_prefs.xml
index 4a3977be3d4..7d3c8e62f3d 100644
--- a/indra/newview/skins/default/xui/es/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/es/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Permisos de subida por defecto">
+<floater name="perm prefs" title="PERMISOS DE SUBIDA POR DEFECTO">
 	<panel label="Permisos" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Compartir con el grupo" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/es/floater_post_process.xml b/indra/newview/skins/default/xui/es/floater_post_process.xml
index acac2b2bf91..5c62ccde360 100644
--- a/indra/newview/skins/default/xui/es/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/es/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Post-Process Floater" title="Configuración del procesamiento">
+<floater name="Post-Process Floater" title="CONFIGURACIÓN DEL PROCESAMIENTO">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Color del filtro" name="wmiColorFilterPanel">
 			<check_box label="Activar" name="wmiColorFilterToggle"/>
diff --git a/indra/newview/skins/default/xui/es/floater_postcard.xml b/indra/newview/skins/default/xui/es/floater_postcard.xml
index 6a9811c0583..ace3204cc7b 100644
--- a/indra/newview/skins/default/xui/es/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/es/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="Foto por correo electrónico">
+<floater name="Postcard" title="FOTO POR CORREO ELECTRÓNICO">
 	<text name="to_label">
 		Correo electrónico
    del destinatario:
diff --git a/indra/newview/skins/default/xui/es/floater_preferences.xml b/indra/newview/skins/default/xui/es/floater_preferences.xml
index df7fc93dd9e..5fe4ae3b64c 100644
--- a/indra/newview/skins/default/xui/es/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/es/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Preferences" title="Preferencias" min_width="350" width="646">
+<floater name="Preferences" title="PREFERENCIAS" min_width="350" width="646">
 	<button label="OK" label_selected="OK" name="OK"/>
 	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
 	<button label="Aplicar" label_selected="Aplicar" name="Apply"/>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_classified.xml b/indra/newview/skins/default/xui/es/floater_preview_classified.xml
index f2fa38ead83..8114c7f3c2b 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_classified.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="Información clasificada"/>
+<floater name="classified_preview" title="INFORMACIÓN CLASIFICADA"/>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_event.xml b/indra/newview/skins/default/xui/es/floater_preview_event.xml
index 7f727b05024..04cb0de4d40 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_event.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="Información de eventos"/>
+<floater name="event_preview" title="INFORMACIÓN DE EVENTOS"/>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
index 4d11520335e..35f795a7ec8 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview notecard" title="Nota:">
+<floater name="preview notecard" title="NOTA:">
 	<button label="Guardar" label_selected="Guardar" name="Save"/>
 	<text name="desc txt">
 		Descripción:
diff --git a/indra/newview/skins/default/xui/es/floater_region_info.xml b/indra/newview/skins/default/xui/es/floater_region_info.xml
index b5a85378c20..46d0839238d 100644
--- a/indra/newview/skins/default/xui/es/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/es/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="regioninfo" title="Región/Estado"/>
+<floater name="regioninfo" title="REGIÓN/ESTADO"/>
diff --git a/indra/newview/skins/default/xui/es/floater_report_abuse.xml b/indra/newview/skins/default/xui/es/floater_report_abuse.xml
index 8ae8c212e6a..a075c512470 100644
--- a/indra/newview/skins/default/xui/es/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/es/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Denuncia de Infracción">
+<floater name="floater_report_abuse" title="DENUNCIA DE INFRACCIÓN">
 	<texture_picker label="" name="screenshot"/>
 	<check_box label="Incluir una captura de pantalla" name="screen_check"/>
 	<text name="reporter_title">
diff --git a/indra/newview/skins/default/xui/es/floater_script_debug.xml b/indra/newview/skins/default/xui/es/floater_script_debug.xml
index e9b66c74d20..e7eddfd9f33 100644
--- a/indra/newview/skins/default/xui/es/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/es/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <multi_floater name="script debug floater" title="Alerta/Error de los scripts">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[All scripts]"/>
+		<floater label="Script" name="all_scripts" title="[ALL SCRIPTS]"/>
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/es/floater_script_preview.xml b/indra/newview/skins/default/xui/es/floater_script_preview.xml
index 0d8cd0b4068..79984e7bc11 100644
--- a/indra/newview/skins/default/xui/es/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/es/floater_script_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview lsl text" title="Script: script de rotación">
+<floater name="preview lsl text" title="SCRIPT: SCRIPT DE ROTACIÓN">
 	<text name="desc txt">
 		Descripción:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_script_queue.xml b/indra/newview/skins/default/xui/es/floater_script_queue.xml
index dcd2bfe5b0c..ace596cd9a1 100644
--- a/indra/newview/skins/default/xui/es/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/es/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="queue" title="Reinicio">
+<floater name="queue" title="REINICIO">
 	<button label="Cerrar" label_selected="Cerrar" name="close"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/es/floater_script_search.xml b/indra/newview/skins/default/xui/es/floater_script_search.xml
index 3c8dc2fe9c1..a59f258a18e 100644
--- a/indra/newview/skins/default/xui/es/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/es/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script search" title="Buscar en el script" width="320">
+<floater name="script search" title="BUSCAR EN EL SCRIPT" width="320">
 	<check_box label="Indiferente mays./mins." name="case_text" left="75"/>
 	<button label="Buscar" label_selected="Buscar" name="search_btn" width="85"/>
 	<button label="Reemplazar" label_selected="Reemplazar" name="replace_btn" left="100" width="85"/>
diff --git a/indra/newview/skins/default/xui/es/floater_sell_land.xml b/indra/newview/skins/default/xui/es/floater_sell_land.xml
index bce13c1e338..c6e87462504 100644
--- a/indra/newview/skins/default/xui/es/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sell land" title="Vender el terreno">
+<floater name="sell land" title="VENDER EL TERRENO">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/es/floater_settings_debug.xml b/indra/newview/skins/default/xui/es/floater_settings_debug.xml
index 1d5ad2f34cd..0e8e6bdfd29 100644
--- a/indra/newview/skins/default/xui/es/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/es/floater_settings_debug.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="settings_debug" title="Configuración del depurador">
+<floater name="settings_debug" title="CONFIGURACIÓN DEL DEPURADOR">
 	<combo_box name="boolean_combo">
 		<combo_box.item name="TRUE" label="TRUE" />
 		<combo_box.item name="FALSE" label="FALSE" />
diff --git a/indra/newview/skins/default/xui/es/floater_snapshot.xml b/indra/newview/skins/default/xui/es/floater_snapshot.xml
index c1ace235030..afea6c09fef 100644
--- a/indra/newview/skins/default/xui/es/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/es/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Vista previa de la foto">
+<floater name="Snapshot" title="VISTA PREVIA DE LA FOTO">
 	<text name="type_label">
 		Destino de la foto
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_sound_preview.xml b/indra/newview/skins/default/xui/es/floater_sound_preview.xml
index e69ac101234..8b8d9f13ced 100644
--- a/indra/newview/skins/default/xui/es/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/es/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		Nombre:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_statistics.xml b/indra/newview/skins/default/xui/es/floater_statistics.xml
index 6e644cacf1f..c9b0a76df0c 100644
--- a/indra/newview/skins/default/xui/es/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/es/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Estadísticas"/>
+<floater name="stats floater" title="ESTADÍSTICAS"/>
diff --git a/indra/newview/skins/default/xui/es/floater_telehub.xml b/indra/newview/skins/default/xui/es/floater_telehub.xml
index 74084e9db9f..b2dddfb7f7f 100644
--- a/indra/newview/skins/default/xui/es/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/es/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="telehub" title="Punto de Teleporte" min_height="310" height="310">
+<floater name="telehub" title="PUNTO DE TELEPORTE" min_height="310" height="310">
 	<text name="status_text_connected">
 		Punto de Teleporte conectado al objeto [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
index 8b661a6041a..09d6e7e4aa3 100644
--- a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Elegir: Textura">
+<floater name="texture picker" title="ELEGIR: TEXTURA">
 	<string name="choose_picture">
 		Pulse para elegir una imagen
 	</string>
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index da842d22c62..24db352ac42 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Construir" width="288">
+<floater name="toolbox floater" title="" short_title="CONSTRUIR" width="288">
 	<button label="" label_selected="" name="button focus" tool_tip="Visión"/>
 	<button label="" label_selected="" name="button move" tool_tip="Mover"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Editar"/>
diff --git a/indra/newview/skins/default/xui/es/floater_top_objects.xml b/indra/newview/skins/default/xui/es/floater_top_objects.xml
index 95f2c39d423..29ae9991af5 100644
--- a/indra/newview/skins/default/xui/es/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/es/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="cargando...">
+<floater name="top_objects" title="CARGANDO...">
 	<text name="title_text">
 		Cargando...
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_water.xml b/indra/newview/skins/default/xui/es/floater_water.xml
index 934fc7882b7..c86e49a3554 100644
--- a/indra/newview/skins/default/xui/es/floater_water.xml
+++ b/indra/newview/skins/default/xui/es/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="Editor avanzado del agua">
+<floater name="Water Floater" title="EDITOR AVANZADO DEL AGUA">
 	<text name="KeyFramePresetsText">
 		Agua predefinida:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_windlight_options.xml b/indra/newview/skins/default/xui/es/floater_windlight_options.xml
index e240dea0b5c..0697f05553f 100644
--- a/indra/newview/skins/default/xui/es/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="Editor avanzado del cielo">
+<floater name="WindLight floater" title="EDITOR AVANZADO DEL CIELO">
 	<text name="KeyFramePresetsText">
 		Cielos definidos:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_world_map.xml b/indra/newview/skins/default/xui/es/floater_world_map.xml
index 6521e72d5a4..4d7337bef74 100644
--- a/indra/newview/skins/default/xui/es/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/es/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Mapa del Mundo">
+<floater name="worldmap" title="MAPA DEL MUNDO">
 	<tab_container name="maptab">
 		<panel label="Objetos" name="objects_mapview"/>
 		<panel label="Terreno" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml
index 7b918be075e..53e48352f10 100644
--- a/indra/newview/skins/default/xui/fr/floater_about.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="A propos de [APP_NAME]">
+<floater name="floater_about" title="A PROPOS DE [APP_NAME]">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
 	<text_editor name="credits_editor">
diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml
index f2d2dbfa078..0729c79cbb8 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="À propos du terrain">
+<floater name="floaterland" title="À PROPOS DU TERRAIN">
 	<tab_container name="landtab">
 		<panel label="Général" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/fr/floater_auction.xml b/indra/newview/skins/default/xui/fr/floater_auction.xml
index 4bdf9df1beb..3ec95a60c58 100644
--- a/indra/newview/skins/default/xui/fr/floater_auction.xml
+++ b/indra/newview/skins/default/xui/fr/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_auction" title="Commencer la vente de terrain Linden">
+<floater name="floater_auction" title="COMMENCER LA VENTE DE TERRAIN LINDEN">
 	<check_box label="Inclure le marquage de sélection jaune" name="fence_check" />
 	<combo_box name="saletype_combo">
 		<combo_box.item name="Auction" label="Enchères" />
diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
index 01b4c944f3c..c713d3e9305 100644
--- a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Choisir le résident">
+<floater name="avatarpicker" title="CHOISIR LE RÉSIDENT">
 	<tab_container name="ResidentChooserTabs">
 		<panel label="Rechercher" name="SearchPanel">
 			<text name="InstructSearchResidentName">
diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml
index f4e3a1615c2..569126f3ecb 100644
--- a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatar_texture_debug" title="Textures de l&apos;avatar">
+<floater name="avatar_texture_debug" title="TEXTURES DE L&apos;AVATAR">
 	<text name="label">
 		Textures fixées
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_beacons.xml b/indra/newview/skins/default/xui/fr/floater_beacons.xml
index 0b060983eea..4f5c5d442f5 100644
--- a/indra/newview/skins/default/xui/fr/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/fr/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Balises">
+<floater name="beacons" title="BALISES">
 	<panel name="beacons_panel">
 		<check_box label="Objets scriptés avec Toucher uniquement" name="touch_only"/>
 		<check_box label="Objets scriptés" name="scripted"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_build_options.xml b/indra/newview/skins/default/xui/fr/floater_build_options.xml
index 3451c2de4c7..76e8e2f6375 100644
--- a/indra/newview/skins/default/xui/fr/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_build_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="build options floater" title="Options de la grille">
+<floater name="build options floater" title="OPTIONS DE LA GRILLE">
 	<spinner label="Unité (mètres)" name="GridResolution" />
 	<spinner label="Mesures (mètres)" name="GridDrawSize" />
 	<check_box label="Activer la fixation des sous-unités" name="GridSubUnit" />
diff --git a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
index b868aa33adc..98b7faa2ccc 100644
--- a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Changement des droits relatifs au contenu">
+<floater name="floaterbulkperms" title="CHANGEMENT DES DROITS RELATIFS AU CONTENU">
 	<text name="applyto">
 		Types de contenu
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_bumps.xml b/indra/newview/skins/default/xui/fr/floater_bumps.xml
index e12c7ed17d6..e439c30524f 100644
--- a/indra/newview/skins/default/xui/fr/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/fr/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_bumps" title="Collisions, coups et bousculades">
+<floater name="floater_bumps" title="COLLISIONS, COUPS ET BOUSCULADES">
 	<text name="none_detected">
 		Aucun détecté
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_contents.xml b/indra/newview/skins/default/xui/fr/floater_buy_contents.xml
index 916b270500b..e8b47f53656 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_buy_contents" title="Acheter ce contenu">
+<floater name="floater_buy_contents" title="ACHETER CE CONTENU">
 	<text name="contains_text">
 		[NAME] contient :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
index 85d67218d3e..9112d30be27 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy currency" title="Acheter des L$">
+<floater name="buy currency" title="ACHETER DES L$">
 	<text left="5" name="info_buying">
 		Achat de L$ :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_land.xml b/indra/newview/skins/default/xui/fr/floater_buy_land.xml
index aaf1577114b..2b930988471 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Acheter le terrain">
+<floater name="buy land" title="ACHETER LE TERRAIN">
 	<text name="region_name_label">
 		Région :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_object.xml b/indra/newview/skins/default/xui/fr/floater_buy_object.xml
index 9e0ce25b975..893d559e6e8 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Acheter une copie de l&apos;objet">
+<floater name="contents" title="ACHETER UNE COPIE DE L&apos;OBJET">
 	<text name="contents_text">
 		et ses contenus :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_choose_group.xml b/indra/newview/skins/default/xui/fr/floater_choose_group.xml
index ade440f2962..15cdd4d332b 100644
--- a/indra/newview/skins/default/xui/fr/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/fr/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="groups" title="Groupes">
+<floater name="groups" title="GROUPES">
 	<text name="groupdesc">
 		Choisissez un groupe :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_color_picker.xml b/indra/newview/skins/default/xui/fr/floater_color_picker.xml
index 94bcad070e8..996f3e9b073 100644
--- a/indra/newview/skins/default/xui/fr/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/fr/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="ColorPicker" title="Choix de texture et de couleur">
+<floater name="ColorPicker" title="CHOIX DE TEXTURE ET DE COULEUR">
 	<text name="r_val_text">
 		Rouge :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_customize.xml b/indra/newview/skins/default/xui/fr/floater_customize.xml
index 1250c46933f..bf70c5415ee 100644
--- a/indra/newview/skins/default/xui/fr/floater_customize.xml
+++ b/indra/newview/skins/default/xui/fr/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Apparence" width="548">
+<floater name="floater customize" title="APPARENCE" width="548">
 	<tab_container name="customize tab container" tab_min_width="150" width="546">
 		<placeholder label="Parties du corps" name="body_parts_placeholder"/>
 		<panel label="Silhouette" left="154" name="Shape" width="389">
diff --git a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
index 11035398982..0b36b7b8ca7 100644
--- a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Day Cycle Floater" title="Editeur du cycle du jour">
+<floater name="Day Cycle Floater" title="EDITEUR DU CYCLE DU JOUR">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Cycle du jour" name="Day Cycle">
 			<button label="?" name="WLDayCycleHelp" />
diff --git a/indra/newview/skins/default/xui/fr/floater_device_settings.xml b/indra/newview/skins/default/xui/fr/floater_device_settings.xml
index 656f1c4fbab..5374b4e5934 100644
--- a/indra/newview/skins/default/xui/fr/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_device_settings.xml
@@ -1,3 +1,3 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater name="floater_device_settings"
-     title="Paramètres du matériel utilisé pour le chat vocal" />
+     title="PARAMÈTRES DU MATÉRIEL UTILISÉ POUR LE CHAT VOCAL" />
diff --git a/indra/newview/skins/default/xui/fr/floater_env_settings.xml b/indra/newview/skins/default/xui/fr/floater_env_settings.xml
index 1d14142dd30..7d6de114be3 100644
--- a/indra/newview/skins/default/xui/fr/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="Éditeur d&apos;environnement">
+<floater name="Environment Editor Floater" title="ÉDITEUR D&apos;ENVIRONNEMENT">
 	<text bottom="-45" name="EnvTimeText">
 		Heure de la
 journée
diff --git a/indra/newview/skins/default/xui/fr/floater_font_test.xml b/indra/newview/skins/default/xui/fr/floater_font_test.xml
index 11eb11a0d79..3a32e8adc51 100644
--- a/indra/newview/skins/default/xui/fr/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/fr/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Test de la police">
+<floater name="contents" title="TEST DE LA POLICE">
 	<text name="linea">
 		OverrideTest, Times-BOLD doit être sélectionné ici. (De default/xui/fr)
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_gesture.xml b/indra/newview/skins/default/xui/fr/floater_gesture.xml
index 4411fee480a..b3026478ff4 100644
--- a/indra/newview/skins/default/xui/fr/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/fr/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="gestures" title="Gestes utilisés">
+<floater name="gestures" title="GESTES UTILISÉS">
 	<text name="help_label">
 		Double-cliquez sur un geste pour jouer les animations
 et les sons.
diff --git a/indra/newview/skins/default/xui/fr/floater_god_tools.xml b/indra/newview/skins/default/xui/fr/floater_god_tools.xml
index 461956ff34a..33cb43f7ac7 100644
--- a/indra/newview/skins/default/xui/fr/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_god_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="godtools floater" title="Outils divins">
+<floater name="godtools floater" title="OUTILS DIVINS">
 	<tab_container name="GodTools Tabs">
 		<panel label="Grille" name="grid">
 			<button label="Éjecter tous" label_selected="Éjecter tous" name="Kick all users" width="175" />
diff --git a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
index 11d7fc28e94..6c1ea09c903 100644
--- a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Hardware Settings Floater" title="Configuration du matériel">
+<floater name="Hardware Settings Floater" title="CONFIGURATION DU MATÉRIEL">
 	<text name="Filtering:">
 		Filtres :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_hud.xml b/indra/newview/skins/default/xui/fr/floater_hud.xml
index 55c8b57ae2f..13ca0e87706 100644
--- a/indra/newview/skins/default/xui/fr/floater_hud.xml
+++ b/indra/newview/skins/default/xui/fr/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_hud" title="Didacticiel" />
+<floater name="floater_hud" title="DIDACTICIEL" />
diff --git a/indra/newview/skins/default/xui/fr/floater_inspect.xml b/indra/newview/skins/default/xui/fr/floater_inspect.xml
index f140c66de0b..944a157f172 100644
--- a/indra/newview/skins/default/xui/fr/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="inspect" title="Inspecter les objets">
+<floater name="inspect" title="INSPECTER LES OBJETS">
 	<scroll_list name="object_list"
 	     tool_tip="Sélectionner un objet de la liste pour le mettre en surbrillance dans le Monde.">
 		<column label="Nom" name="object_name" />
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory.xml b/indra/newview/skins/default/xui/fr/floater_inventory.xml
index 7173025d18e..a83a95fa755 100644
--- a/indra/newview/skins/default/xui/fr/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="Inventaire">
+<floater name="Inventory" title="INVENTAIRE">
 	<search_editor label="Saisissez votre recherche ici" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Tous les objets" name="All Items"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
index ec83d5bcaa2..2885a7e316a 100644
--- a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="item properties" title="Propriétés de l&apos;objet de l&apos;inventaire">
+<floater name="item properties" title="PROPRIÉTÉS DE L&apos;OBJET DE L&apos;INVENTAIRE">
 	<text name="LabelItemNameTitle">
 		Nom :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
index 634bb6e2e98..8fb8d3c6f43 100644
--- a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory Finder" title="inventory_recent_items">
+<floater name="Inventory Finder" title="INVENTORY_RECENT_ITEMS">
 	<check_box label="Animations" name="check_animation"/>
 	<check_box label="Cartes de visite" name="check_calling_card"/>
 	<check_box label="Habits" name="check_clothing"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_joystick.xml b/indra/newview/skins/default/xui/fr/floater_joystick.xml
index 75800847d72..546c95de4ca 100644
--- a/indra/newview/skins/default/xui/fr/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/fr/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Configuration du joystick">
+<floater name="Joystick" title="CONFIGURATION DU JOYSTICK">
 	<check_box name="enable_joystick" label="Activer :"/>
 	<spinner label="Mapping axe des X " name="JoystickAxis1"/>
 	<spinner label="Mapping axe des Y" name="JoystickAxis2"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
index 54069c9c49c..593ad903b90 100644
--- a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="Mesure du lag">
+<floater name="floater_lagmeter" title="MESURE DU LAG">
 	<button name="client_lagmeter" tool_tip="Statut du lag client"/>
 	<text name="client">
 		Client :
diff --git a/indra/newview/skins/default/xui/fr/floater_land_holdings.xml b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
index 9c4f4ee966b..17adafa8d9f 100644
--- a/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Mes terrains">
+<floater name="land holdings floater" title="MES TERRAINS">
 	<scroll_list name="parcel list">
 		<column label="Nom de la parcelle" name="name"/>
 		<column label="Région" name="location"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
index e2e2a9af9a0..76db22cea43 100644
--- a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="Script : Nouveau script">
+<floater name="script ed float" title="SCRIPT : NOUVEAU SCRIPT">
 	<button label="Réinitialiser" label_selected="Réinitialiser" name="Reset" width="100" left="390"/>
 	<check_box label="Exécution en cours" name="running" left="4"/>
 	<check_box label="Mono" name="mono" left="130"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml b/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml
index 5dc0fa76a35..2e3d88264e9 100644
--- a/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="Wiki LSL">
+<floater name="script ed float" title="WIKI LSL">
 	<check_box label="Suivre le curseur" name="lock_check" />
 	<combo_box label="Verrouiller" name="history_combo" left_delta="120" width="70"/>
 	<button label="Précédente" name="back_btn" left_delta="75"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_media_browser.xml b/indra/newview/skins/default/xui/fr/floater_media_browser.xml
index e75b45c43a2..5a787a6bf9d 100644
--- a/indra/newview/skins/default/xui/fr/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/fr/floater_media_browser.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Navigateur">
+<floater name="floater_about" title="NAVIGATEUR">
 	<layout_stack name="stack1">
 		<layout_panel name="nav_controls">
 			<button label="Précédente" name="back" width="75"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
index 8ee3a23b95f..e62aad6cd38 100644
--- a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="Simulation fuite mémoire">
+<floater name="MemLeak" title="SIMULATION FUITE MÉMOIRE">
 	<spinner label="Vitesse de la fuite (octets) :" name="leak_speed" />
 	<spinner label="Max mémoire perdue (Mo) :" name="max_leak" />
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/fr/floater_mute_object.xml b/indra/newview/skins/default/xui/fr/floater_mute_object.xml
index 23d351f32de..aae5770d51a 100644
--- a/indra/newview/skins/default/xui/fr/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/fr/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="mute by name" title="Ignorer les objets par nom">
+<floater name="mute by name" title="IGNORER LES OBJETS PAR NOM">
 	<text name="message">
 		Cette fonction ne marche que pour les chats et les IM,
 pas les sons. Saisissez le nom exact de l&apos;objet.
diff --git a/indra/newview/skins/default/xui/fr/floater_my_friends.xml b/indra/newview/skins/default/xui/fr/floater_my_friends.xml
index 911647d8be5..841a42a0ea1 100644
--- a/indra/newview/skins/default/xui/fr/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/fr/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_my_friends" title="Contacts">
+<floater name="floater_my_friends" title="CONTACTS">
 	<tab_container name="friends_and_groups">
 		<panel label="Amis" name="friends_panel" />
 		<panel label="Groupes" name="groups_panel" />
diff --git a/indra/newview/skins/default/xui/fr/floater_notification.xml b/indra/newview/skins/default/xui/fr/floater_notification.xml
index 7ca2dc3a642..62727da0075 100644
--- a/indra/newview/skins/default/xui/fr/floater_notification.xml
+++ b/indra/newview/skins/default/xui/fr/floater_notification.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="notification" title="Console de notifications">
+<floater name="notification" title="CONSOLE DE NOTIFICATIONS">
 	<text_editor name="payload">
 		Chargement..
 	</text_editor>
diff --git a/indra/newview/skins/default/xui/fr/floater_notifications_console.xml b/indra/newview/skins/default/xui/fr/floater_notifications_console.xml
index 7262fe8fe2d..fd3782bac2c 100644
--- a/indra/newview/skins/default/xui/fr/floater_notifications_console.xml
+++ b/indra/newview/skins/default/xui/fr/floater_notifications_console.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="notifications_console" title="Console de notifications">
+<floater name="notifications_console" title="CONSOLE DE NOTIFICATIONS">
 	<combo_box label="Sélectionner le type de notification" name="notification_types" width="412"/>
 	<button label="Ajouter" name="add_notification" left="417" width="78"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_openobject.xml b/indra/newview/skins/default/xui/fr/floater_openobject.xml
index 3761200d488..5ffa2f236d6 100644
--- a/indra/newview/skins/default/xui/fr/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/fr/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="objectcontents" title="Contenu des objets">
+<floater name="objectcontents" title="CONTENU DES OBJETS">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
index 9ea970d89dc..4b885f3afbe 100644
--- a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Droits par défaut">
+<floater name="perm prefs" title="DROITS PAR DÉFAUT">
 	<panel label="Droits" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Partager avec le groupe" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_post_process.xml b/indra/newview/skins/default/xui/fr/floater_post_process.xml
index 52afb340a6e..a22c7512e51 100644
--- a/indra/newview/skins/default/xui/fr/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/fr/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Post-Process Floater" title="Paramètres post-traitement">
+<floater name="Post-Process Floater" title="PARAMÈTRES POST-TRAITEMENT">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Filtre couleur" name="wmiColorFilterPanel">
 			<check_box label="Activer" name="wmiColorFilterToggle" />
diff --git a/indra/newview/skins/default/xui/fr/floater_postcard.xml b/indra/newview/skins/default/xui/fr/floater_postcard.xml
index ab21d7423a5..9c998c1838b 100644
--- a/indra/newview/skins/default/xui/fr/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Postcard" title="Envoyer la photo par e-mail">
+<floater name="Postcard" title="ENVOYER LA PHOTO PAR E-MAIL">
 	<text name="to_label" width="135">
 		E-mail du destinataire :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_preferences.xml b/indra/newview/skins/default/xui/fr/floater_preferences.xml
index 9dab4d642cc..ccd29a01dca 100644
--- a/indra/newview/skins/default/xui/fr/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Preferences" title="Préférences" min_width="330" width="626">
+<floater name="Preferences" title="PRÉFÉRENCES" min_width="330" width="626">
 	<button label="À propos" label_selected="À propos" name="About..." />
 	<button label="OK" label_selected="OK" name="OK" />
 	<button label="Annuler" label_selected="Annuler" name="Cancel" />
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
index 1b6f26150d3..436a386dc8e 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="Informations sur la petite annonce" />
+<floater name="classified_preview" title="INFORMATIONS SUR LA PETITE ANNONCE" />
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_event.xml b/indra/newview/skins/default/xui/fr/floater_preview_event.xml
index e7fc2aa8dda..30eeeec70db 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_event.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="Informations sur l&apos;événement" />
+<floater name="event_preview" title="INFORMATIONS SUR L&apos;ÉVÉNEMENT" />
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
index a23b906df6e..ea524422369 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview notecard" title="Remarque :">
+<floater name="preview notecard" title="REMARQUE :">
 	<button label="Enregistrer" label_selected="Enregistrer" name="Save" />
 	<text name="desc txt">
 		Description :
diff --git a/indra/newview/skins/default/xui/fr/floater_region_info.xml b/indra/newview/skins/default/xui/fr/floater_region_info.xml
index d69f212b866..3ec1ebf7e6e 100644
--- a/indra/newview/skins/default/xui/fr/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/fr/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="regioninfo" title="Région et domaine"/>
+<floater name="regioninfo" title="RÉGION ET DOMAINE"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
index 687b3068e63..be97165a3e9 100644
--- a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Signaler une infraction">
+<floater name="floater_report_abuse" title="SIGNALER UNE INFRACTION">
 	<texture_picker label="" name="screenshot"/>
 	<check_box label="Inclure une capture d&apos;écran" name="screen_check"/>
 	<text name="reporter_title" width="60">
diff --git a/indra/newview/skins/default/xui/fr/floater_script_debug.xml b/indra/newview/skins/default/xui/fr/floater_script_debug.xml
index 3664222fd2d..e257aac6c42 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <multi_floater name="script debug floater" title="Erreurs/alertes de scripts">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[All scripts]" />
+		<floater label="Script" name="all_scripts" title="[ALL SCRIPTS]" />
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_preview.xml b/indra/newview/skins/default/xui/fr/floater_script_preview.xml
index b767081625a..43541e8de31 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="Script : Script de rotation">
+<floater name="preview lsl text" title="SCRIPT : SCRIPT DE ROTATION">
 	<text name="desc txt">
 		Description :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_queue.xml b/indra/newview/skins/default/xui/fr/floater_script_queue.xml
index 55487f75db0..d5f39e7acef 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="queue" title="Réinitialiser progression">
+<floater name="queue" title="RÉINITIALISER PROGRESSION">
 	<button label="Fermer" label_selected="Fermer" name="close" />
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_search.xml b/indra/newview/skins/default/xui/fr/floater_script_search.xml
index 6f912026c46..49b0ffe542c 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script search" title="Recherche de scripts" width="320">
+<floater name="script search" title="RECHERCHE DE SCRIPTS" width="320">
 	<check_box label="Non sensible à la casse" name="case_text"  left="75"/>
 	<button label="Rechercher" label_selected="Rechercher" name="search_btn" width="96"/>
 	<button label="Remplacer" label_selected="Remplacer" name="replace_btn" left="111" width="96"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_sell_land.xml b/indra/newview/skins/default/xui/fr/floater_sell_land.xml
index 643a9435db4..81c3ccc79ab 100644
--- a/indra/newview/skins/default/xui/fr/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sell land" title="Vendre terrain">
+<floater name="sell land" title="VENDRE TERRAIN">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
index e67b8e2f797..f0781d0b321 100644
--- a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="settings_debug" title="Paramétrages du mode Debug">
+<floater name="settings_debug" title="PARAMÉTRAGES DU MODE DEBUG">
 	<combo_box name="boolean_combo">
 		<combo_box.item name="TRUE" label="TRUE" />
 		<combo_box.item name="FALSE" label="FALSE" />
diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
index 49c6ff04a6c..a28e64f7aff 100644
--- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Prévisualiser la photo" width="247">
+<floater name="Snapshot" title="PRÉVISUALISER LA PHOTO" width="247">
 	<text name="type_label">
 		Destination de la photo
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_sound_preview.xml b/indra/newview/skins/default/xui/fr/floater_sound_preview.xml
index 1ab3a4a7147..9e2b30b3f62 100644
--- a/indra/newview/skins/default/xui/fr/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		Nom :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_statistics.xml b/indra/newview/skins/default/xui/fr/floater_statistics.xml
index 0768c3ace49..a2e3c199ab7 100644
--- a/indra/newview/skins/default/xui/fr/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/fr/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statistiques"/>
+<floater name="stats floater" title="STATISTIQUES"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_telehub.xml b/indra/newview/skins/default/xui/fr/floater_telehub.xml
index e6201785bde..c89eea517e6 100644
--- a/indra/newview/skins/default/xui/fr/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/fr/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="telehub" title="Téléhub" min_height="310" height="310" >
+<floater name="telehub" title="TÉLÉHUB" min_height="310" height="310" >
 	<text name="status_text_connected">
 		Téléhub connecté à l&apos;objet [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
index fa8b65d8a5a..ff84025a441 100644
--- a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Texture">
+<floater name="texture picker" title="TEXTURE">
 	<string name="choose_picture">
 		Cliquez pour sélectionner une image
 	</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index e8db326e156..3638c3fb425 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Construire">
+<floater name="toolbox floater" title="" short_title="CONSTRUIRE">
 	<button label="" label_selected="" name="button focus" tool_tip="Mise au point"/>
 	<button label="" label_selected="" name="button move" tool_tip="Déplacer"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Modifier"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_top_objects.xml b/indra/newview/skins/default/xui/fr/floater_top_objects.xml
index 69a3d0cd18a..479559367f8 100644
--- a/indra/newview/skins/default/xui/fr/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/fr/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="en cours de chargement...">
+<floater name="top_objects" title="EN COURS DE CHARGEMENT...">
 	<text name="title_text">
 		Chargement...
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_water.xml b/indra/newview/skins/default/xui/fr/floater_water.xml
index 9b77c2450d9..3de5fee0ced 100644
--- a/indra/newview/skins/default/xui/fr/floater_water.xml
+++ b/indra/newview/skins/default/xui/fr/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Water Floater" title="Éditeur d&apos;eau avancé">
+<floater name="Water Floater" title="ÉDITEUR D&apos;EAU AVANCé">
 	<text name="KeyFramePresetsText">
 		Préréglages eau :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
index d1a62dc6bc9..4ff55d87b68 100644
--- a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="WindLight floater" title="Éditeur de ciel avancé" width="706">
+<floater name="WindLight floater" title="ÉDITEUR DE CIEL AVANCÉ" width="706">
 	<text name="KeyFramePresetsText">
 		Préréglages ciel :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_world_map.xml b/indra/newview/skins/default/xui/fr/floater_world_map.xml
index ec2db5f163f..1f76202dee4 100644
--- a/indra/newview/skins/default/xui/fr/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/fr/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Carte du monde">
+<floater name="worldmap" title="CARTE DU MONDE">
 	<tab_container name="maptab" width="955">
 		<panel label="Objets" name="objects_mapview" width="953"/>
 		<panel label="Terrain" name="terrain_mapview" width="953"/>
diff --git a/indra/newview/skins/default/xui/it/floater_about.xml b/indra/newview/skins/default/xui/it/floater_about.xml
index 2c913759302..a5aff9d4864 100644
--- a/indra/newview/skins/default/xui/it/floater_about.xml
+++ b/indra/newview/skins/default/xui/it/floater_about.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Informazioni su [APP_NAME]">
+<floater name="floater_about" title="INFORMAZIONI SU [APP_NAME]">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
 	<text_editor name="credits_editor">
diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml
index ede581c5edc..f2bd150ad7b 100644
--- a/indra/newview/skins/default/xui/it/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="Informazioni sul terreno">
+<floater name="floaterland" title="INFORMAZIONI SUL TERRENO">
 	<tab_container name="landtab">
 		<panel label="Generale" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/it/floater_auction.xml b/indra/newview/skins/default/xui/it/floater_auction.xml
index edbb9ab9a93..bba76a83cc6 100644
--- a/indra/newview/skins/default/xui/it/floater_auction.xml
+++ b/indra/newview/skins/default/xui/it/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="Inizia a vendere terra Linden">
+<floater name="floater_auction" title="INIZIA A VENDERE TERRA LINDEN">
 	<check_box label="Includi barriere di selezione gialle" name="fence_check"/>
 	<button label="Fotografia" label_selected="Fotografia" name="snapshot_btn"/>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
index a223e30fb56..89a61eeca8c 100644
--- a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Scegli residente">
+<floater name="avatarpicker" title="SCEGLI RESIDENTE">
 	<tab_container name="ResidentChooserTabs">
 		<panel label="Cerca" name="SearchPanel">
 			<text name="InstructSearchResidentName">
diff --git a/indra/newview/skins/default/xui/it/floater_avatar_textures.xml b/indra/newview/skins/default/xui/it/floater_avatar_textures.xml
index 281f436224b..f55b23af355 100644
--- a/indra/newview/skins/default/xui/it/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/it/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatar_texture_debug" title="Texture dell&apos;Avatar">
+<floater name="avatar_texture_debug" title="TEXTURE DELL&apos;AVATAR">
 	<text name="baked_label">
 		Texture Visualizzate
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_beacons.xml b/indra/newview/skins/default/xui/it/floater_beacons.xml
index 035b073729b..126c03e8556 100644
--- a/indra/newview/skins/default/xui/it/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/it/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Segnali luminosi">
+<floater name="beacons" title="SEGNALI LUMINOSI">
 	<panel name="beacons_panel">
 		<check_box label="Oggetti scriptati con solo &apos;tocca&apos; abilitato" name="touch_only"/>
 		<check_box label="Oggetti scriptati" name="scripted"/>
diff --git a/indra/newview/skins/default/xui/it/floater_build_options.xml b/indra/newview/skins/default/xui/it/floater_build_options.xml
index 2c60aeda2b2..c6ee0f79176 100644
--- a/indra/newview/skins/default/xui/it/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_build_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="build options floater" title="Opzioni della griglia">
+<floater name="build options floater" title="OPZIONI DELLA GRIGLIA">
 	<spinner label="Unità di misura della griglia (metri)" name="GridResolution" width="250" label_width="192"/>
 	<spinner label="Estensione della griglia (metri)" name="GridDrawSize" width="250" label_width="192"/>
 	<check_box label="Abilita sotto-unità di movimento" name="GridSubUnit"/>
diff --git a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
index 7ca57f34b32..7f5b68279e9 100644
--- a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Modifica in massa i permessi del contenuto">
+<floater name="floaterbulkperms" title="MODIFICA IN MASSA I PERMESSI DEL CONTENUTO">
 	<text name="applyto">
 		Tipi di contenuto
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_bumps.xml b/indra/newview/skins/default/xui/it/floater_bumps.xml
index d9ce29fa08a..23fa1a41a69 100644
--- a/indra/newview/skins/default/xui/it/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/it/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_bumps" title="Collisioni, spinte e colpi">
+<floater name="floater_bumps" title="COLLISIONI, SPINTE E COLPI">
 	<string name="none_detected">
 		Nessuno rilevato
 	</string>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_contents.xml b/indra/newview/skins/default/xui/it/floater_buy_contents.xml
index 2836f989704..1a6f64c07e4 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_buy_contents" title="Compra i contenuti">
+<floater name="floater_buy_contents" title="COMPRA I CONTENUTI">
 	<text name="contains_text">
 		[NAME] contiene:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_currency.xml b/indra/newview/skins/default/xui/it/floater_buy_currency.xml
index a24f0dbe7a3..6b881683f13 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy currency" title="Acquista valuta">
+<floater name="buy currency" title="ACQUISTA VALUTA">
 	<text name="info_buying">
 		Acquistando valuta:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_land.xml b/indra/newview/skins/default/xui/it/floater_buy_land.xml
index d6036c19dd6..b5d7ba07637 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Compra terra">
+<floater name="buy land" title="COMPRA TERRA">
 	<text name="region_name_label">
 		Regione:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_object.xml b/indra/newview/skins/default/xui/it/floater_buy_object.xml
index 90ff84a89c7..e99d4323670 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Compra una copia dell&apos;oggetto">
+<floater name="contents" title="COMPRA UNA COPIA DELL&apos;OGGETTO">
 	<text name="contents_text">
 		e dei suoi contenuti:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_choose_group.xml b/indra/newview/skins/default/xui/it/floater_choose_group.xml
index 3b5fc79bd87..00f2692295d 100644
--- a/indra/newview/skins/default/xui/it/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/it/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="groups" title="Gruppi">
+<floater name="groups" title="GRUPPI">
 	<text name="groupdesc">
 		Scegli un gruppo:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_color_picker.xml b/indra/newview/skins/default/xui/it/floater_color_picker.xml
index 1e6d7bc3f09..297b006e725 100644
--- a/indra/newview/skins/default/xui/it/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/it/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="ColorPicker" title="Tavolozza colori">
+<floater name="ColorPicker" title="TAVOLOZZA COLORI">
 	<text name="r_val_text">
 		Rosso:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_customize.xml b/indra/newview/skins/default/xui/it/floater_customize.xml
index eac673e004d..ad6111718af 100644
--- a/indra/newview/skins/default/xui/it/floater_customize.xml
+++ b/indra/newview/skins/default/xui/it/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Aspetto fisico" width="551">
+<floater name="floater customize" title="ASPETTO FISICO" width="551">
 	<tab_container name="customize tab container" tab_min_width="120" width="549">
 		<placeholder label="Parti del corpo" name="body_parts_placeholder"/>
 		<panel label="Forma del corpo" name="Shape" left="124" width="389">
diff --git a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
index 4c62d4f5a24..7d50e322c04 100644
--- a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="Editor delle ciclo giorno/notte">
+<floater name="Day Cycle Floater" title="EDITOR DELLE CICLO GIORNO/NOTTE">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Ciclo giorno/notte" name="Day Cycle">
 			<button label="?" name="WLDayCycleHelp"/>
diff --git a/indra/newview/skins/default/xui/it/floater_device_settings.xml b/indra/newview/skins/default/xui/it/floater_device_settings.xml
index cbf965bf93d..932978809d5 100644
--- a/indra/newview/skins/default/xui/it/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/it/floater_device_settings.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="Impostazioni dispositivi Voice Chat"/>
+<floater name="floater_device_settings" title="IMPOSTAZIONI DISPOSITIVI VOICE CHAT"/>
diff --git a/indra/newview/skins/default/xui/it/floater_env_settings.xml b/indra/newview/skins/default/xui/it/floater_env_settings.xml
index 36f97bda81f..32858d18cdc 100644
--- a/indra/newview/skins/default/xui/it/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/it/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="Editor dell&apos;ambiente">
+<floater name="Environment Editor Floater" title="EDITOR DELL&apos;AMBIENTE">
 	<text name="EnvTimeText">
 		Ora del
 giorno
diff --git a/indra/newview/skins/default/xui/it/floater_font_test.xml b/indra/newview/skins/default/xui/it/floater_font_test.xml
index 27b87a931d6..859c068b11b 100644
--- a/indra/newview/skins/default/xui/it/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/it/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Tipo di carattere per test">
+<floater name="contents" title="TIPO DI CARATTERE PER TEST">
 	<text name="linea">
 		OverrideTest, dovrebbe apparire qui come Times. (Dal default/xui/en-us)
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_gesture.xml b/indra/newview/skins/default/xui/it/floater_gesture.xml
index 997e13ecb50..91b7381d13d 100644
--- a/indra/newview/skins/default/xui/it/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/it/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="gestures" title="Gesture attive">
+<floater name="gestures" title="GESTURE ATTIVE">
 	<text name="help_label">
 		Fai doppio click su una gesture per azionare animazioni
 e suoni.
diff --git a/indra/newview/skins/default/xui/it/floater_hardware_settings.xml b/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
index 688f9137a25..cdf3e970a66 100644
--- a/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Hardware Settings Floater" title="Impostazioni Hardware">
+<floater name="Hardware Settings Floater" title="IMPOSTAZIONI HARDWARE">
 	<text name="Filtering:">
 		Filtraggio:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_hud.xml b/indra/newview/skins/default/xui/it/floater_hud.xml
index d31bcedf05e..e458913452f 100644
--- a/indra/newview/skins/default/xui/it/floater_hud.xml
+++ b/indra/newview/skins/default/xui/it/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_hud" title="Tutorial"/>
+<floater name="floater_hud" title="TUTORIAL"/>
diff --git a/indra/newview/skins/default/xui/it/floater_inspect.xml b/indra/newview/skins/default/xui/it/floater_inspect.xml
index 6028c40557c..1a4e6c3c1bd 100644
--- a/indra/newview/skins/default/xui/it/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/it/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Ispeziona oggetti" min_width="450">
+<floater name="inspect" title="ISPEZIONA OGGETTI" min_width="450">
 	<scroll_list name="object_list" tool_tip="Seleziona un oggetto da questo elenco per evidenziarlo inworld">
 		<column label="Nome dell&apos;oggetto" name="object_name"/>
 		<column label="Proprietario" name="owner_name"/>
diff --git a/indra/newview/skins/default/xui/it/floater_inventory.xml b/indra/newview/skins/default/xui/it/floater_inventory.xml
index f21f2134976..e3325463d6c 100644
--- a/indra/newview/skins/default/xui/it/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/it/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="Inventario">
+<floater name="Inventory" title="INVENTARIO">
 	<search_editor label="Scrivi qui per cercare" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Tutti gli elementi" name="All Items"/>
diff --git a/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml
index e32f57e9f4e..8860fd82076 100644
--- a/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="item properties" title="Proprietà dell&apos;oggetto nell&apos;inventario">
+<floater name="item properties" title="PROPRIETÀ DELL&apos;OGGETTO NELL&apos;INVENTARIO">
 	<text name="LabelItemNameTitle">
 		Nome:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml
index c2c05b4023d..b5a17b2fc17 100644
--- a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory Finder" title="Inventario_Cose_recenti" width="165">
+<floater name="Inventory Finder" title="INVENTARIO_COSE_RECENTI" width="165">
 	<check_box label="Animazioni" name="check_animation"/>
 	<check_box label="Biglietti da visita" name="check_calling_card"/>
 	<check_box label="Abiti" name="check_clothing"/>
diff --git a/indra/newview/skins/default/xui/it/floater_joystick.xml b/indra/newview/skins/default/xui/it/floater_joystick.xml
index b7b76639107..d74ff9bfb49 100644
--- a/indra/newview/skins/default/xui/it/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/it/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Configurazione Joystick">
+<floater name="Joystick" title="CONFIGURAZIONE JOYSTICK">
 	<check_box name="enable_joystick" label="Abilita Joystick:"/>
 	<text left="120" name="joystick_type" width="380"/>
 	<spinner label="Mapping: asse X" name="JoystickAxis1" label_width="140" width="180" left="12"/>
diff --git a/indra/newview/skins/default/xui/it/floater_lagmeter.xml b/indra/newview/skins/default/xui/it/floater_lagmeter.xml
index af70ad9d310..5ed748da69e 100644
--- a/indra/newview/skins/default/xui/it/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/it/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="Misuratore del lag">
+<floater name="floater_lagmeter" title="MISURATORE DEL LAG">
 	<button label="" label_selected="" name="client_lagmeter" tool_tip="Stato del lag del programma in locale"/>
 	<text left="30" name="client_lag_cause" right="-10" />
 	<text left="30" name="network_lag_cause" right="-10" />
diff --git a/indra/newview/skins/default/xui/it/floater_land_holdings.xml b/indra/newview/skins/default/xui/it/floater_land_holdings.xml
index 85661c28d72..8a6689f6afc 100644
--- a/indra/newview/skins/default/xui/it/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/it/floater_land_holdings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Il mio terreno">
+<floater name="land holdings floater" title="IL MIO TERRENO">
 	<scroll_list name="parcel list">
 		<column label="Nome del terreno" name="name"/>
 		<column label="Regione" name="location"/>
diff --git a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
index bb1f6116cf9..bd50ad3df7e 100644
--- a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="Script: Nuovo script">
+<floater name="script ed float" title="SCRIPT: NUOVO SCRIPT">
 	<button label="Ripristina" label_selected="Ripristina" name="Reset"/>
 	<check_box label="In esecuzione" name="running" left="4"/>
 	<check_box label="Mono" name="mono" left="106"/>
diff --git a/indra/newview/skins/default/xui/it/floater_lsl_guide.xml b/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
index ec62dd087d2..4241a32ec1b 100644
--- a/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="LSL Wiki">
+<floater name="script ed float" title="LSL WIKI">
 	<check_box label="Segui il cursore" name="lock_check"/>
 	<combo_box label="Blocca" name="history_combo" left_delta="120" width="70"/>
 	<button label="Indietro" name="back_btn" left_delta="75"/>
diff --git a/indra/newview/skins/default/xui/it/floater_media_browser.xml b/indra/newview/skins/default/xui/it/floater_media_browser.xml
index 4d3462b3484..7a5f9c9fcbc 100644
--- a/indra/newview/skins/default/xui/it/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/it/floater_media_browser.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Browser multimediale">
+<floater name="floater_about" title="BROWSER MULTIMEDIALE">
 	<layout_stack name="stack1">
 		<layout_panel name="nav_controls">
 			<button label="Indietro" name="back" width="75"/>
diff --git a/indra/newview/skins/default/xui/it/floater_mem_leaking.xml b/indra/newview/skins/default/xui/it/floater_mem_leaking.xml
index 4bd0e6ae6b7..d1809531574 100644
--- a/indra/newview/skins/default/xui/it/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/it/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="MemLeak" title="Simulazione di perdità di memoria">
+<floater name="MemLeak" title="SIMULAZIONE DI PERDITÀ DI MEMORIA">
 	<spinner label="Perdità di velocità (bytes per frame):" name="leak_speed"/>
 	<spinner label="Memoria Persa Max (MB):" name="max_leak"/>
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/it/floater_mute_object.xml b/indra/newview/skins/default/xui/it/floater_mute_object.xml
index 6bacdcab416..a72bfe96815 100644
--- a/indra/newview/skins/default/xui/it/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/it/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="mute by name" title="Ignora l&apos;oggetto dal nome">
+<floater name="mute by name" title="IGNORA L&apos;OGGETTO DAL NOME">
 	<text name="message">
 		Ignora per nome ha effetti sull&apos;oggetto in chat e IM, non
 nei suoni. Devi scrivere esattamente il nome dell&apos;oggetto.
diff --git a/indra/newview/skins/default/xui/it/floater_my_friends.xml b/indra/newview/skins/default/xui/it/floater_my_friends.xml
index a77b8aff80f..faeba0a6d9a 100644
--- a/indra/newview/skins/default/xui/it/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/it/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="Contatti">
+<floater name="floater_my_friends" title="CONTATTI">
 	<tab_container name="friends_and_groups">
 		<panel label="Amici" name="friends_panel"/>
 		<panel label="Gruppi" name="groups_panel"/>
diff --git a/indra/newview/skins/default/xui/it/floater_openobject.xml b/indra/newview/skins/default/xui/it/floater_openobject.xml
index d04a6f36327..0c2029e18e4 100644
--- a/indra/newview/skins/default/xui/it/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/it/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="objectcontents" title="Contenuto dell&apos;oggetto">
+<floater name="objectcontents" title="CONTENUTO DELL&apos;OGGETTO">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml b/indra/newview/skins/default/xui/it/floater_perm_prefs.xml
index 8037481f37e..46de31455bb 100644
--- a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/it/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Permessi di base di importazione">
+<floater name="perm prefs" title="PERMESSI DI BASE DI IMPORTAZIONE">
 	<panel label="Permessi" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Condividi con il gruppo" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/it/floater_post_process.xml b/indra/newview/skins/default/xui/it/floater_post_process.xml
index 226970041b2..3aa8b291017 100644
--- a/indra/newview/skins/default/xui/it/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/it/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Post-Process Floater" title="Impostazioni di post-produzione">
+<floater name="Post-Process Floater" title="IMPOSTAZIONI DI POST-PRODUZIONE">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Filtro Colore" name="wmiColorFilterPanel">
 			<check_box label="Abilita" name="wmiColorFilterToggle"/>
diff --git a/indra/newview/skins/default/xui/it/floater_postcard.xml b/indra/newview/skins/default/xui/it/floater_postcard.xml
index 5132771acc8..5ea3b634d44 100644
--- a/indra/newview/skins/default/xui/it/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/it/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="Invia la fotografia via email">
+<floater name="Postcard" title="INVIA LA FOTOGRAFIA VIA EMAIL">
 	<text name="to_label" width="135">
 		Email del destinatario:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_preferences.xml b/indra/newview/skins/default/xui/it/floater_preferences.xml
index 6277300bee5..172449554d3 100644
--- a/indra/newview/skins/default/xui/it/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/it/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Preferences" title="Preferenze" min_width="350" width="646">
+<floater name="Preferences" title="PREFERENZE" min_width="350" width="646">
 	<button label="OK" label_selected="OK" name="OK"/>
 	<button label="Annulla" label_selected="Annulla" name="Cancel"/>
 	<button label="Applica" label_selected="Applica" name="Apply"/>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_classified.xml b/indra/newview/skins/default/xui/it/floater_preview_classified.xml
index f78c70b1fe0..5819bd37a53 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_classified.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="Informazione Riservata"/>
+<floater name="classified_preview" title="INFORMAZIONE RISERVATA"/>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_event.xml b/indra/newview/skins/default/xui/it/floater_preview_event.xml
index 7cc99a9fea6..dca38c363f6 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_event.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="Informazione sull&apos;evento"/>
+<floater name="event_preview" title="INFORMAZIONE SULL&apos;EVENTO"/>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
index b0608c8546e..81a51223b05 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview notecard" title="Nota:">
+<floater name="preview notecard" title="NOTA:">
 	<button label="Salva" label_selected="Salva" name="Save"/>
 	<text name="desc txt">
 		Descrizione:
diff --git a/indra/newview/skins/default/xui/it/floater_region_info.xml b/indra/newview/skins/default/xui/it/floater_region_info.xml
index a802550bf4a..a715cf1f06c 100644
--- a/indra/newview/skins/default/xui/it/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/it/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="regioninfo" title="Regione/Proprietà"/>
+<floater name="regioninfo" title="REGIONE/PROPRIETÀ"/>
diff --git a/indra/newview/skins/default/xui/it/floater_report_abuse.xml b/indra/newview/skins/default/xui/it/floater_report_abuse.xml
index c67fc69db6d..4b969354fed 100644
--- a/indra/newview/skins/default/xui/it/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/it/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Denuncia di Abuso">
+<floater name="floater_report_abuse" title="DENUNCIA DI ABUSO">
 	<check_box label="Includi una fotografia" name="screen_check"/>
 	<text name="reporter_title">
 		Segnalato da:
diff --git a/indra/newview/skins/default/xui/it/floater_script_debug.xml b/indra/newview/skins/default/xui/it/floater_script_debug.xml
index 66e0af264f0..89bf80da5ed 100644
--- a/indra/newview/skins/default/xui/it/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/it/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <multi_floater name="script debug floater" title="Avvisi/Errori Script">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[All scripts]"/>
+		<floater label="Script" name="all_scripts" title="[ALL SCRIPTS]"/>
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/it/floater_script_preview.xml b/indra/newview/skins/default/xui/it/floater_script_preview.xml
index 20af60b2d49..934ffd53958 100644
--- a/indra/newview/skins/default/xui/it/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/it/floater_script_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview lsl text" title="Script: Script di rotazione">
+<floater name="preview lsl text" title="SCRIPT: SCRIPT DI ROTAZIONE">
 	<text name="desc txt">
 		Descrizione:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_script_queue.xml b/indra/newview/skins/default/xui/it/floater_script_queue.xml
index e5b38fea62f..37eb3e4bbfb 100644
--- a/indra/newview/skins/default/xui/it/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/it/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="queue" title="Progressione reset">
+<floater name="queue" title="PROGRESSIONE RESET">
 	<button label="Chiudi" label_selected="Chiudi" name="close"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/it/floater_script_search.xml b/indra/newview/skins/default/xui/it/floater_script_search.xml
index 470fb761351..e5f923f7a3f 100644
--- a/indra/newview/skins/default/xui/it/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/it/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script search" title="Cerca Script" width="320">
+<floater name="script search" title="CERCA SCRIPT" width="320">
 	<check_box label="Senza distinzione tra maiuscole e minuscole" name="case_text" left="65"/>
 	<button label="Cerca" label_selected="Cerca" name="search_btn" width="85"/>
 	<button label="Sostituisci" label_selected="Sostituisci" name="replace_btn" left="100" width="85"/>
diff --git a/indra/newview/skins/default/xui/it/floater_sell_land.xml b/indra/newview/skins/default/xui/it/floater_sell_land.xml
index 79dd2c5abf1..91712a706bb 100644
--- a/indra/newview/skins/default/xui/it/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sell land" title="Vendi terra">
+<floater name="sell land" title="VENDI TERRA">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/it/floater_settings_debug.xml b/indra/newview/skins/default/xui/it/floater_settings_debug.xml
index 6dd1b7978de..aec3c8aa9d4 100644
--- a/indra/newview/skins/default/xui/it/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/it/floater_settings_debug.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="settings_debug" title="Configurazioni per il debug">
+<floater name="settings_debug" title="CONFIGURAZIONI PER IL DEBUG">
 	<combo_box name="boolean_combo">
 		<combo_box.item name="TRUE" label="VERO"/>
 		<combo_box.item name="FALSE" label="FALSO"/>
diff --git a/indra/newview/skins/default/xui/it/floater_snapshot.xml b/indra/newview/skins/default/xui/it/floater_snapshot.xml
index 808158ff7e7..e226ce6ffe4 100644
--- a/indra/newview/skins/default/xui/it/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/it/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Anteprima della fotografia" width="247">
+<floater name="Snapshot" title="ANTEPRIMA DELLA FOTOGRAFIA" width="247">
 	<text name="type_label">
 		Destinazione della fotografia
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_sound_preview.xml b/indra/newview/skins/default/xui/it/floater_sound_preview.xml
index 86117329839..221e5e5b531 100644
--- a/indra/newview/skins/default/xui/it/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/it/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		Nome:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_statistics.xml b/indra/newview/skins/default/xui/it/floater_statistics.xml
index 6083949b8c1..00df1ff9949 100644
--- a/indra/newview/skins/default/xui/it/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/it/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statistiche"/>
+<floater name="stats floater" title="STATISTICHE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_telehub.xml b/indra/newview/skins/default/xui/it/floater_telehub.xml
index 0c5199dbc7f..de5c32574f4 100644
--- a/indra/newview/skins/default/xui/it/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/it/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="telehub" title="Telehub" min_height="310" height="310" width="286">
+<floater name="telehub" title="TELEHUB" min_height="310" height="310" width="286">
 	<text name="status_text_connected">
 		Telehub connesso all&apos;oggetto [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
index 65bc8ba41db..836f85b48c4 100644
--- a/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Preferiti: Immagine">
+<floater name="texture picker" title="PREFERITI: IMMAGINE">
 	<string name="choose_picture">
 		Clicca per scegliere l&apos;immagine
 	</string>
diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml
index 8fc1818ccc1..8e6f27e162f 100644
--- a/indra/newview/skins/default/xui/it/floater_tools.xml
+++ b/indra/newview/skins/default/xui/it/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Costruisci" width="288">
+<floater name="toolbox floater" title="" short_title="COSTRUISCI" width="288">
 	<button label="" label_selected="" name="button focus" tool_tip="Focus"/>
 	<button label="" label_selected="" name="button move" tool_tip="Muoviti"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Modifica"/>
diff --git a/indra/newview/skins/default/xui/it/floater_top_objects.xml b/indra/newview/skins/default/xui/it/floater_top_objects.xml
index 470e21769c8..9b406199e91 100644
--- a/indra/newview/skins/default/xui/it/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/it/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="In caricamento...">
+<floater name="top_objects" title="IN CARICAMENTO...">
 	<text name="title_text">
 		In caricamento...
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_water.xml b/indra/newview/skins/default/xui/it/floater_water.xml
index 33f91ed1c88..13db1d4589b 100644
--- a/indra/newview/skins/default/xui/it/floater_water.xml
+++ b/indra/newview/skins/default/xui/it/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="Editor avanzato dell&apos;acqua">
+<floater name="Water Floater" title="EDITOR AVANZATO DELL&apos;ACQUA">
 	<text name="KeyFramePresetsText" width="224">
 		Impostazioni predeterminate dell&apos;acqua:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_windlight_options.xml b/indra/newview/skins/default/xui/it/floater_windlight_options.xml
index 5076c777dc1..e86d656e392 100644
--- a/indra/newview/skins/default/xui/it/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="Editor avanzato del cielo">
+<floater name="WindLight floater" title="EDITOR AVANZATO DEL CIELO">
 	<text name="KeyFramePresetsText">
 		Cieli predefiniti:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_world_map.xml b/indra/newview/skins/default/xui/it/floater_world_map.xml
index e19335fe07f..6fb7b93bc71 100644
--- a/indra/newview/skins/default/xui/it/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/it/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Mappa">
+<floater name="worldmap" title="MAPPA">
 	<tab_container name="maptab">
 		<panel label="Oggetti" name="objects_mapview"/>
 		<panel label="Terreno" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml
index a9b3d81a3b1..834d49e169b 100644
--- a/indra/newview/skins/default/xui/ja/floater_about.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater name="floater_about" title="[APP_NAME]について">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
diff --git a/indra/newview/skins/default/xui/ja/floater_device_settings.xml b/indra/newview/skins/default/xui/ja/floater_device_settings.xml
index 5c258df9fd0..f189acf1011 100644
--- a/indra/newview/skins/default/xui/ja/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/ja/floater_device_settings.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_device_settings" title="ボイスチャット機器の設定" />
\ No newline at end of file
+<floater name="floater_device_settings" title="ボイスチャット機器の設定" />
diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml
index d4037487b70..22008099250 100644
--- a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Inventory Finder" title="inventory_recent_items">
+<floater name="Inventory Finder" title="INVENTORY_RECENT_ITEMS">
 	<check_box label="アニメーション" name="check_animation" />
 	<check_box label="コーリング・カード" name="check_calling_card" />
 	<check_box label="服" name="check_clothing" />
diff --git a/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml b/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml
index 55eba966dca..e535fc731f8 100644
--- a/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="LSL Wiki">
+<floater name="script ed float" title="LSL WIKI">
 	<check_box label="カーソルを追う" name="lock_check" />
 	<combo_box label="ロック" name="history_combo" />
 	<button label="戻る" name="back_btn" />
diff --git a/indra/newview/skins/default/xui/ja/floater_script_debug.xml b/indra/newview/skins/default/xui/ja/floater_script_debug.xml
index dd934e3592f..0ac7a988e04 100644
--- a/indra/newview/skins/default/xui/ja/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/ja/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <multi_floater name="script debug floater" title="スクリプト警告/エラー">
 	<tab_container name="Preview Tabs">
-		<floater label="スクリプト" name="all_scripts" title="[All scripts]" />
+		<floater label="スクリプト" name="all_scripts" title="[ALL SCRIPTS]" />
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_sound_preview.xml b/indra/newview/skins/default/xui/ja/floater_sound_preview.xml
index b2479143899..d5109fe539c 100644
--- a/indra/newview/skins/default/xui/ja/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		名前:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_about.xml b/indra/newview/skins/default/xui/nl/floater_about.xml
index 9ad947df662..0c57a22be1f 100644
--- a/indra/newview/skins/default/xui/nl/floater_about.xml
+++ b/indra/newview/skins/default/xui/nl/floater_about.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Over [APP_NAME]">
+<floater name="floater_about" title="OVER [APP_NAME]">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
 	<text_editor name="credits_editor">
diff --git a/indra/newview/skins/default/xui/nl/floater_about_land.xml b/indra/newview/skins/default/xui/nl/floater_about_land.xml
index 6aa80c00dbe..3a77de70d28 100644
--- a/indra/newview/skins/default/xui/nl/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/nl/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="Over land">
+<floater name="floaterland" title="OVER LAND">
 	<tab_container name="landtab">
 		<panel label="Algemeen" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/nl/floater_auction.xml b/indra/newview/skins/default/xui/nl/floater_auction.xml
index eb061e028d5..611024699be 100644
--- a/indra/newview/skins/default/xui/nl/floater_auction.xml
+++ b/indra/newview/skins/default/xui/nl/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="Start Linden Land Verkoop">
+<floater name="floater_auction" title="START LINDEN LAND VERKOOP">
 	<check_box label="Voeg geel selectie kader toe" name="fence_check"/>
 	<button label="Foto" label_selected="Foto" name="snapshot_btn"/>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_beacons.xml b/indra/newview/skins/default/xui/nl/floater_beacons.xml
index 84196ac14f6..ecc485e354b 100644
--- a/indra/newview/skins/default/xui/nl/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/nl/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Bakens">
+<floater name="beacons" title="BAKENS">
 	<panel name="beacons_panel">
 		<check_box label="Gescripte objecten met alleen Aanraken" name="touch_only"/>
 		<check_box label="Gescripte objecten" name="scripted"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml
index 7f35ec45a97..5374ffc26ab 100644
--- a/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Bulk wijzigen inhoud permissies">
+<floater name="floaterbulkperms" title="BULK WIJZIGEN INHOUD PERMISSIES">
 	<text name="applyto">
 		Inhoud Typen
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_bumps.xml b/indra/newview/skins/default/xui/nl/floater_bumps.xml
index 9dbfe405aa4..df9a99d62ef 100644
--- a/indra/newview/skins/default/xui/nl/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/nl/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_bumps" title="Botsingen, duwen &amp; slaan">
+<floater name="floater_bumps" title="BOTSINGEN, DUWEN &amp; SLAAN">
 	<string name="none_detected">
 		Geen gedetecteerd
 	</string>
diff --git a/indra/newview/skins/default/xui/nl/floater_buy_contents.xml b/indra/newview/skins/default/xui/nl/floater_buy_contents.xml
index df0614b3d2c..4c0ff7d04a0 100644
--- a/indra/newview/skins/default/xui/nl/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/nl/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_buy_contents" title="Koop inhoud">
+<floater name="floater_buy_contents" title="KOOP INHOUD">
 	<text name="contains_text">
 		[NAME] bevat:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_buy_currency.xml b/indra/newview/skins/default/xui/nl/floater_buy_currency.xml
index 9f740b86c84..b6fc743abe0 100644
--- a/indra/newview/skins/default/xui/nl/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/nl/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy currency" title="Koop valuta">
+<floater name="buy currency" title="KOOP VALUTA">
 	<text name="info_buying">
 		Valuta kopen
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_buy_land.xml b/indra/newview/skins/default/xui/nl/floater_buy_land.xml
index 1bb02cc7d06..04990e78dbc 100644
--- a/indra/newview/skins/default/xui/nl/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/nl/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Koop land">
+<floater name="buy land" title="KOOP LAND">
 	<text name="region_name_label">
 		Regio:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_buy_object.xml b/indra/newview/skins/default/xui/nl/floater_buy_object.xml
index c83f2008c61..5d2d9dd3d01 100644
--- a/indra/newview/skins/default/xui/nl/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/nl/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Koop een kopie van object">
+<floater name="contents" title="KOOP EEN KOPIE VAN OBJECT">
 	<text name="contents_text">
 		en zijn inhoud:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_choose_group.xml b/indra/newview/skins/default/xui/nl/floater_choose_group.xml
index 3f6ce44cfdc..8d54d62d2d0 100644
--- a/indra/newview/skins/default/xui/nl/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/nl/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="groups" title="Groepen">
+<floater name="groups" title="GROEPEN">
 	<text name="groupdesc">
 		Kies een groep:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_color_picker.xml b/indra/newview/skins/default/xui/nl/floater_color_picker.xml
index a357e874f7c..9b61af07102 100644
--- a/indra/newview/skins/default/xui/nl/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/nl/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="ColorPicker" title="Kleurkiezer">
+<floater name="ColorPicker" title="KLEURKIEZER">
 	<text name="r_val_text">
 		Rood:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_customize.xml b/indra/newview/skins/default/xui/nl/floater_customize.xml
index 99a109ab782..4de26347e13 100644
--- a/indra/newview/skins/default/xui/nl/floater_customize.xml
+++ b/indra/newview/skins/default/xui/nl/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Uiterlijk" width="551">
+<floater name="floater customize" title="UITERLIJK" width="551">
 	<tab_container name="customize tab container" tab_min_width="120" width="549">
 		<placeholder label="Lichaamsdelen" name="body_parts_placeholder"/>
 		<panel label="Postuur" name="Shape" left="124" width="389">
diff --git a/indra/newview/skins/default/xui/nl/floater_env_settings.xml b/indra/newview/skins/default/xui/nl/floater_env_settings.xml
index d66c0b22056..3c207040d22 100644
--- a/indra/newview/skins/default/xui/nl/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/nl/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="Omgeving editor">
+<floater name="Environment Editor Floater" title="OMGEVING EDITOR">
 	<text bottom="-42" name="EnvTimeText">
 		Tijd van de 
 dag
diff --git a/indra/newview/skins/default/xui/nl/floater_font_test.xml b/indra/newview/skins/default/xui/nl/floater_font_test.xml
index 8e8b07ee1a5..31e53e7fba9 100644
--- a/indra/newview/skins/default/xui/nl/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/nl/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Lettertypetest">
+<floater name="contents" title="LETTERTYPETEST">
 	<text name="linea">
 		Overschrijf test, zou hier moeten verschijnen als Times (vanuit default/xui/en-us).
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_gesture.xml b/indra/newview/skins/default/xui/nl/floater_gesture.xml
index d38972d5fe0..4fa994c69ec 100644
--- a/indra/newview/skins/default/xui/nl/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/nl/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="gestures" title="Actieve gebaren">
+<floater name="gestures" title="ACTIEVE GEBAREN">
 	<text name="help_label">
 		Dubbelklik een gebaar om animaties en geluiden af te spelen
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_hud.xml b/indra/newview/skins/default/xui/nl/floater_hud.xml
index 9da732ff2f3..8ef7de1b02b 100644
--- a/indra/newview/skins/default/xui/nl/floater_hud.xml
+++ b/indra/newview/skins/default/xui/nl/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_hud" title="Handleiding"/>
+<floater name="floater_hud" title="HANDLEIDING"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_inspect.xml b/indra/newview/skins/default/xui/nl/floater_inspect.xml
index 96c9d59f905..6a0885b57f5 100644
--- a/indra/newview/skins/default/xui/nl/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/nl/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Objecten inspecteren">
+<floater name="inspect" title="OBJECTEN INSPECTEREN">
 	<scroll_list name="object_list" tool_tip="Selecteer een object van deze lijst om het in-wereld te markeren">
 		<column label="Objectnaam" name="object_name"/>
 		<column label="Eigenaar" name="owner_name"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_inventory.xml b/indra/newview/skins/default/xui/nl/floater_inventory.xml
index 272fa3c899d..a69039d811e 100644
--- a/indra/newview/skins/default/xui/nl/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/nl/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="Inventaris">
+<floater name="Inventory" title="INVENTARIS">
 	<search_editor label="Typ hier om te zoeken" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Alle items" name="All Items"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_joystick.xml b/indra/newview/skins/default/xui/nl/floater_joystick.xml
index ccc39034f5e..505e3cd719d 100644
--- a/indra/newview/skins/default/xui/nl/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/nl/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Joystick configuratie">
+<floater name="Joystick" title="JOYSTICK CONFIGURATIE">
 	<check_box name="enable_joystick" width="80" label="Joystick inschakelen:"/>
 	<text left="146" name="joystick_type" width="360"/>
 	<spinner label="X-as mapping" name="JoystickAxis1"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_lagmeter.xml b/indra/newview/skins/default/xui/nl/floater_lagmeter.xml
index e8b1fb14bc4..e3943c2470f 100644
--- a/indra/newview/skins/default/xui/nl/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/nl/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="Lag meter">
+<floater name="floater_lagmeter" title="LAG METER">
 	<button label="" label_selected="" name="client_lagmeter" tool_tip="Client lag status"/>
 	<text name="client">
 		Client:
diff --git a/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml b/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml
index 556d151c8c7..27b3ff834ee 100644
--- a/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="LSL Wiki">
+<floater name="script ed float" title="LSL WIKI">
 	<check_box label="Volg cursor" name="lock_check"/>
 	<combo_box label="Vergrendelen" name="history_combo"/>
 	<button label="Terug" name="back_btn"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml b/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml
index 1c7e070e4a0..d0b25587b68 100644
--- a/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="MemLeak" title="Geheugenlek simulatie">
+<floater name="MemLeak" title="GEHEUGENLEK SIMULATIE">
 	<spinner label="Leksnelheid (bytes per frame):" name="leak_speed"/>
 	<spinner label="Max gelekt geheugen (MB):" name="max_leak"/>
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/nl/floater_mute_object.xml b/indra/newview/skins/default/xui/nl/floater_mute_object.xml
index ca3b34c3a2e..7a34be1bd7c 100644
--- a/indra/newview/skins/default/xui/nl/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/nl/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="mute by name" title="Negeer object op naam">
+<floater name="mute by name" title="NEGEER OBJECT OP NAAM">
 	<text name="message" bottom_delta="-40">
 		Negeer op naam heeft alleen invloed op object chat
 en IM, niet op geluiden. U dient de naam van het object 
diff --git a/indra/newview/skins/default/xui/nl/floater_my_friends.xml b/indra/newview/skins/default/xui/nl/floater_my_friends.xml
index ed81e6baf9a..8d709d3c004 100644
--- a/indra/newview/skins/default/xui/nl/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/nl/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="Contacten">
+<floater name="floater_my_friends" title="CONTACTEN">
 	<tab_container name="friends_and_groups">
 		<panel label="Vrienden" name="friends_panel"/>
 		<panel label="Groepen" name="groups_panel"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_openobject.xml b/indra/newview/skins/default/xui/nl/floater_openobject.xml
index 10b502be1cb..832c63403d9 100644
--- a/indra/newview/skins/default/xui/nl/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/nl/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="objectcontents" title="Object inhoud">
+<floater name="objectcontents" title="OBJECT INHOUD">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml b/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml
index c1c94922861..f946c42678c 100644
--- a/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Standaard upload Permissies">
+<floater name="perm prefs" title="STANDAARD UPLOAD PERMISSIES">
 	<panel label="Permissies" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Delen met groep" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_post_process.xml b/indra/newview/skins/default/xui/nl/floater_post_process.xml
index 45fc211aeb4..e627f81a70a 100644
--- a/indra/newview/skins/default/xui/nl/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/nl/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Post-Process Floater" title="Nabewerkinginstellingen">
+<floater name="Post-Process Floater" title="NABEWERKINGINSTELLINGEN">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Kleurfilter" name="wmiColorFilterPanel">
 			<check_box label="Inschakelen" name="wmiColorFilterToggle"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_postcard.xml b/indra/newview/skins/default/xui/nl/floater_postcard.xml
index a6d10f2244a..c2d092fdd46 100644
--- a/indra/newview/skins/default/xui/nl/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/nl/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="Email foto">
+<floater name="Postcard" title="EMAIL FOTO">
 	<text name="to_label">
 		Ontvanger e-mail:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_preferences.xml b/indra/newview/skins/default/xui/nl/floater_preferences.xml
index 25984ee65a2..6fc8005fd24 100644
--- a/indra/newview/skins/default/xui/nl/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/nl/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Preferences" title="Voorkeuren">
+<floater name="Preferences" title="VOORKEUREN">
 	<button label="OK" label_selected="OK" name="OK"/>
 	<button label="Annuleren" label_selected="Annuleren" name="Cancel"/>
 	<button label="Toepassen" label_selected="Toepassen" name="Apply"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_region_info.xml b/indra/newview/skins/default/xui/nl/floater_region_info.xml
index 3d4386bc163..0a98da3b4e0 100644
--- a/indra/newview/skins/default/xui/nl/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/nl/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="regioninfo" title="Regio/estate"/>
+<floater name="regioninfo" title="REGIO/ESTATE"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_report_abuse.xml b/indra/newview/skins/default/xui/nl/floater_report_abuse.xml
index 012198d7b6f..19b11ede0a9 100644
--- a/indra/newview/skins/default/xui/nl/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/nl/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Misbruik rapporteren">
+<floater name="floater_report_abuse" title="MISBRUIK RAPPORTEREN">
 	<check_box label="Voeg schermafbeelding toe" name="screen_check"/>
 	<text name="reporter_title" width="110">
 		Rapporteur:
diff --git a/indra/newview/skins/default/xui/nl/floater_script_debug.xml b/indra/newview/skins/default/xui/nl/floater_script_debug.xml
index df9531473e4..15e57f30d66 100644
--- a/indra/newview/skins/default/xui/nl/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/nl/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <multi_floater name="script debug floater" title="Script waarschuwing/fout">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[All scripts]"/>
+		<floater label="Script" name="all_scripts" title="[ALL SCRIPTS]"/>
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_script_queue.xml b/indra/newview/skins/default/xui/nl/floater_script_queue.xml
index 38c227e53c2..f79ad8faf3c 100644
--- a/indra/newview/skins/default/xui/nl/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/nl/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="queue" title="Voortgang opnieuw instellen">
+<floater name="queue" title="VOORTGANG OPNIEUW INSTELLEN">
 	<button label="Sluiten" label_selected="Sluiten" name="close"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_sell_land.xml b/indra/newview/skins/default/xui/nl/floater_sell_land.xml
index 3981f3ccc23..468a383cfc0 100644
--- a/indra/newview/skins/default/xui/nl/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/nl/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sell land" title="Verkoop land">
+<floater name="sell land" title="VERKOOP LAND">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/nl/floater_snapshot.xml b/indra/newview/skins/default/xui/nl/floater_snapshot.xml
index c7174d42f3c..251f3690da0 100644
--- a/indra/newview/skins/default/xui/nl/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/nl/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Fotovoorbeeld">
+<floater name="Snapshot" title="FOTOVOORBEELD">
 	<text name="type_label">
 		Fotobestemming
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_statistics.xml b/indra/newview/skins/default/xui/nl/floater_statistics.xml
index b899c32a56c..7684a73663b 100644
--- a/indra/newview/skins/default/xui/nl/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/nl/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statistieken"/>
+<floater name="stats floater" title="STATISTIEKEN"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_telehub.xml b/indra/newview/skins/default/xui/nl/floater_telehub.xml
index 8fe8e06c03a..7b745d967c9 100644
--- a/indra/newview/skins/default/xui/nl/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/nl/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="telehub" title="Telehub" width="292">
+<floater name="telehub" title="TELEHUB" width="292">
 	<text name="status_text_connected">
 		Telehub verbonden met object [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml
index 13a68747c6f..c8caa8caf49 100644
--- a/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Kies: Textuur">
+<floater name="texture picker" title="KIES: TEXTUUR">
 	<string name="choose_picture">
 		Klik om een afbeelding te kiezen
 	</string>
diff --git a/indra/newview/skins/default/xui/nl/floater_tools.xml b/indra/newview/skins/default/xui/nl/floater_tools.xml
index cb0c1ad89a9..f79d3dbd6b9 100644
--- a/indra/newview/skins/default/xui/nl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/nl/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Bouwen" width="288">
+<floater name="toolbox floater" title="" short_title="BOUWEN" width="288">
 	<button label="" label_selected="" name="button focus" tool_tip="Focus"/>
 	<button label="" label_selected="" name="button move" tool_tip="Verplaats"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Bewerk"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_top_objects.xml b/indra/newview/skins/default/xui/nl/floater_top_objects.xml
index cc252352ebc..2bbb701df8d 100644
--- a/indra/newview/skins/default/xui/nl/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/nl/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="laden…">
+<floater name="top_objects" title="LADEN…">
 	<text name="title_text">
 		Laden…
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_water.xml b/indra/newview/skins/default/xui/nl/floater_water.xml
index 2238008fd80..1fb1ca241b9 100644
--- a/indra/newview/skins/default/xui/nl/floater_water.xml
+++ b/indra/newview/skins/default/xui/nl/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="Geavanceerde water editor">
+<floater name="Water Floater" title="GEAVANCEERDE WATER EDITOR">
 	<combo_box bottom="-50" height="18" left_delta="116" name="WaterPresetsCombo" width="150" />
 	<text name="KeyFramePresetsText">
 		Watervoorinstellingen
diff --git a/indra/newview/skins/default/xui/nl/floater_world_map.xml b/indra/newview/skins/default/xui/nl/floater_world_map.xml
index e1eebaf92f3..bc14f92126b 100644
--- a/indra/newview/skins/default/xui/nl/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/nl/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Wereldkaart">
+<floater name="worldmap" title="WERELDKAART">
 	<tab_container name="maptab">
 		<panel label="Objecten" name="objects_mapview"/>
 		<panel label="Terrein" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_about_land.xml b/indra/newview/skins/default/xui/pl/floater_about_land.xml
index 83d4b717a76..d456ea26b42 100755
--- a/indra/newview/skins/default/xui/pl/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pl/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="O Posiadłości">
+<floater name="floaterland" title="O POSIADŁOŚCI">
 	<tab_container name="landtab">
 		<panel label="Ogólne" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/pl/floater_auction.xml b/indra/newview/skins/default/xui/pl/floater_auction.xml
index 65a1bb85ea6..37e35ed1e96 100755
--- a/indra/newview/skins/default/xui/pl/floater_auction.xml
+++ b/indra/newview/skins/default/xui/pl/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_auction" title="Rozpocznij Sprzedaż Posiadłości">
+<floater name="floater_auction" title="ROZPOCZNIJ SPRZEDAŻ POSIADŁOŚCI">
 	<check_box label="Zawierając żółte ogrodzenie" name="fence_check" />
 	<button label="Zdjęce" label_selected="Zdjęce" name="snapshot_btn" />
 	<button label="OK" label_selected="OK" name="ok_btn" />
diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
index cf4dcb91bf7..8c09f7294ca 100755
--- a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Wybierz Rezydenta">
+<floater name="avatarpicker" title="WYBIERZ REZYDENTA">
 	<tab_container name="ResidentChooserTabs">
 		<panel label="Znajdź" name="SearchPanel">
 			<text name="InstructSearchResidentName">
diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml
index b27c90b8f2f..dce2330807f 100755
--- a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="avatar_texture_debug" title="Tekstury Awatara">
+<floater name="avatar_texture_debug" title="TEKSTURY AWATARA">
 	<text name="baked_label">
 		Tekstury Renderowane
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_beacons.xml b/indra/newview/skins/default/xui/pl/floater_beacons.xml
index fd12d135959..6e7013f2d74 100644
--- a/indra/newview/skins/default/xui/pl/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/pl/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Emitery">
+<floater name="beacons" title="EMITERY">
 	<panel name="beacons_panel">
 		<check_box label="Obiekty Dotykalne" name="touch_only"/>
 		<check_box label="Obiekty Skryptowane" name="scripted"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_build_options.xml b/indra/newview/skins/default/xui/pl/floater_build_options.xml
index 7cbc4106144..f538be218cf 100755
--- a/indra/newview/skins/default/xui/pl/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/pl/floater_build_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="build options floater" title="Opcje Siatki">
+<floater name="build options floater" title="OPCJE SIATKI">
 	<spinner label="Jednostka Siatki (metry)" name="GridResolution" />
 	<spinner label="Rozmiary Siatki (metry)" name="GridDrawSize" />
 	<check_box label="Udostępnij Podjednostkowe Dopasowywanie" name="GridSubUnit" />
diff --git a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
index a99acdb2385..f06615642ee 100644
--- a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Hurtowa zmiana praw zawartości">
+<floater name="floaterbulkperms" title="HURTOWA ZMIANA PRAW ZAWARTOÅšCI">
 	<text name="applyto">
 		Rodzaj Zawartości
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_bumps.xml b/indra/newview/skins/default/xui/pl/floater_bumps.xml
index 365268dbd67..10f9d73284f 100755
--- a/indra/newview/skins/default/xui/pl/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/pl/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_bumps" title="Zderzenia, Popchnięcia, Uderzenia">
+<floater name="floater_bumps" title="ZDERZENIA, POPCHNIĘCIA, UDERZENIA">
 	<string name="none_detected">
 		Brak
 	</string>
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_contents.xml b/indra/newview/skins/default/xui/pl/floater_buy_contents.xml
index 395bcb4ea9c..ebe1c9dfd89 100755
--- a/indra/newview/skins/default/xui/pl/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_buy_contents" title="Kup Zawartość">
+<floater name="floater_buy_contents" title="KUP ZAWARTOŚĆ">
 	<text name="contains_text">
 		[NAME] zawiera:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_currency.xml b/indra/newview/skins/default/xui/pl/floater_buy_currency.xml
index a5c0a2498ab..b0b8935433c 100755
--- a/indra/newview/skins/default/xui/pl/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="buy currency" title="Kup $L">
+<floater name="buy currency" title="KUP $L">
 	<text name="info_buying">
 		Kup L$:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_land.xml b/indra/newview/skins/default/xui/pl/floater_buy_land.xml
index ff371b38c08..648888828be 100755
--- a/indra/newview/skins/default/xui/pl/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Buy Land">
+<floater name="buy land" title="BUY LAND">
 	<text name="region_name_label">
 		Region:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_object.xml b/indra/newview/skins/default/xui/pl/floater_buy_object.xml
index b0868a46a24..bad79822286 100755
--- a/indra/newview/skins/default/xui/pl/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="contents" title="Kup kopiÄ™ obiektu">
+<floater name="contents" title="KUP KOPIĘ OBIEKTU">
 	<text name="contents_text">
 		i jej zawartość:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_choose_group.xml b/indra/newview/skins/default/xui/pl/floater_choose_group.xml
index 789c40e48c6..72b66170948 100755
--- a/indra/newview/skins/default/xui/pl/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/pl/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="groups" title="Grupy">
+<floater name="groups" title="GRUPY">
 	<text name="groupdesc">
 		Wybierz grupÄ™:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_color_picker.xml b/indra/newview/skins/default/xui/pl/floater_color_picker.xml
index d6ffe1837ab..904a2cc2704 100755
--- a/indra/newview/skins/default/xui/pl/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/pl/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="ColorPicker" title="Wybór Koloru">
+<floater name="ColorPicker" title="WYBÓR KOLORU">
 	<text name="r_val_text">
 		Czerwony:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_customize.xml b/indra/newview/skins/default/xui/pl/floater_customize.xml
index 64d9300621c..0c01d15faff 100755
--- a/indra/newview/skins/default/xui/pl/floater_customize.xml
+++ b/indra/newview/skins/default/xui/pl/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="WyglÄ…d">
+<floater name="floater customize" title="WYGLÄ„D">
 	<tab_container name="customize tab container">
 		<placeholder label="Części Ciała" name="body_parts_placeholder"/>
 		<panel label="Kształt" name="Shape">
diff --git a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
index ea8db99570f..6671bb853e4 100755
--- a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Day Cycle Floater" title="Edytor Cyklu Dnia">
+<floater name="Day Cycle Floater" title="EDYTOR CYKLU DNIA">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Cykl Dnia" name="Day Cycle">
 			<button label="?" name="WLDayCycleHelp" />
diff --git a/indra/newview/skins/default/xui/pl/floater_device_settings.xml b/indra/newview/skins/default/xui/pl/floater_device_settings.xml
index 0122aa819eb..e79478731d1 100755
--- a/indra/newview/skins/default/xui/pl/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/pl/floater_device_settings.xml
@@ -1,3 +1,3 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater name="floater_device_settings"
-     title="Ustawienia Urządzeń Komunikacji Głosowej" />
+     title="USTAWIENIA URZĄDZEŃ KOMUNIKACJI GŁOSOWEJ" />
diff --git a/indra/newview/skins/default/xui/pl/floater_env_settings.xml b/indra/newview/skins/default/xui/pl/floater_env_settings.xml
index 3e0809b193d..e197d94b271 100755
--- a/indra/newview/skins/default/xui/pl/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/pl/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Environment Editor Floater" title="Edytor Åšrodowiska">
+<floater name="Environment Editor Floater" title="EDYTOR ÅšRODOWISKA">
 	<text name="EnvTimeText">
 		Czas
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_font_test.xml b/indra/newview/skins/default/xui/pl/floater_font_test.xml
index 586d2690b3c..019cee3e1e5 100644
--- a/indra/newview/skins/default/xui/pl/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/pl/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Czcionka Tekstu">
+<floater name="contents" title="CZCIONKA TEKSTU">
 	<text name="linea">
 		OverrideTest, powinno wyświetlać się jako Times. (From default/xui/en-us)
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_gesture.xml b/indra/newview/skins/default/xui/pl/floater_gesture.xml
index a05408dfc5c..4685eb6afe6 100755
--- a/indra/newview/skins/default/xui/pl/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/pl/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="gestures" title="Aktywne Gesty">
+<floater name="gestures" title="AKTYWNE GESTY">
 	<text name="help_label">
 		Kliknij podwójnie by aktywować głos i animację gestu.
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_god_tools.xml b/indra/newview/skins/default/xui/pl/floater_god_tools.xml
index df821f3b6d0..a3ccffac033 100755
--- a/indra/newview/skins/default/xui/pl/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/pl/floater_god_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="godtools floater" title="Boskie Narzędzia">
+<floater name="godtools floater" title="BOSKIE NARZĘDZIA">
 	<tab_container name="GodTools Tabs">
 		<panel label="Grid" name="grid">
 			<button width="205" label="Usuń wszystkich użytkowników" label_selected="Usuń wszystkich użytkowników" name="Kick all users"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml
index f1e6e5ea9e2..39695a67b6c 100755
--- a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Hardware Settings Floater" title="Ustawienia Sprzętowe">
+<floater name="Hardware Settings Floater" title="USTAWIENIA SPRZĘTOWE">
 	<text name="Filtering:">
 		Filtrowanie:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_hud.xml b/indra/newview/skins/default/xui/pl/floater_hud.xml
index 916473f063d..ff2d702132d 100755
--- a/indra/newview/skins/default/xui/pl/floater_hud.xml
+++ b/indra/newview/skins/default/xui/pl/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_hud" title="Samouczek" />
+<floater name="floater_hud" title="SAMOUCZEK" />
diff --git a/indra/newview/skins/default/xui/pl/floater_inspect.xml b/indra/newview/skins/default/xui/pl/floater_inspect.xml
index 1efdced5278..c98e0541d82 100755
--- a/indra/newview/skins/default/xui/pl/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/pl/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="inspect" title="Inspekcja Obiektów">
+<floater name="inspect" title="INSPEKCJA OBIEKTÓW">
 	<scroll_list name="object_list" tool_tip="">
 		<column label="Nazwa" name="object_name" />
 		<column label="Właściciel" name="owner_name" />
diff --git a/indra/newview/skins/default/xui/pl/floater_inventory.xml b/indra/newview/skins/default/xui/pl/floater_inventory.xml
index 6df978de695..157be76c4d5 100755
--- a/indra/newview/skins/default/xui/pl/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/pl/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="Moja Szafa">
+<floater name="Inventory" title="MOJA SZAFA">
 	<search_editor label="Wyszukiwarka" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Wszystkie Obiekty" name="All Items"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml
index c32d1eeabfb..665172dd49a 100755
--- a/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="item properties" title="Właściwości Obiektów w Szafie">
+<floater name="item properties" title="WŁAŚCIWOŚCI OBIEKTÓW W SZAFIE">
 	<text name="LabelItemNameTitle">
 		Nazwa:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml
index 2224c026ef0..9204262304d 100755
--- a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Inventory Finder" title="Nowe Obiekty">
+<floater name="Inventory Finder" title="NOWE OBIEKTY">
 	<check_box label="Animacje" name="check_animation" />
 	<check_box label="Wizytówki" name="check_calling_card" />
 	<check_box label="Ubrania" name="check_clothing" />
diff --git a/indra/newview/skins/default/xui/pl/floater_joystick.xml b/indra/newview/skins/default/xui/pl/floater_joystick.xml
index 2ab92dfbb7b..22ac458b85d 100755
--- a/indra/newview/skins/default/xui/pl/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/pl/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" width="590" title="Konfiguracja Joysticka">
+<floater name="Joystick" width="590" title="KONFIGURACJA JOYSTICKA">
   <check_box name="enable_joystick" label="Aktywuj Joystick:"/>
 	<text left="130" name="joystick_type" width="360"/>
   <spinner label="Kalibracja Osi X" left="20" width="170" label_width="130"  name="JoystickAxis1"/>
@@ -116,4 +116,4 @@
   <string name="NoDevice">
 		brak podłącznego urządzenia
 	</string>
-</floater>
\ No newline at end of file
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml
index 949289594e0..69d563bdbab 100755
--- a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_lagmeter" title="Pomiar Lagów">
+<floater name="floater_lagmeter" title="POMIAR LAGÓW">
 	<button label="" label_selected="" name="client_lagmeter"
 	     tool_tip="Status lagów klienta" />
 	<text name="client">
diff --git a/indra/newview/skins/default/xui/pl/floater_land_holdings.xml b/indra/newview/skins/default/xui/pl/floater_land_holdings.xml
index 29268f0e976..13e6a8b16de 100755
--- a/indra/newview/skins/default/xui/pl/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/pl/floater_land_holdings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Moja posiadłość">
+<floater name="land holdings floater" title="MOJA POSIADŁOŚĆ">
 	<scroll_list name="parcel list">
 		<column label="Nazwa posiadłości" name="name"/>
 		<column label="Region" name="location"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml
index 94efd7afcb3..8120ff8c777 100755
--- a/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="Skrypt: Nowy Skrypt">
+<floater name="script ed float" title="SKRYPT: NOWY SKRYPT">
 	<button label="Zresetuj" label_selected="Zresetuj" name="Reset" />
 	<check_box label="WÅ‚Ä…cz" name="running" />
 	<check_box label="Mono" name="mono" />
diff --git a/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml
index a0fa00dffea..5601aa44649 100755
--- a/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="LSL Wiki">
+<floater name="script ed float" title="LSL WIKI">
 	<check_box label="Idź za kursorem" name="lock_check" />
 	<combo_box label="Zablokuj" name="history_combo" />
 	<button label="Wróć" name="back_btn" />
diff --git a/indra/newview/skins/default/xui/pl/floater_media_browser.xml b/indra/newview/skins/default/xui/pl/floater_media_browser.xml
index 2fb4287d900..74210c75e59 100755
--- a/indra/newview/skins/default/xui/pl/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/pl/floater_media_browser.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="Przeglądarka Mediów">
+<floater name="floater_about" title="PRZEGLĄDARKA MEDIÓW">
 	<layout_stack name="stack1">
 		<layout_panel name="nav_controls">
 			<button label="Wróć" name="back" />
diff --git a/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml b/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml
index fe977e96c5d..88a878af725 100755
--- a/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="Symulacja Przecieków Alokacji Pamięci">
+<floater name="MemLeak" title="SYMULACJA PRZECIEKÓW ALOKACJI PAMIĘCI">
 	<spinner label="Prędkość Przecieków (byty na klatkę):" name="leak_speed" />
 	<spinner label="Max Przecieki (MB):" name="max_leak" />
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/pl/floater_mute_object.xml b/indra/newview/skins/default/xui/pl/floater_mute_object.xml
index 310810db76a..dd30f749e30 100755
--- a/indra/newview/skins/default/xui/pl/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/pl/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="mute by name" title="Wycisz Obiekt Według Nazwy" height="160" min_height="160" >
+<floater name="mute by name" title="WYCISZ OBIEKT WEDŁUG NAZWY" height="160" min_height="160" >
 	<text name="message">
 		Wyciszenie obiektu jest skuteczne jedynie na czacie oraz w
 wiadomościach IM. Nie obejmuje natomiast dźwięków.
diff --git a/indra/newview/skins/default/xui/pl/floater_my_friends.xml b/indra/newview/skins/default/xui/pl/floater_my_friends.xml
index cc5f1f2a01b..0bcf6ba4d50 100755
--- a/indra/newview/skins/default/xui/pl/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/pl/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_my_friends" title="Kontakty">
+<floater name="floater_my_friends" title="KONTAKTY">
 	<tab_container name="friends_and_groups">
 		<panel label="Znajomi" name="friends_panel" />
 		<panel label="Grupy" name="groups_panel" />
diff --git a/indra/newview/skins/default/xui/pl/floater_openobject.xml b/indra/newview/skins/default/xui/pl/floater_openobject.xml
index 0470f4d6dcf..fbbed0f11df 100755
--- a/indra/newview/skins/default/xui/pl/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/pl/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="objectcontents" title="Zawartość Obiektu">
+<floater name="objectcontents" title="ZAWARTOŚĆ OBIEKTU">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml
index dd7cbe1f799..834552e2b00 100644
--- a/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Prawa Domyślne">
+<floater name="perm prefs" title="PRAWA DOMYÅšLNE">
 	<panel label="Prawa" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Udostępnij grupie" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_post_process.xml b/indra/newview/skins/default/xui/pl/floater_post_process.xml
index 0081d1d3a7e..6bd91f97b1b 100755
--- a/indra/newview/skins/default/xui/pl/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/pl/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Post-Process Floater" title="Ustawienia Przetwarzania Końcowego">
+<floater name="Post-Process Floater" title="USTAWIENIA PRZETWARZANIA KOŃCOWEGO">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Kolor Filtru" name="wmiColorFilterPanel">
 			<check_box label="Udostępnij" name="wmiColorFilterToggle" />
diff --git a/indra/newview/skins/default/xui/pl/floater_postcard.xml b/indra/newview/skins/default/xui/pl/floater_postcard.xml
index e5bdaf2ba99..8f4018924d0 100755
--- a/indra/newview/skins/default/xui/pl/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/pl/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="Wyślij Pocztówkę">
+<floater name="Postcard" title="WYŚLIJ POCZTÓWKĘ">
 	<text name="to_label">
 		Email Odbiorcy:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_preferences.xml b/indra/newview/skins/default/xui/pl/floater_preferences.xml
index 380738425ef..2be663283fb 100755
--- a/indra/newview/skins/default/xui/pl/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Preferences" title="Ustawienia">
+<floater name="Preferences" title="USTAWIENIA">
 	<button label="OK" label_selected="OK" name="OK" />
 	<button label="Anuluj" label_selected="Anuluj" name="Cancel" />
 	<button label="Zastosuj" label_selected="Zastosuj" name="Apply" />
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml b/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
index cc7d2761178..eae9ba2690f 100755
--- a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="Reklama" />
+<floater name="classified_preview" title="REKLAMA" />
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_event.xml b/indra/newview/skins/default/xui/pl/floater_preview_event.xml
index 75e17f6fa26..9fc0ff4da61 100755
--- a/indra/newview/skins/default/xui/pl/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_event.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="Informacje o Imprezie" />
+<floater name="event_preview" title="INFORMACJE O IMPREZIE" />
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml
index 0b3b9063c42..b9f80490ab0 100755
--- a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview notecard" title="Nota:">
+<floater name="preview notecard" title="NOTA:">
 	<button label="Zapisz" label_selected="Zapisz" name="Save" />
 	<text name="desc txt">
 		Opis:
diff --git a/indra/newview/skins/default/xui/pl/floater_region_info.xml b/indra/newview/skins/default/xui/pl/floater_region_info.xml
index 6e632fd9c31..ca3c1391db1 100755
--- a/indra/newview/skins/default/xui/pl/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/pl/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="regioninfo" title="Region/MajÄ…tek" />
+<floater name="regioninfo" title="REGION/MAJÄ„TEK" />
diff --git a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
index 853c669adef..c1efcffb1e3 100755
--- a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Raport o Nadużyciu">
+<floater name="floater_report_abuse" title="RAPORT O NADUŻYCIU">
 	<texture_picker label="" name="screenshot"/>
 	<check_box label="Załącz zdjęcie ekranu" name="screen_check"/>
 	<text name="reporter_title">
diff --git a/indra/newview/skins/default/xui/pl/floater_script_debug.xml b/indra/newview/skins/default/xui/pl/floater_script_debug.xml
index b41add82465..714a6002628 100755
--- a/indra/newview/skins/default/xui/pl/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/pl/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <multi_floater name="script debug floater" title="Ostrzeżenie/Błąd Skryptu">
 	<tab_container name="Preview Tabs">
-		<floater label="Skrypt" name="all_scripts" title="[All scripts]" />
+		<floater label="Skrypt" name="all_scripts" title="[ALL SCRIPTS]" />
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_script_preview.xml b/indra/newview/skins/default/xui/pl/floater_script_preview.xml
index ca3fde33e7c..e3e72e15a3d 100755
--- a/indra/newview/skins/default/xui/pl/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_script_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="Skrypt: Skrypt Obrotu">
+<floater name="preview lsl text" title="SKRYPT: SKRYPT OBROTU">
 	<text name="desc txt">
 		Opis:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_script_queue.xml b/indra/newview/skins/default/xui/pl/floater_script_queue.xml
index 70d4669a077..7655f5fcace 100755
--- a/indra/newview/skins/default/xui/pl/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/pl/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="queue" title="Zresetuj PracÄ™ w Toku">
+<floater name="queue" title="ZRESETUJ PRACĘ W TOKU">
 	<button label="Zamknij" label_selected="Zamknij" name="close" />
 </floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_script_search.xml b/indra/newview/skins/default/xui/pl/floater_script_search.xml
index 50a9de15005..255ab4264c0 100755
--- a/indra/newview/skins/default/xui/pl/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/pl/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script search" title="Szukaj Skryptu">
+<floater name="script search" title="SZUKAJ SKRYPTU">
 	<check_box label="CapsLoock Nieaktywny" name="case_text" />
 	<button label="Szukaj" label_selected="Szukaj" name="search_btn" />
 	<button label="Zamień" label_selected="Zamień" name="replace_btn" />
diff --git a/indra/newview/skins/default/xui/pl/floater_sell_land.xml b/indra/newview/skins/default/xui/pl/floater_sell_land.xml
index 579dcd6745d..a306ec2c346 100755
--- a/indra/newview/skins/default/xui/pl/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/pl/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="sell land" title="Sell Land">
+<floater name="sell land" title="SELL LAND">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
index 99fa444a1bc..f87e2edecc2 100755
--- a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="settings_debug" title="Ustawienia Usuwania Błędów">
+<floater name="settings_debug" title="USTAWIENIA USUWANIA BŁĘDÓW">
 	<combo_box name="boolean_combo">
 		<combo_box.item name="TRUE" label="PRAWDA" />
 		<combo_box.item name="FALSE" label="NIEPRAWDA" />
diff --git a/indra/newview/skins/default/xui/pl/floater_snapshot.xml b/indra/newview/skins/default/xui/pl/floater_snapshot.xml
index 4945cf64132..c807087170a 100755
--- a/indra/newview/skins/default/xui/pl/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/pl/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Wygląd Zdjęcia">
+<floater name="Snapshot" title="WYGLĄD ZDJĘCIA">
 	<text name="type_label">
 		Lokacja zapisu
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_sound_preview.xml b/indra/newview/skins/default/xui/pl/floater_sound_preview.xml
index 2461aebbcf1..0826508fd6c 100755
--- a/indra/newview/skins/default/xui/pl/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Sound Preview" title="dźwięk.wav">
+<floater name="Sound Preview" title="DŹWIĘK.WAV">
 	<text name="name_label">
 		Opis:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_statistics.xml b/indra/newview/skins/default/xui/pl/floater_statistics.xml
index 933801bbda2..b7025e484d5 100644
--- a/indra/newview/skins/default/xui/pl/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/pl/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statystyki"/>
+<floater name="stats floater" title="STATYSTYKI"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_telehub.xml b/indra/newview/skins/default/xui/pl/floater_telehub.xml
index 917ab95eccb..9f564452a92 100755
--- a/indra/newview/skins/default/xui/pl/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/pl/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="telehub" title="Obsługa Teleportera" min_height="300" height="300" >
+<floater name="telehub" title="OBSŁUGA TELEPORTERA" min_height="300" height="300" >
 	<text name="status_text_connected" width="250">
 		Teleporter połączony z obiektem [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml
index 6d4df12e4bb..48366e2b645 100755
--- a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Wybór Tekstury">
+<floater name="texture picker" title="WYBÓR TEKSTURY">
 	<string name="choose_picture">
 		Kliknij by wybrać obraz
 	</string>
diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml
index c9e7a7e9eb8..e898c283c58 100755
--- a/indra/newview/skins/default/xui/pl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pl/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Buduj">
+<floater name="toolbox floater" title="" short_title="BUDUJ">
 	<button label="" label_selected="" name="button focus" tool_tip="Zbliżenie"/>
 	<button label="" label_selected="" name="button move" tool_tip="Przesunięcie"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Edycja"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_top_objects.xml b/indra/newview/skins/default/xui/pl/floater_top_objects.xml
index 44d838035d1..e7299b0abb8 100755
--- a/indra/newview/skins/default/xui/pl/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/pl/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="Ładowanie...">
+<floater name="top_objects" title="ŁADOWANIE...">
 	<text name="title_text">
 		Ładowanie...
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_water.xml b/indra/newview/skins/default/xui/pl/floater_water.xml
index a22b5809dc1..7333633c1d7 100755
--- a/indra/newview/skins/default/xui/pl/floater_water.xml
+++ b/indra/newview/skins/default/xui/pl/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Water Floater" title="Zaawansowany Edytor Wody">
+<floater name="Water Floater" title="ZAAWANSOWANY EDYTOR WODY">
 	<text name="KeyFramePresetsText">
 		Ustawienia Wody:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
index 94c20c06f72..86ef9300da3 100755
--- a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="WindLight floater" title="Zaawansowany Edytor Nieba">
+<floater name="WindLight floater" title="ZAAWANSOWANY EDYTOR NIEBA">
 	<text name="KeyFramePresetsText">
 		Ustawienia Nieba:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_world_map.xml b/indra/newview/skins/default/xui/pl/floater_world_map.xml
index 65f1c8ae592..36e3b0651bf 100755
--- a/indra/newview/skins/default/xui/pl/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/pl/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Mapa Åšwiata">
+<floater name="worldmap" title="MAPA ÅšWIATA">
 	<tab_container name="maptab">
 		<panel label="Obiekty" name="objects_mapview"/>
 		<panel label="Teren" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_about.xml b/indra/newview/skins/default/xui/pt/floater_about.xml
index 12cc879cbc4..9c19b128937 100644
--- a/indra/newview/skins/default/xui/pt/floater_about.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Sobre o [APP_NAME]">
+<floater name="floater_about" title="SOBRE O [APP_NAME]">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
 	<text_editor name="credits_editor">
diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml
index 417d24608e4..19981cf48cc 100644
--- a/indra/newview/skins/default/xui/pt/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="Sobre o Terreno">
+<floater name="floaterland" title="SOBRE O TERRENO">
 	<tab_container name="landtab">
 		<panel label="Geral" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/pt/floater_auction.xml b/indra/newview/skins/default/xui/pt/floater_auction.xml
index 48e0b924006..34cd17d781b 100644
--- a/indra/newview/skins/default/xui/pt/floater_auction.xml
+++ b/indra/newview/skins/default/xui/pt/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="Iniciar a venda de terrenos da Linden">
+<floater name="floater_auction" title="INICIAR A VENDA DE TERRENOS DA LINDEN">
 	<check_box label="Incluir marcador de seleção amarelo" name="fence_check"/>
 	<button label="Foto" label_selected="Foto" name="snapshot_btn"/>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
index 4e1598c8faf..186ef30e1b4 100644
--- a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Escolha o Residente" min_width="285" width="285">
+<floater name="avatarpicker" title="ESCOLHA O RESIDENTE" min_width="285" width="285">
 	<tab_container name="ResidentChooserTabs" width="275">
 		<panel label="Buscar" name="SearchPanel">
 			<text name="InstructSearchResidentName">
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
index db0023d748b..04a78efb124 100644
--- a/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatar_texture_debug" title="Texturas do Avatar">
+<floater name="avatar_texture_debug" title="TEXTURAS DO AVATAR">
 	<text name="baked_label">
 		Texturas sobrepostas
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_beacons.xml b/indra/newview/skins/default/xui/pt/floater_beacons.xml
index edd1e080948..82f055745fb 100644
--- a/indra/newview/skins/default/xui/pt/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/pt/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Balizas">
+<floater name="beacons" title="BALIZAS">
 	<panel name="beacons_panel">
 		<check_box label="Objetos programados com toque apenas" name="touch_only"/>
 		<check_box label="Objetos programados" name="scripted"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_build_options.xml b/indra/newview/skins/default/xui/pt/floater_build_options.xml
index ebc9d0f0c8d..bce78fad217 100644
--- a/indra/newview/skins/default/xui/pt/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/pt/floater_build_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="build options floater" title="Opções de grade">
+<floater name="build options floater" title="OPÇÕES DE GRADE">
 	<spinner label="Uni. Grade (metros)" name="GridResolution" width="180" label_width="122"/>
 	<spinner label="Ext. da Grade (metros)" name="GridDrawSize" width="180" label_width="122"/>
 	<check_box label="Habilitar ajuste de sub-grade" name="GridSubUnit"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
index c064d24f962..7443e197214 100644
--- a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Mudança conjunta das permissões de conteúdo">
+<floater name="floaterbulkperms" title="MUDANÇA CONJUNTA DAS PERMISSÕES DE CONTEÚDO">
 	<text name="applyto">
 		Tipos de Conteúdo
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_bumps.xml b/indra/newview/skins/default/xui/pt/floater_bumps.xml
index 0bc25462759..1833cd4335b 100644
--- a/indra/newview/skins/default/xui/pt/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/pt/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_bumps" title="Colisões, impulsos e batidas">
+<floater name="floater_bumps" title="COLISÕES, IMPULSOS E BATIDAS">
 	<text name="none_detected">
 		Nada detectado
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
index 3e8713d59ef..322a07575a3 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_buy_contents" title="Comprar conteúdo">
+<floater name="floater_buy_contents" title="COMPRAR CONTEÚDO">
 	<text name="contains_text">
 		[NAME] contém:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
index 42ba2054757..ceeb070c4e4 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy currency" title="Comprar Dinheiro">
+<floater name="buy currency" title="COMPRAR DINHEIRO">
 	<text name="info_buying">
 		Comprando Dinheiro:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_land.xml b/indra/newview/skins/default/xui/pt/floater_buy_land.xml
index 2caf057283f..6e502ad6e56 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Comprar terra">
+<floater name="buy land" title="COMPRAR TERRA">
 	<text name="region_name_label">
 		Região:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_object.xml b/indra/newview/skins/default/xui/pt/floater_buy_object.xml
index b8e10854718..e9968ed8f81 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Comprar cópia do objeto">
+<floater name="contents" title="COMPRAR CÓPIA DO OBJETO">
 	<text name="contents_text">
 		e seus conteúdos:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_choose_group.xml b/indra/newview/skins/default/xui/pt/floater_choose_group.xml
index 449d5787160..ae395734e9f 100644
--- a/indra/newview/skins/default/xui/pt/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/pt/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="groups" title="Grupos">
+<floater name="groups" title="GRUPOS">
 	<text name="groupdesc">
 		Escolha um grupo:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_color_picker.xml b/indra/newview/skins/default/xui/pt/floater_color_picker.xml
index 76da972b5d8..6a4263f4ff3 100644
--- a/indra/newview/skins/default/xui/pt/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/pt/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="ColorPicker" title="Seletor de Cor">
+<floater name="ColorPicker" title="SELETOR DE COR">
 	<text name="r_val_text">
 		Vermelho:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_customize.xml b/indra/newview/skins/default/xui/pt/floater_customize.xml
index 4bced69664e..55946933e7c 100644
--- a/indra/newview/skins/default/xui/pt/floater_customize.xml
+++ b/indra/newview/skins/default/xui/pt/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Aparência" width="546">
+<floater name="floater customize" title="APARÊNCIA" width="546">
 	<tab_container name="customize tab container" tab_min_width="115" width="544">
 		<placeholder label="Partes de corpo" name="body_parts_placeholder"/>
 		<panel label="Forma" name="Shape">
diff --git a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
index f02cca9c254..42f34a3d827 100644
--- a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="Editor de ciclo de dia">
+<floater name="Day Cycle Floater" title="EDITOR DE CICLO DE DIA">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Ciclo do dia" name="Day Cycle">
 			<button label="?" name="WLDayCycleHelp"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_device_settings.xml b/indra/newview/skins/default/xui/pt/floater_device_settings.xml
index 9ce773116c4..fa4da834b87 100644
--- a/indra/newview/skins/default/xui/pt/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/pt/floater_device_settings.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="Ajustes do Dispositivo de Conversa por Voz"/>
+<floater name="floater_device_settings" title="AJUSTES DO DISPOSITIVO DE CONVERSA POR VOZ"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_env_settings.xml b/indra/newview/skins/default/xui/pt/floater_env_settings.xml
index d3ed760551b..4a43801b48f 100644
--- a/indra/newview/skins/default/xui/pt/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/pt/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="Editor do Ambiente">
+<floater name="Environment Editor Floater" title="EDITOR DO AMBIENTE">
 	<text name="EnvTimeText">
 		Hora do Dia
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_font_test.xml b/indra/newview/skins/default/xui/pt/floater_font_test.xml
index eb52d3341d9..c506cdb12d6 100644
--- a/indra/newview/skins/default/xui/pt/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/pt/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Teste de Fonte">
+<floater name="contents" title="TESTE DE FONTE">
 	<text name="linea">
 		OverrideTest, deveria aparecer aqui como Times. (De default/xui/en-us)
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_gesture.xml b/indra/newview/skins/default/xui/pt/floater_gesture.xml
index ac50f32dd14..b0bc42685d5 100644
--- a/indra/newview/skins/default/xui/pt/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/pt/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="gestures" title="Gestos Ativos">
+<floater name="gestures" title="GESTOS ATIVOS">
 	<text name="help_label">
 		Clicar duas vezes no gesto para executar animações e sons.
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_god_tools.xml b/indra/newview/skins/default/xui/pt/floater_god_tools.xml
index 9406658f62d..4b7b2eb34ee 100644
--- a/indra/newview/skins/default/xui/pt/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_god_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="godtools floater" title="Ferramentas de Deus">
+<floater name="godtools floater" title="FERRAMENTAS DE DEUS">
 	<tab_container name="GodTools Tabs">
 		<panel label="Grade" name="grid">
 			<button label="Desconectar todos os usuários" label_selected="Desconectar todos os usuários" name="Kick all users"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml
index 0f9c1fd4871..8921e6ea125 100644
--- a/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Hardware Settings Floater" title="Ajustes de Hardware">
+<floater name="Hardware Settings Floater" title="AJUSTES DE HARDWARE">
 	<text name="Filtering:">
 		Filtragem:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_hud.xml b/indra/newview/skins/default/xui/pt/floater_hud.xml
index d31bcedf05e..e458913452f 100644
--- a/indra/newview/skins/default/xui/pt/floater_hud.xml
+++ b/indra/newview/skins/default/xui/pt/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_hud" title="Tutorial"/>
+<floater name="floater_hud" title="TUTORIAL"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_inspect.xml b/indra/newview/skins/default/xui/pt/floater_inspect.xml
index f3c23f008e6..97c2c6eaeb8 100644
--- a/indra/newview/skins/default/xui/pt/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/pt/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Inspecionar Objeto" min_width="450">
+<floater name="inspect" title="INSPECIONAR OBJETO" min_width="450">
 	<scroll_list name="object_list" tool_tip="Selecione um objeto nesta lista para destacá-lo in-world">
 		<column label="Nome do Objeto" name="object_name"/>
 		<column label="Proprietário" name="owner_name"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory.xml b/indra/newview/skins/default/xui/pt/floater_inventory.xml
index 8a06fefe3c2..1c2a3a92339 100644
--- a/indra/newview/skins/default/xui/pt/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="Inventário">
+<floater name="Inventory" title="INVENTÁRIO">
 	<search_editor label="Escreva aqui para busca" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Todos os Itens" name="All Items"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml
index 69752253b6d..2a6b02f9c27 100644
--- a/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="item properties" title="Propriedades do Item de Inventário">
+<floater name="item properties" title="PROPRIEDADES DO ITEM DE INVENTÁRIO">
 	<text name="LabelItemNameTitle">
 		Nome:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
index 83df449ae6f..57cdd50dcca 100644
--- a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory Finder" title="itens_de_inventário_recentes" width="165">
+<floater name="Inventory Finder" title="ITENS_DE_INVENTÁRIO_RECENTES" width="165">
 	<check_box label="Animação" name="check_animation"/>
 	<check_box label="Cartões de chamadas" name="check_calling_card"/>
 	<check_box label="Roupas" name="check_clothing"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_joystick.xml b/indra/newview/skins/default/xui/pt/floater_joystick.xml
index ac7b7fd02a0..0793a0b161d 100644
--- a/indra/newview/skins/default/xui/pt/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/pt/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Configuração do Joystick">
+<floater name="Joystick" title="CONFIGURAÇÃO DO JOYSTICK">
 	<check_box name="enable_joystick" label="Habilitar Joystick:"/>
 	<text left="135" name="joystick_type" width="360"/>
 	<spinner label="Mapeamento: eixo X" name="JoystickAxis1" label_width="124" width="164"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
index 6657641992b..27286334386 100644
--- a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="Medidor de Atraso">
+<floater name="floater_lagmeter" title="MEDIDOR DE ATRASO">
 	<button label="" label_selected="" name="client_lagmeter" tool_tip="Status de atraso no Cliente"/>
 	<text left="30" name="client_lag_cause" right="-10" />
 	<text left="30" name="network_lag_cause" right="-10" />
diff --git a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
index 4734d665efb..d8588e2f05c 100644
--- a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Meu terreno">
+<floater name="land holdings floater" title="MEU TERRENO">
 	<scroll_list name="parcel list">
 		<column label="Nome do Lote" name="name"/>
 		<column label="Região" name="location"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
index d2654de5898..c0b726c476b 100644
--- a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="Script: Novo Script">
+<floater name="script ed float" title="SCRIPT: NOVO SCRIPT">
 	<button label="Resetar" label_selected="Resetar" name="Reset"/>
 	<check_box label="Correndo" name="running"/>
 	<check_box label="Mono" name="mono" left="86"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
index 4f60ef23a61..49a9e7fcf5d 100644
--- a/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="LSL Wiki">
+<floater name="script ed float" title="LSL WIKI">
 	<check_box label="Seguir o Cursor" name="lock_check" />
 	<combo_box label="Bloquear" name="history_combo"  left_delta="120" width="70"/>
 	<button label="Anterior" name="back_btn"  left_delta="75"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_media_browser.xml b/indra/newview/skins/default/xui/pt/floater_media_browser.xml
index cfaec5b410c..3437dfcdba3 100644
--- a/indra/newview/skins/default/xui/pt/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/pt/floater_media_browser.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater min_width="477" name="floater_about" title="Navegador de Mídia" width="570">
+<floater min_width="477" name="floater_about" title="NAVEGADOR DE MÍDIA" width="570">
 	<layout_stack name="stack1" width="550">
 		<layout_panel name="nav_controls">
 			<button label="Para trás" name="back" width="75"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml b/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml
index 374592f0e2a..4f93eb90e56 100644
--- a/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="MemLeak" title="Simulação de Perda de Memória">
+<floater name="MemLeak" title="SIMULAÇÃO DE PERDA DE MEMÓRIA">
 	<spinner label="Velocidade da Perda (bytes por quadro):" name="leak_speed"/>
 	<spinner label="Máximo de Memória Perdida (MB):" name="max_leak"/>
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/pt/floater_mute_object.xml b/indra/newview/skins/default/xui/pt/floater_mute_object.xml
index 7ec0051a7d5..cc669951c3f 100644
--- a/indra/newview/skins/default/xui/pt/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/pt/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="mute by name" title="Silenciar objeto pelo nome">
+<floater name="mute by name" title="SILENCIAR OBJETO PELO NOME">
 	<text name="message">
 		Silenciar pelo nome afeta apenas conversa de objeto e MI,
 não sons. Você deve digitar o nome exato do objeto.
diff --git a/indra/newview/skins/default/xui/pt/floater_my_friends.xml b/indra/newview/skins/default/xui/pt/floater_my_friends.xml
index a78b255f8ab..68f2a19998d 100644
--- a/indra/newview/skins/default/xui/pt/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/pt/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="Contatos">
+<floater name="floater_my_friends" title="CONTATOS">
 	<tab_container name="friends_and_groups">
 		<panel label="Amigos" name="friends_panel"/>
 		<panel label="Grupos" name="groups_panel"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_openobject.xml b/indra/newview/skins/default/xui/pt/floater_openobject.xml
index d3b72b4b18a..0dc2852bac3 100644
--- a/indra/newview/skins/default/xui/pt/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/pt/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="objectcontents" title="Conteúdo do objeto">
+<floater name="objectcontents" title="CONTEÚDO DO OBJETO">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml
index 9bb7f04256f..33a0d6a456b 100644
--- a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Permissões Padrão de Upload">
+<floater name="perm prefs" title="PERMISSÕES PADRÃO DE UPLOAD">
 	<panel label="Permissões" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Compartilhar com o grupo" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_post_process.xml b/indra/newview/skins/default/xui/pt/floater_post_process.xml
index 8f5f5db7430..d4f2e96539a 100644
--- a/indra/newview/skins/default/xui/pt/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/pt/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Post-Process Floater" title="Ajustes de Pós-processamento">
+<floater name="Post-Process Floater" title="AJUSTES DE PÓS-PROCESSAMENTO">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Filtro de Cor" name="wmiColorFilterPanel">
 			<check_box label="Habilitar" name="wmiColorFilterToggle"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_postcard.xml b/indra/newview/skins/default/xui/pt/floater_postcard.xml
index 62fd050ea47..cf63726df2a 100644
--- a/indra/newview/skins/default/xui/pt/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/pt/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="Foto por email">
+<floater name="Postcard" title="FOTO POR EMAIL">
 	<text name="to_label" width="135">
 		Email do Destinatário:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_preferences.xml b/indra/newview/skins/default/xui/pt/floater_preferences.xml
index 0e9ef768b5a..d2c3c791601 100644
--- a/indra/newview/skins/default/xui/pt/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Preferences" title="Preferências" min_width="332" width="628">
+<floater name="Preferences" title="PREFERÊNCIAS" min_width="332" width="628">
 	<button label="OK" label_selected="OK" name="OK"/>
 	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
 	<button label="Aplicar" label_selected="Aplicar" name="Apply"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
index 4c583c28fb1..0e8814b9f8a 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="Informação do Anúncio Classificado"/>
+<floater name="classified_preview" title="INFORMAÇÃO DO ANÚNCIO CLASSIFICADO"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_event.xml b/indra/newview/skins/default/xui/pt/floater_preview_event.xml
index 3c8ebcf95a9..c03feacf0cf 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_event.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="Informação do Evento"/>
+<floater name="event_preview" title="INFORMAÇÃO DO EVENTO"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
index e0a133d8ab6..6f8944942a1 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview notecard" title="Nota:">
+<floater name="preview notecard" title="NOTA:">
 	<button label="Salvar" label_selected="Salvar" name="Save"/>
 	<text name="desc txt">
 		Descrição:
diff --git a/indra/newview/skins/default/xui/pt/floater_region_info.xml b/indra/newview/skins/default/xui/pt/floater_region_info.xml
index fe228ab405f..cc5e0d59d45 100644
--- a/indra/newview/skins/default/xui/pt/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/pt/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="regioninfo" title="Região/Propriedade"/>
+<floater name="regioninfo" title="REGIÃO/PROPRIEDADE"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
index 51d7ef8190b..0d226a9502f 100644
--- a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Reportar abuso">
+<floater name="floater_report_abuse" title="REPORTAR ABUSO">
 	<check_box label="Incluir cópia da tela" name="screen_check"/>
 	<text name="reporter_title">
 		Denunciador:
diff --git a/indra/newview/skins/default/xui/pt/floater_script_debug.xml b/indra/newview/skins/default/xui/pt/floater_script_debug.xml
index d7a9bc6f879..6d1d981ca7b 100644
--- a/indra/newview/skins/default/xui/pt/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/pt/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <multi_floater name="script debug floater" title="Aviso de script/erro">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[All scripts]"/>
+		<floater label="Script" name="all_scripts" title="[ALL SCRIPTS]"/>
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_script_preview.xml b/indra/newview/skins/default/xui/pt/floater_script_preview.xml
index 2a7680565f5..3c0570791c1 100644
--- a/indra/newview/skins/default/xui/pt/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/pt/floater_script_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="Script: Rotation Script">
+<floater name="preview lsl text" title="SCRIPT: ROTATION SCRIPT">
 	<text name="desc txt">
 		Descrição:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_script_queue.xml b/indra/newview/skins/default/xui/pt/floater_script_queue.xml
index 7b35226bdb4..6e0e174c079 100644
--- a/indra/newview/skins/default/xui/pt/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/pt/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="queue" title="Resetar Progresso">
+<floater name="queue" title="RESETAR PROGRESSO">
 	<button label="Fechar" label_selected="Fechar" name="close"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_script_search.xml b/indra/newview/skins/default/xui/pt/floater_script_search.xml
index c904c0f816f..3a62f1711f2 100644
--- a/indra/newview/skins/default/xui/pt/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/pt/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script search" title="Busca de Script" width="320">
+<floater name="script search" title="BUSCA DE SCRIPT" width="320">
 	<check_box label="Não diferenciar Maiúsculas de Minúsculas" name="case_text" left="75"/>
 	<button label="Buscar" label_selected="Buscar" name="search_btn" width="85"/>
 	<button label="Substituir" label_selected="Substituir" name="replace_btn" left="100" width="85"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_sell_land.xml b/indra/newview/skins/default/xui/pt/floater_sell_land.xml
index d3581405ffe..f58c4098ef4 100644
--- a/indra/newview/skins/default/xui/pt/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sell land" title="Vender terreno">
+<floater name="sell land" title="VENDER TERRENO">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
index f7b468bb220..394a9771e0c 100644
--- a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="settings_debug" title="Configurações de Debug">
+<floater name="settings_debug" title="CONFIGURAÇÕES DE DEBUG">
 	<combo_box name="boolean_combo">
 		<combo_box.item name="TRUE" label="VERDADEIRO" />
 		<combo_box.item name="FALSE" label="FALSO" />
diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
index a924706cb99..c3c4c73a89d 100644
--- a/indra/newview/skins/default/xui/pt/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Prévia da foto">
+<floater name="Snapshot" title="PRÉVIA DA FOTO">
 	<text name="type_label">
 		Destino da foto
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_sound_preview.xml b/indra/newview/skins/default/xui/pt/floater_sound_preview.xml
index df76499f42b..d5d252c0ddd 100644
--- a/indra/newview/skins/default/xui/pt/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/pt/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		Nome:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_statistics.xml b/indra/newview/skins/default/xui/pt/floater_statistics.xml
index d26c7081cc9..c56c9fb2e05 100644
--- a/indra/newview/skins/default/xui/pt/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/pt/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statística"/>
+<floater name="stats floater" title="STATÍSTICA"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_telehub.xml b/indra/newview/skins/default/xui/pt/floater_telehub.xml
index 11886c7cabf..5c775ab45d0 100644
--- a/indra/newview/skins/default/xui/pt/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/pt/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="telehub" title="Telehub" min_height="310" height="310" width="286">
+<floater name="telehub" title="TELEHUB" min_height="310" height="310" width="286">
 	<text name="status_text_connected">
 		Telehub conectado ao objeto [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
index 784540a48e6..b63c4a9bbf3 100644
--- a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Pegar: Textura">
+<floater name="texture picker" title="PEGAR: TEXTURA">
 	<string name="choose_picture">
 		Clique para escolher uma imagem
 	</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index d7227deacc1..b9ab0186066 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Construir" width="288">
+<floater name="toolbox floater" title="" short_title="CONSTRUIR" width="288">
 	<button label="" label_selected="" name="button focus" tool_tip="Foco"/>
 	<button label="" label_selected="" name="button move" tool_tip="Mover"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Editar"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_top_objects.xml b/indra/newview/skins/default/xui/pt/floater_top_objects.xml
index cd94b51b167..15e69c450cc 100644
--- a/indra/newview/skins/default/xui/pt/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/pt/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="Carregando...">
+<floater name="top_objects" title="CARREGANDO...">
 	<text name="title_text">
 		Carregando...
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_water.xml b/indra/newview/skins/default/xui/pt/floater_water.xml
index ceb4414058e..bad9aa0943c 100644
--- a/indra/newview/skins/default/xui/pt/floater_water.xml
+++ b/indra/newview/skins/default/xui/pt/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="Editor de Água Avançado">
+<floater name="Water Floater" title="EDITOR DE ÁGUA AVANÇADO">
 	<text name="KeyFramePresetsText" width="154">
 		Pré-configurações da Água:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
index 0de8bd22f8b..951e37a1a65 100644
--- a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="Editor de Céu Avançado">
+<floater name="WindLight floater" title="EDITOR DE CÉU AVANÇADO">
 	<text name="KeyFramePresetsText" width="130">
 		Pré-definições de Céu:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_world_map.xml b/indra/newview/skins/default/xui/pt/floater_world_map.xml
index 056d1215202..034602d6ea6 100644
--- a/indra/newview/skins/default/xui/pt/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/pt/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Mapa Mundi">
+<floater name="worldmap" title="MAPA MUNDI">
 	<tab_container name="maptab">
 		<panel label="Objetos" name="objects_mapview"/>
 		<panel label="Terreno" name="terrain_mapview"/>
-- 
GitLab


From b03ccaec164ea01e87d8bf6d9a507a0606151ab6 Mon Sep 17 00:00:00 2001
From: "Justin C. Rounds (Chuck)" <chuck@lindenlab.com>
Date: Wed, 4 Nov 2009 19:39:50 -0500
Subject: [PATCH 147/306] Changed rollover graphic on Favorites links.
 http://jira.secondlife.com/browse/EXT-2218

---
 .../textures/navbar/Favorite_Link_Over.png        | Bin 0 -> 191 bytes
 indra/newview/skins/default/textures/textures.xml |   5 +----
 .../skins/default/xui/en/favorites_bar_button.xml |   8 ++++----
 3 files changed, 5 insertions(+), 8 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png

diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png b/indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png
new file mode 100644
index 0000000000000000000000000000000000000000..d4f126f9692110c2f8ecb9f6c80e85c05d947e65
GIT binary patch
literal 191
zcmeAS@N?(olHy`uVBq!ia0vp^6+q0-!3HGtow-*7DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MTwp+jv*Dd-dx_udBA|jCD4^+y5^q$dQm5rm{>g7a_pmh
z%$?U0SFdt&v5DIM<npz9(eqcTe&4XV{>ID)QPUsn;x1-t;7nke!Jr1BBod04?B*QY
mcKLw!?;WkNxx4BZ*%;!zxiST&3(o{v#^CAd=d#Wzp$PyfZbe=I

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 4aafe462b79..8be90cb03ee 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -89,6 +89,7 @@
   <texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" />
   <texture name="Favorite_Star_Press" file_name="navbar/Favorite_Star_Press.png" preload="false" />
   <texture name="Favorite_Star_Over" file_name="navbar/Favorite_Star_Over.png" preload="false" />
+  <texture name="Favorite_Link_Over" file_name="navbar/Favorite_Link_Over.png" preload="false" />
 
   <texture name="FileMenu_BarSelect" file_name="navbar/FileMenu_BarSelect.png" preload="false" scale.left="2" scale.top="0" scale.right="2" scale.bottom="0" />
   <texture name="FileMenu_BG" file_name="navbar/FileMenu_BG.png" preload="false" />
@@ -396,10 +397,6 @@
   <texture name="TabIcon_Home_Off" file_name="taskpanel/TabIcon_Home_Off.png" preload="false" />
   <texture name="TabIcon_Home_Over" file_name="taskpanel/TabIcon_Home_Over.png" preload="false" />
   <texture name="TabIcon_Home_Selected" file_name="taskpanel/TabIcon_Home_Selected.png" preload="false" />
-  <texture name="TabIcon_Inventory_Large" file_name="taskpanel/TabIcon_Inventory_Large.png" preload="false" />
-  <texture name="TabIcon_Inventory_Off" file_name="taskpanel/TabIcon_Inventory_Off.png" preload="false" />
-  <texture name="TabIcon_Inventory_Over" file_name="taskpanel/TabIcon_Inventory_Over.png" preload="false" />
-  <texture name="TabIcon_Inventory_Selected" file_name="taskpanel/TabIcon_Inventory_Selected.png" preload="false" />
   <texture name="TabIcon_Me_Large" file_name="taskpanel/TabIcon_Me_Large.png" preload="false" />
   <texture name="TabIcon_Me_Off" file_name="taskpanel/TabIcon_Me_Off.png" preload="false" />
   <texture name="TabIcon_Me_Over" file_name="taskpanel/TabIcon_Me_Over.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/en/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
index c35cbb15393..361f5a7bc82 100644
--- a/indra/newview/skins/default/xui/en/favorites_bar_button.xml
+++ b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
@@ -9,10 +9,10 @@
  image_disabled_selected="transparent.j2c"
  image_selected="transparent.j2c"
  image_unselected="transparent.j2c"
- image_hover_selected="FileMenu_BarSelect"
- image_hover_unselected="FileMenu_BarSelect"
- image_pressed="FileMenu_BarSelect"
- image_pressed_selected="FileMenu_BarSelect"
+ image_hover_selected="Favorite_Link_Over"
+ image_hover_unselected="Favorite_Link_Over"
+ image_pressed="Favorite_Link_Over"
+ image_pressed_selected="Favorite_Link_Over"
  hover_glow_amount="0.15"
  layout="topleft"
  left="0"
-- 
GitLab


From 4656c5671cfe523e351b5c91ae45d5026fb69e04 Mon Sep 17 00:00:00 2001
From: Erica <erica@lindenlab.com>
Date: Wed, 4 Nov 2009 17:09:37 -0800
Subject: [PATCH 148/306] EXT-2220 Make envelope icon for unread messages

---
 .../textures/bottomtray/Notices_Unread.png       | Bin 0 -> 333 bytes
 .../newview/skins/default/textures/textures.xml  |   7 ++++++-
 .../skins/default/xui/en/panel_bottomtray.xml    |  15 +++++++++------
 3 files changed, 15 insertions(+), 7 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/bottomtray/Notices_Unread.png

diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
new file mode 100644
index 0000000000000000000000000000000000000000..98f1f04b9a70d6eeb129a0f0355d220518b03d33
GIT binary patch
literal 333
zcmV-T0kZyyP)<h;3K|Lk000e1NJLTq000yK000gM0{{R37#hsN0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyW>8F2MVgwLl$4Z?j*gg^n1O+To12@#
z!NGulfQyTZwY9alxVV*-mAbmRmX?-{jg7Xpwuy;}mzS5Orly{ro{^D}kB^U%l9Ir{
zz?__%ii(P&qN2CAx1F7xpP!$rtE-urnZm-tprD{nWGd<a004bSL_t(|+FZ)*7J?uY
zMA5kjN~vXO-w@pQf5{Mp)bnfBUW4}f-Sr+oAHS_0HSF`Su?GzVHkY;5le_`UraJ%a
zE(L7BwYIbIjBMO7SucgNoG^T&x+dC!;oEtS<`gYs_;xm1L2LS#sFD>73bhzRap61^
fH1RIdKLG{+f;}BglI|l300000NkvXXu0mjfpaz$X

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 8be90cb03ee..2b9ebd05730 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -89,7 +89,6 @@
   <texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" />
   <texture name="Favorite_Star_Press" file_name="navbar/Favorite_Star_Press.png" preload="false" />
   <texture name="Favorite_Star_Over" file_name="navbar/Favorite_Star_Over.png" preload="false" />
-  <texture name="Favorite_Link_Over" file_name="navbar/Favorite_Link_Over.png" preload="false" />
 
   <texture name="FileMenu_BarSelect" file_name="navbar/FileMenu_BarSelect.png" preload="false" scale.left="2" scale.top="0" scale.right="2" scale.bottom="0" />
   <texture name="FileMenu_BG" file_name="navbar/FileMenu_BG.png" preload="false" />
@@ -234,6 +233,8 @@
   <texture name="NearbyVoice_Lvl3" file_name="bottomtray/NearbyVoice_Lvl3.png" preload="false" />
   <texture name="NearbyVoice_On" file_name="bottomtray/NearbyVoice_On.png" preload="false" />
 
+  <texture name="Notices_Unread" file_name="bottomtray/Notices_Unread.png" preload="true" />
+
   <texture name="Object_Cone" file_name="build/Object_Cone.png" preload="false" />
   <texture name="Object_Cube" file_name="build/Object_Cube.png" preload="false" />
   <texture name="Object_Cylinder" file_name="build/Object_Cylinder.png" preload="false" />
@@ -397,6 +398,10 @@
   <texture name="TabIcon_Home_Off" file_name="taskpanel/TabIcon_Home_Off.png" preload="false" />
   <texture name="TabIcon_Home_Over" file_name="taskpanel/TabIcon_Home_Over.png" preload="false" />
   <texture name="TabIcon_Home_Selected" file_name="taskpanel/TabIcon_Home_Selected.png" preload="false" />
+  <texture name="TabIcon_Inventory_Large" file_name="taskpanel/TabIcon_Inventory_Large.png" preload="false" />
+  <texture name="TabIcon_Inventory_Off" file_name="taskpanel/TabIcon_Inventory_Off.png" preload="false" />
+  <texture name="TabIcon_Inventory_Over" file_name="taskpanel/TabIcon_Inventory_Over.png" preload="false" />
+  <texture name="TabIcon_Inventory_Selected" file_name="taskpanel/TabIcon_Inventory_Selected.png" preload="false" />
   <texture name="TabIcon_Me_Large" file_name="taskpanel/TabIcon_Me_Large.png" preload="false" />
   <texture name="TabIcon_Me_Off" file_name="taskpanel/TabIcon_Me_Off.png" preload="false" />
   <texture name="TabIcon_Me_Over" file_name="taskpanel/TabIcon_Me_Over.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 3149a1f7b39..1da5f0e74d2 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -60,7 +60,7 @@
          min_width="96"
          name="speak_panel"
          user_resize="false">
-         <talk_button
+         <chiclet_talk
           follows="right"
           height="23"
           speak_button.tab_stop="true"
@@ -93,7 +93,7 @@
          min_width="76"
          name="gesture_panel"
          user_resize="false">
-         <gesture_combo_box
+         <button
            follows="right"
           height="23"
           label="Gesture"
@@ -258,11 +258,11 @@
          user_resize="false">
             <chiclet_notification
              follows="right"
-             height="25"
+             height="23"
              layout="topleft"
              left="0"
              name="sys_well"
-             top="3"
+             top="4"
              width="34">
               <button
               auto_resize="true"
@@ -271,7 +271,10 @@
                follows="right"
                flash_color="EmphasisColor"
                name="Unread"
-               image_overlay="Widget_UpArrow" />
+               picture_style="true"
+               image_overlay="Notices_Unread"
+               width="20"
+               />
                <unread_notifications
                width="34"
                height="23"
@@ -288,6 +291,6 @@
          layout="topleft"
          right="-1"
          top="0"
-         width="10"/>
+         width="26"/>
     </layout_stack>
 </panel>
\ No newline at end of file
-- 
GitLab


From 7615ec497e7b69c8eefbf8ef1a464eaa22e77bf1 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Wed, 4 Nov 2009 20:30:11 -0500
Subject: [PATCH 149/306] EXT-2216 : Task properties sidepanel EXT-2224 : Edit
 item then delete item -- edit panel still active EXT-2228 : Buy/Pay/Open
 buttons for Task sidepanel

--HG--
branch : avatar-pipeline
---
 indra/newview/llfloaterinspect.cpp     |    25 -
 indra/newview/llinventorybridge.cpp    | 10310 +++++++++++------------
 indra/newview/llsidepanelinventory.cpp |     2 +
 indra/newview/llsidepaneliteminfo.cpp  |    10 +-
 indra/newview/llsidepaneltaskinfo.cpp  |   204 +-
 indra/newview/llsidepaneltaskinfo.h    |    44 +-
 indra/newview/llviewermenu.cpp         |    19 +-
 indra/newview/llviewermenu.h           |     1 +
 8 files changed, 5294 insertions(+), 5321 deletions(-)

diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
index e26937e93ff..13ca7638c52 100644
--- a/indra/newview/llfloaterinspect.cpp
+++ b/indra/newview/llfloaterinspect.cpp
@@ -88,32 +88,7 @@ LLFloaterInspect::~LLFloaterInspect(void)
 	}
 	//sInstance = NULL;
 }
-/*
-BOOL LLFloaterInspect::isVisible()
-{
-	return (!!sInstance);
-}*/
-/*
-void LLFloaterInspect::show(void* ignored)
-{
-	// setForceSelection ensures that the pie menu does not deselect things when it 
-	// looses the focus (this can happen with "select own objects only" enabled
-	// VWR-1471
-	BOOL forcesel = LLSelectMgr::getInstance()->setForceSelection(TRUE);
-
-	if (!sInstance)	// first use
-	{
-		sInstance = new LLFloaterInspect;
-	}
 
-	sInstance->openFloater();
-	LLToolMgr::getInstance()->setTransientTool(LLToolCompInspect::getInstance());
-	LLSelectMgr::getInstance()->setForceSelection(forcesel);	// restore previouis value
-
-	sInstance->mObjectSelection = LLSelectMgr::getInstance()->getSelection();
-	sInstance->refresh();
-}
-*/
 void LLFloaterInspect::onOpen(const LLSD& key)
 {
 	BOOL forcesel = LLSelectMgr::getInstance()->setForceSelection(TRUE);
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index b9775cf0e9c..f46bbbe1884 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1,5155 +1,5155 @@
-/**
- * @file llinventorybridge.cpp
- * @brief Implementation of the Inventory-Folder-View-Bridge classes.
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include <utility> // for std::pair<>
-
-#include "llfloaterinventory.h"
-#include "llinventorybridge.h"
-
-#include "message.h"
-
-#include "llagent.h"
-#include "llagentwearables.h"
-#include "llcallingcard.h"
-#include "llcheckboxctrl.h"		// for radio buttons
-#include "llfloaterreg.h"
-#include "llradiogroup.h"
-#include "llspinctrl.h"
-#include "lltextbox.h"
-#include "llui.h"
-
-#include "llviewercontrol.h"
-#include "llfirstuse.h"
-#include "llfoldertype.h"
-#include "llfloaterchat.h"
-#include "llfloatercustomize.h"
-#include "llfloaterproperties.h"
-#include "llfloaterworldmap.h"
-#include "llfocusmgr.h"
-#include "llfolderview.h"
-#include "llfriendcard.h"
-#include "llavataractions.h"
-#include "llgesturemgr.h"
-#include "lliconctrl.h"
-#include "llinventoryfunctions.h"
-#include "llinventorymodel.h"
-#include "llinventorypanel.h"
-#include "llinventoryclipboard.h"
-#include "lllineeditor.h"
-#include "llmenugl.h"
-#include "llpreviewanim.h"
-#include "llpreviewgesture.h"
-#include "llpreviewnotecard.h"
-#include "llpreviewscript.h"
-#include "llpreviewsound.h"
-#include "llpreviewtexture.h"
-#include "llresmgr.h"
-#include "llscrollcontainer.h"
-#include "llimview.h"
-#include "lltooldraganddrop.h"
-#include "llviewertexturelist.h"
-#include "llviewerinventory.h"
-#include "llviewerobjectlist.h"
-#include "llviewerwindow.h"
-#include "llvoavatar.h"
-#include "llwearable.h"
-#include "llwearablelist.h"
-#include "llviewermessage.h"
-#include "llviewerregion.h"
-#include "llvoavatarself.h"
-#include "lltabcontainer.h"
-#include "lluictrlfactory.h"
-#include "llselectmgr.h"
-#include "llsidetray.h"
-#include "llfloateropenobject.h"
-#include "lltrans.h"
-#include "llappearancemgr.h"
-
-using namespace LLOldEvents;
-
-// Helpers
-// bug in busy count inc/dec right now, logic is complex... do we really need it?
-void inc_busy_count()
-{
-// 	gViewerWindow->getWindow()->incBusyCount();
-//  check balance of these calls if this code is changed to ever actually
-//  *do* something!
-}
-void dec_busy_count()
-{
-// 	gViewerWindow->getWindow()->decBusyCount();
-//  check balance of these calls if this code is changed to ever actually
-//  *do* something!
-}
-
-// Function declarations
-void wear_add_inventory_item_on_avatar(LLInventoryItem* item);
-void remove_inventory_category_from_avatar(LLInventoryCategory* category);
-void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id);
-bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*);
-bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response);
-
-std::string ICON_NAME[ICON_NAME_COUNT] =
-{
-	"Inv_Texture",
-	"Inv_Sound",
-	"Inv_CallingCard",
-	"Inv_CallingCard",
-	"Inv_Landmark",
-	"Inv_Landmark",
-	"Inv_Script",
-	"Inv_Clothing",
-	"Inv_Object",
-	"Inv_Object",
-	"Inv_Notecard",
-	"Inv_Skin",
-	"Inv_Snapshot",
-
-	"Inv_BodyShape",
-	"Inv_Skin",
-	"Inv_Hair",
-	"Inv_Eye",
-	"Inv_Shirt",
-	"Inv_Pants",
-	"Inv_Shoe",
-	"Inv_Socks",
-	"Inv_Jacket",
-	"Inv_Gloves",
-	"Inv_Undershirt",
-	"Inv_Underpants",
-	"Inv_Skirt",
-	"Inv_Alpha",
-	"Inv_Tattoo",
-
-	"Inv_Animation",
-	"Inv_Gesture",
-
-	"inv_item_linkitem.tga",
-	"inv_item_linkfolder.tga"
-};
-
-
-// +=================================================+
-// |        LLInventoryPanelObserver                 |
-// +=================================================+
-void LLInventoryPanelObserver::changed(U32 mask)
-{
-	mIP->modelChanged(mask);
-}
-
-
-// +=================================================+
-// |        LLInvFVBridge                            |
-// +=================================================+
-
-LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
-mUUID(uuid), mInvType(LLInventoryType::IT_NONE)
-{
-	mInventoryPanel = inventory->getHandle();
-}
-
-const std::string& LLInvFVBridge::getName() const
-{
-	LLInventoryObject* obj = getInventoryObject();
-	if(obj)
-	{
-		return obj->getName();
-	}
-	return LLStringUtil::null;
-}
-
-const std::string& LLInvFVBridge::getDisplayName() const
-{
-	return getName();
-}
-
-// Folders have full perms
-PermissionMask LLInvFVBridge::getPermissionMask() const
-{
-
-	return PERM_ALL;
-}
-
-// virtual
-LLAssetType::EType LLInvFVBridge::getPreferredType() const
-{
-	return LLAssetType::AT_NONE;
-}
-
-
-// Folders don't have creation dates.
-time_t LLInvFVBridge::getCreationDate() const
-{
-	return 0;
-}
-
-// Can be destoryed (or moved to trash)
-BOOL LLInvFVBridge::isItemRemovable()
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-	if(model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID()))
-	{
-		return TRUE;
-	}
-	return FALSE;
-}
-
-// Sends an update to all link items that point to the base item.
-void LLInvFVBridge::renameLinkedItems(const LLUUID &item_id, const std::string& new_name)
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return;
-
-	LLInventoryItem* itemp = model->getItem(mUUID);
-	if (!itemp) return;
-
-	if (itemp->getIsLinkType())
-	{
-		return;
-	}
-
-	LLInventoryModel::item_array_t item_array = model->collectLinkedItems(item_id);
-	for (LLInventoryModel::item_array_t::iterator iter = item_array.begin();
-		 iter != item_array.end();
-		 iter++)
-	{
-		LLViewerInventoryItem *linked_item = (*iter);
-		if (linked_item->getUUID() == item_id) continue;
-
-		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(linked_item);
-		new_item->rename(new_name);
-		new_item->updateServer(FALSE);
-		model->updateItem(new_item);
-		// model->addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID());
-	}
-	model->notifyObservers();
-}
-
-// Can be moved to another folder
-BOOL LLInvFVBridge::isItemMovable() const
-{
-	return TRUE;
-}
-
-/*virtual*/
-/**
- * @brief Adds this item into clipboard storage
- */
-void LLInvFVBridge::cutToClipboard()
-{
-	if(isItemMovable())
-	{
-		LLInventoryClipboard::instance().cut(mUUID);
-	}
-}
-// *TODO: make sure this does the right thing
-void LLInvFVBridge::showProperties()
-{
-	LLSD key;
-	key["id"] = mUUID;
-	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
-
-	// LLFloaterReg::showInstance("properties", mUUID);
-}
-
-void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch)
-{
-	// Deactivate gestures when moving them into Trash
-	LLInvFVBridge* bridge;
-	LLInventoryModel* model = getInventoryModel();
-	LLViewerInventoryItem* item = NULL;
-	LLViewerInventoryCategory* cat = NULL;
-	LLInventoryModel::cat_array_t	descendent_categories;
-	LLInventoryModel::item_array_t	descendent_items;
-	S32 count = batch.count();
-	S32 i,j;
-	for(i = 0; i < count; ++i)
-	{
-		bridge = (LLInvFVBridge*)(batch.get(i));
-		if(!bridge || !bridge->isItemRemovable()) continue;
-		item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID());
-		if (item)
-		{
-			if(LLAssetType::AT_GESTURE == item->getType())
-			{
-				LLGestureManager::instance().deactivateGesture(item->getUUID());
-			}
-		}
-	}
-	for(i = 0; i < count; ++i)
-	{
-		bridge = (LLInvFVBridge*)(batch.get(i));
-		if(!bridge || !bridge->isItemRemovable()) continue;
-		cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID());
-		if (cat)
-		{
-			gInventory.collectDescendents( cat->getUUID(), descendent_categories, descendent_items, FALSE );
-			for (j=0; j<descendent_items.count(); j++)
-			{
-				if(LLAssetType::AT_GESTURE == descendent_items[j]->getType())
-				{
-					LLGestureManager::instance().deactivateGesture(descendent_items[j]->getUUID());
-				}
-			}
-		}
-	}
-	removeBatchNoCheck(batch);
-}
-
-void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*>& batch)
-{
-	// this method moves a bunch of items and folders to the trash. As
-	// per design guidelines for the inventory model, the message is
-	// built and the accounting is performed first. After all of that,
-	// we call LLInventoryModel::moveObject() to move everything
-	// around.
-	LLInvFVBridge* bridge;
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return;
-	LLMessageSystem* msg = gMessageSystem;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	LLViewerInventoryItem* item = NULL;
-	LLViewerInventoryCategory* cat = NULL;
-	std::vector<LLUUID> move_ids;
-	LLInventoryModel::update_map_t update;
-	bool start_new_message = true;
-	S32 count = batch.count();
-	S32 i;
-	for(i = 0; i < count; ++i)
-	{
-		bridge = (LLInvFVBridge*)(batch.get(i));
-		if(!bridge || !bridge->isItemRemovable()) continue;
-		item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID());
-		if(item)
-		{
-			if(item->getParentUUID() == trash_id) continue;
-			move_ids.push_back(item->getUUID());
-			LLPreview::hide(item->getUUID());
-			--update[item->getParentUUID()];
-			++update[trash_id];
-			if(start_new_message)
-			{
-				start_new_message = false;
-				msg->newMessageFast(_PREHASH_MoveInventoryItem);
-				msg->nextBlockFast(_PREHASH_AgentData);
-				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-				msg->addBOOLFast(_PREHASH_Stamp, TRUE);
-			}
-			msg->nextBlockFast(_PREHASH_InventoryData);
-			msg->addUUIDFast(_PREHASH_ItemID, item->getUUID());
-			msg->addUUIDFast(_PREHASH_FolderID, trash_id);
-			msg->addString("NewName", NULL);
-			if(msg->isSendFullFast(_PREHASH_InventoryData))
-			{
-				start_new_message = true;
-				gAgent.sendReliableMessage();
-				gInventory.accountForUpdate(update);
-				update.clear();
-			}
-		}
-	}
-	if(!start_new_message)
-	{
-		start_new_message = true;
-		gAgent.sendReliableMessage();
-		gInventory.accountForUpdate(update);
-		update.clear();
-	}
-	for(i = 0; i < count; ++i)
-	{
-		bridge = (LLInvFVBridge*)(batch.get(i));
-		if(!bridge || !bridge->isItemRemovable()) continue;
-		cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID());
-		if(cat)
-		{
-			if(cat->getParentUUID() == trash_id) continue;
-			move_ids.push_back(cat->getUUID());
-			--update[cat->getParentUUID()];
-			++update[trash_id];
-			if(start_new_message)
-			{
-				start_new_message = false;
-				msg->newMessageFast(_PREHASH_MoveInventoryFolder);
-				msg->nextBlockFast(_PREHASH_AgentData);
-				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-				msg->addBOOL("Stamp", TRUE);
-			}
-			msg->nextBlockFast(_PREHASH_InventoryData);
-			msg->addUUIDFast(_PREHASH_FolderID, cat->getUUID());
-			msg->addUUIDFast(_PREHASH_ParentID, trash_id);
-			if(msg->isSendFullFast(_PREHASH_InventoryData))
-			{
-				start_new_message = true;
-				gAgent.sendReliableMessage();
-				gInventory.accountForUpdate(update);
-				update.clear();
-			}
-		}
-	}
-	if(!start_new_message)
-	{
-		gAgent.sendReliableMessage();
-		gInventory.accountForUpdate(update);
-	}
-
-	// move everything.
-	std::vector<LLUUID>::iterator it = move_ids.begin();
-	std::vector<LLUUID>::iterator end = move_ids.end();
-	for(; it != end; ++it)
-	{
-		gInventory.moveObject((*it), trash_id);
-	}
-
-	// notify inventory observers.
-	model->notifyObservers();
-}
-
-BOOL LLInvFVBridge::isClipboardPasteable() const
-{
-	if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory())
-	{
-		return FALSE;
-	}
-	LLInventoryModel* model = getInventoryModel();
-	if (!model)
-	{
-		return FALSE;
-	}
-
-	const LLUUID &agent_id = gAgent.getID();
-
-	LLDynamicArray<LLUUID> objects;
-	LLInventoryClipboard::instance().retrieve(objects);
-	S32 count = objects.count();
-	for(S32 i = 0; i < count; i++)
-	{
-		const LLUUID &item_id = objects.get(i);
-
-		// Can't paste folders
-		const LLInventoryCategory *cat = model->getCategory(item_id);
-		if (cat)
-		{
-			return FALSE;
-		}
-
-		const LLInventoryItem *item = model->getItem(item_id);
-		if (item)
-		{
-			if (!item->getPermissions().allowCopyBy(agent_id))
-			{
-				return FALSE;
-			}
-		}
-	}
-	return TRUE;
-}
-
-BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
-{
-	if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory())
-	{
-		return FALSE;
-	}
-	const LLInventoryModel* model = getInventoryModel();
-	if (!model)
-	{
-		return FALSE;
-	}
-
-	LLDynamicArray<LLUUID> objects;
-	LLInventoryClipboard::instance().retrieve(objects);
-	S32 count = objects.count();
-	for(S32 i = 0; i < count; i++)
-	{
-		const LLInventoryItem *item = model->getItem(objects.get(i));
-		if (item)
-		{
-			if (!LLAssetType::lookupCanLink(item->getActualType()))
-			{
-				return FALSE;
-			}
-		}
-		const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i));
-		if (cat && !LLAssetType::lookupCanLink(cat->getPreferredType()))
-		{
-			return FALSE;
-		}
-	}
-	return TRUE;
-}
-
-void hide_context_entries(LLMenuGL& menu, 
-						const std::vector<std::string> &entries_to_show,
-						const std::vector<std::string> &disabled_entries)
-{
-	const LLView::child_list_t *list = menu.getChildList();
-
-	LLView::child_list_t::const_iterator itor;
-	for (itor = list->begin(); itor != list->end(); ++itor)
-	{
-		std::string name = (*itor)->getName();
-
-		// descend into split menus:
-		LLMenuItemBranchGL* branchp = dynamic_cast<LLMenuItemBranchGL*>(*itor);
-		if ((name == "More") && branchp)
-		{
-			hide_context_entries(*branchp->getBranch(), entries_to_show, disabled_entries);
-		}
-
-
-		bool found = false;
-		std::vector<std::string>::const_iterator itor2;
-		for (itor2 = entries_to_show.begin(); itor2 != entries_to_show.end(); ++itor2)
-		{
-			if (*itor2 == name)
-			{
-				found = true;
-			}
-		}
-		if (!found)
-		{
-			(*itor)->setVisible(FALSE);
-		}
-		else
-		{
-			for (itor2 = disabled_entries.begin(); itor2 != disabled_entries.end(); ++itor2)
-			{
-				if (*itor2 == name)
-				{
-					(*itor)->setEnabled(FALSE);
-				}
-			}
-		}
-	}
-}
-
-// Helper for commonly-used entries
-void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
-										std::vector<std::string> &items,
-										std::vector<std::string> &disabled_items, U32 flags)
-{
-	items.push_back(std::string("Rename"));
-	if (!isItemRenameable() || (flags & FIRST_SELECTED_ITEM) == 0)
-	{
-		disabled_items.push_back(std::string("Rename"));
-	}
-
-	if (show_asset_id)
-	{
-		items.push_back(std::string("Copy Asset UUID"));
-		if ( (! ( isItemPermissive() || gAgent.isGodlike() ) )
-			  || (flags & FIRST_SELECTED_ITEM) == 0)
-		{
-			disabled_items.push_back(std::string("Copy Asset UUID"));
-		}
-	}
-
-	items.push_back(std::string("Copy Separator"));
-
-	items.push_back(std::string("Copy"));
-	if (!isItemCopyable())
-	{
-		disabled_items.push_back(std::string("Copy"));
-	}
-
-	items.push_back(std::string("Paste"));
-	if (!isClipboardPasteable() || (flags & FIRST_SELECTED_ITEM) == 0)
-	{
-		disabled_items.push_back(std::string("Paste"));
-	}
-
-	items.push_back(std::string("Paste As Link"));
-	if (!isClipboardPasteableAsLink() || (flags & FIRST_SELECTED_ITEM) == 0)
-	{
-		disabled_items.push_back(std::string("Paste As Link"));
-	}
-	items.push_back(std::string("Paste Separator"));
-
-	items.push_back(std::string("Delete"));
-	if (!isItemRemovable())
-	{
-		disabled_items.push_back(std::string("Delete"));
-	}
-
-	// If multiple items are selected, disable properties (if it exists).
-	if ((flags & FIRST_SELECTED_ITEM) == 0)
-	{
-		disabled_items.push_back(std::string("Properties"));
-	}
-}
-
-void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	lldebugs << "LLInvFVBridge::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-	if(isInTrash())
-	{
-		items.push_back(std::string("PurgeItem"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("PurgeItem"));
-		}
-		items.push_back(std::string("RestoreItem"));
-	}
-	else
-	{
-		items.push_back(std::string("Open"));
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-	}
-	hide_context_entries(menu, items, disabled_items);
-}
-
-// *TODO: remove this
-BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
-{
-	BOOL rv = FALSE;
-
-	const LLInventoryObject* obj = getInventoryObject();
-
-	if(obj)
-	{
-		*type = LLAssetType::lookupDragAndDropType(obj->getActualType());
-		if(*type == DAD_NONE)
-		{
-			return FALSE;
-		}
-
-		*id = obj->getUUID();
-		//object_ids.put(obj->getUUID());
-
-		if (*type == DAD_CATEGORY)
-		{
-			gInventory.startBackgroundFetch(obj->getUUID());
-		}
-
-		rv = TRUE;
-	}
-
-	return rv;
-}
-
-LLInventoryObject* LLInvFVBridge::getInventoryObject() const
-{
-	LLInventoryObject* obj = NULL;
-	LLInventoryModel* model = getInventoryModel();
-	if(model)
-	{
-		obj = (LLInventoryObject*)model->getObject(mUUID);
-	}
-	return obj;
-}
-
-LLInventoryModel* LLInvFVBridge::getInventoryModel() const
-{
-	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
-	return panel ? panel->getModel() : NULL;
-}
-
-BOOL LLInvFVBridge::isInTrash() const
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-	const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	return model->isObjectDescendentOf(mUUID, trash_id);
-}
-
-BOOL LLInvFVBridge::isLinkedObjectInTrash() const
-{
-	if (isInTrash()) return TRUE;
-
-	const LLInventoryObject *obj = getInventoryObject();
-	if (obj && obj->getIsLinkType())
-	{
-		LLInventoryModel* model = getInventoryModel();
-		if(!model) return FALSE;
-		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-		return model->isObjectDescendentOf(obj->getLinkedUUID(), trash_id);
-	}
-	return FALSE;
-}
-
-BOOL LLInvFVBridge::isAgentInventory() const
-{
-	const LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-	if(gInventory.getRootFolderID() == mUUID) return TRUE;
-	return model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID());
-}
-
-BOOL LLInvFVBridge::isCOFFolder() const
-{
-	const LLInventoryModel* model = getInventoryModel();
-	if(!model) return TRUE;
-	const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
-	if (mUUID == cof_id || model->isObjectDescendentOf(mUUID, cof_id))
-	{
-		return TRUE;
-	}
-	return FALSE;
-}
-
-BOOL LLInvFVBridge::isItemPermissive() const
-{
-	return FALSE;
-}
-
-// static
-void LLInvFVBridge::changeItemParent(LLInventoryModel* model,
-									 LLViewerInventoryItem* item,
-									 const LLUUID& new_parent,
-									 BOOL restamp)
-{
-	if(item->getParentUUID() != new_parent)
-	{
-		LLInventoryModel::update_list_t update;
-		LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
-		update.push_back(old_folder);
-		LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1);
-		update.push_back(new_folder);
-		gInventory.accountForUpdate(update);
-
-		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
-		new_item->setParent(new_parent);
-		new_item->updateParentOnServer(restamp);
-		model->updateItem(new_item);
-		model->notifyObservers();
-	}
-}
-
-// static
-void LLInvFVBridge::changeCategoryParent(LLInventoryModel* model,
-										 LLViewerInventoryCategory* cat,
-										 const LLUUID& new_parent,
-										 BOOL restamp)
-{
-	if(cat->getParentUUID() != new_parent)
-	{
-		LLInventoryModel::update_list_t update;
-		LLInventoryModel::LLCategoryUpdate old_folder(cat->getParentUUID(), -1);
-		update.push_back(old_folder);
-		LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1);
-		update.push_back(new_folder);
-		gInventory.accountForUpdate(update);
-
-		LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat);
-		new_cat->setParent(new_parent);
-		new_cat->updateParentOnServer(restamp);
-		model->updateCategory(new_cat);
-		model->notifyObservers();
-	}
-}
-
-
-const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type)
-{
-	const std::string rv= LLInventoryType::lookup(inv_type);
-	if(rv.empty())
-	{
-		return std::string("<invalid>");
-	}
-	return rv;
-}
-
-LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,
-										   LLAssetType::EType actual_asset_type,
-										   LLInventoryType::EType inv_type,
-										   LLInventoryPanel* inventory,
-										   const LLUUID& uuid,
-										   U32 flags)
-{
-	LLInvFVBridge* new_listener = NULL;
-	switch(asset_type)
-	{
-		case LLAssetType::AT_TEXTURE:
-			if(!(inv_type == LLInventoryType::IT_TEXTURE || inv_type == LLInventoryType::IT_SNAPSHOT))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLTextureBridge(inventory, uuid, inv_type);
-			break;
-
-		case LLAssetType::AT_SOUND:
-			if(!(inv_type == LLInventoryType::IT_SOUND))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLSoundBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_LANDMARK:
-			if(!(inv_type == LLInventoryType::IT_LANDMARK))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLLandmarkBridge(inventory, uuid, flags);
-			break;
-
-		case LLAssetType::AT_CALLINGCARD:
-			if(!(inv_type == LLInventoryType::IT_CALLINGCARD))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLCallingCardBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_SCRIPT:
-			if(!(inv_type == LLInventoryType::IT_LSL))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLScriptBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_OBJECT:
-			if(!(inv_type == LLInventoryType::IT_OBJECT || inv_type == LLInventoryType::IT_ATTACHMENT))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLObjectBridge(inventory, uuid, inv_type, flags);
-			break;
-
-		case LLAssetType::AT_NOTECARD:
-			if(!(inv_type == LLInventoryType::IT_NOTECARD))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLNotecardBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_ANIMATION:
-			if(!(inv_type == LLInventoryType::IT_ANIMATION))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLAnimationBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_GESTURE:
-			if(!(inv_type == LLInventoryType::IT_GESTURE))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLGestureBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_LSL_TEXT:
-			if(!(inv_type == LLInventoryType::IT_LSL))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLLSLTextBridge(inventory, uuid);
-			break;
-
-		case LLAssetType::AT_CLOTHING:
-		case LLAssetType::AT_BODYPART:
-			if(!(inv_type == LLInventoryType::IT_WEARABLE))
-			{
-				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
-			}
-			new_listener = new LLWearableBridge(inventory, uuid, asset_type, inv_type, (EWearableType)flags);
-			break;
-		case LLAssetType::AT_CATEGORY:
-		case LLAssetType::AT_ROOT_CATEGORY:
-			if (actual_asset_type == LLAssetType::AT_LINK_FOLDER)
-			{
-				// Create a link folder handler instead.
-				new_listener = new LLLinkFolderBridge(inventory, uuid);
-				break;
-			}
-			new_listener = new LLFolderBridge(inventory, uuid);
-			break;
-		case LLAssetType::AT_LINK:
-			// Only should happen for broken links.
-			new_listener = new LLLinkItemBridge(inventory, uuid);
-			break;
-		case LLAssetType::AT_LINK_FOLDER:
-			// Only should happen for broken links.
-			new_listener = new LLLinkItemBridge(inventory, uuid);
-			break;
-		default:
-			llinfos << "Unhandled asset type (llassetstorage.h): "
-					<< (S32)asset_type << llendl;
-			break;
-	}
-
-	if (new_listener)
-	{
-		new_listener->mInvType = inv_type;
-	}
-
-	return new_listener;
-}
-
-void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid)
-{
-	LLInventoryCategory* cat = model->getCategory(uuid);
-	if (cat)
-	{
-		model->purgeDescendentsOf(uuid);
-		model->notifyObservers();
-	}
-	LLInventoryObject* obj = model->getObject(uuid);
-	if (obj)
-	{
-		model->purgeObject(uuid);
-		model->notifyObservers();
-	}
-}
-
-// +=================================================+
-// |        InventoryFVBridgeBuilder                 |
-// +=================================================+
-LLInvFVBridge* LLInventoryFVBridgeBuilder::createBridge(LLAssetType::EType asset_type,
-														LLAssetType::EType actual_asset_type,
-														LLInventoryType::EType inv_type,
-														LLInventoryPanel* inventory,
-														const LLUUID& uuid,
-														U32 flags /* = 0x00 */) const
-{
-	return LLInvFVBridge::createBridge(asset_type,
-		actual_asset_type,
-		inv_type,
-		inventory,
-		uuid,
-		flags);
-}
-
-// +=================================================+
-// |        LLItemBridge                             |
-// +=================================================+
-
-void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("goto" == action)
-	{
-		gotoItem(folder);
-	}
-	if ("open" == action)
-	{
-		openItem();
-		return;
-	}
-	else if ("properties" == action)
-	{
-		showProperties();
-		return;
-	}
-	else if ("purge" == action)
-	{
-		purgeItem(model, mUUID);
-		return;
-	}
-	else if ("restoreToWorld" == action)
-	{
-		restoreToWorld();
-		return;
-	}
-	else if ("restore" == action)
-	{
-		restoreItem();
-		return;
-	}
-	else if ("copy_uuid" == action)
-	{
-		// Single item only
-		LLInventoryItem* item = model->getItem(mUUID);
-		if(!item) return;
-		LLUUID asset_id = item->getAssetUUID();
-		std::string buffer;
-		asset_id.toString(buffer);
-
-		gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(buffer));
-		return;
-	}
-	else if ("copy" == action)
-	{
-		copyToClipboard();
-		return;
-	}
-	else if ("paste" == action)
-	{
-		// Single item only
-		LLInventoryItem* itemp = model->getItem(mUUID);
-		if (!itemp) return;
-
-		LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID());
-		if (!folder_view_itemp) return;
-
-		folder_view_itemp->getListener()->pasteFromClipboard();
-		return;
-	}
-	else if ("paste_link" == action)
-	{
-		// Single item only
-		LLInventoryItem* itemp = model->getItem(mUUID);
-		if (!itemp) return;
-
-		LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID());
-		if (!folder_view_itemp) return;
-
-		folder_view_itemp->getListener()->pasteLinkFromClipboard();
-		return;
-	}
-}
-
-void LLItemBridge::selectItem()
-{
-	LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem();
-	if(item && !item->isComplete())
-	{
-		item->fetchFromServer();
-	}
-}
-
-void LLItemBridge::restoreItem()
-{
-	LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem();
-	if(item)
-	{
-		LLInventoryModel* model = getInventoryModel();
-		const LLUUID new_parent = model->findCategoryUUIDForType(item->getType());
-		// do not restamp on restore.
-		LLInvFVBridge::changeItemParent(model, item, new_parent, FALSE);
-	}
-}
-
-void LLItemBridge::restoreToWorld()
-{
-	LLViewerInventoryItem* itemp = (LLViewerInventoryItem*)getItem();
-	if (itemp)
-	{
-		LLMessageSystem* msg = gMessageSystem;
-		msg->newMessage("RezRestoreToWorld");
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-
-		msg->nextBlockFast(_PREHASH_InventoryData);
-		itemp->packMessage(msg);
-		msg->sendReliable(gAgent.getRegion()->getHost());
-	}
-
-	//Similar functionality to the drag and drop rez logic
-	BOOL remove_from_inventory = FALSE;
-
-	//remove local inventory copy, sim will deal with permissions and removing the item
-	//from the actual inventory if its a no-copy etc
-	if(!itemp->getPermissions().allowCopyBy(gAgent.getID()))
-	{
-		remove_from_inventory = TRUE;
-	}
-
-	// Check if it's in the trash. (again similar to the normal rez logic)
-	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id))
-	{
-		remove_from_inventory = TRUE;
-	}
-
-	if(remove_from_inventory)
-	{
-		gInventory.deleteObject(itemp->getUUID());
-		gInventory.notifyObservers();
-	}
-}
-
-void LLItemBridge::gotoItem(LLFolderView *folder)
-{
-	LLInventoryObject *obj = getInventoryObject();
-	if (obj && obj->getIsLinkType())
-	{
-		LLInventoryPanel* active_panel = LLFloaterInventory::getActiveInventory()->getPanel();
-		if (active_panel)
-		{
-			active_panel->setSelection(obj->getLinkedUUID(), TAKE_FOCUS_NO);
-		}
-	}
-}
-
-LLUIImagePtr LLItemBridge::getIcon() const
-{
-	return LLUI::getUIImage(ICON_NAME[OBJECT_ICON_NAME]);
-}
-
-PermissionMask LLItemBridge::getPermissionMask() const
-{
-	LLViewerInventoryItem* item = getItem();
-	PermissionMask perm_mask = 0;
-	if(item)
-	{
-		BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
-		BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID());
-		BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER,
-															gAgent.getID());
-
-		if (copy) perm_mask |= PERM_COPY;
-		if (mod)  perm_mask |= PERM_MODIFY;
-		if (xfer) perm_mask |= PERM_TRANSFER;
-
-	}
-	return perm_mask;
-}
-
-const std::string& LLItemBridge::getDisplayName() const
-{
-	if(mDisplayName.empty())
-	{
-		buildDisplayName(getItem(), mDisplayName);
-	}
-	return mDisplayName;
-}
-
-void LLItemBridge::buildDisplayName(LLInventoryItem* item, std::string& name)
-{
-	if(item)
-	{
-		name.assign(item->getName());
-	}
-	else
-	{
-		name.assign(LLStringUtil::null);
-	}
-}
-
-LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const
-{
-	U8 font = LLFontGL::NORMAL;
-
-	if( gAgentWearables.isWearingItem( mUUID ) )
-	{
-		// llinfos << "BOLD" << llendl;
-		font |= LLFontGL::BOLD;
-	}
-
-	const LLViewerInventoryItem* item = getItem();
-	if (item && item->getIsLinkType())
-	{
-		font |= LLFontGL::ITALIC;
-	}
-	return (LLFontGL::StyleFlags)font;
-}
-
-std::string LLItemBridge::getLabelSuffix() const
-{
-	// String table is loaded before login screen and inventory items are
-	// loaded after login, so LLTrans should be ready.
-	static std::string NO_COPY =LLTrans::getString("no_copy");
-	static std::string NO_MOD = LLTrans::getString("no_modify");
-	static std::string NO_XFER = LLTrans::getString("no_transfer");
-	static std::string LINK = LLTrans::getString("link");
-	static std::string BROKEN_LINK = LLTrans::getString("broken_link");
-	std::string suffix;
-	LLInventoryItem* item = getItem();
-	if(item)
-	{
-		// it's a bit confusing to put nocopy/nomod/etc on calling cards.
-		if(LLAssetType::AT_CALLINGCARD != item->getType()
-		   && item->getPermissions().getOwner() == gAgent.getID())
-		{
-			BOOL broken_link = LLAssetType::lookupIsLinkType(item->getType());
-			if (broken_link) return BROKEN_LINK;
-
-			BOOL link = item->getIsLinkType();
-			if (link) return LINK;
-
-			BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
-			if (!copy)
-			{
-				suffix += NO_COPY;
-			}
-			BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID());
-			if (!mod)
-			{
-				suffix += NO_MOD;
-			}
-			BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER,
-																gAgent.getID());
-			if (!xfer)
-			{
-				suffix += NO_XFER;
-			}
-		}
-	}
-	return suffix;
-}
-
-time_t LLItemBridge::getCreationDate() const
-{
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		return item->getCreationDate();
-	}
-	return 0;
-}
-
-
-BOOL LLItemBridge::isItemRenameable() const
-{
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		// (For now) Don't allow calling card rename since that may confuse users as to
-		// what the calling card points to.
-		if (item->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
-		{
-			return FALSE;
-		}
-		return (item->getPermissions().allowModifyBy(gAgent.getID()));
-	}
-	return FALSE;
-}
-
-BOOL LLItemBridge::renameItem(const std::string& new_name)
-{
-	if(!isItemRenameable())
-		return FALSE;
-	LLPreview::dirty(mUUID);
-	LLInventoryModel* model = getInventoryModel();
-	if(!model)
-		return FALSE;
-	LLViewerInventoryItem* item = getItem();
-	if(item && (item->getName() != new_name))
-	{
-		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
-		new_item->rename(new_name);
-		buildDisplayName(new_item, mDisplayName);
-		new_item->updateServer(FALSE);
-		model->updateItem(new_item);
-
-		model->notifyObservers();
-	}
-	// return FALSE because we either notified observers (& therefore
-	// rebuilt) or we didn't update.
-	return FALSE;
-}
-
-
-BOOL LLItemBridge::removeItem()
-{
-	if(!isItemRemovable())
-	{
-		return FALSE;
-	}
-	// move it to the trash
-	LLPreview::hide(mUUID, TRUE);
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	LLViewerInventoryItem* item = getItem();
-
-	// if item is not already in trash
-	if(item && !model->isObjectDescendentOf(mUUID, trash_id))
-	{
-		// move to trash, and restamp
-		LLInvFVBridge::changeItemParent(model, item, trash_id, TRUE);
-		// delete was successful
-		return TRUE;
-	}
-	else
-	{
-		// tried to delete already item in trash (should purge?)
-		return FALSE;
-	}
-}
-
-BOOL LLItemBridge::isItemCopyable() const
-{
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		// can't copy worn objects. DEV-15183
-		LLVOAvatarSelf *avatarp = gAgent.getAvatarObject();
-		if( !avatarp )
-		{
-			return FALSE;
-		}
-
-		if(avatarp->isWearingAttachment(mUUID))
-		{
-			return FALSE;
-		}
-
-		// All items can be copied, not all can be pasted.
-		// The only time an item can't be copied is if it's a link
-		// return (item->getPermissions().allowCopyBy(gAgent.getID()));
-		if (item->getIsLinkType())
-		{
-			return FALSE;
-		}
-		return TRUE;
-	}
-	return FALSE;
-}
-BOOL LLItemBridge::copyToClipboard() const
-{
-	if(isItemCopyable())
-	{
-		LLInventoryClipboard::instance().add(mUUID);
-		return TRUE;
-	}
-	return FALSE;
-}
-
-LLViewerInventoryItem* LLItemBridge::getItem() const
-{
-	LLViewerInventoryItem* item = NULL;
-	LLInventoryModel* model = getInventoryModel();
-	if(model)
-	{
-		item = (LLViewerInventoryItem*)model->getItem(mUUID);
-	}
-	return item;
-}
-
-BOOL LLItemBridge::isItemPermissive() const
-{
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		U32 mask = item->getPermissions().getMaskBase();
-		if((mask & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED)
-		{
-			return TRUE;
-		}
-	}
-	return FALSE;
-}
-
-// +=================================================+
-// |        LLFolderBridge                           |
-// +=================================================+
-
-LLFolderBridge* LLFolderBridge::sSelf=NULL;
-
-// Can be moved to another folder
-BOOL LLFolderBridge::isItemMovable() const
-{
-	LLInventoryObject* obj = getInventoryObject();
-	if(obj)
-	{
-		return (!LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)obj)->getPreferredType()));
-	}
-	return FALSE;
-}
-
-void LLFolderBridge::selectItem()
-{
-}
-
-
-// Can be destroyed (or moved to trash)
-BOOL LLFolderBridge::isItemRemovable()
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model)
-	{
-		return FALSE;
-	}
-
-	if(!model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID()))
-	{
-		return FALSE;
-	}
-
-	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-	if( !avatar )
-	{
-		return FALSE;
-	}
-
-	LLInventoryCategory* category = model->getCategory(mUUID);
-	if( !category )
-	{
-		return FALSE;
-	}
-
-	if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
-	{
-		return FALSE;
-	}
-
-	LLInventoryModel::cat_array_t	descendent_categories;
-	LLInventoryModel::item_array_t	descendent_items;
-	gInventory.collectDescendents( mUUID, descendent_categories, descendent_items, FALSE );
-
-	S32 i;
-	for( i = 0; i < descendent_categories.count(); i++ )
-	{
-		LLInventoryCategory* category = descendent_categories[i];
-		if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
-		{
-			return FALSE;
-		}
-	}
-
-	for( i = 0; i < descendent_items.count(); i++ )
-	{
-		LLInventoryItem* item = descendent_items[i];
-		if( (item->getType() == LLAssetType::AT_CLOTHING) ||
-			(item->getType() == LLAssetType::AT_BODYPART) )
-		{
-			if(gAgentWearables.isWearingItem(item->getUUID()))
-			{
-				return FALSE;
-			}
-		}
-		else
-		if( item->getType() == LLAssetType::AT_OBJECT )
-		{
-			if(avatar->isWearingAttachment(item->getUUID()))
-			{
-				return FALSE;
-			}
-		}
-	}
-
-	return TRUE;
-}
-
-BOOL LLFolderBridge::isUpToDate() const
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-	LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID);
-	if( !category )
-	{
-		return FALSE;
-	}
-
-	return category->getVersion() != LLViewerInventoryCategory::VERSION_UNKNOWN;
-}
-
-BOOL LLFolderBridge::isItemCopyable() const
-{
-	return TRUE;
-}
-
-BOOL LLFolderBridge::copyToClipboard() const
-{
-	if(isItemCopyable())
-	{
-		LLInventoryClipboard::instance().add(mUUID);
-		return TRUE;
-	}
-	return FALSE;
-}
-
-BOOL LLFolderBridge::isClipboardPasteable() const
-{
-	if ( ! LLInvFVBridge::isClipboardPasteable() )
-		return FALSE;
-
-	// Don't allow pasting duplicates to the Calling Card/Friends subfolders, see bug EXT-1599
-	if ( LLFriendCardsManager::instance().isCategoryInFriendFolder( getCategory() ) )
-	{
-		LLInventoryModel* model = getInventoryModel();
-		if ( !model )
-		{
-			return FALSE;
-		}
-
-		LLDynamicArray<LLUUID> objects;
-		LLInventoryClipboard::instance().retrieve(objects);
-		const LLViewerInventoryCategory *current_cat = getCategory();
-
-		// Search for the direct descendent of current Friends subfolder among all pasted items,
-		// and return false if is found.
-		for(S32 i = objects.count() - 1; i >= 0; --i)
-		{
-			const LLUUID &obj_id = objects.get(i);
-			if ( LLFriendCardsManager::instance().isObjDirectDescendentOfCategory(model->getObject(obj_id), current_cat) )
-			{
-				return FALSE;
-			}
-		}
-
-	}
-	return TRUE;
-}
-
-BOOL LLFolderBridge::isClipboardPasteableAsLink() const
-{
-	// Check normal paste-as-link permissions
-	if (!LLInvFVBridge::isClipboardPasteableAsLink())
-	{
-		return FALSE;
-	}
-
-	const LLInventoryModel* model = getInventoryModel();
-	if (!model)
-	{
-		return FALSE;
-	}
-
-	const LLViewerInventoryCategory *current_cat = getCategory();
-	if (current_cat)
-	{
-		const BOOL is_in_friend_folder = LLFriendCardsManager::instance().isCategoryInFriendFolder( current_cat );
-		const LLUUID &current_cat_id = current_cat->getUUID();
-		LLDynamicArray<LLUUID> objects;
-		LLInventoryClipboard::instance().retrieve(objects);
-		S32 count = objects.count();
-		for(S32 i = 0; i < count; i++)
-		{
-			const LLUUID &obj_id = objects.get(i);
-			const LLInventoryCategory *cat = model->getCategory(obj_id);
-			if (cat)
-			{
-				const LLUUID &cat_id = cat->getUUID();
-				// Don't allow recursive pasting
-				if ((cat_id == current_cat_id) ||
-					model->isObjectDescendentOf(current_cat_id, cat_id))
-				{
-					return FALSE;
-				}
-			}
-			// Don't allow pasting duplicates to the Calling Card/Friends subfolders, see bug EXT-1599
-			if ( is_in_friend_folder )
-			{
-				// If object is direct descendent of current Friends subfolder than return false.
-				// Note: We can't use 'const LLInventoryCategory *cat', because it may be null
-				// in case type of obj_id is LLInventoryItem.
-				if ( LLFriendCardsManager::instance().isObjDirectDescendentOfCategory(model->getObject(obj_id), current_cat) )
-				{
-					return FALSE;
-				}
-			}
-		}
-	}
-	return TRUE;
-
-}
-
-BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
-											BOOL drop)
-{
-	// This should never happen, but if an inventory item is incorrectly parented,
-	// the UI will get confused and pass in a NULL.
-	if(!inv_cat) return FALSE;
-
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-
-	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-	if(!avatar) return FALSE;
-
-	// cannot drag categories into library
-	if(!isAgentInventory())
-	{
-		return FALSE;
-	}
-
-	// check to make sure source is agent inventory, and is represented there.
-	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
-	BOOL is_agent_inventory = (model->getCategory(inv_cat->getUUID()) != NULL)
-		&& (LLToolDragAndDrop::SOURCE_AGENT == source);
-
-	BOOL accept = FALSE;
-	S32 i;
-	LLInventoryModel::cat_array_t	descendent_categories;
-	LLInventoryModel::item_array_t	descendent_items;
-	if(is_agent_inventory)
-	{
-		const LLUUID& cat_id = inv_cat->getUUID();
-
-		// Is the destination the trash?
-		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-		BOOL move_is_into_trash = (mUUID == trash_id)
-				|| model->isObjectDescendentOf(mUUID, trash_id);
-		BOOL is_movable = (!LLAssetType::lookupIsProtectedCategoryType(inv_cat->getPreferredType()));
-		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
-		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
-		if (move_is_into_current_outfit || move_is_into_outfit)
-		{
-			// BAP - restrictions?
-			is_movable = true;
-		}
-
-		if (mUUID == gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE))
-		{
-			is_movable = FALSE; // It's generally movable but not into Favorites folder. EXT-1604
-		}
-
-		if( is_movable )
-		{
-			gInventory.collectDescendents( cat_id, descendent_categories, descendent_items, FALSE );
-
-			for( i = 0; i < descendent_categories.count(); i++ )
-			{
-				LLInventoryCategory* category = descendent_categories[i];
-				if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
-				{
-					// ...can't move "special folders" like Textures
-					is_movable = FALSE;
-					break;
-				}
-			}
-
-			if( is_movable )
-			{
-				if( move_is_into_trash )
-				{
-					for( i = 0; i < descendent_items.count(); i++ )
-					{
-						LLInventoryItem* item = descendent_items[i];
-						if( (item->getType() == LLAssetType::AT_CLOTHING) ||
-							(item->getType() == LLAssetType::AT_BODYPART) )
-						{
-							if( gAgentWearables.isWearingItem( item->getUUID() ) )
-							{
-								is_movable = FALSE;  // It's generally movable, but not into the trash!
-								break;
-							}
-						}
-						else
-						if( item->getType() == LLAssetType::AT_OBJECT )
-						{
-							if( avatar->isWearingAttachment( item->getUUID() ) )
-							{
-								is_movable = FALSE;  // It's generally movable, but not into the trash!
-								break;
-							}
-						}
-					}
-				}
-			}
-		}
-
-
-		accept =	is_movable
-					&& (mUUID != cat_id)								// Can't move a folder into itself
-					&& (mUUID != inv_cat->getParentUUID())				// Avoid moves that would change nothing
-					&& !(model->isObjectDescendentOf(mUUID, cat_id));	// Avoid circularity
-		if(accept && drop)
-		{
-			// Look for any gestures and deactivate them
-			if (move_is_into_trash)
-			{
-				for (i = 0; i < descendent_items.count(); i++)
-				{
-					LLInventoryItem* item = descendent_items[i];
-					if (item->getType() == LLAssetType::AT_GESTURE
-						&& LLGestureManager::instance().isGestureActive(item->getUUID()))
-					{
-						LLGestureManager::instance().deactivateGesture(item->getUUID());
-					}
-				}
-			}
-			// if target is an outfit or current outfit folder we use link
-			if (move_is_into_current_outfit || move_is_into_outfit)
-			{
-#if SUPPORT_ENSEMBLES
-				// BAP - should skip if dup.
-				if (move_is_into_current_outfit)
-				{
-					LLAppearanceManager::wearEnsemble(inv_cat);
-				}
-				else
-				{
-					LLPointer<LLInventoryCallback> cb = NULL;
-					link_inventory_item(
-						gAgent.getID(),
-						inv_cat->getUUID(),
-						mUUID,
-						inv_cat->getName(),
-						LLAssetType::AT_LINK_FOLDER,
-						cb);
-				}
-#endif
-			}
-			else
-			{
-
-				// Reparent the folder and restamp children if it's moving
-				// into trash.
-				LLInvFVBridge::changeCategoryParent(
-					model,
-					(LLViewerInventoryCategory*)inv_cat,
-					mUUID,
-					move_is_into_trash);
-			}
-		}
-	}
-	else if(LLToolDragAndDrop::SOURCE_WORLD == source)
-	{
-		// content category has same ID as object itself
-		LLUUID object_id = inv_cat->getUUID();
-		LLUUID category_id = mUUID;
-		accept = move_inv_category_world_to_agent(object_id, category_id, drop);
-	}
-	return accept;
-}
-
-void warn_move_inventory(LLViewerObject* object, LLMoveInv* move_inv)
-{
-	const char* dialog = NULL;
-	if (object->flagScripted())
-	{
-		dialog = "MoveInventoryFromScriptedObject";
-	}
-	else
-	{
-		dialog = "MoveInventoryFromObject";
-	}
-	LLNotifications::instance().add(dialog, LLSD(), LLSD(), boost::bind(move_task_inventory_callback, _1, _2, move_inv));
-}
-
-// Move/copy all inventory items from the Contents folder of an in-world
-// object to the agent's inventory, inside a given category.
-BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
-									  const LLUUID& category_id,
-									  BOOL drop,
-									  void (*callback)(S32, void*),
-									  void* user_data)
-{
-	// Make sure the object exists. If we allowed dragging from
-	// anonymous objects, it would be possible to bypass
-	// permissions.
-	// content category has same ID as object itself
-	LLViewerObject* object = gObjectList.findObject(object_id);
-	if(!object)
-	{
-		llinfos << "Object not found for drop." << llendl;
-		return FALSE;
-	}
-
-	// this folder is coming from an object, as there is only one folder in an object, the root,
-	// we need to collect the entire contents and handle them as a group
-	InventoryObjectList inventory_objects;
-	object->getInventoryContents(inventory_objects);
-
-	if (inventory_objects.empty())
-	{
-		llinfos << "Object contents not found for drop." << llendl;
-		return FALSE;
-	}
-
-	BOOL accept = TRUE;
-	BOOL is_move = FALSE;
-
-	// coming from a task. Need to figure out if the person can
-	// move/copy this item.
-	InventoryObjectList::iterator it = inventory_objects.begin();
-	InventoryObjectList::iterator end = inventory_objects.end();
-	for ( ; it != end; ++it)
-	{
-		// coming from a task. Need to figure out if the person can
-		// move/copy this item.
-		LLPermissions perm(((LLInventoryItem*)((LLInventoryObject*)(*it)))->getPermissions());
-		if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
-			&& perm.allowTransferTo(gAgent.getID())))
-//			|| gAgent.isGodlike())
-		{
-			accept = TRUE;
-		}
-		else if(object->permYouOwner())
-		{
-			// If the object cannot be copied, but the object the
-			// inventory is owned by the agent, then the item can be
-			// moved from the task to agent inventory.
-			is_move = TRUE;
-			accept = TRUE;
-		}
-		else
-		{
-			accept = FALSE;
-			break;
-		}
-	}
-
-	if(drop && accept)
-	{
-		it = inventory_objects.begin();
-		InventoryObjectList::iterator first_it = inventory_objects.begin();
-		LLMoveInv* move_inv = new LLMoveInv;
-		move_inv->mObjectID = object_id;
-		move_inv->mCategoryID = category_id;
-		move_inv->mCallback = callback;
-		move_inv->mUserData = user_data;
-
-		for ( ; it != end; ++it)
-		{
-			two_uuids_t two(category_id, (*it)->getUUID());
-			move_inv->mMoveList.push_back(two);
-		}
-
-		if(is_move)
-		{
-			// Callback called from within here.
-			warn_move_inventory(object, move_inv);
-		}
-		else
-		{
-			LLNotification::Params params("MoveInventoryFromObject");
-			params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv));
-			LLNotifications::instance().forceResponse(params, 0);
-		}
-	}
-	return accept;
-}
-
-bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat,
-									 LLInventoryItem* item)
-{
-	// Valid COF items are:
-	// - links to wearables (body parts or clothing)
-	// - links to attachments
-	// - links to gestures
-	// - links to ensemble folders
-	LLViewerInventoryItem *linked_item = ((LLViewerInventoryItem*)item)->getLinkedItem(); // BAP - safe?
-	if (linked_item)
-	{
-		LLAssetType::EType type = linked_item->getType();
-		return (type == LLAssetType::AT_CLOTHING ||
-				type == LLAssetType::AT_BODYPART ||
-				type == LLAssetType::AT_GESTURE ||
-				type == LLAssetType::AT_OBJECT);
-	}
-	else
-	{
-		LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe?
-		// BAP remove AT_NONE support after ensembles are fully working?
-		return (linked_category &&
-				((linked_category->getPreferredType() == LLAssetType::AT_NONE) ||
-				 (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType()))));
-	}
-}
-
-
-bool LLFindWearables::operator()(LLInventoryCategory* cat,
-								 LLInventoryItem* item)
-{
-	if(item)
-	{
-		if((item->getType() == LLAssetType::AT_CLOTHING)
-		   || (item->getType() == LLAssetType::AT_BODYPART))
-		{
-			return TRUE;
-		}
-	}
-	return FALSE;
-}
-
-
-
-//Used by LLFolderBridge as callback for directory recursion.
-class LLRightClickInventoryFetchObserver : public LLInventoryFetchObserver
-{
-public:
-	LLRightClickInventoryFetchObserver() :
-		mCopyItems(false)
-	{ };
-	LLRightClickInventoryFetchObserver(const LLUUID& cat_id, bool copy_items) :
-		mCatID(cat_id),
-		mCopyItems(copy_items)
-		{ };
-	virtual void done()
-	{
-		// we've downloaded all the items, so repaint the dialog
-		LLFolderBridge::staticFolderOptionsMenu();
-
-		gInventory.removeObserver(this);
-		delete this;
-	}
-
-
-protected:
-	LLUUID mCatID;
-	bool mCopyItems;
-
-};
-
-//Used by LLFolderBridge as callback for directory recursion.
-class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver
-{
-public:
-	LLRightClickInventoryFetchDescendentsObserver(bool copy_items) : mCopyItems(copy_items) {}
-	~LLRightClickInventoryFetchDescendentsObserver() {}
-	virtual void done();
-protected:
-	bool mCopyItems;
-};
-
-void LLRightClickInventoryFetchDescendentsObserver::done()
-{
-	// Avoid passing a NULL-ref as mCompleteFolders.front() down to
-	// gInventory.collectDescendents()
-	if( mCompleteFolders.empty() )
-	{
-		llwarns << "LLRightClickInventoryFetchDescendentsObserver::done with empty mCompleteFolders" << llendl;
-		dec_busy_count();
-		gInventory.removeObserver(this);
-		delete this;
-		return;
-	}
-
-	// What we do here is get the complete information on the items in
-	// the library, and set up an observer that will wait for that to
-	// happen.
-	LLInventoryModel::cat_array_t cat_array;
-	LLInventoryModel::item_array_t item_array;
-	gInventory.collectDescendents(mCompleteFolders.front(),
-								  cat_array,
-								  item_array,
-								  LLInventoryModel::EXCLUDE_TRASH);
-	S32 count = item_array.count();
-#if 0 // HACK/TODO: Why?
-	// This early causes a giant menu to get produced, and doesn't seem to be needed.
-	if(!count)
-	{
-		llwarns << "Nothing fetched in category " << mCompleteFolders.front()
-				<< llendl;
-		dec_busy_count();
-		gInventory.removeObserver(this);
-		delete this;
-		return;
-	}
-#endif
-
-	LLRightClickInventoryFetchObserver* outfit;
-	outfit = new LLRightClickInventoryFetchObserver(mCompleteFolders.front(), mCopyItems);
-	LLInventoryFetchObserver::item_ref_t ids;
-	for(S32 i = 0; i < count; ++i)
-	{
-		ids.push_back(item_array.get(i)->getUUID());
-	}
-
-	// clean up, and remove this as an observer since the call to the
-	// outfit could notify observers and throw us into an infinite
-	// loop.
-	dec_busy_count();
-	gInventory.removeObserver(this);
-	delete this;
-
-	// increment busy count and either tell the inventory to check &
-	// call done, or add this object to the inventory for observation.
-	inc_busy_count();
-
-	// do the fetch
-	outfit->fetchItems(ids);
-	outfit->done();				//Not interested in waiting and this will be right 99% of the time.
-//Uncomment the following code for laggy Inventory UI.
-/*	if(outfit->isEverythingComplete())
-	{
-		// everything is already here - call done.
-		outfit->done();
-	}
-	else
-	{
-		// it's all on it's way - add an observer, and the inventory
-		// will call done for us when everything is here.
-		gInventory.addObserver(outfit);
-	}*/
-}
-
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLInventoryWearObserver
-//
-// Observer for "copy and wear" operation to support knowing
-// when the all of the contents have been added to inventory.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLInventoryCopyAndWearObserver : public LLInventoryObserver
-{
-public:
-	LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) :mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {}
-	virtual ~LLInventoryCopyAndWearObserver() {}
-	virtual void changed(U32 mask);
-
-protected:
-	LLUUID mCatID;
-	int    mContentsCount;
-	BOOL   mFolderAdded;
-};
-
-
-
-void LLInventoryCopyAndWearObserver::changed(U32 mask)
-{
-	if((mask & (LLInventoryObserver::ADD)) != 0)
-	{
-		if (!mFolderAdded)
-		{
-			const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
-
-			std::set<LLUUID>::const_iterator id_it = changed_items.begin();
-			std::set<LLUUID>::const_iterator id_end = changed_items.end();
-			for (;id_it != id_end; ++id_it)
-			{
-				if ((*id_it) == mCatID)
-				{
-					mFolderAdded = TRUE;
-					break;
-				}
-			}
-		}
-
-		if (mFolderAdded)
-		{
-			LLViewerInventoryCategory* category = gInventory.getCategory(mCatID);
-
-			if (NULL == category)
-			{
-				llwarns << "gInventory.getCategory(" << mCatID
-					<< ") was NULL" << llendl;
-			}
-			else
-			{
-				if (category->getDescendentCount() ==
-				    mContentsCount)
-				{
-					gInventory.removeObserver(this);
-					LLAppearanceManager::wearInventoryCategory(category, FALSE, TRUE);
-					delete this;
-				}
-			}
-		}
-
-	}
-}
-
-
-
-void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("open" == action)
-	{
-		openItem();
-		return;
-	}
-	else if ("paste" == action)
-	{
-		pasteFromClipboard();
-		return;
-	}
-	else if ("paste_link" == action)
-	{
-		pasteLinkFromClipboard();
-		return;
-	}
-	else if ("properties" == action)
-	{
-		showProperties();
-		return;
-	}
-	else if ("replaceoutfit" == action)
-	{
-		modifyOutfit(FALSE);
-		return;
-	}
-#if SUPPORT_ENSEMBLES
-	else if ("wearasensemble" == action)
-	{
-		LLInventoryModel* model = getInventoryModel();
-		if(!model) return;
-		LLViewerInventoryCategory* cat = getCategory();
-		if(!cat) return;
-		LLAppearanceManager::wearEnsemble(cat,true);
-		return;
-	}
-#endif
-	else if ("addtooutfit" == action)
-	{
-		modifyOutfit(TRUE);
-		return;
-	}
-	else if ("copy" == action)
-	{
-		copyToClipboard();
-		return;
-	}
-	else if ("removefromoutfit" == action)
-	{
-		LLInventoryModel* model = getInventoryModel();
-		if(!model) return;
-		LLViewerInventoryCategory* cat = getCategory();
-		if(!cat) return;
-
-		remove_inventory_category_from_avatar ( cat );
-		return;
-	}
-	else if ("purge" == action)
-	{
-		purgeItem(model, mUUID);
-		return;
-	}
-	else if ("restore" == action)
-	{
-		restoreItem();
-		return;
-	}
-}
-
-void LLFolderBridge::openItem()
-{
-	lldebugs << "LLFolderBridge::openItem()" << llendl;
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return;
-	bool fetching_inventory = model->fetchDescendentsOf(mUUID);
-	// Only change folder type if we have the folder contents.
-	if (!fetching_inventory)
-	{
-		// Disabling this for now, it's causing crash when new items are added to folders
-		// since folder type may change before new item item has finished processing.
-		// determineFolderType();
-	}
-}
-
-void LLFolderBridge::closeItem()
-{
-	determineFolderType();
-}
-
-void LLFolderBridge::determineFolderType()
-{
-	if (isUpToDate())
-	{
-		LLInventoryModel* model = getInventoryModel();
-		LLViewerInventoryCategory* category = model->getCategory(mUUID);
-		category->determineFolderType();
-	}
-}
-
-BOOL LLFolderBridge::isItemRenameable() const
-{
-	LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)getCategory();
-	if(cat && !LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())
-	   && (cat->getOwnerID() == gAgent.getID()))
-	{
-		return TRUE;
-	}
-	return FALSE;
-}
-
-void LLFolderBridge::restoreItem()
-{
-	LLViewerInventoryCategory* cat;
-	cat = (LLViewerInventoryCategory*)getCategory();
-	if(cat)
-	{
-		LLInventoryModel* model = getInventoryModel();
-		LLUUID new_parent = model->findCategoryUUIDForType(cat->getType());
-		// do not restamp children on restore
-		LLInvFVBridge::changeCategoryParent(model, cat, new_parent, FALSE);
-	}
-}
-
-LLAssetType::EType LLFolderBridge::getPreferredType() const
-{
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
-	LLViewerInventoryCategory* cat = getCategory();
-	if(cat)
-	{
-		preferred_type = cat->getPreferredType();
-	}
-
-	return preferred_type;
-}
-
-// Icons for folders are based on the preferred type
-LLUIImagePtr LLFolderBridge::getIcon() const
-{
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
-	LLViewerInventoryCategory* cat = getCategory();
-	if(cat)
-	{
-		preferred_type = cat->getPreferredType();
-	}
-	return getIcon(preferred_type);
-}
-
-LLUIImagePtr LLFolderBridge::getIcon(LLAssetType::EType preferred_type)
-{
-	// we only have one folder image now
-	return LLUI::getUIImage("Inv_FolderClosed");
-}
-
-BOOL LLFolderBridge::renameItem(const std::string& new_name)
-{
-	if(!isItemRenameable())
-		return FALSE;
-	LLInventoryModel* model = getInventoryModel();
-	if(!model)
-		return FALSE;
-	LLViewerInventoryCategory* cat = getCategory();
-	if(cat && (cat->getName() != new_name))
-	{
-		LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat);
-		new_cat->rename(new_name);
-		new_cat->updateServer(FALSE);
-		model->updateCategory(new_cat);
-
-		model->notifyObservers();
-	}
-	// return FALSE because we either notified observers (& therefore
-	// rebuilt) or we didn't update.
-	return FALSE;
-}
-
-BOOL LLFolderBridge::removeItem()
-{
-	if(!isItemRemovable())
-	{
-		return FALSE;
-	}
-	// move it to the trash
-	LLPreview::hide(mUUID);
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-
-	// Look for any gestures and deactivate them
-	LLInventoryModel::cat_array_t	descendent_categories;
-	LLInventoryModel::item_array_t	descendent_items;
-	gInventory.collectDescendents( mUUID, descendent_categories, descendent_items, FALSE );
-
-	S32 i;
-	for (i = 0; i < descendent_items.count(); i++)
-	{
-		LLInventoryItem* item = descendent_items[i];
-		if (item->getType() == LLAssetType::AT_GESTURE
-			&& LLGestureManager::instance().isGestureActive(item->getUUID()))
-		{
-			LLGestureManager::instance().deactivateGesture(item->getUUID());
-		}
-	}
-
-	// go ahead and do the normal remove if no 'last calling
-	// cards' are being removed.
-	LLViewerInventoryCategory* cat = getCategory();
-	if(cat)
-	{
-		LLInvFVBridge::changeCategoryParent(model, cat, trash_id, TRUE);
-	}
-
-	return TRUE;
-}
-
-void LLFolderBridge::pasteFromClipboard()
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(model && isClipboardPasteable())
-	{
-		LLInventoryItem* item = NULL;
-		LLDynamicArray<LLUUID> objects;
-		LLInventoryClipboard::instance().retrieve(objects);
-		S32 count = objects.count();
-		const LLUUID parent_id(mUUID);
-		for(S32 i = 0; i < count; i++)
-		{
-			item = model->getItem(objects.get(i));
-			if (item)
-			{
-				if(LLInventoryClipboard::instance().isCutMode())
-				{
-					// move_inventory_item() is not enough,
-					//we have to update inventory locally too
-					changeItemParent(model, dynamic_cast<LLViewerInventoryItem*>(item), parent_id, FALSE);
-				}
-				else
-				{
-					copy_inventory_item(
-						gAgent.getID(),
-						item->getPermissions().getOwner(),
-						item->getUUID(),
-						parent_id,
-						std::string(),
-						LLPointer<LLInventoryCallback>(NULL));
-				}
-			}
-		}
-	}
-}
-
-void LLFolderBridge::pasteLinkFromClipboard()
-{
-	const LLInventoryModel* model = getInventoryModel();
-	if(model)
-	{
-		LLDynamicArray<LLUUID> objects;
-		LLInventoryClipboard::instance().retrieve(objects);
-		S32 count = objects.count();
-		LLUUID parent_id(mUUID);
-		for(S32 i = 0; i < count; i++)
-		{
-			const LLUUID &object_id = objects.get(i);
-#if SUPPORT_ENSEMBLES
-			if (LLInventoryCategory *cat = model->getCategory(object_id))
-			{
-				link_inventory_item(
-					gAgent.getID(),
-					cat->getUUID(),
-					parent_id,
-					cat->getName(),
-					LLAssetType::AT_LINK_FOLDER,
-					LLPointer<LLInventoryCallback>(NULL));
-			}
-			else
-#endif
-			if (LLInventoryItem *item = model->getItem(object_id))
-			{
-				link_inventory_item(
-					gAgent.getID(),
-					item->getUUID(),
-					parent_id,
-					item->getName(),
-					LLAssetType::AT_LINK,
-					LLPointer<LLInventoryCallback>(NULL));
-			}
-		}
-	}
-}
-
-void LLFolderBridge::staticFolderOptionsMenu()
-{
-	if (!sSelf) return;
-	sSelf->folderOptionsMenu();
-}
-
-void LLFolderBridge::folderOptionsMenu()
-{
-	std::vector<std::string> disabled_items;
-
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return;
-
-	const LLInventoryCategory* category = model->getCategory(mUUID);
-	LLAssetType::EType type = category->getPreferredType();
-	const bool is_default_folder = category && LLAssetType::lookupIsProtectedCategoryType(type);
-	// BAP change once we're no longer treating regular categories as ensembles.
-	const bool is_ensemble = category && (type == LLAssetType::AT_NONE ||
-										  LLAssetType::lookupIsEnsembleCategoryType(type));
-
-	// calling card related functionality for folders.
-
-	// Only enable calling-card related options for non-default folders.
-	if (!is_default_folder)
-	{
-		LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
-		if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard))
-		{
-			mItems.push_back(std::string("Calling Card Separator"));
-			mItems.push_back(std::string("Conference Chat Folder"));
-			mItems.push_back(std::string("IM All Contacts In Folder"));
-		}
-	}
-
-	// wearables related functionality for folders.
-	//is_wearable
-	LLFindWearables is_wearable;
-	LLIsType is_object( LLAssetType::AT_OBJECT );
-	LLIsType is_gesture( LLAssetType::AT_GESTURE );
-
-	if (mWearables ||
-		checkFolderForContentsOfType(model, is_wearable)  ||
-		checkFolderForContentsOfType(model, is_object) ||
-		checkFolderForContentsOfType(model, is_gesture) )
-	{
-		mItems.push_back(std::string("Folder Wearables Separator"));
-
-		// Only enable add/replace outfit for non-default folders.
-		if (!is_default_folder)
-		{
-			mItems.push_back(std::string("Add To Outfit"));
-			mItems.push_back(std::string("Replace Outfit"));
-		}
-		if (is_ensemble)
-		{
-			mItems.push_back(std::string("Wear As Ensemble"));
-		}
-		mItems.push_back(std::string("Take Off Items"));
-	}
-	hide_context_entries(*mMenu, mItems, disabled_items);
-}
-
-BOOL LLFolderBridge::checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& is_type)
-{
-	LLInventoryModel::cat_array_t cat_array;
-	LLInventoryModel::item_array_t item_array;
-	model->collectDescendentsIf(mUUID,
-								cat_array,
-								item_array,
-								LLInventoryModel::EXCLUDE_TRASH,
-								is_type);
-	return ((item_array.count() > 0) ? TRUE : FALSE );
-}
-
-// Flags unused
-void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	mItems.clear();
-	mDisabledItems.clear();
-
-	lldebugs << "LLFolderBridge::buildContextMenu()" << llendl;
-//	std::vector<std::string> disabled_items;
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
-
-	mItems.clear(); //adding code to clear out member Items (which means Items should not have other data here at this point)
-	mDisabledItems.clear(); //adding code to clear out disabled members from previous
-	if (lost_and_found_id == mUUID)
-	  {
-		// This is the lost+found folder.
-		  mItems.push_back(std::string("Empty Lost And Found"));
-	  }
-
-	if(trash_id == mUUID)
-	{
-		// This is the trash.
-		mItems.push_back(std::string("Empty Trash"));
-	}
-	else if(model->isObjectDescendentOf(mUUID, trash_id))
-	{
-		// This is a folder in the trash.
-		mItems.clear(); // clear any items that used to exist
-		mItems.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			mDisabledItems.push_back(std::string("Purge Item"));
-		}
-
-		mItems.push_back(std::string("Restore Item"));
-	}
-	else if(isAgentInventory()) // do not allow creating in library
-	{
-		LLViewerInventoryCategory *cat =  getCategory();
-
-		// BAP removed protected check to re-enable standard ops in untyped folders.
-		// Not sure what the right thing is to do here.
-		if (!isCOFFolder() && cat /*&&
-			LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())*/)
-		{
-			// Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694.
-			if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat))
-				mItems.push_back(std::string("New Folder"));
-			mItems.push_back(std::string("New Script"));
-			mItems.push_back(std::string("New Note"));
-			mItems.push_back(std::string("New Gesture"));
-			mItems.push_back(std::string("New Clothes"));
-			mItems.push_back(std::string("New Body Parts"));
-			mItems.push_back(std::string("Change Type"));
-
-			LLViewerInventoryCategory *cat = getCategory();
-			if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))
-			{
-				mDisabledItems.push_back(std::string("Change Type"));
-			}
-
-			getClipboardEntries(false, mItems, mDisabledItems, flags);
-		}
-		else
-		{
-			// Want some but not all of the items from getClipboardEntries for outfits.
-			if (cat && cat->getPreferredType()==LLAssetType::AT_OUTFIT)
-			{
-				mItems.push_back(std::string("Rename"));
-				mItems.push_back(std::string("Delete"));
-			}
-		}
-
-		//Added by spatters to force inventory pull on right-click to display folder options correctly. 07-17-06
-		mCallingCards = mWearables = FALSE;
-
-		LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
-		if (checkFolderForContentsOfType(model, is_callingcard))
-		{
-			mCallingCards=TRUE;
-		}
-
-		LLFindWearables is_wearable;
-		LLIsType is_object( LLAssetType::AT_OBJECT );
-		LLIsType is_gesture( LLAssetType::AT_GESTURE );
-
-		if (checkFolderForContentsOfType(model, is_wearable)  ||
-			checkFolderForContentsOfType(model, is_object) ||
-			checkFolderForContentsOfType(model, is_gesture) )
-		{
-			mWearables=TRUE;
-		}
-
-		mMenu = &menu;
-		sSelf = this;
-		LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(FALSE);
-
-		LLInventoryFetchDescendentsObserver::folder_ref_t folders;
-		LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID);
-		if (category)
-		{
-			folders.push_back(category->getUUID());
-		}
-		fetch->fetchDescendents(folders);
-		inc_busy_count();
-		if(fetch->isEverythingComplete())
-		{
-			// everything is already here - call done.
-			fetch->done();
-		}
-		else
-		{
-			// it's all on it's way - add an observer, and the inventory
-			// will call done for us when everything is here.
-			gInventory.addObserver(fetch);
-		}
-	}
-	else
-	{
-		mItems.push_back(std::string("--no options--"));
-		mDisabledItems.push_back(std::string("--no options--"));
-	}
-	hide_context_entries(menu, mItems, mDisabledItems);
-}
-
-BOOL LLFolderBridge::hasChildren() const
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-	LLInventoryModel::EHasChildren has_children;
-	has_children = gInventory.categoryHasChildren(mUUID);
-	return has_children != LLInventoryModel::CHILDREN_NO;
-}
-
-BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop,
-								EDragAndDropType cargo_type,
-								void* cargo_data)
-{
-	//llinfos << "LLFolderBridge::dragOrDrop()" << llendl;
-	BOOL accept = FALSE;
-	switch(cargo_type)
-	{
-		case DAD_TEXTURE:
-		case DAD_SOUND:
-		case DAD_CALLINGCARD:
-		case DAD_LANDMARK:
-		case DAD_SCRIPT:
-		case DAD_OBJECT:
-		case DAD_NOTECARD:
-		case DAD_CLOTHING:
-		case DAD_BODYPART:
-		case DAD_ANIMATION:
-		case DAD_GESTURE:
-		case DAD_LINK:
-			accept = dragItemIntoFolder((LLInventoryItem*)cargo_data,
-										drop);
-			break;
-		case DAD_CATEGORY:
-			if (LLFriendCardsManager::instance().isAnyFriendCategory(mUUID))
-			{
-				accept = FALSE;
-			}
-			else
-			{
-				accept = dragCategoryIntoFolder((LLInventoryCategory*)cargo_data, drop);
-			}
-			break;
-		default:
-			break;
-	}
-	return accept;
-}
-
-LLViewerInventoryCategory* LLFolderBridge::getCategory() const
-{
-	LLViewerInventoryCategory* cat = NULL;
-	LLInventoryModel* model = getInventoryModel();
-	if(model)
-	{
-		cat = (LLViewerInventoryCategory*)model->getCategory(mUUID);
-	}
-	return cat;
-}
-
-
-// static
-void LLFolderBridge::pasteClipboard(void* user_data)
-{
-	LLFolderBridge* self = (LLFolderBridge*)user_data;
-	if(self) self->pasteFromClipboard();
-}
-
-void LLFolderBridge::createNewCategory(void* user_data)
-{
-	LLFolderBridge* bridge = (LLFolderBridge*)user_data;
-	if(!bridge) return;
-	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(bridge->mInventoryPanel.get());
-	if (!panel) return;
-	LLInventoryModel* model = panel->getModel();
-	if(!model) return;
-	LLUUID id;
-	id = model->createNewCategory(bridge->getUUID(),
-								  LLAssetType::AT_NONE,
-								  LLStringUtil::null);
-	model->notifyObservers();
-
-	// At this point, the bridge has probably been deleted, but the
-	// view is still there.
-	panel->setSelection(id, TAKE_FOCUS_YES);
-}
-
-void LLFolderBridge::createNewShirt(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHIRT);
-}
-
-void LLFolderBridge::createNewPants(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_PANTS);
-}
-
-void LLFolderBridge::createNewShoes(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHOES);
-}
-
-void LLFolderBridge::createNewSocks(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SOCKS);
-}
-
-void LLFolderBridge::createNewJacket(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_JACKET);
-}
-
-void LLFolderBridge::createNewSkirt(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SKIRT);
-}
-
-void LLFolderBridge::createNewGloves(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_GLOVES);
-}
-
-void LLFolderBridge::createNewUndershirt(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_UNDERSHIRT);
-}
-
-void LLFolderBridge::createNewUnderpants(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_UNDERPANTS);
-}
-
-void LLFolderBridge::createNewShape(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHAPE);
-}
-
-void LLFolderBridge::createNewSkin(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SKIN);
-}
-
-void LLFolderBridge::createNewHair(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_HAIR);
-}
-
-void LLFolderBridge::createNewEyes(void* user_data)
-{
-	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_EYES);
-}
-
-// static
-void LLFolderBridge::createWearable(LLFolderBridge* bridge, EWearableType type)
-{
-	if(!bridge) return;
-	LLUUID parent_id = bridge->getUUID();
-	createWearable(parent_id, type);
-}
-
-// Separate function so can be called by global menu as well as right-click
-// menu.
-// static
-void LLFolderBridge::createWearable(LLUUID parent_id, EWearableType type)
-{
-	LLWearable* wearable = LLWearableList::instance().createNewWearable(type);
-	LLAssetType::EType asset_type = wearable->getAssetType();
-	LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE;
-	create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
-		parent_id, wearable->getTransactionID(), wearable->getName(),
-		wearable->getDescription(), asset_type, inv_type, wearable->getType(),
-		wearable->getPermissions().getMaskNextOwner(),
-		LLPointer<LLInventoryCallback>(NULL));
-}
-
-void LLFolderBridge::modifyOutfit(BOOL append)
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return;
-	LLViewerInventoryCategory* cat = getCategory();
-	if(!cat) return;
-
-	// BAP - was:
-	// wear_inventory_category_on_avatar( cat, append );
-	LLAppearanceManager::wearInventoryCategory( cat, FALSE, append );
-}
-
-// helper stuff
-bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv* move_inv)
-{
-	LLFloaterOpenObject::LLCatAndWear* cat_and_wear = (LLFloaterOpenObject::LLCatAndWear* )move_inv->mUserData;
-	LLViewerObject* object = gObjectList.findObject(move_inv->mObjectID);
-	S32 option = LLNotification::getSelectedOption(notification, response);
-
-	if(option == 0 && object)
-	{
-		if (cat_and_wear && cat_and_wear->mWear)
-		{
-			InventoryObjectList inventory_objects;
-			object->getInventoryContents(inventory_objects);
-			int contents_count = inventory_objects.size()-1; //subtract one for containing folder
-
-			LLInventoryCopyAndWearObserver* inventoryObserver = new LLInventoryCopyAndWearObserver(cat_and_wear->mCatID, contents_count);
-			gInventory.addObserver(inventoryObserver);
-		}
-
-		two_uuids_list_t::iterator move_it;
-		for (move_it = move_inv->mMoveList.begin();
-			move_it != move_inv->mMoveList.end();
-			++move_it)
-		{
-			object->moveInventory(move_it->first, move_it->second);
-		}
-
-		// update the UI.
-		dialog_refresh_all();
-	}
-
-	if (move_inv->mCallback)
-	{
-		move_inv->mCallback(option, move_inv->mUserData);
-	}
-
-	delete move_inv;
-	return false;
-}
-
-/*
-Next functions intended to reorder items in the inventory folder and save order on server
-Is now used for Favorites folder.
-
-*TODO: refactoring is needed with Favorites Bar functionality. Probably should be moved in LLInventoryModel
-*/
-void saveItemsOrder(LLInventoryModel::item_array_t& items)
-{
-	int sortField = 0;
-
-	// current order is saved by setting incremental values (1, 2, 3, ...) for the sort field
-	for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i)
-	{
-		LLViewerInventoryItem* item = *i;
-
-		item->setSortField(++sortField);
-		item->setComplete(TRUE);
-		item->updateServer(FALSE);
-
-		gInventory.updateItem(item);
-	}
-
-	gInventory.notifyObservers();
-}
-
-LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id)
-{
-	LLInventoryModel::item_array_t::iterator result = items.end();
-
-	for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i)
-	{
-		if ((*i)->getUUID() == id)
-		{
-			result = i;
-			break;
-		}
-	}
-
-	return result;
-}
-
-void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId)
-{
-	LLViewerInventoryItem* srcItem = gInventory.getItem(srcItemId);
-	LLViewerInventoryItem* destItem = gInventory.getItem(destItemId);
-
-	items.erase(findItemByUUID(items, srcItem->getUUID()));
-	items.insert(findItemByUUID(items, destItem->getUUID()), srcItem);
-}
-
-BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
-										BOOL drop)
-{
-	LLInventoryModel* model = getInventoryModel();
-	if(!model) return FALSE;
-
-	// cannot drag into library
-	if(!isAgentInventory())
-	{
-		return FALSE;
-	}
-
-	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-	if(!avatar) return FALSE;
-
-	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
-	BOOL accept = FALSE;
-	LLViewerObject* object = NULL;
-	if(LLToolDragAndDrop::SOURCE_AGENT == source)
-	{
-
-		BOOL is_movable = TRUE;
-		switch( inv_item->getActualType() )
-		{
-		case LLAssetType::AT_ROOT_CATEGORY:
-			is_movable = FALSE;
-			break;
-
-		case LLAssetType::AT_CATEGORY:
-			is_movable = !LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)inv_item)->getPreferredType());
-			break;
-		default:
-			break;
-		}
-
-		LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-		BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
-		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
-		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
-
-		if(is_movable && move_is_into_trash)
-		{
-			switch(inv_item->getType())
-			{
-			case LLAssetType::AT_CLOTHING:
-			case LLAssetType::AT_BODYPART:
-				is_movable = !gAgentWearables.isWearingItem(inv_item->getUUID());
-				break;
-
-			case LLAssetType::AT_OBJECT:
-				is_movable = !avatar->isWearingAttachment(inv_item->getUUID());
-				break;
-			default:
-				break;
-			}
-		}
-
-		if ( is_movable )
-		{
-			// Don't allow creating duplicates in the Calling Card/Friends
-			// subfolders, see bug EXT-1599. Check is item direct descendent
-			// of target folder and forbid item's movement if it so.
-			// Note: isItemDirectDescendentOfCategory checks if
-			// passed category is in the Calling Card/Friends folder
-			is_movable = ! LLFriendCardsManager::instance()
-				.isObjDirectDescendentOfCategory (inv_item, getCategory());
-		}
-
-		LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
-
-		// we can move item inside a folder only if this folder is Favorites. See EXT-719
-		accept = is_movable && ((mUUID != inv_item->getParentUUID()) || (mUUID == favorites_id));
-		if(accept && drop)
-		{
-			if (inv_item->getType() == LLAssetType::AT_GESTURE
-				&& LLGestureManager::instance().isGestureActive(inv_item->getUUID()) && move_is_into_trash)
-			{
-				LLGestureManager::instance().deactivateGesture(inv_item->getUUID());
-			}
-			// If an item is being dragged between windows, unselect
-			// everything in the active window so that we don't follow
-			// the selection to its new location (which is very
-			// annoying).
-			if (LLFloaterInventory::getActiveInventory())
-			{
-				LLInventoryPanel* active_panel = LLFloaterInventory::getActiveInventory()->getPanel();
-				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
-				if (active_panel && (panel != active_panel))
-				{
-					active_panel->unSelectAll();
-				}
-			}
-
-			// if dragging from/into favorites folder only reorder items
-			if ((mUUID == inv_item->getParentUUID()) && (favorites_id == mUUID))
-			{
-				LLInventoryModel::cat_array_t cats;
-				LLInventoryModel::item_array_t items;
-				LLIsType is_type(LLAssetType::AT_LANDMARK);
-				model->collectDescendentsIf(favorites_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type);
-
-				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
-				LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
-				if (itemp)
-				{
-					LLUUID srcItemId = inv_item->getUUID();
-					LLUUID destItemId = itemp->getListener()->getUUID();
-
-					// update order
-					updateItemsOrder(items, srcItemId, destItemId);
-
-					saveItemsOrder(items);
-				}
-			}
-			else if (favorites_id == mUUID) // if target is the favorites folder we use copy
-			{
-				copy_inventory_item(
-					gAgent.getID(),
-					inv_item->getPermissions().getOwner(),
-					inv_item->getUUID(),
-					mUUID,
-					std::string(),
-					LLPointer<LLInventoryCallback>(NULL));
-			}
-			else if (move_is_into_current_outfit || move_is_into_outfit)
-			{
-				// BAP - should skip if dup.
-				if (move_is_into_current_outfit)
-				{
-					LLAppearanceManager::wearItem(inv_item);
-				}
-				else
-				{
-					LLPointer<LLInventoryCallback> cb = NULL;
-					link_inventory_item(
-						gAgent.getID(),
-						inv_item->getUUID(),
-						mUUID,
-						std::string(),
-						LLAssetType::AT_LINK,
-						cb);
-				}
-			}
-			else
-			{
-				// restamp if the move is into the trash.
-				LLInvFVBridge::changeItemParent(
-					model,
-					(LLViewerInventoryItem*)inv_item,
-					mUUID,
-					move_is_into_trash);
-			}
-		}
-	}
-	else if(LLToolDragAndDrop::SOURCE_WORLD == source)
-	{
-		// Make sure the object exists. If we allowed dragging from
-		// anonymous objects, it would be possible to bypass
-		// permissions.
-		object = gObjectList.findObject(inv_item->getParentUUID());
-		if(!object)
-		{
-			llinfos << "Object not found for drop." << llendl;
-			return FALSE;
-		}
-
-		// coming from a task. Need to figure out if the person can
-		// move/copy this item.
-		LLPermissions perm(inv_item->getPermissions());
-		BOOL is_move = FALSE;
-		if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
-			&& perm.allowTransferTo(gAgent.getID())))
-//		   || gAgent.isGodlike())
-
-		{
-			accept = TRUE;
-		}
-		else if(object->permYouOwner())
-		{
-			// If the object cannot be copied, but the object the
-			// inventory is owned by the agent, then the item can be
-			// moved from the task to agent inventory.
-			is_move = TRUE;
-			accept = TRUE;
-		}
-		if(drop && accept)
-		{
-			LLMoveInv* move_inv = new LLMoveInv;
-			move_inv->mObjectID = inv_item->getParentUUID();
-			two_uuids_t item_pair(mUUID, inv_item->getUUID());
-			move_inv->mMoveList.push_back(item_pair);
-			move_inv->mCallback = NULL;
-			move_inv->mUserData = NULL;
-			if(is_move)
-			{
-				warn_move_inventory(object, move_inv);
-			}
-			else
-			{
-				LLNotification::Params params("MoveInventoryFromObject");
-				params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv));
-				LLNotifications::instance().forceResponse(params, 0);
-			}
-		}
-
-	}
-	else if(LLToolDragAndDrop::SOURCE_NOTECARD == source)
-	{
-		accept = TRUE;
-		if(drop)
-		{
-			copy_inventory_from_notecard(LLToolDragAndDrop::getInstance()->getObjectID(),
-				LLToolDragAndDrop::getInstance()->getSourceID(), inv_item);
-		}
-	}
-	else if(LLToolDragAndDrop::SOURCE_LIBRARY == source)
-	{
-		LLViewerInventoryItem* item = (LLViewerInventoryItem*)inv_item;
-		if(item && item->isComplete())
-		{
-			accept = TRUE;
-			if(drop)
-			{
-				copy_inventory_item(
-					gAgent.getID(),
-					inv_item->getPermissions().getOwner(),
-					inv_item->getUUID(),
-					mUUID,
-					std::string(),
-					LLPointer<LLInventoryCallback>(NULL));
-			}
-		}
-	}
-	else
-	{
-		llwarns << "unhandled drag source" << llendl;
-	}
-	return accept;
-}
-
-// +=================================================+
-// |        LLScriptBridge (DEPRECTED)               |
-// +=================================================+
-
-LLUIImagePtr LLScriptBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
-}
-
-// +=================================================+
-// |        LLTextureBridge                          |
-// +=================================================+
-
-LLUIImagePtr LLTextureBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_TEXTURE, mInvType, 0, FALSE);
-}
-
-void LLTextureBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-}
-
-// +=================================================+
-// |        LLSoundBridge                            |
-// +=================================================+
-
-LLUIImagePtr LLSoundBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE);
-}
-
-void LLSoundBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-/*
-// Changed this back to the way it USED to work:
-// only open the preview dialog through the contextual right-click menu
-// double-click just plays the sound
-
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		openSoundPreview((void*)this);
-		//send_uuid_sound_trigger(item->getAssetUUID(), 1.0);
-	}
-*/
-}
-
-void LLSoundBridge::previewItem()
-{
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		send_sound_trigger(item->getAssetUUID(), 1.0);
-	}
-}
-
-void LLSoundBridge::openSoundPreview(void* which)
-{
-	LLSoundBridge *me = (LLSoundBridge *)which;
-	LLFloaterReg::showInstance("preview_sound", LLSD(me->mUUID), TAKE_FOCUS_YES);
-}
-
-void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	lldebugs << "LLTextureBridge::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		items.push_back(std::string("Sound Open"));
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-	}
-
-	items.push_back(std::string("Sound Separator"));
-	items.push_back(std::string("Sound Play"));
-
-	hide_context_entries(menu, items, disabled_items);
-}
-
-// +=================================================+
-// |        LLLandmarkBridge                         |
-// +=================================================+
-
-LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags/* = 0x00*/) :
-LLItemBridge(inventory, uuid)
-{
-	mVisited = FALSE;
-	if (flags & LLInventoryItem::II_FLAGS_LANDMARK_VISITED)
-	{
-		mVisited = TRUE;
-	}
-}
-
-LLUIImagePtr LLLandmarkBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, mVisited, FALSE);
-}
-
-void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	lldebugs << "LLLandmarkBridge::buildContextMenu()" << llendl;
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		items.push_back(std::string("Landmark Open"));
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-	}
-
-	items.push_back(std::string("Landmark Separator"));
-	items.push_back(std::string("About Landmark"));
-
-	// Disable "About Landmark" menu item for
-	// multiple landmarks selected. Only one landmark
-	// info panel can be shown at a time.
-	if ((flags & FIRST_SELECTED_ITEM) == 0)
-	{
-		disabled_items.push_back(std::string("About Landmark"));
-	}
-
-	hide_context_entries(menu, items, disabled_items);
-}
-
-// Convenience function for the two functions below.
-void teleport_via_landmark(const LLUUID& asset_id)
-{
-	gAgent.teleportViaLandmark( asset_id );
-
-	// we now automatically track the landmark you're teleporting to
-	// because you'll probably arrive at a telehub instead
-	LLFloaterWorldMap* floater_world_map = LLFloaterWorldMap::getInstance();
-	if( floater_world_map )
-	{
-		floater_world_map->trackLandmark( asset_id );
-	}
-}
-
-// virtual
-void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("teleport" == action)
-	{
-		LLViewerInventoryItem* item = getItem();
-		if(item)
-		{
-			teleport_via_landmark(item->getAssetUUID());
-		}
-	}
-	else if ("about" == action)
-	{
-		LLViewerInventoryItem* item = getItem();
-		if(item)
-		{
-			LLSD key;
-			key["type"] = "landmark";
-			key["id"] = item->getUUID();
-
-			LLSideTray::getInstance()->showPanel("panel_places", key);
-		}
-	}
-	else
-	{
-		LLItemBridge::performAction(folder, model, action);
-	}
-}
-
-static bool open_landmark_callback(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotification::getSelectedOption(notification, response);
-
-	LLUUID asset_id = notification["payload"]["asset_id"].asUUID();
-	if (option == 0)
-	{
-		teleport_via_landmark(asset_id);
-	}
-
-	return false;
-}
-static LLNotificationFunctorRegistration open_landmark_callback_reg("TeleportFromLandmark", open_landmark_callback);
-
-
-void LLLandmarkBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-/*
-	LLViewerInventoryItem* item = getItem();
-	if( item )
-	{
-		// Opening (double-clicking) a landmark immediately teleports,
-		// but warns you the first time.
-		// open_landmark(item);
-		LLSD payload;
-		payload["asset_id"] = item->getAssetUUID();
-		LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload);
-	}
-*/
-}
-
-
-// +=================================================+
-// |        LLCallingCardObserver                    |
-// +=================================================+
-void LLCallingCardObserver::changed(U32 mask)
-{
-	mBridgep->refreshFolderViewItem();
-}
-
-// +=================================================+
-// |        LLCallingCardBridge                      |
-// +=================================================+
-
-LLCallingCardBridge::LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) :
-	LLItemBridge(inventory, uuid)
-{
-	mObserver = new LLCallingCardObserver(this);
-	LLAvatarTracker::instance().addObserver(mObserver);
-}
-
-LLCallingCardBridge::~LLCallingCardBridge()
-{
-	LLAvatarTracker::instance().removeObserver(mObserver);
-	delete mObserver;
-}
-
-void LLCallingCardBridge::refreshFolderViewItem()
-{
-	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
-	LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getItemByID(mUUID) : NULL;
-	if (itemp)
-	{
-		itemp->refresh();
-	}
-}
-
-// virtual
-void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("begin_im" == action)
-	{
-		LLViewerInventoryItem *item = getItem();
-		if (item && (item->getCreatorUUID() != gAgent.getID()) &&
-			(!item->getCreatorUUID().isNull()))
-		{
-			std::string callingcard_name;
-			gCacheName->getFullName(item->getCreatorUUID(), callingcard_name);
-			gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID());
-		}
-	}
-	else if ("lure" == action)
-	{
-		LLViewerInventoryItem *item = getItem();
-		if (item && (item->getCreatorUUID() != gAgent.getID()) &&
-			(!item->getCreatorUUID().isNull()))
-		{
-			LLAvatarActions::offerTeleport(item->getCreatorUUID());
-		}
-	}
-	else LLItemBridge::performAction(folder, model, action);
-}
-
-LLUIImagePtr LLCallingCardBridge::getIcon() const
-{
-	BOOL online = FALSE;
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		online = LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID());
-	}
-	return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, online, FALSE);
-}
-
-std::string LLCallingCardBridge::getLabelSuffix() const
-{
-	LLViewerInventoryItem* item = getItem();
-	if( item && LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID()) )
-	{
-		return LLItemBridge::getLabelSuffix() + " (online)";
-	}
-	else
-	{
-		return LLItemBridge::getLabelSuffix();
-	}
-}
-
-void LLCallingCardBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-/*
-	LLViewerInventoryItem* item = getItem();
-	if(item && !item->getCreatorUUID().isNull())
-	{
-		LLAvatarActions::showProfile(item->getCreatorUUID());
-	}
-*/
-}
-
-void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	lldebugs << "LLCallingCardBridge::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		items.push_back(std::string("Open"));
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-
-		LLInventoryItem* item = getItem();
-		BOOL good_card = (item
-						  && (LLUUID::null != item->getCreatorUUID())
-						  && (item->getCreatorUUID() != gAgent.getID()));
-		BOOL user_online = (LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID()));
-		items.push_back(std::string("Send Instant Message Separator"));
-		items.push_back(std::string("Send Instant Message"));
-		items.push_back(std::string("Offer Teleport..."));
-		items.push_back(std::string("Conference Chat"));
-
-		if (!good_card)
-		{
-			disabled_items.push_back(std::string("Send Instant Message"));
-		}
-		if (!good_card || !user_online)
-		{
-			disabled_items.push_back(std::string("Offer Teleport..."));
-			disabled_items.push_back(std::string("Conference Chat"));
-		}
-	}
-	hide_context_entries(menu, items, disabled_items);
-}
-
-BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop,
-									 EDragAndDropType cargo_type,
-									 void* cargo_data)
-{
-	LLViewerInventoryItem* item = getItem();
-	BOOL rv = FALSE;
-	if(item)
-	{
-		// check the type
-		switch(cargo_type)
-		{
-		case DAD_TEXTURE:
-		case DAD_SOUND:
-		case DAD_LANDMARK:
-		case DAD_SCRIPT:
-		case DAD_CLOTHING:
-		case DAD_OBJECT:
-		case DAD_NOTECARD:
-		case DAD_BODYPART:
-		case DAD_ANIMATION:
-		case DAD_GESTURE:
-			{
-				LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data;
-				const LLPermissions& perm = inv_item->getPermissions();
-				if(gInventory.getItem(inv_item->getUUID())
-				   && perm.allowOperationBy(PERM_TRANSFER, gAgent.getID()))
-				{
-					rv = TRUE;
-					if(drop)
-					{
-						LLToolDragAndDrop::giveInventory(item->getCreatorUUID(),
-														 (LLInventoryItem*)cargo_data);
-					}
-				}
-				else
-				{
-					// It's not in the user's inventory (it's probably in
-					// an object's contents), so disallow dragging it here.
-					// You can't give something you don't yet have.
-					rv = FALSE;
-				}
-				break;
-			}
-		case DAD_CATEGORY:
-			{
-				LLInventoryCategory* inv_cat = (LLInventoryCategory*)cargo_data;
-				if( gInventory.getCategory( inv_cat->getUUID() ) )
-				{
-					rv = TRUE;
-					if(drop)
-					{
-						LLToolDragAndDrop::giveInventoryCategory(
-							item->getCreatorUUID(),
-							inv_cat);
-					}
-				}
-				else
-				{
-					// It's not in the user's inventory (it's probably in
-					// an object's contents), so disallow dragging it here.
-					// You can't give something you don't yet have.
-					rv = FALSE;
-				}
-				break;
-			}
-		default:
-			break;
-		}
-	}
-	return rv;
-}
-
-BOOL LLCallingCardBridge::removeItem()
-{
-	if (LLFriendCardsManager::instance().isItemInAnyFriendsList(getItem()))
-	{
-		LLAvatarActions::removeFriendDialog(getItem()->getCreatorUUID());
-		return FALSE;
-	}
-	else
-	{
-		return LLItemBridge::removeItem();
-	}
-}
-// +=================================================+
-// |        LLNotecardBridge                         |
-// +=================================================+
-
-LLUIImagePtr LLNotecardBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE);
-}
-
-void LLNotecardBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-
-/*
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
-	}
-*/
-}
-
-
-// +=================================================+
-// |        LLGestureBridge                          |
-// +=================================================+
-
-LLUIImagePtr LLGestureBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE);
-}
-
-LLFontGL::StyleFlags LLGestureBridge::getLabelStyle() const
-{
-	if( LLGestureManager::instance().isGestureActive(mUUID) )
-	{
-		return LLFontGL::BOLD;
-	}
-	else
-	{
-		return LLFontGL::NORMAL;
-	}
-}
-
-std::string LLGestureBridge::getLabelSuffix() const
-{
-	if( LLGestureManager::instance().isGestureActive(mUUID) )
-	{
-		return LLItemBridge::getLabelSuffix() + " (active)";
-	}
-	else
-	{
-		return LLItemBridge::getLabelSuffix();
-	}
-}
-
-// virtual
-void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("activate" == action)
-	{
-		LLGestureManager::instance().activateGesture(mUUID);
-
-		LLViewerInventoryItem* item = gInventory.getItem(mUUID);
-		if (!item) return;
-
-		// Since we just changed the suffix to indicate (active)
-		// the server doesn't need to know, just the viewer.
-		gInventory.updateItem(item);
-		gInventory.notifyObservers();
-	}
-	else if ("deactivate" == action)
-	{
-		LLGestureManager::instance().deactivateGesture(mUUID);
-
-		LLViewerInventoryItem* item = gInventory.getItem(mUUID);
-		if (!item) return;
-
-		// Since we just changed the suffix to indicate (active)
-		// the server doesn't need to know, just the viewer.
-		gInventory.updateItem(item);
-		gInventory.notifyObservers();
-	}
-	else LLItemBridge::performAction(folder, model, action);
-}
-
-void LLGestureBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-/*
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null);
-		preview->setFocus(TRUE);
-	}
-*/
-}
-
-BOOL LLGestureBridge::removeItem()
-{
-	// Force close the preview window, if it exists
-	LLGestureManager::instance().deactivateGesture(mUUID);
-	return LLItemBridge::removeItem();
-}
-
-void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	lldebugs << "LLGestureBridge::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		items.push_back(std::string("Open"));
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-
-		items.push_back(std::string("Gesture Separator"));
-		items.push_back(std::string("Activate"));
-		items.push_back(std::string("Deactivate"));
-	}
-	hide_context_entries(menu, items, disabled_items);
-}
-
-// +=================================================+
-// |        LLAnimationBridge                        |
-// +=================================================+
-
-LLUIImagePtr LLAnimationBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE);
-}
-
-void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	lldebugs << "LLAnimationBridge::buildContextMenu()" << llendl;
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		items.push_back(std::string("Animation Open"));
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-	}
-
-	items.push_back(std::string("Animation Separator"));
-	items.push_back(std::string("Animation Play"));
-	items.push_back(std::string("Animation Audition"));
-
-	hide_context_entries(menu, items, disabled_items);
-
-}
-
-// virtual
-void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ((action == "playworld") || (action == "playlocal"))
-	{
-		if (getItem())
-		{
-			LLPreviewAnim::e_activation_type activate = LLPreviewAnim::NONE;
-			if ("playworld" == action) activate = LLPreviewAnim::PLAY;
-			if ("playlocal" == action) activate = LLPreviewAnim::AUDITION;
-
-			LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID));
-			if (preview)
-			{
-				preview->activate(activate);
-			}
-		}
-	}
-	else
-	{
-		LLItemBridge::performAction(folder, model, action);
-	}
-}
-
-void LLAnimationBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-/*
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
-	}
-*/
-}
-
-// +=================================================+
-// |        LLObjectBridge                           |
-// +=================================================+
-
-// static
-LLUUID LLObjectBridge::sContextMenuItemID;
-
-LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags) :
-LLItemBridge(inventory, uuid), mInvType(type)
-{
-	mAttachPt = (flags & 0xff); // low bye of inventory flags
-
-	mIsMultiObject = ( flags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) ?  TRUE: FALSE;
-}
-
-BOOL LLObjectBridge::isItemRemovable()
-{
-	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-	if(!avatar) return FALSE;
-	if(avatar->isWearingAttachment(mUUID)) return FALSE;
-	return LLInvFVBridge::isItemRemovable();
-}
-
-LLUIImagePtr LLObjectBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_OBJECT, mInvType, mAttachPt, mIsMultiObject );
-}
-
-LLInventoryObject* LLObjectBridge::getObject() const
-{
-	LLInventoryObject* object = NULL;
-	LLInventoryModel* model = getInventoryModel();
-	if(model)
-	{
-		object = (LLInventoryObject*)model->getObject(mUUID);
-	}
-	return object;
-}
-
-// virtual
-void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("attach" == action)
-	{
-		LLUUID object_id = mUUID;
-		LLViewerInventoryItem* item;
-		item = (LLViewerInventoryItem*)gInventory.getItem(object_id);
-		if(item && gInventory.isObjectDescendentOf(object_id, gInventory.getRootFolderID()))
-		{
-			rez_attachment(item, NULL);
-		}
-		else if(item && item->isComplete())
-		{
-			// must be in library. copy it to our inventory and put it on.
-			LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(0);
-			copy_inventory_item(
-				gAgent.getID(),
-				item->getPermissions().getOwner(),
-				item->getUUID(),
-				LLUUID::null,
-				std::string(),
-				cb);
-		}
-		gFocusMgr.setKeyboardFocus(NULL);
-	}
-	else if ("detach" == action)
-	{
-		LLInventoryItem* item = gInventory.getItem(mUUID);
-		if(item)
-		{
-			gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);
-			gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
-			gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-			gMessageSystem->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID());
-			gMessageSystem->sendReliable( gAgent.getRegion()->getHost());
-		}
-		// this object might have been selected, so let the selection manager know it's gone now
-		LLViewerObject *found_obj =
-			gObjectList.findObject(item->getUUID());
-		if (found_obj)
-		{
-			LLSelectMgr::getInstance()->remove(found_obj);
-		}
-		else
-		{
-			llwarns << "object not found - ignoring" << llendl;
-		}
-	}
-	else LLItemBridge::performAction(folder, model, action);
-}
-
-void LLObjectBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-
-	LLSD key;
-	key["id"] = mUUID;
-	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
-
-	/*
-	LLFloaterReg::showInstance("properties", mUUID);
-	*/
-}
-
-LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const
-{
-	U8 font = LLFontGL::NORMAL;
-
-	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-	if( avatar && avatar->isWearingAttachment( mUUID ) )
-	{
-		font |= LLFontGL::BOLD;
-	}
-
-	LLInventoryItem* item = getItem();
-	if (item && item->getIsLinkType())
-	{
-		font |= LLFontGL::ITALIC;
-	}
-
-	return (LLFontGL::StyleFlags)font;
-}
-
-std::string LLObjectBridge::getLabelSuffix() const
-{
-	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-	if( avatar && avatar->isWearingAttachment( mUUID ) )
-	{
-		std::string attachment_point_name = avatar->getAttachedPointName(mUUID);
-		LLStringUtil::toLower(attachment_point_name);
-
-		LLStringUtil::format_map_t args;
-		args["[ATTACHMENT_POINT]"] =  attachment_point_name.c_str();
-		return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args);
-	}
-	else
-	{
-		return LLItemBridge::getLabelSuffix();
-	}
-}
-
-void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment)
-{
-	LLSD payload;
-	payload["item_id"] = item->getLinkedUUID(); // Wear the base object in case this is a link.
-
-	S32 attach_pt = 0;
-	if (gAgent.getAvatarObject() && attachment)
-	{
-		for (LLVOAvatar::attachment_map_t::iterator iter = gAgent.getAvatarObject()->mAttachmentPoints.begin();
-			 iter != gAgent.getAvatarObject()->mAttachmentPoints.end(); ++iter)
-		{
-			if (iter->second == attachment)
-			{
-				attach_pt = iter->first;
-				break;
-			}
-		}
-	}
-
-	payload["attachment_point"] = attach_pt;
-
-#if !ENABLE_MULTIATTACHMENTS
-	if (attachment && attachment->getNumObjects() > 0)
-	{
-		LLNotifications::instance().add("ReplaceAttachment", LLSD(), payload, confirm_replace_attachment_rez);
-	}
-	else
-#endif
-	{
-		LLNotifications::instance().forceResponse(LLNotification::Params("ReplaceAttachment").payload(payload), 0/*YES*/);
-	}
-}
-
-bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response)
-{
-	LLVOAvatar *avatarp = gAgent.getAvatarObject();
-
-	if (!avatarp->canAttachMoreObjects())
-	{
-		LLSD args;
-		args["MAX_ATTACHMENTS"] = llformat("%d", MAX_AGENT_ATTACHMENTS);
-		LLNotifications::instance().add("MaxAttachmentsOnOutfit", args);
-		return false;
-	}
-
-	S32 option = LLNotification::getSelectedOption(notification, response);
-	if (option == 0/*YES*/)
-	{
-		LLViewerInventoryItem* itemp = gInventory.getItem(notification["payload"]["item_id"].asUUID());
-
-		if (itemp)
-		{
-			LLMessageSystem* msg = gMessageSystem;
-			msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv);
-			msg->nextBlockFast(_PREHASH_AgentData);
-			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-			msg->nextBlockFast(_PREHASH_ObjectData);
-			msg->addUUIDFast(_PREHASH_ItemID, itemp->getUUID());
-			msg->addUUIDFast(_PREHASH_OwnerID, itemp->getPermissions().getOwner());
-			U8 attachment_pt = notification["payload"]["attachment_point"].asInteger();
-#if ENABLE_MULTIATTACHMENTS
-			attachment_pt |= ATTACHMENT_ADD;
-#endif
-			msg->addU8Fast(_PREHASH_AttachmentPt, attachment_pt);
-			pack_permissions_slam(msg, itemp->getFlags(), itemp->getPermissions());
-			msg->addStringFast(_PREHASH_Name, itemp->getName());
-			msg->addStringFast(_PREHASH_Description, itemp->getDescription());
-			msg->sendReliable(gAgent.getRegion()->getHost());
-		}
-	}
-	return false;
-}
-static LLNotificationFunctorRegistration confirm_replace_attachment_rez_reg("ReplaceAttachment", confirm_replace_attachment_rez);
-
-void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		LLInventoryItem* item = getItem();
-		if (item && item->getIsLinkType())
-		{
-			items.push_back(std::string("Goto Link"));
-		}
-
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-
-		LLObjectBridge::sContextMenuItemID = mUUID;
-
-		if(item)
-		{
-			LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();
-			if( !avatarp )
-			{
-				return;
-			}
-
-			if( avatarp->isWearingAttachment( mUUID ) )
-			{
-				items.push_back(std::string("Detach From Yourself"));
-			}
-			else
-			if( !isInTrash() && !isLinkedObjectInTrash() )
-			{
-				items.push_back(std::string("Attach Separator"));
-				items.push_back(std::string("Object Wear"));
-				items.push_back(std::string("Attach To"));
-				items.push_back(std::string("Attach To HUD"));
-				// commented out for DEV-32347
-				//items.push_back(std::string("Restore to Last Position"));
-
-				if (!avatarp->canAttachMoreObjects())
-				{
-					disabled_items.push_back(std::string("Object Wear"));
-					disabled_items.push_back(std::string("Attach To"));
-					disabled_items.push_back(std::string("Attach To HUD"));
-				}
-				LLMenuGL* attach_menu = menu.findChildMenuByName("Attach To", TRUE);
-				LLMenuGL* attach_hud_menu = menu.findChildMenuByName("Attach To HUD", TRUE);
-				LLVOAvatar *avatarp = gAgent.getAvatarObject();
-				if (attach_menu
-					&& (attach_menu->getChildCount() == 0)
-					&& attach_hud_menu
-					&& (attach_hud_menu->getChildCount() == 0)
-					&& avatarp)
-				{
-					for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
-						 iter != avatarp->mAttachmentPoints.end(); )
-					{
-						LLVOAvatar::attachment_map_t::iterator curiter = iter++;
-						LLViewerJointAttachment* attachment = curiter->second;
-						LLMenuItemCallGL::Params p;
-						std::string submenu_name = attachment->getName();
-						if (LLTrans::getString(submenu_name) != "")
-						{
-						    p.name = (" ")+LLTrans::getString(submenu_name)+" ";
-						}
-						else
-						{
-							p.name = submenu_name;
-						}
-						LLSD cbparams;
-						cbparams["index"] = curiter->first;
-						cbparams["label"] = attachment->getName();
-						p.on_click.function_name = "Inventory.AttachObject";
-						p.on_click.parameter = LLSD(attachment->getName());
-						p.on_enable.function_name = "Attachment.Label";
-						p.on_enable.parameter = cbparams;
-						LLView* parent = attachment->getIsHUDAttachment() ? attach_hud_menu : attach_menu;
-						LLUICtrlFactory::create<LLMenuItemCallGL>(p, parent);
-					}
-				}
-			}
-		}
-	}
-	hide_context_entries(menu, items, disabled_items);
-}
-
-BOOL LLObjectBridge::renameItem(const std::string& new_name)
-{
-	if(!isItemRenameable())
-		return FALSE;
-	LLPreview::dirty(mUUID);
-	LLInventoryModel* model = getInventoryModel();
-	if(!model)
-		return FALSE;
-	LLViewerInventoryItem* item = getItem();
-	if(item && (item->getName() != new_name))
-	{
-		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
-		new_item->rename(new_name);
-		buildDisplayName(new_item, mDisplayName);
-		new_item->updateServer(FALSE);
-		model->updateItem(new_item);
-
-		model->notifyObservers();
-
-		LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-		if( avatar )
-		{
-			LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() );
-			if( obj )
-			{
-				LLSelectMgr::getInstance()->deselectAll();
-				LLSelectMgr::getInstance()->addAsIndividual( obj, SELECT_ALL_TES, FALSE );
-				LLSelectMgr::getInstance()->selectionSetObjectName( new_name );
-				LLSelectMgr::getInstance()->deselectAll();
-			}
-		}
-	}
-	// return FALSE because we either notified observers (& therefore
-	// rebuilt) or we didn't update.
-	return FALSE;
-}
-
-// +=================================================+
-// |        LLLSLTextBridge                          |
-// +=================================================+
-
-LLUIImagePtr LLLSLTextBridge::getIcon() const
-{
-	return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
-}
-
-void LLLSLTextBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-	/*
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES);
-	}
-	*/
-}
-
-// +=================================================+
-// |        LLWearableBridge                         |
-// +=================================================+
-
-// *NOTE: hack to get from avatar inventory to avatar
-void wear_inventory_item_on_avatar( LLInventoryItem* item )
-{
-	if(item)
-	{
-		lldebugs << "wear_inventory_item_on_avatar( " << item->getName()
-				 << " )" << llendl;
-
-		LLAppearanceManager::wearItem(item);
-	}
-}
-
-void wear_add_inventory_item_on_avatar( LLInventoryItem* item )
-{
-	if(item)
-	{
-		lldebugs << "wear_add_inventory_item_on_avatar( " << item->getName()
-				 << " )" << llendl;
-
-		LLWearableList::instance().getAsset(item->getAssetUUID(),
-							   item->getName(),
-							   item->getType(),
-							   LLWearableBridge::onWearAddOnAvatarArrived,
-							   new LLUUID(item->getUUID()));
-	}
-}
-
-void remove_inventory_category_from_avatar( LLInventoryCategory* category )
-{
-	if(!category) return;
-	lldebugs << "remove_inventory_category_from_avatar( " << category->getName()
-			 << " )" << llendl;
-
-
-	if( gFloaterCustomize )
-	{
-		gFloaterCustomize->askToSaveIfDirty(
-			boost::bind(remove_inventory_category_from_avatar_step2, _1, category->getUUID()));
-	}
-	else
-	{
-		remove_inventory_category_from_avatar_step2(TRUE, category->getUUID() );
-	}
-}
-
-struct OnRemoveStruct
-{
-	LLUUID mUUID;
-	OnRemoveStruct(const LLUUID& uuid):
-		mUUID(uuid)
-	{
-	}
-};
-
-void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id)
-{
-
-	// Find all the wearables that are in the category's subtree.
-	lldebugs << "remove_inventory_category_from_avatar_step2()" << llendl;
-	if(proceed)
-	{
-		LLInventoryModel::cat_array_t cat_array;
-		LLInventoryModel::item_array_t item_array;
-		LLFindWearables is_wearable;
-		gInventory.collectDescendentsIf(category_id,
-										cat_array,
-										item_array,
-										LLInventoryModel::EXCLUDE_TRASH,
-										is_wearable);
-		S32 i;
-		S32 wearable_count = item_array.count();
-
-		LLInventoryModel::cat_array_t	obj_cat_array;
-		LLInventoryModel::item_array_t	obj_item_array;
-		LLIsType is_object( LLAssetType::AT_OBJECT );
-		gInventory.collectDescendentsIf(category_id,
-										obj_cat_array,
-										obj_item_array,
-										LLInventoryModel::EXCLUDE_TRASH,
-										is_object);
-		S32 obj_count = obj_item_array.count();
-
-		// Find all gestures in this folder
-		LLInventoryModel::cat_array_t	gest_cat_array;
-		LLInventoryModel::item_array_t	gest_item_array;
-		LLIsType is_gesture( LLAssetType::AT_GESTURE );
-		gInventory.collectDescendentsIf(category_id,
-										gest_cat_array,
-										gest_item_array,
-										LLInventoryModel::EXCLUDE_TRASH,
-										is_gesture);
-		S32 gest_count = gest_item_array.count();
-
-		if (wearable_count > 0)	//Loop through wearables.  If worn, remove.
-		{
-			for(i = 0; i  < wearable_count; ++i)
-			{
-				if( gAgentWearables.isWearingItem (item_array.get(i)->getUUID()) )
-				{
-					LLWearableList::instance().getAsset(item_array.get(i)->getAssetUUID(),
-														item_array.get(i)->getName(),
-														item_array.get(i)->getType(),
-														LLWearableBridge::onRemoveFromAvatarArrived,
-														new OnRemoveStruct(item_array.get(i)->getUUID()));
-
-				}
-			}
-		}
-
-
-		if (obj_count > 0)
-		{
-			for(i = 0; i  < obj_count; ++i)
-			{
-				gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);
-				gMessageSystem->nextBlockFast(_PREHASH_ObjectData );
-				gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-				gMessageSystem->addUUIDFast(_PREHASH_ItemID, obj_item_array.get(i)->getUUID() );
-
-				gMessageSystem->sendReliable( gAgent.getRegion()->getHost() );
-
-				// this object might have been selected, so let the selection manager know it's gone now
-				LLViewerObject *found_obj = gObjectList.findObject( obj_item_array.get(i)->getUUID());
-				if (found_obj)
-				{
-					LLSelectMgr::getInstance()->remove(found_obj);
-				}
-				else
-				{
-					llwarns << "object not found, ignoring" << llendl;
-				}
-			}
-		}
-
-		if (gest_count > 0)
-		{
-			for(i = 0; i  < gest_count; ++i)
-			{
-				if ( LLGestureManager::instance().isGestureActive( gest_item_array.get(i)->getUUID()) )
-				{
-					LLGestureManager::instance().deactivateGesture( gest_item_array.get(i)->getUUID() );
-					gInventory.updateItem( gest_item_array.get(i) );
-					gInventory.notifyObservers();
-				}
-
-			}
-		}
-	}
-}
-
-BOOL LLWearableBridge::renameItem(const std::string& new_name)
-{
-	if( gAgentWearables.isWearingItem( mUUID ) )
-	{
-		gAgentWearables.setWearableName( mUUID, new_name );
-	}
-	return LLItemBridge::renameItem(new_name);
-}
-
-BOOL LLWearableBridge::isItemRemovable()
-{
-	if (gAgentWearables.isWearingItem(mUUID)) return FALSE;
-	return LLInvFVBridge::isItemRemovable();
-}
-
-std::string LLWearableBridge::getLabelSuffix() const
-{
-	if( gAgentWearables.isWearingItem( mUUID ) )
-	{
-		return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn");
-	}
-	else
-	{
-		return LLItemBridge::getLabelSuffix();
-	}
-}
-
-LLUIImagePtr LLWearableBridge::getIcon() const
-{
-	return get_item_icon(mAssetType, mInvType, mWearableType, FALSE);
-}
-
-// virtual
-void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("wear" == action)
-	{
-		wearOnAvatar();
-	}
-	else if ("wear_add" == action)
-	{
-		wearAddOnAvatar();
-	}
-	else if ("edit" == action)
-	{
-		editOnAvatar();
-		return;
-	}
-	else if ("take_off" == action)
-	{
-		if(gAgentWearables.isWearingItem(mUUID))
-		{
-			LLViewerInventoryItem* item = getItem();
-			if (item)
-			{
-				LLWearableList::instance().getAsset(item->getAssetUUID(),
-													item->getName(),
-													item->getType(),
-													LLWearableBridge::onRemoveFromAvatarArrived,
-													new OnRemoveStruct(mUUID));
-			}
-		}
-	}
-	else LLItemBridge::performAction(folder, model, action);
-}
-
-void LLWearableBridge::openItem()
-{
-	LLViewerInventoryItem* item = getItem();
-
-	if (item)
-	{
-		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
-	}
-	/*
-	if( isInTrash() )
-	{
-		LLNotifications::instance().add("CannotWearTrash");
-	}
-	else if(isAgentInventory())
-	{
-		if( !gAgentWearables.isWearingItem( mUUID ) )
-		{
-			wearOnAvatar();
-		}
-	}
-	else
-	{
-		// must be in the inventory library. copy it to our inventory
-		// and put it on right away.
-		LLViewerInventoryItem* item = getItem();
-		if(item && item->isComplete())
-		{
-			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
-			copy_inventory_item(
-				gAgent.getID(),
-				item->getPermissions().getOwner(),
-				item->getUUID(),
-				LLUUID::null,
-				std::string(),
-				cb);
-		}
-		else if(item)
-		{
-			// *TODO: We should fetch the item details, and then do
-			// the operation above.
-			LLNotifications::instance().add("CannotWearInfoNotComplete");
-		}
-	}
-	*/
-}
-
-void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	lldebugs << "LLWearableBridge::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{	// FWIW, it looks like SUPPRESS_OPEN_ITEM is not set anywhere
-		BOOL no_open = ((flags & SUPPRESS_OPEN_ITEM) == SUPPRESS_OPEN_ITEM);
-
-		// If we have clothing, don't add "Open" as it's the same action as "Wear"   SL-18976
-		LLViewerInventoryItem* item = getItem();
-		if( !no_open && item )
-		{
-			no_open = (item->getType() == LLAssetType::AT_CLOTHING) ||
-					  (item->getType() == LLAssetType::AT_BODYPART);
-		}
-		if (!no_open)
-		{
-			items.push_back(std::string("Open"));
-		}
-
-		if (item && item->getIsLinkType())
-		{
-			items.push_back(std::string("Goto Link"));
-		}
-
-		items.push_back(std::string("Properties"));
-
-		getClipboardEntries(true, items, disabled_items, flags);
-
-		items.push_back(std::string("Wearable Separator"));
-
-		items.push_back(std::string("Wearable Wear"));
-		items.push_back(std::string("Wearable Add"));
-		items.push_back(std::string("Wearable Edit"));
-
-		if ((flags & FIRST_SELECTED_ITEM) == 0)
-		{
-			disabled_items.push_back(std::string("Wearable Edit"));
-		}
-		// Don't allow items to be worn if their baseobj is in the trash.
-		if (isLinkedObjectInTrash())
-		{
-			disabled_items.push_back(std::string("Wearable Wear"));
-			disabled_items.push_back(std::string("Wearable Add"));
-			disabled_items.push_back(std::string("Wearable Edit"));
-		}
-
-		// Disable wear and take off based on whether the item is worn.
-		if(item)
-		{
-			switch (item->getType())
-			{
-				case LLAssetType::AT_CLOTHING:
-					items.push_back(std::string("Take Off"));
-				case LLAssetType::AT_BODYPART:
-					if (gAgentWearables.isWearingItem(item->getUUID()))
-					{
-						disabled_items.push_back(std::string("Wearable Wear"));
-						disabled_items.push_back(std::string("Wearable Add"));
-					}
-					else
-					{
-						disabled_items.push_back(std::string("Take Off"));
-					}
-					break;
-				default:
-					break;
-			}
-		}
-	}
-	hide_context_entries(menu, items, disabled_items);
-}
-
-// Called from menus
-// static
-BOOL LLWearableBridge::canWearOnAvatar(void* user_data)
-{
-	LLWearableBridge* self = (LLWearableBridge*)user_data;
-	if(!self) return FALSE;
-	if(!self->isAgentInventory())
-	{
-		LLViewerInventoryItem* item = (LLViewerInventoryItem*)self->getItem();
-		if(!item || !item->isComplete()) return FALSE;
-	}
-	return (!gAgentWearables.isWearingItem(self->mUUID));
-}
-
-// Called from menus
-// static
-void LLWearableBridge::onWearOnAvatar(void* user_data)
-{
-	LLWearableBridge* self = (LLWearableBridge*)user_data;
-	if(!self) return;
-	self->wearOnAvatar();
-}
-
-void LLWearableBridge::wearOnAvatar()
-{
-	// Don't wear anything until initial wearables are loaded, can
-	// destroy clothing items.
-	if (!gAgentWearables.areWearablesLoaded())
-	{
-		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
-		return;
-	}
-
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		if(!isAgentInventory())
-		{
-			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
-			copy_inventory_item(
-				gAgent.getID(),
-				item->getPermissions().getOwner(),
-				item->getUUID(),
-				LLUUID::null,
-				std::string(),
-				cb);
-		}
-		else
-		{
-			wear_inventory_item_on_avatar(item);
-		}
-	}
-}
-
-void LLWearableBridge::wearAddOnAvatar()
-{
-	// Don't wear anything until initial wearables are loaded, can
-	// destroy clothing items.
-	if (!gAgentWearables.areWearablesLoaded())
-	{
-		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
-		return;
-	}
-
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		if(!isAgentInventory())
-		{
-			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
-			copy_inventory_item(
-				gAgent.getID(),
-				item->getPermissions().getOwner(),
-				item->getUUID(),
-				LLUUID::null,
-				std::string(),
-				cb);
-		}
-		else
-		{
-			wear_add_inventory_item_on_avatar(item);
-		}
-	}
-}
-
-// static
-void LLWearableBridge::onWearOnAvatarArrived( LLWearable* wearable, void* userdata )
-{
-	LLUUID* item_id = (LLUUID*) userdata;
-	if(wearable)
-	{
-		LLViewerInventoryItem* item = NULL;
-		item = (LLViewerInventoryItem*)gInventory.getItem(*item_id);
-		if(item)
-		{
-			if(item->getAssetUUID() == wearable->getAssetID())
-			{
-				gAgentWearables.setWearableItem(item, wearable);
-				gInventory.notifyObservers();
-				//self->getFolderItem()->refreshFromRoot();
-			}
-			else
-			{
-				llinfos << "By the time wearable asset arrived, its inv item already pointed to a different asset." << llendl;
-			}
-		}
-	}
-	delete item_id;
-}
-
-// static
-// BAP remove the "add" code path once everything is fully COF-ified.
-void LLWearableBridge::onWearAddOnAvatarArrived( LLWearable* wearable, void* userdata )
-{
-	LLUUID* item_id = (LLUUID*) userdata;
-	if(wearable)
-	{
-		LLViewerInventoryItem* item = NULL;
-		item = (LLViewerInventoryItem*)gInventory.getItem(*item_id);
-		if(item)
-		{
-			if(item->getAssetUUID() == wearable->getAssetID())
-			{
-				bool do_append = true;
-				gAgentWearables.setWearableItem(item, wearable, do_append);
-				gInventory.notifyObservers();
-				//self->getFolderItem()->refreshFromRoot();
-			}
-			else
-			{
-				llinfos << "By the time wearable asset arrived, its inv item already pointed to a different asset." << llendl;
-			}
-		}
-	}
-	delete item_id;
-}
-
-// static
-BOOL LLWearableBridge::canEditOnAvatar(void* user_data)
-{
-	LLWearableBridge* self = (LLWearableBridge*)user_data;
-	if(!self) return FALSE;
-
-	return (gAgentWearables.isWearingItem(self->mUUID));
-}
-
-// static
-void LLWearableBridge::onEditOnAvatar(void* user_data)
-{
-	LLWearableBridge* self = (LLWearableBridge*)user_data;
-	if(self)
-	{
-		self->editOnAvatar();
-	}
-}
-
-void LLWearableBridge::editOnAvatar()
-{
-	const LLWearable* wearable = gAgentWearables.getWearableFromItemID(mUUID);
-	if( wearable )
-	{
-		// Set the tab to the right wearable.
-		if (gFloaterCustomize)
-			gFloaterCustomize->setCurrentWearableType( wearable->getType() );
-
-		if( CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() )
-		{
-			// Start Avatar Customization
-			gAgent.changeCameraToCustomizeAvatar();
-		}
-	}
-}
-
-// static
-BOOL LLWearableBridge::canRemoveFromAvatar(void* user_data)
-{
-	LLWearableBridge* self = (LLWearableBridge*)user_data;
-	if( self && (LLAssetType::AT_BODYPART != self->mAssetType) )
-	{
-		return gAgentWearables.isWearingItem( self->mUUID );
-	}
-	return FALSE;
-}
-
-// static
-void LLWearableBridge::onRemoveFromAvatar(void* user_data)
-{
-	LLWearableBridge* self = (LLWearableBridge*)user_data;
-	if(!self) return;
-	if(gAgentWearables.isWearingItem(self->mUUID))
-	{
-		LLViewerInventoryItem* item = self->getItem();
-		if (item)
-		{
-			LLUUID parent_id = item->getParentUUID();
-			LLWearableList::instance().getAsset(item->getAssetUUID(),
-												item->getName(),
-												item->getType(),
-												onRemoveFromAvatarArrived,
-												new OnRemoveStruct(LLUUID(self->mUUID)));
-		}
-	}
-}
-
-// static
-void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,
-												 void* userdata)
-{
-	OnRemoveStruct *on_remove_struct = (OnRemoveStruct*) userdata;
-	const LLUUID &item_id = gInventory.getLinkedItemID(on_remove_struct->mUUID);
-	if(wearable)
-	{
-		if( gAgentWearables.isWearingItem( item_id ) )
-		{
-			EWearableType type = wearable->getType();
-
-			if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES ) ) //&&
-				//!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
-			{
-				// MULTI_WEARABLE: FIXME HACK - always remove all
-				bool do_remove_all = false;
-				gAgentWearables.removeWearable( type, do_remove_all, 0 );
-			}
-		}
-	}
-
-	// Find and remove this item from the COF.
-	LLInventoryModel::item_array_t items = gInventory.collectLinkedItems(item_id, LLAppearanceManager::getCOF());
-	llassert(items.size() == 1); // Should always have one and only one item linked to this in the COF.
-	for (LLInventoryModel::item_array_t::const_iterator iter = items.begin();
-		 iter != items.end();
-		 ++iter)
-	{
-		const LLViewerInventoryItem *linked_item = (*iter);
-		const LLUUID &item_id = linked_item->getUUID();
-		gInventory.purgeObject(item_id);
-	}
-	gInventory.notifyObservers();
-
-	delete on_remove_struct;
-}
-
-LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type,
-													   const LLUUID& uuid,LLInventoryModel* model)
-{
-	LLInvFVBridgeAction* action = NULL;
-	switch(asset_type)
-	{
-	case LLAssetType::AT_TEXTURE:
-		action = new LLTextureBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_SOUND:
-		action = new LLSoundBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_LANDMARK:
-		action = new LLLandmarkBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_CALLINGCARD:
-		action = new LLCallingCardBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_OBJECT:
-		action = new LLObjectBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_NOTECARD:
-		action = new LLNotecardBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_ANIMATION:
-		action = new LLAnimationBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_GESTURE:
-		action = new LLGestureBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_LSL_TEXT:
-		action = new LLLSLTextBridgeAction(uuid,model);
-		break;
-
-	case LLAssetType::AT_CLOTHING:
-	case LLAssetType::AT_BODYPART:
-		action = new LLWearableBridgeAction(uuid,model);
-
-		break;
-
-	default:
-		break;
-	}
-	return action;
-}
-
-//static
-void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,
-								   const LLUUID& uuid,LLInventoryModel* model)
-{
-	LLInvFVBridgeAction* action = createAction(asset_type,uuid,model);
-	if(action)
-	{
-		action->doIt();
-		delete action;
-	}
-}
-
-//static
-void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model)
-{
-	LLAssetType::EType asset_type = model->getItem(uuid)->getType();
-	LLInvFVBridgeAction* action = createAction(asset_type,uuid,model);
-	if(action)
-	{
-		action->doIt();
-		delete action;
-	}
-}
-
-LLViewerInventoryItem* LLInvFVBridgeAction::getItem() const
-{
-	if(mModel)
-		return (LLViewerInventoryItem*)mModel->getItem(mUUID);
-	return NULL;
-}
-
-//virtual
-void	LLTextureBridgeAction::doIt()
-{
-	if (getItem())
-	{
-		LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-//virtual
-void	LLSoundBridgeAction::doIt()
-{
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-
-//virtual
-void	LLLandmarkBridgeAction::doIt()
-{
-	LLViewerInventoryItem* item = getItem();
-	if( item )
-	{
-		// Opening (double-clicking) a landmark immediately teleports,
-		// but warns you the first time.
-		LLSD payload;
-		payload["asset_id"] = item->getAssetUUID();
-		LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-
-//virtual
-void	LLCallingCardBridgeAction::doIt()
-{
-	LLViewerInventoryItem* item = getItem();
-	if(item && item->getCreatorUUID().notNull())
-	{
-		LLAvatarActions::showProfile(item->getCreatorUUID());
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-//virtual
-void
-LLNotecardBridgeAction::doIt()
-{
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-//virtual
-void	LLGestureBridgeAction::doIt()
-{
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null);
-		preview->setFocus(TRUE);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-//virtual
-void	LLAnimationBridgeAction::doIt()
-{
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-
-//virtual
-void	LLObjectBridgeAction::doIt()
-{
-	LLFloaterReg::showInstance("properties", mUUID);
-
-	LLInvFVBridgeAction::doIt();
-}
-
-
-//virtual
-void	LLLSLTextBridgeAction::doIt()
-{
-	LLViewerInventoryItem* item = getItem();
-	if (item)
-	{
-		LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES);
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-
-BOOL LLWearableBridgeAction::isInTrash() const
-{
-	if(!mModel) return FALSE;
-	LLUUID trash_id = mModel->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	return mModel->isObjectDescendentOf(mUUID, trash_id);
-}
-
-BOOL LLWearableBridgeAction::isAgentInventory() const
-{
-	if(!mModel) return FALSE;
-	if(gInventory.getRootFolderID() == mUUID) return TRUE;
-	return mModel->isObjectDescendentOf(mUUID, gInventory.getRootFolderID());
-}
-
-void LLWearableBridgeAction::wearOnAvatar()
-{
-	// Don't wear anything until initial wearables are loaded, can
-	// destroy clothing items.
-	if (!gAgentWearables.areWearablesLoaded())
-	{
-		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
-		return;
-	}
-
-	LLViewerInventoryItem* item = getItem();
-	if(item)
-	{
-		if(!isAgentInventory())
-		{
-			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
-			copy_inventory_item(
-				gAgent.getID(),
-				item->getPermissions().getOwner(),
-				item->getUUID(),
-				LLUUID::null,
-				std::string(),
-				cb);
-		}
-		else
-		{
-			wear_inventory_item_on_avatar(item);
-		}
-	}
-}
-
-//virtual
-void LLWearableBridgeAction::doIt()
-{
-	if(isInTrash())
-	{
-		LLNotifications::instance().add("CannotWearTrash");
-	}
-	else if(isAgentInventory())
-	{
-		if(!gAgentWearables.isWearingItem(mUUID))
-		{
-			wearOnAvatar();
-		}
-	}
-	else
-	{
-		// must be in the inventory library. copy it to our inventory
-		// and put it on right away.
-		LLViewerInventoryItem* item = getItem();
-		if(item && item->isComplete())
-		{
-			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
-			copy_inventory_item(
-				gAgent.getID(),
-				item->getPermissions().getOwner(),
-				item->getUUID(),
-				LLUUID::null,
-				std::string(),
-				cb);
-		}
-		else if(item)
-		{
-			// *TODO: We should fetch the item details, and then do
-			// the operation above.
-			LLNotifications::instance().add("CannotWearInfoNotComplete");
-		}
-	}
-
-	LLInvFVBridgeAction::doIt();
-}
-
-// +=================================================+
-// |        LLLinkItemBridge                         |
-// +=================================================+
-// For broken links
-
-std::string LLLinkItemBridge::sPrefix("Link: ");
-
-
-LLUIImagePtr LLLinkItemBridge::getIcon() const
-{
-	if (LLViewerInventoryItem *item = getItem())
-	{
-		return get_item_icon(item->getActualType(), LLInventoryType::IT_NONE, 0, FALSE);
-	}
-	return get_item_icon(LLAssetType::AT_LINK, LLInventoryType::IT_NONE, 0, FALSE);
-}
-
-void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	// *TODO: Translate
-	lldebugs << "LLLink::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		items.push_back(std::string("Delete"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Delete"));
-		}
-	}
-	hide_context_entries(menu, items, disabled_items);
-}
-
-
-// +=================================================+
-// |        LLLinkBridge                             |
-// +=================================================+
-// For broken links.
-
-std::string LLLinkFolderBridge::sPrefix("Link: ");
-
-
-LLUIImagePtr LLLinkFolderBridge::getIcon() const
-{
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
-	if (LLViewerInventoryItem *item = getItem())
-	{
-		if (const LLViewerInventoryCategory* cat = item->getLinkedCategory())
-		{
-			preferred_type = cat->getPreferredType();
-		}
-	}
-	return LLFolderBridge::getIcon(preferred_type);
-}
-
-void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
-	// *TODO: Translate
-	lldebugs << "LLLink::buildContextMenu()" << llendl;
-	std::vector<std::string> items;
-	std::vector<std::string> disabled_items;
-
-	if(isInTrash())
-	{
-		items.push_back(std::string("Purge Item"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Purge Item"));
-		}
-
-		items.push_back(std::string("Restore Item"));
-	}
-	else
-	{
-		items.push_back(std::string("Goto Link"));
-		items.push_back(std::string("Delete"));
-		if (!isItemRemovable())
-		{
-			disabled_items.push_back(std::string("Delete"));
-		}
-	}
-	hide_context_entries(menu, items, disabled_items);
-}
-
-void LLLinkFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
-	if ("goto" == action)
-	{
-		gotoItem(folder);
-		return;
-	}
-	LLItemBridge::performAction(folder,model,action);
-}
-
-void LLLinkFolderBridge::gotoItem(LLFolderView *folder)
-{
-	const LLUUID &cat_uuid = getFolderID();
-	if (!cat_uuid.isNull())
-	{
-		if (LLFolderViewItem *base_folder = folder->getItemByID(cat_uuid))
-		{
-			if (LLInventoryModel* model = getInventoryModel())
-			{
-				model->fetchDescendentsOf(cat_uuid);
-			}
-			base_folder->setOpen(TRUE);
-			folder->setSelectionFromRoot(base_folder,TRUE);
-			folder->scrollToShowSelection();
-		}
-	}
-}
-
-const LLUUID &LLLinkFolderBridge::getFolderID() const
-{
-	if (LLViewerInventoryItem *link_item = getItem())
-	{
-		if (const LLViewerInventoryCategory *cat = link_item->getLinkedCategory())
-		{
-			const LLUUID& cat_uuid = cat->getUUID();
-			return cat_uuid;
-		}
-	}
-	return LLUUID::null;
-}
+/**
+ * @file llinventorybridge.cpp
+ * @brief Implementation of the Inventory-Folder-View-Bridge classes.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include <utility> // for std::pair<>
+
+#include "llfloaterinventory.h"
+#include "llinventorybridge.h"
+
+#include "message.h"
+
+#include "llagent.h"
+#include "llagentwearables.h"
+#include "llcallingcard.h"
+#include "llcheckboxctrl.h"		// for radio buttons
+#include "llfloaterreg.h"
+#include "llradiogroup.h"
+#include "llspinctrl.h"
+#include "lltextbox.h"
+#include "llui.h"
+
+#include "llviewercontrol.h"
+#include "llfirstuse.h"
+#include "llfoldertype.h"
+#include "llfloaterchat.h"
+#include "llfloatercustomize.h"
+#include "llfloaterproperties.h"
+#include "llfloaterworldmap.h"
+#include "llfocusmgr.h"
+#include "llfolderview.h"
+#include "llfriendcard.h"
+#include "llavataractions.h"
+#include "llgesturemgr.h"
+#include "lliconctrl.h"
+#include "llinventoryfunctions.h"
+#include "llinventorymodel.h"
+#include "llinventorypanel.h"
+#include "llinventoryclipboard.h"
+#include "lllineeditor.h"
+#include "llmenugl.h"
+#include "llpreviewanim.h"
+#include "llpreviewgesture.h"
+#include "llpreviewnotecard.h"
+#include "llpreviewscript.h"
+#include "llpreviewsound.h"
+#include "llpreviewtexture.h"
+#include "llresmgr.h"
+#include "llscrollcontainer.h"
+#include "llimview.h"
+#include "lltooldraganddrop.h"
+#include "llviewertexturelist.h"
+#include "llviewerinventory.h"
+#include "llviewerobjectlist.h"
+#include "llviewerwindow.h"
+#include "llvoavatar.h"
+#include "llwearable.h"
+#include "llwearablelist.h"
+#include "llviewermessage.h"
+#include "llviewerregion.h"
+#include "llvoavatarself.h"
+#include "lltabcontainer.h"
+#include "lluictrlfactory.h"
+#include "llselectmgr.h"
+#include "llsidetray.h"
+#include "llfloateropenobject.h"
+#include "lltrans.h"
+#include "llappearancemgr.h"
+
+using namespace LLOldEvents;
+
+// Helpers
+// bug in busy count inc/dec right now, logic is complex... do we really need it?
+void inc_busy_count()
+{
+// 	gViewerWindow->getWindow()->incBusyCount();
+//  check balance of these calls if this code is changed to ever actually
+//  *do* something!
+}
+void dec_busy_count()
+{
+// 	gViewerWindow->getWindow()->decBusyCount();
+//  check balance of these calls if this code is changed to ever actually
+//  *do* something!
+}
+
+// Function declarations
+void wear_add_inventory_item_on_avatar(LLInventoryItem* item);
+void remove_inventory_category_from_avatar(LLInventoryCategory* category);
+void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id);
+bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*);
+bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response);
+
+std::string ICON_NAME[ICON_NAME_COUNT] =
+{
+	"Inv_Texture",
+	"Inv_Sound",
+	"Inv_CallingCard",
+	"Inv_CallingCard",
+	"Inv_Landmark",
+	"Inv_Landmark",
+	"Inv_Script",
+	"Inv_Clothing",
+	"Inv_Object",
+	"Inv_Object",
+	"Inv_Notecard",
+	"Inv_Skin",
+	"Inv_Snapshot",
+
+	"Inv_BodyShape",
+	"Inv_Skin",
+	"Inv_Hair",
+	"Inv_Eye",
+	"Inv_Shirt",
+	"Inv_Pants",
+	"Inv_Shoe",
+	"Inv_Socks",
+	"Inv_Jacket",
+	"Inv_Gloves",
+	"Inv_Undershirt",
+	"Inv_Underpants",
+	"Inv_Skirt",
+	"Inv_Alpha",
+	"Inv_Tattoo",
+
+	"Inv_Animation",
+	"Inv_Gesture",
+
+	"inv_item_linkitem.tga",
+	"inv_item_linkfolder.tga"
+};
+
+
+// +=================================================+
+// |        LLInventoryPanelObserver                 |
+// +=================================================+
+void LLInventoryPanelObserver::changed(U32 mask)
+{
+	mIP->modelChanged(mask);
+}
+
+
+// +=================================================+
+// |        LLInvFVBridge                            |
+// +=================================================+
+
+LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
+mUUID(uuid), mInvType(LLInventoryType::IT_NONE)
+{
+	mInventoryPanel = inventory->getHandle();
+}
+
+const std::string& LLInvFVBridge::getName() const
+{
+	LLInventoryObject* obj = getInventoryObject();
+	if(obj)
+	{
+		return obj->getName();
+	}
+	return LLStringUtil::null;
+}
+
+const std::string& LLInvFVBridge::getDisplayName() const
+{
+	return getName();
+}
+
+// Folders have full perms
+PermissionMask LLInvFVBridge::getPermissionMask() const
+{
+
+	return PERM_ALL;
+}
+
+// virtual
+LLAssetType::EType LLInvFVBridge::getPreferredType() const
+{
+	return LLAssetType::AT_NONE;
+}
+
+
+// Folders don't have creation dates.
+time_t LLInvFVBridge::getCreationDate() const
+{
+	return 0;
+}
+
+// Can be destoryed (or moved to trash)
+BOOL LLInvFVBridge::isItemRemovable()
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+	if(model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID()))
+	{
+		return TRUE;
+	}
+	return FALSE;
+}
+
+// Sends an update to all link items that point to the base item.
+void LLInvFVBridge::renameLinkedItems(const LLUUID &item_id, const std::string& new_name)
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return;
+
+	LLInventoryItem* itemp = model->getItem(mUUID);
+	if (!itemp) return;
+
+	if (itemp->getIsLinkType())
+	{
+		return;
+	}
+
+	LLInventoryModel::item_array_t item_array = model->collectLinkedItems(item_id);
+	for (LLInventoryModel::item_array_t::iterator iter = item_array.begin();
+		 iter != item_array.end();
+		 iter++)
+	{
+		LLViewerInventoryItem *linked_item = (*iter);
+		if (linked_item->getUUID() == item_id) continue;
+
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(linked_item);
+		new_item->rename(new_name);
+		new_item->updateServer(FALSE);
+		model->updateItem(new_item);
+		// model->addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID());
+	}
+	model->notifyObservers();
+}
+
+// Can be moved to another folder
+BOOL LLInvFVBridge::isItemMovable() const
+{
+	return TRUE;
+}
+
+/*virtual*/
+/**
+ * @brief Adds this item into clipboard storage
+ */
+void LLInvFVBridge::cutToClipboard()
+{
+	if(isItemMovable())
+	{
+		LLInventoryClipboard::instance().cut(mUUID);
+	}
+}
+// *TODO: make sure this does the right thing
+void LLInvFVBridge::showProperties()
+{
+	LLSD key;
+	key["id"] = mUUID;
+	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
+
+	LLFloaterReg::showInstance("properties", mUUID);
+}
+
+void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch)
+{
+	// Deactivate gestures when moving them into Trash
+	LLInvFVBridge* bridge;
+	LLInventoryModel* model = getInventoryModel();
+	LLViewerInventoryItem* item = NULL;
+	LLViewerInventoryCategory* cat = NULL;
+	LLInventoryModel::cat_array_t	descendent_categories;
+	LLInventoryModel::item_array_t	descendent_items;
+	S32 count = batch.count();
+	S32 i,j;
+	for(i = 0; i < count; ++i)
+	{
+		bridge = (LLInvFVBridge*)(batch.get(i));
+		if(!bridge || !bridge->isItemRemovable()) continue;
+		item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID());
+		if (item)
+		{
+			if(LLAssetType::AT_GESTURE == item->getType())
+			{
+				LLGestureManager::instance().deactivateGesture(item->getUUID());
+			}
+		}
+	}
+	for(i = 0; i < count; ++i)
+	{
+		bridge = (LLInvFVBridge*)(batch.get(i));
+		if(!bridge || !bridge->isItemRemovable()) continue;
+		cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID());
+		if (cat)
+		{
+			gInventory.collectDescendents( cat->getUUID(), descendent_categories, descendent_items, FALSE );
+			for (j=0; j<descendent_items.count(); j++)
+			{
+				if(LLAssetType::AT_GESTURE == descendent_items[j]->getType())
+				{
+					LLGestureManager::instance().deactivateGesture(descendent_items[j]->getUUID());
+				}
+			}
+		}
+	}
+	removeBatchNoCheck(batch);
+}
+
+void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*>& batch)
+{
+	// this method moves a bunch of items and folders to the trash. As
+	// per design guidelines for the inventory model, the message is
+	// built and the accounting is performed first. After all of that,
+	// we call LLInventoryModel::moveObject() to move everything
+	// around.
+	LLInvFVBridge* bridge;
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return;
+	LLMessageSystem* msg = gMessageSystem;
+	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	LLViewerInventoryItem* item = NULL;
+	LLViewerInventoryCategory* cat = NULL;
+	std::vector<LLUUID> move_ids;
+	LLInventoryModel::update_map_t update;
+	bool start_new_message = true;
+	S32 count = batch.count();
+	S32 i;
+	for(i = 0; i < count; ++i)
+	{
+		bridge = (LLInvFVBridge*)(batch.get(i));
+		if(!bridge || !bridge->isItemRemovable()) continue;
+		item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID());
+		if(item)
+		{
+			if(item->getParentUUID() == trash_id) continue;
+			move_ids.push_back(item->getUUID());
+			LLPreview::hide(item->getUUID());
+			--update[item->getParentUUID()];
+			++update[trash_id];
+			if(start_new_message)
+			{
+				start_new_message = false;
+				msg->newMessageFast(_PREHASH_MoveInventoryItem);
+				msg->nextBlockFast(_PREHASH_AgentData);
+				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+				msg->addBOOLFast(_PREHASH_Stamp, TRUE);
+			}
+			msg->nextBlockFast(_PREHASH_InventoryData);
+			msg->addUUIDFast(_PREHASH_ItemID, item->getUUID());
+			msg->addUUIDFast(_PREHASH_FolderID, trash_id);
+			msg->addString("NewName", NULL);
+			if(msg->isSendFullFast(_PREHASH_InventoryData))
+			{
+				start_new_message = true;
+				gAgent.sendReliableMessage();
+				gInventory.accountForUpdate(update);
+				update.clear();
+			}
+		}
+	}
+	if(!start_new_message)
+	{
+		start_new_message = true;
+		gAgent.sendReliableMessage();
+		gInventory.accountForUpdate(update);
+		update.clear();
+	}
+	for(i = 0; i < count; ++i)
+	{
+		bridge = (LLInvFVBridge*)(batch.get(i));
+		if(!bridge || !bridge->isItemRemovable()) continue;
+		cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID());
+		if(cat)
+		{
+			if(cat->getParentUUID() == trash_id) continue;
+			move_ids.push_back(cat->getUUID());
+			--update[cat->getParentUUID()];
+			++update[trash_id];
+			if(start_new_message)
+			{
+				start_new_message = false;
+				msg->newMessageFast(_PREHASH_MoveInventoryFolder);
+				msg->nextBlockFast(_PREHASH_AgentData);
+				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+				msg->addBOOL("Stamp", TRUE);
+			}
+			msg->nextBlockFast(_PREHASH_InventoryData);
+			msg->addUUIDFast(_PREHASH_FolderID, cat->getUUID());
+			msg->addUUIDFast(_PREHASH_ParentID, trash_id);
+			if(msg->isSendFullFast(_PREHASH_InventoryData))
+			{
+				start_new_message = true;
+				gAgent.sendReliableMessage();
+				gInventory.accountForUpdate(update);
+				update.clear();
+			}
+		}
+	}
+	if(!start_new_message)
+	{
+		gAgent.sendReliableMessage();
+		gInventory.accountForUpdate(update);
+	}
+
+	// move everything.
+	std::vector<LLUUID>::iterator it = move_ids.begin();
+	std::vector<LLUUID>::iterator end = move_ids.end();
+	for(; it != end; ++it)
+	{
+		gInventory.moveObject((*it), trash_id);
+	}
+
+	// notify inventory observers.
+	model->notifyObservers();
+}
+
+BOOL LLInvFVBridge::isClipboardPasteable() const
+{
+	if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory())
+	{
+		return FALSE;
+	}
+	LLInventoryModel* model = getInventoryModel();
+	if (!model)
+	{
+		return FALSE;
+	}
+
+	const LLUUID &agent_id = gAgent.getID();
+
+	LLDynamicArray<LLUUID> objects;
+	LLInventoryClipboard::instance().retrieve(objects);
+	S32 count = objects.count();
+	for(S32 i = 0; i < count; i++)
+	{
+		const LLUUID &item_id = objects.get(i);
+
+		// Can't paste folders
+		const LLInventoryCategory *cat = model->getCategory(item_id);
+		if (cat)
+		{
+			return FALSE;
+		}
+
+		const LLInventoryItem *item = model->getItem(item_id);
+		if (item)
+		{
+			if (!item->getPermissions().allowCopyBy(agent_id))
+			{
+				return FALSE;
+			}
+		}
+	}
+	return TRUE;
+}
+
+BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
+{
+	if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory())
+	{
+		return FALSE;
+	}
+	const LLInventoryModel* model = getInventoryModel();
+	if (!model)
+	{
+		return FALSE;
+	}
+
+	LLDynamicArray<LLUUID> objects;
+	LLInventoryClipboard::instance().retrieve(objects);
+	S32 count = objects.count();
+	for(S32 i = 0; i < count; i++)
+	{
+		const LLInventoryItem *item = model->getItem(objects.get(i));
+		if (item)
+		{
+			if (!LLAssetType::lookupCanLink(item->getActualType()))
+			{
+				return FALSE;
+			}
+		}
+		const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i));
+		if (cat && !LLAssetType::lookupCanLink(cat->getPreferredType()))
+		{
+			return FALSE;
+		}
+	}
+	return TRUE;
+}
+
+void hide_context_entries(LLMenuGL& menu, 
+						const std::vector<std::string> &entries_to_show,
+						const std::vector<std::string> &disabled_entries)
+{
+	const LLView::child_list_t *list = menu.getChildList();
+
+	LLView::child_list_t::const_iterator itor;
+	for (itor = list->begin(); itor != list->end(); ++itor)
+	{
+		std::string name = (*itor)->getName();
+
+		// descend into split menus:
+		LLMenuItemBranchGL* branchp = dynamic_cast<LLMenuItemBranchGL*>(*itor);
+		if ((name == "More") && branchp)
+		{
+			hide_context_entries(*branchp->getBranch(), entries_to_show, disabled_entries);
+		}
+
+
+		bool found = false;
+		std::vector<std::string>::const_iterator itor2;
+		for (itor2 = entries_to_show.begin(); itor2 != entries_to_show.end(); ++itor2)
+		{
+			if (*itor2 == name)
+			{
+				found = true;
+			}
+		}
+		if (!found)
+		{
+			(*itor)->setVisible(FALSE);
+		}
+		else
+		{
+			for (itor2 = disabled_entries.begin(); itor2 != disabled_entries.end(); ++itor2)
+			{
+				if (*itor2 == name)
+				{
+					(*itor)->setEnabled(FALSE);
+				}
+			}
+		}
+	}
+}
+
+// Helper for commonly-used entries
+void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
+										std::vector<std::string> &items,
+										std::vector<std::string> &disabled_items, U32 flags)
+{
+	items.push_back(std::string("Rename"));
+	if (!isItemRenameable() || (flags & FIRST_SELECTED_ITEM) == 0)
+	{
+		disabled_items.push_back(std::string("Rename"));
+	}
+
+	if (show_asset_id)
+	{
+		items.push_back(std::string("Copy Asset UUID"));
+		if ( (! ( isItemPermissive() || gAgent.isGodlike() ) )
+			  || (flags & FIRST_SELECTED_ITEM) == 0)
+		{
+			disabled_items.push_back(std::string("Copy Asset UUID"));
+		}
+	}
+
+	items.push_back(std::string("Copy Separator"));
+
+	items.push_back(std::string("Copy"));
+	if (!isItemCopyable())
+	{
+		disabled_items.push_back(std::string("Copy"));
+	}
+
+	items.push_back(std::string("Paste"));
+	if (!isClipboardPasteable() || (flags & FIRST_SELECTED_ITEM) == 0)
+	{
+		disabled_items.push_back(std::string("Paste"));
+	}
+
+	items.push_back(std::string("Paste As Link"));
+	if (!isClipboardPasteableAsLink() || (flags & FIRST_SELECTED_ITEM) == 0)
+	{
+		disabled_items.push_back(std::string("Paste As Link"));
+	}
+	items.push_back(std::string("Paste Separator"));
+
+	items.push_back(std::string("Delete"));
+	if (!isItemRemovable())
+	{
+		disabled_items.push_back(std::string("Delete"));
+	}
+
+	// If multiple items are selected, disable properties (if it exists).
+	if ((flags & FIRST_SELECTED_ITEM) == 0)
+	{
+		disabled_items.push_back(std::string("Properties"));
+	}
+}
+
+void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	lldebugs << "LLInvFVBridge::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	if(isInTrash())
+	{
+		items.push_back(std::string("PurgeItem"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("PurgeItem"));
+		}
+		items.push_back(std::string("RestoreItem"));
+	}
+	else
+	{
+		items.push_back(std::string("Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+// *TODO: remove this
+BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
+{
+	BOOL rv = FALSE;
+
+	const LLInventoryObject* obj = getInventoryObject();
+
+	if(obj)
+	{
+		*type = LLAssetType::lookupDragAndDropType(obj->getActualType());
+		if(*type == DAD_NONE)
+		{
+			return FALSE;
+		}
+
+		*id = obj->getUUID();
+		//object_ids.put(obj->getUUID());
+
+		if (*type == DAD_CATEGORY)
+		{
+			gInventory.startBackgroundFetch(obj->getUUID());
+		}
+
+		rv = TRUE;
+	}
+
+	return rv;
+}
+
+LLInventoryObject* LLInvFVBridge::getInventoryObject() const
+{
+	LLInventoryObject* obj = NULL;
+	LLInventoryModel* model = getInventoryModel();
+	if(model)
+	{
+		obj = (LLInventoryObject*)model->getObject(mUUID);
+	}
+	return obj;
+}
+
+LLInventoryModel* LLInvFVBridge::getInventoryModel() const
+{
+	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
+	return panel ? panel->getModel() : NULL;
+}
+
+BOOL LLInvFVBridge::isInTrash() const
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	return model->isObjectDescendentOf(mUUID, trash_id);
+}
+
+BOOL LLInvFVBridge::isLinkedObjectInTrash() const
+{
+	if (isInTrash()) return TRUE;
+
+	const LLInventoryObject *obj = getInventoryObject();
+	if (obj && obj->getIsLinkType())
+	{
+		LLInventoryModel* model = getInventoryModel();
+		if(!model) return FALSE;
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		return model->isObjectDescendentOf(obj->getLinkedUUID(), trash_id);
+	}
+	return FALSE;
+}
+
+BOOL LLInvFVBridge::isAgentInventory() const
+{
+	const LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+	if(gInventory.getRootFolderID() == mUUID) return TRUE;
+	return model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID());
+}
+
+BOOL LLInvFVBridge::isCOFFolder() const
+{
+	const LLInventoryModel* model = getInventoryModel();
+	if(!model) return TRUE;
+	const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+	if (mUUID == cof_id || model->isObjectDescendentOf(mUUID, cof_id))
+	{
+		return TRUE;
+	}
+	return FALSE;
+}
+
+BOOL LLInvFVBridge::isItemPermissive() const
+{
+	return FALSE;
+}
+
+// static
+void LLInvFVBridge::changeItemParent(LLInventoryModel* model,
+									 LLViewerInventoryItem* item,
+									 const LLUUID& new_parent,
+									 BOOL restamp)
+{
+	if(item->getParentUUID() != new_parent)
+	{
+		LLInventoryModel::update_list_t update;
+		LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
+		update.push_back(old_folder);
+		LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1);
+		update.push_back(new_folder);
+		gInventory.accountForUpdate(update);
+
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+		new_item->setParent(new_parent);
+		new_item->updateParentOnServer(restamp);
+		model->updateItem(new_item);
+		model->notifyObservers();
+	}
+}
+
+// static
+void LLInvFVBridge::changeCategoryParent(LLInventoryModel* model,
+										 LLViewerInventoryCategory* cat,
+										 const LLUUID& new_parent,
+										 BOOL restamp)
+{
+	if(cat->getParentUUID() != new_parent)
+	{
+		LLInventoryModel::update_list_t update;
+		LLInventoryModel::LLCategoryUpdate old_folder(cat->getParentUUID(), -1);
+		update.push_back(old_folder);
+		LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1);
+		update.push_back(new_folder);
+		gInventory.accountForUpdate(update);
+
+		LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat);
+		new_cat->setParent(new_parent);
+		new_cat->updateParentOnServer(restamp);
+		model->updateCategory(new_cat);
+		model->notifyObservers();
+	}
+}
+
+
+const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type)
+{
+	const std::string rv= LLInventoryType::lookup(inv_type);
+	if(rv.empty())
+	{
+		return std::string("<invalid>");
+	}
+	return rv;
+}
+
+LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,
+										   LLAssetType::EType actual_asset_type,
+										   LLInventoryType::EType inv_type,
+										   LLInventoryPanel* inventory,
+										   const LLUUID& uuid,
+										   U32 flags)
+{
+	LLInvFVBridge* new_listener = NULL;
+	switch(asset_type)
+	{
+		case LLAssetType::AT_TEXTURE:
+			if(!(inv_type == LLInventoryType::IT_TEXTURE || inv_type == LLInventoryType::IT_SNAPSHOT))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLTextureBridge(inventory, uuid, inv_type);
+			break;
+
+		case LLAssetType::AT_SOUND:
+			if(!(inv_type == LLInventoryType::IT_SOUND))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLSoundBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_LANDMARK:
+			if(!(inv_type == LLInventoryType::IT_LANDMARK))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLLandmarkBridge(inventory, uuid, flags);
+			break;
+
+		case LLAssetType::AT_CALLINGCARD:
+			if(!(inv_type == LLInventoryType::IT_CALLINGCARD))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLCallingCardBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_SCRIPT:
+			if(!(inv_type == LLInventoryType::IT_LSL))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLScriptBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_OBJECT:
+			if(!(inv_type == LLInventoryType::IT_OBJECT || inv_type == LLInventoryType::IT_ATTACHMENT))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLObjectBridge(inventory, uuid, inv_type, flags);
+			break;
+
+		case LLAssetType::AT_NOTECARD:
+			if(!(inv_type == LLInventoryType::IT_NOTECARD))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLNotecardBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_ANIMATION:
+			if(!(inv_type == LLInventoryType::IT_ANIMATION))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLAnimationBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_GESTURE:
+			if(!(inv_type == LLInventoryType::IT_GESTURE))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLGestureBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_LSL_TEXT:
+			if(!(inv_type == LLInventoryType::IT_LSL))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLLSLTextBridge(inventory, uuid);
+			break;
+
+		case LLAssetType::AT_CLOTHING:
+		case LLAssetType::AT_BODYPART:
+			if(!(inv_type == LLInventoryType::IT_WEARABLE))
+			{
+				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+			}
+			new_listener = new LLWearableBridge(inventory, uuid, asset_type, inv_type, (EWearableType)flags);
+			break;
+		case LLAssetType::AT_CATEGORY:
+		case LLAssetType::AT_ROOT_CATEGORY:
+			if (actual_asset_type == LLAssetType::AT_LINK_FOLDER)
+			{
+				// Create a link folder handler instead.
+				new_listener = new LLLinkFolderBridge(inventory, uuid);
+				break;
+			}
+			new_listener = new LLFolderBridge(inventory, uuid);
+			break;
+		case LLAssetType::AT_LINK:
+			// Only should happen for broken links.
+			new_listener = new LLLinkItemBridge(inventory, uuid);
+			break;
+		case LLAssetType::AT_LINK_FOLDER:
+			// Only should happen for broken links.
+			new_listener = new LLLinkItemBridge(inventory, uuid);
+			break;
+		default:
+			llinfos << "Unhandled asset type (llassetstorage.h): "
+					<< (S32)asset_type << llendl;
+			break;
+	}
+
+	if (new_listener)
+	{
+		new_listener->mInvType = inv_type;
+	}
+
+	return new_listener;
+}
+
+void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid)
+{
+	LLInventoryCategory* cat = model->getCategory(uuid);
+	if (cat)
+	{
+		model->purgeDescendentsOf(uuid);
+		model->notifyObservers();
+	}
+	LLInventoryObject* obj = model->getObject(uuid);
+	if (obj)
+	{
+		model->purgeObject(uuid);
+		model->notifyObservers();
+	}
+}
+
+// +=================================================+
+// |        InventoryFVBridgeBuilder                 |
+// +=================================================+
+LLInvFVBridge* LLInventoryFVBridgeBuilder::createBridge(LLAssetType::EType asset_type,
+														LLAssetType::EType actual_asset_type,
+														LLInventoryType::EType inv_type,
+														LLInventoryPanel* inventory,
+														const LLUUID& uuid,
+														U32 flags /* = 0x00 */) const
+{
+	return LLInvFVBridge::createBridge(asset_type,
+		actual_asset_type,
+		inv_type,
+		inventory,
+		uuid,
+		flags);
+}
+
+// +=================================================+
+// |        LLItemBridge                             |
+// +=================================================+
+
+void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("goto" == action)
+	{
+		gotoItem(folder);
+	}
+	if ("open" == action)
+	{
+		openItem();
+		return;
+	}
+	else if ("properties" == action)
+	{
+		showProperties();
+		return;
+	}
+	else if ("purge" == action)
+	{
+		purgeItem(model, mUUID);
+		return;
+	}
+	else if ("restoreToWorld" == action)
+	{
+		restoreToWorld();
+		return;
+	}
+	else if ("restore" == action)
+	{
+		restoreItem();
+		return;
+	}
+	else if ("copy_uuid" == action)
+	{
+		// Single item only
+		LLInventoryItem* item = model->getItem(mUUID);
+		if(!item) return;
+		LLUUID asset_id = item->getAssetUUID();
+		std::string buffer;
+		asset_id.toString(buffer);
+
+		gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(buffer));
+		return;
+	}
+	else if ("copy" == action)
+	{
+		copyToClipboard();
+		return;
+	}
+	else if ("paste" == action)
+	{
+		// Single item only
+		LLInventoryItem* itemp = model->getItem(mUUID);
+		if (!itemp) return;
+
+		LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID());
+		if (!folder_view_itemp) return;
+
+		folder_view_itemp->getListener()->pasteFromClipboard();
+		return;
+	}
+	else if ("paste_link" == action)
+	{
+		// Single item only
+		LLInventoryItem* itemp = model->getItem(mUUID);
+		if (!itemp) return;
+
+		LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID());
+		if (!folder_view_itemp) return;
+
+		folder_view_itemp->getListener()->pasteLinkFromClipboard();
+		return;
+	}
+}
+
+void LLItemBridge::selectItem()
+{
+	LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem();
+	if(item && !item->isComplete())
+	{
+		item->fetchFromServer();
+	}
+}
+
+void LLItemBridge::restoreItem()
+{
+	LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem();
+	if(item)
+	{
+		LLInventoryModel* model = getInventoryModel();
+		const LLUUID new_parent = model->findCategoryUUIDForType(item->getType());
+		// do not restamp on restore.
+		LLInvFVBridge::changeItemParent(model, item, new_parent, FALSE);
+	}
+}
+
+void LLItemBridge::restoreToWorld()
+{
+	LLViewerInventoryItem* itemp = (LLViewerInventoryItem*)getItem();
+	if (itemp)
+	{
+		LLMessageSystem* msg = gMessageSystem;
+		msg->newMessage("RezRestoreToWorld");
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+
+		msg->nextBlockFast(_PREHASH_InventoryData);
+		itemp->packMessage(msg);
+		msg->sendReliable(gAgent.getRegion()->getHost());
+	}
+
+	//Similar functionality to the drag and drop rez logic
+	BOOL remove_from_inventory = FALSE;
+
+	//remove local inventory copy, sim will deal with permissions and removing the item
+	//from the actual inventory if its a no-copy etc
+	if(!itemp->getPermissions().allowCopyBy(gAgent.getID()))
+	{
+		remove_from_inventory = TRUE;
+	}
+
+	// Check if it's in the trash. (again similar to the normal rez logic)
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id))
+	{
+		remove_from_inventory = TRUE;
+	}
+
+	if(remove_from_inventory)
+	{
+		gInventory.deleteObject(itemp->getUUID());
+		gInventory.notifyObservers();
+	}
+}
+
+void LLItemBridge::gotoItem(LLFolderView *folder)
+{
+	LLInventoryObject *obj = getInventoryObject();
+	if (obj && obj->getIsLinkType())
+	{
+		LLInventoryPanel* active_panel = LLFloaterInventory::getActiveInventory()->getPanel();
+		if (active_panel)
+		{
+			active_panel->setSelection(obj->getLinkedUUID(), TAKE_FOCUS_NO);
+		}
+	}
+}
+
+LLUIImagePtr LLItemBridge::getIcon() const
+{
+	return LLUI::getUIImage(ICON_NAME[OBJECT_ICON_NAME]);
+}
+
+PermissionMask LLItemBridge::getPermissionMask() const
+{
+	LLViewerInventoryItem* item = getItem();
+	PermissionMask perm_mask = 0;
+	if(item)
+	{
+		BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
+		BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID());
+		BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER,
+															gAgent.getID());
+
+		if (copy) perm_mask |= PERM_COPY;
+		if (mod)  perm_mask |= PERM_MODIFY;
+		if (xfer) perm_mask |= PERM_TRANSFER;
+
+	}
+	return perm_mask;
+}
+
+const std::string& LLItemBridge::getDisplayName() const
+{
+	if(mDisplayName.empty())
+	{
+		buildDisplayName(getItem(), mDisplayName);
+	}
+	return mDisplayName;
+}
+
+void LLItemBridge::buildDisplayName(LLInventoryItem* item, std::string& name)
+{
+	if(item)
+	{
+		name.assign(item->getName());
+	}
+	else
+	{
+		name.assign(LLStringUtil::null);
+	}
+}
+
+LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const
+{
+	U8 font = LLFontGL::NORMAL;
+
+	if( gAgentWearables.isWearingItem( mUUID ) )
+	{
+		// llinfos << "BOLD" << llendl;
+		font |= LLFontGL::BOLD;
+	}
+
+	const LLViewerInventoryItem* item = getItem();
+	if (item && item->getIsLinkType())
+	{
+		font |= LLFontGL::ITALIC;
+	}
+	return (LLFontGL::StyleFlags)font;
+}
+
+std::string LLItemBridge::getLabelSuffix() const
+{
+	// String table is loaded before login screen and inventory items are
+	// loaded after login, so LLTrans should be ready.
+	static std::string NO_COPY =LLTrans::getString("no_copy");
+	static std::string NO_MOD = LLTrans::getString("no_modify");
+	static std::string NO_XFER = LLTrans::getString("no_transfer");
+	static std::string LINK = LLTrans::getString("link");
+	static std::string BROKEN_LINK = LLTrans::getString("broken_link");
+	std::string suffix;
+	LLInventoryItem* item = getItem();
+	if(item)
+	{
+		// it's a bit confusing to put nocopy/nomod/etc on calling cards.
+		if(LLAssetType::AT_CALLINGCARD != item->getType()
+		   && item->getPermissions().getOwner() == gAgent.getID())
+		{
+			BOOL broken_link = LLAssetType::lookupIsLinkType(item->getType());
+			if (broken_link) return BROKEN_LINK;
+
+			BOOL link = item->getIsLinkType();
+			if (link) return LINK;
+
+			BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
+			if (!copy)
+			{
+				suffix += NO_COPY;
+			}
+			BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID());
+			if (!mod)
+			{
+				suffix += NO_MOD;
+			}
+			BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER,
+																gAgent.getID());
+			if (!xfer)
+			{
+				suffix += NO_XFER;
+			}
+		}
+	}
+	return suffix;
+}
+
+time_t LLItemBridge::getCreationDate() const
+{
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		return item->getCreationDate();
+	}
+	return 0;
+}
+
+
+BOOL LLItemBridge::isItemRenameable() const
+{
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		// (For now) Don't allow calling card rename since that may confuse users as to
+		// what the calling card points to.
+		if (item->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
+		{
+			return FALSE;
+		}
+		return (item->getPermissions().allowModifyBy(gAgent.getID()));
+	}
+	return FALSE;
+}
+
+BOOL LLItemBridge::renameItem(const std::string& new_name)
+{
+	if(!isItemRenameable())
+		return FALSE;
+	LLPreview::dirty(mUUID);
+	LLInventoryModel* model = getInventoryModel();
+	if(!model)
+		return FALSE;
+	LLViewerInventoryItem* item = getItem();
+	if(item && (item->getName() != new_name))
+	{
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+		new_item->rename(new_name);
+		buildDisplayName(new_item, mDisplayName);
+		new_item->updateServer(FALSE);
+		model->updateItem(new_item);
+
+		model->notifyObservers();
+	}
+	// return FALSE because we either notified observers (& therefore
+	// rebuilt) or we didn't update.
+	return FALSE;
+}
+
+
+BOOL LLItemBridge::removeItem()
+{
+	if(!isItemRemovable())
+	{
+		return FALSE;
+	}
+	// move it to the trash
+	LLPreview::hide(mUUID, TRUE);
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	LLViewerInventoryItem* item = getItem();
+
+	// if item is not already in trash
+	if(item && !model->isObjectDescendentOf(mUUID, trash_id))
+	{
+		// move to trash, and restamp
+		LLInvFVBridge::changeItemParent(model, item, trash_id, TRUE);
+		// delete was successful
+		return TRUE;
+	}
+	else
+	{
+		// tried to delete already item in trash (should purge?)
+		return FALSE;
+	}
+}
+
+BOOL LLItemBridge::isItemCopyable() const
+{
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		// can't copy worn objects. DEV-15183
+		LLVOAvatarSelf *avatarp = gAgent.getAvatarObject();
+		if( !avatarp )
+		{
+			return FALSE;
+		}
+
+		if(avatarp->isWearingAttachment(mUUID))
+		{
+			return FALSE;
+		}
+
+		// All items can be copied, not all can be pasted.
+		// The only time an item can't be copied is if it's a link
+		// return (item->getPermissions().allowCopyBy(gAgent.getID()));
+		if (item->getIsLinkType())
+		{
+			return FALSE;
+		}
+		return TRUE;
+	}
+	return FALSE;
+}
+BOOL LLItemBridge::copyToClipboard() const
+{
+	if(isItemCopyable())
+	{
+		LLInventoryClipboard::instance().add(mUUID);
+		return TRUE;
+	}
+	return FALSE;
+}
+
+LLViewerInventoryItem* LLItemBridge::getItem() const
+{
+	LLViewerInventoryItem* item = NULL;
+	LLInventoryModel* model = getInventoryModel();
+	if(model)
+	{
+		item = (LLViewerInventoryItem*)model->getItem(mUUID);
+	}
+	return item;
+}
+
+BOOL LLItemBridge::isItemPermissive() const
+{
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		U32 mask = item->getPermissions().getMaskBase();
+		if((mask & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED)
+		{
+			return TRUE;
+		}
+	}
+	return FALSE;
+}
+
+// +=================================================+
+// |        LLFolderBridge                           |
+// +=================================================+
+
+LLFolderBridge* LLFolderBridge::sSelf=NULL;
+
+// Can be moved to another folder
+BOOL LLFolderBridge::isItemMovable() const
+{
+	LLInventoryObject* obj = getInventoryObject();
+	if(obj)
+	{
+		return (!LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)obj)->getPreferredType()));
+	}
+	return FALSE;
+}
+
+void LLFolderBridge::selectItem()
+{
+}
+
+
+// Can be destroyed (or moved to trash)
+BOOL LLFolderBridge::isItemRemovable()
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model)
+	{
+		return FALSE;
+	}
+
+	if(!model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID()))
+	{
+		return FALSE;
+	}
+
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if( !avatar )
+	{
+		return FALSE;
+	}
+
+	LLInventoryCategory* category = model->getCategory(mUUID);
+	if( !category )
+	{
+		return FALSE;
+	}
+
+	if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+	{
+		return FALSE;
+	}
+
+	LLInventoryModel::cat_array_t	descendent_categories;
+	LLInventoryModel::item_array_t	descendent_items;
+	gInventory.collectDescendents( mUUID, descendent_categories, descendent_items, FALSE );
+
+	S32 i;
+	for( i = 0; i < descendent_categories.count(); i++ )
+	{
+		LLInventoryCategory* category = descendent_categories[i];
+		if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+		{
+			return FALSE;
+		}
+	}
+
+	for( i = 0; i < descendent_items.count(); i++ )
+	{
+		LLInventoryItem* item = descendent_items[i];
+		if( (item->getType() == LLAssetType::AT_CLOTHING) ||
+			(item->getType() == LLAssetType::AT_BODYPART) )
+		{
+			if(gAgentWearables.isWearingItem(item->getUUID()))
+			{
+				return FALSE;
+			}
+		}
+		else
+		if( item->getType() == LLAssetType::AT_OBJECT )
+		{
+			if(avatar->isWearingAttachment(item->getUUID()))
+			{
+				return FALSE;
+			}
+		}
+	}
+
+	return TRUE;
+}
+
+BOOL LLFolderBridge::isUpToDate() const
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+	LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID);
+	if( !category )
+	{
+		return FALSE;
+	}
+
+	return category->getVersion() != LLViewerInventoryCategory::VERSION_UNKNOWN;
+}
+
+BOOL LLFolderBridge::isItemCopyable() const
+{
+	return TRUE;
+}
+
+BOOL LLFolderBridge::copyToClipboard() const
+{
+	if(isItemCopyable())
+	{
+		LLInventoryClipboard::instance().add(mUUID);
+		return TRUE;
+	}
+	return FALSE;
+}
+
+BOOL LLFolderBridge::isClipboardPasteable() const
+{
+	if ( ! LLInvFVBridge::isClipboardPasteable() )
+		return FALSE;
+
+	// Don't allow pasting duplicates to the Calling Card/Friends subfolders, see bug EXT-1599
+	if ( LLFriendCardsManager::instance().isCategoryInFriendFolder( getCategory() ) )
+	{
+		LLInventoryModel* model = getInventoryModel();
+		if ( !model )
+		{
+			return FALSE;
+		}
+
+		LLDynamicArray<LLUUID> objects;
+		LLInventoryClipboard::instance().retrieve(objects);
+		const LLViewerInventoryCategory *current_cat = getCategory();
+
+		// Search for the direct descendent of current Friends subfolder among all pasted items,
+		// and return false if is found.
+		for(S32 i = objects.count() - 1; i >= 0; --i)
+		{
+			const LLUUID &obj_id = objects.get(i);
+			if ( LLFriendCardsManager::instance().isObjDirectDescendentOfCategory(model->getObject(obj_id), current_cat) )
+			{
+				return FALSE;
+			}
+		}
+
+	}
+	return TRUE;
+}
+
+BOOL LLFolderBridge::isClipboardPasteableAsLink() const
+{
+	// Check normal paste-as-link permissions
+	if (!LLInvFVBridge::isClipboardPasteableAsLink())
+	{
+		return FALSE;
+	}
+
+	const LLInventoryModel* model = getInventoryModel();
+	if (!model)
+	{
+		return FALSE;
+	}
+
+	const LLViewerInventoryCategory *current_cat = getCategory();
+	if (current_cat)
+	{
+		const BOOL is_in_friend_folder = LLFriendCardsManager::instance().isCategoryInFriendFolder( current_cat );
+		const LLUUID &current_cat_id = current_cat->getUUID();
+		LLDynamicArray<LLUUID> objects;
+		LLInventoryClipboard::instance().retrieve(objects);
+		S32 count = objects.count();
+		for(S32 i = 0; i < count; i++)
+		{
+			const LLUUID &obj_id = objects.get(i);
+			const LLInventoryCategory *cat = model->getCategory(obj_id);
+			if (cat)
+			{
+				const LLUUID &cat_id = cat->getUUID();
+				// Don't allow recursive pasting
+				if ((cat_id == current_cat_id) ||
+					model->isObjectDescendentOf(current_cat_id, cat_id))
+				{
+					return FALSE;
+				}
+			}
+			// Don't allow pasting duplicates to the Calling Card/Friends subfolders, see bug EXT-1599
+			if ( is_in_friend_folder )
+			{
+				// If object is direct descendent of current Friends subfolder than return false.
+				// Note: We can't use 'const LLInventoryCategory *cat', because it may be null
+				// in case type of obj_id is LLInventoryItem.
+				if ( LLFriendCardsManager::instance().isObjDirectDescendentOfCategory(model->getObject(obj_id), current_cat) )
+				{
+					return FALSE;
+				}
+			}
+		}
+	}
+	return TRUE;
+
+}
+
+BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
+											BOOL drop)
+{
+	// This should never happen, but if an inventory item is incorrectly parented,
+	// the UI will get confused and pass in a NULL.
+	if(!inv_cat) return FALSE;
+
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if(!avatar) return FALSE;
+
+	// cannot drag categories into library
+	if(!isAgentInventory())
+	{
+		return FALSE;
+	}
+
+	// check to make sure source is agent inventory, and is represented there.
+	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
+	BOOL is_agent_inventory = (model->getCategory(inv_cat->getUUID()) != NULL)
+		&& (LLToolDragAndDrop::SOURCE_AGENT == source);
+
+	BOOL accept = FALSE;
+	S32 i;
+	LLInventoryModel::cat_array_t	descendent_categories;
+	LLInventoryModel::item_array_t	descendent_items;
+	if(is_agent_inventory)
+	{
+		const LLUUID& cat_id = inv_cat->getUUID();
+
+		// Is the destination the trash?
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		BOOL move_is_into_trash = (mUUID == trash_id)
+				|| model->isObjectDescendentOf(mUUID, trash_id);
+		BOOL is_movable = (!LLAssetType::lookupIsProtectedCategoryType(inv_cat->getPreferredType()));
+		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
+		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
+		if (move_is_into_current_outfit || move_is_into_outfit)
+		{
+			// BAP - restrictions?
+			is_movable = true;
+		}
+
+		if (mUUID == gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE))
+		{
+			is_movable = FALSE; // It's generally movable but not into Favorites folder. EXT-1604
+		}
+
+		if( is_movable )
+		{
+			gInventory.collectDescendents( cat_id, descendent_categories, descendent_items, FALSE );
+
+			for( i = 0; i < descendent_categories.count(); i++ )
+			{
+				LLInventoryCategory* category = descendent_categories[i];
+				if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+				{
+					// ...can't move "special folders" like Textures
+					is_movable = FALSE;
+					break;
+				}
+			}
+
+			if( is_movable )
+			{
+				if( move_is_into_trash )
+				{
+					for( i = 0; i < descendent_items.count(); i++ )
+					{
+						LLInventoryItem* item = descendent_items[i];
+						if( (item->getType() == LLAssetType::AT_CLOTHING) ||
+							(item->getType() == LLAssetType::AT_BODYPART) )
+						{
+							if( gAgentWearables.isWearingItem( item->getUUID() ) )
+							{
+								is_movable = FALSE;  // It's generally movable, but not into the trash!
+								break;
+							}
+						}
+						else
+						if( item->getType() == LLAssetType::AT_OBJECT )
+						{
+							if( avatar->isWearingAttachment( item->getUUID() ) )
+							{
+								is_movable = FALSE;  // It's generally movable, but not into the trash!
+								break;
+							}
+						}
+					}
+				}
+			}
+		}
+
+
+		accept =	is_movable
+					&& (mUUID != cat_id)								// Can't move a folder into itself
+					&& (mUUID != inv_cat->getParentUUID())				// Avoid moves that would change nothing
+					&& !(model->isObjectDescendentOf(mUUID, cat_id));	// Avoid circularity
+		if(accept && drop)
+		{
+			// Look for any gestures and deactivate them
+			if (move_is_into_trash)
+			{
+				for (i = 0; i < descendent_items.count(); i++)
+				{
+					LLInventoryItem* item = descendent_items[i];
+					if (item->getType() == LLAssetType::AT_GESTURE
+						&& LLGestureManager::instance().isGestureActive(item->getUUID()))
+					{
+						LLGestureManager::instance().deactivateGesture(item->getUUID());
+					}
+				}
+			}
+			// if target is an outfit or current outfit folder we use link
+			if (move_is_into_current_outfit || move_is_into_outfit)
+			{
+#if SUPPORT_ENSEMBLES
+				// BAP - should skip if dup.
+				if (move_is_into_current_outfit)
+				{
+					LLAppearanceManager::wearEnsemble(inv_cat);
+				}
+				else
+				{
+					LLPointer<LLInventoryCallback> cb = NULL;
+					link_inventory_item(
+						gAgent.getID(),
+						inv_cat->getUUID(),
+						mUUID,
+						inv_cat->getName(),
+						LLAssetType::AT_LINK_FOLDER,
+						cb);
+				}
+#endif
+			}
+			else
+			{
+
+				// Reparent the folder and restamp children if it's moving
+				// into trash.
+				LLInvFVBridge::changeCategoryParent(
+					model,
+					(LLViewerInventoryCategory*)inv_cat,
+					mUUID,
+					move_is_into_trash);
+			}
+		}
+	}
+	else if(LLToolDragAndDrop::SOURCE_WORLD == source)
+	{
+		// content category has same ID as object itself
+		LLUUID object_id = inv_cat->getUUID();
+		LLUUID category_id = mUUID;
+		accept = move_inv_category_world_to_agent(object_id, category_id, drop);
+	}
+	return accept;
+}
+
+void warn_move_inventory(LLViewerObject* object, LLMoveInv* move_inv)
+{
+	const char* dialog = NULL;
+	if (object->flagScripted())
+	{
+		dialog = "MoveInventoryFromScriptedObject";
+	}
+	else
+	{
+		dialog = "MoveInventoryFromObject";
+	}
+	LLNotifications::instance().add(dialog, LLSD(), LLSD(), boost::bind(move_task_inventory_callback, _1, _2, move_inv));
+}
+
+// Move/copy all inventory items from the Contents folder of an in-world
+// object to the agent's inventory, inside a given category.
+BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
+									  const LLUUID& category_id,
+									  BOOL drop,
+									  void (*callback)(S32, void*),
+									  void* user_data)
+{
+	// Make sure the object exists. If we allowed dragging from
+	// anonymous objects, it would be possible to bypass
+	// permissions.
+	// content category has same ID as object itself
+	LLViewerObject* object = gObjectList.findObject(object_id);
+	if(!object)
+	{
+		llinfos << "Object not found for drop." << llendl;
+		return FALSE;
+	}
+
+	// this folder is coming from an object, as there is only one folder in an object, the root,
+	// we need to collect the entire contents and handle them as a group
+	InventoryObjectList inventory_objects;
+	object->getInventoryContents(inventory_objects);
+
+	if (inventory_objects.empty())
+	{
+		llinfos << "Object contents not found for drop." << llendl;
+		return FALSE;
+	}
+
+	BOOL accept = TRUE;
+	BOOL is_move = FALSE;
+
+	// coming from a task. Need to figure out if the person can
+	// move/copy this item.
+	InventoryObjectList::iterator it = inventory_objects.begin();
+	InventoryObjectList::iterator end = inventory_objects.end();
+	for ( ; it != end; ++it)
+	{
+		// coming from a task. Need to figure out if the person can
+		// move/copy this item.
+		LLPermissions perm(((LLInventoryItem*)((LLInventoryObject*)(*it)))->getPermissions());
+		if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
+			&& perm.allowTransferTo(gAgent.getID())))
+//			|| gAgent.isGodlike())
+		{
+			accept = TRUE;
+		}
+		else if(object->permYouOwner())
+		{
+			// If the object cannot be copied, but the object the
+			// inventory is owned by the agent, then the item can be
+			// moved from the task to agent inventory.
+			is_move = TRUE;
+			accept = TRUE;
+		}
+		else
+		{
+			accept = FALSE;
+			break;
+		}
+	}
+
+	if(drop && accept)
+	{
+		it = inventory_objects.begin();
+		InventoryObjectList::iterator first_it = inventory_objects.begin();
+		LLMoveInv* move_inv = new LLMoveInv;
+		move_inv->mObjectID = object_id;
+		move_inv->mCategoryID = category_id;
+		move_inv->mCallback = callback;
+		move_inv->mUserData = user_data;
+
+		for ( ; it != end; ++it)
+		{
+			two_uuids_t two(category_id, (*it)->getUUID());
+			move_inv->mMoveList.push_back(two);
+		}
+
+		if(is_move)
+		{
+			// Callback called from within here.
+			warn_move_inventory(object, move_inv);
+		}
+		else
+		{
+			LLNotification::Params params("MoveInventoryFromObject");
+			params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv));
+			LLNotifications::instance().forceResponse(params, 0);
+		}
+	}
+	return accept;
+}
+
+bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat,
+									 LLInventoryItem* item)
+{
+	// Valid COF items are:
+	// - links to wearables (body parts or clothing)
+	// - links to attachments
+	// - links to gestures
+	// - links to ensemble folders
+	LLViewerInventoryItem *linked_item = ((LLViewerInventoryItem*)item)->getLinkedItem(); // BAP - safe?
+	if (linked_item)
+	{
+		LLAssetType::EType type = linked_item->getType();
+		return (type == LLAssetType::AT_CLOTHING ||
+				type == LLAssetType::AT_BODYPART ||
+				type == LLAssetType::AT_GESTURE ||
+				type == LLAssetType::AT_OBJECT);
+	}
+	else
+	{
+		LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe?
+		// BAP remove AT_NONE support after ensembles are fully working?
+		return (linked_category &&
+				((linked_category->getPreferredType() == LLAssetType::AT_NONE) ||
+				 (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType()))));
+	}
+}
+
+
+bool LLFindWearables::operator()(LLInventoryCategory* cat,
+								 LLInventoryItem* item)
+{
+	if(item)
+	{
+		if((item->getType() == LLAssetType::AT_CLOTHING)
+		   || (item->getType() == LLAssetType::AT_BODYPART))
+		{
+			return TRUE;
+		}
+	}
+	return FALSE;
+}
+
+
+
+//Used by LLFolderBridge as callback for directory recursion.
+class LLRightClickInventoryFetchObserver : public LLInventoryFetchObserver
+{
+public:
+	LLRightClickInventoryFetchObserver() :
+		mCopyItems(false)
+	{ };
+	LLRightClickInventoryFetchObserver(const LLUUID& cat_id, bool copy_items) :
+		mCatID(cat_id),
+		mCopyItems(copy_items)
+		{ };
+	virtual void done()
+	{
+		// we've downloaded all the items, so repaint the dialog
+		LLFolderBridge::staticFolderOptionsMenu();
+
+		gInventory.removeObserver(this);
+		delete this;
+	}
+
+
+protected:
+	LLUUID mCatID;
+	bool mCopyItems;
+
+};
+
+//Used by LLFolderBridge as callback for directory recursion.
+class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver
+{
+public:
+	LLRightClickInventoryFetchDescendentsObserver(bool copy_items) : mCopyItems(copy_items) {}
+	~LLRightClickInventoryFetchDescendentsObserver() {}
+	virtual void done();
+protected:
+	bool mCopyItems;
+};
+
+void LLRightClickInventoryFetchDescendentsObserver::done()
+{
+	// Avoid passing a NULL-ref as mCompleteFolders.front() down to
+	// gInventory.collectDescendents()
+	if( mCompleteFolders.empty() )
+	{
+		llwarns << "LLRightClickInventoryFetchDescendentsObserver::done with empty mCompleteFolders" << llendl;
+		dec_busy_count();
+		gInventory.removeObserver(this);
+		delete this;
+		return;
+	}
+
+	// What we do here is get the complete information on the items in
+	// the library, and set up an observer that will wait for that to
+	// happen.
+	LLInventoryModel::cat_array_t cat_array;
+	LLInventoryModel::item_array_t item_array;
+	gInventory.collectDescendents(mCompleteFolders.front(),
+								  cat_array,
+								  item_array,
+								  LLInventoryModel::EXCLUDE_TRASH);
+	S32 count = item_array.count();
+#if 0 // HACK/TODO: Why?
+	// This early causes a giant menu to get produced, and doesn't seem to be needed.
+	if(!count)
+	{
+		llwarns << "Nothing fetched in category " << mCompleteFolders.front()
+				<< llendl;
+		dec_busy_count();
+		gInventory.removeObserver(this);
+		delete this;
+		return;
+	}
+#endif
+
+	LLRightClickInventoryFetchObserver* outfit;
+	outfit = new LLRightClickInventoryFetchObserver(mCompleteFolders.front(), mCopyItems);
+	LLInventoryFetchObserver::item_ref_t ids;
+	for(S32 i = 0; i < count; ++i)
+	{
+		ids.push_back(item_array.get(i)->getUUID());
+	}
+
+	// clean up, and remove this as an observer since the call to the
+	// outfit could notify observers and throw us into an infinite
+	// loop.
+	dec_busy_count();
+	gInventory.removeObserver(this);
+	delete this;
+
+	// increment busy count and either tell the inventory to check &
+	// call done, or add this object to the inventory for observation.
+	inc_busy_count();
+
+	// do the fetch
+	outfit->fetchItems(ids);
+	outfit->done();				//Not interested in waiting and this will be right 99% of the time.
+//Uncomment the following code for laggy Inventory UI.
+/*	if(outfit->isEverythingComplete())
+	{
+		// everything is already here - call done.
+		outfit->done();
+	}
+	else
+	{
+		// it's all on it's way - add an observer, and the inventory
+		// will call done for us when everything is here.
+		gInventory.addObserver(outfit);
+	}*/
+}
+
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLInventoryWearObserver
+//
+// Observer for "copy and wear" operation to support knowing
+// when the all of the contents have been added to inventory.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLInventoryCopyAndWearObserver : public LLInventoryObserver
+{
+public:
+	LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) :mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {}
+	virtual ~LLInventoryCopyAndWearObserver() {}
+	virtual void changed(U32 mask);
+
+protected:
+	LLUUID mCatID;
+	int    mContentsCount;
+	BOOL   mFolderAdded;
+};
+
+
+
+void LLInventoryCopyAndWearObserver::changed(U32 mask)
+{
+	if((mask & (LLInventoryObserver::ADD)) != 0)
+	{
+		if (!mFolderAdded)
+		{
+			const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
+
+			std::set<LLUUID>::const_iterator id_it = changed_items.begin();
+			std::set<LLUUID>::const_iterator id_end = changed_items.end();
+			for (;id_it != id_end; ++id_it)
+			{
+				if ((*id_it) == mCatID)
+				{
+					mFolderAdded = TRUE;
+					break;
+				}
+			}
+		}
+
+		if (mFolderAdded)
+		{
+			LLViewerInventoryCategory* category = gInventory.getCategory(mCatID);
+
+			if (NULL == category)
+			{
+				llwarns << "gInventory.getCategory(" << mCatID
+					<< ") was NULL" << llendl;
+			}
+			else
+			{
+				if (category->getDescendentCount() ==
+				    mContentsCount)
+				{
+					gInventory.removeObserver(this);
+					LLAppearanceManager::wearInventoryCategory(category, FALSE, TRUE);
+					delete this;
+				}
+			}
+		}
+
+	}
+}
+
+
+
+void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("open" == action)
+	{
+		openItem();
+		return;
+	}
+	else if ("paste" == action)
+	{
+		pasteFromClipboard();
+		return;
+	}
+	else if ("paste_link" == action)
+	{
+		pasteLinkFromClipboard();
+		return;
+	}
+	else if ("properties" == action)
+	{
+		showProperties();
+		return;
+	}
+	else if ("replaceoutfit" == action)
+	{
+		modifyOutfit(FALSE);
+		return;
+	}
+#if SUPPORT_ENSEMBLES
+	else if ("wearasensemble" == action)
+	{
+		LLInventoryModel* model = getInventoryModel();
+		if(!model) return;
+		LLViewerInventoryCategory* cat = getCategory();
+		if(!cat) return;
+		LLAppearanceManager::wearEnsemble(cat,true);
+		return;
+	}
+#endif
+	else if ("addtooutfit" == action)
+	{
+		modifyOutfit(TRUE);
+		return;
+	}
+	else if ("copy" == action)
+	{
+		copyToClipboard();
+		return;
+	}
+	else if ("removefromoutfit" == action)
+	{
+		LLInventoryModel* model = getInventoryModel();
+		if(!model) return;
+		LLViewerInventoryCategory* cat = getCategory();
+		if(!cat) return;
+
+		remove_inventory_category_from_avatar ( cat );
+		return;
+	}
+	else if ("purge" == action)
+	{
+		purgeItem(model, mUUID);
+		return;
+	}
+	else if ("restore" == action)
+	{
+		restoreItem();
+		return;
+	}
+}
+
+void LLFolderBridge::openItem()
+{
+	lldebugs << "LLFolderBridge::openItem()" << llendl;
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return;
+	bool fetching_inventory = model->fetchDescendentsOf(mUUID);
+	// Only change folder type if we have the folder contents.
+	if (!fetching_inventory)
+	{
+		// Disabling this for now, it's causing crash when new items are added to folders
+		// since folder type may change before new item item has finished processing.
+		// determineFolderType();
+	}
+}
+
+void LLFolderBridge::closeItem()
+{
+	determineFolderType();
+}
+
+void LLFolderBridge::determineFolderType()
+{
+	if (isUpToDate())
+	{
+		LLInventoryModel* model = getInventoryModel();
+		LLViewerInventoryCategory* category = model->getCategory(mUUID);
+		category->determineFolderType();
+	}
+}
+
+BOOL LLFolderBridge::isItemRenameable() const
+{
+	LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)getCategory();
+	if(cat && !LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())
+	   && (cat->getOwnerID() == gAgent.getID()))
+	{
+		return TRUE;
+	}
+	return FALSE;
+}
+
+void LLFolderBridge::restoreItem()
+{
+	LLViewerInventoryCategory* cat;
+	cat = (LLViewerInventoryCategory*)getCategory();
+	if(cat)
+	{
+		LLInventoryModel* model = getInventoryModel();
+		LLUUID new_parent = model->findCategoryUUIDForType(cat->getType());
+		// do not restamp children on restore
+		LLInvFVBridge::changeCategoryParent(model, cat, new_parent, FALSE);
+	}
+}
+
+LLAssetType::EType LLFolderBridge::getPreferredType() const
+{
+	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLViewerInventoryCategory* cat = getCategory();
+	if(cat)
+	{
+		preferred_type = cat->getPreferredType();
+	}
+
+	return preferred_type;
+}
+
+// Icons for folders are based on the preferred type
+LLUIImagePtr LLFolderBridge::getIcon() const
+{
+	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLViewerInventoryCategory* cat = getCategory();
+	if(cat)
+	{
+		preferred_type = cat->getPreferredType();
+	}
+	return getIcon(preferred_type);
+}
+
+LLUIImagePtr LLFolderBridge::getIcon(LLAssetType::EType preferred_type)
+{
+	// we only have one folder image now
+	return LLUI::getUIImage("Inv_FolderClosed");
+}
+
+BOOL LLFolderBridge::renameItem(const std::string& new_name)
+{
+	if(!isItemRenameable())
+		return FALSE;
+	LLInventoryModel* model = getInventoryModel();
+	if(!model)
+		return FALSE;
+	LLViewerInventoryCategory* cat = getCategory();
+	if(cat && (cat->getName() != new_name))
+	{
+		LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat);
+		new_cat->rename(new_name);
+		new_cat->updateServer(FALSE);
+		model->updateCategory(new_cat);
+
+		model->notifyObservers();
+	}
+	// return FALSE because we either notified observers (& therefore
+	// rebuilt) or we didn't update.
+	return FALSE;
+}
+
+BOOL LLFolderBridge::removeItem()
+{
+	if(!isItemRemovable())
+	{
+		return FALSE;
+	}
+	// move it to the trash
+	LLPreview::hide(mUUID);
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+
+	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+
+	// Look for any gestures and deactivate them
+	LLInventoryModel::cat_array_t	descendent_categories;
+	LLInventoryModel::item_array_t	descendent_items;
+	gInventory.collectDescendents( mUUID, descendent_categories, descendent_items, FALSE );
+
+	S32 i;
+	for (i = 0; i < descendent_items.count(); i++)
+	{
+		LLInventoryItem* item = descendent_items[i];
+		if (item->getType() == LLAssetType::AT_GESTURE
+			&& LLGestureManager::instance().isGestureActive(item->getUUID()))
+		{
+			LLGestureManager::instance().deactivateGesture(item->getUUID());
+		}
+	}
+
+	// go ahead and do the normal remove if no 'last calling
+	// cards' are being removed.
+	LLViewerInventoryCategory* cat = getCategory();
+	if(cat)
+	{
+		LLInvFVBridge::changeCategoryParent(model, cat, trash_id, TRUE);
+	}
+
+	return TRUE;
+}
+
+void LLFolderBridge::pasteFromClipboard()
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(model && isClipboardPasteable())
+	{
+		LLInventoryItem* item = NULL;
+		LLDynamicArray<LLUUID> objects;
+		LLInventoryClipboard::instance().retrieve(objects);
+		S32 count = objects.count();
+		const LLUUID parent_id(mUUID);
+		for(S32 i = 0; i < count; i++)
+		{
+			item = model->getItem(objects.get(i));
+			if (item)
+			{
+				if(LLInventoryClipboard::instance().isCutMode())
+				{
+					// move_inventory_item() is not enough,
+					//we have to update inventory locally too
+					changeItemParent(model, dynamic_cast<LLViewerInventoryItem*>(item), parent_id, FALSE);
+				}
+				else
+				{
+					copy_inventory_item(
+						gAgent.getID(),
+						item->getPermissions().getOwner(),
+						item->getUUID(),
+						parent_id,
+						std::string(),
+						LLPointer<LLInventoryCallback>(NULL));
+				}
+			}
+		}
+	}
+}
+
+void LLFolderBridge::pasteLinkFromClipboard()
+{
+	const LLInventoryModel* model = getInventoryModel();
+	if(model)
+	{
+		LLDynamicArray<LLUUID> objects;
+		LLInventoryClipboard::instance().retrieve(objects);
+		S32 count = objects.count();
+		LLUUID parent_id(mUUID);
+		for(S32 i = 0; i < count; i++)
+		{
+			const LLUUID &object_id = objects.get(i);
+#if SUPPORT_ENSEMBLES
+			if (LLInventoryCategory *cat = model->getCategory(object_id))
+			{
+				link_inventory_item(
+					gAgent.getID(),
+					cat->getUUID(),
+					parent_id,
+					cat->getName(),
+					LLAssetType::AT_LINK_FOLDER,
+					LLPointer<LLInventoryCallback>(NULL));
+			}
+			else
+#endif
+			if (LLInventoryItem *item = model->getItem(object_id))
+			{
+				link_inventory_item(
+					gAgent.getID(),
+					item->getUUID(),
+					parent_id,
+					item->getName(),
+					LLAssetType::AT_LINK,
+					LLPointer<LLInventoryCallback>(NULL));
+			}
+		}
+	}
+}
+
+void LLFolderBridge::staticFolderOptionsMenu()
+{
+	if (!sSelf) return;
+	sSelf->folderOptionsMenu();
+}
+
+void LLFolderBridge::folderOptionsMenu()
+{
+	std::vector<std::string> disabled_items;
+
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return;
+
+	const LLInventoryCategory* category = model->getCategory(mUUID);
+	LLAssetType::EType type = category->getPreferredType();
+	const bool is_default_folder = category && LLAssetType::lookupIsProtectedCategoryType(type);
+	// BAP change once we're no longer treating regular categories as ensembles.
+	const bool is_ensemble = category && (type == LLAssetType::AT_NONE ||
+										  LLAssetType::lookupIsEnsembleCategoryType(type));
+
+	// calling card related functionality for folders.
+
+	// Only enable calling-card related options for non-default folders.
+	if (!is_default_folder)
+	{
+		LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
+		if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard))
+		{
+			mItems.push_back(std::string("Calling Card Separator"));
+			mItems.push_back(std::string("Conference Chat Folder"));
+			mItems.push_back(std::string("IM All Contacts In Folder"));
+		}
+	}
+
+	// wearables related functionality for folders.
+	//is_wearable
+	LLFindWearables is_wearable;
+	LLIsType is_object( LLAssetType::AT_OBJECT );
+	LLIsType is_gesture( LLAssetType::AT_GESTURE );
+
+	if (mWearables ||
+		checkFolderForContentsOfType(model, is_wearable)  ||
+		checkFolderForContentsOfType(model, is_object) ||
+		checkFolderForContentsOfType(model, is_gesture) )
+	{
+		mItems.push_back(std::string("Folder Wearables Separator"));
+
+		// Only enable add/replace outfit for non-default folders.
+		if (!is_default_folder)
+		{
+			mItems.push_back(std::string("Add To Outfit"));
+			mItems.push_back(std::string("Replace Outfit"));
+		}
+		if (is_ensemble)
+		{
+			mItems.push_back(std::string("Wear As Ensemble"));
+		}
+		mItems.push_back(std::string("Take Off Items"));
+	}
+	hide_context_entries(*mMenu, mItems, disabled_items);
+}
+
+BOOL LLFolderBridge::checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& is_type)
+{
+	LLInventoryModel::cat_array_t cat_array;
+	LLInventoryModel::item_array_t item_array;
+	model->collectDescendentsIf(mUUID,
+								cat_array,
+								item_array,
+								LLInventoryModel::EXCLUDE_TRASH,
+								is_type);
+	return ((item_array.count() > 0) ? TRUE : FALSE );
+}
+
+// Flags unused
+void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	mItems.clear();
+	mDisabledItems.clear();
+
+	lldebugs << "LLFolderBridge::buildContextMenu()" << llendl;
+//	std::vector<std::string> disabled_items;
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return;
+	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+
+	mItems.clear(); //adding code to clear out member Items (which means Items should not have other data here at this point)
+	mDisabledItems.clear(); //adding code to clear out disabled members from previous
+	if (lost_and_found_id == mUUID)
+	  {
+		// This is the lost+found folder.
+		  mItems.push_back(std::string("Empty Lost And Found"));
+	  }
+
+	if(trash_id == mUUID)
+	{
+		// This is the trash.
+		mItems.push_back(std::string("Empty Trash"));
+	}
+	else if(model->isObjectDescendentOf(mUUID, trash_id))
+	{
+		// This is a folder in the trash.
+		mItems.clear(); // clear any items that used to exist
+		mItems.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			mDisabledItems.push_back(std::string("Purge Item"));
+		}
+
+		mItems.push_back(std::string("Restore Item"));
+	}
+	else if(isAgentInventory()) // do not allow creating in library
+	{
+		LLViewerInventoryCategory *cat =  getCategory();
+
+		// BAP removed protected check to re-enable standard ops in untyped folders.
+		// Not sure what the right thing is to do here.
+		if (!isCOFFolder() && cat /*&&
+			LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())*/)
+		{
+			// Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694.
+			if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat))
+				mItems.push_back(std::string("New Folder"));
+			mItems.push_back(std::string("New Script"));
+			mItems.push_back(std::string("New Note"));
+			mItems.push_back(std::string("New Gesture"));
+			mItems.push_back(std::string("New Clothes"));
+			mItems.push_back(std::string("New Body Parts"));
+			mItems.push_back(std::string("Change Type"));
+
+			LLViewerInventoryCategory *cat = getCategory();
+			if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))
+			{
+				mDisabledItems.push_back(std::string("Change Type"));
+			}
+
+			getClipboardEntries(false, mItems, mDisabledItems, flags);
+		}
+		else
+		{
+			// Want some but not all of the items from getClipboardEntries for outfits.
+			if (cat && cat->getPreferredType()==LLAssetType::AT_OUTFIT)
+			{
+				mItems.push_back(std::string("Rename"));
+				mItems.push_back(std::string("Delete"));
+			}
+		}
+
+		//Added by spatters to force inventory pull on right-click to display folder options correctly. 07-17-06
+		mCallingCards = mWearables = FALSE;
+
+		LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
+		if (checkFolderForContentsOfType(model, is_callingcard))
+		{
+			mCallingCards=TRUE;
+		}
+
+		LLFindWearables is_wearable;
+		LLIsType is_object( LLAssetType::AT_OBJECT );
+		LLIsType is_gesture( LLAssetType::AT_GESTURE );
+
+		if (checkFolderForContentsOfType(model, is_wearable)  ||
+			checkFolderForContentsOfType(model, is_object) ||
+			checkFolderForContentsOfType(model, is_gesture) )
+		{
+			mWearables=TRUE;
+		}
+
+		mMenu = &menu;
+		sSelf = this;
+		LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(FALSE);
+
+		LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+		LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID);
+		if (category)
+		{
+			folders.push_back(category->getUUID());
+		}
+		fetch->fetchDescendents(folders);
+		inc_busy_count();
+		if(fetch->isEverythingComplete())
+		{
+			// everything is already here - call done.
+			fetch->done();
+		}
+		else
+		{
+			// it's all on it's way - add an observer, and the inventory
+			// will call done for us when everything is here.
+			gInventory.addObserver(fetch);
+		}
+	}
+	else
+	{
+		mItems.push_back(std::string("--no options--"));
+		mDisabledItems.push_back(std::string("--no options--"));
+	}
+	hide_context_entries(menu, mItems, mDisabledItems);
+}
+
+BOOL LLFolderBridge::hasChildren() const
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+	LLInventoryModel::EHasChildren has_children;
+	has_children = gInventory.categoryHasChildren(mUUID);
+	return has_children != LLInventoryModel::CHILDREN_NO;
+}
+
+BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop,
+								EDragAndDropType cargo_type,
+								void* cargo_data)
+{
+	//llinfos << "LLFolderBridge::dragOrDrop()" << llendl;
+	BOOL accept = FALSE;
+	switch(cargo_type)
+	{
+		case DAD_TEXTURE:
+		case DAD_SOUND:
+		case DAD_CALLINGCARD:
+		case DAD_LANDMARK:
+		case DAD_SCRIPT:
+		case DAD_OBJECT:
+		case DAD_NOTECARD:
+		case DAD_CLOTHING:
+		case DAD_BODYPART:
+		case DAD_ANIMATION:
+		case DAD_GESTURE:
+		case DAD_LINK:
+			accept = dragItemIntoFolder((LLInventoryItem*)cargo_data,
+										drop);
+			break;
+		case DAD_CATEGORY:
+			if (LLFriendCardsManager::instance().isAnyFriendCategory(mUUID))
+			{
+				accept = FALSE;
+			}
+			else
+			{
+				accept = dragCategoryIntoFolder((LLInventoryCategory*)cargo_data, drop);
+			}
+			break;
+		default:
+			break;
+	}
+	return accept;
+}
+
+LLViewerInventoryCategory* LLFolderBridge::getCategory() const
+{
+	LLViewerInventoryCategory* cat = NULL;
+	LLInventoryModel* model = getInventoryModel();
+	if(model)
+	{
+		cat = (LLViewerInventoryCategory*)model->getCategory(mUUID);
+	}
+	return cat;
+}
+
+
+// static
+void LLFolderBridge::pasteClipboard(void* user_data)
+{
+	LLFolderBridge* self = (LLFolderBridge*)user_data;
+	if(self) self->pasteFromClipboard();
+}
+
+void LLFolderBridge::createNewCategory(void* user_data)
+{
+	LLFolderBridge* bridge = (LLFolderBridge*)user_data;
+	if(!bridge) return;
+	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(bridge->mInventoryPanel.get());
+	if (!panel) return;
+	LLInventoryModel* model = panel->getModel();
+	if(!model) return;
+	LLUUID id;
+	id = model->createNewCategory(bridge->getUUID(),
+								  LLAssetType::AT_NONE,
+								  LLStringUtil::null);
+	model->notifyObservers();
+
+	// At this point, the bridge has probably been deleted, but the
+	// view is still there.
+	panel->setSelection(id, TAKE_FOCUS_YES);
+}
+
+void LLFolderBridge::createNewShirt(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHIRT);
+}
+
+void LLFolderBridge::createNewPants(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_PANTS);
+}
+
+void LLFolderBridge::createNewShoes(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHOES);
+}
+
+void LLFolderBridge::createNewSocks(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SOCKS);
+}
+
+void LLFolderBridge::createNewJacket(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_JACKET);
+}
+
+void LLFolderBridge::createNewSkirt(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SKIRT);
+}
+
+void LLFolderBridge::createNewGloves(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_GLOVES);
+}
+
+void LLFolderBridge::createNewUndershirt(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_UNDERSHIRT);
+}
+
+void LLFolderBridge::createNewUnderpants(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_UNDERPANTS);
+}
+
+void LLFolderBridge::createNewShape(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHAPE);
+}
+
+void LLFolderBridge::createNewSkin(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SKIN);
+}
+
+void LLFolderBridge::createNewHair(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_HAIR);
+}
+
+void LLFolderBridge::createNewEyes(void* user_data)
+{
+	LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_EYES);
+}
+
+// static
+void LLFolderBridge::createWearable(LLFolderBridge* bridge, EWearableType type)
+{
+	if(!bridge) return;
+	LLUUID parent_id = bridge->getUUID();
+	createWearable(parent_id, type);
+}
+
+// Separate function so can be called by global menu as well as right-click
+// menu.
+// static
+void LLFolderBridge::createWearable(LLUUID parent_id, EWearableType type)
+{
+	LLWearable* wearable = LLWearableList::instance().createNewWearable(type);
+	LLAssetType::EType asset_type = wearable->getAssetType();
+	LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE;
+	create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
+		parent_id, wearable->getTransactionID(), wearable->getName(),
+		wearable->getDescription(), asset_type, inv_type, wearable->getType(),
+		wearable->getPermissions().getMaskNextOwner(),
+		LLPointer<LLInventoryCallback>(NULL));
+}
+
+void LLFolderBridge::modifyOutfit(BOOL append)
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return;
+	LLViewerInventoryCategory* cat = getCategory();
+	if(!cat) return;
+
+	// BAP - was:
+	// wear_inventory_category_on_avatar( cat, append );
+	LLAppearanceManager::wearInventoryCategory( cat, FALSE, append );
+}
+
+// helper stuff
+bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv* move_inv)
+{
+	LLFloaterOpenObject::LLCatAndWear* cat_and_wear = (LLFloaterOpenObject::LLCatAndWear* )move_inv->mUserData;
+	LLViewerObject* object = gObjectList.findObject(move_inv->mObjectID);
+	S32 option = LLNotification::getSelectedOption(notification, response);
+
+	if(option == 0 && object)
+	{
+		if (cat_and_wear && cat_and_wear->mWear)
+		{
+			InventoryObjectList inventory_objects;
+			object->getInventoryContents(inventory_objects);
+			int contents_count = inventory_objects.size()-1; //subtract one for containing folder
+
+			LLInventoryCopyAndWearObserver* inventoryObserver = new LLInventoryCopyAndWearObserver(cat_and_wear->mCatID, contents_count);
+			gInventory.addObserver(inventoryObserver);
+		}
+
+		two_uuids_list_t::iterator move_it;
+		for (move_it = move_inv->mMoveList.begin();
+			move_it != move_inv->mMoveList.end();
+			++move_it)
+		{
+			object->moveInventory(move_it->first, move_it->second);
+		}
+
+		// update the UI.
+		dialog_refresh_all();
+	}
+
+	if (move_inv->mCallback)
+	{
+		move_inv->mCallback(option, move_inv->mUserData);
+	}
+
+	delete move_inv;
+	return false;
+}
+
+/*
+Next functions intended to reorder items in the inventory folder and save order on server
+Is now used for Favorites folder.
+
+*TODO: refactoring is needed with Favorites Bar functionality. Probably should be moved in LLInventoryModel
+*/
+void saveItemsOrder(LLInventoryModel::item_array_t& items)
+{
+	int sortField = 0;
+
+	// current order is saved by setting incremental values (1, 2, 3, ...) for the sort field
+	for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i)
+	{
+		LLViewerInventoryItem* item = *i;
+
+		item->setSortField(++sortField);
+		item->setComplete(TRUE);
+		item->updateServer(FALSE);
+
+		gInventory.updateItem(item);
+	}
+
+	gInventory.notifyObservers();
+}
+
+LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id)
+{
+	LLInventoryModel::item_array_t::iterator result = items.end();
+
+	for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i)
+	{
+		if ((*i)->getUUID() == id)
+		{
+			result = i;
+			break;
+		}
+	}
+
+	return result;
+}
+
+void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId)
+{
+	LLViewerInventoryItem* srcItem = gInventory.getItem(srcItemId);
+	LLViewerInventoryItem* destItem = gInventory.getItem(destItemId);
+
+	items.erase(findItemByUUID(items, srcItem->getUUID()));
+	items.insert(findItemByUUID(items, destItem->getUUID()), srcItem);
+}
+
+BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
+										BOOL drop)
+{
+	LLInventoryModel* model = getInventoryModel();
+	if(!model) return FALSE;
+
+	// cannot drag into library
+	if(!isAgentInventory())
+	{
+		return FALSE;
+	}
+
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if(!avatar) return FALSE;
+
+	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
+	BOOL accept = FALSE;
+	LLViewerObject* object = NULL;
+	if(LLToolDragAndDrop::SOURCE_AGENT == source)
+	{
+
+		BOOL is_movable = TRUE;
+		switch( inv_item->getActualType() )
+		{
+		case LLAssetType::AT_ROOT_CATEGORY:
+			is_movable = FALSE;
+			break;
+
+		case LLAssetType::AT_CATEGORY:
+			is_movable = !LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)inv_item)->getPreferredType());
+			break;
+		default:
+			break;
+		}
+
+		LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
+		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
+		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
+
+		if(is_movable && move_is_into_trash)
+		{
+			switch(inv_item->getType())
+			{
+			case LLAssetType::AT_CLOTHING:
+			case LLAssetType::AT_BODYPART:
+				is_movable = !gAgentWearables.isWearingItem(inv_item->getUUID());
+				break;
+
+			case LLAssetType::AT_OBJECT:
+				is_movable = !avatar->isWearingAttachment(inv_item->getUUID());
+				break;
+			default:
+				break;
+			}
+		}
+
+		if ( is_movable )
+		{
+			// Don't allow creating duplicates in the Calling Card/Friends
+			// subfolders, see bug EXT-1599. Check is item direct descendent
+			// of target folder and forbid item's movement if it so.
+			// Note: isItemDirectDescendentOfCategory checks if
+			// passed category is in the Calling Card/Friends folder
+			is_movable = ! LLFriendCardsManager::instance()
+				.isObjDirectDescendentOfCategory (inv_item, getCategory());
+		}
+
+		LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+
+		// we can move item inside a folder only if this folder is Favorites. See EXT-719
+		accept = is_movable && ((mUUID != inv_item->getParentUUID()) || (mUUID == favorites_id));
+		if(accept && drop)
+		{
+			if (inv_item->getType() == LLAssetType::AT_GESTURE
+				&& LLGestureManager::instance().isGestureActive(inv_item->getUUID()) && move_is_into_trash)
+			{
+				LLGestureManager::instance().deactivateGesture(inv_item->getUUID());
+			}
+			// If an item is being dragged between windows, unselect
+			// everything in the active window so that we don't follow
+			// the selection to its new location (which is very
+			// annoying).
+			if (LLFloaterInventory::getActiveInventory())
+			{
+				LLInventoryPanel* active_panel = LLFloaterInventory::getActiveInventory()->getPanel();
+				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
+				if (active_panel && (panel != active_panel))
+				{
+					active_panel->unSelectAll();
+				}
+			}
+
+			// if dragging from/into favorites folder only reorder items
+			if ((mUUID == inv_item->getParentUUID()) && (favorites_id == mUUID))
+			{
+				LLInventoryModel::cat_array_t cats;
+				LLInventoryModel::item_array_t items;
+				LLIsType is_type(LLAssetType::AT_LANDMARK);
+				model->collectDescendentsIf(favorites_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type);
+
+				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
+				LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
+				if (itemp)
+				{
+					LLUUID srcItemId = inv_item->getUUID();
+					LLUUID destItemId = itemp->getListener()->getUUID();
+
+					// update order
+					updateItemsOrder(items, srcItemId, destItemId);
+
+					saveItemsOrder(items);
+				}
+			}
+			else if (favorites_id == mUUID) // if target is the favorites folder we use copy
+			{
+				copy_inventory_item(
+					gAgent.getID(),
+					inv_item->getPermissions().getOwner(),
+					inv_item->getUUID(),
+					mUUID,
+					std::string(),
+					LLPointer<LLInventoryCallback>(NULL));
+			}
+			else if (move_is_into_current_outfit || move_is_into_outfit)
+			{
+				// BAP - should skip if dup.
+				if (move_is_into_current_outfit)
+				{
+					LLAppearanceManager::wearItem(inv_item);
+				}
+				else
+				{
+					LLPointer<LLInventoryCallback> cb = NULL;
+					link_inventory_item(
+						gAgent.getID(),
+						inv_item->getUUID(),
+						mUUID,
+						std::string(),
+						LLAssetType::AT_LINK,
+						cb);
+				}
+			}
+			else
+			{
+				// restamp if the move is into the trash.
+				LLInvFVBridge::changeItemParent(
+					model,
+					(LLViewerInventoryItem*)inv_item,
+					mUUID,
+					move_is_into_trash);
+			}
+		}
+	}
+	else if(LLToolDragAndDrop::SOURCE_WORLD == source)
+	{
+		// Make sure the object exists. If we allowed dragging from
+		// anonymous objects, it would be possible to bypass
+		// permissions.
+		object = gObjectList.findObject(inv_item->getParentUUID());
+		if(!object)
+		{
+			llinfos << "Object not found for drop." << llendl;
+			return FALSE;
+		}
+
+		// coming from a task. Need to figure out if the person can
+		// move/copy this item.
+		LLPermissions perm(inv_item->getPermissions());
+		BOOL is_move = FALSE;
+		if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
+			&& perm.allowTransferTo(gAgent.getID())))
+//		   || gAgent.isGodlike())
+
+		{
+			accept = TRUE;
+		}
+		else if(object->permYouOwner())
+		{
+			// If the object cannot be copied, but the object the
+			// inventory is owned by the agent, then the item can be
+			// moved from the task to agent inventory.
+			is_move = TRUE;
+			accept = TRUE;
+		}
+		if(drop && accept)
+		{
+			LLMoveInv* move_inv = new LLMoveInv;
+			move_inv->mObjectID = inv_item->getParentUUID();
+			two_uuids_t item_pair(mUUID, inv_item->getUUID());
+			move_inv->mMoveList.push_back(item_pair);
+			move_inv->mCallback = NULL;
+			move_inv->mUserData = NULL;
+			if(is_move)
+			{
+				warn_move_inventory(object, move_inv);
+			}
+			else
+			{
+				LLNotification::Params params("MoveInventoryFromObject");
+				params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv));
+				LLNotifications::instance().forceResponse(params, 0);
+			}
+		}
+
+	}
+	else if(LLToolDragAndDrop::SOURCE_NOTECARD == source)
+	{
+		accept = TRUE;
+		if(drop)
+		{
+			copy_inventory_from_notecard(LLToolDragAndDrop::getInstance()->getObjectID(),
+				LLToolDragAndDrop::getInstance()->getSourceID(), inv_item);
+		}
+	}
+	else if(LLToolDragAndDrop::SOURCE_LIBRARY == source)
+	{
+		LLViewerInventoryItem* item = (LLViewerInventoryItem*)inv_item;
+		if(item && item->isComplete())
+		{
+			accept = TRUE;
+			if(drop)
+			{
+				copy_inventory_item(
+					gAgent.getID(),
+					inv_item->getPermissions().getOwner(),
+					inv_item->getUUID(),
+					mUUID,
+					std::string(),
+					LLPointer<LLInventoryCallback>(NULL));
+			}
+		}
+	}
+	else
+	{
+		llwarns << "unhandled drag source" << llendl;
+	}
+	return accept;
+}
+
+// +=================================================+
+// |        LLScriptBridge (DEPRECTED)               |
+// +=================================================+
+
+LLUIImagePtr LLScriptBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
+}
+
+// +=================================================+
+// |        LLTextureBridge                          |
+// +=================================================+
+
+LLUIImagePtr LLTextureBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_TEXTURE, mInvType, 0, FALSE);
+}
+
+void LLTextureBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+}
+
+// +=================================================+
+// |        LLSoundBridge                            |
+// +=================================================+
+
+LLUIImagePtr LLSoundBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE);
+}
+
+void LLSoundBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+/*
+// Changed this back to the way it USED to work:
+// only open the preview dialog through the contextual right-click menu
+// double-click just plays the sound
+
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		openSoundPreview((void*)this);
+		//send_uuid_sound_trigger(item->getAssetUUID(), 1.0);
+	}
+*/
+}
+
+void LLSoundBridge::previewItem()
+{
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		send_sound_trigger(item->getAssetUUID(), 1.0);
+	}
+}
+
+void LLSoundBridge::openSoundPreview(void* which)
+{
+	LLSoundBridge *me = (LLSoundBridge *)which;
+	LLFloaterReg::showInstance("preview_sound", LLSD(me->mUUID), TAKE_FOCUS_YES);
+}
+
+void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	lldebugs << "LLTextureBridge::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Sound Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+	}
+
+	items.push_back(std::string("Sound Separator"));
+	items.push_back(std::string("Sound Play"));
+
+	hide_context_entries(menu, items, disabled_items);
+}
+
+// +=================================================+
+// |        LLLandmarkBridge                         |
+// +=================================================+
+
+LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags/* = 0x00*/) :
+LLItemBridge(inventory, uuid)
+{
+	mVisited = FALSE;
+	if (flags & LLInventoryItem::II_FLAGS_LANDMARK_VISITED)
+	{
+		mVisited = TRUE;
+	}
+}
+
+LLUIImagePtr LLLandmarkBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, mVisited, FALSE);
+}
+
+void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	lldebugs << "LLLandmarkBridge::buildContextMenu()" << llendl;
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Landmark Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+	}
+
+	items.push_back(std::string("Landmark Separator"));
+	items.push_back(std::string("About Landmark"));
+
+	// Disable "About Landmark" menu item for
+	// multiple landmarks selected. Only one landmark
+	// info panel can be shown at a time.
+	if ((flags & FIRST_SELECTED_ITEM) == 0)
+	{
+		disabled_items.push_back(std::string("About Landmark"));
+	}
+
+	hide_context_entries(menu, items, disabled_items);
+}
+
+// Convenience function for the two functions below.
+void teleport_via_landmark(const LLUUID& asset_id)
+{
+	gAgent.teleportViaLandmark( asset_id );
+
+	// we now automatically track the landmark you're teleporting to
+	// because you'll probably arrive at a telehub instead
+	LLFloaterWorldMap* floater_world_map = LLFloaterWorldMap::getInstance();
+	if( floater_world_map )
+	{
+		floater_world_map->trackLandmark( asset_id );
+	}
+}
+
+// virtual
+void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("teleport" == action)
+	{
+		LLViewerInventoryItem* item = getItem();
+		if(item)
+		{
+			teleport_via_landmark(item->getAssetUUID());
+		}
+	}
+	else if ("about" == action)
+	{
+		LLViewerInventoryItem* item = getItem();
+		if(item)
+		{
+			LLSD key;
+			key["type"] = "landmark";
+			key["id"] = item->getUUID();
+
+			LLSideTray::getInstance()->showPanel("panel_places", key);
+		}
+	}
+	else
+	{
+		LLItemBridge::performAction(folder, model, action);
+	}
+}
+
+static bool open_landmark_callback(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+
+	LLUUID asset_id = notification["payload"]["asset_id"].asUUID();
+	if (option == 0)
+	{
+		teleport_via_landmark(asset_id);
+	}
+
+	return false;
+}
+static LLNotificationFunctorRegistration open_landmark_callback_reg("TeleportFromLandmark", open_landmark_callback);
+
+
+void LLLandmarkBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+/*
+	LLViewerInventoryItem* item = getItem();
+	if( item )
+	{
+		// Opening (double-clicking) a landmark immediately teleports,
+		// but warns you the first time.
+		// open_landmark(item);
+		LLSD payload;
+		payload["asset_id"] = item->getAssetUUID();
+		LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload);
+	}
+*/
+}
+
+
+// +=================================================+
+// |        LLCallingCardObserver                    |
+// +=================================================+
+void LLCallingCardObserver::changed(U32 mask)
+{
+	mBridgep->refreshFolderViewItem();
+}
+
+// +=================================================+
+// |        LLCallingCardBridge                      |
+// +=================================================+
+
+LLCallingCardBridge::LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) :
+	LLItemBridge(inventory, uuid)
+{
+	mObserver = new LLCallingCardObserver(this);
+	LLAvatarTracker::instance().addObserver(mObserver);
+}
+
+LLCallingCardBridge::~LLCallingCardBridge()
+{
+	LLAvatarTracker::instance().removeObserver(mObserver);
+	delete mObserver;
+}
+
+void LLCallingCardBridge::refreshFolderViewItem()
+{
+	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
+	LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getItemByID(mUUID) : NULL;
+	if (itemp)
+	{
+		itemp->refresh();
+	}
+}
+
+// virtual
+void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("begin_im" == action)
+	{
+		LLViewerInventoryItem *item = getItem();
+		if (item && (item->getCreatorUUID() != gAgent.getID()) &&
+			(!item->getCreatorUUID().isNull()))
+		{
+			std::string callingcard_name;
+			gCacheName->getFullName(item->getCreatorUUID(), callingcard_name);
+			gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID());
+		}
+	}
+	else if ("lure" == action)
+	{
+		LLViewerInventoryItem *item = getItem();
+		if (item && (item->getCreatorUUID() != gAgent.getID()) &&
+			(!item->getCreatorUUID().isNull()))
+		{
+			LLAvatarActions::offerTeleport(item->getCreatorUUID());
+		}
+	}
+	else LLItemBridge::performAction(folder, model, action);
+}
+
+LLUIImagePtr LLCallingCardBridge::getIcon() const
+{
+	BOOL online = FALSE;
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		online = LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID());
+	}
+	return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, online, FALSE);
+}
+
+std::string LLCallingCardBridge::getLabelSuffix() const
+{
+	LLViewerInventoryItem* item = getItem();
+	if( item && LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID()) )
+	{
+		return LLItemBridge::getLabelSuffix() + " (online)";
+	}
+	else
+	{
+		return LLItemBridge::getLabelSuffix();
+	}
+}
+
+void LLCallingCardBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+/*
+	LLViewerInventoryItem* item = getItem();
+	if(item && !item->getCreatorUUID().isNull())
+	{
+		LLAvatarActions::showProfile(item->getCreatorUUID());
+	}
+*/
+}
+
+void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	lldebugs << "LLCallingCardBridge::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+
+		LLInventoryItem* item = getItem();
+		BOOL good_card = (item
+						  && (LLUUID::null != item->getCreatorUUID())
+						  && (item->getCreatorUUID() != gAgent.getID()));
+		BOOL user_online = (LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID()));
+		items.push_back(std::string("Send Instant Message Separator"));
+		items.push_back(std::string("Send Instant Message"));
+		items.push_back(std::string("Offer Teleport..."));
+		items.push_back(std::string("Conference Chat"));
+
+		if (!good_card)
+		{
+			disabled_items.push_back(std::string("Send Instant Message"));
+		}
+		if (!good_card || !user_online)
+		{
+			disabled_items.push_back(std::string("Offer Teleport..."));
+			disabled_items.push_back(std::string("Conference Chat"));
+		}
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop,
+									 EDragAndDropType cargo_type,
+									 void* cargo_data)
+{
+	LLViewerInventoryItem* item = getItem();
+	BOOL rv = FALSE;
+	if(item)
+	{
+		// check the type
+		switch(cargo_type)
+		{
+		case DAD_TEXTURE:
+		case DAD_SOUND:
+		case DAD_LANDMARK:
+		case DAD_SCRIPT:
+		case DAD_CLOTHING:
+		case DAD_OBJECT:
+		case DAD_NOTECARD:
+		case DAD_BODYPART:
+		case DAD_ANIMATION:
+		case DAD_GESTURE:
+			{
+				LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data;
+				const LLPermissions& perm = inv_item->getPermissions();
+				if(gInventory.getItem(inv_item->getUUID())
+				   && perm.allowOperationBy(PERM_TRANSFER, gAgent.getID()))
+				{
+					rv = TRUE;
+					if(drop)
+					{
+						LLToolDragAndDrop::giveInventory(item->getCreatorUUID(),
+														 (LLInventoryItem*)cargo_data);
+					}
+				}
+				else
+				{
+					// It's not in the user's inventory (it's probably in
+					// an object's contents), so disallow dragging it here.
+					// You can't give something you don't yet have.
+					rv = FALSE;
+				}
+				break;
+			}
+		case DAD_CATEGORY:
+			{
+				LLInventoryCategory* inv_cat = (LLInventoryCategory*)cargo_data;
+				if( gInventory.getCategory( inv_cat->getUUID() ) )
+				{
+					rv = TRUE;
+					if(drop)
+					{
+						LLToolDragAndDrop::giveInventoryCategory(
+							item->getCreatorUUID(),
+							inv_cat);
+					}
+				}
+				else
+				{
+					// It's not in the user's inventory (it's probably in
+					// an object's contents), so disallow dragging it here.
+					// You can't give something you don't yet have.
+					rv = FALSE;
+				}
+				break;
+			}
+		default:
+			break;
+		}
+	}
+	return rv;
+}
+
+BOOL LLCallingCardBridge::removeItem()
+{
+	if (LLFriendCardsManager::instance().isItemInAnyFriendsList(getItem()))
+	{
+		LLAvatarActions::removeFriendDialog(getItem()->getCreatorUUID());
+		return FALSE;
+	}
+	else
+	{
+		return LLItemBridge::removeItem();
+	}
+}
+// +=================================================+
+// |        LLNotecardBridge                         |
+// +=================================================+
+
+LLUIImagePtr LLNotecardBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE);
+}
+
+void LLNotecardBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+
+/*
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
+	}
+*/
+}
+
+
+// +=================================================+
+// |        LLGestureBridge                          |
+// +=================================================+
+
+LLUIImagePtr LLGestureBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE);
+}
+
+LLFontGL::StyleFlags LLGestureBridge::getLabelStyle() const
+{
+	if( LLGestureManager::instance().isGestureActive(mUUID) )
+	{
+		return LLFontGL::BOLD;
+	}
+	else
+	{
+		return LLFontGL::NORMAL;
+	}
+}
+
+std::string LLGestureBridge::getLabelSuffix() const
+{
+	if( LLGestureManager::instance().isGestureActive(mUUID) )
+	{
+		return LLItemBridge::getLabelSuffix() + " (active)";
+	}
+	else
+	{
+		return LLItemBridge::getLabelSuffix();
+	}
+}
+
+// virtual
+void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("activate" == action)
+	{
+		LLGestureManager::instance().activateGesture(mUUID);
+
+		LLViewerInventoryItem* item = gInventory.getItem(mUUID);
+		if (!item) return;
+
+		// Since we just changed the suffix to indicate (active)
+		// the server doesn't need to know, just the viewer.
+		gInventory.updateItem(item);
+		gInventory.notifyObservers();
+	}
+	else if ("deactivate" == action)
+	{
+		LLGestureManager::instance().deactivateGesture(mUUID);
+
+		LLViewerInventoryItem* item = gInventory.getItem(mUUID);
+		if (!item) return;
+
+		// Since we just changed the suffix to indicate (active)
+		// the server doesn't need to know, just the viewer.
+		gInventory.updateItem(item);
+		gInventory.notifyObservers();
+	}
+	else LLItemBridge::performAction(folder, model, action);
+}
+
+void LLGestureBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+/*
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null);
+		preview->setFocus(TRUE);
+	}
+*/
+}
+
+BOOL LLGestureBridge::removeItem()
+{
+	// Force close the preview window, if it exists
+	LLGestureManager::instance().deactivateGesture(mUUID);
+	return LLItemBridge::removeItem();
+}
+
+void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	lldebugs << "LLGestureBridge::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+
+		items.push_back(std::string("Gesture Separator"));
+		items.push_back(std::string("Activate"));
+		items.push_back(std::string("Deactivate"));
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+// +=================================================+
+// |        LLAnimationBridge                        |
+// +=================================================+
+
+LLUIImagePtr LLAnimationBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE);
+}
+
+void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	lldebugs << "LLAnimationBridge::buildContextMenu()" << llendl;
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Animation Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+	}
+
+	items.push_back(std::string("Animation Separator"));
+	items.push_back(std::string("Animation Play"));
+	items.push_back(std::string("Animation Audition"));
+
+	hide_context_entries(menu, items, disabled_items);
+
+}
+
+// virtual
+void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ((action == "playworld") || (action == "playlocal"))
+	{
+		if (getItem())
+		{
+			LLPreviewAnim::e_activation_type activate = LLPreviewAnim::NONE;
+			if ("playworld" == action) activate = LLPreviewAnim::PLAY;
+			if ("playlocal" == action) activate = LLPreviewAnim::AUDITION;
+
+			LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID));
+			if (preview)
+			{
+				preview->activate(activate);
+			}
+		}
+	}
+	else
+	{
+		LLItemBridge::performAction(folder, model, action);
+	}
+}
+
+void LLAnimationBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+/*
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
+	}
+*/
+}
+
+// +=================================================+
+// |        LLObjectBridge                           |
+// +=================================================+
+
+// static
+LLUUID LLObjectBridge::sContextMenuItemID;
+
+LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags) :
+LLItemBridge(inventory, uuid), mInvType(type)
+{
+	mAttachPt = (flags & 0xff); // low bye of inventory flags
+
+	mIsMultiObject = ( flags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) ?  TRUE: FALSE;
+}
+
+BOOL LLObjectBridge::isItemRemovable()
+{
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if(!avatar) return FALSE;
+	if(avatar->isWearingAttachment(mUUID)) return FALSE;
+	return LLInvFVBridge::isItemRemovable();
+}
+
+LLUIImagePtr LLObjectBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_OBJECT, mInvType, mAttachPt, mIsMultiObject );
+}
+
+LLInventoryObject* LLObjectBridge::getObject() const
+{
+	LLInventoryObject* object = NULL;
+	LLInventoryModel* model = getInventoryModel();
+	if(model)
+	{
+		object = (LLInventoryObject*)model->getObject(mUUID);
+	}
+	return object;
+}
+
+// virtual
+void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("attach" == action)
+	{
+		LLUUID object_id = mUUID;
+		LLViewerInventoryItem* item;
+		item = (LLViewerInventoryItem*)gInventory.getItem(object_id);
+		if(item && gInventory.isObjectDescendentOf(object_id, gInventory.getRootFolderID()))
+		{
+			rez_attachment(item, NULL);
+		}
+		else if(item && item->isComplete())
+		{
+			// must be in library. copy it to our inventory and put it on.
+			LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(0);
+			copy_inventory_item(
+				gAgent.getID(),
+				item->getPermissions().getOwner(),
+				item->getUUID(),
+				LLUUID::null,
+				std::string(),
+				cb);
+		}
+		gFocusMgr.setKeyboardFocus(NULL);
+	}
+	else if ("detach" == action)
+	{
+		LLInventoryItem* item = gInventory.getItem(mUUID);
+		if(item)
+		{
+			gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);
+			gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
+			gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+			gMessageSystem->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID());
+			gMessageSystem->sendReliable( gAgent.getRegion()->getHost());
+		}
+		// this object might have been selected, so let the selection manager know it's gone now
+		LLViewerObject *found_obj =
+			gObjectList.findObject(item->getUUID());
+		if (found_obj)
+		{
+			LLSelectMgr::getInstance()->remove(found_obj);
+		}
+		else
+		{
+			llwarns << "object not found - ignoring" << llendl;
+		}
+	}
+	else LLItemBridge::performAction(folder, model, action);
+}
+
+void LLObjectBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+
+	LLSD key;
+	key["id"] = mUUID;
+	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
+
+	/*
+	LLFloaterReg::showInstance("properties", mUUID);
+	*/
+}
+
+LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const
+{
+	U8 font = LLFontGL::NORMAL;
+
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if( avatar && avatar->isWearingAttachment( mUUID ) )
+	{
+		font |= LLFontGL::BOLD;
+	}
+
+	LLInventoryItem* item = getItem();
+	if (item && item->getIsLinkType())
+	{
+		font |= LLFontGL::ITALIC;
+	}
+
+	return (LLFontGL::StyleFlags)font;
+}
+
+std::string LLObjectBridge::getLabelSuffix() const
+{
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if( avatar && avatar->isWearingAttachment( mUUID ) )
+	{
+		std::string attachment_point_name = avatar->getAttachedPointName(mUUID);
+		LLStringUtil::toLower(attachment_point_name);
+
+		LLStringUtil::format_map_t args;
+		args["[ATTACHMENT_POINT]"] =  attachment_point_name.c_str();
+		return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args);
+	}
+	else
+	{
+		return LLItemBridge::getLabelSuffix();
+	}
+}
+
+void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment)
+{
+	LLSD payload;
+	payload["item_id"] = item->getLinkedUUID(); // Wear the base object in case this is a link.
+
+	S32 attach_pt = 0;
+	if (gAgent.getAvatarObject() && attachment)
+	{
+		for (LLVOAvatar::attachment_map_t::iterator iter = gAgent.getAvatarObject()->mAttachmentPoints.begin();
+			 iter != gAgent.getAvatarObject()->mAttachmentPoints.end(); ++iter)
+		{
+			if (iter->second == attachment)
+			{
+				attach_pt = iter->first;
+				break;
+			}
+		}
+	}
+
+	payload["attachment_point"] = attach_pt;
+
+#if !ENABLE_MULTIATTACHMENTS
+	if (attachment && attachment->getNumObjects() > 0)
+	{
+		LLNotifications::instance().add("ReplaceAttachment", LLSD(), payload, confirm_replace_attachment_rez);
+	}
+	else
+#endif
+	{
+		LLNotifications::instance().forceResponse(LLNotification::Params("ReplaceAttachment").payload(payload), 0/*YES*/);
+	}
+}
+
+bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response)
+{
+	LLVOAvatar *avatarp = gAgent.getAvatarObject();
+
+	if (!avatarp->canAttachMoreObjects())
+	{
+		LLSD args;
+		args["MAX_ATTACHMENTS"] = llformat("%d", MAX_AGENT_ATTACHMENTS);
+		LLNotifications::instance().add("MaxAttachmentsOnOutfit", args);
+		return false;
+	}
+
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	if (option == 0/*YES*/)
+	{
+		LLViewerInventoryItem* itemp = gInventory.getItem(notification["payload"]["item_id"].asUUID());
+
+		if (itemp)
+		{
+			LLMessageSystem* msg = gMessageSystem;
+			msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv);
+			msg->nextBlockFast(_PREHASH_AgentData);
+			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+			msg->nextBlockFast(_PREHASH_ObjectData);
+			msg->addUUIDFast(_PREHASH_ItemID, itemp->getUUID());
+			msg->addUUIDFast(_PREHASH_OwnerID, itemp->getPermissions().getOwner());
+			U8 attachment_pt = notification["payload"]["attachment_point"].asInteger();
+#if ENABLE_MULTIATTACHMENTS
+			attachment_pt |= ATTACHMENT_ADD;
+#endif
+			msg->addU8Fast(_PREHASH_AttachmentPt, attachment_pt);
+			pack_permissions_slam(msg, itemp->getFlags(), itemp->getPermissions());
+			msg->addStringFast(_PREHASH_Name, itemp->getName());
+			msg->addStringFast(_PREHASH_Description, itemp->getDescription());
+			msg->sendReliable(gAgent.getRegion()->getHost());
+		}
+	}
+	return false;
+}
+static LLNotificationFunctorRegistration confirm_replace_attachment_rez_reg("ReplaceAttachment", confirm_replace_attachment_rez);
+
+void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		LLInventoryItem* item = getItem();
+		if (item && item->getIsLinkType())
+		{
+			items.push_back(std::string("Goto Link"));
+		}
+
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+
+		LLObjectBridge::sContextMenuItemID = mUUID;
+
+		if(item)
+		{
+			LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();
+			if( !avatarp )
+			{
+				return;
+			}
+
+			if( avatarp->isWearingAttachment( mUUID ) )
+			{
+				items.push_back(std::string("Detach From Yourself"));
+			}
+			else
+			if( !isInTrash() && !isLinkedObjectInTrash() )
+			{
+				items.push_back(std::string("Attach Separator"));
+				items.push_back(std::string("Object Wear"));
+				items.push_back(std::string("Attach To"));
+				items.push_back(std::string("Attach To HUD"));
+				// commented out for DEV-32347
+				//items.push_back(std::string("Restore to Last Position"));
+
+				if (!avatarp->canAttachMoreObjects())
+				{
+					disabled_items.push_back(std::string("Object Wear"));
+					disabled_items.push_back(std::string("Attach To"));
+					disabled_items.push_back(std::string("Attach To HUD"));
+				}
+				LLMenuGL* attach_menu = menu.findChildMenuByName("Attach To", TRUE);
+				LLMenuGL* attach_hud_menu = menu.findChildMenuByName("Attach To HUD", TRUE);
+				LLVOAvatar *avatarp = gAgent.getAvatarObject();
+				if (attach_menu
+					&& (attach_menu->getChildCount() == 0)
+					&& attach_hud_menu
+					&& (attach_hud_menu->getChildCount() == 0)
+					&& avatarp)
+				{
+					for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
+						 iter != avatarp->mAttachmentPoints.end(); )
+					{
+						LLVOAvatar::attachment_map_t::iterator curiter = iter++;
+						LLViewerJointAttachment* attachment = curiter->second;
+						LLMenuItemCallGL::Params p;
+						std::string submenu_name = attachment->getName();
+						if (LLTrans::getString(submenu_name) != "")
+						{
+						    p.name = (" ")+LLTrans::getString(submenu_name)+" ";
+						}
+						else
+						{
+							p.name = submenu_name;
+						}
+						LLSD cbparams;
+						cbparams["index"] = curiter->first;
+						cbparams["label"] = attachment->getName();
+						p.on_click.function_name = "Inventory.AttachObject";
+						p.on_click.parameter = LLSD(attachment->getName());
+						p.on_enable.function_name = "Attachment.Label";
+						p.on_enable.parameter = cbparams;
+						LLView* parent = attachment->getIsHUDAttachment() ? attach_hud_menu : attach_menu;
+						LLUICtrlFactory::create<LLMenuItemCallGL>(p, parent);
+					}
+				}
+			}
+		}
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+BOOL LLObjectBridge::renameItem(const std::string& new_name)
+{
+	if(!isItemRenameable())
+		return FALSE;
+	LLPreview::dirty(mUUID);
+	LLInventoryModel* model = getInventoryModel();
+	if(!model)
+		return FALSE;
+	LLViewerInventoryItem* item = getItem();
+	if(item && (item->getName() != new_name))
+	{
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+		new_item->rename(new_name);
+		buildDisplayName(new_item, mDisplayName);
+		new_item->updateServer(FALSE);
+		model->updateItem(new_item);
+
+		model->notifyObservers();
+
+		LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+		if( avatar )
+		{
+			LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() );
+			if( obj )
+			{
+				LLSelectMgr::getInstance()->deselectAll();
+				LLSelectMgr::getInstance()->addAsIndividual( obj, SELECT_ALL_TES, FALSE );
+				LLSelectMgr::getInstance()->selectionSetObjectName( new_name );
+				LLSelectMgr::getInstance()->deselectAll();
+			}
+		}
+	}
+	// return FALSE because we either notified observers (& therefore
+	// rebuilt) or we didn't update.
+	return FALSE;
+}
+
+// +=================================================+
+// |        LLLSLTextBridge                          |
+// +=================================================+
+
+LLUIImagePtr LLLSLTextBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
+}
+
+void LLLSLTextBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+	/*
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES);
+	}
+	*/
+}
+
+// +=================================================+
+// |        LLWearableBridge                         |
+// +=================================================+
+
+// *NOTE: hack to get from avatar inventory to avatar
+void wear_inventory_item_on_avatar( LLInventoryItem* item )
+{
+	if(item)
+	{
+		lldebugs << "wear_inventory_item_on_avatar( " << item->getName()
+				 << " )" << llendl;
+
+		LLAppearanceManager::wearItem(item);
+	}
+}
+
+void wear_add_inventory_item_on_avatar( LLInventoryItem* item )
+{
+	if(item)
+	{
+		lldebugs << "wear_add_inventory_item_on_avatar( " << item->getName()
+				 << " )" << llendl;
+
+		LLWearableList::instance().getAsset(item->getAssetUUID(),
+							   item->getName(),
+							   item->getType(),
+							   LLWearableBridge::onWearAddOnAvatarArrived,
+							   new LLUUID(item->getUUID()));
+	}
+}
+
+void remove_inventory_category_from_avatar( LLInventoryCategory* category )
+{
+	if(!category) return;
+	lldebugs << "remove_inventory_category_from_avatar( " << category->getName()
+			 << " )" << llendl;
+
+
+	if( gFloaterCustomize )
+	{
+		gFloaterCustomize->askToSaveIfDirty(
+			boost::bind(remove_inventory_category_from_avatar_step2, _1, category->getUUID()));
+	}
+	else
+	{
+		remove_inventory_category_from_avatar_step2(TRUE, category->getUUID() );
+	}
+}
+
+struct OnRemoveStruct
+{
+	LLUUID mUUID;
+	OnRemoveStruct(const LLUUID& uuid):
+		mUUID(uuid)
+	{
+	}
+};
+
+void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id)
+{
+
+	// Find all the wearables that are in the category's subtree.
+	lldebugs << "remove_inventory_category_from_avatar_step2()" << llendl;
+	if(proceed)
+	{
+		LLInventoryModel::cat_array_t cat_array;
+		LLInventoryModel::item_array_t item_array;
+		LLFindWearables is_wearable;
+		gInventory.collectDescendentsIf(category_id,
+										cat_array,
+										item_array,
+										LLInventoryModel::EXCLUDE_TRASH,
+										is_wearable);
+		S32 i;
+		S32 wearable_count = item_array.count();
+
+		LLInventoryModel::cat_array_t	obj_cat_array;
+		LLInventoryModel::item_array_t	obj_item_array;
+		LLIsType is_object( LLAssetType::AT_OBJECT );
+		gInventory.collectDescendentsIf(category_id,
+										obj_cat_array,
+										obj_item_array,
+										LLInventoryModel::EXCLUDE_TRASH,
+										is_object);
+		S32 obj_count = obj_item_array.count();
+
+		// Find all gestures in this folder
+		LLInventoryModel::cat_array_t	gest_cat_array;
+		LLInventoryModel::item_array_t	gest_item_array;
+		LLIsType is_gesture( LLAssetType::AT_GESTURE );
+		gInventory.collectDescendentsIf(category_id,
+										gest_cat_array,
+										gest_item_array,
+										LLInventoryModel::EXCLUDE_TRASH,
+										is_gesture);
+		S32 gest_count = gest_item_array.count();
+
+		if (wearable_count > 0)	//Loop through wearables.  If worn, remove.
+		{
+			for(i = 0; i  < wearable_count; ++i)
+			{
+				if( gAgentWearables.isWearingItem (item_array.get(i)->getUUID()) )
+				{
+					LLWearableList::instance().getAsset(item_array.get(i)->getAssetUUID(),
+														item_array.get(i)->getName(),
+														item_array.get(i)->getType(),
+														LLWearableBridge::onRemoveFromAvatarArrived,
+														new OnRemoveStruct(item_array.get(i)->getUUID()));
+
+				}
+			}
+		}
+
+
+		if (obj_count > 0)
+		{
+			for(i = 0; i  < obj_count; ++i)
+			{
+				gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);
+				gMessageSystem->nextBlockFast(_PREHASH_ObjectData );
+				gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
+				gMessageSystem->addUUIDFast(_PREHASH_ItemID, obj_item_array.get(i)->getUUID() );
+
+				gMessageSystem->sendReliable( gAgent.getRegion()->getHost() );
+
+				// this object might have been selected, so let the selection manager know it's gone now
+				LLViewerObject *found_obj = gObjectList.findObject( obj_item_array.get(i)->getUUID());
+				if (found_obj)
+				{
+					LLSelectMgr::getInstance()->remove(found_obj);
+				}
+				else
+				{
+					llwarns << "object not found, ignoring" << llendl;
+				}
+			}
+		}
+
+		if (gest_count > 0)
+		{
+			for(i = 0; i  < gest_count; ++i)
+			{
+				if ( LLGestureManager::instance().isGestureActive( gest_item_array.get(i)->getUUID()) )
+				{
+					LLGestureManager::instance().deactivateGesture( gest_item_array.get(i)->getUUID() );
+					gInventory.updateItem( gest_item_array.get(i) );
+					gInventory.notifyObservers();
+				}
+
+			}
+		}
+	}
+}
+
+BOOL LLWearableBridge::renameItem(const std::string& new_name)
+{
+	if( gAgentWearables.isWearingItem( mUUID ) )
+	{
+		gAgentWearables.setWearableName( mUUID, new_name );
+	}
+	return LLItemBridge::renameItem(new_name);
+}
+
+BOOL LLWearableBridge::isItemRemovable()
+{
+	if (gAgentWearables.isWearingItem(mUUID)) return FALSE;
+	return LLInvFVBridge::isItemRemovable();
+}
+
+std::string LLWearableBridge::getLabelSuffix() const
+{
+	if( gAgentWearables.isWearingItem( mUUID ) )
+	{
+		return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn");
+	}
+	else
+	{
+		return LLItemBridge::getLabelSuffix();
+	}
+}
+
+LLUIImagePtr LLWearableBridge::getIcon() const
+{
+	return get_item_icon(mAssetType, mInvType, mWearableType, FALSE);
+}
+
+// virtual
+void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("wear" == action)
+	{
+		wearOnAvatar();
+	}
+	else if ("wear_add" == action)
+	{
+		wearAddOnAvatar();
+	}
+	else if ("edit" == action)
+	{
+		editOnAvatar();
+		return;
+	}
+	else if ("take_off" == action)
+	{
+		if(gAgentWearables.isWearingItem(mUUID))
+		{
+			LLViewerInventoryItem* item = getItem();
+			if (item)
+			{
+				LLWearableList::instance().getAsset(item->getAssetUUID(),
+													item->getName(),
+													item->getType(),
+													LLWearableBridge::onRemoveFromAvatarArrived,
+													new OnRemoveStruct(mUUID));
+			}
+		}
+	}
+	else LLItemBridge::performAction(folder, model, action);
+}
+
+void LLWearableBridge::openItem()
+{
+	LLViewerInventoryItem* item = getItem();
+
+	if (item)
+	{
+		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
+	}
+	/*
+	if( isInTrash() )
+	{
+		LLNotifications::instance().add("CannotWearTrash");
+	}
+	else if(isAgentInventory())
+	{
+		if( !gAgentWearables.isWearingItem( mUUID ) )
+		{
+			wearOnAvatar();
+		}
+	}
+	else
+	{
+		// must be in the inventory library. copy it to our inventory
+		// and put it on right away.
+		LLViewerInventoryItem* item = getItem();
+		if(item && item->isComplete())
+		{
+			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
+			copy_inventory_item(
+				gAgent.getID(),
+				item->getPermissions().getOwner(),
+				item->getUUID(),
+				LLUUID::null,
+				std::string(),
+				cb);
+		}
+		else if(item)
+		{
+			// *TODO: We should fetch the item details, and then do
+			// the operation above.
+			LLNotifications::instance().add("CannotWearInfoNotComplete");
+		}
+	}
+	*/
+}
+
+void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	lldebugs << "LLWearableBridge::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{	// FWIW, it looks like SUPPRESS_OPEN_ITEM is not set anywhere
+		BOOL no_open = ((flags & SUPPRESS_OPEN_ITEM) == SUPPRESS_OPEN_ITEM);
+
+		// If we have clothing, don't add "Open" as it's the same action as "Wear"   SL-18976
+		LLViewerInventoryItem* item = getItem();
+		if( !no_open && item )
+		{
+			no_open = (item->getType() == LLAssetType::AT_CLOTHING) ||
+					  (item->getType() == LLAssetType::AT_BODYPART);
+		}
+		if (!no_open)
+		{
+			items.push_back(std::string("Open"));
+		}
+
+		if (item && item->getIsLinkType())
+		{
+			items.push_back(std::string("Goto Link"));
+		}
+
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+
+		items.push_back(std::string("Wearable Separator"));
+
+		items.push_back(std::string("Wearable Wear"));
+		items.push_back(std::string("Wearable Add"));
+		items.push_back(std::string("Wearable Edit"));
+
+		if ((flags & FIRST_SELECTED_ITEM) == 0)
+		{
+			disabled_items.push_back(std::string("Wearable Edit"));
+		}
+		// Don't allow items to be worn if their baseobj is in the trash.
+		if (isLinkedObjectInTrash())
+		{
+			disabled_items.push_back(std::string("Wearable Wear"));
+			disabled_items.push_back(std::string("Wearable Add"));
+			disabled_items.push_back(std::string("Wearable Edit"));
+		}
+
+		// Disable wear and take off based on whether the item is worn.
+		if(item)
+		{
+			switch (item->getType())
+			{
+				case LLAssetType::AT_CLOTHING:
+					items.push_back(std::string("Take Off"));
+				case LLAssetType::AT_BODYPART:
+					if (gAgentWearables.isWearingItem(item->getUUID()))
+					{
+						disabled_items.push_back(std::string("Wearable Wear"));
+						disabled_items.push_back(std::string("Wearable Add"));
+					}
+					else
+					{
+						disabled_items.push_back(std::string("Take Off"));
+					}
+					break;
+				default:
+					break;
+			}
+		}
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+// Called from menus
+// static
+BOOL LLWearableBridge::canWearOnAvatar(void* user_data)
+{
+	LLWearableBridge* self = (LLWearableBridge*)user_data;
+	if(!self) return FALSE;
+	if(!self->isAgentInventory())
+	{
+		LLViewerInventoryItem* item = (LLViewerInventoryItem*)self->getItem();
+		if(!item || !item->isComplete()) return FALSE;
+	}
+	return (!gAgentWearables.isWearingItem(self->mUUID));
+}
+
+// Called from menus
+// static
+void LLWearableBridge::onWearOnAvatar(void* user_data)
+{
+	LLWearableBridge* self = (LLWearableBridge*)user_data;
+	if(!self) return;
+	self->wearOnAvatar();
+}
+
+void LLWearableBridge::wearOnAvatar()
+{
+	// Don't wear anything until initial wearables are loaded, can
+	// destroy clothing items.
+	if (!gAgentWearables.areWearablesLoaded())
+	{
+		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
+		return;
+	}
+
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		if(!isAgentInventory())
+		{
+			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
+			copy_inventory_item(
+				gAgent.getID(),
+				item->getPermissions().getOwner(),
+				item->getUUID(),
+				LLUUID::null,
+				std::string(),
+				cb);
+		}
+		else
+		{
+			wear_inventory_item_on_avatar(item);
+		}
+	}
+}
+
+void LLWearableBridge::wearAddOnAvatar()
+{
+	// Don't wear anything until initial wearables are loaded, can
+	// destroy clothing items.
+	if (!gAgentWearables.areWearablesLoaded())
+	{
+		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
+		return;
+	}
+
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		if(!isAgentInventory())
+		{
+			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
+			copy_inventory_item(
+				gAgent.getID(),
+				item->getPermissions().getOwner(),
+				item->getUUID(),
+				LLUUID::null,
+				std::string(),
+				cb);
+		}
+		else
+		{
+			wear_add_inventory_item_on_avatar(item);
+		}
+	}
+}
+
+// static
+void LLWearableBridge::onWearOnAvatarArrived( LLWearable* wearable, void* userdata )
+{
+	LLUUID* item_id = (LLUUID*) userdata;
+	if(wearable)
+	{
+		LLViewerInventoryItem* item = NULL;
+		item = (LLViewerInventoryItem*)gInventory.getItem(*item_id);
+		if(item)
+		{
+			if(item->getAssetUUID() == wearable->getAssetID())
+			{
+				gAgentWearables.setWearableItem(item, wearable);
+				gInventory.notifyObservers();
+				//self->getFolderItem()->refreshFromRoot();
+			}
+			else
+			{
+				llinfos << "By the time wearable asset arrived, its inv item already pointed to a different asset." << llendl;
+			}
+		}
+	}
+	delete item_id;
+}
+
+// static
+// BAP remove the "add" code path once everything is fully COF-ified.
+void LLWearableBridge::onWearAddOnAvatarArrived( LLWearable* wearable, void* userdata )
+{
+	LLUUID* item_id = (LLUUID*) userdata;
+	if(wearable)
+	{
+		LLViewerInventoryItem* item = NULL;
+		item = (LLViewerInventoryItem*)gInventory.getItem(*item_id);
+		if(item)
+		{
+			if(item->getAssetUUID() == wearable->getAssetID())
+			{
+				bool do_append = true;
+				gAgentWearables.setWearableItem(item, wearable, do_append);
+				gInventory.notifyObservers();
+				//self->getFolderItem()->refreshFromRoot();
+			}
+			else
+			{
+				llinfos << "By the time wearable asset arrived, its inv item already pointed to a different asset." << llendl;
+			}
+		}
+	}
+	delete item_id;
+}
+
+// static
+BOOL LLWearableBridge::canEditOnAvatar(void* user_data)
+{
+	LLWearableBridge* self = (LLWearableBridge*)user_data;
+	if(!self) return FALSE;
+
+	return (gAgentWearables.isWearingItem(self->mUUID));
+}
+
+// static
+void LLWearableBridge::onEditOnAvatar(void* user_data)
+{
+	LLWearableBridge* self = (LLWearableBridge*)user_data;
+	if(self)
+	{
+		self->editOnAvatar();
+	}
+}
+
+void LLWearableBridge::editOnAvatar()
+{
+	const LLWearable* wearable = gAgentWearables.getWearableFromItemID(mUUID);
+	if( wearable )
+	{
+		// Set the tab to the right wearable.
+		if (gFloaterCustomize)
+			gFloaterCustomize->setCurrentWearableType( wearable->getType() );
+
+		if( CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() )
+		{
+			// Start Avatar Customization
+			gAgent.changeCameraToCustomizeAvatar();
+		}
+	}
+}
+
+// static
+BOOL LLWearableBridge::canRemoveFromAvatar(void* user_data)
+{
+	LLWearableBridge* self = (LLWearableBridge*)user_data;
+	if( self && (LLAssetType::AT_BODYPART != self->mAssetType) )
+	{
+		return gAgentWearables.isWearingItem( self->mUUID );
+	}
+	return FALSE;
+}
+
+// static
+void LLWearableBridge::onRemoveFromAvatar(void* user_data)
+{
+	LLWearableBridge* self = (LLWearableBridge*)user_data;
+	if(!self) return;
+	if(gAgentWearables.isWearingItem(self->mUUID))
+	{
+		LLViewerInventoryItem* item = self->getItem();
+		if (item)
+		{
+			LLUUID parent_id = item->getParentUUID();
+			LLWearableList::instance().getAsset(item->getAssetUUID(),
+												item->getName(),
+												item->getType(),
+												onRemoveFromAvatarArrived,
+												new OnRemoveStruct(LLUUID(self->mUUID)));
+		}
+	}
+}
+
+// static
+void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,
+												 void* userdata)
+{
+	OnRemoveStruct *on_remove_struct = (OnRemoveStruct*) userdata;
+	const LLUUID &item_id = gInventory.getLinkedItemID(on_remove_struct->mUUID);
+	if(wearable)
+	{
+		if( gAgentWearables.isWearingItem( item_id ) )
+		{
+			EWearableType type = wearable->getType();
+
+			if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES ) ) //&&
+				//!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
+			{
+				// MULTI_WEARABLE: FIXME HACK - always remove all
+				bool do_remove_all = false;
+				gAgentWearables.removeWearable( type, do_remove_all, 0 );
+			}
+		}
+	}
+
+	// Find and remove this item from the COF.
+	LLInventoryModel::item_array_t items = gInventory.collectLinkedItems(item_id, LLAppearanceManager::getCOF());
+	llassert(items.size() == 1); // Should always have one and only one item linked to this in the COF.
+	for (LLInventoryModel::item_array_t::const_iterator iter = items.begin();
+		 iter != items.end();
+		 ++iter)
+	{
+		const LLViewerInventoryItem *linked_item = (*iter);
+		const LLUUID &item_id = linked_item->getUUID();
+		gInventory.purgeObject(item_id);
+	}
+	gInventory.notifyObservers();
+
+	delete on_remove_struct;
+}
+
+LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type,
+													   const LLUUID& uuid,LLInventoryModel* model)
+{
+	LLInvFVBridgeAction* action = NULL;
+	switch(asset_type)
+	{
+	case LLAssetType::AT_TEXTURE:
+		action = new LLTextureBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_SOUND:
+		action = new LLSoundBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_LANDMARK:
+		action = new LLLandmarkBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_CALLINGCARD:
+		action = new LLCallingCardBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_OBJECT:
+		action = new LLObjectBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_NOTECARD:
+		action = new LLNotecardBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_ANIMATION:
+		action = new LLAnimationBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_GESTURE:
+		action = new LLGestureBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_LSL_TEXT:
+		action = new LLLSLTextBridgeAction(uuid,model);
+		break;
+
+	case LLAssetType::AT_CLOTHING:
+	case LLAssetType::AT_BODYPART:
+		action = new LLWearableBridgeAction(uuid,model);
+
+		break;
+
+	default:
+		break;
+	}
+	return action;
+}
+
+//static
+void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,
+								   const LLUUID& uuid,LLInventoryModel* model)
+{
+	LLInvFVBridgeAction* action = createAction(asset_type,uuid,model);
+	if(action)
+	{
+		action->doIt();
+		delete action;
+	}
+}
+
+//static
+void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model)
+{
+	LLAssetType::EType asset_type = model->getItem(uuid)->getType();
+	LLInvFVBridgeAction* action = createAction(asset_type,uuid,model);
+	if(action)
+	{
+		action->doIt();
+		delete action;
+	}
+}
+
+LLViewerInventoryItem* LLInvFVBridgeAction::getItem() const
+{
+	if(mModel)
+		return (LLViewerInventoryItem*)mModel->getItem(mUUID);
+	return NULL;
+}
+
+//virtual
+void	LLTextureBridgeAction::doIt()
+{
+	if (getItem())
+	{
+		LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+//virtual
+void	LLSoundBridgeAction::doIt()
+{
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+
+//virtual
+void	LLLandmarkBridgeAction::doIt()
+{
+	LLViewerInventoryItem* item = getItem();
+	if( item )
+	{
+		// Opening (double-clicking) a landmark immediately teleports,
+		// but warns you the first time.
+		LLSD payload;
+		payload["asset_id"] = item->getAssetUUID();
+		LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+
+//virtual
+void	LLCallingCardBridgeAction::doIt()
+{
+	LLViewerInventoryItem* item = getItem();
+	if(item && item->getCreatorUUID().notNull())
+	{
+		LLAvatarActions::showProfile(item->getCreatorUUID());
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+//virtual
+void
+LLNotecardBridgeAction::doIt()
+{
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+//virtual
+void	LLGestureBridgeAction::doIt()
+{
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null);
+		preview->setFocus(TRUE);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+//virtual
+void	LLAnimationBridgeAction::doIt()
+{
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+
+//virtual
+void	LLObjectBridgeAction::doIt()
+{
+	LLFloaterReg::showInstance("properties", mUUID);
+
+	LLInvFVBridgeAction::doIt();
+}
+
+
+//virtual
+void	LLLSLTextBridgeAction::doIt()
+{
+	LLViewerInventoryItem* item = getItem();
+	if (item)
+	{
+		LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES);
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+
+BOOL LLWearableBridgeAction::isInTrash() const
+{
+	if(!mModel) return FALSE;
+	LLUUID trash_id = mModel->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	return mModel->isObjectDescendentOf(mUUID, trash_id);
+}
+
+BOOL LLWearableBridgeAction::isAgentInventory() const
+{
+	if(!mModel) return FALSE;
+	if(gInventory.getRootFolderID() == mUUID) return TRUE;
+	return mModel->isObjectDescendentOf(mUUID, gInventory.getRootFolderID());
+}
+
+void LLWearableBridgeAction::wearOnAvatar()
+{
+	// Don't wear anything until initial wearables are loaded, can
+	// destroy clothing items.
+	if (!gAgentWearables.areWearablesLoaded())
+	{
+		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
+		return;
+	}
+
+	LLViewerInventoryItem* item = getItem();
+	if(item)
+	{
+		if(!isAgentInventory())
+		{
+			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
+			copy_inventory_item(
+				gAgent.getID(),
+				item->getPermissions().getOwner(),
+				item->getUUID(),
+				LLUUID::null,
+				std::string(),
+				cb);
+		}
+		else
+		{
+			wear_inventory_item_on_avatar(item);
+		}
+	}
+}
+
+//virtual
+void LLWearableBridgeAction::doIt()
+{
+	if(isInTrash())
+	{
+		LLNotifications::instance().add("CannotWearTrash");
+	}
+	else if(isAgentInventory())
+	{
+		if(!gAgentWearables.isWearingItem(mUUID))
+		{
+			wearOnAvatar();
+		}
+	}
+	else
+	{
+		// must be in the inventory library. copy it to our inventory
+		// and put it on right away.
+		LLViewerInventoryItem* item = getItem();
+		if(item && item->isComplete())
+		{
+			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
+			copy_inventory_item(
+				gAgent.getID(),
+				item->getPermissions().getOwner(),
+				item->getUUID(),
+				LLUUID::null,
+				std::string(),
+				cb);
+		}
+		else if(item)
+		{
+			// *TODO: We should fetch the item details, and then do
+			// the operation above.
+			LLNotifications::instance().add("CannotWearInfoNotComplete");
+		}
+	}
+
+	LLInvFVBridgeAction::doIt();
+}
+
+// +=================================================+
+// |        LLLinkItemBridge                         |
+// +=================================================+
+// For broken links
+
+std::string LLLinkItemBridge::sPrefix("Link: ");
+
+
+LLUIImagePtr LLLinkItemBridge::getIcon() const
+{
+	if (LLViewerInventoryItem *item = getItem())
+	{
+		return get_item_icon(item->getActualType(), LLInventoryType::IT_NONE, 0, FALSE);
+	}
+	return get_item_icon(LLAssetType::AT_LINK, LLInventoryType::IT_NONE, 0, FALSE);
+}
+
+void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	// *TODO: Translate
+	lldebugs << "LLLink::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Delete"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Delete"));
+		}
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+
+// +=================================================+
+// |        LLLinkBridge                             |
+// +=================================================+
+// For broken links.
+
+std::string LLLinkFolderBridge::sPrefix("Link: ");
+
+
+LLUIImagePtr LLLinkFolderBridge::getIcon() const
+{
+	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	if (LLViewerInventoryItem *item = getItem())
+	{
+		if (const LLViewerInventoryCategory* cat = item->getLinkedCategory())
+		{
+			preferred_type = cat->getPreferredType();
+		}
+	}
+	return LLFolderBridge::getIcon(preferred_type);
+}
+
+void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	// *TODO: Translate
+	lldebugs << "LLLink::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Goto Link"));
+		items.push_back(std::string("Delete"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Delete"));
+		}
+	}
+	hide_context_entries(menu, items, disabled_items);
+}
+
+void LLLinkFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("goto" == action)
+	{
+		gotoItem(folder);
+		return;
+	}
+	LLItemBridge::performAction(folder,model,action);
+}
+
+void LLLinkFolderBridge::gotoItem(LLFolderView *folder)
+{
+	const LLUUID &cat_uuid = getFolderID();
+	if (!cat_uuid.isNull())
+	{
+		if (LLFolderViewItem *base_folder = folder->getItemByID(cat_uuid))
+		{
+			if (LLInventoryModel* model = getInventoryModel())
+			{
+				model->fetchDescendentsOf(cat_uuid);
+			}
+			base_folder->setOpen(TRUE);
+			folder->setSelectionFromRoot(base_folder,TRUE);
+			folder->scrollToShowSelection();
+		}
+	}
+}
+
+const LLUUID &LLLinkFolderBridge::getFolderID() const
+{
+	if (LLViewerInventoryItem *link_item = getItem())
+	{
+		if (const LLViewerInventoryCategory *cat = link_item->getLinkedCategory())
+		{
+			const LLUUID& cat_uuid = cat->getUUID();
+			return cat_uuid;
+		}
+	}
+	return LLUUID::null;
+}
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index c4779cd29a8..3a1b354c502 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -40,6 +40,7 @@
 #include "llsidepaneliteminfo.h"
 #include "llsidepaneltaskinfo.h"
 #include "lltabcontainer.h"
+#include "llselectmgr.h"
 
 static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
 
@@ -119,6 +120,7 @@ void LLSidepanelInventory::onOpen(const LLSD& key)
 	}
 	if (key.has("task"))
 	{
+		mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
 		showTaskInfoPanel();
 	}
 }
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index d36ffc9a9cc..9d2960fbed1 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -151,8 +151,16 @@ void LLSidepanelItemInfo::refresh()
 		refreshFromItem(item);
 		updateVerbs();
 	}
+	else
+	{
+		if (getIsEditing())
+		{
+			setIsEditing(FALSE);
+			return;
+		}
+	}
 
-	if (!getIsEditing() || !item)
+	if (!getIsEditing())
 	{
 		const std::string no_item_names[]={
 			"LabelItemName",
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index 3608e2c097e..4284c95b130 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -61,6 +61,7 @@
 #include "llavataractions.h"
 #include "llnamebox.h"
 #include "llviewercontrol.h"
+#include "llviewermenu.h"
 #include "lluictrlfactory.h"
 #include "llspinctrl.h"
 #include "roles_constants.h"
@@ -84,39 +85,17 @@ BOOL LLSidepanelTaskInfo::postBuild()
 
 	mOpenBtn = getChild<LLButton>("open_btn");
 	mOpenBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onOpenButtonClicked, this));
-	mBuildBtn = getChild<LLButton>("build_btn");
-	mBuildBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onBuildButtonClicked, this));
+	mPayBtn = getChild<LLButton>("pay_btn");
+	mPayBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onPayButtonClicked, this));
 	mBuyBtn = getChild<LLButton>("buy_btn");
 	mBuyBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onBuyButtonClicked, this));
 
-	childSetCommitCallback("Object Name",LLSidepanelTaskInfo::onCommitName,this);
 	childSetPrevalidate("Object Name",LLLineEditor::prevalidatePrintableNotPipe);
-	childSetCommitCallback("Object Description",LLSidepanelTaskInfo::onCommitDesc,this);
 	childSetPrevalidate("Object Description",LLLineEditor::prevalidatePrintableNotPipe);
 
-	
-	getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLSidepanelTaskInfo::onClickGroup,this));
-
-	childSetCommitCallback("checkbox share with group",LLSidepanelTaskInfo::onCommitGroupShare,this);
-
-	childSetAction("button deed",LLSidepanelTaskInfo::onClickDeedToGroup,this);
-
-	childSetCommitCallback("checkbox allow everyone move",LLSidepanelTaskInfo::onCommitEveryoneMove,this);
-
-	childSetCommitCallback("checkbox allow everyone copy",LLSidepanelTaskInfo::onCommitEveryoneCopy,this);
-	
-	childSetCommitCallback("checkbox for sale",LLSidepanelTaskInfo::onCommitSaleInfo,this);
-
-	childSetCommitCallback("sale type",LLSidepanelTaskInfo::onCommitSaleType,this);
+//	getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLSidepanelTaskInfo::onClickGroup,this));
+//	childSetAction("button deed",LLSidepanelTaskInfo::onClickDeedToGroup,this);
 
-	childSetCommitCallback("Edit Cost", LLSidepanelTaskInfo::onCommitSaleInfo, this);
-	
-	childSetCommitCallback("checkbox next owner can modify",LLSidepanelTaskInfo::onCommitNextOwnerModify,this);
-	childSetCommitCallback("checkbox next owner can copy",LLSidepanelTaskInfo::onCommitNextOwnerCopy,this);
-	childSetCommitCallback("checkbox next owner can transfer",LLSidepanelTaskInfo::onCommitNextOwnerTransfer,this);
-	childSetCommitCallback("clickaction",LLSidepanelTaskInfo::onCommitClickAction,this);
-	childSetCommitCallback("search_check",LLSidepanelTaskInfo::onCommitIncludeInSearch,this);
-	
 	mLabelGroupName = getChild<LLNameBox>("Group Name Proxy");
 
 	return TRUE;
@@ -146,16 +125,16 @@ void LLSidepanelTaskInfo::refresh()
 		BtnDeedToGroup->setLabelUnselected(deedText);
 	}
 	BOOL root_selected = TRUE;
-	LLSelectNode* nodep = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
-	S32 object_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
+	LLSelectNode* nodep = mObjectSelection->getFirstRootNode();
+	S32 object_count = mObjectSelection->getRootObjectCount();
 	if(!nodep || 0 == object_count)
 	{
-		nodep = LLSelectMgr::getInstance()->getSelection()->getFirstNode();
-		object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
+		nodep = mObjectSelection->getFirstNode();
+		object_count = mObjectSelection->getObjectCount();
 		root_selected = FALSE;
 	}
 
-	//BOOL attachment_selected = LLSelectMgr::getInstance()->getSelection()->isAttachment();
+	//BOOL attachment_selected = mObjectSelection->isAttachment();
 	//attachment_selected = false;
 	LLViewerObject* objectp = NULL;
 	if(nodep) objectp = nodep->getObject();
@@ -245,7 +224,7 @@ void LLSidepanelTaskInfo::refresh()
 	BOOL is_one_object = (object_count == 1);
 
 	// BUG: fails if a root and non-root are both single-selected.
-	BOOL is_perm_modify = (LLSelectMgr::getInstance()->getSelection()->getFirstRootNode() 
+	BOOL is_perm_modify = (mObjectSelection->getFirstRootNode() 
 							&& LLSelectMgr::getInstance()->selectGetRootsModify()) 
 							|| LLSelectMgr::getInstance()->selectGetModify();
 	const LLFocusableElement* keyboard_focus_view = gFocusMgr.getKeyboardFocus();
@@ -789,6 +768,32 @@ void LLSidepanelTaskInfo::refresh()
 	childSetEnabled("label click action",is_perm_modify && all_volume);
 	childSetEnabled("clickaction",is_perm_modify && all_volume);
 
+	if (!getIsEditing())
+	{
+		const std::string no_item_names[]={
+			"Object Name",
+			"Object Description",
+			"button set group",
+			"checkbox share with group",
+			"button deed",
+			"checkbox allow everyone move",
+			"checkbox allow everyone copy",
+			"checkbox for sale",
+			"sale type",
+			"Edit Cost",
+			"checkbox next owner can modify",
+			"checkbox next owner can copy",
+			"checkbox next owner can transfer",
+			"clickaction",
+			"search_check",
+			"perm_modify",
+			"Group Name",
+		};
+		for(size_t t=0; t<LL_ARRAY_SIZE(no_item_names); ++t)
+		{
+			childSetEnabled(no_item_names[t],false);
+		}
+	}
 	updateVerbs();
 }
 
@@ -856,7 +861,7 @@ static bool callback_deed_to_group(const LLSD& notification, const LLSD& respons
 	return false;
 }
 
-void LLSidepanelTaskInfo::onClickDeedToGroup(void* data)
+void LLSidepanelTaskInfo::onClickDeedToGroup()
 {
 	LLNotifications::instance().add( "DeedObjectToGroup", LLSD(), LLSD(), callback_deed_to_group);
 }
@@ -865,98 +870,72 @@ void LLSidepanelTaskInfo::onClickDeedToGroup(void* data)
 /// Permissions checkboxes
 ///----------------------------------------------------------------------------
 
-// static
-void LLSidepanelTaskInfo::onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32 perm)
+void LLSidepanelTaskInfo::onCommitPerm(LLCheckBoxCtrl *ctrl, U8 field, U32 perm)
 {
-	LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject();
+	LLViewerObject* object = mObjectSelection->getFirstRootObject();
 	if(!object) return;
 
-	// Checkbox will have toggled itself
-	// LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
-	LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
-	BOOL new_state = check->get();
-	
+	BOOL new_state = ctrl->get();
 	LLSelectMgr::getInstance()->selectionSetObjectPermissions(field, new_state, perm);
 }
 
-// static
-void LLSidepanelTaskInfo::onCommitGroupShare(LLUICtrl *ctrl, void *data)
+void LLSidepanelTaskInfo::onCommitGroupShare()
 {
-	onCommitPerm(ctrl, data, PERM_GROUP, PERM_MODIFY | PERM_MOVE | PERM_COPY);
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox share with group");
+	onCommitPerm(ctrl, PERM_GROUP, PERM_MODIFY | PERM_MOVE | PERM_COPY);
 }
 
-// static
-void LLSidepanelTaskInfo::onCommitEveryoneMove(LLUICtrl *ctrl, void *data)
+void LLSidepanelTaskInfo::onCommitEveryoneMove()
 {
-	onCommitPerm(ctrl, data, PERM_EVERYONE, PERM_MOVE);
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox allow everyone move");
+	onCommitPerm(ctrl, PERM_EVERYONE, PERM_MOVE);
 }
 
 
-// static
-void LLSidepanelTaskInfo::onCommitEveryoneCopy(LLUICtrl *ctrl, void *data)
+void LLSidepanelTaskInfo::onCommitEveryoneCopy()
 {
-	onCommitPerm(ctrl, data, PERM_EVERYONE, PERM_COPY);
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox allow everyone copy");
+	onCommitPerm(ctrl, PERM_EVERYONE, PERM_COPY);
 }
 
-// static
-void LLSidepanelTaskInfo::onCommitNextOwnerModify(LLUICtrl* ctrl, void* data)
+void LLSidepanelTaskInfo::onCommitNextOwnerModify()
 {
-	//llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerModify" << llendl;
-	onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_MODIFY);
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can modify");
+	onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_MODIFY);
 }
 
-// static
-void LLSidepanelTaskInfo::onCommitNextOwnerCopy(LLUICtrl* ctrl, void* data)
+void LLSidepanelTaskInfo::onCommitNextOwnerCopy()
 {
-	//llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerCopy" << llendl;
-	onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_COPY);
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can copy");
+	onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_COPY);
 }
 
-// static
-void LLSidepanelTaskInfo::onCommitNextOwnerTransfer(LLUICtrl* ctrl, void* data)
+void LLSidepanelTaskInfo::onCommitNextOwnerTransfer()
 {
-	//llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerTransfer" << llendl;
-	onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_TRANSFER);
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can transfer");
+	onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_TRANSFER);
 }
 
-// static
-void LLSidepanelTaskInfo::onCommitName(LLUICtrl*, void* data)
+void LLSidepanelTaskInfo::onCommitName()
 {
-	//llinfos << "LLSidepanelTaskInfo::onCommitName()" << llendl;
-	LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
-	LLLineEditor*	tb = self->getChild<LLLineEditor>("Object Name");
-	if(tb)
-	{
-		LLSelectMgr::getInstance()->selectionSetObjectName(tb->getText());
-//		LLSelectMgr::getInstance()->selectionSetObjectName(self->mLabelObjectName->getText());
-	}
+	LLLineEditor* tb = getChild<LLLineEditor>("Object Name");
+	LLSelectMgr::getInstance()->selectionSetObjectName(tb->getText());
 }
 
-
-// static
-void LLSidepanelTaskInfo::onCommitDesc(LLUICtrl*, void* data)
+void LLSidepanelTaskInfo::onCommitDesc()
 {
-	//llinfos << "LLSidepanelTaskInfo::onCommitDesc()" << llendl;
-	LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
-	LLLineEditor*	le = self->getChild<LLLineEditor>("Object Description");
-	if(le)
-	{
-		LLSelectMgr::getInstance()->selectionSetObjectDescription(le->getText());
-	}
+	LLLineEditor* le = getChild<LLLineEditor>("Object Description");
+	LLSelectMgr::getInstance()->selectionSetObjectDescription(le->getText());
 }
 
-// static
-void LLSidepanelTaskInfo::onCommitSaleInfo(LLUICtrl*, void* data)
+void LLSidepanelTaskInfo::onCommitSaleInfo()
 {
-	LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
-	self->setAllSaleInfo();
+	setAllSaleInfo();
 }
 
-// static
-void LLSidepanelTaskInfo::onCommitSaleType(LLUICtrl*, void* data)
+void LLSidepanelTaskInfo::onCommitSaleType()
 {
-	LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
-	self->setAllSaleInfo();
+	setAllSaleInfo();
 }
 
 void LLSidepanelTaskInfo::setAllSaleInfo()
@@ -1009,12 +988,8 @@ struct LLSelectionPayable : public LLSelectedObjectFunctor
 };
 
 // static
-void LLSidepanelTaskInfo::onCommitClickAction(LLUICtrl* ctrl, void*)
+void LLSidepanelTaskInfo::onCommitClickAction(U8 click_action)
 {
-	LLComboBox* box = (LLComboBox*)ctrl;
-	if (!box) return;
-
-	U8 click_action = (U8)box->getCurrentIndex();
 	if (click_action == CLICK_ACTION_BUY)
 	{
 		LLSaleInfo sale_info;
@@ -1026,7 +1001,7 @@ void LLSidepanelTaskInfo::onCommitClickAction(LLUICtrl* ctrl, void*)
 			// Set click action back to its old value
 			U8 click_action = 0;
 			LLSelectMgr::getInstance()->selectionGetClickAction(&click_action);
-			box->setCurrentByIndex((S32)click_action);
+//			box->setCurrentByIndex((S32)click_action);
 
 			return;
 		}
@@ -1035,7 +1010,7 @@ void LLSidepanelTaskInfo::onCommitClickAction(LLUICtrl* ctrl, void*)
 	{
 		// Verify object has script with money() handler
 		LLSelectionPayable payable;
-		bool can_pay = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&payable);
+		bool can_pay = mObjectSelection->applyToObjects(&payable);
 		if (!can_pay)
 		{
 			// Warn, but do it anyway.
@@ -1046,12 +1021,10 @@ void LLSidepanelTaskInfo::onCommitClickAction(LLUICtrl* ctrl, void*)
 }
 
 // static
-void LLSidepanelTaskInfo::onCommitIncludeInSearch(LLUICtrl* ctrl, void*)
+void LLSidepanelTaskInfo::onCommitIncludeInSearch()
 {
-	LLCheckBoxCtrl* box = (LLCheckBoxCtrl*)ctrl;
-	llassert(box);
-
-	LLSelectMgr::getInstance()->selectionSetIncludeInSearch(box->get());
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("search_check");
+	LLSelectMgr::getInstance()->selectionSetIncludeInSearch(ctrl->get());
 }
 
 // virtual
@@ -1060,24 +1033,47 @@ void LLSidepanelTaskInfo::updateVerbs()
 	LLSidepanelInventorySubpanel::updateVerbs();
 
 	mOpenBtn->setVisible(!getIsEditing());
-	mBuildBtn->setVisible(!getIsEditing());
+	mPayBtn->setVisible(!getIsEditing());
 	mBuyBtn->setVisible(!getIsEditing());
+
+	mOpenBtn->setEnabled(enable_object_open());
 }
 
 void LLSidepanelTaskInfo::onOpenButtonClicked()
 {
+	if (enable_object_open())
+	{
+		handle_object_open();
+	}
 }
 
-void LLSidepanelTaskInfo::onBuildButtonClicked()
+void LLSidepanelTaskInfo::onPayButtonClicked()
 {
+	onCommitClickAction(CLICK_ACTION_PAY);
 }
 
 void LLSidepanelTaskInfo::onBuyButtonClicked()
 {
+	onCommitClickAction(CLICK_ACTION_BUY);
 }
 
 // virtual
 void LLSidepanelTaskInfo::save()
 {
+	onCommitGroupShare();
+	onCommitEveryoneMove();
+	onCommitEveryoneCopy();
+	onCommitNextOwnerModify();
+	onCommitNextOwnerCopy();
+	onCommitNextOwnerTransfer();
+	onCommitName();
+	onCommitDesc();
+	onCommitSaleInfo();
+	onCommitSaleType();
+	onCommitIncludeInSearch();
 }
 
+void LLSidepanelTaskInfo::setObjectSelection(LLObjectSelectionHandle selection)
+{
+	mObjectSelection = selection;
+}
diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h
index aea65c11706..25a9e2d5772 100644
--- a/indra/newview/llsidepaneltaskinfo.h
+++ b/indra/newview/llsidepaneltaskinfo.h
@@ -35,6 +35,7 @@
 
 #include "llsidepanelinventorysubpanel.h"
 #include "lluuid.h"
+#include "llselectmgr.h"
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLSidepanelTaskInfo
@@ -43,6 +44,7 @@
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 class LLNameBox;
+class LLCheckBoxCtrl;
 
 class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel
 {
@@ -52,6 +54,8 @@ class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel
 
 	/*virtual*/	BOOL postBuild();
 
+	void setObjectSelection(LLObjectSelectionHandle selection);
+
 protected:
 	/*virtual*/ void refresh();	// refresh all labels as needed
 	/*virtual*/ void save();
@@ -62,29 +66,25 @@ class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel
 	static void onClickRelease(void*);
 		   void onClickGroup();
 		   void cbGroupID(LLUUID group_id);
-	static void onClickDeedToGroup(void*);
-
-	static void onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32 perm);
-
-	static void onCommitGroupShare(LLUICtrl *ctrl, void *data);
 
-	static void onCommitEveryoneMove(LLUICtrl *ctrl, void *data);
-	static void onCommitEveryoneCopy(LLUICtrl *ctrl, void *data);
+	void onClickDeedToGroup();
+	void onCommitPerm(LLCheckBoxCtrl* ctrl, U8 field, U32 perm);
+	void onCommitGroupShare();
+	void onCommitEveryoneMove();
+	void onCommitEveryoneCopy();
+	void onCommitNextOwnerModify();
+	void onCommitNextOwnerCopy();
+	void onCommitNextOwnerTransfer();
+	void onCommitName();
+	void onCommitDesc();
+	void onCommitSaleInfo();
+	void onCommitSaleType();
+
+	void onCommitClickAction(U8 click_action);
+	void onCommitIncludeInSearch();
 
-	static void onCommitNextOwnerModify(LLUICtrl* ctrl, void* data);
-	static void onCommitNextOwnerCopy(LLUICtrl* ctrl, void* data);
-	static void onCommitNextOwnerTransfer(LLUICtrl* ctrl, void* data);
-	
-	static void onCommitName(LLUICtrl* ctrl, void* data);
-	static void onCommitDesc(LLUICtrl* ctrl, void* data);
-
-	static void onCommitSaleInfo(LLUICtrl* ctrl, void* data);
-	static void onCommitSaleType(LLUICtrl* ctrl, void* data);
 	void setAllSaleInfo();
 
-	static void	onCommitClickAction(LLUICtrl* ctrl, void*);
-	static void onCommitIncludeInSearch(LLUICtrl* ctrl, void*);
-
 private:
 	LLNameBox*		mLabelGroupName;		// group name
 
@@ -94,12 +94,14 @@ class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel
 
 protected:
 	void 						onOpenButtonClicked();
-	void 						onBuildButtonClicked();
+	void 						onPayButtonClicked();
 	void 						onBuyButtonClicked();
 private:
 	LLButton*					mOpenBtn;
-	LLButton*					mBuildBtn;
+	LLButton*					mPayBtn;
 	LLButton*					mBuyBtn;
+
+	LLObjectSelectionHandle mObjectSelection;
 };
 
 
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 526b7967874..e2e0e00dcff 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2523,24 +2523,12 @@ class LLObjectEnableTouch : public view_listener_t
 //		label.assign("Touch");
 //	}
 //}
-/*
-bool handle_object_open()
-{
-	LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
-	if(!obj) return true;
 
-	LLFloaterOpenObject::show();
-	return true;
+void handle_object_open()
+{
+	LLFloaterReg::showInstance("openobject");
 }
 
-class LLObjectOpen : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		return handle_object_open();
-	}
-};
-*/
 bool enable_object_open()
 {
 	// Look for contents in root object, which is all the LLFloaterOpenObject
@@ -8077,6 +8065,7 @@ void initialize_menus()
 	commit.add("Object.Buy", boost::bind(&handle_buy));
 	commit.add("Object.Edit", boost::bind(&handle_object_edit));
 	commit.add("Object.Inspect", boost::bind(&handle_object_inspect));
+	commit.add("Object.Open", boost::bind(&handle_object_open));
 	
 	commit.add("Object.Take", boost::bind(&handle_take));
 
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index b65878b5e63..db4eb3be9d8 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -94,6 +94,7 @@ void handle_sit_down(void*);
 void handle_object_build(void*);
 void handle_object_touch();
 bool enable_object_open();
+void handle_object_open();
 
 // Buy either contents or object itself
 void handle_buy();
-- 
GitLab


From 83fb99a9ac2f07334233e7307cc18a4d340c8527 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Wed, 4 Nov 2009 18:28:45 -0800
Subject: [PATCH 150/306] ext-2038 - script editor, cursor becomes stuck in
 some rows ext-2037 0 Script editor, garbage characters inserted in text

---
 indra/llui/lltextbase.cpp             | 28 +++++++++++++++++++++------
 indra/llui/lltextbase.h               |  6 +++---
 indra/newview/llexpandabletextbox.cpp |  3 ++-
 indra/newview/llparticipantlist.cpp   |  3 +++
 indra/newview/llviewertexteditor.cpp  |  4 ++--
 5 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index e5aac0d5e7e..97ba6913418 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -1108,7 +1108,7 @@ void LLTextBase::reflow(S32 start_index)
 														S32_MAX);
 
 			S32 segment_width, segment_height;
-			segment->getDimensions(seg_offset, character_count, segment_width, segment_height);
+			bool force_newline = segment->getDimensions(seg_offset, character_count, segment_width, segment_height);
 			// grow line height as necessary based on reported height of this segment
 			line_height = llmax(line_height, segment_height);
 			remaining_pixels -= segment_width;
@@ -1153,6 +1153,18 @@ void LLTextBase::reflow(S32 start_index)
 			else
 			{
 				// subtract pixels used and increment segment
+				if (force_newline)
+				{
+					mLineInfoList.push_back(line_info(
+												line_start_index, 
+												last_segment_char_on_line, 
+												line_rect, 
+												line_count));
+					line_start_index = segment->getStart() + seg_offset;
+					cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
+					line_height = 0;
+					remaining_pixels = text_width;
+				}
 				++seg_iter;
 				seg_offset = 0;
 			}
@@ -2124,7 +2136,7 @@ LLRect LLTextBase::getVisibleDocumentRect() const
 LLTextSegment::~LLTextSegment()
 {}
 
-void LLTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const { width = 0; height = 0; }
+bool LLTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const { width = 0; height = 0; return false;}
 S32	LLTextSegment::getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const { return 0; }
 S32	LLTextSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const { return 0; }
 void LLTextSegment::updateLayout(const LLTextBase& editor) {}
@@ -2352,12 +2364,13 @@ void LLNormalTextSegment::setToolTip(const std::string& tooltip)
 	mTooltip = tooltip;
 }
 
-void LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
+bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
 {
 	LLWString text = mEditor.getWText();
 
 	height = mFontHeight;
 	width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars);
+	return num_chars >= 1 && text[mStart + num_chars - 1] == '\n';
 }
 
 S32	LLNormalTextSegment::getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const
@@ -2404,8 +2417,9 @@ S32	LLNormalTextSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 lin
 	// but not both
 	S32 last_char_in_run = mStart + segment_offset + num_chars;
 	// check length first to avoid indexing off end of string
-	if (last_char_in_run >= mEditor.getLength() 
-		|| text[last_char_in_run] == '\n')
+	if (last_char_in_run < mEnd 
+		&& (last_char_in_run >= mEditor.getLength() 
+			|| text[last_char_in_run] == '\n'))
 	{
 		num_chars++;
 	}
@@ -2444,7 +2458,7 @@ LLInlineViewSegment::~LLInlineViewSegment()
 	mView->die();
 }
 
-void	LLInlineViewSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
+bool LLInlineViewSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
 {
 	if (first_char == 0 && num_chars == 0) 
 	{
@@ -2458,6 +2472,8 @@ void	LLInlineViewSegment::getDimensions(S32 first_char, S32 num_chars, S32& widt
 		width = mLeftPad + mRightPad + mView->getRect().getWidth();
 		height = mBottomPad + mTopPad + mView->getRect().getHeight();
 	}
+
+	return false;
 }
 
 S32	LLInlineViewSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index 4cca522a235..8cae8fde220 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -370,7 +370,7 @@ class LLTextSegment : public LLRefCount, public LLMouseHandler
 	LLTextSegment(S32 start, S32 end) : mStart(start), mEnd(end){};
 	virtual ~LLTextSegment();
 
-	virtual void				getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
+	virtual bool				getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
 	virtual S32					getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const;
 	virtual S32					getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const;
 	virtual void				updateLayout(const class LLTextBase& editor);
@@ -421,7 +421,7 @@ class LLNormalTextSegment : public LLTextSegment
 	LLNormalTextSegment( const LLStyleSP& style, S32 start, S32 end, LLTextBase& editor );
 	LLNormalTextSegment( const LLColor4& color, S32 start, S32 end, LLTextBase& editor, BOOL is_visible = TRUE);
 
-	/*virtual*/ void				getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
+	/*virtual*/ bool				getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
 	/*virtual*/ S32					getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const;
 	/*virtual*/ S32					getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const;
 	/*virtual*/ F32					draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect);
@@ -474,7 +474,7 @@ class LLInlineViewSegment : public LLTextSegment
 
 	LLInlineViewSegment(const Params& p, S32 start, S32 end);
 	~LLInlineViewSegment();
-	/*virtual*/ void		getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
+	/*virtual*/ bool		getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
 	/*virtual*/ S32			getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const;
 	/*virtual*/ void		updateLayout(const class LLTextBase& editor);
 	/*virtual*/ F32			draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect);
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 7bc48185e68..424d6353211 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -48,11 +48,12 @@ class LLExpanderSegment : public LLTextSegment
 		mExpanderLabel(more_text)
 	{}
 
-	/*virtual*/ void	getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const 
+	/*virtual*/ bool	getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const 
 	{
 		// more label always spans width of text box
 		width = mEditor.getTextRect().getWidth() - mEditor.getHPad(); 
 		height = llceil(mStyle->getFont()->getLineHeight());
+		return true;
 	}
 	/*virtual*/ S32		getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const 
 	{ 
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index 9450bee3153..c373cef6f3b 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -42,6 +42,9 @@
 #include "llspeakers.h"
 
 //LLParticipantList retrieves add, clear and remove events and updates view accordingly 
+#if LL_MSVC
+#pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
+#endif
 LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list):
 	mSpeakerMgr(data_source),
 	mAvatarList(avatar_list),
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index 90dff465c94..75555efe7ac 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -171,7 +171,7 @@ class LLEmbeddedItemSegment : public LLTextSegment
 		mToolTip = inv_item->getName() + '\n' + inv_item->getDescription();
 	}
 
-	/*virtual*/ void getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
+	/*virtual*/ bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
 	{
 		if (num_chars == 0)
 		{
@@ -183,7 +183,7 @@ class LLEmbeddedItemSegment : public LLTextSegment
 			width = EMBEDDED_ITEM_LABEL_PADDING + mImage->getWidth() + mStyle->getFont()->getWidth(mLabel.c_str());
 			height = llmax(mImage->getHeight(), llceil(mStyle->getFont()->getLineHeight()));
 		}
-
+		return false;
 	}
 
 	/*virtual*/ S32				getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const 
-- 
GitLab


From 723a86f608879d192347039570e37bd1c04752e1 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Wed, 4 Nov 2009 19:00:40 -0800
Subject: [PATCH 151/306] fixed layout of items embedded in notecards

---
 indra/newview/llviewertexteditor.cpp | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index 75555efe7ac..6f8818be6e4 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -188,7 +188,24 @@ class LLEmbeddedItemSegment : public LLTextSegment
 
 	/*virtual*/ S32				getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const 
 	{
-		return 1;
+		// always draw at beginning of line
+		if (line_offset == 0)
+		{
+			return 1;
+		}
+		else
+		{
+			S32 width, height;
+			getDimensions(mStart, 1, width, height);
+			if (width > num_pixels) 
+			{
+				return 0;
+			}
+			else
+			{
+				return 1;
+			}
+		}
 	}
 	/*virtual*/ F32				draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect)
 	{
@@ -208,7 +225,7 @@ class LLEmbeddedItemSegment : public LLTextSegment
 		}
 
 		F32 right_x;
-		mStyle->getFont()->render(mLabel, 0, image_rect.mRight + EMBEDDED_ITEM_LABEL_PADDING, draw_rect.mBottom, color, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::UNDERLINE, LLFontGL::NO_SHADOW, mLabel.length(), S32_MAX, &right_x);
+		mStyle->getFont()->render(mLabel, 0, image_rect.mRight + EMBEDDED_ITEM_LABEL_PADDING, draw_rect.mTop, color, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::UNDERLINE, LLFontGL::NO_SHADOW, mLabel.length(), S32_MAX, &right_x);
 		return right_x;
 	}
 	
-- 
GitLab


From 0292fec348dbe3c65c6e56b2bef8149e4ce58d54 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Wed, 4 Nov 2009 19:22:55 -0800
Subject: [PATCH 152/306] fixed clipping not working with gl_rect calls
 EXT-1397 - description edit field is broken

---
 indra/llui/lllocalcliprect.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/indra/llui/lllocalcliprect.cpp b/indra/llui/lllocalcliprect.cpp
index 058b6ae1784..f5a78e10994 100644
--- a/indra/llui/lllocalcliprect.cpp
+++ b/indra/llui/lllocalcliprect.cpp
@@ -77,6 +77,8 @@ LLScreenClipRect::LLScreenClipRect(const LLRect& rect, BOOL enabled)
 
 LLScreenClipRect::~LLScreenClipRect()
 {
+	// finish any deferred calls in this clipping region
+	gGL.flush();
 	if (mEnabled)
 	{
 		popClipRect();
-- 
GitLab


From 35c7c7a9b29ef4462ea969b393c25b59813ef169 Mon Sep 17 00:00:00 2001
From: angela <angela@lindenlab.com>
Date: Thu, 5 Nov 2009 11:40:09 +0800
Subject: [PATCH 153/306] in object inspector: change secure browsing image and
 make it hide by default

---
 indra/newview/skins/default/xui/en/inspect_object.xml | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml
index fe492e0ae80..bdceb7b0fb9 100644
--- a/indra/newview/skins/default/xui/en/inspect_object.xml
+++ b/indra/newview/skins/default/xui/en/inspect_object.xml
@@ -151,10 +151,11 @@ This is a really long description for an object being as how it is at least 80 c
    width="75" />
   <icon
    name="secure_browsing"
-   image_name="map_infohub.tga"
+   image_name="Lock"
    left_delta="80"
-   width="16"
-   height="16"
+   visible="false"
+   width="18"
+   height="18"
    top_delta="2"
    tool_tip="Secure Browsing"
    follows="left|top"/> 
-- 
GitLab


From ecaf21b22616cad649784e6874249e35f1feee7b Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Wed, 4 Nov 2009 20:46:17 -0800
Subject: [PATCH 154/306] better fix for clipping not working

---
 indra/llui/lllocalcliprect.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/indra/llui/lllocalcliprect.cpp b/indra/llui/lllocalcliprect.cpp
index f5a78e10994..43c21e250ce 100644
--- a/indra/llui/lllocalcliprect.cpp
+++ b/indra/llui/lllocalcliprect.cpp
@@ -77,8 +77,6 @@ LLScreenClipRect::LLScreenClipRect(const LLRect& rect, BOOL enabled)
 
 LLScreenClipRect::~LLScreenClipRect()
 {
-	// finish any deferred calls in this clipping region
-	gGL.flush();
 	if (mEnabled)
 	{
 		popClipRect();
@@ -115,6 +113,9 @@ void LLScreenClipRect::updateScissorRegion()
 {
 	if (sClipRectStack.empty()) return;
 
+	// finish any deferred calls in the old clipping region
+	gGL.flush();
+
 	LLRect rect = sClipRectStack.top();
 	stop_glerror();
 	S32 x,y,w,h;
-- 
GitLab


From 77ebe6680449b3e0fda96444ba7df3140d1dcab1 Mon Sep 17 00:00:00 2001
From: Alexei Arabadji <aarabadji@productengine.com>
Date: Thu, 5 Nov 2009 12:49:44 +0200
Subject: [PATCH 155/306] fixed EXT-2201 "Docking undocked window causes
 closing off docked nearby chat window"

--HG--
branch : product-engine
---
 indra/newview/llnearbychat.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 81d033d7f98..b0cce314cf1 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -61,7 +61,7 @@
 static const S32 RESIZE_BAR_THICKNESS = 3;
 
 LLNearbyChat::LLNearbyChat(const LLSD& key) 
-	: LLDockableFloater(NULL, key)
+	: LLDockableFloater(NULL, false, key)
 	,mChatHistory(NULL)
 {
 	
-- 
GitLab


From f8d1644a4132356c2a0220110b9d9bc981f73b16 Mon Sep 17 00:00:00 2001
From: Yuri Chebotarev <ychebotarev@productengine.com>
Date: Thu, 5 Nov 2009 13:17:12 +0200
Subject: [PATCH 156/306] fix for major bug ext-2209 Nearby Chat log is broken

--HG--
branch : product-engine
---
 indra/llui/llfloaterreg.cpp    | 2 +-
 indra/newview/llnearbychat.cpp | 8 +++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index f8e07913fbf..03925f922c1 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -367,7 +367,7 @@ std::string LLFloaterReg::declareVisibilityControl(const std::string& name)
 std::string LLFloaterReg::declareDockStateControl(const std::string& name)
 {
 	std::string controlname = getDockStateControlName(name);
-	LLUI::sSettingGroups["floater"]->declareBOOL(controlname, FALSE,
+	LLUI::sSettingGroups["floater"]->declareBOOL(controlname, TRUE,
 												 llformat("Window Docking state for %s", name.c_str()),
 												 TRUE);
 	return controlname;
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 81d033d7f98..c68d3fe023d 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -107,12 +107,14 @@ BOOL LLNearbyChat::postBuild()
 
 void    LLNearbyChat::applySavedVariables()
 {
-
 	if (mRectControl.size() > 1)
 	{
 		const LLRect& rect = LLUI::sSettingGroups["floater"]->getRect(mRectControl);
-		reshape(rect.getWidth(), rect.getHeight());
-		setRect(rect);
+		if(!rect.isEmpty() && rect.isValid())
+		{
+			reshape(rect.getWidth(), rect.getHeight());
+			setRect(rect);
+		}
 	}
 
 
-- 
GitLab


From 3f469dcef67a0ee79def5b10990a652a0d75eacf Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Thu, 5 Nov 2009 11:30:28 +0000
Subject: [PATCH 157/306] DEV-38840: cosmetic fix to the Pay Resident/Group
 floater in 2.0. Previously the title for this floater was set to "" and a
 text string was positioned over the title bar based upon whether you are
 paying a resident or a group. This could mess up the position of the floater
 "title" and was also truncating the "Pay Resident" title. Now, we use
 setTitle() to actually set the floater title appropriately.

---
 indra/newview/llfloaterpay.cpp                |  6 ++--
 .../default/xui/en/floater_pay_object.xml     | 36 +++++--------------
 2 files changed, 11 insertions(+), 31 deletions(-)

diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp
index 88811d06fe2..c2389e73a06 100644
--- a/indra/newview/llfloaterpay.cpp
+++ b/indra/newview/llfloaterpay.cpp
@@ -444,13 +444,11 @@ void LLFloaterPay::onCacheOwnerName(const LLUUID& owner_id,
 {
 	if (is_group)
 	{
-		childSetVisible("payee_group",true);
-		childSetVisible("payee_resident",false);
+		setTitle(getString("payee_group"));
 	}
 	else
 	{
-		childSetVisible("payee_group",false);
-		childSetVisible("payee_resident",true);
+		setTitle(getString("payee_resident"));
 	}
 	
 	childSetTextArg("payee_name", "[FIRST]", firstname);
diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml
index 8d230023cc8..1946920a9ce 100644
--- a/indra/newview/skins/default/xui/en/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay_object.xml
@@ -8,32 +8,14 @@
  help_topic="give_money"
  save_rect="true"
  width="225">
-   <text
-     type="string"
-     length="1"
-     follows="left|top"
-     font="SansSerifBold"
-     height="18"
-     layout="topleft"
-     left="12"
-     name="payee_group"
-     top="7"
-     width="75">
-        Pay group:
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     font="SansSerifBold"
-     height="18"
-     layout="topleft"
-     left="12"
-     name="payee_resident"
-     top="7"
-     width="75">
-        Pay resident:
-    </text>
+    <string
+     name="payee_group">
+        Pay Group
+    </string>
+    <string
+     name="payee_resident">
+        Pay Resident
+    </string>
    <icon
      height="16"
      width="16"
@@ -41,7 +23,7 @@
      mouse_opaque="true"
      name="icon_person"
      tool_tip="Person"
-     top_pad="0"
+     top_pad="24"
      left="10"
      />
     <text
-- 
GitLab


From a0348b7e271d8bc343ac15049c6c5ea81c4b7f3f Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Thu, 5 Nov 2009 14:19:43 +0200
Subject: [PATCH 158/306] EXT-2023   	 Camera floater: arrows became shifted
 when pressed Cause: The different between default texture size and size of
 the image has influenced on displacement of arrows at rotation. Solution:
 Transformation matrix has been changed to handle that different

--HG--
branch : product-engine
---
 indra/newview/lljoystickbutton.cpp | 29 +++++++++++++++++++----------
 indra/newview/lljoystickbutton.h   |  2 +-
 2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp
index 4fd3b7bddc8..bd6702a0b2f 100644
--- a/indra/newview/lljoystickbutton.cpp
+++ b/indra/newview/lljoystickbutton.cpp
@@ -517,43 +517,52 @@ void LLJoystickCameraRotate::draw()
 	LLGLSUIDefault gls_ui;
 
 	getImageUnselected()->draw( 0, 0 );
+	LLPointer<LLUIImage> image = getImageSelected();
 
 	if( mInTop )
 	{
-		drawRotatedImage( getImageSelected()->getImage(), 0 );
+		drawRotatedImage( getImageSelected(), 0 );
 	}
 
 	if( mInRight )
 	{
-		drawRotatedImage( getImageSelected()->getImage(), 1 );
+		drawRotatedImage( getImageSelected(), 1 );
 	}
 
 	if( mInBottom )
 	{
-		drawRotatedImage( getImageSelected()->getImage(), 2 );
+		drawRotatedImage( getImageSelected(), 2 );
 	}
 
 	if( mInLeft )
 	{
-		drawRotatedImage( getImageSelected()->getImage(), 3 );
+		drawRotatedImage( getImageSelected(), 3 );
 	}
 }
 
 // Draws image rotated by multiples of 90 degrees
-void LLJoystickCameraRotate::drawRotatedImage( LLTexture* image, S32 rotations )
+void LLJoystickCameraRotate::drawRotatedImage( LLPointer<LLUIImage> image, S32 rotations )
 {
 	S32 width = image->getWidth();
 	S32 height = image->getHeight();
-
+	LLTexture* texture = image->getImage();
+
+	/*
+	 * Scale  texture coordinate system 
+	 * to handle the different between image size and size of texture.
+	 * If we will use default matrix, 
+	 * it may break texture mapping after rotation.
+	 * see EXT-2023 Camera floater: arrows became shifted when pressed.
+	 */ 
 	F32 uv[][2] = 
 	{
-		{ 1.f, 1.f },
-		{ 0.f, 1.f },
+		{ (F32)width/texture->getWidth(), (F32)height/texture->getHeight() },
+		{ 0.f, (F32)height/texture->getHeight() },
 		{ 0.f, 0.f },
-		{ 1.f, 0.f }
+		{ (F32)width/texture->getWidth(), 0.f }
 	};
 
-	gGL.getTexUnit(0)->bind(image);
+	gGL.getTexUnit(0)->bind(texture);
 
 	gGL.color4fv(UI_VERTEX_COLOR.mV);
 	
diff --git a/indra/newview/lljoystickbutton.h b/indra/newview/lljoystickbutton.h
index 8caef30fa4b..4c657913b8c 100644
--- a/indra/newview/lljoystickbutton.h
+++ b/indra/newview/lljoystickbutton.h
@@ -150,7 +150,7 @@ class LLJoystickCameraRotate
 protected:
 	F32				getOrbitRate();
 	virtual void	updateSlop();
-	void			drawRotatedImage( LLTexture* image, S32 rotations );
+	void			drawRotatedImage( LLPointer<LLUIImage> image, S32 rotations );
 
 protected:
 	BOOL			mInLeft;
-- 
GitLab


From 055d9f5eb4ae5d340c64ce741061558344501de4 Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Thu, 5 Nov 2009 15:07:36 +0200
Subject: [PATCH 159/306] IM: removed unused class and xml file for im p2p
 control panel

--HG--
branch : product-engine
---
 indra/newview/CMakeLists.txt | 2 --
 1 file changed, 2 deletions(-)

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index fde942ad116..76997385cbb 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -239,7 +239,6 @@ set(viewer_SOURCE_FILES
     llhudrender.cpp
     llhudtext.cpp
     llhudview.cpp
-    llimcontrolpanel.cpp
     llimfloater.cpp
     llimhandler.cpp
     llimpanel.cpp
@@ -721,7 +720,6 @@ set(viewer_HEADER_FILES
     llhudrender.h
     llhudtext.h
     llhudview.h
-    llimcontrolpanel.h
     llimfloater.h
     llimpanel.h
     llimview.h
-- 
GitLab


From de281985ec679c026cc201d2326ecfa3db6a66da Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 5 Nov 2009 13:18:26 +0000
Subject: [PATCH 160/306] fix that speak button on trunk.

---
 indra/newview/skins/default/xui/en/panel_bottomtray.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 1da5f0e74d2..dcfd0af36e9 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -60,7 +60,7 @@
          min_width="96"
          name="speak_panel"
          user_resize="false">
-         <chiclet_talk
+         <talk_button
           follows="right"
           height="23"
           speak_button.tab_stop="true"
@@ -293,4 +293,4 @@
          top="0"
          width="26"/>
     </layout_stack>
-</panel>
\ No newline at end of file
+</panel>
-- 
GitLab


From 42e4e37666d3827b5d2ceb77cb13bcdb93068c0c Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 5 Nov 2009 13:31:17 +0000
Subject: [PATCH 161/306] trivial dead code removal.

---
 indra/llwindow/llwindowsdl.cpp | 1 -
 1 file changed, 1 deletion(-)

diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 9f03c8f6956..e671fc8a83c 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -418,7 +418,6 @@ static int x11_detect_VRAM_kb()
 BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, BOOL fullscreen, BOOL disable_vsync)
 {
 	//bool			glneedsinit = false;
-//    const char *gllibname = null;
 
 	llinfos << "createContext, fullscreen=" << fullscreen <<
 	    " size=" << width << "x" << height << llendl;
-- 
GitLab


From 8cec9098cd755a4f70bcf5092d8b66a7c3c702d5 Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Thu, 5 Nov 2009 15:54:05 +0200
Subject: [PATCH 162/306] implemented  minor  task  EXT-1617 No need to expand
 all accordion panels in the My Landmarks. Rollback previous incorrect 
 behavior   in changeset 45ece11eb7d8.

--HG--
branch : product-engine
---
 indra/newview/llpanellandmarks.cpp | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 34c146826f5..02bcd385e92 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -100,6 +100,8 @@ BOOL LLLandmarksPanel::postBuild()
 	initLandmarksInventroyPanel();
 	initMyInventroyPanel();
 	initLibraryInventroyPanel();
+	getChild<LLAccordionCtrlTab>("tab_favorites")->setDisplayChildren(true);
+	getChild<LLAccordionCtrlTab>("tab_landmarks")->setDisplayChildren(true);
 
 	gIdleCallbacks.addFunction(LLLandmarksPanel::doIdle, this);
 	return TRUE;
@@ -421,6 +423,7 @@ void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLIn
 	mAccordionTabs.push_back(accordion_tab);
 	accordion_tab->setDropDownStateChangedCallback(
 		boost::bind(&LLLandmarksPanel::onAccordionExpandedCollapsed, this, _2, inventory_list));
+	accordion_tab->setDisplayChildren(false);
 }
 
 void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLInventorySubTreePanel* inventory_list)
@@ -617,21 +620,19 @@ void LLLandmarksPanel::onClipboardAction(const LLSD& userdata) const
 
 void LLLandmarksPanel::onFoldingAction(const LLSD& userdata)
 {
-	LLFolderView* landmarks_folder = mLandmarksInventoryPanel->getRootFolder();
-	LLFolderView* fav_folder = mFavoritesInventoryPanel->getRootFolder();
+	if(!mCurrentSelectedList) return;
+
+	LLFolderView* root_folder = mCurrentSelectedList->getRootFolder();
 	std::string command_name = userdata.asString();
 
 	if ("expand_all" == command_name)
 	{
-		landmarks_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
-		fav_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
-		landmarks_folder->arrangeAll();
-		fav_folder->arrangeAll();
+		root_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
+		root_folder->arrangeAll();
 	}
 	else if ("collapse_all" == command_name)
 	{
-		landmarks_folder->closeAllFolders();
-		fav_folder->closeAllFolders();
+		root_folder->closeAllFolders();
 	}
 	else if ( "sort_by_date" == command_name)
 	{
@@ -642,9 +643,6 @@ void LLLandmarksPanel::onFoldingAction(const LLSD& userdata)
 	}
 	else
 	{
-		if(!mCurrentSelectedList) return;
-
-		LLFolderView* root_folder = mCurrentSelectedList->getRootFolder();
 		root_folder->doToSelected(&gInventory, userdata);
 	}
 }
-- 
GitLab


From 1c3cb11a7b19f6410994b0576ac51b6f7a7ba054 Mon Sep 17 00:00:00 2001
From: Sergey Borushevsky <sborushevsky@productengine.com>
Date: Thu, 5 Nov 2009 16:55:29 +0200
Subject: [PATCH 163/306] Fixed major bug EXT-2221 (Teleport History > List
 item > Arrow button should open Place Profile, not teleport) Fixed major bug
 EXT-2222 (Remove (i) inspector icon from Places > Teleport History > item)
 Fixed major bug EXT-2223 (Places > Teleport History > Arrow icon should only
 appear on mouseover)

Actually it's just replacing image for right-side button on history item.

--HG--
branch : product-engine
---
 indra/newview/llpanelteleporthistory.cpp         | 16 +++++++++-------
 .../xui/en/panel_teleport_history_item.xml       | 11 +----------
 2 files changed, 10 insertions(+), 17 deletions(-)

diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 437af1c4e71..a34f029095b 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -71,9 +71,10 @@ class LLTeleportHistoryFlatItem : public LLPanel
 
 	static void showPlaceInfoPanel(S32 index);
 private:
-	void onInfoBtnClick();
+	void onProfileBtnClick();
 
-	LLButton* mInfoBtn;
+	LLButton* mProfileBtn;
+	
 	LLTeleportHistoryPanel::ContextMenu *mContextMenu;
 
 	S32 mIndex;
@@ -95,8 +96,9 @@ BOOL LLTeleportHistoryFlatItem::postBuild()
 	LLTextBox *region = getChild<LLTextBox>("region");
 	region->setValue(mRegionName);
 
-	mInfoBtn = getChild<LLButton>("info_btn");
-	mInfoBtn->setClickedCallback(boost::bind(&LLTeleportHistoryFlatItem::onInfoBtnClick, this));
+	mProfileBtn = getChild<LLButton>("profile_btn");
+        
+	mProfileBtn->setClickedCallback(boost::bind(&LLTeleportHistoryFlatItem::onProfileBtnClick, this));
 
 	return true;
 }
@@ -111,7 +113,7 @@ void LLTeleportHistoryFlatItem::setValue(const LLSD& value)
 void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask)
 {
 	childSetVisible("hovered_icon", true);
-	mInfoBtn->setVisible(true);
+	mProfileBtn->setVisible(true);
 
 	LLPanel::onMouseEnter(x, y, mask);
 }
@@ -119,7 +121,7 @@ void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask)
 void LLTeleportHistoryFlatItem::onMouseLeave(S32 x, S32 y, MASK mask)
 {
 	childSetVisible("hovered_icon", false);
-	mInfoBtn->setVisible(false);
+	mProfileBtn->setVisible(false);
 
 	LLPanel::onMouseLeave(x, y, mask);
 }
@@ -142,7 +144,7 @@ void LLTeleportHistoryFlatItem::showPlaceInfoPanel(S32 index)
 	LLSideTray::getInstance()->showPanel("panel_places", params);
 }
 
-void LLTeleportHistoryFlatItem::onInfoBtnClick()
+void LLTeleportHistoryFlatItem::onProfileBtnClick()
 {
 	LLTeleportHistoryFlatItem::showPlaceInfoPanel(mIndex);
 }
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
index 0073a1f1a0d..1f67a0a7328 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
@@ -47,16 +47,6 @@
      top="4"
      value="..."
      width="242" />
-    <button
-     follows="right"
-     height="16"
-     image_pressed="Info_Press"
-     image_unselected="Info_Over"
-     left_pad="3"
-     right="-31"
-     name="info_btn"
-     top_delta="-2"
-     width="16" />
     <button
      follows="right"
      height="20"
@@ -66,5 +56,6 @@
      right="-3"
      name="profile_btn"
      top_delta="-2"
+     visible="false"
      width="20" />
 </panel>
-- 
GitLab


From 4254d1e0f7af0f8f00033bc0edaf74ddd7a49796 Mon Sep 17 00:00:00 2001
From: Eugene Kondrashev <ekondrashev@productengine.com>
Date: Thu, 5 Nov 2009 17:10:09 +0200
Subject: [PATCH 164/306] Implemented normal sub-task EXT-2146-IM Message
 Headers should NOT be of enourmous size (see Style Guide: IM & Voice).

--HG--
branch : product-engine
---
 indra/newview/llchathistory.cpp               | 29 +++++--
 indra/newview/llchathistory.h                 | 21 ++++-
 .../default/xui/en/panel_chat_header.xml      | 85 +++++++++----------
 .../default/xui/en/panel_chat_separator.xml   | 16 +---
 .../default/xui/en/widgets/chat_history.xml   |  4 +
 5 files changed, 86 insertions(+), 69 deletions(-)

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index e561507e69b..2ccd6b7d350 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -132,8 +132,7 @@ class LLChatHistoryHeader: public LLPanel
 		menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_object_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 		mPopupMenuHandleObject = menu->getHandle();
 
-		LLPanel* visible_panel = getChild<LLPanel>("im_header");
-		visible_panel->setMouseDownCallback(boost::bind(&LLChatHistoryHeader::onHeaderPanelClick, this, _2, _3, _4));
+		setMouseDownCallback(boost::bind(&LLChatHistoryHeader::onHeaderPanelClick, this, _2, _3, _4));
 
 		return LLPanel::postBuild();
 	}
@@ -290,7 +289,11 @@ mMessageSeparatorFilename(p.message_separator),
 mLeftTextPad(p.left_text_pad),
 mRightTextPad(p.right_text_pad),
 mLeftWidgetPad(p.left_widget_pad),
-mRightWidgetPad(p.right_widget_pad)
+mRightWidgetPad(p.right_widget_pad),
+mTopSeparatorPad(p.top_separator_pad),
+mBottomSeparatorPad(p.bottom_separator_pad),
+mTopHeaderPad(p.top_header_pad),
+mBottomHeaderPad(p.bottom_header_pad)
 {
 }
 
@@ -332,16 +335,30 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& sty
 	LLView* view = NULL;
 	std::string view_text;
 
+	LLInlineViewSegment::Params p;
+	p.force_newline = true;
+	p.left_pad = mLeftWidgetPad;
+	p.right_pad = mRightWidgetPad;
+
 	if (mLastFromName == chat.mFromName)
 	{
 		view = getSeparator();
 		view_text = "\n";
+		p.top_pad = mTopSeparatorPad;
+		p.bottom_pad = mBottomSeparatorPad;
 	}
 	else
 	{
 		view = getHeader(chat);
 		view_text = chat.mFromName + MESSAGE_USERNAME_DATE_SEPARATOR + formatCurrentTime() + '\n';
+		if (getText().size() == 0)
+			p.top_pad = 0;
+		else
+			p.top_pad = mTopHeaderPad;
+		p.bottom_pad = mBottomHeaderPad;
 	}
+	p.view = view;
+
 	//Prepare the rect for the view
 	LLRect target_rect = getDocumentView()->getRect();
 	// squeeze down the widget by subtracting padding off left and right
@@ -350,12 +367,6 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& sty
 	view->reshape(target_rect.getWidth(), view->getRect().getHeight());
 	view->setOrigin(target_rect.mLeft, view->getRect().mBottom);
 
-	LLInlineViewSegment::Params p;
-	p.view = view;
-	p.force_newline = true;
-	p.left_pad = mLeftWidgetPad;
-	p.right_pad = mRightWidgetPad;
-
 	appendWidget(p, view_text, false);
 
 	//Append the text message
diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h
index 92dcfdd9582..3789ebff4e9 100644
--- a/indra/newview/llchathistory.h
+++ b/indra/newview/llchathistory.h
@@ -54,6 +54,14 @@ class LLChatHistory : public LLTextEditor
 			Optional<S32>			left_widget_pad;
 			//Widget right padding from the scroll rect
 			Optional<S32>			right_widget_pad;
+			//Separator top padding
+			Optional<S32>			top_separator_pad;
+			//Separator bottom padding
+			Optional<S32>			bottom_separator_pad;
+			//Header top padding
+			Optional<S32>			top_header_pad;
+			//Header bottom padding
+			Optional<S32>			bottom_header_pad;
 
 			Params()
 			:	message_header("message_header"),
@@ -61,7 +69,11 @@ class LLChatHistory : public LLTextEditor
 				left_text_pad("left_text_pad"),
 				right_text_pad("right_text_pad"),
 				left_widget_pad("left_widget_pad"),
-				right_widget_pad("right_widget_pad")
+				right_widget_pad("right_widget_pad"),
+				top_separator_pad("top_separator_pad"),
+				bottom_separator_pad("bottom_separator_pad"),
+				top_header_pad("top_header_pad"),
+				bottom_header_pad("bottom_header_pad")
 				{
 				}
 
@@ -105,9 +117,16 @@ class LLChatHistory : public LLTextEditor
 		std::string mLastFromName;
 		std::string mMessageHeaderFilename;
 		std::string mMessageSeparatorFilename;
+
 		S32 mLeftTextPad;
 		S32 mRightTextPad;
+
 		S32 mLeftWidgetPad;
 		S32 mRightWidgetPad;
+
+		S32 mTopSeparatorPad;
+		S32 mBottomSeparatorPad;
+		S32 mTopHeaderPad;
+		S32 mBottomHeaderPad;
 };
 #endif /* LLCHATHISTORY_H_ */
diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml
index a9f622e0183..64519b25715 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_header.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml
@@ -1,53 +1,44 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
+ background_visible="true"
+ bevel_style="in"
+ bg_alpha_color="black"
  follows="left|top|right"
- height="57"
- label="im_header_container"
+ height="20"
+ label="im_header"
  layout="topleft"
- left="8"
- name="im_header_container">
-    <panel
-     background_visible="true"
-     bevel_style="in"
-     bg_alpha_color="black"
-     follows="left|top|right"
-     height="30"
-     label="im_header"
+ name="im_header" >
+    <avatar_icon
+     follows="left"
+     height="16"
+     image_name="icon_avatar_online.tga"
      layout="topleft"
-     name="im_header"
-     top_pad="17">
-        <avatar_icon
-         follows="left"
-         height="20"
-         image_name="icon_avatar_online.tga"
-         layout="topleft"
-         left="5"
-         mouse_opaque="true"
-         name="avatar_icon"
-         top="5"
-         width="20" />
-        <text
-         follows="left|right"
-         font="SansSerifBigBold"
-         height="20"
-         layout="topleft"
-         left_pad="10"
-         right="-50"
-         name="user_name"
-         text_color="white"
-         top="5"
-         value="Darth Vader"
-         use_ellipses="true" />
-        <text
-         follows="right"
-         font="SansSerifBig"
-         height="20"
-         layout="topleft"
-         name="time_box"
-         right="0"
-         text_color="white"
-         top="5"
-         value="23:30"
-         width="50" />
-    </panel>
+     left="2"
+     mouse_opaque="true"
+     name="avatar_icon"
+     top="2"
+     width="16" />
+    <text
+     follows="left|right"
+     font="SansSerifBigBold"
+     height="20"
+     layout="topleft"
+     left_pad="6"
+     right="-50"
+     name="user_name"
+     text_color="white"
+     top="3"
+     value="Darth Vader"
+     use_ellipses="true" />
+    <text
+     follows="right"
+     font="SansSerifBig"
+     height="20"
+     layout="topleft"
+     name="time_box"
+     right="0"
+     text_color="white"
+     top="3"
+     value="23:30"
+     width="50" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_chat_separator.xml b/indra/newview/skins/default/xui/en/panel_chat_separator.xml
index bacc750e863..d0a2ddb2891 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_separator.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_separator.xml
@@ -1,16 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
+ background_visible="true"
+ bg_alpha_color="black"
  follows="left|right|top"
- height="9"
+ height="1"
  layout="topleft"
- left="8"
- name="chat_separator_container">
-    <panel
-     background_visible="true"
-     bg_alpha_color="black"
-     follows="left|right|top"
-     height="1"
-     layout="topleft"
-     name="chat_separator_panel"
-     top_pad="3" />
-</panel>
+ name="chat_separator_panel" />
diff --git a/indra/newview/skins/default/xui/en/widgets/chat_history.xml b/indra/newview/skins/default/xui/en/widgets/chat_history.xml
index ea6997ebd54..32916c08167 100644
--- a/indra/newview/skins/default/xui/en/widgets/chat_history.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chat_history.xml
@@ -6,6 +6,10 @@
 	right_text_pad="15"
     left_widget_pad="0"
 	right_widget_pad="10"
+	top_separator_pad="5"
+	bottom_separator_pad="5"
+	top_header_pad="17"
+	bottom_header_pad="10"
 	max_length="2147483647"
 	enabled="false"
 	track_bottom="true"
-- 
GitLab


From 49db6cd157f5da37f962aa36ab791084c202d439 Mon Sep 17 00:00:00 2001
From: Alexei Arabadji <aarabadji@productengine.com>
Date: Thu, 5 Nov 2009 17:43:06 +0200
Subject: [PATCH 165/306] partly impemented EXT-700 '"Offer" notifications
 should be accessible via chiclet'

--HG--
branch : product-engine
---
 indra/newview/CMakeLists.txt                  |   1 +
 indra/newview/llavataractions.cpp             |   4 +-
 indra/newview/llimview.cpp                    |   1 -
 indra/newview/llnotificationhandler.h         |  24 ++-
 indra/newview/llnotificationmanager.cpp       |   3 +
 indra/newview/llnotificationofferhandler.cpp  | 153 ++++++++++++++++++
 indra/newview/llnotificationscripthandler.cpp |   5 +-
 indra/newview/llscreenchannel.h               |   3 +-
 indra/newview/llsyswellwindow.cpp             |   1 +
 .../skins/default/xui/en/notifications.xml    |   8 +-
 10 files changed, 193 insertions(+), 10 deletions(-)
 create mode 100644 indra/newview/llnotificationofferhandler.cpp

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index fde942ad116..b12742be343 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -290,6 +290,7 @@ set(viewer_SOURCE_FILES
     llnotificationalerthandler.cpp
     llnotificationgrouphandler.cpp
     llnotificationmanager.cpp
+    llnotificationofferhandler.cpp
     llnotificationscripthandler.cpp
     llnotificationtiphandler.cpp
     llnotify.cpp
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 2f674013017..b3a8f85033d 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -57,6 +57,7 @@
 #include "llviewerobjectlist.h"
 #include "llviewermessage.h"	// for handle_lure
 #include "llviewerregion.h"
+#include "llimfloater.h"
 
 
 // static
@@ -176,7 +177,8 @@ void LLAvatarActions::startIM(const LLUUID& id)
 
 	std::string name;
 	gCacheName->getFullName(id, name);
-	gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+	LLIMFloater::show(session_id);
 	make_ui_sound("UISndStartIM");
 }
 
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 66a3e3e85c0..7e8701bf212 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1604,7 +1604,6 @@ LLUUID LLIMMgr::addSession(
 		LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids);
 	}
 
-	LLIMFloater::show(session_id);
 
 	//*TODO remove this "floater" thing when Communicate Floater's gone
 	LLFloaterIMPanel* floater = findFloaterBySession(session_id);
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index cd4e640ec48..23998a0e5d1 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -53,7 +53,8 @@ typedef enum e_notification_type
 	NT_GROUPCHAT, 
 	NT_NEARBYCHAT, 
 	NT_ALERT,
-	NT_ALERTMODAL
+	NT_ALERTMODAL,
+	NT_OFFER
 } ENotificationType;
 
 /**
@@ -231,6 +232,27 @@ class LLAlertHandler : public LLSysHandler
 	bool	mIsModal;
 };
 
+/**
+ * Handler for offers notices.
+ * It manages life time of offer notices.
+ */
+class LLOfferHandler : public LLSysHandler
+{
+public:
+	LLOfferHandler(e_notification_type type, const LLSD& id);
+	virtual ~LLOfferHandler();
+
+	// base interface functions
+	virtual bool processNotification(const LLSD& notify);
+
+protected:
+	virtual void onDeleteToast(LLToast* toast);
+	virtual void initChannel();
+
+	// own handlers
+	void onRejectToast(LLUUID& id);
+};
+
 }
 #endif
 
diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp
index 81a6b32917d..1083cf3634b 100644
--- a/indra/newview/llnotificationmanager.cpp
+++ b/indra/newview/llnotificationmanager.cpp
@@ -63,6 +63,7 @@ void LLNotificationManager::init()
 	LLNotificationChannel::buildChannel("Alerts", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alert"));
 	LLNotificationChannel::buildChannel("AlertModal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal"));
 	LLNotificationChannel::buildChannel("IM Notifications", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "notifytoast"));
+	LLNotificationChannel::buildChannel("Offer", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "offer"));
   
 	LLNotifications::instance().getChannel("Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("NotificationTips")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
@@ -70,6 +71,7 @@ void LLNotificationManager::init()
 	LLNotifications::instance().getChannel("Alerts")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("IM Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
+	LLNotifications::instance().getChannel("Offer")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 
 	mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD()));
 	mNotifyHandlers["notifytip"] =  boost::shared_ptr<LLEventHandler>(new LLTipHandler(NT_NOTIFY, LLSD()));
@@ -80,6 +82,7 @@ void LLNotificationManager::init()
 	mNotifyHandlers["notifytoast"] = boost::shared_ptr<LLEventHandler>(new LLIMHandler(NT_IMCHAT, LLSD()));
 	
 	mNotifyHandlers["nearbychat"] = boost::shared_ptr<LLEventHandler>(new LLNearbyChatHandler(NT_NEARBYCHAT, LLSD()));
+	mNotifyHandlers["offer"] = boost::shared_ptr<LLEventHandler>(new LLOfferHandler(NT_OFFER, LLSD()));
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp
new file mode 100644
index 00000000000..8e3a44682c8
--- /dev/null
+++ b/indra/newview/llnotificationofferhandler.cpp
@@ -0,0 +1,153 @@
+/**
+ * @file llnotificationofferhandler.cpp
+ * @brief Notification Handler Class for Simple Notifications and Notification Tips
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ *
+ * Copyright (c) 2000-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+
+#include "llviewerprecompiledheaders.h" // must be first include
+
+#include "llnotificationhandler.h"
+#include "lltoastnotifypanel.h"
+#include "llviewercontrol.h"
+#include "llviewerwindow.h"
+#include "llimview.h"
+#include "llimfloater.h"
+#include "llnotificationmanager.h"
+
+using namespace LLNotificationsUI;
+
+//--------------------------------------------------------------------------
+LLOfferHandler::LLOfferHandler(e_notification_type type, const LLSD& id)
+{
+	mType = type;
+
+	// Getting a Channel for our notifications
+	mChannel = LLChannelManager::getInstance()->createNotificationChannel();
+	mChannel->setControlHovering(true);
+
+	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
+	if(channel)
+		channel->setOnRejectToastCallback(boost::bind(&LLOfferHandler::onRejectToast, this, _1));
+}
+
+//--------------------------------------------------------------------------
+LLOfferHandler::~LLOfferHandler()
+{
+}
+
+//--------------------------------------------------------------------------
+void LLOfferHandler::initChannel()
+{
+	S32 channel_right_bound = gViewerWindow->getWorldViewRect().mRight - gSavedSettings.getS32("NotificationChannelRightMargin");
+	S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth");
+	mChannel->init(channel_right_bound - channel_width, channel_right_bound);
+}
+
+//--------------------------------------------------------------------------
+bool LLOfferHandler::processNotification(const LLSD& notify)
+{
+	if(!mChannel)
+	{
+		return false;
+	}
+
+	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+
+	if(!notification)
+		return false;
+
+	// arrange a channel on a screen
+	if(!mChannel->getVisible())
+	{
+		initChannel();
+	}
+
+	if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
+	{
+		// add message to IM
+		LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, notification->getPayload()["from_id"]);
+		if (!LLIMMgr::instance().hasSession(session_id))
+		{
+			// create session with faked type to avoid creating chicklets
+			session_id = LLIMMgr::instance().addSession(
+					notification->getSubstitutions()["NAME"], IM_NOTHING_SPECIAL,
+					notification->getPayload()["from_id"]);
+		}
+		LLIMMgr::instance().addMessage(session_id, LLUUID(),
+				notification->getSubstitutions()["NAME"],
+				notification->getMessage());
+
+		LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification);
+
+		LLToast::Params p;
+		p.notif_id = notification->getID();
+		p.notification = notification;
+		p.panel = notify_box;
+		p.on_delete_toast = boost::bind(&LLOfferHandler::onDeleteToast, this, _1);
+
+		LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
+		if(channel)
+			channel->addToast(p);
+
+		// send a signal to the counter manager
+		mNewNotificationSignal();
+	}
+	else if (notify["sigtype"].asString() == "delete")
+	{
+		mChannel->killToastByNotificationID(notification->getID());
+	}
+
+	return true;
+}
+
+//--------------------------------------------------------------------------
+
+void LLOfferHandler::onDeleteToast(LLToast* toast)
+{
+	// send a signal to the counter manager
+	mDelNotificationSignal();
+
+	// send a signal to a listener to let him perform some action
+	// in this case listener is a SysWellWindow and it will remove a corresponding item from its list
+	mNotificationIDSignal(toast->getNotificationID());
+}
+
+//--------------------------------------------------------------------------
+void LLOfferHandler::onRejectToast(LLUUID& id)
+{
+	LLNotificationPtr notification = LLNotifications::instance().find(id);
+
+	if (notification
+			&& LLNotificationManager::getInstance()->getHandlerForNotification(
+					notification->getType()) == this)
+	{
+		LLNotifications::instance().cancel(notification);
+	}
+}
diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp
index 070af432d6c..dac7a4ca3a4 100644
--- a/indra/newview/llnotificationscripthandler.cpp
+++ b/indra/newview/llnotificationscripthandler.cpp
@@ -37,6 +37,7 @@
 #include "lltoastnotifypanel.h"
 #include "llviewercontrol.h"
 #include "llviewerwindow.h"
+#include "llnotificationmanager.h"
 
 using namespace LLNotificationsUI;
 
@@ -129,7 +130,9 @@ void LLScriptHandler::onRejectToast(LLUUID& id)
 {
 	LLNotificationPtr notification = LLNotifications::instance().find(id);
 
-	if(notification)
+	if (notification
+			&& LLNotificationManager::getInstance()->getHandlerForNotification(
+					notification->getType()) == this)
 	{
 		LLNotifications::instance().cancel(notification);
 	}
diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h
index 987bc4b596a..fd31690622f 100644
--- a/indra/newview/llscreenchannel.h
+++ b/indra/newview/llscreenchannel.h
@@ -204,8 +204,7 @@ class LLScreenChannel : public LLScreenChannelBase
 	// signal on rejecting of a toast event
 	typedef boost::function<void (LLUUID id)> reject_tost_callback_t;
 	typedef boost::signals2::signal<void (LLUUID id)> reject_tost_signal_t;
-	reject_tost_signal_t mRejectToastSignal;	
-	boost::signals2::connection setOnRejectToastCallback(reject_tost_callback_t cb) { return mRejectToastSignal.connect(cb); }
+	reject_tost_signal_t mRejectToastSignal; boost::signals2::connection setOnRejectToastCallback(reject_tost_callback_t cb) { return mRejectToastSignal.connect(cb); }
 
 private:
 	struct ToastElem
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index c2554184296..723ac0fc33a 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -66,6 +66,7 @@ BOOL LLSysWellWindow::postBuild()
 	// init connections to the list's update events
 	connectListUpdaterToSignal("notify");
 	connectListUpdaterToSignal("groupnotify");
+	connectListUpdaterToSignal("offer");
 
 	// get a corresponding channel
 	initChannel();
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index babed28f10e..f26a4d09d45 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4982,7 +4982,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a
   <notification
    icon="notify.tga"
    name="UserGiveItem"
-   type="notify">
+   type="offer">
 [NAME] has given you a [OBJECTTYPE] named &apos;[OBJECTNAME]&apos;.
     <form name="form">
       <button
@@ -5028,7 +5028,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a
   <notification
    icon="notify.tga"
    name="TeleportOffered"
-   type="notify">
+   type="offer">
 [NAME] has offered to teleport you to their location:
 
 [MESSAGE]
@@ -5065,7 +5065,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a
   <notification
    icon="notify.tga"
    name="OfferFriendship"
-   type="notify">
+   type="offer">
 [NAME] is offering friendship.
 
 [MESSAGE]
@@ -5105,7 +5105,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a
   <notification
    icon="notify.tga"
    name="FriendshipAccepted"
-   type="notify">
+   type="offer">
 [NAME] accepted your friendship offer.
   </notification>
 
-- 
GitLab


From 33a56087faaf65da3d391aa6923f065b198a54d9 Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Thu, 5 Nov 2009 18:09:15 +0200
Subject: [PATCH 166/306] - Fixed EXT-2054 "Hook up parcel permission icons to
 parcel profile" implementation: moved icon file names to XML.

--HG--
branch : product-engine
---
 indra/newview/llpanelplaceprofile.cpp         | 69 ++++++++++++++-----
 .../default/xui/en/panel_place_profile.xml    | 55 ++++++++++++---
 2 files changed, 97 insertions(+), 27 deletions(-)

diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index b2a9f6f2513..81f4f1f569a 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -55,6 +55,23 @@
 
 static LLRegisterPanelClassWrapper<LLPanelPlaceProfile> t_place_profile("panel_place_profile");
 
+// Statics for textures filenames
+static std::string icon_pg;
+static std::string icon_m;
+static std::string icon_r;
+static std::string icon_voice;
+static std::string icon_voice_no;
+static std::string icon_fly;
+static std::string icon_fly_no;
+static std::string icon_push;
+static std::string icon_push_no;
+static std::string icon_build;
+static std::string icon_build_no;
+static std::string icon_scripts;
+static std::string icon_scripts_no;
+static std::string icon_damage;
+static std::string icon_damage_no;
+
 LLPanelPlaceProfile::LLPanelPlaceProfile()
 :	LLPanelPlaceInfo(),
 	mForSalePanel(NULL),
@@ -119,6 +136,22 @@ BOOL LLPanelPlaceProfile::postBuild()
 	mResaleText = getChild<LLTextEditor>("resale");
 	mSaleToText = getChild<LLTextBox>("sale_to");
 
+	icon_pg = getString("icon_PG");
+	icon_m = getString("icon_M");
+	icon_r = getString("icon_R");
+	icon_voice = getString("icon_Voice");
+	icon_voice_no = getString("icon_VoiceNo");
+	icon_fly = getString("icon_Fly");
+	icon_fly_no = getString("icon_FlyNo");
+	icon_push = getString("icon_Push");
+	icon_push_no = getString("icon_PushNo");
+	icon_build = getString("icon_Build");
+	icon_build_no = getString("icon_BuildNo");
+	icon_scripts = getString("icon_Scripts");
+	icon_scripts_no = getString("icon_ScriptsNo");
+	icon_damage = getString("icon_Damage");
+	icon_damage_no = getString("icon_DamageNo");
+
 	return TRUE;
 }
 
@@ -231,22 +264,22 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 	case SIM_ACCESS_MATURE:
 		parcel_data.flags = 0x1;
 
-		mParcelRatingIcon->setValue("parcel_drk_M");
-		mRegionRatingIcon->setValue("parcel_drk_M");
+		mParcelRatingIcon->setValue(icon_m);
+		mRegionRatingIcon->setValue(icon_m);
 		break;
 
 	case SIM_ACCESS_ADULT:
 		parcel_data.flags = 0x2;
 
-		mParcelRatingIcon->setValue("parcel_drk_R");
-		mRegionRatingIcon->setValue("parcel_drk_R");
+		mParcelRatingIcon->setValue(icon_r);
+		mRegionRatingIcon->setValue(icon_r);
 		break;
 
 	default:
 		parcel_data.flags = 0;
 
-		mParcelRatingIcon->setValue("parcel_drk_PG");
-		mRegionRatingIcon->setValue("parcel_drk_PG");
+		mParcelRatingIcon->setValue(icon_pg);
+		mRegionRatingIcon->setValue(icon_pg);
 	}
 
 	std::string rating = LLViewerRegion::accessToString(sim_access);
@@ -270,45 +303,45 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 	// Processing parcel characteristics
 	if (parcel->getParcelFlagAllowVoice())
 	{
-		mVoiceIcon->setValue("parcel_drk_Voice");
+		mVoiceIcon->setValue(icon_voice);
 		mVoiceText->setText(on);
 	}
 	else
 	{
-		mVoiceIcon->setValue("parcel_drk_VoiceNo");
+		mVoiceIcon->setValue(icon_voice_no);
 		mVoiceText->setText(off);
 	}
 
 	if (!region->getBlockFly() && parcel->getAllowFly())
 	{
-		mFlyIcon->setValue("parcel_drk_Fly");
+		mFlyIcon->setValue(icon_fly);
 		mFlyText->setText(on);
 	}
 	else
 	{
-		mFlyIcon->setValue("parcel_drk_FlyNo");
+		mFlyIcon->setValue(icon_fly_no);
 		mFlyText->setText(off);
 	}
 
 	if (region->getRestrictPushObject() || parcel->getRestrictPushObject())
 	{
-		mPushIcon->setValue("parcel_drk_PushNo");
+		mPushIcon->setValue(icon_push_no);
 		mPushText->setText(off);
 	}
 	else
 	{
-		mPushIcon->setValue("parcel_drk_Push");
+		mPushIcon->setValue(icon_push);
 		mPushText->setText(on);
 	}
 
 	if (parcel->getAllowModify())
 	{
-		mBuildIcon->setValue("parcel_drk_Build");
+		mBuildIcon->setValue(icon_build);
 		mBuildText->setText(on);
 	}
 	else
 	{
-		mBuildIcon->setValue("parcel_drk_BuildNo");
+		mBuildIcon->setValue(icon_build_no);
 		mBuildText->setText(off);
 	}
 
@@ -316,23 +349,23 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 	   (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) ||
 	   !parcel->getAllowOtherScripts())
 	{
-		mScriptsIcon->setValue("parcel_drk_ScriptsNo");
+		mScriptsIcon->setValue(icon_scripts_no);
 		mScriptsText->setText(off);
 	}
 	else
 	{
-		mScriptsIcon->setValue("parcel_drk_Scripts");
+		mScriptsIcon->setValue(icon_scripts);
 		mScriptsText->setText(on);
 	}
 
 	if (region->getAllowDamage() || parcel->getAllowDamage())
 	{
-		mDamageIcon->setValue("parcel_drk_Damage");
+		mDamageIcon->setValue(icon_damage);
 		mDamageText->setText(on);
 	}
 	else
 	{
-		mDamageIcon->setValue("parcel_drk_DamageNo");
+		mDamageIcon->setValue(icon_damage_no);
 		mDamageText->setText(off);
 	}
 
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index 4dc65fa7363..34a5f96f2b0 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -92,6 +92,52 @@
      name="acquired_date">
         [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
     </string>
+    <!-- Texture names for parcel permissions icons -->
+    <string
+     name="icon_PG"
+     value="parcel_drk_PG" />
+    <string
+     name="icon_M"
+     value="parcel_drk_M" />
+    <string
+     name="icon_R"
+     value="parcel_drk_R" />
+    <string
+     name="icon_Voice"
+     value="parcel_drk_Voice" />
+    <string
+     name="icon_VoiceNo"
+     value="parcel_drk_VoiceNo" />
+    <string
+     name="icon_Fly"
+     value="parcel_drk_Fly" />
+    <string
+     name="icon_FlyNo"
+     value="parcel_drk_FlyNo" />
+    <string
+     name="icon_Push"
+     value="parcel_drk_Push" />
+    <string
+     name="icon_PushNo"
+     value="parcel_drk_PushNo" />
+    <string
+     name="icon_Build"
+     value="parcel_drk_Build" />
+    <string
+     name="icon_BuildNo"
+     value="parcel_drk_BuildNo" />
+    <string
+     name="icon_Scripts"
+     value="parcel_drk_Scripts" />
+    <string
+     name="icon_ScriptsNo"
+     value="parcel_drk_ScriptsNo" />
+    <string
+     name="icon_Damage"
+     value="parcel_drk_Damage" />
+    <string
+     name="icon_DamageNo"
+     value="parcel_drk_DamageNo" />
     <button
      follows="top|right"
      height="23"
@@ -212,15 +258,6 @@
              use_ellipses="true"
              value="SampleRegion"
              width="290" />
-       <!-- <icon
-             follows="top|right"
-             height="16"
-             image_name="Icon_For_Sale"
-             layout="topleft"
-             left="3"
-             mouse_opaque="true"
-             name="icon_for_sale"
-             width="16" />-->
             <text
              follows="left|top|right"
              height="14"
-- 
GitLab


From a82ab8690f03f8571e536aa2a3a29e5f653e230e Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Thu, 5 Nov 2009 18:20:00 +0200
Subject: [PATCH 167/306] No ticket. Merged recent changes in
 panel_place_info.xml to new XML layouts and removed the obsolete xml.

--HG--
branch : product-engine
---
 indra/newview/skins/default/xui/en/panel_landmark_info.xml | 1 -
 indra/newview/skins/default/xui/en/panel_place_profile.xml | 1 -
 2 files changed, 2 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
index 03ba7f7c81f..0c24adfad59 100644
--- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
@@ -50,7 +50,6 @@
      layout="topleft"
      left="10"
      name="back_btn"
-     picture_style="true"
      tab_stop="false"
      top="0"
      width="23" />
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index 34a5f96f2b0..65f150b33c6 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -145,7 +145,6 @@
      layout="topleft"
      left="10"
      name="back_btn"
-     picture_style="true"
      tab_stop="false"
      top="0"
      width="23" />
-- 
GitLab


From 8c042fde4f1103a44cbd50e15c7221d46db82288 Mon Sep 17 00:00:00 2001
From: Andrew Dyukov <adyukov@productengine.com>
Date: Thu, 5 Nov 2009 18:27:40 +0200
Subject: [PATCH 168/306] Fixed reopened minor bug EXT-1854 (Area of working
 for nav bar context menu is changed)

--HG--
branch : product-engine
---
 indra/newview/skins/default/xui/en/panel_navigation_bar.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index ae11f028ca7..34f9e1daf50 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -22,7 +22,7 @@
 	<icon
 	 follows="all"
 	 image_name="NavBar_BG_NoFav"
-	 mouse_opaque="true"
+	 mouse_opaque="false"
 	 name="bg_icon_no_fav"
 	 scale_image="true"
 	 visible="false"
-- 
GitLab


From 1af422bb4182a9b82da45f19e7e8cbf755619959 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 5 Nov 2009 17:14:28 +0000
Subject: [PATCH 169/306] DEV-42155 EXT-2077: Speak button should use
 Widget_UpArrow instead of a down arrow

I added two new graphics which are simply the former combobox graphics with the arrow part flipped.
---
 indra/newview/skins/default/textures/textures.xml |   2 ++
 .../textures/widgets/ComboButton_UpOff.png        | Bin 0 -> 466 bytes
 .../textures/widgets/ComboButton_UpSelected.png   | Bin 0 -> 536 bytes
 .../skins/default/xui/en/widgets/talk_button.xml  |   4 ++--
 4 files changed, 4 insertions(+), 2 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png
 create mode 100644 indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png

diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 2b9ebd05730..6ded2e77f5c 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -67,7 +67,9 @@
   <texture name="ComboButton_Over" file_name="widgets/ComboButton_Over.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="ComboButton_Press" file_name="widgets/ComboButton_Press.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="ComboButton_Selected" file_name="widgets/ComboButton_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
+  <texture name="ComboButton_UpSelected" file_name="widgets/ComboButton_UpSelected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="ComboButton_Off" file_name="widgets/ComboButton_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
+  <texture name="ComboButton_UpOff" file_name="widgets/ComboButton_UpOff.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="Container" file_name="containers/Container.png" preload="false" />
 
   <texture name="DisclosureArrow_Closed_Off" file_name="widgets/DisclosureArrow_Closed_Off.png" preload="true" />
diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png b/indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png
new file mode 100644
index 0000000000000000000000000000000000000000..2330cb420bbefe64451c1a403c4b9b878aa7ee0e
GIT binary patch
literal 466
zcmV;@0WJQCP)<h;3K|Lk000e1NJLTq000&M000*V1^@s659q(100001b5ch_0Itp)
z=>Px$j7da6R5;7EmA`HpK@i5jnOh@4v6T^JigcF!4oGPa*$)9vKueL1J{@9t2qULX
zlUE=Tk<!E|L&F_X(Cy5mF!-PDXuKY2rQMb0x8Ka{>=J;_NMjMeF92W7Z0n}e>6NNl
z3UW~tm&@hyf{4DjqA04(X7lf@P$EL7({cTN|HFE{{^Uf&L?o5ss?};`X7<sU8B`Ui
z?7%y7s;VNAjI62z04~M|5lN;v#s~m#s%oij#X+$>f>Ram1vtiNF~(Z(cDt>P^AN)I
za5%g@uD$nXbv{*9836FZA@#=0#LN^zxB);Rgq!1DlaHAx0Jz<5M`c-3LuA=}KF`gb
z0-DWc*Q3$st}M%12N59vU?LJ`t{scTB4=j29*6x#KLBuM)_5!OJpa*Dq+YLQCyRHg
z^Sa&c&lA;e?7T<C_B@GiZ|Nt+3Ary6Cx3+AEfvgMF%nvqWwhV##e4tTsVds-c9sGx
zBDPws{tgC%@098@WoGf--%lo!Z{zX!51H9{s`LV=0F(gqKZesj#@172od5s;07*qo
IM6N<$f_MbjEC2ui

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png b/indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png
new file mode 100644
index 0000000000000000000000000000000000000000..b7b5c2e1d414f053f82f6bf80536c166e0897bfc
GIT binary patch
literal 536
zcmV+z0_XjSP)<h;3K|Lk000e1NJLTq000&M000*V1^@s659q(100001b5ch_0Itp)
z=>Px$(n&-?R5;76Rk4oRKoEU1yO9hrE1`q%0r`LwCsCzK&0p{VNS3TvqR3CBN|7dC
zaZ;LuDmno<I3pX+Op3#ZaB#)hPkP0U#-ryqv$F)?3)(>i;3t5uX7)gX!Qj5z?Uv3t
zX;73@l>t;D@@=tLeD?i*|4$spf1@ZW8p*9HR}@8Wv)O!f&VBMBgom4(oBI&L?zKhD
z3?jno_4-j&-<jEaA4O3S$MG(N@YqDLs<NtLx7+np^^G?(6A={=ZP+{|qRKh92LP|C
z5D|z-<FODCs6OfQc7Uo{)53MFTCs_UiHNnJ_$ZJMHds|v&$wJJ%bL^a^uy`-QvN|8
z0DzxdxC~|{W~MYv#{eiz({UZU_Kle-0B~8Bl;=5Zx7%k_RhJ~m*vzPAk|bkQb(iw<
zJg2fO2>_Ugl$n*8<(yfT-FokF&MeDrFXc0{5|JL8SM$6Xv)OEQtx==V$Sz!xV;z48
z9Ov&8!{PAmg`4(b%$wPN^Vh;0<EXe^ByGZ**;OlEv50W0*jl#2n0e1_{koYE052jM
zLipv2qKG=3PESN!lSQwpTolFI)oOJ&nM{6ATaPI-O9<ijd_Mo4B*}uzY|xe)0QLa3
a0Q4UVuHu)AGM!Wa0000<MNUMnLSTZ{ko&#>

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
index 725492052ca..00793b4ed63 100644
--- a/indra/newview/skins/default/xui/en/widgets/talk_button.xml
+++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
@@ -24,8 +24,8 @@
     tab_stop="false"
     is_toggle="true"
     picture_style="true"
-    image_selected="ComboButton_Selected"
-    image_unselected="ComboButton_Off"
+    image_selected="ComboButton_UpSelected"
+    image_unselected="ComboButton_UpOff"
     />
   <monitor
     name="monitor"
-- 
GitLab


From b6aef7ea394430ab29698a2a4f1a4d9d93faeff0 Mon Sep 17 00:00:00 2001
From: Andrew Dyukov <adyukov@productengine.com>
Date: Thu, 5 Nov 2009 19:20:56 +0200
Subject: [PATCH 170/306] Fixed EXT-1769 (Edit Pick: '+' icon blinks on mouse
 over), but new icon is needed.

--HG--
branch : product-engine
---
 indra/newview/llpanelpick.cpp                          | 2 ++
 indra/newview/skins/default/xui/en/panel_edit_pick.xml | 4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
index 103f0416865..f5c4f89702b 100644
--- a/indra/newview/llpanelpick.cpp
+++ b/indra/newview/llpanelpick.cpp
@@ -413,6 +413,8 @@ BOOL LLPanelPickEdit::postBuild()
 	childSetAction(XML_BTN_SAVE, boost::bind(&LLPanelPickEdit::onClickSave, this));
 	childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelPickEdit::onClickSetLocation, this));
 
+	initTexturePickerMouseEvents();
+
 	return TRUE;
 }
 
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
index 282b3f3e554..f4a212ba0a6 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -64,9 +64,9 @@
      top="20"
      left="10"
      name="pick_snapshot" />
-          <button
+          <icon
            height="18"
-           image_overlay="AddItem_Off"
+           image_name="AddItem_Off"
            layout="topleft"
            right="-5"
            name="edit_icon"
-- 
GitLab


From 3cd5d0d9d5bbe104a6f4cafce57c1eb95fc9495d Mon Sep 17 00:00:00 2001
From: Andrew Dyukov <adyukov@productengine.com>
Date: Thu, 5 Nov 2009 19:30:27 +0200
Subject: [PATCH 171/306] No ticket. Fixed '+' not hiding in edit profile, but
 new icon is needed.

--HG--
branch : product-engine
---
 indra/newview/skins/default/xui/en/panel_edit_profile.xml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index fedc49ae87b..2378ae518bf 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -116,9 +116,9 @@
              top_pad="0"
              width="102" />
           </panel>
-           <button
+           <icon
            height="18"
-           image_overlay="AddItem_Off"
+           image_name="AddItem_Off"
            layout="topleft"
            name="2nd_life_edit_icon"
            label=""
@@ -171,9 +171,9 @@
              top_pad="0"
              width="102" />
           </panel>
-           <button
+           <icon
            height="18"
-           image_overlay="AddItem_Off"
+           image_name="AddItem_Off"
            layout="topleft"
            name="real_world_edit_icon"
            label=""
-- 
GitLab


From 888bc27cf655d5d64325241b2516795e58e16064 Mon Sep 17 00:00:00 2001
From: Andrew Dyukov <adyukov@productengine.com>
Date: Thu, 5 Nov 2009 19:44:18 +0200
Subject: [PATCH 172/306] Fixed normal bug EXT-1526. We decided to show full
 name via tooltip, because if name is long without truncating it we'd have to
 manually move widgets that are below it(which is hard to do).

--HG--
branch : product-engine
---
 indra/newview/llpanelgroup.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index 10f015774af..61f23961687 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -291,6 +291,7 @@ void LLPanelGroup::update(LLGroupChange gc)
 	if(gdatap)
 	{
 		childSetValue("group_name", gdatap->mName);
+		childSetToolTip("group_name",gdatap->mName);
 
 		LLButton* btn_join = getChild<LLButton>("btn_join");
 		LLUICtrl* join_text = getChild<LLUICtrl>("join_cost_text");
@@ -337,7 +338,10 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
 
 	LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mID);
 	if(gdatap)
+	{
 		childSetValue("group_name", gdatap->mName);
+		childSetToolTip("group_name",gdatap->mName);
+	}
 
 	LLButton* button_apply = findChild<LLButton>("btn_apply");
 	LLButton* button_refresh = findChild<LLButton>("btn_refresh");
-- 
GitLab


From fd7d01c7094c1f8adad02b16c5865944a34737c9 Mon Sep 17 00:00:00 2001
From: Lis Pardi <lis@lindenlab.com>
Date: Thu, 5 Nov 2009 12:48:28 -0500
Subject: [PATCH 173/306] ext-2085 make leave group icon not a trash can

H: Enter commit message.  Lines beginning with 'HG:' are removed.
---
 .../xui/en/menu_people_groups_view_sort.xml   | 11 ++++++++++
 .../skins/default/xui/en/panel_people.xml     | 22 +++++++++----------
 2 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml
index 2bec7454109..6dd44255bf3 100644
--- a/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml
@@ -13,4 +13,15 @@
        function="CheckControl"
        parameter="GroupListShowIcons" />
   </menu_item_check>
+  <menu_item_check
+   label="Leave Selected Group"
+   layout="topleft"
+   name="Leave Selected Group">
+      <menu_item_check.on_click
+       function="People.Groups.ViewSort.Action"
+       parameter="show_icons" />
+      <menu_item_check.on_check
+       function="CheckControl"
+       parameter="GroupListShowIcons" />
+  </menu_item_check>
 </menu>
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index c8194a286b8..ed21c5cc6c6 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -95,6 +95,7 @@ background_visible="true"
              layout="topleft"
              left="10"
              name="nearby_view_sort_btn"
+             picture_style="true"
              top="5"
              width="18" />
              <button
@@ -106,6 +107,7 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="add_friend_btn"
+                 picture_style="true"
                  top_delta="0"
                  tool_tip="Add selected resident to your friends List"
                  width="18" />
@@ -181,6 +183,7 @@ background_visible="true"
                layout="topleft"
                left="10"
                name="friends_viewsort_btn"
+               picture_style="true"
                top="5"
                width="18" />
                 <button
@@ -192,6 +195,7 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="add_btn"
+                 picture_style="true"
                  tool_tip="Offer friendship to a resident"
                  top_delta="0"
                  width="18" />
@@ -205,6 +209,7 @@ background_visible="true"
                  left_pad="10"
                  right="-10"
                  name="del_btn"
+                 picture_style="true"
                  tool_tip="Remove selected person from your Friends list"
                  top_delta="0"
                  width="18" />
@@ -247,6 +252,7 @@ background_visible="true"
                layout="topleft"
                left="10"
                name="groups_viewsort_btn"
+               picture_style="true"
                top="7"
                width="18" />
                 <button
@@ -258,6 +264,7 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="plus_btn"
+                 picture_style="true"
                  tool_tip="Join group/Create new group"
                  top_delta="0"
                  width="18" />
@@ -270,21 +277,10 @@ background_visible="true"
                  layout="topleft"
                  left_pad="24"
                  name="activate_btn"
+                 picture_style="true"
                  tool_tip="Activate selected group"
                  top_delta="5"
                  width="10" />
-                <button
-                 follows="bottom|left"
-                 height="18"
-                 image_selected="TrashItem_Press"
-                 image_unselected="TrashItem_Off"
-                 layout="topleft"
-                left_pad="10"
-                 right="-10"
-                 name="minus_btn"
-                 tool_tip="Leave selected group"
-                 top_delta="-5"
-                 width="18" />
             </panel>
         </panel>
         <panel
@@ -327,6 +323,7 @@ background_visible="true"
                layout="topleft"
                left="10"
                name="recent_viewsort_btn"
+               picture_style="true"
                top="7"
                width="18" />
               <button
@@ -338,6 +335,7 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="add_friend_btn"
+                 picture_style="true"
                  top_delta="0"
                  tool_tip="Add selected resident to your friends List"
                  width="18" />
-- 
GitLab


From 78923934c783accf33c9a6e68fadd699227ed3d5 Mon Sep 17 00:00:00 2001
From: Lis Pardi <lis@lindenlab.com>
Date: Thu, 5 Nov 2009 12:51:49 -0500
Subject: [PATCH 174/306] ext-146 appearance floater has layout issues ext-1942
 there is corrupted UI in the Skin, Hair, Shirt, Pants tabs in the Edit
 Appearance dlg

---
 .../default/xui/en/floater_customize.xml      | 31 +++++++------------
 1 file changed, 11 insertions(+), 20 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml
index c021dd79de1..f54b6eecfb7 100644
--- a/indra/newview/skins/default/xui/en/floater_customize.xml
+++ b/indra/newview/skins/default/xui/en/floater_customize.xml
@@ -193,7 +193,7 @@
              font="SansSerif"
              height="16"
              layout="topleft"
-             left="26"
+             left="8"
              name="title"
              top="8"
              width="355">
@@ -299,7 +299,7 @@ scratch and wear it.
              left="8"
              name="Create New"
              top="104"
-             width="120" />
+             width="140" />
             <button
              follows="right|bottom"
              height="20"
@@ -342,9 +342,10 @@ scratch and wear it.
              top="4"
              width="18" />
             <icon
+             follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="-325"
+             left="8"
              mouse_opaque="true"
              top_delta="3"
              width="16" />
@@ -399,7 +400,7 @@ scratch and wear it.
              font="SansSerif"
              height="16"
              layout="topleft"
-             left="26"
+             left="8"
              name="title"
              top="8"
              width="355">
@@ -599,7 +600,7 @@ scratch and wear it.
             <icon
              height="16"
              layout="topleft"
-             left_delta="-325"
+             left="8"
              mouse_opaque="true"
              top_delta="3"
              width="16" />
@@ -654,7 +655,7 @@ scratch and wear it.
              font="SansSerif"
              height="16"
              layout="topleft"
-             left="26"
+             left="8"
              name="title"
              top="8"
              width="355">
@@ -1015,7 +1016,7 @@ scratch and wear it.
             <icon
              height="16"
              layout="topleft"
-             left_delta="-325"
+             left="8"
              mouse_opaque="true"
              top_delta="3"
              width="16" />
@@ -1100,7 +1101,7 @@ scratch and wear it.
              font="SansSerif"
              height="16"
              layout="topleft"
-             left="26"
+             left="8"
              name="title"
              top="8"
              width="355">
@@ -1221,7 +1222,7 @@ scratch and wear it.
             <icon
              height="16"
              layout="topleft"
-             left_delta="-325"
+             left="8"
              mouse_opaque="true"
              top_delta="3"
              width="16" />
@@ -1306,7 +1307,7 @@ scratch and wear it.
              font="SansSerif"
              height="16"
              layout="topleft"
-             left="26"
+             left="8"
              name="title"
              top="8"
              width="355">
@@ -3378,16 +3379,6 @@ scratch and wear it.
          layout="topleft"
          name="panel_list" />
     </scroll_container>
-	<button
-     bottom="536"
-     follows="right|bottom"
-     height="20"
-     label="Make Outfit"
-     label_selected="Make Outfit"
-     layout="topleft"
-     name="make_outfit_btn"
-     right="-216"
-     width="100" />
     <button
      bottom="536"
      follows="right|bottom"
-- 
GitLab


From e638e77047510eb9ddf49f7e981a5742561721d7 Mon Sep 17 00:00:00 2001
From: Andrew Polunin <apolunin@productengine.com>
Date: Thu, 5 Nov 2009 20:17:16 +0200
Subject: [PATCH 175/306] fixed normal bug EXT-2029 Double clicking group does
 not start chat

--HG--
branch : product-engine
---
 indra/newview/llpanelpeople.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 2f8fae0f5de..c8bb3d5353c 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -454,7 +454,7 @@ BOOL LLPanelPeople::postBuild()
 	mNearbyList->setCommitCallback(boost::bind(&LLPanelPeople::onAvatarListCommitted, this, mNearbyList));
 	mRecentList->setCommitCallback(boost::bind(&LLPanelPeople::onAvatarListCommitted, this, mRecentList));
 
-	mGroupList->setDoubleClickCallback(boost::bind(&LLPanelPeople::onGroupInfoButtonClicked, this));
+	mGroupList->setDoubleClickCallback(boost::bind(&LLPanelPeople::onChatButtonClicked, this));
 	mGroupList->setCommitCallback(boost::bind(&LLPanelPeople::updateButtons, this));
 
 	LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>("tab_all");
-- 
GitLab


From 341b6e4058f50915862b932ef5655c55f23f7ffc Mon Sep 17 00:00:00 2001
From: Dmitry Oleshko <doleshko@productengine.com>
Date: Thu, 5 Nov 2009 20:29:01 +0200
Subject: [PATCH 176/306] partial fix for a normal Sub-task (EXT-988) Change
 indication of unread messges in chiclets

--HG--
branch : product-engine
---
 indra/newview/llchiclet.cpp | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 0a187ca4225..6fd7e6b07db 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -212,7 +212,7 @@ LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p)
 	LLRect chiclet_rect = p.rect;
 	LLRect overlay_icon_rect = LLRect(chiclet_rect.getWidth()/2, chiclet_rect.mTop, chiclet_rect.mRight, chiclet_rect.getHeight()/2); 
 	// shift an icon a little bit to the right and up corner of a chiclet
-	overlay_icon_rect.translate(overlay_icon_rect.getWidth()/4, overlay_icon_rect.getHeight()/4);
+	overlay_icon_rect.translate(overlay_icon_rect.getWidth()/5, overlay_icon_rect.getHeight()/5);
 	mNewMessagesIcon->setRect(overlay_icon_rect);
 	addChild(mNewMessagesIcon);
 
@@ -247,8 +247,6 @@ BOOL LLIMChiclet::handleMouseDown(S32 x, S32 y, MASK mask)
 void LLIMChiclet::draw()
 {
 	LLUICtrl::draw();
-
-	gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, LLColor4(0.0f,0.0f,0.0f,1.f), FALSE);
 }
 
 // static
-- 
GitLab


From 65497c0b6f639f4940d2a0185eb5befc4127a38e Mon Sep 17 00:00:00 2001
From: "Justin C. Rounds (Chuck)" <chuck@lindenlab.com>
Date: Thu, 5 Nov 2009 13:36:38 -0500
Subject: [PATCH 177/306] Added Favorite_Link_Over (re-do: failed commit? merge
 bork?). http://jira.secondlife.com/browse/EXT-2218

---
 indra/newview/skins/default/textures/textures.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 2b9ebd05730..ea81c478664 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -89,6 +89,7 @@
   <texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" />
   <texture name="Favorite_Star_Press" file_name="navbar/Favorite_Star_Press.png" preload="false" />
   <texture name="Favorite_Star_Over" file_name="navbar/Favorite_Star_Over.png" preload="false" />
+  <texture name="Favorite_Link_Over" file_name="navbar/Favorite_Link_Over.png" preload="false" />
 
   <texture name="FileMenu_BarSelect" file_name="navbar/FileMenu_BarSelect.png" preload="false" scale.left="2" scale.top="0" scale.right="2" scale.bottom="0" />
   <texture name="FileMenu_BG" file_name="navbar/FileMenu_BG.png" preload="false" />
-- 
GitLab


From daf3adc4ae349cf37b4b1d7caee1268a3febb430 Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Thu, 5 Nov 2009 20:40:34 +0200
Subject: [PATCH 178/306] implemented major task EXT-2153   make changes to
 Communicate menu

--HG--
branch : product-engine
---
 indra/newview/llviewermenu.cpp                | 22 +++----------
 .../default/xui/en/menu_inspect_self_gear.xml |  7 ++--
 .../skins/default/xui/en/menu_viewer.xml      | 32 ++++++++-----------
 3 files changed, 21 insertions(+), 40 deletions(-)

diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 2c2b2047cae..300ebf4e243 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -3442,26 +3442,13 @@ void handle_show_side_tray()
 	root->addChild(side_tray);
 }
 
-class LLSelfFriends : public view_listener_t
+class LLShowPanelPeopleTab : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
 	{
-		// Open "Friends" tab of the "People" panel in side tray.
+		// Open tab of the "People" panel in side tray.
 		LLSD param;
-		param["people_panel_tab_name"] = "friends_panel";
-
-		LLSideTray::getInstance()->showPanel("panel_people", param);
-		return true;
-	}
-};
-
-class LLSelfGroups : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		// Open "Groups" tab of the "People" panel in side tray.
-		LLSD param;
-		param["people_panel_tab_name"] = "groups_panel";
+		param["people_panel_tab_name"] = userdata.asString();
 		LLSideTray::getInstance()->showPanel("panel_people", param);
 		return true;
 	}
@@ -8022,8 +8009,7 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLSelfEnableRemoveAllAttachments(), "Self.EnableRemoveAllAttachments");
 
 	// we don't use boost::bind directly to delay side tray construction
-	view_listener_t::addMenu(new LLSelfFriends(), "Self.Friends");
-	view_listener_t::addMenu(new LLSelfGroups(), "Self.Groups");
+	view_listener_t::addMenu( new LLShowPanelPeopleTab(), "SideTray.PanelPeopleTab");
 
 	 // Avatar pie menu
 	view_listener_t::addMenu(new LLObjectMute(), "Avatar.Mute");
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
index ce5ee83f556..3d65878cf86 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
@@ -36,13 +36,14 @@
    label="My Friends"
    name="my_friends">
     <menu_item_call.on_click
-     function="Self.Friends"
-     parameter="" />
+    function="SideTray.PanelPeopleTab"
+    parameter="friends_panel" />
   </menu_item_call>
   <menu_item_call
    label="My Groups"
    name="my_groups">
     <menu_item_call.on_click
-     function="Self.Groups" />
+     function="SideTray.PanelPeopleTab"
+     parameter="groups_panel" />
   </menu_item_call>
 </menu>
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 3f63f493b14..ebdfb017879 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -114,25 +114,22 @@
      layout="topleft"
      name="Communicate"
      tear_off="true">
-        <menu_item_check
+        <menu_item_call
          label="My Friends"
          layout="topleft"
          name="My Friends"
          shortcut="control|shift|F">
-            <menu_item_check.on_check
-             function="Floater.Visible"
-             parameter="contacts.friends" />
-            <menu_item_check.on_click
-             function="Floater.Toggle"
-             parameter="contacts.friends" />
-        </menu_item_check>
+            <menu_item_call.on_click
+             function="SideTray.PanelPeopleTab"
+             parameter="friends_panel" />
+            </menu_item_call>
         <menu_item_call
          label="My Groups"
          layout="topleft"
          name="My Groups">
             <menu_item_call.on_click
-             function="Floater.Show"
-             parameter="contacts.groups" />
+             function="SideTray.PanelPeopleTab"
+             parameter="groups_panel" />
         </menu_item_call>
         <menu_item_separator
          layout="topleft" />
@@ -155,18 +152,15 @@
              function="Floater.Toggle"
              parameter="nearby_chat" />
         </menu_item_check>
-        <menu_item_check
-         label="Nearby Speakers"
+        <menu_item_call
+         label="Nearby People"
          layout="topleft"
          name="Active Speakers"
          shortcut="control|shift|A">
-            <menu_item_check.on_check
-             function="Floater.Visible"
-             parameter="active_speakers" />
-            <menu_item_check.on_click
-             function="Floater.Toggle"
-             parameter="active_speakers" />
-        </menu_item_check>
+            <menu_item_call.on_click
+             function="SideTray.PanelPeopleTab"
+             parameter="nearby_panel" />
+            </menu_item_call>
         <menu_item_check
          label="Nearby Media"
          layout="topleft"
-- 
GitLab


From bbbacf1c4d06e7a0b4a5f532565410496a72963a Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Thu, 5 Nov 2009 11:02:02 -0800
Subject: [PATCH 179/306] eliminated various warnings when parsing side tray

---
 indra/newview/llnavigationbar.cpp             |  2 -
 indra/newview/llpanelplaceprofile.cpp         |  2 +-
 .../default/xui/en/floater_sell_land.xml      |  1 -
 .../skins/default/xui/en/panel_avatar_tag.xml |  1 -
 .../skins/default/xui/en/panel_bars.xml       | 67 +++----------------
 .../skins/default/xui/en/panel_edit_eyes.xml  |  2 -
 .../default/xui/en/panel_edit_gloves.xml      |  2 -
 .../skins/default/xui/en/panel_edit_hair.xml  |  8 ---
 .../default/xui/en/panel_edit_jacket.xml      |  2 -
 .../skins/default/xui/en/panel_edit_pants.xml |  2 -
 .../skins/default/xui/en/panel_edit_shape.xml | 18 -----
 .../skins/default/xui/en/panel_edit_shirt.xml |  2 -
 .../skins/default/xui/en/panel_edit_shoes.xml |  2 -
 .../skins/default/xui/en/panel_edit_skin.xml  |  8 ---
 .../skins/default/xui/en/panel_edit_skirt.xml |  2 -
 .../skins/default/xui/en/panel_edit_socks.xml |  2 -
 .../default/xui/en/panel_edit_underpants.xml  |  2 -
 .../default/xui/en/panel_edit_undershirt.xml  |  2 -
 .../xui/en/panel_group_info_sidetray.xml      |  5 --
 .../default/xui/en/panel_group_land_money.xml |  6 +-
 .../default/xui/en/panel_group_notices.xml    |  2 -
 .../default/xui/en/panel_landmark_info.xml    |  1 -
 .../default/xui/en/panel_navigation_bar.xml   |  1 +
 .../skins/default/xui/en/panel_people.xml     |  3 -
 .../default/xui/en/panel_place_profile.xml    |  1 -
 .../skins/default/xui/en/panel_profile.xml    |  5 +-
 .../skins/default/xui/en/panel_side_tray.xml  |  4 +-
 .../default/xui/en/panel_teleport_history.xml | 18 -----
 .../default/xui/en/widgets/talk_button.xml    |  2 -
 29 files changed, 15 insertions(+), 160 deletions(-)

diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index b35fd6134b7..2f7d7874eb0 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -174,8 +174,6 @@ LLNavigationBar::LLNavigationBar()
 	mSearchComboBox(NULL),
 	mPurgeTPHistoryItems(false)
 {
-	setIsChrome(TRUE);
-	
 	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_navigation_bar.xml");
 
 	// set a listener function for LoginComplete event
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 9ba72fe6cff..58533f81148 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -529,7 +529,7 @@ void LLPanelPlaceProfile::updateYouAreHereBanner(void* userdata)
 	if(!self->getVisible())
 		return;
 
-	if(!gDisconnected)
+	if(!gDisconnected && gAgent.getRegion())
 	{
 		static F32 radius = gSavedSettings.getF32("YouAreHereDistance");
 
diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml
index 45d59e280bd..c427b827c0b 100644
--- a/indra/newview/skins/default/xui/en/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml
@@ -13,7 +13,6 @@
      color="DkGray2"
      follows="left|top|right|bottom"
      height="435"
-     min_height="300"
      layout="topleft"
      name="profile_scroll"
      reserve_scroll_corner="true"
diff --git a/indra/newview/skins/default/xui/en/panel_avatar_tag.xml b/indra/newview/skins/default/xui/en/panel_avatar_tag.xml
index e4f6e7bd44e..16c8660781e 100644
--- a/indra/newview/skins/default/xui/en/panel_avatar_tag.xml
+++ b/indra/newview/skins/default/xui/en/panel_avatar_tag.xml
@@ -55,7 +55,6 @@
      top="65" 
      left="10" 
      right="-10" 
-     can_resize="true"
      height="100" 
      follows="left|top|bottom|right"
      font="SansSerifSmall" 
diff --git a/indra/newview/skins/default/xui/en/panel_bars.xml b/indra/newview/skins/default/xui/en/panel_bars.xml
index 9c06329eaff..527ec4e007f 100644
--- a/indra/newview/skins/default/xui/en/panel_bars.xml
+++ b/indra/newview/skins/default/xui/en/panel_bars.xml
@@ -5,65 +5,14 @@
  layout="topleft"
  left="0"
  mouse_opaque="false"
- name="bottom_panel"
+ name="screen"
  width="1024">
-    <panel
-     follows="left|right|top|bottom"
-     height="728"
-     layout="topleft"
-     left="0"
-     mouse_opaque="false"
-     name="status"
-     top="0"
-     width="1024" />
-    <layout_stack
-     border_size="0"
-     follows="left|right|bottom|top"
-     height="768"
-     layout="topleft"
-     left_delta="0"
-     mouse_opaque="false"
-     name="bar_stack"
-     top_delta="0"
-     use_bounding_rect="true"
-     width="1024">
-        <layout_panel
-         follows="left|right|top|bottom"
-         height="768"
-         layout="topleft"
-         left="0"
-         mouse_opaque="false"
-         name="spacer"
-         top="0"
-         user_resize="false"
-         width="1024" />
-        <layout_panel
-         auto_resize="false"
-         height="200"
-         layout="topleft"
-         min_height="200"
-         mouse_opaque="false"
-         name="overlay"
-         use_bounding_rect="true"
-         user_resize="false"
-         width="1024" />
-        <layout_panel
-         auto_resize="false"
-         filename="panel_toolbar.xml"
-         layout="topleft"
-         min_height="28"
-         name="toolbar"
-         use_bounding_rect="true"
-         user_resize="false"
-         width="1024" />
+  <layout_stack name="menu_stack" orientation="vertical" height="768" border_size="0">
+    <panel auto_resize="false" width="1024" name="status_bar" filename="panel_status_bar.xml"/>
+    <panel auto_resize="false" width="1024" height="65" name="navigation bar" filename="panel_navigation_bar.xml"/>
+    <layout_stack name="hud_stack" orientation="horizontal" auto_resize="true" width="1024" height="500" follows="all">
+      <panel auto_resize="true" name="floater_view" height="500"/>
+      <panel auto_resize="false" filename="panel_side_tray.xml" height="500" width="333"/>
     </layout_stack>
-    <panel
-     follows="left|right|top|bottom"
-     height="728"
-     layout="topleft"
-     left_delta="0"
-     mouse_opaque="false"
-     name="hud"
-     top_delta="-10"
-     width="1024" />
+  </layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_eyes.xml b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml
index 9789da57960..c514054c41c 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_eyes.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml
@@ -37,13 +37,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="eyes_main_tab"
 			title="Eyes">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="eyes_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
index 517cdd75fb9..f9ef038314d 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="gloves_main_tab"
 			title="Gloves">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="gloves_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_hair.xml b/indra/newview/skins/default/xui/en/panel_edit_hair.xml
index d2ee2ebf2af..e7d1c053016 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_hair.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_hair.xml
@@ -37,13 +37,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="hair_color_tab"
 			title="Color">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="hair_color_param_list"
@@ -51,13 +49,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="hair_style_tab"
 			title="Style">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="hair_style_param_list"
@@ -65,13 +61,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="hair_eyebrows_tab"
 			title="Eyebrows">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="hair_eyebrows_param_list"
@@ -79,13 +73,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="hair_facial_tab"
 			title="Facial">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="hair_facial_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
index 0b54944e290..f4c03399fe8 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
@@ -61,13 +61,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="jacket_main_tab"
 			title="Jacket">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="jacket_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pants.xml b/indra/newview/skins/default/xui/en/panel_edit_pants.xml
index 939314f9f9a..ab105afd88e 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pants.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pants.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="pants_main_tab"
 			title="Pants">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="pants_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shape.xml b/indra/newview/skins/default/xui/en/panel_edit_shape.xml
index a9dfcb82d69..45c4b923382 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_shape.xml
@@ -59,13 +59,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_body_tab"
 			title="Body">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_body_param_list"
@@ -73,13 +71,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_head_tab"
 			title="Head">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_head_param_list"
@@ -87,13 +83,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_eyes_tab"
 			title="Eyes">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_eyes_param_list"
@@ -101,13 +95,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_ears_tab"
 			title="Ears">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_ears_param_list"
@@ -115,13 +107,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_nose_tab"
 			title="Nose">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_nose_param_list"
@@ -129,13 +119,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_mouth_tab"
 			title="Mouth">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_mouth_param_list"
@@ -143,13 +131,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_chin_tab"
 			title="Chin">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_chin_param_list"
@@ -157,13 +143,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_torso_tab"
 			title="Torso">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_torso_param_list"
@@ -171,13 +155,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_legs_tab"
 			title="Legs">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_legs_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
index 258ee06697e..9a13dfa3c45 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shirt_main_tab"
 			title="Shirt">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shirt_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
index 22fced4aac7..154b9d959c9 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shoes_main_tab"
 			title="Shoes">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shoes_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_skin.xml b/indra/newview/skins/default/xui/en/panel_edit_skin.xml
index 1a00277f432..918606b54ca 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_skin.xml
@@ -64,13 +64,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="skin_color_tab"
 			title="Skin Color">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="skin_color_param_list"
@@ -78,13 +76,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="skin_face_tab"
 			title="Face Detail">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="skin_face_param_list"
@@ -92,13 +88,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="skin_makeup_tab"
 			title="Makeup">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="skin_makeup_param_list"
@@ -106,13 +100,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="skin_body_tab"
 			title="Body Detail">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="skin_body_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
index 411d4336041..d0f4d754442 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="skirt_main_tab"
 			title="Skirt">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="skirt_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_socks.xml b/indra/newview/skins/default/xui/en/panel_edit_socks.xml
index faff67795c5..acc6d482a7d 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_socks.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_socks.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="socks_main_tab"
 			title="Socks">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="socks_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
index bb0b353a012..4f5c1c08b71 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="underpants_main_tab"
 			title="Underpants">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="underpants_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
index 097cb14ee6c..715674e88ba 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="undershirt_main_tab"
 			title="Undershirt">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="undershirt_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index c2f9cfe6755..9d360cea0ce 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -120,12 +120,10 @@ background_visible="true"
              height="425"
              layout="topleft"
              left="0"
-             multiple_expansion="false"
              name="groups_accordion"
              top_pad="15"
              width="336">
              <accordion_tab
-                 can_resize="false"
                  expanded="true"
                  layout="topleft"
                  name="tab_general"
@@ -153,7 +151,6 @@ background_visible="true"
          </scroll_container>
          </accordion_tab>
          <accordion_tab
-                 can_resize="false"
                  expanded="false"
                  layout="topleft"
                  name="tab_roles"
@@ -181,7 +178,6 @@ background_visible="true"
          </scroll_container>
          </accordion_tab>
          <accordion_tab
-                 can_resize="false"
                  expanded="false"
                  layout="topleft"
                  name="tab_notices"
@@ -209,7 +205,6 @@ background_visible="true"
          </scroll_container>
          </accordion_tab>
         <accordion_tab
-                 can_resize="false"
                  expanded="false"
                  layout="topleft"
                  name="tab_notices"
diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
index 99fc39c466a..0c6f81f8fd8 100644
--- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
@@ -304,7 +304,6 @@
 	     image_overlay="Arrow_Left_Off"
 	     layout="topleft"
 	     name="earlier_details_button"
-	     picture_style="true"
 	     tool_tip="Back"
 	     top_pad="3"
              right="-35"
@@ -315,8 +314,7 @@
 	     image_overlay="Arrow_Right_Off"
 	     layout="topleft"
 	     left_pad="10"
-             name="later_details_button"
-	     picture_style="true"
+       name="later_details_button"
 	     tool_tip="Next"
 	     width="31" />
         </panel>
@@ -350,7 +348,6 @@
 	     image_overlay="Arrow_Left_Off"
 	     layout="topleft"
 	     name="earlier_sales_button"
-	     picture_style="true"
 	     tool_tip="Back"
 	     top_pad="3"
              right="-35"
@@ -362,7 +359,6 @@
 	     layout="topleft"
 	     left_pad="10"
              name="later_sales_button"
-	     picture_style="true"
 	     tool_tip="Next"
 	     width="31" />
         </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml
index bfb49a60c25..24a4005a459 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml
@@ -83,7 +83,6 @@ Groups are limited to 200 notices/group daily
        label="Create a new notice"
        left="15"
        name="create_new_notice"
-       picture_style="true"
        tool_tip="Create a new notice"
      top_delta="-5"
        width="18" />
@@ -93,7 +92,6 @@ Groups are limited to 200 notices/group daily
      image_overlay="Refresh_Off"
      layout="topleft"
      name="refresh_notices"
-     picture_style="true"
      right="-5"
      top_delta="5"
      width="23" />
diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
index 03ba7f7c81f..0c24adfad59 100644
--- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
@@ -50,7 +50,6 @@
      layout="topleft"
      left="10"
      name="back_btn"
-     picture_style="true"
      tab_stop="false"
      top="0"
      width="23" />
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index ddfa6e72a39..e1b3cbf1c89 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -7,6 +7,7 @@
  height="65"
  layout="topleft"
  name="navigation_bar"
+ chrome="true" 
  width="600">
 	<icon
 	 follows="all"
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index c8194a286b8..c648b5654e6 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -75,7 +75,6 @@ background_visible="true"
              multi_select="true"
              name="avatar_list"
              top="0"
-             volume_column_width="20"
              width="313" />
             <panel
              follows="left|right|bottom"
@@ -130,7 +129,6 @@ background_visible="true"
              top="0"
              width="313">
                 <accordion_tab
-                 can_resize="false"
                  layout="topleft"
                  height="235"
                  min_height="150"
@@ -147,7 +145,6 @@ background_visible="true"
                          width="313" />
                 </accordion_tab>
                 <accordion_tab
-                 can_resize="false"
                  layout="topleft"
                  height="235"
                  name="tab_all"
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index 7e073f064d7..e1b197b5d1f 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -99,7 +99,6 @@
      layout="topleft"
      left="10"
      name="back_btn"
-     picture_style="true"
      tab_stop="false"
      top="0"
      width="23" />
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index c3a92f9d9ae..23d55b33e22 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -31,7 +31,6 @@
      color="DkGray2"
      follows="all"
      height="485"
-     min_height="300"
      layout="topleft"
      name="profile_scroll"
      reserve_scroll_corner="true"
@@ -81,7 +80,7 @@
              height="95"
              layout="topleft"
              left="107"
-             max_length="512"
+             textbox.max_length="512"
              name="sl_description_edit"
              top_pad="-3"
              width="173"
@@ -124,7 +123,7 @@
              height="95"
              layout="topleft"
              left="107"
-             max_length="512"
+             textbox.max_length="512"
              name="fl_description_edit"
              top_pad="-3"
              width="173"
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml
index 3582de1c711..d3de09ab4ce 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <!-- Side tray cannot show background because it is always 
 	partially on screen to hold tab buttons. -->
-<side_tray
+<panel
   name="sidebar"
   background_visible="false"
   mouse_opaque="true"
@@ -147,4 +147,4 @@
       />
   </sidetray_tab>
 
-</side_tray>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
index bbfffe7baba..01204ba7795 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
@@ -10,12 +10,10 @@
      name="history_accordion"
      width="380">
 	    <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="today"
          title="Today">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -26,12 +24,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="yesterday"
          title="Yesterday">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -42,12 +38,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="2_days_ago"
          title="2 days ago">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -58,12 +52,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="3_days_ago"
          title="3 days ago">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -74,12 +66,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="4_days_ago"
          title="4 days ago">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -90,12 +80,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="5_days_ago"
          title="5 days ago">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -106,12 +94,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="6_days_and_older"
          title="6 days and older">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -122,12 +108,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="1_month_and_older"
          title="1 month and older">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -138,12 +122,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="6_months_and_older"
          title="6 months and older">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
index 725492052ca..75d20c1ce39 100644
--- a/indra/newview/skins/default/xui/en/widgets/talk_button.xml
+++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
@@ -12,7 +12,6 @@
     font="SansSerifSmall"
     tab_stop="false"
     is_toggle="true"
-    picture_style="true"
     />
   <show_button
     name="right"
@@ -23,7 +22,6 @@
     bottom="0"
     tab_stop="false"
     is_toggle="true"
-    picture_style="true"
     image_selected="ComboButton_Selected"
     image_unselected="ComboButton_Off"
     />
-- 
GitLab


From 5e56af9c9da77a98645c54166d83589db322354f Mon Sep 17 00:00:00 2001
From: Rick Pasetto <rick@lindenlab.com>
Date: Thu, 5 Nov 2009 11:07:03 -0800
Subject: [PATCH 180/306] FIX DEV-42115: Remove modify permission check that
 would grant navigate/interact or controls "permission" Review #27

Back when media controls (an unfortunately much-overloaded word) was called media permission (also an overloaded word), we granted "permission" for interact/navigate or controls "display" if the requestor agent had modify permissions. This decision doesn't seem to make sense, because it is a common use case to want to "disable" controls (or perhaps interaction/navigate) even for the user who created the object (i.e. who has modify permissions). This removes that check.

NOTE that this check is also made on the server, but in that case modify permissions *grants* the right to navigate in that case. Although the code is very similar, the viewer version is trying to address a use case story, whereas the other is trying to prevent a griefing vector.
---
 indra/newview/llvovolume.cpp | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 1d94e9118e0..caeda3d1db6 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1796,20 +1796,19 @@ void LLVOVolume::mediaNavigateBounceBack(U8 texture_index)
 
 bool LLVOVolume::hasMediaPermission(const LLMediaEntry* media_entry, MediaPermType perm_type)
 {
-    // NOTE: This logic duplicates the logic in the server (in particular, in llmediaservice.cpp).
+    // NOTE: This logic ALMOST duplicates the logic in the server (in particular, in llmediaservice.cpp).
     if (NULL == media_entry ) return false; // XXX should we assert here?
     
-    // The agent has permissions to navigate if:
-    // - agent has edit permissions, or
+    // The agent has permissions if:
     // - world permissions are on, or
     // - group permissions are on, and agent_id is in the group, or
     // - agent permissions are on, and agent_id is the owner
     
-    if (permModify()) 
-    {
-        return true;
-    }
-    
+	// *NOTE: We *used* to check for modify permissions here (i.e. permissions were
+	// granted if permModify() was true).  However, this doesn't make sense in the
+	// viewer: we don't want to show controls or allow interaction if the author
+	// has deemed it so.  See DEV-42115.
+	
     U8 media_perms = (perm_type == MEDIA_PERM_INTERACT) ? media_entry->getPermsInteract() : media_entry->getPermsControl();
     
     // World permissions
-- 
GitLab


From b1242ead82c80628a9155cd0eb05f5ff2378af4b Mon Sep 17 00:00:00 2001
From: Lis Pardi <lis@lindenlab.com>
Date: Thu, 5 Nov 2009 14:32:03 -0500
Subject: [PATCH 181/306] ext-665   Iconography - New art for badge_note.j2c
 (image denoting list items) on Sell Land floater

---
 .../default/xui/en/floater_sell_land.xml      | 66 +++++--------------
 1 file changed, 17 insertions(+), 49 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml
index 8fedd0a89f0..fd653895a29 100644
--- a/indra/newview/skins/default/xui/en/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml
@@ -96,27 +96,16 @@
      width="200">
         To sell this parcel:
     </text>
-    <icon
-     follows="top|left"
-     height="64"
-     image_name="badge_note.j2c"
-     layout="topleft"
-     left="0"
-     name="step_price"
-     top="206"
-     width="64" />
     <text
      type="string"
      length="1"
-     bottom_delta="-38"
      follows="top|left"
      font="SansSerif"
      height="16"
      layout="topleft"
-     left="72"
-     name="price_label"
-     right="-20">
-        Set a price:
+     left="30"
+     name="price_label">
+        1. Set a price:
     </text>
     <text
      type="string"
@@ -124,9 +113,8 @@
      follows="top|left"
      height="16"
      layout="topleft"
-     left="72"
-     name="price_text"
-     right="-20">
+     left="40"
+     name="price_text">
         Choose an appropriate price.
     </text>
     <text
@@ -134,7 +122,7 @@
      length="1"
      height="16"
      layout="topleft"
-     left="72"
+     left="40"
      name="price_ld"
      width="20">
         L$
@@ -156,32 +144,22 @@
      length="1"
      height="16"
      layout="topleft"
-     left="72"
+     left="40"
      name="price_per_m"
      top_delta="25"
      width="200">
         (L$[PER_METER] per m²)
     </text>
-    <icon
-     follows="top|left"
-     height="64"
-     image_name="badge_note.j2c"
-     layout="topleft"
-     left="0"
-     name="step_sell_to"
-     width="64" />
     <text
      type="string"
      length="1"
-     bottom_delta="-38"
      follows="top|left"
      font="SansSerif"
      height="16"
      layout="topleft"
-     left="72"
-     name="sell_to_label"
-     right="-20">
-        Sell the land to:
+     left="30"
+     name="sell_to_label">
+        2. Sell the land to:
     </text>
     <text
      type="string"
@@ -189,7 +167,7 @@
      follows="top|left"
      height="25"
      layout="topleft"
-     left="72"
+     left="40"
      word_wrap="true"
      name="sell_to_text"
      right="-20">
@@ -235,26 +213,16 @@
      name="sell_to_select_agent"
      top_delta="0"
      width="60" />
-    <icon
-     follows="top|left"
-     height="64"
-     image_name="badge_note.j2c"
-     layout="topleft"
-     left="0"
-     name="step_sell_objects"
-     width="64" />
     <text
      type="string"
      length="1"
-     bottom_delta="-38"
      follows="top|left"
      font="SansSerif"
      height="16"
      layout="topleft"
-     left="72"
-     name="sell_objects_label"
-     right="-20">
-        Sell the objects with the land?
+     left="30"
+     name="sell_objects_label">
+        3. Sell the objects with the land?
     </text>
     <text
      type="string"
@@ -264,7 +232,7 @@
      height="25"
      layout="topleft"
      word_wrap="true"
-     left="72"
+     left="40"
      name="sell_objects_text">
         Land owner&apos;s transferable objects on parcel will change ownership.
     </text>
@@ -273,7 +241,7 @@
      follows="top|right"
      height="40"
      layout="topleft"
-     left="72"
+     left="40"
      name="sell_objects"
      right="420">
         <radio_item
@@ -304,7 +272,7 @@
      label="Show Objects"
      layout="topleft"
      name="show_objects"
-     left="100"
+     left="70"
      top_pad="10"
      width="110" />
     <text
-- 
GitLab


From c67ef56fa1a85ea8882b176f989dd34866de19a2 Mon Sep 17 00:00:00 2001
From: "Justin C. Rounds (Chuck)" <chuck@lindenlab.com>
Date: Thu, 5 Nov 2009 14:45:00 -0500
Subject: [PATCH 182/306] Removed chrome from help button and replaced with
 80/20 art. http://jira.secondlife.com/browse/EXT-2172

---
 .../xui/en/panel_side_tray_tab_caption.xml       | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml
index 9845a9eb78e..4c8bb68e549 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml
@@ -19,16 +19,18 @@
      top="4"
      value="Side Panel"
      width="255" />
-    <button
+     <button
      follows="left|right|top"
-     font="SansSerif"
-     height="23"
-     label="?"
+     height="16"
+     image_selected="Icon_Help_Press"
+     image_unselected="Icon_Help_Foreground"
+     image_disabled="Icon_Help_Press"
+     picture_style="true"
      layout="topleft"
      name="show_help"
-     top="5"
-     right="-8"
-     width="28"
+     top="10"
+     right="-11"
+     width="16"
      tool_tip="Show Help">
         <button.commit_callback
          function="Button.ShowHelp" />
-- 
GitLab


From 280e01729173e79e37939c3e764f9f3f674f79da Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 5 Nov 2009 15:00:36 -0500
Subject: [PATCH 183/306] EXT-2229 : Task SP : Update task on new selection

Using activePanel hack to update selection when it changes.

--HG--
branch : avatar-pipeline
---
 indra/newview/llpanelmaininventory.cpp        | 1637 +++++++++--------
 indra/newview/llselectmgr.cpp                 |   20 +-
 .../newview/llsidepanelinventorysubpanel.cpp  |    2 +-
 indra/newview/llsidepaneltaskinfo.cpp         |   51 +-
 indra/newview/llsidepaneltaskinfo.h           |    7 +
 5 files changed, 893 insertions(+), 824 deletions(-)

diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 617445a27f2..876151479fd 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -1,818 +1,819 @@
-/** 
- * @file llsidepanelmaininventory.cpp
- * @brief Implementation of llsidepanelmaininventory.
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelmaininventory.h"
-
-#include "llfloaterinventory.h"
-#include "llinventorybridge.h"
-#include "llinventoryfunctions.h"
-#include "llinventorypanel.h"
-#include "llfiltereditor.h"
-#include "llfloaterreg.h"
-#include "llscrollcontainer.h"
-#include "llsdserialize.h"
-#include "llspinctrl.h"
-#include "lltooldraganddrop.h"
-
-static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory"); // Seraph is this redundant with constructor?
-
-///----------------------------------------------------------------------------
-/// LLFloaterInventoryFinder
-///----------------------------------------------------------------------------
-
-class LLFloaterInventoryFinder : public LLFloater
-{
-public:
-	LLFloaterInventoryFinder( LLPanelMainInventory* inventory_view);
-	virtual void draw();
-	/*virtual*/	BOOL	postBuild();
-	void changeFilter(LLInventoryFilter* filter);
-	void updateElementsFromFilter();
-	BOOL getCheckShowEmpty();
-	BOOL getCheckSinceLogoff();
-
-	static void onTimeAgo(LLUICtrl*, void *);
-	static void onCheckSinceLogoff(LLUICtrl*, void *);
-	static void onCloseBtn(void* user_data);
-	static void selectAllTypes(void* user_data);
-	static void selectNoTypes(void* user_data);
-private:
-	LLPanelMainInventory*	mPanelInventoryDecorated;
-	LLSpinCtrl*			mSpinSinceDays;
-	LLSpinCtrl*			mSpinSinceHours;
-	LLInventoryFilter*	mFilter;
-};
-
-///----------------------------------------------------------------------------
-/// LLPanelMainInventory
-///----------------------------------------------------------------------------
-
-LLPanelMainInventory::LLPanelMainInventory()
-	: LLPanel()
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_INIT);
-	// Menu Callbacks (non contex menus)
-	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelMainInventory::doToSelected, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.CloseAllFolders", boost::bind(&LLPanelMainInventory::closeAllFolders, this));
-	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
-	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
-	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLPanelMainInventory::doCreate, this, _2));
- 	mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLPanelMainInventory::newWindow, this));
-	mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLPanelMainInventory::toggleFindOptions, this));
-	mCommitCallbackRegistrar.add("Inventory.ResetFilters", boost::bind(&LLPanelMainInventory::resetFilters, this));
-	mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLPanelMainInventory::setSortBy, this, _2));
-
-	// Controls
-	// *TODO: Just use persistant settings for each of these
-	U32 sort_order = gSavedSettings.getU32("InventorySortOrder");
-	BOOL sort_by_name = ! ( sort_order & LLInventoryFilter::SO_DATE );
-	BOOL sort_folders_by_name = ( sort_order & LLInventoryFilter::SO_FOLDERS_BY_NAME );
-	BOOL sort_system_folders_to_top = ( sort_order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP );
-	
-	gSavedSettings.declareBOOL("Inventory.SortByName", sort_by_name, "Declared in code", FALSE);
-	gSavedSettings.declareBOOL("Inventory.SortByDate", !sort_by_name, "Declared in code", FALSE);
-	gSavedSettings.declareBOOL("Inventory.FoldersAlwaysByName", sort_folders_by_name, "Declared in code", FALSE);
-	gSavedSettings.declareBOOL("Inventory.SystemFoldersToTop", sort_system_folders_to_top, "Declared in code", FALSE);
-	
-	mSavedFolderState = new LLSaveFolderState();
-	mSavedFolderState->setApply(FALSE);
-}
-
-BOOL LLPanelMainInventory::postBuild()
-{
-	gInventory.addObserver(this);
-	
-	mFilterTabs = getChild<LLTabContainer>("inventory filter tabs");
-	mFilterTabs->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterSelected, this));
-	
-	//panel->getFilter()->markDefault();
-
-	// Set up the default inv. panel/filter settings.
-	mActivePanel = getChild<LLInventoryPanel>("All Items");
-	if (mActivePanel)
-	{
-		// "All Items" is the previous only view, so it gets the InventorySortOrder
-		mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder"));
-		mActivePanel->getFilter()->markDefault();
-		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-		mActivePanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mActivePanel, _1, _2));
-	}
-	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
-	if (recent_items_panel)
-	{
-		recent_items_panel->setSinceLogoff(TRUE);
-		recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE);
-		recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
-		recent_items_panel->getFilter()->markDefault();
-		recent_items_panel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, recent_items_panel, _1, _2));
-	}
-
-	// Now load the stored settings from disk, if available.
-	std::ostringstream filterSaveName;
-	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
-	llinfos << "LLPanelMainInventory::init: reading from " << filterSaveName << llendl;
-	llifstream file(filterSaveName.str());
-	LLSD savedFilterState;
-	if (file.is_open())
-	{
-		LLSDSerialize::fromXML(savedFilterState, file);
-		file.close();
-
-		// Load the persistent "Recent Items" settings.
-		// Note that the "All Items" settings do not persist.
-		if(recent_items_panel)
-		{
-			if(savedFilterState.has(recent_items_panel->getFilter()->getName()))
-			{
-				LLSD recent_items = savedFilterState.get(
-					recent_items_panel->getFilter()->getName());
-				recent_items_panel->getFilter()->fromLLSD(recent_items);
-			}
-		}
-
-	}
-
-
-	mFilterEditor = getChild<LLFilterEditor>("inventory search editor");
-	if (mFilterEditor)
-	{
-		mFilterEditor->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterEdit, this, _2));
-	}
-
-	// *TODO:Get the cost info from the server
-	const std::string upload_cost("10");
-	childSetLabelArg("Upload Image", "[COST]", upload_cost);
-	childSetLabelArg("Upload Sound", "[COST]", upload_cost);
-	childSetLabelArg("Upload Animation", "[COST]", upload_cost);
-	childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
-	
-	return TRUE;
-}
-
-// Destroys the object
-LLPanelMainInventory::~LLPanelMainInventory( void )
-{
-	// Save the filters state.
-	LLSD filterRoot;
-	LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>("All Items");
-	if (all_items_panel)
-	{
-		LLInventoryFilter* filter = all_items_panel->getFilter();
-		if (filter)
-		{
-			LLSD filterState;
-			filter->toLLSD(filterState);
-			filterRoot[filter->getName()] = filterState;
-		}
-	}
-
-	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
-	if (recent_items_panel)
-	{
-		LLInventoryFilter* filter = recent_items_panel->getFilter();
-		if (filter)
-		{
-			LLSD filterState;
-			filter->toLLSD(filterState);
-			filterRoot[filter->getName()] = filterState;
-		}
-	}
-
-	std::ostringstream filterSaveName;
-	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
-	llofstream filtersFile(filterSaveName.str());
-	if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile))
-	{
-		llwarns << "Could not write to filters save file " << filterSaveName << llendl;
-	}
-	else
-		filtersFile.close();
-
-	gInventory.removeObserver(this);
-	delete mSavedFolderState;
-}
-
-void LLPanelMainInventory::startSearch()
-{
-	// this forces focus to line editor portion of search editor
-	if (mFilterEditor)
-	{
-		mFilterEditor->focusFirstItem(TRUE);
-	}
-}
-
-BOOL LLPanelMainInventory::handleKeyHere(KEY key, MASK mask)
-{
-	LLFolderView* root_folder = mActivePanel ? mActivePanel->getRootFolder() : NULL;
-	if (root_folder)
-	{
-		// first check for user accepting current search results
-		if (mFilterEditor 
-			&& mFilterEditor->hasFocus()
-		    && (key == KEY_RETURN 
-		    	|| key == KEY_DOWN)
-		    && mask == MASK_NONE)
-		{
-			// move focus to inventory proper
-			mActivePanel->setFocus(TRUE);
-			root_folder->scrollToShowSelection();
-			return TRUE;
-		}
-
-		if (mActivePanel->hasFocus() && key == KEY_UP)
-		{
-			startSearch();
-		}
-	}
-
-	return LLPanel::handleKeyHere(key, mask);
-
-}
-
-//----------------------------------------------------------------------------
-// menu callbacks
-
-void LLPanelMainInventory::doToSelected(const LLSD& userdata)
-{
-	getPanel()->getRootFolder()->doToSelected(&gInventory, userdata);
-}
-
-void LLPanelMainInventory::closeAllFolders()
-{
-	getPanel()->getRootFolder()->closeAllFolders();
-}
-
-void LLPanelMainInventory::newWindow()
-{
-	LLFloaterInventory::showAgentInventory();
-}
-
-void LLPanelMainInventory::doCreate(const LLSD& userdata)
-{
-	menu_create_inventory_item(getPanel()->getRootFolder(), NULL, userdata);
-}
-
-void LLPanelMainInventory::resetFilters()
-{
-	LLFloaterInventoryFinder *finder = getFinder();
-	getActivePanel()->getFilter()->resetDefault();
-	if (finder)
-	{
-		finder->updateElementsFromFilter();
-	}
-
-	setFilterTextFromFilter();
-}
-
-void LLPanelMainInventory::setSortBy(const LLSD& userdata)
-{
-	std::string sort_field = userdata.asString();
-	if (sort_field == "name")
-	{
-		U32 order = getActivePanel()->getSortOrder();
-		getActivePanel()->setSortOrder( order & ~LLInventoryFilter::SO_DATE );
-			
-		gSavedSettings.setBOOL("Inventory.SortByName", TRUE );
-		gSavedSettings.setBOOL("Inventory.SortByDate", FALSE );
-	}
-	else if (sort_field == "date")
-	{
-		U32 order = getActivePanel()->getSortOrder();
-		getActivePanel()->setSortOrder( order | LLInventoryFilter::SO_DATE );
-
-		gSavedSettings.setBOOL("Inventory.SortByName", FALSE );
-		gSavedSettings.setBOOL("Inventory.SortByDate", TRUE );
-	}
-	else if (sort_field == "foldersalwaysbyname")
-	{
-		U32 order = getActivePanel()->getSortOrder();
-		if ( order & LLInventoryFilter::SO_FOLDERS_BY_NAME )
-		{
-			order &= ~LLInventoryFilter::SO_FOLDERS_BY_NAME;
-
-			gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", FALSE );
-		}
-		else
-		{
-			order |= LLInventoryFilter::SO_FOLDERS_BY_NAME;
-
-			gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", TRUE );
-		}
-		getActivePanel()->setSortOrder( order );
-	}
-	else if (sort_field == "systemfolderstotop")
-	{
-		U32 order = getActivePanel()->getSortOrder();
-		if ( order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP )
-		{
-			order &= ~LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
-
-			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", FALSE );
-		}
-		else
-		{
-			order |= LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
-
-			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", TRUE );
-		}
-		getActivePanel()->setSortOrder( order );
-	}
-}
-
-// static
-BOOL LLPanelMainInventory::filtersVisible(void* user_data)
-{
-	LLPanelMainInventory* self = (LLPanelMainInventory*)user_data;
-	if(!self) return FALSE;
-
-	return self->getFinder() != NULL;
-}
-
-void LLPanelMainInventory::onClearSearch()
-{
-	LLFloater *finder = getFinder();
-	if (mActivePanel)
-	{
-		mActivePanel->setFilterSubString(LLStringUtil::null);
-		mActivePanel->setFilterTypes(0xffffffff);
-	}
-
-	if (finder)
-	{
-		LLFloaterInventoryFinder::selectAllTypes(finder);
-	}
-
-	// re-open folders that were initially open
-	if (mActivePanel)
-	{
-		mSavedFolderState->setApply(TRUE);
-		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-		LLOpenFoldersWithSelection opener;
-		mActivePanel->getRootFolder()->applyFunctorRecursively(opener);
-		mActivePanel->getRootFolder()->scrollToShowSelection();
-	}
-}
-
-void LLPanelMainInventory::onFilterEdit(const std::string& search_string )
-{
-	if (search_string == "")
-	{
-		onClearSearch();
-	}
-	if (!mActivePanel)
-	{
-		return;
-	}
-
-	gInventory.startBackgroundFetch();
-
-	std::string uppercase_search_string = search_string;
-	LLStringUtil::toUpper(uppercase_search_string);
-	if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty())
-	{
-			// current filter and new filter empty, do nothing
-			return;
-	}
-
-	// save current folder open state if no filter currently applied
-	if (!mActivePanel->getRootFolder()->isFilterModified())
-	{
-		mSavedFolderState->setApply(FALSE);
-		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-	}
-
-	// set new filter string
-	mActivePanel->setFilterSubString(uppercase_search_string);
-}
-
-
- //static
- BOOL LLPanelMainInventory::incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward)
- {
- 	LLPanelMainInventory* active_view = NULL;
-	
-	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
-	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
-	{
-		LLPanelMainInventory* iv = dynamic_cast<LLPanelMainInventory*>(*iter);
-		if (iv)
-		{
-			if (gFocusMgr.childHasKeyboardFocus(iv))
-			{
-				active_view = iv;
-				break;
-			}
- 		}
- 	}
-
- 	if (!active_view)
- 	{
- 		return FALSE;
- 	}
-
- 	std::string search_string(find_text);
-
- 	if (search_string.empty())
- 	{
- 		return FALSE;
- 	}
-
- 	if (active_view->getPanel() &&
- 		active_view->getPanel()->getRootFolder()->search(first_item, search_string, backward))
- 	{
- 		return TRUE;
- 	}
-
- 	return FALSE;
- }
-
-void LLPanelMainInventory::onFilterSelected()
-{
-	// Find my index
-	mActivePanel = (LLInventoryPanel*)childGetVisibleTab("inventory filter tabs");
-
-	if (!mActivePanel)
-	{
-		return;
-	}
-	LLInventoryFilter* filter = mActivePanel->getFilter();
-	LLFloaterInventoryFinder *finder = getFinder();
-	if (finder)
-	{
-		finder->changeFilter(filter);
-	}
-	if (filter->isActive())
-	{
-		// If our filter is active we may be the first thing requiring a fetch so we better start it here.
-		gInventory.startBackgroundFetch();
-	}
-	setFilterTextFromFilter();
-}
-
-const std::string LLPanelMainInventory::getFilterSubString() 
-{ 
-	return mActivePanel->getFilterSubString(); 
-}
-
-void LLPanelMainInventory::setFilterSubString(const std::string& string) 
-{ 
-	mActivePanel->setFilterSubString(string); 
-}
-
-BOOL LLPanelMainInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-										 EDragAndDropType cargo_type,
-										 void* cargo_data,
-										 EAcceptance* accept,
-										 std::string& tooltip_msg)
-{
-	// Check to see if we are auto scrolling from the last frame
-	LLInventoryPanel* panel = (LLInventoryPanel*)this->getActivePanel();
-	BOOL needsToScroll = panel->getScrollableContainer()->autoScroll(x, y);
-	if(mFilterTabs)
-	{
-		if(needsToScroll)
-		{
-			mFilterTabs->startDragAndDropDelayTimer();
-		}
-	}
-	
-	BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
-
-	return handled;
-}
-
-void LLPanelMainInventory::changed(U32 mask)
-{
-}
-
-
-void LLPanelMainInventory::setFilterTextFromFilter() 
-{ 
-	mFilterText = mActivePanel->getFilter()->getFilterText(); 
-}
-
-void LLPanelMainInventory::toggleFindOptions()
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_TOGGLE);
-	LLFloater *floater = getFinder();
-	if (!floater)
-	{
-		LLFloaterInventoryFinder * finder = new LLFloaterInventoryFinder(this);
-		mFinderHandle = finder->getHandle();
-		finder->openFloater();
-
-		LLFloater* parent_floater = gFloaterView->getParentFloater(this);
-		if (parent_floater) // Seraph: Fix this, shouldn't be null even for sidepanel
-			parent_floater->addDependentFloater(mFinderHandle);
-		// start background fetch of folders
-		gInventory.startBackgroundFetch();
-	}
-	else
-	{
-		floater->closeFloater();
-	}
-}
-
-void LLPanelMainInventory::setSelectCallback(const LLFolderView::signal_t::slot_type& cb)
-{
-	getChild<LLInventoryPanel>("All Items")->setSelectCallback(cb);
-	getChild<LLInventoryPanel>("Recent Items")->setSelectCallback(cb);
-}
-
-///----------------------------------------------------------------------------
-/// LLFloaterInventoryFinder
-///----------------------------------------------------------------------------
-
-LLFloaterInventoryFinder* LLPanelMainInventory::getFinder() 
-{ 
-	return (LLFloaterInventoryFinder*)mFinderHandle.get();
-}
-
-
-LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* inventory_view) :	
-	LLFloater(LLSD()),
-	mPanelInventoryDecorated(inventory_view),
-	mFilter(inventory_view->getPanel()->getFilter())
-{
-	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml", NULL);
-	updateElementsFromFilter();
-}
-
-
-void LLFloaterInventoryFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_data)
-{
-	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
-	if (!self) return;
-
-	bool since_logoff= self->childGetValue("check_since_logoff");
-	
-	if (!since_logoff && 
-	    !(  self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() ) )
-	{
-		self->mSpinSinceHours->set(1.0f);
-	}	
-}
-BOOL LLFloaterInventoryFinder::postBuild()
-{
-	const LLRect& viewrect = mPanelInventoryDecorated->getRect();
-	setRect(LLRect(viewrect.mLeft - getRect().getWidth(), viewrect.mTop, viewrect.mLeft, viewrect.mTop - getRect().getHeight()));
-
-	childSetAction("All", selectAllTypes, this);
-	childSetAction("None", selectNoTypes, this);
-
-	mSpinSinceHours = getChild<LLSpinCtrl>("spin_hours_ago");
-	childSetCommitCallback("spin_hours_ago", onTimeAgo, this);
-
-	mSpinSinceDays = getChild<LLSpinCtrl>("spin_days_ago");
-	childSetCommitCallback("spin_days_ago", onTimeAgo, this);
-
-	//	mCheckSinceLogoff   = getChild<LLSpinCtrl>("check_since_logoff");
-	childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this);
-
-	childSetAction("Close", onCloseBtn, this);
-
-	updateElementsFromFilter();
-	return TRUE;
-}
-void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)
-{
-	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
-	if (!self) return;
-	
-	bool since_logoff=true;
-	if ( self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() )
-	{
-		since_logoff = false;
-	}
-	self->childSetValue("check_since_logoff", since_logoff);
-}
-
-void LLFloaterInventoryFinder::changeFilter(LLInventoryFilter* filter)
-{
-	mFilter = filter;
-	updateElementsFromFilter();
-}
-
-void LLFloaterInventoryFinder::updateElementsFromFilter()
-{
-	if (!mFilter)
-		return;
-
-	// Get data needed for filter display
-	U32 filter_types = mFilter->getFilterTypes();
-	std::string filter_string = mFilter->getFilterSubString();
-	LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState();
-	U32 hours = mFilter->getHoursAgo();
-
-	// update the ui elements
-	setTitle(mFilter->getName());
-
-	childSetValue("check_animation", (S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION));
-
-	childSetValue("check_calling_card", (S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD));
-	childSetValue("check_clothing", (S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE));
-	childSetValue("check_gesture", (S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE));
-	childSetValue("check_landmark", (S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK));
-	childSetValue("check_notecard", (S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD));
-	childSetValue("check_object", (S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT));
-	childSetValue("check_script", (S32) (filter_types & 0x1 << LLInventoryType::IT_LSL));
-	childSetValue("check_sound", (S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND));
-	childSetValue("check_texture", (S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE));
-	childSetValue("check_snapshot", (S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT));
-	childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS);
-	childSetValue("check_since_logoff", mFilter->isSinceLogoff());
-	mSpinSinceHours->set((F32)(hours % 24));
-	mSpinSinceDays->set((F32)(hours / 24));
-}
-
-void LLFloaterInventoryFinder::draw()
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_DRAW);
-	U32 filter = 0xffffffff;
-	BOOL filtered_by_all_types = TRUE;
-
-	if (!childGetValue("check_animation"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_ANIMATION);
-		filtered_by_all_types = FALSE;
-	}
-
-
-	if (!childGetValue("check_calling_card"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_CALLINGCARD);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_clothing"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_WEARABLE);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_gesture"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_GESTURE);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_landmark"))
-
-
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_LANDMARK);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_notecard"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_NOTECARD);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_object"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_OBJECT);
-		filter &= ~(0x1 << LLInventoryType::IT_ATTACHMENT);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_script"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_LSL);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_sound"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_SOUND);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_texture"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_TEXTURE);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_snapshot"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_SNAPSHOT);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!filtered_by_all_types)
-	{
-		// don't include folders in filter, unless I've selected everything
-		filter &= ~(0x1 << LLInventoryType::IT_CATEGORY);
-	}
-
-	// update the panel, panel will update the filter
-	mPanelInventoryDecorated->getPanel()->setShowFolderState(getCheckShowEmpty() ?
-		LLInventoryFilter::SHOW_ALL_FOLDERS : LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
-	mPanelInventoryDecorated->getPanel()->setFilterTypes(filter);
-	if (getCheckSinceLogoff())
-	{
-		mSpinSinceDays->set(0);
-		mSpinSinceHours->set(0);
-	}
-	U32 days = (U32)mSpinSinceDays->get();
-	U32 hours = (U32)mSpinSinceHours->get();
-	if (hours > 24)
-	{
-		days += hours / 24;
-		hours = (U32)hours % 24;
-		mSpinSinceDays->set((F32)days);
-		mSpinSinceHours->set((F32)hours);
-	}
-	hours += days * 24;
-	mPanelInventoryDecorated->getPanel()->setHoursAgo(hours);
-	mPanelInventoryDecorated->getPanel()->setSinceLogoff(getCheckSinceLogoff());
-	mPanelInventoryDecorated->setFilterTextFromFilter();
-
-	LLPanel::draw();
-}
-
-BOOL LLFloaterInventoryFinder::getCheckShowEmpty()
-{
-	return childGetValue("check_show_empty");
-}
-
-BOOL LLFloaterInventoryFinder::getCheckSinceLogoff()
-{
-	return childGetValue("check_since_logoff");
-}
-
-void LLFloaterInventoryFinder::onCloseBtn(void* user_data)
-{
-	LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data;
-	finderp->closeFloater();
-}
-
-// static
-void LLFloaterInventoryFinder::selectAllTypes(void* user_data)
-{
-	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
-	if(!self) return;
-
-	self->childSetValue("check_animation", TRUE);
-	self->childSetValue("check_calling_card", TRUE);
-	self->childSetValue("check_clothing", TRUE);
-	self->childSetValue("check_gesture", TRUE);
-	self->childSetValue("check_landmark", TRUE);
-	self->childSetValue("check_notecard", TRUE);
-	self->childSetValue("check_object", TRUE);
-	self->childSetValue("check_script", TRUE);
-	self->childSetValue("check_sound", TRUE);
-	self->childSetValue("check_texture", TRUE);
-	self->childSetValue("check_snapshot", TRUE);
-}
-
-//static
-void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
-{
-	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
-	if(!self) return;
-
-	self->childSetValue("check_animation", FALSE);
-	self->childSetValue("check_calling_card", FALSE);
-	self->childSetValue("check_clothing", FALSE);
-	self->childSetValue("check_gesture", FALSE);
-	self->childSetValue("check_landmark", FALSE);
-	self->childSetValue("check_notecard", FALSE);
-	self->childSetValue("check_object", FALSE);
-	self->childSetValue("check_script", FALSE);
-	self->childSetValue("check_sound", FALSE);
-	self->childSetValue("check_texture", FALSE);
-	self->childSetValue("check_snapshot", FALSE);
-}
+/** 
+ * @file llsidepanelmaininventory.cpp
+ * @brief Implementation of llsidepanelmaininventory.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llpanelmaininventory.h"
+
+#include "llfloaterinventory.h"
+#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llinventorypanel.h"
+#include "llfiltereditor.h"
+#include "llfloaterreg.h"
+#include "llscrollcontainer.h"
+#include "llsdserialize.h"
+#include "llspinctrl.h"
+#include "lltooldraganddrop.h"
+
+static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory"); // Seraph is this redundant with constructor?
+
+///----------------------------------------------------------------------------
+/// LLFloaterInventoryFinder
+///----------------------------------------------------------------------------
+
+class LLFloaterInventoryFinder : public LLFloater
+{
+public:
+	LLFloaterInventoryFinder( LLPanelMainInventory* inventory_view);
+	virtual void draw();
+	/*virtual*/	BOOL	postBuild();
+	void changeFilter(LLInventoryFilter* filter);
+	void updateElementsFromFilter();
+	BOOL getCheckShowEmpty();
+	BOOL getCheckSinceLogoff();
+
+	static void onTimeAgo(LLUICtrl*, void *);
+	static void onCheckSinceLogoff(LLUICtrl*, void *);
+	static void onCloseBtn(void* user_data);
+	static void selectAllTypes(void* user_data);
+	static void selectNoTypes(void* user_data);
+private:
+	LLPanelMainInventory*	mPanelMainInventory;
+	LLSpinCtrl*			mSpinSinceDays;
+	LLSpinCtrl*			mSpinSinceHours;
+	LLInventoryFilter*	mFilter;
+};
+
+///----------------------------------------------------------------------------
+/// LLPanelMainInventory
+///----------------------------------------------------------------------------
+
+LLPanelMainInventory::LLPanelMainInventory()
+	: LLPanel()
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_INIT);
+	// Menu Callbacks (non contex menus)
+	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelMainInventory::doToSelected, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.CloseAllFolders", boost::bind(&LLPanelMainInventory::closeAllFolders, this));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLPanelMainInventory::doCreate, this, _2));
+ 	mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLPanelMainInventory::newWindow, this));
+	mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLPanelMainInventory::toggleFindOptions, this));
+	mCommitCallbackRegistrar.add("Inventory.ResetFilters", boost::bind(&LLPanelMainInventory::resetFilters, this));
+	mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLPanelMainInventory::setSortBy, this, _2));
+
+	// Controls
+	// *TODO: Just use persistant settings for each of these
+	U32 sort_order = gSavedSettings.getU32("InventorySortOrder");
+	BOOL sort_by_name = ! ( sort_order & LLInventoryFilter::SO_DATE );
+	BOOL sort_folders_by_name = ( sort_order & LLInventoryFilter::SO_FOLDERS_BY_NAME );
+	BOOL sort_system_folders_to_top = ( sort_order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP );
+	
+	gSavedSettings.declareBOOL("Inventory.SortByName", sort_by_name, "Declared in code", FALSE);
+	gSavedSettings.declareBOOL("Inventory.SortByDate", !sort_by_name, "Declared in code", FALSE);
+	gSavedSettings.declareBOOL("Inventory.FoldersAlwaysByName", sort_folders_by_name, "Declared in code", FALSE);
+	gSavedSettings.declareBOOL("Inventory.SystemFoldersToTop", sort_system_folders_to_top, "Declared in code", FALSE);
+	
+	mSavedFolderState = new LLSaveFolderState();
+	mSavedFolderState->setApply(FALSE);
+}
+
+BOOL LLPanelMainInventory::postBuild()
+{
+	gInventory.addObserver(this);
+	
+	mFilterTabs = getChild<LLTabContainer>("inventory filter tabs");
+	mFilterTabs->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterSelected, this));
+	
+	//panel->getFilter()->markDefault();
+
+	// Set up the default inv. panel/filter settings.
+	mActivePanel = getChild<LLInventoryPanel>("All Items");
+	if (mActivePanel)
+	{
+		// "All Items" is the previous only view, so it gets the InventorySortOrder
+		mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder"));
+		mActivePanel->getFilter()->markDefault();
+		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+		mActivePanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mActivePanel, _1, _2));
+		mActivePanel->getRootFolder()->openFolder("My Inventory");
+	}
+	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
+	if (recent_items_panel)
+	{
+		recent_items_panel->setSinceLogoff(TRUE);
+		recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE);
+		recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+		recent_items_panel->getFilter()->markDefault();
+		recent_items_panel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, recent_items_panel, _1, _2));
+	}
+
+	// Now load the stored settings from disk, if available.
+	std::ostringstream filterSaveName;
+	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
+	llinfos << "LLPanelMainInventory::init: reading from " << filterSaveName << llendl;
+	llifstream file(filterSaveName.str());
+	LLSD savedFilterState;
+	if (file.is_open())
+	{
+		LLSDSerialize::fromXML(savedFilterState, file);
+		file.close();
+
+		// Load the persistent "Recent Items" settings.
+		// Note that the "All Items" settings do not persist.
+		if(recent_items_panel)
+		{
+			if(savedFilterState.has(recent_items_panel->getFilter()->getName()))
+			{
+				LLSD recent_items = savedFilterState.get(
+					recent_items_panel->getFilter()->getName());
+				recent_items_panel->getFilter()->fromLLSD(recent_items);
+			}
+		}
+
+	}
+
+
+	mFilterEditor = getChild<LLFilterEditor>("inventory search editor");
+	if (mFilterEditor)
+	{
+		mFilterEditor->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterEdit, this, _2));
+	}
+
+	// *TODO:Get the cost info from the server
+	const std::string upload_cost("10");
+	childSetLabelArg("Upload Image", "[COST]", upload_cost);
+	childSetLabelArg("Upload Sound", "[COST]", upload_cost);
+	childSetLabelArg("Upload Animation", "[COST]", upload_cost);
+	childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
+	
+	return TRUE;
+}
+
+// Destroys the object
+LLPanelMainInventory::~LLPanelMainInventory( void )
+{
+	// Save the filters state.
+	LLSD filterRoot;
+	LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>("All Items");
+	if (all_items_panel)
+	{
+		LLInventoryFilter* filter = all_items_panel->getFilter();
+		if (filter)
+		{
+			LLSD filterState;
+			filter->toLLSD(filterState);
+			filterRoot[filter->getName()] = filterState;
+		}
+	}
+
+	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
+	if (recent_items_panel)
+	{
+		LLInventoryFilter* filter = recent_items_panel->getFilter();
+		if (filter)
+		{
+			LLSD filterState;
+			filter->toLLSD(filterState);
+			filterRoot[filter->getName()] = filterState;
+		}
+	}
+
+	std::ostringstream filterSaveName;
+	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
+	llofstream filtersFile(filterSaveName.str());
+	if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile))
+	{
+		llwarns << "Could not write to filters save file " << filterSaveName << llendl;
+	}
+	else
+		filtersFile.close();
+
+	gInventory.removeObserver(this);
+	delete mSavedFolderState;
+}
+
+void LLPanelMainInventory::startSearch()
+{
+	// this forces focus to line editor portion of search editor
+	if (mFilterEditor)
+	{
+		mFilterEditor->focusFirstItem(TRUE);
+	}
+}
+
+BOOL LLPanelMainInventory::handleKeyHere(KEY key, MASK mask)
+{
+	LLFolderView* root_folder = mActivePanel ? mActivePanel->getRootFolder() : NULL;
+	if (root_folder)
+	{
+		// first check for user accepting current search results
+		if (mFilterEditor 
+			&& mFilterEditor->hasFocus()
+		    && (key == KEY_RETURN 
+		    	|| key == KEY_DOWN)
+		    && mask == MASK_NONE)
+		{
+			// move focus to inventory proper
+			mActivePanel->setFocus(TRUE);
+			root_folder->scrollToShowSelection();
+			return TRUE;
+		}
+
+		if (mActivePanel->hasFocus() && key == KEY_UP)
+		{
+			startSearch();
+		}
+	}
+
+	return LLPanel::handleKeyHere(key, mask);
+
+}
+
+//----------------------------------------------------------------------------
+// menu callbacks
+
+void LLPanelMainInventory::doToSelected(const LLSD& userdata)
+{
+	getPanel()->getRootFolder()->doToSelected(&gInventory, userdata);
+}
+
+void LLPanelMainInventory::closeAllFolders()
+{
+	getPanel()->getRootFolder()->closeAllFolders();
+}
+
+void LLPanelMainInventory::newWindow()
+{
+	LLFloaterInventory::showAgentInventory();
+}
+
+void LLPanelMainInventory::doCreate(const LLSD& userdata)
+{
+	menu_create_inventory_item(getPanel()->getRootFolder(), NULL, userdata);
+}
+
+void LLPanelMainInventory::resetFilters()
+{
+	LLFloaterInventoryFinder *finder = getFinder();
+	getActivePanel()->getFilter()->resetDefault();
+	if (finder)
+	{
+		finder->updateElementsFromFilter();
+	}
+
+	setFilterTextFromFilter();
+}
+
+void LLPanelMainInventory::setSortBy(const LLSD& userdata)
+{
+	std::string sort_field = userdata.asString();
+	if (sort_field == "name")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		getActivePanel()->setSortOrder( order & ~LLInventoryFilter::SO_DATE );
+			
+		gSavedSettings.setBOOL("Inventory.SortByName", TRUE );
+		gSavedSettings.setBOOL("Inventory.SortByDate", FALSE );
+	}
+	else if (sort_field == "date")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		getActivePanel()->setSortOrder( order | LLInventoryFilter::SO_DATE );
+
+		gSavedSettings.setBOOL("Inventory.SortByName", FALSE );
+		gSavedSettings.setBOOL("Inventory.SortByDate", TRUE );
+	}
+	else if (sort_field == "foldersalwaysbyname")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		if ( order & LLInventoryFilter::SO_FOLDERS_BY_NAME )
+		{
+			order &= ~LLInventoryFilter::SO_FOLDERS_BY_NAME;
+
+			gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", FALSE );
+		}
+		else
+		{
+			order |= LLInventoryFilter::SO_FOLDERS_BY_NAME;
+
+			gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", TRUE );
+		}
+		getActivePanel()->setSortOrder( order );
+	}
+	else if (sort_field == "systemfolderstotop")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		if ( order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP )
+		{
+			order &= ~LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
+
+			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", FALSE );
+		}
+		else
+		{
+			order |= LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
+
+			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", TRUE );
+		}
+		getActivePanel()->setSortOrder( order );
+	}
+}
+
+// static
+BOOL LLPanelMainInventory::filtersVisible(void* user_data)
+{
+	LLPanelMainInventory* self = (LLPanelMainInventory*)user_data;
+	if(!self) return FALSE;
+
+	return self->getFinder() != NULL;
+}
+
+void LLPanelMainInventory::onClearSearch()
+{
+	LLFloater *finder = getFinder();
+	if (mActivePanel)
+	{
+		mActivePanel->setFilterSubString(LLStringUtil::null);
+		mActivePanel->setFilterTypes(0xffffffff);
+	}
+
+	if (finder)
+	{
+		LLFloaterInventoryFinder::selectAllTypes(finder);
+	}
+
+	// re-open folders that were initially open
+	if (mActivePanel)
+	{
+		mSavedFolderState->setApply(TRUE);
+		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+		LLOpenFoldersWithSelection opener;
+		mActivePanel->getRootFolder()->applyFunctorRecursively(opener);
+		mActivePanel->getRootFolder()->scrollToShowSelection();
+	}
+}
+
+void LLPanelMainInventory::onFilterEdit(const std::string& search_string )
+{
+	if (search_string == "")
+	{
+		onClearSearch();
+	}
+	if (!mActivePanel)
+	{
+		return;
+	}
+
+	gInventory.startBackgroundFetch();
+
+	std::string uppercase_search_string = search_string;
+	LLStringUtil::toUpper(uppercase_search_string);
+	if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty())
+	{
+			// current filter and new filter empty, do nothing
+			return;
+	}
+
+	// save current folder open state if no filter currently applied
+	if (!mActivePanel->getRootFolder()->isFilterModified())
+	{
+		mSavedFolderState->setApply(FALSE);
+		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+	}
+
+	// set new filter string
+	mActivePanel->setFilterSubString(uppercase_search_string);
+}
+
+
+ //static
+ BOOL LLPanelMainInventory::incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward)
+ {
+ 	LLPanelMainInventory* active_view = NULL;
+	
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
+	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+	{
+		LLPanelMainInventory* iv = dynamic_cast<LLPanelMainInventory*>(*iter);
+		if (iv)
+		{
+			if (gFocusMgr.childHasKeyboardFocus(iv))
+			{
+				active_view = iv;
+				break;
+			}
+ 		}
+ 	}
+
+ 	if (!active_view)
+ 	{
+ 		return FALSE;
+ 	}
+
+ 	std::string search_string(find_text);
+
+ 	if (search_string.empty())
+ 	{
+ 		return FALSE;
+ 	}
+
+ 	if (active_view->getPanel() &&
+ 		active_view->getPanel()->getRootFolder()->search(first_item, search_string, backward))
+ 	{
+ 		return TRUE;
+ 	}
+
+ 	return FALSE;
+ }
+
+void LLPanelMainInventory::onFilterSelected()
+{
+	// Find my index
+	mActivePanel = (LLInventoryPanel*)childGetVisibleTab("inventory filter tabs");
+
+	if (!mActivePanel)
+	{
+		return;
+	}
+	LLInventoryFilter* filter = mActivePanel->getFilter();
+	LLFloaterInventoryFinder *finder = getFinder();
+	if (finder)
+	{
+		finder->changeFilter(filter);
+	}
+	if (filter->isActive())
+	{
+		// If our filter is active we may be the first thing requiring a fetch so we better start it here.
+		gInventory.startBackgroundFetch();
+	}
+	setFilterTextFromFilter();
+}
+
+const std::string LLPanelMainInventory::getFilterSubString() 
+{ 
+	return mActivePanel->getFilterSubString(); 
+}
+
+void LLPanelMainInventory::setFilterSubString(const std::string& string) 
+{ 
+	mActivePanel->setFilterSubString(string); 
+}
+
+BOOL LLPanelMainInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+										 EDragAndDropType cargo_type,
+										 void* cargo_data,
+										 EAcceptance* accept,
+										 std::string& tooltip_msg)
+{
+	// Check to see if we are auto scrolling from the last frame
+	LLInventoryPanel* panel = (LLInventoryPanel*)this->getActivePanel();
+	BOOL needsToScroll = panel->getScrollableContainer()->autoScroll(x, y);
+	if(mFilterTabs)
+	{
+		if(needsToScroll)
+		{
+			mFilterTabs->startDragAndDropDelayTimer();
+		}
+	}
+	
+	BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+
+	return handled;
+}
+
+void LLPanelMainInventory::changed(U32 mask)
+{
+}
+
+
+void LLPanelMainInventory::setFilterTextFromFilter() 
+{ 
+	mFilterText = mActivePanel->getFilter()->getFilterText(); 
+}
+
+void LLPanelMainInventory::toggleFindOptions()
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_TOGGLE);
+	LLFloater *floater = getFinder();
+	if (!floater)
+	{
+		LLFloaterInventoryFinder * finder = new LLFloaterInventoryFinder(this);
+		mFinderHandle = finder->getHandle();
+		finder->openFloater();
+
+		LLFloater* parent_floater = gFloaterView->getParentFloater(this);
+		if (parent_floater) // Seraph: Fix this, shouldn't be null even for sidepanel
+			parent_floater->addDependentFloater(mFinderHandle);
+		// start background fetch of folders
+		gInventory.startBackgroundFetch();
+	}
+	else
+	{
+		floater->closeFloater();
+	}
+}
+
+void LLPanelMainInventory::setSelectCallback(const LLFolderView::signal_t::slot_type& cb)
+{
+	getChild<LLInventoryPanel>("All Items")->setSelectCallback(cb);
+	getChild<LLInventoryPanel>("Recent Items")->setSelectCallback(cb);
+}
+
+///----------------------------------------------------------------------------
+/// LLFloaterInventoryFinder
+///----------------------------------------------------------------------------
+
+LLFloaterInventoryFinder* LLPanelMainInventory::getFinder() 
+{ 
+	return (LLFloaterInventoryFinder*)mFinderHandle.get();
+}
+
+
+LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* inventory_view) :	
+	LLFloater(LLSD()),
+	mPanelMainInventory(inventory_view),
+	mFilter(inventory_view->getPanel()->getFilter())
+{
+	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml", NULL);
+	updateElementsFromFilter();
+}
+
+
+void LLFloaterInventoryFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_data)
+{
+	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
+	if (!self) return;
+
+	bool since_logoff= self->childGetValue("check_since_logoff");
+	
+	if (!since_logoff && 
+	    !(  self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() ) )
+	{
+		self->mSpinSinceHours->set(1.0f);
+	}	
+}
+BOOL LLFloaterInventoryFinder::postBuild()
+{
+	const LLRect& viewrect = mPanelMainInventory->getRect();
+	setRect(LLRect(viewrect.mLeft - getRect().getWidth(), viewrect.mTop, viewrect.mLeft, viewrect.mTop - getRect().getHeight()));
+
+	childSetAction("All", selectAllTypes, this);
+	childSetAction("None", selectNoTypes, this);
+
+	mSpinSinceHours = getChild<LLSpinCtrl>("spin_hours_ago");
+	childSetCommitCallback("spin_hours_ago", onTimeAgo, this);
+
+	mSpinSinceDays = getChild<LLSpinCtrl>("spin_days_ago");
+	childSetCommitCallback("spin_days_ago", onTimeAgo, this);
+
+	//	mCheckSinceLogoff   = getChild<LLSpinCtrl>("check_since_logoff");
+	childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this);
+
+	childSetAction("Close", onCloseBtn, this);
+
+	updateElementsFromFilter();
+	return TRUE;
+}
+void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)
+{
+	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
+	if (!self) return;
+	
+	bool since_logoff=true;
+	if ( self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() )
+	{
+		since_logoff = false;
+	}
+	self->childSetValue("check_since_logoff", since_logoff);
+}
+
+void LLFloaterInventoryFinder::changeFilter(LLInventoryFilter* filter)
+{
+	mFilter = filter;
+	updateElementsFromFilter();
+}
+
+void LLFloaterInventoryFinder::updateElementsFromFilter()
+{
+	if (!mFilter)
+		return;
+
+	// Get data needed for filter display
+	U32 filter_types = mFilter->getFilterTypes();
+	std::string filter_string = mFilter->getFilterSubString();
+	LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState();
+	U32 hours = mFilter->getHoursAgo();
+
+	// update the ui elements
+	setTitle(mFilter->getName());
+
+	childSetValue("check_animation", (S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION));
+
+	childSetValue("check_calling_card", (S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD));
+	childSetValue("check_clothing", (S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE));
+	childSetValue("check_gesture", (S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE));
+	childSetValue("check_landmark", (S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK));
+	childSetValue("check_notecard", (S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD));
+	childSetValue("check_object", (S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT));
+	childSetValue("check_script", (S32) (filter_types & 0x1 << LLInventoryType::IT_LSL));
+	childSetValue("check_sound", (S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND));
+	childSetValue("check_texture", (S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE));
+	childSetValue("check_snapshot", (S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT));
+	childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS);
+	childSetValue("check_since_logoff", mFilter->isSinceLogoff());
+	mSpinSinceHours->set((F32)(hours % 24));
+	mSpinSinceDays->set((F32)(hours / 24));
+}
+
+void LLFloaterInventoryFinder::draw()
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_DRAW);
+	U32 filter = 0xffffffff;
+	BOOL filtered_by_all_types = TRUE;
+
+	if (!childGetValue("check_animation"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_ANIMATION);
+		filtered_by_all_types = FALSE;
+	}
+
+
+	if (!childGetValue("check_calling_card"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_CALLINGCARD);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_clothing"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_WEARABLE);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_gesture"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_GESTURE);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_landmark"))
+
+
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_LANDMARK);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_notecard"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_NOTECARD);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_object"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_OBJECT);
+		filter &= ~(0x1 << LLInventoryType::IT_ATTACHMENT);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_script"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_LSL);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_sound"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_SOUND);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_texture"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_TEXTURE);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_snapshot"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_SNAPSHOT);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!filtered_by_all_types)
+	{
+		// don't include folders in filter, unless I've selected everything
+		filter &= ~(0x1 << LLInventoryType::IT_CATEGORY);
+	}
+
+	// update the panel, panel will update the filter
+	mPanelMainInventory->getPanel()->setShowFolderState(getCheckShowEmpty() ?
+		LLInventoryFilter::SHOW_ALL_FOLDERS : LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+	mPanelMainInventory->getPanel()->setFilterTypes(filter);
+	if (getCheckSinceLogoff())
+	{
+		mSpinSinceDays->set(0);
+		mSpinSinceHours->set(0);
+	}
+	U32 days = (U32)mSpinSinceDays->get();
+	U32 hours = (U32)mSpinSinceHours->get();
+	if (hours > 24)
+	{
+		days += hours / 24;
+		hours = (U32)hours % 24;
+		mSpinSinceDays->set((F32)days);
+		mSpinSinceHours->set((F32)hours);
+	}
+	hours += days * 24;
+	mPanelMainInventory->getPanel()->setHoursAgo(hours);
+	mPanelMainInventory->getPanel()->setSinceLogoff(getCheckSinceLogoff());
+	mPanelMainInventory->setFilterTextFromFilter();
+
+	LLPanel::draw();
+}
+
+BOOL LLFloaterInventoryFinder::getCheckShowEmpty()
+{
+	return childGetValue("check_show_empty");
+}
+
+BOOL LLFloaterInventoryFinder::getCheckSinceLogoff()
+{
+	return childGetValue("check_since_logoff");
+}
+
+void LLFloaterInventoryFinder::onCloseBtn(void* user_data)
+{
+	LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data;
+	finderp->closeFloater();
+}
+
+// static
+void LLFloaterInventoryFinder::selectAllTypes(void* user_data)
+{
+	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
+	if(!self) return;
+
+	self->childSetValue("check_animation", TRUE);
+	self->childSetValue("check_calling_card", TRUE);
+	self->childSetValue("check_clothing", TRUE);
+	self->childSetValue("check_gesture", TRUE);
+	self->childSetValue("check_landmark", TRUE);
+	self->childSetValue("check_notecard", TRUE);
+	self->childSetValue("check_object", TRUE);
+	self->childSetValue("check_script", TRUE);
+	self->childSetValue("check_sound", TRUE);
+	self->childSetValue("check_texture", TRUE);
+	self->childSetValue("check_snapshot", TRUE);
+}
+
+//static
+void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
+{
+	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
+	if(!self) return;
+
+	self->childSetValue("check_animation", FALSE);
+	self->childSetValue("check_calling_card", FALSE);
+	self->childSetValue("check_clothing", FALSE);
+	self->childSetValue("check_gesture", FALSE);
+	self->childSetValue("check_landmark", FALSE);
+	self->childSetValue("check_notecard", FALSE);
+	self->childSetValue("check_object", FALSE);
+	self->childSetValue("check_script", FALSE);
+	self->childSetValue("check_sound", FALSE);
+	self->childSetValue("check_texture", FALSE);
+	self->childSetValue("check_snapshot", FALSE);
+}
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 759c86f3a02..47e745c9d3f 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -67,6 +67,7 @@
 #include "llinventorymodel.h"
 #include "llmenugl.h"
 #include "llmutelist.h"
+#include "llsidepaneltaskinfo.h"
 #include "llslurl.h"
 #include "llstatusbar.h"
 #include "llsurface.h"
@@ -4906,12 +4907,20 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
 	}
 	if (mSelectedObjects->getNumNodes())
 	{
-		LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect");
 		LLUUID inspect_item_id= LLUUID::null;
+#if 0		
+		LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect");
 		if(inspect_instance)
 		{
 			inspect_item_id = inspect_instance->getSelectedUUID();
 		}
+#endif
+		LLSidepanelTaskInfo *panel_task_info = LLSidepanelTaskInfo::getActivePanel();
+		if (panel_task_info)
+		{
+			inspect_item_id = panel_task_info->getSelectedUUID();
+		}
+
 		for (S32 pass = 0; pass < 2; pass++)
 		{
 			for (LLObjectSelection::iterator iter = mSelectedObjects->begin();
@@ -5494,12 +5503,19 @@ void dialog_refresh_all()
 	}
 
 	LLFloaterProperties::dirtyAll();
-	
+
+#if 0	
 	LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect");
 	if(inspect_instance)
 	{
 		inspect_instance->dirty();
 	}
+#endif
+	LLSidepanelTaskInfo *panel_task_info = LLSidepanelTaskInfo::getActivePanel();
+	if (panel_task_info)
+	{
+		panel_task_info->dirty();
+	}
 }
 
 S32 get_family_count(LLViewerObject *parent)
diff --git a/indra/newview/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp
index 85224567771..162198f1c55 100644
--- a/indra/newview/llsidepanelinventorysubpanel.cpp
+++ b/indra/newview/llsidepanelinventorysubpanel.cpp
@@ -87,7 +87,6 @@ void LLSidepanelInventorySubpanel::setVisible(BOOL visible)
 	if (visible)
 	{
 		dirty();
-		setIsEditing(FALSE);
 	}
 	LLPanel::setVisible(visible);
 }
@@ -123,6 +122,7 @@ void LLSidepanelInventorySubpanel::draw()
 void LLSidepanelInventorySubpanel::dirty()
 {
 	mIsDirty = TRUE;
+	setIsEditing(FALSE);
 }
 
 void LLSidepanelInventorySubpanel::updateVerbs()
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index 4284c95b130..01c832d7d56 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -71,6 +71,8 @@
 /// Class llsidepaneltaskinfo
 ///----------------------------------------------------------------------------
 
+LLSidepanelTaskInfo* LLSidepanelTaskInfo::sActivePanel = NULL;
+
 static LLRegisterPanelClassWrapper<LLSidepanelTaskInfo> t_task_info("sidepanel_task_info");
 
 // Default constructor
@@ -79,6 +81,14 @@ LLSidepanelTaskInfo::LLSidepanelTaskInfo()
 	setMouseOpaque(FALSE);
 }
 
+
+LLSidepanelTaskInfo::~LLSidepanelTaskInfo()
+{
+	if (sActivePanel == this)
+		sActivePanel = NULL;
+}
+
+// virtual
 BOOL LLSidepanelTaskInfo::postBuild()
 {
 	LLSidepanelInventorySubpanel::postBuild();
@@ -101,12 +111,20 @@ BOOL LLSidepanelTaskInfo::postBuild()
 	return TRUE;
 }
 
-LLSidepanelTaskInfo::~LLSidepanelTaskInfo()
+// virtual
+void LLSidepanelTaskInfo::setVisible(BOOL visible)
 {
-	// base class will take care of everything
+	LLPanel::setVisible(visible);
+	if (visible)
+	{
+		sActivePanel = this;
+	}
+	else
+	{
+		sActivePanel = NULL;
+	}
 }
 
-
 void LLSidepanelTaskInfo::refresh()
 {
 	LLButton*	BtnDeedToGroup = getChild<LLButton>("button deed");
@@ -1037,6 +1055,8 @@ void LLSidepanelTaskInfo::updateVerbs()
 	mBuyBtn->setVisible(!getIsEditing());
 
 	mOpenBtn->setEnabled(enable_object_open());
+	const LLViewerObject *obj = getFirstSelectedObject();
+	mEditBtn->setEnabled(obj && obj->permModify());
 }
 
 void LLSidepanelTaskInfo::onOpenButtonClicked()
@@ -1077,3 +1097,28 @@ void LLSidepanelTaskInfo::setObjectSelection(LLObjectSelectionHandle selection)
 {
 	mObjectSelection = selection;
 }
+
+LLSidepanelTaskInfo* LLSidepanelTaskInfo::getActivePanel()
+{
+	return sActivePanel;
+}
+
+LLViewerObject* LLSidepanelTaskInfo::getFirstSelectedObject()
+{
+	LLSelectNode *node = mObjectSelection->getFirstRootNode();
+	if (node)
+	{
+		return node->getObject();
+	}
+	return NULL;
+}
+
+const LLUUID& LLSidepanelTaskInfo::getSelectedUUID()
+{
+	const LLViewerObject* obj = getFirstSelectedObject();
+	if (obj)
+	{
+		return obj->getID();
+	}
+	return LLUUID::null;
+}
diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h
index 25a9e2d5772..b6dd4dfb2ce 100644
--- a/indra/newview/llsidepaneltaskinfo.h
+++ b/indra/newview/llsidepaneltaskinfo.h
@@ -45,6 +45,7 @@
 
 class LLNameBox;
 class LLCheckBoxCtrl;
+class LLViewerObject;
 
 class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel
 {
@@ -53,9 +54,14 @@ class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel
 	virtual ~LLSidepanelTaskInfo();
 
 	/*virtual*/	BOOL postBuild();
+	/*virtual*/ void setVisible(BOOL visible);
 
 	void setObjectSelection(LLObjectSelectionHandle selection);
 
+	const LLUUID& getSelectedUUID();
+	LLViewerObject* getFirstSelectedObject();
+
+	static LLSidepanelTaskInfo *getActivePanel();
 protected:
 	/*virtual*/ void refresh();	// refresh all labels as needed
 	/*virtual*/ void save();
@@ -102,6 +108,7 @@ class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel
 	LLButton*					mBuyBtn;
 
 	LLObjectSelectionHandle mObjectSelection;
+	static LLSidepanelTaskInfo* sActivePanel;
 };
 
 
-- 
GitLab


From 02608052592eb47aea7c8856e85d64aec086d658 Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Thu, 5 Nov 2009 22:05:48 +0200
Subject: [PATCH 184/306] Fixed normal bug EXT-1420(Menu context (People side
 panel) sorting is not working)

--HG--
branch : product-engine
---
 indra/newview/llpanelpeople.cpp                                | 3 ---
 .../skins/default/xui/en/menu_people_friends_view_sort.xml     | 3 ---
 2 files changed, 6 deletions(-)

diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index c8bb3d5353c..65a7b5322b5 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -992,9 +992,6 @@ void LLPanelPeople::onFriendsViewSortMenuItemClicked(const LLSD& userdata)
 		mAllFriendList->toggleIcons();
 		mOnlineFriendList->toggleIcons();
 	}
-	else if (chosen_item == "organize_offline")
-	{
-	}
 }
 
 void LLPanelPeople::onGroupsViewSortMenuItemClicked(const LLSD& userdata)
diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
index eedb4383bbf..f1117d14191 100644
--- a/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
@@ -31,9 +31,6 @@
      function="CheckControl"
      parameter="FriendsListShowIcons" />
   </menu_item_check>
-  <menu_item_call name="organize_offline" label="Organize Offline Friends">
-    <menu_item_call.on_click function="People.Friends.ViewSort.Action" userdata="organize_offline" />
-  </menu_item_call>
   <menu_item_separator layout="topleft" />
   <menu_item_call name="show_blocked_list" label="Show Blocked Residents &amp; Objects">
     <menu_item_call.on_click function="SideTray.ShowPanel" parameter="panel_block_list_sidetray" />
-- 
GitLab


From b60d80542f240c869cf690382cf9cf0278e16e75 Mon Sep 17 00:00:00 2001
From: Rick Pasetto <rick@lindenlab.com>
Date: Thu, 5 Nov 2009 12:10:30 -0800
Subject: [PATCH 185/306] Remove scrolling controls (not to spec)

---
 .../skins/default/xui/en/panel_prim_media_controls.xml        | 4 ++++
 1 file changed, 4 insertions(+)

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 d384abf038a..fc5ccdb63e6 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
@@ -412,6 +412,8 @@ function="MediaCtrl.CommitURL" />
 	  </button>
 	</layout_panel>
 	<!-- Scroll pad -->
+<!--
+disabled
 	<layout_panel
 		name="media_panel_scroll"
 		auto_resize="false"
@@ -477,6 +479,8 @@ function="MediaCtrl.CommitURL" />
 		  min_width="8"
 		  width="8" />
 	</layout_panel>
+disabled
+-->
 	<layout_panel
 		name="zoom_frame"
 		auto_resize="false"
-- 
GitLab


From ebf74a7b38826eb113162cd7bca4e3b76318e4d3 Mon Sep 17 00:00:00 2001
From: "Justin C. Rounds (Chuck)" <chuck@lindenlab.com>
Date: Thu, 5 Nov 2009 15:16:27 -0500
Subject: [PATCH 186/306] Updated TimeTextColor.
 http://jira.secondlife.com/browse/EXT-2138

---
 indra/newview/skins/default/colors.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 1e0da131628..572a4cf9e95 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -651,7 +651,7 @@
 	 value="0 0 0 .33" />
     <color
      name="TimeTextColor"
-     reference="LtGray_50" />
+     reference="LtGray" />
     <color
      name="TitleBarFocusColor"
      reference="White_10" />
-- 
GitLab


From 6ce9f3b047084a9b947f66d041645238feb4b09b Mon Sep 17 00:00:00 2001
From: Erica <erica@lindenlab.com>
Date: Thu, 5 Nov 2009 12:53:41 -0800
Subject: [PATCH 187/306] EXT-2160 texture picker cancel button should be on
 the right, General texture and color picker cleanup

---
 .../default/xui/en/floater_color_picker.xml   |  22 ++--
 .../default/xui/en/floater_texture_ctrl.xml   | 105 +++++++++---------
 2 files changed, 67 insertions(+), 60 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_color_picker.xml b/indra/newview/skins/default/xui/en/floater_color_picker.xml
index e4b9d3f6bc7..4380ff8f4b0 100644
--- a/indra/newview/skins/default/xui/en/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_color_picker.xml
@@ -168,26 +168,29 @@
     <check_box
      follows="left|bottom"
      height="20"
-     label="Apply Now"
+     label="Apply now"
      layout="topleft"
      left="12"
      name="apply_immediate"
      top_pad="185"
      width="100" />
-    <button
-     follows="left|top"
-     height="32"
+         <button
+     follows="left|bottom"
+     height="28"
+     image_selected="eye_button_active.tga"
+     image_unselected="eye_button_inactive.tga"
      layout="topleft"
-     left_pad="30"
-     name="color_pipette"
-     width="32" />
+     left_pad="50"
+     name="Pipette"
+     width="28" />
     <button
      follows="right|bottom"
      height="20"
      label="Ok"
-     label_selected="Select"
+     label_selected="Ok"
      layout="topleft"
-     left_pad="50"
+     right="-120"
+     top_delta="9"
      name="select_btn"
      width="100" />
     <button
@@ -197,6 +200,7 @@
      label_selected="Cancel"
      layout="topleft"
      left_pad="5"
+     right="-10"
      name="cancel_btn"
      width="100" />
     <text
diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
index 88afa549725..4679ae467df 100644
--- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
@@ -23,14 +23,16 @@
      type="string"
      length="1"
      follows="left|top"
+     text_color="White"
+     font="SansSerifBig"
      halign="center"
-     height="14"
+     height="17"
      layout="topleft"
      left="4"
      name="Multiple"
      top="96"
      width="163">
-        Multiple
+        Multiple textures
     </text>
     <text
      type="string"
@@ -42,7 +44,7 @@
      name="unknown"
      top_pad="80"
      width="163">
-        Dimensions: [DIMENSIONS]
+        Size: [DIMENSIONS]
     </text>
     <button
      enabled="false"
@@ -55,7 +57,7 @@
      left_delta="0"
      name="Default"
      top_pad="4"
-     width="64" />
+     width="80" />
     <button
      enabled="false"
      follows="left|bottom"
@@ -67,7 +69,7 @@
      left_pad="4"
      name="None"
      top_delta="0"
-     width="64" />
+     width="80" />
     <button
      follows="left|bottom"
      font="SansSerifSmall"
@@ -77,74 +79,75 @@
      layout="topleft"
      left="4"
      name="Blank"
-     top="232"
-     width="64" />
-    <check_box
-     height="24"
+     top_pad="5"
+     width="80" />
+         <button
+     follows="left|bottom"
+     height="28"
+     image_selected="eye_button_active.tga"
+     image_unselected="eye_button_inactive.tga"
+     layout="topleft"
+     left_pad="50"
+     top_delta="3"
+     name="Pipette"
+     width="28" />
+   <check_box
+     follows="left|bottom"
+     height="20"
      initial_value="true"
-     label="Show Folders"
+     label="Apply now"
      layout="topleft"
-     left="175"
-     name="show_folders_check"
-     top="20"
-     width="201" />
+     left="4"
+     name="apply_immediate_check"
+     top="262"
+     width="120" />
     <filter_editor
      follows="left|top|right"
-     height="16"
-     label="Type here to search"
+     height="23"
+     label="Filter textures"
      layout="topleft"
-     left_delta="0"
+     left="175"
      name="inventory search editor"
-     top_delta="0"
+     top="20"
      width="231" />
     <inventory_panel
      allow_multi_select="false"
-     border="true"
-     follows="left|top|right|bottom"
-     height="216"
+     bg_visible="true"
+     bg_alpha_color="DkGray2"
+     border="false"
+     follows="all"
+     height="200"
      layout="topleft"
      left_delta="0"
      name="inventory panel"
      top_pad="4"
      width="231" />
-    <check_box
-     follows="left|bottom"
-     height="20"
-     initial_value="true"
-     label="Apply Immediately"
-     layout="topleft"
-     left="4"
-     name="apply_immediate_check"
-     top="262"
-     width="150" />
-    <button
-     follows="left|bottom"
-     height="32"
-     image_selected="eye_button_active.tga"
-     image_unselected="eye_button_inactive.tga"
+     <check_box
+     height="14"
+     initial_value="false"
+     label="Show folders"
      layout="topleft"
-     left="139"
-     name="Pipette"
-     top="250"
-     width="32" />
-    <button
+     name="show_folders_check"
+     top_pad="0"
+     left_delta="-3"
+     width="200" />
+         <button
      follows="right|bottom"
      height="20"
-     label="Cancel"
-     label_selected="Cancel"
+     label="Ok"
+     label_selected="Ok"
      layout="topleft"
-     left="186"
-     name="Cancel"
-     top="262"
+     right="-120"
+     name="Select"
      width="100" />
     <button
      follows="right|bottom"
      height="20"
-     label="Select"
-     label_selected="Select"
+     label="Cancel"
+     label_selected="Cancel"
      layout="topleft"
-     left_pad="4"
-     name="Select"
-     top_delta="0"
+     right="-10"
+     left_pad="5"
+     name="Cancel"
      width="100" />
 </floater>
-- 
GitLab


From c9e91056fd8029dfc323d9a08c24d38e488a3de3 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Thu, 5 Nov 2009 13:49:15 -0800
Subject: [PATCH 188/306] fixed crash on login

reviewed by James
---
 indra/newview/skins/default/xui/en/panel_side_tray.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml
index d3de09ab4ce..3582de1c711 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <!-- Side tray cannot show background because it is always 
 	partially on screen to hold tab buttons. -->
-<panel
+<side_tray
   name="sidebar"
   background_visible="false"
   mouse_opaque="true"
@@ -147,4 +147,4 @@
       />
   </sidetray_tab>
 
-</panel>
+</side_tray>
-- 
GitLab


From 50164c2d8663039b6b10e94e84b689da6e794fbb Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Thu, 5 Nov 2009 13:49:59 -0800
Subject: [PATCH 189/306] removed some more picture_style attributes

---
 .../newview/skins/default/xui/en/panel_bottomtray.xml  |  1 -
 indra/newview/skins/default/xui/en/panel_people.xml    | 10 ----------
 .../default/xui/en/panel_side_tray_tab_caption.xml     |  1 -
 3 files changed, 12 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index dcfd0af36e9..f833e0a1cbb 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -271,7 +271,6 @@
                follows="right"
                flash_color="EmphasisColor"
                name="Unread"
-               picture_style="true"
                image_overlay="Notices_Unread"
                width="20"
                />
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 5ab2e623e46..d6e2aa64fa5 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -94,7 +94,6 @@ background_visible="true"
              layout="topleft"
              left="10"
              name="nearby_view_sort_btn"
-             picture_style="true"
              top="5"
              width="18" />
              <button
@@ -106,7 +105,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="add_friend_btn"
-                 picture_style="true"
                  top_delta="0"
                  tool_tip="Add selected resident to your friends List"
                  width="18" />
@@ -180,7 +178,6 @@ background_visible="true"
                layout="topleft"
                left="10"
                name="friends_viewsort_btn"
-               picture_style="true"
                top="5"
                width="18" />
                 <button
@@ -192,7 +189,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="add_btn"
-                 picture_style="true"
                  tool_tip="Offer friendship to a resident"
                  top_delta="0"
                  width="18" />
@@ -206,7 +202,6 @@ background_visible="true"
                  left_pad="10"
                  right="-10"
                  name="del_btn"
-                 picture_style="true"
                  tool_tip="Remove selected person from your Friends list"
                  top_delta="0"
                  width="18" />
@@ -249,7 +244,6 @@ background_visible="true"
                layout="topleft"
                left="10"
                name="groups_viewsort_btn"
-               picture_style="true"
                top="7"
                width="18" />
                 <button
@@ -261,7 +255,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="plus_btn"
-                 picture_style="true"
                  tool_tip="Join group/Create new group"
                  top_delta="0"
                  width="18" />
@@ -274,7 +267,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="24"
                  name="activate_btn"
-                 picture_style="true"
                  tool_tip="Activate selected group"
                  top_delta="5"
                  width="10" />
@@ -320,7 +312,6 @@ background_visible="true"
                layout="topleft"
                left="10"
                name="recent_viewsort_btn"
-               picture_style="true"
                top="7"
                width="18" />
               <button
@@ -332,7 +323,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="add_friend_btn"
-                 picture_style="true"
                  top_delta="0"
                  tool_tip="Add selected resident to your friends List"
                  width="18" />
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml
index 4c8bb68e549..0a9c70303e1 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml
@@ -25,7 +25,6 @@
      image_selected="Icon_Help_Press"
      image_unselected="Icon_Help_Foreground"
      image_disabled="Icon_Help_Press"
-     picture_style="true"
      layout="topleft"
      name="show_help"
      top="10"
-- 
GitLab


From d7a2ddc0c065847c91ae593f9987ad32bf13a74e Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 5 Nov 2009 13:51:26 -0800
Subject: [PATCH 190/306] EXT-2262 Arrow keys should move cursor in chat entry
 field. See Communications Spec for design.  Arrow keys still move you if text
 chat field is empty.  Also fixed ctrl-up/ctrl-down for recently chatted
 lines. Reviewed with Richard.

---
 indra/newview/app_settings/settings.xml       |  4 +-
 indra/newview/llviewerwindow.cpp              | 39 +++++++++----------
 .../xui/en/panel_preferences_advanced.xml     |  2 +-
 3 files changed, 22 insertions(+), 23 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 7254fff664a..02fd05458b6 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -133,7 +133,7 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>ArrowKeysMoveAvatar</key>
+    <key>ArrowKeysAlwaysMove</key>
     <map>
       <key>Comment</key>
       <string>While cursor is in chat entry box, arrow keys still control your avatar</string>
@@ -142,7 +142,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>1</integer>
+      <integer>0</integer>
     </map>
     <key>AskedAboutCrashReports</key>
     <map>
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index b574a9c110d..765f4e4476c 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2113,31 +2113,30 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
 		// arrow keys move avatar while chatting hack
 		if (chat_editor && chat_editor->hasFocus())
 		{
-			if (chat_editor->getText().empty() || gSavedSettings.getBOOL("ArrowKeysMoveAvatar"))
+			// let Control-Up and Control-Down through for chat line history
+			if (!(key == KEY_UP && mask == MASK_CONTROL)
+				&& !(key == KEY_DOWN && mask == MASK_CONTROL))
 			{
-				switch(key)
+				// If text field is empty, there's no point in trying to move
+				// cursor with arrow keys, so allow movement
+				if (chat_editor->getText().empty() 
+					|| gSavedSettings.getBOOL("ArrowKeysAlwaysMove"))
 				{
-				case KEY_LEFT:
-				case KEY_RIGHT:
-				case KEY_UP:
-					// let CTRL UP through for chat line history
-					if( MASK_CONTROL == mask )
+					switch(key)
 					{
+					case KEY_LEFT:
+					case KEY_RIGHT:
+					case KEY_UP:
+					case KEY_DOWN:
+					case KEY_PAGE_UP:
+					case KEY_PAGE_DOWN:
+					case KEY_HOME:
+						// when chatbar is empty or ArrowKeysAlwaysMove set,
+						// pass arrow keys on to avatar...
+						return FALSE;
+					default:
 						break;
 					}
-				case KEY_DOWN:
-					// let CTRL DOWN through for chat line history
-					if( MASK_CONTROL == mask )
-					{
-						break;
-					}
-				case KEY_PAGE_UP:
-				case KEY_PAGE_DOWN:
-				case KEY_HOME:
-					// when chatbar is empty or ArrowKeysMoveAvatar set, pass arrow keys on to avatar...
-					return FALSE;
-				default:
-					break;
 				}
 			}
 		}
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index f98f3a08503..613decad8d3 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -212,7 +212,7 @@ Avatars:
      width="256"
      top_pad="0"/>
     <check_box
-     control_name="ArrowKeysMoveAvatar"
+     control_name="ArrowKeysAlwaysMove"
      follows="left|top"
      height="20"
      label="Arrow keys always move me"
-- 
GitLab


From 04add8806e49f0e5355666b9b8186d6e0bf78781 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Thu, 5 Nov 2009 16:53:35 -0500
Subject: [PATCH 191/306] Support QAModeTermCode var for unattended shutdown on
 LL_ERRS. Normally LL_ERRS in a developer build of the viewer pops up an OS
 message box with the text of the LL_ERRS log message, requiring user
 intervention to proceed. This isn't good for unattended testing, especially
 on Parabuild machines. Running the viewer with '--set QAModeTermCode n' for
 some 0 < n < 256 will, on LL_ERRS, cause the viewer to terminate immediately
 with _exit(n).

---
 indra/newview/app_settings/settings.xml | 13 ++++++++++++-
 indra/newview/llappviewer.cpp           | 16 ++++++++++++++--
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 7254fff664a..da7caad21e5 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5473,7 +5473,18 @@
     <key>QAModeEventHostPort</key>
     <map>
       <key>Comment</key>
-      <string>Enable Testing Features.</string>
+      <string>Port on which lleventhost should listen</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>-1</integer>
+    </map>
+    <key>QAModeTermCode</key>
+    <map>
+      <key>Comment</key>
+      <string>On LL_ERRS, terminate with this code instead of OS message box</string>
       <key>Persist</key>
       <integer>0</integer>
       <key>Type</key>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 873215169ee..e95eec47412 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -620,7 +620,19 @@ bool LLAppViewer::init()
 	
 	if (!initConfiguration())
 		return false;
-	
+
+	// Although initLogging() is the right place to mess with
+	// setFatalFunction(), we can't query gSavedSettings until after
+	// initConfiguration().
+	S32 rc(gSavedSettings.getS32("QAModeTermCode"));
+	if (rc >= 0)
+	{
+		// QAModeTermCode set, terminate with that rc on LL_ERRS. Use _exit()
+		// rather than exit() because normal cleanup depends too much on
+		// successful startup!
+		LLError::setFatalFunction(boost::bind(_exit, rc));
+	}
+
     mAlloc.setProfilingEnabled(gSavedSettings.getBOOL("MemProfiling"));
 
     // *NOTE:Mani - LLCurl::initClass is not thread safe. 
@@ -1665,7 +1677,7 @@ bool LLAppViewer::initLogging()
 	LLError::initForApplication(
 				gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, ""));
 	LLError::setFatalFunction(errorCallback);
-	
+
 	// Remove the last ".old" log file.
 	std::string old_log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
 							     "SecondLife.old");
-- 
GitLab


From 7b33c9b862d478dc488d86593116ef35030321f2 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Thu, 5 Nov 2009 16:55:31 -0500
Subject: [PATCH 192/306] Produce slightly more info for bad
 LLDir::setLindenUserDir() call

---
 indra/llvfs/lldir.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp
index 781321e5e40..c0c6e592d58 100644
--- a/indra/llvfs/lldir.cpp
+++ b/indra/llvfs/lldir.cpp
@@ -580,7 +580,7 @@ void LLDir::setLindenUserDir(const std::string &first, const std::string &last)
 	}
 	else
 	{
-		llerrs << "Invalid name for LLDir::setLindenUserDir" << llendl;
+		llerrs << "Invalid name for LLDir::setLindenUserDir(first='" << first << "', last='" << last << "')" << llendl;
 	}
 
 	dumpCurrentDirectories();	
-- 
GitLab


From 74f74da3cf43e990bffb186a8e2e9c4104bd07da Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 5 Nov 2009 14:17:53 -0800
Subject: [PATCH 193/306] Only use ctrl-up/down for recently typed chat lines
 if chat field is empty. Otherwise it discards a typed line in progress.

---
 indra/newview/llviewerwindow.cpp | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 765f4e4476c..9b3dbcd2f67 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2113,14 +2113,14 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
 		// arrow keys move avatar while chatting hack
 		if (chat_editor && chat_editor->hasFocus())
 		{
-			// let Control-Up and Control-Down through for chat line history
-			if (!(key == KEY_UP && mask == MASK_CONTROL)
-				&& !(key == KEY_DOWN && mask == MASK_CONTROL))
+			// If text field is empty, there's no point in trying to move
+			// cursor with arrow keys, so allow movement
+			if (chat_editor->getText().empty() 
+				|| gSavedSettings.getBOOL("ArrowKeysAlwaysMove"))
 			{
-				// If text field is empty, there's no point in trying to move
-				// cursor with arrow keys, so allow movement
-				if (chat_editor->getText().empty() 
-					|| gSavedSettings.getBOOL("ArrowKeysAlwaysMove"))
+				// let Control-Up and Control-Down through for chat line history,
+				if (!(key == KEY_UP && mask == MASK_CONTROL)
+					&& !(key == KEY_DOWN && mask == MASK_CONTROL))
 				{
 					switch(key)
 					{
-- 
GitLab


From 44fc2e5ba3a4aee321f13e0c0486a171725007a9 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 5 Nov 2009 14:18:16 -0800
Subject: [PATCH 194/306] Restore the media focus ring.  This fixes DEV-42166.

Media focus is still tracked separately from LLSelectMgr (which was a change made during a refactor a while ago), but LLViewerMediaFocus now keeps LLSelectMgr updated with the current media focus when it changes.

Added a special case for media focus to LLSelectMgr::deselectAllIfTooFar(), since it was making the focus ring not show up when media focus was on distant media.
---
 indra/newview/llselectmgr.cpp        | 23 ++++++++---------------
 indra/newview/llviewermediafocus.cpp |  7 +++++++
 indra/newview/llviewermediafocus.h   |  2 ++
 3 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 26e668adb5a..dd07a3c015f 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -3406,7 +3406,7 @@ void LLSelectMgr::deselectAll()
 	{
 		return;
 	}
-
+		
 	// Zap the angular velocity, as the sim will set it to zero
 	for (LLObjectSelection::iterator iter = mSelectedObjects->begin();
 		 iter != mSelectedObjects->end(); iter++ )
@@ -3496,6 +3496,7 @@ void LLSelectMgr::deselectAllIfTooFar()
 	LLVector3d selectionCenter = getSelectionCenterGlobal();
 	if (gSavedSettings.getBOOL("LimitSelectDistance")
 		&& (!mSelectedObjects->getPrimaryObject() || !mSelectedObjects->getPrimaryObject()->isAvatar())
+		&& (mSelectedObjects->getPrimaryObject() != LLViewerMediaFocus::getInstance()->getFocusedObject())
 		&& !mSelectedObjects->isAttachment()
 		&& !selectionCenter.isExactlyZero())
 	{
@@ -4912,6 +4913,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
 		{
 			inspect_item_id = inspect_instance->getSelectedUUID();
 		}
+		LLUUID focus_item_id = LLViewerMediaFocus::getInstance()->getFocusedObjectID();
 		for (S32 pass = 0; pass < 2; pass++)
 		{
 			for (LLObjectSelection::iterator iter = mSelectedObjects->begin();
@@ -4925,7 +4927,11 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
 				{
 					continue;
 				}
-				if(objectp->getID() == inspect_item_id)
+				if (objectp->getID() == focus_item_id)
+				{
+					node->renderOneSilhouette(gFocusMgr.getFocusColor());
+				}
+				else if(objectp->getID() == inspect_item_id)
 				{
 					node->renderOneSilhouette(sHighlightInspectColor);
 				}
@@ -4979,19 +4985,6 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
 		}
 	}
 
-#if 0	
-	// Hilight focused media object
-	{
-		LLViewerObject* objectp = LLViewerMediaFocus::getInstance()->getFocusedObject();
-		if(objectp)
-		{
-			// FIXME: how do I construct a silhouette for an object that's not selected?
-			// Would we need to add another LLObjectSelectionHandle for this purpose?
-			node->renderOneSilhouette(gFocusMgr.getFocusColor());
-		}
-	}
-#endif
-
 	if (for_hud && avatar)
 	{
 		glMatrixMode(GL_PROJECTION);
diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
index 657c58364f6..b2a0fa4b1c7 100644
--- a/indra/newview/llviewermediafocus.cpp
+++ b/indra/newview/llviewermediafocus.cpp
@@ -77,6 +77,10 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
 	{
 		old_media_impl->focus(false);
 	}
+	
+	// Always clear the current selection.  If we're setting focus on a face, we'll reselect the correct object below.
+	LLSelectMgr::getInstance()->deselectAll();
+	mSelection = NULL;
 
 	if (media_impl.notNull() && objectp.notNull())
 	{
@@ -87,6 +91,9 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
 		mFocusedObjectFace = face;
 		mFocusedObjectNormal = pick_normal;
 		
+		// Set the selection in the selection manager so we can draw the focus ring.
+		mSelection = LLSelectMgr::getInstance()->selectObjectOnly(objectp, face);
+
 		// Focusing on a media face clears its disable flag.
 		media_impl->setDisabled(false);
 
diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h
index e5f36d341c4..89ee0ae2831 100644
--- a/indra/newview/llviewermediafocus.h
+++ b/indra/newview/llviewermediafocus.h
@@ -76,6 +76,7 @@ class LLViewerMediaFocus :
 	LLViewerMediaImpl* getFocusedMediaImpl();
 	LLViewerObject* getFocusedObject();
 	S32 getFocusedFace() { return mFocusedObjectFace; }
+	LLUUID getFocusedObjectID() { return mFocusedObjectID; }
 	
 	// These look up (by uuid) and return the values that were set with setHoverFace.  They will return null if the objects have been destroyed.
 	LLViewerMediaImpl* getHoverMediaImpl();
@@ -95,6 +96,7 @@ class LLViewerMediaFocus :
 private:
 	
 	LLHandle<LLPanelPrimMediaControls> mMediaControls;
+	LLObjectSelectionHandle mSelection;
 	
 	LLUUID mFocusedObjectID;
 	S32 mFocusedObjectFace;
-- 
GitLab


From 680512c9e646be0cbef3f1c471a6792b2ddb638f Mon Sep 17 00:00:00 2001
From: "Justin C. Rounds (Chuck)" <chuck@lindenlab.com>
Date: Thu, 5 Nov 2009 17:48:58 -0500
Subject: [PATCH 195/306] Removed attributes that were causing parse errors.

---
 .../skins/default/xui/en/panel_notification.xml       | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml
index 0d34aa0f081..34a185fb44a 100644
--- a/indra/newview/skins/default/xui/en/panel_notification.xml
+++ b/indra/newview/skins/default/xui/en/panel_notification.xml
@@ -2,9 +2,6 @@
 <panel
   background_opaque="false"
       border_visible="false"
-  border = "false"
-  border_drop_shadow_visible = "false"
-  drop_shadow_visible = "false"
   background_visible="true"
   bg_alpha_color="0.3 0.3 0.3 0"
   bg_opaque_color="0.3 0.3 0.3 0"
@@ -18,12 +15,7 @@
   <!-- THIS PANEL CONTROLS TOAST HEIGHT? -->
   <panel
       border_visible="false"
-      drop_shadow="false"
  bevel_style="none"
- border_style="none"
-  border = "false"
-  border_drop_shadow_visible = "false"
-  drop_shadow_visible = "false"
     background_visible="true"
   bg_alpha_color="0.3 0.3 0.3 0"
   bg_opaque_color="0.3 0.3 0.3 0"
@@ -67,9 +59,6 @@
 	v_pad="0"
       bg_readonly_color="0.0 0.0 0.0 0"
       border_visible="false"
-	  border = "false"
-	  border_drop_shadow_visible = "false"
-	  drop_shadow_visible = "false"
       embedded_items="false"
       enabled="false"
       follows="left|right|top|bottom"
-- 
GitLab


From c1a65fcd9dd60fd966ca92b7a83b21a0d693441f Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 5 Nov 2009 15:29:01 -0800
Subject: [PATCH 196/306] Don't print every Windlight param file loaded.

---
 indra/newview/llwlparammanager.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
index 1581153c199..c6fd35c1422 100644
--- a/indra/newview/llwlparammanager.cpp
+++ b/indra/newview/llwlparammanager.cpp
@@ -196,7 +196,7 @@ void LLWLParamManager::loadPreset(const std::string & name,bool propagate)
 	escaped_filename += ".xml";
 
 	std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", escaped_filename));
-	llinfos << "Loading WindLight sky setting from " << pathName << llendl;
+	//llinfos << "Loading WindLight sky setting from " << pathName << llendl;
 
 	llifstream presetsXML;
 	presetsXML.open(pathName.c_str());
-- 
GitLab


From e096fa3480a04c35cfbd2274b08899b4ea6639f6 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 5 Nov 2009 15:31:22 -0800
Subject: [PATCH 197/306] EXT-2032 Accordion header title is black (hard to
 read) and cannot be configured in XUI XML Font and color can be set in
 accordion_tab.xml

---
 indra/newview/skins/default/xui/en/widgets/accordion_tab.xml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
index fcfe89c6530..1924568cc1e 100644
--- a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
+++ b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <accordion_tab
+    font="SansSerifBold"
     header_bg_color="DkGray2"
-    header_txt_color="LtGray"
     header_collapse_img="Accordion_ArrowClosed_Off"
     header_collapse_img_pressed="Accordion_ArrowClosed_Press"
     header_expand_img="Accordion_ArrowOpened_Off"
@@ -10,4 +10,5 @@
     header_image_over="Accordion_Over"
     header_image_pressed="Accordion_Press"
     header_image_selected="Accordion_Selected"
+    header_text_color="LtGray" 
     />
-- 
GitLab


From 0a7290772a6b39555adb966c7a48ef44151c1f05 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Thu, 5 Nov 2009 15:36:11 -0800
Subject: [PATCH 198/306] moved scroll_column_header default params to
 scroll_column_header.xml reviewed by James

---
 indra/llui/llscrolllistcolumn.cpp                     | 11 +++--------
 indra/llui/llscrolllistctrl.cpp                       |  2 +-
 .../default/xui/en/widgets/scroll_column_header.xml   |  9 +++++++++
 3 files changed, 13 insertions(+), 9 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml

diff --git a/indra/llui/llscrolllistcolumn.cpp b/indra/llui/llscrolllistcolumn.cpp
index ba53f848774..d2813412022 100644
--- a/indra/llui/llscrolllistcolumn.cpp
+++ b/indra/llui/llscrolllistcolumn.cpp
@@ -44,6 +44,9 @@
 
 const S32 MIN_COLUMN_WIDTH = 20;
 
+// defaults for LLScrollColumnHeader param block pulled from widgets/scroll_column_header.xml
+static LLWidgetNameRegistry::StaticRegistrar sRegisterColumnHeaderParams(&typeid(LLScrollColumnHeader::Params), "scroll_column_header");
+
 //---------------------------------------------------------------------------
 // LLScrollColumnHeader
 //---------------------------------------------------------------------------
@@ -51,15 +54,7 @@ LLScrollColumnHeader::Params::Params()
 :	column("column")
 {
 	name  = "column_header";
-	image_unselected.name("square_btn_32x128.tga");
-	image_selected.name("square_btn_selected_32x128.tga");
-	image_disabled.name("square_btn_32x128.tga");
-	image_disabled_selected.name("square_btn_selected_32x128.tga");
-	image_overlay.name("combobox_arrow.tga");
-	image_overlay_alignment("right");
-	font_halign = LLFontGL::LEFT;
 	tab_stop(false);
-	scale_image(true);
 }
 
 
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index a6cd6412e50..1c2c02e1cc1 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -2624,7 +2624,7 @@ void LLScrollListCtrl::addColumn(const LLScrollListColumn::Params& column_params
 
 			LLRect temp_rect = LLRect(left,top+mHeadingHeight,right,top);
 
-			LLScrollColumnHeader::Params params;
+			LLScrollColumnHeader::Params params(LLUICtrlFactory::getDefaultParams<LLScrollColumnHeader>());
 			params.name = "btn_" + name;
 			params.rect = temp_rect;
 			params.column = new_column;
diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml b/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml
new file mode 100644
index 00000000000..0794b49a0c6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<scroll_column_header image_unselected="square_btn_32x128.tga"
+                      image_selected="square_btn_selected_32x128.tga"
+                      image_disabled="square_btn_32x128.tga"
+                      image_disabled_selected="square_btn_selected_32x128.tga"
+                      image_overlay="combobox_arrow.tga"
+                      image_overlay_alignment="right"
+                      halign="left"
+                      scale_image="true"/>
-- 
GitLab


From 93e877a5ce9208f37872614a5b4ee2fabc3cbf11 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Thu, 5 Nov 2009 15:36:59 -0800
Subject: [PATCH 199/306] LLSpeakButton now cleans up after itself by removing
 transientfloatermgr references

---
 indra/newview/llspeakbutton.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp
index cd765b0338f..0b9c81dcc13 100644
--- a/indra/newview/llspeakbutton.cpp
+++ b/indra/newview/llspeakbutton.cpp
@@ -120,6 +120,8 @@ LLSpeakButton::LLSpeakButton(const Params& p)
 
 LLSpeakButton::~LLSpeakButton()
 {
+	LLTransientFloaterMgr::getInstance()->removeControlView(mSpeakBtn);
+	LLTransientFloaterMgr::getInstance()->removeControlView(mShowBtn);
 }
 
 void LLSpeakButton::setSpeakBtnToggleState(bool state)
-- 
GitLab


From 81192236ac44ea500ea6ec6f8de32be11e9165ca Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 5 Nov 2009 16:08:04 -0800
Subject: [PATCH 200/306] Fix for DEV-39258.

When the amount of the texture that's being drawn by the plugin shrinks in either width or height, reallocate the texture (which clears it).
---
 indra/newview/llviewermedia.cpp | 14 ++++++++++++--
 indra/newview/llviewermedia.h   |  2 ++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 55e4f28e75f..40bf9fb1fe2 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -658,6 +658,8 @@ LLViewerMediaImpl::LLViewerMediaImpl(	  const LLUUID& texture_id,
 	mMediaAutoScale(media_auto_scale),
 	mMediaLoop(media_loop),
 	mNeedsNewTexture(true),
+	mTextureUsedWidth(0),
+	mTextureUsedHeight(0),
 	mSuspendUpdates(false),
 	mVisible(true),
 	mLastSetCursor( UI_CURSOR_ARROW ),
@@ -1568,8 +1570,11 @@ LLViewerMediaTexture* LLViewerMediaImpl::updatePlaceholderImage()
 	
 	if (mNeedsNewTexture 
 		|| placeholder_image->getUseMipMaps()
-		|| placeholder_image->getWidth() != mMediaSource->getTextureWidth()
-		|| placeholder_image->getHeight() != mMediaSource->getTextureHeight())
+		|| (placeholder_image->getWidth() != mMediaSource->getTextureWidth())
+		|| (placeholder_image->getHeight() != mMediaSource->getTextureHeight())
+		|| (mTextureUsedWidth > mMediaSource->getWidth())
+		|| (mTextureUsedHeight > mMediaSource->getHeight())
+		)
 	{
 		LL_DEBUGS("Media") << "initializing media placeholder" << LL_ENDL;
 		LL_DEBUGS("Media") << "movie image id " << mTextureId << LL_ENDL;
@@ -1601,6 +1606,11 @@ LLViewerMediaTexture* LLViewerMediaImpl::updatePlaceholderImage()
 		// FIXME
 //		placeholder_image->mIsMediaTexture = true;
 		mNeedsNewTexture = false;
+				
+		// If the amount of the texture being drawn by the media goes down in either width or height, 
+		// recreate the texture to avoid leaving parts of the old image behind.
+		mTextureUsedWidth = mMediaSource->getWidth();
+		mTextureUsedHeight = mMediaSource->getHeight();
 	}
 	
 	return placeholder_image;
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index d6dde0c93e3..4cb08177353 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -306,6 +306,8 @@ class LLViewerMediaImpl
 	bool mMediaAutoScale;
 	bool mMediaLoop;
 	bool mNeedsNewTexture;
+	S32 mTextureUsedWidth;
+	S32 mTextureUsedHeight;
 	bool mSuspendUpdates;
 	bool mVisible;
 	ECursorType mLastSetCursor;
-- 
GitLab


From 29d8ee76f12e151c0e305933cc7de2daed661430 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Thu, 5 Nov 2009 16:30:11 -0800
Subject: [PATCH 201/306] LLChiclet cleans up its connection to
 LLTransientFloaterMgr now and panel_stand_stop_flying is visible by default
 while its contents are not

---
 indra/newview/llchiclet.cpp                                    | 2 ++
 indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 53c4bb32ca7..c200a970588 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -812,6 +812,8 @@ LLChicletPanel::LLChicletPanel(const Params&p)
 
 LLChicletPanel::~LLChicletPanel()
 {
+	LLTransientFloaterMgr::getInstance()->removeControlView(mLeftScrollButton);
+	LLTransientFloaterMgr::getInstance()->removeControlView(mRightScrollButton);
 
 }
 
diff --git a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml
index c8703aa895a..b48943c6994 100644
--- a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml
+++ b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="panel_stand_stop_flying"
  mouse_opaque="false"
- visible="false"
+ visible="true"
  width="115">
     <button
      follows="left|bottom"
-- 
GitLab


From 36f295fb9e3d91b59cc900862087ba4023b975d5 Mon Sep 17 00:00:00 2001
From: Erica <erica@lindenlab.com>
Date: Thu, 5 Nov 2009 17:00:20 -0800
Subject: [PATCH 202/306] EXT-2241 layout of Preferences > Sound needs to be
 improved for I18N, EXT-2276 Advanced water settings floater sliders spaced
 too tight

---
 .../skins/default/xui/en/floater_water.xml    | 135 ++++++------------
 .../xui/en/panel_preferences_sound.xml        |  36 ++---
 2 files changed, 65 insertions(+), 106 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_water.xml b/indra/newview/skins/default/xui/en/floater_water.xml
index a6876dcf7d3..b13a11c05d8 100644
--- a/indra/newview/skins/default/xui/en/floater_water.xml
+++ b/indra/newview/skins/default/xui/en/floater_water.xml
@@ -16,7 +16,7 @@
      type="string"
      length="1"
      follows="left|top|right"
-     font="SansSerif"
+     font.style="BOLD"
      height="16"
      layout="topleft"
      left="10"
@@ -28,7 +28,7 @@
     <combo_box
      height="18"
      layout="topleft"
-     left_delta="110"
+     left_pad="10"
      name="WaterPresetsCombo"
      top_delta="-2"
      width="150" />
@@ -40,7 +40,7 @@
      left_pad="20"
      name="WaterNewPreset"
      top_delta="1"
-     width="70" />
+     width="90" />
     <button
      height="20"
      label="Save"
@@ -49,7 +49,7 @@
      left_pad="10"
      name="WaterSavePreset"
      top_delta="0"
-     width="70" />
+     width="90" />
     <button
      height="20"
      label="Delete"
@@ -58,8 +58,9 @@
      left_pad="10"
      name="WaterDeletePreset"
      top_delta="0"
-     width="70" />
+     width="90" />
     <tab_container
+    border="false"
      follows="left|top"
      height="180"
      halign="center"
@@ -67,20 +68,20 @@
      left="0"
      name="Water Tabs"
      tab_position="top"
-     tab_height="20"
      top="60"
      width="700">
         <panel
          border="true"
-         follows="left|top|right|bottom"
+         border_color="EmphasisColor"
+         follows="all"
          height="180"
          label="Settings"
          layout="topleft"
-         left="1"
+         left="0"
          mouse_opaque="false"
          help_topic="water_settings_tab"
          name="Settings"
-         top="60"
+         top="0"
          width="698">
             <text
              type="string"
@@ -92,11 +93,10 @@
              left="10"
              name="BHText"
              top="4"
-             width="355">
+             width="200">
                 Water Fog Color
             </text>
             <color_swatch
-             border_color="0.45098 0.517647 0.607843 1"
              can_apply_immediately="true"
              color="0.5 0.5 0.5 1"
              follows="left|top"
@@ -117,7 +117,7 @@
              left="10"
              name="WaterFogDensText"
              top="74"
-             width="355">
+             width="200">
                 Fog Density Exponent
             </text>
             <slider
@@ -142,7 +142,7 @@
              left_delta="-14"
              name="WaterUnderWaterFogModText"
              top_delta="4"
-             width="355">
+             width="200">
                 Underwater Fog Modifier
             </text>
             <slider
@@ -167,83 +167,44 @@
              left="245"
              name="BDensText"
              top="4"
-             width="355">
+             width="200">
                 Reflection Wavelet Scale
             </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             halign="center"
-             height="16"
-             layout="topleft"
-             left="245"
-             name="BHText2"
-             top="21"
-             width="10">
-                1
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             halign="center"
-             height="16"
-             layout="topleft"
-             left_delta="0"
-             name="BHText3"
-             top_delta="11"
-             width="10">
-                2
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             halign="center"
-             height="16"
-             layout="topleft"
-             left_delta="0"
-             name="BHText4"
-             top_delta="11"
-             width="10">
-                3
-            </text>
             <slider
              control_name="WaterNormalScaleX"
              decimal_digits="1"
              follows="left"
-             height="10"
+             height="15"
              initial_value="0.7"
+             label="1"
              layout="topleft"
-             left_pad="4"
              max_val="10"
              name="WaterNormalScaleX"
-             top_delta="-3"
+             top_pad="20"
              width="200" />
             <slider
              control_name="WaterNormalScaleY"
              decimal_digits="1"
              follows="left"
-             height="10"
+             height="15"
              initial_value="0.7"
+             label="2"
              layout="topleft"
-             left_delta="0"
              max_val="10"
              name="WaterNormalScaleY"
-             top_pad="1"
+             top_pad="0"
              width="200" />
             <slider
              control_name="WaterNormalScaleZ"
              decimal_digits="1"
              follows="left"
-             height="10"
+             height="15"
              initial_value="0.7"
+             label="3"
              layout="topleft"
-             left_delta="0"
              max_val="10"
              name="WaterNormalScaleZ"
-             top_pad="1"
+             top_pad="0"
              width="200" />
             <text
              type="string"
@@ -252,10 +213,9 @@
              font="SansSerif"
              height="16"
              layout="topleft"
-             left_delta="-14"
              name="HDText"
-             top_delta="2"
-             width="355">
+             top_pad="-10"
+             width="200">
                 Fresnel Scale
             </text>
             <slider
@@ -266,9 +226,8 @@
              increment="0.01"
              initial_value="0.7"
              layout="topleft"
-             left="259"
              name="WaterFresnelScale"
-             top="100"
+             top_pad="20"
              width="200" />
             <text
              type="string"
@@ -277,10 +236,9 @@
              font="SansSerif"
              height="16"
              layout="topleft"
-             left_delta="-14"
              name="FresnelOffsetText"
-             top_delta="-1"
-             width="355">
+             top_pad="-10"
+             width="200">
                 Fresnel Offset
             </text>
             <slider
@@ -291,9 +249,8 @@
              increment="0.01"
              initial_value="0.7"
              layout="topleft"
-             left="259"
              name="WaterFresnelOffset"
-             top="135"
+             top_pad="20"
              width="200" />
             <text
              type="string"
@@ -305,7 +262,7 @@
              left="480"
              name="DensMultText"
              top="4"
-             width="355">
+             width="200">
                 Refract Scale Above
             </text>
             <slider
@@ -330,7 +287,7 @@
              left_delta="-14"
              name="WaterScaleBelowText"
              top_delta="-3"
-             width="355">
+             width="200">
                 Refract Scale Below
             </text>
             <slider
@@ -355,7 +312,7 @@
              left_delta="-14"
              name="MaxAltText"
              top_delta="-2"
-             width="355">
+             width="200">
                 Blur Multiplier
             </text>
             <slider
@@ -373,15 +330,15 @@
         </panel>
         <panel
          border="true"
-         follows="left|top|right|bottom"
+         follows="all"
          height="180"
          label="Image"
          layout="topleft"
-         left_delta="0"
+         left="0"
          mouse_opaque="false"
          help_topic="water_waves_tab"
          name="Waves"
-         top_delta="44"
+         top="0"
          width="698">
             <text
              type="string"
@@ -392,8 +349,8 @@
              layout="topleft"
              left="10"
              name="BHText"
-             top="4"
-             width="355">
+             top="10"
+             width="200">
                 Big Wave Direction
             </text>
             <text
@@ -405,7 +362,7 @@
              layout="topleft"
              left="10"
              name="WaterWave1DirXText"
-             top="21"
+             top_pad="4"
              width="10">
                 X
             </text>
@@ -418,7 +375,7 @@
              layout="topleft"
              left_delta="0"
              name="WaterWave1DirYText"
-             top_delta="11"
+             top_delta="18"
              width="10">
                 Y
             </text>
@@ -434,7 +391,7 @@
              max_val="4"
              min_val="-4"
              name="WaterWave1DirX"
-             top="40"
+             top="55"
              width="200" />
             <slider
              control_name="WaterWave1DirY"
@@ -448,7 +405,7 @@
              max_val="4"
              min_val="-4"
              name="WaterWave1DirY"
-             top_pad="1"
+             top_pad="5"
              width="200" />
             <text
              type="string"
@@ -472,7 +429,7 @@
              layout="topleft"
              left="10"
              name="WaterWave2DirXText"
-             top="71"
+             top="90"
              width="10">
                 X
             </text>
@@ -485,7 +442,7 @@
              layout="topleft"
              left_delta="0"
              name="WaterWave2DirYText"
-             top_delta="11"
+             top_delta="20"
              width="10">
                 Y
             </text>
@@ -501,7 +458,7 @@
              max_val="4"
              min_val="-4"
              name="WaterWave2DirX"
-             top="90"
+             top="115"
              width="200" />
             <slider
              control_name="WaterWave2DirY"
@@ -515,7 +472,7 @@
              max_val="4"
              min_val="-4"
              name="WaterWave2DirY"
-             top_pad="1"
+             top_pad="10"
              width="200" />
             <text
              type="string"
@@ -527,7 +484,7 @@
              left="240"
              name="BHText3"
              top="4"
-             width="355">
+             width="200">
                 Normal Map
             </text>
             <texture_picker
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index 78ae9a82240..c3e0cb352bb 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -228,15 +228,18 @@
      tab_stop="false"
      top_delta="-2"
      width="22" />
-     <check_box
-     height="16"
-	 control_name ="EnableVoiceChat"
-	 disabled_control="CmdLineDisableVoice"
-     label="Enable Voice"
-     layout="topleft"
-     left="22"
+   <check_box
+     label_text.halign="left"
+     follows="right|top"
+    height="16"
+    control_name ="EnableVoiceChat"
+   disabled_control="CmdLineDisableVoice"
+     label="Voice"
+     left="50"
      name="enable_voice_check"
-     width="100">
+     top_pad="5"
+     width="110"
+     >
     </check_box>
     <slider
      control_name="AudioLevelVoice"
@@ -246,16 +249,15 @@
      height="15"
      increment="0.05"
      initial_value="0.5"
-	 label="Voice"
-     label_width="60"
+     label_width="0"
      layout="topleft"
-     left="100"
+     left="165"
+     top_delta="0"
      name="Voice Volume"
      show_text="false"
      slider_label.halign="right"
-     top_pad="-15"
      volume="true"
-     width="250">
+     width="185">
         <slider.commit_callback
          function="Pref.setControlFalse"
          parameter="MuteVoice" />
@@ -289,7 +291,7 @@
     <icon
 	 follows="left"
 	 height="18"
-	 image_name="CameraView_Off"
+	 image_name="Cam_FreeCam_Off"
 	 name="camera_icon"
 	 mouse_opaque="false"
 	 visible="true"
@@ -316,13 +318,13 @@
          height="16"
          label="Camera position"
          left_pad="1"
-		 follows="topleft"
+	follows="topleft"
          name="0"
          top_delta="-30"
          width="200" />
         <radio_item
          height="16"
-		 follows="topleft"
+	follows="topleft"
          label="Avatar position"
          left_delta="0"
          name="1"
@@ -401,7 +403,7 @@
         My volume:
     </text>
       <slider_bar
-        control_name="AudioLevelMic" 
+        control_name="AudioLevelMic"
      follows="left|top"
      height="17"
      increment="0.05"
-- 
GitLab


From d0bb161daa1d413baee1386caee49d335db9e297 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 5 Nov 2009 17:10:45 -0800
Subject: [PATCH 203/306] EXT-2030 Accordion header needs to change graphic
 when selected/expanded New attribute header_image_expanded supplies
 background image. Reviewed with Leyla (last commit too)

---
 indra/newview/skins/default/xui/en/widgets/accordion_tab.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
index 1924568cc1e..08c337455c6 100644
--- a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
+++ b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
@@ -9,6 +9,6 @@
     header_image="Accordion_Off"
     header_image_over="Accordion_Over"
     header_image_pressed="Accordion_Press"
-    header_image_selected="Accordion_Selected"
+    header_image_expanded="Accordion_Selected"
     header_text_color="LtGray" 
     />
-- 
GitLab


From 9affcc4a10152e5621bfe418d11e030b6d838052 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 5 Nov 2009 20:16:44 -0500
Subject: [PATCH 204/306] EXT-2277 : Bottom panel for Inventory view

Adds gear menu, add button, trash.

--HG--
branch : avatar-pipeline
---
 indra/newview/llinventorypanel.cpp            | 1776 ++++++++---------
 indra/newview/llpanelmaininventory.cpp        |  182 +-
 indra/newview/llpanelmaininventory.h          |  270 +--
 .../default/xui/en/menu_inventory_add.xml     |   36 +
 .../xui/en/menu_inventory_gear_default.xml    |   90 +
 .../default/xui/en/panel_main_inventory.xml   |   54 +-
 6 files changed, 1388 insertions(+), 1020 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/en/menu_inventory_add.xml
 create mode 100644 indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml

diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index d1ca0efed35..36d9455fa25 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -1,888 +1,888 @@
-/** 
- * @file llfloaterinventory.cpp
- * @brief Implementation of the inventory view and associated stuff.
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include <utility> // for std::pair<>
-
-#include "llinventorypanel.h"
-
-// Seraph TODO: Remove unnecessary headers
-
-// library includes
-#include "llagent.h"
-#include "llagentwearables.h"
-#include "llcallingcard.h"
-#include "llfloaterreg.h"
-#include "llsdserialize.h"
-#include "llfiltereditor.h"
-#include "llspinctrl.h"
-#include "llui.h"
-#include "message.h"
-
-// newview includes
-#include "llappearancemgr.h"
-#include "llappviewer.h"
-#include "llfirstuse.h"
-#include "llfloaterchat.h"
-#include "llfloatercustomize.h"
-#include "llfocusmgr.h"
-#include "llfolderview.h"
-#include "llgesturemgr.h"
-#include "lliconctrl.h"
-#include "llimview.h"
-#include "llinventorybridge.h"
-#include "llinventoryclipboard.h"
-#include "llinventorymodel.h"
-#include "lllineeditor.h"
-#include "llmenugl.h"
-#include "llpreviewanim.h"
-#include "llpreviewgesture.h"
-#include "llpreviewnotecard.h"
-#include "llpreviewscript.h"
-#include "llpreviewsound.h"
-#include "llpreviewtexture.h"
-#include "llresmgr.h"
-#include "llscrollbar.h"
-#include "llscrollcontainer.h"
-#include "llselectmgr.h"
-#include "lltabcontainer.h"
-#include "lltooldraganddrop.h"
-#include "lluictrlfactory.h"
-#include "llviewerinventory.h"
-#include "llviewermessage.h"
-#include "llviewerobjectlist.h"
-#include "llviewerregion.h"
-#include "llviewerwindow.h"
-#include "llvoavatarself.h"
-#include "llwearablelist.h"
-
-static LLDefaultChildRegistry::Register<LLInventoryPanel> r("inventory_panel");
-
-const std::string LLInventoryPanel::DEFAULT_SORT_ORDER = std::string("InventorySortOrder");
-const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("RecentItemsSortOrder");
-const std::string LLInventoryPanel::INHERIT_SORT_ORDER = std::string("");
-static const LLInventoryFVBridgeBuilder INVENTORY_BRIDGE_BUILDER;
-
-LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :	
-	LLPanel(p),
-	mInventoryObserver(NULL),
-	mFolders(NULL),
-	mScroller(NULL),
-	mSortOrderSetting(p.sort_order_setting),
-	mInventory(p.inventory),
-	mAllowMultiSelect(p.allow_multi_select),
-	mHasInventoryConnection(false),
-	mStartFolderString(p.start_folder),	
-	mBuildDefaultHierarchy(true),
-	mInvFVBridgeBuilder(NULL)
-{
-	mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER;
-
-	// contex menu callbacks
-	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLInventoryPanel::doToSelected, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
-	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
-	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLInventoryPanel::doCreate, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));
-	
-	setBackgroundColor(LLUIColorTable::instance().getColor("InventoryBackgroundColor"));
-	setBackgroundVisible(TRUE);
-	setBackgroundOpaque(TRUE);
-}
-
-BOOL LLInventoryPanel::postBuild()
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_POST_BUILD);
-
-	mCommitCallbackRegistrar.pushScope(); // registered as a widget; need to push callback scope ourselves
-	
-	// create root folder
-	{
-		LLRect folder_rect(0,
-						   0,
-						   getRect().getWidth(),
-						   0);
-		LLFolderView::Params p;
-		p.name = getName();
-		p.rect = folder_rect;
-		p.parent_panel = this;
-		mFolders = LLUICtrlFactory::create<LLFolderView>(p);
-		mFolders->setAllowMultiSelect(mAllowMultiSelect);
-	}
-
-	mCommitCallbackRegistrar.popScope();
-	
-	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
-	
-	// scroller
-	{
-		LLRect scroller_view_rect = getRect();
-		scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
-		LLScrollContainer::Params p;
-		p.name("Inventory Scroller");
-		p.rect(scroller_view_rect);
-		p.follows.flags(FOLLOWS_ALL);
-		p.reserve_scroll_corner(true);
-		p.tab_stop(true);
-		mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
-	}
-	addChild(mScroller);
-	mScroller->addChild(mFolders);
-	
-	mFolders->setScrollContainer(mScroller);
-
-	// set up the callbacks from the inventory we're viewing, and then
-	// build everything.
-	mInventoryObserver = new LLInventoryPanelObserver(this);
-	mInventory->addObserver(mInventoryObserver);
-
-	// determine the root folder, if any, so inventory contents show just the children
-	// of that folder (i.e. not including the folder itself).
-	const LLAssetType::EType preferred_type = LLAssetType::lookupHumanReadable(mStartFolderString);
-
-	if ("inventory" == mStartFolderString)
-	{
-		mStartFolderID = gInventory.getRootFolderID();
-	}
-	else if ("library" == mStartFolderString)
-	{
-		mStartFolderID = gInventory.getLibraryRootFolderID();
-	}
-	else
-	{
-		mStartFolderID = (preferred_type != LLAssetType::AT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
-	}
-
-	// build view of inventory if we need default full hierarchy and inventory ready, otherwise wait for modelChanged() callback
-	if (mBuildDefaultHierarchy && mInventory->isInventoryUsable() && !mHasInventoryConnection)
-	{
-		rebuildViewsFor(mStartFolderID);
-		mHasInventoryConnection = true;
-	}
-
-	// bit of a hack to make sure the inventory is open.
-	mFolders->openFolder(preferred_type != LLAssetType::AT_NONE ? LLAssetType::lookupCategoryName(preferred_type) : "My Inventory");
-
-	if (mSortOrderSetting != INHERIT_SORT_ORDER)
-	{
-		setSortOrder(gSavedSettings.getU32(mSortOrderSetting));
-	}
-	else
-	{
-		setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER));
-	}
-	mFolders->setSortOrder(mFolders->getFilter()->getSortOrder());
-
-	return TRUE;
-}
-
-LLInventoryPanel::~LLInventoryPanel()
-{
-	// should this be a global setting?
-	if (mFolders)
-	{
-		U32 sort_order = mFolders->getSortOrder();
-		if (mSortOrderSetting != INHERIT_SORT_ORDER)
-		{
-			gSavedSettings.setU32(mSortOrderSetting, sort_order);
-		}
-	}
-
-	// LLView destructor will take care of the sub-views.
-	mInventory->removeObserver(mInventoryObserver);
-	delete mInventoryObserver;
-	mScroller = NULL;
-}
-
-LLMemType mt(LLMemType::MTYPE_INVENTORY_FROM_XML); // ! BUG ! Should this be removed?
-void LLInventoryPanel::draw()
-{
-	// select the desired item (in case it wasn't loaded when the selection was requested)
-	mFolders->updateSelection();
-	LLPanel::draw();
-}
-
-LLInventoryFilter* LLInventoryPanel::getFilter()
-{
-	if (mFolders) return mFolders->getFilter();
-	return NULL;
-}
-
-void LLInventoryPanel::setFilterTypes(U64 filter_types, BOOL filter_for_categories)
-{
-	mFolders->getFilter()->setFilterTypes(filter_types, filter_for_categories);
-}	
-
-void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask)
-{
-	mFolders->getFilter()->setFilterPermissions(filter_perm_mask);
-}
-
-void LLInventoryPanel::setFilterSubString(const std::string& string)
-{
-	mFolders->getFilter()->setFilterSubString(string);
-}
-
-void LLInventoryPanel::setSortOrder(U32 order)
-{
-	mFolders->getFilter()->setSortOrder(order);
-	if (mFolders->getFilter()->isModified())
-	{
-		mFolders->setSortOrder(order);
-		// try to keep selection onscreen, even if it wasn't to start with
-		mFolders->scrollToShowSelection();
-	}
-}
-
-void LLInventoryPanel::setSinceLogoff(BOOL sl)
-{
-	mFolders->getFilter()->setDateRangeLastLogoff(sl);
-}
-
-void LLInventoryPanel::setHoursAgo(U32 hours)
-{
-	mFolders->getFilter()->setHoursAgo(hours);
-}
-
-void LLInventoryPanel::setShowFolderState(LLInventoryFilter::EFolderShow show)
-{
-	mFolders->getFilter()->setShowFolderState(show);
-}
-
-LLInventoryFilter::EFolderShow LLInventoryPanel::getShowFolderState()
-{
-	return mFolders->getFilter()->getShowFolderState();
-}
-
-static LLFastTimer::DeclareTimer FTM_REFRESH("Inventory Refresh");
-
-void LLInventoryPanel::modelChanged(U32 mask)
-{
-	LLFastTimer t2(FTM_REFRESH);
-
-	bool handled = false;
-
-	// inventory just initialized, do complete build
-	if ((mask & LLInventoryObserver::ADD) && gInventory.getChangedIDs().empty() && !mHasInventoryConnection)
-	{
-		rebuildViewsFor(mStartFolderID);
-		mHasInventoryConnection = true;
-		return;
-	}
-
-	if(mask & LLInventoryObserver::LABEL)
-	{
-		handled = true;
-		// label change - empty out the display name for each object
-		// in this change set.
-		const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
-		std::set<LLUUID>::const_iterator id_it = changed_items.begin();
-		std::set<LLUUID>::const_iterator id_end = changed_items.end();
-		LLFolderViewItem* view = NULL;
-		LLInvFVBridge* bridge = NULL;
-		for (;id_it != id_end; ++id_it)
-		{
-			view = mFolders->getItemByID(*id_it);
-			if(view)
-			{
-				// request refresh on this item (also flags for filtering)
-				bridge = (LLInvFVBridge*)view->getListener();
-				if(bridge)
-				{	// Clear the display name first, so it gets properly re-built during refresh()
-					bridge->clearDisplayName();
-				}
-				view->refresh();
-			}
-		}
-	}
-	if((mask & (LLInventoryObserver::STRUCTURE
-				| LLInventoryObserver::ADD
-				| LLInventoryObserver::REMOVE)) != 0)
-	{
-		handled = true;
-		// Record which folders are open by uuid.
-		LLInventoryModel* model = getModel();
-		if (model)
-		{
-			const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
-
-			std::set<LLUUID>::const_iterator id_it = changed_items.begin();
-			std::set<LLUUID>::const_iterator id_end = changed_items.end();
-			for (;id_it != id_end; ++id_it)
-			{
-				// sync view with model
-				LLInventoryObject* model_item = model->getObject(*id_it);
-				LLFolderViewItem* view_item = mFolders->getItemByID(*id_it);
-
-				if (model_item)
-				{
-					if (!view_item)
-					{
-						// this object was just created, need to build a view for it
-						if ((mask & LLInventoryObserver::ADD) != LLInventoryObserver::ADD)
-						{
-							llwarns << *id_it << " is in model but not in view, but ADD flag not set" << llendl;
-						}
-						buildNewViews(*id_it);
-						
-						// select any newly created object
-						// that has the auto rename at top of folder
-						// root set
-						if(mFolders->getRoot()->needsAutoRename())
-						{
-							setSelection(*id_it, FALSE);
-						}
-					}
-					else
-					{
-						// this object was probably moved, check its parent
-						if ((mask & LLInventoryObserver::STRUCTURE) != LLInventoryObserver::STRUCTURE)
-						{
-							llwarns << *id_it << " is in model and in view, but STRUCTURE flag not set" << llendl;
-						}
-
-						LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID());
-
-						// added check against NULL for cases when Inventory panel contains startFolder.
-						// in this case parent is LLFolderView (LLInventoryPanel::mFolders) itself.
-						// this check is a fix for bug EXT-1859.
-						if (NULL != new_parent && view_item->getParentFolder() != new_parent)
-						{
-							view_item->getParentFolder()->extractItem(view_item);
-							view_item->addToFolder(new_parent, mFolders);
-						}
-					}
-				}
-				else
-				{
-					if (view_item)
-					{
-						if ((mask & LLInventoryObserver::REMOVE) != LLInventoryObserver::REMOVE)
-						{
-							llwarns << *id_it << " is not in model but in view, but REMOVE flag not set" << llendl;
-						}
-						// item in view but not model, need to delete view
-						view_item->destroyView();
-					}
-					else
-					{
-						llwarns << *id_it << "Item does not exist in either view or model, but notification triggered" << llendl;
-					}
-				}
-			}
-		}
-	}
-
-	if (!handled)
-	{
-		// it's a small change that only requires a refresh.
-		// *TODO: figure out a more efficient way to do the refresh
-		// since it is expensive on large inventories
-		mFolders->refresh();
-	}
-}
-
-
-void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
-{
-	LLFolderViewItem* old_view = NULL;
-
-	// get old LLFolderViewItem
-	old_view = mFolders->getItemByID(id);
-	if (old_view && id.notNull())
-	{
-		old_view->destroyView();
-	}
-
-	buildNewViews(id);
-}
-
-void LLInventoryPanel::buildNewViews(const LLUUID& id)
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_BUILD_NEW_VIEWS);
-	LLFolderViewItem* itemp = NULL;
-	LLInventoryObject* objectp = NULL;
-
-	// Don't add the start folder (the inventory panel will show contents
-	// beginning with the children of the starting folder, excluding the starting folder itself).
-	if (id != mStartFolderID)
-	{
-		objectp = gInventory.getObject(id);
-		if (objectp)
-		{		
-			const LLUUID &parent_id = objectp->getParentUUID();
-			// If this item's parent is the starting folder, then just add it to the top level (recall that 
-			// the starting folder isn't actually represented in the view, parent_folder would be NULL in
-			// this case otherwise).
-			LLFolderViewFolder* parent_folder = (parent_id == mStartFolderID ?
-				mFolders : (LLFolderViewFolder*)mFolders->getItemByID(parent_id));
-
-			// This item exists outside the inventory's hierarchy, so don't add it.
-			if (!parent_folder)
-			{
-				return;
-			}
-
-			if (objectp->getType() <= LLAssetType::AT_NONE ||
-				objectp->getType() >= LLAssetType::AT_COUNT)
-			{
-				llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << 
-					((S32) objectp->getType()) << llendl;
-				return;
-			}
-			
-			if (objectp->getType() == LLAssetType::AT_CATEGORY &&
-					 objectp->getActualType() != LLAssetType::AT_LINK_FOLDER) 
-			{
-				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
-																				objectp->getType(),
-																				LLInventoryType::IT_CATEGORY,
-																				this,
-																				objectp->getUUID());
-
-				if (new_listener)
-				{
-					LLFolderViewFolder::Params p;
-					p.name = new_listener->getDisplayName();
-					p.icon = new_listener->getIcon();
-					p.root = mFolders;
-					p.listener = new_listener;
-					LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(p);
-				
-					folderp->setItemSortOrder(mFolders->getSortOrder());
-					itemp = folderp;
-				}
-			}
-			else 
-			{
-				// Build new view for item
-				LLInventoryItem* item = (LLInventoryItem*)objectp;
-				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
-																				item->getActualType(),
-																				item->getInventoryType(),
-																				this,
-																				item->getUUID(),
-																				item->getFlags());
-
-				if (new_listener)
-				{
-					LLFolderViewItem::Params params;
-					params.name(new_listener->getDisplayName());
-					params.icon(new_listener->getIcon());
-					params.creation_date(new_listener->getCreationDate());
-					params.root(mFolders);
-					params.listener(new_listener);
-					params.rect(LLRect (0, 0, 0, 0));
-					itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
-				}
-			}
-
-			if (itemp)
-			{
-				itemp->addToFolder(parent_folder, mFolders);
-			}
-		}
-	}
-
-	// If this is a folder, add the children of the folder and recursively add any 
-	// child folders.
-	if ((id == mStartFolderID) ||
-		(objectp && objectp->getType() == LLAssetType::AT_CATEGORY))
-	{
-		LLViewerInventoryCategory::cat_array_t* categories;
-		LLViewerInventoryItem::item_array_t* items;
-
-		mInventory->lockDirectDescendentArrays(id, categories, items);
-		if(categories)
-		{
-			S32 count = categories->count();
-			for(S32 i = 0; i < count; ++i)
-			{
-				LLInventoryCategory* cat = categories->get(i);
-				buildNewViews(cat->getUUID());
-			}
-		}
-		if(items)
-		{
-			S32 count = items->count();
-			for(S32 i = 0; i < count; ++i)
-			{
-				LLInventoryItem* item = items->get(i);
-				buildNewViews(item->getUUID());
-			}
-		}
-		mInventory->unlockDirectDescendentArrays(id);
-	}
-}
-
-struct LLConfirmPurgeData
-{
-	LLUUID mID;
-	LLInventoryModel* mModel;
-};
-
-class LLIsNotWorn : public LLInventoryCollectFunctor
-{
-public:
-	LLIsNotWorn() {}
-	virtual ~LLIsNotWorn() {}
-	virtual bool operator()(LLInventoryCategory* cat,
-							LLInventoryItem* item)
-	{
-		return !gAgentWearables.isWearingItem(item->getUUID());
-	}
-};
-
-class LLOpenFolderByID : public LLFolderViewFunctor
-{
-public:
-	LLOpenFolderByID(const LLUUID& id) : mID(id) {}
-	virtual ~LLOpenFolderByID() {}
-	virtual void doFolder(LLFolderViewFolder* folder)
-		{
-			if (folder->getListener() && folder->getListener()->getUUID() == mID) folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-		}
-	virtual void doItem(LLFolderViewItem* item) {}
-protected:
-	const LLUUID& mID;
-};
-
-
-void LLInventoryPanel::openSelected()
-{
-	LLFolderViewItem* folder_item = mFolders->getCurSelectedItem();
-	if(!folder_item) return;
-	LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
-	if(!bridge) return;
-	bridge->openItem();
-}
-
-BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask)
-{
-	BOOL handled = LLView::handleHover(x, y, mask);
-	if(handled)
-	{
-		ECursorType cursor = getWindow()->getCursor();
-		if (LLInventoryModel::backgroundFetchActive() && cursor == UI_CURSOR_ARROW)
-		{
-			// replace arrow cursor with arrow and hourglass cursor
-			getWindow()->setCursor(UI_CURSOR_WORKING);
-		}
-	}
-	else
-	{
-		getWindow()->setCursor(UI_CURSOR_ARROW);
-	}
-	return TRUE;
-}
-
-BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-								   EDragAndDropType cargo_type,
-								   void* cargo_data,
-								   EAcceptance* accept,
-								   std::string& tooltip_msg)
-{
-
-	BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
-
-	if (handled)
-	{
-		mFolders->setDragAndDropThisFrame();
-	}
-
-	return handled;
-}
-
-void LLInventoryPanel::onFocusLost()
-{
-	// inventory no longer handles cut/copy/paste/delete
-	if (LLEditMenuHandler::gEditMenuHandler == mFolders)
-	{
-		LLEditMenuHandler::gEditMenuHandler = NULL;
-	}
-
-	LLPanel::onFocusLost();
-}
-
-void LLInventoryPanel::onFocusReceived()
-{
-	// inventory now handles cut/copy/paste/delete
-	LLEditMenuHandler::gEditMenuHandler = mFolders;
-
-	LLPanel::onFocusReceived();
-}
-
-
-void LLInventoryPanel::openAllFolders()
-{
-	mFolders->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
-	mFolders->arrangeAll();
-}
-
-void LLInventoryPanel::openDefaultFolderForType(LLAssetType::EType type)
-{
-	LLUUID category_id = mInventory->findCategoryUUIDForType(type);
-	LLOpenFolderByID opener(category_id);
-	mFolders->applyFunctorRecursively(opener);
-}
-
-void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus)
-{
-	// Don't select objects in COF (e.g. to prevent refocus when items are worn).
-	const LLInventoryObject *obj = gInventory.getObject(obj_id);
-	if (obj && obj->getParentUUID() == LLAppearanceManager::getCOF())
-	{
-		return;
-	}
-	mFolders->setSelectionByID(obj_id, take_keyboard_focus);
-}
-
-void LLInventoryPanel::clearSelection()
-{
-	mFolders->clearSelection();
-}
-
-void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& items, BOOL user_action)
-{
-	LLFolderView* fv = getRootFolder();
-	if (fv->needsAutoRename()) // auto-selecting a new user-created asset and preparing to rename
-	{
-		fv->setNeedsAutoRename(FALSE);
-		if (items.size()) // new asset is visible and selected
-		{
-			fv->startRenamingSelectedItem();
-		}
-	}
-	// Seraph - Put determineFolderType in here for ensemble typing?
-}
-
-//----------------------------------------------------------------------------
-
-void LLInventoryPanel::doToSelected(const LLSD& userdata)
-{
-	mFolders->doToSelected(&gInventory, userdata);
-}
-
-void LLInventoryPanel::doCreate(const LLSD& userdata)
-{
-	menu_create_inventory_item(mFolders, LLFolderBridge::sSelf, userdata);
-}
-
-bool LLInventoryPanel::beginIMSession()
-{
-	std::set<LLUUID> selected_items;
-	mFolders->getSelectionList(selected_items);
-
-	std::string name;
-	static int session_num = 1;
-
-	LLDynamicArray<LLUUID> members;
-	EInstantMessage type = IM_SESSION_CONFERENCE_START;
-
-	std::set<LLUUID>::const_iterator iter;
-	for (iter = selected_items.begin(); iter != selected_items.end(); iter++)
-	{
-
-		LLUUID item = *iter;
-		LLFolderViewItem* folder_item = mFolders->getItemByID(item);
-			
-		if(folder_item) 
-		{
-			LLFolderViewEventListener* fve_listener = folder_item->getListener();
-			if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY))
-			{
-
-				LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getListener();
-				if(!bridge) return true;
-				LLViewerInventoryCategory* cat = bridge->getCategory();
-				if(!cat) return true;
-				name = cat->getName();
-				LLUniqueBuddyCollector is_buddy;
-				LLInventoryModel::cat_array_t cat_array;
-				LLInventoryModel::item_array_t item_array;
-				gInventory.collectDescendentsIf(bridge->getUUID(),
-												cat_array,
-												item_array,
-												LLInventoryModel::EXCLUDE_TRASH,
-												is_buddy);
-				S32 count = item_array.count();
-				if(count > 0)
-				{
-					LLFloaterReg::showInstance("communicate");
-					// create the session
-					LLAvatarTracker& at = LLAvatarTracker::instance();
-					LLUUID id;
-					for(S32 i = 0; i < count; ++i)
-					{
-						id = item_array.get(i)->getCreatorUUID();
-						if(at.isBuddyOnline(id))
-						{
-							members.put(id);
-						}
-					}
-				}
-			}
-			else
-			{
-				LLFolderViewItem* folder_item = mFolders->getItemByID(item);
-				if(!folder_item) return true;
-				LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener();
-
-				if (listenerp->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
-				{
-					LLInventoryItem* inv_item = gInventory.getItem(listenerp->getUUID());
-
-					if (inv_item)
-					{
-						LLAvatarTracker& at = LLAvatarTracker::instance();
-						LLUUID id = inv_item->getCreatorUUID();
-
-						if(at.isBuddyOnline(id))
-						{
-							members.put(id);
-						}
-					}
-				} //if IT_CALLINGCARD
-			} //if !IT_CATEGORY
-		}
-	} //for selected_items	
-
-	// the session_id is randomly generated UUID which will be replaced later
-	// with a server side generated number
-
-	if (name.empty())
-	{
-		name = llformat("Session %d", session_num++);
-	}
-
-	gIMMgr->addSession(name, type, members[0], members);
-		
-	return true;
-}
-
-bool LLInventoryPanel::attachObject(const LLSD& userdata)
-{
-	std::set<LLUUID> selected_items;
-	mFolders->getSelectionList(selected_items);
-
-	std::string joint_name = userdata.asString();
-	LLVOAvatar *avatarp = static_cast<LLVOAvatar*>(gAgent.getAvatarObject());
-	LLViewerJointAttachment* attachmentp = NULL;
-	for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); 
-		 iter != avatarp->mAttachmentPoints.end(); )
-	{
-		LLVOAvatar::attachment_map_t::iterator curiter = iter++;
-		LLViewerJointAttachment* attachment = curiter->second;
-		if (attachment->getName() == joint_name)
-		{
-			attachmentp = attachment;
-			break;
-		}
-	}
-	if (attachmentp == NULL)
-	{
-		return true;
-	}
-
-	for (std::set<LLUUID>::const_iterator set_iter = selected_items.begin(); 
-		 set_iter != selected_items.end(); 
-		 ++set_iter)
-	{
-		const LLUUID &id = *set_iter;
-		LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem(id);
-		if(item && gInventory.isObjectDescendentOf(id, gInventory.getRootFolderID()))
-		{
-			rez_attachment(item, attachmentp);
-		}
-		else if(item && item->isComplete())
-		{
-			// must be in library. copy it to our inventory and put it on.
-			LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(attachmentp);
-			copy_inventory_item(gAgent.getID(),
-								item->getPermissions().getOwner(),
-								item->getUUID(),
-								LLUUID::null,
-								std::string(),
-								cb);
-		}
-	}
-	gFocusMgr.setKeyboardFocus(NULL);
-
-	return true;
-}
-
-
-//----------------------------------------------------------------------------
-
-// static DEBUG ONLY:
-void LLInventoryPanel::dumpSelectionInformation(void* user_data)
-{
-	LLInventoryPanel* iv = (LLInventoryPanel*)user_data;
-	iv->mFolders->dumpSelectionInformation();
-}
-
-BOOL LLInventoryPanel::getSinceLogoff()
-{
-	return mFolders->getFilter()->isSinceLogoff();
-}
-
-void example_param_block_usage()
-{
-	LLInventoryPanel::Params param_block;
-	param_block.name(std::string("inventory"));
-
-	param_block.sort_order_setting(LLInventoryPanel::RECENTITEMS_SORT_ORDER);
-	param_block.allow_multi_select(true);
-	param_block.filter(LLInventoryPanel::Filter()
-			.sort_order(1)
-			.types(0xffff0000));
-	param_block.inventory(&gInventory);
-	param_block.has_border(true);
-
-	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
-
-	param_block = LLInventoryPanel::Params();
-	param_block.name(std::string("inventory"));
-
-	//LLSD param_block_sd;
-	//param_block_sd["sort_order_setting"] = LLInventoryPanel::RECENTITEMS_SORT_ORDER;
-	//param_block_sd["allow_multi_select"] = true;
-	//param_block_sd["filter"]["sort_order"] = 1;
-	//param_block_sd["filter"]["types"] = (S32)0xffff0000;
-	//param_block_sd["has_border"] = true;
-
-	//LLInitParam::LLSDParser(param_block_sd).parse(param_block);
-
-	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
-}
+/* 
+ * @file llinventorypanel.cpp
+ * @brief Implementation of the inventory panel and associated stuff.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include <utility> // for std::pair<>
+
+#include "llinventorypanel.h"
+
+// Seraph TODO: Remove unnecessary headers
+
+// library includes
+#include "llagent.h"
+#include "llagentwearables.h"
+#include "llcallingcard.h"
+#include "llfloaterreg.h"
+#include "llsdserialize.h"
+#include "llfiltereditor.h"
+#include "llspinctrl.h"
+#include "llui.h"
+#include "message.h"
+
+// newview includes
+#include "llappearancemgr.h"
+#include "llappviewer.h"
+#include "llfirstuse.h"
+#include "llfloaterchat.h"
+#include "llfloatercustomize.h"
+#include "llfocusmgr.h"
+#include "llfolderview.h"
+#include "llgesturemgr.h"
+#include "lliconctrl.h"
+#include "llimview.h"
+#include "llinventorybridge.h"
+#include "llinventoryclipboard.h"
+#include "llinventorymodel.h"
+#include "lllineeditor.h"
+#include "llmenugl.h"
+#include "llpreviewanim.h"
+#include "llpreviewgesture.h"
+#include "llpreviewnotecard.h"
+#include "llpreviewscript.h"
+#include "llpreviewsound.h"
+#include "llpreviewtexture.h"
+#include "llresmgr.h"
+#include "llscrollbar.h"
+#include "llscrollcontainer.h"
+#include "llselectmgr.h"
+#include "lltabcontainer.h"
+#include "lltooldraganddrop.h"
+#include "lluictrlfactory.h"
+#include "llviewerinventory.h"
+#include "llviewermessage.h"
+#include "llviewerobjectlist.h"
+#include "llviewerregion.h"
+#include "llviewerwindow.h"
+#include "llvoavatarself.h"
+#include "llwearablelist.h"
+
+static LLDefaultChildRegistry::Register<LLInventoryPanel> r("inventory_panel");
+
+const std::string LLInventoryPanel::DEFAULT_SORT_ORDER = std::string("InventorySortOrder");
+const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("RecentItemsSortOrder");
+const std::string LLInventoryPanel::INHERIT_SORT_ORDER = std::string("");
+static const LLInventoryFVBridgeBuilder INVENTORY_BRIDGE_BUILDER;
+
+LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :	
+	LLPanel(p),
+	mInventoryObserver(NULL),
+	mFolders(NULL),
+	mScroller(NULL),
+	mSortOrderSetting(p.sort_order_setting),
+	mInventory(p.inventory),
+	mAllowMultiSelect(p.allow_multi_select),
+	mHasInventoryConnection(false),
+	mStartFolderString(p.start_folder),	
+	mBuildDefaultHierarchy(true),
+	mInvFVBridgeBuilder(NULL)
+{
+	mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER;
+
+	// contex menu callbacks
+	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLInventoryPanel::doToSelected, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLInventoryPanel::doCreate, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));
+	
+	setBackgroundColor(LLUIColorTable::instance().getColor("InventoryBackgroundColor"));
+	setBackgroundVisible(TRUE);
+	setBackgroundOpaque(TRUE);
+}
+
+BOOL LLInventoryPanel::postBuild()
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_POST_BUILD);
+
+	mCommitCallbackRegistrar.pushScope(); // registered as a widget; need to push callback scope ourselves
+	
+	// create root folder
+	{
+		LLRect folder_rect(0,
+						   0,
+						   getRect().getWidth(),
+						   0);
+		LLFolderView::Params p;
+		p.name = getName();
+		p.rect = folder_rect;
+		p.parent_panel = this;
+		mFolders = LLUICtrlFactory::create<LLFolderView>(p);
+		mFolders->setAllowMultiSelect(mAllowMultiSelect);
+	}
+
+	mCommitCallbackRegistrar.popScope();
+	
+	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
+	
+	// scroller
+	{
+		LLRect scroller_view_rect = getRect();
+		scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
+		LLScrollContainer::Params p;
+		p.name("Inventory Scroller");
+		p.rect(scroller_view_rect);
+		p.follows.flags(FOLLOWS_ALL);
+		p.reserve_scroll_corner(true);
+		p.tab_stop(true);
+		mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
+	}
+	addChild(mScroller);
+	mScroller->addChild(mFolders);
+	
+	mFolders->setScrollContainer(mScroller);
+
+	// set up the callbacks from the inventory we're viewing, and then
+	// build everything.
+	mInventoryObserver = new LLInventoryPanelObserver(this);
+	mInventory->addObserver(mInventoryObserver);
+
+	// determine the root folder, if any, so inventory contents show just the children
+	// of that folder (i.e. not including the folder itself).
+	const LLAssetType::EType preferred_type = LLAssetType::lookupHumanReadable(mStartFolderString);
+
+	if ("inventory" == mStartFolderString)
+	{
+		mStartFolderID = gInventory.getRootFolderID();
+	}
+	else if ("library" == mStartFolderString)
+	{
+		mStartFolderID = gInventory.getLibraryRootFolderID();
+	}
+	else
+	{
+		mStartFolderID = (preferred_type != LLAssetType::AT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
+	}
+
+	// build view of inventory if we need default full hierarchy and inventory ready, otherwise wait for modelChanged() callback
+	if (mBuildDefaultHierarchy && mInventory->isInventoryUsable() && !mHasInventoryConnection)
+	{
+		rebuildViewsFor(mStartFolderID);
+		mHasInventoryConnection = true;
+	}
+
+	// bit of a hack to make sure the inventory is open.
+	mFolders->openFolder(preferred_type != LLAssetType::AT_NONE ? LLAssetType::lookupCategoryName(preferred_type) : "My Inventory");
+
+	if (mSortOrderSetting != INHERIT_SORT_ORDER)
+	{
+		setSortOrder(gSavedSettings.getU32(mSortOrderSetting));
+	}
+	else
+	{
+		setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER));
+	}
+	mFolders->setSortOrder(mFolders->getFilter()->getSortOrder());
+
+	return TRUE;
+}
+
+LLInventoryPanel::~LLInventoryPanel()
+{
+	// should this be a global setting?
+	if (mFolders)
+	{
+		U32 sort_order = mFolders->getSortOrder();
+		if (mSortOrderSetting != INHERIT_SORT_ORDER)
+		{
+			gSavedSettings.setU32(mSortOrderSetting, sort_order);
+		}
+	}
+
+	// LLView destructor will take care of the sub-views.
+	mInventory->removeObserver(mInventoryObserver);
+	delete mInventoryObserver;
+	mScroller = NULL;
+}
+
+LLMemType mt(LLMemType::MTYPE_INVENTORY_FROM_XML); // ! BUG ! Should this be removed?
+void LLInventoryPanel::draw()
+{
+	// select the desired item (in case it wasn't loaded when the selection was requested)
+	mFolders->updateSelection();
+	LLPanel::draw();
+}
+
+LLInventoryFilter* LLInventoryPanel::getFilter()
+{
+	if (mFolders) return mFolders->getFilter();
+	return NULL;
+}
+
+void LLInventoryPanel::setFilterTypes(U64 filter_types, BOOL filter_for_categories)
+{
+	mFolders->getFilter()->setFilterTypes(filter_types, filter_for_categories);
+}	
+
+void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask)
+{
+	mFolders->getFilter()->setFilterPermissions(filter_perm_mask);
+}
+
+void LLInventoryPanel::setFilterSubString(const std::string& string)
+{
+	mFolders->getFilter()->setFilterSubString(string);
+}
+
+void LLInventoryPanel::setSortOrder(U32 order)
+{
+	mFolders->getFilter()->setSortOrder(order);
+	if (mFolders->getFilter()->isModified())
+	{
+		mFolders->setSortOrder(order);
+		// try to keep selection onscreen, even if it wasn't to start with
+		mFolders->scrollToShowSelection();
+	}
+}
+
+void LLInventoryPanel::setSinceLogoff(BOOL sl)
+{
+	mFolders->getFilter()->setDateRangeLastLogoff(sl);
+}
+
+void LLInventoryPanel::setHoursAgo(U32 hours)
+{
+	mFolders->getFilter()->setHoursAgo(hours);
+}
+
+void LLInventoryPanel::setShowFolderState(LLInventoryFilter::EFolderShow show)
+{
+	mFolders->getFilter()->setShowFolderState(show);
+}
+
+LLInventoryFilter::EFolderShow LLInventoryPanel::getShowFolderState()
+{
+	return mFolders->getFilter()->getShowFolderState();
+}
+
+static LLFastTimer::DeclareTimer FTM_REFRESH("Inventory Refresh");
+
+void LLInventoryPanel::modelChanged(U32 mask)
+{
+	LLFastTimer t2(FTM_REFRESH);
+
+	bool handled = false;
+
+	// inventory just initialized, do complete build
+	if ((mask & LLInventoryObserver::ADD) && gInventory.getChangedIDs().empty() && !mHasInventoryConnection)
+	{
+		rebuildViewsFor(mStartFolderID);
+		mHasInventoryConnection = true;
+		return;
+	}
+
+	if(mask & LLInventoryObserver::LABEL)
+	{
+		handled = true;
+		// label change - empty out the display name for each object
+		// in this change set.
+		const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
+		std::set<LLUUID>::const_iterator id_it = changed_items.begin();
+		std::set<LLUUID>::const_iterator id_end = changed_items.end();
+		LLFolderViewItem* view = NULL;
+		LLInvFVBridge* bridge = NULL;
+		for (;id_it != id_end; ++id_it)
+		{
+			view = mFolders->getItemByID(*id_it);
+			if(view)
+			{
+				// request refresh on this item (also flags for filtering)
+				bridge = (LLInvFVBridge*)view->getListener();
+				if(bridge)
+				{	// Clear the display name first, so it gets properly re-built during refresh()
+					bridge->clearDisplayName();
+				}
+				view->refresh();
+			}
+		}
+	}
+	if((mask & (LLInventoryObserver::STRUCTURE
+				| LLInventoryObserver::ADD
+				| LLInventoryObserver::REMOVE)) != 0)
+	{
+		handled = true;
+		// Record which folders are open by uuid.
+		LLInventoryModel* model = getModel();
+		if (model)
+		{
+			const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
+
+			std::set<LLUUID>::const_iterator id_it = changed_items.begin();
+			std::set<LLUUID>::const_iterator id_end = changed_items.end();
+			for (;id_it != id_end; ++id_it)
+			{
+				// sync view with model
+				LLInventoryObject* model_item = model->getObject(*id_it);
+				LLFolderViewItem* view_item = mFolders->getItemByID(*id_it);
+
+				if (model_item)
+				{
+					if (!view_item)
+					{
+						// this object was just created, need to build a view for it
+						if ((mask & LLInventoryObserver::ADD) != LLInventoryObserver::ADD)
+						{
+							llwarns << *id_it << " is in model but not in view, but ADD flag not set" << llendl;
+						}
+						buildNewViews(*id_it);
+						
+						// select any newly created object
+						// that has the auto rename at top of folder
+						// root set
+						if(mFolders->getRoot()->needsAutoRename())
+						{
+							setSelection(*id_it, FALSE);
+						}
+					}
+					else
+					{
+						// this object was probably moved, check its parent
+						if ((mask & LLInventoryObserver::STRUCTURE) != LLInventoryObserver::STRUCTURE)
+						{
+							llwarns << *id_it << " is in model and in view, but STRUCTURE flag not set" << llendl;
+						}
+
+						LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID());
+
+						// added check against NULL for cases when Inventory panel contains startFolder.
+						// in this case parent is LLFolderView (LLInventoryPanel::mFolders) itself.
+						// this check is a fix for bug EXT-1859.
+						if (NULL != new_parent && view_item->getParentFolder() != new_parent)
+						{
+							view_item->getParentFolder()->extractItem(view_item);
+							view_item->addToFolder(new_parent, mFolders);
+						}
+					}
+				}
+				else
+				{
+					if (view_item)
+					{
+						if ((mask & LLInventoryObserver::REMOVE) != LLInventoryObserver::REMOVE)
+						{
+							llwarns << *id_it << " is not in model but in view, but REMOVE flag not set" << llendl;
+						}
+						// item in view but not model, need to delete view
+						view_item->destroyView();
+					}
+					else
+					{
+						llwarns << *id_it << "Item does not exist in either view or model, but notification triggered" << llendl;
+					}
+				}
+			}
+		}
+	}
+
+	if (!handled)
+	{
+		// it's a small change that only requires a refresh.
+		// *TODO: figure out a more efficient way to do the refresh
+		// since it is expensive on large inventories
+		mFolders->refresh();
+	}
+}
+
+
+void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
+{
+	LLFolderViewItem* old_view = NULL;
+
+	// get old LLFolderViewItem
+	old_view = mFolders->getItemByID(id);
+	if (old_view && id.notNull())
+	{
+		old_view->destroyView();
+	}
+
+	buildNewViews(id);
+}
+
+void LLInventoryPanel::buildNewViews(const LLUUID& id)
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_BUILD_NEW_VIEWS);
+	LLFolderViewItem* itemp = NULL;
+	LLInventoryObject* objectp = NULL;
+
+	// Don't add the start folder (the inventory panel will show contents
+	// beginning with the children of the starting folder, excluding the starting folder itself).
+	if (id != mStartFolderID)
+	{
+		objectp = gInventory.getObject(id);
+		if (objectp)
+		{		
+			const LLUUID &parent_id = objectp->getParentUUID();
+			// If this item's parent is the starting folder, then just add it to the top level (recall that 
+			// the starting folder isn't actually represented in the view, parent_folder would be NULL in
+			// this case otherwise).
+			LLFolderViewFolder* parent_folder = (parent_id == mStartFolderID ?
+				mFolders : (LLFolderViewFolder*)mFolders->getItemByID(parent_id));
+
+			// This item exists outside the inventory's hierarchy, so don't add it.
+			if (!parent_folder)
+			{
+				return;
+			}
+
+			if (objectp->getType() <= LLAssetType::AT_NONE ||
+				objectp->getType() >= LLAssetType::AT_COUNT)
+			{
+				llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << 
+					((S32) objectp->getType()) << llendl;
+				return;
+			}
+			
+			if (objectp->getType() == LLAssetType::AT_CATEGORY &&
+					 objectp->getActualType() != LLAssetType::AT_LINK_FOLDER) 
+			{
+				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
+																				objectp->getType(),
+																				LLInventoryType::IT_CATEGORY,
+																				this,
+																				objectp->getUUID());
+
+				if (new_listener)
+				{
+					LLFolderViewFolder::Params p;
+					p.name = new_listener->getDisplayName();
+					p.icon = new_listener->getIcon();
+					p.root = mFolders;
+					p.listener = new_listener;
+					LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(p);
+				
+					folderp->setItemSortOrder(mFolders->getSortOrder());
+					itemp = folderp;
+				}
+			}
+			else 
+			{
+				// Build new view for item
+				LLInventoryItem* item = (LLInventoryItem*)objectp;
+				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
+																				item->getActualType(),
+																				item->getInventoryType(),
+																				this,
+																				item->getUUID(),
+																				item->getFlags());
+
+				if (new_listener)
+				{
+					LLFolderViewItem::Params params;
+					params.name(new_listener->getDisplayName());
+					params.icon(new_listener->getIcon());
+					params.creation_date(new_listener->getCreationDate());
+					params.root(mFolders);
+					params.listener(new_listener);
+					params.rect(LLRect (0, 0, 0, 0));
+					itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
+				}
+			}
+
+			if (itemp)
+			{
+				itemp->addToFolder(parent_folder, mFolders);
+			}
+		}
+	}
+
+	// If this is a folder, add the children of the folder and recursively add any 
+	// child folders.
+	if ((id == mStartFolderID) ||
+		(objectp && objectp->getType() == LLAssetType::AT_CATEGORY))
+	{
+		LLViewerInventoryCategory::cat_array_t* categories;
+		LLViewerInventoryItem::item_array_t* items;
+
+		mInventory->lockDirectDescendentArrays(id, categories, items);
+		if(categories)
+		{
+			S32 count = categories->count();
+			for(S32 i = 0; i < count; ++i)
+			{
+				LLInventoryCategory* cat = categories->get(i);
+				buildNewViews(cat->getUUID());
+			}
+		}
+		if(items)
+		{
+			S32 count = items->count();
+			for(S32 i = 0; i < count; ++i)
+			{
+				LLInventoryItem* item = items->get(i);
+				buildNewViews(item->getUUID());
+			}
+		}
+		mInventory->unlockDirectDescendentArrays(id);
+	}
+}
+
+struct LLConfirmPurgeData
+{
+	LLUUID mID;
+	LLInventoryModel* mModel;
+};
+
+class LLIsNotWorn : public LLInventoryCollectFunctor
+{
+public:
+	LLIsNotWorn() {}
+	virtual ~LLIsNotWorn() {}
+	virtual bool operator()(LLInventoryCategory* cat,
+							LLInventoryItem* item)
+	{
+		return !gAgentWearables.isWearingItem(item->getUUID());
+	}
+};
+
+class LLOpenFolderByID : public LLFolderViewFunctor
+{
+public:
+	LLOpenFolderByID(const LLUUID& id) : mID(id) {}
+	virtual ~LLOpenFolderByID() {}
+	virtual void doFolder(LLFolderViewFolder* folder)
+		{
+			if (folder->getListener() && folder->getListener()->getUUID() == mID) folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+		}
+	virtual void doItem(LLFolderViewItem* item) {}
+protected:
+	const LLUUID& mID;
+};
+
+
+void LLInventoryPanel::openSelected()
+{
+	LLFolderViewItem* folder_item = mFolders->getCurSelectedItem();
+	if(!folder_item) return;
+	LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
+	if(!bridge) return;
+	bridge->openItem();
+}
+
+BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask)
+{
+	BOOL handled = LLView::handleHover(x, y, mask);
+	if(handled)
+	{
+		ECursorType cursor = getWindow()->getCursor();
+		if (LLInventoryModel::backgroundFetchActive() && cursor == UI_CURSOR_ARROW)
+		{
+			// replace arrow cursor with arrow and hourglass cursor
+			getWindow()->setCursor(UI_CURSOR_WORKING);
+		}
+	}
+	else
+	{
+		getWindow()->setCursor(UI_CURSOR_ARROW);
+	}
+	return TRUE;
+}
+
+BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+								   EDragAndDropType cargo_type,
+								   void* cargo_data,
+								   EAcceptance* accept,
+								   std::string& tooltip_msg)
+{
+
+	BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+
+	if (handled)
+	{
+		mFolders->setDragAndDropThisFrame();
+	}
+
+	return handled;
+}
+
+void LLInventoryPanel::onFocusLost()
+{
+	// inventory no longer handles cut/copy/paste/delete
+	if (LLEditMenuHandler::gEditMenuHandler == mFolders)
+	{
+		LLEditMenuHandler::gEditMenuHandler = NULL;
+	}
+
+	LLPanel::onFocusLost();
+}
+
+void LLInventoryPanel::onFocusReceived()
+{
+	// inventory now handles cut/copy/paste/delete
+	LLEditMenuHandler::gEditMenuHandler = mFolders;
+
+	LLPanel::onFocusReceived();
+}
+
+
+void LLInventoryPanel::openAllFolders()
+{
+	mFolders->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
+	mFolders->arrangeAll();
+}
+
+void LLInventoryPanel::openDefaultFolderForType(LLAssetType::EType type)
+{
+	LLUUID category_id = mInventory->findCategoryUUIDForType(type);
+	LLOpenFolderByID opener(category_id);
+	mFolders->applyFunctorRecursively(opener);
+}
+
+void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus)
+{
+	// Don't select objects in COF (e.g. to prevent refocus when items are worn).
+	const LLInventoryObject *obj = gInventory.getObject(obj_id);
+	if (obj && obj->getParentUUID() == LLAppearanceManager::getCOF())
+	{
+		return;
+	}
+	mFolders->setSelectionByID(obj_id, take_keyboard_focus);
+}
+
+void LLInventoryPanel::clearSelection()
+{
+	mFolders->clearSelection();
+}
+
+void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& items, BOOL user_action)
+{
+	LLFolderView* fv = getRootFolder();
+	if (fv->needsAutoRename()) // auto-selecting a new user-created asset and preparing to rename
+	{
+		fv->setNeedsAutoRename(FALSE);
+		if (items.size()) // new asset is visible and selected
+		{
+			fv->startRenamingSelectedItem();
+		}
+	}
+	// Seraph - Put determineFolderType in here for ensemble typing?
+}
+
+//----------------------------------------------------------------------------
+
+void LLInventoryPanel::doToSelected(const LLSD& userdata)
+{
+	mFolders->doToSelected(&gInventory, userdata);
+}
+
+void LLInventoryPanel::doCreate(const LLSD& userdata)
+{
+	menu_create_inventory_item(mFolders, LLFolderBridge::sSelf, userdata);
+}
+
+bool LLInventoryPanel::beginIMSession()
+{
+	std::set<LLUUID> selected_items;
+	mFolders->getSelectionList(selected_items);
+
+	std::string name;
+	static int session_num = 1;
+
+	LLDynamicArray<LLUUID> members;
+	EInstantMessage type = IM_SESSION_CONFERENCE_START;
+
+	std::set<LLUUID>::const_iterator iter;
+	for (iter = selected_items.begin(); iter != selected_items.end(); iter++)
+	{
+
+		LLUUID item = *iter;
+		LLFolderViewItem* folder_item = mFolders->getItemByID(item);
+			
+		if(folder_item) 
+		{
+			LLFolderViewEventListener* fve_listener = folder_item->getListener();
+			if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY))
+			{
+
+				LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getListener();
+				if(!bridge) return true;
+				LLViewerInventoryCategory* cat = bridge->getCategory();
+				if(!cat) return true;
+				name = cat->getName();
+				LLUniqueBuddyCollector is_buddy;
+				LLInventoryModel::cat_array_t cat_array;
+				LLInventoryModel::item_array_t item_array;
+				gInventory.collectDescendentsIf(bridge->getUUID(),
+												cat_array,
+												item_array,
+												LLInventoryModel::EXCLUDE_TRASH,
+												is_buddy);
+				S32 count = item_array.count();
+				if(count > 0)
+				{
+					LLFloaterReg::showInstance("communicate");
+					// create the session
+					LLAvatarTracker& at = LLAvatarTracker::instance();
+					LLUUID id;
+					for(S32 i = 0; i < count; ++i)
+					{
+						id = item_array.get(i)->getCreatorUUID();
+						if(at.isBuddyOnline(id))
+						{
+							members.put(id);
+						}
+					}
+				}
+			}
+			else
+			{
+				LLFolderViewItem* folder_item = mFolders->getItemByID(item);
+				if(!folder_item) return true;
+				LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener();
+
+				if (listenerp->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
+				{
+					LLInventoryItem* inv_item = gInventory.getItem(listenerp->getUUID());
+
+					if (inv_item)
+					{
+						LLAvatarTracker& at = LLAvatarTracker::instance();
+						LLUUID id = inv_item->getCreatorUUID();
+
+						if(at.isBuddyOnline(id))
+						{
+							members.put(id);
+						}
+					}
+				} //if IT_CALLINGCARD
+			} //if !IT_CATEGORY
+		}
+	} //for selected_items	
+
+	// the session_id is randomly generated UUID which will be replaced later
+	// with a server side generated number
+
+	if (name.empty())
+	{
+		name = llformat("Session %d", session_num++);
+	}
+
+	gIMMgr->addSession(name, type, members[0], members);
+		
+	return true;
+}
+
+bool LLInventoryPanel::attachObject(const LLSD& userdata)
+{
+	std::set<LLUUID> selected_items;
+	mFolders->getSelectionList(selected_items);
+
+	std::string joint_name = userdata.asString();
+	LLVOAvatar *avatarp = static_cast<LLVOAvatar*>(gAgent.getAvatarObject());
+	LLViewerJointAttachment* attachmentp = NULL;
+	for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); 
+		 iter != avatarp->mAttachmentPoints.end(); )
+	{
+		LLVOAvatar::attachment_map_t::iterator curiter = iter++;
+		LLViewerJointAttachment* attachment = curiter->second;
+		if (attachment->getName() == joint_name)
+		{
+			attachmentp = attachment;
+			break;
+		}
+	}
+	if (attachmentp == NULL)
+	{
+		return true;
+	}
+
+	for (std::set<LLUUID>::const_iterator set_iter = selected_items.begin(); 
+		 set_iter != selected_items.end(); 
+		 ++set_iter)
+	{
+		const LLUUID &id = *set_iter;
+		LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem(id);
+		if(item && gInventory.isObjectDescendentOf(id, gInventory.getRootFolderID()))
+		{
+			rez_attachment(item, attachmentp);
+		}
+		else if(item && item->isComplete())
+		{
+			// must be in library. copy it to our inventory and put it on.
+			LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(attachmentp);
+			copy_inventory_item(gAgent.getID(),
+								item->getPermissions().getOwner(),
+								item->getUUID(),
+								LLUUID::null,
+								std::string(),
+								cb);
+		}
+	}
+	gFocusMgr.setKeyboardFocus(NULL);
+
+	return true;
+}
+
+
+//----------------------------------------------------------------------------
+
+// static DEBUG ONLY:
+void LLInventoryPanel::dumpSelectionInformation(void* user_data)
+{
+	LLInventoryPanel* iv = (LLInventoryPanel*)user_data;
+	iv->mFolders->dumpSelectionInformation();
+}
+
+BOOL LLInventoryPanel::getSinceLogoff()
+{
+	return mFolders->getFilter()->isSinceLogoff();
+}
+
+void example_param_block_usage()
+{
+	LLInventoryPanel::Params param_block;
+	param_block.name(std::string("inventory"));
+
+	param_block.sort_order_setting(LLInventoryPanel::RECENTITEMS_SORT_ORDER);
+	param_block.allow_multi_select(true);
+	param_block.filter(LLInventoryPanel::Filter()
+			.sort_order(1)
+			.types(0xffff0000));
+	param_block.inventory(&gInventory);
+	param_block.has_border(true);
+
+	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
+
+	param_block = LLInventoryPanel::Params();
+	param_block.name(std::string("inventory"));
+
+	//LLSD param_block_sd;
+	//param_block_sd["sort_order_setting"] = LLInventoryPanel::RECENTITEMS_SORT_ORDER;
+	//param_block_sd["allow_multi_select"] = true;
+	//param_block_sd["filter"]["sort_order"] = 1;
+	//param_block_sd["filter"]["types"] = (S32)0xffff0000;
+	//param_block_sd["has_border"] = true;
+
+	//LLInitParam::LLSDParser(param_block_sd).parse(param_block);
+
+	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
+}
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 876151479fd..9f0eed2cbe8 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -33,6 +33,7 @@
 #include "llviewerprecompiledheaders.h"
 #include "llpanelmaininventory.h"
 
+#include "lldndbutton.h"
 #include "llfloaterinventory.h"
 #include "llinventorybridge.h"
 #include "llinventoryfunctions.h"
@@ -43,6 +44,7 @@
 #include "llsdserialize.h"
 #include "llspinctrl.h"
 #include "lltooldraganddrop.h"
+#include "llviewermenu.h"
 
 static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory"); // Seraph is this redundant with constructor?
 
@@ -78,7 +80,12 @@ class LLFloaterInventoryFinder : public LLFloater
 ///----------------------------------------------------------------------------
 
 LLPanelMainInventory::LLPanelMainInventory()
-	: LLPanel()
+	: LLPanel(),
+	  mActivePanel(NULL),
+	  mSavedFolderState(NULL),
+	  mFilterText(""),
+	  mMenuGearDefault(NULL),
+	  mMenuAdd(NULL)
 {
 	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_INIT);
 	// Menu Callbacks (non contex menus)
@@ -125,8 +132,7 @@ BOOL LLPanelMainInventory::postBuild()
 		mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder"));
 		mActivePanel->getFilter()->markDefault();
 		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-		mActivePanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mActivePanel, _1, _2));
-		mActivePanel->getRootFolder()->openFolder("My Inventory");
+		mActivePanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mActivePanel, _1, _2));
 	}
 	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
 	if (recent_items_panel)
@@ -135,7 +141,7 @@ BOOL LLPanelMainInventory::postBuild()
 		recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE);
 		recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
 		recent_items_panel->getFilter()->markDefault();
-		recent_items_panel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, recent_items_panel, _1, _2));
+		recent_items_panel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, recent_items_panel, _1, _2));
 	}
 
 	// Now load the stored settings from disk, if available.
@@ -163,7 +169,6 @@ BOOL LLPanelMainInventory::postBuild()
 
 	}
 
-
 	mFilterEditor = getChild<LLFilterEditor>("inventory search editor");
 	if (mFilterEditor)
 	{
@@ -176,10 +181,38 @@ BOOL LLPanelMainInventory::postBuild()
 	childSetLabelArg("Upload Sound", "[COST]", upload_cost);
 	childSetLabelArg("Upload Animation", "[COST]", upload_cost);
 	childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
-	
+
+	initListCommandsHandlers();
 	return TRUE;
 }
 
+void LLPanelMainInventory::initListCommandsHandlers()
+{
+	mListCommands = getChild<LLPanel>("bottom_panel");
+
+	mListCommands->childSetAction("options_gear_btn", boost::bind(&LLPanelMainInventory::onGearButtonClick, this));
+	mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelMainInventory::onTrashButtonClick, this));
+	mListCommands->childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddButtonClick, this));
+	/*
+	mListCommands->getChild<LLButton>("add_btn")->setHeldDownCallback(boost::bind(&LLPanelMainInventory::onAddButtonHeldDown, this));
+	static const LLSD add_landmark_command("add_landmark");
+	mListCommands->childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddAction, this, add_landmark_command));
+	*/
+
+	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn");
+	trash_btn->setDragAndDropHandler(boost::bind(&LLPanelMainInventory::handleDragAndDropToTrash, this
+			,	_4 // BOOL drop
+			,	_5 // EDragAndDropType cargo_type
+			,	_7 // EAcceptance* accept
+			));
+
+	mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
+	mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));
+	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	
+}
+
 // Destroys the object
 LLPanelMainInventory::~LLPanelMainInventory( void )
 {
@@ -550,6 +583,12 @@ void LLPanelMainInventory::setSelectCallback(const LLFolderView::signal_t::slot_
 	getChild<LLInventoryPanel>("Recent Items")->setSelectCallback(cb);
 }
 
+void LLPanelMainInventory::onSelectionChange(LLInventoryPanel *panel, const std::deque<LLFolderViewItem*>& items, BOOL user_action)
+{
+	updateListCommands();
+	panel->onSelectionChange(items, user_action);
+}
+
 ///----------------------------------------------------------------------------
 /// LLFloaterInventoryFinder
 ///----------------------------------------------------------------------------
@@ -817,3 +856,134 @@ void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
 	self->childSetValue("check_texture", FALSE);
 	self->childSetValue("check_snapshot", FALSE);
 }
+
+
+
+
+
+void LLPanelMainInventory::updateListCommands()
+{
+	bool trash_enabled = isActionEnabled("delete");
+
+	mListCommands->childSetEnabled("trash_btn", trash_enabled);
+}
+
+void LLPanelMainInventory::onGearButtonClick()
+{
+	showActionMenu(mMenuGearDefault,"options_gear_btn");
+}
+
+void LLPanelMainInventory::onAddButtonClick()
+{
+	showActionMenu(mMenuAdd,"add_btn");
+}
+
+void LLPanelMainInventory::showActionMenu(LLMenuGL* menu, std::string spawning_view_name)
+{
+	if (menu)
+	{
+		menu->buildDrawLabels();
+		menu->updateParent(LLMenuGL::sMenuContainer);
+		LLView* spawning_view = getChild<LLView> (spawning_view_name);
+		S32 menu_x, menu_y;
+		//show menu in co-ordinates of panel
+		spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this);
+		menu_y += menu->getRect().getHeight();
+		LLMenuGL::showPopup(this, menu, menu_x, menu_y);
+	}
+}
+
+void LLPanelMainInventory::onTrashButtonClick()
+{
+	onClipboardAction("delete");
+}
+
+void LLPanelMainInventory::onClipboardAction(const LLSD& userdata)
+{
+	std::string command_name = userdata.asString();
+	getActivePanel()->getRootFolder()->doToSelected(getActivePanel()->getModel(),command_name);
+}
+
+void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
+{
+	const std::string command_name = userdata.asString();
+	if (command_name == "new_window")
+	{
+		newWindow();
+	}
+	if (command_name == "sort_by_name")
+	{
+		const LLSD arg = "name";
+		setSortBy(arg);
+	}
+	if (command_name == "sort_by_recent")
+	{
+		const LLSD arg = "date";
+		setSortBy(arg);
+	}
+	if (command_name == "show_filters")
+	{
+		toggleFindOptions();
+	}
+	if (command_name == "reset_filters")
+	{
+		resetFilters();
+	}
+	if (command_name == "close_folders")
+	{
+		closeAllFolders();
+	}
+	if (command_name == "empty_trash")
+	{
+		const std::string notification = "ConfirmEmptyTrash";
+		gInventory.emptyFolderType(notification, LLAssetType::AT_TRASH);
+	}
+	if (command_name == "empty_lostnfound")
+	{
+		const std::string notification = "ConfirmEmptyLostAndFound";
+		gInventory.emptyFolderType(notification, LLAssetType::AT_LOST_AND_FOUND);
+	}
+	if (command_name == "save_texture")
+	{
+	}
+}
+
+BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
+{
+	const std::string command_name = userdata.asString();
+	if (command_name == "delete")
+	{
+		BOOL can_delete = FALSE;
+		LLFolderView *folder = getActivePanel()->getRootFolder();
+		if (folder)
+		{
+			can_delete = TRUE;
+			std::set<LLUUID> selection_set;
+			folder->getSelectionList(selection_set);
+			for (std::set<LLUUID>::iterator iter = selection_set.begin();
+				 iter != selection_set.end();
+				 ++iter)
+			{
+				const LLUUID &item_id = (*iter);
+				LLFolderViewItem *item = folder->getItemByID(item_id);
+				can_delete &= item->getListener()->isItemRemovable();
+			}
+			return can_delete;
+		}
+	}
+	return FALSE;
+}
+
+bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept)
+{
+	*accept = ACCEPT_NO;
+
+	const bool is_enabled = isActionEnabled("delete");
+	if (is_enabled) *accept = ACCEPT_YES_MULTI;
+
+	if (is_enabled && drop)
+	{
+		onClipboardAction("delete");
+	}
+	return true;
+}
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index a2b988e80cb..f7b9fd383e9 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -1,125 +1,145 @@
-/** 
- * @file llpanelmaininventory.h
- * @brief llpanelmaininventory.h
- * class definition
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLPANELMAININVENTORY_H
-#define LL_LLPANELMAININVENTORY_H
-
-#include "llpanel.h"
-#include "llinventorymodel.h"
-#include "llfolderview.h"
-
-class LLFolderViewItem;
-class LLInventoryPanel;
-class LLSaveFolderState;
-class LLFilterEditor;
-class LLTabContainer;
-class LLFloaterInventoryFinder;
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLPanelMainInventory
-//
-// This is a panel used to view and control an agent's inventory,
-// including all the fixin's (e.g. AllItems/RecentItems tabs, filter floaters).
-//
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLPanelMainInventory : public LLPanel, LLInventoryObserver
-{
-public:
-	friend class LLFloaterInventoryFinder;
-
-	LLPanelMainInventory();
-	~LLPanelMainInventory();
-
-	BOOL postBuild();
-
-	virtual BOOL handleKeyHere(KEY key, MASK mask);
-
-	// Inherited functionality
-	/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-									   EDragAndDropType cargo_type,
-									   void* cargo_data,
-									   EAcceptance* accept,
-									   std::string& tooltip_msg);
-	/*virtual*/ void changed(U32 mask);
-
-	LLInventoryPanel* getPanel() { return mActivePanel; }
-	LLInventoryPanel* getActivePanel() { return mActivePanel; }
-
-	const std::string& getFilterText() const { return mFilterText; }
-	
-	void setSelectCallback(const LLFolderView::signal_t::slot_type& cb);
-
-protected:
-	//
-	// Misc functions
-	//
-	void setFilterTextFromFilter();
-	void startSearch();
-	
-	void toggleFindOptions();
-
-	static BOOL filtersVisible(void* user_data);
-	void onClearSearch();
-	static void onFoldersByName(void *user_data);
-	static BOOL checkFoldersByName(void *user_data);
-	void onFilterEdit(const std::string& search_string );
-	static BOOL incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward);
-	void onFilterSelected();
-
-	const std::string getFilterSubString();
-	void setFilterSubString(const std::string& string);
-	
-	// menu callbacks
-	void doToSelected(const LLSD& userdata);
-	void closeAllFolders();
-	void newWindow();
-	void doCreate(const LLSD& userdata);
-	void resetFilters();
-	void setSortBy(const LLSD& userdata);
-	
-private:
-	LLFloaterInventoryFinder* getFinder();
-
-	LLFilterEditor*				mFilterEditor;
-	LLTabContainer*				mFilterTabs;
-	LLHandle<LLFloater>			mFinderHandle;
-	LLInventoryPanel*			mActivePanel;
-	LLSaveFolderState*			mSavedFolderState;
-
-	std::string					mFilterText;
-};
-
-#endif // LL_LLPANELMAININVENTORY_H
-
-
-
+/** 
+ * @file llpanelmaininventory.h
+ * @brief llpanelmaininventory.h
+ * class definition
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELMAININVENTORY_H
+#define LL_LLPANELMAININVENTORY_H
+
+#include "llpanel.h"
+#include "llinventorymodel.h"
+#include "llfolderview.h"
+
+class LLFolderViewItem;
+class LLInventoryPanel;
+class LLSaveFolderState;
+class LLFilterEditor;
+class LLTabContainer;
+class LLFloaterInventoryFinder;
+class LLMenuGL;
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLPanelMainInventory
+//
+// This is a panel used to view and control an agent's inventory,
+// including all the fixin's (e.g. AllItems/RecentItems tabs, filter floaters).
+//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLPanelMainInventory : public LLPanel, LLInventoryObserver
+{
+public:
+	friend class LLFloaterInventoryFinder;
+
+	LLPanelMainInventory();
+	~LLPanelMainInventory();
+
+	BOOL postBuild();
+
+	virtual BOOL handleKeyHere(KEY key, MASK mask);
+
+	// Inherited functionality
+	/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+									   EDragAndDropType cargo_type,
+									   void* cargo_data,
+									   EAcceptance* accept,
+									   std::string& tooltip_msg);
+	/*virtual*/ void changed(U32 mask);
+
+	LLInventoryPanel* getPanel() { return mActivePanel; }
+	LLInventoryPanel* getActivePanel() { return mActivePanel; }
+	const LLInventoryPanel* getActivePanel() const { return mActivePanel; }
+
+	const std::string& getFilterText() const { return mFilterText; }
+	
+	void setSelectCallback(const LLFolderView::signal_t::slot_type& cb);
+
+protected:
+	//
+	// Misc functions
+	//
+	void setFilterTextFromFilter();
+	void startSearch();
+	
+	void toggleFindOptions();
+
+	static BOOL filtersVisible(void* user_data);
+	void onClearSearch();
+	static void onFoldersByName(void *user_data);
+	static BOOL checkFoldersByName(void *user_data);
+	void onFilterEdit(const std::string& search_string );
+	static BOOL incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward);
+	void onFilterSelected();
+
+	const std::string getFilterSubString();
+	void setFilterSubString(const std::string& string);
+	
+	// menu callbacks
+	void doToSelected(const LLSD& userdata);
+	void closeAllFolders();
+	void newWindow();
+	void doCreate(const LLSD& userdata);
+	void resetFilters();
+	void setSortBy(const LLSD& userdata);
+	
+	// List Commands Handlers
+	void initListCommandsHandlers();
+	void updateListCommands();
+	void onGearButtonClick();
+	void onAddButtonClick();
+	void showActionMenu(LLMenuGL* menu, std::string spawning_view_name);
+	void onTrashButtonClick();
+	void onClipboardAction(const LLSD& userdata);
+	BOOL isActionEnabled(const LLSD& command_name);
+	void onCustomAction(const LLSD& command_name);
+	bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept);
+
+	void onSelectionChange(LLInventoryPanel *panel, const std::deque<LLFolderViewItem*>& items, BOOL user_action);
+
+private:
+	LLFloaterInventoryFinder* getFinder();
+
+	LLFilterEditor*				mFilterEditor;
+	LLTabContainer*				mFilterTabs;
+	LLHandle<LLFloater>			mFinderHandle;
+	LLInventoryPanel*			mActivePanel;
+	LLSaveFolderState*			mSavedFolderState;
+
+	LLPanel*					mListCommands;
+	LLMenuGL*					mMenuGearDefault;
+	LLMenuGL*					mMenuAdd;
+
+	std::string					mFilterText;
+};
+
+#endif // LL_LLPANELMAININVENTORY_H
+
+
+
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
new file mode 100644
index 00000000000..cfe46fc6429
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu
+ layout="topleft"
+ left="0"
+ mouse_opaque="false"
+ name="menu_folder_gear"
+ visible="false">
+    <menu_item_call
+     label="Upload"
+     layout="topleft"
+     name="upload">
+    </menu_item_call>
+    <menu_item_call
+     label="Folder"
+     layout="topleft"
+     name="add_folder">
+        <on_click
+         function="Inventory.Add.Action"
+         parameter="folder" />
+    <menu_item_call
+     label="Script"
+     layout="topleft"
+     name="add_script">
+        <on_click
+         function="Inventory.Add.Action"
+         parameter="script" />
+    </menu_item_call>
+    <menu_item_call
+     label="Note"
+     layout="topleft"
+     name="add_note">
+        <on_click
+         function="Inventory.Add.Action"
+         parameter="note" />
+    </menu_item_call>
+</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
new file mode 100644
index 00000000000..1592ba7bc76
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu
+ bottom="806"
+ layout="topleft"
+ left="0"
+ mouse_opaque="false"
+ name="menu_gear_default"
+ visible="false">
+    <menu_item_call
+     label="New Inventory Window"
+     layout="topleft"
+     name="new_window">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="new_window" />
+    </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Sort by Name"
+     layout="topleft"
+     name="sort_by_name">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="sort_by_name" />
+    </menu_item_call>
+    <menu_item_call
+     label="Sort by Most Recent"
+     layout="topleft"
+     name="sort_by_recent">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="sort_by_recent" />
+    </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Show Filters"
+     layout="topleft"
+     name="show_filters">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="show_filters" />
+    </menu_item_call>
+    <menu_item_call
+     label="Reset Filters"
+     layout="topleft"
+     name="reset_filters">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="reset_filters" />
+    </menu_item_call>
+    <menu_item_call
+     label="Close All Folders"
+     layout="topleft"
+     name="close_folders">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="close_folders" />
+    </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Empty Trash"
+     layout="topleft"
+     name="empty_trash">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="empty_trash" />
+    </menu_item_call>
+    <menu_item_call
+     label="Empty Lost and Found"
+     layout="topleft"
+     name="empty_lostnfound">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="empty_lostnfound" />
+    </menu_item_call>
+    <menu_item_call
+     label="Save Texture As"
+     layout="topleft"
+     name="save_texture">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="save_texture" />
+        <on_enable
+         function="Inventory.GearDefault.Enable"
+         parameter="save_texture" />
+    </menu_item_call>
+</menu>
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index 8c5bf768d69..fcee0ef9538 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -52,6 +52,57 @@
          top_delta="0"
          width="290" />
     </tab_container>
+
+    <panel
+     background_visible="true"
+     bevel_style="none"
+     bottom="0"
+     follows="left|right|bottom"
+     height="30"
+     layout="bottomleft"
+     left="0"
+	 visible="true"
+     name="bottom_panel"
+     width="330">
+        <button
+         follows="bottom|left"
+         tool_tip="Show additional options"
+         height="18"
+         image_disabled="OptionsMenu_Disabled"
+         image_selected="OptionsMenu_Press"
+         image_unselected="OptionsMenu_Off"
+         layout="topleft"
+         left="10"
+         name="options_gear_btn"
+         picture_style="true"
+         top="6"
+         width="18" />
+        <button
+         follows="bottom|left"
+         height="18"
+         image_selected="AddItem_Press"
+         image_unselected="AddItem_Off"
+         image_disabled="AddItem_Disabled"
+         layout="topleft"
+         left_pad="5"
+         name="add_btn"
+         picture_style="true"
+         tool_tip="Add new item"
+         width="18" />
+        <dnd_button
+         follows="bottom|right"
+         height="18"
+         image_selected="TrashItem_Press"
+         image_unselected="TrashItem_Off"
+         layout="topleft"
+         right="-5"
+         name="trash_btn"
+         picture_style="true"
+         tool_tip="Remove selected item"
+         top="6"
+         width="18" />
+    </panel>
+
     <menu_bar
      bg_visible="false"
      follows="left|top|right"
@@ -60,7 +111,8 @@
      left_delta="0"
      mouse_opaque="false"
      name="Inventory Menu"
-     top_delta="-45"
+     top="15"
+	 visible="true"
      width="290">
         <menu
          height="101"
-- 
GitLab


From e948c0c03c5d6a9d3b81617a88927bbc2058e28d Mon Sep 17 00:00:00 2001
From: Palmer <palmer@lindenlab.com>
Date: Thu, 5 Nov 2009 17:33:10 -0800
Subject: [PATCH 205/306] Ext-2191 - Put some limits on WLSkyDetail Reviewed by
 Mani

---
 indra/newview/llvowlsky.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp
index 8621e5e1d92..7a7538ae629 100644
--- a/indra/newview/llvowlsky.cpp
+++ b/indra/newview/llvowlsky.cpp
@@ -49,12 +49,12 @@ const U32 LLVOWLSky::MAX_SKY_DETAIL = 180;
 
 inline U32 LLVOWLSky::getNumStacks(void)
 {
-	return gSavedSettings.getU32("WLSkyDetail");
+	return min(MAX_SKY_DETAIL, max(MIN_SKY_DETAIL, gSavedSettings.getU32("WLSkyDetail")));
 }
 
 inline U32 LLVOWLSky::getNumSlices(void)
 {
-	return 2 * gSavedSettings.getU32("WLSkyDetail");
+	return 2 * min(MAX_SKY_DETAIL, max(MIN_SKY_DETAIL, gSavedSettings.getU32("WLSkyDetail")));
 }
 
 inline U32 LLVOWLSky::getFanNumVerts(void)
-- 
GitLab


From 3cff39dd4abd4cacd25375b1749f8485d1567aad Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 5 Nov 2009 20:42:06 -0500
Subject: [PATCH 206/306] EXT-2277 : Bottom panel for Inventory view

"Add" button menu for bottom panel.

--HG--
branch : avatar-pipeline
---
 .../default/xui/en/menu_inventory_add.xml     | 253 +++++++++++++++---
 1 file changed, 223 insertions(+), 30 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
index cfe46fc6429..b07a8bb5123 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
@@ -3,34 +3,227 @@
  layout="topleft"
  left="0"
  mouse_opaque="false"
- name="menu_folder_gear"
+ name="menu_inventory_add"
  visible="false">
-    <menu_item_call
-     label="Upload"
-     layout="topleft"
-     name="upload">
-    </menu_item_call>
-    <menu_item_call
-     label="Folder"
-     layout="topleft"
-     name="add_folder">
-        <on_click
-         function="Inventory.Add.Action"
-         parameter="folder" />
-    <menu_item_call
-     label="Script"
-     layout="topleft"
-     name="add_script">
-        <on_click
-         function="Inventory.Add.Action"
-         parameter="script" />
-    </menu_item_call>
-    <menu_item_call
-     label="Note"
-     layout="topleft"
-     name="add_note">
-        <on_click
-         function="Inventory.Add.Action"
-         parameter="note" />
-    </menu_item_call>
-</menu>
+            <menu
+             create_jump_keys="true"
+             label="Upload"
+             layout="topleft"
+             name="upload"
+             tear_off="true">
+                <menu_item_call
+                 label="Image (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Image"
+                 shortcut="control|U">
+                    <menu_item_call.on_click
+                     function="File.UploadImage"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Sound (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Sound">
+                    <menu_item_call.on_click
+                     function="File.UploadSound"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Animation (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Animation">
+                    <menu_item_call.on_click
+                     function="File.UploadAnim"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Bulk (L$[COST] per file)..."
+                 layout="topleft"
+                 name="Bulk Upload">
+                    <menu_item_call.on_click
+                     function="File.UploadBulk"
+                     parameter="" />
+                </menu_item_call>
+                <menu_item_separator
+                 layout="topleft" />
+            </menu>
+
+            <menu_item_call
+             label="New Folder"
+             layout="topleft"
+             name="New Folder">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="category" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Script"
+             layout="topleft"
+             name="New Script">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="lsl" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Note"
+             layout="topleft"
+             name="New Note">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="notecard" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Gesture"
+             layout="topleft"
+             name="New Gesture">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="gesture" />
+            </menu_item_call>
+            <menu
+             height="175"
+             label="New Clothes"
+             layout="topleft"
+             left_delta="0"
+             mouse_opaque="false"
+             name="New Clothes"
+             top_pad="514"
+             width="125">
+                <menu_item_call
+                 label="New Shirt"
+                 layout="topleft"
+                 name="New Shirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Pants"
+                 layout="topleft"
+                 name="New Pants">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="pants" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Shoes"
+                 layout="topleft"
+                 name="New Shoes">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shoes" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Socks"
+                 layout="topleft"
+                 name="New Socks">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="socks" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Jacket"
+                 layout="topleft"
+                 name="New Jacket">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="jacket" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Skirt"
+                 layout="topleft"
+                 name="New Skirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="skirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Gloves"
+                 layout="topleft"
+                 name="New Gloves">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="gloves" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Undershirt"
+                 layout="topleft"
+                 name="New Undershirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="undershirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Underpants"
+                 layout="topleft"
+                 name="New Underpants">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="underpants" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Alpha"
+                 layout="topleft"
+                 name="New Alpha">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="alpha" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Tattoo"
+                 layout="topleft"
+                 name="New Tattoo">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="tattoo" />
+                </menu_item_call>
+            </menu>
+            <menu
+             height="85"
+             label="New Body Parts"
+             layout="topleft"
+             left_delta="0"
+             mouse_opaque="false"
+             name="New Body Parts"
+             top_pad="514"
+             width="118">
+                <menu_item_call
+                 label="New Shape"
+                 layout="topleft"
+                 name="New Shape">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shape" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Skin"
+                 layout="topleft"
+                 name="New Skin">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="skin" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Hair"
+                 layout="topleft"
+                 name="New Hair">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="hair" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Eyes"
+                 layout="topleft"
+                 name="New Eyes">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="eyes" />
+                </menu_item_call>
+            </menu>
+</menu>
\ No newline at end of file
-- 
GitLab


From 96345c7420a38ce6cf385bac644d5d243ff17395 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 5 Nov 2009 21:51:35 -0500
Subject: [PATCH 207/306] EXT-2278 : "Save Texture As" for bottom panel

--HG--
branch : avatar-pipeline
---
 indra/newview/llpanelmaininventory.cpp        | 73 +++++++++++++++++++
 indra/newview/llpanelmaininventory.h          |  2 +-
 .../xui/en/menu_inventory_gear_default.xml    | 22 +++---
 3 files changed, 85 insertions(+), 12 deletions(-)

diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 9f0eed2cbe8..bdfff9b2ab3 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -34,6 +34,7 @@
 #include "llpanelmaininventory.h"
 
 #include "lldndbutton.h"
+#include "llfilepicker.h"
 #include "llfloaterinventory.h"
 #include "llinventorybridge.h"
 #include "llinventoryfunctions.h"
@@ -45,9 +46,18 @@
 #include "llspinctrl.h"
 #include "lltooldraganddrop.h"
 #include "llviewermenu.h"
+#include "llviewertexturelist.h"
 
 static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory"); // Seraph is this redundant with constructor?
 
+void on_file_loaded_for_save(BOOL success, 
+							 LLViewerFetchedTexture *src_vi,
+							 LLImageRaw* src, 
+							 LLImageRaw* aux_src, 
+							 S32 discard_level,
+							 BOOL final,
+							 void* userdata);
+
 ///----------------------------------------------------------------------------
 /// LLFloaterInventoryFinder
 ///----------------------------------------------------------------------------
@@ -906,6 +916,9 @@ void LLPanelMainInventory::onClipboardAction(const LLSD& userdata)
 
 void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
 {
+	if (!isActionEnabled(userdata))
+		return;
+
 	const std::string command_name = userdata.asString();
 	if (command_name == "new_window")
 	{
@@ -945,6 +958,25 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
 	}
 	if (command_name == "save_texture")
 	{
+		LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
+		if (!current_item)
+		{
+			return;
+		}
+
+		const LLUUID& item_id = current_item->getListener()->getUUID();
+		LLFilePicker& file_picker = LLFilePicker::instance();
+		const LLInventoryItem* item = gInventory.getItem(item_id);
+		if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_TGA, item ? LLDir::getScrubbedFileName(item->getName()) : LLStringUtil::null) )
+		{
+			// User canceled or we failed to acquire save file.
+			return;
+		}
+		// remember the user-approved/edited file name.
+		const LLUUID& asset_id = item->getAssetUUID();
+		LLPointer<LLViewerFetchedTexture> image = LLViewerTextureManager::getFetchedTexture(asset_id, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+		image->setLoadedCallback( on_file_loaded_for_save, 
+								  0, TRUE, FALSE, new std::string(file_picker.getFirstFile()) );
 	}
 }
 
@@ -971,6 +1003,14 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
 			return can_delete;
 		}
 	}
+	if (command_name == "save_texture")
+	{
+		LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
+		if (current_item)
+		{
+			return (current_item->getListener()->getInventoryType() == LLInventoryType::IT_TEXTURE);
+		}
+	}
 	return FALSE;
 }
 
@@ -987,3 +1027,36 @@ bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType
 	}
 	return true;
 }
+
+void on_file_loaded_for_save(BOOL success, 
+							 LLViewerFetchedTexture *src_vi,
+							 LLImageRaw* src, 
+							 LLImageRaw* aux_src, 
+							 S32 discard_level,
+							 BOOL final,
+							 void* userdata)
+{
+	std::string *filename = (std::string*) userdata;
+
+	if (final && success)
+	{
+		LLPointer<LLImageTGA> image_tga = new LLImageTGA;
+		if( !image_tga->encode( src ) )
+		{
+			LLSD args;
+			args["FILE"] = *filename;
+			LLNotifications::instance().add("CannotEncodeFile", args);
+		}
+		else if( !image_tga->save( *filename ) )
+		{
+			LLSD args;
+			args["FILE"] = *filename;
+			LLNotifications::instance().add("CannotWriteFile", args);
+		}
+	}
+	
+	if(!success )
+	{
+		LLNotifications::instance().add("CannotDownloadFile");
+	}
+}
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index f7b9fd383e9..29e9baa6cf2 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -89,6 +89,7 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver
 	void startSearch();
 	
 	void toggleFindOptions();
+	void onSelectionChange(LLInventoryPanel *panel, const std::deque<LLFolderViewItem*>& items, BOOL user_action);
 
 	static BOOL filtersVisible(void* user_data);
 	void onClearSearch();
@@ -121,7 +122,6 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver
 	void onCustomAction(const LLSD& command_name);
 	bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept);
 
-	void onSelectionChange(LLInventoryPanel *panel, const std::deque<LLFolderViewItem*>& items, BOOL user_action);
 
 private:
 	LLFloaterInventoryFinder* getFinder();
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
index 1592ba7bc76..435a3e6d340 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
@@ -76,15 +76,15 @@
          function="Inventory.GearDefault.Custom.Action"
          parameter="empty_lostnfound" />
     </menu_item_call>
-    <menu_item_call
-     label="Save Texture As"
-     layout="topleft"
-     name="save_texture">
-        <on_click
-         function="Inventory.GearDefault.Custom.Action"
-         parameter="save_texture" />
-        <on_enable
-         function="Inventory.GearDefault.Enable"
-         parameter="save_texture" />
-    </menu_item_call>
+        <menu_item_call
+         label="Save Texture As"
+         layout="topleft"
+         name="Save Texture As">
+            <on_click
+             function="Inventory.GearDefault.Custom.Action"
+             parameter="save_texture" />
+            <on_enable
+			 function="Inventory.GearDefault.Enable"
+			 parameter="save_texture" />
+        </menu_item_call>
 </menu>
-- 
GitLab


From fac0b6836a59681443fb2bbd13e6b5eb9c07cef5 Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Thu, 5 Nov 2009 20:36:15 -0800
Subject: [PATCH 208/306] refactored top level ui into main_view.xml

---
 indra/llui/llfloater.cpp                      |   2 +
 indra/llui/llmenugl.cpp                       |   6 +-
 indra/llui/llmenugl.h                         |   4 +-
 indra/llui/lltooltip.cpp                      |   4 +-
 indra/newview/llbottomtray.cpp                |   2 +-
 indra/newview/lldebugview.cpp                 |   6 +-
 indra/newview/lldebugview.h                   |   2 +
 indra/newview/llfloatersnapshot.cpp           |   2 +
 indra/newview/llmoveview.cpp                  |   5 +-
 indra/newview/llviewermenu.cpp                |  22 +--
 indra/newview/llviewermenu.h                  |   5 +
 indra/newview/llviewerwindow.cpp              | 177 ++++++------------
 .../skins/default/xui/en/floater_aaa.xml      |  21 +--
 .../skins/default/xui/en/main_view.xml        | 138 ++++++++++++++
 14 files changed, 239 insertions(+), 157 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/en/main_view.xml

diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index aac27e65627..f2cdad8854a 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -1857,6 +1857,8 @@ void LLFloater::buildButtons()
 /////////////////////////////////////////////////////
 // LLFloaterView
 
+static LLDefaultChildRegistry::Register<LLFloaterView> r("floater_view");
+
 LLFloaterView::LLFloaterView (const Params& p)
 :	LLUICtrl (p),
 	mFocusCycleMode(FALSE),
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 956e8439874..f078b679128 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -3247,11 +3247,9 @@ BOOL LLMenuBarGL::handleHover( S32 x, S32 y, MASK mask )
 ///============================================================================
 LLCoordGL LLMenuHolderGL::sContextMenuSpawnPos(S32_MAX, S32_MAX);
 
-LLMenuHolderGL::LLMenuHolderGL()
-	: LLPanel()
+LLMenuHolderGL::LLMenuHolderGL(const LLMenuHolderGL::Params& p)
+	: LLPanel(p)
 {
-	setName("Menu Holder");
-	setMouseOpaque(FALSE);
 	sItemActivationTimer.stop();
 	mCanHide = TRUE;
 }
diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h
index 09d9e407c7b..b0681d252d2 100644
--- a/indra/llui/llmenugl.h
+++ b/indra/llui/llmenugl.h
@@ -765,7 +765,9 @@ class LLMenuBarGL : public LLMenuGL
 class LLMenuHolderGL : public LLPanel
 {
 public:
-	LLMenuHolderGL();
+	struct Params : public LLInitParam::Block<Params, LLPanel::Params>
+	{};
+	LLMenuHolderGL(const Params& p);
 	virtual ~LLMenuHolderGL() {}
 
 	virtual BOOL hideMenus();
diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp
index 4bc9a9c0426..fe1c2ba67c0 100644
--- a/indra/llui/lltooltip.cpp
+++ b/indra/llui/lltooltip.cpp
@@ -57,6 +57,8 @@ LLToolTipView *gToolTipView = NULL;
 // Member functions
 //
 
+static LLDefaultChildRegistry::Register<LLToolTipView> register_tooltip_view("tooltip_view");
+
 LLToolTipView::Params::Params()
 {
 	mouse_opaque = false;
@@ -142,7 +144,7 @@ void LLToolTipView::drawStickyRect()
 //
 
 
-static LLDefaultChildRegistry::Register<LLToolTip> r("tool_tip");
+static LLDefaultChildRegistry::Register<LLToolTip> register_tooltip("tool_tip");
 
 
 LLToolTip::Params::Params()
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index a17ba79078b..4c15fdd1a29 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -71,7 +71,7 @@ LLBottomTray::LLBottomTray(const LLSD&)
 	//this is to fix a crash that occurs because LLBottomTray is a singleton
 	//and thus is deleted at the end of the viewers lifetime, but to be cleanly
 	//destroyed LLBottomTray requires some subsystems that are long gone
-	LLUI::getRootView()->addChild(this);
+	//LLUI::getRootView()->addChild(this);
 
 	// Necessary for focus movement among child controls
 	setFocusRoot(TRUE);
diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp
index 24a57cb0c1b..15d74c9793d 100644
--- a/indra/newview/lldebugview.cpp
+++ b/indra/newview/lldebugview.cpp
@@ -55,12 +55,16 @@ LLDebugView* gDebugView = NULL;
 //
 // Methods
 //
+static LLDefaultChildRegistry::Register<LLDebugView> r("debug_view");
 
 LLDebugView::LLDebugView(const LLDebugView::Params& p)
 :	LLView(p)
+{}
+
+void LLDebugView::init()
 {
 	LLRect r;
-	LLRect rect(p.rect);
+	LLRect rect = getLocalRect();
 
 	r.set(10, rect.getHeight() - 100, rect.getWidth()/2, 100);
 	LLConsole::Params cp;
diff --git a/indra/newview/lldebugview.h b/indra/newview/lldebugview.h
index 9cf2a59a0a7..b17cdb43cdc 100644
--- a/indra/newview/lldebugview.h
+++ b/indra/newview/lldebugview.h
@@ -60,6 +60,8 @@ class LLDebugView : public LLView
 	LLDebugView(const Params&);
 	~LLDebugView();
 
+	void init();
+
 	void setStatsVisible(BOOL visible);
 	
 	LLFastTimerView* mFastTimerView;
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index fd2e7b3487a..347cc3a58e4 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -101,6 +101,8 @@ S32 BORDER_WIDTH = 6;
 const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte
 const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
 
+static LLDefaultChildRegistry::Register<LLSnapshotFloaterView> r("snapshot_floater_view");
+
 ///----------------------------------------------------------------------------
 /// Class LLSnapshotLivePreview 
 ///----------------------------------------------------------------------------
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 14da35594fb..b0520874752 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -598,14 +598,11 @@ BOOL LLPanelStandStopFlying::postBuild()
 void LLPanelStandStopFlying::setVisible(BOOL visible)
 {
 	//we dont need to show the panel if these buttons are not activated
-	if (visible && !mStandButton->getVisible() && !mStopFlyingButton->getVisible()) visible = false;
-
 	if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK) visible = false;
 
 	if (visible)
 	{
 		updatePosition();
-		getParent()->sendChildToFront(this);
 	}
 
 	LLPanel::setVisible(visible);
@@ -638,7 +635,7 @@ LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel()
 	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_stand_stop_flying.xml");
 
 	panel->setVisible(FALSE);
-	LLUI::getRootView()->addChild(panel);
+	//LLUI::getRootView()->addChild(panel);
 
 	llinfos << "Build LLPanelStandStopFlying panel" << llendl;
 
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index b30acd47f1f..ad8739585fb 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -467,16 +467,6 @@ void set_underclothes_menu_options()
 void init_menus()
 {
 	S32 top = gViewerWindow->getRootView()->getRect().getHeight();
-	S32 width = gViewerWindow->getRootView()->getRect().getWidth();
-
-	//
-	// Main menu bar
-	//
-	gMenuHolder = new LLViewerMenuHolderGL();
-	gMenuHolder->setRect(LLRect(0, top, width, 0));
-	gMenuHolder->setFollowsAll();
-
-	LLMenuGL::sMenuContainer = gMenuHolder;
 
 	// Initialize actions
 	initialize_menus();
@@ -7080,6 +7070,11 @@ void handle_test_load_url(void*)
 //
 // LLViewerMenuHolderGL
 //
+static LLDefaultChildRegistry::Register<LLViewerMenuHolderGL> r("menu_holder");
+
+LLViewerMenuHolderGL::LLViewerMenuHolderGL(const LLViewerMenuHolderGL::Params& p)
+: LLMenuHolderGL(p)
+{}
 
 BOOL LLViewerMenuHolderGL::hideMenus()
 {
@@ -7089,8 +7084,11 @@ BOOL LLViewerMenuHolderGL::hideMenus()
 	mParcelSelection = NULL;
 	mObjectSelection = NULL;
 
-	gMenuBarView->clearHoverItem();
-	gMenuBarView->resetMenuTrigger();
+	if (gMenuBarView)
+	{
+		gMenuBarView->clearHoverItem();
+		gMenuBarView->resetMenuTrigger();
+	}
 
 	return handled;
 }
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index b65878b5e63..50751d60668 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -132,6 +132,11 @@ void handle_export_selected( void * );
 class LLViewerMenuHolderGL : public LLMenuHolderGL
 {
 public:
+	struct Params : public LLInitParam::Block<Params, LLMenuHolderGL::Params>
+	{};
+
+	LLViewerMenuHolderGL(const Params& p);
+
 	virtual BOOL hideMenus();
 	
 	void setParcelSelection(LLSafeHandle<LLParcelSelection> selection);
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 9b3dbcd2f67..86303699717 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1373,6 +1373,10 @@ void LLViewerWindow::initGLDefaults()
 	gCylinder.prerender();
 }
 
+struct MainPanel : public LLPanel
+{
+};
+
 void LLViewerWindow::initBase()
 {
 	S32 height = getWindowHeight();
@@ -1396,30 +1400,15 @@ void LLViewerWindow::initBase()
 	// Create the floater view at the start so that other views can add children to it. 
 	// (But wait to add it as a child of the root view so that it will be in front of the 
 	// other views.)
+	MainPanel* main_view = new MainPanel();
+	LLUICtrlFactory::instance().buildPanel(main_view, "main_view.xml");
+	main_view->setShape(full_window);
+	getRootView()->addChild(main_view);
 
 	// Constrain floaters to inside the menu and status bar regions.
-	LLRect floater_view_rect = full_window;
-	// make space for menu bar
-	floater_view_rect.mTop -= MENU_BAR_HEIGHT;
-
-	LLFloaterView::Params fvparams;
-	fvparams.name("Floater View");
-	fvparams.rect(floater_view_rect);
-	fvparams.mouse_opaque(false);
-	fvparams.follows.flags(FOLLOWS_ALL);
-	fvparams.tab_stop(false);
-	gFloaterView = LLUICtrlFactory::create<LLFloaterView> (fvparams);
-
-	LLSnapshotFloaterView::Params snapParams;
-	snapParams.name("Snapshot Floater View");
-	snapParams.rect(full_window);
-	snapParams.enabled(false);
-	gSnapshotFloaterView = LLUICtrlFactory::create<LLSnapshotFloaterView> (snapParams);
+	gFloaterView = getRootView()->getChild<LLFloaterView>("Floater View");
+	gSnapshotFloaterView = getRootView()->getChild<LLSnapshotFloaterView>("Snapshot Floater View");
 	
-	// Snapshot floater must start invisible otherwise it eats all
-	// the tooltips. JC
-	gSnapshotFloaterView->setVisible(FALSE);
-
 	// Console
 	llassert( !gConsole );
 	LLConsole::Params cp;
@@ -1443,43 +1432,21 @@ void LLViewerWindow::initBase()
 	}
 #endif
 
-	// Debug view over the console
-	LLDebugView::Params debug_p;
-	debug_p.name("DebugView");
-	debug_p.rect(full_window);
-	debug_p.follows.flags(FOLLOWS_ALL);
-	debug_p.visible(true);
-	gDebugView = LLUICtrlFactory::create<LLDebugView>(debug_p);
-	getRootView()->addChild(gDebugView);
-
-	// Add floater view at the end so it will be on top, and give it tab priority over others
-	getRootView()->addChild(gFloaterView, -1);
-	getRootView()->addChild(gSnapshotFloaterView);
-
-	// notify above floaters!
-	LLRect notify_rect = floater_view_rect;
-	LLNotifyBoxView::Params p;
-	p.name("notify_container");
-	p.rect(notify_rect);
-	p.mouse_opaque(false);
-	p.follows.flags(FOLLOWS_ALL);
-	gNotifyBoxView = LLUICtrlFactory::create<LLNotifyBoxView> (p);
-	getRootView()->addChild(gNotifyBoxView, -2);
-
-	// View for tooltips
-	LLToolTipView::Params hvp;
-	hvp.name("tooltip view");
-	hvp.rect(full_window);
-	hvp.follows.flags(FOLLOWS_ALL);
-	gToolTipView = LLUICtrlFactory::create<LLToolTipView>(hvp);
-	gToolTipView->setFollowsAll();
-	getRootView()->addChild(gToolTipView);
+	gDebugView = getRootView()->getChild<LLDebugView>("DebugView");
+	gDebugView->init();
+	gNotifyBoxView = getRootView()->getChild<LLNotifyBoxView>("notify_container");
+	gToolTipView = getRootView()->getChild<LLToolTipView>("tooltip view");
 
 	// Add the progress bar view (startup view), which overrides everything
 	mProgressView = new LLProgressView(full_window);
 	getRootView()->addChild(mProgressView);
 	setShowProgress(FALSE);
 	setProgressCancelButtonVisible(FALSE);
+
+	gMenuHolder = getRootView()->getChild<LLViewerMenuHolderGL>("Menu Holder");
+
+	LLMenuGL::sMenuContainer = gMenuHolder;
+
 }
 
 void LLViewerWindow::initWorldUI()
@@ -1488,20 +1455,22 @@ void LLViewerWindow::initWorldUI()
 	S32 width = mRootView->getRect().getWidth();
 	LLRect full_window(0, height, width, 0);
 
+
 	gIMMgr = LLIMMgr::getInstance();
 
 	// side tray
-	getRootView()->addChild(LLSideTray::getInstance());
+	//getRootView()->addChild(LLSideTray::getInstance());
 
 	getRootView()->sendChildToFront(gFloaterView);
 	getRootView()->sendChildToFront(gSnapshotFloaterView);
 
 	// new bottom panel
-	LLRect rc = LLBottomTray::getInstance()->getRect();
-	rc.mLeft = 0;
-	rc.mRight = mRootView->getRect().getWidth();
-	LLBottomTray::getInstance()->reshape(rc.getWidth(),rc.getHeight(),FALSE);
-	LLBottomTray::getInstance()->setRect(rc);
+	LLPanel* bottom_tray_container = getRootView()->getChild<LLPanel>("bottom_tray_container");
+	LLBottomTray* bottom_tray = LLBottomTray::getInstance();
+	bottom_tray->setShape(bottom_tray_container->getLocalRect());
+	bottom_tray->setFollows(FOLLOWS_ALL);
+	bottom_tray_container->addChild(bottom_tray);
+	bottom_tray_container->setVisible(TRUE);
 
 	// Pre initialize instance communicate instance;
 	//  currently needs to happen before initializing chat or IM
@@ -1517,17 +1486,6 @@ void LLViewerWindow::initWorldUI()
 	gMorphView = LLUICtrlFactory::create<LLMorphView>(mvp);
 	getRootView()->addChild(gMorphView);
 
-	// Make space for nav bar.
-	LLNavigationBar* navbar = LLNavigationBar::getInstance();
-	LLRect floater_view_rect = gFloaterView->getRect();
-	LLRect notify_view_rect = gNotifyBoxView->getRect();
-	floater_view_rect.mTop -= navbar->getDefNavBarHeight();
-	floater_view_rect.mBottom += LLBottomTray::getInstance()->getRect().getHeight();
-	notify_view_rect.mTop -= navbar->getDefNavBarHeight();
-	notify_view_rect.mBottom += LLBottomTray::getInstance()->getRect().getHeight();
-	gFloaterView->setRect(floater_view_rect);
-	gNotifyBoxView->setRect(notify_view_rect);
-
 	LLWorldMapView::initClass();
 	
 	// Force gFloaterWorldMap to initialize
@@ -1538,22 +1496,22 @@ void LLViewerWindow::initWorldUI()
 	LLFloaterReg::hideInstance("build");
 
 	// Status bar
-	S32 menu_bar_height = gMenuBarView->getRect().getHeight();
-	LLRect root_rect = getRootView()->getRect();
-	LLRect status_rect(0, root_rect.getHeight(), root_rect.getWidth(), root_rect.getHeight() - menu_bar_height);
-	gStatusBar = new LLStatusBar(status_rect);
-	gStatusBar->setFollows(FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_TOP);
-
-	gStatusBar->reshape(root_rect.getWidth(), gStatusBar->getRect().getHeight(), TRUE);
-	gStatusBar->translate(0, root_rect.getHeight() - gStatusBar->getRect().getHeight());
+	LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container");
+	gStatusBar = new LLStatusBar(status_bar_container->getLocalRect());
+	gStatusBar->setFollows(FOLLOWS_ALL);
 	// sync bg color with menu bar
 	gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor().get() );
+	status_bar_container->addChild(gStatusBar);
+	status_bar_container->setVisible(TRUE);
 
 	// Navigation bar
-	navbar->reshape(root_rect.getWidth(), navbar->getRect().getHeight(), TRUE); // *TODO: redundant?
-	navbar->translate(0, root_rect.getHeight() - menu_bar_height - navbar->getRect().getHeight()); // FIXME
-	navbar->setBackgroundColor(gMenuBarView->getBackgroundColor().get());
+	LLPanel* nav_bar_container = getRootView()->getChild<LLPanel>("nav_bar_container");
 
+	LLNavigationBar* navbar = LLNavigationBar::getInstance();
+	navbar->setShape(nav_bar_container->getLocalRect());
+	navbar->setBackgroundColor(gMenuBarView->getBackgroundColor().get());
+	nav_bar_container->addChild(navbar);
+	nav_bar_container->setVisible(TRUE);
 	
 	if (!gSavedSettings.getBOOL("ShowNavbarNavigationPanel"))
 	{
@@ -1585,19 +1543,6 @@ void LLViewerWindow::initWorldUI()
 		LLBottomTray::getInstance()->showGestureButton(FALSE);
 	}
 
-	getRootView()->addChild(gStatusBar);
-	getRootView()->addChild(navbar);
-
-
-	//sidetray
-	//then notify area
-	//then menu
-	//getRootView()->sendChildToFront(LLSideTray::getInstance());
-
-	getRootView()->sendChildToFront(gNotifyBoxView);
-	// menu holder appears on top to get first pass at all mouse events
-	getRootView()->sendChildToFront(gMenuHolder);
-
 	if ( gHUDView == NULL )
 	{
 		LLRect hud_rect = full_window;
@@ -1611,11 +1556,13 @@ void LLViewerWindow::initWorldUI()
 		getRootView()->addChildInBack(gHUDView);
 	}
 
-	// this allows not to see UI elements created while UI initializing after Alt+Tab was pressed during login. EXT-744.
-	moveProgressViewToFront();
+	LLPanel* panel_ssf_container = getRootView()->getChild<LLPanel>("stand_stop_flying_container");
+	LLPanelStandStopFlying* panel_stand_stop_flying	= LLPanelStandStopFlying::getInstance();
+	panel_stand_stop_flying->setShape(panel_ssf_container->getLocalRect());
+	panel_stand_stop_flying->setFollows(FOLLOWS_ALL);
+	panel_ssf_container->addChild(panel_stand_stop_flying);
+	panel_ssf_container->setVisible(TRUE);
 
-	// tooltips are always on top
-	getRootView()->sendChildToFront(gToolTipView);
 }
 
 // Destroy the UI
@@ -2327,26 +2274,26 @@ void LLViewerWindow::moveCursorToCenter()
 
 void LLViewerWindow::updateBottomTrayRect()
 {
-	if(LLBottomTray::instanceExists() && LLSideTray::instanceCreated())
-	{
-		S32 side_tray_width = 0;
-		if(LLSideTray::getInstance()->getVisible())
-		{
-			side_tray_width = LLSideTray::getInstance()->getTrayWidth();
-		}
+	//if(LLBottomTray::instanceExists() && LLSideTray::instanceCreated())
+	//{
+	//	S32 side_tray_width = 0;
+	//	if(LLSideTray::getInstance()->getVisible())
+	//	{
+	//		side_tray_width = LLSideTray::getInstance()->getTrayWidth();
+	//	}
 
-		LLBottomTray* bottom_tray = LLBottomTray::getInstance();
-		S32 right = llround((F32)mWindowRect.mRight / mDisplayScale.mV[VX]) - side_tray_width;
+	//	LLBottomTray* bottom_tray = LLBottomTray::getInstance();
+	//	S32 right = llround((F32)mWindowRect.mRight / mDisplayScale.mV[VX]) - side_tray_width;
 
-		LLRect rc = bottom_tray->getRect();
-		if (right != rc.mRight)
-		{
-			rc.mRight = right;
-			bottom_tray->reshape(rc.getWidth(), rc.getHeight(), FALSE);
-			bottom_tray->setRect(rc);
-			mOnBottomTrayWidthChanged();
-		}
-	}
+	//	LLRect rc = bottom_tray->getRect();
+	//	if (right != rc.mRight)
+	//	{
+	//		rc.mRight = right;
+	//		bottom_tray->reshape(rc.getWidth(), rc.getHeight(), FALSE);
+	//		bottom_tray->setRect(rc);
+	//		mOnBottomTrayWidthChanged();
+	//	}
+	//}
 }
 
 //////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml
index 4d5268681b6..d0d0cc64c55 100644
--- a/indra/newview/skins/default/xui/en/floater_aaa.xml
+++ b/indra/newview/skins/default/xui/en/floater_aaa.xml
@@ -1,24 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
- legacy_header_height="18"
- height="440"
+ height="768"
  layout="topleft"
  name="floater_aaa"
- help_topic="floater_aaa"
- save_rect="true"
  can_resize="true" 
- title="ABOUT [APP_NAME]"
- width="470">
-    <text_editor
-     follows="left|top|right|bottom"
-     height="400"
-     layout="topleft"
-     left="6"
-     max_length="65536"
-     name="credits_editor"
-     top="25"
-     width="458"
-     word_wrap="true">
-This is line 4
-    </text_editor>
+ width="1024">
+  <panel filename="main_view.xml" follows="all" width="1024" height="768" top="0"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
new file mode 100644
index 00000000000..2d69465b580
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ follows="left|right|top|bottom"
+ height="768" 
+ layout="topleft"
+ left="0"
+ mouse_opaque="false"
+ name="screen"
+ width="1024">
+  <layout_stack border_size="0"
+                follows="all"
+                height="768" 
+                mouse_opaque="false" 
+                name="menu_stack"
+                orientation="vertical">
+    <!-- filename="panel_status_bar.xml"-->
+    <layout_panel auto_resize="false"
+                  mouse_opaque="false"
+                  name="status_bar_container"
+                  width="1024"
+                  visible="false"/>
+    <!--filename="panel_navigation_bar.xml"-->
+    <layout_panel auto_resize="false"
+                  height="65" 
+                  mouse_opaque="false" 
+                  name="nav_bar_container"
+                  width="1024"
+                  visible="false"/>
+    <layout_stack auto_resize="true" 
+                  border_size="0" 
+                  follows="all" 
+                  height="500" 
+                  mouse_opaque="false"
+                  name="hud_stack" 
+                  orientation="horizontal" 
+                  width="1024">
+      <panel auto_resize="true" 
+             follows="all" 
+             height="500" 
+             layout="topleft" 
+             mouse_opaque="false"
+             name="main_view" 
+             user_resize="true" 
+             width="500">
+        <layout_stack bottom="500" 
+                      follows="all" 
+                      height="500"
+                      mouse_opaque="false"
+                      name="hud_stack" 
+                      orientation="vertical">
+          <panel auto_resize="true" 
+                 follows="all" 
+                 height="500" 
+                 layout="topleft" 
+                 mouse_opaque="false"
+                 name="hud container" 
+                 width="500">
+            <debug_view follows="all"
+                        left="0" 
+                        top="0"
+                        mouse_opaque="false" 
+                        height="500"
+                        name="DebugView"
+                        width="500"/>
+
+              <panel follows="right|top|bottom" 
+                     height="500" 
+                     mouse_opaque="false"
+                     name="side_bar_tabs" 
+                     right="500" 
+                     top="0" 
+                     width="32"/>
+          </panel>
+          <!--filename="panel_stand_stop_flying.xml"-->
+          <layout_panel auto_resize="false"
+                 follows="all"
+                 min_height="25"
+                 mouse_opaque="false"
+                 name="stand_stop_flying_container"
+                 visible="false"/>
+          <!--filename="panel_bottomtray.xml"-->
+          <layout_panel auto_resize="false" 
+                 follows="all" 
+                 min_height="33" 
+                 mouse_opaque="false"
+                 name="bottom_tray_container"
+                 visible="false"/>
+        </layout_stack>
+        <floater_view follows="all" 
+                      height="500" 
+                      mouse_opaque="false" 
+                      name="Floater View"
+                      tab_group="-1" 
+                      tab_stop="false"
+                      top="0"/>
+        <snapshot_floater_view enabled="false"
+                               follows="all"
+                               height="500"
+                               left="0" 
+                               mouse_opaque="false"
+                               name="Snapshot Floater View"
+                               tab_stop="false"
+                               top="0"
+                               visible="false"/>
+      </panel>
+      <!-- side tray -->
+      <layout_panel auto_resize="false" 
+                    follows="all" 
+                    height="500" 
+                    min_width="333" 
+                    mouse_opaque="false"
+                    name="side_tray_container" 
+                    user_resize="true"
+                    visible="false" 
+                    width="333"/>
+    </layout_stack>
+  </layout_stack>
+  <notify_box_view top="0"
+                   follows="all"
+                   height="768"
+                   mouse_opaque="false"
+                   name="notify_container"
+                   tab_group="-2"
+                   width="1024"/>
+  <menu_holder top="0"
+               follows="all"
+               height="768"
+               mouse_opaque="false"
+               name="Menu Holder"
+               width="1024"/>
+  <tooltip_view top="0"
+                follows="all"
+                height="768"
+                mouse_opaque="false"
+                name="tooltip view"
+                tab_group="-2"
+                width="1024"/>
+</panel>
-- 
GitLab


From 35e200881c38eb6c1bfd1f14ef440d4bc4da8c74 Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Fri, 6 Nov 2009 06:52:24 +0000
Subject: [PATCH 209/306] merge QAR-1829: texture pipeline branch in
 viewer-2.0.0.3

---
 indra/llcharacter/llheadrotmotion.cpp         |   11 +-
 indra/llcommon/llapr.cpp                      |  161 ++-
 indra/llcommon/llapr.h                        |   34 +-
 indra/llcommon/llqueuedthread.cpp             |   70 +-
 indra/llcommon/llqueuedthread.h               |    4 +
 indra/llcommon/llthread.h                     |    2 -
 indra/llcommon/llworkerthread.cpp             |    1 +
 indra/llcommon/llworkerthread.h               |    6 +-
 indra/llimage/CMakeLists.txt                  |    4 +
 indra/llimage/llimage.cpp                     |   67 +-
 indra/llimage/llimage.h                       |   13 +-
 indra/llimage/llimagedxt.cpp                  |   19 +-
 indra/llimage/llimagej2c.cpp                  |    5 +-
 indra/llimage/llimagejpeg.cpp                 |    9 +-
 indra/llimage/llimageworker.cpp               |  202 ++-
 indra/llimage/llimageworker.h                 |   95 +-
 indra/llimage/tests/llimageworker_test.cpp    |  260 ++++
 indra/llmath/llvolume.cpp                     |    2 +-
 indra/llmessage/llassetstorage.cpp            |    3 +
 indra/llmessage/llassetstorage.h              |   11 +-
 indra/llmessage/llcurl.cpp                    |   36 +-
 indra/llmessage/llcurl.h                      |    7 +-
 indra/llmessage/tests/llcurl_stub.cpp         |    3 +-
 .../tests/llhttpclientadapter_test.cpp        |    2 +-
 indra/llrender/llimagegl.cpp                  |  395 +++--
 indra/llrender/llimagegl.h                    |   85 +-
 indra/llrender/llrender.cpp                   |   15 +-
 indra/llrender/llrender.h                     |    4 +-
 indra/llrender/lltexture.h                    |    2 +-
 indra/llvfs/lllfsthread.cpp                   |    4 +-
 indra/newview/CMakeLists.txt                  |   20 +-
 indra/newview/app_settings/settings.xml       |   83 +-
 indra/newview/llagent.cpp                     |   16 +-
 indra/newview/llappviewer.cpp                 |   29 +-
 indra/newview/llappviewer.h                   |   13 +-
 indra/newview/llassetuploadresponders.cpp     |   10 +-
 indra/newview/llassetuploadresponders.h       |    1 +
 indra/newview/llcolorswatch.cpp               |    2 +-
 indra/newview/lldebugview.cpp                 |   35 +-
 indra/newview/lldrawable.cpp                  |    2 +-
 indra/newview/lldrawpool.cpp                  |    8 +-
 indra/newview/lldrawpoolalpha.cpp             |    2 +-
 indra/newview/lldrawpooltree.cpp              |    2 +-
 indra/newview/lldynamictexture.cpp            |    2 +-
 indra/newview/llface.cpp                      |  157 +-
 indra/newview/llface.h                        |   20 +-
 indra/newview/llfloatermap.cpp                |   48 +-
 indra/newview/llfloatermap.h                  |    2 +
 indra/newview/llfloaterreporter.cpp           |    2 +-
 indra/newview/llfloaterworldmap.cpp           |  182 +--
 indra/newview/llfloaterworldmap.h             |   10 +-
 indra/newview/lllandmarkactions.cpp           |   15 +-
 indra/newview/llnavigationbar.cpp             |    7 +-
 indra/newview/llnetmap.cpp                    |   69 +-
 indra/newview/llnetmap.h                      |   12 +-
 indra/newview/llpanelteleporthistory.cpp      |    2 +-
 indra/newview/llpreviewtexture.cpp            |    6 +
 indra/newview/llspatialpartition.cpp          |    3 +-
 indra/newview/llstartup.cpp                   |    9 +-
 indra/newview/llsurface.cpp                   |    7 +-
 indra/newview/lltexlayer.cpp                  |   12 +-
 indra/newview/lltexturecache.cpp              | 1286 +++++++++--------
 indra/newview/lltexturecache.h                |   65 +-
 indra/newview/lltexturefetch.cpp              | 1056 ++++++++------
 indra/newview/lltexturefetch.h                |   37 +-
 indra/newview/lltextureinfo.cpp               |  290 ++++
 indra/newview/lltextureinfo.h                 |   80 +
 indra/newview/lltextureinfodetails.cpp        |   40 +
 indra/newview/lltextureinfodetails.h          |   58 +
 indra/newview/lltexturestats.cpp              |   61 +
 indra/newview/lltexturestats.h                |   41 +
 indra/newview/lltexturestatsuploader.cpp      |   59 +
 indra/newview/lltexturestatsuploader.h        |   48 +
 indra/newview/lltextureview.cpp               |  332 +++--
 indra/newview/lltextureview.h                 |   27 +-
 indra/newview/llurldispatcher.cpp             |    8 +-
 indra/newview/llviewercamera.cpp              |   16 +-
 indra/newview/llviewercamera.h                |   14 +-
 indra/newview/llviewercontrol.cpp             |    9 +-
 indra/newview/llviewerdisplay.cpp             |    3 +-
 indra/newview/llviewermenu.cpp                |   47 +-
 indra/newview/llviewerobject.cpp              |    2 +-
 indra/newview/llviewerobject.h                |    2 +-
 indra/newview/llviewerobjectlist.cpp          |    8 +-
 indra/newview/llviewerregion.cpp              |    4 +-
 indra/newview/llviewerstats.cpp               |   28 +-
 indra/newview/llviewerstats.h                 |    4 +
 indra/newview/llviewertexture.cpp             |  831 +++++++++--
 indra/newview/llviewertexture.h               |  132 +-
 indra/newview/llviewertexturelist.cpp         |  177 ++-
 indra/newview/llviewertexturelist.h           |   23 +-
 indra/newview/llviewerwindow.cpp              |   15 +-
 indra/newview/llviewerwindow.h                |    2 +-
 indra/newview/llvlcomposition.cpp             |   13 +-
 indra/newview/llvoavatar.cpp                  |    6 +-
 indra/newview/llvoavatar.h                    |    2 +-
 indra/newview/llvoavatarself.cpp              |   83 +-
 indra/newview/llvoavatarself.h                |    2 +-
 indra/newview/llvoclouds.cpp                  |    2 +-
 indra/newview/llvoclouds.h                    |    2 +-
 indra/newview/llvograss.cpp                   |    2 +-
 indra/newview/llvograss.h                     |    2 +-
 indra/newview/llvoground.cpp                  |    2 +-
 indra/newview/llvoground.h                    |    2 +-
 indra/newview/llvopartgroup.cpp               |    2 +-
 indra/newview/llvopartgroup.h                 |    2 +-
 indra/newview/llvosky.cpp                     |    4 +-
 indra/newview/llvosky.h                       |    2 +-
 indra/newview/llvosurfacepatch.cpp            |    2 +-
 indra/newview/llvosurfacepatch.h              |    2 +-
 indra/newview/llvotextbubble.cpp              |    2 +-
 indra/newview/llvotextbubble.h                |    2 +-
 indra/newview/llvotree.cpp                    |    2 +-
 indra/newview/llvotree.h                      |    2 +-
 indra/newview/llvotreenew.h                   |    2 +-
 indra/newview/llvovolume.cpp                  |  193 +--
 indra/newview/llvovolume.h                    |    7 +-
 indra/newview/llvowater.cpp                   |    2 +-
 indra/newview/llvowater.h                     |    2 +-
 indra/newview/llwearablelist.cpp              |    5 +
 indra/newview/llwearablelist.h                |    1 +
 indra/newview/llworldmap.cpp                  | 1174 +++++----------
 indra/newview/llworldmap.h                    |  332 +++--
 indra/newview/llworldmapmessage.cpp           |  261 ++++
 indra/newview/llworldmapmessage.h             |   83 ++
 indra/newview/llworldmapview.cpp              | 1242 +++++++---------
 indra/newview/llworldmapview.h                |   51 +-
 indra/newview/llworldmipmap.cpp               |  275 ++++
 indra/newview/llworldmipmap.h                 |  100 ++
 indra/newview/pipeline.cpp                    |   10 +-
 .../skins/default/textures/map_avatar_32.tga  |  Bin 0 -> 2894 bytes
 .../default/textures/map_avatar_above_32.tga  |  Bin 0 -> 2909 bytes
 .../default/textures/map_avatar_below_32.tga  |  Bin 0 -> 3037 bytes
 .../default/textures/map_avatar_you_32.tga    |  Bin 0 -> 3395 bytes
 .../default/xui/en/floater_world_map.xml      |   33 +-
 .../skins/default/xui/en/menu_viewer.xml      |   70 +-
 indra/newview/tests/lltextureinfo_test.cpp    |  284 ++++
 .../tests/lltextureinfodetails_test.cpp       |   98 ++
 .../tests/lltexturestatsuploader_test.cpp     |  156 ++
 indra/newview/tests/llworldmap_test.cpp       |  523 +++++++
 indra/newview/tests/llworldmipmap_test.cpp    |  176 +++
 install.xml                                   |    8 +-
 142 files changed, 8330 insertions(+), 4023 deletions(-)
 create mode 100644 indra/llimage/tests/llimageworker_test.cpp
 create mode 100644 indra/newview/lltextureinfo.cpp
 create mode 100644 indra/newview/lltextureinfo.h
 create mode 100644 indra/newview/lltextureinfodetails.cpp
 create mode 100644 indra/newview/lltextureinfodetails.h
 create mode 100644 indra/newview/lltexturestats.cpp
 create mode 100644 indra/newview/lltexturestats.h
 create mode 100644 indra/newview/lltexturestatsuploader.cpp
 create mode 100644 indra/newview/lltexturestatsuploader.h
 create mode 100644 indra/newview/llworldmapmessage.cpp
 create mode 100644 indra/newview/llworldmapmessage.h
 create mode 100644 indra/newview/llworldmipmap.cpp
 create mode 100644 indra/newview/llworldmipmap.h
 create mode 100644 indra/newview/skins/default/textures/map_avatar_32.tga
 create mode 100644 indra/newview/skins/default/textures/map_avatar_above_32.tga
 create mode 100644 indra/newview/skins/default/textures/map_avatar_below_32.tga
 create mode 100644 indra/newview/skins/default/textures/map_avatar_you_32.tga
 create mode 100644 indra/newview/tests/lltextureinfo_test.cpp
 create mode 100644 indra/newview/tests/lltextureinfodetails_test.cpp
 create mode 100644 indra/newview/tests/lltexturestatsuploader_test.cpp
 create mode 100644 indra/newview/tests/llworldmap_test.cpp
 create mode 100644 indra/newview/tests/llworldmipmap_test.cpp

diff --git a/indra/llcharacter/llheadrotmotion.cpp b/indra/llcharacter/llheadrotmotion.cpp
index 88cd77f7afc..0ee378f3b82 100644
--- a/indra/llcharacter/llheadrotmotion.cpp
+++ b/indra/llcharacter/llheadrotmotion.cpp
@@ -251,10 +251,13 @@ BOOL LLHeadRotMotion::onUpdate(F32 time, U8* joint_mask)
 	mLastHeadRot = head_rot_local;
 
 	// Set the head rotation.
-	LLQuaternion torsoRotLocal =  mNeckState->getJoint()->getParent()->getWorldRotation() * currentInvRootRotWorld;
-	head_rot_local = head_rot_local * ~torsoRotLocal;
-	mNeckState->setRotation( nlerp(NECK_LAG, LLQuaternion::DEFAULT, head_rot_local) );
-	mHeadState->setRotation( nlerp(1.f - NECK_LAG, LLQuaternion::DEFAULT, head_rot_local));
+	if(mNeckState->getJoint() && mNeckState->getJoint()->getParent())
+	{
+		LLQuaternion torsoRotLocal =  mNeckState->getJoint()->getParent()->getWorldRotation() * currentInvRootRotWorld;
+		head_rot_local = head_rot_local * ~torsoRotLocal;
+		mNeckState->setRotation( nlerp(NECK_LAG, LLQuaternion::DEFAULT, head_rot_local) );
+		mHeadState->setRotation( nlerp(1.f - NECK_LAG, LLQuaternion::DEFAULT, head_rot_local));
+	}
 
 	return TRUE;
 }
diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp
index 669afc53303..ed70b1d9f28 100644
--- a/indra/llcommon/llapr.cpp
+++ b/indra/llcommon/llapr.cpp
@@ -57,7 +57,7 @@ void ll_init_apr()
 
 	if(!LLAPRFile::sAPRFilePoolp)
 	{
-		LLAPRFile::sAPRFilePoolp = new LLVolatileAPRPool() ;
+		LLAPRFile::sAPRFilePoolp = new LLVolatileAPRPool(FALSE) ;
 	}
 }
 
@@ -99,13 +99,12 @@ void ll_cleanup_apr()
 //
 //LLAPRPool
 //
-LLAPRPool::LLAPRPool(apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag) 
-{
-	mParent = parent ;
-	mReleasePoolFlag = releasePoolFlag ;
-	mMaxSize = size ;
-	mPool = NULL ;
-
+LLAPRPool::LLAPRPool(apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag) 	
+	: mParent(parent),
+	mReleasePoolFlag(releasePoolFlag),
+	mMaxSize(size),
+	mPool(NULL)
+{	
 	createAPRPool() ;
 }
 
@@ -148,31 +147,65 @@ void LLAPRPool::releaseAPRPool()
 	}
 }
 
+//virtual
 apr_pool_t* LLAPRPool::getAPRPool() 
+{	
+	return mPool ; 
+}
+
+LLVolatileAPRPool::LLVolatileAPRPool(BOOL is_local, apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag) 
+				  : LLAPRPool(parent, size, releasePoolFlag),
+				  mNumActiveRef(0),
+				  mNumTotalRef(0),
+				  mMutexPool(NULL),
+				  mMutexp(NULL)
 {
-	if(!mPool)
+	//create mutex
+	if(!is_local) //not a local apr_pool, that is: shared by multiple threads.
 	{
-		createAPRPool() ;
+		apr_pool_create(&mMutexPool, NULL); // Create a pool for mutex
+		apr_thread_mutex_create(&mMutexp, APR_THREAD_MUTEX_UNNESTED, mMutexPool);
 	}
-	
-	return mPool ; 
 }
-LLVolatileAPRPool::LLVolatileAPRPool(apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag) 
-				  : LLAPRPool(parent, size, releasePoolFlag)
+
+LLVolatileAPRPool::~LLVolatileAPRPool()
 {
-	mNumActiveRef = 0 ;
-	mNumTotalRef = 0 ;
+	//delete mutex
+	if(mMutexp)
+	{
+		apr_thread_mutex_destroy(mMutexp);
+		apr_pool_destroy(mMutexPool);
+	}
 }
 
-apr_pool_t* LLVolatileAPRPool::getVolatileAPRPool() 
+//
+//define this virtual function to avoid any mistakenly calling LLAPRPool::getAPRPool().
+//
+//virtual 
+apr_pool_t* LLVolatileAPRPool::getAPRPool() 
 {
+	return LLVolatileAPRPool::getVolatileAPRPool() ;
+}
+
+apr_pool_t* LLVolatileAPRPool::getVolatileAPRPool() 
+{	
+	LLScopedLock lock(mMutexp) ;
+
 	mNumTotalRef++ ;
 	mNumActiveRef++ ;
-	return getAPRPool() ;
+
+	if(!mPool)
+	{
+		createAPRPool() ;
+	}
+	
+	return mPool ;
 }
 
 void LLVolatileAPRPool::clearVolatileAPRPool() 
 {
+	LLScopedLock lock(mMutexp) ;
+
 	if(mNumActiveRef > 0)
 	{
 		mNumActiveRef--;
@@ -251,10 +284,9 @@ void LLScopedLock::unlock()
 bool ll_apr_warn_status(apr_status_t status)
 {
 	if(APR_SUCCESS == status) return false;
-#ifndef LL_WINDOWS
 	char buf[MAX_STRING];	/* Flawfinder: ignore */
-	LL_WARNS_ONCE("APR") << "APR: " << apr_strerror(status, buf, MAX_STRING) << LL_ENDL;
-#endif
+	apr_strerror(status, buf, MAX_STRING);
+	LL_WARNS("APR") << "APR: " << buf << LL_ENDL;
 	return true;
 }
 
@@ -268,10 +300,18 @@ void ll_apr_assert_status(apr_status_t status)
 // LLAPRFile functions
 //
 LLAPRFile::LLAPRFile()
+	: mFile(NULL),
+	  mCurrentFilePoolp(NULL)
+{
+}
+
+LLAPRFile::LLAPRFile(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool)
+	: mFile(NULL),
+	  mCurrentFilePoolp(NULL)
 {
-	mFile = NULL ;
-	mCurrentFilePoolp = NULL ;
+	open(filename, flags, pool);
 }
+
 LLAPRFile::~LLAPRFile()
 {
 	close() ;
@@ -295,11 +335,40 @@ apr_status_t LLAPRFile::close()
 	return ret ;
 }
 
-apr_status_t LLAPRFile::open(LLVolatileAPRPool* pool, const std::string& filename, apr_int32_t flags, S32* sizep)
+apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool, S32* sizep)
 {
 	apr_status_t s ;
-	s = open(filename, flags, pool ? pool->getVolatileAPRPool() : NULL, sizep) ;
+
+	//check if already open some file
+	llassert_always(!mFile) ;
+	llassert_always(!mCurrentFilePoolp) ;
 	
+	apr_pool_t* apr_pool = pool ? pool->getVolatileAPRPool() : NULL ;
+	s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, getAPRFilePool(apr_pool));
+
+	if (s != APR_SUCCESS || !mFile)
+	{
+		mFile = NULL ;
+		
+		if (sizep)
+		{
+			*sizep = 0;
+		}
+	}
+	else if (sizep)
+	{
+		S32 file_size = 0;
+		apr_off_t offset = 0;
+		if (apr_file_seek(mFile, APR_END, &offset) == APR_SUCCESS)
+		{
+			llassert_always(offset <= 0x7fffffff);
+			file_size = (S32)offset;
+			offset = 0;
+			apr_file_seek(mFile, APR_SET, &offset);
+		}
+		*sizep = file_size;
+	}
+
 	if(!mCurrentFilePoolp)
 	{
 		mCurrentFilePoolp = pool ;
@@ -312,40 +381,25 @@ apr_status_t LLAPRFile::open(LLVolatileAPRPool* pool, const std::string& filenam
 
 	return s ;
 }
-apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, apr_pool_t* pool, S32* sizep)
+
+//use gAPRPoolp.
+apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, BOOL use_global_pool)
 {
 	apr_status_t s;
 
 	//check if already open some file
 	llassert_always(!mFile) ;
 	llassert_always(!mCurrentFilePoolp) ;
+	llassert_always(use_global_pool) ; //be aware of using gAPRPoolp.
 	
-	s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, getAPRFilePool(pool));
+	s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, gAPRPoolp);
 	if (s != APR_SUCCESS || !mFile)
 	{
 		mFile = NULL ;
 		close() ;
-		if (sizep)
-		{
-			*sizep = 0;
-		}
 		return s;
 	}
 
-	if (sizep)
-	{
-		S32 file_size = 0;
-		apr_off_t offset = 0;
-		if (apr_file_seek(mFile, APR_END, &offset) == APR_SUCCESS)
-		{
-			llassert_always(offset <= 0x7fffffff);
-			file_size = (S32)offset;
-			offset = 0;
-			apr_file_seek(mFile, APR_SET, &offset);
-		}
-		*sizep = file_size;
-	}
-
 	return s;
 }
 
@@ -369,6 +423,7 @@ S32 LLAPRFile::read(void *buf, S32 nbytes)
 	apr_status_t s = apr_file_read(mFile, buf, &sz);
 	if (s != APR_SUCCESS)
 	{
+		ll_apr_warn_status(s);
 		return 0;
 	}
 	else
@@ -386,6 +441,7 @@ S32 LLAPRFile::write(const void *buf, S32 nbytes)
 	apr_status_t s = apr_file_write(mFile, buf, &sz);
 	if (s != APR_SUCCESS)
 	{
+		ll_apr_warn_status(s);
 		return 0;
 	}
 	else
@@ -434,6 +490,8 @@ apr_file_t* LLAPRFile::open(const std::string& filename, LLVolatileAPRPool* pool
 	s = apr_file_open(&file_handle, filename.c_str(), flags, APR_OS_DEFAULT, pool->getVolatileAPRPool());
 	if (s != APR_SUCCESS || !file_handle)
 	{
+		ll_apr_warn_status(s);
+		LL_WARNS("APR") << " Attempting to open filename: " << filename << LL_ENDL;
 		file_handle = NULL ;
 		close(file_handle, pool) ;
 		return NULL;
@@ -464,6 +522,7 @@ S32 LLAPRFile::seek(apr_file_t* file_handle, apr_seek_where_t where, S32 offset)
 	}
 	if (s != APR_SUCCESS)
 	{
+		ll_apr_warn_status(s);
 		return -1;
 	}
 	else
@@ -501,6 +560,8 @@ S32 LLAPRFile::readEx(const std::string& filename, void *buf, S32 offset, S32 nb
 		apr_status_t s = apr_file_read(file_handle, buf, &bytes_read);
 		if (s != APR_SUCCESS)
 		{
+			LL_WARNS("APR") << " Attempting to read filename: " << filename << LL_ENDL;
+			ll_apr_warn_status(s);
 			bytes_read = 0;
 		}
 		else
@@ -549,6 +610,8 @@ S32 LLAPRFile::writeEx(const std::string& filename, void *buf, S32 offset, S32 n
 		apr_status_t s = apr_file_write(file_handle, buf, &bytes_written);
 		if (s != APR_SUCCESS)
 		{
+			LL_WARNS("APR") << " Attempting to write filename: " << filename << LL_ENDL;
+			ll_apr_warn_status(s);
 			bytes_written = 0;
 		}
 		else
@@ -575,8 +638,8 @@ bool LLAPRFile::remove(const std::string& filename, LLVolatileAPRPool* pool)
 
 	if (s != APR_SUCCESS)
 	{
-		LL_DEBUGS("APR") << "LLAPRFile::remove failed on file: " << filename << LL_ENDL;
 		ll_apr_warn_status(s);
+		LL_WARNS("APR") << " Attempting to remove filename: " << filename << LL_ENDL;
 		return false;
 	}
 	return true;
@@ -593,8 +656,8 @@ bool LLAPRFile::rename(const std::string& filename, const std::string& newname,
 	
 	if (s != APR_SUCCESS)
 	{
-		LL_DEBUGS("APR") << "LLAPRFile::rename failed on file: " << filename << LL_ENDL;
 		ll_apr_warn_status(s);
+		LL_WARNS("APR") << " Attempting to rename filename: " << filename << LL_ENDL;
 		return false;
 	}
 	return true;
@@ -667,8 +730,8 @@ bool LLAPRFile::makeDir(const std::string& dirname, LLVolatileAPRPool* pool)
 		
 	if (s != APR_SUCCESS)
 	{
-		LL_DEBUGS("APR") << "LLAPRFile::makeDir failed on file: " << dirname << LL_ENDL;
 		ll_apr_warn_status(s);
+		LL_WARNS("APR") << " Attempting to make directory: " << dirname << LL_ENDL;
 		return false;
 	}
 	return true;
@@ -685,8 +748,8 @@ bool LLAPRFile::removeDir(const std::string& dirname, LLVolatileAPRPool* pool)
 	
 	if (s != APR_SUCCESS)
 	{
-		LL_DEBUGS("APR") << "LLAPRFile::removeDir failed on file: " << dirname << LL_ENDL;
 		ll_apr_warn_status(s);
+		LL_WARNS("APR") << " Attempting to remove directory: " << dirname << LL_ENDL;
 		return false;
 	}
 	return true;
diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h
index 63130a89fcd..a1a4c6db4a9 100644
--- a/indra/llcommon/llapr.h
+++ b/indra/llcommon/llapr.h
@@ -70,9 +70,9 @@ class LLAPRPool
 {
 public:
 	LLAPRPool(apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE) ;
-	~LLAPRPool() ;
+	virtual ~LLAPRPool() ;
 
-	apr_pool_t* getAPRPool() ;
+	virtual apr_pool_t* getAPRPool() ;
 	apr_status_t getStatus() {return mStatus ; }
 
 protected:
@@ -95,18 +95,21 @@ class LLAPRPool
 class LLVolatileAPRPool : public LLAPRPool
 {
 public:
-	LLVolatileAPRPool(apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE);
-	~LLVolatileAPRPool(){}
+	LLVolatileAPRPool(BOOL is_local = TRUE, apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE);
+	virtual ~LLVolatileAPRPool();
 
-	apr_pool_t* getVolatileAPRPool() ;
-	
+	/*virtual*/ apr_pool_t* getAPRPool() ; //define this virtual function to avoid any mistakenly calling LLAPRPool::getAPRPool().
+	apr_pool_t* getVolatileAPRPool() ;	
 	void        clearVolatileAPRPool() ;
 
 	BOOL        isFull() ;
-	BOOL        isEmpty() {return !mNumActiveRef ;}
+	
 private:
 	S32 mNumActiveRef ; //number of active pointers pointing to the apr_pool.
-	S32 mNumTotalRef ;  //number of total pointers pointing to the apr_pool since last creating.   
+	S32 mNumTotalRef ;  //number of total pointers pointing to the apr_pool since last creating.  
+
+	apr_thread_mutex_t *mMutexp;
+	apr_pool_t         *mMutexPool;
 } ;
 
 /** 
@@ -192,18 +195,21 @@ typedef LLAtomic32<S32> LLAtomicS32;
 //      1, a temperary pool passed to an APRFile function, which is used within this function and only once.
 //      2, a global pool.
 //
-class LLAPRFile
+
+class LLAPRFile : boost::noncopyable
 {
+	// make this non copyable since a copy closes the file
 private:
 	apr_file_t* mFile ;
 	LLVolatileAPRPool *mCurrentFilePoolp ; //currently in use apr_pool, could be one of them: sAPRFilePoolp, or a temp pool. 
 
 public:
 	LLAPRFile() ;
+	LLAPRFile(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool = NULL);
 	~LLAPRFile() ;
-
-	apr_status_t open(LLVolatileAPRPool* pool, const std::string& filename, apr_int32_t flags, S32* sizep = NULL);
-	apr_status_t open(const std::string& filename, apr_int32_t flags, apr_pool_t* pool = NULL, S32* sizep = NULL);
+	
+	apr_status_t open(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool = NULL, S32* sizep = NULL);
+	apr_status_t open(const std::string& filename, apr_int32_t flags, BOOL use_global_pool); //use gAPRPoolp.
 	apr_status_t close() ;
 
 	// Returns actual offset, -1 if seek fails
@@ -217,8 +223,8 @@ class LLAPRFile
 	apr_file_t* getFileHandle() {return mFile;}	
 
 private:
-	apr_pool_t* getAPRFilePool(apr_pool_t* pool) ;
-
+	apr_pool_t* getAPRFilePool(apr_pool_t* pool) ;	
+	
 //
 //*******************************************************************************************************************************
 //static components
diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
index 3db5c365454..395d2988874 100644
--- a/indra/llcommon/llqueuedthread.cpp
+++ b/indra/llcommon/llqueuedthread.cpp
@@ -42,7 +42,8 @@ LLQueuedThread::LLQueuedThread(const std::string& name, bool threaded) :
 	LLThread(name),
 	mThreaded(threaded),
 	mIdleThread(TRUE),
-	mNextHandle(0)
+	mNextHandle(0),
+	mStarted(FALSE)
 {
 	if (mThreaded)
 	{
@@ -53,6 +54,10 @@ LLQueuedThread::LLQueuedThread(const std::string& name, bool threaded) :
 // MAIN THREAD
 LLQueuedThread::~LLQueuedThread()
 {
+	if (!mThreaded)
+	{
+		endThread();
+	}
 	shutdown();
 	// ~LLThread() will be called here
 }
@@ -106,6 +111,11 @@ void LLQueuedThread::shutdown()
 // virtual
 S32 LLQueuedThread::update(U32 max_time_ms)
 {
+	if (!mStarted)
+	{
+		startThread();
+		mStarted = TRUE;
+	}
 	return updateQueue(max_time_ms);
 }
 
@@ -452,26 +462,12 @@ S32 LLQueuedThread::processNextRequest()
 		}
 	}
 
-	S32 res;
 	S32 pending = getPending();
-	if (pending == 0)
-	{
-		if (isQuitting())
-		{
-			res = -1; // exit thread
-		}
-		else
-		{
-			res = 0;
-		}
-	}
-	else
-	{
-		res = pending;
-	}
-	return res;
+
+	return pending;
 }
 
+// virtual
 bool LLQueuedThread::runCondition()
 {
 	// mRunCondition must be locked here
@@ -481,35 +477,53 @@ bool LLQueuedThread::runCondition()
 		return true;
 }
 
+// virtual
 void LLQueuedThread::run()
 {
+	// call checPause() immediately so we don't try to do anything before the class is fully constructed
+	checkPause();
+	startThread();
+	mStarted = TRUE;
+	
 	while (1)
 	{
 		// this will block on the condition until runCondition() returns true, the thread is unpaused, or the thread leaves the RUNNING state.
 		checkPause();
 		
-		if(isQuitting())
+		if (isQuitting())
+		{
+			endThread();
 			break;
-
-		//llinfos << "QUEUED THREAD RUNNING, queue size = " << mRequestQueue.size() << llendl;
+		}
 
 		mIdleThread = FALSE;
+
+		threadedUpdate();
 		
 		int res = processNextRequest();
 		if (res == 0)
 		{
 			mIdleThread = TRUE;
+			ms_sleep(1);
 		}
-		
-		if (res < 0) // finished working and want to exit
-		{
-			break;
-		}
-
 		//LLThread::yield(); // thread should yield after each request		
 	}
+	llinfos << "LLQueuedThread " << mName << " EXITING." << llendl;
+}
 
-	llinfos << "QUEUED THREAD " << mName << " EXITING." << llendl;
+// virtual
+void LLQueuedThread::startThread()
+{
+}
+
+// virtual
+void LLQueuedThread::endThread()
+{
+}
+
+// virtual
+void LLQueuedThread::threadedUpdate()
+{
 }
 
 //============================================================================
diff --git a/indra/llcommon/llqueuedthread.h b/indra/llcommon/llqueuedthread.h
index 3ba43e1e070..bcd154da0b5 100644
--- a/indra/llcommon/llqueuedthread.h
+++ b/indra/llcommon/llqueuedthread.h
@@ -165,6 +165,9 @@ class LLQueuedThread : public LLThread
 
 	virtual bool runCondition(void);
 	virtual void run(void);
+	virtual void startThread(void);
+	virtual void endThread(void);
+	virtual void threadedUpdate(void);
 
 protected:
 	handle_t generateHandle();
@@ -199,6 +202,7 @@ class LLQueuedThread : public LLThread
 	
 protected:
 	BOOL mThreaded;  // if false, run on main thread and do updates during update()
+	BOOL mStarted;  // required when mThreaded is false to call startThread() from update()
 	LLAtomic32<BOOL> mIdleThread; // request queue is empty (or we are quitting) and the thread is idle
 	
 	typedef std::set<QueuedRequest*, queued_request_less> request_queue_t;
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index f25339f48d1..1470dca14c5 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -33,9 +33,7 @@
 #ifndef LL_LLTHREAD_H
 #define LL_LLTHREAD_H
 
-#include "llapr.h"
 #include "llapp.h"
-
 #include "apr_thread_cond.h"
 
 class LLThread;
diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
index 5dda6007553..82c736266db 100644
--- a/indra/llcommon/llworkerthread.cpp
+++ b/indra/llcommon/llworkerthread.cpp
@@ -201,6 +201,7 @@ LLWorkerClass::~LLWorkerClass()
 {
 	llassert_always(!(mWorkFlags & WCF_WORKING));
 	llassert_always(mWorkFlags & WCF_DELETE_REQUESTED);
+	llassert_always(!mMutex.isLocked());
 	if (mRequestHandle != LLWorkerThread::nullHandle())
 	{
 		LLWorkerThread::WorkRequest* workreq = (LLWorkerThread::WorkRequest*)mWorkerThread->getRequest(mRequestHandle);
diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h
index 19407f44638..4a4cd6c85f8 100644
--- a/indra/llcommon/llworkerthread.h
+++ b/indra/llcommon/llworkerthread.h
@@ -52,6 +52,7 @@ class LLWorkerClass;
 
 class LLWorkerThread : public LLQueuedThread
 {
+	friend class LLWorkerClass;
 public:
 	class WorkRequest : public LLQueuedThread::QueuedRequest
 	{
@@ -92,8 +93,11 @@ class LLWorkerThread : public LLQueuedThread
 	
 	handle_t addWorkRequest(LLWorkerClass* workerclass, S32 param, U32 priority = PRIORITY_NORMAL);
 	
-	void deleteWorker(LLWorkerClass* workerclass); // schedule for deletion
 	S32 getNumDeletes() { return (S32)mDeleteList.size(); } // debug
+
+private:
+	void deleteWorker(LLWorkerClass* workerclass); // schedule for deletion
+	
 };
 
 //============================================================================
diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt
index 0635ddd5f5c..22be4078a1b 100644
--- a/indra/llimage/CMakeLists.txt
+++ b/indra/llimage/CMakeLists.txt
@@ -3,6 +3,7 @@
 project(llimage)
 
 include(00-Common)
+include(LLAddBuildTest)
 include(LLCommon)
 include(LLImage)
 include(LLMath)
@@ -59,3 +60,6 @@ target_link_libraries(llimage
     ${PNG_LIBRARIES}
     ${ZLIB_LIBRARIES}
     )
+
+# Add tests
+#ADD_BUILD_TEST(llimageworker llimage)
diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index 9bbc55509dd..9cb005898d1 100644
--- a/indra/llimage/llimage.cpp
+++ b/indra/llimage/llimage.cpp
@@ -55,13 +55,9 @@ std::string LLImage::sLastErrorMessage;
 LLMutex* LLImage::sMutex = NULL;
 
 //static
-void LLImage::initClass(LLWorkerThread* workerthread)
+void LLImage::initClass()
 {
 	sMutex = new LLMutex(NULL);
-	if (workerthread)
-	{
-		LLImageWorker::initImageWorker(workerthread);
-	}
 	LLImageJ2C::openDSO();
 }
 
@@ -69,7 +65,6 @@ void LLImage::initClass(LLWorkerThread* workerthread)
 void LLImage::cleanupClass()
 {
 	LLImageJ2C::closeDSO();
-	LLImageWorker::cleanupImageWorker();
 	delete sMutex;
 	sMutex = NULL;
 }
@@ -316,6 +311,21 @@ void LLImageRaw::deleteData()
 	LLImageBase::deleteData();
 }
 
+void LLImageRaw::setDataAndSize(U8 *data, S32 width, S32 height, S8 components) 
+{ 
+	if(data == getData())
+	{
+		return ;
+	}
+
+	deleteData();
+
+	LLImageBase::setSize(width, height, components) ;
+	LLImageBase::setDataAndSize(data, width * height * components) ;
+	
+	sGlobalRawMemory += getDataSize();
+}
+
 BOOL LLImageRaw::resize(U16 width, U16 height, S8 components)
 {
 	if ((getWidth() == width) && (getHeight() == height) && (getComponents() == components))
@@ -816,6 +826,51 @@ void LLImageRaw::copyScaled( LLImageRaw* src )
 	}
 }
 
+//scale down image by not blending a pixel with its neighbors.
+BOOL LLImageRaw::scaleDownWithoutBlending( S32 new_width, S32 new_height)
+{
+	LLMemType mt1(mMemType);
+
+	S8 c = getComponents() ;
+	llassert((1 == c) || (3 == c) || (4 == c) );
+
+	S32 old_width = getWidth();
+	S32 old_height = getHeight();
+	
+	S32 new_data_size = old_width * new_height * c ;
+	llassert_always(new_data_size > 0);
+
+	F32 ratio_x = (F32)old_width / new_width ;
+	F32 ratio_y = (F32)old_height / new_height ;
+	if( ratio_x < 1.0f || ratio_y < 1.0f )
+	{
+		return TRUE;  // Nothing to do.
+	}
+	ratio_x -= 1.0f ;
+	ratio_y -= 1.0f ;
+
+	U8* new_data = new U8[new_data_size] ;
+	llassert_always(new_data != NULL) ;
+
+	U8* old_data = getData() ;
+	S32 i, j, k, s, t;
+	for(i = 0, s = 0, t = 0 ; i < new_height ; i++)
+	{
+		for(j = 0 ; j < new_width ; j++)
+		{
+			for(k = 0 ; k < c ; k++)
+			{
+				new_data[s++] = old_data[t++] ;
+			}
+			t += (S32)(ratio_x * c + 0.1f) ;
+		}
+		t += (S32)(ratio_y * old_width * c + 0.1f) ;
+	}
+
+	setDataAndSize(new_data, new_width, new_height, c) ;
+	
+	return TRUE ;
+}
 
 BOOL LLImageRaw::scale( S32 new_width, S32 new_height, BOOL scale_image_data )
 {
diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h
index 81085531072..686f5838865 100644
--- a/indra/llimage/llimage.h
+++ b/indra/llimage/llimage.h
@@ -50,7 +50,8 @@ const S32 MAX_IMAGE_AREA = MAX_IMAGE_SIZE * MAX_IMAGE_SIZE;
 const S32 MAX_IMAGE_COMPONENTS = 8;
 const S32 MAX_IMAGE_DATA_SIZE = MAX_IMAGE_AREA * MAX_IMAGE_COMPONENTS;
 
-// Note!  These CANNOT be changed without invalidating the viewer VFS files, I think?
+// Note!  These CANNOT be changed without modifying simulator code
+// *TODO: change both to 1024 when SIM texture fetching is deprecated
 const S32 FIRST_PACKET_SIZE = 600;
 const S32 MAX_IMG_PACKET_SIZE = 1000;
 
@@ -61,7 +62,6 @@ const S32 MAX_IMG_PACKET_SIZE = 1000;
 class LLImageFormatted;
 class LLImageRaw;
 class LLColor4U;
-class LLWorkerThread;
 
 typedef enum e_image_codec
 {
@@ -82,7 +82,7 @@ typedef enum e_image_codec
 class LLImage
 {
 public:
-	static void initClass(LLWorkerThread* workerthread);
+	static void initClass();
 	static void cleanupClass();
 
 	static const std::string& getLastError();
@@ -131,7 +131,7 @@ class LLImageBase : public LLThreadSafeRefCount
 
 protected:
 	// special accessor to allow direct setting of mData and mDataSize by LLImageFormatted
-	void setDataAndSize(U8 *data, S32 size) { mData = data; mDataSize = size; };
+	void setDataAndSize(U8 *data, S32 size) { mData = data; mDataSize = size; }
 	
 public:
 	static void generateMip(const U8 *indata, U8* mipdata, int width, int height, S32 nchannels);
@@ -192,6 +192,7 @@ class LLImageRaw : public LLImageBase
 	void contractToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE, BOOL scale_image = TRUE);
 	void biasedScaleToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE);
 	BOOL scale( S32 new_width, S32 new_height, BOOL scale_image = TRUE );
+	BOOL scaleDownWithoutBlending( S32 new_width, S32 new_height) ;
 
 	// Fill the buffer with a constant color
 	void fill( const LLColor4U& color );
@@ -240,6 +241,8 @@ class LLImageRaw : public LLImageBase
 
 	U8	fastFractionalMult(U8 a,U8 b);
 
+	void setDataAndSize(U8 *data, S32 width, S32 height, S8 components) ;
+
 public:
 	static S32 sGlobalRawMemory;
 	static S32 sRawImageCount;
@@ -310,7 +313,7 @@ class LLImageFormatted : public LLImageBase
 protected:
 	S8 mCodec;
 	S8 mDecoding;
-	S8 mDecoded;
+	S8 mDecoded;  // unused, but changing LLImage layout requires recompiling static Mac/Linux libs. 2009-01-30 JC
 	S8 mDiscardLevel;
 	
 public:
diff --git a/indra/llimage/llimagedxt.cpp b/indra/llimage/llimagedxt.cpp
index 1ce4517a0d1..0aa6840ff6a 100644
--- a/indra/llimage/llimagedxt.cpp
+++ b/indra/llimage/llimagedxt.cpp
@@ -264,6 +264,8 @@ void LLImageDXT::setFormat()
 // virtual
 BOOL LLImageDXT::decode(LLImageRaw* raw_image, F32 time)
 {
+	// *TODO: Test! This has been tweaked since its intial inception,
+	//  but we don't use it any more!
 	llassert_always(raw_image);
 	
 	if (mFileFormat >= FORMAT_DXT1 && mFileFormat <= FORMAT_DXR5)
@@ -274,8 +276,17 @@ BOOL LLImageDXT::decode(LLImageRaw* raw_image, F32 time)
 	
 	S32 width = getWidth(), height = getHeight();
 	S32 ncomponents = getComponents();
+	U8* data = NULL;
+	if (mDiscardLevel >= 0)
+	{
+		data = getData() + getMipOffset(mDiscardLevel);
+		calcDiscardWidthHeight(mDiscardLevel, mFileFormat, width, height);
+	}
+	else
+	{
+		data = getData() + getMipOffset(0);
+	}
 	S32 image_size = formatBytes(mFileFormat, width, height);
-	U8* data = getData() + getMipOffset(0);
 	
 	if ((!getData()) || (data + image_size > getData() + getDataSize()))
 	{
@@ -300,10 +311,8 @@ BOOL LLImageDXT::getMipData(LLPointer<LLImageRaw>& raw, S32 discard)
 		llerrs << "Request for invalid discard level" << llendl;
 	}
 	U8* data = getData() + getMipOffset(discard);
-	// I'm not sure these are the correct initial values for height and width,
-	// but previously they were being used uninitialized. JC
-	S32 width = raw->getWidth();
-	S32 height = raw->getHeight();
+	S32 width = 0;
+	S32 height = 0;
 	calcDiscardWidthHeight(discard, mFileFormat, width, height);
 	raw = new LLImageRaw(data, width, height, getComponents());
 	return TRUE;
diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp
index 363486fb9c0..49017cc508a 100644
--- a/indra/llimage/llimagej2c.cpp
+++ b/indra/llimage/llimagej2c.cpp
@@ -277,6 +277,7 @@ BOOL LLImageJ2C::decode(LLImageRaw *raw_imagep, F32 decode_time)
 }
 
 
+// Returns TRUE to mean done, whether successful or not.
 BOOL LLImageJ2C::decodeChannels(LLImageRaw *raw_imagep, F32 decode_time, S32 first_channel, S32 max_channel_count )
 {
 	LLMemType mt1(mMemType);
@@ -289,7 +290,7 @@ BOOL LLImageJ2C::decodeChannels(LLImageRaw *raw_imagep, F32 decode_time, S32 fir
 	if (!getData() || (getDataSize() < 16))
 	{
 		setLastError("LLImageJ2C uninitialized");
-		res = FALSE;
+		res = TRUE; // done
 	}
 	else
 	{
@@ -342,7 +343,7 @@ BOOL LLImageJ2C::encode(const LLImageRaw *raw_imagep, const char* comment_text,
 //static
 S32 LLImageJ2C::calcHeaderSizeJ2C()
 {
-	return 600; //2048; // ??? hack... just needs to be >= actual header size...
+	return FIRST_PACKET_SIZE; // Hack. just needs to be >= actual header size...
 }
 
 //static
diff --git a/indra/llimage/llimagejpeg.cpp b/indra/llimage/llimagejpeg.cpp
index fa0dd3ff050..79ea79cc070 100644
--- a/indra/llimage/llimagejpeg.cpp
+++ b/indra/llimage/llimagejpeg.cpp
@@ -188,6 +188,7 @@ void LLImageJPEG::decodeTermSource (j_decompress_ptr cinfo)
 }
 
 
+// Returns true when done, whether or not decode was successful.
 BOOL LLImageJPEG::decode(LLImageRaw* raw_image, F32 decode_time)
 {
 	llassert_always(raw_image);
@@ -198,7 +199,7 @@ BOOL LLImageJPEG::decode(LLImageRaw* raw_image, F32 decode_time)
 	if (!getData() || (0 == getDataSize()))
 	{
 		setLastError("LLImageJPEG trying to decode an image with no data!");
-		return FALSE;
+		return TRUE;  // done
 	}
 	
 	S32 row_stride = 0;
@@ -226,7 +227,7 @@ BOOL LLImageJPEG::decode(LLImageRaw* raw_image, F32 decode_time)
 	if(setjmp(sSetjmpBuffer))
 	{
 		jpeg_destroy_decompress(&cinfo);
-		return FALSE;
+		return TRUE; // done
 	}
 	try
 	{
@@ -320,7 +321,7 @@ BOOL LLImageJPEG::decode(LLImageRaw* raw_image, F32 decode_time)
 	catch (int)
 	{
 		jpeg_destroy_decompress(&cinfo);
-		return FALSE;
+		return TRUE; // done
 	}
 
 	// Check to see whether any corrupt-data warnings occurred
@@ -328,7 +329,7 @@ BOOL LLImageJPEG::decode(LLImageRaw* raw_image, F32 decode_time)
 	{
 		// TODO: extract the warning to find out what went wrong.
 		setLastError( "Unable to decode JPEG image.");
-		return FALSE;
+		return TRUE; // done
 	}
 
 	return TRUE;
diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp
index 532e996188d..86d41515e7c 100644
--- a/indra/llimage/llimageworker.cpp
+++ b/indra/llimage/llimageworker.cpp
@@ -37,152 +37,138 @@
 
 //----------------------------------------------------------------------------
 
-//static
-LLWorkerThread* LLImageWorker::sWorkerThread = NULL;
-S32 LLImageWorker::sCount = 0;
+// MAIN THREAD
+LLImageDecodeThread::LLImageDecodeThread(bool threaded)
+	: LLQueuedThread("imagedecode", threaded)
+{
+	mCreationMutex = new LLMutex(getAPRPool());
+}
 
-//static
-void LLImageWorker::initImageWorker(LLWorkerThread* workerthread)
+// MAIN THREAD
+// virtual
+S32 LLImageDecodeThread::update(U32 max_time_ms)
 {
-	sWorkerThread = workerthread;
+	LLMutexLock lock(mCreationMutex);
+	for (creation_list_t::iterator iter = mCreationList.begin();
+		 iter != mCreationList.end(); ++iter)
+	{
+		creation_info& info = *iter;
+		ImageRequest* req = new ImageRequest(info.handle, info.image,
+											 info.priority, info.discard, info.needs_aux,
+											 info.responder);
+		addRequest(req);
+	}
+	mCreationList.clear();
+	S32 res = LLQueuedThread::update(max_time_ms);
+	return res;
 }
 
-//static
-void LLImageWorker::cleanupImageWorker()
+LLImageDecodeThread::handle_t LLImageDecodeThread::decodeImage(LLImageFormatted* image, 
+	U32 priority, S32 discard, BOOL needs_aux, Responder* responder)
+{
+	LLMutexLock lock(mCreationMutex);
+	handle_t handle = generateHandle();
+	mCreationList.push_back(creation_info(handle, image, priority, discard, needs_aux, responder));
+	return handle;
+}
+
+// Used by unit test only
+// Returns the size of the mutex guarded list as an indication of sanity
+S32 LLImageDecodeThread::tut_size()
+{
+	LLMutexLock lock(mCreationMutex);
+	S32 res = mCreationList.size();
+	return res;
+}
+
+LLImageDecodeThread::Responder::~Responder()
 {
 }
 
 //----------------------------------------------------------------------------
 
-LLImageWorker::LLImageWorker(LLImageFormatted* image, U32 priority,
-							 S32 discard,
-							 LLPointer<LLResponder> responder)
-	: LLWorkerClass(sWorkerThread, "Image"),
+LLImageDecodeThread::ImageRequest::ImageRequest(handle_t handle, LLImageFormatted* image, 
+												U32 priority, S32 discard, BOOL needs_aux,
+												LLImageDecodeThread::Responder* responder)
+	: LLQueuedThread::QueuedRequest(handle, priority, FLAG_AUTO_COMPLETE),
 	  mFormattedImage(image),
-	  mDecodedType(-1),
 	  mDiscardLevel(discard),
-	  mPriority(priority),
+	  mNeedsAux(needs_aux),
+	  mDecodedRaw(FALSE),
+	  mDecodedAux(FALSE),
 	  mResponder(responder)
 {
-	++sCount;
 }
 
-LLImageWorker::~LLImageWorker()
+LLImageDecodeThread::ImageRequest::~ImageRequest()
 {
-	mDecodedImage = NULL;
+	mDecodedImageRaw = NULL;
+	mDecodedImageAux = NULL;
 	mFormattedImage = NULL;
-	--sCount;
 }
 
 //----------------------------------------------------------------------------
 
-//virtual, main thread
-void LLImageWorker::startWork(S32 param)
-{
-	llassert_always(mDecodedImage.isNull());
-	mDecodedType = -1;
-}
 
-bool LLImageWorker::doWork(S32 param)
+// Returns true when done, whether or not decode was successful.
+bool LLImageDecodeThread::ImageRequest::processRequest()
 {
-	bool decoded = false;
-	if(mDecodedImage.isNull())
+	const F32 decode_time_slice = .1f;
+	bool done = true;
+	if (!mDecodedRaw && mFormattedImage.notNull())
 	{
-		if (!mFormattedImage->updateData())
-		{
-			mDecodedType = -2; // failed
-			return true;
-		}
-		if (mDiscardLevel >= 0)
+		// Decode primary channels
+		if (mDecodedImageRaw.isNull())
 		{
-			mFormattedImage->setDiscardLevel(mDiscardLevel);
-		}
-		if (!(mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()))
-		{
-			decoded = true; // failed
-		}
-		else
-		{
-			mDecodedImage = new LLImageRaw(); // allow possibly smaller size set during decoding
+			// parse formatted header
+			if (!mFormattedImage->updateData())
+			{
+				return true; // done (failed)
+			}
+			if (!(mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()))
+			{
+				return true; // done (failed)
+			}
+			if (mDiscardLevel >= 0)
+			{
+				mFormattedImage->setDiscardLevel(mDiscardLevel);
+			}
+			mDecodedImageRaw = new LLImageRaw(mFormattedImage->getWidth(),
+											  mFormattedImage->getHeight(),
+											  mFormattedImage->getComponents());
 		}
+		done = mFormattedImage->decode(mDecodedImageRaw, decode_time_slice); // 1ms
+		mDecodedRaw = done;
 	}
-	if (!decoded)
+	if (done && mNeedsAux && !mDecodedAux && mFormattedImage.notNull())
 	{
-		if (param == 0)
-		{
-			// Decode primary channels
-			decoded = mFormattedImage->decode(mDecodedImage, .1f); // 1ms
-		}
-		else
+		// Decode aux channel
+		if (!mDecodedImageAux)
 		{
-			// Decode aux channel
-			decoded = mFormattedImage->decodeChannels(mDecodedImage, .1f, param, param); // 1ms
+			mDecodedImageAux = new LLImageRaw(mFormattedImage->getWidth(),
+											  mFormattedImage->getHeight(),
+											  1);
 		}
+		done = mFormattedImage->decodeChannels(mDecodedImageAux, decode_time_slice, 4, 4); // 1ms
+		mDecodedAux = done;
 	}
-	if (decoded)
-	{
-		// Call the callback immediately; endWork doesn't get called until ckeckWork
-		if (mResponder.notNull())
-		{
-			bool success = (!wasAborted() && mDecodedImage.notNull() && mDecodedImage->getDataSize() != 0);
-			mResponder->completed(success);
-		}
-	}
-	return decoded;
-}
 
-void LLImageWorker::endWork(S32 param, bool aborted)
-{
-	if (mDecodedType != -2)
-	{
-		mDecodedType = aborted ? -2 : param;
-	}
+	return done;
 }
 
-//----------------------------------------------------------------------------
-
-
-BOOL LLImageWorker::requestDecodedAuxData(LLPointer<LLImageRaw>& raw, S32 channel, S32 discard)
+void LLImageDecodeThread::ImageRequest::finishRequest(bool completed)
 {
-	// For most codecs, only mDiscardLevel data is available.
-	//  (see LLImageDXT for exception)
-	if (discard >= 0 && discard != mFormattedImage->getDiscardLevel())
-	{
-		llerrs << "Request for invalid discard level" << llendl;
-	}
-	checkWork();
-	if (mDecodedType == -2)
+	if (mResponder.notNull())
 	{
-		return TRUE; // aborted, done
-	}
-	if (mDecodedType != channel)
-	{
-		if (!haveWork())
-		{
-			addWork(channel, mPriority);
-		}
-		return FALSE;
-	}
-	else
-	{
-		llassert_always(!haveWork());
-		llassert_always(mDecodedType == channel);
-		raw = mDecodedImage; // smart pointer acquires ownership of data
-		mDecodedImage = NULL;
-		return TRUE;
+		bool success = completed && mDecodedRaw && (!mNeedsAux || mDecodedAux);
+		mResponder->completed(success, mDecodedImageRaw, mDecodedImageAux);
 	}
+	// Will automatically be deleted
 }
 
-BOOL LLImageWorker::requestDecodedData(LLPointer<LLImageRaw>& raw, S32 discard)
+// Used by unit test only
+// Checks that a responder exists for this instance so that something can happen when completion is reached
+bool LLImageDecodeThread::ImageRequest::tut_isOK()
 {
-	if (mFormattedImage->getCodec() == IMG_CODEC_DXT)
-	{
-		// special case
-		LLImageDXT* imagedxt = (LLImageDXT*)((LLImageFormatted*)mFormattedImage);
-		return imagedxt->getMipData(raw, discard);
-	}
-	else
-	{
-		return requestDecodedAuxData(raw, 0, discard);
-	}
+	return mResponder.notNull();
 }
diff --git a/indra/llimage/llimageworker.h b/indra/llimage/llimageworker.h
index 0d66695d6ec..6a5b86a2779 100644
--- a/indra/llimage/llimageworker.h
+++ b/indra/llimage/llimageworker.h
@@ -37,49 +37,72 @@
 #include "llpointer.h"
 #include "llworkerthread.h"
 
-class LLImageWorker : public LLWorkerClass
+class LLImageDecodeThread : public LLQueuedThread
 {
 public:
-	static void initImageWorker(LLWorkerThread* workerthread);
-	static void cleanupImageWorker();
-	
-public:
-	static LLWorkerThread* getWorkerThread() { return sWorkerThread; }
-
-	// LLWorkerThread
-public:
-	LLImageWorker(LLImageFormatted* image, U32 priority, S32 discard,
-				  LLPointer<LLResponder> responder);
-	~LLImageWorker();
-
-	// called from WORKER THREAD, returns TRUE if done
-	/*virtual*/ bool doWork(S32 param);
-	
-	BOOL requestDecodedData(LLPointer<LLImageRaw>& raw, S32 discard = -1);
-	BOOL requestDecodedAuxData(LLPointer<LLImageRaw>& raw, S32 channel, S32 discard = -1);
-	void releaseDecodedData();
-	void cancelDecode();
+	class Responder : public LLThreadSafeRefCount
+	{
+	protected:
+		virtual ~Responder();
+	public:
+		virtual void completed(bool success, LLImageRaw* raw, LLImageRaw* aux) = 0;
+	};
 
-private:
-	// called from MAIN THREAD
-	/*virtual*/ void startWork(S32 param); // called from addWork()
-	/*virtual*/ void endWork(S32 param, bool aborted); // called from doWork()
+	class ImageRequest : public LLQueuedThread::QueuedRequest
+	{
+	protected:
+		virtual ~ImageRequest(); // use deleteRequest()
+		
+	public:
+		ImageRequest(handle_t handle, LLImageFormatted* image,
+					 U32 priority, S32 discard, BOOL needs_aux,
+					 LLImageDecodeThread::Responder* responder);
 
-protected:
-	LLPointer<LLImageFormatted> mFormattedImage;
-	LLPointer<LLImageRaw> mDecodedImage;
-	S32 mDecodedType;
-	S32 mDiscardLevel;
+		/*virtual*/ bool processRequest();
+		/*virtual*/ void finishRequest(bool completed);
 
-private:
-	U32 mPriority;
-	LLPointer<LLResponder> mResponder;
+		// Used by unit tests to check the consitency of the request instance
+		bool tut_isOK();
+		
+	private:
+		// input
+		LLPointer<LLImageFormatted> mFormattedImage;
+		S32 mDiscardLevel;
+		BOOL mNeedsAux;
+		// output
+		LLPointer<LLImageRaw> mDecodedImageRaw;
+		LLPointer<LLImageRaw> mDecodedImageAux;
+		BOOL mDecodedRaw;
+		BOOL mDecodedAux;
+		LLPointer<LLImageDecodeThread::Responder> mResponder;
+	};
 	
-protected:
-	static LLWorkerThread* sWorkerThread;
-
 public:
-	static S32 sCount;
+	LLImageDecodeThread(bool threaded = true);
+	handle_t decodeImage(LLImageFormatted* image,
+						 U32 priority, S32 discard, BOOL needs_aux,
+						 Responder* responder);
+	S32 update(U32 max_time_ms);
+
+	// Used by unit tests to check the consistency of the thread instance
+	S32 tut_size();
+	
+private:
+	struct creation_info
+	{
+		handle_t handle;
+		LLPointer<LLImageFormatted> image;
+		U32 priority;
+		S32 discard;
+		BOOL needs_aux;
+		LLPointer<Responder> responder;
+		creation_info(handle_t h, LLImageFormatted* i, U32 p, S32 d, BOOL aux, Responder* r)
+			: handle(h), image(i), priority(p), discard(d), needs_aux(aux), responder(r)
+		{}
+	};
+	typedef std::list<creation_info> creation_list_t;
+	creation_list_t mCreationList;
+	LLMutex* mCreationMutex;
 };
 
 #endif
diff --git a/indra/llimage/tests/llimageworker_test.cpp b/indra/llimage/tests/llimageworker_test.cpp
new file mode 100644
index 00000000000..cc44696a453
--- /dev/null
+++ b/indra/llimage/tests/llimageworker_test.cpp
@@ -0,0 +1,260 @@
+/** 
+ * @file llimageworker_test.cpp
+ * @author Merov Linden
+ * @date 2009-04-28
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ * 
+ * Copyright (c) 2006-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header: almost always required for newview cpp files
+#include <list>
+#include <map>
+#include <algorithm>
+// Class to test
+#include "../llimageworker.h"
+// For timer class
+#include "../llcommon/lltimer.h"
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes: 
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+LLImageBase::LLImageBase() {}
+LLImageBase::~LLImageBase() {}
+void LLImageBase::dump() { }
+void LLImageBase::sanityCheck() { }
+void LLImageBase::deleteData() { }
+U8* LLImageBase::allocateData(S32 size) { return NULL; }
+U8* LLImageBase::reallocateData(S32 size) { return NULL; }
+
+LLImageRaw::LLImageRaw(U16 width, U16 height, S8 components) { }
+LLImageRaw::~LLImageRaw() { }
+void LLImageRaw::deleteData() { }
+U8* LLImageRaw::allocateData(S32 size) { return NULL; }
+U8* LLImageRaw::reallocateData(S32 size) { return NULL; }
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+
+namespace tut
+{
+	// Test wrapper declarations
+
+	// Note: We derive the responder class for 2 reasons:
+	// 1. It's a pure virtual class and we can't compile without completed() being implemented
+	// 2. We actually need a responder to test that the thread work test completed
+	// We implement this making no assumption on what's done in the thread or worker
+	// though, just that the responder's completed() method is called in the end.
+	// Note on responders: responders are ref counted and *will* be deleted by the request they are 
+	// attached to when the queued request is deleted. The recommended way of using them is to 
+	// create them when creating a request, put a callback method in completed() and not rely on 
+	// anything to survive in the responder object once completed() has been called. Let the request
+	// do the deletion and clean up itself.
+	class responder_test : public LLImageDecodeThread::Responder
+	{
+		public:
+			responder_test(bool* res)
+			{ 
+				done = res;
+				*done = false;
+			}
+			virtual void completed(bool success, LLImageRaw* raw, LLImageRaw* aux)
+			{
+				*done = true;
+			}
+		private:
+			// This is what can be thought of as the minimal implementation of a responder
+			// Done will be switched to true when completed() is called and can be tested
+			// outside the responder. A better way of doing this is to store a callback here.
+			bool* done;
+	};
+
+	// Test wrapper declaration : decode thread
+	struct imagedecodethread_test
+	{
+		// Instance to be tested
+		LLImageDecodeThread* mThread;
+
+		// Constructor and destructor of the test wrapper
+		imagedecodethread_test()
+		{
+			mThread = NULL;
+		}
+		~imagedecodethread_test()
+		{
+			delete mThread;
+		}
+	};
+
+	// Test wrapper declaration : image worker
+	// Note: this class is not meant to be instantiated outside an LLImageDecodeThread instance
+	// but it's not a bad idea to get its public API a good shake as part of a thorough unit test set.
+	// Some gotcha with the destructor though (see below).
+	struct imagerequest_test
+	{
+		// Instance to be tested
+		LLImageDecodeThread::ImageRequest* mRequest;
+		bool done;
+
+		// Constructor and destructor of the test wrapper
+		imagerequest_test()
+		{
+			done = false;
+			mRequest = new LLImageDecodeThread::ImageRequest(0, 0,
+											 LLQueuedThread::PRIORITY_NORMAL, 0, FALSE,
+											 new responder_test(&done));
+		}
+		~imagerequest_test()
+		{
+			// We should delete the object *but*, because its destructor is protected, that cannot be
+			// done from outside an LLImageDecodeThread instance... So we leak memory here... It's fine...
+			//delete mRequest;
+		}
+	};
+
+	// Tut templating thingamagic: test group, object and test instance
+	typedef test_group<imagedecodethread_test> imagedecodethread_t;
+	typedef imagedecodethread_t::object imagedecodethread_object_t;
+	tut::imagedecodethread_t tut_imagedecodethread("imagedecodethread");
+
+	typedef test_group<imagerequest_test> imagerequest_t;
+	typedef imagerequest_t::object imagerequest_object_t;
+	tut::imagerequest_t tut_imagerequest("imagerequest");
+
+	// ---------------------------------------------------------------------------------------
+	// Test functions
+	// Notes:
+	// * Test as many as you possibly can without requiring a full blown simulation of everything
+	// * The tests are executed in sequence so the test instance state may change between calls
+	// * Remember that you cannot test private methods with tut
+	// ---------------------------------------------------------------------------------------
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLImageDecodeThread interface
+	// ---------------------------------------------------------------------------------------
+	//
+	// Note on Unit Testing Queued Thread Classes
+	//
+	// Since methods on such a class are called on a separate loop and that we can't insert tut
+	// ensure() calls in there, we exercise the class with 2 sets of tests:
+	// - 1: Test as a single threaded instance: We declare the class but ask for no thread
+	//   to be spawned (easy with LLThreads since there's a boolean argument on the constructor
+	//   just for that). We can then unit test each public method like we do on a normal class.
+	// - 2: Test as a threaded instance: We let the thread launch and check that its external 
+	//   behavior is as expected (i.e. it runs, can accept a work order and processes
+	//   it). Typically though there's no guarantee that this exercises all the methods of the
+	//   class which is why we also need the previous "non threaded" set of unit tests for
+	//   complete coverage.
+	//
+	// ---------------------------------------------------------------------------------------
+
+	template<> template<>
+	void imagedecodethread_object_t::test<1>()
+	{
+		// Test a *non threaded* instance of the class
+		mThread = new LLImageDecodeThread(false);
+		ensure("LLImageDecodeThread: non threaded constructor failed", mThread != NULL);
+		// Test that we start with an empty list right at creation
+		ensure("LLImageDecodeThread: non threaded init state incorrect", mThread->tut_size() == 0);
+		// Insert something in the queue
+		bool done = false;
+		LLImageDecodeThread::handle_t decodeHandle = mThread->decodeImage(NULL, LLQueuedThread::PRIORITY_NORMAL, 0, FALSE, new responder_test(&done));
+		// Verifies we got a valid handle
+		ensure("LLImageDecodeThread: non threaded decodeImage(), returned handle is null", decodeHandle != 0);
+		// Verifies that we do now have something in the queued list
+		ensure("LLImageDecodeThread: non threaded decodeImage() insertion in threaded list failed", mThread->tut_size() == 1);
+		// Trigger queue handling "manually" (on a threaded instance, this is done on the thread loop)
+		S32 res = mThread->update(0);
+		// Verifies that we successfully handled the list
+		ensure("LLImageDecodeThread: non threaded update() list handling test failed", res == 0);
+		// Verifies that the list is now empty
+		ensure("LLImageDecodeThread: non threaded update() list emptying test failed", mThread->tut_size() == 0);
+	}
+
+	template<> template<>
+	void imagedecodethread_object_t::test<2>()
+	{
+		// Test a *threaded* instance of the class
+		mThread = new LLImageDecodeThread(true);
+		ensure("LLImageDecodeThread: threaded constructor failed", mThread != NULL);
+		// Test that we start with an empty list right at creation
+		ensure("LLImageDecodeThread: threaded init state incorrect", mThread->tut_size() == 0);
+		// Insert something in the queue
+		bool done = false;
+		LLImageDecodeThread::handle_t decodeHandle = mThread->decodeImage(NULL, LLQueuedThread::PRIORITY_NORMAL, 0, FALSE, new responder_test(&done));
+		// Verifies we get back a valid handle
+		ensure("LLImageDecodeThread:  threaded decodeImage(), returned handle is null", decodeHandle != 0);
+		// Wait a little so to simulate the main thread doing something on its main loop...
+		ms_sleep(500);		// 500 milliseconds
+		// Verifies that the responder has *not* been called yet in the meantime
+		ensure("LLImageDecodeThread: responder creation failed", done == false);
+		// Ask the thread to update: that means tells the queue to check itself and creates work requests
+		mThread->update(1);
+		// Wait till the thread has time to handle the work order (though it doesn't do much per work order...)
+		const U32 INCREMENT_TIME = 500;				// 500 milliseconds
+		const U32 MAX_TIME = 20 * INCREMENT_TIME;	// Do the loop 20 times max, i.e. wait 10 seconds but no more
+		U32 total_time = 0;
+		while ((done == false) && (total_time < MAX_TIME))
+		{
+			ms_sleep(INCREMENT_TIME);
+			total_time += INCREMENT_TIME;
+		}
+		// Verifies that the responder has now been called
+		ensure("LLImageDecodeThread: threaded work unit not processed", done == true);
+	}
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLImageDecodeThread::ImageRequest interface
+	// ---------------------------------------------------------------------------------------
+	
+	template<> template<>
+	void imagerequest_object_t::test<1>()
+	{
+		// Test that we start with a correct request at creation
+		ensure("LLImageDecodeThread::ImageRequest::ImageRequest() constructor test failed", mRequest->tut_isOK());
+		bool res = mRequest->processRequest();
+		// Verifies that we processed the request successfully
+		ensure("LLImageDecodeThread::ImageRequest::processRequest() processing request test failed", res == true);
+		// Check that we can call the finishing call safely
+		try {
+			mRequest->finishRequest(false);
+		} catch (...) {
+			fail("LLImageDecodeThread::ImageRequest::finishRequest() test failed");
+		}
+	}
+}
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index b8ef92f9a98..df4c618ac10 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -3582,7 +3582,7 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
 	if (face == -1) // ALL_SIDES
 	{
 		start_face = 0;
-		end_face = getNumFaces() - 1;
+		end_face = getNumVolumeFaces() - 1;
 	}
 	else
 	{
diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp
index b3087bcc3f8..0ab10812006 100644
--- a/indra/llmessage/llassetstorage.cpp
+++ b/indra/llmessage/llassetstorage.cpp
@@ -64,6 +64,9 @@ const LLUUID CATEGORIZE_LOST_AND_FOUND_ID(std::string("00000000-0000-0000-0000-0
 
 const U64 TOXIC_ASSET_LIFETIME = (120 * 1000000);		// microseconds
 
+LLTempAssetStorage::~LLTempAssetStorage()
+{
+}
 
 ///----------------------------------------------------------------------------
 /// LLAssetInfo
diff --git a/indra/llmessage/llassetstorage.h b/indra/llmessage/llassetstorage.h
index 56adbd5ccfe..83cfdf6110f 100644
--- a/indra/llmessage/llassetstorage.h
+++ b/indra/llmessage/llassetstorage.h
@@ -204,7 +204,16 @@ typedef std::map<LLUUID,U64,lluuid_less> toxic_asset_map_t;
 typedef void (*LLGetAssetCallback)(LLVFS *vfs, const LLUUID &asset_id,
 										 LLAssetType::EType asset_type, void *user_data, S32 status, LLExtStat ext_status);
 
-class LLAssetStorage
+class LLTempAssetStorage
+{
+public:
+	virtual ~LLTempAssetStorage() =0;
+	virtual void addTempAssetData(const LLUUID& asset_id,
+								  const LLUUID& agent_id,
+								  const std::string& host_name) = 0;
+};
+
+class LLAssetStorage : public LLTempAssetStorage
 {
 public:
 	// VFS member is public because static child methods need it :(
diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp
index a4af8e989ba..14771ef6dd8 100644
--- a/indra/llmessage/llcurl.cpp
+++ b/indra/llmessage/llcurl.cpp
@@ -220,7 +220,7 @@ class LLCurl::Easy
 	U32 report(CURLcode);
 	void getTransferInfo(LLCurl::TransferInfo* info);
 
-	void prepRequest(const std::string& url, ResponderPtr, bool post = false);
+	void prepRequest(const std::string& url, const std::vector<std::string>& headers, ResponderPtr, bool post = false);
 	
 	const char* getErrorBuffer();
 
@@ -432,7 +432,9 @@ size_t curlHeaderCallback(void* data, size_t size, size_t nmemb, void* user_data
 	return n;
 }
 
-void LLCurl::Easy::prepRequest(const std::string& url, ResponderPtr responder, bool post)
+void LLCurl::Easy::prepRequest(const std::string& url,
+							   const std::vector<std::string>& headers,
+							   ResponderPtr responder, bool post)
 {
 	resetState();
 	
@@ -465,8 +467,13 @@ void LLCurl::Easy::prepRequest(const std::string& url, ResponderPtr responder, b
 	{
 		slist_append("Connection: keep-alive");
 		slist_append("Keep-alive: 300");
+		// Accept and other headers
+		for (std::vector<std::string>::const_iterator iter = headers.begin();
+			 iter != headers.end(); ++iter)
+		{
+			slist_append((*iter).c_str());
+		}
 	}
-	// *FIX: should have ACCEPT headers
 }
 
 ////////////////////////////////////////////////////////////////////////////
@@ -676,15 +683,18 @@ LLCurlRequest::LLCurlRequest() :
 	mActiveMulti(NULL),
 	mActiveRequestCount(0)
 {
+	mThreadID = LLThread::currentID();
 }
 
 LLCurlRequest::~LLCurlRequest()
 {
+	llassert_always(mThreadID == LLThread::currentID());
 	for_each(mMultiSet.begin(), mMultiSet.end(), DeletePointer());
 }
 
 void LLCurlRequest::addMulti()
 {
+	llassert_always(mThreadID == LLThread::currentID());
 	LLCurl::Multi* multi = new LLCurl::Multi();
 	mMultiSet.insert(multi);
 	mActiveMulti = multi;
@@ -714,17 +724,20 @@ bool LLCurlRequest::addEasy(LLCurl::Easy* easy)
 
 void LLCurlRequest::get(const std::string& url, LLCurl::ResponderPtr responder)
 {
-	getByteRange(url, 0, -1, responder);
+	getByteRange(url, headers_t(), 0, -1, responder);
 }
 	
-bool LLCurlRequest::getByteRange(const std::string& url, S32 offset, S32 length, LLCurl::ResponderPtr responder)
+bool LLCurlRequest::getByteRange(const std::string& url,
+								 const headers_t& headers,
+								 S32 offset, S32 length,
+								 LLCurl::ResponderPtr responder)
 {
 	LLCurl::Easy* easy = allocEasy();
 	if (!easy)
 	{
 		return false;
 	}
-	easy->prepRequest(url, responder);
+	easy->prepRequest(url, headers, responder);
 	easy->setopt(CURLOPT_HTTPGET, 1);
 	if (length > 0)
 	{
@@ -736,14 +749,17 @@ bool LLCurlRequest::getByteRange(const std::string& url, S32 offset, S32 length,
 	return res;
 }
 
-bool LLCurlRequest::post(const std::string& url, const LLSD& data, LLCurl::ResponderPtr responder)
+bool LLCurlRequest::post(const std::string& url,
+						 const headers_t& headers,
+						 const LLSD& data,
+						 LLCurl::ResponderPtr responder)
 {
 	LLCurl::Easy* easy = allocEasy();
 	if (!easy)
 	{
 		return false;
 	}
-	easy->prepRequest(url, responder);
+	easy->prepRequest(url, headers, responder);
 
 	LLSDSerialize::toXML(data, easy->getInput());
 	S32 bytes = easy->getInput().str().length();
@@ -763,6 +779,7 @@ bool LLCurlRequest::post(const std::string& url, const LLSD& data, LLCurl::Respo
 // Note: call once per frame
 S32 LLCurlRequest::process()
 {
+	llassert_always(mThreadID == LLThread::currentID());
 	S32 res = 0;
 	for (curlmulti_set_t::iterator iter = mMultiSet.begin();
 		 iter != mMultiSet.end(); )
@@ -782,6 +799,7 @@ S32 LLCurlRequest::process()
 
 S32 LLCurlRequest::getQueued()
 {
+	llassert_always(mThreadID == LLThread::currentID());
 	S32 queued = 0;
 	for (curlmulti_set_t::iterator iter = mMultiSet.begin();
 		 iter != mMultiSet.end(); )
@@ -1002,7 +1020,7 @@ void LLCurl::initClass()
 	S32 mutex_count = CRYPTO_num_locks();
 	for (S32 i=0; i<mutex_count; i++)
 	{
-		sSSLMutex.push_back(new LLMutex(gAPRPoolp));
+		sSSLMutex.push_back(new LLMutex(NULL));
 	}
 	CRYPTO_set_id_callback(&LLCurl::ssl_thread_id);
 	CRYPTO_set_locking_callback(&LLCurl::ssl_locking_callback);
diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h
index fbd3077cbf7..32637b200e8 100644
--- a/indra/llmessage/llcurl.h
+++ b/indra/llmessage/llcurl.h
@@ -188,12 +188,14 @@ namespace boost
 class LLCurlRequest
 {
 public:
+	typedef std::vector<std::string> headers_t;
+	
 	LLCurlRequest();
 	~LLCurlRequest();
 
 	void get(const std::string& url, LLCurl::ResponderPtr responder);
-	bool getByteRange(const std::string& url, S32 offset, S32 length, LLCurl::ResponderPtr responder);
-	bool post(const std::string& url, const LLSD& data, LLCurl::ResponderPtr responder);
+	bool getByteRange(const std::string& url, const headers_t& headers, S32 offset, S32 length, LLCurl::ResponderPtr responder);
+	bool post(const std::string& url, const headers_t& headers, const LLSD& data, LLCurl::ResponderPtr responder);
 	S32  process();
 	S32  getQueued();
 
@@ -207,6 +209,7 @@ class LLCurlRequest
 	curlmulti_set_t mMultiSet;
 	LLCurl::Multi* mActiveMulti;
 	S32 mActiveRequestCount;
+	U32 mThreadID; // debug
 };
 
 class LLCurlEasyRequest
diff --git a/indra/llmessage/tests/llcurl_stub.cpp b/indra/llmessage/tests/llcurl_stub.cpp
index 5dc5932fde9..db5ffaf3eee 100644
--- a/indra/llmessage/tests/llcurl_stub.cpp
+++ b/indra/llmessage/tests/llcurl_stub.cpp
@@ -20,8 +20,9 @@
  */
 
 #include "linden_common.h"
+#include "llcurl.h"
 
-LLCurl::Responder::Responder()
+LLCurl::Responder::Responder() : mReferenceCount(0)
 {
 }
 
diff --git a/indra/llmessage/tests/llhttpclientadapter_test.cpp b/indra/llmessage/tests/llhttpclientadapter_test.cpp
index 250fa100b67..7065c9d7e4a 100644
--- a/indra/llmessage/tests/llhttpclientadapter_test.cpp
+++ b/indra/llmessage/tests/llhttpclientadapter_test.cpp
@@ -50,7 +50,7 @@ std::vector<std::string> put_urls;
 std::vector<LLSD> put_body;
 std::vector<boost::intrusive_ptr<LLCurl::Responder> > put_responders;
 
-void LLHTTPClient::put(std::string const &url, LLSD const &body, boost::intrusive_ptr<LLCurl::Responder> responder,float) 
+void LLHTTPClient::put(const std::string& url, const LLSD& body, boost::intrusive_ptr<LLCurl::Responder> responder, const LLSD& headers, const F32 timeout)
 {
 	put_urls.push_back(url);
 	put_responders.push_back(responder);
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index e5fea5b995e..f8d7ea00e0c 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -43,7 +43,6 @@
 #include "llmath.h"
 #include "llgl.h"
 #include "llrender.h"
-
 //----------------------------------------------------------------------------
 const F32 MIN_TEXTURE_LIFETIME = 10.f;
 
@@ -60,21 +59,34 @@ std::list<U32> LLImageGL::sDeadTextureList;
 
 BOOL LLImageGL::sGlobalUseAnisotropic	= FALSE;
 F32 LLImageGL::sLastFrameTime			= 0.f;
+BOOL LLImageGL::sAllowReadBackRaw       = FALSE ;
 LLImageGL* LLImageGL::sDefaultGLTexture = NULL ;
+
 std::set<LLImageGL*> LLImageGL::sImageList;
 
-#if !LL_RELEASE_FOR_DOWNLOAD
+//****************************************************************************************************
+//The below for texture auditing use only
+//****************************************************************************************************
 //-----------------------
 //debug use
+BOOL gAuditTexture = FALSE ;
 #define MAX_TEXTURE_LOG_SIZE 22 //2048 * 2048
 std::vector<S32> LLImageGL::sTextureLoadedCounter(MAX_TEXTURE_LOG_SIZE + 1) ;
 std::vector<S32> LLImageGL::sTextureBoundCounter(MAX_TEXTURE_LOG_SIZE + 1) ;
 std::vector<S32> LLImageGL::sTextureCurBoundCounter(MAX_TEXTURE_LOG_SIZE + 1) ;
 S32 LLImageGL::sCurTexSizeBar = -1 ;
 S32 LLImageGL::sCurTexPickSize = -1 ;
-LLPointer<LLImageGL> LLImageGL::sDefaultTexturep = NULL;
+LLPointer<LLImageGL> LLImageGL::sHighlightTexturep = NULL;
+S32 LLImageGL::sMaxCatagories = 1 ;
+
+std::vector<S32> LLImageGL::sTextureMemByCategory;
+std::vector<S32> LLImageGL::sTextureMemByCategoryBound ;
+std::vector<S32> LLImageGL::sTextureCurMemByCategoryBound ;
 //------------------------
-#endif
+//****************************************************************************************************
+//End for texture auditing use only
+//****************************************************************************************************
+
 //**************************************************************************************
 //below are functions for debug use
 //do not delete them even though they are not currently being used.
@@ -144,6 +156,60 @@ void LLImageGL::checkTexSize() const
 //**************************************************************************************
 
 //----------------------------------------------------------------------------
+BOOL is_little_endian()
+{
+	S32 a = 0x12345678;
+    U8 *c = (U8*)(&a);
+    
+	return (*c == 0x78) ;
+}
+//static 
+void LLImageGL::initClass(S32 num_catagories) 
+{
+	sMaxCatagories = num_catagories ;
+
+	sTextureMemByCategory.resize(sMaxCatagories);
+	sTextureMemByCategoryBound.resize(sMaxCatagories) ;
+	sTextureCurMemByCategoryBound.resize(sMaxCatagories) ;
+}
+
+//static 
+void LLImageGL::cleanupClass() 
+{	
+	sTextureMemByCategory.clear() ;
+	sTextureMemByCategoryBound.clear() ;
+	sTextureCurMemByCategoryBound.clear() ;
+}
+
+//static 
+void LLImageGL::setHighlightTexture(S32 category) 
+{
+	const S32 dim = 128;
+	sHighlightTexturep = new LLImageGL() ;
+	LLPointer<LLImageRaw> image_raw = new LLImageRaw(dim,dim,3);
+	U8* data = image_raw->getData();
+	for (S32 i = 0; i<dim; i++)
+	{
+		for (S32 j = 0; j<dim; j++)
+		{
+			const S32 border = 2;
+			if (i<border || j<border || i>=(dim-border) || j>=(dim-border))
+			{
+				*data++ = 0xff;
+				*data++ = 0xff;
+				*data++ = 0xff;
+			}
+			else
+			{
+				*data++ = 0xff;
+				*data++ = 0xff;
+				*data++ = 0x00;
+			}
+		}
+	}
+	sHighlightTexturep->createGLTexture(0, image_raw, 0, TRUE, category);
+	image_raw = NULL;
+}
 
 //static
 S32 LLImageGL::dataFormatBits(S32 dataformat)
@@ -211,19 +277,31 @@ void LLImageGL::updateStats(F32 current_time)
 	sBoundTextureMemoryInBytes = sCurBoundTextureMemory;
 	sCurBoundTextureMemory = 0;
 
-#if !LL_RELEASE_FOR_DOWNLOAD
-	for(U32 i = 0 ; i < sTextureCurBoundCounter.size() ; i++)
+	if(gAuditTexture)
 	{
-		sTextureBoundCounter[i] = sTextureCurBoundCounter[i] ;
-		sTextureCurBoundCounter[i] = 0 ;
+		for(U32 i = 0 ; i < sTextureCurBoundCounter.size() ; i++)
+		{
+			sTextureBoundCounter[i] = sTextureCurBoundCounter[i] ;
+			sTextureCurBoundCounter[i] = 0 ;
+		}
+		for(U32 i = 0 ; i < sTextureCurMemByCategoryBound.size() ; i++)
+		{
+			sTextureMemByCategoryBound[i] = sTextureCurMemByCategoryBound[i] ;
+			sTextureCurMemByCategoryBound[i] = 0 ;
+		}
 	}
-#endif
 }
 
 //static
-S32 LLImageGL::updateBoundTexMem(const S32 delta)
+S32 LLImageGL::updateBoundTexMem(const S32 mem, const S32 ncomponents, S32 category)
 {
-	LLImageGL::sCurBoundTextureMemory += delta;
+	if(gAuditTexture && ncomponents > 0 && category > -1)
+	{
+		sTextureCurBoundCounter[getTextureCounterIndex(mem / ncomponents)]++ ;
+		sTextureCurMemByCategoryBound[category] += mem ;
+	}
+	
+	LLImageGL::sCurBoundTextureMemory += mem ;
 	return LLImageGL::sCurBoundTextureMemory;
 }
 
@@ -237,6 +315,7 @@ void LLImageGL::destroyGL(BOOL save_state)
 		gGL.getTexUnit(stage)->unbind(LLTexUnit::TT_TEXTURE);
 	}
 	
+	sAllowReadBackRaw = true ;
 	for (std::set<LLImageGL*>::iterator iter = sImageList.begin();
 		 iter != sImageList.end(); iter++)
 	{
@@ -246,7 +325,7 @@ void LLImageGL::destroyGL(BOOL save_state)
 			if (save_state && glimage->isGLTextureCreated() && glimage->mComponents)
 			{
 				glimage->mSaveData = new LLImageRaw;
-				if(!glimage->readBackRaw(glimage->mCurrentDiscardLevel, glimage->mSaveData, false))
+				if(!glimage->readBackRaw(glimage->mCurrentDiscardLevel, glimage->mSaveData, false)) //necessary, keep it.
 				{
 					glimage->mSaveData = NULL ;
 				}
@@ -256,6 +335,7 @@ void LLImageGL::destroyGL(BOOL save_state)
 			stop_glerror();
 		}
 	}
+	sAllowReadBackRaw = false ;
 }
 
 //static 
@@ -273,7 +353,7 @@ void LLImageGL::restoreGL()
 		{
 			if (glimage->getComponents() && glimage->mSaveData->getComponents())
 			{
-				glimage->createGLTexture(glimage->mCurrentDiscardLevel, glimage->mSaveData);
+				glimage->createGLTexture(glimage->mCurrentDiscardLevel, glimage->mSaveData, 0, TRUE, glimage->getCategory());
 				stop_glerror();
 			}
 			glimage->mSaveData = NULL; // deletes data
@@ -355,7 +435,7 @@ void LLImageGL::init(BOOL usemipmaps)
 	mPickMask		  = NULL;
 	mTextureMemory    = 0;
 	mLastBindTime     = 0.f;
-
+	
 	mTarget			  = GL_TEXTURE_2D;
 	mBindTarget		  = LLTexUnit::TT_TEXTURE;
 	mUseMipMaps		  = usemipmaps;
@@ -381,7 +461,11 @@ void LLImageGL::init(BOOL usemipmaps)
 	mHasExplicitFormat = FALSE;
 
 	mGLTextureCreated = FALSE ;
+
 	mIsMask = FALSE;
+	mCategory = -1 ;
+	mAlphaStride = 0 ;
+	mAlphaOffset = 0 ;
 	mNeedsAlphaAndPickMask = TRUE ;
 
 	mDiscardLevelInAtlas = -1 ;
@@ -486,6 +570,10 @@ void LLImageGL::dump()
 }
 
 //----------------------------------------------------------------------------
+void LLImageGL::forceUpdateBindStats(void) const
+{
+	mLastBindTime = sLastFrameTime;
+}
 
 BOOL LLImageGL::updateBindStats(S32 tex_mem) const
 {	
@@ -499,7 +587,7 @@ BOOL LLImageGL::updateBindStats(S32 tex_mem) const
 		{
 			// we haven't accounted for this texture yet this frame
 			sUniqueCount++;
-			updateBoundTexMem(tex_mem);
+			updateBoundTexMem(tex_mem, mComponents, mCategory);
 			mLastBindTime = sLastFrameTime;
 
 			return TRUE ;
@@ -525,6 +613,8 @@ void LLImageGL::setExplicitFormat( LLGLint internal_format, LLGLenum primary_for
 	else
 		mFormatType = type_format;
 	mFormatSwapBytes = swap_bytes;
+
+	calcAlphaChannelOffsetAndStride() ;
 }
 
 //----------------------------------------------------------------------------
@@ -540,7 +630,6 @@ void LLImageGL::setImage(const LLImageRaw* imageraw)
 
 void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
 {
-	llpushcallstacks ;
 	bool is_compressed = false;
 	if (mFormatPrimary >= GL_COMPRESSED_RGBA_S3TC_DXT1_EXT && mFormatPrimary <= GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
 	{
@@ -749,7 +838,6 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
 	}
 	stop_glerror();
 	mGLTextureCreated = true;
-	llpushcallstacks ;
 }
 
 BOOL LLImageGL::preAddToAtlas(S32 discard_level, const LLImageRaw* raw_image)
@@ -840,7 +928,6 @@ void LLImageGL::postAddToAtlas()
 
 BOOL LLImageGL::setSubImage(const U8* datap, S32 data_width, S32 data_height, S32 x_pos, S32 y_pos, S32 width, S32 height, BOOL force_fast_update)
 {
-	llpushcallstacks ;
 	if (!width || !height)
 	{
 		return TRUE;
@@ -930,7 +1017,6 @@ BOOL LLImageGL::setSubImage(const U8* datap, S32 data_width, S32 data_height, S3
 		stop_glerror();
 		mGLTextureCreated = true;
 	}
-	llpushcallstacks ;
 	return TRUE;
 }
 
@@ -942,8 +1028,9 @@ BOOL LLImageGL::setSubImage(const LLImageRaw* imageraw, S32 x_pos, S32 y_pos, S3
 // Copy sub image from frame buffer
 BOOL LLImageGL::setSubImageFromFrameBuffer(S32 fb_x, S32 fb_y, S32 x_pos, S32 y_pos, S32 width, S32 height)
 {
-	if (gGL.getTexUnit(0)->bind(this))
+	if (gGL.getTexUnit(0)->bind(this, false, true))
 	{
+		//checkTexSize() ;
 		glCopyTexSubImage2D(GL_TEXTURE_2D, 0, fb_x, fb_y, x_pos, y_pos, width, height);
 		mGLTextureCreated = true;
 		stop_glerror();
@@ -1007,7 +1094,7 @@ BOOL LLImageGL::createGLTexture()
 	return TRUE ;
 }
 
-BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename/*=0*/)
+BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename/*=0*/, BOOL to_create, S32 category)
 {
 	if (gGLManager.mIsDisabled)
 	{
@@ -1027,8 +1114,10 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S
 	discard_level = llclamp(discard_level, 0, (S32)mMaxDiscardLevel);
 
 	// Actual image width/height = raw image width/height * 2^discard_level
-	S32 w = imageraw->getWidth() << discard_level;
-	S32 h = imageraw->getHeight() << discard_level;
+	S32 raw_w = imageraw->getWidth() ;
+	S32 raw_h = imageraw->getHeight() ;
+	S32 w = raw_w << discard_level;
+	S32 h = raw_h << discard_level;
 
 	// setSize may call destroyGLTexture if the size does not match
 	setSize(w, h, imageraw->getComponents());
@@ -1062,15 +1151,25 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S
 		  default:
 			llerrs << "Bad number of components for texture: " << (U32)getComponents() << llendl;
 		}
+
+		calcAlphaChannelOffsetAndStride() ;
 	}
 
+	if(!to_create) //not create a gl texture
+	{
+		destroyGLTexture();
+		mCurrentDiscardLevel = discard_level;	
+		mLastBindTime = sLastFrameTime;
+		return TRUE ;
+	}
+
+	setCategory(category) ;
  	const U8* rawdata = imageraw->getData();
 	return createGLTexture(discard_level, rawdata, FALSE, usename);
 }
 
 BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_hasmips, S32 usename)
 {
-	llpushcallstacks ;
 	llassert(data_in);
 
 	if (discard_level < 0)
@@ -1137,11 +1236,14 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_
 	if (old_name != 0)
 	{
 		sGlobalTextureMemoryInBytes -= mTextureMemory;
-#if !LL_RELEASE_FOR_DOWNLOAD
-		decTextureCounter(mTextureMemory / mComponents) ;
-#endif
+
+		if(gAuditTexture)
+		{
+			decTextureCounter(mTextureMemory, mComponents, mCategory) ;
+		}
 
 		LLImageGL::deleteTextures(1, &old_name);
+
 		stop_glerror();
 	}
 
@@ -1149,82 +1251,20 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_
 	sGlobalTextureMemoryInBytes += mTextureMemory;
 	mTexelsInGLTexture = getWidth() * getHeight() ;
 
-#if !LL_RELEASE_FOR_DOWNLOAD
-	incTextureCounter(mTextureMemory / mComponents) ;
-#endif
-
+	if(gAuditTexture)
+	{
+		incTextureCounter(mTextureMemory, mComponents, mCategory) ;
+	}
 	// mark this as bound at this point, so we don't throw it out immediately
 	mLastBindTime = sLastFrameTime;
-
-	llpushcallstacks ;
 	return TRUE;
 }
 
-BOOL LLImageGL::setDiscardLevel(S32 discard_level)
-{
-	llassert(discard_level >= 0);
-	llassert(mCurrentDiscardLevel >= 0);
-
-	discard_level = llclamp(discard_level, 0, (S32)mMaxDiscardLevel);	
-
-	if (discard_level == mCurrentDiscardLevel)
-	{
-		// nothing to do
-		return FALSE;
-	}
-	else if (discard_level < mCurrentDiscardLevel)
-	{
-		// larger image
-		dump();
-		llerrs << "LLImageGL::setDiscardLevel() called with larger discard level; use createGLTexture()" << llendl;
-		return FALSE;
-	}
-	else if (mUseMipMaps)
-	{
-		LLPointer<LLImageRaw> imageraw = new LLImageRaw;
-		while(discard_level > mCurrentDiscardLevel)
-		{
-			if (readBackRaw(discard_level, imageraw, false))
-			{
-				break;
-			}
-			discard_level--;
-		}
-		if (discard_level == mCurrentDiscardLevel)
-		{
-			// unable to increase the discard level
-			return FALSE;
-		}
-		return createGLTexture(discard_level, imageraw);
-	}
-	else
-	{
-#if !LL_LINUX && !LL_SOLARIS
-		 // *FIX: This should not be skipped for the linux client.
-		llerrs << "LLImageGL::setDiscardLevel() called on image without mipmaps" << llendl;
-#endif
-		return FALSE;
-	}
-}
-
-BOOL LLImageGL::isValidForSculpt(S32 discard_level, S32 image_width, S32 image_height, S32 ncomponents)
-{
-	assert_glerror();
-	S32 gl_discard = discard_level - mCurrentDiscardLevel;
-	LLGLint glwidth = 0;
-	glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_WIDTH, (GLint*)&glwidth);
-	LLGLint glheight = 0;
-	glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_HEIGHT, (GLint*)&glheight);
-	LLGLint glcomponents = 0 ;
-	glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_INTERNAL_FORMAT, (GLint*)&glcomponents);
-	assert_glerror();
-
-	return glwidth >= image_width && glheight >= image_height && (GL_RGB8 == glcomponents || GL_RGBA8 == glcomponents) ;
-}
-
 BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok) const
 {
-	llpushcallstacks ;
+	llassert_always(sAllowReadBackRaw) ;
+	//llerrs << "should not call this function!" << llendl ;
+	
 	if (discard_level < 0)
 	{
 		discard_level = mCurrentDiscardLevel;
@@ -1327,7 +1367,7 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre
 		return FALSE ;
 	}
 	//-----------------------------------------------------------------------------------------------
-	llpushcallstacks ;
+
 	return TRUE ;
 }
 
@@ -1345,25 +1385,26 @@ void LLImageGL::deleteDeadTextures()
 				stop_glerror();
 			}
 		}
-
+		
 		glDeleteTextures(1, &tex);
 		stop_glerror();
 	}
 }
-
+		
 void LLImageGL::destroyGLTexture()
 {
 	if (mTexName != 0)
 	{
 		if(mTextureMemory)
 		{
-#if !LL_RELEASE_FOR_DOWNLOAD
-			decTextureCounter(mTextureMemory / mComponents) ;
-#endif
+			if(gAuditTexture)
+			{
+				decTextureCounter(mTextureMemory, mComponents, mCategory) ;
+			}
 			sGlobalTextureMemoryInBytes -= mTextureMemory;
 			mTextureMemory = 0;
 		}
-
+		
 		LLImageGL::deleteTextures(1, &mTexName);			
 		mTexName = 0;
 		mCurrentDiscardLevel = -1 ; //invalidate mCurrentDiscardLevel.
@@ -1479,6 +1520,11 @@ S32 LLImageGL::getMipBytes(S32 discard_level) const
 	return res;
 }
 
+BOOL LLImageGL::isJustBound() const
+{
+	return (BOOL)(sLastFrameTime - mLastBindTime < 0.5f);
+}
+
 BOOL LLImageGL::getBoundRecently() const
 {
 	return (BOOL)(sLastFrameTime - mLastBindTime < MIN_TEXTURE_LIFETIME);
@@ -1490,44 +1536,104 @@ void LLImageGL::setTarget(const LLGLenum target, const LLTexUnit::eTextureType b
 	mBindTarget = bind_target;
 }
 
-void LLImageGL::analyzeAlpha(const void* data_in, S32 w, S32 h)
+const S8 INVALID_OFFSET = -99 ;
+void LLImageGL::setNeedsAlphaAndPickMask(BOOL need_mask) 
 {
-	if(!mNeedsAlphaAndPickMask)
+	if(mNeedsAlphaAndPickMask != need_mask)
 	{
-		return ;
+		mNeedsAlphaAndPickMask = need_mask;
+
+		if(mNeedsAlphaAndPickMask)
+		{
+			mAlphaOffset = 0 ;
+		}
+		else //do not need alpha mask
+		{
+			mAlphaOffset = INVALID_OFFSET ;
+			mIsMask = FALSE;
+		}
 	}
+}
 
-	if (mFormatType != GL_UNSIGNED_BYTE)
+void LLImageGL::calcAlphaChannelOffsetAndStride()
+{
+	if(mAlphaOffset == INVALID_OFFSET)//do not need alpha mask
 	{
-		llwarns << "Cannot analyze alpha for image with format type " << std::hex << mFormatType << std::dec << llendl;
+		return ;
 	}
 
-	U32 stride = 0;
+	mAlphaStride = -1 ;
 	switch (mFormatPrimary)
 	{
 	case GL_LUMINANCE:
 	case GL_ALPHA:
-		stride = 1;
+		mAlphaStride = 1;
 		break;
 	case GL_LUMINANCE_ALPHA:
-		stride = 2;
+		mAlphaStride = 2;
 		break;
 	case GL_RGB:
-		//no alpha
+		mNeedsAlphaAndPickMask = FALSE ;
 		mIsMask = FALSE;
-		return;
+		return ; //no alpha channel.
 	case GL_RGBA:
-		stride = 4;
+		mAlphaStride = 4;
 		break;
 	case GL_BGRA_EXT:
-		stride = 4;
+		mAlphaStride = 4;
 		break;
 	default:
-		return;
+		break;
+	}
+
+	mAlphaOffset = -1 ;
+	if (mFormatType == GL_UNSIGNED_BYTE)
+	{
+		mAlphaOffset = mAlphaStride - 1 ;
+	}
+	else if(is_little_endian())
+	{
+		if (mFormatType == GL_UNSIGNED_INT_8_8_8_8)
+		{
+			mAlphaOffset = 0 ;
+		}
+		else if (mFormatType == GL_UNSIGNED_INT_8_8_8_8_REV)
+		{
+			mAlphaOffset = 3 ;
+		}
+	}
+	else //big endian
+	{
+		if (mFormatType == GL_UNSIGNED_INT_8_8_8_8)
+		{
+			mAlphaOffset = 3 ;
+		}
+		else if (mFormatType == GL_UNSIGNED_INT_8_8_8_8_REV)
+		{
+			mAlphaOffset = 0 ;
+		}
+	}
+
+	if( mAlphaStride < 1 || //unsupported format
+		mAlphaOffset < 0 || //unsupported type
+		(mFormatPrimary == GL_BGRA_EXT && mFormatType != GL_UNSIGNED_BYTE)) //unknown situation
+	{
+		llwarns << "Cannot analyze alpha for image with format type " << std::hex << mFormatType << std::dec << llendl;
+
+		mNeedsAlphaAndPickMask = FALSE ;
+		mIsMask = FALSE;
+	}
+}
+
+void LLImageGL::analyzeAlpha(const void* data_in, S32 w, S32 h)
+{
+	if(!mNeedsAlphaAndPickMask)
+	{
+		return ;
 	}
 
 	U32 length = w * h;
-	const GLubyte* current = ((const GLubyte*) data_in)+stride-1;
+	const GLubyte* current = ((const GLubyte*) data_in) + mAlphaOffset ;
 	
 	S32 sample[16];
 	memset(sample, 0, sizeof(S32)*16);
@@ -1535,7 +1641,7 @@ void LLImageGL::analyzeAlpha(const void* data_in, S32 w, S32 h)
 	for (U32 i = 0; i < length; i++)
 	{
 		++sample[*current/16];
-		current += stride;
+		current += mAlphaStride ;
 	}
 
 	U32 total = 0;
@@ -1638,8 +1744,30 @@ BOOL LLImageGL::getMask(const LLVector2 &tc)
 	return res;
 }
 
-//----------------------------------------------------------------------------
-#if !LL_RELEASE_FOR_DOWNLOAD
+void LLImageGL::setCategory(S32 category) 
+{
+	if(!gAuditTexture)
+	{
+		return ;
+	}
+	if(mCategory != category)
+	{		
+		if(mCategory > -1)
+		{
+			sTextureMemByCategory[mCategory] -= mTextureMemory ;
+		}
+		if(category > -1 && category < sMaxCatagories)
+		{
+			sTextureMemByCategory[category] += mTextureMemory ;		
+			mCategory = category;
+		}
+		else
+		{
+			mCategory = -1 ;
+		}
+	}
+}
+
 //for debug use 
 //val is a "power of two" number
 S32 LLImageGL::getTextureCounterIndex(U32 val) 
@@ -1663,18 +1791,33 @@ S32 LLImageGL::getTextureCounterIndex(U32 val)
 		return ret ;
 	}
 }
-void LLImageGL::incTextureCounter(U32 val) 
+
+//static
+void LLImageGL::incTextureCounter(U32 val, S32 ncomponents, S32 category) 
 {
 	sTextureLoadedCounter[getTextureCounterIndex(val)]++ ;
+	sTextureMemByCategory[category] += (S32)val * ncomponents ;
 }
-void LLImageGL::decTextureCounter(U32 val) 
+
+//static
+void LLImageGL::decTextureCounter(U32 val, S32 ncomponents, S32 category) 
 {
 	sTextureLoadedCounter[getTextureCounterIndex(val)]-- ;
+	sTextureMemByCategory[category] += (S32)val * ncomponents ;
 }
-void LLImageGL::setCurTexSizebar(S32 index)
+
+void LLImageGL::setCurTexSizebar(S32 index, BOOL set_pick_size)
 {
 	sCurTexSizeBar = index ;
-	sCurTexPickSize = (1 << index) ;
+
+	if(set_pick_size)
+	{
+		sCurTexPickSize = (1 << index) ;
+	}
+	else
+	{
+		sCurTexPickSize = -1 ;
+	}
 }
 void LLImageGL::resetCurTexSizebar()
 {
@@ -1682,7 +1825,9 @@ void LLImageGL::resetCurTexSizebar()
 	sCurTexPickSize = -1 ;
 }
 //----------------------------------------------------------------------------
-#endif
+
+//----------------------------------------------------------------------------
+
 
 // Manual Mip Generation
 /*
diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h
index a094605607c..937065043c1 100644
--- a/indra/llrender/llimagegl.h
+++ b/indra/llrender/llimagegl.h
@@ -47,7 +47,6 @@ class LLTextureAtlas ;
 #define MEGA_BYTES_TO_BYTES(x) ((x) << 20)
 
 //============================================================================
-
 class LLImageGL : public LLRefCount
 {
 	friend class LLTexUnit;
@@ -63,6 +62,7 @@ class LLImageGL : public LLRefCount
 
 	BOOL updateBindStats(S32 tex_mem) const ;
 	F32 getTimePassedSinceLastBound();
+	void forceUpdateBindStats(void) const;
 
 	// needs to be called every frame
 	static void updateStats(F32 current_time);
@@ -71,8 +71,9 @@ class LLImageGL : public LLRefCount
 	static void destroyGL(BOOL save_state = TRUE);
 	static void restoreGL();
 
-	// Sometimes called externally for textures not using LLImageGL (should go away...)
-	static S32 updateBoundTexMem(const S32 delta);
+	// Sometimes called externally for textures not using LLImageGL (should go away...)	
+	static S32 updateBoundTexMem(const S32 mem, const S32 ncomponents, S32 category) ;
+	
 	static bool checkSize(S32 width, S32 height);
 
 	//for server side use only.
@@ -91,6 +92,7 @@ class LLImageGL : public LLRefCount
 	virtual ~LLImageGL();
 
 	void analyzeAlpha(const void* data_in, S32 w, S32 h);
+	void calcAlphaChannelOffsetAndStride();
 
 public:
 	virtual void dump();	// debugging info to llinfos
@@ -105,14 +107,15 @@ class LLImageGL : public LLRefCount
 	static void setManualImage(U32 target, S32 miplevel, S32 intformat, S32 width, S32 height, U32 pixformat, U32 pixtype, const void *pixels);
 
 	BOOL createGLTexture() ;
-	BOOL createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename = 0);
+	BOOL createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename = 0, BOOL to_create = TRUE, 
+		S32 category = sMaxCatagories - 1);
 	BOOL createGLTexture(S32 discard_level, const U8* data, BOOL data_hasmips = FALSE, S32 usename = 0);
 	void setImage(const LLImageRaw* imageraw);
 	void setImage(const U8* data_in, BOOL data_hasmips = FALSE);
 	BOOL setSubImage(const LLImageRaw* imageraw, S32 x_pos, S32 y_pos, S32 width, S32 height, BOOL force_fast_update = FALSE);
 	BOOL setSubImage(const U8* datap, S32 data_width, S32 data_height, S32 x_pos, S32 y_pos, S32 width, S32 height, BOOL force_fast_update = FALSE);
 	BOOL setSubImageFromFrameBuffer(S32 fb_x, S32 fb_y, S32 x_pos, S32 y_pos, S32 width, S32 height);
-	BOOL setDiscardLevel(S32 discard_level);
+	
 	// Read back a raw image for this discard level, if it exists
 	BOOL readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok) const;
 	void destroyGLTexture();
@@ -131,6 +134,7 @@ class LLImageGL : public LLRefCount
 	S32  getBytes(S32 discard_level = -1) const;
 	S32  getMipBytes(S32 discard_level = -1) const;
 	BOOL getBoundRecently() const;
+	BOOL isJustBound() const;
 	LLGLenum getPrimaryFormat() const { return mFormatPrimary; }
 	LLGLenum getFormatType() const { return mFormatType; }
 
@@ -150,8 +154,6 @@ class LLImageGL : public LLRefCount
 	BOOL getUseMipMaps() const { return mUseMipMaps; }
 	void setUseMipMaps(BOOL usemips) { mUseMipMaps = usemips; }	
 
-	BOOL isValidForSculpt(S32 discard_level, S32 image_width, S32 image_height, S32 ncomponents) ;
-
 	void updatePickMask(S32 width, S32 height, const U8* data_in);
 	BOOL getMask(const LLVector2 &tc);
 
@@ -178,7 +180,7 @@ class LLImageGL : public LLRefCount
 	void init(BOOL usemipmaps);
 	virtual void cleanup(); // Clean up the LLImageGL so it can be reinitialized.  Be careful when using this in derived class destructors
 
-	void setNeedsAlphaAndPickMask(BOOL need_mask) {mNeedsAlphaAndPickMask = need_mask;}
+	void setNeedsAlphaAndPickMask(BOOL need_mask);
 
 	BOOL preAddToAtlas(S32 discard_level, const LLImageRaw* raw_image);
 	void postAddToAtlas() ;	
@@ -187,7 +189,7 @@ class LLImageGL : public LLRefCount
 	// Various GL/Rendering options
 	S32 mTextureMemory;
 	mutable F32  mLastBindTime;	// last time this was bound, by discard level
-
+	
 private:
 	LLPointer<LLImageRaw> mSaveData; // used for destroyGL/restoreGL
 	U8* mPickMask;  //downsampled bitmap approximation of alpha channel.  NULL if no alpha channel
@@ -197,13 +199,15 @@ class LLImageGL : public LLRefCount
 
 	BOOL mIsMask;
 	BOOL mNeedsAlphaAndPickMask;
-	
+	S8   mAlphaStride ;
+	S8   mAlphaOffset ;
+
 	bool     mGLTextureCreated ;
 	LLGLuint mTexName;
 	U16      mWidth;
 	U16      mHeight;	
 	S8       mCurrentDiscardLevel;
-
+	
 	S8       mDiscardLevelInAtlas;
 	U32      mTexelsInAtlas ;
 	U32      mTexelsInGLTexture;
@@ -233,7 +237,7 @@ class LLImageGL : public LLRefCount
 	static S32 sCount;
 	
 	static F32 sLastFrameTime;
-
+	
 	static LLGLuint sCurrentBoundTextures[MAX_GL_TEXTURE_UNITS]; // Currently bound texture ID
 
 	// Global memory statistics
@@ -246,30 +250,61 @@ class LLImageGL : public LLRefCount
 	static LLImageGL* sDefaultGLTexture ;	
 	static BOOL sAutomatedTest;
 
-#if !LL_RELEASE_FOR_DOWNLOAD
+#if DEBUG_MISS
+	BOOL mMissed; // Missed on last bind?
+	BOOL getMissed() const { return mMissed; };
+#else
+	BOOL getMissed() const { return FALSE; };
+#endif
+
+public:
+	static void initClass(S32 num_catagories) ;
+	static void cleanupClass() ;
+private:
+	static S32 sMaxCatagories ;
+
+	//the flag to allow to call readBackRaw(...).
+	//can be removed if we do not use that function at all.
+	static BOOL sAllowReadBackRaw ;
+//
+//****************************************************************************************************
+//The below for texture auditing use only
+//****************************************************************************************************
+private:
+	S32 mCategory ;
+public:		
+	void setCategory(S32 category) ;
+	S32  getCategory()const {return mCategory ;}
+
 	//for debug use: show texture size distribution 
 	//----------------------------------------
-	static LLPointer<LLImageGL> sDefaultTexturep; //default texture to replace normal textures
+	static LLPointer<LLImageGL> sHighlightTexturep; //default texture to replace normal textures
 	static std::vector<S32> sTextureLoadedCounter ;
 	static std::vector<S32> sTextureBoundCounter ;
 	static std::vector<S32> sTextureCurBoundCounter ;
 	static S32 sCurTexSizeBar ;
 	static S32 sCurTexPickSize ;
-	
+
+	static void setHighlightTexture(S32 category) ;
 	static S32 getTextureCounterIndex(U32 val) ;
-	static void incTextureCounter(U32 val) ;
-	static void decTextureCounter(U32 val) ;
-	static void setCurTexSizebar(S32 index) ;
+	static void incTextureCounter(U32 val, S32 ncomponents, S32 category) ;
+	static void decTextureCounter(U32 val, S32 ncomponents, S32 category) ;
+	static void setCurTexSizebar(S32 index, BOOL set_pick_size = TRUE) ;
 	static void resetCurTexSizebar();
 	//----------------------------------------
-#endif
 
-#if DEBUG_MISS
-	BOOL mMissed; // Missed on last bind?
-	BOOL getMissed() const { return mMissed; };
-#else
-	BOOL getMissed() const { return FALSE; };
-#endif
+	//for debug use: show texture category distribution 
+	//----------------------------------------		
+	
+	static std::vector<S32> sTextureMemByCategory;
+	static std::vector<S32> sTextureMemByCategoryBound ;
+	static std::vector<S32> sTextureCurMemByCategoryBound ;
+	//----------------------------------------	
+//****************************************************************************************************
+//End of definitions for texture auditing use only
+//****************************************************************************************************
+
 };
 
+extern BOOL gAuditTexture;
 #endif // LL_LLIMAGEGL_H
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index b74d824c9e4..fc45df81539 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -179,7 +179,7 @@ void LLTexUnit::disable(void)
 	}
 }
 
-bool LLTexUnit::bind(LLTexture* texture, bool forceBind)
+bool LLTexUnit::bind(LLTexture* texture, bool for_rendering, bool forceBind)
 {
 	stop_glerror();
 	if (mIndex < 0) return false;
@@ -198,9 +198,19 @@ bool LLTexUnit::bind(LLTexture* texture, bool forceBind)
 		//if deleted, will re-generate it immediately
 		texture->forceImmediateUpdate() ;
 
+		gl_tex->forceUpdateBindStats() ;
 		return texture->bindDefaultImage(mIndex);
 	}
 
+	//in audit, replace the selected texture by the default one.
+	if(gAuditTexture && for_rendering && LLImageGL::sCurTexPickSize > 0)
+	{
+		if(texture->getWidth() * texture->getHeight() == LLImageGL::sCurTexPickSize)
+		{
+			gl_tex->updateBindStats(gl_tex->mTextureMemory);
+			return bind(LLImageGL::sHighlightTexturep.get());
+		}
+	}
 	if ((mCurrTexture != gl_tex->getTexName()) || forceBind)
 	{
 		activate();
@@ -223,7 +233,7 @@ bool LLTexUnit::bind(LLTexture* texture, bool forceBind)
 	return true;
 }
 
-bool LLTexUnit::bind(LLImageGL* texture, bool forceBind)
+bool LLTexUnit::bind(LLImageGL* texture, bool for_rendering, bool forceBind)
 {
 	stop_glerror();
 	if (mIndex < 0) return false;
@@ -260,6 +270,7 @@ bool LLTexUnit::bind(LLImageGL* texture, bool forceBind)
 			setTextureFilteringOption(texture->mFilterOption);
 		}
 	}
+
 	return true;
 }
 
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
index cb2a4d44507..0121a190ee5 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -149,8 +149,8 @@ class LLTexUnit
 	
 	// Binds the LLImageGL to this texture unit 
 	// (automatically enables the unit for the LLImageGL's texture type)
-	bool bind(LLImageGL* texture, bool forceBind = false);
-	bool bind(LLTexture* texture, bool forceBind = false);
+	bool bind(LLImageGL* texture, bool for_rendering = false, bool forceBind = false);
+	bool bind(LLTexture* texture, bool for_rendering = false, bool forceBind = false);
 
 	// Binds a cubemap to this texture unit 
 	// (automatically enables the texture unit for cubemaps)
diff --git a/indra/llrender/lltexture.h b/indra/llrender/lltexture.h
index c18917b6634..6495fb9859d 100644
--- a/indra/llrender/lltexture.h
+++ b/indra/llrender/lltexture.h
@@ -61,7 +61,7 @@ class LLTexture : public LLRefCount
 	//
 	//interfaces to access LLViewerTexture
 	//
-	virtual bool       bindDefaultImage(const S32 stage = 0) const = 0 ;
+	virtual bool       bindDefaultImage(const S32 stage = 0) = 0 ;
 	virtual void       forceImmediateUpdate() = 0 ;
 	virtual void       setActive() = 0 ;
 	virtual S32	       getWidth(S32 discard_level = -1) const = 0 ;
diff --git a/indra/llvfs/lllfsthread.cpp b/indra/llvfs/lllfsthread.cpp
index 704e1ab1427..e85cc437f40 100644
--- a/indra/llvfs/lllfsthread.cpp
+++ b/indra/llvfs/lllfsthread.cpp
@@ -189,7 +189,7 @@ bool LLLFSThread::Request::processRequest()
 	{
 		llassert(mOffset >= 0);
 		LLAPRFile infile ;
-		infile.open(mThread->getLocalAPRFilePool(), mFileName, LL_APR_RB);
+		infile.open(mFileName, LL_APR_RB, mThread->getLocalAPRFilePool());
 		if (!infile.getFileHandle())
 		{
 			llwarns << "LLLFS: Unable to read file: " << mFileName << llendl;
@@ -213,7 +213,7 @@ bool LLLFSThread::Request::processRequest()
 		if (mOffset < 0)
 			flags |= APR_APPEND;
 		LLAPRFile outfile ;
-		outfile.open(mThread->getLocalAPRFilePool(), mFileName, flags);
+		outfile.open(mFileName, flags, mThread->getLocalAPRFilePool());
 		if (!outfile.getFileHandle())
 		{
 			llwarns << "LLLFS: Unable to write file: " << mFileName << llendl;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index f27d949faf4..38622d206ff 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -265,7 +265,6 @@ set(viewer_SOURCE_FILES
     llmaniprotate.cpp
     llmanipscale.cpp
     llmaniptranslate.cpp
-    llmapresponders.cpp
     llmediactrl.cpp
     llmediadataclient.cpp
     llmediaremotectrl.cpp
@@ -387,6 +386,10 @@ set(viewer_SOURCE_FILES
     lltexturecache.cpp
     lltexturectrl.cpp
     lltexturefetch.cpp
+    lltextureinfo.cpp
+    lltextureinfodetails.cpp
+    lltexturestats.cpp
+    lltexturestatsuploader.cpp
     lltextureview.cpp
     lltoast.cpp
     lltoastalertpanel.cpp
@@ -508,6 +511,8 @@ set(viewer_SOURCE_FILES
     llwlparamset.cpp
     llworld.cpp
     llworldmap.cpp
+    llworldmapmessage.cpp
+    llworldmipmap.cpp
     llworldmapview.cpp
     llxmlrpctransaction.cpp
     noise.cpp
@@ -738,7 +743,6 @@ set(viewer_HEADER_FILES
     llmaniprotate.h
     llmanipscale.h
     llmaniptranslate.h
-    llmapresponders.h
     llmediadataclient.h
     llmediaremotectrl.h
     llmemoryview.h
@@ -859,6 +863,10 @@ set(viewer_HEADER_FILES
     lltexturecache.h
     lltexturectrl.h
     lltexturefetch.h
+    lltextureinfo.h
+    lltextureinfodetails.h
+    lltexturestats.h
+    lltexturestatsuploader.h
     lltextureview.h
     lltoast.h
     lltoastalertpanel.h
@@ -982,6 +990,8 @@ set(viewer_HEADER_FILES
     llwlparamset.h
     llworld.h
     llworldmap.h
+    llworldmapmessage.h
+    llworldmipmap.h
     llworldmapview.h
     llxmlrpctransaction.h
     macmain.h
@@ -1574,6 +1584,12 @@ LL_ADD_INTEGRATION_TEST(llcapabilitylistener
   )
 
 #ADD_VIEWER_BUILD_TEST(llmemoryview viewer)
+#ADD_VIEWER_BUILD_TEST(llagentaccess viewer)
+#ADD_VIEWER_BUILD_TEST(llworldmap viewer)
+#ADD_VIEWER_BUILD_TEST(llworldmipmap viewer)
+#ADD_VIEWER_BUILD_TEST(lltextureinfo viewer)
+#ADD_VIEWER_BUILD_TEST(lltextureinfodetails viewer)
+#ADD_VIEWER_BUILD_TEST(lltexturestatsuploader viewer)
 
 
 # Don't do these for DARWIN or LINUX here -- they're taken care of by viewer_manifest.py
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 7e368b0c9c8..aa43f8cd9cc 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -309,7 +309,18 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>AutoAcceptNewInventory</key>
+  <key>AuditTexture</key>
+  <map>
+    <key>Comment</key>
+    <string>Enable texture auditting.</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>0</integer>
+  </map>
+  <key>AutoAcceptNewInventory</key>
     <map>
       <key>Comment</key>
       <string>Automatically accept new notecards/textures/landmarks</string>
@@ -4545,6 +4556,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>MiniMapPrimMaxRadius</key>
+    <map>
+      <key>Comment</key>
+      <string>Radius of the largest prim to show on the MiniMap. Increasing beyond 256 may cause client lag.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>256.0</real>
+    </map>
     <key>MiniMapRotate</key>
     <map>
       <key>Comment</key>
@@ -4559,7 +4581,7 @@
     <key>MiniMapScale</key>
     <map>
       <key>Comment</key>
-      <string>Miniature world map zoom levle (pixels per region)</string>
+      <string>Miniature world map zoom level (pixels per region)</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -8468,6 +8490,28 @@
       <key>Value</key>
       <real>20.0</real>
     </map>
+    <key>TextureDisable</key>
+    <map>
+      <key>Comment</key>
+      <string>If TRUE, do not load textures for in-world content</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>TextureLoadFullRes</key>
+    <map>
+      <key>Comment</key>
+      <string>If TRUE, always load textures at full resolution (discard = 0)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>TextureMemory</key>
     <map>
       <key>Comment</key>
@@ -10537,5 +10581,38 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-  </map>
+    <key>LogTextureDownloadsToViewerLog</key>
+    <map>
+      <key>Comment</key>
+      <string>Send texture download details to the viewer log</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>LogTextureDownloadsToSimulator</key>
+    <map>
+      <key>Comment</key>
+      <string>Send a digest of texture info to the sim</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>TextureLoggingThreshold</key>
+    <map>
+      <key>Comment</key>
+      <string>Specifies the byte threshold at which texture download data should be sent to the sim.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+</map>
 </llsd>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 0fa3b1f04df..e182228ab3b 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -74,6 +74,8 @@
 #include "llstatusbar.h"
 #include "llteleportflags.h"
 #include "llteleporthistory.h"
+#include "lltexturestats.h"
+#include "lltexturestats.h"
 #include "lltool.h"
 #include "lltoolcomp.h"
 #include "lltoolmgr.h"
@@ -6087,17 +6089,16 @@ void LLAgent::teleportCancel()
 void LLAgent::teleportViaLocation(const LLVector3d& pos_global)
 {
 	LLViewerRegion* regionp = getRegion();
-	LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
+	U64 handle = to_region_handle(pos_global);
+	LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromHandle(handle);
 	if(regionp && info)
 	{
-		U32 x_pos;
-		U32 y_pos;
-		from_region_handle(info->mHandle, &x_pos, &y_pos);
+		LLVector3d region_origin = info->getGlobalOrigin();
 		LLVector3 pos_local(
-			(F32)(pos_global.mdV[VX] - x_pos),
-			(F32)(pos_global.mdV[VY] - y_pos),
+			(F32)(pos_global.mdV[VX] - region_origin.mdV[VX]),
+			(F32)(pos_global.mdV[VY] - region_origin.mdV[VY]),
 			(F32)(pos_global.mdV[VZ]));
-		teleportRequest(info->mHandle, pos_local);
+		teleportRequest(handle, pos_local);
 	}
 	else if(regionp && 
 		teleportCore(regionp->getHandle() == to_region_handle_global((F32)pos_global.mdV[VX], (F32)pos_global.mdV[VY])))
@@ -6514,3 +6515,4 @@ LLAgentQueryManager::~LLAgentQueryManager()
 }
 
 // EOF
+
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index c673db2034f..87d081b27c7 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -58,6 +58,8 @@
 #include "llallocator.h"
 #include "llares.h" 
 #include "llcurl.h"
+#include "lltexturestats.h"
+#include "lltexturestats.h"
 #include "llviewerwindow.h"
 #include "llviewerdisplay.h"
 #include "llviewermedia.h"
@@ -248,9 +250,6 @@ F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME;
 
 BOOL				gDisconnected = FALSE;
 
-// Map scale in pixels per region
-F32 				gMapScale = 128.f;
-
 // used to restore texture state after a mode switch
 LLFrameTimer	gRestoreGLTimer;
 BOOL			gRestoreGL = FALSE;
@@ -413,7 +412,7 @@ static void settings_to_globals()
 	gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc");
 	gAllowTapTapHoldRun = gSavedSettings.getBOOL("AllowTapTapHoldRun");
 	gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates");
-	gMapScale = gSavedSettings.getF32("MapScale");
+	LLWorldMapView::sMapScale = gSavedSettings.getF32("MapScale");
 
 	LLCubeMap::sUseCubeMaps = LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap");
 }
@@ -426,7 +425,7 @@ static void settings_modify()
 	LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //square lod factor to get exponential range of [1,4]
 	gDebugGL = gSavedSettings.getBOOL("RenderDebugGL") || gDebugSession;
 	gDebugPipeline = gSavedSettings.getBOOL("RenderDebugPipeline");
-	
+	gAuditTexture = gSavedSettings.getBOOL("AuditTexture");
 #if LL_VECTORIZE
 	if (gSysCPU.hasAltivec())
 	{
@@ -547,7 +546,7 @@ LLAppViewer* LLAppViewer::sInstance = NULL;
 const std::string LLAppViewer::sGlobalSettingsName = "Global"; 
 
 LLTextureCache* LLAppViewer::sTextureCache = NULL; 
-LLWorkerThread* LLAppViewer::sImageDecodeThread = NULL; 
+LLImageDecodeThread* LLAppViewer::sImageDecodeThread = NULL; 
 LLTextureFetch* LLAppViewer::sTextureFetch = NULL; 
 
 LLAppViewer::LLAppViewer() : 
@@ -639,6 +638,9 @@ bool LLAppViewer::init()
 	//////////////////////////////////////////////////////////////////////////////
 	// *FIX: The following code isn't grouped into functions yet.
 
+	// Statistics / debug timer initialization
+	init_statistics();
+	
 	//
 	// Various introspection concerning the libs we're using - particularly
         // the libs involved in getting to a full login screen.
@@ -1596,14 +1598,14 @@ bool LLAppViewer::initThreads()
 		LLWatchdog::getInstance()->init(watchdog_killer_callback);
 	}
 
-	LLVFSThread::initClass(enable_threads && true);
-	LLLFSThread::initClass(enable_threads && true);
+	LLVFSThread::initClass(enable_threads && false);
+	LLLFSThread::initClass(enable_threads && false);
 
 	// Image decoding
-	LLAppViewer::sImageDecodeThread = new LLWorkerThread("ImageDecode", enable_threads && true);
+	LLAppViewer::sImageDecodeThread = new LLImageDecodeThread(enable_threads && true);
 	LLAppViewer::sTextureCache = new LLTextureCache(enable_threads && true);
-	LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), enable_threads && false);
-	LLImage::initClass(LLAppViewer::getImageDecodeThread());
+	LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), sImageDecodeThread, enable_threads && true);
+	LLImage::initClass();
 
 	if (LLFastTimer::sLog || LLFastTimer::sMetricLog)
 	{
@@ -2397,7 +2399,7 @@ void LLAppViewer::cleanupSavedSettings()
 		}
 	}
 
-	gSavedSettings.setF32("MapScale", gMapScale );
+	gSavedSettings.setF32("MapScale", LLWorldMapView::sMapScale );
 
 	// Some things are cached in LLAgent.
 	if (gAgent.mInitialized)
@@ -2723,7 +2725,7 @@ void LLAppViewer::initMarkerFile()
 	
 	// Create the marker file for this execution & lock it
 	apr_status_t s;
-	s = mMarkerFile.open(mMarkerFileName, LL_APR_W, gAPRPoolp);	
+	s = mMarkerFile.open(mMarkerFileName, LL_APR_W, TRUE);	
 
 	if (s == APR_SUCCESS && mMarkerFile.getFileHandle())
 	{
@@ -4109,3 +4111,4 @@ void LLAppViewer::handleLoginComplete()
 
 	writeDebugInfo();
 }
+
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 646b6772649..d07ee6e94ff 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -41,12 +41,10 @@ class LLCommandLineParser;
 class LLFrameTimer;
 class LLPumpIO;
 class LLTextureCache;
+class LLImageDecodeThread;
 class LLTextureFetch;
-class LLTimer;
-class LLVFS;
 class LLWatchdogTimeout;
-class LLWorkerThread;
-
+class LLCommandLineParser;
 
 class LLAppViewer : public LLApp
 {
@@ -98,7 +96,7 @@ class LLAppViewer : public LLApp
     
 	// Thread accessors
 	static LLTextureCache* getTextureCache() { return sTextureCache; }
-	static LLWorkerThread* getImageDecodeThread() { return sImageDecodeThread; }
+	static LLImageDecodeThread* getImageDecodeThread() { return sImageDecodeThread; }
 	static LLTextureFetch* getTextureFetch() { return sTextureFetch; }
 
 	const std::string& getSerialNumber() { return mSerialNumber; }
@@ -228,7 +226,7 @@ class LLAppViewer : public LLApp
 
 	// Thread objects.
 	static LLTextureCache* sTextureCache; 
-	static LLWorkerThread* sImageDecodeThread; 
+	static LLImageDecodeThread* sImageDecodeThread; 
 	static LLTextureFetch* sTextureFetch;
 
 	S32 mNumSessions;
@@ -322,9 +320,6 @@ extern F32 gSimFrames;
 
 extern BOOL		gDisconnected;
 
-// Map scale in pixels per region
-extern F32 gMapScale;
-
 extern LLFrameTimer	gRestoreGLTimer;
 extern BOOL			gRestoreGL;
 extern BOOL		gUseWireframe;
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index ea3809d58d6..f117e7d975b 100644
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -368,7 +368,7 @@ void LLSendTexLayerResponder::uploadComplete(const LLSD& content)
 	std::string result = content["state"];
 	LLUUID new_id = content["new_asset"];
 
-	llinfos << "LLSendTexLayerResponder::result from capabilities: " << result << llendl;
+	llinfos << "result: " << result << "new_id:" << new_id << llendl;
 	if (result == "complete"
 		&& mBakedUploadData != NULL)
 	{	// Invoke 
@@ -382,6 +382,14 @@ void LLSendTexLayerResponder::uploadComplete(const LLSD& content)
 	}
 }
 
+void LLSendTexLayerResponder::error(U32 statusNum, const std::string& reason)
+{
+	llinfos << "status: " << statusNum << " reason: " << reason << llendl;
+	
+	// Invoke the original callback with an error result
+	LLTexLayerSetBuffer::onTextureUploadComplete(LLUUID(), (void*) mBakedUploadData, -1, LL_EXSTAT_NONE);
+	mBakedUploadData = NULL;	// deleted in onTextureUploadComplete()
+}
 
 LLUpdateAgentInventoryResponder::LLUpdateAgentInventoryResponder(const LLSD& post_data,
 																 const LLUUID& vfile_id,
diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h
index a08d70213c3..e6563513056 100644
--- a/indra/newview/llassetuploadresponders.h
+++ b/indra/newview/llassetuploadresponders.h
@@ -84,6 +84,7 @@ class LLSendTexLayerResponder : public LLAssetUploadResponder
 	~LLSendTexLayerResponder();
 
 	virtual void uploadComplete(const LLSD& content);
+	virtual void error(U32 statusNum, const std::string& reason);
 
 	LLBakedUploadData * mBakedUploadData;
 };
diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp
index 7b75c77a1e3..5d27595a593 100644
--- a/indra/newview/llcolorswatch.cpp
+++ b/indra/newview/llcolorswatch.cpp
@@ -228,7 +228,7 @@ void LLColorSwatchCtrl::draw()
 	{
 		if (!mFallbackImageName.empty())
 		{
-			LLPointer<LLViewerTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+			LLPointer<LLViewerFetchedTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
 			if( fallback_image->getComponents() == 4 )
 			{	
 				gl_rect_2d_checkerboard( interior );
diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp
index 24a57cb0c1b..9057d84f63c 100644
--- a/indra/newview/lldebugview.cpp
+++ b/indra/newview/lldebugview.cpp
@@ -45,7 +45,7 @@
 #include "llviewerwindow.h"
 #include "llappviewer.h"
 #include "llmemoryview.h"
-
+#include "llviewertexture.h"
 //
 // Globals
 //
@@ -102,17 +102,29 @@ LLDebugView::LLDebugView(const LLDebugView::Params& p)
 	gTextureView = LLUICtrlFactory::create<LLTextureView>(tvp);
 	addChild(gTextureView);
 	//gTextureView->reshape(r.getWidth(), r.getHeight(), TRUE);
-#if !LL_RELEASE_FOR_DOWNLOAD
-	r.set(150, rect.getHeight() - 50, 900 + LLImageGL::sTextureLoadedCounter.size() * 30, 100);
-	LLTextureSizeView::Params tsvp;
-	tsvp.name("gTextureSizeView");
-	tsvp.rect(r);
-	tsvp.follows.flags(FOLLOWS_BOTTOM|FOLLOWS_LEFT);
-	tsvp.visible(false);
-	gTextureSizeView = LLUICtrlFactory::create<LLTextureSizeView>(tsvp);
-	addChild(gTextureSizeView);
-#endif
 
+	if(gAuditTexture)
+	{
+		r.set(150, rect.getHeight() - 50, 900 + LLImageGL::sTextureLoadedCounter.size() * 30, 100);
+		LLTextureSizeView::Params tsv ;
+		tsv.name("gTextureSizeView");
+		tsv.rect(r);
+		tsv.follows.flags(FOLLOWS_BOTTOM|FOLLOWS_LEFT);
+		tsv.visible(false);
+		gTextureSizeView = LLUICtrlFactory::create<LLTextureSizeView>(tsv);
+		addChild(gTextureSizeView);
+		gTextureSizeView->setType(LLTextureSizeView::TEXTURE_MEM_OVER_SIZE) ;
+
+		r.set(150, rect.getHeight() - 50, 900 + LLViewerTexture::getTotalNumOfCategories() * 30, 100);
+		LLTextureSizeView::Params tcv ;
+		tcv.name("gTextureCategoryView");
+		tcv.rect(r);
+		tcv.follows.flags(FOLLOWS_BOTTOM|FOLLOWS_LEFT);
+		tcv.visible(false);
+		gTextureCategoryView = LLUICtrlFactory::create<LLTextureSizeView>(tcv);
+		gTextureCategoryView->setType(LLTextureSizeView::TEXTURE_MEM_OVER_CATEGORY);
+		addChild(gTextureCategoryView);
+	}
 }
 
 
@@ -122,5 +134,6 @@ LLDebugView::~LLDebugView()
 	gDebugView = NULL;
 	gTextureView = NULL;
 	gTextureSizeView = NULL;
+	gTextureCategoryView = NULL;
 }
 
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index 069155c2559..03a3f2b43de 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -105,7 +105,7 @@ void LLDrawable::init()
 	mVObjp   = NULL;
 	// mFaces
 	mSpatialGroupp = NULL;
-	mVisible = 0;
+	mVisible = sCurVisible - 2;//invisible for the current frame and the last frame.
 	mRadius = 0.f;
 	
 	mGeneration = -1;
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index 976f02eeb7f..1b46e0a4787 100644
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -279,7 +279,7 @@ S32 LLFacePool::drawLoopSetTex(face_array_t& face_list, S32 stage)
 			 iter != face_list.end(); iter++)
 		{
 			LLFace *facep = *iter;
-			gGL.getTexUnit(stage)->bind(facep->getTexture());
+			gGL.getTexUnit(stage)->bind(facep->getTexture(), TRUE) ;
 			gGL.getTexUnit(0)->activate();
 			res += facep->renderIndexed();
 		}
@@ -474,17 +474,13 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
 	{
 		if (params.mTexture.notNull())
 		{
-			gGL.getTexUnit(0)->bind(params.mTexture.get());
+			gGL.getTexUnit(0)->bind(params.mTexture, TRUE) ;
 			if (params.mTextureMatrix)
 			{
 				glMatrixMode(GL_TEXTURE);
 				glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
 				gPipeline.mTextureMatrixOps++;
 			}
-			if(params.mTexture.notNull())//will be removed.
-			{
-				params.mTexture->addTextureStats(params.mVSize);
-			}
 		}
 		else
 		{
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index a5a29dea7b2..6d773614149 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -219,7 +219,7 @@ void LLDrawPoolAlpha::render(S32 pass)
 		gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
 		glColor4f(1,0,0,1);
 		LLViewerFetchedTexture::sSmokeImagep->addTextureStats(1024.f*1024.f);
-		gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sSmokeImagep) ;
+		gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sSmokeImagep, TRUE) ;
 		renderAlphaHighlight(LLVertexBuffer::MAP_VERTEX |
 							LLVertexBuffer::MAP_TEXCOORD0);
 	}
diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp
index 8d2cbc583c1..5521fb05a82 100644
--- a/indra/newview/lldrawpooltree.cpp
+++ b/indra/newview/lldrawpooltree.cpp
@@ -253,7 +253,7 @@ void LLDrawPoolTree::renderTree(BOOL selecting)
 	LLGLState normalize(GL_NORMALIZE, TRUE);
 	
 	// Bind the texture for this tree.
-	gGL.getTexUnit(sDiffTex)->bind(mTexturep.get());
+	gGL.getTexUnit(sDiffTex)->bind(mTexturep.get(), TRUE);
 		
 	U32 indices_drawn = 0;
 
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
index 0bb5edf3f99..e41c4104ebe 100644
--- a/indra/newview/lldynamictexture.cpp
+++ b/indra/newview/lldynamictexture.cpp
@@ -104,7 +104,7 @@ void LLViewerDynamicTexture::generateGLTexture(LLGLint internal_format, LLGLenum
 	{
 		setExplicitFormat(internal_format, primary_format, type_format, swap_bytes);
 	}
-	createGLTexture(0, raw_image);
+	createGLTexture(0, raw_image, 0, TRUE, LLViewerTexture::DYNAMIC_TEX);
 	setAddressMode((mClamp) ? LLTexUnit::TAM_CLAMP : LLTexUnit::TAM_WRAP);
 	mGLTexturep->setGLTextureCreated(false);
 }
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 4246cbc27f2..edadc3dcf77 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -52,6 +52,7 @@
 #include "llvovolume.h"
 #include "pipeline.h"
 #include "llviewerregion.h"
+#include "llviewerwindow.h"
 
 #define LL_MAX_INDICES_COUNT 1000000
 
@@ -175,6 +176,9 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)
 	mLastIndicesCount = mIndicesCount;
 	mLastIndicesIndex = mIndicesIndex;
 
+	mImportanceToCamera = 0.f ;
+	mBoundingSphereRadius = 0.0f ;
+
 	mAtlasInfop = NULL ;
 	mUsingAtlas  = FALSE ;
 }
@@ -186,6 +190,7 @@ void LLFace::destroy()
 	{
 		mTexture->removeFace(this) ;
 	}
+	
 	if (mDrawPoolp)
 	{
 		mDrawPoolp->removeFace(this);
@@ -207,7 +212,7 @@ void LLFace::destroy()
 			}
 		}
 	}
-
+	
 	setDrawInfo(NULL);
 	
 	removeAtlas();
@@ -256,6 +261,7 @@ void LLFace::setPool(LLFacePool* new_pool, LLViewerTexture *texturep)
 		}
 		mDrawPoolp = new_pool;
 	}
+	
 	setTexture(texturep) ;
 }
 
@@ -750,7 +756,9 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,
 		}
 
 		mCenterLocal = (newMin+newMax)*0.5f;
-		
+		LLVector3 tmp = (newMin - newMax) ;
+		mBoundingSphereRadius = tmp.length() * 0.5f ;
+
 		updateCenterAgent();
 	}
 
@@ -1305,6 +1313,151 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 	return TRUE;
 }
 
+const F32 LEAST_IMPORTANCE = 0.05f ;
+const F32 LEAST_IMPORTANCE_FOR_LARGE_IMAGE = 0.3f ;
+
+F32 LLFace::getTextureVirtualSize()
+{
+	F32 radius;
+	F32 cos_angle_to_view_dir;
+	mPixelArea = calcPixelArea(cos_angle_to_view_dir, radius);
+
+	if (mPixelArea <= 0)
+	{
+		return 0.f;
+	}
+
+	//get area of circle in texture space
+	LLVector2 tdim = mTexExtents[1] - mTexExtents[0];
+	F32 texel_area = (tdim * 0.5f).lengthSquared()*3.14159f;
+	if (texel_area <= 0)
+	{
+		// Probably animated, use default
+		texel_area = 1.f;
+	}
+
+	//apply texel area to face area to get accurate ratio
+	//face_area /= llclamp(texel_area, 1.f/64.f, 16.f);
+	F32 face_area = mPixelArea / llclamp(texel_area, 0.015625f, 128.f);
+
+	if(face_area > LLViewerTexture::sMaxSmallImageSize)
+	{
+		if(mImportanceToCamera < LEAST_IMPORTANCE) //if the face is not important, do not load hi-res.
+		{
+			static const F32 MAX_LEAST_IMPORTANCE_IMAGE_SIZE = 128.0f * 128.0f ;
+			face_area = llmin(face_area * 0.5f, MAX_LEAST_IMPORTANCE_IMAGE_SIZE) ;
+		}
+		else if(face_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping.
+		{
+			if(mImportanceToCamera < LEAST_IMPORTANCE_FOR_LARGE_IMAGE)//if the face is not important, do not load hi-res.
+			{
+				face_area = LLViewerTexture::sMinLargeImageSize ;
+			}	
+			else if(mTexture.notNull() && mTexture->isLargeImage())
+			{		
+				face_area *= adjustPartialOverlapPixelArea(cos_angle_to_view_dir, radius );
+			}			
+		}
+	}
+
+	return face_area;
+}
+
+F32 LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
+{
+	//get area of circle around face
+	LLVector3 center = getPositionAgent();
+	LLVector3 size = (mExtents[1] - mExtents[0]) * 0.5f;
+	
+	LLVector3 lookAt = center - LLViewerCamera::getInstance()->getOrigin();
+	F32 dist = lookAt.normVec() ;
+
+	//get area of circle around node
+	F32 app_angle = atanf(size.length()/dist);
+	radius = app_angle*LLDrawable::sCurPixelAngle;
+	F32 face_area = radius*radius * 3.14159f;
+
+	if(dist < mBoundingSphereRadius) //camera is very close
+	{
+		cos_angle_to_view_dir = 1.0f ;
+		mImportanceToCamera = 1.0f ;
+	}
+	else
+	{
+		cos_angle_to_view_dir = lookAt * LLViewerCamera::getInstance()->getXAxis() ;	
+		mImportanceToCamera = LLFace::calcImportanceToCamera(cos_angle_to_view_dir, dist) ;
+	}
+
+	return face_area ;
+}
+
+//the projection of the face partially overlaps with the screen
+F32 LLFace::adjustPartialOverlapPixelArea(F32 cos_angle_to_view_dir, F32 radius )
+{
+	F32 screen_radius = (F32)llmax(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight()) ;
+	F32 center_angle = acosf(cos_angle_to_view_dir) ;
+	F32 d = center_angle * LLDrawable::sCurPixelAngle ;
+
+	if(d + radius > screen_radius + 5.f)
+	{
+		//----------------------------------------------
+		//calculate the intersection area of two circles
+		//F32 radius_square = radius * radius ;
+		//F32 d_square = d * d ;
+		//F32 screen_radius_square = screen_radius * screen_radius ;
+		//face_area = 
+		//	radius_square * acosf((d_square + radius_square - screen_radius_square)/(2 * d * radius)) +
+		//	screen_radius_square * acosf((d_square + screen_radius_square - radius_square)/(2 * d * screen_radius)) -
+		//	0.5f * sqrtf((-d + radius + screen_radius) * (d + radius - screen_radius) * (d - radius + screen_radius) * (d + radius + screen_radius)) ;			
+		//----------------------------------------------
+
+		//the above calculation is too expensive
+		//the below is a good estimation: bounding box of the bounding sphere:
+		F32 alpha = 0.5f * (radius + screen_radius - d) / radius ;
+		alpha = llclamp(alpha, 0.f, 1.f) ;
+		return alpha * alpha ;
+	}
+	return 1.0f ;
+}
+
+const S8 FACE_IMPORTANCE_LEVEL = 4 ;
+const F32 FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL][2] = //{distance, importance_weight}
+	{{16.1f, 1.0f}, {32.1f, 0.5f}, {48.1f, 0.2f}, {96.1f, 0.05f} } ;
+const F32 FACE_IMPORTANCE_TO_CAMERA_OVER_ANGLE[FACE_IMPORTANCE_LEVEL][2] =    //{cos(angle), importance_weight}
+	{{0.985f /*cos(10 degrees)*/, 1.0f}, {0.94f /*cos(20 degrees)*/, 0.8f}, {0.866f /*cos(30 degrees)*/, 0.64f}, {0.0f, 0.36f}} ;
+
+//static 
+F32 LLFace::calcImportanceToCamera(F32 cos_angle_to_view_dir, F32 dist)
+{
+	F32 importance = 0.f ;
+	
+	if(cos_angle_to_view_dir > LLViewerCamera::getInstance()->getCosHalfFov() && 
+		dist < FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL - 1][0]) 
+	{
+		F32 camera_moving_speed = LLViewerCamera::getInstance()->getAverageSpeed() ;
+		F32 camera_angular_speed = LLViewerCamera::getInstance()->getAverageAngularSpeed();
+
+		if(camera_moving_speed > 10.0f || camera_angular_speed > 1.0f)
+		{
+			//if camera moves or rotates too fast, ignore the importance factor
+			return 0.f ;
+		}
+		
+		//F32 camera_relative_speed = camera_moving_speed * (lookAt * LLViewerCamera::getInstance()->getVelocityDir()) ;
+		
+		S32 i = 0 ;
+		for(i = 0; i < FACE_IMPORTANCE_LEVEL && dist > FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[i][0]; ++i);
+		i = llmin(i, FACE_IMPORTANCE_LEVEL - 1) ;
+		F32 dist_factor = FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[i][1] ;
+		
+		for(i = 0; i < FACE_IMPORTANCE_LEVEL && cos_angle_to_view_dir < FACE_IMPORTANCE_TO_CAMERA_OVER_ANGLE[i][0] ; ++i) ;
+		i = llmin(i, FACE_IMPORTANCE_LEVEL - 1) ;
+		importance = dist_factor * FACE_IMPORTANCE_TO_CAMERA_OVER_ANGLE[i][1] ;
+	}
+
+	return importance ;
+}
+
 BOOL LLFace::verify(const U32* indices_array) const
 {
 	BOOL ok = TRUE;
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index d734b327d95..68eee061b8b 100644
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -188,6 +188,9 @@ class LLFace
 	void		setIndicesIndex(S32 idx) { mIndicesIndex = idx; }
 	void		setDrawInfo(LLDrawInfo* draw_info);
 
+	F32         getTextureVirtualSize() ;
+	F32         getImportanceToCamera()const {return mImportanceToCamera ;}
+
 	//for atlas
 	LLTextureAtlasSlot*   getAtlasInfo() ;
 	void                  setAtlasInUse(BOOL flag);
@@ -200,6 +203,12 @@ class LLFace
 	void                  removeAtlas() ;
 	BOOL                  switchTexture() ;
 
+private:	
+	F32         adjustPartialOverlapPixelArea(F32 cos_angle_to_view_dir, F32 radius );
+	F32         calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) ;
+public:
+	static F32  calcImportanceToCamera(F32 to_view_dir, F32 dist);
+
 public:
 	
 	LLVector3		mCenterLocal;
@@ -214,7 +223,7 @@ class LLFace
 	LLMatrix4*	mTextureMatrix;
 	LLDrawInfo* mDrawInfo;
 
-protected:
+private:
 	friend class LLGeometryManager;
 	friend class LLVolumeGeometryManager;
 
@@ -244,9 +253,16 @@ class LLFace
 	F32			mVSize;
 	F32			mPixelArea;
 
+	//importance factor, in the range [0, 1.0].
+	//1.0: the most important.
+	//based on the distance from the face to the view point and the angle from the face center to the view direction.
+	F32         mImportanceToCamera ; 
+	F32         mBoundingSphereRadius ;
+
+
 	//atlas
 	LLPointer<LLTextureAtlasSlot> mAtlasInfop ;
-	BOOL                              mUsingAtlas ;
+	BOOL                          mUsingAtlas ;
 	
 protected:
 	static BOOL	sSafeRenderSelect;
diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp
index 0c9a759f320..3fe711a1664 100644
--- a/indra/newview/llfloatermap.cpp
+++ b/indra/newview/llfloatermap.cpp
@@ -50,12 +50,27 @@
 #include "lltextbox.h"
 #include "llviewermenu.h"
 
+//
+// Constants
+//
+const F32 MAP_MINOR_DIR_THRESHOLD = 0.08f;
+
 //
 // Member functions
 //
 
 LLFloaterMap::LLFloaterMap(const LLSD& key) 
-	: LLFloater(key)
+	: LLFloater(key),
+	  mPopupMenu(NULL),
+	  mTextBoxEast(NULL),
+	  mTextBoxNorth(NULL),
+	  mTextBoxWest(NULL),
+	  mTextBoxSouth(NULL),
+	  mTextBoxSouthEast(NULL),
+	  mTextBoxNorthEast(NULL),
+	  mTextBoxNorthWest(NULL),
+	  mTextBoxSouthWest(NULL),
+	  mMap(NULL)
 {
 	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_map.xml", FALSE);
 }
@@ -92,6 +107,8 @@ BOOL LLFloaterMap::postBuild()
 		mPopupMenu->setItemEnabled ("Stop Tracking", false);
 	}
 
+	updateMinorDirections();
+
 	// Get the drag handle all the way in back
 	sendChildToBack(getDragHandle());
 
@@ -139,6 +156,23 @@ void LLFloaterMap::setDirectionPos( LLTextBox* text_box, F32 rotation )
 		llround(map_half_height - text_half_height + radius * sin( rotation )) );
 }
 
+void LLFloaterMap::updateMinorDirections()
+{
+	if (mTextBoxNorthEast == NULL)
+	{
+		return;
+	}
+
+	// Hide minor directions if they cover too much of the map
+	bool show_minors = mTextBoxNorthEast->getRect().getHeight() < MAP_MINOR_DIR_THRESHOLD *
+		llmin(getRect().getWidth(), getRect().getHeight());
+
+	mTextBoxNorthEast->setVisible(show_minors);
+	mTextBoxNorthWest->setVisible(show_minors);
+	mTextBoxSouthWest->setVisible(show_minors);
+	mTextBoxSouthEast->setVisible(show_minors);
+}
+
 // virtual
 void LLFloaterMap::draw()
 {
@@ -180,17 +214,23 @@ void LLFloaterMap::draw()
 	LLFloater::draw();
 }
 
+void LLFloaterMap::reshape(S32 width, S32 height, BOOL called_from_parent)
+{
+	LLFloater::reshape(width, height, called_from_parent);
+	updateMinorDirections();
+}
+
 void LLFloaterMap::handleZoom(const LLSD& userdata)
 {
 	std::string level = userdata.asString();
 	
 	F32 scale = 0.0f;
 	if (level == std::string("close"))
-		scale = MAP_SCALE_MAX;
+		scale = LLNetMap::MAP_SCALE_MAX;
 	else if (level == std::string("medium"))
-		scale = MAP_SCALE_MID;
+		scale = LLNetMap::MAP_SCALE_MID;
 	else if (level == std::string("far"))
-		scale = MAP_SCALE_MIN;
+		scale = LLNetMap::MAP_SCALE_MIN;
 	if (scale != 0.0f)
 	{
 		gSavedSettings.setF32("MiniMapScale", scale );
diff --git a/indra/newview/llfloatermap.h b/indra/newview/llfloatermap.h
index 501777ed078..6c9138c6a7e 100644
--- a/indra/newview/llfloatermap.h
+++ b/indra/newview/llfloatermap.h
@@ -51,12 +51,14 @@ class LLFloaterMap : public LLFloater
 	/*virtual*/ BOOL 	postBuild();
 	/*virtual*/ BOOL	handleDoubleClick( S32 x, S32 y, MASK mask );
 	/*virtual*/ BOOL	handleRightMouseDown( S32 x, S32 y, MASK mask );
+	/*virtual*/ void	reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
 	/*virtual*/ void	draw();
 	
 private:
 	void handleZoom(const LLSD& userdata);
 	void handleStopTracking (const LLSD& userdata);
 	void setDirectionPos( LLTextBox* text_box, F32 rotation );
+	void updateMinorDirections();
 	
 	LLMenuGL*		mPopupMenu;
 
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index b146ed9b389..8e5a76bfae5 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -790,7 +790,7 @@ void LLFloaterReporter::takeScreenshot()
 	// store in the image list so it doesn't try to fetch from the server
 	LLPointer<LLViewerFetchedTexture> image_in_list = 
 		LLViewerTextureManager::getFetchedTexture(mResourceDatap->mAssetInfo.mUuid, TRUE, FALSE, LLViewerTexture::FETCHED_TEXTURE);
-	image_in_list->createGLTexture(0, raw);
+	image_in_list->createGLTexture(0, raw, 0, TRUE, LLViewerTexture::OTHER);
 	
 	// the texture picker then uses that texture
 	LLTexturePicker* texture = getChild<LLTextureCtrl>("screenshot");
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index fbaf10d4553..63560d2038c 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -55,7 +55,6 @@
 #include "llregionhandle.h"
 #include "llscrolllistctrl.h"
 #include "llslurl.h"
-#include "lltabcontainer.h"
 #include "lltextbox.h"
 #include "lltracker.h"
 #include "lltrans.h"
@@ -63,7 +62,9 @@
 #include "llviewermenu.h"
 #include "llviewerregion.h"
 #include "llviewerstats.h"
+#include "llviewertexture.h"
 #include "llworldmap.h"
+#include "llworldmapmessage.h"
 #include "llworldmapview.h"
 #include "lluictrlfactory.h"
 #include "llappviewer.h"
@@ -79,6 +80,12 @@
 //---------------------------------------------------------------------------
 static const F32 MAP_ZOOM_TIME = 0.2f;
 
+// Merov: we switched from using the "world size" (which varies depending where the user went) to a fixed
+// width of 512 regions max visible at a time. This makes the zoom slider works in a consistent way across
+// sessions and doesn't prevent the user to pan the world if it was to grow a lot beyond that limit.
+// Currently (01/26/09), this value allows the whole grid to be visible in a 1024x1024 window.
+static const S32 MAX_VISIBLE_REGIONS = 512;
+
 enum EPanDirection
 {
 	PAN_UP,
@@ -160,11 +167,11 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key)
 	gFloaterWorldMap = this;
 	
 	mFactoryMap["objects_mapview"] = LLCallbackMap(createWorldMapView, NULL);
-	mFactoryMap["terrain_mapview"] = LLCallbackMap(createWorldMapView, NULL);
 	
 	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_world_map.xml", FALSE);
 	mCommitCallbackRegistrar.add("WMap.Location",		boost::bind(&LLFloaterWorldMap::onLocationCommit, this));
 	mCommitCallbackRegistrar.add("WMap.AvatarCombo",	boost::bind(&LLFloaterWorldMap::onAvatarComboCommit, this));
+	mCommitCallbackRegistrar.add("WMap.Landmark",		boost::bind(&LLFloaterWorldMap::onLandmarkComboCommit, this));
 	mCommitCallbackRegistrar.add("WMap.SearchResult",	boost::bind(&LLFloaterWorldMap::onCommitSearchResult, this));
 	mCommitCallbackRegistrar.add("WMap.CommitLocation",	boost::bind(&LLFloaterWorldMap::onCommitLocation, this));
 	mCommitCallbackRegistrar.add("WMap.GoHome",			boost::bind(&LLFloaterWorldMap::onGoHome, this));	
@@ -183,17 +190,7 @@ void* LLFloaterWorldMap::createWorldMapView(void* data)
 
 BOOL LLFloaterWorldMap::postBuild()
 {
-	mTabs = getChild<LLTabContainer>("maptab");
-	if (!mTabs) return FALSE;
-
-	mTabs->setCommitCallback(boost::bind(&LLFloaterWorldMap::onCommitBackground, this));
-
-	// The following callback syncs the worlmap tabs with the images.
-	// Commented out since it was crashing when LLWorldMap became a singleton.
-	// We should be fine without it but override the onOpen method and put it 
-	// there if it turns out to be needed. -MG
-	//
-	//onCommitBackground();
+	mPanel = getChild<LLPanel>("objects_mapview");
 
 	LLComboBox *avatar_combo = getChild<LLComboBox>("friend combo");
 	if (avatar_combo)
@@ -221,8 +218,8 @@ BOOL LLFloaterWorldMap::postBuild()
 		landmark_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) );
 	}
 
-	mCurZoomVal = log(gMapScale)/log(2.f);
-	childSetValue("zoom slider", gMapScale);
+	mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f);
+	childSetValue("zoom slider", LLWorldMapView::sMapScale);
 
 	setDefaultBtn(NULL);
 
@@ -235,7 +232,7 @@ BOOL LLFloaterWorldMap::postBuild()
 LLFloaterWorldMap::~LLFloaterWorldMap()
 {
 	// All cleaned up by LLView destructor
-	mTabs = NULL;
+	mPanel = NULL;
 
 	// Inventory deletes all observers on shutdown
 	mInventory = NULL;
@@ -268,7 +265,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
 	mIsClosing = FALSE;
 
 	LLWorldMapView* map_panel;
-	map_panel = (LLWorldMapView*)mTabs->getCurrentPanel();
+	map_panel = (LLWorldMapView*)gFloaterWorldMap->mPanel;
 	map_panel->clearLastClick();
 
 	{
@@ -279,15 +276,8 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
 		}
 		map_panel->updateVisibleBlocks();
 
-		// Reload the agent positions when we show the window
-		LLWorldMap::getInstance()->eraseItems();
-
-		// Reload any maps that may have changed
-		LLWorldMap::getInstance()->clearSimFlags();
-
-		const S32 panel_num = mTabs->getCurrentPanelIndex();
-		const bool request_from_sim = true;
-		LLWorldMap::getInstance()->setCurrentLayer(panel_num, request_from_sim);
+		// Reload items as they may have changed
+		LLWorldMap::getInstance()->reloadItems();
 
 		// We may already have a bounding box for the regions of the world,
 		// so use that to adjust the view.
@@ -321,12 +311,9 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
 // static
 void LLFloaterWorldMap::reloadIcons(void*)
 {
-	LLWorldMap::getInstance()->eraseItems();
-
-	LLWorldMap::getInstance()->sendMapLayerRequest();
+	LLWorldMap::getInstance()->reloadItems();
 }
 
-
 // virtual
 BOOL LLFloaterWorldMap::handleHover(S32 x, S32 y, MASK mask)
 {
@@ -358,12 +345,6 @@ BOOL LLFloaterWorldMap::handleScrollWheel(S32 x, S32 y, S32 clicks)
 void LLFloaterWorldMap::reshape( S32 width, S32 height, BOOL called_from_parent )
 {
 	LLFloater::reshape( width, height, called_from_parent );
-
-	// Might have changed size of world display area
-	// JC: Technically, this is correct, but it makes the slider "pop"
-	// if you resize the window, then draw the slider.  Just leaving it
-	// the way it was when you opened the window seems better.
-	// adjustZoomSliderBounds();
 }
 
 
@@ -445,7 +426,7 @@ void LLFloaterWorldMap::draw()
 
 	childSetEnabled("Teleport", (BOOL)tracking_status);
 //	childSetEnabled("Clear", (BOOL)tracking_status);
-	childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->mIsTrackingUnknownLocation);
+	childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->isTracking());
 	childSetEnabled("copy_slurl", (mSLURL.size() > 0) );
 
 	setMouseOpaque(TRUE);
@@ -465,6 +446,18 @@ void LLFloaterWorldMap::draw()
 	mCurZoomVal = lerp(mCurZoomVal, (F32)childGetValue("zoom slider").asReal(), interp);
 	F32 map_scale = 256.f*pow(2.f, mCurZoomVal);
 	LLWorldMapView::setScale( map_scale );
+
+	// Enable/disable checkboxes depending on the zoom level
+	// If above threshold level (i.e. low res) -> Disable all checkboxes
+	// If under threshold level (i.e. high res) -> Enable all checkboxes
+	bool enable = LLWorldMapView::showRegionInfo();
+	childSetEnabled("people_chk", enable);
+	childSetEnabled("infohub_chk", enable);
+	childSetEnabled("telehub_chk", enable);
+	childSetEnabled("land_for_sale_chk", enable);
+	childSetEnabled("event_chk", enable);
+	childSetEnabled("event_mature_chk", enable);
+	childSetEnabled("event_adult_chk", enable);
 	
 	LLFloater::draw();
 }
@@ -553,14 +546,14 @@ void LLFloaterWorldMap::trackLandmark( const LLUUID& landmark_item_id )
 void LLFloaterWorldMap::trackEvent(const LLItemInfo &event_info)
 {
 	mTrackedStatus = LLTracker::TRACKING_LOCATION;
-	LLTracker::trackLocation(event_info.mPosGlobal, event_info.mName, event_info.mToolTip, LLTracker::LOCATION_EVENT);
+	LLTracker::trackLocation(event_info.getGlobalPosition(), event_info.getName(), event_info.getToolTip(), LLTracker::LOCATION_EVENT);
 	setDefaultBtn("Teleport");
 }
 
 void LLFloaterWorldMap::trackGenericItem(const LLItemInfo &item)
 {
 	mTrackedStatus = LLTracker::TRACKING_LOCATION;
-	LLTracker::trackLocation(item.mPosGlobal, item.mName, item.mToolTip, LLTracker::LOCATION_ITEM);
+	LLTracker::trackLocation(item.getGlobalPosition(), item.getName(), item.getToolTip(), LLTracker::LOCATION_ITEM);
 	setDefaultBtn("Teleport");
 }
 
@@ -569,29 +562,27 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
 	LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
 	if (!sim_info)
 	{
-		LLWorldMap::getInstance()->mIsTrackingUnknownLocation = TRUE;
-		LLWorldMap::getInstance()->mInvalidLocation = FALSE;
-		LLWorldMap::getInstance()->mUnknownLocation = pos_global;
+		// We haven't found a region for that point yet, leave the tracking to the world map
+		LLWorldMap::getInstance()->setTracking(pos_global);
 		LLTracker::stopTracking(NULL);
 		S32 world_x = S32(pos_global.mdV[0] / 256);
 		S32 world_y = S32(pos_global.mdV[1] / 256);
-		LLWorldMap::getInstance()->sendMapBlockRequest(world_x, world_y, world_x, world_y, true);
+		LLWorldMapMessage::getInstance()->sendMapBlockRequest(world_x, world_y, world_x, world_y, true);
 		setDefaultBtn("");
 		return;
 	}
-	if (sim_info->mAccess == SIM_ACCESS_DOWN)
+	if (sim_info->isDown())
 	{
-		// Down sim. Show the blue circle of death!
-		LLWorldMap::getInstance()->mIsTrackingUnknownLocation = TRUE;
-		LLWorldMap::getInstance()->mUnknownLocation = pos_global;
-		LLWorldMap::getInstance()->mInvalidLocation = TRUE;
+		// Down region. Show the blue circle of death!
+		// i.e. let the world map that this and tell it it's invalid
+		LLWorldMap::getInstance()->setTracking(pos_global);
+		LLWorldMap::getInstance()->setTrackingInvalid();
 		LLTracker::stopTracking(NULL);
 		setDefaultBtn("");
 		return;
 	}
 
-	std::string sim_name;
-	LLWorldMap::getInstance()->simNameFromPosGlobal( pos_global, sim_name );
+	std::string sim_name = sim_info->getName();
 	F32 region_x = (F32)fmod( pos_global.mdV[VX], (F64)REGION_WIDTH_METERS );
 	F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS );
 	std::string full_name = llformat("%s (%d, %d, %d)", 
@@ -603,9 +594,7 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
 	std::string tooltip("");
 	mTrackedStatus = LLTracker::TRACKING_LOCATION;
 	LLTracker::trackLocation(pos_global, full_name, tooltip);
-	LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE;
-	LLWorldMap::getInstance()->mIsTrackingDoubleClick = FALSE;
-	LLWorldMap::getInstance()->mIsTrackingCommit = FALSE;
+	LLWorldMap::getInstance()->cancelTracking();		// The floater is taking over the tracking
 
 	setDefaultBtn("Teleport");
 }
@@ -718,9 +707,9 @@ void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S3
 
 		// pass sim name to combo box
 		gFloaterWorldMap->mCompletingRegionName = region_name;
-		LLWorldMap::getInstance()->sendNamedRegionRequest(region_name);
+		LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name);
 		LLStringUtil::toLower(gFloaterWorldMap->mCompletingRegionName);
-		LLWorldMap::getInstance()->mIsTrackingCommit = TRUE;
+		LLWorldMap::getInstance()->setTrackingCommit();
 	}
 }
 
@@ -787,19 +776,12 @@ void LLFloaterWorldMap::buildAvatarIDList()
 
     // Delete all but the "None" entry
 	S32 list_size = list->getItemCount();
-	while (list_size > 1)
+	if (list_size > 1)
 	{
-		list->selectNthItem(1);
+		list->selectItemRange(1, -1);
 		list->operateOnSelection(LLCtrlListInterface::OP_DELETE);
-		--list_size;
 	}
 
-	LLSD default_column;
-	default_column["name"] = "friend name";
-	default_column["label"] = "Friend Name";
-	default_column["width"] = 500;
-	list->addColumn(default_column);
-
 	// Get all of the calling cards for avatar that are currently online
 	LLCollectMappableBuddies collector;
 	LLAvatarTracker::instance().applyFunctor(collector);
@@ -820,10 +802,7 @@ void LLFloaterWorldMap::buildAvatarIDList()
 void LLFloaterWorldMap::buildLandmarkIDLists()
 {
 	LLCtrlListInterface *list = childGetListInterface("landmark combo");
-	if (!list)
-	{
-		return;
-	}
+	if (!list) return;
 
     // Delete all but the "None" entry
 	S32 list_size = list->getItemCount();
@@ -864,7 +843,6 @@ void LLFloaterWorldMap::buildLandmarkIDLists()
 		mLandmarkAssetIDList.put( item->getAssetUUID() );
 		mLandmarkItemIDList.put( item->getUUID() );
 	}
-	list->sortByColumn(std::string("landmark name"), TRUE);
 
 	list->selectFirstItem();
 }
@@ -901,7 +879,7 @@ void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui)
 	{
 		childSetValue("spin z", 0);
 	}
-	LLWorldMap::getInstance()->mIsTrackingCommit = FALSE;
+	LLWorldMap::getInstance()->cancelTracking();
 	mCompletingRegionName = "";
 }
 
@@ -937,18 +915,16 @@ void LLFloaterWorldMap::clearAvatarSelection(BOOL clear_ui)
 // can see the whole world, plus a little.
 void LLFloaterWorldMap::adjustZoomSliderBounds()
 {
-	// World size in regions
-	S32 world_width_regions	 = LLWorldMap::getInstance()->getWorldWidth() / REGION_WIDTH_UNITS;
-	S32 world_height_regions = LLWorldMap::getInstance()->getWorldHeight() / REGION_WIDTH_UNITS;
-
-	// Pad the world size a little bit, so we have a nice border on
-	// the edge
-	world_width_regions++;
-	world_height_regions++;
+	// Merov: we switched from using the "world size" (which varies depending where the user went) to a fixed
+	// width of 512 regions max visible at a time. This makes the zoom slider works in a consistent way across
+	// sessions and doesn't prevent the user to pan the world if it was to grow a lot beyond that limit.
+	// Currently (01/26/09), this value allows the whole grid to be visible in a 1024x1024 window.
+	S32 world_width_regions	 = MAX_VISIBLE_REGIONS;
+	S32 world_height_regions = MAX_VISIBLE_REGIONS;
 
 	// Find how much space we have to display the world
 	LLWorldMapView* map_panel;
-	map_panel = (LLWorldMapView*)mTabs->getCurrentPanel();
+	map_panel = (LLWorldMapView*)mPanel;
 	LLRect view_rect = map_panel->getRect();
 
 	// View size in pixels
@@ -1161,15 +1137,15 @@ void LLFloaterWorldMap::onLocationCommit()
 
 	LLStringUtil::toLower(str);
 	mCompletingRegionName = str;
-	LLWorldMap::getInstance()->mIsTrackingCommit = TRUE;
+	LLWorldMap::getInstance()->setTrackingCommit();
 	if (str.length() >= 3)
 	{
-		LLWorldMap::getInstance()->sendNamedRegionRequest(str);
+		LLWorldMapMessage::getInstance()->sendNamedRegionRequest(str);
 	}
 	else
 	{
 		str += "#";
-		LLWorldMap::getInstance()->sendNamedRegionRequest(str);
+		LLWorldMapMessage::getInstance()->sendNamedRegionRequest(str);
 	}
 }
 
@@ -1177,8 +1153,8 @@ void LLFloaterWorldMap::onClearBtn()
 {
 	mTrackedStatus = LLTracker::TRACKING_NOTHING;
 	LLTracker::stopTracking((void *)(intptr_t)TRUE);
-	LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE;
-	mSLURL = "";				// Clear the SLURL since it's invalid
+	LLWorldMap::getInstance()->cancelTracking();
+	mSLURL = "";					// Clear the SLURL since it's invalid
 	mSetToUserPosition = TRUE;	// Revert back to the current user position
 }
 
@@ -1230,9 +1206,9 @@ void LLFloaterWorldMap::centerOnTarget(BOOL animate)
 			pos_global = LLTracker::getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal();
 		}
 	}
-	else if(LLWorldMap::getInstance()->mIsTrackingUnknownLocation)
+	else if(LLWorldMap::getInstance()->isTracking())
 	{
-		pos_global = LLWorldMap::getInstance()->mUnknownLocation - gAgent.getCameraPositionGlobal();;
+		pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal();;
 	}
 	else
 	{
@@ -1240,8 +1216,8 @@ void LLFloaterWorldMap::centerOnTarget(BOOL animate)
 		pos_global.clearVec();
 	}
 
-	LLWorldMapView::setPan( -llfloor((F32)(pos_global.mdV[VX] * (F64)LLWorldMapView::sPixelsPerMeter)), 
-							-llfloor((F32)(pos_global.mdV[VY] * (F64)LLWorldMapView::sPixelsPerMeter)),
+	LLWorldMapView::setPan( -llfloor((F32)(pos_global.mdV[VX] * (F64)LLWorldMapView::sMapScale / REGION_WIDTH_METERS)), 
+							-llfloor((F32)(pos_global.mdV[VY] * (F64)LLWorldMapView::sMapScale / REGION_WIDTH_METERS)),
 							!animate);
 	mWaitingForTracker = FALSE;
 }
@@ -1399,13 +1375,6 @@ void LLFloaterWorldMap::flyToAvatar()
 	}
 }
 
-void LLFloaterWorldMap::onCommitBackground()
-{
-	// Find my index
-	S32 index = mTabs->getCurrentPanelIndex();
-	LLWorldMap::getInstance()->setCurrentLayer(index);
-}
-
 void LLFloaterWorldMap::updateSims(bool found_null_sim)
 {
 	if (mCompletingRegionName == "")
@@ -1422,24 +1391,23 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
 	
 	S32 num_results = 0;
 	std::map<U64, LLSimInfo*>::const_iterator it;
-	for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
+	for (it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
 	{
-		LLSimInfo* info = (*it).second;
-		std::string sim_name = info->mName;
-		std::string sim_name_lower = sim_name;
+		LLSimInfo* info = it->second;
+		std::string sim_name_lower = info->getName();
 		LLStringUtil::toLower(sim_name_lower);
 
 		if (sim_name_lower.substr(0, name_length) == mCompletingRegionName)
 		{
 			if (sim_name_lower == mCompletingRegionName)
 			{
-				match = sim_name;
+				match = info->getName();
 			}
 			
 			LLSD value;
-			value["id"] = sim_name;
+			value["id"] = info->getName();
 			value["columns"][0]["column"] = "sim_name";
-			value["columns"][0]["value"] = sim_name;
+			value["columns"][0]["value"] = info->getName();
 			list->addElement(value);
 			num_results++;
 		}
@@ -1496,15 +1464,13 @@ void LLFloaterWorldMap::onCommitSearchResult()
 	LLStringUtil::toLower(sim_name);
 
 	std::map<U64, LLSimInfo*>::const_iterator it;
-	for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
+	for (it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
 	{
-		LLSimInfo* info = (*it).second;
-		std::string info_sim_name = info->mName;
-		LLStringUtil::toLower(info_sim_name);
+		LLSimInfo* info = it->second;
 
-		if (sim_name == info_sim_name)
+		if (info->isName(sim_name))
 		{
-			LLVector3d pos_global = from_region_handle( info->mHandle );
+			LLVector3d pos_global = info->getGlobalOrigin();
 			F64 local_x = childGetValue("spin x");
 			F64 local_y = childGetValue("spin y");
 			F64 local_z = childGetValue("spin z");
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 20a8e6d3217..7feebb583d8 100644
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -96,7 +96,7 @@ class LLFloaterWorldMap : public LLFloater
 	static const LLUUID& getHomeID() { return sHomeID; }
 
 	// A z_attenuation of 0.0f collapses the distance into the X-Y plane
-	F32			getDistanceToDestination(const LLVector3d& pos_global, F32 z_attenuation = 0.5f) const;
+	F32				getDistanceToDestination(const LLVector3d& pos_global, F32 z_attenuation = 0.5f) const;
 
 	void			clearLocationSelection(BOOL clear_ui = FALSE);
 	void			clearAvatarSelection(BOOL clear_ui = FALSE);
@@ -121,8 +121,6 @@ class LLFloaterWorldMap : public LLFloater
 	void			onAvatarComboPrearrange();
 	void		    onAvatarComboCommit();
 
-	void			onCommitBackground();
-
 	void			onComboTextEntry( );
 	void			onSearchTextEntry( LLLineEditor* ctrl );
 
@@ -155,10 +153,10 @@ class LLFloaterWorldMap : public LLFloater
 
 	void			cacheLandmarkPosition();
 
-protected:
-	LLTabContainer*	mTabs;
+private:
+	LLPanel*			mPanel;		// Panel displaying the map
 
-	// Sets gMapScale, in pixels per region
+	// Ties to LLWorldMapView::sMapScale, in pixels per region
 	F32						mCurZoomVal;
 	LLFrameTimer			mZoomTimer;
 
diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp
index a341720aec3..12796507cad 100644
--- a/indra/newview/lllandmarkactions.cpp
+++ b/indra/newview/lllandmarkactions.cpp
@@ -49,6 +49,7 @@
 #include "llstring.h"
 #include "llviewerinventory.h"
 #include "llviewerparcelmgr.h"
+#include "llworldmapmessage.h"
 #include "llviewerwindow.h"
 #include "llwindow.h"
 #include "llworldmap.h"
@@ -268,13 +269,13 @@ void LLLandmarkActions::getSLURLfromPosGlobal(const LLVector3d& global_pos, slur
 	{
 		U64 new_region_handle = to_region_handle(global_pos);
 
-		LLWorldMap::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseSLURL,
+		LLWorldMapMessage::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseSLURL,
 														cb,
 														global_pos,
 														escaped,
 														_2);
 
-		LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false);
+		LLWorldMapMessage::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false);
 	}
 }
 
@@ -285,18 +286,19 @@ void LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(const LLVector3d& gl
 	if (sim_infop)
 	{
 		LLVector3 pos = sim_infop->getLocalPos(global_pos);
-		cb(sim_infop->mName, llround(pos.mV[VX]), llround(pos.mV[VY]));
+		std::string name = sim_infop->getName() ;
+		cb(name, llround(pos.mV[VX]), llround(pos.mV[VY]));
 	}
 	else
 	{
 		U64 new_region_handle = to_region_handle(global_pos);
 
-		LLWorldMap::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseNameAndCoords,
+		LLWorldMapMessage::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseNameAndCoords,
 														cb,
 														global_pos,
 														_1);
 
-		LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false);
+		LLWorldMapMessage::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false);
 	}
 }
 
@@ -328,7 +330,8 @@ void LLLandmarkActions::onRegionResponseNameAndCoords(region_name_and_coords_cal
 	if (sim_infop)
 	{
 		LLVector3 local_pos = sim_infop->getLocalPos(global_pos);
-		cb(sim_infop->mName, llround(local_pos.mV[VX]), llround(local_pos.mV[VY]));
+		std::string name = sim_infop->getName() ;
+		cb(name, llround(local_pos.mV[VX]), llround(local_pos.mV[VY]));
 	}
 }
 
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index b91e23eace4..b60f0f12467 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -51,7 +51,7 @@
 #include "llurlsimstring.h"
 #include "llviewerinventory.h"
 #include "llviewerparcelmgr.h"
-#include "llworldmap.h"
+#include "llworldmapmessage.h"
 #include "llappviewer.h"
 #include "llviewercontrol.h"
 #include "llfloatermediabrowser.h"
@@ -386,14 +386,13 @@ void LLNavigationBar::onLocationSelection()
 	
 	// Resolve the region name to its global coordinates.
 	// If resolution succeeds we'll teleport.
-	LLWorldMap::url_callback_t cb = boost::bind(
+	LLWorldMapMessage::url_callback_t cb = boost::bind(
 			&LLNavigationBar::onRegionNameResponse, this,
 			typed_location, region_name, local_coords, _1, _2, _3, _4);
 	// connect the callback each time, when user enter new location to get real location of agent after teleport
 	mTeleportFinishConnection = LLViewerParcelMgr::getInstance()->
 			setTeleportFinishedCallback(boost::bind(&LLNavigationBar::onTeleportFinished, this, _1,typed_location));
-	
-	LLWorldMap::getInstance()->sendNamedRegionRequest(region_name, cb, std::string("unused"), false);
+	LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name, cb, std::string("unused"), false);
 }
 
 void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos, const std::string& typed_location)
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index b6b433c28f1..4286582cdc5 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -65,9 +65,15 @@
 
 static LLDefaultChildRegistry::Register<LLNetMap> r1("net_map");
 
+const F32 LLNetMap::MAP_SCALE_MIN = 32;
+const F32 LLNetMap::MAP_SCALE_MID = 1024;
+const F32 LLNetMap::MAP_SCALE_MAX = 4096;
+
 const F32 MAP_SCALE_INCREMENT = 16;
-const F32 MAP_MIN_PICK_DIST = 4;
-const F32 MAX_PRIM_RADIUS = 256.0f; // Don't try to draw giant mega-prims on the mini map
+const F32 MAP_SCALE_ZOOM_FACTOR = 1.04f; // Zoom in factor per click of scroll wheel (4%)
+const F32 MIN_DOT_RADIUS = 3.5f;
+const F32 DOT_SCALE = 0.75f;
+const F32 MIN_PICK_SCALE = 2.f;
 
 LLNetMap::LLNetMap (const Params & p)
 :	LLUICtrl (p),
@@ -89,6 +95,7 @@ LLNetMap::LLNetMap (const Params & p)
 	mRotateMap(FALSE),
 	mToolTipMsg()
 {
+	mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS);
 }
 
 LLNetMap::~LLNetMap()
@@ -101,17 +108,18 @@ void LLNetMap::setScale( F32 scale )
 	
 	if (mObjectImagep.notNull())
 	{
-		F32 half_width = (F32)(getRect().getWidth() / 2);
-		F32 half_height = (F32)(getRect().getHeight() / 2);
-		F32 radius = sqrt( half_width * half_width + half_height * half_height );
-		F32 region_widths = (2.f*radius)/mScale;
+		F32 width = (F32)(getRect().getWidth());
+		F32 height = (F32)(getRect().getHeight());
+		F32 diameter = sqrt(width * width + height * height);
+		F32 region_widths = diameter / mScale;
 		F32 meters = region_widths * LLWorld::getInstance()->getRegionWidthInMeters();
 		F32 num_pixels = (F32)mObjectImagep->getWidth();
-		mObjectMapTPM = num_pixels/meters;
-		mObjectMapPixels = 2.f*radius;
+		mObjectMapTPM = num_pixels / meters;
+		mObjectMapPixels = diameter;
 	}
 
 	mPixelsPerMeter = mScale / REGION_WIDTH_METERS;
+	mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS);
 
 	mUpdateNow = TRUE;
 }
@@ -302,6 +310,7 @@ void LLNetMap::draw()
 		LLUI::getMousePositionLocal(this, &local_mouse_x, &local_mouse_y);
 		mClosestAgentToCursor.setNull();
 		F32 closest_dist = F32_MAX;
+		F32 min_pick_dist = mDotRadius * MIN_PICK_SCALE; 
 
 		// Draw avatars
 		for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
@@ -345,10 +354,10 @@ void LLNetMap::draw()
 				LLWorldMapView::drawAvatar(
 					pos_map.mV[VX], pos_map.mV[VY], 
 					show_as_friend ? map_avatar_friend_color : map_avatar_color, 
-					pos_map.mV[VZ]);
+					pos_map.mV[VZ], mDotRadius);
 
 				F32	dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), LLVector2(local_mouse_x,local_mouse_y));
-				if(dist_to_cursor < MAP_MIN_PICK_DIST && dist_to_cursor < closest_dist)
+				if(dist_to_cursor < min_pick_dist && dist_to_cursor < closest_dist)
 				{
 					closest_dist = dist_to_cursor;
 					mClosestAgentToCursor = regionp->mMapAvatarIDs.get(i);
@@ -378,10 +387,12 @@ void LLNetMap::draw()
 		// Draw dot for self avatar position
 		pos_global = gAgent.getPositionGlobal();
 		pos_map = globalPosToView(pos_global);
-		LLUIImagePtr you = LLWorldMapView::sAvatarYouSmallImage;
-		you->draw(
-			llround(pos_map.mV[VX]) - you->getWidth()/2, 
-			llround(pos_map.mV[VY]) - you->getHeight()/2);
+		LLUIImagePtr you = LLWorldMapView::sAvatarYouLargeImage;
+		S32 dot_width = llround(mDotRadius * 2.f);
+		you->draw(llround(pos_map.mV[VX] - mDotRadius),
+				  llround(pos_map.mV[VY] - mDotRadius),
+				  dot_width,
+				  dot_width);
 
 		// Draw frustum
 		F32 meters_to_pixels = mScale/ LLWorld::getInstance()->getRegionWidthInMeters();
@@ -429,6 +440,12 @@ void LLNetMap::draw()
 	LLUICtrl::draw();
 }
 
+void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent)
+{
+	LLUICtrl::reshape(width, height, called_from_parent);
+	createObjectImage();
+}
+
 LLVector3 LLNetMap::globalPosToView( const LLVector3d& global_pos )
 {
 	LLVector3d relative_pos_global = global_pos - gAgent.getCameraPositionGlobal();
@@ -504,8 +521,12 @@ LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y )
 
 BOOL LLNetMap::handleScrollWheel(S32 x, S32 y, S32 clicks)
 {
-	// note that clicks are reversed from what you'd think
-	setScale(llclamp(mScale - clicks*MAP_SCALE_INCREMENT, MAP_SCALE_MIN, MAP_SCALE_MAX));
+	// note that clicks are reversed from what you'd think: i.e. > 0  means zoom out, < 0 means zoom in
+	F32 scale = mScale;
+        
+	scale *= pow(MAP_SCALE_ZOOM_FACTOR, -clicks);
+	setScale(llclamp(scale, MAP_SCALE_MIN, MAP_SCALE_MAX));
+
 	return TRUE;
 }
 
@@ -567,9 +588,7 @@ void LLNetMap::renderScaledPointGlobal( const LLVector3d& pos, const LLColor4U &
 	LLVector3 local_pos;
 	local_pos.setVec( pos - mObjectImageCenterGlobal );
 
-	F32 radius_clamped = llmin(radius_meters, MAX_PRIM_RADIUS);
-	
-	S32 diameter_pixels = llround(2 * radius_clamped * mObjectMapTPM);
+	S32 diameter_pixels = llround(2 * radius_meters * mObjectMapTPM);
 	renderPoint( local_pos, color, diameter_pixels );
 }
 
@@ -662,13 +681,13 @@ void LLNetMap::renderPoint(const LLVector3 &pos_local, const LLColor4U &color,
 void LLNetMap::createObjectImage()
 {
 	// Find the size of the side of a square that surrounds the circle that surrounds getRect().
-	F32 half_width = (F32)(getRect().getWidth() / 2);
-	F32 half_height = (F32)(getRect().getHeight() / 2);
-	F32 radius = sqrt( half_width * half_width + half_height * half_height );
-	S32 square_size = S32( 2 * radius );
+	// ... which is, the diagonal of the rect.
+	F32 width = (F32)getRect().getWidth();
+	F32 height = (F32)getRect().getHeight();
+	S32 square_size = llround( sqrt(width*width + height*height) );
 
 	// Find the least power of two >= the minimum size.
-	const S32 MIN_SIZE = 32;
+	const S32 MIN_SIZE = 64;
 	const S32 MAX_SIZE = 256;
 	S32 img_size = MIN_SIZE;
 	while( (img_size*2 < square_size ) && (img_size < MAX_SIZE) )
@@ -684,7 +703,7 @@ void LLNetMap::createObjectImage()
 		U8* data = mObjectRawImagep->getData();
 		memset( data, 0, img_size * img_size * 4 );
 		mObjectImagep = LLViewerTextureManager::getLocalTexture( mObjectRawImagep.get(), FALSE);
-		setScale(mScale);
 	}
+	setScale(mScale);
 	mUpdateNow = TRUE;
 }
diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h
index 5ebdd133846..7088ab3e70c 100644
--- a/indra/newview/llnetmap.h
+++ b/indra/newview/llnetmap.h
@@ -70,9 +70,14 @@ class LLNetMap : public LLUICtrl
 public:
 	virtual ~LLNetMap();
 
+	static const F32 MAP_SCALE_MIN;
+	static const F32 MAP_SCALE_MID;
+	static const F32 MAP_SCALE_MAX;
+
 	/*virtual*/ void	draw();
 	/*virtual*/ BOOL	handleScrollWheel(S32 x, S32 y, S32 clicks);
 	/*virtual*/ BOOL	handleToolTip( S32 x, S32 y, MASK mask);
+	/*virtual*/ void	reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
 	
 	void			setScale( F32 scale );
 	void			setRotateMap( BOOL b ) { mRotateMap = b; }
@@ -94,16 +99,17 @@ class LLNetMap : public LLUICtrl
 	void			drawTracking( const LLVector3d& pos_global, 
 								  const LLColor4& color,
 								  BOOL draw_arrow = TRUE);
-
-	void			createObjectImage();
 	
+	void			createObjectImage();
+
 private:
 	LLUIColor		mBackgroundColor;
 
 	F32				mScale;					// Size of a region in pixels
 	F32				mPixelsPerMeter;		// world meters to map pixels
 	F32				mObjectMapTPM;			// texels per meter on map
-	F32				mObjectMapPixels;		// Width of object map in pixels;
+	F32				mObjectMapPixels;		// Width of object map in pixels
+	F32				mDotRadius;				// Size of avatar markers
 	F32				mTargetPanX;
 	F32				mTargetPanY;
 	F32				mCurPanX;
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 7dd9df674c0..92040eb2e56 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -357,7 +357,7 @@ void LLTeleportHistoryPanel::onCopySLURL()
 
 	U64 new_region_handle = to_region_handle(global_pos);
 
-	LLWorldMap::url_callback_t cb = boost::bind(
+	LLWorldMapMessage::url_callback_t cb = boost::bind(
 			&LLPanelPlacesTab::onRegionResponse, this,
 			global_pos, _1, _2, _3, _4);
 
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 9c21faa3be5..a44794122f6 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -192,6 +192,11 @@ void LLPreviewTexture::draw()
 			// Pump the texture priority
 			F32 pixel_area = mLoadingFullImage ? (F32)MAX_IMAGE_AREA  : (F32)(interior.getWidth() * interior.getHeight() );
 			mImage->addTextureStats( pixel_area );
+			if(pixel_area > 0.f)
+			{
+				//boost the previewed image priority to the highest to make it to get loaded first.
+				mImage->setAdditionalDecodePriority(1.0f) ;
+			}
 
 			// Don't bother decoding more than we can display, unless
 			// we're loading the full image.
@@ -554,6 +559,7 @@ void LLPreviewTexture::loadAsset()
 {
 	mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
 	mImage->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);
+	mImage->forceToSaveRawImage(0) ;
 	mAssetStatus = PREVIEW_ASSET_LOADING;
 	updateDimensions();
 }
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 9f317803ce7..5afb821d157 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -2679,8 +2679,7 @@ void renderTexturePriority(LLDrawable* drawable)
 		//LLViewerTexture* imagep = facep->getTexture();
 		//if (imagep)
 		{
-	
-			//F32 vsize = LLVOVolume::getTextureVirtualSize(facep);
+				
 			//F32 vsize = imagep->mMaxVirtualSize;
 			F32 vsize = facep->getPixelArea();
 
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 51b651d58ee..bfe753a0aa7 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -61,6 +61,7 @@
 #include "llfocusmgr.h"
 #include "llhttpsender.h"
 #include "lllocationhistory.h"
+#include "llimageworker.h"
 #include "llloginflags.h"
 #include "llmd5.h"
 #include "llmemorystream.h"
@@ -170,7 +171,7 @@
 #include "llvoclouds.h"
 #include "llweb.h"
 #include "llworld.h"
-#include "llworldmap.h"
+#include "llworldmapmessage.h"
 #include "llxfermanager.h"
 #include "pipeline.h"
 #include "llappviewer.h"
@@ -1812,6 +1813,7 @@ bool idle_startup()
 			gViewerWindow->moveProgressViewToFront();
 
 			LLError::logToFixedBuffer(gDebugView->mDebugConsolep);
+			
 			// set initial visibility of debug console
 			gDebugView->mDebugConsolep->setVisible(gSavedSettings.getBOOL("ShowDebugConsole"));
 		}
@@ -3266,9 +3268,8 @@ void register_viewer_callbacks(LLMessageSystem* msg)
 
 	msg->setHandlerFunc("AvatarPickerReply", LLFloaterAvatarPicker::processAvatarPickerReply);
 
-	msg->setHandlerFunc("MapLayerReply", LLWorldMap::processMapLayerReply);
-	msg->setHandlerFunc("MapBlockReply", LLWorldMap::processMapBlockReply);
-	msg->setHandlerFunc("MapItemReply", LLWorldMap::processMapItemReply);
+	msg->setHandlerFunc("MapBlockReply", LLWorldMapMessage::processMapBlockReply);
+	msg->setHandlerFunc("MapItemReply", LLWorldMapMessage::processMapItemReply);
 
 	msg->setHandlerFunc("EventInfoReply", LLPanelEvent::processEventInfoReply);
 	msg->setHandlerFunc("PickInfoReply", &LLAvatarPropertiesProcessor::processPickInfoReply);
diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp
index 5440b2c9adf..1d479bac8ca 100644
--- a/indra/newview/llsurface.cpp
+++ b/indra/newview/llsurface.cpp
@@ -234,12 +234,7 @@ void LLSurface::createSTexture()
 {
 	if (!mSTexturep)
 	{
-		// Fill with dummy gray data.
-	
-		//mSTexturep =  LLViewerTextureManager::getLocalTexture(sTextureSize, sTextureSize, 3, FALSE);
-		//mSTexturep->dontDiscard();
-		//mSTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
-		
+		// Fill with dummy gray data.	
 		// GL NOT ACTIVE HERE
 		LLPointer<LLImageRaw> raw = new LLImageRaw(sTextureSize, sTextureSize, 3);
 		U8 *default_texture = raw->getData();
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 5d9046ac905..4ff5906b7e0 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -1371,7 +1371,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
 
 					LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode();
 					
-					gGL.getTexUnit(0)->bind(tex);
+					gGL.getTexUnit(0)->bind(tex, TRUE);
 					gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
 
 					gl_rect_2d_simple_tex( width, height );
@@ -1393,7 +1393,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
 			LLViewerTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask);
 			if( tex )
 			{
-				gGL.getTexUnit(0)->bind(tex);
+				gGL.getTexUnit(0)->bind(tex, TRUE);
 				gl_rect_2d_simple_tex( width, height );
 				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 			}
@@ -1506,7 +1506,7 @@ BOOL LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height)
 		if( tex )
 		{
 			LLGLSNoAlphaTest gls_no_alpha_test;
-			gGL.getTexUnit(0)->bind(tex);
+			gGL.getTexUnit(0)->bind(tex, TRUE);
 			gl_rect_2d_simple_tex( width, height );
 			gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 		}
@@ -1585,7 +1585,7 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
 
 				LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode();
 				
-				gGL.getTexUnit(0)->bind(tex);
+				gGL.getTexUnit(0)->bind(tex, TRUE);
 				gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
 
 				gl_rect_2d_simple_tex( width, height );
@@ -1608,7 +1608,7 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
 					( (tex->getComponents() == 1) && getInfo()->mStaticImageIsMask ) )
 				{
 					LLGLSNoAlphaTest gls_no_alpha_test;
-					gGL.getTexUnit(0)->bind(tex);
+					gGL.getTexUnit(0)->bind(tex, TRUE);
 					gl_rect_2d_simple_tex( width, height );
 					gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 				}
@@ -2034,7 +2034,7 @@ LLViewerTexture* LLTexLayerStaticImageList::getTexture(const std::string& file_n
 				// that once an image is a mask it's always a mask.
 				tex->setExplicitFormat( GL_ALPHA8, GL_ALPHA );
 			}
-			tex->createGLTexture(0, image_raw);
+			tex->createGLTexture(0, image_raw, 0, TRUE, LLViewerTexture::LOCAL);
 
 			gGL.getTexUnit(0)->bind(tex);
 			tex->setAddressMode(LLTexUnit::TAM_CLAMP);
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index 1b249d75d15..69a2d1d7a6b 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -43,11 +43,17 @@
 // Included to allow LLTextureCache::purgeTextures() to pause watchdog timeout
 #include "llappviewer.h" 
 
-#define USE_LFS_READ 0
-#define USE_LFS_WRITE 0
-
-// Note: first 4 bytes store file size, rest is j2c data
-const S32 TEXTURE_CACHE_ENTRY_SIZE = FIRST_PACKET_SIZE; //1024;
+// Cache organization:
+// cache/texture.entries
+//  Unordered array of Entry structs
+// cache/texture.cache
+//  First TEXTURE_CACHE_ENTRY_SIZE bytes of each texture in texture.entries in same order
+// cache/textures/[0-F]/UUID.texture
+//  Actual texture body files
+
+const S32 TEXTURE_CACHE_ENTRY_SIZE = 1024;
+const F32 TEXTURE_CACHE_PURGE_AMOUNT = .20f; // % amount to reduce the cache by when it exceeds its limit
+const F32 TEXTURE_CACHE_LRU_SIZE = .10f; // % amount for LRU list (low overhead to regenerate)
 
 class LLTextureCacheWorker : public LLWorkerClass
 {
@@ -309,94 +315,75 @@ void LLTextureCacheWorker::startWork(S32 param)
 {
 }
 
+// This is where a texture is read from the cache system (header and body)
+// Current assumption are:
+// - the whole data are in a raw form, will be stored at mReadData
+// - the size of this raw data is mDataSize and can be smaller than TEXTURE_CACHE_ENTRY_SIZE (the size of a record in the header cache)
+// - the code supports offset reading but this is actually never exercised in the viewer
 bool LLTextureCacheRemoteWorker::doRead()
 {
+	bool done = false;
+	S32 idx = -1;
+
 	S32 local_size = 0;
 	std::string local_filename;
 	
+	// First state / stage : find out if the file is local
 	if (mState == INIT)
 	{
 		std::string filename = mCache->getLocalFileName(mID);	
-		local_filename = filename + ".j2c";
-		local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
-		if (local_size == 0)
+		// Is it a JPEG2000 file? 
 		{
-			local_filename = filename + ".tga";
+			local_filename = filename + ".j2c";
 			local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
 			if (local_size > 0)
 			{
-				mImageFormat = IMG_CODEC_TGA;
-				mDataSize = local_size; // Only a complete .tga file is valid
+				mImageFormat = IMG_CODEC_J2C;
 			}
 		}
-		if (local_size > 0)
-		{
-			mState = LOCAL;
-		}
-		else
-		{
-			mState = CACHE;
-		}
-	}
-
-	if (mState == LOCAL)
-	{
-#if USE_LFS_READ
-		if (mFileHandle == LLLFSThread::nullHandle())
+		// If not, is it a jpeg file?
+		if (local_size == 0)
 		{
-			mImageLocal = TRUE;
-			mImageSize = local_size;
-			if (!mDataSize || mDataSize + mOffset > local_size)
+			local_filename = filename + ".jpg";
+			local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
+			if (local_size > 0)
 			{
-				mDataSize = local_size - mOffset;
+				mImageFormat = IMG_CODEC_JPEG;
+				mDataSize = local_size; // Only a complete .jpg file is valid
 			}
-			if (mDataSize <= 0)
-			{
-				// no more data to read
-				mDataSize = 0;
-				return true;
-			}
-			mReadData = new U8[mDataSize];
-			mBytesRead = -1;
-			mBytesToRead = mDataSize;
-			setPriority(LLWorkerThread::PRIORITY_LOW | mPriority);
-			mFileHandle = LLLFSThread::sLocal->read(local_filename, mReadData, mOffset, mDataSize,
-													new ReadResponder(mCache, mRequestHandle));
-			return false;
 		}
-		else
+		// Hmm... What about a targa file? (used for UI texture mostly)
+		if (local_size == 0)
 		{
-			if (mBytesRead >= 0)
-			{
-				if (mBytesRead != mBytesToRead)
-				{
-// 					llwarns << "Error reading file from local cache: " << local_filename
-// 							<< " Bytes: " << mDataSize << " Offset: " << mOffset
-// 							<< " / " << mDataSize << llendl;
-					mDataSize = 0; // failed
-					delete[] mReadData;
-					mReadData = NULL;
-				}
-				return true;
-			}
-			else
+			local_filename = filename + ".tga";
+			local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
+			if (local_size > 0)
 			{
-				return false;
+				mImageFormat = IMG_CODEC_TGA;
+				mDataSize = local_size; // Only a complete .tga file is valid
 			}
 		}
-#else
+		// Determine the next stage: if we found a file, then LOCAL else CACHE
+		mState = (local_size > 0 ? LOCAL : CACHE);
+	}
+
+	// Second state / stage : if the file is local, load it and leave
+	if (!done && (mState == LOCAL))
+	{
+		llassert(local_size != 0);	// we're assuming there is a non empty local file here...
 		if (!mDataSize || mDataSize > local_size)
 		{
 			mDataSize = local_size;
 		}
+		// Allocate read buffer
 		mReadData = new U8[mDataSize];
 		S32 bytes_read = LLAPRFile::readEx(local_filename, 
 											 mReadData, mOffset, mDataSize, mCache->getLocalAPRFilePool());
 		if (bytes_read != mDataSize)
 		{
-// 			llwarns << "Error reading file from local cache: " << local_filename
-// 					<< " Bytes: " << mDataSize << " Offset: " << mOffset
-// 					<< " / " << mDataSize << llendl;
+ 			llwarns << "Error reading file from local cache: " << local_filename
+ 					<< " Bytes: " << mDataSize << " Offset: " << mOffset
+ 					<< " / " << mDataSize << llendl;
 			mDataSize = 0;
 			delete[] mReadData;
 			mReadData = NULL;
@@ -406,405 +393,275 @@ bool LLTextureCacheRemoteWorker::doRead()
 			mImageSize = local_size;
 			mImageLocal = TRUE;
 		}
-		return true;
-#endif
+		// We're done...
+		done = true;
 	}
 
-	S32 idx = -1;
-	
-	if (mState == CACHE)
+	// Second state / stage : identify the cache or not...
+	if (!done && (mState == CACHE))
 	{
-		llassert_always(mImageSize == 0);
-		idx = mCache->getHeaderCacheEntry(mID, false, &mImageSize);
-		if (idx >= 0 && mImageSize > mOffset)
+		idx = mCache->getHeaderCacheEntry(mID, mImageSize);
+		if (idx < 0)
 		{
-			llassert_always(mImageSize > 0);
-			if (!mDataSize || mDataSize > mImageSize)
-			{
-				mDataSize = mImageSize;
-			}
-			mState = mOffset < TEXTURE_CACHE_ENTRY_SIZE ? HEADER : BODY;
+			// The texture is *not* cached. We're done here...
+			mDataSize = 0; // no data 
+			done = true;
 		}
 		else
 		{
-			mDataSize = 0; // no data
-			return true;
+			// If the read offset is bigger than the header cache, we read directly from the body
+			// Note that currently, we *never* read with offset from the cache, so the result is *always* HEADER
+			mState = mOffset < TEXTURE_CACHE_ENTRY_SIZE ? HEADER : BODY;
 		}
 	}
 
-	if (mState == HEADER)
+	// Third state / stage : read data from the header cache (texture.entries) file
+	if (!done && (mState == HEADER))
 	{
-#if USE_LFS_READ
-		if (mFileHandle == LLLFSThread::nullHandle())
-		{
-			llassert_always(idx >= 0);
-			llassert_always(mOffset < TEXTURE_CACHE_ENTRY_SIZE);
-			S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE + mOffset;
-			S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-			llassert_always(mReadData == NULL);
-			mReadData = new U8[size];
-			mBytesRead = -1;
-			mBytesToRead = size;
-			setPriority(LLWorkerThread::PRIORITY_LOW | mPriority);
-			mFileHandle = LLLFSThread::sLocal->read(mCache->mHeaderDataFileName,
-													mReadData, offset, mBytesToRead,
-													new ReadResponder(mCache, mRequestHandle));
-			return false;
-		}
-		else
-		{
-			if (mBytesRead >= 0)
-			{
-				if (mBytesRead != mBytesToRead)
-				{
-// 					llwarns << "LLTextureCacheWorker: "  << mID
-// 							<< " incorrect number of bytes read from header: " << mBytesRead
-// 							<< " != " << mBytesToRead << llendl;
-					mDataSize = -1; // failed
-					return true;
-				}
-				if (mDataSize <= TEXTURE_CACHE_ENTRY_SIZE)
-				{
-					return true; // done
-				}
-				else
-				{
-					mFileHandle = LLLFSThread::nullHandle();
-					mState = BODY;
-				}
-			}
-			else
-			{
-				return false;
-			}
-		}
-#else
-		llassert_always(idx >= 0);
+		llassert_always(idx >= 0);	// we need an entry here or reading the header makes no sense
 		llassert_always(mOffset < TEXTURE_CACHE_ENTRY_SIZE);
 		S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE + mOffset;
+		// Compute the size we need to read (in bytes)
 		S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
+		size = llmin(size, mDataSize);
+		// Allocate the read buffer
 		mReadData = new U8[size];
 		S32 bytes_read = LLAPRFile::readEx(mCache->mHeaderDataFileName, 
 											 mReadData, offset, size, mCache->getLocalAPRFilePool());
 		if (bytes_read != size)
 		{
-// 			llwarns << "LLTextureCacheWorker: "  << mID
-// 					<< " incorrect number of bytes read from header: " << bytes_read
-// 					<< " / " << size << llendl;
+			llwarns << "LLTextureCacheWorker: "  << mID
+					<< " incorrect number of bytes read from header: " << bytes_read
+					<< " / " << size << llendl;
+			delete[] mReadData;
+			mReadData = NULL;
 			mDataSize = -1; // failed
-			return true;
+			done = true;
 		}
-		if (mDataSize <= TEXTURE_CACHE_ENTRY_SIZE)
+		// If we already read all we expected, we're actually done
+		if (mDataSize <= bytes_read)
 		{
-			return true; // done
+			done = true;
 		}
 		else
 		{
 			mState = BODY;
 		}
-#endif
 	}
 
-	if (mState == BODY)
+	// Fourth state / stage : read the rest of the data from the UUID based cached file
+	if (!done && (mState == BODY))
 	{
-#if USE_LFS_READ
-		if (mFileHandle == LLLFSThread::nullHandle())
-		{
-			std::string filename = mCache->getTextureFileName(mID);
-			S32 filesize = LLAPRFile::size(filename, mCache->getLocalAPRFilePool());
-			if (filesize > mOffset)
-			{
-				S32 datasize = TEXTURE_CACHE_ENTRY_SIZE + filesize;
-				mDataSize = llmin(datasize, mDataSize);
-				S32 data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-				data_offset = llmax(data_offset, 0);
-				S32 file_size = mDataSize - data_offset;
-				S32 file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE;
-				file_offset = llmax(file_offset, 0);
-
-				llassert_always(mDataSize > 0);
-				U8* data = new U8[mDataSize];
-				if (data_offset > 0)
-				{
-					llassert_always(mReadData);
-					llassert_always(data_offset <= mDataSize);
-					memcpy(data, mReadData, data_offset);
-					delete[] mReadData;
-					mReadData = NULL;
-				}
-				llassert_always(mReadData == NULL);
-				mReadData = data;
-
-				mBytesRead = -1;
-				mBytesToRead = file_size;
-				setPriority(LLWorkerThread::PRIORITY_LOW | mPriority);
-				llassert_always(data_offset + mBytesToRead <= mDataSize);
-				mFileHandle = LLLFSThread::sLocal->read(filename,
-														mReadData + data_offset, file_offset, mBytesToRead,
-														new ReadResponder(mCache, mRequestHandle));
-				return false;
-			}
-			else
-			{
-				mDataSize = TEXTURE_CACHE_ENTRY_SIZE;
-				return true; // done
-			}
-		}
-		else
-		{
-			if (mBytesRead >= 0)
-			{
-				if (mBytesRead != mBytesToRead)
-				{
-// 					llwarns << "LLTextureCacheWorker: "  << mID
-// 							<< " incorrect number of bytes read from body: " << mBytesRead
-// 							<< " != " << mBytesToRead << llendl;
-					mDataSize = -1; // failed
-				}
-				return true;
-			}
-			else
-			{
-				return false;
-			}
-		}
-#else
 		std::string filename = mCache->getTextureFileName(mID);
 		S32 filesize = LLAPRFile::size(filename, mCache->getLocalAPRFilePool());
-		S32 bytes_read = 0;
-		if (filesize > mOffset)
+
+		if (filesize && (filesize + TEXTURE_CACHE_ENTRY_SIZE) > mOffset)
 		{
-			S32 datasize = TEXTURE_CACHE_ENTRY_SIZE + filesize;
-			mDataSize = llmin(datasize, mDataSize);
-			S32 data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-			data_offset = llmax(data_offset, 0);
-			S32 file_size = mDataSize - data_offset;
-			S32 file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE;
-			file_offset = llmax(file_offset, 0);
+			S32 max_datasize = TEXTURE_CACHE_ENTRY_SIZE + filesize - mOffset;
+			mDataSize = llmin(max_datasize, mDataSize);
+
+			S32 data_offset, file_size, file_offset;
 			
+			// Reserve the whole data buffer first
 			U8* data = new U8[mDataSize];
-			if (data_offset > 0)
+
+			// Set the data file pointers taking the read offset into account. 2 cases:
+			if (mOffset < TEXTURE_CACHE_ENTRY_SIZE)
 			{
+				// Offset within the header record. That means we read something from the header cache.
+				// Note: most common case is (mOffset = 0), so this is the "normal" code path.
+				data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset;	// i.e. TEXTURE_CACHE_ENTRY_SIZE if mOffset nul (common case)
+				file_offset = 0;
+				file_size = mDataSize - data_offset;
+				// Copy the raw data we've been holding from the header cache into the new sized buffer
 				llassert_always(mReadData);
 				memcpy(data, mReadData, data_offset);
 				delete[] mReadData;
+				mReadData = NULL;
+			}
+			else
+			{
+				// Offset bigger than the header record. That means we haven't read anything yet.
+				data_offset = 0;
+				file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE;
+				file_size = mDataSize;
+				// No data from header cache to copy in that case, we skipped it all
 			}
+
+			// Now use that buffer as the object read buffer
+			llassert_always(mReadData == NULL);
 			mReadData = data;
-			bytes_read = LLAPRFile::readEx(filename, 
+
+			// Read the data at last
+			S32 bytes_read = LLAPRFile::readEx(filename, 
 											 mReadData + data_offset,
 											 file_offset, file_size,
 											 mCache->getLocalAPRFilePool());
 			if (bytes_read != file_size)
 			{
-// 				llwarns << "LLTextureCacheWorker: "  << mID
-// 						<< " incorrect number of bytes read from body: " << bytes_read
-// 						<< " / " << file_size << llendl;
+				llwarns << "LLTextureCacheWorker: "  << mID
+						<< " incorrect number of bytes read from body: " << bytes_read
+						<< " / " << file_size << llendl;
+				delete[] mReadData;
+				mReadData = NULL;
 				mDataSize = -1; // failed
-				return true;
+				done = true;
 			}
 		}
 		else
 		{
-			mDataSize = TEXTURE_CACHE_ENTRY_SIZE;
-		}
-		
-		return true;
-#endif
+			// No body, we're done.
+			mDataSize = llmax(TEXTURE_CACHE_ENTRY_SIZE - mOffset, 0);
+			lldebugs << "No body file for: " << filename << llendl;
+		}	
+		// Nothing else to do at that point...
+		done = true;
 	}
-	
-	return false;
+
+	// Clean up and exit
+	return done;
 }
 
+// This is where *everything* about a texture is written down in the cache system (entry map, header and body)
+// Current assumption are:
+// - the whole data are in a raw form, starting at mWriteData
+// - the size of this raw data is mDataSize and can be smaller than TEXTURE_CACHE_ENTRY_SIZE (the size of a record in the header cache)
+// - the code *does not* support offset writing so there are no difference between buffer addresses and start of data
 bool LLTextureCacheRemoteWorker::doWrite()
 {
+	bool done = false;
 	S32 idx = -1;
 
-	// No LOCAL state for write()
-	
+	// First state / stage : check that what we're trying to cache is in an OK shape
 	if (mState == INIT)
 	{
+		llassert_always(mOffset == 0);	// We currently do not support write offsets
+		llassert_always(mDataSize > 0); // Things will go badly wrong if mDataSize is nul or negative...
+		mState = CACHE;
+	}
+	
+	// No LOCAL state for write(): because it doesn't make much sense to cache a local file...
+
+	// Second state / stage : set an entry in the headers entry (texture.entries) file
+	if (!done && (mState == CACHE))
+	{
+		bool alreadyCached = false;
 		S32 cur_imagesize = 0;
-		S32 offset = mOffset;
-		idx = mCache->getHeaderCacheEntry(mID, false, &cur_imagesize);
-		if (idx >= 0 && cur_imagesize > 0)
+		// Checks if this image is already in the entry list
+		idx = mCache->getHeaderCacheEntry(mID, cur_imagesize);
+		if (idx >= 0 && (cur_imagesize >= 0))
 		{
-			offset = TEXTURE_CACHE_ENTRY_SIZE; // don't re-write header
+			alreadyCached = true;	// already there and non empty
 		}
-		idx = mCache->getHeaderCacheEntry(mID, true, &mImageSize); // touch entry
-		if (idx >= 0)
+		idx = mCache->setHeaderCacheEntry(mID, mImageSize); // create or touch the entry
+		if (idx < 0)
 		{
-			if(cur_imagesize > 0 && mImageSize != cur_imagesize)
-			{
-// 				llwarns << "Header cache entry size: " << cur_imagesize << " != mImageSize: " << mImageSize << llendl;
-				offset = 0; // re-write header
-			}
-			mState = offset < TEXTURE_CACHE_ENTRY_SIZE ? HEADER : BODY;
+			llwarns << "LLTextureCacheWorker: "  << mID
+					<< " Unable to create header entry for writing!" << llendl;
+			mDataSize = -1; // failed
+			done = true;
 		}
 		else
 		{
-			mDataSize = -1; // failed
-			return true;
+			if (cur_imagesize > 0 && (mImageSize != cur_imagesize))
+			{
+				alreadyCached = false; // re-write the header if the size changed in all cases
+			}
+			if (alreadyCached && (mDataSize <= TEXTURE_CACHE_ENTRY_SIZE))
+			{
+				// Small texture already cached case: we're done with writing
+				done = true;
+			}
+			else
+			{
+				// If the texture has already been cached, we don't resave the header and go directly to the body part
+				mState = alreadyCached ? BODY : HEADER;
+			}
 		}
 	}
-	
-	if (mState == HEADER)
+
+	// Third stage / state : write the header record in the header file (texture.cache)
+	if (!done && (mState == HEADER))
 	{
-#if USE_LFS_WRITE
-		if (mFileHandle == LLLFSThread::nullHandle())
+		llassert_always(idx >= 0);	// we need an entry here or storing the header makes no sense
+		S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE;	// skip to the correct spot in the header file
+		S32 size = TEXTURE_CACHE_ENTRY_SIZE;			// record size is fixed for the header
+		S32 bytes_written;
+
+		if (mDataSize < TEXTURE_CACHE_ENTRY_SIZE)
 		{
-			llassert_always(idx >= 0);
-			llassert_always(mOffset < TEXTURE_CACHE_ENTRY_SIZE);
-			S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE + mOffset;
-			S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-			mBytesRead = -1;
-			mBytesToRead = size;
-			setPriority(LLWorkerThread::PRIORITY_LOW | mPriority);
-			mFileHandle = LLLFSThread::sLocal->write(mCache->mHeaderDataFileName,
-													 mWriteData, offset, mBytesToRead,
-													 new WriteResponder(mCache, mRequestHandle));
-			return false;
+			// We need to write a full record in the header cache so, if the amount of data is smaller
+			// than a record, we need to transfer the data to a buffer padded with 0 and write that
+			U8* padBuffer = new U8[TEXTURE_CACHE_ENTRY_SIZE];
+			memset(padBuffer, 0, TEXTURE_CACHE_ENTRY_SIZE);		// Init with zeros
+			memcpy(padBuffer, mWriteData, mDataSize);			// Copy the write buffer
+			bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, padBuffer, offset, size, mCache->getLocalAPRFilePool());
+			delete [] padBuffer;
 		}
 		else
 		{
-			if (mBytesRead >= 0)
-			{
-				if (mBytesRead != mBytesToRead)
-				{
-// 					llwarns << "LLTextureCacheWorker: "  << mID
-// 							<< " incorrect number of bytes written to header: " << mBytesRead
-// 							<< " != " << mBytesToRead << llendl;
-					mDataSize = -1; // failed
-					return true;
-				}
-				if (mDataSize <=  mBytesToRead)
-				{
-					return true; // done
-				}
-				else
-				{
-					mFileHandle = LLLFSThread::nullHandle();
-					mState = BODY;
-				}
-			}
-			else
-			{
-				return false;
-			}
+			// Write the header record (== first TEXTURE_CACHE_ENTRY_SIZE bytes of the raw file) in the header file
+			bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, mWriteData, offset, size, mCache->getLocalAPRFilePool());
 		}
-#else
-		llassert_always(idx >= 0);
-		llassert_always(mOffset < TEXTURE_CACHE_ENTRY_SIZE);
-		S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE + mOffset;
-		S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-		S32 bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, mWriteData, offset, size, mCache->getLocalAPRFilePool());		
 
 		if (bytes_written <= 0)
 		{
-// 			llwarns << "LLTextureCacheWorker: missing entry: " << mID << llendl;
+			llwarns << "LLTextureCacheWorker: "  << mID
+					<< " Unable to write header entry!" << llendl;
 			mDataSize = -1; // failed
-			return true;
+			done = true;
 		}
 
-		if (mDataSize <= size)
+		// If we wrote everything (may be more with padding) in the header cache, 
+		// we're done so we don't have a body to store
+		if (mDataSize <= bytes_written)
 		{
-			return true; // done
+			done = true;
 		}
 		else
 		{
 			mState = BODY;
 		}
-#endif
 	}
 	
-	if (mState == BODY)
+	// Fourth stage / state : write the body file, i.e. the rest of the texture in a "UUID" file name
+	if (!done && (mState == BODY))
 	{
-#if USE_LFS_WRITE
-		if (mFileHandle == LLLFSThread::nullHandle())
+		llassert(mDataSize > TEXTURE_CACHE_ENTRY_SIZE);	// wouldn't make sense to be here otherwise...
+		S32 file_size = mDataSize - TEXTURE_CACHE_ENTRY_SIZE;
+		if ((file_size > 0) && mCache->updateTextureEntryList(mID, file_size))
 		{
-			S32 data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-			data_offset = llmax(data_offset, 0);
-			S32 file_size = mDataSize - data_offset;
-			S32 file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE;
-			file_offset = llmax(file_offset, 0);
-			if (file_size > 0 && mCache->appendToTextureEntryList(mID, file_size))
-			{
-				std::string filename = mCache->getTextureFileName(mID);
-				mBytesRead = -1;
-				mBytesToRead = file_size;
-				setPriority(LLWorkerThread::PRIORITY_LOW | mPriority);
-				mFileHandle = LLLFSThread::sLocal->write(filename,
-														 mWriteData + data_offset, file_offset, mBytesToRead,
-														 new WriteResponder(mCache, mRequestHandle));
-				return false;
-			}
-			else
-			{
-				mDataSize = 0; // no data written
-				return true; // done
-			}
-		}
-		else
-		{
-			if (mBytesRead >= 0)
-			{
-				if (mBytesRead != mBytesToRead)
-				{
-// 					llwarns << "LLTextureCacheWorker: "  << mID
-// 							<< " incorrect number of bytes written to body: " << mBytesRead
-// 							<< " != " << mBytesToRead << llendl;
-					mDataSize = -1; // failed
-				}
-				return true;
-			}
-			else
-			{
-				return false;
-			}
-		}
-#else
-		S32 data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-		data_offset = llmax(data_offset, 0);
-		S32 file_size = mDataSize - data_offset;
-		S32 file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE;
-		file_offset = llmax(file_offset, 0);
-		S32 bytes_written = 0;
-		if (file_size > 0 && mCache->appendToTextureEntryList(mID, file_size))
-		{
-			std::string filename = mCache->getTextureFileName(mID);
-			
-			bytes_written = LLAPRFile::writeEx(filename, 
-												 mWriteData + data_offset,
-												 file_offset, file_size,
-												 mCache->getLocalAPRFilePool());
+			// build the cache file name from the UUID
+			std::string filename = mCache->getTextureFileName(mID);			
+// 			llinfos << "Writing Body: " << filename << " Bytes: " << file_offset+file_size << llendl;
+			S32 bytes_written = LLAPRFile::writeEx(	filename, 
+													mWriteData + TEXTURE_CACHE_ENTRY_SIZE,
+													0, file_size,
+													mCache->getLocalAPRFilePool());
 			if (bytes_written <= 0)
 			{
+				llwarns << "LLTextureCacheWorker: "  << mID
+						<< " incorrect number of bytes written to body: " << bytes_written
+						<< " / " << file_size << llendl;
 				mDataSize = -1; // failed
+				done = true;
 			}
 		}
 		else
 		{
 			mDataSize = 0; // no data written
 		}
-
-		return true;
-#endif
+		// Nothing else to do at that point...
+		done = true;
 	}
-	
-	return false;
+
+	// Clean up and exit
+	return done;
 }
 
 //virtual
 bool LLTextureCacheWorker::doWork(S32 param)
 {
-// *TODO reenable disabled apr_pool usage disabled due to maint-render-9 merge breakage -brad
-	//allocate a new local apr_pool
-//	LLAPRPool pool ;
-
-	//save the current mFileAPRPool to avoid breaking anything.
-//	apr_pool_t* old_pool = mCache->getFileAPRPool() ;
-	//make mFileAPRPool to point to the local one
-//	mCache->setFileAPRPool(pool.getAPRPool()) ;
-
 	bool res = false;
 	if (param == 0) // read
 	{
@@ -818,10 +675,6 @@ bool LLTextureCacheWorker::doWork(S32 param)
 	{
 		llassert_always(0);
 	}
-
-	//set mFileAPRPool back, the local one will be released automatically.
-//	mCache->setFileAPRPool(old_pool) ;
-
 	return res;
 }
 
@@ -887,6 +740,7 @@ LLTextureCache::LLTextureCache(bool threaded)
 	  mWorkersMutex(NULL),
 	  mHeaderMutex(NULL),
 	  mListMutex(NULL),
+	  mHeaderAPRFile(NULL),
 	  mReadOnly(FALSE),
 	  mTexturesSizeTotal(0),
 	  mDoPurge(FALSE)
@@ -926,6 +780,9 @@ S32 LLTextureCache::update(U32 max_time_ms)
 		}
 	}
 
+	unlockWorkers(); 
+	
+	// call 'completed' with workers list unlocked (may call readComplete() or writeComplete()
 	for (responder_list_t::iterator iter1 = completed_list.begin();
 		 iter1 != completed_list.end(); ++iter1)
 	{
@@ -934,8 +791,6 @@ S32 LLTextureCache::update(U32 max_time_ms)
 		responder->completed(success);
 	}
 	
-	unlockWorkers();
-	
 	return res;
 }
 
@@ -954,33 +809,48 @@ std::string LLTextureCache::getTextureFileName(const LLUUID& id)
 {
 	std::string idstr = id.asString();
 	std::string delem = gDirUtilp->getDirDelimiter();
-	std::string filename = mTexturesDirName + delem + idstr[0] + delem + idstr;
+	std::string filename = mTexturesDirName + delem + idstr[0] + delem + idstr + ".texture";
 	return filename;
 }
 
-bool LLTextureCache::appendToTextureEntryList(const LLUUID& id, S32 bodysize)
+bool LLTextureCache::updateTextureEntryList(const LLUUID& id, S32 bodysize)
 {
 	bool res = false;
 	bool purge = false;
-	// Append UUID to end of texture entries
 	{
 		LLMutexLock lock(&mHeaderMutex);
-		size_map_t::iterator iter = mTexturesSizeMap.find(id);
-		if (iter == mTexturesSizeMap.end() || iter->second < bodysize)
+		size_map_t::iterator iter1 = mTexturesSizeMap.find(id);
+		if (iter1 == mTexturesSizeMap.end() || iter1->second < bodysize)
 		{
 			llassert_always(bodysize > 0);
-			Entry* entry = new Entry(id, bodysize, time(NULL));
 
-			LLAPRFile::writeEx(mTexturesDirEntriesFileName,
-								 (U8*)entry, -1, 1*sizeof(Entry),
-								 getLocalAPRFilePool());			
-			delete entry;
-			if (iter != mTexturesSizeMap.end())
+			S32 oldbodysize = 0;
+			if (iter1 != mTexturesSizeMap.end())
+			{
+				oldbodysize = iter1->second;
+			}
+						
+			Entry entry;
+			S32 idx = openAndReadEntry(id, entry, false);
+			if (idx < 0)
+			{
+				// TODO: change to llwarns
+				llerrs << "Failed to open entry: " << id << llendl;
+				removeFromCache(id);
+				return false;
+			}			
+			else if (oldbodysize != entry.mBodySize)
 			{
-				mTexturesSizeTotal -= iter->second;
+				// TODO: change to llwarns
+				llerrs << "Entry mismatch in mTextureSizeMap / mHeaderIDMap"
+					   << " idx=" << idx << " oldsize=" << oldbodysize << " entrysize=" << entry.mBodySize << llendl;
 			}
+			entry.mBodySize = bodysize;
+			writeEntryAndClose(idx, entry);
+			
+			mTexturesSizeTotal -= oldbodysize;
 			mTexturesSizeTotal += bodysize;
-			mTexturesSizeMap[id] = bodysize;
+			
 			if (mTexturesSizeTotal > sCacheMaxTexturesSize)
 			{
 				purge = true;
@@ -995,11 +865,59 @@ bool LLTextureCache::appendToTextureEntryList(const LLUUID& id, S32 bodysize)
 	return res;
 }
 
+//debug
+BOOL LLTextureCache::isInCache(const LLUUID& id) 
+{
+	LLMutexLock lock(&mHeaderMutex);
+	id_map_t::const_iterator iter = mHeaderIDMap.find(id);
+	
+	return (iter != mHeaderIDMap.end()) ;
+}
+
+//debug
+BOOL LLTextureCache::isInLocal(const LLUUID& id) 
+{
+	S32 local_size = 0;
+	std::string local_filename;
+	
+	std::string filename = getLocalFileName(id);	
+	// Is it a JPEG2000 file? 
+	{
+		local_filename = filename + ".j2c";
+		local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool());
+		if (local_size > 0)
+		{
+			return TRUE ;
+		}
+	}
+		
+	// If not, is it a jpeg file?		
+	{
+		local_filename = filename + ".jpg";
+		local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool());
+		if (local_size > 0)
+		{
+			return TRUE ;
+		}
+	}
+		
+	// Hmm... What about a targa file? (used for UI texture mostly)		
+	{
+		local_filename = filename + ".tga";
+		local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool());
+		if (local_size > 0)
+		{
+			return TRUE ;
+		}
+	}
+		
+	return FALSE ;
+}
 //////////////////////////////////////////////////////////////////////////////
 
 //static
 const S32 MAX_REASONABLE_FILE_SIZE = 512*1024*1024; // 512 MB
-F32 LLTextureCache::sHeaderCacheVersion = 1.0f;
+F32 LLTextureCache::sHeaderCacheVersion = 1.3f;
 U32 LLTextureCache::sCacheMaxEntries = MAX_REASONABLE_FILE_SIZE / TEXTURE_CACHE_ENTRY_SIZE;
 S64 LLTextureCache::sCacheMaxTexturesSize = 0; // no limit
 const char* entries_filename = "texture.entries";
@@ -1012,7 +930,6 @@ void LLTextureCache::setDirNames(ELLPath location)
 	mHeaderEntriesFileName = gDirUtilp->getExpandedFilename(location, entries_filename);
 	mHeaderDataFileName = gDirUtilp->getExpandedFilename(location, cache_filename);
 	mTexturesDirName = gDirUtilp->getExpandedFilename(location, textures_dirname);
-	mTexturesDirEntriesFileName = mTexturesDirName + delem + entries_filename;
 }
 
 void LLTextureCache::purgeCache(ELLPath location)
@@ -1020,7 +937,7 @@ void LLTextureCache::purgeCache(ELLPath location)
 	if (!mReadOnly)
 	{
 		setDirNames(location);
-	
+		llassert_always(mHeaderAPRFile == NULL);
 		LLAPRFile::remove(mHeaderEntriesFileName, getLocalAPRFilePool());
 		LLAPRFile::remove(mHeaderDataFileName, getLocalAPRFilePool());
 	}
@@ -1063,83 +980,317 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL read_only)
 	return max_size; // unused cache space
 }
 
-struct lru_data
+//----------------------------------------------------------------------------
+// mHeaderMutex must be locked for the following functions!
+
+LLAPRFile* LLTextureCache::openHeaderEntriesFile(bool readonly, S32 offset)
+{
+	llassert_always(mHeaderAPRFile == NULL);
+	apr_int32_t flags = readonly ? APR_READ|APR_BINARY : APR_READ|APR_WRITE|APR_BINARY;
+	mHeaderAPRFile = new LLAPRFile(mHeaderEntriesFileName, flags, getLocalAPRFilePool());
+	mHeaderAPRFile->seek(APR_SET, offset);
+	return mHeaderAPRFile;
+}
+
+void LLTextureCache::closeHeaderEntriesFile()
+{
+	llassert_always(mHeaderAPRFile != NULL);
+	delete mHeaderAPRFile;
+	mHeaderAPRFile = NULL;
+}
+
+void LLTextureCache::readEntriesHeader()
+{
+	// mHeaderEntriesInfo initializes to default values so safe not to read it
+		llassert_always(mHeaderAPRFile == NULL);
+	if (LLAPRFile::isExist(mHeaderEntriesFileName, getLocalAPRFilePool()))
+	{
+		LLAPRFile::readEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
+						  getLocalAPRFilePool());
+	}
+}
+
+void LLTextureCache::writeEntriesHeader()
 {
-	lru_data(U32 t, S32 i, const LLUUID& id) { time=t; index=i; uuid=id; }
-	U32 time;
-	S32 index;
-	LLUUID uuid;
-	struct Compare
-	{
-		// lhs < rhs
-		typedef const lru_data* lru_data_ptr;
-		bool operator()(const lru_data_ptr& a, const lru_data_ptr& b) const
+	llassert_always(mHeaderAPRFile == NULL);
+	if (!mReadOnly)
+	{
+		LLAPRFile::writeEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
+						   getLocalAPRFilePool());
+	}
+}
+
+static S32 mHeaderEntriesMaxWriteIdx = 0;
+
+S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create)
+{
+	S32 idx = -1;
+	
+	id_map_t::iterator iter1 = mHeaderIDMap.find(id);
+	if (iter1 != mHeaderIDMap.end())
+	{
+		idx = iter1->second;
+	}
+
+	if (idx < 0)
+	{
+		if (create && !mReadOnly)
 		{
-			if(a->time == b->time)
-				return (a->index < b->index);
+			if (mHeaderEntriesInfo.mEntries < sCacheMaxEntries)
+			{
+				// Add an entry to the end of the list
+				idx = mHeaderEntriesInfo.mEntries++;
+
+			}
+			else if (!mFreeList.empty())
+			{
+				idx = *(mFreeList.begin());
+				mFreeList.erase(mFreeList.begin());
+			}
 			else
-				return (a->time >= b->time);
+			{
+				// Look for a still valid entry in the LRU
+				for (std::set<LLUUID>::iterator iter2 = mLRU.begin(); iter2 != mLRU.end();)
+				{
+					std::set<LLUUID>::iterator curiter2 = iter2++;
+					LLUUID oldid = *curiter2;
+					// Erase entry from LRU regardless
+					mLRU.erase(curiter2);
+					// Look up entry and use it if it is valid
+					id_map_t::iterator iter3 = mHeaderIDMap.find(oldid);
+					if (iter3 != mHeaderIDMap.end() && iter3->second >= 0)
+					{
+						idx = iter3->second;
+						mHeaderIDMap.erase(oldid);
+						mTexturesSizeMap.erase(oldid);
+						break;
+					}
+				}
+				// if (idx < 0) at this point, we will rebuild the LRU 
+				//  and retry if called from setHeaderCacheEntry(),
+				//  otherwise this shouldn't happen and will trigger an error
+			}
+			if (idx >= 0)
+			{
+				// Set the header index
+				mHeaderIDMap[id] = idx;
+				llassert_always(mTexturesSizeMap.erase(id) == 0);
+				// Initialize the entry (will get written later)
+				entry.init(id, time(NULL));
+				// Update Header
+				writeEntriesHeader();
+				// Write Entry
+				S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
+				LLAPRFile* aprfile = openHeaderEntriesFile(false, offset);
+				S32 bytes_written = aprfile->write((void*)&entry, (S32)sizeof(Entry));
+				llassert_always(bytes_written == sizeof(Entry));
+				mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, idx);
+				closeHeaderEntriesFile();
+			}
 		}
-	};				
-};
+	}
+	else
+	{
+		// Remove this entry from the LRU if it exists
+		mLRU.erase(id);
+		// Read the entry
+		S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
+		LLAPRFile* aprfile = openHeaderEntriesFile(true, offset);
+		S32 bytes_read = aprfile->read((void*)&entry, (S32)sizeof(Entry));
+		llassert_always(bytes_read == sizeof(Entry));
+		llassert_always(entry.mImageSize == 0 || entry.mImageSize == -1 || entry.mImageSize > entry.mBodySize);
+		closeHeaderEntriesFile();
+	}
+	return idx;
+}
+
+void LLTextureCache::writeEntryAndClose(S32 idx, Entry& entry)
+{
+	if (idx >= 0)
+	{
+		if (!mReadOnly)
+		{
+			entry.mTime = time(NULL);
+			llassert_always(entry.mImageSize == 0 || entry.mImageSize == -1 || entry.mImageSize > entry.mBodySize);
+			if (entry.mBodySize > 0)
+			{
+				mTexturesSizeMap[entry.mID] = entry.mBodySize;
+			}
+// 			llinfos << "Updating TE: " << idx << ": " << id << " Size: " << entry.mBodySize << " Time: " << entry.mTime << llendl;
+			S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
+			LLAPRFile* aprfile = openHeaderEntriesFile(false, offset);
+			S32 bytes_written = aprfile->write((void*)&entry, (S32)sizeof(Entry));
+			llassert_always(bytes_written == sizeof(Entry));
+			mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, idx);
+			closeHeaderEntriesFile();
+		}
+	}
+}
+
+U32 LLTextureCache::openAndReadEntries(std::vector<Entry>& entries)
+{
+	U32 num_entries = mHeaderEntriesInfo.mEntries;
+
+	mHeaderIDMap.clear();
+	mTexturesSizeMap.clear();
+	mFreeList.clear();
+	mTexturesSizeTotal = 0;
+
+	LLAPRFile* aprfile = openHeaderEntriesFile(false, (S32)sizeof(EntriesInfo));
+	for (U32 idx=0; idx<num_entries; idx++)
+	{
+		Entry entry;
+		S32 bytes_read = aprfile->read((void*)(&entry), (S32)sizeof(Entry));
+		if (bytes_read < sizeof(Entry))
+		{
+			llwarns << "Corrupted header entries, failed at " << idx << " / " << num_entries << llendl;
+			closeHeaderEntriesFile();
+			purgeAllTextures(false);
+			return 0;
+		}
+		entries.push_back(entry);
+// 		llinfos << "ENTRY: " << entry.mTime << " TEX: " << entry.mID << " IDX: " << idx << " Size: " << entry.mImageSize << llendl;
+		if (entry.mImageSize < 0)
+		{
+			mFreeList.insert(idx);
+		}
+		else
+		{
+			mHeaderIDMap[entry.mID] = idx;
+			if (entry.mBodySize > 0)
+			{
+				mTexturesSizeMap[entry.mID] = entry.mBodySize;
+				mTexturesSizeTotal += entry.mBodySize;
+			}
+			llassert_always(entry.mImageSize == 0 || entry.mImageSize > entry.mBodySize);
+		}
+	}
+	closeHeaderEntriesFile();
+	return num_entries;
+}
+
+void LLTextureCache::writeEntriesAndClose(const std::vector<Entry>& entries)
+{
+	S32 num_entries = entries.size();
+	llassert_always(num_entries == mHeaderEntriesInfo.mEntries);
+	
+	if (!mReadOnly)
+	{
+		LLAPRFile* aprfile = openHeaderEntriesFile(false, (S32)sizeof(EntriesInfo));
+		for (S32 idx=0; idx<num_entries; idx++)
+		{
+			S32 bytes_written = aprfile->write((void*)(&entries[idx]), (S32)sizeof(Entry));
+			llassert_always(bytes_written == sizeof(Entry));
+		}
+		mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, num_entries-1);
+		closeHeaderEntriesFile();
+	}
+}
+
+//----------------------------------------------------------------------------
 
 // Called from either the main thread or the worker thread
 void LLTextureCache::readHeaderCache()
 {
 	LLMutexLock lock(&mHeaderMutex);
-	mHeaderEntriesInfo.mVersion = 0.f;
-	mHeaderEntriesInfo.mEntries = 0;
-	if (LLAPRFile::isExist(mHeaderEntriesFileName, getLocalAPRFilePool()))
-	{
-		LLAPRFile::readEx(mHeaderEntriesFileName,
-							(U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
-							getLocalAPRFilePool());
-	}
+
+	mLRU.clear(); // always clear the LRU
+
+	readEntriesHeader();
+	
 	if (mHeaderEntriesInfo.mVersion != sHeaderCacheVersion)
 	{
 		if (!mReadOnly)
 		{
-			// Info with 0 entries
-			mHeaderEntriesInfo.mVersion = sHeaderCacheVersion;
-
-			LLAPRFile::writeEx(mHeaderEntriesFileName, 
-								 (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
-								 getLocalAPRFilePool());
+			purgeAllTextures(false);
 		}
 	}
 	else
 	{
-		S32 num_entries = mHeaderEntriesInfo.mEntries;
+		std::vector<Entry> entries;
+		U32 num_entries = openAndReadEntries(entries);
 		if (num_entries)
 		{
-			Entry* entries = new Entry[num_entries];
+			U32 empty_entries = 0;
+			typedef std::pair<U32, LLUUID> lru_data_t;
+			std::set<lru_data_t> lru;
+			std::vector<LLUUID> purge_list;
+			for (U32 i=0; i<num_entries; i++)
+			{
+				Entry& entry = entries[i];
+				const LLUUID& id = entry.mID;
+				if (entry.mImageSize < 0)
+				{
+					// This will be in the Free List, don't put it in the LRY
+					++empty_entries;
+				}
+				else
+				{
+					lru.insert(std::make_pair(entry.mTime, id));
+					if (entry.mBodySize > 0)
+					{
+						if (entry.mBodySize > entry.mImageSize)
+						{
+							// Shouldn't happen, failsafe only
+							llwarns << "Bad entry: " << i << ": " << id << ": BodySize: " << entry.mBodySize << llendl;
+							purge_list.push_back(id);
+						}
+					}
+				}
+			}
+			if (num_entries > sCacheMaxEntries)
+			{
+				// Special case: cache size was reduced, need to remove entries
+				// Note: After we prune entries, we will call this again and create the LRU
+				U32 entries_to_purge = (num_entries-empty_entries) - sCacheMaxEntries;
+				if (entries_to_purge > 0)
+				{
+					for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter)
+					{
+						purge_list.push_back(iter->second);
+						if (--entries_to_purge <= 0)
+							break;
+					}
+				}
+			}
+			else
 			{
-				LLAPRFile::readEx(mHeaderEntriesFileName, 
-								(U8*)entries, sizeof(EntriesInfo), num_entries*sizeof(Entry),
-								getLocalAPRFilePool());
+				S32 lru_entries = (S32)((F32)sCacheMaxEntries * TEXTURE_CACHE_LRU_SIZE);
+				for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter)
+				{
+					mLRU.insert(iter->second);
+// 					llinfos << "LRU: " << iter->first << " : " << iter->second << llendl;
+					if (--lru_entries <= 0)
+						break;
+				}
 			}
-			typedef std::set<lru_data*, lru_data::Compare> lru_set_t;
-			lru_set_t lru;
-			for (S32 i=0; i<num_entries; i++)
+			
+			if (purge_list.size() > 0)
 			{
-				if (entries[i].mSize >= 0) // -1 indicates erased entry, skip
+				for (std::vector<LLUUID>::iterator iter = purge_list.begin(); iter != purge_list.end(); ++iter)
 				{
-					const LLUUID& id = entries[i].mID;
-					lru.insert(new lru_data(entries[i].mTime, i, id));
-					mHeaderIDMap[id] = i;
+					removeFromCache(*iter);
 				}
+				// If we removed any entries, we need to rebuild the entries list,
+				// write the header, and call this again
+				std::vector<Entry> new_entries;
+				for (U32 i=0; i<num_entries; i++)
+				{
+					const Entry& entry = entries[i];
+					if (entry.mImageSize >=0)
+					{
+						new_entries.push_back(entry);
+					}
+				}
+				llassert_always(new_entries.size() <= sCacheMaxEntries);
+				mHeaderEntriesInfo.mEntries = new_entries.size();
+				writeEntriesAndClose(new_entries);
+				readHeaderCache(); // repeat with new entries file
 			}
-			mLRU.clear();
-			S32 lru_entries = sCacheMaxEntries / 10;
-			for (lru_set_t::iterator iter = lru.begin(); iter != lru.end(); ++iter)
+			else
 			{
-				lru_data* data = *iter;
-				mLRU[data->index] = data->uuid;
-				if (--lru_entries <= 0)
-					break;
+				writeEntriesAndClose(entries);
 			}
-			for_each(lru.begin(), lru.end(), DeletePointer());
-			delete[] entries;
 		}
 	}
 }
@@ -1162,13 +1313,21 @@ void LLTextureCache::purgeAllTextures(bool purge_directories)
 				LLFile::rmdir(dirname);
 			}
 		}
-		LLAPRFile::remove(mTexturesDirEntriesFileName, getLocalAPRFilePool());
 		if (purge_directories)
 		{
 			LLFile::rmdir(mTexturesDirName);
 		}
 	}
+	mHeaderIDMap.clear();
 	mTexturesSizeMap.clear();
+	mTexturesSizeTotal = 0;
+	mFreeList.clear();
+	mTexturesSizeTotal = 0;
+
+	// Info with 0 entries
+	mHeaderEntriesInfo.mVersion = sHeaderCacheVersion;
+	mHeaderEntriesInfo.mEntries = 0;
+	writeEntriesHeader();
 }
 
 void LLTextureCache::purgeTextures(bool validate)
@@ -1182,51 +1341,37 @@ void LLTextureCache::purgeTextures(bool validate)
 	LLAppViewer::instance()->pauseMainloopTimeout();
 
 	LLMutexLock lock(&mHeaderMutex);
-	
-	S32 filesize = LLAPRFile::size(mTexturesDirEntriesFileName, getLocalAPRFilePool());
-	S32 num_entries = filesize / sizeof(Entry);
-	if (num_entries * (S32)sizeof(Entry) != filesize)
-	{
-		LL_WARNS("TextureCache") << "Bad cache file: " << mTexturesDirEntriesFileName << " Purging." << LL_ENDL;
-		purgeAllTextures(false);
-		return;
-	}
-	if (num_entries == 0)
+
+	llinfos << "TEXTURE CACHE: Purging." << llendl;
+
+	// Read the entries list
+	std::vector<Entry> entries;
+	U32 num_entries = openAndReadEntries(entries);
+	if (!num_entries)
 	{
-		return; // nothing to do
+		writeEntriesAndClose(entries);
+		return; // nothing to purge
 	}
 	
-	Entry* entries = new Entry[num_entries];
-	S32 bytes_read = LLAPRFile::readEx(mTexturesDirEntriesFileName, 
-										 (U8*)entries, 0, num_entries*sizeof(Entry),
-										 getLocalAPRFilePool());	
-	if (bytes_read != filesize)
-	{
-		LL_WARNS("TextureCache") << "Bad cache file (2): " << mTexturesDirEntriesFileName << " Purging." << LL_ENDL;
-		purgeAllTextures(false);
-		return;
-	}
-	
-	LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Reading Entries..." << LL_ENDL;
-	
-	std::map<LLUUID, S32> entry_idx_map;
-	S64 total_size = 0;
-	for (S32 idx=0; idx<num_entries; idx++)
-	{
-		const LLUUID& id = entries[idx].mID;
- 		LL_DEBUGS("TextureCache") << "Entry: " << id << " Size: " << entries[idx].mSize << " Time: " << entries[idx].mTime << LL_ENDL;
-		std::map<LLUUID, S32>::iterator iter = entry_idx_map.find(id);
-		if (iter != entry_idx_map.end())
+	// Use mTexturesSizeMap to collect UUIDs of textures with bodies
+	typedef std::set<std::pair<U32,S32> > time_idx_set_t;
+	std::set<std::pair<U32,S32> > time_idx_set;
+	for (size_map_t::iterator iter1 = mTexturesSizeMap.begin();
+		 iter1 != mTexturesSizeMap.end(); ++iter1)
+	{
+		if (iter1->second > 0)
 		{
-			// Newer entry replacing older entry
-			S32 pidx = iter->second;
-			total_size -= entries[pidx].mSize;
-			entries[pidx].mSize = 0; // flag: skip older entry
+			id_map_t::iterator iter2 = mHeaderIDMap.find(iter1->first);
+			if (iter2 != mHeaderIDMap.end())
+			{
+				S32 idx = iter2->second;
+				time_idx_set.insert(std::make_pair(entries[idx].mTime, idx));
+// 				llinfos << "TIME: " << entries[idx].mTime << " TEX: " << entries[idx].mID << " IDX: " << idx << " Size: " << entries[idx].mImageSize << llendl;
+			}
 		}
-		entry_idx_map[id] = idx;
-		total_size += entries[idx].mSize;
 	}
-
+	
+	// Validate 1/256th of the files on startup
 	U32 validate_idx = 0;
 	if (validate)
 	{
@@ -1235,19 +1380,17 @@ void LLTextureCache::purgeTextures(bool validate)
 		gSavedSettings.setU32("CacheValidateCounter", next_idx);
 		LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Validating: " << validate_idx << LL_ENDL;
 	}
-	
-	S64 min_cache_size = (sCacheMaxTexturesSize * 9) / 10;
+
+	S64 cache_size = mTexturesSizeTotal;
+	S64 purged_cache_size = (sCacheMaxTexturesSize * (S64)((1.f-TEXTURE_CACHE_PURGE_AMOUNT)*100)) / 100;
 	S32 purge_count = 0;
-	S32 next_idx = 0;
-	for (S32 idx=0; idx<num_entries; idx++)
+	for (time_idx_set_t::iterator iter = time_idx_set.begin();
+		 iter != time_idx_set.end(); ++iter)
 	{
-		if (entries[idx].mSize == 0)
-		{
-			continue;
-		}
+		S32 idx = iter->second;
 		bool purge_entry = false;
 		std::string filename = getTextureFileName(entries[idx].mID);
-		if (total_size >= min_cache_size)
+		if (cache_size >= purged_cache_size)
 		{
 			purge_entry = true;
 		}
@@ -1257,60 +1400,44 @@ void LLTextureCache::purgeTextures(bool validate)
 			U32 uuididx = entries[idx].mID.mData[0];
 			if (uuididx == validate_idx)
 			{
- 				LL_DEBUGS("TextureCache") << "Validating: " << filename << "Size: " << entries[idx].mSize << LL_ENDL;
+ 				LL_DEBUGS("TextureCache") << "Validating: " << filename << "Size: " << entries[idx].mBodySize << LL_ENDL;
 				S32 bodysize = LLAPRFile::size(filename, getLocalAPRFilePool());
-				if (bodysize != entries[idx].mSize)
+				if (bodysize != entries[idx].mBodySize)
 				{
-					LL_WARNS("TextureCache") << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mSize
+					LL_WARNS("TextureCache") << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mBodySize
 							<< filename << LL_ENDL;
 					purge_entry = true;
 				}
 			}
 		}
+		else
+		{
+			break;
+		}
+		
 		if (purge_entry)
 		{
 			purge_count++;
 	 		LL_DEBUGS("TextureCache") << "PURGING: " << filename << LL_ENDL;
 			LLAPRFile::remove(filename, getLocalAPRFilePool());
-			total_size -= entries[idx].mSize;
-			entries[idx].mSize = 0;
-		}
-		else
-		{
-			if (next_idx != idx)
-			{
-				entries[next_idx] = entries[idx];
-			}
-			++next_idx;
+			cache_size -= entries[idx].mBodySize;
+			mTexturesSizeTotal -= entries[idx].mBodySize;
+			entries[idx].mBodySize = 0;
+			mTexturesSizeMap.erase(entries[idx].mID);
 		}
 	}
-	num_entries = next_idx;
 
 	LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Writing Entries: " << num_entries << LL_ENDL;
-	
-	LLAPRFile::remove(mTexturesDirEntriesFileName, getLocalAPRFilePool());
-	LLAPRFile::writeEx(mTexturesDirEntriesFileName, 
-						 (U8*)&entries[0], 0, num_entries*sizeof(Entry),
-						 getLocalAPRFilePool());
-	
-	mTexturesSizeTotal = 0;
-	mTexturesSizeMap.clear();
-	for (S32 idx=0; idx<num_entries; idx++)
-	{
-		mTexturesSizeMap[entries[idx].mID] = entries[idx].mSize;
-		mTexturesSizeTotal += entries[idx].mSize;
-	}
-	llassert(mTexturesSizeTotal == total_size);
-	
-	delete[] entries;
 
+	writeEntriesAndClose(entries);
+	
 	// *FIX:Mani - watchdog back on.
 	LLAppViewer::instance()->resumeMainloopTimeout();
 	
 	LL_INFOS("TextureCache") << "TEXTURE CACHE:"
 			<< " PURGED: " << purge_count
 			<< " ENTRIES: " << num_entries
-			<< " CACHE SIZE: " << total_size / 1024*1024 << " MB"
+			<< " CACHE SIZE: " << mTexturesSizeTotal / 1024*1024 << " MB"
 			<< llendl;
 }
 
@@ -1340,78 +1467,39 @@ LLTextureCacheWorker* LLTextureCache::getWriter(handle_t handle)
 }
 
 //////////////////////////////////////////////////////////////////////////////
-
 // Called from work thread
-S32 LLTextureCache::getHeaderCacheEntry(const LLUUID& id, bool touch, S32* imagesize)
-{
-	bool retry = false;
-	S32 idx = -1;
 
+// Reads imagesize from the header, updates timestamp
+S32 LLTextureCache::getHeaderCacheEntry(const LLUUID& id, S32& imagesize)
+{
+	LLMutexLock lock(&mHeaderMutex);
+	Entry entry;
+	S32 idx = openAndReadEntry(id, entry, false);
+	if (idx >= 0)
 	{
-		LLMutexLock lock(&mHeaderMutex);
-		id_map_t::iterator iter = mHeaderIDMap.find(id);
-		if (iter != mHeaderIDMap.end())
-		{
-			idx = iter->second;
-		}
-		else if (touch && !mReadOnly)
-		{
-			if (mHeaderEntriesInfo.mEntries < sCacheMaxEntries)
-			{
-				// Add an entry
-				idx = mHeaderEntriesInfo.mEntries++;
-				mHeaderIDMap[id] = idx;
-				// Update Info
-				LLAPRFile::writeEx(mHeaderEntriesFileName, 
-									(U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
-									getLocalAPRFilePool());
-			}
-			else if (!mLRU.empty())
-			{
-				idx = mLRU.begin()->first; // will be erased below
-				const LLUUID& oldid = mLRU.begin()->second;
-				mHeaderIDMap.erase(oldid);
-				mTexturesSizeMap.erase(oldid);
-				mHeaderIDMap[id] = idx;
-			}
-			else
-			{
-				idx = -1;
-				retry = true;
-			}
-		}
-		if (idx >= 0)
-		{
-			if (touch && !mReadOnly)
-			{
-				// Update the lru entry
-				mLRU.erase(idx);
-				llassert_always(imagesize && *imagesize > 0);
-				Entry* entry = new Entry(id, *imagesize, time(NULL));
-				S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
-				LLAPRFile::writeEx(mHeaderEntriesFileName, 
-									 (U8*)entry, offset, sizeof(Entry),
-									 getLocalAPRFilePool());
-				delete entry;
-			}
-			else if (imagesize)
-			{
-				// Get the image size
-				Entry entry;
-				S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
+		imagesize = entry.mImageSize;
+		writeEntryAndClose(idx, entry); // updates time
+	}
+	return idx;
+}
 
-				LLAPRFile::readEx(mHeaderEntriesFileName, 
-									(U8*)&entry, offset, sizeof(Entry),
-									getLocalAPRFilePool());
-				*imagesize = entry.mSize;
-			}
-		}
+// Writes imagesize to the header, updates timestamp
+S32 LLTextureCache::setHeaderCacheEntry(const LLUUID& id, S32 imagesize)
+{
+	LLMutexLock lock(&mHeaderMutex);
+	llassert_always(imagesize >= 0);
+	Entry entry;
+	S32 idx = openAndReadEntry(id, entry, true);
+	if (idx >= 0)
+	{
+		entry.mImageSize = imagesize;
+		writeEntryAndClose(idx, entry);
 	}
-	if (retry)
+	else // retry
 	{
-		readHeaderCache(); // updates the lru
+		readHeaderCache(); // We couldn't write an entry, so refresh the LRU
 		llassert_always(!mLRU.empty() || mHeaderEntriesInfo.mEntries < sCacheMaxEntries);
-		idx = getHeaderCacheEntry(id, touch, imagesize); // assert above ensures no inf. recursion
+		idx = setHeaderCacheEntry(id, imagesize); // assert above ensures no inf. recursion
 	}
 	return idx;
 }
@@ -1427,8 +1515,8 @@ LLTextureCache::handle_t LLTextureCache::readFromCache(const std::string& filena
 	//  so let the thread handle it
 	LLMutexLock lock(&mWorkersMutex);
 	LLTextureCacheWorker* worker = new LLTextureCacheLocalFileWorker(this, priority, filename, id,
-															NULL, size, offset, 0,
-															responder);
+																	 NULL, size, offset, 0,
+																	 responder);
 	handle_t handle = worker->read();
 	mReaders[handle] = worker;
 	return handle;
@@ -1441,8 +1529,8 @@ LLTextureCache::handle_t LLTextureCache::readFromCache(const LLUUID& id, U32 pri
 	//  so let the thread handle it
 	LLMutexLock lock(&mWorkersMutex);
 	LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id,
-															NULL, size, offset, 0,
-															responder);
+																  NULL, size, offset,
+																  0, responder);
 	handle_t handle = worker->read();
 	mReaders[handle] = worker;
 	return handle;
@@ -1453,7 +1541,7 @@ bool LLTextureCache::readComplete(handle_t handle, bool abort)
 {
 	lockWorkers();
 	handle_map_t::iterator iter = mReaders.find(handle);
-	llassert_always(iter != mReaders.end());
+	llassert_always(iter != mReaders.end() || abort);
 	LLTextureCacheWorker* worker = iter->second;
 	bool res = worker->complete();
 	if (res || abort)
@@ -1487,19 +1575,13 @@ LLTextureCache::handle_t LLTextureCache::writeToCache(const LLUUID& id, U32 prio
 		purgeTextures(false);
 		mDoPurge = FALSE;
 	}
-	if (datasize >= TEXTURE_CACHE_ENTRY_SIZE)
-	{
-		LLMutexLock lock(&mWorkersMutex);
-		llassert_always(imagesize > 0);
-		LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id,
-																data, datasize, 0,
-																imagesize, responder);
-		handle_t handle = worker->write();
-		mWriters[handle] = worker;
-		return handle;
-	}
-	delete responder;
-	return LLWorkerThread::nullHandle();
+	LLMutexLock lock(&mWorkersMutex);
+	LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id,
+																  data, datasize, 0,
+																  imagesize, responder);
+	handle_t handle = worker->write();
+	mWriters[handle] = worker;
+	return handle;
 }
 
 bool LLTextureCache::writeComplete(handle_t handle, bool abort)
@@ -1542,25 +1624,17 @@ void LLTextureCache::addCompleted(Responder* responder, bool success)
 
 bool LLTextureCache::removeHeaderCacheEntry(const LLUUID& id)
 {
-	if (mReadOnly)
-	{
-		return false;
-	}
-	LLMutexLock lock(&mHeaderMutex);
-	id_map_t::iterator iter = mHeaderIDMap.find(id);
-	if (iter != mHeaderIDMap.end())
+	if (!mReadOnly)
 	{
-		S32 idx = iter->second;
+		LLMutexLock lock(&mHeaderMutex);
+		Entry entry;
+		S32 idx = openAndReadEntry(id, entry, false);
 		if (idx >= 0)
 		{
-			Entry* entry = new Entry(id, -1, time(NULL));
-			S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
-
-			LLAPRFile::writeEx(mHeaderEntriesFileName,
-								 (U8*)entry, offset, sizeof(Entry),
-								 getLocalAPRFilePool());			
-			delete entry;
-			mLRU[idx] = id;
+			entry.mImageSize = -1;
+			entry.mBodySize = 0;
+			writeEntryAndClose(idx, entry);
+			mFreeList.insert(idx);
 			mHeaderIDMap.erase(id);
 			mTexturesSizeMap.erase(id);
 			return true;
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
index 68b1458e9a8..bc9c988648b 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -48,6 +48,27 @@ class LLTextureCache : public LLWorkerThread
 	friend class LLTextureCacheRemoteWorker;
 	friend class LLTextureCacheLocalFileWorker;
 
+private:
+	// Entries
+	struct EntriesInfo
+	{
+		EntriesInfo() : mVersion(0.f), mEntries(0) {}
+		F32 mVersion;
+		U32 mEntries;
+	};
+	struct Entry
+	{
+		Entry() {}
+		Entry(const LLUUID& id, S32 imagesize, S32 bodysize, U32 time) :
+			mID(id), mImageSize(imagesize), mBodySize(bodysize), mTime(time) {}
+		void init(const LLUUID& id, U32 time) { mID = id, mImageSize = 0; mBodySize = 0; mTime = time; }
+		LLUUID mID; // 16 bytes
+		S32 mImageSize; // total size of image if known
+		S32 mBodySize; // size of body file in body cache
+		U32 mTime; // seconds since 1/1/1970
+	};
+
+	
 public:
 
 	class Responder : public LLResponder
@@ -106,10 +127,16 @@ class LLTextureCache : public LLWorkerThread
 	// debug
 	S32 getNumReads() { return mReaders.size(); }
 	S32 getNumWrites() { return mWriters.size(); }
+	S64 getUsage() { return mTexturesSizeTotal; }
+	S64 getMaxUsage() { return sCacheMaxTexturesSize; }
+	U32 getEntries() { return mHeaderEntriesInfo.mEntries; }
+	U32 getMaxEntries() { return sCacheMaxEntries; };
+	BOOL isInCache(const LLUUID& id) ;
+	BOOL isInLocal(const LLUUID& id) ;
 
 protected:
 	// Accessed by LLTextureCacheWorker
-	bool appendToTextureEntryList(const LLUUID& id, S32 size);
+	bool updateTextureEntryList(const LLUUID& id, S32 size);
 	std::string getLocalFileName(const LLUUID& id);
 	std::string getTextureFileName(const LLUUID& id);
 	void addCompleted(Responder* responder, bool success);
@@ -122,7 +149,16 @@ class LLTextureCache : public LLWorkerThread
 	void readHeaderCache();
 	void purgeAllTextures(bool purge_directories);
 	void purgeTextures(bool validate);
-	S32 getHeaderCacheEntry(const LLUUID& id, bool touch, S32* imagesize = NULL);
+	LLAPRFile* openHeaderEntriesFile(bool readonly, S32 offset);
+	void closeHeaderEntriesFile();
+	void readEntriesHeader();
+	void writeEntriesHeader();
+	S32 openAndReadEntry(const LLUUID& id, Entry& entry, bool create);
+	void writeEntryAndClose(S32 idx, Entry& entry);
+	U32 openAndReadEntries(std::vector<Entry>& entries);
+	void writeEntriesAndClose(const std::vector<Entry>& entries);
+	S32 getHeaderCacheEntry(const LLUUID& id, S32& imagesize);
+	S32 setHeaderCacheEntry(const LLUUID& id, S32 imagesize);
 	bool removeHeaderCacheEntry(const LLUUID& id);
 	void lockHeaders() { mHeaderMutex.lock(); }
 	void unlockHeaders() { mHeaderMutex.unlock(); }
@@ -132,6 +168,7 @@ class LLTextureCache : public LLWorkerThread
 	LLMutex mWorkersMutex;
 	LLMutex mHeaderMutex;
 	LLMutex mListMutex;
+	LLAPRFile* mHeaderAPRFile;
 	
 	typedef std::map<handle_t, LLTextureCacheWorker*> handle_map_t;
 	handle_map_t mReaders;
@@ -145,42 +182,28 @@ class LLTextureCache : public LLWorkerThread
 	
 	BOOL mReadOnly;
 	
-	// Entries
-	struct EntriesInfo
-	{
-		F32 mVersion;
-		U32 mEntries;
-	};
-	struct Entry
-	{
-		Entry() {}
-		Entry(const LLUUID& id, S32 size, U32 time) : mID(id), mSize(size), mTime(time) {}
-		LLUUID mID; // 128 bits
-		S32 mSize; // total size of image if known (NOT size cached)
-		U32 mTime; // seconds since 1/1/1970
-	};
-
 	// HEADERS (Include first mip)
 	std::string mHeaderEntriesFileName;
 	std::string mHeaderDataFileName;
 	EntriesInfo mHeaderEntriesInfo;
-	typedef std::map<S32,LLUUID> index_map_t;
-	index_map_t mLRU; // index, id; stored as a map for fast removal
+	std::set<S32> mFreeList; // deleted entries
+	std::set<LLUUID> mLRU;
 	typedef std::map<LLUUID,S32> id_map_t;
 	id_map_t mHeaderIDMap;
 
 	// BODIES (TEXTURES minus headers)
 	std::string mTexturesDirName;
-	std::string mTexturesDirEntriesFileName;
 	typedef std::map<LLUUID,S32> size_map_t;
 	size_map_t mTexturesSizeMap;
 	S64 mTexturesSizeTotal;
 	LLAtomic32<BOOL> mDoPurge;
-	
+
 	// Statics
 	static F32 sHeaderCacheVersion;
 	static U32 sCacheMaxEntries;
 	static S64 sCacheMaxTexturesSize;
 };
 
+extern const S32 TEXTURE_CACHE_ENTRY_SIZE;
+
 #endif // LL_LLTEXTURECACHE_H
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 88fc7f98c01..c918f988952 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -32,108 +32,35 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include <iostream>
+
 #include "llstl.h"
 
 #include "lltexturefetch.h"
 
 #include "llcurl.h"
+#include "lldir.h"
 #include "llhttpclient.h"
+#include "llhttpstatuscodes.h"
 #include "llimage.h"
 #include "llimageworker.h"
 #include "llworkerthread.h"
 
 #include "llagent.h"
 #include "lltexturecache.h"
+#include "llviewercontrol.h"
 #include "llviewertexturelist.h"
 #include "llviewertexture.h"
 #include "llviewerregion.h"
+#include "llworld.h"
 
 //////////////////////////////////////////////////////////////////////////////
-//static
 class LLTextureFetchWorker : public LLWorkerClass
 {
-friend class LLTextureFetch;
-
-private:
-#if 0
-	class URLResponder : public LLHTTPClient::Responder
-	{
-	public:
-		URLResponder(LLTextureFetch* fetcher, const LLUUID& id)
-			: mFetcher(fetcher), mID(id)
-		{
-		}
-		~URLResponder()
-		{
-		}
-		virtual void error(U32 status, const std::string& reason)
-		{
-			mFetcher->lockQueue();
-			LLTextureFetchWorker* worker = mFetcher->getWorker(mID);
-			if (worker)
-			{
-// 				llwarns << "LLTextureFetchWorker::URLResponder::error " << status << ": " << reason << llendl;
- 				worker->callbackURLReceived(LLSD(), false);
-			}
-			mFetcher->unlockQueue();
-		}
-		virtual void result(const LLSD& content)
-		{
-			mFetcher->lockQueue();
-			LLTextureFetchWorker* worker = mFetcher->getWorker(mID);
-			if (worker)
-			{
- 				worker->callbackURLReceived(content, true);
-			}
-			mFetcher->unlockQueue();
-		}
-	private:
-		LLTextureFetch* mFetcher;
-		LLUUID mID;
-	};
-
-	class HTTPGetResponder : public LLHTTPClient::Responder
-	{
-	public:
-		HTTPGetResponder(LLTextureFetch* fetcher, const LLUUID& id)
-			: mFetcher(fetcher), mID(id)
-		{
-		}
-		~HTTPGetResponder()
-		{
-		}
-		virtual void completed(U32 status, const std::stringstream& content)
-		{
-			mFetcher->lockQueue();
-			LLTextureFetchWorker* worker = mFetcher->getWorker(mID);
-			if (worker)
-			{
-				const std::string& cstr = content.str();
-				if (200 <= status &&  status < 300)
-				{
-					if (203 == status) // partial information (i.e. last block)
-					{
-						worker->callbackHttpGet((U8*)cstr.c_str(), cstr.length(), true);
-					}
-					else
-					{
-						worker->callbackHttpGet((U8*)cstr.c_str(), cstr.length(), false);
-					}
-				}
-				else
-				{
-// 					llinfos << "LLTextureFetchWorker::HTTPGetResponder::error " << status << ": " << cstr << llendl;
-					worker->callbackHttpGet(NULL, -1, true);
-				}
-			}
-			mFetcher->unlockQueue();
-		}
-	private:
-		LLTextureFetch* mFetcher;
-		LLUUID mID;
-	};
-#endif
+	friend class LLTextureFetch;
+	friend class HTTPGetResponder;
 	
+private:
 	class CacheReadResponder : public LLTextureCache::ReadResponder
 	{
 	public:
@@ -179,20 +106,20 @@ friend class LLTextureFetch;
 		LLUUID mID;
 	};
 	
-	class DecodeResponder : public LLResponder
+	class DecodeResponder : public LLImageDecodeThread::Responder
 	{
 	public:
 		DecodeResponder(LLTextureFetch* fetcher, const LLUUID& id, LLTextureFetchWorker* worker)
 			: mFetcher(fetcher), mID(id), mWorker(worker)
 		{
 		}
-		virtual void completed(bool success)
+		virtual void completed(bool success, LLImageRaw* raw, LLImageRaw* aux)
 		{
 			mFetcher->lockQueue();
 			LLTextureFetchWorker* worker = mFetcher->getWorker(mID);
 			if (worker)
 			{
- 				worker->callbackDecoded(success);
+ 				worker->callbackDecoded(success, raw, aux);
 			}
 			mFetcher->unlockQueue();
 		}
@@ -227,37 +154,45 @@ friend class LLTextureFetch;
 	~LLTextureFetchWorker();
 	void relese() { --mActiveCount; }
 
+	void callbackHttpGet(const LLChannelDescriptors& channels,
+						 const LLIOPipe::buffer_ptr_t& buffer,
+						 bool last_block, bool success);
+	void callbackCacheRead(bool success, LLImageFormatted* image,
+						   S32 imagesize, BOOL islocal);
+	void callbackCacheWrite(bool success);
+	void callbackDecoded(bool success, LLImageRaw* raw, LLImageRaw* aux);
+	
+	void setGetStatus(U32 status, const std::string& reason)
+	{
+		mGetStatus = status;
+		mGetReason = reason;
+	}
+
 protected:
 	LLTextureFetchWorker(LLTextureFetch* fetcher, const LLUUID& id, const LLHost& host,
 						 F32 priority, S32 discard, S32 size);
+	LLTextureFetchWorker(LLTextureFetch* fetcher, const std::string& url, const LLUUID& id, const LLHost& host,
+						 F32 priority, S32 discard, S32 size);
 
 private:
 	/*virtual*/ void startWork(S32 param); // called from addWork() (MAIN THREAD)
 	/*virtual*/ void endWork(S32 param, bool aborted); // called from doWork() (MAIN THREAD)
 
-	virtual std::string getName() { return LLStringUtil::null; }
 	void resetFormattedData();
 	
 	void setImagePriority(F32 priority);
 	void setDesiredDiscard(S32 discard, S32 size);
 	bool insertPacket(S32 index, U8* data, S32 size);
 	void clearPackets();
+	void setupPacketData();
 	U32 calcWorkPriority();
 	void removeFromCache();
 	bool processSimulatorPackets();
-	bool decodeImage();
 	bool writeToCacheComplete();
 	
-	void lockWorkData() { mWorkMutex.lock(); }
-	void unlockWorkData() { mWorkMutex.unlock(); }
+	void lockWorkMutex() { mWorkMutex.lock(); }
+	void unlockWorkMutex() { mWorkMutex.unlock(); }
 
-	void callbackURLReceived(const LLSD& data, bool success);
-	void callbackHttpGet(U8* data, S32 data_size, bool last_block);
-	void callbackCacheRead(bool success, LLImageFormatted* image,
-						   S32 imagesize, BOOL islocal);
-	void callbackCacheWrite(bool success);
-	void callbackDecoded(bool success);
-	
 private:
 	enum e_state // mState
 	{
@@ -268,8 +203,8 @@ friend class LLTextureFetch;
 		CACHE_POST,
 		LOAD_FROM_NETWORK,
 		LOAD_FROM_SIMULATOR,
-		LOAD_FROM_HTTP_GET_URL,
-		LOAD_FROM_HTTP_GET_DATA,
+		SEND_HTTP_REQ,
+		WAIT_HTTP_REQ,
 		DECODE_IMAGE,
 		DECODE_IMAGE_UPDATE,
 		WRITE_TO_CACHE,
@@ -280,19 +215,17 @@ friend class LLTextureFetch;
 	{
 		UNSENT = 0,
 		QUEUED = 1,
-		SENT_SIM = 2,
-		SENT_URL = 3,
-		SENT_HTTP = 4
+		SENT_SIM = 2
 	};
 	static const char* sStateDescs[];
 	e_state mState;
 	LLTextureFetch* mFetcher;
-	LLImageWorker* mImageWorker;
 	LLPointer<LLImageFormatted> mFormattedImage;
 	LLPointer<LLImageRaw> mRawImage;
 	LLPointer<LLImageRaw> mAuxImage;
 	LLUUID mID;
 	LLHost mHost;
+	std::string mUrl;
 	U8 mType;
 	F32 mImagePriority;
 	U32 mWorkPriority;
@@ -314,15 +247,18 @@ friend class LLTextureFetch;
 	S32 mCachedSize;
 	BOOL mLoaded;
 	e_request_state mSentRequest;
+	handle_t mDecodeHandle;
 	BOOL mDecoded;
 	BOOL mWritten;
 	BOOL mNeedsAux;
 	BOOL mHaveAllData;
 	BOOL mInLocalCache;
+	S32 mHTTPFailCount;
 	S32 mRetryAttempt;
-	std::string mURL;
 	S32 mActiveCount;
-
+	U32 mGetStatus;
+	std::string mGetReason;
+	
 	// Work Data
 	LLMutex mWorkMutex;
 	struct PacketData
@@ -340,25 +276,79 @@ friend class LLTextureFetch;
 	U8 mImageCodec;
 };
 
-class LLTextureFetchLocalFileWorker : public LLTextureFetchWorker
-{
-friend class LLTextureFetch;
-
-protected:
-	LLTextureFetchLocalFileWorker(LLTextureFetch* fetcher, const std::string& filename, const LLUUID& id, const LLHost& host,
-						 F32 priority, S32 discard, S32 size)
-		:	LLTextureFetchWorker(fetcher, id, host, priority, discard, size),
-			mFileName(filename)
-	{}
+//////////////////////////////////////////////////////////////////////////////
 
-private:
-	/*virtual*/ std::string getName() { return mFileName; }
+class HTTPGetResponder : public LLCurl::Responder
+{
+	LOG_CLASS(HTTPGetResponder);
+public:
+	HTTPGetResponder(LLTextureFetch* fetcher, const LLUUID& id, U64 startTime, S32 requestedSize, U32 offset)
+		: mFetcher(fetcher), mID(id), mStartTime(startTime), mRequestedSize(requestedSize), mOffset(offset)
+	{
+	}
+	~HTTPGetResponder()
+	{
+	}
 
+	virtual void completedRaw(U32 status, const std::string& reason,
+							  const LLChannelDescriptors& channels,
+							  const LLIOPipe::buffer_ptr_t& buffer)
+	{
+		if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator")))
+		{
+			mFetcher->mTextureInfo.setRequestStartTime(mID, mStartTime);
+			U64 timeNow = LLTimer::getTotalTime();
+			mFetcher->mTextureInfo.setRequestType(mID, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+			mFetcher->mTextureInfo.setRequestSize(mID, mRequestedSize);
+			mFetcher->mTextureInfo.setRequestOffset(mID, mOffset);
+			mFetcher->mTextureInfo.setRequestCompleteTimeAndLog(mID, timeNow);
+		}
 
+		lldebugs << "HTTP COMPLETE: " << mID << llendl;
+		mFetcher->lockQueue();
+		LLTextureFetchWorker* worker = mFetcher->getWorker(mID);
+		if (worker)
+		{
+			bool success = false;
+			bool partial = false;
+			if (200 <= status &&  status < 300)
+			{
+				success = true;
+				if (203 == status) // partial information (i.e. last block)
+				{
+					partial = true;
+				}
+			}
+			else
+			{
+				worker->setGetStatus(status, reason);
+// 				llwarns << status << ": " << reason << llendl;
+			}
+			if (!success)
+			{
+				worker->setGetStatus(status, reason);
+// 				llwarns << "CURL GET FAILED, status:" << status << " reason:" << reason << llendl;
+			}
+			mFetcher->removeFromHTTPQueue(mID);
+			worker->callbackHttpGet(channels, buffer, partial, success);
+		}
+		else
+		{
+			mFetcher->removeFromHTTPQueue(mID);
+ 			llwarns << "Worker not found: " << mID << llendl;
+		}
+		mFetcher->unlockQueue();
+	}
+	
 private:
-	std::string mFileName;
+	LLTextureFetch* mFetcher;
+	LLUUID mID;
+	U64 mStartTime;
+	S32 mRequestedSize;
+	U32 mOffset;
 };
 
+//////////////////////////////////////////////////////////////////////////////
 
 //static
 const char* LLTextureFetchWorker::sStateDescs[] = {
@@ -368,8 +358,8 @@ const char* LLTextureFetchWorker::sStateDescs[] = {
 	"CACHE_POST",
 	"LOAD_FROM_NETWORK",
 	"LOAD_FROM_SIMULATOR",
-	"LOAD_FROM_HTTP_URL",
-	"LOAD_FROM_HTTP_DATA",
+	"SEND_HTTP_REQ",
+	"WAIT_HTTP_REQ",
 	"DECODE_IMAGE",
 	"DECODE_IMAGE_UPDATE",
 	"WRITE_TO_CACHE",
@@ -380,6 +370,7 @@ const char* LLTextureFetchWorker::sStateDescs[] = {
 // called from MAIN THREAD
 
 LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
+										   const std::string& url, // Optional URL
 										   const LLUUID& id,	// Image UUID
 										   const LLHost& host,	// Simulator host
 										   F32 priority,		// Priority
@@ -388,9 +379,9 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
 	: LLWorkerClass(fetcher, "TextureFetch"),
 	  mState(INIT),
 	  mFetcher(fetcher),
-	  mImageWorker(NULL),
 	  mID(id),
 	  mHost(host),
+	  mUrl(url),
 	  mImagePriority(priority),
 	  mWorkPriority(0),
 	  mRequestedPriority(0.f),
@@ -404,18 +395,21 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
 	  mBuffer(NULL),
 	  mBufferSize(0),
 	  mRequestedSize(0),
-	  mDesiredSize(FIRST_PACKET_SIZE),
+	  mDesiredSize(TEXTURE_CACHE_ENTRY_SIZE),
 	  mFileSize(0),
 	  mCachedSize(0),
 	  mLoaded(FALSE),
 	  mSentRequest(UNSENT),
+	  mDecodeHandle(0),
 	  mDecoded(FALSE),
 	  mWritten(FALSE),
 	  mNeedsAux(FALSE),
 	  mHaveAllData(FALSE),
 	  mInLocalCache(FALSE),
+	  mHTTPFailCount(0),
 	  mRetryAttempt(0),
 	  mActiveCount(0),
+	  mGetStatus(0),
 	  mWorkMutex(NULL),
 	  mFirstPacket(0),
 	  mLastPacket(-1),
@@ -440,7 +434,7 @@ LLTextureFetchWorker::~LLTextureFetchWorker()
 // 			<< " Requested=" << mRequestedDiscard
 // 			<< " Desired=" << mDesiredDiscard << llendl;
 	llassert_always(!haveWork());
-	lockWorkData();
+	lockWorkMutex();
 	if (mCacheReadHandle != LLTextureCache::nullHandle())
 	{
 		mFetcher->mTextureCache->readComplete(mCacheReadHandle, true);
@@ -449,13 +443,9 @@ LLTextureFetchWorker::~LLTextureFetchWorker()
 	{
 		mFetcher->mTextureCache->writeComplete(mCacheWriteHandle, true);
 	}
-	if (mImageWorker)
-	{
-		mImageWorker->scheduleDelete();
-	}
 	mFormattedImage = NULL;
 	clearPackets();
-	unlockWorkData();
+	unlockWorkMutex();
 }
 
 void LLTextureFetchWorker::clearPackets()
@@ -467,6 +457,38 @@ void LLTextureFetchWorker::clearPackets()
 	mFirstPacket = 0;
 }
 
+void LLTextureFetchWorker::setupPacketData()
+{
+	S32 data_size = 0;
+	if (mFormattedImage.notNull())
+	{
+		data_size = mFormattedImage->getDataSize();
+	}
+	if (data_size > 0)
+	{
+		// Only used for simulator requests
+		mFirstPacket = (data_size - FIRST_PACKET_SIZE) / MAX_IMG_PACKET_SIZE + 1;
+		if (FIRST_PACKET_SIZE + (mFirstPacket-1) * MAX_IMG_PACKET_SIZE != data_size)
+		{
+			llwarns << "Bad CACHED TEXTURE size: " << data_size << " removing." << llendl;
+			removeFromCache();
+			resetFormattedData();
+			clearPackets();
+		}
+		else if (mFileSize > 0)
+		{
+			mLastPacket = mFirstPacket-1;
+			mTotalPackets = (mFileSize - FIRST_PACKET_SIZE + MAX_IMG_PACKET_SIZE-1) / MAX_IMG_PACKET_SIZE + 1;
+		}
+		else
+		{
+			// This file was cached using HTTP so we have to refetch the first packet
+			resetFormattedData();
+			clearPackets();
+		}
+	}
+}
+
 U32 LLTextureFetchWorker::calcWorkPriority()
 {
 // 	llassert_always(mImagePriority >= 0 && mImagePriority <= LLViewerTexture::maxDecodePriority());
@@ -538,7 +560,6 @@ void LLTextureFetchWorker::resetFormattedData()
 // Called from MAIN thread
 void LLTextureFetchWorker::startWork(S32 param)
 {
-	llassert(mImageWorker == NULL);
 	llassert(mFormattedImage.isNull());
 }
 
@@ -549,6 +570,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
 {
 	LLMutexLock lock(&mWorkMutex);
 
+	if ((mFetcher->isQuitting() || getFlags(LLWorkerClass::WCF_DELETE_REQUESTED)))
+	{
+		if (mState < WRITE_TO_CACHE)
+		{
+			return true; // abort
+		}
+	}
+	
 	if (mFetcher->mDebugPause)
 	{
 		return false; // debug: don't do any work
@@ -563,16 +592,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		mFetchTimer.reset();
 	}
 
-	if (mImagePriority <= 0.0f)
-	{
-		if (mState < WRITE_TO_CACHE)
-		{
-			return true; // cancel request
-		}
-	}
-	
 	if (mState == INIT)
 	{
+		mRawImage = NULL ;
 		mRequestedDiscard = -1;
 		mLoadedDiscard = -1;
 		mDecodedDiscard = -1;
@@ -590,8 +612,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		clearPackets(); // TODO: Shouldn't be necessary
 		mCacheReadHandle = LLTextureCache::nullHandle();
 		mCacheWriteHandle = LLTextureCache::nullHandle();
-		mURL.clear();
 		mState = LOAD_FROM_TEXTURE_CACHE;
+		LL_DEBUGS("Texture") << mID << ": Priority: " << llformat("%8.0f",mImagePriority)
+							 << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
 		// fall through
 	}
 
@@ -612,16 +635,27 @@ bool LLTextureFetchWorker::doWork(S32 param)
 			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
 
 			CacheReadResponder* responder = new CacheReadResponder(mFetcher, mID, mFormattedImage);
-			if (getName().empty())
+			if (mUrl.compare(0, 7, "file://") == 0)
+			{
+				// read file from local disk
+				std::string filename = mUrl.substr(7, std::string::npos);
+				mCacheReadHandle = mFetcher->mTextureCache->readFromCache(filename, mID, cache_priority,
+																		  offset, size, responder);
+			}
+			else if (mUrl.empty())
 			{
 				mCacheReadHandle = mFetcher->mTextureCache->readFromCache(mID, cache_priority,
 																		  offset, size, responder);
 			}
 			else
 			{
-				// read file from local disk
-				mCacheReadHandle = mFetcher->mTextureCache->readFromCache(getName(), mID, cache_priority,
-																		  offset, size, responder);
+				if (!(mUrl.compare(0, 7, "http://") == 0))
+				{
+					// *TODO:?remove this warning
+					llwarns << "Unknown URL Type: " << mUrl << llendl;
+				}
+				setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
+				mState = SEND_HTTP_REQ;
 			}
 		}
 
@@ -647,75 +681,101 @@ bool LLTextureFetchWorker::doWork(S32 param)
 
 	if (mState == CACHE_POST)
 	{
-		mDesiredSize = llmax(mDesiredSize, FIRST_PACKET_SIZE);
+		mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE);
 		mCachedSize = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0;
 		// Successfully loaded
 		if ((mCachedSize >= mDesiredSize) || mHaveAllData)
 		{
 			// we have enough data, decode it
 			llassert_always(mFormattedImage->getDataSize() > 0);
+			mLoadedDiscard = mDesiredDiscard;
 			mState = DECODE_IMAGE;
+			LL_DEBUGS("Texture") << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize()
+								 << " Size: " << llformat("%dx%d",mFormattedImage->getWidth(),mFormattedImage->getHeight())
+								 << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
 			// fall through
 		}
 		else
 		{
-			if (!getName().empty())
+			if (mUrl.compare(0, 7, "file://") == 0)
 			{
 				// failed to load local file, we're done.
 				return true;
 			}
 			// need more data
-			mState = LOAD_FROM_NETWORK;
+			else
+			{
+				LL_DEBUGS("Texture") << mID << ": Not in Cache" << LL_ENDL;
+				mState = LOAD_FROM_NETWORK;
+			}
 			// fall through
 		}
 	}
 
 	if (mState == LOAD_FROM_NETWORK)
 	{
-		if (mSentRequest == UNSENT)
+		bool get_url = gSavedSettings.getBOOL("ImagePipelineUseHTTP");
+		if (!mUrl.empty()) get_url = false;
+// 		if (mHost != LLHost::invalid) get_url = false;
+		if ( get_url )
 		{
-			if (mFormattedImage.isNull())
-			{
-				mFormattedImage = new LLImageJ2C;
-			}
-			// Add this to the network queue and sit here.
-			// LLTextureFetch::update() will send off a request which will change our state
-			S32 data_size = mFormattedImage->getDataSize();
-			if (data_size > 0)
+			LLViewerRegion* region = NULL;
+			if (mHost == LLHost::invalid)
+				region = gAgent.getRegion();
+			else
+				region = LLWorld::getInstance()->getRegion(mHost);
+
+			if (region)
 			{
-				// Only used for simulator requests
-				mFirstPacket = (data_size - FIRST_PACKET_SIZE) / MAX_IMG_PACKET_SIZE + 1;
-				if (FIRST_PACKET_SIZE + (mFirstPacket-1) * MAX_IMG_PACKET_SIZE != data_size)
-				{
-// 					llwarns << "Bad CACHED TEXTURE size: " << data_size << " removing." << llendl;
-					removeFromCache();
-					resetFormattedData();
-					clearPackets();
-				}
-				else
+				std::string http_url = region->getCapability("GetTexture");
+				if (!http_url.empty())
 				{
-					mLastPacket = mFirstPacket-1;
-					mTotalPackets = (mFileSize - FIRST_PACKET_SIZE + MAX_IMG_PACKET_SIZE-1) / MAX_IMG_PACKET_SIZE + 1;
+					mUrl = http_url + "/?texture_id=" + mID.asString().c_str();
 				}
 			}
+			else
+			{
+				llwarns << "Region not found for host: " << mHost << llendl;
+			}
+		}
+		if (!mUrl.empty())
+		{
+			mState = LLTextureFetchWorker::SEND_HTTP_REQ;
+			setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
+			// don't return, fall through to next state
+		}
+		else if (mSentRequest == UNSENT)
+		{
+			// Add this to the network queue and sit here.
+			// LLTextureFetch::update() will send off a request which will change our state
 			mRequestedSize = mDesiredSize;
 			mRequestedDiscard = mDesiredDiscard;
 			mSentRequest = QUEUED;
-			mFetcher->lockQueue();
 			mFetcher->addToNetworkQueue(this);
-			mFetcher->unlockQueue();
 			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
+			return false;
+		}
+		else
+		{
+			// Shouldn't need to do anything here
+			//llassert_always(mFetcher->mNetworkQueue.find(mID) != mFetcher->mNetworkQueue.end());
+			// Make certain this is in the network queue
+			//mFetcher->addToNetworkQueue(this);
+			//setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
+			return false;
 		}
-		return false;
 	}
 	
 	if (mState == LOAD_FROM_SIMULATOR)
 	{
+		if (mFormattedImage.isNull())
+		{
+			mFormattedImage = new LLImageJ2C;
+		}
 		if (processSimulatorPackets())
 		{
-			mFetcher->lockQueue();
-			mFetcher->removeFromNetworkQueue(this);
-			mFetcher->unlockQueue();
+			LL_DEBUGS("Texture") << mID << ": Loaded from Sim. Bytes: " << mFormattedImage->getDataSize() << LL_ENDL;
+			mFetcher->removeFromNetworkQueue(this, false);
 			if (mFormattedImage.isNull() || !mFormattedImage->getDataSize())
 			{
 				// processSimulatorPackets() failed
@@ -727,108 +787,99 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		}
 		else
 		{
+			mFetcher->addToNetworkQueue(this); // failsafe
 			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
 		}
 		return false;
 	}
 	
-#if 0
-	if (mState == LOAD_FROM_HTTP_GET_URL)
-	{
-		if (!mSentRequest)
-		{
-			mSentRequest = TRUE;
-			mLoaded = FALSE;
-			std::string url;
-			LLViewerRegion* region = gAgent.getRegion();
-			if (region)
+	if (mState == SEND_HTTP_REQ)
+	{
+		{
+			const S32 HTTP_QUEUE_MAX_SIZE = 32;
+			// *TODO: Integrate this with llviewerthrottle
+			// Note: LLViewerThrottle uses dynamic throttling which makes sense for UDP,
+			// but probably not for Textures.
+			// Set the throttle to the entire bandwidth, assuming UDP packets will get priority
+			// when they are needed
+			F32 max_bandwidth = mFetcher->mMaxBandwidth;
+			if ((mFetcher->getHTTPQueueSize() >= HTTP_QUEUE_MAX_SIZE) ||
+				(mFetcher->getTextureBandwidth() > max_bandwidth))
 			{
-				url = region->getCapability("RequestTextureDownload");
-			}
-			if (!url.empty())
-			{
-				LLSD sd;
-				sd = mID.asString();
-				setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
-				LLHTTPClient::post(url, sd, new URLResponder(mFetcher, mID));
+				// Make normal priority and return (i.e. wait until there is room in the queue)
+				setPriority(LLWorkerThread::PRIORITY_NORMAL | mWorkPriority);
 				return false;
 			}
-			else
-			{
-// 				llwarns << mID << ": HTTP get url failed, requesting from simulator" << llendl;
-				mSentRequest = FALSE;
-				mState = LOAD_FROM_SIMULATOR;
-				return false;
-			}
-		}
-		else
-		{
-			if (mLoaded)
+			
+			mFetcher->removeFromNetworkQueue(this, false);
+			
+			S32 cur_size = 0;
+			if (mFormattedImage.notNull())
 			{
-				if (!mURL.empty())
-				{
-					mState = LOAD_FROM_HTTP_GET_DATA;
-					mSentRequest = FALSE; // reset
-					mLoaded = FALSE; // reset
-				}
-				else
-				{
-// 					llwarns << mID << ": HTTP get url is empty, requesting from simulator" << llendl;
-					mSentRequest = FALSE;
-					mState = LOAD_FROM_SIMULATOR;
-					return false;
-				}
+				cur_size = mFormattedImage->getDataSize(); // amount of data we already have
 			}
-		}
-		// fall through
-	}
-	
-	if (mState == LOAD_FROM_HTTP_GET_DATA)
-	{
-		if (!mSentRequest)
-		{
-			mSentRequest = TRUE;
-			S32 cur_size = mFormattedImage->getDataSize(); // amount of data we already have
 			mRequestedSize = mDesiredSize;
 			mRequestedDiscard = mDesiredDiscard;
-#if 1 // *TODO: LLCurl::getByteRange is broken (ignores range)
-			cur_size = 0;
-			mFormattedImage->deleteData();
-#endif
 			mRequestedSize -= cur_size;
-			// 			  F32 priority = mImagePriority / (F32)LLViewerTexture::maxDecodePriority(); // 0-1
 			S32 offset = cur_size;
 			mBufferSize = cur_size; // This will get modified by callbackHttpGet()
-			std::string url;
-			if (mURL.empty())
+			
+			bool res = false;
+			if (!mUrl.empty())
 			{
-				//url = "http://asset.agni/0000002f-38ae-0e17-8e72-712e58964e9c.texture";
-				std::stringstream urlstr;
-				urlstr << "http://asset.agni/" << mID.asString() << ".texture";
-				url = urlstr.str();
+				mLoaded = FALSE;
+				mGetStatus = 0;
+				mGetReason.clear();
+				lldebugs << "HTTP GET: " << mID << " Offset: " << offset
+						<< " Bytes: " << mRequestedSize
+						<< " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << max_bandwidth
+						<< llendl;
+				setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
+				mState = WAIT_HTTP_REQ;	
+
+				mFetcher->addToHTTPQueue(mID);
+				// Will call callbackHttpGet when curl request completes
+				std::vector<std::string> headers;
+				headers.push_back("Accept: image/x-j2c");
+				res = mFetcher->mCurlGetRequest->getByteRange(mUrl, headers, offset, mRequestedSize,
+															  new HTTPGetResponder(mFetcher, mID, LLTimer::getTotalTime(), mRequestedSize, offset));
 			}
-			else
+			if (!res)
 			{
-				url = mURL;
+				llwarns << "HTTP GET request failed for " << mID << llendl;
+				resetFormattedData();
+				++mHTTPFailCount;
+				return true; // failed
 			}
-			mLoaded = FALSE;
-// 			llinfos << "HTTP GET: " << mID << " Offset: " << offset << " Bytes: " << mRequestedSize << llendl;
-			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
-			LLCurl::getByteRange(url, offset, mRequestedSize,
-								 new HTTPGetResponder(mFetcher, mID)); // *TODO: use mWorkPriority
-			return false; // not done
+			// fall through
 		}
-
+	}
+	
+	if (mState == WAIT_HTTP_REQ)
+	{
 		if (mLoaded)
 		{
-			S32 cur_size = mFormattedImage->getDataSize();
+			S32 cur_size = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0;
 			if (mRequestedSize < 0)
 			{
-// 				llwarns << "http get failed for: " << mID << llendl;
+				const S32 HTTP_MAX_RETRY_COUNT = 3;
+				S32 max_attempts = (mGetStatus == HTTP_NOT_FOUND) ? 1 : HTTP_MAX_RETRY_COUNT + 1;
+ 				llinfos << "HTTP GET failed for: " << mUrl
+						<< " Status: " << mGetStatus << " Reason: '" << mGetReason << "'"
+						<< " Attempt:" << mHTTPFailCount+1 << "/" << max_attempts << llendl;
 				if (cur_size == 0)
 				{
-					resetFormattedData();
-					return true; // failed
+					++mHTTPFailCount;
+					if (mHTTPFailCount >= max_attempts)
+					{
+						resetFormattedData();
+						return true; // failed
+					}
+					else
+					{
+						mState = SEND_HTTP_REQ;
+						return false; // retry
+					}
 				}
 				else
 				{
@@ -836,6 +887,18 @@ bool LLTextureFetchWorker::doWork(S32 param)
 					return false; // use what we have
 				}
 			}
+			
+			if (mFormattedImage.isNull())
+			{
+				// For now, create formatted image based on extension
+				std::string extension = gDirUtilp->getExtension(mUrl);
+				mFormattedImage = LLImageFormatted::createFromType(LLImageBase::getCodecFromExtension(extension));
+				if (mFormattedImage.isNull())
+				{
+					mFormattedImage = new LLImageJ2C; // default
+				}
+			}
+			
 			llassert_always(mBufferSize == cur_size + mRequestedSize);
 			if (mHaveAllData)
 			{
@@ -854,43 +917,51 @@ bool LLTextureFetchWorker::doWork(S32 param)
 			mBuffer = NULL;
 			mBufferSize = 0;
 			mLoadedDiscard = mRequestedDiscard;
-			setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
 			mState = DECODE_IMAGE;
+			setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
+			return false;
+		}
+		else
+		{
+			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
 			return false;
 		}
-
-		// NOTE: Priority gets updated when the http get completes (in callbackHTTPGet())
-		setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
-		return false;
 	}
-#endif
 	
 	if (mState == DECODE_IMAGE)
 	{
-		llassert_always(mFormattedImage->getDataSize() > 0);
+		if (mFormattedImage->getDataSize() <= 0)
+		{
+			llerrs << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl;
+		}
 		setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
 		mRawImage = NULL;
 		mAuxImage = NULL;
-		llassert_always(mImageWorker == NULL);
 		llassert_always(mFormattedImage.notNull());
+		llassert_always(mLoadedDiscard >= 0);
 		S32 discard = mHaveAllData ? 0 : mLoadedDiscard;
 		U32 image_priority = LLWorkerThread::PRIORITY_NORMAL | mWorkPriority;
 		mDecoded  = FALSE;
 		mState = DECODE_IMAGE_UPDATE;
-		mImageWorker = new LLImageWorker(mFormattedImage, image_priority, discard, new DecodeResponder(mFetcher, mID, this));
-		// fall though (need to call requestDecodedData() to start work)
+		LL_DEBUGS("Texture") << mID << ": Decoding. Bytes: " << mFormattedImage->getDataSize() << " Discard: " << discard
+				<< " All Data: " << mHaveAllData << LL_ENDL;
+		mDecodeHandle = mFetcher->mImageDecodeThread->decodeImage(mFormattedImage, image_priority, discard, mNeedsAux,
+																  new DecodeResponder(mFetcher, mID, this));
+		// fall though
 	}
 	
 	if (mState == DECODE_IMAGE_UPDATE)
 	{
-		if (decodeImage())
+		if (mDecoded)
 		{
 			if (mDecodedDiscard < 0)
 			{
+				LL_DEBUGS("Texture") << mID << ": Failed to Decode." << LL_ENDL;
 				if (mCachedSize > 0 && !mInLocalCache && mRetryAttempt == 0)
 				{
 					// Cache file should be deleted, try again
 // 					llwarns << mID << ": Decode of cached file failed (removed), retrying" << llendl;
+					llassert_always(mDecodeHandle == 0);
 					mFormattedImage = NULL;
 					++mRetryAttempt;
 					setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
@@ -905,6 +976,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
 			}
 			else
 			{
+				llassert_always(mRawImage.notNull());
+				LL_DEBUGS("Texture") << mID << ": Decoded. Discard: " << mDecodedDiscard
+						<< " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
 				setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
 				mState = WRITE_TO_CACHE;
 			}
@@ -918,9 +992,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
 
 	if (mState == WRITE_TO_CACHE)
 	{
-		if (mInLocalCache || !mFileSize || mSentRequest == UNSENT)
+		if (mInLocalCache || mSentRequest == UNSENT || mFormattedImage.isNull())
 		{
-			// If we're in a local cache or we didn't actually receive any new data, skip
+			// If we're in a local cache or we didn't actually receive any new data,
+			// or we failed to load anything, skip
 			mState = DONE;
 			return false;
 		}
@@ -979,10 +1054,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
 // Called from MAIN thread
 void LLTextureFetchWorker::endWork(S32 param, bool aborted)
 {
-	if (mImageWorker)
+	if (mDecodeHandle != 0)
 	{
-		mImageWorker->scheduleDelete();
-		mImageWorker = NULL;
+		mFetcher->mImageDecodeThread->abortRequest(mDecodeHandle, false);
+		mDecodeHandle = 0;
 	}
 	mFormattedImage = NULL;
 }
@@ -1035,7 +1110,7 @@ bool LLTextureFetchWorker::deleteOK()
 
 	if ((haveWork() &&
 		 // not ok to delete from these states
-		 ((mState >= LOAD_FROM_HTTP_GET_URL && mState <= LOAD_FROM_HTTP_GET_DATA) ||
+		 ((mState >= SEND_HTTP_REQ && mState <= WAIT_HTTP_REQ) ||
 		  (mState >= WRITE_TO_CACHE && mState <= WAIT_ON_WRITE))))
 	{
 		delete_ok = false;
@@ -1044,7 +1119,6 @@ bool LLTextureFetchWorker::deleteOK()
 	return delete_ok;
 }
 
-
 void LLTextureFetchWorker::removeFromCache()
 {
 	if (!mInLocalCache)
@@ -1061,6 +1135,7 @@ bool LLTextureFetchWorker::processSimulatorPackets()
 	if (mFormattedImage.isNull() || mRequestedSize < 0)
 	{
 		// not sure how we got here, but not a valid state, abort!
+		llassert_always(mDecodeHandle == 0);
 		mFormattedImage = NULL;
 		return true;
 	}
@@ -1074,6 +1149,12 @@ bool LLTextureFetchWorker::processSimulatorPackets()
 			buffer_size += mPackets[i]->mSize;
 		}
 		bool have_all_data = mLastPacket >= mTotalPackets-1;
+		if (mRequestedSize <= 0)
+		{
+			// We received a packed but haven't requested anything yet (edge case)
+			// Return true (we're "done") since we didn't request anything
+			return true;
+		}
 		if (buffer_size >= mRequestedSize || have_all_data)
 		{
 			/// We have enough (or all) data
@@ -1109,50 +1190,36 @@ bool LLTextureFetchWorker::processSimulatorPackets()
 
 //////////////////////////////////////////////////////////////////////////////
 
-void LLTextureFetchWorker::callbackURLReceived(const LLSD& data, bool success)
+void LLTextureFetchWorker::callbackHttpGet(const LLChannelDescriptors& channels,
+										   const LLIOPipe::buffer_ptr_t& buffer,
+										   bool last_block, bool success)
 {
-#if 0
 	LLMutexLock lock(&mWorkMutex);
-	if (!mSentRequest || mState != LOAD_FROM_HTTP_GET_URL)
-	{
-		llwarns << "callbackURLReceived for unrequested fetch worker, req="
-				<< mSentRequest << " state= " << mState << llendl;
-		return;
-	}
-	if (success)
-	{
-		mURL = data.asString();
-	}
-	mLoaded = TRUE;
-	setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
-#endif
-}
-
-//////////////////////////////////////////////////////////////////////////////
 
-void LLTextureFetchWorker::callbackHttpGet(U8* data, S32 data_size, bool last_block)
-{
-#if 0
-	LLMutexLock lock(&mWorkMutex);
-	if (!mSentRequest || mState != LOAD_FROM_HTTP_GET_DATA)
+	if (mState != WAIT_HTTP_REQ)
 	{
-		llwarns << "callbackHttpGet for unrequested fetch worker, req="
-				<< mSentRequest << " state= " << mState << llendl;
+		llwarns << "callbackHttpGet for unrequested fetch worker: " << mID
+				<< " req=" << mSentRequest << " state= " << mState << llendl;
 		return;
 	}
-// 	llinfos << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << llendl;
 	if (mLoaded)
 	{
 		llwarns << "Duplicate callback for " << mID.asString() << llendl;
 		return; // ignore duplicate callback
 	}
-	if (data_size >= 0)
+	if (success)
 	{
+		// get length of stream:
+		S32 data_size = buffer->countAfter(channels.in(), NULL);
+
+		gTextureList.sTextureBits += data_size * 8; // Approximate - does not include header bits
+	
+		//llinfos << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << llendl;
 		if (data_size > 0)
 		{
+			// *TODO: set the formatted image data here directly to avoid the copy
 			mBuffer = new U8[data_size];
-			// *TODO: set the formatted image data here
-			memcpy(mBuffer, data, data_size);
+			buffer->readAfter(channels.in(), NULL, mBuffer, data_size);
 			mBufferSize += data_size;
 			if (data_size < mRequestedSize || last_block == true)
 			{
@@ -1160,10 +1227,11 @@ void LLTextureFetchWorker::callbackHttpGet(U8* data, S32 data_size, bool last_bl
 			}
 			else if (data_size > mRequestedSize)
 			{
-				// *TODO: This will happen until we fix LLCurl::getByteRange()
-// 				llinfos << "HUH?" << llendl;
+				// *TODO: This shouldn't be happening any more
+				llwarns << "data_size = " << data_size << " > requested: " << mRequestedSize << llendl;
 				mHaveAllData = TRUE;
-				mFormattedImage->deleteData();
+				llassert_always(mDecodeHandle == 0);
+				mFormattedImage = NULL; // discard any previous data we had
 				mBufferSize = data_size;
 			}
 		}
@@ -1181,7 +1249,6 @@ void LLTextureFetchWorker::callbackHttpGet(U8* data, S32 data_size, bool last_bl
 	}
 	mLoaded = TRUE;
 	setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
-#endif
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1197,7 +1264,7 @@ void LLTextureFetchWorker::callbackCacheRead(bool success, LLImageFormatted* ima
 	}
 	if (success)
 	{
-		llassert_always(imagesize > 0);
+		llassert_always(imagesize >= 0);
 		mFileSize = imagesize;
 		mFormattedImage = image;
 		mImageCodec = image->getCodec();
@@ -1225,65 +1292,40 @@ void LLTextureFetchWorker::callbackCacheWrite(bool success)
 
 //////////////////////////////////////////////////////////////////////////////
 
-void LLTextureFetchWorker::callbackDecoded(bool success)
+void LLTextureFetchWorker::callbackDecoded(bool success, LLImageRaw* raw, LLImageRaw* aux)
 {
+	LLMutexLock lock(&mWorkMutex);
+	if (mDecodeHandle == 0)
+	{
+		return; // aborted, ignore
+	}
 	if (mState != DECODE_IMAGE_UPDATE)
 	{
 // 		llwarns << "Decode callback for " << mID << " with state = " << mState << llendl;
+		mDecodeHandle = 0;
 		return;
 	}
-// 	llinfos << mID << " : DECODE COMPLETE " << llendl;
-	setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-bool LLTextureFetchWorker::decodeImage()
-{
-	if(!mImageWorker)
-	{
-		//LLTextureFetchWorker is aborted, skip image decoding.
-		return true ;
-	}
-
-	bool res = true;
-	if (mRawImage.isNull())
-	{
-		res = false;
-		if (mImageWorker->requestDecodedData(mRawImage, -1))
-		{
-			res = true;
-// 			llinfos << mID << " : BASE DECODE FINISHED" << llendl;
-		}
-	}
-	if (res &&
-		(mRawImage.notNull() && mRawImage->getDataSize() > 0) &&
-		(mNeedsAux && mAuxImage.isNull()))
+	llassert_always(mFormattedImage.notNull());
+	
+	mDecodeHandle = 0;
+	if (success)
 	{
-		res = false;
-		if (mImageWorker->requestDecodedAuxData(mAuxImage, 4, -1))
-		{
-			res = true;
-// 			llinfos << mID << " : AUX DECODE FINISHED" << llendl;
-		}
+		llassert_always(raw);
+		mRawImage = raw;
+		mAuxImage = aux;
+		mDecodedDiscard = mFormattedImage->getDiscardLevel();
+ 		LL_DEBUGS("Texture") << mID << ": Decode Finished. Discard: " << mDecodedDiscard
+							 << " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
 	}
-	if (res)
+	else
 	{
-		if ((mRawImage.notNull() && mRawImage->getDataSize() > 0) &&
-			(!mNeedsAux || (mAuxImage.notNull() && mAuxImage->getDataSize() > 0)))
-		{
-			mDecodedDiscard = mFormattedImage->getDiscardLevel();
-// 			llinfos << mID << " : DECODE FINISHED. DISCARD: " << mDecodedDiscard << llendl;
-		}
-		else
-		{
-// 			llwarns << "DECODE FAILED: " << mID << " Discard: " << (S32)mFormattedImage->getDiscardLevel() << llendl;
-			removeFromCache();
-		}
-		mImageWorker->scheduleDelete();
-		mImageWorker = NULL;
+		llwarns << "DECODE FAILED: " << mID << " Discard: " << (S32)mFormattedImage->getDiscardLevel() << llendl;
+		removeFromCache();
+		mDecodedDiscard = -1; // Redundant, here for clarity and paranoia
 	}
-	return res;
+	mDecoded = TRUE;
+// 	llinfos << mID << " : DECODE COMPLETE " << llendl;
+	setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1314,15 +1356,21 @@ bool LLTextureFetchWorker::writeToCacheComplete()
 //////////////////////////////////////////////////////////////////////////////
 // public
 
-LLTextureFetch::LLTextureFetch(LLTextureCache* cache, bool threaded)
+LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* imagedecodethread, bool threaded)
 	: LLWorkerThread("TextureFetch", threaded),
 	  mDebugCount(0),
 	  mDebugPause(FALSE),
 	  mPacketCount(0),
 	  mBadPacketCount(0),
 	  mQueueMutex(getAPRPool()),
-	  mTextureCache(cache)
+	  mNetworkQueueMutex(getAPRPool()),
+	  mTextureCache(cache),
+	  mImageDecodeThread(imagedecodethread),
+	  mTextureBandwidth(0),
+	  mCurlGetRequest(NULL)
 {
+	mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
+	mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), gSavedSettings.getU32("TextureLoggingThreshold"));
 }
 
 LLTextureFetch::~LLTextureFetch()
@@ -1330,13 +1378,7 @@ LLTextureFetch::~LLTextureFetch()
 	// ~LLQueuedThread() called here
 }
 
-bool LLTextureFetch::createRequest(const LLUUID& id, const LLHost& host, F32 priority,
-									S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux)
-{
-	return createRequest(LLStringUtil::null, id, host, priority, w, h, c, desired_discard, needs_aux);
-}
-
-bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id, const LLHost& host, F32 priority,
+bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, const LLHost& host, F32 priority,
 								   S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux)
 {
 	if (mDebugPause)
@@ -1361,7 +1403,14 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id
 	}
 
 	S32 desired_size;
-	if (desired_discard == 0)
+	std::string exten = gDirUtilp->getExtension(url);
+	if (!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C))
+	{
+		// Only do partial requests for J2C at the moment
+		//llinfos << "Merov : LLTextureFetch::createRequest(), blocking fetch on " << url << llendl; 
+		desired_size = MAX_IMAGE_DATA_SIZE;
+	}
+	else if (desired_discard == 0)
 	{
 		// if we want the entire image, and we know its size, then get it all
 		// (calcDataSizeJ2C() below makes assumptions about how the image
@@ -1378,7 +1427,7 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id
 	}
 	else
 	{
-		desired_size = FIRST_PACKET_SIZE;
+		desired_size = TEXTURE_CACHE_ENTRY_SIZE;
 		desired_discard = MAX_DISCARD_LEVEL;
 	}
 
@@ -1389,10 +1438,10 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id
 		{
 			return false; // need to wait for previous aborted request to complete
 		}
-		worker->lockWorkData();
+		worker->lockWorkMutex();
 		worker->setImagePriority(priority);
 		worker->setDesiredDiscard(desired_discard, desired_size);
-		worker->unlockWorkData();
+		worker->unlockWorkMutex();
 		if (!worker->haveWork())
 		{
 			worker->mState = LLTextureFetchWorker::INIT;
@@ -1401,16 +1450,7 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id
 	}
 	else
 	{
-		if (filename.empty())
-		{
-			// do remote fetch
-			worker = new LLTextureFetchWorker(this, id, host, priority, desired_discard, desired_size);
-		}
-		else
-		{
-			// do local file fetch
-			worker = new LLTextureFetchLocalFileWorker(this, filename, id, host, priority, desired_discard, desired_size);
-		}
+		worker = new LLTextureFetchWorker(this, url, id, host, priority, desired_discard, desired_size);
 		mRequestMap[id] = worker;
 	}
 	worker->mActiveCount++;
@@ -1430,10 +1470,9 @@ void LLTextureFetch::deleteRequest(const LLUUID& id, bool cancel)
 }
 
 // protected
-
-// call lockQueue() first!
 void LLTextureFetch::addToNetworkQueue(LLTextureFetchWorker* worker)
 {
+	LLMutexLock lock(&mNetworkQueueMutex);
 	if (mRequestMap.find(worker->mID) != mRequestMap.end())
 	{
 		// only add to the queue if in the request map
@@ -1447,10 +1486,27 @@ void LLTextureFetch::addToNetworkQueue(LLTextureFetchWorker* worker)
 	}
 }
 
-// call lockQueue() first!
-void LLTextureFetch::removeFromNetworkQueue(LLTextureFetchWorker* worker)
+void LLTextureFetch::removeFromNetworkQueue(LLTextureFetchWorker* worker, bool cancel)
 {
-	mNetworkQueue.erase(worker->mID);
+	LLMutexLock lock(&mNetworkQueueMutex);
+	size_t erased = mNetworkQueue.erase(worker->mID);
+	if (cancel && erased > 0)
+	{
+		mCancelQueue[worker->mHost].insert(worker->mID);
+	}
+}
+
+// protected
+void LLTextureFetch::addToHTTPQueue(const LLUUID& id)
+{
+	LLMutexLock lock(&mNetworkQueueMutex);
+	mHTTPTextureQueue.insert(id);
+}
+
+void LLTextureFetch::removeFromHTTPQueue(const LLUUID& id)
+{
+	LLMutexLock lock(&mNetworkQueueMutex);
+	mHTTPTextureQueue.erase(id);
 }
 
 // call lockQueue() first!
@@ -1458,11 +1514,7 @@ void LLTextureFetch::removeRequest(LLTextureFetchWorker* worker, bool cancel)
 {
 	size_t erased_1 = mRequestMap.erase(worker->mID);
 	llassert_always(erased_1 > 0) ;
-	size_t erased = mNetworkQueue.erase(worker->mID);
-	if (cancel && erased > 0)
-	{
-		mCancelQueue[worker->mHost].insert(worker->mID);
-	}
+	removeFromNetworkQueue(worker, cancel);
 	llassert_always(!(worker->getFlags(LLWorkerClass::WCF_DELETE_REQUESTED))) ;
 
 	worker->scheduleDelete();	
@@ -1504,24 +1556,27 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level,
 		}
 		else if (worker->checkWork())
 		{
+			worker->lockWorkMutex();
 			discard_level = worker->mDecodedDiscard;
-			raw = worker->mRawImage; worker->mRawImage = NULL;
-			aux = worker->mAuxImage; worker->mAuxImage = NULL;
+			raw = worker->mRawImage;
+			aux = worker->mAuxImage;
 			res = true;
+			LL_DEBUGS("Texture") << id << ": Request Finished. State: " << worker->mState << " Discard: " << discard_level << LL_ENDL;
+			worker->unlockWorkMutex();
 		}
 		else
 		{
-			worker->lockWorkData();
+			worker->lockWorkMutex();
 			if ((worker->mDecodedDiscard >= 0) &&
 				(worker->mDecodedDiscard < discard_level || discard_level < 0) &&
 				(worker->mState >= LLTextureFetchWorker::WAIT_ON_WRITE))
 			{
 				// Not finished, but data is ready
 				discard_level = worker->mDecodedDiscard;
-				if (worker->mRawImage) raw = worker->mRawImage;
-				if (worker->mAuxImage) aux = worker->mAuxImage;
+				raw = worker->mRawImage;
+				aux = worker->mAuxImage;
 			}
-			worker->unlockWorkData();
+			worker->unlockWorkMutex();
 		}
 	}
 	else
@@ -1538,9 +1593,9 @@ bool LLTextureFetch::updateRequestPriority(const LLUUID& id, F32 priority)
 	LLTextureFetchWorker* worker = getWorker(id);
 	if (worker)
 	{
-		worker->lockWorkData();
+		worker->lockWorkMutex();
 		worker->setImagePriority(priority);
-		worker->unlockWorkData();
+		worker->unlockWorkMutex();
 		res = true;
 	}
 	return res;
@@ -1548,40 +1603,106 @@ bool LLTextureFetch::updateRequestPriority(const LLUUID& id, F32 priority)
 
 //////////////////////////////////////////////////////////////////////////////
 
+// MAIN THREAD
 //virtual
 S32 LLTextureFetch::update(U32 max_time_ms)
 {
 	S32 res;
+	
+	mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
+	
 	res = LLWorkerThread::update(max_time_ms);
 	
-	const F32 REQUEST_TIME = 1.f;
-
-	// Periodically, gather the list of textures that need data from the network
-	// And send the requests out to the simulators
-	if (mNetworkTimer.getElapsedTimeF32() >= REQUEST_TIME)
+	if (!mDebugPause)
 	{
-		mNetworkTimer.reset();
 		sendRequestListToSimulators();
 	}
 	
 	return res;
 }
 
+// WORKER THREAD
+void LLTextureFetch::startThread()
+{
+	// Construct mCurlGetRequest from Worker Thread
+	mCurlGetRequest = new LLCurlRequest();
+}
+
+// WORKER THREAD
+void LLTextureFetch::endThread()
+{
+	// Destroy mCurlGetRequest from Worker Thread
+	delete mCurlGetRequest;
+	mCurlGetRequest = NULL;
+}
+
+// WORKER THREAD
+void LLTextureFetch::threadedUpdate()
+{
+	llassert_always(mCurlGetRequest);
+	
+	// Limit update frequency
+	const F32 PROCESS_TIME = 0.05f; 
+	static LLFrameTimer process_timer;
+	if (process_timer.getElapsedTimeF32() < PROCESS_TIME)
+	{
+		return;
+	}
+	process_timer.reset();
+	
+	// Update Curl on same thread as mCurlGetRequest was constructed
+	S32 processed = mCurlGetRequest->process();
+	if (processed > 0)
+	{
+		lldebugs << "processed: " << processed << " messages." << llendl;
+	}
+
+#if 0
+	const F32 INFO_TIME = 1.0f; 
+	static LLFrameTimer info_timer;
+	if (info_timer.getElapsedTimeF32() >= INFO_TIME)
+	{
+		S32 q = mCurlGetRequest->getQueued();
+		if (q > 0)
+		{
+			llinfos << "Queued gets: " << q << llendl;
+			info_timer.reset();
+		}
+	}
+#endif
+	
+}
+
 //////////////////////////////////////////////////////////////////////////////
 
 void LLTextureFetch::sendRequestListToSimulators()
 {
+	// All requests
+	const F32 REQUEST_DELTA_TIME = 0.10f; // 10 fps
+	
+	// Sim requests
 	const S32 IMAGES_PER_REQUEST = 50;
-	const F32 LAZY_FLUSH_TIMEOUT = 15.f; // 10.0f // temp
+	const F32 SIM_LAZY_FLUSH_TIMEOUT = 10.0f; // temp
 	const F32 MIN_REQUEST_TIME = 1.0f;
 	const F32 MIN_DELTA_PRIORITY = 1000.f;
 
-	LLMutexLock lock(&mQueueMutex);
+	// Periodically, gather the list of textures that need data from the network
+	// And send the requests out to the simulators
+	static LLFrameTimer timer;
+	if (timer.getElapsedTimeF32() < REQUEST_DELTA_TIME)
+	{
+		return;
+	}
+	timer.reset();
 	
+	LLMutexLock lock(&mQueueMutex);
+
 	// Send requests
 	typedef std::set<LLTextureFetchWorker*,LLTextureFetchWorker::Compare> request_list_t;
 	typedef std::map< LLHost, request_list_t > work_request_map_t;
 	work_request_map_t requests;
+	{
+	LLMutexLock lock2(&mNetworkQueueMutex);
 	for (queue_t::iterator iter = mNetworkQueue.begin(); iter != mNetworkQueue.end(); )
 	{
 		queue_t::iterator curiter = iter++;
@@ -1591,65 +1712,65 @@ void LLTextureFetch::sendRequestListToSimulators()
 			mNetworkQueue.erase(curiter);
 			continue; // paranoia
 		}
+		if ((req->mState != LLTextureFetchWorker::LOAD_FROM_NETWORK) &&
+			(req->mState != LLTextureFetchWorker::LOAD_FROM_SIMULATOR))
+		{
+			// We already received our URL, remove from the queue
+			llwarns << "Worker: " << req->mID << " in mNetworkQueue but in wrong state: " << req->mState << llendl;
+			mNetworkQueue.erase(curiter);
+			continue;
+		}
 		if (req->mID == mDebugID)
 		{
 			mDebugCount++; // for setting breakpoints
 		}
-		if (req->mTotalPackets > 0 && req->mLastPacket >= req->mTotalPackets-1)
+		if (req->mSentRequest == LLTextureFetchWorker::SENT_SIM &&
+			req->mTotalPackets > 0 &&
+			req->mLastPacket >= req->mTotalPackets-1)
 		{
 			// We have all the packets... make sure this is high priority
 // 			req->setPriority(LLWorkerThread::PRIORITY_HIGH | req->mWorkPriority);
 			continue;
 		}
 		F32 elapsed = req->mRequestedTimer.getElapsedTimeF32();
-		F32 delta_priority = llabs(req->mRequestedPriority - req->mImagePriority);
-		if ((req->mSimRequestedDiscard != req->mDesiredDiscard) ||
-			(delta_priority > MIN_DELTA_PRIORITY && elapsed >= MIN_REQUEST_TIME) ||
-			(elapsed >= LAZY_FLUSH_TIMEOUT))
 		{
-			requests[req->mHost].insert(req);
+			F32 delta_priority = llabs(req->mRequestedPriority - req->mImagePriority);
+			if ((req->mSimRequestedDiscard != req->mDesiredDiscard) ||
+				(delta_priority > MIN_DELTA_PRIORITY && elapsed >= MIN_REQUEST_TIME) ||
+				(elapsed >= SIM_LAZY_FLUSH_TIMEOUT))
+			{
+				requests[req->mHost].insert(req);
+			}
 		}
 	}
-
-	std::string http_url;
-#if 0
-	if (gSavedSettings.getBOOL("ImagePipelineUseHTTP"))
-	{
-		LLViewerRegion* region = gAgent.getRegion();
-		if (region)
-		{
-			http_url = region->getCapability("RequestTextureDownload");
-		}
 	}
-#endif
-	
+
 	for (work_request_map_t::iterator iter1 = requests.begin();
 		 iter1 != requests.end(); ++iter1)
 	{
-		bool use_http = http_url.empty() ? false : true;
 		LLHost host = iter1->first;
 		// invalid host = use agent host
 		if (host == LLHost::invalid)
 		{
 			host = gAgent.getRegionHost();
 		}
-		else
-		{
-			use_http = false;
-		}
 
-		if (use_http)
+		S32 sim_request_count = 0;
+		
+		for (request_list_t::iterator iter2 = iter1->second.begin();
+			 iter2 != iter1->second.end(); ++iter2)
 		{
-		}
-		else
-		{
-			S32 request_count = 0;
-			for (request_list_t::iterator iter2 = iter1->second.begin();
-				 iter2 != iter1->second.end(); ++iter2)
+			LLTextureFetchWorker* req = *iter2;
+			if (gMessageSystem)
 			{
-				LLTextureFetchWorker* req = *iter2;
-				req->mSentRequest = LLTextureFetchWorker::SENT_SIM;
-				if (0 == request_count)
+				if (req->mSentRequest != LLTextureFetchWorker::SENT_SIM)
+				{
+					// Initialize packet data based on data read from cache
+					req->lockWorkMutex();
+					req->setupPacketData();
+					req->unlockWorkMutex();
+				}
+				if (0 == sim_request_count)
 				{
 					gMessageSystem->newMessageFast(_PREHASH_RequestImage);
 					gMessageSystem->nextBlockFast(_PREHASH_AgentData);
@@ -1666,30 +1787,42 @@ void LLTextureFetch::sendRequestListToSimulators()
 // 				llinfos << "IMAGE REQUEST: " << req->mID << " Discard: " << req->mDesiredDiscard
 // 						<< " Packet: " << packet << " Priority: " << req->mImagePriority << llendl;
 
-				req->lockWorkData();
+				if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator")))
+				{
+					mTextureInfo.setRequestStartTime(req->mID, LLTimer::getTotalTime());
+					mTextureInfo.setRequestOffset(req->mID, 0);
+					mTextureInfo.setRequestSize(req->mID, 0);
+					mTextureInfo.setRequestType(req->mID, LLTextureInfoDetails::REQUEST_TYPE_UDP);
+				}
+
+				req->lockWorkMutex();
+				req->mSentRequest = LLTextureFetchWorker::SENT_SIM;
 				req->mSimRequestedDiscard = req->mDesiredDiscard;
 				req->mRequestedPriority = req->mImagePriority;
 				req->mRequestedTimer.reset();
-				req->unlockWorkData();
-				request_count++;
-				if (request_count >= IMAGES_PER_REQUEST)
+				req->unlockWorkMutex();
+				sim_request_count++;
+				if (sim_request_count >= IMAGES_PER_REQUEST)
 				{
-// 					llinfos << "REQUESTING " << request_count << " IMAGES FROM HOST: " << host.getIPString() << llendl;
+// 					llinfos << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << llendl;
+
 					gMessageSystem->sendSemiReliable(host, NULL, NULL);
-					request_count = 0;
+					sim_request_count = 0;
 				}
 			}
-			if (request_count > 0 && request_count < IMAGES_PER_REQUEST)
-			{
-// 				llinfos << "REQUESTING " << request_count << " IMAGES FROM HOST: " << host.getIPString() << llendl;
-				gMessageSystem->sendSemiReliable(host, NULL, NULL);
-				request_count = 0;
-			}
+		}
+		if (gMessageSystem && sim_request_count > 0 && sim_request_count < IMAGES_PER_REQUEST)
+		{
+// 			llinfos << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << llendl;
+			gMessageSystem->sendSemiReliable(host, NULL, NULL);
+			sim_request_count = 0;
 		}
 	}
 	
 	// Send cancelations
-	if (!mCancelQueue.empty())
+	{
+	LLMutexLock lock2(&mNetworkQueueMutex);
+	if (gMessageSystem && !mCancelQueue.empty())
 	{
 		for (cancel_queue_t::iterator iter1 = mCancelQueue.begin();
 			 iter1 != mCancelQueue.end(); ++iter1)
@@ -1732,6 +1865,7 @@ void LLTextureFetch::sendRequestListToSimulators()
 		}
 		mCancelQueue.clear();
 	}
+	}
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1808,7 +1942,7 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8
 		return false;
 	}
 
-	worker->lockWorkData();
+	worker->lockWorkMutex();
 
 	//	Copy header data into image object
 	worker->mImageCodec = codec;
@@ -1819,7 +1953,7 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8
 	res = worker->insertPacket(0, data, data_size);
 	worker->setPriority(LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority);
 	worker->mState = LLTextureFetchWorker::LOAD_FROM_SIMULATOR;
-	worker->unlockWorkData();
+	worker->unlockWorkMutex();
 	return res;
 }
 
@@ -1853,7 +1987,7 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
 		return false;
 	}
 
-	worker->lockWorkData();
+	worker->lockWorkMutex();
 	
 	res = worker->insertPacket(packet_num, data, data_size);
 	
@@ -1866,12 +2000,20 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
 	else
 	{
 // 		llwarns << "receiveImagePacket " << packet_num << "/" << worker->mLastPacket << " for worker: " << id
-// 			<< " in state: " << LLTextureFetchWorker::sStateDescs[worker->mState] << llendl;
-		removeFromNetworkQueue(worker); // failsafe
-		mCancelQueue[host].insert(id);
+// 				<< " in state: " << LLTextureFetchWorker::sStateDescs[worker->mState] << llendl;
+		removeFromNetworkQueue(worker, true); // failsafe
 	}
-	
-	worker->unlockWorkData();
+
+	if(packet_num >= (worker->mTotalPackets - 1))
+	{
+		if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator")))
+		{
+			U64 timeNow = LLTimer::getTotalTime();
+			mTextureInfo.setRequestSize(id, worker->mFileSize);
+			mTextureInfo.setRequestCompleteTimeAndLog(id, timeNow);
+		}
+	}
+	worker->unlockWorkMutex();
 
 	return res;
 }
@@ -1885,9 +2027,9 @@ BOOL LLTextureFetch::isFromLocalCache(const LLUUID& id)
 	LLTextureFetchWorker* worker = getWorker(id);
 	if (worker)
 	{
-		worker->lockWorkData();
+		worker->lockWorkMutex() ;
 		from_cache = worker->mInLocalCache ;
-		worker->unlockWorkData();
+		worker->unlockWorkMutex() ;
 	}
 
 	return from_cache ;
@@ -1907,7 +2049,7 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r
 	LLTextureFetchWorker* worker = getWorker(id);
 	if (worker && worker->haveWork())
 	{
-		worker->lockWorkData();
+		worker->lockWorkMutex();
 		state = worker->mState;
 		fetch_dtime = worker->mFetchTimer.getElapsedTimeF32();
 		request_dtime = worker->mRequestedTimer.getElapsedTimeF32();
@@ -1924,7 +2066,7 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r
 				data_progress = (F32)worker->mFormattedImage->getDataSize() / (F32)worker->mFileSize;
 			}
 		}
-		if (state >= LLTextureFetchWorker::LOAD_FROM_NETWORK && state <= LLTextureFetchWorker::LOAD_FROM_HTTP_GET_DATA)
+		if (state >= LLTextureFetchWorker::LOAD_FROM_NETWORK && state <= LLTextureFetchWorker::WAIT_HTTP_REQ)
 		{
 			requested_priority = worker->mRequestedPriority;
 		}
@@ -1933,7 +2075,7 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r
 			requested_priority = worker->mImagePriority;
 		}
 		fetch_priority = worker->getPriority();
-		worker->unlockWorkData();
+		worker->unlockWorkMutex();
 	}
 	data_progress_p = data_progress;
 	requested_priority_p = requested_priority;
@@ -1959,5 +2101,3 @@ void LLTextureFetch::dump()
 	}
 }
 
-
-//////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index 97719a9468e..373e38a83cb 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -37,26 +37,29 @@
 #include "llimage.h"
 #include "lluuid.h"
 #include "llworkerthread.h"
+#include "llcurl.h"
+#include "lltextureinfo.h"
 
 class LLViewerTexture;
 class LLTextureFetchWorker;
+class HTTPGetResponder;
 class LLTextureCache;
+class LLImageDecodeThread;
 class LLHost;
 
 // Interface class
 class LLTextureFetch : public LLWorkerThread
 {
 	friend class LLTextureFetchWorker;
+	friend class HTTPGetResponder;
 	
 public:
-	LLTextureFetch(LLTextureCache* cache, bool threaded);
+	LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* imagedecodethread, bool threaded);
 	~LLTextureFetch();
 
 	/*virtual*/ S32 update(U32 max_time_ms);	
 
-	bool createRequest(const LLUUID& id, const LLHost& host, F32 priority,
-					   S32 w, S32 h, S32 c, S32 discard, bool needs_aux);
-	bool createRequest(const std::string& filename, const LLUUID& id, const LLHost& host, F32 priority,
+	bool createRequest(const std::string& url, const LLUUID& id, const LLHost& host, F32 priority,
 					   S32 w, S32 h, S32 c, S32 discard, bool needs_aux);
 	void deleteRequest(const LLUUID& id, bool cancel);
 	bool getRequestFinished(const LLUUID& id, S32& discard_level,
@@ -66,25 +69,39 @@ class LLTextureFetch : public LLWorkerThread
 	bool receiveImageHeader(const LLHost& host, const LLUUID& id, U8 codec, U16 packets, U32 totalbytes, U16 data_size, U8* data);
 	bool receiveImagePacket(const LLHost& host, const LLUUID& id, U16 packet_num, U16 data_size, U8* data);
 
+	void setTextureBandwidth(F32 bandwidth) { mTextureBandwidth = bandwidth; }
+	F32 getTextureBandwidth() { return mTextureBandwidth; }
+	
 	// Debug
 	BOOL isFromLocalCache(const LLUUID& id);
 	S32 getFetchState(const LLUUID& id, F32& decode_progress_p, F32& requested_priority_p,
 					  U32& fetch_priority_p, F32& fetch_dtime_p, F32& request_dtime_p);
 	void dump();
 	S32 getNumRequests() { return mRequestMap.size(); }
+	S32 getNumHTTPRequests() { return mHTTPTextureQueue.size(); }
 	
 	// Public for access by callbacks
 	void lockQueue() { mQueueMutex.lock(); }
 	void unlockQueue() { mQueueMutex.unlock(); }
 	LLTextureFetchWorker* getWorker(const LLUUID& id);
+
+	LLTextureInfo* getTextureInfo() { return &mTextureInfo; }
 	
 protected:
 	void addToNetworkQueue(LLTextureFetchWorker* worker);
-	void removeFromNetworkQueue(LLTextureFetchWorker* worker);
+	void removeFromNetworkQueue(LLTextureFetchWorker* worker, bool cancel);
+	void addToHTTPQueue(const LLUUID& id);
+	void removeFromHTTPQueue(const LLUUID& id);
+	S32 getHTTPQueueSize() { return (S32)mHTTPTextureQueue.size(); }
 	void removeRequest(LLTextureFetchWorker* worker, bool cancel);
+	// Called from worker thread (during doWork)
+	void processCurlRequests();	
 
 private:
 	void sendRequestListToSimulators();
+	/*virtual*/ void startThread(void);
+	/*virtual*/ void endThread(void);
+	/*virtual*/ void threadedUpdate(void);
 
 public:
 	LLUUID mDebugID;
@@ -95,8 +112,11 @@ class LLTextureFetch : public LLWorkerThread
 	
 private:
 	LLMutex mQueueMutex;
+	LLMutex mNetworkQueueMutex;
 
 	LLTextureCache* mTextureCache;
+	LLImageDecodeThread* mImageDecodeThread;
+	LLCurlRequest* mCurlGetRequest;
 	
 	// Map of all requests by UUID
 	typedef std::map<LLUUID,LLTextureFetchWorker*> map_t;
@@ -105,10 +125,13 @@ class LLTextureFetch : public LLWorkerThread
 	// Set of requests that require network data
 	typedef std::set<LLUUID> queue_t;
 	queue_t mNetworkQueue;
+	queue_t mHTTPTextureQueue;
 	typedef std::map<LLHost,std::set<LLUUID> > cancel_queue_t;
 	cancel_queue_t mCancelQueue;
-
-	LLFrameTimer mNetworkTimer;
+	F32 mTextureBandwidth;
+	F32 mMaxBandwidth;
+	LLTextureInfo mTextureInfo;
 };
 
 #endif // LL_LLTEXTUREFETCH_H
+
diff --git a/indra/newview/lltextureinfo.cpp b/indra/newview/lltextureinfo.cpp
new file mode 100644
index 00000000000..672a36a8bd7
--- /dev/null
+++ b/indra/newview/lltextureinfo.cpp
@@ -0,0 +1,290 @@
+/** 
+ * @file lltextureinfo.cpp
+ * @brief Object which handles local texture info
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ * 
+ * Copyright (c) 2000-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "lltextureinfo.h"
+#include "lltexturestats.h"
+#include "llviewercontrol.h"
+
+LLTextureInfo::LLTextureInfo() : 
+	mLogTextureDownloadsToViewerLog(false),
+	mLogTextureDownloadsToSimulator(false),
+	mTotalBytes(0),
+	mTotalMilliseconds(0),
+	mTextureDownloadsStarted(0),
+	mTextureDownloadsCompleted(0),
+	mTextureDownloadProtocol("NONE"),
+	mTextureLogThreshold(100 * 1024),
+	mCurrentStatsBundleStartTime(0)
+{
+	mTextures.clear();
+}
+
+void LLTextureInfo::setUpLogging(bool writeToViewerLog, bool sendToSim, U32 textureLogThreshold)
+{
+	mLogTextureDownloadsToViewerLog = writeToViewerLog;
+	mLogTextureDownloadsToSimulator = sendToSim;
+	mTextureLogThreshold = textureLogThreshold;
+}
+
+LLTextureInfo::~LLTextureInfo()
+{
+	std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator;
+	for (iterator = mTextures.begin(); iterator != mTextures.end(); iterator++)
+	{
+		LLTextureInfoDetails *info = (*iterator).second;
+		delete info;
+	}
+
+	mTextures.clear();
+}
+
+void LLTextureInfo::addRequest(const LLUUID& id)
+{
+	LLTextureInfoDetails *info = new LLTextureInfoDetails();
+	mTextures[id] = info;
+}
+
+U32 LLTextureInfo::getTextureInfoMapSize()
+{
+	return mTextures.size();
+}
+
+bool LLTextureInfo::has(const LLUUID& id)
+{
+	std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id);
+	if (iterator == mTextures.end())
+	{
+		return false;
+	}
+	else
+	{
+		return true;
+	}
+}
+
+void LLTextureInfo::setRequestStartTime(const LLUUID& id, U64 startTime)
+{
+	if (!has(id))
+	{
+		addRequest(id);
+	}
+	mTextures[id]->mStartTime = startTime;
+	mTextureDownloadsStarted++;
+}
+
+void LLTextureInfo::setRequestSize(const LLUUID& id, U32 size)
+{
+	if (!has(id))
+	{
+		addRequest(id);
+	}
+	mTextures[id]->mSize = size;
+}
+
+void LLTextureInfo::setRequestOffset(const LLUUID& id, U32 offset)
+{
+	if (!has(id))
+	{
+		addRequest(id);
+	}
+	mTextures[id]->mOffset = offset;
+}
+
+void LLTextureInfo::setRequestType(const LLUUID& id, LLTextureInfoDetails::LLRequestType type)
+{
+	if (!has(id))
+	{
+		addRequest(id);
+	}
+	mTextures[id]->mType = type;
+}
+
+void LLTextureInfo::setRequestCompleteTimeAndLog(const LLUUID& id, U64 completeTime)
+{
+	if (!has(id))
+	{
+		addRequest(id);
+	}
+	mTextures[id]->mCompleteTime = completeTime;
+
+	std::string protocol = "NONE";
+	switch(mTextures[id]->mType)
+	{
+	case LLTextureInfoDetails::REQUEST_TYPE_HTTP:
+		protocol = "HTTP";
+		break;
+
+	case LLTextureInfoDetails::REQUEST_TYPE_UDP:
+		protocol = "UDP";
+		break;
+
+	case LLTextureInfoDetails::REQUEST_TYPE_NONE:
+	default:
+		break;
+	}
+
+	if (mLogTextureDownloadsToViewerLog)
+	{
+		llinfos << "texture=" << id 
+			<< " start=" << mTextures[id]->mStartTime 
+			<< " end=" << mTextures[id]->mCompleteTime
+			<< " size=" << mTextures[id]->mSize
+			<< " offset=" << mTextures[id]->mOffset
+			<< " length_in_ms=" << (mTextures[id]->mCompleteTime - mTextures[id]->mStartTime) / 1000
+			<< " protocol=" << protocol
+			<< llendl;
+	}
+
+	if(mLogTextureDownloadsToSimulator)
+	{
+		S32 texture_stats_upload_threshold = mTextureLogThreshold;
+		mTotalBytes += mTextures[id]->mSize;
+		mTotalMilliseconds += mTextures[id]->mCompleteTime - mTextures[id]->mStartTime;
+		mTextureDownloadsCompleted++;
+		mTextureDownloadProtocol = protocol;
+		if (mTotalBytes >= texture_stats_upload_threshold)
+		{
+			LLSD texture_data;
+			std::stringstream startTime;
+			startTime << mCurrentStatsBundleStartTime;
+			texture_data["start_time"] = startTime.str();
+			std::stringstream endTime;
+			endTime << completeTime;
+			texture_data["end_time"] = endTime.str();
+			texture_data["averages"] = getAverages();
+			send_texture_stats_to_sim(texture_data);
+			resetTextureStatistics();
+		}
+	}
+
+	mTextures.erase(id);
+}
+
+LLSD LLTextureInfo::getAverages()
+{
+	LLSD averagedTextureData;
+	S32 averageDownloadRate;
+	if(mTotalMilliseconds == 0)
+	{
+		averageDownloadRate = 0;
+	}
+	else
+	{
+		averageDownloadRate = (mTotalBytes * 8) / mTotalMilliseconds;
+	}
+
+	averagedTextureData["bits_per_second"] = averageDownloadRate;
+	averagedTextureData["bytes_downloaded"] = mTotalBytes;
+	averagedTextureData["texture_downloads_started"] = mTextureDownloadsStarted;
+	averagedTextureData["texture_downloads_completed"] = mTextureDownloadsCompleted;
+	averagedTextureData["transport"] = mTextureDownloadProtocol;
+
+	return averagedTextureData;
+}
+
+void LLTextureInfo::resetTextureStatistics()
+{
+	mTotalMilliseconds = 0;
+	mTotalBytes = 0;
+	mTextureDownloadsStarted = 0;
+	mTextureDownloadsCompleted = 0;
+	mTextureDownloadProtocol = "NONE";
+	mCurrentStatsBundleStartTime = LLTimer::getTotalTime();
+}
+
+U32 LLTextureInfo::getRequestStartTime(const LLUUID& id)
+{
+	if (!has(id))
+	{
+		return 0;
+	}
+	else
+	{
+		std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id);
+		return (*iterator).second->mStartTime;
+	}
+}
+
+U32 LLTextureInfo::getRequestSize(const LLUUID& id)
+{
+	if (!has(id))
+	{
+		return 0;
+	}
+	else
+	{
+		std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id);
+		return (*iterator).second->mSize;
+	}
+}
+
+U32 LLTextureInfo::getRequestOffset(const LLUUID& id)
+{
+	if (!has(id))
+	{
+		return 0;
+	}
+	else
+	{
+		std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id);
+		return (*iterator).second->mOffset;
+	}
+}
+
+LLTextureInfoDetails::LLRequestType LLTextureInfo::getRequestType(const LLUUID& id)
+{
+	if (!has(id))
+	{
+		return LLTextureInfoDetails::REQUEST_TYPE_NONE;
+	}
+	else
+	{
+		std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id);
+		return (*iterator).second->mType;
+	}
+}
+
+U32 LLTextureInfo::getRequestCompleteTime(const LLUUID& id)
+{
+	if (!has(id))
+	{
+		return 0;
+	}
+	else
+	{
+		std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id);
+		return (*iterator).second->mCompleteTime;
+	}
+}
+
diff --git a/indra/newview/lltextureinfo.h b/indra/newview/lltextureinfo.h
new file mode 100644
index 00000000000..71b0ea431fd
--- /dev/null
+++ b/indra/newview/lltextureinfo.h
@@ -0,0 +1,80 @@
+/** 
+ * @file lltextureinfo.h
+ * @brief Object for managing texture information.
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ * 
+ * Copyright (c) 2000-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLTEXTUREINFO_H
+#define LL_LLTEXTUREINFO_H
+
+#include "lluuid.h"
+#include "lltextureinfodetails.h"
+#include <map>
+
+class LLTextureInfo
+{
+public:
+	LLTextureInfo();
+	~LLTextureInfo();
+
+	void setUpLogging(bool writeToViewerLog, bool sendToSim, U32 textureLogThreshold);
+	bool has(const LLUUID& id);
+	void setRequestStartTime(const LLUUID& id, U64 startTime);
+	void setRequestSize(const LLUUID& id, U32 size);
+	void setRequestOffset(const LLUUID& id, U32 offset);
+	void setRequestType(const LLUUID& id, LLTextureInfoDetails::LLRequestType type);
+	void setRequestCompleteTimeAndLog(const LLUUID& id, U64 completeTime);
+	U32 getRequestStartTime(const LLUUID& id);
+	U32 getRequestSize(const LLUUID& id);
+	U32 getRequestOffset(const LLUUID& id);
+	LLTextureInfoDetails::LLRequestType getRequestType(const LLUUID& id);
+	U32 getRequestCompleteTime(const LLUUID& id);
+	void resetTextureStatistics();
+	U32 getTextureInfoMapSize();
+	LLSD getAverages();
+
+private:
+	void addRequest(const LLUUID& id);
+
+	std::map<LLUUID, LLTextureInfoDetails *> mTextures;
+
+	LLSD mAverages;
+
+	bool mLogTextureDownloadsToViewerLog;
+	bool mLogTextureDownloadsToSimulator;
+	S32 mTotalBytes;
+	S32 mTotalMilliseconds;
+	S32 mTextureDownloadsStarted;
+	S32 mTextureDownloadsCompleted;
+	std::string mTextureDownloadProtocol;
+	U32 mTextureLogThreshold; // in bytes
+	U64 mCurrentStatsBundleStartTime;
+};
+
+#endif // LL_LLTEXTUREINFO_H
diff --git a/indra/newview/lltextureinfodetails.cpp b/indra/newview/lltextureinfodetails.cpp
new file mode 100644
index 00000000000..f6ef47a2ee5
--- /dev/null
+++ b/indra/newview/lltextureinfodetails.cpp
@@ -0,0 +1,40 @@
+/** 
+ * @file lltextureinfodetails.cpp
+ * @brief Object which handles details of any individual texture
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ * 
+ * Copyright (c) 2000-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "lltextureinfodetails.h"
+
+LLTextureInfoDetails::LLTextureInfoDetails() : mStartTime(0), mCompleteTime(0), mSize(0), mType(REQUEST_TYPE_NONE), mOffset(0)
+{
+}
+
diff --git a/indra/newview/lltextureinfodetails.h b/indra/newview/lltextureinfodetails.h
new file mode 100644
index 00000000000..091fa01a3d7
--- /dev/null
+++ b/indra/newview/lltextureinfodetails.h
@@ -0,0 +1,58 @@
+/** 
+ * @file lltextureinfo.h
+ * @brief Object for managing texture information.
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ * 
+ * Copyright (c) 2000-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLTEXTUREINFODETAILS_H
+#define LL_LLTEXTUREINFODETAILS_H
+
+#include "lluuid.h"
+
+class LLTextureInfoDetails
+{
+public:
+	enum LLRequestType
+	{
+		REQUEST_TYPE_NONE,
+		REQUEST_TYPE_HTTP,
+		REQUEST_TYPE_UDP
+	};
+
+	U32 mStartTime;
+	U32 mCompleteTime;
+	U32 mOffset;
+	U32 mSize;
+	LLRequestType mType;
+
+	LLTextureInfoDetails();
+};
+
+#endif // LL_LLTEXTUREINFODETAILS_H
+
diff --git a/indra/newview/lltexturestats.cpp b/indra/newview/lltexturestats.cpp
new file mode 100644
index 00000000000..c91bfd4df2a
--- /dev/null
+++ b/indra/newview/lltexturestats.cpp
@@ -0,0 +1,61 @@
+/** 
+ * @file lltexturerstats.cpp
+ * @brief texture stats helper methods
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "pipeline.h" 
+#include "llagent.h"
+#include "lltexturefetch.h" 
+#include "lltexturestats.h"
+#include "lltexturestatsuploader.h"
+#include "llviewerregion.h"
+
+void send_texture_stats_to_sim(const LLSD &texture_stats)
+{
+	LLSD texture_stats_report;
+	// Only send stats if the agent is connected to a region.
+	if (!gAgent.getRegion() || gNoRender)
+	{
+		return;
+	}
+
+	LLUUID agent_id = gAgent.getID();
+	texture_stats_report["agent_id"] = agent_id;
+	texture_stats_report["region_id"] = gAgent.getRegion()->getRegionID();
+	texture_stats_report["stats_data"] = texture_stats;
+
+	std::string texture_cap_url = gAgent.getRegion()->getCapability("TextureStats");
+	LLTextureStatsUploader tsu;
+	llinfos << "uploading texture stats data to simulator" << llendl;
+	tsu.uploadStatsToSimulator(texture_cap_url, texture_stats);
+}
+
diff --git a/indra/newview/lltexturestats.h b/indra/newview/lltexturestats.h
new file mode 100644
index 00000000000..2deb377dfdd
--- /dev/null
+++ b/indra/newview/lltexturestats.h
@@ -0,0 +1,41 @@
+/** 
+ * @file lltexturestats.h
+ * @brief texture stats utilities
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLTEXTURESTATS_H
+#define LL_LLTEXTURESTATS_H
+
+#include "llappviewer.h"
+
+// utility functions to capture data on texture download speeds and send to simulator periodically
+void send_texture_stats_to_sim(const LLSD &texture_stats);
+
+#endif // LL_LLTEXTURESTATS_H
diff --git a/indra/newview/lltexturestatsuploader.cpp b/indra/newview/lltexturestatsuploader.cpp
new file mode 100644
index 00000000000..e0358e1fcaf
--- /dev/null
+++ b/indra/newview/lltexturestatsuploader.cpp
@@ -0,0 +1,59 @@
+/** 
+ * @file lltexturerstats.cpp
+ * @brief texture stats upload class
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "lltexturestatsuploader.h"
+
+LLTextureStatsUploader::LLTextureStatsUploader()
+{
+}
+
+LLTextureStatsUploader::~LLTextureStatsUploader()
+{
+}
+
+void LLTextureStatsUploader::uploadStatsToSimulator(const std::string texture_cap_url, const LLSD &texture_stats)
+{
+	if ( texture_cap_url != "" )
+	{
+		LLHTTPClient::post(texture_cap_url, texture_stats, NULL);
+	}
+	else
+	{
+		llinfos << "Not sending texture stats: " 
+				<< texture_stats 
+				<< " as there is no cap url." 
+				<< llendl;
+	}
+}
+
diff --git a/indra/newview/lltexturestatsuploader.h b/indra/newview/lltexturestatsuploader.h
new file mode 100644
index 00000000000..f6cc8be8fe9
--- /dev/null
+++ b/indra/newview/lltexturestatsuploader.h
@@ -0,0 +1,48 @@
+/** 
+ * @file lltexturestatsuploader.h
+ * @brief Class to send the texture stats to the simulatore
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLTEXTURESTATSUPLOADER_H
+#define LL_LLTEXTURESTATSUPLOADER_H
+
+#include "llappviewer.h"
+
+// utility functions to capture data on texture download speeds and send to simulator periodically
+
+class LLTextureStatsUploader
+{
+public:
+	LLTextureStatsUploader();
+	~LLTextureStatsUploader();
+	void uploadStatsToSimulator(const std::string texture_cap_url, const LLSD &texture_stats);
+};
+
+#endif // LL_LLTEXTURESTATSUPLOADER_H
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index ea675c5a6e4..44ef6717e70 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -44,19 +44,21 @@
 #include "llrender.h"
 
 #include "lltooltip.h"
+#include "llappviewer.h"
 #include "llselectmgr.h"
 #include "lltexlayer.h"
 #include "lltexturecache.h"
 #include "lltexturefetch.h"
+#include "llviewercontrol.h"
 #include "llviewerobject.h"
 #include "llviewertexture.h"
 #include "llviewertexturelist.h"
-#include "llappviewer.h"
-
+#include "llvovolume.h"
 extern F32 texmem_lower_bound_scale;
 
 LLTextureView *gTextureView = NULL;
 LLTextureSizeView *gTextureSizeView = NULL;
+LLTextureSizeView *gTextureCategoryView = NULL;
 
 //static
 std::set<LLViewerFetchedTexture*> LLTextureView::sDebugImages;
@@ -230,10 +232,10 @@ void LLTextureBar::draw()
 		{ "DSK", LLColor4::blue },	// CACHE_POST
 		{ "NET", LLColor4::green },	// LOAD_FROM_NETWORK
 		{ "SIM", LLColor4::green },	// LOAD_FROM_SIMULATOR
-		{ "URL", LLColor4::green2 },// LOAD_FROM_HTTP_GET_URL
-		{ "HTP", LLColor4::green },	// LOAD_FROM_HTTP_GET_DATA
+		{ "REQ", LLColor4::yellow },// SEND_HTTP_REQ
+		{ "HTP", LLColor4::green },	// WAIT_HTTP_REQ
 		{ "DEC", LLColor4::yellow },// DECODE_IMAGE
-		{ "DEC", LLColor4::yellow },// DECODE_IMAGE_UPDATE
+		{ "DEC", LLColor4::green }, // DECODE_IMAGE_UPDATE
 		{ "WRT", LLColor4::purple },// WRITE_TO_CACHE
 		{ "WRT", LLColor4::orange },// WAIT_ON_WRITE
 		{ "END", LLColor4::red },   // DONE
@@ -261,7 +263,7 @@ void LLTextureBar::draw()
 
 	// Draw the progress bar.
 	S32 bar_width = 100;
-	S32 bar_left = 280;
+	S32 bar_left = 260;
 	left = bar_left;
 	right = left + bar_width;
 
@@ -286,30 +288,31 @@ void LLTextureBar::draw()
 	S32 pip_x = title_x3 + pip_space/2;
 	
 	// Draw the packet pip
+	const F32 pip_max_time = 5.f;
 	F32 last_event = mImagep->mLastPacketTimer.getElapsedTimeF32();
-	if (last_event < 1.f)
+	if (last_event < pip_max_time)
 	{
 		clr = LLColor4::white; 
 	}
 	else
 	{
 		last_event = mImagep->mRequestDeltaTime;
-		if (last_event < 1.f)
+		if (last_event < pip_max_time)
 		{
 			clr = LLColor4::green;
 		}
 		else
 		{
 			last_event = mImagep->mFetchDeltaTime;
-			if (last_event < 1.f)
+			if (last_event < pip_max_time)
 			{
 				clr = LLColor4::yellow;
 			}
 		}
 	}
-	if (last_event < 1.f)
+	if (last_event < pip_max_time)
 	{
-		clr.setAlpha(1.f - last_event);
+		clr.setAlpha(1.f - last_event/pip_max_time);
 		gGL.color4fv(clr.mV);
 		gl_rect_2d(pip_x, top, pip_x + pip_width, bottom);
 	}
@@ -406,89 +409,113 @@ void LLGLTexMemBar::draw()
 	S32 total_mem = BYTES_TO_MEGA_BYTES(LLViewerTexture::sTotalTextureMemoryInBytes);
 	S32 max_total_mem = LLViewerTexture::sMaxTotalTextureMemInMegaBytes;
 	F32 discard_bias = LLViewerTexture::sDesiredDiscardBias;
+	F32 cache_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getUsage()) ;
+	F32 cache_max_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getMaxUsage()) ;
 	S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
 	S32 h_offset = (S32)((texture_bar_height + 2.5f) * mTextureView->mNumTextureBars + 2.5f);
 	//----------------------------------------------------------------------------
 	LLGLSUIDefault gls_ui;
-	F32 text_color[] = {1.f, 1.f, 1.f, 0.75f};
+	LLColor4 text_color(1.f, 1.f, 1.f, 0.75f);
+	LLColor4 color;
 	
 	std::string text;
-	text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Discard Bias: %.2f",
+	text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB",
 					total_mem,
 					max_total_mem,
 					bound_mem,
 					max_bound_mem,
-					discard_bias);
+					LLImageRaw::sGlobalRawMemory >> 20,					discard_bias,
+					cache_usage, cache_max_usage);
+	//, cache_entries, cache_max_entries
 
 	LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, h_offset + line_height*3,
-									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+											 text_color, LLFontGL::LEFT, LLFontGL::TOP);
 
 	//----------------------------------------------------------------------------
-	S32 bar_left = 380;
+#if 0
+	S32 bar_left = 400;
 	S32 bar_width = 200;
 	S32 top = line_height*3 - 2 + h_offset;
 	S32 bottom = top - 6;
 	S32 left = bar_left;
 	S32 right = left + bar_width;
-
-	F32 bar_scale = (F32)bar_width / (max_bound_mem * 1.5f);
+	F32 bar_scale;
 	
 	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-	
-	gGL.color4f(0.5f, 0.5f, 0.5f, 0.75f);
-	gl_rect_2d(left, top, right, bottom);
 
-	
+	// GL Mem Bar
+		
 	left = bar_left;
-	right = left + llfloor(bound_mem * bar_scale);
-	if (bound_mem < llfloor(max_bound_mem * texmem_lower_bound_scale))
-	{
-		gGL.color4f(0.f, 1.f, 0.f, 0.75f);
-	}
-	else if (bound_mem < max_bound_mem)
-	{
-		gGL.color4f(1.f, 1.f, 0.f, 0.75f);
-	}
-	else
-	{
-		gGL.color4f(1.f, 0.f, 0.f, 0.75f);
-	}
+	text = "GL";
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, line_height*3,
+											 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+	
+	left = bar_left+20;
+	right = left + bar_width;
+	
+	gGL.color4f(0.5f, 0.5f, 0.5f, 0.75f); // grey
 	gl_rect_2d(left, top, right, bottom);
 
 	bar_scale = (F32)bar_width / (max_total_mem * 1.5f);
+	right = left + llfloor(total_mem * bar_scale);
+	right = llclamp(right, bar_left, bar_left + bar_width);
 	
-	top = bottom - 2;
-	bottom = top - 6;
+	color = (total_mem < llfloor(max_total_mem * texmem_lower_bound_scale)) ? LLColor4::green :
+		  	(total_mem < max_total_mem) ? LLColor4::yellow : LLColor4::red;
+	color[VALPHA] = .75f;
+	glColor4fv(color.mV);
+	
+	gl_rect_2d(left, top, right, bottom); // red/yellow/green
+
+	//
+	bar_left += bar_width + bar_space;
+	//top = bottom - 2; bottom = top - 6;
+	
+	// Bound Mem Bar
+
 	left = bar_left;
-	right = left + llfloor(total_mem * bar_scale);
-	if (total_mem < llfloor(max_total_mem * texmem_lower_bound_scale))
-	{
-		gGL.color4f(0.f, 1.f, 0.f, 0.75f);
-	}
-	else if (total_mem < max_total_mem)
-	{
-		gGL.color4f(1.f, 1.f, 0.f, 0.75f);
-	}
-	else
-	{
-		gGL.color4f(1.f, 0.f, 0.f, 0.75f);
-	}
+	text = "GL";
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, line_height*3,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+	left = bar_left + 20;
+	right = left + bar_width;
+	
+	gGL.color4f(0.5f, 0.5f, 0.5f, 0.75f);
 	gl_rect_2d(left, top, right, bottom);
 
+	color = (bound_mem < llfloor(max_bound_mem * texmem_lower_bound_scale)) ? LLColor4::green :
+		  	(bound_mem < max_bound_mem) ? LLColor4::yellow : LLColor4::red;
+	color[VALPHA] = .75f;
+	glColor4fv(color.mV);
+
+	gl_rect_2d(left, top, right, bottom);
+#else
+	S32 left = 0 ;
+#endif
 	//----------------------------------------------------------------------------
 
-	text = llformat("Textures: Count: %d Fetch: %d(%d) Pkts:%d(%d) Cache R/W: %d/%d LFS:%d IW:%d(%d) RAW:%d mRaw:%d mAux:%d CB:%d",
+	text = llformat("Textures: %d Fetch: %d(%d) Pkts:%d(%d) Cache R/W: %d/%d LFS:%d IW:%d RAW:%d HTP:%d",
 					gTextureList.getNumImages(),
 					LLAppViewer::getTextureFetch()->getNumRequests(), LLAppViewer::getTextureFetch()->getNumDeletes(),
 					LLAppViewer::getTextureFetch()->mPacketCount, LLAppViewer::getTextureFetch()->mBadPacketCount, 
 					LLAppViewer::getTextureCache()->getNumReads(), LLAppViewer::getTextureCache()->getNumWrites(),
 					LLLFSThread::sLocal->getPending(),
-					LLImageWorker::sCount, LLImageWorker::getWorkerThread()->getNumDeletes(),
-					LLImageRaw::sRawImageCount, LLViewerFetchedTexture::sRawCount, LLViewerFetchedTexture::sAuxCount,
-					gTextureList.mCallbackList.size());
+					LLAppViewer::getImageDecodeThread()->getPending(), 
+					LLImageRaw::sRawImageCount,
+					LLAppViewer::getTextureFetch()->getNumHTTPRequests());
 
 	LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, h_offset + line_height*2,
 									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+
+
+	left = 550;
+	F32 bandwidth = LLAppViewer::getTextureFetch()->getTextureBandwidth();
+	F32 max_bandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
+	color = bandwidth > max_bandwidth ? LLColor4::red : bandwidth > max_bandwidth*.75f ? LLColor4::yellow : text_color;
+	color[VALPHA] = text_color[VALPHA];
+	text = llformat("BW:%.0f/%.0f",bandwidth, max_bandwidth);
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, line_height*2,
+											 color, LLFontGL::LEFT, LLFontGL::TOP);
 	
 	S32 dx1 = 0;
 	if (LLAppViewer::getTextureFetch()->mDebugPause)
@@ -555,7 +582,7 @@ class LLGLTexSizeBar
 	void setTop(S32 loaded, S32 bound, F32 scale) {mTopLoaded = loaded ; mTopBound = bound; mScale = scale ;}
 
 	void draw();	
-	BOOL handleHover(S32 x, S32 y, MASK mask) ;
+	BOOL handleHover(S32 x, S32 y, MASK mask, BOOL set_pick_size) ;
 	
 private:
 	S32 mIndex ;
@@ -568,19 +595,16 @@ class LLGLTexSizeBar
 	F32 mScale ;
 };
 
-BOOL LLGLTexSizeBar::handleHover(S32 x, S32 y, MASK mask) 
+BOOL LLGLTexSizeBar::handleHover(S32 x, S32 y, MASK mask, BOOL set_pick_size) 
 {
-#if !LL_RELEASE_FOR_DOWNLOAD
 	if(y > mBottom && (y < mBottom + (S32)(mTopLoaded * mScale) || y < mBottom + (S32)(mTopBound * mScale)))
 	{
-		LLImageGL::setCurTexSizebar(mIndex);
+		LLImageGL::setCurTexSizebar(mIndex, set_pick_size);
 	}
-#endif
 	return TRUE ;
 }
 void LLGLTexSizeBar::draw()
 {
-#if !LL_RELEASE_FOR_DOWNLOAD
 	LLGLSUIDefault gls_ui;
 
 	if(LLImageGL::sCurTexSizeBar == mIndex)
@@ -601,7 +625,6 @@ void LLGLTexSizeBar::draw()
 	F32 bound_color[] = {1.0f, 1.0f, 0.0f, 0.75f};
 	gl_rect_2d(mLeft, mBottom + (S32)(mTopLoaded * mScale), (mLeft + mRight) / 2, mBottom, loaded_color) ;
 	gl_rect_2d((mLeft + mRight) / 2, mBottom + (S32)(mTopBound * mScale), mRight, mBottom, bound_color) ;
-#endif
 }
 ////////////////////////////////////////////////////////////////////////////
 
@@ -675,7 +698,13 @@ void LLTextureView::draw()
 						<< "\t" << cur_discard
 						<< llendl;
 			}
-		
+
+			if (imagep->getID() == LLAppViewer::getTextureFetch()->mDebugID)
+			{
+				static S32 debug_count = 0;
+				++debug_count; // for breakpoints
+			}
+			
 #if 0
 			if (imagep->getDontDiscard())
 			{
@@ -889,8 +918,7 @@ BOOL LLTextureView::handleKey(KEY key, MASK mask, BOOL called_from_parent)
 }
 
 //-----------------------------------------------------------------
-LLTextureSizeView::LLTextureSizeView(const LLTextureSizeView::Params& p)
-	: LLView(p)
+LLTextureSizeView::LLTextureSizeView(const LLTextureSizeView::Params& p) : LLContainerView(p)
 {
 	setVisible(FALSE) ;
 
@@ -910,7 +938,31 @@ LLTextureSizeView::~LLTextureSizeView()
 }
 void LLTextureSizeView::draw()
 {
-#if !LL_RELEASE_FOR_DOWNLOAD
+	if(mType == TEXTURE_MEM_OVER_SIZE)
+	{
+		drawTextureSizeGraph();
+	}
+	else
+	{
+		drawTextureCategoryGraph() ;
+	}
+	
+	LLView::draw();
+}
+
+BOOL LLTextureSizeView::handleHover(S32 x, S32 y, MASK mask) 
+{
+	if(x > mTextureSizeBarRect.mLeft && x < mTextureSizeBarRect.mRight)
+	{
+		mTextureSizeBar[(x - mTextureSizeBarRect.mLeft) / mTextureSizeBarWidth]->handleHover(x, y, mask, (mType == TEXTURE_MEM_OVER_SIZE)) ;
+	}
+
+	return TRUE ;
+}
+
+//draw real-time texture mem bar over size
+void LLTextureSizeView::drawTextureSizeGraph()
+{
 	if(mTextureSizeBar.size() == 0)
 	{
 		S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
@@ -931,29 +983,16 @@ void LLTextureSizeView::draw()
 		mTextureSizeBar[i]->draw() ;
 	}		
 	LLImageGL::resetCurTexSizebar();
-
-	LLView::draw();
-#endif
-}
-
-BOOL LLTextureSizeView::handleHover(S32 x, S32 y, MASK mask) 
-{
-	if(x > mTextureSizeBarRect.mLeft && x < mTextureSizeBarRect.mRight)
-	{
-		mTextureSizeBar[(x - mTextureSizeBarRect.mLeft) / mTextureSizeBarWidth]->handleHover(x, y, mask) ;
-	}
-
-	return TRUE ;
 }
 
 //draw background of texture size bar graph
 F32 LLTextureSizeView::drawTextureSizeDistributionGraph()
 {	
+	//scale
 	F32 scale = 1.0f ;
-#if !LL_RELEASE_FOR_DOWNLOAD
+	
 	LLGLSUIDefault gls_ui;
 
-	//scale	
 	{
 		S32 count = 0 ;
 		for(U32 i = 0 ; i < LLImageGL::sTextureLoadedCounter.size() ; i++)
@@ -1043,8 +1082,137 @@ F32 LLTextureSizeView::drawTextureSizeDistributionGraph()
 	text = llformat("Texture Size Distribution") ;
 	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 250, top + line_height * 3,
 									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
-
-#endif	
 	return scale ;
 }
 
+//draw real-time texture mem bar over category
+void LLTextureSizeView::drawTextureCategoryGraph()
+{
+	if(mTextureSizeBar.size() == 0)
+	{
+		S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
+		mTextureSizeBar.resize(LLViewerTexture::getTotalNumOfCategories()) ;
+		mTextureSizeBarRect.set(700, line_height * 2 + 400, 700 + mTextureSizeBar.size() * mTextureSizeBarWidth, line_height * 2) ;
+		
+		for(U32 i = 0 ; i < mTextureSizeBar.size() ; i++)
+		{				
+			mTextureSizeBar[i] = new LLGLTexSizeBar(i, mTextureSizeBarRect.mLeft + i * mTextureSizeBarWidth , 
+				line_height * 2, mTextureSizeBarRect.mLeft + (i + 1) * mTextureSizeBarWidth, line_height) ;				
+		}			
+	}
+
+	F32 size_bar_scale = drawTextureCategoryDistributionGraph() ;		
+	for(U32 i = 0 ; i < mTextureSizeBar.size() ; i++)
+	{
+		U32 k = LLViewerTexture::getIndexFromCategory(i) ;
+		mTextureSizeBar[i]->setTop(LLImageGL::sTextureMemByCategory[k] >> 20, LLImageGL::sTextureMemByCategoryBound[k] >> 20, size_bar_scale) ;
+		mTextureSizeBar[i]->draw() ;
+	}		
+	LLImageGL::resetCurTexSizebar();
+}
+
+//draw background for TEXTURE_MEM_OVER_CATEGORY
+F32 LLTextureSizeView::drawTextureCategoryDistributionGraph() 
+{
+	//scale
+	F32 scale = 4.0f ;
+	
+	LLGLSUIDefault gls_ui;
+
+	{
+		S32 count = 0 ;
+		for(U32 i = 0 ; i < LLImageGL::sTextureMemByCategory.size() ; i++)
+		{
+			S32 tmp = LLImageGL::sTextureMemByCategory[i] >> 20 ;
+			if(tmp > count)
+			{
+				count = tmp ;
+			}
+		}
+		if(count > mTextureSizeBarRect.getHeight() * 0.25f)
+		{
+			scale = (F32)mTextureSizeBarRect.getHeight() * 0.25f / count ;
+		}
+	}
+
+	S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
+	S32 left = mTextureSizeBarRect.mLeft ;
+	S32 bottom = mTextureSizeBarRect.mBottom ;
+	S32 right = mTextureSizeBarRect.mRight ;
+	S32 top = mTextureSizeBarRect.mTop ;
+
+	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+	
+	//background rect
+	gl_rect_2d(left - 25, top + 30, right + 100, bottom - 25, LLColor4(0.0f, 0.0f, 0.0f, 0.25f)) ;
+
+	//--------------------------------------------------
+	gGL.color4f(1.0f, 0.5f, 0.5f, 0.75f);
+	gl_line_2d(left, bottom, right, bottom) ; //x axis
+	gl_line_2d(left, bottom, left, top) ; //y axis
+
+	//ruler
+	//--------------------------------------------------
+	gGL.color4f(1.0f, 0.5f, 0.5f, 0.5f);
+	for(S32 i = bottom + 50 ; i <= top ; i += 50)
+	{
+		gl_line_2d(left, i, right, i) ;
+	}
+
+	//texts
+	//--------------------------------------------------
+	F32 text_color[] = {1.f, 1.f, 1.f, 0.75f};	
+	std::string text;
+	
+	//-------
+	//x axis: size label			
+	static char category[LLViewerTexture::MAX_GL_IMAGE_CATEGORY][4] = 
+	{"Non", "Bak", "Av", "Cld", "Scp", "Hi", "Trn", "Slt", "Hud", "Bsf", "UI", "Pvw", "Map", "Mvs", "Slf", "Loc", "Scr", "Dyn", "Mdi", "ALT", "Oth" } ;
+
+	text = llformat("%s", category[0]) ;
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 12, bottom - line_height / 2,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+	for(U32 i = 1 ; i < mTextureSizeBar.size() ; i++)
+	{
+		text = llformat("%s", category[i]) ;
+		LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + i * mTextureSizeBarWidth + 12, bottom - line_height / 2,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+	}
+	//-------
+
+	//y axis: number label
+	for(S32 i = bottom + 50 ; i <= top ; i += 50)
+	{
+		text = llformat("%d", (S32)((i - bottom) / scale)) ;
+		LLFontGL::getFontMonospace()->renderUTF8(text, 0, left - 20, i + line_height / 2 ,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+		LLFontGL::getFontMonospace()->renderUTF8(text, 0, right + 5, i + line_height / 2 ,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+	}
+
+	text = llformat("MB") ;
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left - 20, top + line_height * 2 ,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+	//--------------------------------------------------
+	F32 loaded_color[] = {1.0f, 0.0f, 0.0f, 0.75f};
+	gl_rect_2d(left + 70, top + line_height * 2, left + 90, top + line_height, loaded_color) ;
+	text = llformat("Loaded") ;
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 100, top + line_height * 2,
+									 loaded_color, 
+									 LLFontGL::LEFT, LLFontGL::TOP);
+
+	F32 bound_color[] = {1.0f, 1.0f, 0.0f, 0.75f};
+	gl_rect_2d(left + 170, top + line_height * 2, left + 190, top + line_height, bound_color) ;
+	text = llformat("Bound") ;
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 200, top + line_height * 2,
+									 bound_color, LLFontGL::LEFT, LLFontGL::TOP);
+
+	//--------------------------------------------------
+
+	//title
+	text = llformat("Texture Category Distribution") ;
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 250, top + line_height * 3,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+
+	return scale ;
+}
diff --git a/indra/newview/lltextureview.h b/indra/newview/lltextureview.h
index e917c0235e7..435a55df835 100644
--- a/indra/newview/lltextureview.h
+++ b/indra/newview/lltextureview.h
@@ -79,24 +79,41 @@ class LLTextureView : public LLContainerView
 };
 
 class LLGLTexSizeBar;
-
-class LLTextureSizeView : public LLView
+class LLTextureSizeView : public LLContainerView
 {
-public:
+protected:
 	LLTextureSizeView(const Params&);
+	friend class LLUICtrlFactory;
+public:	
 	~LLTextureSizeView();
 
 	/*virtual*/ void draw();
 	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask) ;
 	
+	void setType(S32 type) {mType = type ;}
+	enum
+	{
+		TEXTURE_MEM_OVER_SIZE,
+		TEXTURE_MEM_OVER_CATEGORY
+	};
 private:
+	//draw background for TEXTURE_MEM_OVER_SIZE
 	F32 drawTextureSizeDistributionGraph() ;
-	
+	//draw real-time texture mem bar over size
+	void drawTextureSizeGraph();
+
+	//draw background for TEXTURE_MEM_OVER_CATEGORY
+	F32 drawTextureCategoryDistributionGraph() ;
+	//draw real-time texture mem bar over category
+	void drawTextureCategoryGraph();
+
 private:
 	std::vector<LLGLTexSizeBar*> mTextureSizeBar ;
 	LLRect mTextureSizeBarRect ;
-	S32    mTextureSizeBarWidth ;
+	S32    mTextureSizeBarWidth ;	
+	S32    mType ;
 };
 extern LLTextureView *gTextureView;
 extern LLTextureSizeView *gTextureSizeView;
+extern LLTextureSizeView *gTextureCategoryView;
 #endif // LL_TEXTURE_VIEW_H
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
index 841902f6833..a3daca6fa42 100644
--- a/indra/newview/llurldispatcher.cpp
+++ b/indra/newview/llurldispatcher.cpp
@@ -46,7 +46,7 @@
 #include "llstartup.h"			// gStartupState
 #include "llurlsimstring.h"
 #include "llweb.h"
-#include "llworldmap.h"
+#include "llworldmapmessage.h"
 
 // library includes
 #include "llsd.h"
@@ -201,7 +201,7 @@ bool LLURLDispatcherImpl::dispatchRegion(const std::string& url, bool right_mous
 	//if(url_displayp) url_displayp->setName(region_name);
 
 	// Request a region handle by name
-	LLWorldMap::getInstance()->sendNamedRegionRequest(region_name,
+	LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name,
 									  LLURLDispatcherImpl::regionNameCallback,
 									  url,
 									  false);	// don't teleport
@@ -240,7 +240,7 @@ void LLURLDispatcherImpl::regionNameCallback(U64 region_handle, const std::strin
 		LLVector3d global_pos = from_region_handle(region_handle) + LLVector3d(local_pos);
 
 		U64 new_region_handle = to_region_handle(global_pos);
-		LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle,
+		LLWorldMapMessage::getInstance()->sendHandleRegionRequest(new_region_handle,
 										   LLURLDispatcherImpl::regionHandleCallback,
 										   url, teleport);
 	}
@@ -335,7 +335,7 @@ class LLTeleportHandler : public LLCommandHandler
 		{
 			url += tokens[i].asString() + "/";
 		}
-		LLWorldMap::getInstance()->sendNamedRegionRequest(region_name,
+		LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name,
 			LLURLDispatcherImpl::regionHandleCallback,
 			url,
 			true);	// teleport
diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp
index f65baea6ca0..b5709fa1021 100644
--- a/indra/newview/llviewercamera.cpp
+++ b/indra/newview/llviewercamera.cpp
@@ -109,10 +109,13 @@ LLViewerCamera::LLViewerCamera() : LLCamera()
 {
 	calcProjection(getFar());
 	mCameraFOVDefault = DEFAULT_FIELD_OF_VIEW;
+	mCosHalfCameraFOV = cosf(mCameraFOVDefault * 0.5f);
 	mPixelMeterRatio = 0.f;
 	mScreenPixelArea = 0;
 	mZoomFactor = 1.f;
 	mZoomSubregion = 1;
+	mAverageSpeed = 0.f;
+	mAverageAngularSpeed = 0.f;
 	gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2));
 }
 
@@ -151,15 +154,22 @@ void LLViewerCamera::updateCameraLocation(const LLVector3 &center,
 
 	setOriginAndLookAt(origin, up_direction, point_of_interest);
 
-	F32 dpos = (center - last_position).magVec();
+	mVelocityDir = center - last_position ; 
+	F32 dpos = mVelocityDir.normVec() ;
 	LLQuaternion rotation;
 	rotation.shortestArc(last_axis, getAtAxis());
 
 	F32 x, y, z;
 	F32 drot;
 	rotation.getAngleAxis(&drot, &x, &y, &z);
+
 	mVelocityStat.addValue(dpos);
 	mAngularVelocityStat.addValue(drot);
+	
+	mAverageSpeed = mVelocityStat.getMeanPerSec() ;
+	mAverageAngularSpeed = mAngularVelocityStat.getMeanPerSec() ;
+	mCosHalfCameraFOV = cosf(0.5f * getView() * llmax(1.0f, getAspect()));
+
 	// update pixel meter ratio using default fov, not modified one
 	mPixelMeterRatio = getViewHeightInPixels()/ (2.f*tanf(mCameraFOVDefault*0.5));
 	// update screen pixel area
@@ -818,10 +828,12 @@ BOOL LLViewerCamera::areVertsVisible(LLViewerObject* volumep, BOOL all_verts)
 	LLCamera::setView(vertical_fov_rads); // call base implementation
 }
 
-void LLViewerCamera::setDefaultFOV(F32 vertical_fov_rads) {
+void LLViewerCamera::setDefaultFOV(F32 vertical_fov_rads) 
+{
 	vertical_fov_rads = llclamp(vertical_fov_rads, getMinView(), getMaxView());
 	setView(vertical_fov_rads);
 	mCameraFOVDefault = vertical_fov_rads; 
+	mCosHalfCameraFOV = cosf(mCameraFOVDefault * 0.5f);
 }
 
 
diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h
index 90b77f771f3..2b8a0892bf6 100644
--- a/indra/newview/llviewercamera.h
+++ b/indra/newview/llviewercamera.h
@@ -91,17 +91,20 @@ class LLViewerCamera : public LLCamera, public LLSingleton<LLViewerCamera>
 	BOOL projectPosAgentToScreen(const LLVector3 &pos_agent, LLCoordGL &out_point, const BOOL clamp = TRUE) const;
 	BOOL projectPosAgentToScreenEdge(const LLVector3 &pos_agent, LLCoordGL &out_point) const;
 
-
+	const LLVector3* getVelocityDir() const {return &mVelocityDir;}
 	LLStat *getVelocityStat() { return &mVelocityStat; }
 	LLStat *getAngularVelocityStat() { return &mAngularVelocityStat; }
+	F32     getCosHalfFov() {return mCosHalfCameraFOV;}
+	F32     getAverageSpeed() {return mAverageSpeed ;}
+	F32     getAverageAngularSpeed() {return mAverageAngularSpeed;}
 
 	void getPixelVectors(const LLVector3 &pos_agent, LLVector3 &up, LLVector3 &right);
 	LLVector3 roundToPixel(const LLVector3 &pos_agent);
 
 	// Sets the current matrix
 	/* virtual */ void setView(F32 vertical_fov_rads);
-	// Sets the current matrix AND remembers result as default view
-	void setDefaultFOV(F32 vertical_fov_rads);
+
+	void setDefaultFOV(F32 fov) ;
 	F32 getDefaultFOV() { return mCameraFOVDefault; }
 
 	BOOL cameraUnderWater() const;
@@ -120,9 +123,14 @@ class LLViewerCamera : public LLCamera, public LLSingleton<LLViewerCamera>
 
 	LLStat mVelocityStat;
 	LLStat mAngularVelocityStat;
+	LLVector3 mVelocityDir ;
+	F32       mAverageSpeed ;
+	F32       mAverageAngularSpeed ;
+
 	mutable LLMatrix4	mProjectionMatrix;	// Cache of perspective matrix
 	mutable LLMatrix4	mModelviewMatrix;
 	F32					mCameraFOVDefault;
+	F32					mCosHalfCameraFOV;
 	LLVector3			mLastPointOfInterest;
 	F32					mPixelMeterRatio; // Divide by distance from camera to get pixels per meter at that distance.
 	S32					mScreenPixelArea; // Pixel area of entire window
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index b71291f834f..6d3bf277bba 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -90,7 +90,7 @@ std::string gCurrentVersion;
 
 extern BOOL gResizeScreenTexture;
 extern BOOL gDebugGL;
-
+extern BOOL gAuditTexture;
 ////////////////////////////////////////////////////////////////////////////
 // Listeners
 
@@ -378,6 +378,12 @@ static bool handleRenderUseImpostorsChanged(const LLSD& newvalue)
 	return true;
 }
 
+static bool handleAuditTextureChanged(const LLSD& newvalue)
+{
+	gAuditTexture = newvalue.asBoolean();
+	return true;
+}
+
 static bool handleRenderDebugGLChanged(const LLSD& newvalue)
 {
 	gDebugGL = newvalue.asBoolean() || gDebugSession;
@@ -566,6 +572,7 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderDeferredShadow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("RenderDeferredGI")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("TextureMemory")->getSignal()->connect(boost::bind(&handleVideoMemoryChanged, _2));
+	gSavedSettings.getControl("AuditTexture")->getSignal()->connect(boost::bind(&handleAuditTextureChanged, _2));
 	gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&handleChatFontSizeChanged, _2));
 	gSavedSettings.getControl("ChatPersistTime")->getSignal()->connect(boost::bind(&handleChatPersistTimeChanged, _2));
 	gSavedSettings.getControl("ConsoleMaxLines")->getSignal()->connect(boost::bind(&handleConsoleMaxLinesChanged, _2));
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index a6a72e96661..e0bb8fedeb1 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -712,7 +712,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 
 			gBumpImageList.updateImages();  // must be called before gTextureList version so that it's textures are thrown out first.
 
-			const F32 max_image_decode_time = llmin(0.005f, 0.005f*10.f*gFrameIntervalSeconds); // 50 ms/second decode time (no more than 5ms/frame)
+			F32 max_image_decode_time = 0.050f*gFrameIntervalSeconds; // 50 ms/second decode time
+			max_image_decode_time = llclamp(max_image_decode_time, 0.001f, 0.005f ); // min 1ms/frame, max 5ms/frame)
 			gTextureList.updateImages(max_image_decode_time);
 
 			//remove dead textures from GL
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index e4643a15b58..3374720a68c 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -606,6 +606,14 @@ class LLAdvancedToggleConsole : public view_listener_t
 		{
 			toggle_visibility( (void*)((LLView*)gDebugView->mDebugConsolep) );
 		}
+		else if (gTextureSizeView && "texture size" == console_type)
+		{
+			toggle_visibility( (void*)gTextureSizeView );
+		}
+		else if (gTextureCategoryView && "texture category" == console_type)
+		{
+			toggle_visibility( (void*)gTextureCategoryView );
+		}
 		else if ("fast timers" == console_type)
 		{
 			toggle_visibility( (void*)gDebugView->mFastTimerView );
@@ -633,6 +641,14 @@ class LLAdvancedCheckConsole : public view_listener_t
 		{
 			new_value = get_visibility( (void*)((LLView*)gDebugView->mDebugConsolep) );
 		}
+		else if (gTextureSizeView && "texture size" == console_type)
+		{
+			new_value = get_visibility( (void*)gTextureSizeView );
+		}
+		else if (gTextureCategoryView && "texture category" == console_type)
+		{
+			new_value = get_visibility( (void*)gTextureCategoryView );
+		}
 		else if ("fast timers" == console_type)
 		{
 			new_value = get_visibility( (void*)gDebugView->mFastTimerView );
@@ -1156,28 +1172,6 @@ class LLAdvancedCheckWireframe : public view_listener_t
 	}
 };
 	
-//////////////////////
-// DISABLE TEXTURES //
-//////////////////////
-
-class LLAdvancedToggleDisableTextures : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		LLViewerTexture::sDontLoadVolumeTextures = !LLViewerTexture::sDontLoadVolumeTextures;
-		return true;
-	}
-};
-
-class LLAdvancedCheckDisableTextures : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		bool new_value = LLViewerTexture::sDontLoadVolumeTextures; // <-- make this using LLCacheControl
-		return new_value;
-	}
-};
-
 //////////////////////
 // TEXTURE ATLAS //
 //////////////////////
@@ -1909,7 +1903,7 @@ class LLAdvancedRebakeTextures : public view_listener_t
 };
 	
 	
-#ifndef LL_RELEASE_FOR_DOWNLOAD
+#if 1 //ndef LL_RELEASE_FOR_DOWNLOAD
 ///////////////////////////
 // DEBUG AVATAR TEXTURES //
 ///////////////////////////
@@ -3511,9 +3505,8 @@ void set_god_level(U8 god_level)
 	gIMMgr->refresh();
 	LLViewerParcelMgr::getInstance()->notifyObservers();
 
-	// God mode changes sim visibility
-	LLWorldMap::getInstance()->reset();
-	LLWorldMap::getInstance()->setCurrentLayer(0);
+	// God mode changes region visibility
+	LLWorldMap::getInstance()->reloadItems(true);
 
 	// inventory in items may change in god mode
 	gObjectList.dirtyAllObjectInventory();
@@ -7887,8 +7880,6 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAdvancedSelectedTextureInfo(), "Advanced.SelectedTextureInfo");
 	view_listener_t::addMenu(new LLAdvancedToggleWireframe(), "Advanced.ToggleWireframe");
 	view_listener_t::addMenu(new LLAdvancedCheckWireframe(), "Advanced.CheckWireframe");
-	view_listener_t::addMenu(new LLAdvancedToggleDisableTextures(), "Advanced.ToggleDisableTextures");
-	view_listener_t::addMenu(new LLAdvancedCheckDisableTextures(), "Advanced.CheckDisableTextures");
 	view_listener_t::addMenu(new LLAdvancedToggleTextureAtlas(), "Advanced.ToggleTextureAtlas");
 	view_listener_t::addMenu(new LLAdvancedCheckTextureAtlas(), "Advanced.CheckTextureAtlas");
 	view_listener_t::addMenu(new LLAdvancedEnableObjectObjectOcclusion(), "Advanced.EnableObjectObjectOcclusion");
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 20cd516fa06..5de52367ef4 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -2906,7 +2906,7 @@ F32 LLViewerObject::getMidScale() const
 }
 
 
-void LLViewerObject::updateTextures(LLAgent &agent)
+void LLViewerObject::updateTextures()
 {
 }
 
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index b8ae31118c1..01b213a87d1 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -199,7 +199,7 @@ class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate
 	S32 getNumFaces() const { return mNumFaces; }
 
 	// Graphical stuff for objects - maybe broken out into render class later?
-	virtual void updateTextures(LLAgent &agent);
+	virtual void updateTextures();
 	virtual void boostTexturePriority(BOOL boost_children = TRUE);	// When you just want to boost priority of this object
 	
 	virtual LLDrawable* createDrawable(LLPipeline *pipeline);
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 2927ca52926..96828ee1b60 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -642,7 +642,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
 
 			//  Update distance & gpw 
 			objectp->setPixelAreaAndAngle(agent); // Also sets the approx. pixel area
-			objectp->updateTextures(agent);	// Update the image levels of textures for this object.
+			objectp->updateTextures();	// Update the image levels of textures for this object.
 		}
 	}
 
@@ -1074,6 +1074,7 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap)
 	LLColor4 group_own_below_water_color = 
 						LLUIColorTable::instance().getColor( "NetMapGroupOwnBelowWater" );
 
+	F32 max_radius = gSavedSettings.getF32("MiniMapPrimMaxRadius");
 
 	for (S32 i = 0; i < mMapObjects.count(); i++)
 	{
@@ -1089,6 +1090,11 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap)
 
 		F32 approx_radius = (scale.mV[VX] + scale.mV[VY]) * 0.5f * 0.5f * 1.3f;  // 1.3 is a fudge
 
+		// Limit the size of megaprims so they don't blot out everything on the minimap.
+		// Attempting to draw very large megaprims also causes client lag.
+		// See DEV-17370 and DEV-29869/SNOW-79 for details.
+		approx_radius = llmin(approx_radius, max_radius);
+
 		LLColor4U color = above_water_color;
 		if( objectp->permYouOwner() )
 		{
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 7ea55b49e86..d1c9840a972 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1427,11 +1427,11 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	capabilityNames.append("EstateChangeInfo");
 	capabilityNames.append("EventQueueGet");
 	capabilityNames.append("FetchInventory");
-	capabilityNames.append("WebFetchInventoryDescendents");
 	capabilityNames.append("ObjectMedia");
 	capabilityNames.append("ObjectMediaNavigate");
 	capabilityNames.append("FetchLib");
 	capabilityNames.append("FetchLibDescendents");
+	capabilityNames.append("GetTexture");
 	capabilityNames.append("GroupProposalBallot");
 	capabilityNames.append("HomeLocation");
 	capabilityNames.append("MapLayer");
@@ -1452,6 +1452,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	capabilityNames.append("SendUserReportWithScreenshot");
 	capabilityNames.append("ServerReleaseNotes");
 	capabilityNames.append("StartGroupProposal");
+	capabilityNames.append("TextureStats");
 	capabilityNames.append("UntrustedSimulatorMessage");
 	capabilityNames.append("UpdateAgentInformation");
 	capabilityNames.append("UpdateAgentLanguage");
@@ -1464,6 +1465,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	capabilityNames.append("UploadBakedTexture");
 	capabilityNames.append("ViewerStartAuction");
 	capabilityNames.append("ViewerStats");
+	capabilityNames.append("WebFetchInventoryDescendents");
 	// Please add new capabilities alphabetically to reduce
 	// merge conflicts.
 
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index 6e07d8f2468..caa94dba381 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -560,12 +560,18 @@ extern U32  gVisCompared;
 extern U32  gVisTested;
 
 std::map<S32,LLFrameTimer> gDebugTimers;
+std::map<S32,std::string> gDebugTimerLabel;
+
+void init_statistics()
+{
+	// Label debug timers
+	gDebugTimerLabel[0] = "Texture";
+}
 
 void update_statistics(U32 frame_count)
 {
 	gTotalWorldBytes += gVLManager.getTotalBytes();
 	gTotalObjectBytes += gObjectBits / 8;
-	gTotalTextureBytes += gTextureList.mTextureBits / 8;
 
 	// make sure we have a valid time delta for this frame
 	if (gFrameIntervalSeconds > 0.f)
@@ -617,7 +623,6 @@ void update_statistics(U32 frame_count)
 	F32 layer_bits = (F32)(gVLManager.getLandBits() + gVLManager.getWindBits() + gVLManager.getCloudBits());
 	LLViewerStats::getInstance()->mLayersKBitStat.addValue(layer_bits/1024.f);
 	LLViewerStats::getInstance()->mObjectKBitStat.addValue(gObjectBits/1024.f);
-	LLViewerStats::getInstance()->mTextureKBitStat.addValue(gTextureList.mTextureBits/1024.f);
 	LLViewerStats::getInstance()->mVFSPendingOperations.addValue(LLVFile::getVFSThread()->getPending());
 	LLViewerStats::getInstance()->mAssetKBitStat.addValue(gTransferManager.getTransferBitsIn(LLTCT_ASSET)/1024.f);
 	gTransferManager.resetTransferBitsIn(LLTCT_ASSET);
@@ -631,8 +636,6 @@ void update_statistics(U32 frame_count)
 		gDebugTimers[0].unpause();
 	}
 	
-	LLViewerStats::getInstance()->mTexturePacketsStat.addValue(gTextureList.mTexturePackets);
-
 	{
 		static F32 visible_avatar_frames = 0.f;
 		static F32 avg_visible_avatars = 0;
@@ -652,8 +655,20 @@ void update_statistics(U32 frame_count)
 	gObjectBits = 0;
 //	gDecodedBits = 0;
 
-	gTextureList.mTextureBits = 0;
-	gTextureList.mTexturePackets = 0;
+	// Only update texture stats ones per second so that they are less noisy
+	{
+		static const F32 texture_stats_freq = 1.f;
+		static LLFrameTimer texture_stats_timer;
+		if (texture_stats_timer.getElapsedTimeF32() >= texture_stats_freq)
+		{
+			LLViewerStats::getInstance()->mTextureKBitStat.addValue(LLViewerTextureList::sTextureBits/1024.f);
+			LLViewerStats::getInstance()->mTexturePacketsStat.addValue(LLViewerTextureList::sTexturePackets);
+			gTotalTextureBytes += LLViewerTextureList::sTextureBits / 8;
+			LLViewerTextureList::sTextureBits = 0;
+			LLViewerTextureList::sTexturePackets = 0;
+			texture_stats_timer.reset();
+		}
+	}
 
 }
 
@@ -826,3 +841,4 @@ void send_stats()
 	LLViewerStats::getInstance()->addToMessage(body);
 	LLHTTPClient::post(url, body, new ViewerStatsResponder());
 }
+
diff --git a/indra/newview/llviewerstats.h b/indra/newview/llviewerstats.h
index ba89fbf02a5..13d73000d24 100644
--- a/indra/newview/llviewerstats.h
+++ b/indra/newview/llviewerstats.h
@@ -34,6 +34,7 @@
 #define LL_LLVIEWERSTATS_H
 
 #include "llstat.h"
+#include "lltextureinfo.h"
 
 class LLViewerStats : public LLSingleton<LLViewerStats>
 {
@@ -205,10 +206,13 @@ class LLViewerStats : public LLSingleton<LLViewerStats>
 static const F32 SEND_STATS_PERIOD = 300.0f;
 
 // The following are from (older?) statistics code found in appviewer.
+void init_statistics();
 void reset_statistics();
 void output_statistics(void*);
 void update_statistics(U32 frame_count);
 void send_stats();
 
 extern std::map<S32,LLFrameTimer> gDebugTimers;
+extern std::map<S32,std::string> gDebugTimerLabel;
+
 #endif // LL_LLVIEWERSTATS_H
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index a0ab4cb1e68..b2ca9edfea5 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -60,6 +60,8 @@
 #include "llviewercontrol.h"
 #include "pipeline.h"
 #include "llappviewer.h"
+#include "llface.h"
+#include "llviewercamera.h"
 #include "lltextureatlas.h"
 #include "lltextureatlasmanager.h"
 #include "lltextureentry.h"
@@ -88,7 +90,15 @@ S32 LLViewerTexture::sTotalTextureMemoryInBytes = 0;
 S32 LLViewerTexture::sMaxBoundTextureMemInMegaBytes = 0;
 S32 LLViewerTexture::sMaxTotalTextureMemInMegaBytes = 0;
 S32 LLViewerTexture::sMaxDesiredTextureMemInBytes = 0 ;
-BOOL LLViewerTexture::sDontLoadVolumeTextures = FALSE;
+S8  LLViewerTexture::sCameraMovingDiscardBias = 0 ;
+S32 LLViewerTexture::sMaxSculptRez = 128 ; //max sculpt image size
+const S32 MAX_CACHED_RAW_IMAGE_AREA = 64 * 64 ;
+const S32 MAX_CACHED_RAW_SCULPT_IMAGE_AREA = LLViewerTexture::sMaxSculptRez * LLViewerTexture::sMaxSculptRez ;
+const S32 MAX_CACHED_RAW_TERRAIN_IMAGE_AREA = 128 * 128 ;
+S32 LLViewerTexture::sMinLargeImageSize = 65536 ; //256 * 256.
+S32 LLViewerTexture::sMaxSmallImageSize = MAX_CACHED_RAW_IMAGE_AREA ;
+BOOL LLViewerTexture::sFreezeImageScalingDown = FALSE ;
+F32 LLViewerTexture::sCurrentTime = 0.0f ;
 BOOL LLViewerTexture::sUseTextureAtlas        = FALSE ;
 
 const F32 desired_discard_bias_min = -2.0f; // -max number of levels to improve image quality by
@@ -161,6 +171,7 @@ LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(BOOL usemipma
 	if(generate_gl_tex)
 	{
 		tex->generateGLTexture() ;
+		tex->setCategory(LLViewerTexture::LOCAL) ;
 	}
 	return tex ;
 }
@@ -170,12 +181,14 @@ LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const LLUUID&
 	if(generate_gl_tex)
 	{
 		tex->generateGLTexture() ;
+		tex->setCategory(LLViewerTexture::LOCAL) ;
 	}
 	return tex ;
 }
 LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const LLImageRaw* raw, BOOL usemipmaps) 
 {
 	LLPointer<LLViewerTexture> tex = new LLViewerTexture(raw, usemipmaps) ;
+	tex->setCategory(LLViewerTexture::LOCAL) ;
 	return tex ;
 }
 LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const U32 width, const U32 height, const U8 components, BOOL usemipmaps, BOOL generate_gl_tex) 
@@ -184,6 +197,7 @@ LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const U32 wid
 	if(generate_gl_tex)
 	{
 		tex->generateGLTexture() ;
+		tex->setCategory(LLViewerTexture::LOCAL) ;
 	}
 	return tex ;
 }
@@ -212,6 +226,19 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromFile(
 	return gTextureList.getImageFromFile(filename, usemipmaps, level_immediate, texture_type, internal_format, primary_format, force_id) ;
 }
 
+//static 
+LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromUrl(const std::string& url,									 
+									 BOOL usemipmaps,
+									 BOOL level_immediate,		// Get the requested level immediately upon creation.
+									 S8 texture_type,
+									 LLGLint internal_format,
+									 LLGLenum primary_format,
+									 const LLUUID& force_id
+									 )
+{
+	return gTextureList.getImageFromUrl(url, usemipmaps, level_immediate, texture_type, internal_format, primary_format, force_id) ;
+}
+
 LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromHost(const LLUUID& image_id, LLHost host) 
 {
 	return gTextureList.getImageFromHost(image_id, host) ;
@@ -253,11 +280,12 @@ void LLViewerTextureManager::init()
 	}
 	imagep->createGLTexture(0, image_raw);
 	image_raw = NULL;
-	LLViewerFetchedTexture::sDefaultImagep->dontDiscard();
 #else
  	LLViewerFetchedTexture::sDefaultImagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE);
 #endif
-	
+	LLViewerFetchedTexture::sDefaultImagep->dontDiscard();
+	LLViewerFetchedTexture::sDefaultImagep->setCategory(LLViewerTexture::OTHER) ;
+
  	LLViewerFetchedTexture::sSmokeImagep = LLViewerTextureManager::getFetchedTexture(IMG_SMOKE, TRUE, TRUE);
 	LLViewerFetchedTexture::sSmokeImagep->setNoDelete() ;
 
@@ -281,6 +309,8 @@ void LLViewerTextureManager::cleanup()
 	LLViewerFetchedTexture::sWhiteImagep = NULL;
 
 	LLViewerMediaTexture::cleanup() ;	
+
+	LLViewerTexture::cleanupClass() ;
 }
 
 //----------------------------------------------------------------------------------------------
@@ -291,6 +321,11 @@ void LLViewerTextureManager::cleanup()
 void LLViewerTexture::initClass()
 {
 	LLImageGL::sDefaultGLTexture = LLViewerFetchedTexture::sDefaultImagep->getGLTexture() ;
+
+	if(gAuditTexture)
+	{
+		LLImageGL::setHighlightTexture(LLViewerTexture::OTHER) ;	
+	}
 }
 
 // static
@@ -298,6 +333,25 @@ void LLViewerTexture::cleanupClass()
 {
 }
 
+// static
+S32 LLViewerTexture::getTotalNumOfCategories() 
+{
+	return MAX_GL_IMAGE_CATEGORY - (BOOST_HIGH - BOOST_SCULPTED) + 2 ;
+}
+
+// static
+//index starts from zero.
+S32 LLViewerTexture::getIndexFromCategory(S32 category) 
+{
+	return (category < BOOST_HIGH) ? category : category - (BOOST_HIGH - BOOST_SCULPTED) + 1 ;
+}
+
+//static 
+S32 LLViewerTexture::getCategoryFromIndex(S32 index)
+{
+	return (index < BOOST_HIGH) ? index : index + (BOOST_HIGH - BOOST_SCULPTED) - 1 ;
+}
+
 // tuning params
 const F32 discard_bias_delta = .05f;
 const F32 discard_delta_time = 0.5f;
@@ -309,6 +363,8 @@ F32 texmem_middle_bound_scale = 0.925f;
 //static
 void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity)
 {
+	sCurrentTime = gFrameTimeSeconds ;
+
 	if(LLViewerTextureManager::sTesterp)
 	{
 		LLViewerTextureManager::sTesterp->update() ;
@@ -349,6 +405,13 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity
 	}
 	sDesiredDiscardBias = llclamp(sDesiredDiscardBias, desired_discard_bias_min, desired_discard_bias_max);
 	LLViewerTexture::sUseTextureAtlas = gSavedSettings.getBOOL("EnableTextureAtlas") ;
+	
+	F32 camera_moving_speed = LLViewerCamera::getInstance()->getAverageSpeed() ;
+	F32 camera_angular_speed = LLViewerCamera::getInstance()->getAverageAngularSpeed();
+	sCameraMovingDiscardBias = (S8)llmax(0.2f * camera_moving_speed, 2.0f * camera_angular_speed - 1) ;
+
+	LLViewerTexture::sFreezeImageScalingDown = (BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) < 0.75f * sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale) &&
+				(BYTES_TO_MEGA_BYTES(sTotalTextureMemoryInBytes) < 0.75f * sMaxTotalTextureMemInMegaBytes * texmem_middle_bound_scale) ;
 }
 
 //end of static functions
@@ -414,7 +477,9 @@ void LLViewerTexture::init(bool firstinit)
 	mTextureState = NO_DELETE ;
 	mDontDiscard = FALSE;
 	mMaxVirtualSize = 0.f;
+	mNeedsGLTexture = FALSE ;
 	mNeedsResetMaxVirtualSize = FALSE ;
+	mAdditionalDecodePriority = 0.f ;	
 }
 
 //virtual 
@@ -455,11 +520,15 @@ void LLViewerTexture::setBoostLevel(S32 level)
 		{
 			setNoDelete() ;		
 		}
+		if(gAuditTexture)
+		{
+			setCategory(mBoostLevel);
+		}
 	}
 }
 
 
-bool LLViewerTexture::bindDefaultImage(S32 stage) const
+bool LLViewerTexture::bindDefaultImage(S32 stage) 
 {
 	if (stage < 0) return false;
 
@@ -478,6 +547,10 @@ bool LLViewerTexture::bindDefaultImage(S32 stage) const
 		llwarns << "LLViewerTexture::bindDefaultImage failed." << llendl;
 	}
 	stop_glerror();
+
+	//check if there is cached raw image and switch to it if possible
+	switchToCachedImage() ;
+
 	if(LLViewerTextureManager::sTesterp)
 	{
 		LLViewerTextureManager::sTesterp->updateGrayTextureBinding() ;
@@ -496,24 +569,32 @@ void LLViewerTexture::forceImmediateUpdate()
 {
 }
 
-void LLViewerTexture::addTextureStats(F32 virtual_size) const 
+void LLViewerTexture::addTextureStats(F32 virtual_size, BOOL needs_gltexture) const 
 {
-	if (virtual_size > mMaxVirtualSize)
+	if(needs_gltexture)
 	{
-		mMaxVirtualSize = virtual_size;
+		mNeedsGLTexture = TRUE ;
 	}
-}
 
-void LLViewerTexture::resetTextureStats(BOOL zero)
-{
-	if (zero)
+	if(mNeedsResetMaxVirtualSize)
 	{
-		mMaxVirtualSize = 0.0f;
+		//flag to reset the values because the old values are used.
+		mNeedsResetMaxVirtualSize = FALSE ;
+		mMaxVirtualSize = virtual_size;		
+		mAdditionalDecodePriority = 0.f ;	
+		mNeedsGLTexture = needs_gltexture ;
 	}
-	else
+	else if (virtual_size > mMaxVirtualSize)
 	{
-		mMaxVirtualSize -= mMaxVirtualSize * .10f; // decay by 5%/update
-	}
+		mMaxVirtualSize = virtual_size;
+	}	
+}
+
+void LLViewerTexture::resetTextureStats()
+{
+	mMaxVirtualSize = 0.0f;
+	mAdditionalDecodePriority = 0.f ;	
+	mNeedsResetMaxVirtualSize = FALSE ;
 }
 
 //virtual 
@@ -534,6 +615,12 @@ void LLViewerTexture::removeFace(LLFace* facep)
 	mFaceList.remove(facep) ;
 }
 
+//virtual
+void LLViewerTexture::switchToCachedImage()
+{
+	//nothing here.
+}
+
 void LLViewerTexture::forceActive()
 {
 	mTextureState = ACTIVE ; 
@@ -578,11 +665,11 @@ BOOL LLViewerTexture::createGLTexture()
 	return mGLTexturep->createGLTexture() ;
 }
 
-BOOL LLViewerTexture::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename)
+BOOL LLViewerTexture::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename, BOOL to_create, S32 category)
 {
 	llassert_always(mGLTexturep.notNull()) ;	
 
-	BOOL ret = mGLTexturep->createGLTexture(discard_level, imageraw, usename) ;
+	BOOL ret = mGLTexturep->createGLTexture(discard_level, imageraw, usename, to_create, category) ;
 	
 	if(ret)
 	{
@@ -694,6 +781,13 @@ void LLViewerTexture::setGLTextureCreated (bool initialized)
 	mGLTexturep->setGLTextureCreated (initialized) ;
 }
 
+void  LLViewerTexture::setCategory(S32 category) 
+{
+	llassert_always(mGLTexturep.notNull()) ;
+
+	mGLTexturep->setCategory(category) ;
+}
+
 LLTexUnit::eTextureAddressMode LLViewerTexture::getAddressMode(void) const
 {
 	llassert_always(mGLTexturep.notNull()) ;
@@ -742,18 +836,18 @@ BOOL LLViewerTexture::getMissed() const
 	return mGLTexturep->getMissed() ;
 }
 
-BOOL LLViewerTexture::isValidForSculpt(S32 discard_level, S32 image_width, S32 image_height, S32 ncomponents) 
+BOOL LLViewerTexture::isJustBound() const
 {
 	llassert_always(mGLTexturep.notNull()) ;
 
-	return mGLTexturep->isValidForSculpt(discard_level, image_width, image_height, ncomponents) ;
+	return mGLTexturep->isJustBound() ;
 }
 
-BOOL LLViewerTexture::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok) const
+void LLViewerTexture::forceUpdateBindStats(void) const
 {
 	llassert_always(mGLTexturep.notNull()) ;
 
-	return mGLTexturep->readBackRaw(discard_level, imageraw, compressed_ok) ;
+	return mGLTexturep->forceUpdateBindStats() ;
 }
 
 U32 LLViewerTexture::getTexelsInAtlas() const
@@ -793,6 +887,11 @@ void LLViewerTexture::destroyGLTexture()
 	}	
 }
 
+BOOL LLViewerTexture::isLargeImage()
+{
+	return mFullWidth * mFullHeight > LLViewerTexture::sMinLargeImageSize ;
+}
+
 //virtual 
 void LLViewerTexture::updateBindStatsForTester()
 {
@@ -813,11 +912,12 @@ void LLViewerTexture::updateBindStatsForTester()
 //static
 F32 LLViewerFetchedTexture::maxDecodePriority()
 {
-	return 2000000.f;
+	return 6000000.f;
 }
 
-LLViewerFetchedTexture::LLViewerFetchedTexture(const LLUUID& id, BOOL usemipmaps)
-	: LLViewerTexture(id, usemipmaps)
+LLViewerFetchedTexture::LLViewerFetchedTexture(const LLUUID& id, const LLHost& host, BOOL usemipmaps)
+	: LLViewerTexture(id, usemipmaps),
+	mTargetHost(host)
 {
 	init(TRUE) ;
 	generateGLTexture() ;
@@ -829,9 +929,9 @@ LLViewerFetchedTexture::LLViewerFetchedTexture(const LLImageRaw* raw, BOOL usemi
 	init(TRUE) ;
 }
 	
-LLViewerFetchedTexture::LLViewerFetchedTexture(const std::string& full_path, const LLUUID& id, BOOL usemipmaps)
+LLViewerFetchedTexture::LLViewerFetchedTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps)
 	: LLViewerTexture(id, usemipmaps),
-	mLocalFileName(full_path)
+	mUrl(url)
 {
 	init(TRUE) ;
 	generateGLTexture() ;
@@ -879,6 +979,16 @@ void LLViewerFetchedTexture::init(bool firstinit)
 	mVisibleFrame = 0;
 	mForSculpt = FALSE ;
 	mIsFetched = FALSE ;
+
+	mCachedRawImage = NULL ;
+	mCachedRawDiscardLevel = -1 ;
+	mCachedRawImageReady = FALSE ;
+
+	mSavedRawImage = NULL ;
+	mForceToSaveRawImage  = FALSE ;
+	mSavedRawDiscardLevel = -1 ;
+	mDesiredSavedRawDiscardLevel = -1 ;
+	mLastReferencedSavedRawImageTime = 0.0f ;
 }
 
 LLViewerFetchedTexture::~LLViewerFetchedTexture()
@@ -915,11 +1025,25 @@ void LLViewerFetchedTexture::cleanup()
 	
 	// Clean up image data
 	destroyRawImage();
+	mCachedRawImage = NULL ;
+	mCachedRawDiscardLevel = -1 ;
+	mCachedRawImageReady = FALSE ;
+	mSavedRawImage = NULL ;
 }
 
 void LLViewerFetchedTexture::setForSculpt()
 {
 	mForSculpt = TRUE ;
+	if(isForSculptOnly() && !getBoundRecently())
+	{
+		destroyGLTexture() ; //sculpt image does not need gl texture.
+	}
+	checkCachedRawSculptImage() ;
+}
+
+BOOL LLViewerFetchedTexture::isForSculptOnly() const
+{
+	return mForSculpt && !mNeedsGLTexture ;
 }
 
 BOOL LLViewerFetchedTexture::isDeleted()  
@@ -954,17 +1078,37 @@ void LLViewerFetchedTexture::setInactive()
 	}
 }
 
+BOOL LLViewerFetchedTexture::isFullyLoaded() const
+{
+	// Unfortunately, the boolean "mFullyLoaded" is never updated correctly so we use that logic
+	// to check if the texture is there and completely downloaded
+	return (mFullWidth != 0) && (mFullHeight != 0) && !mIsFetching && !mHasFetcher;
+}
+
+
 // virtual
 void LLViewerFetchedTexture::dump()
 {
 	LLViewerTexture::dump();
 
-	llinfos << "LLViewerFetchedTexture"
-			<< " mIsMissingAsset " << (S32)mIsMissingAsset
-			<< " mFullWidth " << mFullWidth
-			<< " mFullHeight " << mFullHeight
-			<< " mOrigWidth" << mOrigWidth
-			<< " mOrigHeight" << mOrigHeight
+	llinfos << "Dump : " << mID 
+			<< ", mIsMissingAsset = " << (S32)mIsMissingAsset
+			<< ", mFullWidth = " << (S32)mFullWidth
+			<< ", mFullHeight = " << (S32)mFullHeight
+			<< ", mOrigWidth = " << (S32)mOrigWidth
+			<< ", mOrigHeight = " << (S32)mOrigHeight
+			<< llendl;
+	llinfos << "     : " 
+			<< " mFullyLoaded = " << (S32)mFullyLoaded
+			<< ", mFetchState = " << (S32)mFetchState
+			<< ", mFetchPriority = " << (S32)mFetchPriority
+			<< ", mDownloadProgress = " << (F32)mDownloadProgress
+			<< llendl;
+	llinfos << "     : " 
+			<< " mHasFetcher = " << (S32)mHasFetcher
+			<< ", mIsFetching = " << (S32)mIsFetching
+			<< ", mIsFetched = " << (S32)mIsFetched
+			<< ", mBoostLevel = " << (S32)mBoostLevel
 			<< llendl;
 }
 
@@ -985,6 +1129,75 @@ void LLViewerFetchedTexture::destroyTexture()
 	mFullyLoaded = FALSE ;
 }
 
+//
+//do not change the discard level of the loaded texture image.
+BOOL LLViewerFetchedTexture::keepReuestedDiscardLevel()
+{
+	if (!mLoadedCallbackList.empty())
+	{
+		return TRUE ;
+	}
+
+	return FALSE ;
+}
+
+void LLViewerFetchedTexture::addToCreateTexture()
+{
+	if(isForSculptOnly())
+	{
+		//just update some variables, not to create a real GL texture.
+		createGLTexture(mRawDiscardLevel, mRawImage, 0, FALSE) ;
+		mNeedsCreateTexture = FALSE ;
+		destroyRawImage();
+	}
+	else
+	{	
+#if 1
+		//
+		//if mRequestedDiscardLevel > mDesiredDiscardLevel, we assume the required image res keep going up,
+		//so do not scale down the over qualified image.
+		//Note: scaling down image is expensensive. Do it only when very necessary.
+		//
+		if(mRequestedDiscardLevel <= mDesiredDiscardLevel && !keepReuestedDiscardLevel())
+		{
+			S32 w = mFullWidth >> mRawDiscardLevel;
+			S32 h = mFullHeight >> mRawDiscardLevel;
+
+			//if big image, do not load extra data
+			//scale it down to size >= LLViewerTexture::sMinLargeImageSize
+			if(w * h > LLViewerTexture::sMinLargeImageSize)
+			{
+				S32 d_level = llmin(mRequestedDiscardLevel, (S32)mDesiredDiscardLevel) - mRawDiscardLevel ;
+				
+				if(d_level > 0)
+				{
+					S32 i = 0 ;
+					while((d_level > 0) && ((w >> i) * (h >> i) > LLViewerTexture::sMinLargeImageSize))
+					{
+						i++;
+						d_level--;
+					}
+					if(i > 0)
+					{
+						mRawDiscardLevel += i ;
+						if(mRawDiscardLevel >= getDiscardLevel() && getDiscardLevel() > 0)
+						{
+							mNeedsCreateTexture = FALSE ;
+							destroyRawImage();
+							return ;
+						}
+						mRawImage->scale(w >> i, h >> i) ;					
+					}
+				}
+			}
+		}
+#endif
+		mNeedsCreateTexture = TRUE;
+		gTextureList.mCreateTextureList.insert(this);
+	}	
+	return ;
+}
+
 // ONLY called from LLViewerTextureList
 BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
 {
@@ -1006,7 +1219,7 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
 	if (!gNoRender)
 	{
 		// store original size only for locally-sourced images
-		if (!mLocalFileName.empty())
+		if (mUrl.compare(0, 7, "file://") == 0)
 		{
 			mOrigWidth = mRawImage->getWidth();
 			mOrigHeight = mRawImage->getHeight();
@@ -1052,7 +1265,7 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
 		
 		if(!(res = insertToAtlas()))
 		{
-			res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename);
+			res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename, TRUE, mBoostLevel);
 			resetFaceAtlas() ;
 		}
 		setActive() ;
@@ -1099,7 +1312,15 @@ void LLViewerFetchedTexture::processTextureStats()
 		return ;
 	}
 
-	if(!mFullWidth || !mFullHeight)
+	updateVirtualSize() ;
+	
+	static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes");
+	
+	if (textures_fullres)
+	{
+		mDesiredDiscardLevel = 0;
+	}
+	else if(!mFullWidth || !mFullHeight)
 	{
 		mDesiredDiscardLevel = 	getMaxDiscardLevel() ;
 	}
@@ -1148,8 +1369,11 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 	{
 		return mDecodePriority; // no change while waiting to create
 	}
-
-	F32 priority;
+	if(mForceToSaveRawImage)
+	{
+		return maxDecodePriority() ;
+	}
+	
 	S32 cur_discard = getDiscardLevel();
 	bool have_all_data = (cur_discard >= 0 && (cur_discard <= mDesiredDiscardLevel));
 	F32 pixel_priority = fsqrtf(mMaxVirtualSize);
@@ -1159,11 +1383,24 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 	{
 		mVisibleFrame = mDecodeFrame;
 	}
-	
+
+	F32 priority;
 	if (mIsMissingAsset)
 	{
 		priority = 0.0f;
 	}
+	else if(mDesiredDiscardLevel >= cur_discard && cur_discard > -1)
+	{
+		priority = -1.0f ;
+	}
+	else if (!isJustBound() && mCachedRawImageReady && !mBoostLevel)
+	{
+		priority = -1.0f;
+	}
+	else if(mCachedRawDiscardLevel > -1 && mDesiredDiscardLevel >= mCachedRawDiscardLevel)
+	{
+		priority = -1.0f;
+	}
 	else if (mDesiredDiscardLevel > getMaxDiscardLevel())
 	{
 		// Don't decode anything we don't need
@@ -1213,7 +1450,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 		{
 			ddiscard+=2;
 		}
-		else if (mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == 0)
+		else if (ddiscard > 2 && mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == 0)
 		{
 			ddiscard-=2;
 		}
@@ -1222,7 +1459,10 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 	}
 	if (priority > 0.0f)
 	{
-		pixel_priority = llclamp(pixel_priority, 0.0f, priority-1.f); // priority range = 100000-900000
+		// priority range = 100000-900000
+		pixel_priority = llclamp(pixel_priority, 0.0f, priority-1.f); 
+
+		// priority range = [100000.f, 2000000.f]
 		if ( mBoostLevel > BOOST_HIGH)
 		{
 			priority = 1000000.f + pixel_priority + 1000.f * mBoostLevel;
@@ -1231,6 +1471,12 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 		{
 			priority +=      0.f + pixel_priority + 1000.f * mBoostLevel;
 		}
+
+		// priority range = [2100000.f, 5000000.f] if mAdditionalDecodePriority > 1.0
+		if(mAdditionalDecodePriority > 1.0f)
+		{
+			priority += 2000000.f + mAdditionalDecodePriority ;
+		}
 	}
 	return priority;
 }
@@ -1242,6 +1488,40 @@ void LLViewerFetchedTexture::setDecodePriority(F32 priority)
 	mDecodePriority = priority;
 }
 
+F32 LLViewerFetchedTexture::maxAdditionalDecodePriority()
+{
+	return 2000000.f;
+}
+void LLViewerFetchedTexture::setAdditionalDecodePriority(F32 priority)
+{
+	priority *= maxAdditionalDecodePriority();
+	if(mAdditionalDecodePriority < priority)
+	{
+		mAdditionalDecodePriority = priority;
+	}
+}
+
+void LLViewerFetchedTexture::updateVirtualSize() 
+{	
+	if(mNeedsResetMaxVirtualSize)
+	{
+		addTextureStats(0.f, FALSE) ;//reset
+	}
+	if(mFaceList.size() > 0) 
+	{				
+		for(std::list<LLFace*>::iterator iter = mFaceList.begin(); iter != mFaceList.end(); ++iter)
+		{
+			LLFace* facep = *iter ;
+			if(facep->getDrawable()->isRecentlyVisible())
+			{
+				addTextureStats(facep->getVirtualSize()) ;
+				setAdditionalDecodePriority(facep->getImportanceToCamera()) ;
+			}
+		}	
+	}
+	mNeedsResetMaxVirtualSize = TRUE ;
+}
+
 bool LLViewerFetchedTexture::updateFetch()
 {
 	mFetchState = 0;
@@ -1281,6 +1561,15 @@ bool LLViewerFetchedTexture::updateFetch()
 	{
 		// Sets mRawDiscardLevel, mRawImage, mAuxRawImage
 		S32 fetch_discard = current_discard;
+		
+		if(mForceToSaveRawImage)
+		{
+			if(fetch_discard >= 0)
+			{
+				fetch_discard = llmax(fetch_discard, mSavedRawDiscardLevel) ;
+			}
+		}
+
 		if (mRawImage.notNull()) sRawCount--;
 		if (mAuxRawImage.notNull()) sAuxCount--;
 		bool finished = LLAppViewer::getTextureFetch()->getRequestFinished(getID(), fetch_discard, mRawImage, mAuxRawImage);
@@ -1320,11 +1609,24 @@ bool LLViewerFetchedTexture::updateFetch()
 						(*iter)->dirtyTexture() ;
 					}
 				}			
-				mIsRawImageValid = TRUE;
-				gTextureList.mCreateTextureList.insert(this);
-				mNeedsCreateTexture = TRUE;
 				mFullWidth = mRawImage->getWidth() << mRawDiscardLevel;
 				mFullHeight = mRawImage->getHeight() << mRawDiscardLevel;
+
+				if(mFullWidth > MAX_IMAGE_SIZE || mFullHeight > MAX_IMAGE_SIZE)
+				{ 
+					//discard all oversized textures.
+					destroyRawImage();
+					setIsMissingAsset();
+					mRawDiscardLevel = INVALID_DISCARD_LEVEL ;
+					mIsFetching = FALSE ;
+				}
+				else
+				{
+					mIsRawImageValid = TRUE;			
+					addToCreateTexture() ;
+				}
+
+				return TRUE ;
 			}
 			else
 			{
@@ -1347,13 +1649,13 @@ bool LLViewerFetchedTexture::updateFetch()
 				}
 				else
 				{
-					llwarns << mID << ": Setting min discard to " << current_discard << llendl;
+					//llwarns << mID << ": Setting min discard to " << current_discard << llendl;
 					mMinDiscardLevel = current_discard;
 					desired_discard = current_discard;
 				}
 				destroyRawImage();
 			}
-			else if (mRawImage.isNull())
+			else if (mRawImage.notNull())
 			{
 				// We have data, but our fetch failed to return raw data
 				// *TODO: FIgure out why this is happening and fix it
@@ -1362,12 +1664,29 @@ bool LLViewerFetchedTexture::updateFetch()
 		}
 		else
 		{
+// 			// Useful debugging code for undesired deprioritization of textures.
+// 			if (decode_priority <= 0.0f && desired_discard >= 0 && desired_discard < current_discard)
+// 			{
+// 				llinfos << "Calling updateRequestPriority() with decode_priority = 0.0f" << llendl;
+// 				calcDecodePriority();
+// 			}
 			LLAppViewer::getTextureFetch()->updateRequestPriority(mID, decode_priority);
 		}
 	}
 
-	bool make_request = true;
-	
+	if (!mDontDiscard)
+	{
+		if (mBoostLevel == 0)
+		{
+			desired_discard = llmax(desired_discard, current_discard-1);
+		}
+		else
+		{
+			desired_discard = llmax(desired_discard, current_discard-2);
+		}
+	}
+
+	bool make_request = true;	
 	if (decode_priority <= 0)
 	{
 		make_request = false;
@@ -1380,6 +1699,10 @@ bool LLViewerFetchedTexture::updateFetch()
 	{
 		make_request = false;
 	}
+	else if (!isJustBound() && mCachedRawImageReady)
+	{
+		make_request = false;
+	}
 	else
 	{
 		if (mIsFetching)
@@ -1407,33 +1730,12 @@ bool LLViewerFetchedTexture::updateFetch()
 			h = mGLTexturep->getHeight(0);
 			c = mComponents;
 		}
-		if (!mDontDiscard)
-		{
-			if (mBoostLevel == 0)
-			{
-				desired_discard = llmax(desired_discard, current_discard-1);
-			}
-			else
-			{
-				desired_discard = llmax(desired_discard, current_discard-2);
-			}
-		}
-
+		
 		// bypass texturefetch directly by pulling from LLTextureCache
 		bool fetch_request_created = false;
-		if (mLocalFileName.empty())
-		{
-			fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(getID(), getTargetHost(), decode_priority,
-											 w, h, c, desired_discard,
-											 needsAux());
-		}
-		else
-		{
-			fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mLocalFileName, getID(),getTargetHost(), decode_priority,
-											 w, h, c, desired_discard,
-											 needsAux());
-		}
-
+		fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mUrl, getID(),getTargetHost(), decode_priority,
+																			  w, h, c, desired_discard, needsAux());
+		
 		if (fetch_request_created)
 		{
 			mHasFetcher = TRUE;
@@ -1463,9 +1765,82 @@ bool LLViewerFetchedTexture::updateFetch()
 	return mIsFetching ? true : false;
 }
 
+//
+//force to fetch a new raw image for this texture
+//
+BOOL LLViewerFetchedTexture::forceFetch()
+{
+	if(!mForceToSaveRawImage)
+	{
+		return false ;
+	}
+	if(mDesiredSavedRawDiscardLevel < getDiscardLevel())
+	{
+		//no need to force fetching. normal fetching flow will do the work.
+		//return false ;
+	}
+	if (mNeedsCreateTexture)
+	{
+		// We may be fetching still (e.g. waiting on write)
+		// but don't check until we've processed the raw data we have
+		//return false;
+	}
+	if(mIsFetching)
+	{
+		return false ;
+	}
+	if (mIsMissingAsset)
+	{
+		mForceToSaveRawImage = false ;
+		llassert_always(!mHasFetcher);
+		return false; // skip
+	}
+	if (!mLoadedCallbackList.empty() && mRawImage.notNull())
+	{
+		return false; // process any raw image data in callbacks before replacing
+	}
+	if(mRawImage.notNull() && mRawDiscardLevel <= mDesiredSavedRawDiscardLevel)
+	{
+		return false ; // mRawImage is enough
+	}
+
+	S32 desired_discard = mDesiredSavedRawDiscardLevel ;
+	S32 current_discard = getDiscardLevel();
+	
+	bool fetch_request_created = false;
+	S32 w=0, h=0, c=0;
+	if (current_discard >= 0)
+	{
+		w = getWidth(0);
+		h = getHeight(0);
+		c = getComponents();
+	}
+	fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mUrl, getID(),getTargetHost(), maxDecodePriority(),
+																		  w, h, c, desired_discard, needsAux());
+
+	if (fetch_request_created)
+	{				
+		mHasFetcher = TRUE;
+		mIsFetching = TRUE;
+		mRequestedDiscardLevel = desired_discard ;
+
+		mFetchState = LLAppViewer::getTextureFetch()->getFetchState(mID, mDownloadProgress, mRequestedDownloadPriority,
+																	mFetchPriority, mFetchDeltaTime, mRequestDeltaTime);
+	}	
+
+	return mIsFetching ? true : false;
+}
+
 void LLViewerFetchedTexture::setIsMissingAsset()
 {
-	llwarns << mLocalFileName << " " << mID << ": Marking image as missing" << llendl;
+	if (mUrl.empty())
+	{
+		llwarns << mID << ": Marking image as missing" << llendl;
+	}
+	else
+	{
+		llwarns << mUrl << ": Marking image as missing" << llendl;
+	}
 	if (mHasFetcher)
 	{
 		LLAppViewer::getTextureFetch()->deleteRequest(getID(), true);
@@ -1487,7 +1862,13 @@ void LLViewerFetchedTexture::setLoadedCallback( loaded_callback_func loaded_call
 	{
 		// Put in list to call this->doLoadedCallbacks() periodically
 		gTextureList.mCallbackList.insert(this);
+		mLoadedCallbackDesiredDiscardLevel = (S8)discard_level;
 	}
+	else
+	{
+		mLoadedCallbackDesiredDiscardLevel = llmin(mLoadedCallbackDesiredDiscardLevel, (S8)discard_level) ;
+	}
+
 	LLLoadedCallbackEntry* entryp = new LLLoadedCallbackEntry(loaded_callback, discard_level, keep_imageraw, userdata);
 	mLoadedCallbackList.push_back(entryp);
 	mNeedsAux |= needs_aux;
@@ -1616,7 +1997,7 @@ bool LLViewerFetchedTexture::doLoadedCallbacks()
 		// We have GL data.
 
 		destroyRawImage();
-		readBackRawImage(gl_discard);
+		reloadRawImage(mLoadedCallbackDesiredDiscardLevel);
 		llassert_always(mRawImage.notNull());
 		llassert_always(!mNeedsAux || mAuxRawImage.notNull());
 	}
@@ -1725,8 +2106,7 @@ void LLViewerFetchedTexture::forceImmediateUpdate()
 	return ;
 }
 
-// Was in LLImageGL
-LLImageRaw* LLViewerFetchedTexture::readBackRawImage(S8 discard_level)
+LLImageRaw* LLViewerFetchedTexture::reloadRawImage(S8 discard_level)
 {
 	llassert_always(mGLTexturep.notNull()) ;
 	llassert_always(discard_level >= 0);
@@ -1736,25 +2116,216 @@ LLImageRaw* LLViewerFetchedTexture::readBackRawImage(S8 discard_level)
 		llerrs << "called with existing mRawImage" << llendl;
 		mRawImage = NULL;
 	}
-	mRawImage = new LLImageRaw(mGLTexturep->getWidth(discard_level), mGLTexturep->getHeight(discard_level), mComponents);
-	sRawCount++;
-	mRawDiscardLevel = discard_level;
-	mGLTexturep->readBackRaw(mRawDiscardLevel, mRawImage, false);
-	mIsRawImageValid = TRUE;
+
+	if(mSavedRawDiscardLevel >= 0 && mSavedRawDiscardLevel <= discard_level)
+	{
+		mRawImage = new LLImageRaw(getWidth(discard_level), getHeight(discard_level), getComponents()) ;
+		mRawImage->copy(getSavedRawImage()) ;
+		mRawDiscardLevel = discard_level ;
+	}
+	else
+	{		
+		//force to fetch raw image again if cached raw image is not good enough.
+		if(mCachedRawDiscardLevel > discard_level)
+		{
+			mRawImage = mCachedRawImage ;
+			mRawDiscardLevel = mCachedRawDiscardLevel;
+
+			forceToSaveRawImage(discard_level) ;
+		}
+		else //cached raw image is good enough, copy it.
+		{
+			mRawImage = new LLImageRaw(getWidth(discard_level), getHeight(discard_level), getComponents()) ;
+			mRawImage->copy(mCachedRawImage) ;
+			mRawDiscardLevel = discard_level ;
+		}
+	}
+	mIsRawImageValid = TRUE ;
+	sRawCount++;	
 	
 	return mRawImage;
 }
 
 void LLViewerFetchedTexture::destroyRawImage()
-{
-	if (mRawImage.notNull()) sRawCount--;
+{	
 	if (mAuxRawImage.notNull()) sAuxCount--;
+
+	if (mRawImage.notNull()) 
+	{
+		sRawCount--;
+		setCachedRawImage() ;
+
+		if(mForceToSaveRawImage)
+		{
+			saveRawImage() ;
+		}		
+	}
+
 	mRawImage = NULL;
 	mAuxRawImage = NULL;
 	mIsRawImageValid = FALSE;
 	mRawDiscardLevel = INVALID_DISCARD_LEVEL;
+
+	if(mForceToSaveRawImage)
+	{
+		forceFetch() ;
+	}
+}
+
+//use the mCachedRawImage to (re)generate the gl texture.
+//virtual
+void LLViewerFetchedTexture::switchToCachedImage()
+{
+	if(mCachedRawImage.notNull())
+	{
+		mRawImage = mCachedRawImage ;
+						
+		if (getComponents() != mRawImage->getComponents())
+		{
+			// We've changed the number of components, so we need to move any
+			// objects using this pool to a different pool.
+			mComponents = mRawImage->getComponents();
+			mGLTexturep->setComponents(mComponents) ;
+			gTextureList.dirtyImage(this);
+		}			
+
+		mIsRawImageValid = TRUE;
+		mRawDiscardLevel = mCachedRawDiscardLevel ;
+		gTextureList.mCreateTextureList.insert(this);
+		mNeedsCreateTexture = TRUE;		
+	}
 }
 
+void LLViewerFetchedTexture::setCachedRawImage()
+{	
+	if(mRawImage == mCachedRawImage)
+	{
+		return ;
+	}
+	if(!mIsRawImageValid)
+	{
+		return ;
+	}
+
+	if(mCachedRawImageReady)
+	{
+		return ;
+	}
+
+	if(mCachedRawDiscardLevel < 0 || mCachedRawDiscardLevel > mRawDiscardLevel)
+	{
+		S32 i = 0 ;
+		S32 w = mRawImage->getWidth() ;
+		S32 h = mRawImage->getHeight() ;
+
+		S32 max_size = MAX_CACHED_RAW_IMAGE_AREA ;
+		if(LLViewerTexture::BOOST_TERRAIN == mBoostLevel)
+		{
+			max_size = MAX_CACHED_RAW_TERRAIN_IMAGE_AREA ;
+		}		
+		if(mForSculpt)
+		{
+			max_size = MAX_CACHED_RAW_SCULPT_IMAGE_AREA ;
+			mCachedRawImageReady = !mRawDiscardLevel ;
+		}
+		else
+		{
+			mCachedRawImageReady = (!mRawDiscardLevel || ((w * h) >= max_size)) ;
+		}
+
+		while(((w >> i) * (h >> i)) > max_size)
+		{
+			++i ;
+		}
+		
+		if(i)
+		{
+			if(!(w >> i) || !(h >> i))
+			{
+				--i ;
+			}
+			//if(mForSculpt)
+			//{
+			//	mRawImage->scaleDownWithoutBlending(w >> i, h >> i) ;
+			//}
+			//else
+			{
+				mRawImage->scale(w >> i, h >> i) ;
+			}
+		}
+		mCachedRawImage = mRawImage ;
+		mCachedRawDiscardLevel = mRawDiscardLevel + i ;			
+	}
+}
+
+void LLViewerFetchedTexture::checkCachedRawSculptImage()
+{
+	if(mCachedRawImageReady && mCachedRawDiscardLevel > 0)
+	{
+		if(getDiscardLevel() != 0)
+		{
+			mCachedRawImageReady = FALSE ;
+		}
+		else if(isForSculptOnly())
+		{
+			resetTextureStats() ; //do not update this image any more.
+		}
+	}
+}
+
+void LLViewerFetchedTexture::saveRawImage() 
+{
+	if(mRawImage.isNull() || mSavedRawDiscardLevel == mRawDiscardLevel)
+	{
+		return ;
+	}
+
+	mSavedRawDiscardLevel = mRawDiscardLevel ;
+	mSavedRawImage = new LLImageRaw(mRawImage->getData(), mRawImage->getWidth(), mRawImage->getHeight(), mRawImage->getComponents()) ;
+
+	if(mSavedRawDiscardLevel <= mDesiredSavedRawDiscardLevel)
+	{
+		mForceToSaveRawImage = FALSE ;
+	}
+
+	mLastReferencedSavedRawImageTime = sCurrentTime ;
+}
+
+void LLViewerFetchedTexture::forceToSaveRawImage(S32 desired_discard) 
+{ 
+	if(!mForceToSaveRawImage && (mDesiredSavedRawDiscardLevel < 0 || mDesiredSavedRawDiscardLevel > desired_discard))
+	{
+		mForceToSaveRawImage = TRUE ;
+		mDesiredSavedRawDiscardLevel = desired_discard ;
+	
+		forceFetch() ;
+	}
+}
+void LLViewerFetchedTexture::destroySavedRawImage()
+{
+	mSavedRawImage = NULL ;
+	mForceToSaveRawImage  = FALSE ;
+	mSavedRawDiscardLevel = -1 ;
+	mDesiredSavedRawDiscardLevel = -1 ;
+	mLastReferencedSavedRawImageTime = 0.0f ;
+}
+
+LLImageRaw* LLViewerFetchedTexture::getSavedRawImage() 
+{
+	mLastReferencedSavedRawImageTime = sCurrentTime ;
+
+	return mSavedRawImage ;
+}
+	
+BOOL LLViewerFetchedTexture::hasSavedRawImage() const
+{
+	return mSavedRawImage.notNull() ;
+}
+	
+F32 LLViewerFetchedTexture::getElapsedLastReferencedSavedRawImageTime() const
+{ 
+	return mLastReferencedSavedRawImageTime - sCurrentTime ;
+}
 //----------------------------------------------------------------------------------------------
 //atlasing
 //----------------------------------------------------------------------------------------------
@@ -1952,14 +2523,14 @@ BOOL LLViewerFetchedTexture::insertToAtlas()
 //----------------------------------------------------------------------------------------------
 //start of LLViewerLODTexture
 //----------------------------------------------------------------------------------------------
-LLViewerLODTexture::LLViewerLODTexture(const LLUUID& id, BOOL usemipmaps)
-	: LLViewerFetchedTexture(id, usemipmaps)
+LLViewerLODTexture::LLViewerLODTexture(const LLUUID& id, const LLHost& host, BOOL usemipmaps)
+	: LLViewerFetchedTexture(id, host, usemipmaps)
 {
 	init(TRUE) ;
 }
 
-LLViewerLODTexture::LLViewerLODTexture(const std::string& full_path, const LLUUID& id, BOOL usemipmaps)
-	: LLViewerFetchedTexture(full_path, id, usemipmaps)
+LLViewerLODTexture::LLViewerLODTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps)
+	: LLViewerFetchedTexture(url, id, usemipmaps)
 {
 	init(TRUE) ;
 }
@@ -1977,12 +2548,25 @@ S8 LLViewerLODTexture::getType() const
 	return LLViewerTexture::LOD_TEXTURE ;
 }
 
+BOOL LLViewerLODTexture::isUpdateFrozen()
+{
+	return LLViewerTexture::sFreezeImageScalingDown && !getDiscardLevel() ;
+}
+
 // This is gauranteed to get called periodically for every texture
 //virtual
 void LLViewerLODTexture::processTextureStats()
 {
+	updateVirtualSize() ;
+
+	static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes");
+	
+	if (textures_fullres)
+	{
+		mDesiredDiscardLevel = 0;
+	}
 	// Generate the request priority and render priority
-	if (mDontDiscard || !mUseMipMaps)
+	else if (mDontDiscard || !mUseMipMaps)
 	{
 		mDesiredDiscardLevel = 0;
 		if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT)
@@ -2011,13 +2595,7 @@ void LLViewerLODTexture::processTextureStats()
 		// If we know the output width and height, we can force the discard
 		// level to the correct value, and thus not decode more texture
 		// data than we need to.
-		/*if (mBoostLevel == LLViewerTexture::BOOST_UI ||
-			mBoostLevel == LLViewerTexture::BOOST_PREVIEW ||
-			mBoostLevel == LLViewerTexture::BOOST_AVATAR_SELF)	// what about AVATAR_BAKED_SELF?
-		{
-			discard_level = 0; // full res
-		}
-		else*/ if (mKnownDrawWidth && mKnownDrawHeight)
+		if (mKnownDrawWidth && mKnownDrawHeight)
 		{
 			S32 draw_texels = mKnownDrawWidth * mKnownDrawHeight;
 
@@ -2028,6 +2606,12 @@ void LLViewerLODTexture::processTextureStats()
 		}
 		else
 		{
+			if(isLargeImage() && !isJustBound() && mAdditionalDecodePriority < 1.0f)
+			{
+				//if is a big image and not being used recently, nor close to the view point, do not load hi-res data.
+				mMaxVirtualSize = llmin(mMaxVirtualSize, (F32)LLViewerTexture::sMinLargeImageSize) ;
+			}
+
 			if ((mCalculatedDiscardLevel >= 0.f) &&
 				(llabs(mMaxVirtualSize - mDiscardVirtualSize) < mMaxVirtualSize*.20f))
 			{
@@ -2044,13 +2628,11 @@ void LLViewerLODTexture::processTextureStats()
 		}
 		if (mBoostLevel < LLViewerTexture::BOOST_HIGH)
 		{
-			static const F32 discard_bias = -.5f; // Must be < 1 or highest discard will never load!
-			discard_level += discard_bias;
 			discard_level += sDesiredDiscardBias;
 			discard_level *= sDesiredDiscardScale; // scale
+			discard_level += sCameraMovingDiscardBias ;
 		}
 		discard_level = floorf(discard_level);
-// 		discard_level -= (gTextureList.mVideoMemorySetting>>1); // more video ram = higher detail
 
 		F32 min_discard = 0.f;
 		if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT)
@@ -2069,46 +2651,39 @@ void LLViewerLODTexture::processTextureStats()
 		// proper action if we don't.
 		//
 
-		BOOL increase_discard = FALSE;
 		S32 current_discard = getDiscardLevel();
 		if ((sDesiredDiscardBias > 0.0f) &&
 			(current_discard >= 0 && mDesiredDiscardLevel >= current_discard))
 		{
-			if ( BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) > sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale)			
+			// Limit the amount of GL memory bound each frame
+			if ( BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) > sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale &&
+				(!getBoundRecently() || mDesiredDiscardLevel >= mCachedRawDiscardLevel))
 			{
-				// Limit the amount of GL memory bound each frame
-				if (mDesiredDiscardLevel > current_discard)
-				{
-					increase_discard = TRUE;
-				}
-			}
-			if ( BYTES_TO_MEGA_BYTES(sTotalTextureMemoryInBytes) > sMaxTotalTextureMemInMegaBytes*texmem_middle_bound_scale)			
-			{
-				// Only allow GL to have 2x the video card memory
-				if (!mGLTexturep->getBoundRecently())
-				{
-					increase_discard = TRUE;
-				}
+				scaleDown() ;
 			}
-			if (increase_discard)
+			// Only allow GL to have 2x the video card memory
+			else if ( BYTES_TO_MEGA_BYTES(sTotalTextureMemoryInBytes) > sMaxTotalTextureMemInMegaBytes*texmem_middle_bound_scale &&
+				(!getBoundRecently() || mDesiredDiscardLevel >= mCachedRawDiscardLevel))
 			{
-				// 			llinfos << "DISCARDED: " << mID << " Discard: " << current_discard << llendl;
-				sBoundTextureMemoryInBytes -= mGLTexturep->mTextureMemory;
-				sTotalTextureMemoryInBytes -= mGLTexturep->mTextureMemory;
-				// Increase the discard level (reduce the texture res)
-				S32 new_discard = current_discard+1;
-				mGLTexturep->setDiscardLevel(new_discard);
-				sBoundTextureMemoryInBytes += mGLTexturep->mTextureMemory;
-				sTotalTextureMemoryInBytes += mGLTexturep->mTextureMemory;
-				if(LLViewerTextureManager::sTesterp)
-				{
-					LLViewerTextureManager::sTesterp->setStablizingTime() ;
-				}
+				scaleDown() ;
+				
 			}
 		}
 	}
 }
 
+void LLViewerLODTexture::scaleDown()
+{
+	if(hasGLTexture() && mCachedRawDiscardLevel > getDiscardLevel())
+	{		
+		switchToCachedImage() ;	
+
+		if(LLViewerTextureManager::sTesterp)
+		{
+			LLViewerTextureManager::sTesterp->setStablizingTime() ;
+		}
+	}
+}
 //----------------------------------------------------------------------------------------------
 //end of LLViewerLODTexture
 //----------------------------------------------------------------------------------------------
@@ -2189,6 +2764,8 @@ LLViewerMediaTexture::LLViewerMediaTexture(const LLUUID& id, BOOL usemipmaps, LL
 	mIsPlaying = FALSE ;
 
 	setMediaImpl() ;
+
+	setCategory(LLViewerTexture::MEDIA) ;
 }
 
 //virtual 
@@ -2723,7 +3300,7 @@ void LLTexturePipelineTester::updateTextureLoadingStats(const LLViewerFetchedTex
 		mTotalBytesLoadedForLargeImage += data_size ;
 	}
 
-	if(imagep->isForSculpt())
+	if(imagep->forSculpt())
 	{
 		mTotalBytesLoadedForSculpties += data_size ;
 
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 596bfea670b..6620e9fca3b 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -121,11 +121,23 @@ class LLViewerTexture : public LLTexture
 		BOOST_UI			= 15,
 		BOOST_PREVIEW		= 16,
 		BOOST_MAP			= 17,
-		BOOST_MAP_LAYER		= 18,
+		BOOST_MAP_VISIBLE	= 18,
 		BOOST_AVATAR_SELF	= 19, // needed for baking avatar
-		BOOST_MAX_LEVEL
+		BOOST_MAX_LEVEL,
+
+		//other texture Categories
+		LOCAL = BOOST_MAX_LEVEL,
+		AVATAR_SCRATCH_TEX,
+		DYNAMIC_TEX,
+		MEDIA,
+		ATLAS,
+		OTHER,
+		MAX_GL_IMAGE_CATEGORY
 	};
-	
+	static S32 getTotalNumOfCategories() ;
+	static S32 getIndexFromCategory(S32 category) ;
+	static S32 getCategoryFromIndex(S32 index) ;
+
 	typedef std::list<LLFace*> ll_face_list_t ;
 
 protected:
@@ -146,7 +158,7 @@ class LLViewerTexture : public LLTexture
 	virtual BOOL isMissingAsset()const ;
 	virtual void dump();	// debug info to llinfos
 	
-	/*virtual*/ bool bindDefaultImage(const S32 stage = 0) const ;
+	/*virtual*/ bool bindDefaultImage(const S32 stage = 0) ;
 	/*virtual*/ void forceImmediateUpdate() ;
 	
 	const LLUUID& getID() const { return mID; }
@@ -154,9 +166,9 @@ class LLViewerTexture : public LLTexture
 	void setBoostLevel(S32 level);
 	S32  getBoostLevel() { return mBoostLevel; }
 
-	//maxVirtualSize of the texture
-	void addTextureStats(F32 virtual_size) const ;
-	void resetTextureStats(BOOL zero = FALSE);
+	void addTextureStats(F32 virtual_size, BOOL needs_gltexture = TRUE) const;
+	void resetTextureStats();	
+
 	virtual F32  getMaxVirtualSize() ;
 
 	LLFrameTimer* getLastReferencedTimer() {return &mLastReferencedTimer ;}
@@ -180,7 +192,7 @@ class LLViewerTexture : public LLTexture
 	BOOL       hasGLTexture() const ;
 	LLGLuint   getTexName() const ;		
 	BOOL       createGLTexture() ;
-	BOOL       createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename = 0);
+	BOOL       createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename = 0, BOOL to_create = TRUE, S32 category = LLViewerTexture::OTHER);
 
 	void       setFilteringOption(LLTexUnit::eTextureFilterOptions option);
 	void       setExplicitFormat(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format = 0, BOOL swap_bytes = FALSE);
@@ -188,7 +200,8 @@ class LLViewerTexture : public LLTexture
 	BOOL       setSubImage(const LLImageRaw* imageraw, S32 x_pos, S32 y_pos, S32 width, S32 height);
 	BOOL       setSubImage(const U8* datap, S32 data_width, S32 data_height, S32 x_pos, S32 y_pos, S32 width, S32 height);
 	void       setGLTextureCreated (bool initialized);
-	
+	void       setCategory(S32 category) ;
+
 	LLTexUnit::eTextureAddressMode getAddressMode(void) const ;
 	S32        getMaxDiscardLevel() const;
 	S32        getDiscardLevel() const;
@@ -201,8 +214,8 @@ class LLViewerTexture : public LLTexture
 	BOOL       getMask(const LLVector2 &tc);
 	F32        getTimePassedSinceLastBound();
 	BOOL       getMissed() const ;
-	BOOL       isValidForSculpt(S32 discard_level, S32 image_width, S32 image_height, S32 ncomponents) ;
-	BOOL       readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok) const;
+	BOOL       isJustBound()const ;
+	void       forceUpdateBindStats(void) const;
 
 	U32        getTexelsInAtlas() const ;
 	U32        getTexelsInGLTexture() const ;
@@ -220,6 +233,7 @@ class LLViewerTexture : public LLTexture
 	BOOL getDontDiscard() const { return mDontDiscard; }
 	//-----------------	
 	
+	BOOL isLargeImage() ;	
 	/*virtual*/ void updateBindStatsForTester() ;
 protected:
 	void cleanup() ;
@@ -228,6 +242,7 @@ class LLViewerTexture : public LLTexture
 private:
 	//note: do not make this function public.
 	/*virtual*/ LLImageGL* getGLTexture() const ;
+	virtual void switchToCachedImage();
 
 protected:
 	LLUUID mID;
@@ -237,7 +252,9 @@ class LLViewerTexture : public LLTexture
 	BOOL  mUseMipMaps ;
 	S8  mComponents;
 	mutable F32 mMaxVirtualSize;	// The largest virtual size of the image, in pixels - how much data to we need?
+	mutable S8  mNeedsGLTexture;
 	mutable BOOL mNeedsResetMaxVirtualSize ;
+	mutable F32 mAdditionalDecodePriority;  // priority add to mDecodePriority.
 	LLFrameTimer mLastReferencedTimer;
 
 	ll_face_list_t mFaceList ; //reverse pointer pointing to the faces using this image as texture
@@ -270,7 +287,12 @@ class LLViewerTexture : public LLTexture
 	static S32 sMaxBoundTextureMemInMegaBytes;
 	static S32 sMaxTotalTextureMemInMegaBytes;
 	static S32 sMaxDesiredTextureMemInBytes ;
-	static BOOL sDontLoadVolumeTextures;
+	static S8  sCameraMovingDiscardBias;
+	static S32 sMaxSculptRez ;
+	static S32 sMinLargeImageSize ;
+	static S32 sMaxSmallImageSize ;
+	static BOOL sFreezeImageScalingDown ;//do not scale down image res if set.
+	static F32  sCurrentTime ;
 	static BOOL sUseTextureAtlas ;
 
 	static LLPointer<LLViewerTexture> sNullImagep; // Null texture for non-textured objects.
@@ -290,9 +312,9 @@ class LLViewerFetchedTexture : public LLViewerTexture
 protected:
 	/*virtual*/ ~LLViewerFetchedTexture();
 public:
-	LLViewerFetchedTexture(const LLUUID& id, BOOL usemipmaps = TRUE);
+	LLViewerFetchedTexture(const LLUUID& id, const LLHost& host = LLHost::invalid, BOOL usemipmaps = TRUE);
 	LLViewerFetchedTexture(const LLImageRaw* raw, BOOL usemipmaps);
-	LLViewerFetchedTexture(const std::string& full_path, const LLUUID& id, BOOL usemipmaps = TRUE);
+	LLViewerFetchedTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps = TRUE);
 
 public:
 	static F32 maxDecodePriority();
@@ -328,6 +350,8 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	bool hasCallbacks() { return mLoadedCallbackList.empty() ? false : true; }	
 	bool doLoadedCallbacks();
 
+	void addToCreateTexture();
+
 	 // ONLY call from LLViewerTextureList
 	BOOL createTexture(S32 usename = 0);
 	void destroyTexture() ;	
@@ -346,7 +370,12 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	// the priority list, and cause horrible things to happen.
 	void setDecodePriority(F32 priority = -1.0f);
 	F32 getDecodePriority() const { return mDecodePriority; };
+
+	void setAdditionalDecodePriority(F32 priority) ;
+	F32  maxAdditionalDecodePriority() ;
 	
+	void updateVirtualSize() ;
+
 	// setDesiredDiscardLevel is only used by LLViewerTextureList
 	void setDesiredDiscardLevel(S32 discard) { mDesiredDiscardLevel = discard; }
 	S32  getDesiredDiscardLevel()			 { return mDesiredDiscardLevel; }
@@ -370,15 +399,15 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	BOOL isInImageList() const {return mInImageList ;}
 	void setInImageList(BOOL flag) {mInImageList = flag ;}
 
-	const std::string& getLocalFileName() const {return mLocalFileName ;}
 	LLFrameTimer* getLastPacketTimer() {return &mLastPacketTimer;}
 
 	U32 getFetchPriority() const { return mFetchPriority ;}
 	F32 getDownloadProgress() const {return mDownloadProgress ;}
 
-	LLImageRaw* readBackRawImage(S8 discard_level) ;
+	LLImageRaw* reloadRawImage(S8 discard_level) ;
 	void destroyRawImage();
 
+	const std::string& getUrl() const {return mUrl;}
 	//---------------
 	BOOL isDeleted() ;
 	BOOL isInactive() ;
@@ -389,13 +418,36 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	//---------------
 
 	void setForSculpt();
-	BOOL isForSculpt() const {return mForSculpt;}
+	BOOL forSculpt() const {return mForSculpt;}
+	BOOL isForSculptOnly() const;
+
+	//raw image management	
+	void        checkCachedRawSculptImage() ;
+	LLImageRaw* getRawImage()const { return mRawImage ;}
+	S32         getRawImageLevel() const {return mRawDiscardLevel;}
+	LLImageRaw* getCachedRawImage() const { return mCachedRawImage ;}
+	S32         getCachedRawImageLevel() const {return mCachedRawDiscardLevel;}
+	BOOL        isCachedRawImageReady() const {return mCachedRawImageReady ;}
+	BOOL        isRawImageValid()const { return mIsRawImageValid ; }	
+	void        forceToSaveRawImage(S32 desired_discard = 0) ;
+	void        destroySavedRawImage() ;
+	LLImageRaw* getSavedRawImage() ;
+	BOOL        hasSavedRawImage() const ;
+	F32         getElapsedLastReferencedSavedRawImageTime() const ;
+	BOOL		isFullyLoaded() const;
+
+protected:
+	/*virtual*/ void switchToCachedImage();
 
 private:
 	void init(bool firstinit) ;
 	void cleanup() ;
 
 	F32 calcDecodePriorityForUnknownTexture(F32 pixel_priority) ;
+	void saveRawImage() ;
+	BOOL forceFetch() ;
+	void setCachedRawImage() ;
+	BOOL keepReuestedDiscardLevel();
 
 	//for atlas
 	void resetFaceAtlas() ;
@@ -414,12 +466,8 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	S32 mKnownDrawWidth;
 	S32	mKnownDrawHeight;
 
-	std::string mLocalFileName;
-
-	S8  mDesiredDiscardLevel;			// The discard level we'd LIKE to have - if we have it and there's space	
-	S8  mMinDesiredDiscardLevel;	// The minimum discard level we'd like to have
-	S32	mMinDiscardLevel;
-
+	std::string mUrl;
+	
 	S32 mRequestedDiscardLevel;
 	F32 mRequestedDownloadPriority;
 	S32 mFetchState;
@@ -429,6 +477,10 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	F32 mRequestDeltaTime;
 	S32 mDecodeFrame;
 	S32 mVisibleFrame; // decode frame where image was last visible
+	F32 mDecodePriority;			// The priority for decoding this image.
+	S32	mMinDiscardLevel;
+	S8  mDesiredDiscardLevel;			// The discard level we'd LIKE to have - if we have it and there's space	
+	S8  mMinDesiredDiscardLevel;	// The minimum discard level we'd like to have
 
 	S8  mNeedsAux;					// We need to decode the auxiliary channels
 	S8  mDecodingAux;				// Are we decoding high components
@@ -436,10 +488,10 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	S8  mHasFetcher;				// We've made a fecth request
 	S8  mIsFetching;				// Fetch request is active
 	
-	mutable S8 mIsMissingAsset;		// True if we know that there is no image asset with this image id in the database.	
+	mutable S8 mIsMissingAsset;		// True if we know that there is no image asset with this image id in the database.		
 
-	F32 mDecodePriority;			// The priority for decoding this image.
 	typedef std::list<LLLoadedCallbackEntry*> callback_list_t;
+	S8              mLoadedCallbackDesiredDiscardLevel;
 	callback_list_t mLoadedCallbackList;
 
 	LLPointer<LLImageRaw> mRawImage;
@@ -449,6 +501,19 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	// doing if you use it for anything else! - djs
 	LLPointer<LLImageRaw> mAuxRawImage;
 
+	//keep a copy of mRawImage for some special purposes
+	//when mForceToSaveRawImage is set.
+	BOOL mForceToSaveRawImage ;
+	LLPointer<LLImageRaw> mSavedRawImage;
+	S32 mSavedRawDiscardLevel;
+	S32 mDesiredSavedRawDiscardLevel;
+	F32 mLastReferencedSavedRawImageTime ;
+
+	//a small version of the copy of the raw image (<= 64 * 64)
+	LLPointer<LLImageRaw> mCachedRawImage;
+	S32 mCachedRawDiscardLevel;
+	BOOL mCachedRawImageReady; //the rez of the mCachedRawImage reaches the upper limit.	
+
 	LLHost mTargetHost;	// if LLHost::invalid, just request from agent's simulator
 
 	// Timers
@@ -477,15 +542,17 @@ class LLViewerLODTexture : public LLViewerFetchedTexture
 	/*virtual*/ ~LLViewerLODTexture(){}
 
 public:
-	LLViewerLODTexture(const LLUUID& id, BOOL usemipmaps = TRUE);
-	LLViewerLODTexture(const std::string& full_path, const LLUUID& id, BOOL usemipmaps = TRUE);
+	LLViewerLODTexture(const LLUUID& id, const LLHost& host = LLHost::invalid, BOOL usemipmaps = TRUE);
+	LLViewerLODTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps = TRUE);
 
 	/*virtual*/ S8 getType() const;
 	// Process image stats to determine priority/quality requirements.
 	/*virtual*/ void processTextureStats();
-	
+	BOOL isUpdateFrozen() ;
+
 private:
 	void init(bool firstinit) ;
+	void scaleDown() ;		
 
 private:
 	
@@ -608,6 +675,15 @@ class LLViewerTextureManager
 									 const LLUUID& force_id = LLUUID::null
 									 );
 
+	static LLViewerFetchedTexture* getFetchedTextureFromUrl(const std::string& url,									 
+									 BOOL usemipmap = TRUE,
+									 BOOL level_immediate = FALSE,		// Get the requested level immediately upon creation.
+									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
+									 LLGLint internal_format = 0,
+									 LLGLenum primary_format = 0,
+									 const LLUUID& force_id = LLUUID::null
+									 );
+
 	static LLViewerFetchedTexture* getFetchedTextureFromHost(const LLUUID& image_id, LLHost host) ;
 
 	static void init() ;
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 4ad4c8e1ea1..31aedf666bb 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -44,6 +44,7 @@
 #include "llimagetga.h"
 #include "llimagejpeg.h"
 #include "llimagepng.h"
+#include "llimageworker.h"
 
 #include "llsdserialize.h"
 #include "llsys.h"
@@ -68,10 +69,15 @@
 
 void (*LLViewerTextureList::sUUIDCallback)(void **, const LLUUID&) = NULL;
 
-const S32 IMAGES_PER_REQUEST = 42;
-const S32 IMAGES_MIN_UPDATES = 4;  // Always update the highest N images each frame
-const S32 IMAGES_MAX_PACKET_UPDATES = 1; // Only send N packets of IMAGES_PER_REQUEST in a frame
-const F32 RESEND_IMAGE_REQUEST_TIME = 15.f; // seconds
+U32 LLViewerTextureList::sTextureBits = 0;
+U32 LLViewerTextureList::sTexturePackets = 0;
+S32 LLViewerTextureList::sNumImages = 0;
+LLStat LLViewerTextureList::sNumImagesStat(32, TRUE);
+LLStat LLViewerTextureList::sNumRawImagesStat(32, TRUE);
+LLStat LLViewerTextureList::sGLTexMemStat(32, TRUE);
+LLStat LLViewerTextureList::sGLBoundMemStat(32, TRUE);
+LLStat LLViewerTextureList::sRawMemStat(32, TRUE);
+LLStat LLViewerTextureList::sFormattedMemStat(32, TRUE);
 
 LLViewerTextureList gTextureList;
 static LLFastTimer::DeclareTimer FTM_PROCESS_IMAGES("Process Images");
@@ -88,7 +94,7 @@ LLViewerTextureList::LLViewerTextureList()
 
 void LLViewerTextureList::init()
 {
-	mNumImages = 0;
+	sNumImages = 0;
 	mMaxResidentTexMemInMegaBytes = 0;
 	mMaxTotalTextureMemInMegaBytes = 0 ;
 	if (gNoRender)
@@ -231,6 +237,10 @@ void LLViewerTextureList::shutdown()
 		{
 			continue; // avoid UI, baked, and other special images
 		}
+		if(!image->getBoundRecently())
+		{
+			continue ;
+		}
 		S32 desired = image->getDesiredDiscardLevel();
 		if (desired >= 0 && desired < MAX_DISCARD_LEVEL)
 		{
@@ -321,17 +331,30 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&
 												   LLGLenum primary_format, 
 												   const LLUUID& force_id)
 {
-	if (gNoRender)
+	std::string full_path = gDirUtilp->findSkinnedFilename("textures", filename);
+	if (full_path.empty())
 	{
-		// Never mind that this ignores image_set_id;
-		// getImage() will handle that later.
+		llwarns << "Failed to find local image file: " << filename << llendl;
 		return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE);
 	}
 
-	std::string full_path = gDirUtilp->findSkinnedFilename("textures", filename);
-	if (full_path.empty())
+	std::string url = "file://" + full_path;
+
+	return getImageFromUrl(url, usemipmaps, level_immediate, texture_type, internal_format, primary_format, force_id);
+}
+
+LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string& url,
+												   BOOL usemipmaps,
+												   BOOL level_immediate,
+												   S8 texture_type,
+												   LLGLint internal_format,
+												   LLGLenum primary_format, 
+												   const LLUUID& force_id)
+{
+	if (gNoRender)
 	{
-		llwarns << "Failed to find local image file: " << filename << llendl;
+		// Never mind that this ignores image_set_id;
+		// getImage() will handle that later.
 		return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE);
 	}
 
@@ -343,7 +366,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&
 	}
 	else
 	{
-		new_id.generate(full_path);
+		new_id.generate(url);
 	}
 
 	LLPointer<LLViewerFetchedTexture> imagep = findImage(new_id);
@@ -353,10 +376,10 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&
 		switch(texture_type)
 		{
 		case LLViewerTexture::FETCHED_TEXTURE:
-			imagep = new LLViewerFetchedTexture(full_path, new_id, usemipmaps);
+			imagep = new LLViewerFetchedTexture(url, new_id, usemipmaps);
 			break ;
 		case LLViewerTexture::LOD_TEXTURE:
-			imagep = new LLViewerLODTexture(full_path, new_id, usemipmaps);
+			imagep = new LLViewerLODTexture(url, new_id, usemipmaps);
 			break ;
 		default:
 			llerrs << "Invalid texture type " << texture_type << llendl ;
@@ -372,7 +395,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&
 		if (level_immediate)
 		{
 			imagep->dontDiscard();
-			imagep->setBoostLevel(LLViewerFetchedTexture::BOOST_UI);
+			imagep->setBoostLevel(LLViewerTexture::BOOST_UI);
 		}
 	}
 
@@ -424,18 +447,15 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,
 	switch(texture_type)
 	{
 	case LLViewerTexture::FETCHED_TEXTURE:
-		imagep = new LLViewerFetchedTexture(image_id, usemipmaps);
+		imagep = new LLViewerFetchedTexture(image_id, request_from_host, usemipmaps);
 		break ;
 	case LLViewerTexture::LOD_TEXTURE:
-		imagep = new LLViewerLODTexture(image_id, usemipmaps);
+		imagep = new LLViewerLODTexture(image_id, request_from_host, usemipmaps);
 		break ;
 	default:
 		llerrs << "Invalid texture type " << texture_type << llendl ;
 	}
 	
-	// Might want to request from host other than where the agent is. JC
-	imagep->setTargetHost(request_from_host);
-	
 	if (internal_format && primary_format)
 	{
 		imagep->setExplicitFormat(internal_format, primary_format);
@@ -446,7 +466,7 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,
 	if (level_immediate)
 	{
 		imagep->dontDiscard();
-		imagep->setBoostLevel(LLViewerFetchedTexture::BOOST_UI);
+		imagep->setBoostLevel(LLViewerTexture::BOOST_UI);
 	}
 	else
 	{
@@ -509,7 +529,7 @@ void LLViewerTextureList::addImage(LLViewerFetchedTexture *new_image)
 	{
 		llwarns << "Image with ID " << image_id << " already in list" << llendl;
 	}
-	mNumImages++;
+	sNumImages++;
 	
 	addImageToList(new_image);
 	mUUIDMap[image_id] = new_image;
@@ -526,7 +546,7 @@ void LLViewerTextureList::deleteImage(LLViewerFetchedTexture *image)
 		}
 
 		llverify(mUUIDMap.erase(image->getID()) == 1);
-		mNumImages--;
+		sNumImages--;
 		removeImageFromList(image);
 	}
 }
@@ -546,7 +566,9 @@ static LLFastTimer::DeclareTimer FTM_IMAGE_MARK_DIRTY("Dirty Images");
 
 void LLViewerTextureList::updateImages(F32 max_time)
 {
-	LLViewerStats::getInstance()->mNumImagesStat.addValue(mNumImages);
+	LLAppViewer::getTextureFetch()->setTextureBandwidth(LLViewerStats::getInstance()->mTextureKBitStat.getMeanPerSec());
+
+	LLViewerStats::getInstance()->mNumImagesStat.addValue(sNumImages);
 	LLViewerStats::getInstance()->mNumRawImagesStat.addValue(LLImageRaw::sRawImageCount);
 	LLViewerStats::getInstance()->mGLTexMemStat.addValue((F32)BYTES_TO_MEGA_BYTES(LLImageGL::sGlobalTextureMemoryInBytes));
 	LLViewerStats::getInstance()->mGLBoundMemStat.addValue((F32)BYTES_TO_MEGA_BYTES(LLImageGL::sBoundTextureMemoryInBytes));
@@ -554,10 +576,13 @@ void LLViewerTextureList::updateImages(F32 max_time)
 	LLViewerStats::getInstance()->mFormattedMemStat.addValue((F32)BYTES_TO_MEGA_BYTES(LLImageFormatted::sGlobalFormattedMemory));
 	
 	updateImagesDecodePriorities();
+
+	F32 total_max_time = max_time;
 	max_time -= updateImagesFetchTextures(max_time);
-	max_time = llmin(llmax(max_time, 0.001f*10.f*gFrameIntervalSeconds), 0.001f);
+	
+	max_time = llmax(max_time, total_max_time*.25f); // at least 25% of max_time
 	max_time -= updateImagesCreateTextures(max_time);
-	max_time = llmin(llmax(max_time, 0.001f*10.f*gFrameIntervalSeconds), 0.001f);
+	
 	if (!mDirtyTextureList.empty())
 	{
 		LLFastTimer t(FTM_IMAGE_MARK_DIRTY);
@@ -570,7 +595,7 @@ void LLViewerTextureList::updateImages(F32 max_time)
 	{
 		//trigger loaded callbacks on local textures immediately
 		LLViewerFetchedTexture* image = *iter++;
-		if (!image->getLocalFileName().empty())
+		if (!image->getUrl().empty())
 		{
 			// Do stuff to handle callbacks, update priorities, etc.
 			didone = image->doLoadedCallbacks();
@@ -628,6 +653,14 @@ void LLViewerTextureList::updateImagesDecodePriorities()
 			}
 			else
 			{
+				if(imagep->hasSavedRawImage())
+				{
+					if(imagep->getElapsedLastReferencedSavedRawImageTime() > MAX_INACTIVE_TIME)
+					{
+						imagep->destroySavedRawImage() ;
+					}
+				}
+
 				if(imagep->isDeleted())
 				{
 					continue ;
@@ -758,74 +791,76 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time)
 	const size_t max_update_count = llmin((S32) (1024*10.f*gFrameIntervalSeconds)+1, 256);
 	
 	// 32 high priority entries
-	std::set<LLViewerFetchedTexture*> entries;
+	typedef std::vector<LLViewerFetchedTexture*> entries_list_t;
+	entries_list_t entries;
 	size_t update_counter = llmin(max_priority_count, mImageList.size());
 	image_priority_list_t::iterator iter1 = mImageList.begin();
 	while(update_counter > 0)
 	{
-		// added extra granularity and verbosity for crash logging during 1.19.1 RC. -Brad
-		if(iter1 == mImageList.end())
-		{
-			llerrs << "DEV-12002: update_counter not calculated correctly!" << llendl;
-			return 0.f;
-		}
-
-		LLPointer<LLViewerFetchedTexture> const & ptr = *iter1;
-
-		LLViewerFetchedTexture * img = ptr.get();
-
-		// added extra granularity and verbosity for crash logging during 1.19.1 RC. -Brad
-		if(img == NULL)
-		{
-			llwarns << "DEV-12002: image is NULL!" << llendl;
-		}
-
-		entries.insert(img);
-
+		entries.push_back(*iter1);
+		
 		++iter1;
 		update_counter--;
 	}
 	
 	// 256 cycled entries
-	update_counter = llmin(max_update_count, mUUIDMap.size());
-	uuid_map_t::iterator iter2 = mUUIDMap.upper_bound(mLastFetchUUID);
-	while(update_counter > 0)
+	update_counter = llmin(max_update_count, mUUIDMap.size());	
+	if(update_counter > 0)
 	{
-		if (iter2 == mUUIDMap.end())
+		uuid_map_t::iterator iter2 = mUUIDMap.upper_bound(mLastFetchUUID);
+		uuid_map_t::iterator iter2p = iter2;
+		while(update_counter > 0)
 		{
-			iter2 = mUUIDMap.begin();
+			if (iter2 == mUUIDMap.end())
+			{
+				iter2 = mUUIDMap.begin();
+			}
+			entries.push_back(iter2->second);
+			iter2p = iter2++;
+			update_counter--;
 		}
-		mLastFetchUUID = iter2->first;
-		entries.insert(iter2->second);
-		++iter2;
-		update_counter--;
+
+		mLastFetchUUID = iter2p->first;
 	}
 	
+	S32 fetch_count = 0;
 	S32 min_count = max_priority_count + max_update_count/4;
-	for (std::set<LLViewerFetchedTexture*>::iterator iter3 = entries.begin();
+	for (entries_list_t::iterator iter3 = entries.begin();
 		 iter3 != entries.end(); )
 	{
 		LLPointer<LLViewerFetchedTexture> imagep = *iter3++;
 		
-		imagep->updateFetch();
+		bool fetching = imagep->updateFetch();
+		if (fetching)
+		{
+			fetch_count++;
+		}
 		if (min_count <= 0 && image_op_timer.getElapsedTimeF32() > max_time)
 		{
 			break;
 		}
 		min_count--;
 	}
+	if (fetch_count == 0)
+	{
+		gDebugTimers[0].pause();
+	}
+	else
+	{
+		gDebugTimers[0].unpause();
+	}
 	return image_op_timer.getElapsedTimeF32();
 }
 
 void LLViewerTextureList::updateImagesUpdateStats()
 {
-	if (mUpdateStats)
+	if (mUpdateStats && mForceResetTextureStats)
 	{
 		for (image_priority_list_t::iterator iter = mImageList.begin();
 			 iter != mImageList.end(); )
 		{
 			LLViewerFetchedTexture* imagep = *iter++;
-			imagep->resetTextureStats(mForceResetTextureStats);
+			imagep->resetTextureStats();
 		}
 		mUpdateStats = FALSE;
 		mForceResetTextureStats = FALSE;
@@ -1011,6 +1046,9 @@ LLPointer<LLImageJ2C> LLViewerTextureList::convertToUploadFile(LLPointer<LLImage
 	return compressedImage;
 }
 
+const S32 MIN_VIDEO_RAM = 32;
+const S32 MAX_VIDEO_RAM = 512; // 512MB max for performance reasons.
+
 // Returns min setting for TextureMemory (in MB)
 S32 LLViewerTextureList::getMinVideoRamSetting()
 {
@@ -1129,13 +1167,13 @@ void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_d
 	
 	if (msg->getReceiveCompressedSize())
 	{
-		gTextureList.mTextureBits += msg->getReceiveCompressedSize() * 8;
+		gTextureList.sTextureBits += msg->getReceiveCompressedSize() * 8;
 	}
 	else
 	{
-		gTextureList.mTextureBits += msg->getReceiveSize() * 8;
+		gTextureList.sTextureBits += msg->getReceiveSize() * 8;
 	}
-	gTextureList.mTexturePackets++;
+	gTextureList.sTexturePackets++;
 	
 	U8 codec;
 	U16 packets;
@@ -1194,13 +1232,13 @@ void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_d
 	
 	if (msg->getReceiveCompressedSize())
 	{
-		gTextureList.mTextureBits += msg->getReceiveCompressedSize() * 8;
+		gTextureList.sTextureBits += msg->getReceiveCompressedSize() * 8;
 	}
 	else
 	{
-		gTextureList.mTextureBits += msg->getReceiveSize() * 8;
+		gTextureList.sTextureBits += msg->getReceiveSize() * 8;
 	}
-	gTextureList.mTexturePackets++;
+	gTextureList.sTexturePackets++;
 	
 	//llprintline("Start decode, image header...");
 	msg->getUUIDFast(_PREHASH_ImageID, _PREHASH_ID, id);
@@ -1385,7 +1423,7 @@ void LLUIImageList::onUIImageLoaded( BOOL success, LLViewerFetchedTexture *src_v
 
 		// for images grabbed from local files, apply clipping rectangle to restore original dimensions
 		// from power-of-2 gl image
-		if (success && imagep.notNull() && src_vi && !src_vi->getLocalFileName().empty())
+		if (success && imagep.notNull() && src_vi && (src_vi->getUrl().compare(0, 7, "file://")==0))
 		{
 			F32 clip_x = (F32)src_vi->getOriginalWidth() / (F32)src_vi->getFullWidth();
 			F32 clip_y = (F32)src_vi->getOriginalHeight() / (F32)src_vi->getFullHeight();
@@ -1442,6 +1480,11 @@ bool LLUIImageList::initFromFile()
 		llwarns << "Unable to parse UI image list file " << base_file_path << llendl;
 		return false;
 	}
+	if (!root->hasAttribute("version"))
+	{
+		llwarns << "No valid version number in UI image list file " << base_file_path << llendl;
+		return false;
+	}
 
 	std::vector<std::string> paths;
 	// path to current selected skin
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index 11d1dd855fa..2a86b88163d 100644
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -53,7 +53,6 @@ const BOOL GL_TEXTURE_NO = FALSE;
 const BOOL IMMEDIATE_YES = TRUE;
 const BOOL IMMEDIATE_NO = FALSE;
 
-class LLImageJ2C;
 class LLMessageSystem;
 class LLTextureView;
 
@@ -146,6 +145,15 @@ class LLViewerTextureList
 									 LLGLenum primary_format = 0,
 									 const LLUUID& force_id = LLUUID::null
 									 );
+	
+	LLViewerFetchedTexture* getImageFromUrl(const std::string& url,
+									 BOOL usemipmap = TRUE,
+									 BOOL level_immediate = FALSE,		// Get the requested level immediately upon creation.
+									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
+									 LLGLint internal_format = 0,
+									 LLGLenum primary_format = 0,
+									 const LLUUID& force_id = LLUUID::null
+									 );
 
 	LLViewerFetchedTexture* createImage(const LLUUID &image_id,
 									 BOOL usemipmap = TRUE,
@@ -190,11 +198,18 @@ class LLViewerTextureList
 	LLFrameTimer mForceDecodeTimer;
 	
 public:
-	U32 mTextureBits;
-	U32 mTexturePackets;
+	static U32 sTextureBits;
+	static U32 sTexturePackets;
+
+	static LLStat sNumImagesStat;
+	static LLStat sNumRawImagesStat;
+	static LLStat sGLTexMemStat;
+	static LLStat sGLBoundMemStat;
+	static LLStat sRawMemStat;
+	static LLStat sFormattedMemStat;
 
 private:
-	S32 mNumImages;
+	static S32 sNumImages;
 	static void (*sUUIDCallback)(void**, const LLUUID &);
 };
 
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 5f95e9ccf1b..cee3a2a65b5 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -117,6 +117,7 @@
 #include "llhudview.h"
 #include "llimagebmp.h"
 #include "llimagej2c.h"
+#include "llimageworker.h"
 #include "llkeyboard.h"
 #include "lllineeditor.h"
 #include "llmenugl.h"
@@ -157,7 +158,6 @@
 #include "lltoolselectland.h"
 #include "lltrans.h"
 #include "lluictrlfactory.h"
-#include "lluploaddialog.h"
 #include "llurldispatcher.h"		// SLURL from other app instance
 #include "llvieweraudio.h"
 #include "llviewercamera.h"
@@ -189,6 +189,7 @@
 #include "llbottomtray.h"
 #include "llnearbychatbar.h"
 #include "llagentui.h"
+#include "llwearablelist.h"
 
 #include "llnotificationmanager.h"
 
@@ -326,7 +327,9 @@ class LLDebugText
 				S32 hours = (S32)(time / (60*60));
 				S32 mins = (S32)((time - hours*(60*60)) / 60);
 				S32 secs = (S32)((time - hours*(60*60) - mins*60));
-				addText(xpos, ypos, llformat(" Debug %d: %d:%02d:%02d", idx, hours,mins,secs)); ypos += y_inc2;
+				std::string label = gDebugTimerLabel[idx];
+				if (label.empty()) label = llformat("Debug: %d", idx);
+				addText(xpos, ypos, llformat(" %s: %d:%02d:%02d", label.c_str(), hours,mins,secs)); ypos += y_inc2;
 			}
 			
 			F32 time = gFrameTimeSeconds;
@@ -1299,6 +1302,7 @@ LLViewerWindow::LLViewerWindow(
 		
 	// Init the image list.  Must happen after GL is initialized and before the images that
 	// LLViewerWindow needs are requested.
+	LLImageGL::initClass(LLViewerTexture::MAX_GL_IMAGE_CATEGORY) ;
 	gTextureList.init();
 	LLViewerTextureManager::init() ;
 	gBumpImageList.init();
@@ -1657,6 +1661,8 @@ void LLViewerWindow::shutdownGL()
 	gSky.cleanup();
 	stop_glerror();
 
+	LLWearableList::instance().cleanup() ;
+
 	gTextureList.shutdown();
 	stop_glerror();
 
@@ -1670,7 +1676,10 @@ void LLViewerWindow::shutdownGL()
 	stop_glerror();
 
 	LLViewerTextureManager::cleanup() ;
-	
+	LLImageGL::cleanupClass() ;
+
+	llinfos << "All texturs and llimagegl images are destroyed!" << llendl ;
+
 	llinfos << "Cleaning up select manager" << llendl;
 	LLSelectMgr::getInstance()->cleanup();
 
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 231b857d1f0..a279bd8a681 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -321,7 +321,7 @@ class LLViewerWindow : public LLWindowCallbacks
 	} ESnapshotType;
 	BOOL			saveSnapshot(const std::string&  filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR);
 	BOOL			rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, BOOL keep_window_aspect = TRUE, BOOL is_texture = FALSE,
-								BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_IMAGE_SIZE );
+								BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE );
 	BOOL			thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type) ;
 	BOOL			isSnapshotLocSet() const { return ! sSnapshotDir.empty(); }
 	void			resetSnapshotLoc() const { sSnapshotDir.clear(); }
diff --git a/indra/newview/llvlcomposition.cpp b/indra/newview/llvlcomposition.cpp
index d124cbcdced..999701ece16 100644
--- a/indra/newview/llvlcomposition.cpp
+++ b/indra/newview/llvlcomposition.cpp
@@ -279,7 +279,6 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
 		if (mRawImages[i].isNull())
 		{
 			// Read back a raw image for this discard level, if it exists
-			mRawImages[i] = new LLImageRaw;
 			S32 min_dim = llmin(mDetailTextures[i]->getFullWidth(), mDetailTextures[i]->getFullHeight());
 			S32 ddiscard = 0;
 			while (min_dim > BASE_SIZE && ddiscard < MAX_DISCARD_LEVEL)
@@ -287,12 +286,18 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
 				ddiscard++;
 				min_dim /= 2;
 			}
-			if (!mDetailTextures[i]->readBackRaw(ddiscard, mRawImages[i], false))
+
+			mDetailTextures[i]->reloadRawImage(ddiscard) ;
+			if(mDetailTextures[i]->getRawImageLevel() != ddiscard)//raw iamge is not ready, will enter here again later.
 			{
-				llwarns << "Unable to read raw data for terrain detail texture: " << mDetailTextures[i]->getID() << llendl;
-				mRawImages[i] = NULL;
+				mDetailTextures[i]->destroyRawImage() ;
+				lldebugs << "cached raw data for terrain detail texture is not ready yet: " << mDetailTextures[i]->getID() << llendl;
 				return FALSE;
 			}
+
+			mRawImages[i] = mDetailTextures[i]->getRawImage() ;
+			mDetailTextures[i]->destroyRawImage() ;
+
 			if (mDetailTextures[i]->getWidth(ddiscard) != BASE_SIZE ||
 				mDetailTextures[i]->getHeight(ddiscard) != BASE_SIZE ||
 				mDetailTextures[i]->getComponents() != 3)
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 469aef62093..229227c1444 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -988,7 +988,7 @@ void LLVOAvatar::resetImpostors()
 
 // static
 void LLVOAvatar::deleteCachedImages(bool clearAll)
-{
+{	
 	if (LLTexLayerSet::sHasCaches)
 	{
 		lldebugs << "Deleting layer set caches" << llendl;
@@ -3897,7 +3897,7 @@ U32 LLVOAvatar::renderFootShadows()
 	LLGLDepthTest test(GL_TRUE, GL_FALSE);
 	//render foot shadows
 	LLGLEnable blend(GL_BLEND);
-	gGL.getTexUnit(0)->bind(mShadowImagep.get());
+	gGL.getTexUnit(0)->bind(mShadowImagep, TRUE);
 	glColor4fv(mShadow0Facep->getRenderColor().mV);
 	mShadow0Facep->renderIndexed(foot_mask);
 	glColor4fv(mShadow1Facep->getRenderColor().mV);
@@ -3945,7 +3945,7 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color, S32 diffuse_channel)
 //------------------------------------------------------------------------
 // LLVOAvatar::updateTextures()
 //------------------------------------------------------------------------
-void LLVOAvatar::updateTextures(LLAgent &agent)
+void LLVOAvatar::updateTextures()
 {
 	BOOL render_avatar = TRUE;
 
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index e3add8aa78f..c4e68064e75 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -125,7 +125,7 @@ class LLVOAvatar :
 	virtual BOOL   	 	 	updateLOD();
 	BOOL  	 	 	 	 	updateJointLODs();
 	virtual BOOL   	 	 	isActive() const; // Whether this object needs to do an idleUpdate.
-	virtual void   	 	 	updateTextures(LLAgent &agent);
+	virtual void   	 	 	updateTextures();
 	virtual S32    	 	 	setTETexture(const U8 te, const LLUUID& uuid); // If setting a baked texture, need to request it from a non-local sim.
 	virtual void   	 	 	onShift(const LLVector3& shift_vector);
 	virtual U32    	 	 	getPartitionType() const;
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 9a115ea4e6c..673e699c30a 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -1141,26 +1141,6 @@ void LLVOAvatarSelf::localTextureLoaded(BOOL success, LLViewerFetchedTexture *sr
 	}
 }
 
-// virtual
-/* //unused
-BOOL LLVOAvatarSelf::getLocalTextureRaw(ETextureIndex index, LLImageRaw* image_raw) const
-{
-	if (!isIndexLocalTexture(index)) return FALSE;
-	if (getLocalTextureID(index) == IMG_DEFAULT_AVATAR)	return TRUE;
-
-	const LocalTextureData *local_tex_data = getLocalTextureData(index)[0];
-	if (local_tex_data->mImage->readBackRaw(-1, image_raw, false))
-	{
-
-		return TRUE;
-	}
-	
-	// No data loaded yet
-	setLocalTexture((ETextureIndex)index, getTEImage(index), FALSE); // <-- non-const, move this elsewhere
-	return FALSE;
-}
-*/
-
 // virtual
 BOOL LLVOAvatarSelf::getLocalTextureGL(ETextureIndex type, LLViewerTexture** tex_pp, U32 index) const
 {
@@ -1812,12 +1792,13 @@ void LLVOAvatarSelf::addLocalTextureStats( ETextureIndex type, LLViewerFetchedTe
 
 	if (!covered_by_baked)
 	{
-		if (getLocalTextureID(type, index) != IMG_DEFAULT_AVATAR)
+		if (getLocalTextureID(type, index) != IMG_DEFAULT_AVATAR && imagep->getDiscardLevel() != 0)
 		{
 			F32 desired_pixels;
 			desired_pixels = llmin(mPixelArea, (F32)getTexImageArea());
 			imagep->setBoostLevel(getAvatarBoostLevel());
 			imagep->addTextureStats( desired_pixels / texel_area_ratio );
+			imagep->forceUpdateBindStats() ;
 			if (imagep->getDiscardLevel() < 0)
 			{
 				mHasGrey = TRUE; // for statistics gathering
@@ -2115,6 +2096,49 @@ BOOL LLVOAvatarSelf::needsRenderBeam()
 // static
 void LLVOAvatarSelf::deleteScratchTextures()
 {
+	if(gAuditTexture)
+	{
+		S32 total_tex_size = sScratchTexBytes ;
+		S32 tex_size = SCRATCH_TEX_WIDTH * SCRATCH_TEX_HEIGHT ;
+
+		if( sScratchTexNames.checkData( GL_LUMINANCE ) )
+		{
+			LLImageGL::decTextureCounter(tex_size, 1, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= tex_size ;
+		}
+		if( sScratchTexNames.checkData( GL_ALPHA ) )
+		{
+			LLImageGL::decTextureCounter(tex_size, 1, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= tex_size ;
+		}
+		if( sScratchTexNames.checkData( GL_COLOR_INDEX ) )
+		{
+			LLImageGL::decTextureCounter(tex_size, 1, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= tex_size ;
+		}
+		if( sScratchTexNames.checkData( GL_LUMINANCE_ALPHA ) )
+		{
+			LLImageGL::decTextureCounter(tex_size, 2, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= 2 * tex_size ;
+		}
+		if( sScratchTexNames.checkData( GL_RGB ) )
+		{
+			LLImageGL::decTextureCounter(tex_size, 3, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= 3 * tex_size ;
+		}
+		if( sScratchTexNames.checkData( GL_RGBA ) )
+		{
+			LLImageGL::decTextureCounter(tex_size, 4, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= 4 * tex_size ;
+		}
+		//others
+		while(total_tex_size > 0)
+		{
+			LLImageGL::decTextureCounter(tex_size, 4, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= 4 * tex_size ;
+		}
+	}
+
 	for( LLGLuint* namep = sScratchTexNames.getFirstData(); 
 		 namep; 
 		 namep = sScratchTexNames.getNextData() )
@@ -2137,7 +2161,8 @@ void LLVOAvatarSelf::deleteScratchTextures()
 BOOL LLVOAvatarSelf::bindScratchTexture( LLGLenum format )
 {
 	U32 texture_bytes = 0;
-	GLuint gl_name = getScratchTexName( format, &texture_bytes );
+	S32 components = 0; 
+	GLuint gl_name = getScratchTexName( format, components, &texture_bytes );
 	if( gl_name )
 	{
 		gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, gl_name);
@@ -2149,12 +2174,12 @@ BOOL LLVOAvatarSelf::bindScratchTexture( LLGLenum format )
 			if( *last_bind_time != LLImageGL::sLastFrameTime )
 			{
 				*last_bind_time = LLImageGL::sLastFrameTime;
-				LLImageGL::updateBoundTexMem(texture_bytes);
+				LLImageGL::updateBoundTexMem(texture_bytes, components, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
 			}
 		}
 		else
 		{
-			LLImageGL::updateBoundTexMem(texture_bytes);
+			LLImageGL::updateBoundTexMem(texture_bytes, components, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
 			sScratchTexLastBindTime.addData( format, new F32(LLImageGL::sLastFrameTime) );
 		}
 		return TRUE;
@@ -2162,9 +2187,8 @@ BOOL LLVOAvatarSelf::bindScratchTexture( LLGLenum format )
 	return FALSE;
 }
 
-LLGLuint LLVOAvatarSelf::getScratchTexName( LLGLenum format, U32* texture_bytes )
-{
-	S32 components;
+LLGLuint LLVOAvatarSelf::getScratchTexName( LLGLenum format, S32& components, U32* texture_bytes )
+{	
 	GLenum internal_format;
 	switch( format )
 	{
@@ -2210,6 +2234,11 @@ LLGLuint LLVOAvatarSelf::getScratchTexName( LLGLenum format, U32* texture_bytes
 
 	sScratchTexBytes += *texture_bytes;
 	LLImageGL::sGlobalTextureMemoryInBytes += *texture_bytes;
+
+	if(gAuditTexture)
+	{
+		LLImageGL::incTextureCounter(SCRATCH_TEX_WIDTH * SCRATCH_TEX_HEIGHT, components, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+	}
 	return name;
 }
 
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index a555d04a633..06b3b25eecd 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -239,7 +239,7 @@ class LLVOAvatarSelf :
 	BOOL			bindScratchTexture(LLGLenum format);
 	static void		deleteScratchTextures();
 protected:
-	LLGLuint		getScratchTexName(LLGLenum format, U32* texture_bytes);
+	LLGLuint		getScratchTexName(LLGLenum format, S32& components, U32* texture_bytes);
 private:
 	static S32 		sScratchTexBytes;
 	static LLMap< LLGLenum, LLGLuint*> sScratchTexNames;
diff --git a/indra/newview/llvoclouds.cpp b/indra/newview/llvoclouds.cpp
index 8d3c8b6f1a9..177cb16c508 100644
--- a/indra/newview/llvoclouds.cpp
+++ b/indra/newview/llvoclouds.cpp
@@ -101,7 +101,7 @@ void LLVOClouds::setPixelAreaAndAngle(LLAgent &agent)
 	mPixelArea = 1500*100;
 }
 
-void LLVOClouds::updateTextures(LLAgent &agent)
+void LLVOClouds::updateTextures()
 {
 	getTEImage(0)->addTextureStats(mPixelArea);
 }
diff --git a/indra/newview/llvoclouds.h b/indra/newview/llvoclouds.h
index 95e6b96e4ed..c4a75f5b5ef 100644
--- a/indra/newview/llvoclouds.h
+++ b/indra/newview/llvoclouds.h
@@ -65,7 +65,7 @@ class LLVOClouds : public LLAlphaObject
 	/*virtual*/ BOOL    isActive() const; // Whether this object needs to do an idleUpdate.
 	F32 getPartSize(S32 idx);
 
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
 	
 	void updateFaceSize(S32 idx) { }
diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp
index 570a3334b9e..33c10450a15 100644
--- a/indra/newview/llvograss.cpp
+++ b/indra/newview/llvograss.cpp
@@ -322,7 +322,7 @@ void LLVOGrass::setPixelAreaAndAngle(LLAgent &agent)
 
 
 // BUG could speed this up by caching the relative_position and range calculations
-void LLVOGrass::updateTextures(LLAgent &agent)
+void LLVOGrass::updateTextures()
 {
 	if (getTEImage(0))
 	{
diff --git a/indra/newview/llvograss.h b/indra/newview/llvograss.h
index 124400d3560..6a6fcc31c3b 100644
--- a/indra/newview/llvograss.h
+++ b/indra/newview/llvograss.h
@@ -72,7 +72,7 @@ class LLVOGrass : public LLAlphaObject
 								LLStrider<U16>& indicesp);
 
 	void updateFaceSize(S32 idx) { }
-	/*virtual*/ void updateTextures(LLAgent &agent);											
+	/*virtual*/ void updateTextures();											
 	/*virtual*/ BOOL updateLOD();
 	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
 
diff --git a/indra/newview/llvoground.cpp b/indra/newview/llvoground.cpp
index ac2484ddfdd..221c6b61ec2 100644
--- a/indra/newview/llvoground.cpp
+++ b/indra/newview/llvoground.cpp
@@ -70,7 +70,7 @@ BOOL LLVOGround::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
 }
 
 
-void LLVOGround::updateTextures(LLAgent &agent)
+void LLVOGround::updateTextures()
 {
 }
 
diff --git a/indra/newview/llvoground.h b/indra/newview/llvoground.h
index af3fcd65d46..0ccb0834a2f 100644
--- a/indra/newview/llvoground.h
+++ b/indra/newview/llvoground.h
@@ -51,7 +51,7 @@ class LLVOGround : public LLStaticViewerObject
 	
 	// Graphical stuff for objects - maybe broken out into render class
 	// later?
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
 	/*virtual*/ BOOL		updateGeometry(LLDrawable *drawable);
 
diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp
index 7585842623b..f1e42f93758 100644
--- a/indra/newview/llvopartgroup.cpp
+++ b/indra/newview/llvopartgroup.cpp
@@ -108,7 +108,7 @@ void LLVOPartGroup::setPixelAreaAndAngle(LLAgent &agent)
 	}
 }
 
-void LLVOPartGroup::updateTextures(LLAgent &agent)
+void LLVOPartGroup::updateTextures()
 {
 	// Texture stats for particles need to be updated in a different way...
 }
diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h
index 3dc32929920..18583b4be9a 100644
--- a/indra/newview/llvopartgroup.h
+++ b/indra/newview/llvopartgroup.h
@@ -61,7 +61,7 @@ class LLVOPartGroup : public LLAlphaObject
 	virtual U32 getPartitionType() const;
 	
 	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent);
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
 	/*virtual*/ BOOL        updateGeometry(LLDrawable *drawable);
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
index d44c5432669..ddf7ea03826 100644
--- a/indra/newview/llvosky.cpp
+++ b/indra/newview/llvosky.cpp
@@ -289,7 +289,7 @@ void LLSkyTex::create(const F32 brightness)
 
 void LLSkyTex::createGLImage(S32 which)
 {	
-	mTexture[which]->createGLTexture(0, mImageRaw[which]);
+	mTexture[which]->createGLTexture(0, mImageRaw[which], 0, TRUE, LLViewerTexture::LOCAL);
 	mTexture[which]->setAddressMode(LLTexUnit::TAM_CLAMP);
 }
 
@@ -1180,7 +1180,7 @@ BOOL LLVOSky::updateSky()
 	return TRUE;
 }
 
-void LLVOSky::updateTextures(LLAgent &agent)
+void LLVOSky::updateTextures()
 {
 	if (mSunTexturep)
 	{
diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h
index 62c934fb410..ef74324e58d 100644
--- a/indra/newview/llvosky.h
+++ b/indra/newview/llvosky.h
@@ -492,7 +492,7 @@ class LLVOSky : public LLStaticViewerObject
 	
 	// Graphical stuff for objects - maybe broken out into render class
 	// later?
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
 	/*virtual*/ BOOL		updateGeometry(LLDrawable *drawable);
 
diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp
index 164f0f0cade..ef7b1610036 100644
--- a/indra/newview/llvosurfacepatch.cpp
+++ b/indra/newview/llvosurfacepatch.cpp
@@ -134,7 +134,7 @@ void LLVOSurfacePatch::setPixelAreaAndAngle(LLAgent &agent)
 }
 
 
-void LLVOSurfacePatch::updateTextures(LLAgent &agent)
+void LLVOSurfacePatch::updateTextures()
 {
 }
 
diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h
index aaf4d41fa1e..10a5888526c 100644
--- a/indra/newview/llvosurfacepatch.h
+++ b/indra/newview/llvosurfacepatch.h
@@ -75,7 +75,7 @@ class LLVOSurfacePatch : public LLStaticViewerObject
 								LLStrider<LLVector2> &texCoords1p,
 								LLStrider<U16> &indicesp);
 
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
 
 	/*virtual*/ void updateSpatialExtents(LLVector3& newMin, LLVector3& newMax);
diff --git a/indra/newview/llvotextbubble.cpp b/indra/newview/llvotextbubble.cpp
index f5094c025ec..75beab519e0 100644
--- a/indra/newview/llvotextbubble.cpp
+++ b/indra/newview/llvotextbubble.cpp
@@ -115,7 +115,7 @@ BOOL LLVOTextBubble::idleUpdate(LLAgent &agent, LLWorld	&world, const F64 &time)
 }
 
 
-void LLVOTextBubble::updateTextures(LLAgent &agent)
+void LLVOTextBubble::updateTextures()
 {
 	// Update the image levels of all textures...
 
diff --git a/indra/newview/llvotextbubble.h b/indra/newview/llvotextbubble.h
index 45d4df2a7e1..7f84dbf631e 100644
--- a/indra/newview/llvotextbubble.h
+++ b/indra/newview/llvotextbubble.h
@@ -44,7 +44,7 @@ class LLVOTextBubble : public LLAlphaObject
 	/*virtual*/ BOOL    isActive() const; // Whether this object needs to do an idleUpdate.
 	/*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
 
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
 	/*virtual*/ BOOL		updateGeometry(LLDrawable *drawable);
 	/*virtual*/ BOOL		updateLOD();
diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp
index 615ae13bc2c..ee0c36eb9a3 100644
--- a/indra/newview/llvotree.cpp
+++ b/indra/newview/llvotree.cpp
@@ -463,7 +463,7 @@ void LLVOTree::setPixelAreaAndAngle(LLAgent &agent)
 #endif
 }
 
-void LLVOTree::updateTextures(LLAgent &agent)
+void LLVOTree::updateTextures()
 {
 	if (mTreeImagep)
 	{
diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h
index 13817fa111d..feac9e0675e 100644
--- a/indra/newview/llvotree.h
+++ b/indra/newview/llvotree.h
@@ -69,7 +69,7 @@ class LLVOTree : public LLViewerObject
 	// Graphical stuff for objects - maybe broken out into render class later?
 	/*virtual*/ void render(LLAgent &agent);
 	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent);
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
 	/*virtual*/ BOOL		updateGeometry(LLDrawable *drawable);
diff --git a/indra/newview/llvotreenew.h b/indra/newview/llvotreenew.h
index 3fec5855efe..426470101de 100644
--- a/indra/newview/llvotreenew.h
+++ b/indra/newview/llvotreenew.h
@@ -156,7 +156,7 @@ class LLVOTreeNew : public LLViewerObject
 	/*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
 
 	/*virtual*/ void render(LLAgent &agent);
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
 	/*virtual*/ BOOL		updateGeometry(LLDrawable *drawable);
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 583246c23e8..08b342b9781 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -53,12 +53,10 @@
 #include "lldrawpoolbump.h"
 #include "llface.h"
 #include "llspatialpartition.h"
-
-// TEMP HACK ventrella
 #include "llhudmanager.h"
 #include "llflexibleobject.h"
-
 #include "llsky.h"
+#include "lltexturefetch.h"
 #include "llviewercamera.h"
 #include "llviewertexturelist.h"
 #include "llviewerregion.h"
@@ -75,7 +73,6 @@ const S32 MIN_QUIET_FRAMES_COALESCE = 30;
 const F32 FORCE_SIMPLE_RENDER_AREA = 512.f;
 const F32 FORCE_CULL_AREA = 8.f;
 const F32 MAX_LOD_DISTANCE = 24.f;
-const S32 MAX_SCULPT_REZ = 128;
 
 
 BOOL gAnimateTextures = TRUE;
@@ -100,7 +97,6 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re
 	mRelativeXformInvTrans.setIdentity();
 
 	mLOD = MIN_LOD;
-	mSculptLevel = -2;
 	mTextureAnimp = NULL;
 	mVObjRadius = LLVector3(1,1,0.5f).length();
 	mNumFaces = 0;
@@ -499,28 +495,32 @@ BOOL LLVOVolume::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
 	return TRUE;
 }
 
-void LLVOVolume::updateTextures(LLAgent &agent)
+void LLVOVolume::updateTextures()
 {
 	const F32 TEXTURE_AREA_REFRESH_TIME = 5.f; // seconds
-	if (mDrawable.notNull() && mTextureUpdateTimer.getElapsedTimeF32() > TEXTURE_AREA_REFRESH_TIME)
+	if (mTextureUpdateTimer.getElapsedTimeF32() > TEXTURE_AREA_REFRESH_TIME)
 	{
-		if (mDrawable->isVisible())
-		{
-			updateTextures();
-		}
+		updateTextureVirtualSize();		
 	}
 }
 
-void LLVOVolume::updateTextures()
+void LLVOVolume::updateTextureVirtualSize()
 {
 	// Update the pixel area of all faces
 
+	if(mDrawable.isNull() || !mDrawable->isVisible())
+	{
+		return ;
+	}
+
 	if (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SIMPLE))
 	{
 		return;
 	}
-	
-	if (LLViewerTexture::sDontLoadVolumeTextures || mDrawable.isNull()) // || !mDrawable->isVisible())
+
+	static LLCachedControl<bool> dont_load_textures(gSavedSettings,"TextureDisable");
+		
+	if (dont_load_textures || LLAppViewer::getTextureFetch()->mDebugPause) // || !mDrawable->isVisible())
 	{
 		return;
 	}
@@ -537,14 +537,15 @@ void LLVOVolume::updateTextures()
 		LLFace* face = mDrawable->getFace(i);
 		const LLTextureEntry *te = face->getTextureEntry();
 		LLViewerTexture *imagep = face->getTexture();
-		if (!imagep || !te ||
+		if (!imagep || !te ||			
 			face->mExtents[0] == face->mExtents[1])
 		{
 			continue;
 		}
 		
 		F32 vsize;
-		
+		F32 old_size = face->getVirtualSize();
+
 		if (isHUDAttachment())
 		{
 			F32 area = (F32) LLViewerCamera::getInstance()->getScreenPixelArea();
@@ -554,12 +555,10 @@ void LLVOVolume::updateTextures()
 		}
 		else
 		{
-			vsize = getTextureVirtualSize(face);
+			vsize = face->getTextureVirtualSize();
 		}
 
-		mPixelArea = llmax(mPixelArea, face->getPixelArea());
-
-		F32 old_size = face->getVirtualSize();
+		mPixelArea = llmax(mPixelArea, face->getPixelArea());		
 
 		if (face->mTextureMatrix != NULL)
 		{
@@ -571,7 +570,6 @@ void LLVOVolume::updateTextures()
 		}
 		
 		face->setVirtualSize(vsize);
-		imagep->addTextureStats(vsize);
 		if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_AREA))
 		{
 			if (vsize < min_vsize) min_vsize = vsize;
@@ -603,32 +601,44 @@ void LLVOVolume::updateTextures()
 		mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
 		if (mSculptTexture.notNull())
 		{
-			S32 lod = llmin(mLOD, 3);
-			F32 lodf = ((F32)(lod + 1.0f)/4.f); 
-			F32 tex_size = lodf * MAX_SCULPT_REZ;
-			mSculptTexture->addTextureStats(2.f * tex_size * tex_size);
 			mSculptTexture->setBoostLevel(llmax((S32)mSculptTexture->getBoostLevel(),
 												(S32)LLViewerTexture::BOOST_SCULPTED));
 			mSculptTexture->setForSculpt() ;
-		}
-
-		S32 texture_discard = mSculptTexture->getDiscardLevel(); //try to match the texture
-		S32 current_discard = mSculptLevel;
+			
+			if(!mSculptTexture->isCachedRawImageReady())
+			{
+				S32 lod = llmin(mLOD, 3);
+				F32 lodf = ((F32)(lod + 1.0f)/4.f);
+				F32 tex_size = lodf * LLViewerTexture::sMaxSculptRez ;
+				mSculptTexture->addTextureStats(2.f * tex_size * tex_size, FALSE);
+			
+				//if the sculpty very close to the view point, load first
+				{				
+					LLVector3 lookAt = getPositionAgent() - LLViewerCamera::getInstance()->getOrigin();
+					F32 dist = lookAt.normVec() ;
+					F32 cos_angle_to_view_dir = lookAt * LLViewerCamera::getInstance()->getXAxis() ;				
+					mSculptTexture->setAdditionalDecodePriority(0.8f * LLFace::calcImportanceToCamera(cos_angle_to_view_dir, dist)) ;
+				}
+			}
+	
+			S32 texture_discard = mSculptTexture->getDiscardLevel(); //try to match the texture
+			S32 current_discard = getVolume() ? getVolume()->getSculptLevel() : -2 ;
 
-		if (texture_discard >= 0 && //texture has some data available
-			(texture_discard < current_discard || //texture has more data than last rebuild
-			current_discard < 0)) //no previous rebuild
-		{
-			gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, FALSE);
-			mSculptChanged = TRUE;
-		}
+			if (texture_discard >= 0 && //texture has some data available
+				(texture_discard < current_discard || //texture has more data than last rebuild
+				current_discard < 0)) //no previous rebuild
+			{
+				gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, FALSE);
+				mSculptChanged = TRUE;
+			}
 
-		if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SCULPTED))
+			if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SCULPTED))
 			{
 				setDebugText(llformat("T%d C%d V%d\n%dx%d",
-									  texture_discard, current_discard, getVolume()->getSculptLevel(),
-									  mSculptTexture->getHeight(), mSculptTexture->getWidth()));
+										  texture_discard, current_discard, getVolume()->getSculptLevel(),
+										  mSculptTexture->getHeight(), mSculptTexture->getWidth()));
 			}
+		}
 	}
 
 	if (getLightTextureID().notNull())
@@ -649,10 +659,10 @@ void LLVOVolume::updateTextures()
 	{
 		setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize)));
 	}
-	else if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY))
-	{
-		setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize)));
-	}
+ 	else if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY))
+ 	{
+ 		setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize)));
+ 	}
 	else if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_FACE_AREA))
 	{
 		setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize)));
@@ -664,36 +674,6 @@ void LLVOVolume::updateTextures()
 	}
 }
 
-F32 LLVOVolume::getTextureVirtualSize(LLFace* face)
-{
-	//get area of circle around face
-	LLVector3 center = face->getPositionAgent();
-	LLVector3 size = (face->mExtents[1] - face->mExtents[0]) * 0.5f;
-	
-	F32 face_area = LLPipeline::calcPixelArea(center, size, *LLViewerCamera::getInstance());
-
-	face->setPixelArea(face_area);
-
-	if (face_area <= 0)
-	{
-		return 0.f;
-	}
-
-	//get area of circle in texture space
-	LLVector2 tdim = face->mTexExtents[1] - face->mTexExtents[0];
-	F32 texel_area = (tdim * 0.5f).lengthSquared()*3.14159f;
-	if (texel_area <= 0)
-	{
-		// Probably animated, use default
-		texel_area = 1.f;
-	}
-
-	//apply texel area to face area to get accurate ratio
-	face_area /= llclamp(texel_area, 1.f/64.f, 16.f);
-
-	return face_area;
-}
-
 BOOL LLVOVolume::isActive() const
 {
 	return !mStatic || mTextureAnimp || (mVolumeImpl && mVolumeImpl->isActive());
@@ -770,7 +750,6 @@ LLDrawable *LLVOVolume::createDrawable(LLPipeline *pipeline)
 	return mDrawable;
 }
 
-
 BOOL LLVOVolume::setVolume(const LLVolumeParams &volume_params, const S32 detail, bool unique_volume)
 {
 	// Check if we need to change implementations
@@ -825,7 +804,6 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &volume_params, const S32 detail
 				{
 					sculpt();
 				}
-				mSculptLevel = getVolume()->getSculptLevel();
 			}
 		}
 		else
@@ -840,32 +818,22 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &volume_params, const S32 detail
 
 // sculpt replaces generate() for sculpted surfaces
 void LLVOVolume::sculpt()
-{
-	U16 sculpt_height = 0;
-	U16 sculpt_width = 0;
-	S8 sculpt_components = 0;
-	const U8* sculpt_data = NULL;
-
+{	
 	if (mSculptTexture.notNull())
-	{
-		S32 discard_level;
-		S32 desired_discard = 0; // lower discard levels have MUCH less resolution 
-
-		discard_level = desired_discard;
+	{				
+		U16 sculpt_height = 0;
+		U16 sculpt_width = 0;
+		S8 sculpt_components = 0;
+		const U8* sculpt_data = NULL;
+	
+		S32 discard_level = mSculptTexture->getDiscardLevel() ;
+		LLImageRaw* raw_image = mSculptTexture->getCachedRawImage() ;
 		
 		S32 max_discard = mSculptTexture->getMaxDiscardLevel();
 		if (discard_level > max_discard)
 			discard_level = max_discard;    // clamp to the best we can do
 
-		S32 best_discard = mSculptTexture->getDiscardLevel();
-		if (discard_level < best_discard)
-			discard_level = best_discard;   // clamp to what we have
-
-		if (best_discard == -1)
-			discard_level = -1;  // and if we have nothing, set to nothing
-
-		
-		S32 current_discard = getVolume()->getSculptLevel();
+		S32 current_discard = getVolume()->getSculptLevel() ;
 		if(current_discard < -2)
 		{
 			llwarns << "WARNING!!: Current discard of sculpty at " << current_discard 
@@ -886,18 +854,7 @@ void LLVOVolume::sculpt()
 		if (current_discard == discard_level)  // no work to do here
 			return;
 		
-		LLPointer<LLImageRaw> raw_image = new LLImageRaw();
-		BOOL is_valid = mSculptTexture->readBackRaw(discard_level, raw_image, FALSE);
-
-		sculpt_height = raw_image->getHeight();
-		sculpt_width = raw_image->getWidth();
-		sculpt_components = raw_image->getComponents();		
-
-		if(is_valid)
-		{
-			is_valid = mSculptTexture->isValidForSculpt(discard_level, sculpt_width, sculpt_height, sculpt_components) ;
-		}
-		if(!is_valid)
+		if(!raw_image)
 		{
 			sculpt_width = 0;
 			sculpt_height = 0;
@@ -909,10 +866,10 @@ void LLVOVolume::sculpt()
 			}
 		}
 		else
-		{
-			if (raw_image->getDataSize() < sculpt_height * sculpt_width * sculpt_components)
-				llerrs << "Sculpt: image data size = " << raw_image->getDataSize()
-					   << " < " << sculpt_height << " x " << sculpt_width << " x " <<sculpt_components << llendl;
+		{					
+			sculpt_height = raw_image->getHeight();
+			sculpt_width = raw_image->getWidth();
+			sculpt_components = raw_image->getComponents();		
 					   
 			sculpt_data = raw_image->getData();
 
@@ -948,12 +905,6 @@ BOOL LLVOVolume::calcLOD()
 		return FALSE;
 	}
 
-	//update face texture sizes on lod calculation
-	//if (mDrawable->isVisible())
-	//{
-	//	updateTextures();
-	//}
-
 	S32 cur_detail = 0;
 	
 	F32 radius = getVolume()->mLODScaleBias.scaledVec(getScale()).length();
@@ -2608,7 +2559,7 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 		if (face == -1)
 		{
 			start_face = 0;
-			end_face = volume->getNumFaces();
+			end_face = volume->getNumVolumeFaces();
 		}
 		else
 		{
@@ -2623,8 +2574,8 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 			
 			if (face_hit >= 0 && mDrawable->getNumFaces() > face_hit)
 			{
-				LLFace* face = mDrawable->getFace(face_hit);
-			
+				LLFace* face = mDrawable->getFace(face_hit);				
+
 				if (pick_transparent || !face->getTexture() || !face->getTexture()->hasGLTexture() || face->getTexture()->getMask(face->surfaceToTexture(tc, p, n)))
 				{
 					v_end = p;
@@ -2870,7 +2821,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
 
 		LLVOVolume* vobj = drawablep->getVOVolume();
 		llassert_always(vobj);
-		vobj->updateTextures();
+		vobj->updateTextureVirtualSize();
 		vobj->preRebuild();
 
 		drawablep->clearState(LLDrawable::HAS_ALPHA);
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index 250c3ed9170..6d90de2a6f9 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -139,7 +139,7 @@ class LLVOVolume : public LLViewerObject
 
 				
 				BOOL	getVolumeChanged() const				{ return mVolumeChanged; }
-				F32		getTextureVirtualSize(LLFace* face);
+				
 	/*virtual*/ F32  	getRadius() const						{ return mVObjRadius; };
 				const LLMatrix4& getWorldMatrix(LLXformMatrix* xform) const;
 
@@ -187,8 +187,8 @@ class LLVOVolume : public LLViewerObject
 	/*virtual*/ void	updateFaceSize(S32 idx);
 	/*virtual*/ BOOL	updateLOD();
 				void	updateRadius();
-	/*virtual*/ void	updateTextures(LLAgent &agent);
-				void	updateTextures();
+	/*virtual*/ void	updateTextures();
+				void	updateTextureVirtualSize();
 
 				void	updateFaceFlags();
 				void	regenFaces();
@@ -267,7 +267,6 @@ class LLVOVolume : public LLViewerObject
 	LLFrameTimer mTextureUpdateTimer;
 	S32			mLOD;
 	BOOL		mLODChanged;
-	S32         mSculptLevel;
 	BOOL		mSculptChanged;
 	F32			mSpotLightPriority;
 	LLMatrix4	mRelativeXform;
diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp
index 0c967f9020c..e5ff62746e3 100644
--- a/indra/newview/llvowater.cpp
+++ b/indra/newview/llvowater.cpp
@@ -100,7 +100,7 @@ void LLVOWater::setPixelAreaAndAngle(LLAgent &agent)
 
 
 // virtual
-void LLVOWater::updateTextures(LLAgent &agent)
+void LLVOWater::updateTextures()
 {
 }
 
diff --git a/indra/newview/llvowater.h b/indra/newview/llvowater.h
index 28a5633c58e..3cc031e589a 100644
--- a/indra/newview/llvowater.h
+++ b/indra/newview/llvowater.h
@@ -68,7 +68,7 @@ class LLVOWater : public LLStaticViewerObject
 	/*virtual*/ BOOL        updateGeometry(LLDrawable *drawable);
 	/*virtual*/ void		updateSpatialExtents(LLVector3& newMin, LLVector3& newMax);
 
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
 
 	virtual U32 getPartitionType() const;
diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp
index da62223aac2..9bde85dcaf8 100644
--- a/indra/newview/llwearablelist.cpp
+++ b/indra/newview/llwearablelist.cpp
@@ -69,6 +69,11 @@ struct LLWearableArrivedData
 // LLWearableList
 
 LLWearableList::~LLWearableList()
+{
+	llassert_always(mList.empty()) ;
+}
+
+void LLWearableList::cleanup() 
 {
 	for_each(mList.begin(), mList.end(), DeletePairedPointer());
 	mList.clear();
diff --git a/indra/newview/llwearablelist.h b/indra/newview/llwearablelist.h
index e5155c66a4b..cf1a9bddff6 100644
--- a/indra/newview/llwearablelist.h
+++ b/indra/newview/llwearablelist.h
@@ -44,6 +44,7 @@ class LLWearableList : public LLSingleton<LLWearableList>
 public:
 	LLWearableList()	{}
 	~LLWearableList();
+	void cleanup() ;
 
 	S32					getLength() const { return mList.size(); }
 
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
index 829d631473b..5e83ab8c3c1 100644
--- a/indra/newview/llworldmap.cpp
+++ b/indra/newview/llworldmap.cpp
@@ -34,58 +34,82 @@
 
 #include "llworldmap.h"
 
-#include "llregionhandle.h"
+#include "llworldmapmessage.h"
 #include "message.h"
-
 #include "llappviewer.h"	// for gPacificDaylightTime
-#include "llagent.h"
-#include "llmapresponders.h"
-#include "llviewercontrol.h"
-#include "llfloaterworldmap.h"
 #include "lltracker.h"
 #include "llviewertexturelist.h"
-#include "llviewerregion.h"
-#include "llregionflags.h"
 #include "lltrans.h"
 
-const F32 REQUEST_ITEMS_TIMER =  10.f * 60.f; // 10 minutes
+// Timers to temporise database requests
+const F32 AGENTS_UPDATE_TIMER = 60.0;			// Seconds between 2 agent requests for a region
+const F32 REQUEST_ITEMS_TIMER = 10.f * 60.f;	// Seconds before we consider re-requesting item data for the grid
+
+//---------------------------------------------------------------------------
+// LLItemInfo
+//---------------------------------------------------------------------------
 
-// For DEV-17507, do lazy image loading in llworldmapview.cpp instead,
-// limiting requests to currently visible regions and minimizing the
-// number of textures being requested simultaneously.
-//
-// Uncomment IMMEDIATE_IMAGE_LOAD to restore the old behavior
-//
-//#define IMMEDIATE_IMAGE_LOAD
 LLItemInfo::LLItemInfo(F32 global_x, F32 global_y,
 					   const std::string& name, 
-					   LLUUID id,
-					   S32 extra, S32 extra2)
+					   LLUUID id)
 :	mName(name),
 	mToolTip(""),
 	mPosGlobal(global_x, global_y, 40.0),
 	mID(id),
-	mSelected(FALSE),
-	mExtra(extra),
-	mExtra2(extra2)
+	mCount(1)
+//	mSelected(false)
+//	mColor()
 {
-	mRegionHandle = to_region_handle(mPosGlobal);
 }
 
-LLSimInfo::LLSimInfo()
-:	mHandle(0),
+//---------------------------------------------------------------------------
+// LLSimInfo
+//---------------------------------------------------------------------------
+
+LLSimInfo::LLSimInfo(U64 handle)
+:	mHandle(handle),
 	mName(),
 	mAgentsUpdateTime(0),
-	mShowAgentLocations(FALSE),
 	mAccess(0x0),
 	mRegionFlags(0x0),
-	mWaterHeight(0.f),
-	mAlpha(-1.f)
+	mFirstAgentRequest(true)
+//	mWaterHeight(0.f)
+{
+}
+
+void LLSimInfo::setLandForSaleImage (LLUUID image_id) 
 {
+	mMapImageID = image_id;
+
+	// Fetch the image
+	if (mMapImageID.notNull())
+	{
+		mOverlayImage = LLViewerTextureManager::getFetchedTexture(mMapImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+		mOverlayImage->setAddressMode(LLTexUnit::TAM_CLAMP);
+	}
+	else
+	{
+		mOverlayImage = NULL;
+	}
 }
 
+LLPointer<LLViewerFetchedTexture> LLSimInfo::getLandForSaleImage () 
+{
+	if (mOverlayImage.isNull() && mMapImageID.notNull())
+	{
+		// Fetch the image if it hasn't been done yet (unlikely but...)
+		mOverlayImage = LLViewerTextureManager::getFetchedTexture(mMapImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+		mOverlayImage->setAddressMode(LLTexUnit::TAM_CLAMP);
+	}
+	if (!mOverlayImage.isNull())
+	{
+		// Boost the fetch level when we try to access that image
+		mOverlayImage->setBoostLevel(LLViewerTexture::BOOST_MAP);
+	}
+	return mOverlayImage;
+}
 
-LLVector3d LLSimInfo::getGlobalPos(LLVector3 local_pos) const
+LLVector3d LLSimInfo::getGlobalPos(const LLVector3& local_pos) const
 {
 	LLVector3d pos = from_region_handle(mHandle);
 	pos.mdV[VX] += local_pos.mV[VX];
@@ -94,128 +118,184 @@ LLVector3d LLSimInfo::getGlobalPos(LLVector3 local_pos) const
 	return pos;
 }
 
+LLVector3d LLSimInfo::getGlobalOrigin() const
+{
+	return from_region_handle(mHandle);
+}
 LLVector3 LLSimInfo::getLocalPos(LLVector3d global_pos) const
 {
 	LLVector3d sim_origin = from_region_handle(mHandle);
 	return LLVector3(global_pos - sim_origin);
 }
 
+void LLSimInfo::clearImage()
+{
+	if (!mOverlayImage.isNull())
+	{
+		mOverlayImage->setBoostLevel(0);
+		mOverlayImage = NULL;
+	}
+}
 
-
-//---------------------------------------------------------------------------
-// World Map
-//---------------------------------------------------------------------------
-
-LLWorldMap::LLWorldMap() :
-	mIsTrackingUnknownLocation( FALSE ),
-	mInvalidLocation( FALSE ),
-	mIsTrackingDoubleClick( FALSE ),
-	mIsTrackingCommit( FALSE ),
-	mUnknownLocation( 0, 0, 0 ),
-	mRequestLandForSale(true),
-	mCurrentMap(0),
-	mMinX(U32_MAX),
-	mMaxX(U32_MIN),
-	mMinY(U32_MAX),
-	mMaxY(U32_MIN),
-	mNeighborMap(NULL),
-	mTelehubCoverageMap(NULL),
-	mNeighborMapWidth(0),
-	mNeighborMapHeight(0),
-	mSLURLRegionName(),
-	mSLURLRegionHandle(0),
-	mSLURL(),
-	mSLURLCallback(0),
-	mSLURLTeleport(false)
-{
-	for (S32 map=0; map<MAP_SIM_IMAGE_TYPES; ++map)
+void LLSimInfo::dropImagePriority()
+{
+	if (!mOverlayImage.isNull())
 	{
-		mMapLoaded[map] = FALSE;
-		mMapBlockLoaded[map] = new BOOL[MAP_BLOCK_RES*MAP_BLOCK_RES];
-		for (S32 idx=0; idx<MAP_BLOCK_RES*MAP_BLOCK_RES; ++idx)
-		{
-			mMapBlockLoaded[map][idx] = FALSE;
-		}
+		mOverlayImage->setBoostLevel(0);
 	}
 }
 
+// Update the agent count for that region
+void LLSimInfo::updateAgentCount(F64 time)
+{
+	if ((time - mAgentsUpdateTime > AGENTS_UPDATE_TIMER) || mFirstAgentRequest)
+	{
+		LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_AGENT_LOCATIONS, mHandle);
+		mAgentsUpdateTime = time;
+		mFirstAgentRequest = false;
+	}
+}
 
-LLWorldMap::~LLWorldMap()
+// Get the total agents count
+const S32 LLSimInfo::getAgentCount() const
 {
-	reset();
-	for (S32 map=0; map<MAP_SIM_IMAGE_TYPES; ++map)
+	S32 total_agent_count = 0;
+	for (LLSimInfo::item_info_list_t::const_iterator it = mAgentLocations.begin(); it != mAgentLocations.end(); ++it)
 	{
-		delete[] mMapBlockLoaded[map];
+		total_agent_count += it->getCount();
 	}
+	return total_agent_count;
 }
 
+bool LLSimInfo::isName(const std::string& name) const
+{
+	return (LLStringUtil::compareInsensitive(name, mName) == 0);
+}
 
-void LLWorldMap::reset()
+void LLSimInfo::dump() const
 {
-	for_each(mSimInfoMap.begin(), mSimInfoMap.end(), DeletePairedPointer());
-	mSimInfoMap.clear();
+	U32 x_pos, y_pos;
+	from_region_handle(mHandle, &x_pos, &y_pos);
+
+	LL_INFOS("World Map") << x_pos << "," << y_pos
+		<< " " << mName 
+		<< " " << (S32)mAccess
+		<< " " << std::hex << mRegionFlags << std::dec
+//		<< " " << mWaterHeight
+		<< LL_ENDL;
+}
+
+void LLSimInfo::clearItems()
+{
+	mTelehubs.clear();
+	mInfohubs.clear();
+	mPGEvents.clear();
+	mMatureEvents.clear();
+	mAdultEvents.clear();
+	mLandForSale.clear();
+	mLandForSaleAdult.clear();
+//  We persist the agent count though as it is updated on a frequent basis
+// 	mAgentLocations.clear();
+}
+
+void LLSimInfo::insertAgentLocation(const LLItemInfo& item) 
+{
+	std::string name = item.getName();
 
-	for (S32 m=0; m<MAP_SIM_IMAGE_TYPES; ++m)
+	// Find the last item in the list with a different name and erase them
+	item_info_list_t::iterator lastiter;
+	for (lastiter = mAgentLocations.begin(); lastiter != mAgentLocations.end(); ++lastiter)
+	{
+		LLItemInfo& info = *lastiter;
+		if (info.isName(name))
+		{
+			break;
+		}
+	}
+	if (lastiter != mAgentLocations.begin())
 	{
-		mMapLoaded[m] = FALSE;
+		mAgentLocations.erase(mAgentLocations.begin(), lastiter);
 	}
 
+	// Now append the new location
+	mAgentLocations.push_back(item); 
+}
+
+//---------------------------------------------------------------------------
+// World Map
+//---------------------------------------------------------------------------
+
+LLWorldMap::LLWorldMap() :
+	mIsTrackingLocation( false ),
+	mIsTrackingFound( false ),
+	mIsInvalidLocation( false ),
+	mIsTrackingDoubleClick( false ),
+	mIsTrackingCommit( false ),
+	mTrackingLocation( 0, 0, 0 ),
+	mFirstRequest(true)
+{
+	//LL_INFOS("World Map") << "Creating the World Map -> LLWorldMap::LLWorldMap()" << LL_ENDL;
+	mMapBlockLoaded = new bool[MAP_BLOCK_RES*MAP_BLOCK_RES];
 	clearSimFlags();
-	
-	eraseItems();
+}
 
-	mMinX = U32_MAX;
-	mMaxX = U32_MIN;
 
-	mMinY = U32_MAX;
-	mMaxY = U32_MIN;
+LLWorldMap::~LLWorldMap()
+{
+	//LL_INFOS("World Map") << "Destroying the World Map -> LLWorldMap::~LLWorldMap()" << LL_ENDL;
+	reset();
+	delete[] mMapBlockLoaded;
+}
 
-	delete [] mNeighborMap;
-	mNeighborMap = NULL;
-	delete [] mTelehubCoverageMap;
-	mTelehubCoverageMap = NULL;
 
-	mNeighborMapWidth = 0;
-	mNeighborMapHeight = 0;
+void LLWorldMap::reset()
+{
+	clearItems(true);		// Clear the items lists
+	clearImageRefs();		// Clear the world mipmap and the land for sale tiles
+	clearSimFlags();		// Clear the block info flags array 
 
-	for (S32 i=0; i<MAP_SIM_IMAGE_TYPES; i++)
-	{
-		mMapLayers[i].clear();
-	}
+	// Finally, clear the region map itself
+	for_each(mSimInfoMap.begin(), mSimInfoMap.end(), DeletePairedPointer());
+	mSimInfoMap.clear();
 }
 
-void LLWorldMap::eraseItems()
+// Returns true if the items have been cleared
+bool LLWorldMap::clearItems(bool force)
 {
-	if (mRequestTimer.getElapsedTimeF32() > REQUEST_ITEMS_TIMER)
+	bool clear = false;
+	if ((mRequestTimer.getElapsedTimeF32() > REQUEST_ITEMS_TIMER) || mFirstRequest || force)
 	{
 		mRequestTimer.reset();
 
-		mTelehubs.clear();
-		mInfohubs.clear();
-		mPGEvents.clear();
-		mMatureEvents.clear();
-		mAdultEvents.clear();
-		mLandForSale.clear();
+		LLSimInfo* sim_info = NULL;
+		for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
+		{
+			sim_info = it->second;
+			if (sim_info)
+			{
+				sim_info->clearItems();
+			}
+		}
+		clear = true;
+		mFirstRequest = false;
 	}
-// 	mAgentLocationsMap.clear(); // persists
-// 	mNumAgents.clear(); // persists
+	return clear;
 }
 
-
 void LLWorldMap::clearImageRefs()
 {
+	// We clear the reference to the images we're holding.
+	// Images hold by the world mipmap first
+	mWorldMipmap.reset();
+
+	// Images hold by the region map
+	LLSimInfo* sim_info = NULL;
 	for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
 	{
-		LLSimInfo* info = (*it).second;
-		if (info->mCurrentImage)
-		{
-			info->mCurrentImage->setBoostLevel(0);
-			info->mCurrentImage = NULL;
-		}
-		if (info->mOverlayImage)
+		sim_info = it->second;
+		if (sim_info)
 		{
-			info->mOverlayImage->setBoostLevel(0);
-			info->mOverlayImage = NULL;
+			sim_info->clearImage();
 		}
 	}
 }
@@ -223,15 +303,25 @@ void LLWorldMap::clearImageRefs()
 // Doesn't clear the already-loaded sim infos, just re-requests them
 void LLWorldMap::clearSimFlags()
 {
-	for (S32 map=0; map<MAP_SIM_IMAGE_TYPES; ++map)
+	for (S32 idx=0; idx<MAP_BLOCK_RES*MAP_BLOCK_RES; ++idx)
 	{
-		for (S32 idx=0; idx<MAP_BLOCK_RES*MAP_BLOCK_RES; ++idx)
-		{
-			mMapBlockLoaded[map][idx] = FALSE;
-		}
+		mMapBlockLoaded[idx] = false;
 	}
 }
 
+LLSimInfo* LLWorldMap::createSimInfoFromHandle(const U64 handle)
+{
+	LLSimInfo* sim_info = new LLSimInfo(handle);
+	mSimInfoMap[handle] = sim_info;
+	return sim_info;
+}
+
+void LLWorldMap::equalizeBoostLevels()
+{
+	mWorldMipmap.equalizeBoostLevels();
+	return;
+}
+
 LLSimInfo* LLWorldMap::simInfoFromPosGlobal(const LLVector3d& pos_global)
 {
 	U64 handle = to_region_handle(pos_global);
@@ -243,11 +333,7 @@ LLSimInfo* LLWorldMap::simInfoFromHandle(const U64 handle)
 	sim_info_map_t::iterator it = mSimInfoMap.find(handle);
 	if (it != mSimInfoMap.end())
 	{
-		LLSimInfo* sim_info = (*it).second;
-		if (sim_info)
-		{
-			return sim_info;
-		}
+		return it->second;
 	}
 	return NULL;
 }
@@ -258,762 +344,272 @@ LLSimInfo* LLWorldMap::simInfoFromName(const std::string& sim_name)
 	LLSimInfo* sim_info = NULL;
 	if (!sim_name.empty())
 	{
-		for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
+		// Iterate through the entire sim info map and compare the name
+		sim_info_map_t::iterator it;
+		for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
 		{
-			sim_info = (*it).second;
-			if (sim_info
-				&& (0 == LLStringUtil::compareInsensitive(sim_name, sim_info->mName)) )
+			sim_info = it->second;
+			if (sim_info && sim_info->isName(sim_name) )
 			{
+				// break out of loop if success
 				break;
 			}
-			sim_info = NULL;
 		}
+		// If we got to the end, we haven't found the sim. Reset the ouput value to NULL.
+		if (it == mSimInfoMap.end())
+			sim_info = NULL;
 	}
 	return sim_info;
 }
 
 bool LLWorldMap::simNameFromPosGlobal(const LLVector3d& pos_global, std::string & outSimName )
 {
-	bool gotSimName = true;
+	LLSimInfo* sim_info = simInfoFromPosGlobal(pos_global);
 
-	U64 handle = to_region_handle(pos_global);
-
-	sim_info_map_t::iterator it = mSimInfoMap.find(handle);
-	if (it != mSimInfoMap.end())
+	if (sim_info)
 	{
-		LLSimInfo* info = (*it).second;
-		outSimName = info->mName;
+		outSimName = sim_info->getName();
 	}
 	else
 	{
-		gotSimName = false;
 		outSimName = "(unknown region)";
 	}
 
-	return gotSimName;
+	return (sim_info != NULL);
 }
 
-void LLWorldMap::setCurrentLayer(S32 layer, bool request_layer)
+void LLWorldMap::reloadItems(bool force)
 {
-	mCurrentMap = layer;
-	if (!mMapLoaded[layer] || request_layer)
+	//LL_INFOS("World Map") << "LLWorldMap::reloadItems()" << LL_ENDL;
+	if (clearItems(force))
 	{
-		sendMapLayerRequest();
+		LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_TELEHUB);
+		LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_PG_EVENT);
+		LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_MATURE_EVENT);
+		LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_ADULT_EVENT);
+		LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_LAND_FOR_SALE);
 	}
-
-	if (mTelehubs.size() == 0 ||
-		mInfohubs.size() == 0)
-	{
-		// Request for telehubs
-		sendItemRequest(MAP_ITEM_TELEHUB);
-	}
-
-	if (mPGEvents.size() == 0)
-	{
-		// Request for events
-		sendItemRequest(MAP_ITEM_PG_EVENT);
-	}
-
-	if (mMatureEvents.size() == 0)
-	{
-		// Request for events (mature)
-		sendItemRequest(MAP_ITEM_MATURE_EVENT);
-	}
-
-	if (mAdultEvents.size() == 0)
-	{
-		// Request for events (adult)
-		sendItemRequest(MAP_ITEM_ADULT_EVENT);
-	}
-
-	if (mLandForSale.size() == 0)
-	{
-		// Request for Land For Sale
-		sendItemRequest(MAP_ITEM_LAND_FOR_SALE);
-	}
-	
-	if (mLandForSaleAdult.size() == 0)
-	{
-		// Request for Land For Sale
-		sendItemRequest(MAP_ITEM_LAND_FOR_SALE_ADULT);
-	}
-
-	clearImageRefs();
-	clearSimFlags();
 }
 
-void LLWorldMap::sendItemRequest(U32 type, U64 handle)
+// static public
+// Insert a region in the region map
+// returns true if region inserted, false otherwise
+bool LLWorldMap::insertRegion(U32 x_world, U32 y_world, std::string& name, LLUUID& image_id, U32 accesscode, U32 region_flags)
 {
-	LLMessageSystem* msg = gMessageSystem;
-	S32 layer = mCurrentMap;
-
-	msg->newMessageFast(_PREHASH_MapItemRequest);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->addU32Fast(_PREHASH_Flags, layer);
-	msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
-	msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
-
-	msg->nextBlockFast(_PREHASH_RequestData);
-	msg->addU32Fast(_PREHASH_ItemType, type);
-	msg->addU64Fast(_PREHASH_RegionHandle, handle); // If zero, filled in on sim
-
-	gAgent.sendReliableMessage();
-}
-
-// public
-void LLWorldMap::sendMapLayerRequest()
-{
-	if (!gAgent.getRegion()) return;
-
-	LLSD body;
-	body["Flags"] = mCurrentMap;
-	std::string url = gAgent.getRegion()->getCapability(
-		gAgent.isGodlike() ? "MapLayerGod" : "MapLayer");
-
-	if (!url.empty())
+	// This region doesn't exist
+	if (accesscode == 255)
 	{
-		llinfos << "LLWorldMap::sendMapLayerRequest via capability" << llendl;
-		LLHTTPClient::post(url, body, new LLMapLayerResponder());
+		// Checks if the track point is in it and invalidates it if it is
+		if (LLWorldMap::getInstance()->isTrackingInRectangle( x_world, y_world, x_world + REGION_WIDTH_UNITS, y_world + REGION_WIDTH_UNITS))
+		{
+			LLWorldMap::getInstance()->setTrackingInvalid();
+		}
+		// return failure to insert
+		return false;
 	}
 	else
 	{
-		llinfos << "LLWorldMap::sendMapLayerRequest via message system" << llendl;
-		LLMessageSystem* msg = gMessageSystem;
-		S32 layer = mCurrentMap;
-
-		// Request for layer
-		msg->newMessageFast(_PREHASH_MapLayerRequest);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->addU32Fast(_PREHASH_Flags, layer);
-		msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
-		msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
-		gAgent.sendReliableMessage();
-
-		if (mRequestLandForSale)
+		U64 handle = to_region_handle(x_world, y_world);
+ 		//LL_INFOS("World Map") << "Map sim : " << name << ", ID : " << image_id.getString() << LL_ENDL;
+		// Insert the region in the region map of the world map
+		// Loading the LLSimInfo object with what we got and insert it in the map
+		LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
+		if (siminfo == NULL)
 		{
-			msg->newMessageFast(_PREHASH_MapLayerRequest);
-			msg->nextBlockFast(_PREHASH_AgentData);
-			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-			msg->addU32Fast(_PREHASH_Flags, 2);
-			msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
-			msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
-			gAgent.sendReliableMessage();
+			siminfo = LLWorldMap::getInstance()->createSimInfoFromHandle(handle);
 		}
+		siminfo->setName(name);
+		siminfo->setAccess(accesscode);
+		siminfo->setRegionFlags(region_flags);
+	//	siminfo->setWaterHeight((F32) water_height);
+		siminfo->setLandForSaleImage(image_id);
+
+		// Handle the location tracking (for teleport, UI feedback and info display)
+		if (LLWorldMap::getInstance()->isTrackingInRectangle( x_world, y_world, x_world + REGION_WIDTH_UNITS, y_world + REGION_WIDTH_UNITS))
+		{
+			if (siminfo->isDown())
+			{
+				// We were tracking this location, but it's no available
+				LLWorldMap::getInstance()->setTrackingInvalid();
+			}
+			else
+			{
+				// We were tracking this location, and it does exist and is available
+				LLWorldMap::getInstance()->setTrackingValid();
+			}
+		}
+		// return insert region success
+		return true;
 	}
 }
 
-// public
-void LLWorldMap::sendNamedRegionRequest(std::string region_name)
-{
-	LLMessageSystem* msg = gMessageSystem;
-	S32 layer = mCurrentMap;
-
-	// Request for layer
-	msg->newMessageFast(_PREHASH_MapNameRequest);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->addU32Fast(_PREHASH_Flags, layer);
-	msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
-	msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
-	msg->nextBlockFast(_PREHASH_NameData);
-	msg->addStringFast(_PREHASH_Name, region_name);
-	gAgent.sendReliableMessage();
-}
-// public
-void LLWorldMap::sendNamedRegionRequest(std::string region_name, 
-		url_callback_t callback,
-		const std::string& callback_url,
-		bool teleport)	// immediately teleport when result returned
-{
-	mSLURLRegionName = region_name;
-	mSLURLRegionHandle = 0;
-	mSLURL = callback_url;
-	mSLURLCallback = callback;
-	mSLURLTeleport = teleport;
-
-	sendNamedRegionRequest(region_name);
-}
-
-void LLWorldMap::sendHandleRegionRequest(U64 region_handle, 
-		url_callback_t callback,
-		const std::string& callback_url,
-		bool teleport)	// immediately teleport when result returned
-{
-	mSLURLRegionName.clear();
-	mSLURLRegionHandle = region_handle;
-	mSLURL = callback_url;
-	mSLURLCallback = callback;
-	mSLURLTeleport = teleport;
-
-	U32 global_x;
-	U32 global_y;
-	from_region_handle(region_handle, &global_x, &global_y);
-	U16 grid_x = (U16)(global_x / REGION_WIDTH_UNITS);
-	U16 grid_y = (U16)(global_y / REGION_WIDTH_UNITS);
-	
-	sendMapBlockRequest(grid_x, grid_y, grid_x, grid_y, true);
-}
-
-// public
-void LLWorldMap::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent)
-{
-	S32 layer = mCurrentMap;
-	LLMessageSystem* msg = gMessageSystem;
-	msg->newMessageFast(_PREHASH_MapBlockRequest);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	U32 flags = layer;
-	flags |= (return_nonexistent ? 0x10000 : 0);
-	msg->addU32Fast(_PREHASH_Flags, flags);
-	msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
-	msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
-	msg->nextBlockFast(_PREHASH_PositionData);
-	msg->addU16Fast(_PREHASH_MinX, min_x);
-	msg->addU16Fast(_PREHASH_MinY, min_y);
-	msg->addU16Fast(_PREHASH_MaxX, max_x);
-	msg->addU16Fast(_PREHASH_MaxY, max_y);
-	gAgent.sendReliableMessage();
-
-	if (mRequestLandForSale)
-	{
-		msg->newMessageFast(_PREHASH_MapBlockRequest);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->addU32Fast(_PREHASH_Flags, 2);
-		msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
-		msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
-		msg->nextBlockFast(_PREHASH_PositionData);
-		msg->addU16Fast(_PREHASH_MinX, min_x);
-		msg->addU16Fast(_PREHASH_MinY, min_y);
-		msg->addU16Fast(_PREHASH_MaxX, max_x);
-		msg->addU16Fast(_PREHASH_MaxY, max_y);
-		gAgent.sendReliableMessage();
-	}
-}
-
-// public static
-void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**)
+// static public
+// Insert an item in the relevant region map
+// returns true if item inserted, false otherwise
+bool LLWorldMap::insertItem(U32 x_world, U32 y_world, std::string& name, LLUUID& uuid, U32 type, S32 extra, S32 extra2)
 {
-	llinfos << "LLWorldMap::processMapLayerReply from message system" << llendl;
-
-	U32 agent_flags;
-	msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags);
-
-	if (agent_flags != (U32)LLWorldMap::getInstance()->mCurrentMap)
-	{
-		llwarns << "Invalid or out of date map image type returned!" << llendl;
-		return;
-	}
-
-	LLUUID image_id;
-	//U32 left, right, top, bottom;
-
-	S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_LayerData);
-
-	LLWorldMap::getInstance()->mMapLayers[agent_flags].clear();
-
-	BOOL adjust = FALSE;
-	for (S32 block=0; block<num_blocks; ++block)
-	{
-		LLWorldMapLayer new_layer;
-		new_layer.LayerDefined = TRUE;
-		msg->getUUIDFast(_PREHASH_LayerData, _PREHASH_ImageID, new_layer.LayerImageID, block);
-		new_layer.LayerImage = LLViewerTextureManager::getFetchedTexture(new_layer.LayerImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
-
-		gGL.getTexUnit(0)->bind(new_layer.LayerImage);
-		new_layer.LayerImage->setAddressMode(LLTexUnit::TAM_CLAMP);
-		
-		U32 left, right, top, bottom;
-		msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Left, left, block);
-		msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Right, right, block);
-		msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Top, top, block);
-		msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Bottom, bottom, block);
-
-		new_layer.LayerExtents.mLeft = left;
-		new_layer.LayerExtents.mRight = right;
-		new_layer.LayerExtents.mBottom = bottom;
-		new_layer.LayerExtents.mTop = top;
-
-		F32 x_meters = F32(left*REGION_WIDTH_UNITS);
-		F32 y_meters = F32(bottom*REGION_WIDTH_UNITS);
-		adjust = LLWorldMap::getInstance()->extendAABB(U32(x_meters), U32(y_meters), 
-							   U32(x_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getWidth()),
-							   U32(y_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getHeight())) || adjust;
-
-		LLWorldMap::getInstance()->mMapLayers[agent_flags].push_back(new_layer);
-	}
-
-	LLWorldMap::getInstance()->mMapLoaded[agent_flags] = TRUE;
-	if(adjust) gFloaterWorldMap->adjustZoomSliderBounds();
-}
+	// Create an item record for the received object
+	LLItemInfo new_item((F32)x_world, (F32)y_world, name, uuid);
 
-// public static
-void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
-{
-	U32 agent_flags;
-	msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags);
+	// Compute a region handle based on the objects coordinates
+	LLVector3d	pos((F32)x_world, (F32)y_world, 40.0);
+	U64 handle = to_region_handle(pos);
 
-	if ((S32)agent_flags < 0 || agent_flags >= MAP_SIM_IMAGE_TYPES)
+	// Get the region record for that handle or NULL if we haven't browsed it yet
+	LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
+	if (siminfo == NULL)
 	{
-		llwarns << "Invalid map image type returned! " << agent_flags << llendl;
-		return;
+		siminfo = LLWorldMap::getInstance()->createSimInfoFromHandle(handle);
 	}
 
-	S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_Data);
-
-	bool found_null_sim = false;
-
-	BOOL adjust = FALSE;
-	for (S32 block=0; block<num_blocks; ++block)
+	//LL_INFOS("World Map") << "Process item : type = " << type << LL_ENDL;
+	switch (type)
 	{
-		U16 x_regions;
-		U16 y_regions;
-		std::string name;
-		U8 accesscode;
-		U32 region_flags;
-		U8 water_height;
-		U8 agents;
-		LLUUID image_id;
-		msg->getU16Fast(_PREHASH_Data, _PREHASH_X, x_regions, block);
-		msg->getU16Fast(_PREHASH_Data, _PREHASH_Y, y_regions, block);
-		msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
-		msg->getU8Fast(_PREHASH_Data, _PREHASH_Access, accesscode, block);
-		msg->getU32Fast(_PREHASH_Data, _PREHASH_RegionFlags, region_flags, block);
-		msg->getU8Fast(_PREHASH_Data, _PREHASH_WaterHeight, water_height, block);
-		msg->getU8Fast(_PREHASH_Data, _PREHASH_Agents, agents, block);
-		msg->getUUIDFast(_PREHASH_Data, _PREHASH_MapImageID, image_id, block);
-
-		U32 x_meters = x_regions * REGION_WIDTH_UNITS;
-		U32 y_meters = y_regions * REGION_WIDTH_UNITS;
-
-		U64 handle = to_region_handle(x_meters, y_meters);
-
-		if (accesscode == 255)
-		{
-			// This region doesn't exist
-			if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[0] >= x_meters &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[0] < x_meters + 256 &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[1] >= y_meters &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[1] < y_meters + 256)
-			{
-				// We were tracking this location, but it doesn't exist
-				LLWorldMap::getInstance()->mInvalidLocation = TRUE;
-			}
-
-			found_null_sim = true;
-		}
-		else
+		case MAP_ITEM_TELEHUB: // telehubs
 		{
-			adjust = LLWorldMap::getInstance()->extendAABB(x_meters, 
-										y_meters, 
-										x_meters+REGION_WIDTH_UNITS,
-										y_meters+REGION_WIDTH_UNITS) || adjust;
-
-// 			llinfos << "Map sim " << name << " image layer " << agent_flags << " ID " << image_id.getString() << llendl;
-			
-			LLSimInfo* siminfo = new LLSimInfo();
-			sim_info_map_t::iterator iter = LLWorldMap::getInstance()->mSimInfoMap.find(handle);
-			if (iter != LLWorldMap::getInstance()->mSimInfoMap.end())
-			{
-				LLSimInfo* oldinfo = iter->second;
-				for (S32 image=0; image<MAP_SIM_IMAGE_TYPES; ++image)
-				{
-					siminfo->mMapImageID[image] = oldinfo->mMapImageID[image];
-				}
-				delete oldinfo;
-			}
-			LLWorldMap::getInstance()->mSimInfoMap[handle] = siminfo;
-
-			siminfo->mHandle = handle;
-			siminfo->mName.assign( name );
-			siminfo->mAccess = accesscode;
-			siminfo->mRegionFlags = region_flags;
-			siminfo->mWaterHeight = (F32) water_height;
-			siminfo->mMapImageID[agent_flags] = image_id;
-
-#ifdef IMMEDIATE_IMAGE_LOAD
-			siminfo->mCurrentImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
-			siminfo->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP);
-#endif
+			/* Merov: we are not using the hub color anymore for display so commenting that out
+			// Telehub color
+			U32 X = x_world / REGION_WIDTH_UNITS;
+			U32 Y = y_world / REGION_WIDTH_UNITS;
+			F32 red = fmod((F32)X * 0.11f, 1.f) * 0.8f;
+			F32 green = fmod((F32)Y * 0.11f, 1.f) * 0.8f;
+			F32 blue = fmod(1.5f * (F32)(X + Y) * 0.11f, 1.f) * 0.8f;
+			F32 add_amt = (X % 2) ? 0.15f : -0.15f;
+			add_amt += (Y % 2) ? -0.15f : 0.15f;
+			LLColor4 color(red + add_amt, green + add_amt, blue + add_amt);
+			new_item.setColor(color);
+			*/
 			
-			if (siminfo->mMapImageID[2].notNull())
+			// extra2 specifies whether this is an infohub or a telehub.
+			if (extra2)
 			{
-#ifdef IMMEDIATE_IMAGE_LOAD
-				siminfo->mOverlayImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[2], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
-#endif
+				siminfo->insertInfoHub(new_item);
 			}
 			else
 			{
-				siminfo->mOverlayImage = NULL;
-			}
-
-			if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[0] >= x_meters &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[0] < x_meters + 256 &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[1] >= y_meters &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[1] < y_meters + 256)
-			{
-				if (siminfo->mAccess == SIM_ACCESS_DOWN)
-				{
-					// We were tracking this location, but it doesn't exist
-					LLWorldMap::getInstance()->mInvalidLocation = true;
-				}
-				else
-				{
-					// We were tracking this location, and it does exist
-					bool is_tracking_dbl = LLWorldMap::getInstance()->mIsTrackingDoubleClick == TRUE;
-					gFloaterWorldMap->trackLocation(LLWorldMap::getInstance()->mUnknownLocation);
-					if (is_tracking_dbl)
-					{
-						LLVector3d pos_global = LLTracker::getTrackedPositionGlobal();
-						gAgent.teleportViaLocation( pos_global );
-					}
-				}
+				siminfo->insertTeleHub(new_item);
 			}
+			break;
 		}
-				
-		if(LLWorldMap::getInstance()->mSLURLCallback != NULL)
+		case MAP_ITEM_PG_EVENT: // events
+		case MAP_ITEM_MATURE_EVENT:
+		case MAP_ITEM_ADULT_EVENT:
 		{
-			// Server returns definitive capitalization, SLURL might not have that.
-			if ((LLStringUtil::compareInsensitive(LLWorldMap::getInstance()->mSLURLRegionName, name)==0)
-				|| (LLWorldMap::getInstance()->mSLURLRegionHandle == handle))
+			std::string timeStr = "["+ LLTrans::getString ("TimeHour")+"]:["
+					                   +LLTrans::getString ("TimeMin")+"] ["
+									   +LLTrans::getString ("TimeAMPM")+"]";
+			LLSD substitution;
+			substitution["datetime"] = (S32) extra;
+			LLStringUtil::format (timeStr, substitution);				
+			new_item.setTooltip(timeStr);
+
+			// HACK: store Z in extra2
+			new_item.setElevation((F64)extra2);
+			if (type == MAP_ITEM_PG_EVENT)
 			{
-				url_callback_t callback = LLWorldMap::getInstance()->mSLURLCallback;
-
-				LLWorldMap::getInstance()->mSLURLCallback = NULL;
-				LLWorldMap::getInstance()->mSLURLRegionName.clear();
-				LLWorldMap::getInstance()->mSLURLRegionHandle = 0;
-
-				callback(handle, LLWorldMap::getInstance()->mSLURL, image_id, LLWorldMap::getInstance()->mSLURLTeleport);
+				siminfo->insertPGEvent(new_item);
 			}
-		}
-	}
-
-	if(adjust) gFloaterWorldMap->adjustZoomSliderBounds();
-	gFloaterWorldMap->updateSims(found_null_sim);
-}
-
-// public static
-void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**)
-{
-	U32 type;
-	msg->getU32Fast(_PREHASH_RequestData, _PREHASH_ItemType, type);
-
-	S32 num_blocks = msg->getNumberOfBlocks("Data");
-
-	for (S32 block=0; block<num_blocks; ++block)
-	{
-		U32 X, Y;
-		std::string name;
-		S32 extra, extra2;
-		LLUUID uuid;
-		msg->getU32Fast(_PREHASH_Data, _PREHASH_X, X, block);
-		msg->getU32Fast(_PREHASH_Data, _PREHASH_Y, Y, block);
-		msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
-		msg->getUUIDFast(_PREHASH_Data, _PREHASH_ID, uuid, block);
-		msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra, extra, block);
-		msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra2, extra2, block);
-
-		F32 world_x = (F32)X;
-		X /= REGION_WIDTH_UNITS;
-		F32 world_y = (F32)Y;
-		Y /= REGION_WIDTH_UNITS;
-		
-		LLItemInfo new_item(world_x, world_y, name, uuid, extra, extra2);
-		LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(new_item.mRegionHandle);
-
-		switch (type)
-		{
-			case MAP_ITEM_TELEHUB: // telehubs
+			else if (type == MAP_ITEM_MATURE_EVENT)
 			{
-				// Telehub color, store in extra as 4 U8's
-				U8 *color = (U8 *)&new_item.mExtra;
-
-				F32 red = fmod((F32)X * 0.11f, 1.f) * 0.8f;
-				F32 green = fmod((F32)Y * 0.11f, 1.f) * 0.8f;
-				F32 blue = fmod(1.5f * (F32)(X + Y) * 0.11f, 1.f) * 0.8f;
-				F32 add_amt = (X % 2) ? 0.15f : -0.15f;
-				add_amt += (Y % 2) ? -0.15f : 0.15f;
-				color[0] = U8((red + add_amt) * 255);
-				color[1] = U8((green + add_amt) * 255);
-				color[2] = U8((blue + add_amt) * 255);
-				color[3] = 255;
-				
-				// extra2 specifies whether this is an infohub or a telehub.
-				if (extra2)
-				{
-					LLWorldMap::getInstance()->mInfohubs.push_back(new_item);
-				}
-				else
-				{
-					LLWorldMap::getInstance()->mTelehubs.push_back(new_item);
-				}
-
-				break;
+				siminfo->insertMatureEvent(new_item);
 			}
-			case MAP_ITEM_PG_EVENT: // events
-			case MAP_ITEM_MATURE_EVENT:
-			case MAP_ITEM_ADULT_EVENT:
+			else if (type == MAP_ITEM_ADULT_EVENT)
 			{
-				std::string timeStr = "["+ LLTrans::getString ("TimeHour")+"]:["
-					                   +LLTrans::getString ("TimeMin")+"] ["
-									   +LLTrans::getString ("TimeAMPM")+"]";
-				LLSD substitution;
-				substitution["datetime"] = (S32) extra;
-				LLStringUtil::format (timeStr, substitution);
-				new_item.mToolTip = timeStr;
-
-				// HACK: store Z in extra2
-				new_item.mPosGlobal.mdV[VZ] = (F64)extra2;
-				if (type == MAP_ITEM_PG_EVENT)
-				{
-					LLWorldMap::getInstance()->mPGEvents.push_back(new_item);
-				}
-				else if (type == MAP_ITEM_MATURE_EVENT)
-				{
-					LLWorldMap::getInstance()->mMatureEvents.push_back(new_item);
-				}
-				else if (type == MAP_ITEM_ADULT_EVENT)
-				{
-					LLWorldMap::getInstance()->mAdultEvents.push_back(new_item);
-				}
-
-				break;
+				siminfo->insertAdultEvent(new_item);
 			}
-			case MAP_ITEM_LAND_FOR_SALE: // land for sale
-			case MAP_ITEM_LAND_FOR_SALE_ADULT: // adult land for sale 
+			break;
+		}
+		case MAP_ITEM_LAND_FOR_SALE:		// land for sale
+		case MAP_ITEM_LAND_FOR_SALE_ADULT:	// adult land for sale 
+		{
+			std::string tooltip = llformat("%d sq. m. L$%d", extra, extra2);
+			new_item.setTooltip(tooltip);
+			if (type == MAP_ITEM_LAND_FOR_SALE)
 			{
-				new_item.mToolTip = llformat("%d sq. m. L$%d", new_item.mExtra, new_item.mExtra2);
-				if (type == MAP_ITEM_LAND_FOR_SALE)
-				{
-					LLWorldMap::getInstance()->mLandForSale.push_back(new_item);
-				}
-				else if (type == MAP_ITEM_LAND_FOR_SALE_ADULT)
-				{
-					LLWorldMap::getInstance()->mLandForSaleAdult.push_back(new_item);
-				}
-				break;
+				siminfo->insertLandForSale(new_item);
 			}
-			case MAP_ITEM_CLASSIFIED: // classifieds
+			else if (type == MAP_ITEM_LAND_FOR_SALE_ADULT)
 			{
-				//DEPRECATED: no longer used
-				break;
+				siminfo->insertLandForSaleAdult(new_item);
 			}
-			case MAP_ITEM_AGENT_LOCATIONS: // agent locations
+			break;
+		}
+		case MAP_ITEM_CLASSIFIED: // classifieds
+		{
+			//DEPRECATED: no longer used
+			break;
+		}
+		case MAP_ITEM_AGENT_LOCATIONS: // agent locations
+		{
+// 				LL_INFOS("World Map") << "New Location " << new_item.mName << LL_ENDL;
+			if (extra > 0)
 			{
-				if (!siminfo)
-				{
-					llinfos << "siminfo missing for " << new_item.mPosGlobal.mdV[0] << ", " << new_item.mPosGlobal.mdV[1] << llendl;
-					break;
-				}
-// 				llinfos << "New Location " << new_item.mName << llendl;
-
-				item_info_list_t& agentcounts = LLWorldMap::getInstance()->mAgentLocationsMap[new_item.mRegionHandle];
-
-				// Find the last item in the list with a different name and erase them
-				item_info_list_t::iterator lastiter;
-				for (lastiter = agentcounts.begin(); lastiter!=agentcounts.end(); ++lastiter)
-				{
-					const LLItemInfo& info = *lastiter;
-					if (info.mName == new_item.mName)
-					{
-						break;
-					}
-				}
-				if (lastiter != agentcounts.begin())
-				{
-					agentcounts.erase(agentcounts.begin(), lastiter);
-				}
-				// Now append the new location
-				if (new_item.mExtra > 0)
-				{
-					agentcounts.push_back(new_item);
-				}
-				break;
+				new_item.setCount(extra);
+				siminfo->insertAgentLocation(new_item);
 			}
-			default:
-				break;
-		};
-	}
-}
-
-void LLWorldMap::dump()
-{
-	for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
-	{
-		U64 handle = (*it).first;
-		LLSimInfo* info = (*it).second;
-
-		U32 x_pos, y_pos;
-		from_region_handle(handle, &x_pos, &y_pos);
-
-		llinfos << x_pos << "," << y_pos
-			<< " " << info->mName 
-			<< " " << (S32)info->mAccess
-			<< " " << std::hex << info->mRegionFlags << std::dec
-			<< " " << info->mWaterHeight
-			//<< " " << info->mTelehubName
-			//<< " " << info->mTelehubPosition
-			<< llendl;
-
-		if (info->mCurrentImage)
-		{
-			llinfos << "image discard " << (S32)info->mCurrentImage->getDiscardLevel()
-					<< " fullwidth " << info->mCurrentImage->getFullWidth()
-					<< " fullheight " << info->mCurrentImage->getFullHeight()
-					<< " maxvirt " << info->mCurrentImage->getMaxVirtualSize()
-					//<< " maxdisc " << (S32)info->mCurrentImage->getMaxDiscardLevel()
-					<< llendl;
+			break;
 		}
+		default:
+			break;
 	}
+	return true;
 }
 
-
-BOOL LLWorldMap::extendAABB(U32 min_x, U32 min_y, U32 max_x, U32 max_y)
+bool LLWorldMap::isTrackingInRectangle(F64 x0, F64 y0, F64 x1, F64 y1)
 {
-	BOOL rv = FALSE;
-	if (min_x < mMinX)
-	{
-		rv = TRUE;
-		mMinX = min_x;
-	}
-	if (min_y < mMinY)
-	{
-		rv = TRUE;
-		mMinY = min_y;
-	}
-	if (max_x > mMaxX)
-	{
-		rv = TRUE;
-		mMaxX = max_x;
-	}
-	if (max_y > mMaxY)
-	{
-		rv = TRUE;
-		mMaxY = max_y;
-	}
-	lldebugs << "World map aabb: (" << mMinX << ", " << mMinY << "), ("
-			 << mMaxX << ", " << mMaxY << ")" << llendl;
-	return rv;
+	if (!mIsTrackingLocation)
+		return false;
+	return ((mTrackingLocation[0] >= x0) && (mTrackingLocation[0] < x1) && (mTrackingLocation[1] >= y0) && (mTrackingLocation[1] < y1));
 }
 
-
-U32 LLWorldMap::getWorldWidth() const
+// Drop priority of all images being fetched by the map
+void LLWorldMap::dropImagePriorities()
 {
-	return mMaxX - mMinX;
-}
-
-
-U32 LLWorldMap::getWorldHeight() const
-{
-	return mMaxY - mMinY;
-}
-
-BOOL LLWorldMap::coveredByTelehub(LLSimInfo* infop)
-{
-	/*if (!mTelehubCoverageMap)
+	// Drop the download of tiles priority to nil
+	mWorldMipmap.dropBoostLevels();
+	// Same for the "land for sale" tiles per region
+	for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
 	{
-		return FALSE;
+		LLSimInfo* info = it->second;
+		info->dropImagePriority();
 	}
-	U32 x_pos, y_pos;
-	from_region_handle(infop->mHandle, &x_pos, &y_pos);
-	x_pos /= REGION_WIDTH_UNITS;
-	y_pos /= REGION_WIDTH_UNITS;
-
-	S32 index = x_pos - (mMinX / REGION_WIDTH_UNITS - 1) + (mNeighborMapWidth * (y_pos - (mMinY / REGION_WIDTH_UNITS - 1)));
-	return mTelehubCoverageMap[index] != 0;	*/
-	return FALSE;
 }
 
-void LLWorldMap::updateTelehubCoverage()
+// Load all regions in a given rectangle (in region grid coordinates, i.e. world / 256 meters)
+void LLWorldMap::updateRegions(S32 x0, S32 y0, S32 x1, S32 y1)
 {
-	/*S32 neighbor_width = getWorldWidth() / REGION_WIDTH_UNITS + 2;
-	S32 neighbor_height = getWorldHeight() / REGION_WIDTH_UNITS + 2;
-	if (neighbor_width > mNeighborMapWidth || neighbor_height > mNeighborMapHeight)
-	{
-		mNeighborMapWidth = neighbor_width;
-		mNeighborMapHeight = neighbor_height;
-		delete mNeighborMap;
-		delete mTelehubCoverageMap;
-
-		mNeighborMap = new U8[mNeighborMapWidth * mNeighborMapHeight];
-		mTelehubCoverageMap = new U8[mNeighborMapWidth * mNeighborMapHeight];
-	}
-
-	memset(mNeighborMap, 0, mNeighborMapWidth * mNeighborMapHeight * sizeof(U8));
-	memset(mTelehubCoverageMap, 0, mNeighborMapWidth * mNeighborMapHeight * sizeof(U8));
+	// Convert those boundaries to the corresponding (MAP_BLOCK_SIZE x MAP_BLOCK_SIZE) block coordinates
+	x0 = x0 / MAP_BLOCK_SIZE;
+	x1 = x1 / MAP_BLOCK_SIZE;
+	y0 = y0 / MAP_BLOCK_SIZE;
+	y1 = y1 / MAP_BLOCK_SIZE;
 
-	// leave 1 sim border
-	S32 min_x = (mMinX / REGION_WIDTH_UNITS) - 1;
-	S32 min_y = (mMinY / REGION_WIDTH_UNITS) - 1;
-
- 	std::map<U64, LLSimInfo*>::const_iterator it;
-	for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
+	// Load the region info those blocks
+	for (S32 block_x = llmax(x0, 0); block_x <= llmin(x1, MAP_BLOCK_RES-1); ++block_x)
 	{
-		U64 handle = (*it).first;
-		//LLSimInfo* info = (*it).second;
-
-		U32 x_pos, y_pos;
-		from_region_handle(handle, &x_pos, &y_pos);
-		x_pos /= REGION_WIDTH_UNITS;
-		y_pos /= REGION_WIDTH_UNITS;
-		x_pos -= min_x;
-		y_pos -= min_y;
-
-		S32 index = x_pos + (mNeighborMapWidth * y_pos);
-		mNeighborMap[index - 1]++;
-		mNeighborMap[index + 1]++;
-		mNeighborMap[index - mNeighborMapWidth]++;
-		mNeighborMap[index + mNeighborMapWidth]++;
-	}
-
-	for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
-	{
-		U64 handle = (*it).first;
-		LLSimInfo* info = (*it).second;
-
-		U32 x_pos, y_pos;
-		from_region_handle(handle, &x_pos, &y_pos);
-		x_pos /= REGION_WIDTH_UNITS;
-		y_pos /= REGION_WIDTH_UNITS;
-		x_pos -= min_x;
-		y_pos -= min_y;
-
-		S32 index = x_pos + (mNeighborMapWidth * y_pos);
-
-		if (!info->mTelehubName.empty() && mNeighborMap[index])
+		for (S32 block_y = llmax(y0, 0); block_y <= llmin(y1, MAP_BLOCK_RES-1); ++block_y)
 		{
-			S32 x_start = llmax(0, S32(x_pos - 5));
-			S32 x_span = llmin(mNeighborMapWidth - 1, (S32)(x_pos + 5)) - x_start + 1;
-			S32 y_start = llmax(0, (S32)y_pos - 5);
-			S32 y_end = llmin(mNeighborMapHeight - 1, (S32)(y_pos + 5));
-			for (S32 y_index = y_start; y_index <= y_end; y_index++)
+			S32 offset = block_x | (block_y * MAP_BLOCK_RES);
+			if (!mMapBlockLoaded[offset])
 			{
-				memset(&mTelehubCoverageMap[x_start + y_index * mNeighborMapWidth], 0xff, sizeof(U8) * x_span);
+ 				//LL_INFOS("World Map") << "Loading Block (" << block_x << "," << block_y << ")" << LL_ENDL;
+				LLWorldMapMessage::getInstance()->sendMapBlockRequest(block_x * MAP_BLOCK_SIZE, block_y * MAP_BLOCK_SIZE, (block_x * MAP_BLOCK_SIZE) + MAP_BLOCK_SIZE - 1, (block_y * MAP_BLOCK_SIZE) + MAP_BLOCK_SIZE - 1);
+				mMapBlockLoaded[offset] = true;
 			}
 		}
 	}
+}
 
-	for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
+void LLWorldMap::dump()
+{
+	LL_INFOS("World Map") << "LLWorldMap::dump()" << LL_ENDL;
+	for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
 	{
-		U64 handle = (*it).first;
-		//LLSimInfo* info = (*it).second;
-
-		U32 x_pos, y_pos;
-		from_region_handle(handle, &x_pos, &y_pos);
-		x_pos /= REGION_WIDTH_UNITS;
-		y_pos /= REGION_WIDTH_UNITS;
-
-		S32 index = x_pos - min_x + (mNeighborMapWidth * (y_pos - min_y));
-		mTelehubCoverageMap[index] *= mNeighborMap[index];
-	}*/
+		LLSimInfo* info = it->second;
+		if (info)
+		{
+			info->dump();
+		}
+	}
 }
+
diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h
index 366de8f0719..7e37727b866 100644
--- a/indra/newview/llworldmap.h
+++ b/indra/newview/llworldmap.h
@@ -33,203 +33,243 @@
 #ifndef LL_LLWORLDMAP_H
 #define LL_LLWORLDMAP_H
 
-#include <map>
-#include <string>
-#include <vector>
+#include "llworldmipmap.h"
 #include <boost/function.hpp>
 
-#include "v3math.h"
 #include "v3dmath.h"
-#include "llframetimer.h"
-#include "llmapimagetype.h"
 #include "lluuid.h"
 #include "llpointer.h"
 #include "llsingleton.h"
+#include "llviewerregion.h"
 #include "llviewertexture.h"
-#include "lleventinfo.h"
-#include "v3color.h"
-
-class LLMessageSystem;
-
 
+// Description of objects like hubs, events, land for sale, people and more (TBD).
+// Note: we don't store a "type" in there so we need to store instances of this class in 
+// well known objects (i.e. list of objects which type is "well known").
 class LLItemInfo
 {
 public:
-	LLItemInfo(F32 global_x, F32 global_y, const std::string& name, LLUUID id, S32 extra = 0, S32 extra2 = 0);
-
-	std::string mName;
-	std::string mToolTip;
-	LLVector3d	mPosGlobal;
-	LLUUID		mID;
-	BOOL		mSelected;
-	S32			mExtra;
-	S32			mExtra2;
-	U64			mRegionHandle;
-};
+	LLItemInfo(F32 global_x, F32 global_y, const std::string& name, LLUUID id);
+
+	// Setters
+	void setTooltip(std::string& tooltip) { mToolTip = tooltip; }
+	void setElevation(F64 z) { mPosGlobal.mdV[VZ] = z; }
+	void setCount(S32 count) { mCount = count; }
+//	void setSelected(bool selected) { mSelected = selected; }
+//	void setColor(LLColor4 color) { mColor = color; }
+
+	// Accessors
+	const LLVector3d& getGlobalPosition() const { return mPosGlobal; } 
+	const std::string& getName() const { return mName; }
+	const std::string& getToolTip() const { return mToolTip; }
+	const LLUUID& getUUID() const { return mID; }
+	S32 getCount() const { return mCount; }
+
+	U64 getRegionHandle() const { return to_region_handle(mPosGlobal); }		// Build the handle on the fly
 
-// Map layers, see indra_constants.h
-// 0 - Prim
-// 1 - Terrain Only
-// 2 - Overlay: Land For Sale
+	bool isName(const std::string& name) const { return (mName == name); }		// True if name same as item's name
+//	bool isSelected() const { return mSelected; }
 
+private:
+	std::string mName;			// Name of the individual item
+	std::string mToolTip;		// Tooltip : typically, something to be displayed to the user when selecting this item
+	LLVector3d	mPosGlobal;		// Global world position
+	LLUUID		mID;			// UUID of the item
+	S32			mCount;			// Number of elements in item (e.g. people count)
+	// Currently not used but might prove useful one day so we comment out 
+//	bool		mSelected;		// Selected or not: updated by the viewer UI, not the simulator or asset DB
+//	LLColor4	mColor;			// Color of the item
+};
+
+// Info per region
+// Such records are stored in a global map hold by the LLWorldMap and indexed by region handles. 
+// To avoid creating too many of them, they are requested in "blocks" corresponding to areas covered by the screen. 
+// Unfortunately, when the screen covers the whole world (zoomed out), that can translate in requesting info for 
+// every sim on the grid... Not good...
+// To avoid this, the code implements a cut-off threshold for overlay graphics and, therefore, all LLSimInfo. 
+// In other words, when zooming out too much, we simply stop requesting LLSimInfo and
+// LLItemInfo and just display the map tiles. 
+// As they are stored in different structures (LLSimInfo and LLWorldMipmap), this strategy is now workable.
 class LLSimInfo
 {
 public:
-	LLSimInfo();
+	LLSimInfo(U64 handle);
 
-	LLVector3d getGlobalPos(LLVector3 local_pos) const;
+	// Convert local region coordinates into world coordinates
+	LLVector3d getGlobalPos(const LLVector3& local_pos) const;
+	// Get the world coordinates of the SW corner of that region
+	LLVector3d getGlobalOrigin() const;
 	LLVector3 getLocalPos(LLVector3d global_pos) const;
 
-public:
-	U64 mHandle;
-	std::string mName;
-
-	F64 mAgentsUpdateTime;
-	BOOL mShowAgentLocations;	// are agents visible?
+	void clearImage();					// Clears the reference to the Land for sale image for that region
+	void dropImagePriority();			// Drops the boost level of the Land for sale image for that region
+	void updateAgentCount(F64 time);	// Send an item request for agent count on that region if time's up
 
-	U8 mAccess;
-	U32 mRegionFlags;
-	F32 mWaterHeight;
+	// Setters
+	void setName(std::string& name) { mName = name; }
+	void setAccess (U32 accesscode) { mAccess = accesscode; }
+	void setRegionFlags (U32 region_flags) { mRegionFlags = region_flags; }
+	void setLandForSaleImage (LLUUID image_id);
+//	void setWaterHeight (F32 water_height) { mWaterHeight = water_height; }
 
-	F32 mAlpha;
+	// Accessors
+	std::string getName() const { return mName; }
+	const std::string getFlagsString() const { return LLViewerRegion::regionFlagsToString(mRegionFlags); }
+	const std::string getAccessString() const { return LLViewerRegion::accessToString((U8)mAccess); }
 
-	// Image ID for the current overlay mode.
-	LLUUID mMapImageID[MAP_SIM_IMAGE_TYPES];
+	const S32 getAgentCount() const;				// Compute the total agents count
+	LLPointer<LLViewerFetchedTexture> getLandForSaleImage();	// Get the overlay image, fetch it if necessary
 
-	// Hold a reference to the currently displayed image.
-	LLPointer<LLViewerFetchedTexture> mCurrentImage;
-	LLPointer<LLViewerFetchedTexture> mOverlayImage;
-};
+	bool isName(const std::string& name) const;
+	bool isDown() { return (mAccess == SIM_ACCESS_DOWN); }
+	bool isPG() { return (mAccess <= SIM_ACCESS_PG); }
 
-#define MAP_BLOCK_RES 256
+	// Debug only
+	void dump() const;	// Print the region info to the standard output
 
-struct LLWorldMapLayer
-{
-	BOOL LayerDefined;
-	LLPointer<LLViewerFetchedTexture> LayerImage;
-	LLUUID LayerImageID;
-	LLRect LayerExtents;
+	// Items lists handling
+	typedef std::vector<LLItemInfo> item_info_list_t;
+	void clearItems();
+
+	void insertTeleHub(const LLItemInfo& item) { mTelehubs.push_back(item); }
+	void insertInfoHub(const LLItemInfo& item) { mInfohubs.push_back(item); }
+	void insertPGEvent(const LLItemInfo& item) { mPGEvents.push_back(item); }
+	void insertMatureEvent(const LLItemInfo& item) { mMatureEvents.push_back(item); }
+	void insertAdultEvent(const LLItemInfo& item) { mAdultEvents.push_back(item); }
+	void insertLandForSale(const LLItemInfo& item) { mLandForSale.push_back(item); }
+	void insertLandForSaleAdult(const LLItemInfo& item) { mLandForSaleAdult.push_back(item); }
+	void insertAgentLocation(const LLItemInfo& item);
+
+	const LLSimInfo::item_info_list_t& getTeleHub() const { return mTelehubs; }
+	const LLSimInfo::item_info_list_t& getInfoHub() const { return mInfohubs; }
+	const LLSimInfo::item_info_list_t& getPGEvent() const { return mPGEvents; }
+	const LLSimInfo::item_info_list_t& getMatureEvent() const { return mMatureEvents; }
+	const LLSimInfo::item_info_list_t& getAdultEvent() const { return mAdultEvents; }
+	const LLSimInfo::item_info_list_t& getLandForSale() const { return mLandForSale; }
+	const LLSimInfo::item_info_list_t& getLandForSaleAdult() const { return mLandForSaleAdult; }
+	const LLSimInfo::item_info_list_t& getAgentLocation() const { return mAgentLocations; }
 
-	LLWorldMapLayer() : LayerDefined(FALSE) { }
+private:
+	U64 mHandle;				// This is a hash of the X and Y world coordinates of the SW corner of the sim
+	std::string mName;			// Region name
+
+	F64 mAgentsUpdateTime;		// Time stamp giving the last time the agents information was requested for that region
+	bool mFirstAgentRequest;	// Init agent request flag
+
+	U32  mAccess;				// Down/up and maturity rating of the region
+	U32 mRegionFlags;			// Tell us if the siminfo has been received (if non 0) and what kind of region it is (Sandbox, allow damage)
+	// Currently not used but might prove useful one day so we comment out 
+//	F32 mWaterHeight;			// Water height on the region (not actively used)
+
+	// Handling the "land for sale / land for auction" overlay image
+	LLUUID mMapImageID;						// Image ID of the overlay image
+	LLPointer<LLViewerFetchedTexture> mOverlayImage;	// Reference to the overlay image
+
+	// Items for this region
+	// Those are data received through item requests (as opposed to block requests for the rest of the data)
+	item_info_list_t mTelehubs;			// List of tele hubs in the region
+	item_info_list_t mInfohubs;			// List of info hubs in the region
+	item_info_list_t mPGEvents;			// List of PG events in the region
+	item_info_list_t mMatureEvents;		// List of Mature events in the region
+	item_info_list_t mAdultEvents;		// List of Adult events in the region (AO)
+	item_info_list_t mLandForSale;		// List of Land for sales in the region
+	item_info_list_t mLandForSaleAdult;	// List of Adult Land for sales in the region (AO)
+	item_info_list_t mAgentLocations;	// List of agents in the region
 };
 
+// We request region data on the world by "blocks" of (MAP_BLOCK_SIZE x MAP_BLOCK_SIZE) regions
+// This is to reduce the number of requests to the asset DB and get things in big "blocks"
+const S32 MAP_MAX_SIZE = 2048;
+const S32 MAP_BLOCK_SIZE = 4;
+const S32 MAP_BLOCK_RES = (MAP_MAX_SIZE / MAP_BLOCK_SIZE);
 
 class LLWorldMap : public LLSingleton<LLWorldMap>
 {
 public:
-	typedef boost::function<void(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport)>
-		url_callback_t;
-
 	LLWorldMap();
 	~LLWorldMap();
 
-	// clears the list
+	// Clear all: list of region info, tiles, blocks and items
 	void reset();
 
-	// clear the visible items
-	void eraseItems();
+	void clearImageRefs();					// Clears the image references
+	void dropImagePriorities();				// Drops the priority of the images being fetched
+	void reloadItems(bool force = false);	// Reload the items (people, hub, etc...)
 
-	// Removes references to cached images
-	void clearImageRefs();
+	// Region Map access
+	typedef std::map<U64, LLSimInfo*> sim_info_map_t;
+	const LLWorldMap::sim_info_map_t& getRegionMap() const { return mSimInfoMap; }
+	void updateRegions(S32 x0, S32 y0, S32 x1, S32 y1);		// Requests region info for a rectangle of regions (in grid coordinates)
 
-	// Clears the flags indicating that we've received sim infos
-	// Causes a re-request of the sim info without erasing extisting info
-	void clearSimFlags();
+	// Insert a region and items in the map global instance
+	// Note: x_world and y_world in world coordinates (meters)
+	static bool insertRegion(U32 x_world, U32 y_world, std::string& name, LLUUID& uuid, U32 accesscode, U32 region_flags);
+	static bool insertItem(U32 x_world, U32 y_world, std::string& name, LLUUID& uuid, U32 type, S32 extra, S32 extra2);
 
-	// Returns simulator information, or NULL if out of range
+	// Get info on sims (region) : note that those methods only search the range of loaded sims (the one that are being browsed)
+	// *not* the entire world. So a NULL return does not mean a down or unexisting region, just an out of range region.
 	LLSimInfo* simInfoFromHandle(const U64 handle);
-
-	// Returns simulator information, or NULL if out of range
 	LLSimInfo* simInfoFromPosGlobal(const LLVector3d& pos_global);
-
-	// Returns simulator information for named sim, or NULL if non-existent
 	LLSimInfo* simInfoFromName(const std::string& sim_name);
 
-	// Gets simulator name for a global position, returns true if it was found
+	// Gets simulator name from a global position, returns true if found
 	bool simNameFromPosGlobal(const LLVector3d& pos_global, std::string& outSimName );
 
-	// Sets the current layer
-	void setCurrentLayer(S32 layer, bool request_layer = false);
-
-	void sendMapLayerRequest();
-	void sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent = false);
-	void sendNamedRegionRequest(std::string region_name);
-	void sendNamedRegionRequest(std::string region_name, 
-		url_callback_t callback,
-		const std::string& callback_url,
-		bool teleport);
-	void sendHandleRegionRequest(U64 region_handle, 
-		url_callback_t callback,
-		const std::string& callback_url,
-		bool teleport);
-	void sendItemRequest(U32 type, U64 handle = 0);
-
-	static void processMapLayerReply(LLMessageSystem*, void**);
-	static void processMapBlockReply(LLMessageSystem*, void**);
-	static void processMapItemReply(LLMessageSystem*, void**);
-
-	void dump();
-
-	// Extend the bounding box of the list of simulators. Returns true
-	// if the extents changed.
-	BOOL extendAABB(U32 x_min, U32 y_min, U32 x_max, U32 y_max);
-
-	// build coverage maps for telehub region visualization
-	void updateTelehubCoverage();
-	BOOL coveredByTelehub(LLSimInfo* infop);
-
-	// Bounds of the world, in meters
-	U32 getWorldWidth() const;
-	U32 getWorldHeight() const;
-public:
-	// Map from region-handle to simulator info
-	typedef std::map<U64, LLSimInfo*> sim_info_map_t;
-	sim_info_map_t mSimInfoMap;
+	// Debug only
+	void dump();	// Print the world info to the standard output
 
-	BOOL			mIsTrackingUnknownLocation, mInvalidLocation, mIsTrackingDoubleClick, mIsTrackingCommit;
-	LLVector3d		mUnknownLocation;
+	// Track handling
+	void cancelTracking() { mIsTrackingLocation = false; mIsTrackingFound = false; mIsInvalidLocation = false; mIsTrackingDoubleClick = false; mIsTrackingCommit = false; }
 
-	bool mRequestLandForSale;
+	void setTracking(const LLVector3d& loc) { mIsTrackingLocation = true; mTrackingLocation = loc; mIsTrackingFound = false; mIsInvalidLocation = false; mIsTrackingDoubleClick = false; mIsTrackingCommit = false;}
+	void setTrackingInvalid() { mIsTrackingFound = true; mIsInvalidLocation = true;  }
+	void setTrackingValid()   { mIsTrackingFound = true; mIsInvalidLocation = false; }
+	void setTrackingDoubleClick() { mIsTrackingDoubleClick = true; }
+	void setTrackingCommit() { mIsTrackingCommit = true; }
 
-	typedef std::vector<LLItemInfo> item_info_list_t;
-	item_info_list_t mTelehubs;
-	item_info_list_t mInfohubs;
-	item_info_list_t mPGEvents;
-	item_info_list_t mMatureEvents;
-	item_info_list_t mAdultEvents;
-	item_info_list_t mLandForSale;
-	item_info_list_t mLandForSaleAdult;
-
-	std::map<U64,S32> mNumAgents;
-
-	typedef std::map<U64, item_info_list_t> agent_list_map_t;
-	agent_list_map_t mAgentLocationsMap;
-	
-	std::vector<LLWorldMapLayer>	mMapLayers[MAP_SIM_IMAGE_TYPES];
-	BOOL							mMapLoaded[MAP_SIM_IMAGE_TYPES];
-	BOOL *							mMapBlockLoaded[MAP_SIM_IMAGE_TYPES];
-	S32								mCurrentMap;
-
-	// AABB of the list of simulators
-	U32		mMinX;
-	U32		mMaxX;
-	U32		mMinY;
-	U32		mMaxY;
-
-	U8*		mNeighborMap;
-	U8*		mTelehubCoverageMap;
-	S32		mNeighborMapWidth;
-	S32		mNeighborMapHeight;
+	bool isTracking() { return mIsTrackingLocation; }
+	bool isTrackingValidLocation()   { return mIsTrackingFound && !mIsInvalidLocation; }
+	bool isTrackingInvalidLocation() { return mIsTrackingFound &&  mIsInvalidLocation; }
+	bool isTrackingDoubleClick() { return mIsTrackingDoubleClick; }
+	bool isTrackingCommit() { return mIsTrackingCommit; }
+	bool isTrackingInRectangle(F64 x0, F64 y0, F64 x1, F64 y1);
+
+	LLVector3d getTrackedPositionGlobal() const { return mTrackingLocation; }
+
+	// World Mipmap delegation: currently used when drawing the mipmap
+	void	equalizeBoostLevels();
+	LLPointer<LLViewerFetchedTexture> getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load = true) { return mWorldMipmap.getObjectsTile(grid_x, grid_y, level, load); }
 
 private:
-	LLTimer	mRequestTimer;
-
-	// search for named region for url processing
-	std::string mSLURLRegionName;
-	U64 mSLURLRegionHandle;
-	std::string mSLURL;
-	url_callback_t mSLURLCallback;
-	bool mSLURLTeleport;
+	bool clearItems(bool force = false);	// Clears the item lists
+	void clearSimFlags();					// Clears the block flags indicating that we've already requested region infos
+
+	// Create a region record corresponding to the handle, insert it in the region map and returns a pointer
+	LLSimInfo* createSimInfoFromHandle(const U64 handle);
+
+	// Map from region-handle to region info
+	sim_info_map_t	mSimInfoMap;
+
+	// Holds the tiled mipmap of the world. This is the structure that contains the images used for rendering.
+	LLWorldMipmap	mWorldMipmap;
+
+	// The World is divided in "blocks" of (MAP_BLOCK_SIZE x MAP_BLOCK_SIZE) regions that get requested at once.
+	// This boolean table avoids "blocks" to be requested multiple times. 
+	// Issue: Not sure this scheme is foolproof though as I've seen
+	// cases where a block is never retrieved and, because of this boolean being set, never re-requested
+	bool *			mMapBlockLoaded;		// Telling us if the block of regions has been requested or not
+
+	// Track location data : used while there's nothing tracked yet by LLTracker
+	bool			mIsTrackingLocation;	// True when we're tracking a point
+	bool			mIsTrackingFound;		// True when the tracking position has been found, valid or not
+	bool			mIsInvalidLocation;		// The region is down or the location does not correspond to an existing region
+	bool			mIsTrackingDoubleClick;	// User double clicked to set the location (i.e. teleport when found please...)
+	bool			mIsTrackingCommit;		// User used the search or landmark fields to set the location
+	LLVector3d		mTrackingLocation;		// World global position being tracked
+
+	// General grid items request timing flags (used for events,hubs and land for sale)
+	LLTimer			mRequestTimer;
+	bool			mFirstRequest;
 };
 
 #endif
diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp
new file mode 100644
index 00000000000..6a074d9697f
--- /dev/null
+++ b/indra/newview/llworldmapmessage.cpp
@@ -0,0 +1,261 @@
+/** 
+ * @file llworldmapmessage.cpp
+ * @brief Handling of the messages to the DB made by and for the world map.
+ *
+ * $LicenseInfo:firstyear=2003&license=viewergpl$
+ * 
+ * Copyright (c) 2003-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llworldmapmessage.h"
+
+#include "llworldmap.h"
+#include "llagent.h"
+#include "llfloaterworldmap.h"
+
+const U32 LAYER_FLAG = 2;
+
+//---------------------------------------------------------------------------
+// World Map Message Handling
+//---------------------------------------------------------------------------
+
+LLWorldMapMessage::LLWorldMapMessage() :
+	mSLURLRegionName(),
+	mSLURLRegionHandle(0),
+	mSLURL(),
+	mSLURLCallback(0),
+	mSLURLTeleport(false)
+{
+}
+
+LLWorldMapMessage::~LLWorldMapMessage()
+{
+}
+
+void LLWorldMapMessage::sendItemRequest(U32 type, U64 handle)
+{
+	//LL_INFOS("World Map") << "Send item request : type = " << type << LL_ENDL;
+	LLMessageSystem* msg = gMessageSystem;
+
+	msg->newMessageFast(_PREHASH_MapItemRequest);
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+	msg->addU32Fast(_PREHASH_Flags, LAYER_FLAG);
+	msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
+	msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
+
+	msg->nextBlockFast(_PREHASH_RequestData);
+	msg->addU32Fast(_PREHASH_ItemType, type);
+	msg->addU64Fast(_PREHASH_RegionHandle, handle); // If zero, filled in on sim
+
+	gAgent.sendReliableMessage();
+}
+
+void LLWorldMapMessage::sendNamedRegionRequest(std::string region_name)
+{
+	//LL_INFOS("World Map") << "LLWorldMap::sendNamedRegionRequest()" << LL_ENDL;
+	LLMessageSystem* msg = gMessageSystem;
+
+	// Request for region data
+	msg->newMessageFast(_PREHASH_MapNameRequest);
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+	msg->addU32Fast(_PREHASH_Flags, LAYER_FLAG);
+	msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
+	msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
+	msg->nextBlockFast(_PREHASH_NameData);
+	msg->addStringFast(_PREHASH_Name, region_name);
+	gAgent.sendReliableMessage();
+}
+
+void LLWorldMapMessage::sendNamedRegionRequest(std::string region_name, 
+		url_callback_t callback,
+		const std::string& callback_url,
+		bool teleport)	// immediately teleport when result returned
+{
+	//LL_INFOS("World Map") << "LLWorldMap::sendNamedRegionRequest()" << LL_ENDL;
+	mSLURLRegionName = region_name;
+	mSLURLRegionHandle = 0;
+	mSLURL = callback_url;
+	mSLURLCallback = callback;
+	mSLURLTeleport = teleport;
+
+	sendNamedRegionRequest(region_name);
+}
+
+void LLWorldMapMessage::sendHandleRegionRequest(U64 region_handle, 
+		url_callback_t callback,
+		const std::string& callback_url,
+		bool teleport)	// immediately teleport when result returned
+{
+	//LL_INFOS("World Map") << "LLWorldMap::sendHandleRegionRequest()" << LL_ENDL;
+	mSLURLRegionName.clear();
+	mSLURLRegionHandle = region_handle;
+	mSLURL = callback_url;
+	mSLURLCallback = callback;
+	mSLURLTeleport = teleport;
+
+	U32 global_x;
+	U32 global_y;
+	from_region_handle(region_handle, &global_x, &global_y);
+	U16 grid_x = (U16)(global_x / REGION_WIDTH_UNITS);
+	U16 grid_y = (U16)(global_y / REGION_WIDTH_UNITS);
+	
+	sendMapBlockRequest(grid_x, grid_y, grid_x, grid_y, true);
+}
+
+void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent)
+{
+	//LL_INFOS("World Map") << "LLWorldMap::sendMapBlockRequest()" << ", min = (" << min_x << ", " << min_y << "), max = (" << max_x << ", " << max_y << "), nonexistent = " << return_nonexistent << LL_ENDL;
+	LLMessageSystem* msg = gMessageSystem;
+	msg->newMessageFast(_PREHASH_MapBlockRequest);
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+	U32 flags = LAYER_FLAG;
+	flags |= (return_nonexistent ? 0x10000 : 0);
+	msg->addU32Fast(_PREHASH_Flags, flags);
+	msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
+	msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
+	msg->nextBlockFast(_PREHASH_PositionData);
+	msg->addU16Fast(_PREHASH_MinX, min_x);
+	msg->addU16Fast(_PREHASH_MinY, min_y);
+	msg->addU16Fast(_PREHASH_MaxX, max_x);
+	msg->addU16Fast(_PREHASH_MaxY, max_y);
+	gAgent.sendReliableMessage();
+}
+
+// public static
+void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**)
+{
+	U32 agent_flags;
+	msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags);
+
+	// There's only one flag that we ever use here
+	if (agent_flags != LAYER_FLAG)
+	{
+		llwarns << "Invalid map image type returned! layer = " << agent_flags << llendl;
+		return;
+	}
+
+	S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_Data);
+	//LL_INFOS("World Map") << "LLWorldMap::processMapBlockReply(), num_blocks = " << num_blocks << LL_ENDL;
+
+	bool found_null_sim = false;
+
+	for (S32 block=0; block<num_blocks; ++block)
+	{
+		U16 x_regions;
+		U16 y_regions;
+		std::string name;
+		U8 accesscode;
+		U32 region_flags;
+//		U8 water_height;
+//		U8 agents;
+		LLUUID image_id;
+		msg->getU16Fast(_PREHASH_Data, _PREHASH_X, x_regions, block);
+		msg->getU16Fast(_PREHASH_Data, _PREHASH_Y, y_regions, block);
+		msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
+		msg->getU8Fast(_PREHASH_Data, _PREHASH_Access, accesscode, block);
+		msg->getU32Fast(_PREHASH_Data, _PREHASH_RegionFlags, region_flags, block);
+//		msg->getU8Fast(_PREHASH_Data, _PREHASH_WaterHeight, water_height, block);
+//		msg->getU8Fast(_PREHASH_Data, _PREHASH_Agents, agents, block);
+		msg->getUUIDFast(_PREHASH_Data, _PREHASH_MapImageID, image_id, block);
+
+		U32 x_world = (U32)(x_regions) * REGION_WIDTH_UNITS;
+		U32 y_world = (U32)(y_regions) * REGION_WIDTH_UNITS;
+
+		// Insert that region in the world map, if failure, flag it as a "null_sim"
+		if (!(LLWorldMap::getInstance()->insertRegion(x_world, y_world, name, image_id, (U32)accesscode, region_flags)))
+		{
+			found_null_sim = true;
+		}
+
+		// If we hit a valid tracking location, do what needs to be done app level wise
+		if (LLWorldMap::getInstance()->isTrackingValidLocation())
+		{
+			LLVector3d pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal();
+			if (LLWorldMap::getInstance()->isTrackingDoubleClick())
+			{
+				// Teleport if the user double clicked
+				gAgent.teleportViaLocation(pos_global);
+			}
+			// Update the "real" tracker information
+			gFloaterWorldMap->trackLocation(pos_global);
+		}
+
+		// Handle the SLURL callback if any
+		if(LLWorldMapMessage::getInstance()->mSLURLCallback != 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;
+
+				callback(handle, LLWorldMapMessage::getInstance()->mSLURL, image_id, LLWorldMapMessage::getInstance()->mSLURLTeleport);
+			}
+		}
+	}
+	// Tell the UI to update itself
+	gFloaterWorldMap->updateSims(found_null_sim);
+}
+
+// public static
+void LLWorldMapMessage::processMapItemReply(LLMessageSystem* msg, void**)
+{
+	//LL_INFOS("World Map") << "LLWorldMap::processMapItemReply()" << LL_ENDL;
+	U32 type;
+	msg->getU32Fast(_PREHASH_RequestData, _PREHASH_ItemType, type);
+
+	S32 num_blocks = msg->getNumberOfBlocks("Data");
+
+	for (S32 block=0; block<num_blocks; ++block)
+	{
+		U32 X, Y;
+		std::string name;
+		S32 extra, extra2;
+		LLUUID uuid;
+		msg->getU32Fast(_PREHASH_Data, _PREHASH_X, X, block);
+		msg->getU32Fast(_PREHASH_Data, _PREHASH_Y, Y, block);
+		msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
+		msg->getUUIDFast(_PREHASH_Data, _PREHASH_ID, uuid, block);
+		msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra, extra, block);
+		msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra2, extra2, block);
+
+		LLWorldMap::getInstance()->insertItem(X, Y, name, uuid, type, extra, extra2);
+	}
+}
+
diff --git a/indra/newview/llworldmapmessage.h b/indra/newview/llworldmapmessage.h
new file mode 100644
index 00000000000..2c8fedcb10e
--- /dev/null
+++ b/indra/newview/llworldmapmessage.h
@@ -0,0 +1,83 @@
+/** 
+ * @file llworldmapmessage.h
+ * @brief Handling of the messages to the DB made by and for the world map.
+ *
+ * $LicenseInfo:firstyear=2003&license=viewergpl$
+ * 
+ * Copyright (c) 2003-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLWORLDMAPMESSAGE_H
+#define LL_LLWORLDMAPMESSAGE_H
+
+// Handling of messages (send and process) as well as SLURL callback if necessary
+class LLMessageSystem;
+
+class LLWorldMapMessage : public LLSingleton<LLWorldMapMessage>
+{
+public:
+	typedef boost::function<void(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport)>
+		url_callback_t;
+
+	LLWorldMapMessage();
+	~LLWorldMapMessage();
+
+	// Process incoming answers to map stuff requests
+	static void processMapBlockReply(LLMessageSystem*, void**);
+	static void processMapItemReply(LLMessageSystem*, void**);
+
+	// Request data for all regions in a rectangular area. Coordinates in grids (i.e. meters / 256).
+	void sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent = false);
+
+	// Various methods to request LLSimInfo data to the simulator and asset DB
+	void sendNamedRegionRequest(std::string region_name);
+	void sendNamedRegionRequest(std::string region_name, 
+		url_callback_t callback,
+		const std::string& callback_url,
+		bool teleport);
+	void sendHandleRegionRequest(U64 region_handle, 
+		url_callback_t callback,
+		const std::string& callback_url,
+		bool teleport);
+
+	// Request item data for regions
+	// Note: the handle works *only* when requesting agent count (type = MAP_ITEM_AGENT_LOCATIONS). In that case,
+	// the request will actually be transitting through the spaceserver (all that is done on the sim).
+	// All other values of type do create a global grid request to the asset DB. So no need to try to get, say,
+	// the events for one particular region. For such a request, the handle is ignored.
+	void sendItemRequest(U32 type, U64 handle = 0);
+
+private:
+	// Search for region (by name or handle) for SLURL processing and teleport
+	// None of this relies explicitly on the LLWorldMap instance so better handle it here
+	std::string		mSLURLRegionName;
+	U64				mSLURLRegionHandle;
+	std::string		mSLURL;
+	url_callback_t	mSLURLCallback;
+	bool			mSLURLTeleport;
+};
+
+#endif // LL_LLWORLDMAPMESSAGE_H
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 3aad5c7378b..ede9ddb837b 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -46,7 +46,6 @@
 #include "llagent.h"
 #include "llcallingcard.h"
 #include "llviewercontrol.h"
-#include "llcylinder.h"
 #include "llfloatermap.h"
 #include "llfloaterworldmap.h"
 #include "llfocusmgr.h"
@@ -57,25 +56,29 @@
 #include "llviewercamera.h"
 #include "llviewertexture.h"
 #include "llviewertexturelist.h"
-#include "llviewermenu.h"
-#include "llviewerparceloverlay.h"
 #include "llviewerregion.h"
 #include "llviewerwindow.h"
-#include "llworldmap.h"
-#include "lltexturefetch.h"
-#include "llappviewer.h"				// Only for constants!
 #include "lltrans.h"
 
 #include "llglheaders.h"
 
+// Basically a C++ implementation of the OCEAN_COLOR defined in mapstitcher.py 
+// Please ensure consistency between those 2 files (TODO: would be better to get that color from an asset source...)
+// # Constants
+// OCEAN_COLOR = "#1D475F"
+const F32 OCEAN_RED   = (F32)(0x1D)/255.f;
+const F32 OCEAN_GREEN = (F32)(0x47)/255.f;
+const F32 OCEAN_BLUE  = (F32)(0x5F)/255.f;
+
 const F32 GODLY_TELEPORT_HEIGHT = 200.f;
 const S32 SCROLL_HINT_WIDTH = 65;
 const F32 BIG_DOT_RADIUS = 5.f;
 BOOL LLWorldMapView::sHandledLastClick = FALSE;
 
-LLUIImagePtr LLWorldMapView::sAvatarYouSmallImage = NULL;
 LLUIImagePtr LLWorldMapView::sAvatarSmallImage = NULL;
-LLUIImagePtr LLWorldMapView::sAvatarLargeImage = NULL;
+LLUIImagePtr LLWorldMapView::sAvatarYouImage = NULL;
+LLUIImagePtr LLWorldMapView::sAvatarYouLargeImage = NULL;
+LLUIImagePtr LLWorldMapView::sAvatarLevelImage = NULL;
 LLUIImagePtr LLWorldMapView::sAvatarAboveImage = NULL;
 LLUIImagePtr LLWorldMapView::sAvatarBelowImage = NULL;
 
@@ -93,35 +96,34 @@ LLUIImagePtr LLWorldMapView::sClassifiedsImage = NULL;
 LLUIImagePtr LLWorldMapView::sForSaleImage = NULL;
 LLUIImagePtr LLWorldMapView::sForSaleAdultImage = NULL;
 
-F32 LLWorldMapView::sThresholdA = 48.f;
-F32 LLWorldMapView::sThresholdB = 96.f;
 F32 LLWorldMapView::sPanX = 0.f;
 F32 LLWorldMapView::sPanY = 0.f;
 F32 LLWorldMapView::sTargetPanX = 0.f;
 F32 LLWorldMapView::sTargetPanY = 0.f;
 S32 LLWorldMapView::sTrackingArrowX = 0;
 S32 LLWorldMapView::sTrackingArrowY = 0;
-F32 LLWorldMapView::sPixelsPerMeter = 1.f;
-F32 CONE_SIZE = 0.6f;
+bool LLWorldMapView::sVisibleTilesLoaded = false;
+F32 LLWorldMapView::sMapScale = 128.f;
 
 std::map<std::string,std::string> LLWorldMapView::sStringsMap;
 
-#define SIM_NULL_MAP_SCALE 1 // width in pixels, where we start drawing "null" sims
-#define SIM_MAP_AGENT_SCALE 2 // width in pixels, where we start drawing agents
-#define SIM_MAP_SCALE 1 // width in pixels, where we start drawing sim tiles
-
-// Updates for agent locations.
-#define AGENTS_UPDATE_TIME 60.0 // in seconds
+// Fetch and draw info thresholds
+const F32 DRAW_TEXT_THRESHOLD = 96.f;		// Don't draw text under that resolution value (res = width region in meters)
+const S32 DRAW_SIMINFO_THRESHOLD = 3;		// Max level for which we load or display sim level information (level in LLWorldMipmap sense)
+const S32 DRAW_LANDFORSALE_THRESHOLD = 2;	// Max level for which we load or display land for sale picture data (level in LLWorldMipmap sense)
 
+// When on, draw an outline for each mipmap tile gotten from S3
+#define DEBUG_DRAW_TILE 0
 
 
 void LLWorldMapView::initClass()
 {
-	sAvatarYouSmallImage =	LLUI::getUIImage("map_avatar_you_8.tga");
-	sAvatarSmallImage = 	LLUI::getUIImage("map_avatar_8.tga");
-	sAvatarLargeImage = 	LLUI::getUIImage("map_avatar_16.tga");
-	sAvatarAboveImage = 	LLUI::getUIImage("map_avatar_above_8.tga");
-	sAvatarBelowImage = 	LLUI::getUIImage("map_avatar_below_8.tga");
+	sAvatarSmallImage =		LLUI::getUIImage("map_avatar_8.tga");
+	sAvatarYouImage =		LLUI::getUIImage("map_avatar_16.tga");
+	sAvatarYouLargeImage =	LLUI::getUIImage("map_avatar_you_32.tga");
+	sAvatarLevelImage =		LLUI::getUIImage("map_avatar_32.tga");
+	sAvatarAboveImage =		LLUI::getUIImage("map_avatar_above_32.tga");
+	sAvatarBelowImage =		LLUI::getUIImage("map_avatar_below_32.tga");
 
 	sHomeImage =			LLUI::getUIImage("map_home.tga");
 	sTelehubImage = 		LLUI::getUIImage("map_telehub.tga");
@@ -145,9 +147,10 @@ void LLWorldMapView::initClass()
 // static
 void LLWorldMapView::cleanupClass()
 {
-	sAvatarYouSmallImage = NULL;
 	sAvatarSmallImage = NULL;
-	sAvatarLargeImage = NULL;
+	sAvatarYouImage = NULL;
+	sAvatarYouLargeImage = NULL;
+	sAvatarLevelImage = NULL;
 	sAvatarAboveImage = NULL;
 	sAvatarBelowImage = NULL;
 
@@ -167,7 +170,7 @@ void LLWorldMapView::cleanupClass()
 
 LLWorldMapView::LLWorldMapView()
 :	LLPanel(),
-	mBackgroundColor( LLColor4( 4.f/255.f, 4.f/255.f, 75.f/255.f, 1.f ) ),
+	mBackgroundColor( LLColor4( OCEAN_RED, OCEAN_GREEN, OCEAN_BLUE, 1.f ) ),
 	mItemPicked(FALSE),
 	mPanning( FALSE ),
 	mMouseDownPanX( 0 ),
@@ -176,7 +179,8 @@ LLWorldMapView::LLWorldMapView()
 	mMouseDownY( 0 ),
 	mSelectIDStart(0)
 {
-	sPixelsPerMeter = gMapScale / REGION_WIDTH_METERS;
+	//LL_INFOS("World Map") << "Creating the Map -> LLWorldMapView::LLWorldMapView()" << LL_ENDL;
+
 	clearLastClick();
 }
 
@@ -215,6 +219,7 @@ BOOL LLWorldMapView::postBuild()
 
 LLWorldMapView::~LLWorldMapView()
 {
+	//LL_INFOS("World Map") << "Destroying the map -> LLWorldMapView::~LLWorldMapView()" << LL_ENDL;
 	cleanupTextures();
 }
 
@@ -228,14 +233,14 @@ void LLWorldMapView::cleanupTextures()
 // static
 void LLWorldMapView::setScale( F32 scale )
 {
-	if (scale != gMapScale)
+	if (scale != sMapScale)
 	{
-		F32 old_scale = gMapScale;
+		F32 old_scale = sMapScale;
 
-		gMapScale = scale;
-		if (gMapScale == 0.f)
+		sMapScale = scale;
+		if (sMapScale <= 0.f)
 		{
-			gMapScale = 0.1f;
+			sMapScale = 0.1f;
 		}
 
 		F32 ratio = (scale / old_scale);
@@ -243,8 +248,7 @@ void LLWorldMapView::setScale( F32 scale )
 		sPanY *= ratio;
 		sTargetPanX = sPanX;
 		sTargetPanY = sPanY;
-
-		sPixelsPerMeter = gMapScale / REGION_WIDTH_METERS;
+		sVisibleTilesLoaded = false;
 	}
 }
 
@@ -256,6 +260,7 @@ void LLWorldMapView::translatePan( S32 delta_x, S32 delta_y )
 	sPanY += delta_y;
 	sTargetPanX = sPanX;
 	sTargetPanY = sPanY;
+	sVisibleTilesLoaded = false;
 }
 
 
@@ -269,18 +274,22 @@ void LLWorldMapView::setPan( S32 x, S32 y, BOOL snap )
 		sPanX = sTargetPanX;
 		sPanY = sTargetPanY;
 	}
+	sVisibleTilesLoaded = false;
 }
 
+bool LLWorldMapView::showRegionInfo()
+{
+	return (LLWorldMipmap::scaleToLevel(sMapScale) <= DRAW_SIMINFO_THRESHOLD ? true : false);
+}
 
 ///////////////////////////////////////////////////////////////////////////////////
 // HELPERS
 
 BOOL is_agent_in_region(LLViewerRegion* region, LLSimInfo* info)
 {
-	return ((region && info) && (info->mName == region->getName()));
+	return (region && info && info->isName(region->getName()));
 }
 
-
 ///////////////////////////////////////////////////////////////////////////////////
 
 void LLWorldMapView::draw()
@@ -292,7 +301,7 @@ void LLWorldMapView::draw()
 	F64 current_time = LLTimer::getElapsedSeconds();
 
 	mVisibleRegions.clear();
-	
+
 	// animate pan if necessary
 	sPanX = lerp(sPanX, sTargetPanX, LLCriticalDamp::getInterpolant(0.1f));
 	sPanY = lerp(sPanY, sTargetPanY, LLCriticalDamp::getInterpolant(0.1f));
@@ -303,10 +312,12 @@ void LLWorldMapView::draw()
 	const F32 half_height = F32(height) / 2.0f;
 	LLVector3d camera_global = gAgent.getCameraPositionGlobal();
 
+	S32 level = LLWorldMipmap::scaleToLevel(sMapScale);
+
 	LLLocalClipRect clip(getLocalRect());
 	{
 		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-	
+
 		glMatrixMode(GL_MODELVIEW);
 
 		// Clear the background alpha to 0
@@ -319,307 +330,58 @@ void LLWorldMapView::draw()
 	}
 
 	gGL.flush();
+
 	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 	gGL.setColorMask(true, true);
-	gGL.setSceneBlendType(LLRender::BT_ALPHA);
-
-	F32 layer_alpha = 1.f;
-
-	// Draw one image per layer
-	for (U32 layer_idx=0; layer_idx<LLWorldMap::getInstance()->mMapLayers[LLWorldMap::getInstance()->mCurrentMap].size(); ++layer_idx)
-	{
-		if (!LLWorldMap::getInstance()->mMapLayers[LLWorldMap::getInstance()->mCurrentMap][layer_idx].LayerDefined)
-		{
-			continue;
-		}
-		LLWorldMapLayer *layer = &LLWorldMap::getInstance()->mMapLayers[LLWorldMap::getInstance()->mCurrentMap][layer_idx];
-		LLViewerFetchedTexture *current_image = layer->LayerImage;
-
-		if (current_image->isMissingAsset())
-		{
-			continue; // better to draw nothing than the missing asset image
-		}
-		
-		LLVector3d origin_global((F64)layer->LayerExtents.mLeft * REGION_WIDTH_METERS, (F64)layer->LayerExtents.mBottom * REGION_WIDTH_METERS, 0.f);
-
-		// Find x and y position relative to camera's center.
-		LLVector3d rel_region_pos = origin_global - camera_global;
-		F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * gMapScale;
-		F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * gMapScale;
-
-		F32 pix_width = gMapScale*(layer->LayerExtents.getWidth() + 1);
-		F32 pix_height = gMapScale*(layer->LayerExtents.getHeight() + 1);
-
-		// When the view isn't panned, 0,0 = center of rectangle
-		F32 bottom =	sPanY + half_height + relative_y;
-		F32 left =		sPanX + half_width + relative_x;
-		F32 top =		bottom + pix_height;
-		F32 right =		left + pix_width;
-		F32 pixel_area = pix_width*pix_height;
-		// discard layers that are outside the rectangle
-		// and discard small layers
-		if (top < 0.f ||
-			bottom > height ||
-			right < 0.f ||
-			left > width ||
-			(pixel_area < 4*4))
-		{
-			current_image->setBoostLevel(0);
-			continue;
-		}
-		
-		current_image->setBoostLevel(LLViewerTexture::BOOST_MAP_LAYER);
-		current_image->setKnownDrawSize(llround(pix_width * LLUI::sGLScaleFactor.mV[VX]), llround(pix_height * LLUI::sGLScaleFactor.mV[VY]));
-		
-		if (!current_image->hasGLTexture())
-		{
-			continue; // better to draw nothing than the default image
-		}
-
-// 		LLTextureView::addDebugImage(current_image);
-		
-		// Draw using the texture.  If we don't clamp we get artifact at
-		// the edge.
-		gGL.getTexUnit(0)->bind(current_image);
-
-		// Draw map image into RGB
-		//gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-		gGL.flush();
-		gGL.setColorMask(true, false);
-		gGL.color4f(1.f, 1.f, 1.f, layer_alpha);
-
-		gGL.begin(LLRender::QUADS);
-			gGL.texCoord2f(0.0f, 1.0f);
-			gGL.vertex3f(left, top, -1.0f);
-			gGL.texCoord2f(0.0f, 0.0f);
-			gGL.vertex3f(left, bottom, -1.0f);
-			gGL.texCoord2f(1.0f, 0.0f);
-			gGL.vertex3f(right, bottom, -1.0f);
-			gGL.texCoord2f(1.0f, 1.0f);
-			gGL.vertex3f(right, top, -1.0f);
-		gGL.end();
-
-		// draw an alpha of 1 where the sims are visible
-		gGL.flush();
-		gGL.setColorMask(false, true);
-		gGL.color4f(1.f, 1.f, 1.f, 1.f);
-
-		gGL.begin(LLRender::QUADS);
-			gGL.texCoord2f(0.0f, 1.0f);
-			gGL.vertex2f(left, top);
-			gGL.texCoord2f(0.0f, 0.0f);
-			gGL.vertex2f(left, bottom);
-			gGL.texCoord2f(1.0f, 0.0f);
-			gGL.vertex2f(right, bottom);
-			gGL.texCoord2f(1.0f, 1.0f);
-			gGL.vertex2f(right, top);
-		gGL.end();
-	}
 
+#if 1
+	// Draw the image tiles
+	drawMipmap(width, height);
 	gGL.flush();
+
 	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 	gGL.setColorMask(true, true);
 
-	// there used to be an #if 1 here, but it was uncommented; perhaps marking a block of code?
-	F32 sim_alpha = 1.f;
-
-	// Draw one image per region, centered on the camera position.
-	const S32 MAX_SIMULTANEOUS_TEX = 100;
-	const S32 MAX_REQUEST_PER_TICK = 5;
-	const S32 MIN_REQUEST_PER_TICK = 1;
-	S32 textures_requested_this_tick = 0;
-
-	for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin();
-		 it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
+	// Draw per sim overlayed information (names, mature, offline...)
+	for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::getInstance()->getRegionMap().begin();
+		 it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
 	{
-		U64 handle = (*it).first;
-		LLSimInfo* info = (*it).second;
+		U64 handle = it->first;
+		LLSimInfo* info = it->second;
 
-		LLViewerFetchedTexture* simimage = info->mCurrentImage;
-		LLViewerFetchedTexture* overlayimage = info->mOverlayImage;
-
-		if (gMapScale < SIM_MAP_SCALE)
-		{
-			if (simimage != NULL) simimage->setBoostLevel(0);
-			if (overlayimage != NULL) overlayimage->setBoostLevel(0);
-			continue;
-		}
-		
 		LLVector3d origin_global = from_region_handle(handle);
-		LLVector3d camera_global = gAgent.getCameraPositionGlobal();
 
 		// Find x and y position relative to camera's center.
 		LLVector3d rel_region_pos = origin_global - camera_global;
-		F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * gMapScale;
-		F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * gMapScale;
+		F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * sMapScale;
+		F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * sMapScale;
 
+		// Coordinates of the sim in pixels in the UI panel
 		// When the view isn't panned, 0,0 = center of rectangle
-		F32 bottom =	sPanY + half_height + relative_y;
-		F32 left =		sPanX + half_width + relative_x;
-		F32 top =		bottom + gMapScale ;
-		F32 right =		left + gMapScale ;
-
-		// Switch to world map texture (if available for this region) if either:
-		// 1. Tiles are zoomed out small enough, or
-		// 2. Sim's texture has not been loaded yet
-		F32 map_scale_cutoff = SIM_MAP_SCALE;
-		if ((info->mRegionFlags & REGION_FLAGS_NULL_LAYER) > 0)
-		{
-			map_scale_cutoff = SIM_NULL_MAP_SCALE;
-		}
-
-		info->mShowAgentLocations = (gMapScale >= SIM_MAP_AGENT_SCALE);
-
-		bool sim_visible =
-			(gMapScale >= map_scale_cutoff) &&
-			(simimage != NULL) &&
-			(simimage->hasGLTexture());
-
-		if (sim_visible)
-		{
-			// Fade in
-			if (info->mAlpha < 0.0f)
-				info->mAlpha = 1.f; // don't fade initially
-			else
-				info->mAlpha = lerp(info->mAlpha, 1.f, LLCriticalDamp::getInterpolant(0.15f));
-		}
-		else
-		{
-			// Fade out
-			if (info->mAlpha < 0.0f)
-				info->mAlpha = 0.f; // don't fade initially
-			else
-				info->mAlpha = lerp(info->mAlpha, 0.f, LLCriticalDamp::getInterpolant(0.15f));
-		}
-
-		// discard regions that are outside the rectangle
-		// and discard small regions
-		if (top < 0.f ||
-			bottom > height ||
-			right < 0.f ||
-			left > width )
+		F32 bottom =    sPanY + half_height + relative_y;
+		F32 left =      sPanX + half_width + relative_x;
+		F32 top =       bottom + sMapScale ;
+		F32 right =     left + sMapScale ;
+
+		// Discard if region is outside the screen rectangle (not visible on screen)
+		if ((top < 0.f)   || (bottom > height) ||
+			(right < 0.f) || (left > width)       )
 		{
-			if (simimage != NULL) simimage->setBoostLevel(0);
-			if (overlayimage != NULL) overlayimage->setBoostLevel(0);
+			// Drop the "land for sale" fetching priority since it's outside the view rectangle
+			info->dropImagePriority();
 			continue;
 		}
 
-		if (info->mCurrentImage.isNull())
-		{
-			if ((textures_requested_this_tick < MIN_REQUEST_PER_TICK) ||
-				((LLAppViewer::getTextureFetch()->getNumRequests() < MAX_SIMULTANEOUS_TEX) &&
-				 (textures_requested_this_tick < MAX_REQUEST_PER_TICK)))
-			{
-				textures_requested_this_tick++;
-				info->mCurrentImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
-                info->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP);
-				simimage = info->mCurrentImage;
-				gGL.getTexUnit(0)->bind(simimage);
-			}
-		}
-		if (info->mOverlayImage.isNull() && info->mMapImageID[2].notNull())
-		{
-			if ((textures_requested_this_tick < MIN_REQUEST_PER_TICK) ||
-				((LLAppViewer::getTextureFetch()->getNumRequests() < MAX_SIMULTANEOUS_TEX) &&
-				 (textures_requested_this_tick < MAX_REQUEST_PER_TICK)))
-			{
-				textures_requested_this_tick++;
-				info->mOverlayImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[2], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
-				info->mOverlayImage->setAddressMode(LLTexUnit::TAM_CLAMP);
-				overlayimage = info->mOverlayImage;
-				gGL.getTexUnit(0)->bind(overlayimage);
-			}
-		}
-
+		// This list is used by other methods to know which regions are indeed displayed on screen
 		mVisibleRegions.push_back(handle);
-		// See if the agents need updating
-		if (current_time - info->mAgentsUpdateTime > AGENTS_UPDATE_TIME)
-		{
-			LLWorldMap::getInstance()->sendItemRequest(MAP_ITEM_AGENT_LOCATIONS, info->mHandle);
-			info->mAgentsUpdateTime = current_time;
-		}
-		
-		// Bias the priority escalation for images nearer
-		LLVector3d center_global = origin_global;
-		center_global.mdV[VX] += 128.0;
-		center_global.mdV[VY] += 128.0;
-
-		S32 draw_size = llround(gMapScale);
-		if (simimage != NULL)
-		{
-			simimage->setBoostLevel(LLViewerTexture::BOOST_MAP);
-			simimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY]));
-		}
 
-		if (overlayimage != NULL)
+		// Update the agent count for that region if we're not too zoomed out already
+		if (level <= DRAW_SIMINFO_THRESHOLD)
 		{
-			overlayimage->setBoostLevel(LLViewerTexture::BOOST_MAP);
-			overlayimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY]));
-		}
-			
-// 		LLTextureView::addDebugImage(simimage);
-
-		if (sim_visible && info->mAlpha > 0.001f)
-		{
-			// Draw using the texture.  If we don't clamp we get artifact at
-			// the edge.
-			LLGLSUIDefault gls_ui;
-			if (simimage != NULL)
-				gGL.getTexUnit(0)->bind(simimage);
-
-			gGL.setSceneBlendType(LLRender::BT_ALPHA);
-			F32 alpha = sim_alpha * info->mAlpha;
-			gGL.color4f(1.f, 1.0f, 1.0f, alpha);
-
-			gGL.begin(LLRender::QUADS);
-				gGL.texCoord2f(0.f, 1.f);
-				gGL.vertex3f(left, top, 0.f);
-				gGL.texCoord2f(0.f, 0.f);
-				gGL.vertex3f(left, bottom, 0.f);
-				gGL.texCoord2f(1.f, 0.f);
-				gGL.vertex3f(right, bottom, 0.f);
-				gGL.texCoord2f(1.f, 1.f);
-				gGL.vertex3f(right, top, 0.f);
-			gGL.end();
-
-			if (gSavedSettings.getBOOL("MapShowLandForSale") && overlayimage && overlayimage->hasGLTexture())
-			{
-				gGL.getTexUnit(0)->bind(overlayimage);
-				gGL.color4f(1.f, 1.f, 1.f, alpha);
-				gGL.begin(LLRender::QUADS);
-					gGL.texCoord2f(0.f, 1.f);
-					gGL.vertex3f(left, top, -0.5f);
-					gGL.texCoord2f(0.f, 0.f);
-					gGL.vertex3f(left, bottom, -0.5f);
-					gGL.texCoord2f(1.f, 0.f);
-					gGL.vertex3f(right, bottom, -0.5f);
-					gGL.texCoord2f(1.f, 1.f);
-					gGL.vertex3f(right, top, -0.5f);
-				gGL.end();
-			}
-			
-			if ((info->mRegionFlags & REGION_FLAGS_NULL_LAYER) == 0)
-			{
-				// draw an alpha of 1 where the sims are visible (except NULL sims)
-				gGL.flush();
-				gGL.setSceneBlendType(LLRender::BT_REPLACE);
-				gGL.setColorMask(false, true);
-				gGL.color4f(1.f, 1.f, 1.f, 1.f);
-
-				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-				gGL.begin(LLRender::QUADS);
-					gGL.vertex2f(left, top);
-					gGL.vertex2f(left, bottom);
-					gGL.vertex2f(right, bottom);
-					gGL.vertex2f(right, top);
-				gGL.end();
-
-				gGL.flush();
-				gGL.setColorMask(true, true);
-			}
+			info->updateAgentCount(current_time);
 		}
 
-		if (info->mAccess == SIM_ACCESS_DOWN)
+		if (info->isDown())
 		{
 			// Draw a transparent red square over down sims
 			gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_SOURCE_ALPHA);
@@ -633,18 +395,15 @@ void LLWorldMapView::draw()
 				gGL.vertex2f(right, top);
 			gGL.end();
 		}
-
-		// As part of the AO project, we no longer want to draw access indicators;
-		// it's too complicated to get all the rules straight and will only 
+        // As part of the AO project, we no longer want to draw access indicators;
+		// it's too complicated to get all the rules straight and will only
 		// cause confusion.
 		/**********************
-		 // If this is mature, and you are not, draw a line across it
-		if (info->mAccess != SIM_ACCESS_DOWN
-			&& info->mAccess > SIM_ACCESS_PG
-			&& gAgent.isTeen())
+        else if (!info->isPG() && gAgent.isTeen())
 		{
+			// If this is a mature region, and you are not, draw a line across it
 			gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
-			
+
 			gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 			gGL.color3f(1.f, 0.f, 0.f);
 			gGL.begin(LLRender::LINES);
@@ -655,68 +414,67 @@ void LLWorldMapView::draw()
 			gGL.end();
 		}
 		 **********************/
-
-		// Draw the region name in the lower left corner
-		LLFontGL* font = LLFontGL::getFontSansSerifSmall();
-
-		std::string mesg;
-		if (gMapScale < sThresholdA)
+		else if (gSavedSettings.getBOOL("MapShowLandForSale") && (level <= DRAW_LANDFORSALE_THRESHOLD))
 		{
+			// Draw the overlay image "Land for Sale / Land for Auction"
+			LLViewerFetchedTexture* overlayimage = info->getLandForSaleImage();
+			if (overlayimage)
+			{
+				// Inform the fetch mechanism of the size we need
+				S32 draw_size = llround(sMapScale);
+				overlayimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY]));
+				// Draw something whenever we have enough info
+				if (overlayimage->hasGLTexture())
+				{
+					gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
+					gGL.getTexUnit(0)->bind(overlayimage);
+					gGL.color4f(1.f, 1.f, 1.f, 1.f);
+					gGL.begin(LLRender::QUADS);
+						gGL.texCoord2f(0.f, 1.f);
+						gGL.vertex3f(left, top, -0.5f);
+						gGL.texCoord2f(0.f, 0.f);
+						gGL.vertex3f(left, bottom, -0.5f);
+						gGL.texCoord2f(1.f, 0.f);
+						gGL.vertex3f(right, bottom, -0.5f);
+						gGL.texCoord2f(1.f, 1.f);
+						gGL.vertex3f(right, top, -0.5f);
+					gGL.end();
+				}
+			}
 		}
-		else if (gMapScale < sThresholdB)
+		else
 		{
-			//	mesg = llformat( info->mAgents);
+			// If we're not displaying the "land for sale", drop its fetching priority
+			info->dropImagePriority();
 		}
-		else
+
+		// Draw the region name in the lower left corner
+		if (sMapScale >= DRAW_TEXT_THRESHOLD)
 		{
-			//mesg = llformat("%d / %s (%s)",
-			//			info->mAgents,
-			//			info->mName.c_str(),
-			//			LLViewerRegion::accessToShortString(info->mAccess).c_str() );
-			if (info->mAccess == SIM_ACCESS_DOWN)
+			LLFontGL* font = LLFontGL::getFontSansSerifSmall();
+			std::string mesg;
+			if (info->isDown())
 			{
-				mesg = llformat( "%s (%s)", info->mName.c_str(), sStringsMap["offline"].c_str());
+				mesg = llformat( "%s (%s)", info->getName().c_str(), sStringsMap["offline"].c_str());
 			}
 			else
 			{
-				mesg = info->mName;
+				mesg = info->getName();
 			}
-		}
-
-		if (!mesg.empty())
-		{
-			font->renderUTF8(
-				mesg, 0,
-				llfloor(left + 3), 
-				llfloor(bottom + 2),
-				LLColor4::white,
-				LLFontGL::LEFT,
-				LLFontGL::BASELINE,
-				LLFontGL::NORMAL,
-				LLFontGL::DROP_SHADOW);
-			
-			// If map texture is still loading,
-			// display "Loading" placeholder text.
-			if ((simimage != NULL) &&
-				simimage->getDiscardLevel() != 1 &&
-				simimage->getDiscardLevel() != 0)
+			if (!mesg.empty())
 			{
 				font->renderUTF8(
-					sStringsMap["loading"], 0,
-					llfloor(left + 18), 
-					llfloor(top - 25),
+					mesg, 0,
+					llfloor(left + 3), llfloor(bottom + 2),
 					LLColor4::white,
-					LLFontGL::LEFT,
-					LLFontGL::BASELINE,
-					LLFontGL::NORMAL,
-					LLFontGL::DROP_SHADOW);			
+					LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::DROP_SHADOW);
 			}
 		}
 	}
-	// #endif used to be here
+	#endif
 
 
-	// there used to be an #if 1 here, but it was uncommented; perhaps marking a block of code?
+	#if 1
 	// Draw background rectangle
 	LLGLSUIDefault gls_ui;
 	{
@@ -726,69 +484,49 @@ void LLWorldMapView::draw()
 		gGL.color4fv( mBackgroundColor.mV );
 		gl_rect_2d(0, height, width, 0);
 	}
-	
+
 	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 
-	// Infohubs
-	if (gSavedSettings.getBOOL("MapShowInfohubs"))   //(gMapScale >= sThresholdB)
+	// Draw item infos if we're not zoomed out too much and there's something to draw
+	if ((level <= DRAW_SIMINFO_THRESHOLD) && (gSavedSettings.getBOOL("MapShowInfohubs") || 
+											  gSavedSettings.getBOOL("MapShowTelehubs") ||
+											  gSavedSettings.getBOOL("MapShowLandForSale") || 
+											  gSavedSettings.getBOOL("MapShowEvents") || 
+											  gSavedSettings.getBOOL("ShowMatureEvents") ||
+											  gSavedSettings.getBOOL("ShowAdultEvents")))
 	{
-		drawGenericItems(LLWorldMap::getInstance()->mInfohubs, sInfohubImage);
+		drawItems();
 	}
 
-	// Telehubs
-	if (gSavedSettings.getBOOL("MapShowTelehubs"))   //(gMapScale >= sThresholdB)
-	{
-		drawGenericItems(LLWorldMap::getInstance()->mTelehubs, sTelehubImage);
-	}
-
-	// Home Sweet Home
+	// Draw the Home location (always)
 	LLVector3d home;
 	if (gAgent.getHomePosGlobal(&home))
 	{
 		drawImage(home, sHomeImage);
 	}
 
-	if (gSavedSettings.getBOOL("MapShowLandForSale"))
-	{
-		drawGenericItems(LLWorldMap::getInstance()->mLandForSale, sForSaleImage);
-		// for 1.23, we're showing normal land and adult land in the same UI; you don't
-		// get a choice about which ones you want. If you're currently asking for adult
-		// content and land you'll get the adult land.
-		if (gAgent.canAccessAdult())
-		{
-			drawGenericItems(LLWorldMap::getInstance()->mLandForSaleAdult, sForSaleAdultImage);
-		}
-	}
-	
-	if (gSavedSettings.getBOOL("MapShowEvents") ||
-		gSavedSettings.getBOOL("ShowMatureEvents") ||
-		gSavedSettings.getBOOL("ShowAdultEvents") )
-	{
-		drawEvents();
-	}
-
-	// Now draw your avatar after all that other stuff.
+	// Draw the current agent after all that other stuff.
 	LLVector3d pos_global = gAgent.getPositionGlobal();
-	drawImage(pos_global, sAvatarLargeImage);
+	drawImage(pos_global, sAvatarYouImage);
 
 	LLVector3 pos_map = globalPosToView(pos_global);
 	if (!pointInView(llround(pos_map.mV[VX]), llround(pos_map.mV[VY])))
 	{
-		drawTracking(pos_global, 
-			lerp(LLColor4::yellow, LLColor4::orange, 0.4f), 
-			TRUE, 
-			"You are here", 
-			"", 
-			llround(LLFontGL::getFontSansSerifSmall()->getLineHeight())); // offset vertically by one line, to avoid overlap with target tracking
+		drawTracking(pos_global,
+					 lerp(LLColor4::yellow, LLColor4::orange, 0.4f),
+					 TRUE,
+					 "You are here",
+					 "",
+					 llround(LLFontGL::getFontSansSerifSmall()->getLineHeight())); // offset vertically by one line, to avoid overlap with target tracking
 	}
 
-	// Show your viewing angle
+	// Draw the current agent viewing angle
 	drawFrustum();
 
 	// Draw icons for the avatars in each region.
-	// Drawn after your avatar so you can see nearby people.
-	if (gSavedSettings.getBOOL("MapShowPeople"))
+	// Drawn this after the current agent avatar so one can see nearby people
+	if (gSavedSettings.getBOOL("MapShowPeople") && (level <= DRAW_SIMINFO_THRESHOLD))
 	{
 		drawAgents();
 	}
@@ -798,9 +536,9 @@ void LLWorldMapView::draw()
 	if ( LLTracker::TRACKING_AVATAR == tracking_status )
 	{
 		drawTracking( LLAvatarTracker::instance().getGlobalPos(), map_track_color, TRUE, LLTracker::getLabel(), "" );
-	} 
-	else if ( LLTracker::TRACKING_LANDMARK == tracking_status 
-			 || LLTracker::TRACKING_LOCATION == tracking_status )
+	}
+	else if ( LLTracker::TRACKING_LANDMARK == tracking_status
+			  || LLTracker::TRACKING_LOCATION == tracking_status )
 	{
 		// While fetching landmarks, will have 0,0,0 location for a while,
 		// so don't draw. JC
@@ -810,31 +548,33 @@ void LLWorldMapView::draw()
 			drawTracking( pos_global, map_track_color, TRUE, LLTracker::getLabel(), LLTracker::getToolTip() );
 		}
 	}
-	else if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation)
+	else if (LLWorldMap::getInstance()->isTracking())
 	{
-		if (LLWorldMap::getInstance()->mInvalidLocation)
+		if (LLWorldMap::getInstance()->isTrackingInvalidLocation())
 		{
-			// We know this location to be invalid
+			// We know this location to be invalid, draw a blue circle
 			LLColor4 loading_color(0.0, 0.5, 1.0, 1.0);
-			drawTracking( LLWorldMap::getInstance()->mUnknownLocation, loading_color, TRUE, getString("InvalidLocation"), "");
+			drawTracking( LLWorldMap::getInstance()->getTrackedPositionGlobal(), loading_color, TRUE, getString("InvalidLocation"), "");
 		}
 		else
 		{
+			// We don't know yet what that location is, draw a throbing blue circle
 			double value = fmod(current_time, 2);
 			value = 0.5 + 0.5*cos(value * 3.14159f);
 			LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0);
-			drawTracking( LLWorldMap::getInstance()->mUnknownLocation, loading_color, TRUE, getString("Loading"), "");
+			drawTracking( LLWorldMap::getInstance()->getTrackedPositionGlobal(), loading_color, TRUE, getString("Loading"), "");
 		}
 	}
-	// #endif used to be here
-	
+	#endif
+
 	// turn off the scissor
 	LLGLDisable no_scissor(GL_SCISSOR_TEST);
-	
+
 	updateDirections();
 
 	LLView::draw();
 
+	// Get sim info for all sims in view
 	updateVisibleBlocks();
 } // end draw()
 
@@ -845,36 +585,182 @@ void LLWorldMapView::setVisible(BOOL visible)
 	LLPanel::setVisible(visible);
 	if (!visible)
 	{
-		for (S32 map = 0; map < MAP_SIM_IMAGE_TYPES; map++)
+		// Drop the download of tiles and images priority to nil if we hide the map
+		LLWorldMap::getInstance()->dropImagePriorities();
+	}
+}
+
+void LLWorldMapView::drawMipmap(S32 width, S32 height)
+{
+	// Compute the level of the mipmap to use for the current scale level
+	S32 level = LLWorldMipmap::scaleToLevel(sMapScale);
+	// Set the tile boost level so that unused tiles get to 0
+	LLWorldMap::getInstance()->equalizeBoostLevels();
+
+	// Render whatever we already have loaded if we haven't the current level
+	// complete and use it as a background (scaled up or scaled down)
+	if (!sVisibleTilesLoaded)
+	{
+		// Note: the (load = false) parameter avoids missing tiles to be fetched (i.e. we render what we have, no more)
+		// Check all the lower res levels and render them in reverse order (worse to best)
+		// We need to traverse all the levels as the user can zoom in very fast
+		for (S32 l = LLWorldMipmap::MAP_LEVELS; l > level; l--)
 		{
-			for (U32 layer_idx=0; layer_idx<LLWorldMap::getInstance()->mMapLayers[map].size(); ++layer_idx)
-			{
-				if (LLWorldMap::getInstance()->mMapLayers[map][layer_idx].LayerDefined)
-				{
-					LLWorldMapLayer *layer = &LLWorldMap::getInstance()->mMapLayers[map][layer_idx];
-					layer->LayerImage->setBoostLevel(0);
-				}
-			}
+			drawMipmapLevel(width, height, l, false);
+		}
+		// Skip the current level, as we'll do it anyway here under...
+
+		// Just go one level down in res as it can really get too much stuff 
+		// when zooming out and too small to see anyway...
+		if (level > 1)
+		{
+			drawMipmapLevel(width, height, level - 1, false);
 		}
-		for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin();
-			 it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
+	}
+	else
+	{
+		//LL_INFOS("World Map") << "Render complete, don't draw background..." << LL_ENDL;
+	}
+
+	// Render the current level
+	sVisibleTilesLoaded = drawMipmapLevel(width, height, level);
+
+	return;
+}
+
+// Return true if all the tiles required to render that level have been fetched or are truly missing
+bool LLWorldMapView::drawMipmapLevel(S32 width, S32 height, S32 level, bool load)
+{
+	// Check input level
+	llassert (level > 0);
+	if (level <= 0)
+		return false;
+
+	// Count tiles hit and completed
+	S32 completed_tiles = 0;
+	S32 total_tiles = 0;
+
+	// Size in meters (global) of each tile of that level
+	S32 tile_width = LLWorldMipmap::MAP_TILE_SIZE * (1 << (level - 1));
+	// Dimension of the screen in meter at that scale
+	LLVector3d pos_SW = viewPosToGlobal(0, 0);
+	LLVector3d pos_NE = viewPosToGlobal(width, height);
+	// Add external band of tiles on the outskirt so to hit the partially displayed tiles right and top
+	pos_NE[VX] += tile_width;
+	pos_NE[VY] += tile_width;
+
+	// Iterate through the tiles on screen: we just need to ask for one tile every tile_width meters
+	U32 grid_x, grid_y;
+	for (F64 index_y = pos_SW[VY]; index_y < pos_NE[VY]; index_y += tile_width)
+	{
+		for (F64 index_x = pos_SW[VX]; index_x < pos_NE[VX]; index_x += tile_width)
 		{
-			LLSimInfo* info = (*it).second;
-			if (info->mCurrentImage.notNull())
+			// Compute the world coordinates of the current point
+			LLVector3d pos_global(index_x, index_y, pos_SW[VZ]);
+			// Convert to the mipmap level coordinates for that point (i.e. which tile to we hit)
+			LLWorldMipmap::globalToMipmap(pos_global[VX], pos_global[VY], level, &grid_x, &grid_y);
+			// Get the tile. Note: NULL means that the image does not exist (so it's considered "complete" as far as fetching is concerned)
+			LLPointer<LLViewerFetchedTexture> simimage = LLWorldMap::getInstance()->getObjectsTile(grid_x, grid_y, level, load);
+			if (simimage)
 			{
-				info->mCurrentImage->setBoostLevel(0);
+				// Checks that the image has a valid texture
+				if (simimage->hasGLTexture())
+				{
+					// Increment the number of completly fetched tiles
+					completed_tiles++;
+
+					// Convert those coordinates (SW corner of the mipmap tile) into world (meters) coordinates
+					pos_global[VX] = grid_x * REGION_WIDTH_METERS;
+					pos_global[VY] = grid_y * REGION_WIDTH_METERS;
+					// Now to screen coordinates for SW corner of that tile
+					LLVector3 pos_screen = globalPosToView (pos_global);
+					F32 left   = pos_screen[VX];
+					F32 bottom = pos_screen[VY];
+					// Compute the NE corner coordinates of the tile now
+					pos_global[VX] += tile_width;
+					pos_global[VY] += tile_width;
+					pos_screen = globalPosToView (pos_global);
+					F32 right  = pos_screen[VX];
+					F32 top    = pos_screen[VY];
+
+					// Draw the tile
+					LLGLSUIDefault gls_ui;
+					gGL.getTexUnit(0)->bind(simimage.get());
+					simimage->setAddressMode(LLTexUnit::TAM_CLAMP);
+
+					gGL.setSceneBlendType(LLRender::BT_ALPHA);
+					gGL.color4f(1.f, 1.0f, 1.0f, 1.0f);
+
+					gGL.begin(LLRender::QUADS);
+						gGL.texCoord2f(0.f, 1.f);
+						gGL.vertex3f(left, top, 0.f);
+						gGL.texCoord2f(0.f, 0.f);
+						gGL.vertex3f(left, bottom, 0.f);
+						gGL.texCoord2f(1.f, 0.f);
+						gGL.vertex3f(right, bottom, 0.f);
+						gGL.texCoord2f(1.f, 1.f);
+						gGL.vertex3f(right, top, 0.f);
+					gGL.end();
+#if DEBUG_DRAW_TILE
+					drawTileOutline(level, top, left, bottom, right);
+#endif // DEBUG_DRAW_TILE
+				}
+				//else
+				//{
+				//	Waiting for a tile -> the level is not complete
+				//	LL_INFOS("World Map") << "Unfetched tile. level = " << level << LL_ENDL;
+				//}
 			}
-			if (info->mOverlayImage.notNull())
+			else
 			{
-				info->mOverlayImage->setBoostLevel(0);
+				// Unexistent tiles are counted as "completed"
+				completed_tiles++;
 			}
+			// Increment the number of tiles in that level / screen
+			total_tiles++;
 		}
 	}
+	return (completed_tiles == total_tiles);
+}
+
+// Draw lines (rectangle outline and cross) to visualize the position of the tile
+// Used for debug only
+void LLWorldMapView::drawTileOutline(S32 level, F32 top, F32 left, F32 bottom, F32 right)
+{
+	gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
+	
+	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+	if (level == 1)
+		gGL.color3f(1.f, 0.f, 0.f);		// red
+	else if (level == 2)
+		gGL.color3f(0.f, 1.f, 0.f);		// green
+	else if (level == 3)
+		gGL.color3f(0.f, 0.f, 1.f);		// blue
+	else if (level == 4)
+		gGL.color3f(1.f, 1.f, 0.f);		// yellow
+	else if (level == 5)
+		gGL.color3f(1.f, 0.f, 1.f);		// magenta
+	else if (level == 6)
+		gGL.color3f(0.f, 1.f, 1.f);		// cyan
+	else if (level == 7)
+		gGL.color3f(1.f, 1.f, 1.f);		// white
+	else
+		gGL.color3f(0.f, 0.f, 0.f);		// black
+	gGL.begin(LLRender::LINE_STRIP);
+		gGL.vertex2f(left, top);
+		gGL.vertex2f(right, bottom);
+		gGL.vertex2f(left, bottom);
+		gGL.vertex2f(right, top);
+		gGL.vertex2f(left, top);
+		gGL.vertex2f(left, bottom);
+		gGL.vertex2f(right, bottom);
+		gGL.vertex2f(right, top);
+	gGL.end();
 }
 
-void LLWorldMapView::drawGenericItems(const LLWorldMap::item_info_list_t& items, LLUIImagePtr image)
+void LLWorldMapView::drawGenericItems(const LLSimInfo::item_info_list_t& items, LLUIImagePtr image)
 {
-	LLWorldMap::item_info_list_t::const_iterator e;
+	LLSimInfo::item_info_list_t::const_iterator e;
 	for (e = items.begin(); e != items.end(); ++e)
 	{
 		drawGenericItem(*e, image);
@@ -883,7 +769,7 @@ void LLWorldMapView::drawGenericItems(const LLWorldMap::item_info_list_t& items,
 
 void LLWorldMapView::drawGenericItem(const LLItemInfo& item, LLUIImagePtr image)
 {
-	drawImage(item.mPosGlobal, image);
+	drawImage(item.getGlobalPosition(), image);
 }
 
 
@@ -906,137 +792,91 @@ void LLWorldMapView::drawImageStack(const LLVector3d& global_pos, LLUIImagePtr i
 	}
 }
 
-
-void LLWorldMapView::drawAgents()
+void LLWorldMapView::drawItems()
 {
-	static LLUIColor map_avatar_color = LLUIColorTable::instance().getColor("MapAvatarColor", LLColor4::white);
-	static LLUIColor map_avatar_friend_color = LLUIColorTable::instance().getColor("MapAvatarFriendColor", LLColor4::white);
-	
-	F32 agents_scale = (gMapScale * 0.9f) / 256.f;
+	bool mature_enabled = gAgent.canAccessMature();
+	bool adult_enabled = gAgent.canAccessAdult();
+
+    BOOL show_mature = mature_enabled && gSavedSettings.getBOOL("ShowMatureEvents");
+	BOOL show_adult = adult_enabled && gSavedSettings.getBOOL("ShowAdultEvents");
 
 	for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter)
 	{
 		U64 handle = *iter;
-		LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
-		if (siminfo && (siminfo->mAccess == SIM_ACCESS_DOWN))
+		LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromHandle(handle);
+		if ((info == NULL) || (info->isDown()))
 		{
 			continue;
 		}
-		LLWorldMap::agent_list_map_t::iterator counts_iter = LLWorldMap::getInstance()->mAgentLocationsMap.find(handle);
-		if (siminfo && siminfo->mShowAgentLocations && counts_iter != LLWorldMap::getInstance()->mAgentLocationsMap.end())
+		// Infohubs
+		if (gSavedSettings.getBOOL("MapShowInfohubs"))
 		{
-			// Show Individual agents (or little stacks where real agents are)
-			LLWorldMap::item_info_list_t& agentcounts = counts_iter->second;
-			S32 sim_agent_count = 0;
-			for (LLWorldMap::item_info_list_t::iterator iter = agentcounts.begin();
-				 iter != agentcounts.end(); ++iter)
-			{
-				const LLItemInfo& info = *iter;
-				S32 agent_count = info.mExtra;
-				sim_agent_count += info.mExtra;
-				// Here's how we'd choose the color if info.mID were available but it's not being sent:
-				//LLColor4 color = (agent_count == 1 && is_agent_friend(info.mID)) ? map_avatar_friend_color : map_avatar_color;
-				drawImageStack(info.mPosGlobal, sAvatarSmallImage, agent_count, 3.f, map_avatar_color);
-			}
-			LLWorldMap::getInstance()->mNumAgents[handle] = sim_agent_count; // override mNumAgents for this sim
+			drawGenericItems(info->getInfoHub(), sInfohubImage);
 		}
-		else
+		// Telehubs
+		if (gSavedSettings.getBOOL("MapShowTelehubs"))
 		{
-			// Show agent 'stack' at center of sim
-			S32 num_agents = LLWorldMap::getInstance()->mNumAgents[handle];
-			if (num_agents > 0)
+			drawGenericItems(info->getTeleHub(), sTelehubImage);
+		}
+		// Land for sale
+		if (gSavedSettings.getBOOL("MapShowLandForSale"))
+		{
+			drawGenericItems(info->getLandForSale(), sForSaleImage);
+			// for 1.23, we're showing normal land and adult land in the same UI; you don't
+			// get a choice about which ones you want. If you're currently asking for adult
+			// content and land you'll get the adult land.
+			if (gAgent.canAccessAdult())
 			{
-				LLVector3d region_center = from_region_handle(handle);
-				region_center[VX] += REGION_WIDTH_METERS / 2;
-				region_center[VY] += REGION_WIDTH_METERS / 2;
-				// Reduce the stack size as you zoom out - always display at lease one agent where there is one or more
-				S32 agent_count = (S32)(((num_agents-1) * agents_scale + (num_agents-1) * 0.1f)+.1f) + 1;
-				drawImageStack(region_center, sAvatarSmallImage, agent_count, 3.f, map_avatar_color);
+				drawGenericItems(info->getLandForSaleAdult(), sForSaleAdultImage);
 			}
 		}
+		// PG Events
+		if (gSavedSettings.getBOOL("MapShowEvents"))
+		{
+			drawGenericItems(info->getPGEvent(), sEventImage);
+		}
+		// Mature Events
+		if (show_mature)
+		{
+			drawGenericItems(info->getMatureEvent(), sEventMatureImage);
+		}
+		// Adult Events
+		if (show_adult)
+		{
+			drawGenericItems(info->getAdultEvent(), sEventAdultImage);
+		}
 	}
 }
 
-
-void LLWorldMapView::drawEvents()
+void LLWorldMapView::drawAgents()
 {
-	bool mature_enabled = gAgent.canAccessMature();
-	bool adult_enabled = gAgent.canAccessAdult();
-
-	BOOL show_pg = gSavedSettings.getBOOL("MapShowEvents");
-    BOOL show_mature = mature_enabled && gSavedSettings.getBOOL("ShowMatureEvents");
-	BOOL show_adult = adult_enabled && gSavedSettings.getBOOL("ShowAdultEvents");
+	static LLUIColor map_avatar_color = LLUIColorTable::instance().getColor("MapAvatarColor", LLColor4::white);
 
-    // First the non-selected events
-    LLWorldMap::item_info_list_t::const_iterator e;
-	if (show_pg)
+	for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter)
 	{
-		for (e = LLWorldMap::getInstance()->mPGEvents.begin(); e != LLWorldMap::getInstance()->mPGEvents.end(); ++e)
+		U64 handle = *iter;
+		LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
+		if ((siminfo == NULL) || (siminfo->isDown()))
 		{
-			if (!e->mSelected)
-			{
-				drawGenericItem(*e, sEventImage);   
-			}
+			continue;
 		}
-	}
-    if (show_mature)
-    {
-        for (e = LLWorldMap::getInstance()->mMatureEvents.begin(); e != LLWorldMap::getInstance()->mMatureEvents.end(); ++e)
-        {
-            if (!e->mSelected)
-            {
-                drawGenericItem(*e, sEventMatureImage);       
-            }
-        }
-    }
-	if (show_adult)
-    {
-        for (e = LLWorldMap::getInstance()->mAdultEvents.begin(); e != LLWorldMap::getInstance()->mAdultEvents.end(); ++e)
-        {
-            if (!e->mSelected)
-            {
-                drawGenericItem(*e, sEventAdultImage);       
-            }
-        }
-    }
-    // Then the selected events
-	if (show_pg)
-	{
-		for (e = LLWorldMap::getInstance()->mPGEvents.begin(); e != LLWorldMap::getInstance()->mPGEvents.end(); ++e)
+		LLSimInfo::item_info_list_t::const_iterator it = siminfo->getAgentLocation().begin();
+		while (it != siminfo->getAgentLocation().end())
 		{
-			if (e->mSelected)
-			{
-				drawGenericItem(*e, sEventImage);
-			}
+			// Show Individual agents (or little stacks where real agents are)
+
+			// Here's how we'd choose the color if info.mID were available but it's not being sent:
+			// LLColor4 color = (agent_count == 1 && is_agent_friend(info.mID)) ? friend_color : avatar_color;
+			drawImageStack(it->getGlobalPosition(), sAvatarSmallImage, it->getCount(), 3.f, map_avatar_color);
+			++it;
 		}
 	}
-    if (show_mature)
-    {
-        for (e = LLWorldMap::getInstance()->mMatureEvents.begin(); e != LLWorldMap::getInstance()->mMatureEvents.end(); ++e)
-        {
-            if (e->mSelected)
-            {
-                drawGenericItem(*e, sEventMatureImage);       
-            }
-        }
-    }
-	if (show_adult)
-    {
-        for (e = LLWorldMap::getInstance()->mAdultEvents.begin(); e != LLWorldMap::getInstance()->mAdultEvents.end(); ++e)
-        {
-            if (e->mSelected)
-            {
-                drawGenericItem(*e, sEventAdultImage);       
-            }
-        }
-    }
 }
 
-
 void LLWorldMapView::drawFrustum()
 {
 	// Draw frustum
-	F32 meters_to_pixels = gMapScale/ REGION_WIDTH_METERS;
+	F32 meters_to_pixels = sMapScale/ REGION_WIDTH_METERS;
 
 	F32 horiz_fov = LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect();
 	F32 far_clip_meters = LLViewerCamera::getInstance()->getFar();
@@ -1077,8 +917,8 @@ LLVector3 LLWorldMapView::globalPosToView( const LLVector3d& global_pos )
 	LLVector3 pos_local;
 	pos_local.setVec(relative_pos_global);  // convert to floats from doubles
 
-	pos_local.mV[VX] *= sPixelsPerMeter;
-	pos_local.mV[VY] *= sPixelsPerMeter;
+	pos_local.mV[VX] *= sMapScale / REGION_WIDTH_METERS;
+	pos_local.mV[VY] *= sMapScale / REGION_WIDTH_METERS;
 	// leave Z component in meters
 
 
@@ -1162,7 +1002,7 @@ LLVector3d LLWorldMapView::viewPosToGlobal( S32 x, S32 y )
 
 	LLVector3 pos_local( (F32)x, (F32)y, 0.f );
 
-	pos_local *= ( REGION_WIDTH_METERS / gMapScale );
+	pos_local *= ( REGION_WIDTH_METERS / sMapScale );
 	
 	LLVector3d pos_global;
 	pos_global.setVec( pos_local );
@@ -1183,23 +1023,20 @@ LLVector3d LLWorldMapView::viewPosToGlobal( S32 x, S32 y )
 BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, MASK mask )
 {
 	LLVector3d pos_global = viewPosToGlobal(x, y);
-
+	U64 handle = to_region_handle(pos_global);
 	std::string tooltip_msg;
 
-	LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
+	LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromHandle(handle);
 	if (info)
 	{
 		LLViewerRegion *region = gAgent.getRegion();
 
-		std::string message = 
-			llformat("%s (%s)",
-					 info->mName.c_str(),
-					 LLViewerRegion::accessToString(info->mAccess).c_str());
+		std::string message = llformat("%s (%s)", info->getName().c_str(), info->getAccessString().c_str());
 
-		if (info->mAccess != SIM_ACCESS_DOWN)
+		if (!info->isDown())
 		{
-			S32 agent_count = LLWorldMap::getInstance()->mNumAgents[info->mHandle];			
-			if (region && region->getHandle() == info->mHandle)
+			S32 agent_count = info->getAgentCount();			
+			if (region && (region->getHandle() == handle))
 			{
 				++agent_count; // Bump by 1 if we're here
 			}
@@ -1208,6 +1045,8 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, MASK mask )
 			// zoomed out, so don't display anything about the count. JC
 			if (agent_count > 0)
 			{
+				// Merov: i18n horror!!! Even using gettext(), concatenating strings is not localizable. 
+				// The singular/plural switch form here under might make no sense in some languages. Don't do that.
 				message += llformat("\n%d ", agent_count);
 
 				if (agent_count == 1)
@@ -1223,7 +1062,7 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, MASK mask )
 		tooltip_msg.assign( message );
 
 		// Optionally show region flags
-		std::string region_flags = LLViewerRegion::regionFlagsToString(info->mRegionFlags);
+		std::string region_flags = info->getFlagsString();
 
 		if (!region_flags.empty())
 		{
@@ -1263,6 +1102,9 @@ static void drawDot(F32 x_pixels, F32 y_pixels,
 	}
 	else
 	{
+		// Draw V indicator for above or below
+		// *TODO: Replace this vector drawing with icons
+		
 		F32 left =		x_pixels - dot_radius;
 		F32 right =		x_pixels + dot_radius;
 		F32 center = (left + right) * 0.5f;
@@ -1271,13 +1113,14 @@ static void drawDot(F32 x_pixels, F32 y_pixels,
 
 		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 		gGL.color4fv( color.mV );
-		LLUI::setLineWidth(1.5f);
-		F32 h_bar = relative_z > HEIGHT_THRESHOLD ? top : bottom; // horizontal bar Y
+		LLUI::setLineWidth(3.0f);
+		F32 point = relative_z > HEIGHT_THRESHOLD ? top : bottom; // Y pos of the point of the V
+		F32 back = relative_z > HEIGHT_THRESHOLD ? bottom : top; // Y pos of the ends of the V
 		gGL.begin( LLRender::LINES );
-			gGL.vertex2f(center, top);
-			gGL.vertex2f(left, h_bar);
-			gGL.vertex2f(right, h_bar);
-			gGL.vertex2f(right, bottom);
+			gGL.vertex2f(left, back);
+			gGL.vertex2f(center, point);
+			gGL.vertex2f(center, point);
+			gGL.vertex2f(right, back);
 		gGL.end();
 		LLUI::setLineWidth(1.0f);
 	}
@@ -1292,7 +1135,7 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,
 								F32 dot_radius)
 {
 	const F32 HEIGHT_THRESHOLD = 7.f;
-	LLUIImagePtr dot_image = sAvatarSmallImage;
+	LLUIImagePtr dot_image = sAvatarLevelImage;
 	if(relative_z < -HEIGHT_THRESHOLD) 
 	{
 		dot_image = sAvatarBelowImage; 
@@ -1301,10 +1144,12 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,
 	{ 
 		dot_image = sAvatarAboveImage;
 	}
-	dot_image->draw(
-		llround(x_pixels) - dot_image->getWidth()/2,
-		llround(y_pixels) - dot_image->getHeight()/2, 
-		color);
+	S32 dot_width = llround(dot_radius * 2.f);
+	dot_image->draw(llround(x_pixels - dot_radius),
+					llround(y_pixels - dot_radius),
+					dot_width,
+					dot_width,
+					color);
 }
 
 // Pass relative Z of 0 to draw at same level.
@@ -1565,7 +1410,7 @@ void LLWorldMapView::reshape( S32 width, S32 height, BOOL called_from_parent )
 
 bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bool track)
 {
-	LLVector3 pos_view = globalPosToView(item.mPosGlobal);
+	LLVector3 pos_view = globalPosToView(item.getGlobalPosition());
 	S32 item_x = llround(pos_view.mV[VX]);
 	S32 item_y = llround(pos_view.mV[VY]);
 
@@ -1574,12 +1419,12 @@ bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bo
 	if (y < item_y - BIG_DOT_RADIUS) return false;
 	if (y > item_y + BIG_DOT_RADIUS) return false;
 
-	LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromHandle(item.mRegionHandle);
+	LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromHandle(item.getRegionHandle());
 	if (sim_info)
 	{
 		if (track)
 		{
-			gFloaterWorldMap->trackLocation(item.mPosGlobal);
+			gFloaterWorldMap->trackLocation(item.getGlobalPosition());
 		}
 	}
 
@@ -1588,8 +1433,8 @@ bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bo
 		gFloaterWorldMap->trackGenericItem(item);
 	}
 
-	item.mSelected = TRUE;
-	*id = item.mID;
+//	item.setSelected(true);
+	*id = item.getUUID();
 
 	return true;
 }
@@ -1612,108 +1457,116 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
 
 	*hit_type = 0; // hit nothing
 
-	LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE;
-	LLWorldMap::getInstance()->mIsTrackingDoubleClick = FALSE;
-	LLWorldMap::getInstance()->mIsTrackingCommit = FALSE;
-
-	LLWorldMap::item_info_list_t::iterator it;
-
-	// clear old selected stuff
-	for (it = LLWorldMap::getInstance()->mPGEvents.begin(); it != LLWorldMap::getInstance()->mPGEvents.end(); ++it)
-	{
-		(*it).mSelected = FALSE;
-	}
-	for (it = LLWorldMap::getInstance()->mMatureEvents.begin(); it != LLWorldMap::getInstance()->mMatureEvents.end(); ++it)
-	{
-		(*it).mSelected = FALSE;
-	}
-	for (it = LLWorldMap::getInstance()->mAdultEvents.begin(); it != LLWorldMap::getInstance()->mAdultEvents.end(); ++it)
-	{
-		(*it).mSelected = FALSE;
-	}
-	for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it)
-	{
-		(*it).mSelected = FALSE;
-	}
-
-	// Select event you clicked on
-	if (gSavedSettings.getBOOL("MapShowEvents"))
-	{
-		for (it = LLWorldMap::getInstance()->mPGEvents.begin(); it != LLWorldMap::getInstance()->mPGEvents.end(); ++it)
-		{
-			LLItemInfo& event = *it;
-
-			if (checkItemHit(x, y, event, id, false))
-			{
-				*hit_type = MAP_ITEM_PG_EVENT;
-				mItemPicked = TRUE;
-				gFloaterWorldMap->trackEvent(event);
-				return;
-			}
-		}
-	}
-	if (gSavedSettings.getBOOL("ShowMatureEvents"))
-	{
-		for (it = LLWorldMap::getInstance()->mMatureEvents.begin(); it != LLWorldMap::getInstance()->mMatureEvents.end(); ++it)
-		{
-			LLItemInfo& event = *it;
-
-			if (checkItemHit(x, y, event, id, false))
-			{
-				*hit_type = MAP_ITEM_MATURE_EVENT;
-				mItemPicked = TRUE;
-				gFloaterWorldMap->trackEvent(event);
-				return;
-			}
-		}
-	}
-	if (gSavedSettings.getBOOL("ShowAdultEvents"))
-	{
-		for (it = LLWorldMap::getInstance()->mAdultEvents.begin(); it != LLWorldMap::getInstance()->mAdultEvents.end(); ++it)
-		{
-			LLItemInfo& event = *it;
-
-			if (checkItemHit(x, y, event, id, false))
-			{
-				*hit_type = MAP_ITEM_ADULT_EVENT;
-				mItemPicked = TRUE;
-				gFloaterWorldMap->trackEvent(event);
-				return;
-			}
-		}
-	}
+	LLWorldMap::getInstance()->cancelTracking();
 
-	if (gSavedSettings.getBOOL("MapShowLandForSale"))
+	S32 level = LLWorldMipmap::scaleToLevel(sMapScale);
+	// If the zoom level is not too far out already, test hits
+	if (level <= DRAW_SIMINFO_THRESHOLD)
 	{
-		for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it)
-		{
-			LLItemInfo& land = *it;
+		bool show_mature = gAgent.canAccessMature() && gSavedSettings.getBOOL("ShowMatureEvents");
+		bool show_adult = gAgent.canAccessAdult() && gSavedSettings.getBOOL("ShowAdultEvents");
 
-			if (checkItemHit(x, y, land, id, true))
-			{
-				*hit_type = MAP_ITEM_LAND_FOR_SALE;
-				mItemPicked = TRUE;
-				return;
-			}
-		}
-		
-		for (it = LLWorldMap::getInstance()->mLandForSaleAdult.begin(); it != LLWorldMap::getInstance()->mLandForSaleAdult.end(); ++it)
+		// Test hits if trackable data are displayed, otherwise, we don't even bother
+		if (gSavedSettings.getBOOL("MapShowEvents") || show_mature || show_adult || gSavedSettings.getBOOL("MapShowLandForSale"))
 		{
-			LLItemInfo& land = *it;
-
-			if (checkItemHit(x, y, land, id, true))
+			// Iterate through the visible regions
+			for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter)
 			{
-				*hit_type = MAP_ITEM_LAND_FOR_SALE_ADULT;
-				mItemPicked = TRUE;
-				return;
+				U64 handle = *iter;
+				LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
+				if ((siminfo == NULL) || (siminfo->isDown()))
+				{
+					continue;
+				}
+				// If on screen check hits with the visible item lists
+				if (gSavedSettings.getBOOL("MapShowEvents"))
+				{
+					LLSimInfo::item_info_list_t::const_iterator it = siminfo->getPGEvent().begin();
+					while (it != siminfo->getPGEvent().end())
+					{
+						LLItemInfo event = *it;
+						if (checkItemHit(x, y, event, id, false))
+						{
+							*hit_type = MAP_ITEM_PG_EVENT;
+							mItemPicked = TRUE;
+							gFloaterWorldMap->trackEvent(event);
+							return;
+						}
+						++it;
+					}
+				}
+				if (show_mature)
+				{
+					LLSimInfo::item_info_list_t::const_iterator it = siminfo->getMatureEvent().begin();
+					while (it != siminfo->getMatureEvent().end())
+					{
+						LLItemInfo event = *it;
+						if (checkItemHit(x, y, event, id, false))
+						{
+							*hit_type = MAP_ITEM_MATURE_EVENT;
+							mItemPicked = TRUE;
+							gFloaterWorldMap->trackEvent(event);
+							return;
+						}
+						++it;
+					}
+				}
+				if (show_adult)
+				{
+					LLSimInfo::item_info_list_t::const_iterator it = siminfo->getAdultEvent().begin();
+					while (it != siminfo->getAdultEvent().end())
+					{
+						LLItemInfo event = *it;
+						if (checkItemHit(x, y, event, id, false))
+						{
+							*hit_type = MAP_ITEM_ADULT_EVENT;
+							mItemPicked = TRUE;
+							gFloaterWorldMap->trackEvent(event);
+							return;
+						}
+						++it;
+					}
+				}
+				if (gSavedSettings.getBOOL("MapShowLandForSale"))
+				{
+					LLSimInfo::item_info_list_t::const_iterator it = siminfo->getLandForSale().begin();
+					while (it != siminfo->getLandForSale().end())
+					{
+						LLItemInfo event = *it;
+						if (checkItemHit(x, y, event, id, true))
+						{
+							*hit_type = MAP_ITEM_LAND_FOR_SALE;
+							mItemPicked = TRUE;
+							return;
+						}
+						++it;
+					}
+					// for 1.23, we're showing normal land and adult land in the same UI; you don't
+					// get a choice about which ones you want. If you're currently asking for adult
+					// content and land you'll get the adult land.
+					if (gAgent.canAccessAdult())
+					{
+						LLSimInfo::item_info_list_t::const_iterator it = siminfo->getLandForSaleAdult().begin();
+						while (it != siminfo->getLandForSaleAdult().end())
+						{
+							LLItemInfo event = *it;
+							if (checkItemHit(x, y, event, id, true))
+							{
+								*hit_type = MAP_ITEM_LAND_FOR_SALE_ADULT;
+								mItemPicked = TRUE;
+								return;
+							}
+							++it;
+						}
+					}
+				}
 			}
 		}
 	}
-	// If we get here, we haven't clicked on an icon
 
+	// If we get here, we haven't clicked on anything
 	gFloaterWorldMap->trackLocation(pos_global);
 	mItemPicked = FALSE;
-
 	*id = LLUUID::null;
 	return;
 }
@@ -1774,59 +1627,36 @@ BOOL LLWorldMapView::handleMouseUp( S32 x, S32 y, MASK mask )
 	return FALSE;
 }
 
-U32 LLWorldMapView::updateBlock(S32 block_x, S32 block_y)
+void LLWorldMapView::updateVisibleBlocks()
 {
-	U32 blocks_requested = 0;
-	S32 offset = block_x | (block_y * MAP_BLOCK_RES);
-	if (!LLWorldMap::getInstance()->mMapBlockLoaded[LLWorldMap::getInstance()->mCurrentMap][offset])
+	if (LLWorldMipmap::scaleToLevel(sMapScale) > DRAW_SIMINFO_THRESHOLD)
 	{
-// 		llinfos << "Loading Block (" << block_x << "," << block_y << ")" << llendl;
-		LLWorldMap::getInstance()->sendMapBlockRequest(block_x << 3, block_y << 3, (block_x << 3) + 7, (block_y << 3) + 7);
-		LLWorldMap::getInstance()->mMapBlockLoaded[LLWorldMap::getInstance()->mCurrentMap][offset] = TRUE;
-		blocks_requested++;
+		// If we're zoomed out too much, we just don't load all those sim info: too much!
+		return;
 	}
-	return blocks_requested;
-}
 
-U32 LLWorldMapView::updateVisibleBlocks()
-{
-	if (gMapScale < SIM_MAP_SCALE)
-	{
-		// We don't care what is loaded if we're zoomed out
-		return 0;
-	}
+	// Load the blocks visible in the current World Map view
 
+	// Get the World Map view coordinates and boundaries
 	LLVector3d camera_global = gAgent.getCameraPositionGlobal();
-	
-	F32 pixels_per_region = gMapScale;
 	const S32 width = getRect().getWidth();
 	const S32 height = getRect().getHeight();
-	// Convert pan to sim coordinates
-	S32 world_center_x_lo = S32(((-sPanX - width/2) / pixels_per_region) + (camera_global.mdV[0] / REGION_WIDTH_METERS));
-	S32 world_center_x_hi = S32(((-sPanX + width/2) / pixels_per_region) + (camera_global.mdV[0] / REGION_WIDTH_METERS));
-	S32 world_center_y_lo = S32(((-sPanY - height/2) / pixels_per_region) + (camera_global.mdV[1] / REGION_WIDTH_METERS));
-	S32 world_center_y_hi = S32(((-sPanY + height/2)/ pixels_per_region) + (camera_global.mdV[1] / REGION_WIDTH_METERS));
-	
-	// Find the corresponding 8x8 block
-	S32 world_block_x_lo = world_center_x_lo >> 3;
-	S32 world_block_x_hi = world_center_x_hi >> 3;
-	S32 world_block_y_lo = world_center_y_lo >> 3;
-	S32 world_block_y_hi = world_center_y_hi >> 3;
-	
-	U32 blocks_requested = 0;
-	const U32 max_blocks_requested = 9;
+	const F32 half_width = F32(width) / 2.0f;
+	const F32 half_height = F32(height) / 2.0f;
 
-	for (S32 block_x = llmax(world_block_x_lo, 0); block_x <= llmin(world_block_x_hi, MAP_BLOCK_RES-1); ++block_x)
-	{
-		for (S32 block_y = llmax(world_block_y_lo, 0); block_y <= llmin(world_block_y_hi, MAP_BLOCK_RES-1); ++block_y)
-		{
-			blocks_requested += updateBlock(block_x, block_y);
-			if (blocks_requested >= max_blocks_requested)
-				return blocks_requested;
-		}
-	}
-	return blocks_requested;
-} 
+	// Compute center into sim grid coordinates
+	S32 world_center_x = S32((-sPanX / sMapScale) + (camera_global.mdV[0] / REGION_WIDTH_METERS));
+	S32 world_center_y = S32((-sPanY / sMapScale) + (camera_global.mdV[1] / REGION_WIDTH_METERS));
+
+	// Compute the boundaries into sim grid coordinates
+	S32 world_left   = world_center_x - S32(half_width  / sMapScale) - 1;
+	S32 world_right  = world_center_x + S32(half_width  / sMapScale) + 1;
+	S32 world_bottom = world_center_y - S32(half_height / sMapScale) - 1;
+	S32 world_top    = world_center_y + S32(half_height / sMapScale) + 1;
+
+	//LL_INFOS("World Map") << "LLWorldMapView::updateVisibleBlocks() : sMapScale = " << sMapScale << ", left = " << world_left << ", right = " << world_right << ", bottom  = " << world_bottom << ", top = " << world_top << LL_ENDL;
+	LLWorldMap::getInstance()->updateRegions(world_left, world_bottom, world_right, world_top);
+}
 
 BOOL LLWorldMapView::handleHover( S32 x, S32 y, MASK mask )
 {
@@ -1915,16 +1745,16 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
 			}
 		default:
 			{
-				if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation)
+				if (LLWorldMap::getInstance()->isTracking())
 				{
-					LLWorldMap::getInstance()->mIsTrackingDoubleClick = TRUE;
+					LLWorldMap::getInstance()->setTrackingDoubleClick();
 				}
 				else
 				{
 					// Teleport if we got a valid location
 					LLVector3d pos_global = viewPosToGlobal(x,y);
 					LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
-					if (sim_info && sim_info->mAccess != SIM_ACCESS_DOWN)
+					if (sim_info && !sim_info->isDown())
 					{
 						gAgent.teleportViaLocation( pos_global );
 					}
diff --git a/indra/newview/llworldmapview.h b/indra/newview/llworldmapview.h
index 66793f01018..9eecacb2d83 100644
--- a/indra/newview/llworldmapview.h
+++ b/indra/newview/llworldmapview.h
@@ -30,27 +30,23 @@
  * $/LicenseInfo$
  */
 
-// Global map of the world.
+// View of the global map of the world
+
+// The data (model) for the global map (a singleton, unique to the application instance) is 
+// in LLWorldMap and is typically accessed using LLWorldMap::getInstance()
 
 #ifndef LL_LLWORLDMAPVIEW_H
 #define LL_LLWORLDMAPVIEW_H
 
 #include "llpanel.h"
-#include "v3math.h"
-#include "v3dmath.h"
-#include "v4color.h"
-#include "llviewertexture.h"
-#include "llmapimagetype.h"
 #include "llworldmap.h"
-
-class LLItemInfo;
+#include "v4color.h"
 
 const S32 DEFAULT_TRACKING_ARROW_SIZE = 16;
 
-class LLColor4;
-class LLColor4U;
-class LLCoordGL;
-class LLViewerTexture;
+class LLUUID;
+class LLVector3d;
+class LLVector3;
 class LLTextBox;
 
 
@@ -77,22 +73,26 @@ class LLWorldMapView : public LLPanel
 	bool			checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bool track);
 	void			handleClick(S32 x, S32 y, MASK mask, S32* hit_type, LLUUID* id);
 
-	// Scale and pan are shared across all instances.
+	// Scale and pan are shared across all instances! (i.e. Terrain and Objects maps are always registered)
 	static void		setScale( F32 scale );
 	static void		translatePan( S32 delta_x, S32 delta_y );
 	static void		setPan( S32 x, S32 y, BOOL snap = TRUE );
+	// Return true if the current scale level is above the threshold for accessing region info
+	static bool		showRegionInfo();
 
 	LLVector3		globalPosToView(const LLVector3d& global_pos);
 	LLVector3d		viewPosToGlobal(S32 x,S32 y);
 
 	virtual void	draw();
-	void			drawGenericItems(const LLWorldMap::item_info_list_t& items, LLUIImagePtr image);
+	void			drawGenericItems(const LLSimInfo::item_info_list_t& items, LLUIImagePtr image);
 	void			drawGenericItem(const LLItemInfo& item, LLUIImagePtr image);
 	void			drawImage(const LLVector3d& global_pos, LLUIImagePtr image, const LLColor4& color = LLColor4::white);
 	void			drawImageStack(const LLVector3d& global_pos, LLUIImagePtr image, U32 count, F32 offset, const LLColor4& color);
 	void			drawAgents();
-	void			drawEvents();
+	void			drawItems();
 	void			drawFrustum();
+	void			drawMipmap(S32 width, S32 height);
+	bool			drawMipmapLevel(S32 width, S32 height, S32 level, bool load = true);
 
 	static void		cleanupTextures();
 
@@ -108,7 +108,7 @@ class LLWorldMapView : public LLPanel
 									F32 y_pixels, 
 									const LLColor4& color,
 									F32 relative_z = 0.f,
-									F32 dot_radius = 3.f);
+									F32 dot_radius = 5.f);
 
 	static void		drawTrackingCircle( const LLRect& rect, S32 x, S32 y, 
 										const LLColor4& color, 
@@ -129,9 +129,7 @@ class LLWorldMapView : public LLPanel
 	static void		clearLastClick() { sHandledLastClick = FALSE; }
 
 	// if the view changes, download additional sim info as needed
-	// return value is number of blocks newly requested.
-	U32				updateBlock(S32 block_x, S32 block_y);
-	U32				updateVisibleBlocks();
+	void			updateVisibleBlocks();
 
 protected:
 	void			setDirectionPos( LLTextBox* text_box, F32 rotation );
@@ -140,11 +138,13 @@ class LLWorldMapView : public LLPanel
 public:
 	LLColor4		mBackgroundColor;
 
-	static LLUIImagePtr	sAvatarYouSmallImage;
 	static LLUIImagePtr	sAvatarSmallImage;
-	static LLUIImagePtr	sAvatarLargeImage;
+	static LLUIImagePtr	sAvatarYouImage;
+	static LLUIImagePtr	sAvatarYouLargeImage;
+	static LLUIImagePtr	sAvatarLevelImage;
 	static LLUIImagePtr	sAvatarAboveImage;
 	static LLUIImagePtr	sAvatarBelowImage;
+
 	static LLUIImagePtr	sTelehubImage;
 	static LLUIImagePtr	sInfohubImage;
 	static LLUIImagePtr	sHomeImage;
@@ -157,9 +157,7 @@ class LLWorldMapView : public LLPanel
 	static LLUIImagePtr	sForSaleImage;
 	static LLUIImagePtr	sForSaleAdultImage;
 
-	static F32		sThresholdA;
-	static F32		sThresholdB;
-	static F32		sPixelsPerMeter;		// world meters to map pixels
+	static F32		sMapScale;				// scale = size of a region in pixels
 
 	BOOL			mItemPicked;
 
@@ -169,6 +167,7 @@ class LLWorldMapView : public LLPanel
 	static F32		sTargetPanY;		// in pixels
 	static S32		sTrackingArrowX;
 	static S32		sTrackingArrowY;
+	static bool		sVisibleTilesLoaded;
 
 	// Are we mid-pan from a user drag?
 	BOOL			mPanning;
@@ -191,10 +190,14 @@ class LLWorldMapView : public LLPanel
 	static BOOL		sHandledLastClick;
 	S32				mSelectIDStart;
 
+	// Keep the list of regions that are displayed on screen. Avoids iterating through the whole region map after draw().
 	typedef std::vector<U64> handle_list_t;
 	handle_list_t mVisibleRegions; // set every frame
 
 	static std::map<std::string,std::string> sStringsMap;
+
+private:
+	void drawTileOutline(S32 level, F32 top, F32 left, F32 bottom, F32 right);
 };
 
 #endif
diff --git a/indra/newview/llworldmipmap.cpp b/indra/newview/llworldmipmap.cpp
new file mode 100644
index 00000000000..8d3165b98c6
--- /dev/null
+++ b/indra/newview/llworldmipmap.cpp
@@ -0,0 +1,275 @@
+/** 
+ * @file llworldmipmap.cpp
+ * @brief Data storage for the S3 mipmap of the entire world.
+ *
+ * $LicenseInfo:firstyear=2003&license=viewergpl$
+ * 
+ * Copyright (c) 2003-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llworldmipmap.h"
+
+#include "llviewertexturelist.h"
+#include "math.h"	// log()
+
+// Turn this on to output tile stats in the standard output
+#define DEBUG_TILES_STAT 0
+
+LLWorldMipmap::LLWorldMipmap() :
+	mCurrentLevel(0)
+{
+}
+
+LLWorldMipmap::~LLWorldMipmap()
+{
+	reset();
+}
+
+// Delete all sublevel maps and clean them
+void LLWorldMipmap::reset()
+{
+	for (int level = 0; level < MAP_LEVELS; level++)
+	{
+		mWorldObjectsMipMap[level].clear();
+	}
+}
+
+// This method should be called before each use of the mipmap (typically, before each draw), so that to let
+// the boost level of unused tiles to drop to 0 (BOOST_NONE).
+// Tiles that are accessed have had their boost level pushed to BOOST_MAP_VISIBLE so we can identify them.
+// The result of this strategy is that if a tile is not used during 2 consecutive loops, its boost level drops to 0.
+void LLWorldMipmap::equalizeBoostLevels()
+{
+#if DEBUG_TILES_STAT
+	S32 nb_missing = 0;
+	S32 nb_tiles = 0;
+	S32 nb_visible = 0;
+#endif // DEBUG_TILES_STAT
+	// For each level
+	for (S32 level = 0; level < MAP_LEVELS; level++)
+	{
+		sublevel_tiles_t& level_mipmap = mWorldObjectsMipMap[level];
+		// For each tile
+		for (sublevel_tiles_t::iterator iter = level_mipmap.begin(); iter != level_mipmap.end(); iter++)
+		{
+			LLPointer<LLViewerFetchedTexture> img = iter->second;
+			S32 current_boost_level = img->getBoostLevel();
+			if (current_boost_level == LLViewerTexture::BOOST_MAP_VISIBLE)
+			{
+				// If level was BOOST_MAP_VISIBLE, the tile has been used in the last draw so keep it high
+				img->setBoostLevel(LLViewerTexture::BOOST_MAP);
+			}
+			else
+			{
+				// If level was BOOST_MAP only (or anything else...), the tile wasn't used in the last draw 
+				// so we drop its boost level to BOOST_NONE.
+				img->setBoostLevel(LLViewerTexture::BOOST_NONE);
+			}
+#if DEBUG_TILES_STAT
+			// Increment some stats if compile option on
+			nb_tiles++;
+			if (current_boost_level == LLViewerTexture::BOOST_MAP_VISIBLE)
+			{
+				nb_visible++;
+			}
+			if (img->isMissingAsset())
+			{
+				nb_missing++;
+			}
+#endif // DEBUG_TILES_STAT
+		}
+	}
+#if DEBUG_TILES_STAT
+	LL_INFOS("World Map") << "LLWorldMipmap tile stats : total requested = " << nb_tiles << ", visible = " << nb_visible << ", missing = " << nb_missing << LL_ENDL;
+#endif // DEBUG_TILES_STAT
+}
+
+// This method should be used when the mipmap is not actively used for a while, e.g., the map UI is hidden
+void LLWorldMipmap::dropBoostLevels()
+{
+	// For each level
+	for (S32 level = 0; level < MAP_LEVELS; level++)
+	{
+		sublevel_tiles_t& level_mipmap = mWorldObjectsMipMap[level];
+		// For each tile
+		for (sublevel_tiles_t::iterator iter = level_mipmap.begin(); iter != level_mipmap.end(); iter++)
+		{
+			LLPointer<LLViewerFetchedTexture> img = iter->second;
+			img->setBoostLevel(LLViewerTexture::BOOST_NONE);
+		}
+	}
+}
+
+LLPointer<LLViewerFetchedTexture> LLWorldMipmap::getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load)
+{
+	// Check the input data
+	llassert(level <= MAP_LEVELS);
+	llassert(level >= 1);
+
+	// If the *loading* level changed, cleared the new level from "missed" tiles
+	// so that we get a chance to reload them
+	if (load && (level != mCurrentLevel))
+	{
+		cleanMissedTilesFromLevel(level);
+		mCurrentLevel = level;
+	}
+
+	// Build the region handle
+	U64 handle = convertGridToHandle(grid_x, grid_y);
+
+	// Check if the image is around already
+	sublevel_tiles_t& level_mipmap = mWorldObjectsMipMap[level-1];
+	sublevel_tiles_t::iterator found = level_mipmap.find(handle);
+
+	// If not there and load on, go load it
+	if (found == level_mipmap.end())
+	{
+		if (load)
+		{
+			// Load it 
+			LLPointer<LLViewerFetchedTexture> img = loadObjectsTile(grid_x, grid_y, level);
+			// Insert the image in the map
+			level_mipmap.insert(sublevel_tiles_t::value_type( handle, img ));
+			// Find the element again in the map (it's there now...)
+			found = level_mipmap.find(handle);
+		}
+		else
+		{
+			// Return with NULL if not found and we're not trying to load
+			return NULL;
+		}
+	}
+
+	// Get the image pointer and check if this asset is missing
+	LLPointer<LLViewerFetchedTexture> img = found->second;
+	if (img->isMissingAsset())
+	{
+		// Return NULL if asset missing
+		return NULL;
+	}
+	else
+	{
+		// Boost the tile level so to mark it's in use *if* load on
+		if (load)
+		{
+			img->setBoostLevel(LLViewerTexture::BOOST_MAP_VISIBLE);
+		}
+		return img;
+	}
+}
+
+LLPointer<LLViewerFetchedTexture> LLWorldMipmap::loadObjectsTile(U32 grid_x, U32 grid_y, S32 level)
+{
+	// Get the grid coordinates
+//	std::string imageurl = llformat("http://map.secondlife.com.s3.amazonaws.com/%d/%05d/%05d/map-%d-%d-%d-objects.jpg",
+	std::string imageurl = llformat("http://map.secondlife.com.s3.amazonaws.com/map-%d-%d-%d-objects.jpg",
+									level, grid_x, grid_y, level, grid_x, grid_y);
+
+	// DO NOT COMMIT!! DEBUG ONLY!!!
+	// Use a local jpeg for every tile to test map speed without S3 access
+	//imageurl = "file://C:\\Develop\\mapserver-distribute-3\\indra\\build-vc80\\mapserver\\relwithdebinfo\\regions\\00995\\01001\\region-995-1001-prims.jpg";
+	// END DEBUG
+	//LL_INFOS("World Map") << "LLWorldMipmap::loadObjectsTile(), URL = " << imageurl << LL_ENDL;
+
+	LLPointer<LLViewerFetchedTexture> img = LLViewerTextureManager::getFetchedTextureFromUrl(imageurl, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+	img->setBoostLevel(LLViewerTexture::BOOST_MAP);
+
+	// Return the smart pointer
+	return img;
+}
+
+// This method is used to clean up a level from tiles marked as "missing".
+// The idea is to allow tiles that have been improperly marked missing to be reloaded when retraversing the level again.
+// When zooming in and out rapidly, some tiles are never properly loaded and, eventually marked missing.
+// This creates "blue" areas in a subresolution that never got a chance to reload if we don't clean up the level.
+void LLWorldMipmap::cleanMissedTilesFromLevel(S32 level)
+{
+	// Check the input data
+	llassert(level <= MAP_LEVELS);
+	llassert(level >= 0);
+
+	// This happens when the object is first initialized
+	if (level == 0)
+	{
+		return;
+	}
+
+	// Iterate through the subresolution level and suppress the tiles that are marked as missing
+	// Note: erasing in a map while iterating through it is bug prone. Using a postfix increment is mandatory here.
+	sublevel_tiles_t& level_mipmap = mWorldObjectsMipMap[level-1];
+	sublevel_tiles_t::iterator it = level_mipmap.begin();
+	while (it != level_mipmap.end())
+	{
+		LLPointer<LLViewerFetchedTexture> img = it->second;
+		if (img->isMissingAsset())
+		{
+			level_mipmap.erase(it++);
+		}
+		else
+		{
+			++it;
+		}
+	}
+	return;
+}
+
+// static methods
+// Compute the level in the world mipmap (between 1 and MAP_LEVELS, as in the URL) given the scale (size of a sim in screen pixels)
+S32 LLWorldMipmap::scaleToLevel(F32 scale)
+{
+	// If scale really small, picks up the higest level there is (lowest resolution)
+	if (scale <= F32_MIN)
+		return MAP_LEVELS;
+	// Compute the power of two resolution level knowing the base level
+	S32 level = llfloor((log(REGION_WIDTH_METERS/scale)/log(2.0f)) + 1.0f);
+	// Check bounds and return the value
+	if (level > MAP_LEVELS)
+		return MAP_LEVELS;
+	else if (level < 1)
+		return 1;
+	else
+		return level;
+}
+
+// Convert world coordinates to mipmap grid coordinates at a given level (between 1 and MAP_LEVELS)
+void LLWorldMipmap::globalToMipmap(F64 global_x, F64 global_y, S32 level, U32* grid_x, U32* grid_y)
+{
+	// Check the input data
+	llassert(level <= MAP_LEVELS);
+	llassert(level >= 1);
+
+	// Convert world coordinates into grid coordinates
+	*grid_x = lltrunc(global_x/REGION_WIDTH_METERS);
+	*grid_y = lltrunc(global_y/REGION_WIDTH_METERS);
+	// Compute the valid grid coordinates at that level of the mipmap
+	S32 regions_in_tile = 1 << (level - 1);
+	*grid_x = *grid_x - (*grid_x % regions_in_tile);
+	*grid_y = *grid_y - (*grid_y % regions_in_tile);
+}
+
+
diff --git a/indra/newview/llworldmipmap.h b/indra/newview/llworldmipmap.h
new file mode 100644
index 00000000000..ecf10034686
--- /dev/null
+++ b/indra/newview/llworldmipmap.h
@@ -0,0 +1,100 @@
+/** 
+ * @file llworldmipmap.h
+ * @brief Data storage for the S3 mipmap of the entire world.
+ *
+ * $LicenseInfo:firstyear=2003&license=viewergpl$
+ * 
+ * Copyright (c) 2003-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLWORLDMIPMAP_H
+#define LL_LLWORLDMIPMAP_H
+
+#include <map>
+
+#include "llmemory.h"			// LLPointer
+#include "indra_constants.h"	// REGION_WIDTH_UNITS
+#include "llregionhandle.h"		// to_region_handle()
+
+class LLViewerFetchedTexture;
+
+// LLWorldMipmap : Mipmap handling of all the tiles used to render the world at any resolution.
+// This class provides a clean structured access to the hierarchy of tiles stored in the 
+// Amazon S3 repository and abstracts its directory/file structure.
+// The interface of this class though still assumes that the caller knows the general level/tiles
+// structure (at least, that it exists...) but doesn't requite the caller to know the details of it.
+// IOW, you need to know that rendering levels exists as well as grid coordinates for regions, 
+// but you can ignore where those tiles are located, how to get them, etc...
+// The class API gives you back LLPointer<LLViewerFetchedTexture> per tile.
+
+// See llworldmipmapview.cpp for the implementation of a class who knows how to render an LLWorldMipmap.
+
+// Implementation notes:
+// - On the S3 servers, the tiles are rendered in 2 flavors: Objects and Terrain.
+// - For the moment, LLWorldMipmap implements access only to the Objects tiles.
+class LLWorldMipmap
+{
+public:
+	// Parameters of the mipmap
+	static const S32 MAP_LEVELS = 8;		// Number of subresolution levels computed by the mapserver
+	static const S32 MAP_TILE_SIZE = 256;	// Width in pixels of the tiles computed by the mapserver
+
+	LLWorldMipmap();
+	~LLWorldMipmap();
+
+	// Clear up the maps and release all image handles
+	void	reset();
+	// Manage the boost levels between loops (typically draw() loops)
+	void	equalizeBoostLevels();
+	// Drop the boost levels to none (used when hiding the map)
+	void	dropBoostLevels();
+	// Get the tile smart pointer, does the loading if necessary
+	LLPointer<LLViewerFetchedTexture> getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load = true);
+
+	// Helper functions: those are here as they depend solely on the topology of the mipmap though they don't access it
+	// Convert sim scale (given in sim width in display pixels) into a mipmap level
+	static S32  scaleToLevel(F32 scale);
+	// Convert world coordinates to mipmap grid coordinates at a given level
+	static void globalToMipmap(F64 global_x, F64 global_y, S32 level, U32* grid_x, U32* grid_y);
+
+private:
+	// Get a handle (key) from grid coordinates
+	U64		convertGridToHandle(U32 grid_x, U32 grid_y) { return to_region_handle(grid_x * REGION_WIDTH_UNITS, grid_y * REGION_WIDTH_UNITS); }
+	// Load the relevant tile from S3
+	LLPointer<LLViewerFetchedTexture> loadObjectsTile(U32 grid_x, U32 grid_y, S32 level);
+	// Clear a level from its "missing" tiles
+	void cleanMissedTilesFromLevel(S32 level);
+
+	// The mipmap is organized by resolution level (MAP_LEVELS of them). Each resolution level is an std::map
+	// using a region_handle as a key and storing a smart pointer to the image as a value.
+	typedef std::map<U64, LLPointer<LLViewerFetchedTexture> > sublevel_tiles_t;
+	sublevel_tiles_t mWorldObjectsMipMap[MAP_LEVELS];
+//	sublevel_tiles_t mWorldTerrainMipMap[MAP_LEVELS];
+
+	S32 mCurrentLevel;		// The level last accessed by a getObjectsTile()
+};
+
+#endif // LL_LLWORLDMIPMAP_H
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index b01a4f5161d..17c04a81c27 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -1464,6 +1464,7 @@ F32 LLPipeline::calcPixelArea(LLVector3 center, LLVector3 size, LLCamera &camera
 	F32 dist = lookAt.length();
 
 	//ramp down distance for nearby objects
+	//shrink dist by dist/16.
 	if (dist < 16.f)
 	{
 		dist /= 16.f;
@@ -3001,15 +3002,6 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
 
 	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:ForceVBO");
 	
-	//by bao
-	//fake vertex buffer updating
-	//to guaranttee at least updating one VBO buffer every frame
-	//to walk around the bug caused by ATI card --> DEV-3855
-	//
-	if(forceVBOUpdate)
-		gSky.mVOSkyp->updateDummyVertexBuffer() ;
-
-
 	// Initialize lots of GL state to "safe" values
 	glMatrixMode(GL_TEXTURE);
 	glLoadIdentity();
diff --git a/indra/newview/skins/default/textures/map_avatar_32.tga b/indra/newview/skins/default/textures/map_avatar_32.tga
new file mode 100644
index 0000000000000000000000000000000000000000..aebeab409366d632722c33328566919423f383fb
GIT binary patch
literal 2894
zcmZvedq|ac7{|{!>dAA=lRDFF)Rq-x^Aat}G-v8?!?BWSP9<v1g>Dm6Xl*q5W1Vc)
zRzWv!wS}QwSc(({x=b)aC5;Tc<pLwSt-E$L^V#?N*n7?fd*$=`p7)&h`&@s|?=_k1
zCgYf9!k_og{5Tnyffw)wKENNm3*HCuAQ>zL%U)l{;{SXQ0cL@zfI1Ff16JVS#L2Xo
zr(j?Kyv?tJ0HrCp9{d4XKqu${9iS0ZfFHrvfTkCNa4-$L0q81Swrs@7RKyca&=jNL
z*P$Q}w1UxMoP<dj1%2QkC<JsQ8q5ZC))!0wR5F=1@#G2k(E~6&37~E}PC^g506%;I
z5<wVv6HrJ!R1H2$7=Hm6<6W8Ha5yABK3=l2vSj7Tm9lEpDoII6k(ihm2?z)f1||%w
z7BHA3@E)LriNLDrEF!b=ldAfJg@s9JX{nq$cTSp`nxwwIUXC9>F2{}?lj`bfIdI^B
zl$Di9VPT=nnKMW9DW<Ifd<z%{6A}pQPMow&n7$nSt;6YbN^ftkT)K2g+S}WurKLrh
zo15kI>C<xR)G4W}tCJ%~j!0!?rIeSK%dTC!G&Zx@EYuU`v<7?$n0~gLLu+Zll?R9c
zL%bvYUS3{OQ&S_?uV0sefdRRE`Lc9(cS~nyr*w35NNa1WoIQJ1t)D!3Qh!@jRVDlO
z?UUWRcS}J*f%y3Nj9aGmUho-+1e4V&>+%*j2!vkpKcg5L8j`zr@5-%Px8&NjYij?>
zl`GQM*C$<FU2^f_MLB=|yxMPQXwYX49XcfY_wQHR%&|sHyZwMo$3--i=6IL^TU<On
zJ;i3T$<CcSWo&FrUc7iAPo6xHhYugB3%76ImK!&2$l&0h%Z;9%9!&#NaOTVzIdS5I
z96o&5Wq$SQ)#K)w)=H29X0g^hCV?$L{QUeRF)>k`g2Vsi%a`)}`ExbS_#ZrYAouRw
zlRJ0rxbnapFn-3)9;0E#&78B^k&%(2)uZ8F@D+$K3^VbAR;yK}Oqrr(+eE{DjM^~%
z^yyP|V0d^~9zA-b4zLJp07gy2jF?4YvDs#>WHYDVgZVT_50(N63=EXe&`_b|W*VII
z>eVYXI5IM#5kGtOOddaetSM)@X^c@ay{s;~kUh=S6BHCQ9wCjDfH*caC(n8yAt51>
zot-VkG~{4pG&VXqss{gETSmonvYpw+TtG*U9@S+U8yo93QV-oE8sWMuqmj9D=Sp#L
zv23N0jWlAX1w)-hW7Be}GGC32jjjewPfvF%cR=hDD!&b?sk~^>A}J{;kzZWOHdclS
zVm1EHXC`OOnl*0KZU`kCs#R2ti;I(riVFFas&@KIciC&K3H$5n)vKEEwzf8H4E9w{
zPL5lYJH>}a61b36bjOYzvW=oPW|`&W%DI34zOEK7)(aOd=!oJl%*e=a3pPVzF$Fo_
z*fg?m;X+xrZry7^qbb>tTnRUC-qdn&_OUOT(EVIH+U@LxgCNpqypJh3bLLDP>#T=*
z=}l3F&E;h@8oQd~jAJ`EIM^+i4~?nD(&7Hn?d$6+X=!O%(CrM{%Hl9&&MFRw{{DWQ
z&a9z&##Jx`5`aIq6dv59oIu!Txw*NTG4;@Dc*yBvtULBmczC#5@J~EThkOh{T8RcD
zoG6)@nK~2HLr+$k9x@4><V8hA?$MNmXV}%=^i{WT*KC?MZ=S4Ju|kWdN*0!viDSd5
z_nfW2fe^qddZ`M1GJ^>47iW4xLc)KQ%(b<(VzF4p17Z&h1HPYd8SC@Z*B1hQS`Ktf
z8%msb><e8bragQ1jPIrNCj&6OMkBm_ncyn{UCai$(J(x2|9N?NT22;Ehm$8~Jsn)K
zWQo}AcDJLH&joxLp}dENTZAipg`w}MU;yY_1m7@HQ&Y7C*REYF8#ZjvRmfSLpP#Q|
zYQ~HiI*eI2ZbW<*{0$hjAD~&Y=3_IibgWLm|Jh&*J>ceLlj+l^%Yp?9Bq}OOS7vl{
zw7z8UK3{3Lnd`4Dcw{SJ|JYQq7*}eA)}p`<pq+Pxw%fpW-~$k#zvbgvDkeGvu=R2Q
zm+|j_O~DQK8^9Necfdq_Y8$S!J8Zl~hl0#Fu{1XQ4i|bXPfbtyJUJ~nWm!b#N6DWi
HMVkHrK6S2I

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/map_avatar_above_32.tga b/indra/newview/skins/default/textures/map_avatar_above_32.tga
new file mode 100644
index 0000000000000000000000000000000000000000..65bd0561a784cf0402f9978b95e31b45f7127c5b
GIT binary patch
literal 2909
zcmZuzX=qee7=7=}Ow7J7#>NmZt-(fZM6xuS3R<-_N^EOO7bv7)2`$n;()L%3OKdI4
z4}Y|!Et-Y|6a`U#L=YQL1BtkV#0}g?qFFUbHIvL_=Ic4%^NmjJ4ClV>-gEAEzVF`m
z3?tfbemMsIk+HaR0dE7}1C79Mz_-9VKrxUDqyg+Z4=@|h7*RX}JU|SP4}1lX;a7kR
zmB5>TQM((BaBws5F;D?421v}|5rDZDjo}6?z#%TexwjsTP_7*)1&qNxXq2)AC!YdT
zdjklgq_9%HJl7K3^Xhm$eV5Hh9U3ur?AReWIXSY6SI&Gt$Hgk(6>|1^g}e;+W|hr~
zh=`Dyni}zVJfe5le+!#QyTi3>*W~QkvyzpSWlP54*&o1X0ONTbNClWT8e#(c@yKgh
zR}T1;&lMFFCC$yva`EED|A^Axe=N%q9Oc%nTXO&YeK~dNlw@XR+R~)@6QGsMjw9`4
zhh;(*PKD3sRMH(A8!JbS9FgwsZn<#bLb&W^S~vw80&cfk9z1v;LqkI<fBg7yNl#C=
zrCCeA1OF$@XPm-nz?SqRBqYd*6DOp%w^uG*y7a2-mPmA-fEj`K_;{6^nwpaS{(c?O
z*48FzX=%1JBVxJIa7M)(X8_5-I<10;#Kc57bLNcPxpPPQ`ugPZ<;&99*%=<`7S3}V
zW&|@bGGusoSc1WzJbwIG?%uttLt0u|Bqb%qmSvIu0(=6j0+s^XRBj&obaZsc!-o&$
z-o1Nr<HikPopg0|g-cd36XP%=$ch~q84><`KA)c7zI|JBa_G<@NlHqx>yJ4M0+jv&
z_(3Hj=>{Vj8yk~Hj~;2FIGzSGTGp{<8$*nZBpFLiP7dVd<;m#isMJx{<Mn!V&YUlc
zfx^s`4m2@_!p$leHGlqm&DxVEPh@<2T>WBtXt5J-nCKdc4yC5129_^huJhcbqEDYb
zm4Sf)9YoQ?hYzbLm%UgE7A%nS=g(^z>Zs-6bZIQBpAlZaemy+8LJAGQklB?hSIX6^
zSEXKsSU?oIdGn^;ZEbCpxVX6IONWbyIb#y2GchrtM;gkCcVatz`gFM5Viv-8E|<%X
zxV-DvuU8S3Or|8~>X>r$=us&tDbW>NT3V`tB&P@kCnqQM=omUUIH*OFo16P034cK^
zouZk*SafvsbWu@JVEgv%vYT-xK6~~|bIKXhBv$XabLTVymIe)EgcRchDa<No<eY4E
zb+zpYGtQkUmfIA6Zvlb~dO7!|rY2j^nwgnV5-lXI8yBe<lOt0{9hW1-ehm!`wul8z
zE};Y<l7*(b@m3tUi~GyU%7m6{XjUK)km>1Zopv4R3<gn8cFSSswxlJ>GT09!0bJTH
z-c|PfrfCNA^YiD(-qX_~duW`?@AnI1p#n{;V`;icP8G(&`ee!If?x_dfD|CKxvK{K
z;_mY|woHFvVPUYUs!CVoUh2$yS%(rYD-;wIykH*&$1;GMCpqbrVbrsscor}g6BFYr
zFE5wc+FIF1dXGcT5J=65^A#2{WevvhEybPPRLghcOeqU+<j(4^tgMuS2M>zQ*iGN*
z3@PaapM>bX#299ebhgKPaHe$IaFj)h76mIRDx|%=-KMi<XJ?g)Te8wH8g6Jbjj7_b
z$tT8MHoR;?&IBtg$Y4V`v$$7syWxu{l$CDu4}0aRWlH6wrVFVFAT_dS(<ZHYEijYb
zu_!`R6QE+*J1H>Ls(rYlvw983DWqVID<ZT6jh#DpzVK%w`p|B^r%bg*zrGlh+Ksn`
zx45`i8XFr$w?y;Uv17t;brvk+Z-7LAFGWk^U|}2afUcD6>}=nP6)WWA$&)Mr^@neD
z>`L6Sx!<$^j=iL`ztn!jnSK=>fL?%^TC!w`T)A>ZScoWfXLuj_<pNHjTWWz0r!{2m
zgxVY^0^D|)4_pUu-v>BVtR86iKjE(CnpHfBH-&HE!i7P8{otBd{rtHO(Qpsoj#ioO
zL--<_!8N;n4KT49m(J;DT<LP5!~7a9pqHjH;6#7#SAVef!wp+EY_3}R(Yg)qtzBmP
E3s5sy=l}o!

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/map_avatar_below_32.tga b/indra/newview/skins/default/textures/map_avatar_below_32.tga
new file mode 100644
index 0000000000000000000000000000000000000000..496c44b369a473a38831885aab44c5b0d7e5a939
GIT binary patch
literal 3037
zcmZXWSxgmY6vyW-Ty}&ao5g|xBD5-4BrPBn>l&>ZwNz}HP?Dz0voC00Kv8NnvDJqr
zZH*xs`_|_+Dn_G%h>E!3Lflazi)Fc7xHG5!|GCb+-ge0EWA4m+=l`AMJ2Qq6W7tQw
zfxoD|{22$Fzzw3oN8k@o14=;=$N?#U1|ooC4+cZ0bE*qOg2jy(gl9Cc0hEC}kPK*?
zB97e{j2}2~A`Ng#E*RR0K|C0K16u$MWP?Ny1zbA08E3)CeEe<D-he@j<m6=0b@2Lr
zuo;wqOppL*#@U3yP%pR!2cTc{?<bw?IDGi9%$zw>)F{_C2)+lOfcYQ;Fm{x2?80E^
z(rlOPaMr0gS95c-bar-1OG}Hm-R_Xt9!&fOtN?`|6~qD!Gs6)u%P0{pzEVxP>+0&{
z&Ye4Q_3BkQckY}tHZ}$v=W723bzli#0^R~lfO^aMhDN|%EvMvzVRhG2R#qm@pFfx0
z-d?$W{kpWbw@YhltJK!khGN@-=RXG@f@}~>k($?ts2XlDModwgnvY6NO_gicuF1=n
zFXi#$$LhtED_7Ku6DLkcX=!OFKz_{I2R4ECL0B4T&(J8@Qg#}D;VLBh^y$+wHZ~^1
z!^868#S3}x;DOw_bxST?x+G`LoRMS4j!8yFMo4Y|)0pP9fN4$#!8GICFw{LeaN%i=
zJ#yrTOifM6#KeTk4h;=SUteD^kQXmr)Ic6ObVwWyM@Y6ChQ9_Zg95<a7Ayl*bm9sL
zRY2UfZQI1MEHO<pOm%Q@P@X+|Cim~(*EqMewaKYdr)0;D9ijC71zWX%`#l%f72?*I
z+TpYdV?;COtgNh5MZwWP>1e;-FFv0y=q+{c-Mc4UU0rhF!UZ{b@}$(%)C6>yoZrD#
z@BzpMS~d(L4?1WUONUB2($dm2YmL;51tw3Z%|MTjj|+qRrYtuD%c!KJBoJWAP60No
zH_IrVvJOCRx%Yns(tyNR24ZG4P{~0xo^SzHG|wnbpI^OtrP-yw_AWen^r%dqK0P2z
z`~9FEtO4^t8vUc64DFXdoKC0T<#L&<#l5ueVNgd#MsyF}y?a-<InJIvD+doA3<Q!3
z?gC$dDv(PT=}9>d7_%ZHBhBsGw@VWZ+CG^2D}oz>+ne2kO^F+!zP>(SnoIi=RD*?d
zAPbCOjaFP-oUB^4N;E7SEX|3*GreZ8Pwb+gO0e*6-@Yv!9UWTq)z#Gj2`-em_=x74
zX*w}6(V9DVt~`45NcPZx`|{<>QdLzYGiJ<?l`B{3rroKgM@L8H>C>lj^X5%qWw)X+
zEm*K15OJFB1j`wr$5ByHf@b6AZdbD&rYSQslUD_Ir)JHXWiDE@NY@!K&!j$l_)s^_
z`Sa)H`0?Ws5fKqE52MC<njVRXiQ(Ez=6*NV6~!c_r>6^iF_8iGEz{%i_zDUN{1p`y
z($mwUH6#(NpMik^-Jf>f3zOJDiHX?QSjo!Dvbc>kaWM=^N=k}EM@L(%7(C?zmB5dL
zPaq7|(xpo^v6>q<%anc3PIZ{fM#^}Z*4eXXtBfWujzLOFN@5+Ex)}^(5>HkD_9V7N
zKZ57w23xjlndV02T+GdrCr>mt@I4f?Y7JU^e7xl4<!L+AXgm0J32ql|K?*GfJZDj}
z9Nz<e`0PcdEL%`3&c#r2|Ff@$34TGre-aWBBtJi21$Bjv8#iufmKtzdSbq#618566
zct?Lx)<;?R>1Qo+?(4&1VEg;~!$m)1a~_>GZJMx{d-3*sefUwVQ}~>iWH?ot%c}yx
zCchIu^cDRs{!c)5yr`(iEH5wDH?S?st`O$u8nzMde<V$$+k)S$zsaE7$9OU**MuMX
zE}@){*(@w9^cNQwOLup-s<8>7s6shh!d!S6QhL`w_ad=I!4->}7<UEOGVF7K4@E9f
zy@EM!Zf@=vr1S*=9WzX#i0kX4#GE;E<iLRg`YphcXHUbu{|V@KB&7<05B_=)W^YbT
zjx;qjg|Gh|rnnn5IF8$s+1c49-ux!M##jP0%zW@8Nt@}9IMFk{j(ylSK6VlW+QRvi
z29-}FaoD;GgE%noW5~ms&ixp)C3F4+v#Ss6!$~9scoc*0z_)<!#Jry|=tnZYa@GOf
f;S&pKGk9#?`04WM)tgqYUpH^diq&hE&o}-BvoJ<J

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/map_avatar_you_32.tga b/indra/newview/skins/default/textures/map_avatar_you_32.tga
new file mode 100644
index 0000000000000000000000000000000000000000..782207efd6c28747686bcaf4355e2fe7388dbe94
GIT binary patch
literal 3395
zcmYk9d0bXi9>x!gtRn6}A|kT7P`M?9rI|D16q-%bO!ME^nBjt&`^N>5O~y4f^^=tr
zGme^NMk!93shEf+Dkz#InlfUNA*rCC&pgk$yx`^Yz3+SPd+&M9?{|L7!5BZ|I>HVA
ze6n@vL)=KKrtkjzY)8UKUowP@Naty!UjHK*O!|{PB%0{S&LoiN8870#h$oY!QxI_{
zx~-o(5e=M7=8$dV2suT{NeS6U-Xn9#n`9Junn*I7bR?~bH}TZuOr}nf@FcQDcEphs
zQbZbac!DPIfLtJXWGd0%2_%LDlK`TDJ%}+GI%!asljNMCWQVMSoALF931|a*C1;)^
zE65l!jPxQQqz%#U?sh~CF650=@=y+guSt3aX4YJok9Wcx`3~k_5zN<xF#r7q=EKb}
zlc&K9d<q%^GWRnwkqjqNav9)dRW#=gWT72Bz&!Un%)6Ul$}hr{eh*V}7UtM#n4%Lf
zhmXO0^DWF*2Vi#Xh55VyCU+Uk&|$D|%c)uysXa$xiDvJwU#)lK+!Xt4pc$VEbLD54
zivPj<a0TZ4C7826I;tnjVUCwNs)vrk>^lUrd!M8DNj}W0uQ`hH`cCq9l1RcyU^-7W
zp4|DVn5fkqv@>(lV1BNJsrnVBvKr>6>n-ZvUxqnX0aJDXM(VQp+v70%55w%)-=aKb
ztfQ=zd6&FQ;z?(#sz{c9^9bDB+#Z_Lw_tv2fcdo!rusI_^;=fI&51IEeVUKx)oamf
z&OAg<n}Oi0Tm)>`2v6x9ErB_3#L>>*10$<n`3tNi(!NM$5T#n!V?61Q!HQLQczD2j
z<V*0Z1B|%c2y^QmJg(OunzD&Ymm}ey%P=527f&wALZA5y5i@fRx=)^pF5|`{V983D
z;!{p=J!<~%M>tcE(tn7|k8#Pj<;7wGe}8}Y@7xU^N^1&k#GUfJ{=F3m%T{8@%2k-Y
zaT7lNYA?>5IfJsYGHlHM0<W)Hjp*q!(RKVJw9UwIrr`2|qHX!=7I`J;coMI)(eWg?
z<mu^&4#S3{Z9Nb`SzqEsB0k@R0kk@K%~}*3Jcz2QD%`z$7wHckJb>SwJ9ki7S&6N?
z3($Y=d~}<TindEuILn|ADEQh50Vbba0yk<cApKPebc`kl2nay%idE=D@perU2;xfj
zrJEC%EXS?`2T)sEi-!*%A_F{prCw80gRKPxh-VyhpEwy_5>sX?tCeTdX0?cZK%Hk*
z*py21BpMVHgwVobgiuhzvOIEQ9^$#K3qJe^H*Vapf>{#uk>Is!*Dzu2dc<<YJFS1;
zNj0U}-h(iCTUx~SbNm-nCKcBkBo-bXj_%ifK^R3O*zvdf=t+k?u`mP2OG<G6{(a;~
z$iJ?x4xjGbhbPj~(PQxvC#zINR6$g$yuG0jNf{X}d%BP<1kusah~m%@ln9knMJ1wU
z&c@KpY+Sr}5sR&aY$-1<N5W!8@q%=?pE~E*qC%xr>)6R9@x!AM+a%GmXHWE`L^OvF
zCtWUFM#R+V7`iAE6%`dt5?ZPA=g(sZLuX)S4m?hucPvqUs`9q);F3^Pe^Jg-r&DRL
z67g5AqZfydB4NMWM%bjuh?_ABXU?8QV`HP^EN{83@My6Ok^#%#hPm*QQwUWA3y-y|
z$Z?K4Od@hunna?aqR{tnF&?Kt9O*&2EM19EhVbgG+ibjL%UwRQrMkKrX?g!b0;4f@
z^H!K2uR2v%HIId%Ik-RJ*!>h|iu9Kx6cQ4Gfp5Qq{`Y`*io}wxJMs}SE(L>T&&6pb
zaeaL~G9~6KF=f@Eqet;PEgHmX)8PmUs>;1ey_!pUR*T?#YIJj@^5eX?<jcO9@Y>(-
z6a`(PF%%8S$VTuRDM;o@ohmKGty{OOE7K+1rlFw$H*elVVR11=uUdotjJ>EW+nuVf
zimzUy?xsFUvq(J|N!qyzSs*W#62!&DA#wX>7}PX{K9rBVd<{Wd#h|g{&~L_U<kFp`
zw7r5squBiJ<Vj@mUQ$jj;u$ir>o%a(l^ag!SKE;XHf(Y%R~;=P{fNIyUN?u3d#s}k
zNl8gas;#$E=*MYj3OzK1ti|a3k8ucQx$d4i1&Q<KV{qC+L^G+QSV>~%r6K&I&1j{L
z$J%SVPZc}gRZfLn-mbKi-X!YM-nwHmy*)qQA&7{Gz~E&okVIX%z@@KM2>oIYg6LbV
z#A7KF(RI=kbel2_q3hm5Czc}>UDbWtdTQ#O&O2^`qpJ?KgTxX=ax1H?#8J3u>v)yj
z6TN%)#xrZyHS4>gK%u8N?^aWX5aw+#>3F-Lx#s#&x0SSox-b1<?bUuko4X-Ix-A<~
z?H7H?>%_KCY0LJfn|$xmR*or|yAxZQ_}Q7b>b<Mysq-(ggYlF~)E%`$(j1yLjoNrA
z<liFNE;tS!`vwwse%T!MN^DgS6)M$3SLt=t`qn$Xg!c={_I+!loU7g>lO*VFotw#T
zcAeF+#*iw4)~#DxFAo|u3Io}h`yMJn{K+%6GRn$`6Q$_N>JrRA?!aB8I=eO(dY9ZK
zil6q9cw|Sfxbh(b$a*^|UoS5&+o~cXBW-zC{f&u<L1<{Gy|0;QWc#$<*X}-%_+{~A
zv^Q_w4*#L)Myc*X_MUFKquo!CeKwchtgq$w-Xxjmzlj_vY}YDe5VcUfq@8h~eMgCJ
q{ibkGB?u*5i5%x=f8`f@yz=s&hrc@FPa{T+?DN;(jd*c*y!k(<xp_<g

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index f37c0e90224..14fdbeaaa1a 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -14,38 +14,15 @@
  single_instance="true"
  title="World Map"
  width="800">
-    <tab_container
+    <panel
+     filename="panel_world_map.xml"
      follows="left|top|right|bottom"
      height="565"
      layout="topleft"
      left="15"
-     name="maptab"
-     tab_position="top"
+     name="objects_mapview"
      top="25"
-     width="542">
-        <panel
-         filename="panel_world_map.xml"
-         follows="left|top|right|bottom"
-         height="550"
-         label="Objects"
-         layout="topleft"
-         left="1"
-         help_topic="worldmap_objects_tab"
-         name="objects_mapview"
-         top="19"
-         width="540" />
-        <panel
-         filename="panel_world_map.xml"
-         follows="left|top|right|bottom"
-         height="550"
-         label="Terrain"
-         layout="topleft"
-         left_delta="0"
-         help_topic="worldmap_terrain_tab"
-         name="terrain_mapview"
-         top_delta="3"
-         width="540" />
-    </tab_container>
+     width="542" />
     <icon
      follows="top|right"
      height="16"
@@ -209,7 +186,7 @@
      label="Telehub"
      layout="topleft"
      left_pad="4"
-     name="telehubchk"
+     name="telehub_chk"
      top_delta="0"
      width="110" />
     <icon
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 284594426c7..6ebb5f8681f 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -1672,6 +1672,42 @@
                  function="Advanced.ToggleConsole"
                  parameter="debug" />
             </menu_item_check>
+            <menu_item_check
+             label="Notifications Console"
+             layout="topleft"
+             name="Notifications"
+             shortcut="control|shift|5">
+              <menu_item_check.on_check
+               function="Advanced.CheckConsole"
+               parameter="notifications" />
+              <menu_item_check.on_click
+               function="Floater.Show"
+               parameter="notifications_console" />
+            </menu_item_check>
+            <menu_item_check
+               label="Texture Size Console"
+               layout="topleft"
+               name="Texture Size"
+               shortcut="control|shift|6">
+              <menu_item_check.on_check
+               function="Advanced.CheckConsole"
+               parameter="texture size" />
+              <menu_item_check.on_click
+               function="Advanced.ToggleConsole"
+               parameter="texture size" />
+            </menu_item_check>
+            <menu_item_check
+               label="Texture Category Console"
+               layout="topleft"
+               name="Texture Category"
+               shortcut="control|shift|7">
+              <menu_item_check.on_check
+               function="Advanced.CheckConsole"
+               parameter="texture category" />
+              <menu_item_check.on_click
+               function="Advanced.ToggleConsole"
+               parameter="texture category" />
+            </menu_item_check>
             <menu_item_check
              label="Fast Timers"
              layout="topleft"
@@ -2229,19 +2265,43 @@
              label="Disable Textures"
              name="Disable Textures">
                 <menu_item_check.on_check
-                 function="Advanced.CheckDisableTextures"
-                 parameter="DisableTextures" />
+                 function="CheckControl"
+                 parameter="TextureDisable" />
+                <menu_item_check.on_click
+                 function="ToggleControl" 
+                 parameter="TextureDisable" />
+            </menu_item_check>
+            <menu_item_check
+              label="Full Res Textures"
+             layout="topleft"
+             name="Rull Res Textures">
+                <menu_item_check.on_check
+                 function="CheckControl"
+                 parameter="TextureLoadFullRes" />
                 <menu_item_check.on_click
-                 function="Advanced.ToggleDisableTextures" />
+                 function="ToggleControl"
+                 parameter="TextureLoadFullRes" />
+            </menu_item_check>
+            <menu_item_check
+               label="Audit Textures"
+               layout="topleft"
+               name="Audit Textures">
+              <menu_item_check.on_check
+               function="CheckControl"
+               parameter="AuditTexture" />
+              <menu_item_check.on_click
+               function="ToggleControl"
+               parameter="AuditTexture" />
             </menu_item_check>
             <menu_item_check
              label="Texture Atlas"
              name="Texture Atlas">
               <menu_item_check.on_check
-               function="Advanced.CheckTextureAtlas"
+               function="CheckControl"
                parameter="TextureAtlas" />
               <menu_item_check.on_click
-               function="Advanced.ToggleTextureAtlas" />
+               function="ToggleControl"
+               parameter="TextureAtlas" />
             </menu_item_check>
               <menu_item_check
              label="Render Attached Lights"
diff --git a/indra/newview/tests/lltextureinfo_test.cpp b/indra/newview/tests/lltextureinfo_test.cpp
new file mode 100644
index 00000000000..8dfba46262a
--- /dev/null
+++ b/indra/newview/tests/lltextureinfo_test.cpp
@@ -0,0 +1,284 @@
+/** 
+ * @file llwtextureinfo_test.cpp
+ * @author Si & Gabriel
+ * @date 2009-03-30
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ * 
+ * Copyright (c) 2006-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header: almost always required for newview cpp files
+#include "../llviewerprecompiledheaders.h"
+// Class to test
+#include "../lltextureinfo.h"
+// Dependencies
+#include "../lltextureinfodetails.cpp"
+
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes: 
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+
+namespace tut
+{
+	// Test wrapper declarations
+	struct textureinfo_test
+	{
+		// Constructor and destructor of the test wrapper
+		textureinfo_test()
+		{
+		}
+		~textureinfo_test()
+		{
+		}
+	};
+
+	// Tut templating thingamagic: test group, object and test instance
+	typedef test_group<textureinfo_test> textureinfo_t;
+	typedef textureinfo_t::object textureinfo_object_t;
+	tut::textureinfo_t tut_textureinfo("textureinfo");
+
+	
+	// ---------------------------------------------------------------------------------------
+	// Test functions
+	// Notes:
+	// * Test as many as you possibly can without requiring a full blown simulation of everything
+	// * The tests are executed in sequence so the test instance state may change between calls
+	// * Remember that you cannot test private methods with tut
+	// ---------------------------------------------------------------------------------------
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLTextureInfo
+	// ---------------------------------------------------------------------------------------
+
+
+	// Test instantiation
+	template<> template<>
+	void textureinfo_object_t::test<1>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+		ensure("have we crashed?", true);
+	}
+
+	// Check lltextureinfo does not contain UUIDs we haven't added
+	template<> template<>
+	void textureinfo_object_t::test<2>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID nonExistant("3a0efa3b-84dc-4e17-9b8c-79ea028850c1");
+		ensure(!tex_info.has(nonExistant));
+	}
+
+	// Check we can add a request time for a texture
+	template<> template<>
+	void textureinfo_object_t::test<3>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestStartTime(id, 200);
+
+		ensure_equals(tex_info.getRequestStartTime(id), 200);
+	}
+
+	// Check time for non-existant texture
+	template<> template<>
+	void textureinfo_object_t::test<4>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID nonExistant("3a0efa3b-84dc-4e17-9b8c-79ea028850c1");
+		ensure_equals(tex_info.getRequestStartTime(nonExistant), 0);
+	}
+
+	// Check download complete time for non existant texture
+	template<> template<>
+	void textureinfo_object_t::test<5>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID nonExistant("3a0efa3b-84dc-4e17-9b8c-79ea028850c1");
+		ensure_equals(tex_info.getRequestCompleteTime(nonExistant), 0);
+	}
+
+	// requested size is passed in correctly
+	template<> template<>
+	void textureinfo_object_t::test<6>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestSize(id, 600);
+
+		ensure_equals(tex_info.getRequestSize(id), 600);
+	}
+
+	// transport type is recorded correctly (http)
+	template<> template<>
+	void textureinfo_object_t::test<7>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestType(id, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+
+		ensure_equals(tex_info.getRequestType(id), LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+	}
+
+	// transport type is recorded correctly (udp)
+	template<> template<>
+	void textureinfo_object_t::test<8>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestType(id, LLTextureInfoDetails::REQUEST_TYPE_UDP);
+
+		ensure_equals(tex_info.getRequestType(id), LLTextureInfoDetails::REQUEST_TYPE_UDP);
+	}
+
+	// request offset is recorded correctly
+	template<> template<>
+	void textureinfo_object_t::test<9>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestOffset(id, 1234);
+
+		ensure_equals(tex_info.getRequestOffset(id), 1234);
+	}
+
+	// ask for averages gives us correct figure
+	template<> template<>
+	void textureinfo_object_t::test<10>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		S32 requestStartTimeOne = 200;
+		S32 requestEndTimeOne = 400;
+		S32 requestSizeOne = 1024;
+		S32 requestSizeOneBits = requestSizeOne * 8;
+		LLUUID id1("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestStartTime(id1, requestStartTimeOne);
+		tex_info.setRequestSize(id1, requestSizeOne);
+		tex_info.setRequestType(id1, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+		tex_info.setRequestCompleteTimeAndLog(id1, requestEndTimeOne);
+
+		U32 requestStartTimeTwo = 100;
+		U32 requestEndTimeTwo = 500;
+		U32 requestSizeTwo = 2048;
+		S32 requestSizeTwoBits = requestSizeTwo * 8;
+		LLUUID id2("10e65d70-46fd-429f-841a-bf698e9424d4");
+		tex_info.setRequestStartTime(id2, requestStartTimeTwo);
+		tex_info.setRequestSize(id2, requestSizeTwo);
+		tex_info.setRequestType(id2, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+		tex_info.setRequestCompleteTimeAndLog(id2, requestEndTimeTwo);
+
+		S32 averageBitRate = ((requestSizeOneBits/(requestEndTimeOne - requestStartTimeOne)) +
+							(requestSizeTwoBits/(requestEndTimeTwo - requestStartTimeTwo))) / 2;
+
+		S32 totalBytes = requestSizeOne + requestSizeTwo;
+
+		LLSD results = tex_info.getAverages();
+		ensure_equals("is average bits per second correct", results["bits_per_second"].asInteger(), averageBitRate);
+		ensure_equals("is total bytes is correct", results["bytes_downloaded"].asInteger(), totalBytes);
+		ensure_equals("is transport correct", results["transport"].asString(), std::string("HTTP"));
+	}
+
+	// make sure averages cleared when reset is called
+	template<> template<>
+	void textureinfo_object_t::test<11>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		S32 requestStartTimeOne = 200;
+		S32 requestEndTimeOne = 400;
+		S32 requestSizeOne = 1024;
+		LLUUID id1("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestStartTime(id1, requestStartTimeOne);
+		tex_info.setRequestSize(id1, requestSizeOne);
+		tex_info.setRequestType(id1, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+		tex_info.setRequestCompleteTimeAndLog(id1, requestEndTimeOne);
+
+		tex_info.getAverages();
+		tex_info.reset();
+		LLSD results = tex_info.getAverages();
+		ensure_equals("is average bits per second correct", results["bits_per_second"].asInteger(), 0);
+		ensure_equals("is total bytes is correct", results["bytes_downloaded"].asInteger(), 0);
+		ensure_equals("is transport correct", results["transport"].asString(), std::string("NONE"));
+	}
+
+	// make sure map item removed when expired
+	template<> template<>
+	void textureinfo_object_t::test<12>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		S32 requestStartTimeOne = 200;
+		S32 requestEndTimeOne = 400;
+		S32 requestSizeOne = 1024;
+		LLUUID id1("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestStartTime(id1, requestStartTimeOne);
+		tex_info.setRequestSize(id1, requestSizeOne);
+		tex_info.setRequestType(id1, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+
+		ensure_equals("map item created", tex_info.getTextureInfoMapSize(), 1);
+
+		tex_info.setRequestCompleteTimeAndLog(id1, requestEndTimeOne);
+
+		ensure_equals("map item removed when consumed", tex_info.getTextureInfoMapSize(), 0);
+	}
+}
+
diff --git a/indra/newview/tests/lltextureinfodetails_test.cpp b/indra/newview/tests/lltextureinfodetails_test.cpp
new file mode 100644
index 00000000000..aa2697fb8eb
--- /dev/null
+++ b/indra/newview/tests/lltextureinfodetails_test.cpp
@@ -0,0 +1,98 @@
+/** 
+ * @file llwtextureinfodetails_test.cpp
+ * @author Si & Gabriel
+ * @date 2009-03-30
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ * 
+ * Copyright (c) 2006-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header: almost always required for newview cpp files
+#include "../llviewerprecompiledheaders.h"
+// Class to test
+#include "../lltextureinfodetails.h"
+// Dependencies
+
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes: 
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+
+namespace tut
+{
+	// Test wrapper declarations
+	struct textureinfodetails_test
+	{
+		// Constructor and destructor of the test wrapper
+		textureinfodetails_test()
+		{
+		}
+		~textureinfodetails_test()
+		{
+		}
+	};
+
+	// Tut templating thingamagic: test group, object and test instance
+	typedef test_group<textureinfodetails_test> textureinfodetails_t;
+	typedef textureinfodetails_t::object textureinfodetails_object_t;
+	tut::textureinfodetails_t tut_textureinfodetails("textureinfodetails");
+
+	
+	// ---------------------------------------------------------------------------------------
+	// Test functions
+	// Notes:
+	// * Test as many as you possibly can without requiring a full blown simulation of everything
+	// * The tests are executed in sequence so the test instance state may change between calls
+	// * Remember that you cannot test private methods with tut
+	// ---------------------------------------------------------------------------------------
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLTextureInfo
+	// ---------------------------------------------------------------------------------------
+
+
+	// Test instantiation
+	template<> template<>
+	void textureinfodetails_object_t::test<1>()
+	{
+		ensure("have we crashed?", true);
+	}
+}
diff --git a/indra/newview/tests/lltexturestatsuploader_test.cpp b/indra/newview/tests/lltexturestatsuploader_test.cpp
new file mode 100644
index 00000000000..77a3e2c3d88
--- /dev/null
+++ b/indra/newview/tests/lltexturestatsuploader_test.cpp
@@ -0,0 +1,156 @@
+/** 
+ * @file lltexturestatsuploader_test.cpp
+ * @author Si
+ * @date 2009-05-27
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ * 
+ * Copyright (c) 2006-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header: almost always required for newview cpp files
+#include "../llviewerprecompiledheaders.h"
+// Class to test
+#include "../lltexturestatsuploader.h"
+// Dependencies
+
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes: 
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+#include "boost/intrusive_ptr.hpp"
+void boost::intrusive_ptr_add_ref(LLCurl::Responder*){}
+void boost::intrusive_ptr_release(LLCurl::Responder* p){}
+const F32 HTTP_REQUEST_EXPIRY_SECS = 0.0f;
+
+static std::string most_recent_url;
+static LLSD most_recent_body;
+
+void LLHTTPClient::post(
+		const std::string& url,
+		const LLSD& body,
+		ResponderPtr,
+		const LLSD& headers,
+		const F32 timeout)
+{
+	// set some sensor code
+	most_recent_url = url;
+	most_recent_body = body;
+	return;
+}
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+
+namespace tut
+{
+	// Test wrapper declarations
+	struct texturestatsuploader_test
+	{
+		// Constructor and destructor of the test wrapper
+		texturestatsuploader_test()
+		{
+			most_recent_url = "some sort of default text that should never match anything the tests are expecting!";
+			LLSD blank_llsd;
+			most_recent_body = blank_llsd;
+		}
+		~texturestatsuploader_test()
+		{
+		}
+	};
+
+	// Tut templating thingamagic: test group, object and test instance
+	typedef test_group<texturestatsuploader_test> texturestatsuploader_t;
+	typedef texturestatsuploader_t::object texturestatsuploader_object_t;
+	tut::texturestatsuploader_t tut_texturestatsuploader("texturestatsuploader");
+
+	
+	// ---------------------------------------------------------------------------------------
+	// Test functions
+	// Notes:
+	// * Test as many as you possibly can without requiring a full blown simulation of everything
+	// * The tests are executed in sequence so the test instance state may change between calls
+	// * Remember that you cannot test private methods with tut
+	// ---------------------------------------------------------------------------------------
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLTextureInfo
+	// ---------------------------------------------------------------------------------------
+
+
+	// Test instantiation
+	template<> template<>
+	void texturestatsuploader_object_t::test<1>()
+	{
+		LLTextureStatsUploader tsu;
+		llinfos << &tsu << llendl;
+		ensure("have we crashed?", true);
+	}
+
+	// does it call out to the provided url if we ask it to?
+	template<> template<>
+	void texturestatsuploader_object_t::test<2>()
+	{	
+		LLTextureStatsUploader tsu;
+		std::string url = "http://blahblahblah";
+		LLSD texture_stats;
+		tsu.uploadStatsToSimulator(url, texture_stats);
+		ensure_equals("did the right url get called?", most_recent_url, url);
+		ensure_equals("did the right body get sent?", most_recent_body, texture_stats);
+	}
+
+	// does it not call out to the provided url if we send it an ungranted cap?
+	template<> template<>
+	void texturestatsuploader_object_t::test<3>()
+	{	
+		LLTextureStatsUploader tsu;
+
+		// this url left intentionally blank to mirror
+		// not getting a cap in the caller.
+		std::string url_for_ungranted_cap = ""; 
+							  
+		LLSD texture_stats;
+		std::string most_recent_url_before_test = most_recent_url;
+		tsu.uploadStatsToSimulator(url_for_ungranted_cap, texture_stats);
+
+		ensure_equals("hopefully no url got called!", most_recent_url, most_recent_url_before_test);
+	}
+
+	// does it call out if the data is empty?
+	// should it even do that?
+}
+
diff --git a/indra/newview/tests/llworldmap_test.cpp b/indra/newview/tests/llworldmap_test.cpp
new file mode 100644
index 00000000000..56cf86f6df9
--- /dev/null
+++ b/indra/newview/tests/llworldmap_test.cpp
@@ -0,0 +1,523 @@
+/** 
+ * @file llworldmap_test.cpp
+ * @author Merov Linden
+ * @date 2009-03-09
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ * 
+ * Copyright (c) 2006-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header: almost always required for newview cpp files
+#include "../llviewerprecompiledheaders.h"
+// Class to test
+#include "../llworldmap.h"
+// Dependencies
+#include "../llviewerimagelist.h"
+#include "../llworldmapmessage.h"
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes: 
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+// Stub image calls
+LLViewerImageList::LLViewerImageList() { }
+LLViewerImageList::~LLViewerImageList() { }
+LLViewerImageList gImageList;
+LLViewerImage* LLViewerImageList::getImage(const LLUUID &image_id,
+												   BOOL usemipmaps,
+												   BOOL level_immediate,
+												   LLGLint internal_format,
+												   LLGLenum primary_format,
+												   LLHost request_from_host)
+{ return NULL; }
+void LLViewerImage::setBoostLevel(S32 level) { }
+void LLImageGL::setAddressMode(LLTexUnit::eTextureAddressMode mode) { }
+
+// Stub related map calls
+LLWorldMapMessage::LLWorldMapMessage() { }
+LLWorldMapMessage::~LLWorldMapMessage() { }
+void LLWorldMapMessage::sendItemRequest(U32 type, U64 handle) { }
+void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent) { }
+LLWorldMipmap::LLWorldMipmap() { }
+LLWorldMipmap::~LLWorldMipmap() { }
+void LLWorldMipmap::reset() { }
+void LLWorldMipmap::dropBoostLevels() { }
+void LLWorldMipmap::equalizeBoostLevels() { }
+LLPointer<LLViewerImage> LLWorldMipmap::getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load)
+{ return NULL; }
+
+// Stub other stuff
+BOOL gPacificDaylightTime;
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+
+const F32 X_WORLD_TEST = 1000.0f * REGION_WIDTH_METERS;
+const F32 Y_WORLD_TEST = 2000.0f * REGION_WIDTH_METERS;
+const F32 Z_WORLD_TEST = 240.0f;
+const std::string ITEM_NAME_TEST = "Item Foo";
+const std::string TOOLTIP_TEST = "Tooltip Foo";
+
+const std::string SIM_NAME_TEST = "Sim Foo";
+
+namespace tut
+{
+	// Test wrapper declarations
+	struct iteminfo_test
+	{
+		// Instance to be tested
+		LLItemInfo* mItem;
+
+		// Constructor and destructor of the test wrapper
+		iteminfo_test()
+		{
+			LLUUID id;
+			mItem = new LLItemInfo(X_WORLD_TEST, Y_WORLD_TEST, ITEM_NAME_TEST, id);
+		}
+		~iteminfo_test()
+		{
+			delete mItem;
+		}
+	};
+
+	struct siminfo_test
+	{
+		// Instance to be tested
+		LLSimInfo* mSim;
+
+		// Constructor and destructor of the test wrapper
+		siminfo_test()
+		{
+			U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
+			mSim = new LLSimInfo(handle);
+		}
+		~siminfo_test()
+		{
+			delete mSim;
+		}
+	};
+
+	struct worldmap_test
+	{
+		// Instance to be tested
+		LLWorldMap* mWorld;
+
+		// Constructor and destructor of the test wrapper
+		worldmap_test()
+		{
+			mWorld = LLWorldMap::getInstance();
+		}
+		~worldmap_test()
+		{
+			mWorld = NULL;
+		}
+	};
+
+	// Tut templating thingamagic: test group, object and test instance
+	typedef test_group<iteminfo_test> iteminfo_t;
+	typedef iteminfo_t::object iteminfo_object_t;
+	tut::iteminfo_t tut_iteminfo("iteminfo");
+
+	typedef test_group<siminfo_test> siminfo_t;
+	typedef siminfo_t::object siminfo_object_t;
+	tut::siminfo_t tut_siminfo("siminfo");
+
+	typedef test_group<worldmap_test> worldmap_t;
+	typedef worldmap_t::object worldmap_object_t;
+	tut::worldmap_t tut_worldmap("worldmap");
+
+	// ---------------------------------------------------------------------------------------
+	// Test functions
+	// Notes:
+	// * Test as many as you possibly can without requiring a full blown simulation of everything
+	// * The tests are executed in sequence so the test instance state may change between calls
+	// * Remember that you cannot test private methods with tut
+	// ---------------------------------------------------------------------------------------
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLItemInfo interface
+	// ---------------------------------------------------------------------------------------
+	template<> template<>
+	void iteminfo_object_t::test<1>()
+	{
+		// Test 1 : setCount() / getCount()
+		mItem->setCount(10);
+		ensure("LLItemInfo::setCount() test failed", mItem->getCount() == 10);
+		// Test 2 : setTooltip() / getToolTip()
+		std::string tooltip = TOOLTIP_TEST;
+		mItem->setTooltip(tooltip);
+		ensure("LLItemInfo::setTooltip() test failed", mItem->getToolTip() == TOOLTIP_TEST);
+		// Test 3 : setElevation() / getGlobalPosition()
+		mItem->setElevation(Z_WORLD_TEST);
+		LLVector3d pos = mItem->getGlobalPosition();
+		LLVector3d ref(X_WORLD_TEST, Y_WORLD_TEST, Z_WORLD_TEST);
+		ensure("LLItemInfo::getGlobalPosition() test failed", pos == ref);
+		// Test 4 : getName()
+		std::string name = mItem->getName();
+		ensure("LLItemInfo::getName() test failed", name == ITEM_NAME_TEST);
+		// Test 5 : isName()
+		ensure("LLItemInfo::isName() test failed", mItem->isName(name));
+		// Test 6 : getUUID()
+		LLUUID id;
+		ensure("LLItemInfo::getUUID() test failed", mItem->getUUID() == id);
+		// Test 7 : getRegionHandle()
+		U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
+		ensure("LLItemInfo::getRegionHandle() test failed", mItem->getRegionHandle() == handle);
+	}
+	// ---------------------------------------------------------------------------------------
+	// Test the LLSimInfo interface
+	// ---------------------------------------------------------------------------------------
+	// Test Setters and Accessors methods
+	template<> template<>
+	void siminfo_object_t::test<1>()
+	{
+		// Test 1 : setName() / getName()
+		std::string name = SIM_NAME_TEST;
+		mSim->setName(name);
+		ensure("LLSimInfo::setName() test failed", mSim->getName() == SIM_NAME_TEST);
+		// Test 2 : isName()
+		ensure("LLSimInfo::isName() test failed", mSim->isName(name));
+		// Test 3 : getGlobalPos()
+		LLVector3 local;
+		LLVector3d ref(X_WORLD_TEST, Y_WORLD_TEST, 0.0f);
+		LLVector3d pos = mSim->getGlobalPos(local);
+		ensure("LLSimInfo::getGlobalPos() test failed", pos == ref);
+		// Test 4 : getGlobalOrigin()
+		pos = mSim->getGlobalOrigin();
+		ensure("LLSimInfo::getGlobalOrigin() test failed", pos == ref);
+		// Test 5 : clearImage()
+		try {
+			mSim->clearImage();
+		} catch (...) {
+			fail("LLSimInfo::clearImage() test failed");
+		}
+		// Test 6 : dropImagePriority()
+		try {
+			mSim->dropImagePriority();
+		} catch (...) {
+			fail("LLSimInfo::dropImagePriority() test failed");
+		}
+		// Test 7 : updateAgentCount()
+		try {
+			mSim->updateAgentCount(0.0f);
+		} catch (...) {
+			fail("LLSimInfo::updateAgentCount() test failed");
+		}
+		// Test 8 : getAgentCount()
+		S32 agents = mSim->getAgentCount();
+		ensure("LLSimInfo::getAgentCount() test failed", agents == 0);
+		// Test 9 : setLandForSaleImage() / getLandForSaleImage()
+		LLUUID id;
+		mSim->setLandForSaleImage(id);
+		LLPointer<LLViewerImage> image = mSim->getLandForSaleImage();
+		ensure("LLSimInfo::getLandForSaleImage() test failed", image.isNull());
+		// Test 10 : isPG()
+		mSim->setAccess(SIM_ACCESS_PG);
+		ensure("LLSimInfo::isPG() test failed", mSim->isPG());
+		// Test 11 : isDown()
+		mSim->setAccess(SIM_ACCESS_DOWN);
+		ensure("LLSimInfo::isDown() test failed", mSim->isDown());
+		// Test 12 : Access strings can't be accessed from unit test...
+		//ensure("LLSimInfo::getAccessString() test failed", mSim->getAccessString() == "Offline");
+		// Test 13 : Region strings can't be accessed from unit test...
+		//mSim->setRegionFlags(REGION_FLAGS_SANDBOX);
+		//ensure("LLSimInfo::setRegionFlags() test failed", mSim->getFlagsString() == "Sandbox");
+	}
+	// Test management of LLInfoItem lists
+	template<> template<>
+	void siminfo_object_t::test<2>()
+	{
+		// Test 14 : clearItems()
+		try {
+			mSim->clearItems();
+		} catch (...) {
+			fail("LLSimInfo::clearItems() at init test failed");
+		}
+
+		// Test 15 : Verify that all the lists are empty
+		LLSimInfo::item_info_list_t list;
+		list = mSim->getTeleHub();
+		ensure("LLSimInfo::getTeleHub() empty at init test failed", list.empty());
+		list = mSim->getInfoHub();
+		ensure("LLSimInfo::getInfoHub() empty at init test failed", list.empty());
+		list = mSim->getPGEvent();
+		ensure("LLSimInfo::getPGEvent() empty at init test failed", list.empty());
+		list = mSim->getMatureEvent();
+		ensure("LLSimInfo::getMatureEvent() empty at init test failed", list.empty());
+		list = mSim->getLandForSale();
+		ensure("LLSimInfo::getLandForSale() empty at init test failed", list.empty());
+		list = mSim->getAgentLocation();
+		ensure("LLSimInfo::getAgentLocation() empty at init test failed", list.empty());
+
+		// Create an item to be inserted
+		LLUUID id;
+		LLItemInfo item(X_WORLD_TEST, Y_WORLD_TEST, ITEM_NAME_TEST, id);
+
+		// Insert the item in each list
+		mSim->insertTeleHub(item);
+		mSim->insertInfoHub(item);
+		mSim->insertPGEvent(item);
+		mSim->insertMatureEvent(item);
+		mSim->insertLandForSale(item);
+		mSim->insertAgentLocation(item);
+
+		// Test 16 : Verify that the lists contain 1 item each
+		list = mSim->getTeleHub();
+		ensure("LLSimInfo::insertTeleHub() test failed", list.size() == 1);
+		list = mSim->getInfoHub();
+		ensure("LLSimInfo::insertInfoHub() test failed", list.size() == 1);
+		list = mSim->getPGEvent();
+		ensure("LLSimInfo::insertPGEvent() test failed", list.size() == 1);
+		list = mSim->getMatureEvent();
+		ensure("LLSimInfo::insertMatureEvent() test failed", list.size() == 1);
+		list = mSim->getLandForSale();
+		ensure("LLSimInfo::insertLandForSale() test failed", list.size() == 1);
+		list = mSim->getAgentLocation();
+		ensure("LLSimInfo::insertAgentLocation() test failed", list.size() == 1);
+
+		// Test 17 : clearItems()
+		try {
+			mSim->clearItems();
+		} catch (...) {
+			fail("LLSimInfo::clearItems() at end test failed");
+		}
+
+		// Test 18 : Verify that all the lists are empty again... *except* agent which is persisted!! (on purpose)
+		list = mSim->getTeleHub();
+		ensure("LLSimInfo::getTeleHub() empty after clear test failed", list.empty());
+		list = mSim->getInfoHub();
+		ensure("LLSimInfo::getInfoHub() empty after clear test failed", list.empty());
+		list = mSim->getPGEvent();
+		ensure("LLSimInfo::getPGEvent() empty after clear test failed", list.empty());
+		list = mSim->getMatureEvent();
+		ensure("LLSimInfo::getMatureEvent() empty after clear test failed", list.empty());
+		list = mSim->getLandForSale();
+		ensure("LLSimInfo::getLandForSale() empty after clear test failed", list.empty());
+		list = mSim->getAgentLocation();
+		ensure("LLSimInfo::getAgentLocation() empty after clear test failed", list.size() == 1);
+	}
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLWorldMap interface
+	// ---------------------------------------------------------------------------------------
+	// Test Setters and Accessors methods
+	template<> template<>
+	void worldmap_object_t::test<1>()
+	{
+		// Test 1 : reset()
+		try {
+			mWorld->reset();
+		} catch (...) {
+			fail("LLWorldMap::reset() at init test failed");
+		}
+		// Test 2 : clearImageRefs()
+		try {
+			mWorld->clearImageRefs();
+		} catch (...) {
+			fail("LLWorldMap::clearImageRefs() test failed");
+		}
+		// Test 3 : dropImagePriorities()
+		try {
+			mWorld->dropImagePriorities();
+		} catch (...) {
+			fail("LLWorldMap::dropImagePriorities() test failed");
+		}
+		// Test 4 : reloadItems()
+		try {
+			mWorld->reloadItems(true);
+		} catch (...) {
+			fail("LLWorldMap::reloadItems() test failed");
+		}
+		// Test 5 : updateRegions()
+		try {
+			mWorld->updateRegions(1000, 1000, 1004, 1004);
+		} catch (...) {
+			fail("LLWorldMap::updateRegions() test failed");
+		}
+		// Test 6 : equalizeBoostLevels()
+ 		try {
+ 			mWorld->equalizeBoostLevels();
+ 		} catch (...) {
+ 			fail("LLWorldMap::equalizeBoostLevels() test failed");
+ 		}
+		// Test 7 : getObjectsTile()
+		try {
+			LLPointer<LLViewerImage> image = mWorld->getObjectsTile((U32)(X_WORLD_TEST/REGION_WIDTH_METERS), (U32)(Y_WORLD_TEST/REGION_WIDTH_METERS), 1);
+			ensure("LLWorldMap::getObjectsTile() failed", image.isNull());
+		} catch (...) {
+			fail("LLWorldMap::getObjectsTile() test failed with exception");
+		}
+	}
+	// Test management of LLSimInfo lists
+	template<> template<>
+	void worldmap_object_t::test<2>()
+	{
+		// Test 8 : reset()
+		try {
+			mWorld->reset();
+		} catch (...) {
+			fail("LLWorldMap::reset() at init test failed");
+		}
+
+		// Test 9 : Verify that all the region list is empty
+		LLWorldMap::sim_info_map_t list;
+		list = mWorld->getRegionMap();
+		ensure("LLWorldMap::getRegionMap() empty at init test failed", list.empty());
+
+		// Test 10 : Insert a region
+		bool success;
+		LLUUID id;
+		std::string name_sim = SIM_NAME_TEST;
+		success = mWorld->insertRegion(	U32(X_WORLD_TEST), 
+						U32(Y_WORLD_TEST), 
+										name_sim,
+										id,
+										SIM_ACCESS_PG,
+										REGION_FLAGS_SANDBOX);
+		list = mWorld->getRegionMap();
+		ensure("LLWorldMap::insertRegion() failed", success && (list.size() == 1));
+
+		// Test 11 : Insert an item in the same region -> number of regions doesn't increase
+		std::string name_item = ITEM_NAME_TEST;
+		success = mWorld->insertItem(	U32(X_WORLD_TEST + REGION_WIDTH_METERS/2),
+						U32(Y_WORLD_TEST + REGION_WIDTH_METERS/2), 
+										name_item,
+										id,
+										MAP_ITEM_LAND_FOR_SALE,
+										0, 0);
+		list = mWorld->getRegionMap();
+		ensure("LLWorldMap::insertItem() in existing region failed", success && (list.size() == 1));
+
+		// Test 12 : Insert an item in another region -> number of regions increases
+		success = mWorld->insertItem(	U32(X_WORLD_TEST + REGION_WIDTH_METERS*2), 
+						U32(Y_WORLD_TEST + REGION_WIDTH_METERS*2), 
+										name_item,
+										id,
+										MAP_ITEM_LAND_FOR_SALE,
+										0, 0);
+		list = mWorld->getRegionMap();
+		ensure("LLWorldMap::insertItem() in unexisting region failed", success && (list.size() == 2));
+
+		// Test 13 : simInfoFromPosGlobal() in region
+		LLVector3d pos1(	X_WORLD_TEST + REGION_WIDTH_METERS*2 + REGION_WIDTH_METERS/2, 
+							Y_WORLD_TEST + REGION_WIDTH_METERS*2 + REGION_WIDTH_METERS/2, 
+							0.0f);
+		LLSimInfo* sim;
+		sim = mWorld->simInfoFromPosGlobal(pos1);
+		ensure("LLWorldMap::simInfoFromPosGlobal() test on existing region failed", sim != NULL);
+
+		// Test 14 : simInfoFromPosGlobal() outside region
+		LLVector3d pos2(	X_WORLD_TEST + REGION_WIDTH_METERS*4 + REGION_WIDTH_METERS/2, 
+							Y_WORLD_TEST + REGION_WIDTH_METERS*4 + REGION_WIDTH_METERS/2, 
+							0.0f);
+		sim = mWorld->simInfoFromPosGlobal(pos2);
+		ensure("LLWorldMap::simInfoFromPosGlobal() test outside region failed", sim == NULL);
+
+		// Test 15 : simInfoFromName()
+		sim = mWorld->simInfoFromName(name_sim);
+		ensure("LLWorldMap::simInfoFromName() test on existing region failed", sim != NULL);
+
+		// Test 16 : simInfoFromHandle()
+		U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
+		sim = mWorld->simInfoFromHandle(handle);
+		ensure("LLWorldMap::simInfoFromHandle() test on existing region failed", sim != NULL);
+
+		// Test 17 : simNameFromPosGlobal()
+		LLVector3d pos3(	X_WORLD_TEST + REGION_WIDTH_METERS/2, 
+							Y_WORLD_TEST + REGION_WIDTH_METERS/2, 
+							0.0f);
+		success = mWorld->simNameFromPosGlobal(pos3, name_sim);
+		ensure("LLWorldMap::simNameFromPosGlobal() test on existing region failed", success && (name_sim == SIM_NAME_TEST));
+		
+		// Test 18 : reset()
+		try {
+			mWorld->reset();
+		} catch (...) {
+			fail("LLWorldMap::reset() at end test failed");
+		}
+
+		// Test 19 : Verify that all the region list is empty
+		list = mWorld->getRegionMap();
+		ensure("LLWorldMap::getRegionMap() empty at end test failed", list.empty());
+	}
+	// Test tracking
+	template<> template<>
+	void worldmap_object_t::test<3>()
+	{
+		// Point to track
+		LLVector3d pos( X_WORLD_TEST + REGION_WIDTH_METERS/2, Y_WORLD_TEST + REGION_WIDTH_METERS/2, Z_WORLD_TEST);
+
+		// Test 20 : no tracking
+		mWorld->cancelTracking();
+		ensure("LLWorldMap::cancelTracking() at begin test failed", mWorld->isTracking() == false);
+
+		// Test 21 : set tracking
+		mWorld->setTracking(pos);
+		ensure("LLWorldMap::setTracking() failed", mWorld->isTracking() && !mWorld->isTrackingValidLocation());
+
+		// Test 22 : set click and commit flags
+		mWorld->setTrackingDoubleClick();
+		ensure("LLWorldMap::setTrackingDoubleClick() failed", mWorld->isTrackingDoubleClick());
+		mWorld->setTrackingCommit();
+		ensure("LLWorldMap::setTrackingCommit() failed", mWorld->isTrackingCommit());
+
+		// Test 23 : in rectangle test
+		bool inRect = mWorld->isTrackingInRectangle(	X_WORLD_TEST, Y_WORLD_TEST,  
+														X_WORLD_TEST + REGION_WIDTH_METERS, 
+														Y_WORLD_TEST + REGION_WIDTH_METERS);
+		ensure("LLWorldMap::isTrackingInRectangle() in rectangle failed", inRect);
+		inRect = mWorld->isTrackingInRectangle(			X_WORLD_TEST + REGION_WIDTH_METERS, 
+														Y_WORLD_TEST + REGION_WIDTH_METERS,  
+														X_WORLD_TEST + 2 * REGION_WIDTH_METERS, 
+														Y_WORLD_TEST + 2 * REGION_WIDTH_METERS);
+		ensure("LLWorldMap::isTrackingInRectangle() outside rectangle failed", !inRect);
+
+		// Test 24 : set tracking to valid and invalid
+		mWorld->setTrackingValid();
+		ensure("LLWorldMap::setTrackingValid() failed", mWorld->isTrackingValidLocation() && !mWorld->isTrackingInvalidLocation());
+		mWorld->setTrackingInvalid();
+		ensure("LLWorldMap::setTrackingInvalid() failed", !mWorld->isTrackingValidLocation() && mWorld->isTrackingInvalidLocation());
+
+		// Test 25 : getTrackedPositionGlobal()
+		LLVector3d res = mWorld->getTrackedPositionGlobal();
+		ensure("LLWorldMap::getTrackedPositionGlobal() failed", res == pos);
+
+		// Test 26 : reset tracking
+		mWorld->cancelTracking();
+		ensure("LLWorldMap::cancelTracking() at end test failed", mWorld->isTracking() == false);
+	}
+}
diff --git a/indra/newview/tests/llworldmipmap_test.cpp b/indra/newview/tests/llworldmipmap_test.cpp
new file mode 100644
index 00000000000..9938175c558
--- /dev/null
+++ b/indra/newview/tests/llworldmipmap_test.cpp
@@ -0,0 +1,176 @@
+/** 
+ * @file llworldmipmap_test.cpp
+ * @author Merov Linden
+ * @date 2009-02-03
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ * 
+ * Copyright (c) 2006-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header: almost always required for newview cpp files
+#include "../llviewerprecompiledheaders.h"
+// Class to test
+#include "../llworldmipmap.h"
+// Dependencies
+#include "../llviewerimagelist.h"
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes: 
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+LLViewerImageList::LLViewerImageList() { }
+LLViewerImageList::~LLViewerImageList() { }
+
+LLViewerImageList gImageList;
+
+LLViewerImage* LLViewerImageList::getImageFromUrl(const std::string& url,
+												   BOOL usemipmaps,
+												   BOOL level_immediate,
+												   LLGLint internal_format,
+												   LLGLenum primary_format, 
+												   const LLUUID& force_id)
+{ return NULL; }
+void LLViewerImage::setBoostLevel(S32 level) { }
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+namespace tut
+{
+	// Test wrapper declaration
+	struct worldmipmap_test
+	{
+		// Derived test class
+		class LLTestWorldMipmap : public LLWorldMipmap
+		{
+			// Put here stubbs of virtual methods we shouldn't call all the way down
+		};
+		// Instance to be tested
+		LLTestWorldMipmap* mMap;
+
+		// Constructor and destructor of the test wrapper
+		worldmipmap_test()
+		{
+			mMap = new LLTestWorldMipmap;
+		}
+		~worldmipmap_test()
+		{
+			delete mMap;
+		}
+	};
+
+	// Tut templating thingamagic: test group, object and test instance
+	typedef test_group<worldmipmap_test> worldmipmap_t;
+	typedef worldmipmap_t::object worldmipmap_object_t;
+	tut::worldmipmap_t tut_worldmipmap("worldmipmap");
+
+	// ---------------------------------------------------------------------------------------
+	// Test functions
+	// Notes:
+	// * Test as many as you possibly can without requiring a full blown simulation of everything
+	// * The tests are executed in sequence so the test instance state may change between calls
+	// * Remember that you cannot test private methods with tut
+	// ---------------------------------------------------------------------------------------
+	// Test static methods
+	// Test 1 : scaleToLevel()
+	template<> template<>
+	void worldmipmap_object_t::test<1>()
+	{
+		S32 level = mMap->scaleToLevel(0.0);
+		ensure("scaleToLevel() test 1 failed", level == LLWorldMipmap::MAP_LEVELS);
+		level = mMap->scaleToLevel(LLWorldMipmap::MAP_TILE_SIZE);
+		ensure("scaleToLevel() test 2 failed", level == 1);
+		level = mMap->scaleToLevel(10 * LLWorldMipmap::MAP_TILE_SIZE);
+		ensure("scaleToLevel() test 3 failed", level == 1);
+	}
+	// Test 2 : globalToMipmap()
+	template<> template<>
+	void worldmipmap_object_t::test<2>()
+	{
+		U32 grid_x, grid_y;
+		mMap->globalToMipmap(1000.f*REGION_WIDTH_METERS, 1000.f*REGION_WIDTH_METERS, 1, &grid_x, &grid_y);
+		ensure("globalToMipmap() test 1 failed", (grid_x == 1000) && (grid_y == 1000));
+		mMap->globalToMipmap(0.0, 0.0, LLWorldMipmap::MAP_LEVELS, &grid_x, &grid_y);
+		ensure("globalToMipmap() test 2 failed", (grid_x == 0) && (grid_y == 0));
+	}
+	// Test 3 : getObjectsTile()
+	template<> template<>
+	void worldmipmap_object_t::test<3>()
+	{
+		// Depends on some inline methods in LLViewerImage... Thinking about how to make this work
+		// LLPointer<LLViewerImage> img = mMap->getObjectsTile(0, 0, 1);
+		// ensure("getObjectsTile() test failed", img.isNull());
+	}
+	// Test 4 : equalizeBoostLevels()
+	template<> template<>
+	void worldmipmap_object_t::test<4>()
+	{
+		try
+		{
+			mMap->equalizeBoostLevels();
+		} 
+		catch (...)
+		{
+			fail("equalizeBoostLevels() test failed");
+		}
+	}
+	// Test 5 : dropBoostLevels()
+	template<> template<>
+	void worldmipmap_object_t::test<5>()
+	{
+		try
+		{
+			mMap->dropBoostLevels();
+		} 
+		catch (...)
+		{
+			fail("dropBoostLevels() test failed");
+		}
+	}
+	// Test 6 : reset()
+	template<> template<>
+	void worldmipmap_object_t::test<6>()
+	{
+		try
+		{
+			mMap->reset();
+		} 
+		catch (...)
+		{
+			fail("reset() test failed");
+		}
+	}
+}
diff --git a/install.xml b/install.xml
index 44224664cae..5349932d001 100644
--- a/install.xml
+++ b/install.xml
@@ -132,9 +132,9 @@
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>6a53b02a07527de680f1336e20f74f08</string>
+            <string>70b51d0cc93c305026e4e2778cde6d19</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.4.0-windows-20080723.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.6.0-windows-20090722.tar.bz2</uri>
           </map>
         </map>
       </map>
@@ -254,9 +254,9 @@
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>8c9d135f0e7cd1fae5681d4595942ee3</string>
+            <string>f6cb20db3ace7f6f25053b7a97b797f4</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.16.4-windows-20090306.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.19.6-windows-20090722.tar.bz2</uri>
           </map>
         </map>
       </map>
-- 
GitLab


From 56281befc1815fb26c25c75b8bf9f0295f43e319 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Fri, 6 Nov 2009 12:06:35 +0000
Subject: [PATCH 210/306] fix the Ext-2191 linux compile failure

min->llmin, max->llmax
---
 indra/newview/llvowlsky.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp
index 7a7538ae629..d3238f16a8a 100644
--- a/indra/newview/llvowlsky.cpp
+++ b/indra/newview/llvowlsky.cpp
@@ -49,12 +49,12 @@ const U32 LLVOWLSky::MAX_SKY_DETAIL = 180;
 
 inline U32 LLVOWLSky::getNumStacks(void)
 {
-	return min(MAX_SKY_DETAIL, max(MIN_SKY_DETAIL, gSavedSettings.getU32("WLSkyDetail")));
+	return llmin(MAX_SKY_DETAIL, llmax(MIN_SKY_DETAIL, gSavedSettings.getU32("WLSkyDetail")));
 }
 
 inline U32 LLVOWLSky::getNumSlices(void)
 {
-	return 2 * min(MAX_SKY_DETAIL, max(MIN_SKY_DETAIL, gSavedSettings.getU32("WLSkyDetail")));
+	return 2 * llmin(MAX_SKY_DETAIL, llmax(MIN_SKY_DETAIL, gSavedSettings.getU32("WLSkyDetail")));
 }
 
 inline U32 LLVOWLSky::getFanNumVerts(void)
-- 
GitLab


From 1c591c06b72d222cff7775ef3aa067cba9c52cd3 Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Fri, 6 Nov 2009 12:08:15 +0000
Subject: [PATCH 211/306] EXT-2232: Arghhh! Code Duplication == Bugs.

Apparently, pre-login notifications use LLAlertDialog, but post-login
notifications use LLToastAlertPanel. The latter is basically a copy
and paste of the former, with some local modifications. However, the
person who copy/pasted the code did not initialize the URLLoader
callback, so all notifications that tried to open a web page on a
button click after login were failing.

I've added comments that this code should be refactored, preferably as
a subclass of LLAlertDialog. In the meantime, I've tried to clean it
up a bit by not duplicating the nested URLLoader class (which would've
required further duplication to reimplement the exact same loader class
that LLAlertDialog uses). This let me then initialize the URLLoader
callback for LLToastAlertPanel, to fix this specific bug.

Again... arghhh!!
---
 indra/newview/lltoastalertpanel.cpp |  5 ++++-
 indra/newview/lltoastalertpanel.h   | 16 +++++++---------
 indra/newview/llweb.cpp             |  4 +++-
 3 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
index e4a3f8603b8..beb31bc8334 100644
--- a/indra/newview/lltoastalertpanel.cpp
+++ b/indra/newview/lltoastalertpanel.cpp
@@ -30,6 +30,9 @@
  * $/LicenseInfo$
  */
 
+// *NOTE: this module is a copy-paste of llui/llalertdialog.h
+// Can we re-implement this as a subclass of LLAlertDialog and
+// avoid all this code duplication? It already caused EXT-2232.
 
 #include "llviewerprecompiledheaders.h" // must be first include
 
@@ -56,7 +59,7 @@ const F32 DEFAULT_BUTTON_DELAY = 0.5f;
 const S32 MSG_PAD = 8;
 
 /*static*/ LLControlGroup* LLToastAlertPanel::sSettings = NULL;
-/*static*/ LLToastAlertPanel::URLLoader* LLToastAlertPanel::sURLLoader;
+/*static*/ LLAlertURLLoader* LLToastAlertPanel::sURLLoader;
 
 //-----------------------------------------------------------------------------
 // Private methods
diff --git a/indra/newview/lltoastalertpanel.h b/indra/newview/lltoastalertpanel.h
index af0c9a9ddd9..840143a2a93 100644
--- a/indra/newview/lltoastalertpanel.h
+++ b/indra/newview/lltoastalertpanel.h
@@ -30,6 +30,10 @@
  * $/LicenseInfo$
  */
 
+// *NOTE: this module is a copy-paste of llui/llalertdialog.h
+// Can we re-implement this as a subclass of LLAlertDialog and
+// avoid all this code duplication? It already caused EXT-2232.
+
 #ifndef LL_TOASTALERTPANEL_H
 #define LL_TOASTALERTPANEL_H
 
@@ -37,6 +41,7 @@
 #include "llfloater.h"
 #include "llui.h"
 #include "llnotifications.h"
+#include "llalertdialog.h"
 
 class LLButton;
 class LLCheckBoxCtrl;
@@ -57,14 +62,7 @@ class LLToastAlertPanel
 public:
 	typedef bool (*display_callback_t)(S32 modal);
 
-	class URLLoader
-	{
-	public:
-		virtual void load(const std::string& url,  bool force_open_externally = 0 ) = 0;
-		virtual ~URLLoader() {}
-	};
-	
-	static void setURLLoader(URLLoader* loader)
+	static void setURLLoader(LLAlertURLLoader* loader)
 	{
 		sURLLoader = loader;
 	}
@@ -97,7 +95,7 @@ class LLToastAlertPanel
 	BOOL hasTitleBar() const;
 
 private:
-	static URLLoader* sURLLoader;
+	static LLAlertURLLoader* sURLLoader;
 	static LLControlGroup* sSettings;
 
 	struct ButtonData
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index 3204c2d2642..72431bd22f2 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -43,8 +43,9 @@
 #include "llfloatermediabrowser.h"
 #include "llfloaterreg.h"
 #include "llalertdialog.h"
+#include "lltoastalertpanel.h"
 
-class URLLoader : public LLAlertDialog::URLLoader
+class URLLoader : public LLAlertURLLoader
 {
 	virtual void load(const std::string& url , bool force_open_externally)
 	{
@@ -65,6 +66,7 @@ static URLLoader sAlertURLLoader;
 void LLWeb::initClass()
 {
 	LLAlertDialog::setURLLoader(&sAlertURLLoader);
+	LLToastAlertPanel::setURLLoader(&sAlertURLLoader);
 }
 
 
-- 
GitLab


From bc3377c1f6ed295afd7636d907702976adfd846d Mon Sep 17 00:00:00 2001
From: Eugene Kondrashev <ekondrashev@productengine.com>
Date: Fri, 6 Nov 2009 14:49:35 +0200
Subject: [PATCH 212/306] Partial implementation of EXT-1906 All speakers
 handling functional in old IM Floaters (Communicate) should be present in new
 IM Floaters/IM control panels, EXCLUDING voice related mute/moderation stuff

--HG--
branch : product-engine
---
 indra/newview/llimfloater.cpp                 | 31 ++++++++++++++-
 indra/newview/llimfloater.h                   |  1 +
 indra/newview/llimview.cpp                    | 38 ++++++++++++-------
 indra/newview/llimview.h                      |  1 +
 .../newview/skins/default/xui/en/strings.xml  |  2 +
 5 files changed, 57 insertions(+), 16 deletions(-)

diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 85863ed85bf..720cea8b1ac 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -235,7 +235,7 @@ BOOL LLIMFloater::postBuild()
 
 	std::string session_name(LLIMModel::instance().getName(mSessionID));
 
-	mInputEditor->setLabel(mInputEditor->getLabel() + " " + session_name);
+	mInputEditor->setLabel(LLTrans::getString("IM_default_text_label"));
 
 	LLStringUtil::toUpper(session_name);
 	setTitle(session_name);
@@ -498,7 +498,8 @@ void LLIMFloater::onInputEditorFocusReceived( LLFocusableElement* caller, void*
 	// Allow enabling the LLIMFloater input editor only if session can accept text
 	LLIMModel::LLIMSession* im_session =
 		LLIMModel::instance().findIMSession(self->mSessionID);
-	if( im_session && im_session->mTextIMPossible )
+	//TODO: While disabled lllineeditor can receive focus we need to check if it is enabled (EK)
+	if( im_session && im_session->mTextIMPossible && !self->mInputEditor->getEnabled())
 	{
 		//in disconnected state IM input editor should be disabled
 		self->mInputEditor->setEnabled(!gDisconnected);
@@ -588,6 +589,32 @@ void LLIMFloater::processIMTyping(const LLIMInfo* im_info, BOOL typing)
 	}
 }
 
+void LLIMFloater::processAgentListUpdates(const LLSD& body)
+{
+	if ( !body.isMap() ) return;
+
+	if ( body.has("agent_updates") && body["agent_updates"].isMap() )
+	{
+		LLSD agent_data = body["agent_updates"].get(gAgentID.asString());
+		if (agent_data.isMap() && agent_data.has("info"))
+		{
+			LLSD agent_info = agent_data["info"];
+
+			if (agent_info.has("mutes"))
+			{
+				BOOL moderator_muted_text = agent_info["mutes"]["text"].asBoolean(); 
+				mInputEditor->setEnabled(!moderator_muted_text);
+				std::string label;
+				if (moderator_muted_text)
+					label = LLTrans::getString("IM_muted_text_label");
+				else
+					label = LLTrans::getString("IM_default_text_label");
+				mInputEditor->setLabel(label);
+			}
+		}
+	}
+}
+
 void LLIMFloater::processSessionUpdate(const LLSD& session_update)
 {
 	// *TODO : verify following code when moderated mode will be implemented
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index f5edb3188ab..065441b1889 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -90,6 +90,7 @@ class LLIMFloater : public LLTransientDockableFloater
 
 	void onVisibilityChange(const LLSD& new_visibility);
 	void processIMTyping(const LLIMInfo* im_info, BOOL typing);
+	void processAgentListUpdates(const LLSD& body);
 	void processSessionUpdate(const LLSD& session_update);
 
 	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 7e8701bf212..095a18f3227 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1848,6 +1848,29 @@ void LLIMMgr::clearPendingInvitation(const LLUUID& session_id)
 	}
 }
 
+void LLIMMgr::processAgentListUpdates(const LLUUID& session_id, const LLSD& body)
+{
+	LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);
+	if ( im_floater )
+	{
+		im_floater->processAgentListUpdates(body);
+	}
+	LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id);
+	if (speaker_mgr)
+	{
+		speaker_mgr->updateSpeakers(body);
+	}
+	else
+	{
+		//we don't have a speaker manager yet..something went wrong
+		//we are probably receiving an update here before
+		//a start or an acceptance of an invitation.  Race condition.
+		gIMMgr->addPendingAgentListUpdates(
+			session_id,
+			body);
+	}
+}
+
 LLSD LLIMMgr::getPendingAgentListUpdates(const LLUUID& session_id)
 {
 	if ( mPendingAgentListUpdates.has(session_id.asString()) )
@@ -2232,20 +2255,7 @@ class LLViewerChatterBoxSessionAgentListUpdates : public LLHTTPNode
 		const LLSD& input) const
 	{
 		const LLUUID& session_id = input["body"]["session_id"].asUUID();
-		LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id);
-		if (speaker_mgr)
-		{
-			speaker_mgr->updateSpeakers(input["body"]);
-		}
-		else
-		{
-			//we don't have a speaker manager yet..something went wrong
-			//we are probably receiving an update here before
-			//a start or an acceptance of an invitation.  Race condition.
-			gIMMgr->addPendingAgentListUpdates(
-				input["body"]["session_id"].asUUID(),
-				input["body"]);
-		}
+		gIMMgr->processAgentListUpdates(session_id, input["body"]);
 	}
 };
 
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index f986d9dcdbe..769d49f388b 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -315,6 +315,7 @@ class LLIMMgr : public LLSingleton<LLIMMgr>
 
 	void clearPendingInvitation(const LLUUID& session_id);
 
+	void processAgentListUpdates(const LLUUID& session_id, const LLSD& body);
 	LLSD getPendingAgentListUpdates(const LLUUID& session_id);
 	void addPendingAgentListUpdates(
 		const LLUUID& sessioN_id,
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index ec2673644f0..101426ee28f 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2845,6 +2845,8 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	<string name="Unnamed">(Unnamed)</string>
 	<string name="IM_moderated_chat_label">(Moderated: Voices off by default)</string>
 	<string name="IM_unavailable_text_label">Text chat is not available for this call.</string>
+	<string name="IM_muted_text_label">Your text chat has been disabled by a Group Moderator.</string>
+	<string name="IM_default_text_label">Click here to instant message.</string>
 
 
   <string name="ringing-im">
-- 
GitLab


From 904f6124b282e3e9668289bef9f7d44f8539ce51 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Fri, 6 Nov 2009 13:27:28 +0000
Subject: [PATCH 213/306] magic number removal rampage: 3.14159 -> M_PI or F_PI

--HG--
branch : texture-pipeline
---
 indra/newview/llfloaterworldmap.cpp | 2 +-
 indra/newview/lltracker.cpp         | 6 +++---
 indra/newview/llvoavatar.cpp        | 4 ++--
 indra/newview/llvovolume.cpp        | 8 ++++----
 indra/newview/llworldmapview.cpp    | 2 +-
 indra/newview/pipeline.cpp          | 2 +-
 6 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index b7e8835fb88..d3c6248fafb 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -427,7 +427,7 @@ void LLFloaterWorldMap::draw()
 		{
 			F64 seconds = LLTimer::getElapsedSeconds();
 			double value = fmod(seconds, 2);
-			value = 0.5 + 0.5*cos(value * 3.14159f);
+			value = 0.5 + 0.5*cos(value * M_PI);
 			LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0);
 			childSetColor("location_icon", loading_color);
 		}
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
index 5929ecd928a..1a617176588 100644
--- a/indra/newview/lltracker.cpp
+++ b/indra/newview/lltracker.cpp
@@ -416,10 +416,10 @@ F32 pulse_func(F32 t, F32 z)
 		return 0.f;
 	}
 	
-	t *= 3.14159f;
+	t *= F_PI;
 	z -= t*64.f - 256.f;
 	
-	F32 a = cosf(z*3.14159/512.f)*10.0f;
+	F32 a = cosf(z*F_PI/512.f)*10.0f;
 	a = llmax(a, 9.9f);
 	a -= 9.9f;
 	a *= 10.f;
@@ -433,7 +433,7 @@ void draw_shockwave(F32 center_z, F32 t, S32 steps, LLColor4 color)
 		return;
 	}
 	
-	t *= 0.6284f/3.14159f;
+	t *= 0.6284f/F_PI;
 	
 	t -= (F32) (S32) t;	
 
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 76e00db91c7..3aca2ed904c 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2381,7 +2381,7 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
 			F32 old_angle = mImpostorAngle.mV[i];
 			F32 angle_diff = fabsf(cur_angle-old_angle);
 		
-			if (angle_diff > 3.14159f/512.f*distance*mUpdatePeriod)
+			if (angle_diff > F_PI/512.f*distance*mUpdatePeriod)
 			{
 				mNeedsImpostorUpdate = TRUE;
 			}
@@ -2542,7 +2542,7 @@ void LLVOAvatar::idleUpdateLoadingEffect()
 			particle_parameters.mPartImageID                 = cloud->getID();
 			particle_parameters.mMaxAge                      = 0.f;
 			particle_parameters.mPattern                     = LLPartSysData::LL_PART_SRC_PATTERN_ANGLE_CONE;
-			particle_parameters.mInnerAngle                  = 3.14159f;
+			particle_parameters.mInnerAngle                  = F_PI;
 			particle_parameters.mOuterAngle                  = 0.f;
 			particle_parameters.mBurstRate                   = 0.02f;
 			particle_parameters.mBurstRadius                 = 0.0f;
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 1704f633765..421e6fdff52 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -739,15 +739,15 @@ F32 LLVOVolume::getTextureVirtualSize(LLFace* face)
 
 	face->setPixelArea(face_area);
 
-	if (face_area <= 0)
+	if (face_area <= 0.f)
 	{
 		return 0.f;
 	}
 
 	//get area of circle in texture space
 	LLVector2 tdim = face->mTexExtents[1] - face->mTexExtents[0];
-	F32 texel_area = (tdim * 0.5f).lengthSquared()*3.14159f;
-	if (texel_area <= 0)
+	F32 texel_area = (tdim * 0.5f).lengthSquared()*F_PI;
+	if (texel_area <= 0.f)
 	{
 		// Probably animated, use default
 		texel_area = 1.f;
@@ -1036,7 +1036,7 @@ BOOL LLVOVolume::calcLOD()
 	}
 	
 	// DON'T Compensate for field of view changing on FOV zoom.
-	distance *= 3.14159f/3.f;
+	distance *= F_PI/3.f;
 
 	cur_detail = computeLODDetail(llround(distance, 0.01f), 
 									llround(radius, 0.01f));
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 5446a08ebf3..bd2e1e66215 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -821,7 +821,7 @@ void LLWorldMapView::draw()
 		else
 		{
 			double value = fmod(current_time, 2);
-			value = 0.5 + 0.5*cos(value * 3.14159f);
+			value = 0.5 + 0.5*cos(value * M_PI);
 			LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0);
 			drawTracking( LLWorldMap::getInstance()->mUnknownLocation, loading_color, TRUE, getString("Loading"), "");
 		}
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index b50e71bf485..f2442a49c01 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -1474,7 +1474,7 @@ F32 LLPipeline::calcPixelArea(LLVector3 center, LLVector3 size, LLCamera &camera
 	//get area of circle around node
 	F32 app_angle = atanf(size.length()/dist);
 	F32 radius = app_angle*LLDrawable::sCurPixelAngle;
-	return radius*radius * 3.14159f;
+	return radius*radius * F_PI;
 }
 
 void LLPipeline::grabReferences(LLCullResult& result)
-- 
GitLab


From e4fdc0ba558ec8960796c9663c4a7e2ec92d8916 Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Fri, 6 Nov 2009 15:41:05 +0200
Subject: [PATCH 214/306] no ticket. major crash in Panel Landmark has been
 fixed. It was  founded  while investigating EXT-1607.

--HG--
branch : product-engine
---
 indra/newview/llpanellandmarks.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index c5165462828..62dc881738c 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -829,17 +829,18 @@ bool LLLandmarksPanel::canSelectedBeModified(const std::string& command_name) co
 	// then ask LLFolderView permissions
 	if (can_be_modified)
 	{
+		LLFolderViewItem* selected =  getCurSelectedItem();
 		if ("cut" == command_name)
 		{
 			can_be_modified = mCurrentSelectedList->getRootFolder()->canCut();
 		}
 		else if ("rename" == command_name)
 		{
-			can_be_modified = getCurSelectedItem()->getListener()->isItemRenameable();
+			can_be_modified = selected? selected->getListener()->isItemRenameable() : false;
 		}
 		else if ("delete" == command_name)
 		{
-			can_be_modified = getCurSelectedItem()->getListener()->isItemRemovable();
+			can_be_modified = selected? selected->getListener()->isItemRemovable(): false;
 		}
 		else if("paste" == command_name)
 		{
-- 
GitLab


From 0c95cc78e56e9249df223dedd93e708d9f7698ab Mon Sep 17 00:00:00 2001
From: Eugene Kondrashev <ekondrashev@productengine.com>
Date: Fri, 6 Nov 2009 15:48:27 +0200
Subject: [PATCH 215/306] No ticket fixed dropped functionaliti by prev commit

--HG--
branch : product-engine
---
 indra/newview/llimfloater.cpp                  | 4 ++--
 indra/newview/skins/default/xui/en/strings.xml | 1 +
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 720cea8b1ac..83e1a333f7a 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -235,7 +235,7 @@ BOOL LLIMFloater::postBuild()
 
 	std::string session_name(LLIMModel::instance().getName(mSessionID));
 
-	mInputEditor->setLabel(LLTrans::getString("IM_default_text_label"));
+	mInputEditor->setLabel(LLTrans::getString("IM_to_label") + " " + session_name);
 
 	LLStringUtil::toUpper(session_name);
 	setTitle(session_name);
@@ -608,7 +608,7 @@ void LLIMFloater::processAgentListUpdates(const LLSD& body)
 				if (moderator_muted_text)
 					label = LLTrans::getString("IM_muted_text_label");
 				else
-					label = LLTrans::getString("IM_default_text_label");
+					label = LLTrans::getString("IM_to_label") + " " + LLIMModel::instance().getName(mSessionID);
 				mInputEditor->setLabel(label);
 			}
 		}
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 101426ee28f..b44420238f0 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2847,6 +2847,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	<string name="IM_unavailable_text_label">Text chat is not available for this call.</string>
 	<string name="IM_muted_text_label">Your text chat has been disabled by a Group Moderator.</string>
 	<string name="IM_default_text_label">Click here to instant message.</string>
+	<string name="IM_to_label">To</string>
 
 
   <string name="ringing-im">
-- 
GitLab


From ddb42652e3205a96289ad4ac8031a022cce46c4a Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Fri, 6 Nov 2009 15:49:56 +0200
Subject: [PATCH 216/306] IM: minor refac., moved floater registation of
 llviewerfloaterreg

--HG--
branch : product-engine
---
 indra/newview/llimview.cpp           | 7 -------
 indra/newview/llviewerfloaterreg.cpp | 1 +
 2 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 095a18f3227..4f844ed8c82 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1350,13 +1350,6 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response)
 LLIMMgr::LLIMMgr() :
 	mIMReceived(FALSE)
 {
-	static bool registered_dialog = false;
-	if (!registered_dialog)
-	{
-		LLFloaterReg::add("incoming_call", "floater_incoming_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIncomingCallDialog>);
-		registered_dialog = true;
-	}
-
 	mPendingInvitations = LLSD::emptyMap();
 	mPendingAgentListUpdates = LLSD::emptyMap();
 }
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 9ca2d3f61d8..edbac69e1b8 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -170,6 +170,7 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("hud", "floater_hud.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHUD>);
 
 	LLFloaterReg::add("impanel", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMFloater>);
+	LLFloaterReg::add("incoming_call", "floater_incoming_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIncomingCallDialog>);
 	LLFloaterReg::add("inventory", "floater_inventory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInventory>);
 	LLFloaterReg::add("inspect", "floater_inspect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInspect>);
 	LLInspectAvatarUtil::registerFloater();
-- 
GitLab


From 4b804902229f610156920333dfb18f2f3fabf12b Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Fri, 6 Nov 2009 16:01:11 +0200
Subject: [PATCH 217/306] Fixed low bug EXT-2109 (Add moderator label if user
 is a moderator of a group chat(See old communication floater))

--HG--
branch : product-engine
---
 indra/newview/llparticipantlist.cpp           | 98 ++++++++++++++++++-
 indra/newview/llparticipantlist.h             | 20 +++-
 indra/newview/llspeakers.cpp                  | 23 +++++
 indra/newview/llspeakers.h                    | 10 ++
 .../newview/skins/default/xui/en/strings.xml  |  1 +
 5 files changed, 145 insertions(+), 7 deletions(-)

diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index edff706fee5..94e47318ded 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -50,13 +50,16 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
 	mSpeakerAddListener = new SpeakerAddListener(*this);
 	mSpeakerRemoveListener = new SpeakerRemoveListener(*this);
 	mSpeakerClearListener = new SpeakerClearListener(*this);
+	mSpeakerModeratorListener = new SpeakerModeratorUpdateListener(*this);
 
 	mSpeakerMgr->addListener(mSpeakerAddListener, "add");
 	mSpeakerMgr->addListener(mSpeakerRemoveListener, "remove");
 	mSpeakerMgr->addListener(mSpeakerClearListener, "clear");
+	mSpeakerMgr->addListener(mSpeakerModeratorListener, "update_moderator");
 
 	mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
 	mAvatarList->setDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList));
+	mAvatarList->setRefreshCompleteCallback(boost::bind(&LLParticipantList::onAvatarListRefreshed, this, _1, _2));
 
 	//Lets fill avatarList with existing speakers
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
@@ -65,7 +68,12 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
 	mSpeakerMgr->getSpeakerList(&speaker_list, true);
 	for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++)
 	{
-		group_members.push_back((*it)->mID);
+		const LLPointer<LLSpeaker>& speakerp = *it;
+		group_members.push_back(speakerp->mID);
+		if ( speakerp->mIsModerator )
+		{
+			mModeratorList.insert(speakerp->mID);
+		}
 	}
 	sort();
 }
@@ -84,6 +92,56 @@ void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list)
 	LLAvatarActions::startIM(clicked_id);
 }
 
+void LLParticipantList::onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param)
+{
+	LLAvatarList* list = dynamic_cast<LLAvatarList*>(ctrl);
+	if (list)
+	{
+		const std::string moderator_indicator(LLTrans::getString("IM_moderator_label")); 
+		const std::size_t moderator_indicator_len = moderator_indicator.length();
+
+		// Firstly remove moderators indicator
+		std::set<LLUUID>::const_iterator
+			moderator_list_it = mModeratorToRemoveList.begin(),
+			moderator_list_end = mModeratorToRemoveList.end();
+		for (;moderator_list_it != moderator_list_end; ++moderator_list_it)
+		{
+			LLAvatarListItem* item = dynamic_cast<LLAvatarListItem*> (list->getItemByValue(*moderator_list_it));
+			if ( item )
+			{
+				std::string name = item->getAvatarName();
+				size_t found = name.find(moderator_indicator);
+				if (found == std::string::npos)
+				{
+					name.erase(found, moderator_indicator_len);
+					item->setName(name);
+				}
+			}
+		}
+
+		mModeratorToRemoveList.clear();
+
+		// Add moderators indicator
+		moderator_list_it = mModeratorList.begin();
+		moderator_list_end = mModeratorList.end();
+		for (;moderator_list_it != moderator_list_end; ++moderator_list_it)
+		{
+			LLAvatarListItem* item = dynamic_cast<LLAvatarListItem*> (list->getItemByValue(*moderator_list_it));
+			if ( item )
+			{
+				std::string name = item->getAvatarName();
+				size_t found = name.find(moderator_indicator);
+				if (found == std::string::npos)
+				{
+					name += " ";
+					name += moderator_indicator;
+					item->setName(name);
+				}
+			}
+		}
+	}
+}
+
 void LLParticipantList::setSortOrder(EParticipantSortOrder order)
 {
 	if ( mSortOrder != order )
@@ -106,6 +164,8 @@ bool LLParticipantList::onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, co
 	}
 
 	group_members.push_back(uu_id);
+	// Mark AvatarList as dirty one
+	mAvatarList->setDirty();
 	sort();
 	return true;
 }
@@ -130,14 +190,36 @@ bool LLParticipantList::onClearListEvent(LLPointer<LLOldEvents::LLEvent> event,
 	return true;
 }
 
+bool LLParticipantList::onModeratorUpdateEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+	const LLSD& evt_data = event->getValue();
+	if ( evt_data.has("id") && evt_data.has("is_moderator") )
+	{
+		LLUUID id = evt_data["id"];
+		bool is_moderator = evt_data["is_moderator"];
+		if ( id.notNull() )
+		{
+			if ( is_moderator )
+				mModeratorList.insert(id);
+			else
+			{
+				std::set<LLUUID>::iterator it = mModeratorList.find (id);
+				if ( it != mModeratorList.end () )
+				{
+					mModeratorToRemoveList.insert(id);
+					mModeratorList.erase(id);
+				}
+			}
+		}
+	}
+	return true;
+}
+
 void LLParticipantList::sort()
 {
 	if ( !mAvatarList )
 		return;
 
-	// Mark AvatarList as dirty one
-	mAvatarList->setDirty();
-
 	// TODO: Implement more sorting orders after specs updating (EM)
 	switch ( mSortOrder ) {
 	case E_SORT_BY_NAME :
@@ -172,3 +254,11 @@ bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents:
 {
 	return mParent.onClearListEvent(event, userdata);
 }
+
+//
+// LLParticipantList::SpeakerModeratorListener
+//
+bool LLParticipantList::SpeakerModeratorUpdateListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+		return mParent.onModeratorUpdateEvent(event, userdata);
+}
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index 8c209c0b208..fc34dd308ba 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -35,6 +35,7 @@
 
 class LLSpeakerMgr;
 class LLAvatarList;
+class LLUICtrl;
 
 class LLParticipantList
 {
@@ -59,6 +60,7 @@ class LLParticipantList
 		bool onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
 		bool onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
 		bool onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+		bool onModeratorUpdateEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
 
 		/**
 		 * Sorts the Avatarlist by stored order
@@ -97,15 +99,27 @@ class LLParticipantList
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
 		};
 
+		class SpeakerModeratorUpdateListener : public BaseSpeakerListner
+		{
+		public:
+			SpeakerModeratorUpdateListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
+			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+		};
+
 	private:
 		void onAvatarListDoubleClicked(LLAvatarList* list);
+		void onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param);
 
 		LLSpeakerMgr*		mSpeakerMgr;
 		LLAvatarList*		mAvatarList;
 
-		LLPointer<SpeakerAddListener>		mSpeakerAddListener;
-		LLPointer<SpeakerRemoveListener>	mSpeakerRemoveListener;
-		LLPointer<SpeakerClearListener>		mSpeakerClearListener;
+		std::set<LLUUID>	mModeratorList;
+		std::set<LLUUID>	mModeratorToRemoveList;
+
+		LLPointer<SpeakerAddListener>				mSpeakerAddListener;
+		LLPointer<SpeakerRemoveListener>			mSpeakerRemoveListener;
+		LLPointer<SpeakerClearListener>				mSpeakerClearListener;
+		LLPointer<SpeakerModeratorUpdateListener>	mSpeakerModeratorListener;
 
 		EParticipantSortOrder	mSortOrder;
 };
diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
index 2341fcfc6d6..2ed82b7d621 100644
--- a/indra/newview/llspeakers.cpp
+++ b/indra/newview/llspeakers.cpp
@@ -87,6 +87,21 @@ void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const std::string& first, c
 	mDisplayName = first + " " + last;
 }
 
+LLSpeakerUpdateModeratorEvent::LLSpeakerUpdateModeratorEvent(LLSpeaker* source)
+: LLEvent(source, "Speaker add moderator event"),
+  mSpeakerID (source->mID),
+  mIsModerator (source->mIsModerator)
+{
+}
+
+LLSD LLSpeakerUpdateModeratorEvent::getValue()
+{
+	LLSD ret;
+	ret["id"] = mSpeakerID;
+	ret["is_moderator"] = mIsModerator;
+	return ret;
+}
+
 LLSpeakerTextModerationEvent::LLSpeakerTextModerationEvent(LLSpeaker* source)
 : LLEvent(source, "Speaker text moderation event")
 {
@@ -437,9 +452,13 @@ void LLIMSpeakerMgr::setSpeakers(const LLSD& speakers)
 
 			if ( speaker_it->second.isMap() )
 			{
+				BOOL is_moderator = speakerp->mIsModerator;
 				speakerp->mIsModerator = speaker_it->second["is_moderator"];
 				speakerp->mModeratorMutedText =
 					speaker_it->second["mutes"]["text"];
+				// Fire event only if moderator changed
+				if ( is_moderator != speakerp->mIsModerator )
+					fireEvent(new LLSpeakerUpdateModeratorEvent(speakerp), "update_moderator");
 			}
 		}
 	}
@@ -507,7 +526,11 @@ void LLIMSpeakerMgr::updateSpeakers(const LLSD& update)
 
 				if (agent_info.has("is_moderator"))
 				{
+					BOOL is_moderator = speakerp->mIsModerator;
 					speakerp->mIsModerator = agent_info["is_moderator"];
+					// Fire event only if moderator changed
+					if ( is_moderator != speakerp->mIsModerator )
+						fireEvent(new LLSpeakerUpdateModeratorEvent(speakerp), "update_moderator");
 				}
 
 				if (agent_info.has("mutes"))
diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h
index e0f22bff4f4..04046a85878 100644
--- a/indra/newview/llspeakers.h
+++ b/indra/newview/llspeakers.h
@@ -84,6 +84,16 @@ class LLSpeaker : public LLRefCount, public LLOldEvents::LLObservable, public LL
 	BOOL			mModeratorMutedText;
 };
 
+class LLSpeakerUpdateModeratorEvent : public LLOldEvents::LLEvent
+{
+public:
+	LLSpeakerUpdateModeratorEvent(LLSpeaker* source);
+	/*virtual*/ LLSD getValue();
+private:
+	const LLUUID& mSpeakerID;
+	BOOL mIsModerator;
+};
+
 class LLSpeakerTextModerationEvent : public LLOldEvents::LLEvent
 {
 public:
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index b44420238f0..c850dce1419 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2848,6 +2848,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	<string name="IM_muted_text_label">Your text chat has been disabled by a Group Moderator.</string>
 	<string name="IM_default_text_label">Click here to instant message.</string>
 	<string name="IM_to_label">To</string>
+	<string name="IM_moderator_label">(Moderator)</string>
 
 
   <string name="ringing-im">
-- 
GitLab


From 30fe1aa19715076be2cef2f3cf78a79b6343c9ba Mon Sep 17 00:00:00 2001
From: Andrew Polunin <apolunin@productengine.com>
Date: Fri, 6 Nov 2009 17:00:26 +0200
Subject: [PATCH 218/306] fixed normal bug EXT-2193 Group Profile, Group Chat
 bttns and Profile chevron are enabled for None Group

--HG--
branch : product-engine
---
 indra/newview/llgrouplist.cpp   | 5 +++++
 indra/newview/llpanelpeople.cpp | 6 ++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index 2e2b2d51011..010ed23918d 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -183,6 +183,11 @@ void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LL
 	item->childSetVisible("info_btn", false);
 	item->setGroupIconVisible(mShowIcons);
 
+	if (id.isNull())
+	{
+		item->childSetVisible("profile_btn", false);
+	}
+
 	addItem(item, id, pos);
 
 //	setCommentVisible(false);
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 65a7b5322b5..bb6cdd2f78e 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -667,8 +667,10 @@ void LLPanelPeople::updateButtons()
 	buttonSetEnabled("im_btn",				(selected_uuids.size() >= 1)); // allow starting the friends conference for multiple selection
 	buttonSetEnabled("call_btn",			item_selected && false); // not implemented yet
 	buttonSetEnabled("share_btn",			item_selected && false); // not implemented yet
-	buttonSetEnabled("group_info_btn",		item_selected);
-	buttonSetEnabled("chat_btn",			item_selected);
+
+	bool none_group_selected = item_selected && selected_id.isNull();
+	buttonSetEnabled("group_info_btn", !none_group_selected);
+	buttonSetEnabled("chat_btn", !none_group_selected);
 }
 
 std::string LLPanelPeople::getActiveTabName() const
-- 
GitLab


From a3830dee59e9014605746b3425e5378b64c584fe Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Fri, 6 Nov 2009 17:03:48 +0200
Subject: [PATCH 219/306] implement normal subtask EXT-2265 IM unread messages
 counter should not be increased for system messages (comming from 'Second
 Life', zero uuid)

--HG--
branch : product-engine
---
 indra/newview/llimfloater.cpp | 2 +-
 indra/newview/llimview.cpp    | 4 ++--
 indra/newview/llimview.h      | 3 +++
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 83e1a333f7a..a634a1b0fd0 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -115,7 +115,7 @@ void LLIMFloater::onClose(bool app_quitting)
 /* static */
 void LLIMFloater::newIMCallback(const LLSD& data){
 	
-	if (data["num_unread"].asInteger() > 0)
+	if (data["num_unread"].asInteger() > 0 || data["from_id"].asUUID().isNull())
 	{
 		LLUUID session_id = data["session_id"].asUUID();
 
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 4f844ed8c82..ac5bd719e23 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -134,7 +134,6 @@ void LLIMModel::setActiveSessionID(const LLUUID& session_id)
 LLIMModel::LLIMModel() 
 {
 	addNewMsgCallback(LLIMFloater::newIMCallback);
-	addNoUnreadMsgsCallback(LLIMFloater::newIMCallback);
 	addNewMsgCallback(toast_callback);
 }
 
@@ -440,7 +439,8 @@ bool LLIMModel::addMessage(const LLUUID& session_id, const std::string& from, co
 	addToHistory(session_id, from, from_id, utf8_text);
 	if (log2file) logToFile(session_id, from, from_id, utf8_text);
 
-	session->mNumUnread++;
+	//we do not count system messages
+	if (from_id.notNull()) session->mNumUnread++;
 
 	// notify listeners
 	LLSD arg;
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 769d49f388b..bd55bd2c306 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -66,7 +66,10 @@ class LLIMModel :  public LLSingleton<LLIMModel>
 		EInstantMessage mType;
 		LLUUID mOtherParticipantID;
 		std::vector<LLUUID> mInitialTargetIDs;
+
+		//does NOT include system messages
 		S32 mNumUnread;
+
 		std::list<LLSD> mMsgs;
 
 		LLVoiceChannel* mVoiceChannel;
-- 
GitLab


From 66171216b01c1c5afafd3405a9d17e81f50c1925 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Fri, 6 Nov 2009 15:19:30 +0000
Subject: [PATCH 220/306] SNOW-329 Handling of error case in llimage.cpp
 incorrect This is the same fix as DEV-32269, trivially ported to viewer2.
 reviewed by merov, james, moss!

---
 indra/llimage/llimage.cpp | 31 +++++++++++++++++--------------
 1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index 9bbc55509dd..73c23fa8d81 100644
--- a/indra/llimage/llimage.cpp
+++ b/indra/llimage/llimage.cpp
@@ -1223,25 +1223,28 @@ bool LLImageRaw::createFromFile(const std::string &filename, bool j2c_lowest_mip
 	ifs.read ((char*)buffer, length);
 	ifs.close();
 	
-	image->updateData();
-	
-	if (j2c_lowest_mip_only && codec == IMG_CODEC_J2C)
+	BOOL success;
+
+	success = image->updateData();
+	if (success)
 	{
-		S32 width = image->getWidth();
-		S32 height = image->getHeight();
-		S32 discard_level = 0;
-		while (width > 1 && height > 1 && discard_level < MAX_DISCARD_LEVEL)
+		if (j2c_lowest_mip_only && codec == IMG_CODEC_J2C)
 		{
-			width >>= 1;
-			height >>= 1;
-			discard_level++;
+			S32 width = image->getWidth();
+			S32 height = image->getHeight();
+			S32 discard_level = 0;
+			while (width > 1 && height > 1 && discard_level < MAX_DISCARD_LEVEL)
+			{
+				width >>= 1;
+				height >>= 1;
+				discard_level++;
+			}
+			((LLImageJ2C *)((LLImageFormatted*)image))->setDiscardLevel(discard_level);
 		}
-		((LLImageJ2C *)((LLImageFormatted*)image))->setDiscardLevel(discard_level);
+		success = image->decode(this, 100000.0f);
 	}
-	
-	BOOL success = image->decode(this, 100000.0f);
-	image = NULL; // deletes image
 
+	image = NULL; // deletes image
 	if (!success)
 	{
 		deleteData();
-- 
GitLab


From f6aa7f8c80d3e6fd159cd6252df1baa90701c2de Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Fri, 6 Nov 2009 17:25:50 +0200
Subject: [PATCH 221/306] implemented normal subtask EXT-2263  IM P2P: avatar
 name under avatar icon should follow avatar icon and should not overlap it
 when being resized

--HG--
branch : product-engine
---
 indra/newview/skins/default/xui/en/floater_im_session.xml     | 2 +-
 indra/newview/skins/default/xui/en/panel_im_control_panel.xml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 70af2f63b64..452d28d4eab 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -15,7 +15,7 @@
  width="520"
  can_resize="true"
  min_width="350"
- min_height="350">
+ min_height="369">
   <layout_stack follows="left|top|right|bottom"
                 height="354"
                 width="520"
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index c8b134cdf0d..e81532ec3eb 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -14,7 +14,7 @@
      width="125"/>
 
     <text
-     follows="left|right"
+     follows="top|left|right"
      font="SansSerifBig"
      height="16"
      layout="topleft"
-- 
GitLab


From 2ea6893b15715e5ef21b3d4ba37633033140b030 Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Fri, 6 Nov 2009 16:35:30 +0000
Subject: [PATCH 222/306] EXT-2231: Let users view release notes for a server
 change.

I've added a hyperlink to the "You just entered a region using a
different server version" notification. Users can click over this link
to view the release notes for that server version.

This notification recently started turning up in the local chat log,
so the above solution works in that case as well as if it remained as
a popup notification panel.
---
 indra/newview/llviewermessage.cpp             | 55 ++++++++-----------
 indra/newview/llviewermessage.h               |  1 -
 .../skins/default/xui/en/notifications.xml    |  2 +-
 3 files changed, 24 insertions(+), 34 deletions(-)

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index d8e6c52c8cc..ea1097c4779 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2914,46 +2914,37 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
 
 	if (!gLastVersionChannel.empty())
 	{
-		LLSD payload;
-		payload["message"] = version_channel;
-		LLNotifications::instance().add("ServerVersionChanged", LLSD(), payload, server_version_changed_callback);
-	}
-
-	gLastVersionChannel = version_channel;
-}
-
-bool server_version_changed_callback(const LLSD& notification, const LLSD& response)
-{
-	if(notification["payload"]["message"].asString() =="")
-		return false;
-	std::string url ="http://wiki.secondlife.com/wiki/Release_Notes/";
-	//parse the msg string
-	std::string server_version = notification["payload"]["message"].asString();
-	std::vector<std::string> s_vect;
-	boost::algorithm::split(s_vect, server_version, isspace);
-	for(U32 i = 0; i < s_vect.size(); i++)
-	{
-    	if (i != (s_vect.size() - 1))
-		{
-			if(i != (s_vect.size() - 2))
+		// work out the URL for this server's Release Notes
+		std::string url ="http://wiki.secondlife.com/wiki/Release_Notes/";
+		std::string server_version = version_channel;
+		std::vector<std::string> s_vect;
+		boost::algorithm::split(s_vect, server_version, isspace);
+		for(U32 i = 0; i < s_vect.size(); i++)
+		{
+			if (i != (s_vect.size() - 1))
 			{
-			   url += s_vect[i] + "_";
+				if(i != (s_vect.size() - 2))
+				{
+				   url += s_vect[i] + "_";
+				}
+				else
+				{
+					url += s_vect[i] + "/";
+				}
 			}
 			else
 			{
-				url += s_vect[i] + "/";
+				url += s_vect[i].substr(0,4);
 			}
 		}
-		else
-		{
-			url += s_vect[i].substr(0,4);
-		}
+
+		LLSD args;
+		args["URL"] = url;
+		LLNotifications::instance().add("ServerVersionChanged", args);
 	}
-	
-	LLWeb::loadURL(url);
-	return false;
-}
 
+	gLastVersionChannel = version_channel;
+}
 
 void process_crossed_region(LLMessageSystem* msg, void**)
 {
diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h
index c15e5df675a..e24da2013d1 100644
--- a/indra/newview/llviewermessage.h
+++ b/indra/newview/llviewermessage.h
@@ -132,7 +132,6 @@ void container_inventory_arrived(LLViewerObject* object,
 // agent movement
 void send_complete_agent_movement(const LLHost& sim_host);
 void process_agent_movement_complete(LLMessageSystem* msg, void**);
-bool server_version_changed_callback(const LLSD& notification, const LLSD& response);
 void process_crossed_region(LLMessageSystem* msg, void**);
 void process_teleport_start(LLMessageSystem* msg, void**);
 void process_teleport_progress(LLMessageSystem* msg, void**);
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index f26a4d09d45..989dc888512 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5669,7 +5669,7 @@ An error has occurred while trying to connect to voice chat for [VOICE_CHANNEL_N
    name="ServerVersionChanged"
    priority="high"
    type="notifytip">
-You just entered a region using a different server version, which may affect performance. Click to see the release notes.
+You just entered a region using a different server version, which may affect performance. [[URL] View the release notes.]
   </notification>
 
   <notification
-- 
GitLab


From 01c83aa21e616777adf9e1ab0319f95e656e4f7a Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Fri, 6 Nov 2009 18:39:00 +0200
Subject: [PATCH 223/306] partial fix for minor bug EXT-1607  Trash and Gear
 buttons are enabled when nothing is selected. Now gear button will disabled
 when nothing is selected.

--HG--
branch : product-engine
---
 indra/newview/llpanellandmarks.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 62dc881738c..9840c911589 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -499,6 +499,7 @@ void LLLandmarksPanel::updateListCommands()
 	// keep Options & Add Landmark buttons always enabled
 	mListCommands->childSetEnabled(ADD_FOLDER_BUTTON_NAME, add_folder_enabled);
 	mListCommands->childSetEnabled(TRASH_BUTTON_NAME, trash_enabled);
+	mListCommands->childSetEnabled(OPTIONS_BUTTON_NAME,getCurSelectedItem() != NULL);
 }
 
 void LLLandmarksPanel::onActionsButtonClick()
-- 
GitLab


From 956ce3af6564c12d252aed8ae26581068064fb76 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Fri, 6 Nov 2009 16:41:56 +0000
Subject: [PATCH 224/306] M_PI -> F_PI - who knew that M_PI was dropped from
 C99 onwards?! Oh well, this should still be better.

---
 indra/newview/llfloaterworldmap.cpp | 2 +-
 indra/newview/llworldmapview.cpp    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 823c8e79113..412011e76ad 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -457,7 +457,7 @@ void LLFloaterWorldMap::draw()
 		{
 			F64 seconds = LLTimer::getElapsedSeconds();
 			double value = fmod(seconds, 2);
-			value = 0.5 + 0.5*cos(value * M_PI);
+			value = 0.5 + 0.5*cos(value * F_PI);
 			LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0);
 			childSetColor("location_icon", loading_color);
 		}
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 0509898f40f..9a249d14f8f 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -822,7 +822,7 @@ void LLWorldMapView::draw()
 		else
 		{
 			double value = fmod(current_time, 2);
-			value = 0.5 + 0.5*cos(value * M_PI);
+			value = 0.5 + 0.5*cos(value * F_PI);
 			LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0);
 			drawTracking( LLWorldMap::getInstance()->mUnknownLocation, loading_color, TRUE, getString("Loading"), "");
 		}
-- 
GitLab


From 8a4e36a9bdd94ebd183d1f315aa51c6c52d0abbd Mon Sep 17 00:00:00 2001
From: Alexei Arabadji <aarabadji@productengine.com>
Date: Fri, 6 Nov 2009 19:31:27 +0200
Subject: [PATCH 225/306] fixed EXT-2295 "'Group Chat' btn makes chicklet
 appear only"

--HG--
branch : product-engine
---
 indra/newview/llavataractions.cpp            | 11 +++++++++--
 indra/newview/llavatariconctrl.cpp           |  7 ++++++-
 indra/newview/llgroupactions.cpp             |  7 ++++++-
 indra/newview/llimview.cpp                   | 16 ++++++++++++++--
 indra/newview/llinventorybridge.cpp          |  7 ++++++-
 indra/newview/llinventorypanel.cpp           |  7 ++++++-
 indra/newview/llnotificationofferhandler.cpp |  4 ++++
 indra/newview/llviewermenu.cpp               |  7 ++++++-
 8 files changed, 57 insertions(+), 9 deletions(-)

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 67ffe54b7e6..3fc37aa3d50 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -178,7 +178,10 @@ void LLAvatarActions::startIM(const LLUUID& id)
 	std::string name;
 	gCacheName->getFullName(id, name);
 	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
-	LLIMFloater::show(session_id);
+	if (session_id != LLUUID::null)
+	{
+		LLIMFloater::show(session_id);
+	}
 	make_ui_sound("UISndStartIM");
 }
 
@@ -191,7 +194,11 @@ void LLAvatarActions::startConference(const std::vector<LLUUID>& ids)
 	{
 		id_array.push_back(*it);
 	}
-	gIMMgr->addSession("Friends Conference", IM_SESSION_CONFERENCE_START, ids[0], id_array);
+	LLUUID session_id = gIMMgr->addSession("Friends Conference", IM_SESSION_CONFERENCE_START, ids[0], id_array);
+	if (session_id != LLUUID::null)
+	{
+		LLIMFloater::show(session_id);
+	}
 	make_ui_sound("UISndStartIM");
 }
 
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index b56e8d1ec25..0ee3e784095 100644
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -44,6 +44,7 @@
 
 #include "llcachename.h"
 #include "llagentdata.h"
+#include "llimfloater.h"
 
 #define MENU_ITEM_VIEW_PROFILE 0
 #define MENU_ITEM_SEND_IM 1
@@ -354,7 +355,11 @@ void LLAvatarIconCtrl::onAvatarIconContextMenuItemClicked(const LLSD& userdata)
 		name.append(" ");
 		name.append(getLastName());
 
-		gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+		LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+		if (session_id != LLUUID::null)
+		{
+			LLIMFloater::show(session_id);
+		}
 	}
 	else if (level == "add")
 	{
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index c46eedbef24..e60bde9fd89 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -43,6 +43,7 @@
 #include "llimview.h" // for gIMMgr
 #include "llsidetray.h"
 #include "llstatusbar.h"	// can_afford_transaction()
+#include "llimfloater.h"
 
 //
 // Globals
@@ -279,10 +280,14 @@ void LLGroupActions::startChat(const LLUUID& group_id)
 	LLGroupData group_data;
 	if (gAgent.getGroupData(group_id, group_data))
 	{
-		gIMMgr->addSession(
+		LLUUID session_id = gIMMgr->addSession(
 			group_data.mName,
 			IM_SESSION_GROUP_START,
 			group_id);
+		if (session_id != LLUUID::null)
+		{
+			LLIMFloater::show(session_id);
+		}
 		make_ui_sound("UISndStartIM");
 	}
 	else
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 7e8701bf212..6055719233d 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1192,10 +1192,14 @@ void LLIncomingCallDialog::processCallResponse(S32 response)
 		}
 		else
 		{
-			gIMMgr->addSession(
+			LLUUID session_id = gIMMgr->addSession(
 				mPayload["session_name"].asString(),
 				type,
 				session_id);
+			if (session_id != LLUUID::null)
+			{
+				LLIMFloater::show(session_id);
+			}
 
 			std::string url = gAgent.getRegion()->getCapability(
 				"ChatSessionRequest");
@@ -1279,10 +1283,14 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response)
 			}
 			else
 			{
-				gIMMgr->addSession(
+				LLUUID session_id = gIMMgr->addSession(
 					payload["session_name"].asString(),
 					type,
 					session_id);
+				if (session_id != LLUUID::null)
+				{
+					LLIMFloater::show(session_id);
+				}
 
 				std::string url = gAgent.getRegion()->getCapability(
 					"ChatSessionRequest");
@@ -1555,6 +1563,10 @@ LLUUID LLIMMgr::addP2PSession(const std::string& name,
 							const std::string& caller_uri)
 {
 	LLUUID session_id = addSession(name, IM_NOTHING_SPECIAL, other_participant_id);
+	if (session_id != LLUUID::null)
+	{
+		LLIMFloater::show(session_id);
+	}
 
 	LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id);
 	if (speaker_mgr)
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index b9a25d5dc74..ef61c45d4de 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -97,6 +97,7 @@
 #include "llfloateropenobject.h"
 #include "lltrans.h"
 #include "llappearancemgr.h"
+#include "llimfloater.h"
 
 using namespace LLOldEvents;
 
@@ -3347,7 +3348,11 @@ void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel*
 		{
 			std::string callingcard_name;
 			gCacheName->getFullName(item->getCreatorUUID(), callingcard_name);
-			gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID());
+			LLUUID session_id = gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID());
+			if (session_id != LLUUID::null)
+			{
+				LLIMFloater::show(session_id);
+			}
 		}
 	}
 	else if ("lure" == action)
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 178e7d0823e..80710610d4f 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -86,6 +86,7 @@
 #include "llviewerwindow.h"
 #include "llvoavatarself.h"
 #include "llwearablelist.h"
+#include "llimfloater.h"
 
 static LLDefaultChildRegistry::Register<LLInventoryPanel> r("inventory_panel");
 
@@ -800,7 +801,11 @@ bool LLInventoryPanel::beginIMSession()
 		name = llformat("Session %d", session_num++);
 	}
 
-	gIMMgr->addSession(name, type, members[0], members);
+	LLUUID session_id = gIMMgr->addSession(name, type, members[0], members);
+	if (session_id != LLUUID::null)
+	{
+		LLIMFloater::show(session_id);
+	}
 		
 	return true;
 }
diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp
index 8e3a44682c8..75ef5208e76 100644
--- a/indra/newview/llnotificationofferhandler.cpp
+++ b/indra/newview/llnotificationofferhandler.cpp
@@ -99,6 +99,10 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
 			session_id = LLIMMgr::instance().addSession(
 					notification->getSubstitutions()["NAME"], IM_NOTHING_SPECIAL,
 					notification->getPayload()["from_id"]);
+			if (session_id != LLUUID::null)
+			{
+				LLIMFloater::show(session_id);
+			}
 		}
 		LLIMMgr::instance().addMessage(session_id, LLUUID(),
 				notification->getSubstitutions()["NAME"],
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 300ebf4e243..053a8d19e55 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -210,6 +210,7 @@
 
 #include "lltexlayer.h"
 #include "llappearancemgr.h"
+#include "llimfloater.h"
 
 using namespace LLVOAvatarDefines;
 
@@ -6265,9 +6266,13 @@ class LLAvatarSendIM : public view_listener_t
 
 			//EInstantMessage type = have_agent_callingcard(gLastHitObjectID)
 			//	? IM_SESSION_ADD : IM_SESSION_CARDLESS_START;
-			gIMMgr->addSession(name,
+			LLUUID session_id = gIMMgr->addSession(name,
 								IM_NOTHING_SPECIAL,
 								avatar->getID());
+			if (session_id != LLUUID::null)
+			{
+				LLIMFloater::show(session_id);
+			}
 		}
 		return true;
 	}
-- 
GitLab


From dbd749d533532368f209c5d5687a38cf9b4f1657 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Fri, 6 Nov 2009 17:57:15 +0000
Subject: [PATCH 226/306] DEV-42322 webkit plugin fails to start on linux in
 mercurial repo

---
 indra/cmake/WebKitLibPlugin.cmake | 1 +
 1 file changed, 1 insertion(+)

diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake
index 9ec23e80ca1..1c572ab27f2 100644
--- a/indra/cmake/WebKitLibPlugin.cmake
+++ b/indra/cmake/WebKitLibPlugin.cmake
@@ -51,6 +51,7 @@ elseif (LINUX)
         QtGui
         QtCore
 
+        jpeg
         fontconfig
         X11
         Xrender
-- 
GitLab


From dae2e04f1930404296f39a39ec91c8cdb95eb733 Mon Sep 17 00:00:00 2001
From: Dmitry Oleshko <doleshko@productengine.com>
Date: Fri, 6 Nov 2009 20:03:03 +0200
Subject: [PATCH 227/306] partial implementation for the major task (EXT-989)
 IM chiclets should expand to show active voice indicator

--HG--
branch : product-engine
---
 indra/newview/llchiclet.cpp      | 194 ++++++++++++++++++-------------
 indra/newview/llchiclet.h        |  76 +++++++-----
 indra/newview/llvoicechannel.cpp |   3 +
 indra/newview/llvoicechannel.h   |   7 ++
 4 files changed, 168 insertions(+), 112 deletions(-)

diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 6fd7e6b07db..041baf06e7c 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -200,7 +200,9 @@ void LLChiclet::setValue(const LLSD& value)
 
 LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p)
 : LLChiclet(p)
+, mShowSpeaker(false)
 , mNewMessagesIcon(NULL)
+, mSpeakerCtrl(NULL)
 , mCounterCtrl(NULL)
 {
 	// initialize an overlay icon for new messages
@@ -219,6 +221,40 @@ LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p)
 	setShowCounter(false);
 }
 
+void LLIMChiclet::setShowSpeaker(bool show)
+{
+	bool needs_resize = getShowSpeaker() != show;
+	if(needs_resize)
+	{		
+		mShowSpeaker = show;
+		toggleSpeakerControl();
+		onChicletSizeChanged();		
+	}
+}
+void LLIMChiclet::initSpeakerControl()
+{
+	mSpeakerCtrl->setSpeakerId(getOtherParticipantId());
+}
+
+void LLIMChiclet::toggleSpeakerControl()
+{
+	LLRect speaker_rect = mSpeakerCtrl->getRect();
+	S32 required_width = getRect().getWidth();
+
+	if(getShowSpeaker())
+	{
+		required_width = required_width + speaker_rect.getWidth();
+		initSpeakerControl();		
+	}
+	else
+	{
+		required_width = required_width - speaker_rect.getWidth();
+	}
+	
+	reshape(required_width, getRect().getHeight());
+	mSpeakerCtrl->setVisible(getShowSpeaker());
+}
+
 void LLIMChiclet::setShowNewMessagesIcon(bool show)
 {
 	if(mNewMessagesIcon)
@@ -310,7 +346,7 @@ LLIMP2PChiclet::Params::Params()
 	// Changed icon height from 25 to 24 to fix ticket EXT-794.
 	// In some cases(after changing UI scale) 25 pixel height icon was 
 	// drawn incorrectly, i'm not sure why.
-	avatar_icon.rect(LLRect(0, 24, 25, 0));
+	avatar_icon.rect(LLRect(0, 24, 24, 0));
 	avatar_icon.mouse_opaque(false);
 
 	unread_notifications.name("unread");
@@ -323,7 +359,9 @@ LLIMP2PChiclet::Params::Params()
 	unread_notifications.visible(false);
 
 	speaker.name("speaker");
-	speaker.rect(LLRect(45, 25, 65, 0));
+	speaker.rect(LLRect(25, 25, 45, 0));
+	speaker.auto_update(true);
+	speaker.draw_border(false);
 
 	show_speaker = false;
 }
@@ -331,7 +369,6 @@ LLIMP2PChiclet::Params::Params()
 LLIMP2PChiclet::LLIMP2PChiclet(const Params& p)
 : LLIMChiclet(p)
 , mChicletIconCtrl(NULL)
-, mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
 	LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon;
@@ -359,18 +396,9 @@ void LLIMP2PChiclet::setCounter(S32 counter)
 	setShowNewMessagesIcon(counter);
 }
 
-LLRect LLIMP2PChiclet::getRequiredRect()
+void LLIMP2PChiclet::initSpeakerControl()
 {
-	LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0);
-	if(getShowCounter())
-	{
-		rect.mRight += mCounterCtrl->getRequiredRect().getWidth();
-	}
-	if(getShowSpeaker())
-	{
-		rect.mRight += mSpeakerCtrl->getRect().getWidth();
-	}
-	return rect;
+	mSpeakerCtrl->setSpeakerId(getOtherParticipantId());
 }
 
 void LLIMP2PChiclet::setOtherParticipantId(const LLUUID& other_participant_id)
@@ -447,18 +475,6 @@ void LLIMP2PChiclet::onMenuItemClicked(const LLSD& user_data)
 	}
 }
 
-void LLIMP2PChiclet::setShowSpeaker(bool show)
-{
-	LLIMChiclet::setShowSpeaker(show);
-
-	bool needs_resize = getShowSpeaker() != show;
-	mSpeakerCtrl->setVisible(getShowSpeaker());
-	if(needs_resize)
-	{
-		onChicletSizeChanged();
-	}
-}
-
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
@@ -494,7 +510,9 @@ LLAdHocChiclet::Params::Params()
 
 
 	speaker.name("speaker");
-	speaker.rect(LLRect(45, 25, 65, 0));
+	speaker.rect(LLRect(25, 25, 45, 0));
+	speaker.auto_update(true);
+	speaker.draw_border(false);
 
 	show_speaker = false;
 }
@@ -502,7 +520,6 @@ LLAdHocChiclet::Params::Params()
 LLAdHocChiclet::LLAdHocChiclet(const Params& p)
 : LLIMChiclet(p)
 , mChicletIconCtrl(NULL)
-, mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
 	LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon;
@@ -533,24 +550,35 @@ void LLAdHocChiclet::setSessionId(const LLUUID& session_id)
 	mChicletIconCtrl->setValue(im_session->mOtherParticipantID);
 }
 
-void LLAdHocChiclet::setCounter(S32 counter)
+void LLAdHocChiclet::draw()
 {
-	mCounterCtrl->setCounter(counter);
-	setShowNewMessagesIcon(counter);
+	initSpeakerControl();
+	LLIMChiclet::draw();
 }
 
-LLRect LLAdHocChiclet::getRequiredRect()
+void LLAdHocChiclet::initSpeakerControl()
 {
-	LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0);
-	if(getShowCounter())
-	{
-		rect.mRight += mCounterCtrl->getRequiredRect().getWidth();
-	}
-	if(getShowSpeaker())
+	LLUUID speaker_id;
+	LLSpeakerMgr::speaker_list_t speaker_list;
+	
+	LLIMModel::getInstance()->findIMSession(getSessionId())->mSpeakers->getSpeakerList(&speaker_list, FALSE);
+	for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i)
 	{
-		rect.mRight += mSpeakerCtrl->getRect().getWidth();
+		LLPointer<LLSpeaker> s = *i;
+		if (s->mSpeechVolume > 0 || s->mStatus == LLSpeaker::STATUS_SPEAKING)
+		{
+			speaker_id = s->mID;
+			break;
+		}
 	}
-	return rect;
+
+	mSpeakerCtrl->setSpeakerId(speaker_id);
+}
+
+void LLAdHocChiclet::setCounter(S32 counter)
+{
+	mCounterCtrl->setCounter(counter);
+	setShowNewMessagesIcon(counter);
 }
 
 BOOL LLAdHocChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask)
@@ -584,7 +612,9 @@ LLIMGroupChiclet::Params::Params()
 	unread_notifications.visible(false);
 
 	speaker.name("speaker");
-	speaker.rect(LLRect(45, 25, 65, 0));
+	speaker.rect(LLRect(25, 25, 45, 0));
+	speaker.auto_update(true);
+	speaker.draw_border(false);
 
 	show_speaker = false;
 }
@@ -593,7 +623,6 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p)
 : LLIMChiclet(p)
 , LLGroupMgrObserver(LLUUID::null)
 , mChicletIconCtrl(NULL)
-, mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
 	LLChicletGroupIconCtrl::Params avatar_params = p.group_icon;
@@ -626,18 +655,32 @@ void LLIMGroupChiclet::setCounter(S32 counter)
 	setShowNewMessagesIcon(counter);
 }
 
-LLRect LLIMGroupChiclet::getRequiredRect()
+void LLIMGroupChiclet::draw()
 {
-	LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0);
-	if(getShowCounter())
-	{
-		rect.mRight += mCounterCtrl->getRequiredRect().getWidth();
-	}
-	if(getShowSpeaker())
+	initSpeakerControl();
+	LLIMChiclet::draw();
+}
+
+void LLIMGroupChiclet::initSpeakerControl()
+{
+	LLUUID speaker_id;
+	LLSpeakerMgr* speaker_mgr = NULL;
+	LLSpeakerMgr::speaker_list_t speaker_list;
+
+	speaker_mgr = LLIMModel::getInstance()->findIMSession(getSessionId())->mSpeakers;
+	speaker_mgr->update(TRUE);
+	speaker_mgr->getSpeakerList(&speaker_list, FALSE);
+	for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i)
 	{
-		rect.mRight += mSpeakerCtrl->getRect().getWidth();
+		LLPointer<LLSpeaker> s = *i;
+		if (s->mSpeechVolume > 0 || s->mStatus == LLSpeaker::STATUS_SPEAKING)
+		{
+			speaker_id = s->mID;
+			break;
+		}
 	}
-	return rect;
+
+	mSpeakerCtrl->setSpeakerId(speaker_id);
 }
 
 void LLIMGroupChiclet::setSessionId(const LLUUID& session_id)
@@ -724,17 +767,6 @@ void LLIMGroupChiclet::onMenuItemClicked(const LLSD& user_data)
 	}
 }
 
-void LLIMGroupChiclet::setShowSpeaker(bool show)
-{
-	LLIMChiclet::setShowSpeaker(show);
-
-	bool needs_resize = getShowSpeaker() != show;
-	mSpeakerCtrl->setVisible(getShowSpeaker());
-	if(needs_resize)
-	{
-		onChicletSizeChanged();
-	}
-}
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
@@ -850,10 +882,28 @@ BOOL LLChicletPanel::postBuild()
 	LLIMModel::instance().addNewMsgCallback(boost::bind(im_chiclet_callback, this, _1));
 	LLIMModel::instance().addNoUnreadMsgsCallback(boost::bind(im_chiclet_callback, this, _1));
 	LLIMChiclet::sFindChicletsSignal.connect(boost::bind(&LLChicletPanel::findChiclet<LLChiclet>, this, _1));
+	LLVoiceChannel::setOnCurrentVoiceChannelChanged(boost::bind(&LLChicletPanel::onCurrentVoiceChannelChanged, this, _1));
 
 	return TRUE;
 }
 
+void LLChicletPanel::onCurrentVoiceChannelChanged(const LLUUID& session_id)
+{
+	for(chiclet_list_t::iterator it = mChicletList.begin(); it != mChicletList.end(); ++it)
+	{
+		LLIMChiclet* chiclet = dynamic_cast<LLIMChiclet*>(*it);
+		if(chiclet)
+		{
+			if(chiclet->getSessionId() == session_id)
+			{
+				chiclet->setShowSpeaker(true);
+				continue;
+			}
+			chiclet->setShowSpeaker(false);
+		}
+	}
+}
+
 S32 LLChicletPanel::calcChickletPanleWidth()
 {
 	S32 res = 0;
@@ -897,23 +947,7 @@ bool LLChicletPanel::addChiclet(LLChiclet* chiclet, S32 index)
 
 void LLChicletPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param)
 {
-	S32 chiclet_width = ctrl->getRect().getWidth();
-	S32 chiclet_new_width = ctrl->getRequiredRect().getWidth();
-
-	if(chiclet_new_width == chiclet_width)
-	{
-		return;
-	}
-
-	LLRect chiclet_rect = ctrl->getRect();
-	chiclet_rect.mRight = chiclet_rect.mLeft + chiclet_new_width;	
-
-	ctrl->setRect(chiclet_rect);
-
-	S32 offset = chiclet_new_width - chiclet_width;
-	S32 index = getChicletIndex(ctrl);
-
-	shiftChiclets(offset, index + 1);
+	arrange();
 	trimChiclets();
 	showScrollButtonsIfNeeded();
 }
@@ -1452,6 +1486,6 @@ void LLChicletGroupIconCtrl::setValue(const LLSD& value )
 //////////////////////////////////////////////////////////////////////////
 
 LLChicletSpeakerCtrl::LLChicletSpeakerCtrl(const Params&p)
- : LLIconCtrl(p)
+ : LLOutputMonitorCtrl(p)
 {
 }
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index a830240b7d4..21909d2577f 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -149,11 +149,11 @@ class LLChicletGroupIconCtrl : public LLIconCtrl
 /*
  * Class for displaying status of Voice Chat 
 */
-class LLChicletSpeakerCtrl : public LLIconCtrl
+class LLChicletSpeakerCtrl : public LLOutputMonitorCtrl
 {
 public:
 
-	struct Params : public LLInitParam::Block<Params, LLIconCtrl::Params>
+	struct Params : public LLInitParam::Block<Params, LLOutputMonitorCtrl::Params>
 	{
 		Params(){};
 	};
@@ -266,8 +266,6 @@ class LLChiclet : public LLUICtrl
 * Base class for Instant Message chiclets.
 * IMChiclet displays icon, number of unread messages(optional)
 * and voice chat status(optional).
-* Every chiclet should override LLUICtrl::getRequiredRect and return 
-* desired width.
 */
 class LLIMChiclet : public LLChiclet
 {
@@ -306,15 +304,25 @@ class LLIMChiclet : public LLChiclet
 	virtual LLUUID getOtherParticipantId() { return mOtherParticipantId; }
 
 	/*
-	 * Shows/hides voice chat status control.
+	* Init Speaker Control with speaker's ID
 	*/
-	virtual void setShowSpeaker(bool show) { mShowSpeaker = show; }
+	virtual void initSpeakerControl();
+
+	/*
+	 * set status (Shows/Hide) for voice control.
+	*/
+	virtual void setShowSpeaker(bool show);
 
 	/*
 	 * Returns voice chat status control visibility.
 	*/
 	virtual bool getShowSpeaker() {return mShowSpeaker;};
 
+	/*
+	* Shows/Hides for voice control for a chiclet.
+	*/
+	virtual void toggleSpeakerControl();
+
 	/*
 	* Shows/hides overlay icon concerning new unread messages.
 	*/
@@ -325,10 +333,7 @@ class LLIMChiclet : public LLChiclet
 	*/
 	virtual bool getShowNewMessagesIcon();
 
-	/*
-	 * Draws border around chiclet.
-	*/
-	/*virtual*/ void draw();
+	virtual void draw();
 
 	/**
 	 * Determine whether given ID refers to a group or an IM chat session.
@@ -363,6 +368,8 @@ class LLIMChiclet : public LLChiclet
 
 	LLIconCtrl* mNewMessagesIcon;
 	LLChicletNotificationCounterCtrl* mCounterCtrl;
+	LLChicletSpeakerCtrl* mSpeakerCtrl;
+
 
 	/** the id of another participant, either an avatar id or a group id*/
 	LLUUID mOtherParticipantId;
@@ -410,8 +417,6 @@ class LLIMP2PChiclet : public LLIMChiclet
 
 	/* virtual */ void setOtherParticipantId(const LLUUID& other_participant_id);
 
-	/*virtual*/ void setShowSpeaker(bool show);
-
 	/*
 	* Sets number of unread messages. Will update chiclet's width if number text 
 	* exceeds size of counter and notify it's parent about size change.
@@ -419,15 +424,14 @@ class LLIMP2PChiclet : public LLIMChiclet
 	/*virtual*/ void setCounter(S32);
 
 	/*
-	* Returns number of unread messages.
+	* Init Speaker Control with speaker's ID
 	*/
-	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
+	/*virtual*/ void initSpeakerControl();
 
 	/*
-	* Returns rect, required to display chiclet.
-	* Width is the only valid value.
+	* Returns number of unread messages.
 	*/
-	/*virtual*/ LLRect getRequiredRect();
+	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
 
 protected:
 	LLIMP2PChiclet(const Params& p);
@@ -457,7 +461,6 @@ class LLIMP2PChiclet : public LLIMChiclet
 private:
 
 	LLChicletAvatarIconCtrl* mChicletIconCtrl;
-	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
 
@@ -495,15 +498,19 @@ class LLAdHocChiclet : public LLIMChiclet
 	/*virtual*/ void setCounter(S32);
 
 	/*
-	* Returns number of unread messages.
+	* Keep Speaker Control with actual speaker's ID
 	*/
-	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
+	/*virtual*/ void draw();
 
 	/*
-	* Returns rect, required to display chiclet.
-	* Width is the only valid value.
+	* Init Speaker Control with speaker's ID
 	*/
-	/*virtual*/ LLRect getRequiredRect();
+	/*virtual*/ void initSpeakerControl();
+
+	/*
+	* Returns number of unread messages.
+	*/
+	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
 
 protected:
 	LLAdHocChiclet(const Params& p);
@@ -517,7 +524,6 @@ class LLAdHocChiclet : public LLIMChiclet
 private:
 
 	LLChicletAvatarIconCtrl* mChicletIconCtrl;
-	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
 
@@ -547,14 +553,17 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 	 */
 	/*virtual*/ void setSessionId(const LLUUID& session_id);
 
+	/*
+	* Keep Speaker Control with actual speaker's ID
+	*/
+	/*virtual*/ void draw();
+
 	/**
 	 * Callback for LLGroupMgrObserver, we get this when group data is available or changed.
 	 * Sets group icon.
 	 */
 	/*virtual*/ void changed(LLGroupChange gc);
 
-	/*virtual*/ void setShowSpeaker(bool show);
-
 	/*
 	* Sets number of unread messages. Will update chiclet's width if number text 
 	* exceeds size of counter and notify it's parent about size change.
@@ -562,15 +571,14 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 	/*virtual*/ void setCounter(S32);
 
 	/*
-	* Returns number of unread messages.
+	* Init Speaker Control with speaker's ID
 	*/
-	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
+	/*virtual*/ void initSpeakerControl();
 
 	/*
-	* Returns rect, required to display chiclet.
-	* Width is the only valid value.
+	* Returns number of unread messages.
 	*/
-	/*virtual*/ LLRect getRequiredRect();
+	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
 
 	~LLIMGroupChiclet();
 
@@ -597,7 +605,6 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 private:
 
 	LLChicletGroupIconCtrl* mChicletIconCtrl;
-	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
 
@@ -735,6 +742,11 @@ class LLChicletPanel : public LLPanel
 
 	/*virtual*/ BOOL postBuild();
 
+	/*
+	* Handler for the Voice Client's signal. Finds a corresponding chiclet and toggles its SpeakerControl
+	*/
+	void onCurrentVoiceChannelChanged(const LLUUID& session_id);
+
 	/*
 	 * Reshapes controls and rearranges chiclets if needed.
 	*/
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index cefc88ebee8..5ab3a2aaf30 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -46,6 +46,7 @@ LLVoiceChannel::voice_channel_map_t LLVoiceChannel::sVoiceChannelMap;
 LLVoiceChannel::voice_channel_map_uri_t LLVoiceChannel::sVoiceChannelURIMap;
 LLVoiceChannel* LLVoiceChannel::sCurrentVoiceChannel = NULL;
 LLVoiceChannel* LLVoiceChannel::sSuspendedVoiceChannel = NULL;
+LLVoiceChannel::channel_changed_signal_t LLVoiceChannel::sCurrentVoiceChannelChanged;
 
 BOOL LLVoiceChannel::sSuspended = FALSE;
 
@@ -320,6 +321,8 @@ void LLVoiceChannel::activate()
 	{
 		setState(STATE_CALL_STARTED);
 	}
+
+	sCurrentVoiceChannelChanged(this->mSessionID);
 }
 
 void LLVoiceChannel::getChannelInfo()
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index 8f1e9ff02d3..dfa886c99ce 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -54,6 +54,13 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver
 
 	typedef boost::function<void(const EState& old_state, const EState& new_state)> state_changed_callback_t;
 
+	// on current channel changed signal
+	typedef boost::function<void(const LLUUID& session_id)> channel_changed_callback_t;
+	typedef boost::signals2::signal<void(const LLUUID& session_id)> channel_changed_signal_t;
+	static channel_changed_signal_t sCurrentVoiceChannelChanged;
+	static boost::signals2::connection setOnCurrentVoiceChannelChanged(channel_changed_callback_t cb) { return sCurrentVoiceChannelChanged.connect(cb); }
+
+
 	LLVoiceChannel(const LLUUID& session_id, const std::string& session_name);
 	virtual ~LLVoiceChannel();
 
-- 
GitLab


From 258eb3d7dd298390eca2740dc3c18c7c454df5e0 Mon Sep 17 00:00:00 2001
From: "Nyx (Neal Orman)" <nyx@lindenlab.com>
Date: Fri, 6 Nov 2009 13:10:38 -0500
Subject: [PATCH 228/306] EXT-1823 avatar shape corrupted with huge legs/feet

As suspected a morph mask issue. Apparently we were setting success to false
if the user specifies a pant or shrit texture without an alpha channel.
Result: bad morph masks.

Patch begins to clean up the isMorphMaskValid issue, as well as fixing this
error.

Code reviewed by Vir
---
 indra/newview/lltexlayer.cpp     | 113 +++++++++++++++++--------------
 indra/newview/lltexlayer.h       |  19 +++---
 indra/newview/llvoavatar.cpp     |  38 ++++-------
 indra/newview/llvoavatar.h       |   3 -
 indra/newview/llvoavatarself.cpp |   2 +-
 5 files changed, 86 insertions(+), 89 deletions(-)

diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 5d9046ac905..73340cbc03d 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -670,8 +670,6 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
 	LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE);
 	gGL.setColorMask(true, true);
 
-	BOOL render_morph = mAvatar->morphMaskNeedsUpdate(mBakedTexIndex);
-
 	// clear buffer area to ensure we don't pick up UI elements
 	{
 		gGL.flush();
@@ -691,12 +689,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
 		if (layer->getRenderPass() == LLTexLayer::RP_COLOR)
 		{
 			gGL.flush();
-			success &= layer->render(x, y, width, height, render_morph);
+			success &= layer->render(x, y, width, height);
 			gGL.flush();
-			if (layer->isMorphValid())
-			{
-				mAvatar->setMorphMasksValid(TRUE, mBakedTexIndex);
-			}
 		}
 	}
 	
@@ -786,12 +780,10 @@ void LLTexLayerSet::gatherMorphMaskAlpha(U8 *data, S32 width, S32 height)
 {
 	memset(data, 255, width * height);
 
-	BOOL render_morph = mAvatar->morphMaskNeedsUpdate(mBakedTexIndex);
-
 	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
 	{
 		LLTexLayerInterface* layer = *iter;
-		layer->gatherAlphaMasks(data, mComposite->getOriginX(),mComposite->getOriginY(), width, height, render_morph);
+		layer->gatherAlphaMasks(data, mComposite->getOriginX(),mComposite->getOriginY(), width, height);
 	}
 	
 	// Set alpha back to that of our alpha masks.
@@ -863,6 +855,31 @@ void LLTexLayerSet::applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_
 	mAvatar->applyMorphMask(tex_data, width, height, num_components, mBakedTexIndex);
 }
 
+BOOL LLTexLayerSet::isMorphValid()
+{
+	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
+	{
+		LLTexLayerInterface* layer = *iter;
+		if (layer && !layer->isMorphValid())
+		{
+			return FALSE;
+		}
+	}
+	return TRUE;
+}
+
+void LLTexLayerSet::invalidateMorphMasks()
+{
+	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
+	{
+		LLTexLayerInterface* layer = *iter;
+		if (layer)
+		{
+			layer->invalidateMorphMasks();
+		}
+	}
+}
+
 
 //-----------------------------------------------------------------------------
 // LLTexLayerInfo
@@ -1282,7 +1299,7 @@ void LLTexLayer::calculateTexLayerColor(const param_color_list_t &param_list, LL
 	}
 }
 
-BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
+BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height)
 {
 	LLGLEnable color_mat(GL_COLOR_MATERIAL);
 	gPipeline.disableLights();
@@ -1333,7 +1350,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
 			}
 		}//*/
 
-		renderMorphMasks(x, y, width, height, net_color, render_morph);
+		renderMorphMasks(x, y, width, height, net_color);
 		alpha_mask_specified = TRUE;
 		gGL.flush();
 		gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ONE_MINUS_DEST_ALPHA);
@@ -1534,12 +1551,12 @@ BOOL LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height)
 	return success;
 }
 
-/*virtual*/ void LLTexLayer::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph)
+/*virtual*/ void LLTexLayer::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height)
 {
-	addAlphaMask(data, originX, originY, width, height, render_morph);
+	addAlphaMask(data, originX, originY, width, height);
 }
 
-BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color, BOOL render_morph)
+BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color)
 {
 	BOOL success = TRUE;
 
@@ -1578,46 +1595,38 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
 	// Accumulate the alpha component of the texture
 	if( getInfo()->mLocalTexture != -1 )
 	{
-			LLViewerTexture* tex = mLocalTextureObject->getImage();
-			if( tex && (tex->getComponents() == 4) )
-			{
-				LLGLSNoAlphaTest gls_no_alpha_test;
+		LLViewerTexture* tex = mLocalTextureObject->getImage();
+		if( tex && (tex->getComponents() == 4) )
+		{
+			LLGLSNoAlphaTest gls_no_alpha_test;
 
-				LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode();
-				
-				gGL.getTexUnit(0)->bind(tex);
-				gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
+			LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode();
+			
+			gGL.getTexUnit(0)->bind(tex);
+			gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
 
-				gl_rect_2d_simple_tex( width, height );
+			gl_rect_2d_simple_tex( width, height );
 
-				gGL.getTexUnit(0)->setTextureAddressMode(old_mode);
-				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-			}
-			else
-			{
-				success = FALSE;
-			}
+			gGL.getTexUnit(0)->setTextureAddressMode(old_mode);
+			gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 		}
+	}
 
 	if( !getInfo()->mStaticImageFileName.empty() )
 	{
-			LLViewerTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask);
-			if( tex )
-			{
-				if(	(tex->getComponents() == 4) ||
-					( (tex->getComponents() == 1) && getInfo()->mStaticImageIsMask ) )
-				{
-					LLGLSNoAlphaTest gls_no_alpha_test;
-					gGL.getTexUnit(0)->bind(tex);
-					gl_rect_2d_simple_tex( width, height );
-					gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-				}
-			}
-			else
+		LLViewerTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask);
+		if( tex )
+		{
+			if(	(tex->getComponents() == 4) ||
+				( (tex->getComponents() == 1) && getInfo()->mStaticImageIsMask ) )
 			{
-				success = FALSE;
+				LLGLSNoAlphaTest gls_no_alpha_test;
+				gGL.getTexUnit(0)->bind(tex);
+				gl_rect_2d_simple_tex( width, height );
+				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 			}
 		}
+	}
 
 	// Draw a rectangle with the layer color to multiply the alpha by that color's alpha.
 	// Note: we're still using gGL.blendFunc( GL_DST_ALPHA, GL_ZERO );
@@ -1634,7 +1643,7 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
 
 	gGL.setColorMask(true, true);
 	
-	if (render_morph && mHasMorph && success)
+	if (hasMorph() && success)
 	{
 		LLCRC alpha_mask_crc;
 		const LLUUID& uuid = getUUID();
@@ -1674,7 +1683,7 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
 	return success;
 }
 
-void LLTexLayer::addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph)
+void LLTexLayer::addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height)
 {
 	S32 size = width * height;
 	U8* alphaData = getAlphaData();
@@ -1684,7 +1693,7 @@ void LLTexLayer::addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32
 		findNetColor( &net_color );
 		// TODO: eliminate need for layer morph mask valid flag
 		invalidateMorphMasks();
-		renderMorphMasks(originX, originY, width, height, net_color, render_morph);
+		renderMorphMasks(originX, originY, width, height, net_color);
 		alphaData = getAlphaData();
 	}
 	if (alphaData)
@@ -1805,7 +1814,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i)
 	return layer;
 }
 
-/*virtual*/ BOOL LLTexLayerTemplate::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
+/*virtual*/ BOOL LLTexLayerTemplate::render(S32 x, S32 y, S32 width, S32 height)
 {
 	BOOL success = TRUE;
 	updateWearableCache();
@@ -1827,7 +1836,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i)
 		{
 			wearable->writeToAvatar(FALSE, FALSE);
 			layer->setLTO(lto);
-			success &= layer->render(x,y,width,height,render_morph);
+			success &= layer->render(x,y,width,height);
 		}
 	}
 
@@ -1849,7 +1858,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i)
 	return success;
 }
 
-/*virtual*/ void LLTexLayerTemplate::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph)
+/*virtual*/ void LLTexLayerTemplate::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height)
 {
 	U32 num_wearables = updateWearableCache();
 	for (U32 i = 0; i < num_wearables; i++)
@@ -1857,7 +1866,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i)
 		LLTexLayer *layer = getLayer(i);
 		if (layer)
 		{
-			layer->addAlphaMask(data, originX, originY, width, height, render_morph);
+			layer->addAlphaMask(data, originX, originY, width, height);
 		}
 	}
 }
diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h
index e4a6e82ba5b..cd8f27a96b4 100644
--- a/indra/newview/lltexlayer.h
+++ b/indra/newview/lltexlayer.h
@@ -81,13 +81,14 @@ class LLTexLayerInterface
 
 	const LLTexLayerInfo* 	getInfo() const { return mInfo; }
 	virtual BOOL			setInfo(const LLTexLayerInfo *info, LLWearable* wearable ); // This sets mInfo and calls initialization functions
-	virtual BOOL			render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph) = 0;
+	virtual BOOL			render(S32 x, S32 y, S32 width, S32 height) = 0;
 	void					requestUpdate();
 	LLTexLayerSet*			const getTexLayerSet() const { return mTexLayerSet; }
 
 	virtual void			deleteCaches() = 0;
 	void					invalidateMorphMasks();
 	virtual void			setHasMorph(BOOL newval) { mHasMorph = newval; }
+	BOOL					hasMorph()				 { return mHasMorph; }
 	BOOL					isMorphValid()			 { return mMorphMasksValid; }
 
 	const std::string&		getName() const;
@@ -95,7 +96,7 @@ class LLTexLayerInterface
 	const std::string&		getGlobalColor() const;
 
 	virtual BOOL			blendAlphaTexture( S32 x, S32 y, S32 width, S32 height) = 0;
-	virtual void			gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph) = 0;
+	virtual void			gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height) = 0;
 	BOOL					hasAlphaParams() const { return !mParamAlphaList.empty(); }
 	BOOL					isVisibilityMask() const;
 
@@ -134,10 +135,10 @@ class LLTexLayerTemplate : public LLTexLayerInterface
 	LLTexLayerTemplate(const LLTexLayerTemplate &layer);
 	/*virtual*/ ~LLTexLayerTemplate();
 
-	/*virtual*/ BOOL		render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph);
+	/*virtual*/ BOOL		render(S32 x, S32 y, S32 width, S32 height);
 	/*virtual*/ BOOL		setInfo(const LLTexLayerInfo *info, LLWearable* wearable ); // This sets mInfo and calls initialization functions
 	/*virtual*/ BOOL		blendAlphaTexture( S32 x, S32 y, S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer
-	/*virtual*/ void		gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph);
+	/*virtual*/ void		gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height);
 	/*virtual*/ void		setHasMorph(BOOL newval);
 	/*virtual*/ void		deleteCaches();
 private:
@@ -162,16 +163,16 @@ class LLTexLayer : public LLTexLayerInterface
 	/*virtual*/ ~LLTexLayer();
 
 	/*virtual*/ BOOL		setInfo(const LLTexLayerInfo *info, LLWearable* wearable ); // This sets mInfo and calls initialization functions
-	/*virtual*/ BOOL		render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph);
+	/*virtual*/ BOOL		render(S32 x, S32 y, S32 width, S32 height);
 
 	/*virtual*/ void		deleteCaches();
 	U8*						getAlphaData();
 
 	BOOL					findNetColor(LLColor4* color) const;
 	/*virtual*/ BOOL		blendAlphaTexture( S32 x, S32 y, S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer
-	/*virtual*/ void		gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph);
-	BOOL					renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color, BOOL render_morph);
-	void					addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph);
+	/*virtual*/ void		gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height);
+	BOOL					renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color);
+	void					addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height);
 
 	void					setLTO(LLLocalTextureObject *lto) { mLocalTextureObject = lto; }
 	LLLocalTextureObject* 	getLTO() { return mLocalTextureObject; }
@@ -261,6 +262,8 @@ class LLTexLayerSet
 	void					deleteCaches();
 	void					gatherMorphMaskAlpha(U8 *data, S32 width, S32 height);
 	void					applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_components);
+	BOOL					isMorphValid();
+	void					invalidateMorphMasks();
 	LLTexLayerInterface*	findLayerByName(const std::string& name);
 	void					cloneTemplates(LLLocalTextureObject *lto, LLVOAvatarDefines::ETextureIndex tex_index, LLWearable* wearable);
 	
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 60ab6f80758..acf12224553 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -689,7 +689,6 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
 		mBakedTextureDatas[i].mIsUsed = false;
 		mBakedTextureDatas[i].mMaskTexName = 0;
 		mBakedTextureDatas[i].mTextureIndex = LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)i);
-		mBakedTextureDatas[i].mMorphMasksValid = FALSE;
 	}
 
 	mDirtyMesh = TRUE;	// Dirty geometry, need to regenerate.
@@ -6091,28 +6090,6 @@ void LLVOAvatar::addMaskedMorph(EBakedTextureIndex index, LLPolyMorphTarget* mor
 	}
 }
 
-// invalidates morph masks for a given layer. Don't pass a parameter to invalidate all morph masks.
-void LLVOAvatar::invalidateMorphMasks(LLVOAvatarDefines::EBakedTextureIndex index)
-{
-	setMorphMasksValid(FALSE, index);
-}
-
-// updates morph masks to be a value for a given layer. Don't pass an argument to set value for all morph masks
-void LLVOAvatar::setMorphMasksValid(BOOL new_status, LLVOAvatarDefines::EBakedTextureIndex index)
-{
-	if (index == BAKED_NUM_INDICES)
-	{
-		for (U8 tex = 0; tex < (U8)BAKED_NUM_INDICES; tex++)
-		{
-			mBakedTextureDatas[tex].mMorphMasksValid = new_status;
-		}
-	} 
-	else if (index < BAKED_NUM_INDICES) 
-	{
-		mBakedTextureDatas[index].mMorphMasksValid = new_status;
-	}
-}
-
 // returns TRUE if morph masks are present and not valid for a given baked texture, FALSE otherwise
 BOOL LLVOAvatar::morphMaskNeedsUpdate(LLVOAvatarDefines::EBakedTextureIndex index)
 {
@@ -6121,9 +6098,20 @@ BOOL LLVOAvatar::morphMaskNeedsUpdate(LLVOAvatarDefines::EBakedTextureIndex inde
 		return FALSE;
 	}
 
-	if (!mBakedTextureDatas[index].mMaskedMorphs.empty() && !mBakedTextureDatas[index].mMorphMasksValid)
+	if (!mBakedTextureDatas[index].mMaskedMorphs.empty())
 	{
-		return TRUE;
+		if (isSelf())
+		{
+			LLTexLayerSet *layer_set = mBakedTextureDatas[index].mTexLayerSet;
+			if (layer_set)
+			{
+				return !layer_set->isMorphValid();
+			}
+		}
+		else
+		{
+			return FALSE;
+		}
 	}
 
 	return FALSE;
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index f7c794defeb..cf86612ce6a 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -355,10 +355,8 @@ class LLVOAvatar :
 	// Morph masks
 	//--------------------------------------------------------------------
 public:
-	void 		invalidateMorphMasks(LLVOAvatarDefines::EBakedTextureIndex index = LLVOAvatarDefines::BAKED_NUM_INDICES);
 	BOOL 		morphMaskNeedsUpdate(LLVOAvatarDefines::EBakedTextureIndex index = LLVOAvatarDefines::BAKED_NUM_INDICES);
 	void 		addMaskedMorph(LLVOAvatarDefines::EBakedTextureIndex index, LLPolyMorphTarget* morph_target, BOOL invert, std::string layer);
-	void 		setMorphMasksValid(BOOL new_status, LLVOAvatarDefines::EBakedTextureIndex index = LLVOAvatarDefines::BAKED_NUM_INDICES);
 	void 		applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_components, LLVOAvatarDefines::EBakedTextureIndex index = LLVOAvatarDefines::BAKED_NUM_INDICES);
 
 	//--------------------------------------------------------------------
@@ -489,7 +487,6 @@ class LLVOAvatar :
 		// Stores pointers to the joint meshes that this baked texture deals with
 		std::vector< LLViewerJointMesh * > 	mMeshes;  // std::vector<LLViewerJointMesh> mJoints[i]->mMeshParts
 		morph_list_t						mMaskedMorphs;
-		BOOL								mMorphMasksValid;
 	};
 	typedef std::vector<BakedTextureData> 	bakedtexturedata_vec_t;
 	bakedtexturedata_vec_t 					mBakedTextureDatas;
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 85a68fdd3f5..6c3348b247f 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -1387,8 +1387,8 @@ void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL set_by_u
 	}
 	// llinfos << "LLVOAvatar::invalidComposite() " << layerset->getBodyRegion() << llendl;
 
-	invalidateMorphMasks(layerset->getBakedTexIndex());
 	layerset->requestUpdate();
+	layerset->invalidateMorphMasks();
 
 	if( set_by_user )
 	{
-- 
GitLab


From b99ebeed9c6afe8baab18dd0d43103c6991ed1c0 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Fri, 6 Nov 2009 18:44:48 +0000
Subject: [PATCH 229/306] Backed out changeset ad70c07b05b6 (ad70c07b05b6 was
 'Reduced "Medium" font size, which is a temporary fix until menu font can be
 defined specifically. http://jira.secondlife.com/browse/EXT-1315')

This change was too all-around impactful just for the sake of the menu font - it made medium and small font sizes indistinguishable, leading to lots of invisible mismatches as long as this hack persisted...
---
 indra/newview/skins/default/xui/en/fonts.xml | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml
index b261281c640..dec9839d1a6 100644
--- a/indra/newview/skins/default/xui/en/fonts.xml
+++ b/indra/newview/skins/default/xui/en/fonts.xml
@@ -150,11 +150,9 @@
 	     comment="Size of large font (points, or 1/72 of an inch)"
 	     size="10.0"
 	     />
-	     <!-- Changed Medium size to address menu font size not matching spec.
-	     May want to revert/update after menu font configuration has been enabled. -->
   <font_size name="Medium"
 	     comment="Size of medium font (points, or 1/72 of an inch)"
-	     size="8.0"
+	     size="9.0"
 	     />
   <font_size name="Small"
 	     comment="Size of small font (points, or 1/72 of an inch)"
-- 
GitLab


From a9653b37ec29a1bd4c23efdd1d83df15c8bcccdd Mon Sep 17 00:00:00 2001
From: Sergey Borushevsky <sborushevsky@productengine.com>
Date: Fri, 6 Nov 2009 20:46:50 +0200
Subject: [PATCH 230/306] No ticket, added comments to split-by-date code.

--HG--
branch : product-engine
---
 indra/newview/llpanelteleporthistory.cpp | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index a34f029095b..58ecfb60c21 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -406,6 +406,7 @@ void LLTeleportHistoryPanel::getNextTab(const LLDate& item_date, S32& tab_idx, L
 
 		if (tab_idx <= tabs_cnt - 4)
 		{
+			// All tabs, except last three, are tabs for one day, so just push tab_date back by one day
 			tab_date.secondsSinceEpoch(tab_date.secondsSinceEpoch() - seconds_in_day);
 		}
 		else if (tab_idx == tabs_cnt - 3) // 6 day and older, low boundary is 1 month
@@ -442,6 +443,7 @@ void LLTeleportHistoryPanel::getNextTab(const LLDate& item_date, S32& tab_idx, L
 	}
 }
 
+// Called to add items, no more, than ADD_LIMIT at time
 void LLTeleportHistoryPanel::refresh()
 {
 	if (!mHistoryAccordion)
@@ -452,12 +454,16 @@ void LLTeleportHistoryPanel::refresh()
 
 	const LLTeleportHistoryStorage::slurl_list_t& items = mTeleportHistory->getItems();
 
+	// Setting tab_boundary_date to "now", so date from any item would be earlier, than boundary.
+	// That leads to call to getNextTab to get right tab_idx in first pass
 	LLDate tab_boundary_date =  LLDate::now();
+
 	LLFlatListView* curr_flat_view = NULL;
 
 	U32 added_items = 0;
 	while (mCurrentItem >= 0)
 	{
+		// Filtering
 		std::string landmark_title = items[mCurrentItem].mTitle;
 		LLStringUtil::toUpper(landmark_title);
 
@@ -470,10 +476,14 @@ void LLTeleportHistoryPanel::refresh()
 			continue;
 		}
 
+		// Checking whether date of item is earlier, than tab_boundary_date.
+		// In that case, item should be added to another tab
 		const LLDate &date = items[mCurrentItem].mDate;
 
 		if (date < tab_boundary_date)
 		{
+			// Getting apropriate tab_idx for this and subsequent items,
+			// tab_boundary_date would be earliest possible date for this tab
 			S32 tab_idx = 0;
 			getNextTab(date, tab_idx, tab_boundary_date);
 
@@ -580,6 +590,9 @@ void LLTeleportHistoryPanel::replaceItem(S32 removed_index)
 void LLTeleportHistoryPanel::showTeleportHistory()
 {
 	mDirty = true;
+
+	// Starting to add items from last one, in reverse order,
+	// since TeleportHistory keeps most recent item at the end
 	mCurrentItem = mTeleportHistory->getItems().size() - 1;
 
 	for (S32 n = mItemContainers.size() - 1; n >= 0; --n)
-- 
GitLab


From f716bb1e3afd4c950c379dfa702246979de467e6 Mon Sep 17 00:00:00 2001
From: Vadim Savchuk <vsavchuk@productengine.com>
Date: Fri, 6 Nov 2009 21:04:04 +0200
Subject: [PATCH 231/306] Backed out changeset c3b8509f465a (EXT-989) as
 causing numerous conflicts. Will reapply the changes later.

--HG--
branch : product-engine
---
 indra/newview/llchiclet.cpp      | 194 +++++++++++++------------------
 indra/newview/llchiclet.h        |  76 +++++-------
 indra/newview/llvoicechannel.cpp |   3 -
 indra/newview/llvoicechannel.h   |   7 --
 4 files changed, 112 insertions(+), 168 deletions(-)

diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 041baf06e7c..6fd7e6b07db 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -200,9 +200,7 @@ void LLChiclet::setValue(const LLSD& value)
 
 LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p)
 : LLChiclet(p)
-, mShowSpeaker(false)
 , mNewMessagesIcon(NULL)
-, mSpeakerCtrl(NULL)
 , mCounterCtrl(NULL)
 {
 	// initialize an overlay icon for new messages
@@ -221,40 +219,6 @@ LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p)
 	setShowCounter(false);
 }
 
-void LLIMChiclet::setShowSpeaker(bool show)
-{
-	bool needs_resize = getShowSpeaker() != show;
-	if(needs_resize)
-	{		
-		mShowSpeaker = show;
-		toggleSpeakerControl();
-		onChicletSizeChanged();		
-	}
-}
-void LLIMChiclet::initSpeakerControl()
-{
-	mSpeakerCtrl->setSpeakerId(getOtherParticipantId());
-}
-
-void LLIMChiclet::toggleSpeakerControl()
-{
-	LLRect speaker_rect = mSpeakerCtrl->getRect();
-	S32 required_width = getRect().getWidth();
-
-	if(getShowSpeaker())
-	{
-		required_width = required_width + speaker_rect.getWidth();
-		initSpeakerControl();		
-	}
-	else
-	{
-		required_width = required_width - speaker_rect.getWidth();
-	}
-	
-	reshape(required_width, getRect().getHeight());
-	mSpeakerCtrl->setVisible(getShowSpeaker());
-}
-
 void LLIMChiclet::setShowNewMessagesIcon(bool show)
 {
 	if(mNewMessagesIcon)
@@ -346,7 +310,7 @@ LLIMP2PChiclet::Params::Params()
 	// Changed icon height from 25 to 24 to fix ticket EXT-794.
 	// In some cases(after changing UI scale) 25 pixel height icon was 
 	// drawn incorrectly, i'm not sure why.
-	avatar_icon.rect(LLRect(0, 24, 24, 0));
+	avatar_icon.rect(LLRect(0, 24, 25, 0));
 	avatar_icon.mouse_opaque(false);
 
 	unread_notifications.name("unread");
@@ -359,9 +323,7 @@ LLIMP2PChiclet::Params::Params()
 	unread_notifications.visible(false);
 
 	speaker.name("speaker");
-	speaker.rect(LLRect(25, 25, 45, 0));
-	speaker.auto_update(true);
-	speaker.draw_border(false);
+	speaker.rect(LLRect(45, 25, 65, 0));
 
 	show_speaker = false;
 }
@@ -369,6 +331,7 @@ LLIMP2PChiclet::Params::Params()
 LLIMP2PChiclet::LLIMP2PChiclet(const Params& p)
 : LLIMChiclet(p)
 , mChicletIconCtrl(NULL)
+, mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
 	LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon;
@@ -396,9 +359,18 @@ void LLIMP2PChiclet::setCounter(S32 counter)
 	setShowNewMessagesIcon(counter);
 }
 
-void LLIMP2PChiclet::initSpeakerControl()
+LLRect LLIMP2PChiclet::getRequiredRect()
 {
-	mSpeakerCtrl->setSpeakerId(getOtherParticipantId());
+	LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0);
+	if(getShowCounter())
+	{
+		rect.mRight += mCounterCtrl->getRequiredRect().getWidth();
+	}
+	if(getShowSpeaker())
+	{
+		rect.mRight += mSpeakerCtrl->getRect().getWidth();
+	}
+	return rect;
 }
 
 void LLIMP2PChiclet::setOtherParticipantId(const LLUUID& other_participant_id)
@@ -475,6 +447,18 @@ void LLIMP2PChiclet::onMenuItemClicked(const LLSD& user_data)
 	}
 }
 
+void LLIMP2PChiclet::setShowSpeaker(bool show)
+{
+	LLIMChiclet::setShowSpeaker(show);
+
+	bool needs_resize = getShowSpeaker() != show;
+	mSpeakerCtrl->setVisible(getShowSpeaker());
+	if(needs_resize)
+	{
+		onChicletSizeChanged();
+	}
+}
+
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
@@ -510,9 +494,7 @@ LLAdHocChiclet::Params::Params()
 
 
 	speaker.name("speaker");
-	speaker.rect(LLRect(25, 25, 45, 0));
-	speaker.auto_update(true);
-	speaker.draw_border(false);
+	speaker.rect(LLRect(45, 25, 65, 0));
 
 	show_speaker = false;
 }
@@ -520,6 +502,7 @@ LLAdHocChiclet::Params::Params()
 LLAdHocChiclet::LLAdHocChiclet(const Params& p)
 : LLIMChiclet(p)
 , mChicletIconCtrl(NULL)
+, mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
 	LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon;
@@ -550,35 +533,24 @@ void LLAdHocChiclet::setSessionId(const LLUUID& session_id)
 	mChicletIconCtrl->setValue(im_session->mOtherParticipantID);
 }
 
-void LLAdHocChiclet::draw()
+void LLAdHocChiclet::setCounter(S32 counter)
 {
-	initSpeakerControl();
-	LLIMChiclet::draw();
+	mCounterCtrl->setCounter(counter);
+	setShowNewMessagesIcon(counter);
 }
 
-void LLAdHocChiclet::initSpeakerControl()
+LLRect LLAdHocChiclet::getRequiredRect()
 {
-	LLUUID speaker_id;
-	LLSpeakerMgr::speaker_list_t speaker_list;
-	
-	LLIMModel::getInstance()->findIMSession(getSessionId())->mSpeakers->getSpeakerList(&speaker_list, FALSE);
-	for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i)
+	LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0);
+	if(getShowCounter())
 	{
-		LLPointer<LLSpeaker> s = *i;
-		if (s->mSpeechVolume > 0 || s->mStatus == LLSpeaker::STATUS_SPEAKING)
-		{
-			speaker_id = s->mID;
-			break;
-		}
+		rect.mRight += mCounterCtrl->getRequiredRect().getWidth();
 	}
-
-	mSpeakerCtrl->setSpeakerId(speaker_id);
-}
-
-void LLAdHocChiclet::setCounter(S32 counter)
-{
-	mCounterCtrl->setCounter(counter);
-	setShowNewMessagesIcon(counter);
+	if(getShowSpeaker())
+	{
+		rect.mRight += mSpeakerCtrl->getRect().getWidth();
+	}
+	return rect;
 }
 
 BOOL LLAdHocChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask)
@@ -612,9 +584,7 @@ LLIMGroupChiclet::Params::Params()
 	unread_notifications.visible(false);
 
 	speaker.name("speaker");
-	speaker.rect(LLRect(25, 25, 45, 0));
-	speaker.auto_update(true);
-	speaker.draw_border(false);
+	speaker.rect(LLRect(45, 25, 65, 0));
 
 	show_speaker = false;
 }
@@ -623,6 +593,7 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p)
 : LLIMChiclet(p)
 , LLGroupMgrObserver(LLUUID::null)
 , mChicletIconCtrl(NULL)
+, mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
 	LLChicletGroupIconCtrl::Params avatar_params = p.group_icon;
@@ -655,32 +626,18 @@ void LLIMGroupChiclet::setCounter(S32 counter)
 	setShowNewMessagesIcon(counter);
 }
 
-void LLIMGroupChiclet::draw()
+LLRect LLIMGroupChiclet::getRequiredRect()
 {
-	initSpeakerControl();
-	LLIMChiclet::draw();
-}
-
-void LLIMGroupChiclet::initSpeakerControl()
-{
-	LLUUID speaker_id;
-	LLSpeakerMgr* speaker_mgr = NULL;
-	LLSpeakerMgr::speaker_list_t speaker_list;
-
-	speaker_mgr = LLIMModel::getInstance()->findIMSession(getSessionId())->mSpeakers;
-	speaker_mgr->update(TRUE);
-	speaker_mgr->getSpeakerList(&speaker_list, FALSE);
-	for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i)
+	LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0);
+	if(getShowCounter())
 	{
-		LLPointer<LLSpeaker> s = *i;
-		if (s->mSpeechVolume > 0 || s->mStatus == LLSpeaker::STATUS_SPEAKING)
-		{
-			speaker_id = s->mID;
-			break;
-		}
+		rect.mRight += mCounterCtrl->getRequiredRect().getWidth();
 	}
-
-	mSpeakerCtrl->setSpeakerId(speaker_id);
+	if(getShowSpeaker())
+	{
+		rect.mRight += mSpeakerCtrl->getRect().getWidth();
+	}
+	return rect;
 }
 
 void LLIMGroupChiclet::setSessionId(const LLUUID& session_id)
@@ -767,6 +724,17 @@ void LLIMGroupChiclet::onMenuItemClicked(const LLSD& user_data)
 	}
 }
 
+void LLIMGroupChiclet::setShowSpeaker(bool show)
+{
+	LLIMChiclet::setShowSpeaker(show);
+
+	bool needs_resize = getShowSpeaker() != show;
+	mSpeakerCtrl->setVisible(getShowSpeaker());
+	if(needs_resize)
+	{
+		onChicletSizeChanged();
+	}
+}
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
@@ -882,28 +850,10 @@ BOOL LLChicletPanel::postBuild()
 	LLIMModel::instance().addNewMsgCallback(boost::bind(im_chiclet_callback, this, _1));
 	LLIMModel::instance().addNoUnreadMsgsCallback(boost::bind(im_chiclet_callback, this, _1));
 	LLIMChiclet::sFindChicletsSignal.connect(boost::bind(&LLChicletPanel::findChiclet<LLChiclet>, this, _1));
-	LLVoiceChannel::setOnCurrentVoiceChannelChanged(boost::bind(&LLChicletPanel::onCurrentVoiceChannelChanged, this, _1));
 
 	return TRUE;
 }
 
-void LLChicletPanel::onCurrentVoiceChannelChanged(const LLUUID& session_id)
-{
-	for(chiclet_list_t::iterator it = mChicletList.begin(); it != mChicletList.end(); ++it)
-	{
-		LLIMChiclet* chiclet = dynamic_cast<LLIMChiclet*>(*it);
-		if(chiclet)
-		{
-			if(chiclet->getSessionId() == session_id)
-			{
-				chiclet->setShowSpeaker(true);
-				continue;
-			}
-			chiclet->setShowSpeaker(false);
-		}
-	}
-}
-
 S32 LLChicletPanel::calcChickletPanleWidth()
 {
 	S32 res = 0;
@@ -947,7 +897,23 @@ bool LLChicletPanel::addChiclet(LLChiclet* chiclet, S32 index)
 
 void LLChicletPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param)
 {
-	arrange();
+	S32 chiclet_width = ctrl->getRect().getWidth();
+	S32 chiclet_new_width = ctrl->getRequiredRect().getWidth();
+
+	if(chiclet_new_width == chiclet_width)
+	{
+		return;
+	}
+
+	LLRect chiclet_rect = ctrl->getRect();
+	chiclet_rect.mRight = chiclet_rect.mLeft + chiclet_new_width;	
+
+	ctrl->setRect(chiclet_rect);
+
+	S32 offset = chiclet_new_width - chiclet_width;
+	S32 index = getChicletIndex(ctrl);
+
+	shiftChiclets(offset, index + 1);
 	trimChiclets();
 	showScrollButtonsIfNeeded();
 }
@@ -1486,6 +1452,6 @@ void LLChicletGroupIconCtrl::setValue(const LLSD& value )
 //////////////////////////////////////////////////////////////////////////
 
 LLChicletSpeakerCtrl::LLChicletSpeakerCtrl(const Params&p)
- : LLOutputMonitorCtrl(p)
+ : LLIconCtrl(p)
 {
 }
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index 21909d2577f..a830240b7d4 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -149,11 +149,11 @@ class LLChicletGroupIconCtrl : public LLIconCtrl
 /*
  * Class for displaying status of Voice Chat 
 */
-class LLChicletSpeakerCtrl : public LLOutputMonitorCtrl
+class LLChicletSpeakerCtrl : public LLIconCtrl
 {
 public:
 
-	struct Params : public LLInitParam::Block<Params, LLOutputMonitorCtrl::Params>
+	struct Params : public LLInitParam::Block<Params, LLIconCtrl::Params>
 	{
 		Params(){};
 	};
@@ -266,6 +266,8 @@ class LLChiclet : public LLUICtrl
 * Base class for Instant Message chiclets.
 * IMChiclet displays icon, number of unread messages(optional)
 * and voice chat status(optional).
+* Every chiclet should override LLUICtrl::getRequiredRect and return 
+* desired width.
 */
 class LLIMChiclet : public LLChiclet
 {
@@ -304,25 +306,15 @@ class LLIMChiclet : public LLChiclet
 	virtual LLUUID getOtherParticipantId() { return mOtherParticipantId; }
 
 	/*
-	* Init Speaker Control with speaker's ID
+	 * Shows/hides voice chat status control.
 	*/
-	virtual void initSpeakerControl();
-
-	/*
-	 * set status (Shows/Hide) for voice control.
-	*/
-	virtual void setShowSpeaker(bool show);
+	virtual void setShowSpeaker(bool show) { mShowSpeaker = show; }
 
 	/*
 	 * Returns voice chat status control visibility.
 	*/
 	virtual bool getShowSpeaker() {return mShowSpeaker;};
 
-	/*
-	* Shows/Hides for voice control for a chiclet.
-	*/
-	virtual void toggleSpeakerControl();
-
 	/*
 	* Shows/hides overlay icon concerning new unread messages.
 	*/
@@ -333,7 +325,10 @@ class LLIMChiclet : public LLChiclet
 	*/
 	virtual bool getShowNewMessagesIcon();
 
-	virtual void draw();
+	/*
+	 * Draws border around chiclet.
+	*/
+	/*virtual*/ void draw();
 
 	/**
 	 * Determine whether given ID refers to a group or an IM chat session.
@@ -368,8 +363,6 @@ class LLIMChiclet : public LLChiclet
 
 	LLIconCtrl* mNewMessagesIcon;
 	LLChicletNotificationCounterCtrl* mCounterCtrl;
-	LLChicletSpeakerCtrl* mSpeakerCtrl;
-
 
 	/** the id of another participant, either an avatar id or a group id*/
 	LLUUID mOtherParticipantId;
@@ -417,6 +410,8 @@ class LLIMP2PChiclet : public LLIMChiclet
 
 	/* virtual */ void setOtherParticipantId(const LLUUID& other_participant_id);
 
+	/*virtual*/ void setShowSpeaker(bool show);
+
 	/*
 	* Sets number of unread messages. Will update chiclet's width if number text 
 	* exceeds size of counter and notify it's parent about size change.
@@ -424,14 +419,15 @@ class LLIMP2PChiclet : public LLIMChiclet
 	/*virtual*/ void setCounter(S32);
 
 	/*
-	* Init Speaker Control with speaker's ID
+	* Returns number of unread messages.
 	*/
-	/*virtual*/ void initSpeakerControl();
+	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
 
 	/*
-	* Returns number of unread messages.
+	* Returns rect, required to display chiclet.
+	* Width is the only valid value.
 	*/
-	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
+	/*virtual*/ LLRect getRequiredRect();
 
 protected:
 	LLIMP2PChiclet(const Params& p);
@@ -461,6 +457,7 @@ class LLIMP2PChiclet : public LLIMChiclet
 private:
 
 	LLChicletAvatarIconCtrl* mChicletIconCtrl;
+	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
 
@@ -498,19 +495,15 @@ class LLAdHocChiclet : public LLIMChiclet
 	/*virtual*/ void setCounter(S32);
 
 	/*
-	* Keep Speaker Control with actual speaker's ID
-	*/
-	/*virtual*/ void draw();
-
-	/*
-	* Init Speaker Control with speaker's ID
+	* Returns number of unread messages.
 	*/
-	/*virtual*/ void initSpeakerControl();
+	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
 
 	/*
-	* Returns number of unread messages.
+	* Returns rect, required to display chiclet.
+	* Width is the only valid value.
 	*/
-	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
+	/*virtual*/ LLRect getRequiredRect();
 
 protected:
 	LLAdHocChiclet(const Params& p);
@@ -524,6 +517,7 @@ class LLAdHocChiclet : public LLIMChiclet
 private:
 
 	LLChicletAvatarIconCtrl* mChicletIconCtrl;
+	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
 
@@ -553,17 +547,14 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 	 */
 	/*virtual*/ void setSessionId(const LLUUID& session_id);
 
-	/*
-	* Keep Speaker Control with actual speaker's ID
-	*/
-	/*virtual*/ void draw();
-
 	/**
 	 * Callback for LLGroupMgrObserver, we get this when group data is available or changed.
 	 * Sets group icon.
 	 */
 	/*virtual*/ void changed(LLGroupChange gc);
 
+	/*virtual*/ void setShowSpeaker(bool show);
+
 	/*
 	* Sets number of unread messages. Will update chiclet's width if number text 
 	* exceeds size of counter and notify it's parent about size change.
@@ -571,14 +562,15 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 	/*virtual*/ void setCounter(S32);
 
 	/*
-	* Init Speaker Control with speaker's ID
+	* Returns number of unread messages.
 	*/
-	/*virtual*/ void initSpeakerControl();
+	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
 
 	/*
-	* Returns number of unread messages.
+	* Returns rect, required to display chiclet.
+	* Width is the only valid value.
 	*/
-	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
+	/*virtual*/ LLRect getRequiredRect();
 
 	~LLIMGroupChiclet();
 
@@ -605,6 +597,7 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 private:
 
 	LLChicletGroupIconCtrl* mChicletIconCtrl;
+	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
 
@@ -742,11 +735,6 @@ class LLChicletPanel : public LLPanel
 
 	/*virtual*/ BOOL postBuild();
 
-	/*
-	* Handler for the Voice Client's signal. Finds a corresponding chiclet and toggles its SpeakerControl
-	*/
-	void onCurrentVoiceChannelChanged(const LLUUID& session_id);
-
 	/*
 	 * Reshapes controls and rearranges chiclets if needed.
 	*/
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 5ab3a2aaf30..cefc88ebee8 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -46,7 +46,6 @@ LLVoiceChannel::voice_channel_map_t LLVoiceChannel::sVoiceChannelMap;
 LLVoiceChannel::voice_channel_map_uri_t LLVoiceChannel::sVoiceChannelURIMap;
 LLVoiceChannel* LLVoiceChannel::sCurrentVoiceChannel = NULL;
 LLVoiceChannel* LLVoiceChannel::sSuspendedVoiceChannel = NULL;
-LLVoiceChannel::channel_changed_signal_t LLVoiceChannel::sCurrentVoiceChannelChanged;
 
 BOOL LLVoiceChannel::sSuspended = FALSE;
 
@@ -321,8 +320,6 @@ void LLVoiceChannel::activate()
 	{
 		setState(STATE_CALL_STARTED);
 	}
-
-	sCurrentVoiceChannelChanged(this->mSessionID);
 }
 
 void LLVoiceChannel::getChannelInfo()
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index dfa886c99ce..8f1e9ff02d3 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -54,13 +54,6 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver
 
 	typedef boost::function<void(const EState& old_state, const EState& new_state)> state_changed_callback_t;
 
-	// on current channel changed signal
-	typedef boost::function<void(const LLUUID& session_id)> channel_changed_callback_t;
-	typedef boost::signals2::signal<void(const LLUUID& session_id)> channel_changed_signal_t;
-	static channel_changed_signal_t sCurrentVoiceChannelChanged;
-	static boost::signals2::connection setOnCurrentVoiceChannelChanged(channel_changed_callback_t cb) { return sCurrentVoiceChannelChanged.connect(cb); }
-
-
 	LLVoiceChannel(const LLUUID& session_id, const std::string& session_name);
 	virtual ~LLVoiceChannel();
 
-- 
GitLab


From 30467bda7cd8bc79e9f5fa400cb009ce3dd21a05 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 6 Nov 2009 11:06:20 -0800
Subject: [PATCH 232/306] Show glow around interactive objects on hover.  Glow
 shows through objects/avatars - this is expected. Effect from DaveP long ago,
 hover code by me long ago, just changing the default setting.

---
 indra/newview/app_settings/settings.xml            | 2 +-
 indra/newview/lltoolpie.cpp                        | 2 ++
 indra/newview/skins/default/xui/en/menu_viewer.xml | 4 ++--
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index e8af26c7436..330bfa0c22c 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -6247,7 +6247,7 @@
     <key>Type</key>
     <string>Boolean</string>
     <key>Value</key>
-    <integer>0</integer>
+    <integer>1</integer>
   </map>
 
   <key>RenderHighlightFadeTime</key>
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 24017202cc6..93da32b115f 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -494,6 +494,8 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
 	}
 	else if (handleMediaHover(mHoverPick))
 	{
+		// *NOTE: If you think the hover glow conflicts with the media outline, you
+		// could disable it here.
 		show_highlight = true;
 		// cursor set by media object
 		lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index ebdfb017879..294c86a1b90 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2506,8 +2506,8 @@
                  parameter="RenderAttachedParticles" />
             </menu_item_check>
             <menu_item_check
-             label="Hover Highlight Objects"
-             name="Hover Highlight Objects">
+             label="Hover Glow Objects"
+             name="Hover Glow Objects">
                 <menu_item_check.on_check
                  function="CheckControl"
                  parameter="RenderHighlightEnable" />
-- 
GitLab


From d8864522a40b870a0d693dc7b5c76d140936ee25 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 6 Nov 2009 11:09:09 -0800
Subject: [PATCH 233/306] Changed default help URL for board demo per email
 discussion on viewer2009@lists.

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 330bfa0c22c..b17d6219105 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3574,7 +3574,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://www.google.com/search?q=site%3Awiki.secondlife.com+[TOPIC]&amp;ignore_channel=[CHANNEL]&amp;ignore_version=[VERSION]&amp;ignore_os=[OS]&amp;ignore_language=[LANGUAGE]&amp;ignore_version_major=[VERSION_MAJOR]&amp;ignore_version_minor=[VERSION_MINOR]&amp;ignore_version_patch=[VERSION_PATCH]&amp;ignore_version_build=[VERSION_BUILD]</string>
+      <string>http://docs.lindenlab.com/help/helpfloater.php?topic=[TOPIC]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;os=[OS]&amp;language=[LANGUAGE]&amp;version_major=[VERSION_MAJOR]&amp;version_minor=[VERSION_MINOR]&amp;version_patch=[VERSION_PATCH]&amp;version_build=[VERSION_BUILD]</string>
     </map>
     <key>HighResSnapshot</key>
     <map>
-- 
GitLab


From cd9c07258dc0e1e0534f175a6c7248e64673f3e1 Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Fri, 6 Nov 2009 21:17:08 +0200
Subject: [PATCH 234/306] fixed bug EXT-2111 Unable to edit the Notes & Privacy
 content

--HG--
branch : product-engine
---
 indra/newview/skins/default/xui/en/panel_notes.xml | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml
index 5333dfa2f5b..b9c9100ebcd 100644
--- a/indra/newview/skins/default/xui/en/panel_notes.xml
+++ b/indra/newview/skins/default/xui/en/panel_notes.xml
@@ -17,13 +17,16 @@
      left="0"
      top="0"
      height="517"
+     width="313"
      border_size="0">
         <panel
          name="notes_stack"
          follows="all"
          layout="topleft"
          top="0"
-         left="0">
+         left="0"
+         height="475"
+         width="313">
             <scroll_container
              color="DkGray2"
              follows="all"
@@ -31,8 +34,11 @@
              left="0"
              name="profile_scroll"
              opaque="true"
+             height="475"
+             width="313"
              top="0">
               <panel
+               height="450"
                layout="topleft"
                name="profile_scroll_panel"
                top="0"
@@ -104,7 +110,8 @@
          layout="topleft"
          left="0"
          name="notes_buttons_panel"
-         auto_resize="false">
+         auto_resize="false"
+         width="313">
        <button
          follows="bottom|left"
          height="19"
-- 
GitLab


From 9c55ff93903d19b22dec63a6db26e9ec3436fbf5 Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Fri, 6 Nov 2009 22:13:59 +0200
Subject: [PATCH 235/306] Fixed normal bug EXT-1509 "Going into mouselook while
 in a private call ruins the call floater.": - Made callfloater a single
 instance floater. - Updated floater IM panel visibility change logic. - Added
 NULL checks for voice client pointers in LLFloaterIMPanel.

--HG--
branch : product-engine
---
 indra/newview/llimpanel.cpp | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index 7399f1e1b3a..0b8b5935f87 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -321,6 +321,9 @@ void LLFloaterIMPanel::draw()
 
 	// hide/show start call and end call buttons
 	LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionUUID);
+	if (!voice_channel)
+		return;
+
 	childSetVisible("end_call_btn", LLVoiceClient::voiceEnabled() && voice_channel->getState() >= LLVoiceChannel::STATE_CALL_STARTED);
 	childSetVisible("start_call_btn", LLVoiceClient::voiceEnabled() && voice_channel->getState() < LLVoiceChannel::STATE_CALL_STARTED);
 	childSetEnabled("start_call_btn", enable_connect);
@@ -770,10 +773,13 @@ void LLFloaterIMPanel::onVisibilityChange(const LLSD& new_visibility)
 	}
 	
 	LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionUUID);
-	if (new_visibility.asBoolean() && voice_channel->getState() == LLVoiceChannel::STATE_CONNECTED)
-		LLFloaterReg::showInstance("voice_call", mSessionUUID);
-	else
-		LLFloaterReg::hideInstance("voice_call", mSessionUUID);
+	if (voice_channel && voice_channel->getState() == LLVoiceChannel::STATE_CONNECTED)
+	{
+		if (new_visibility.asBoolean())
+			LLFloaterReg::showInstance("voice_call", mSessionUUID);
+		else
+			LLFloaterReg::hideInstance("voice_call", mSessionUUID);
+	}
 }
 
 void LLFloaterIMPanel::sendMsg()
-- 
GitLab


From 5b5df4769773025978409590e14a807ea2790c84 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 6 Nov 2009 12:15:36 -0800
Subject: [PATCH 236/306] Make test text floaters so Erica can make a call on
 final font sizes.

---
 .../default/xui/en/floater_test_textbox.xml   | 77 ++++++++++++-------
 .../default/xui/en/floater_test_widgets.xml   | 44 ++++++++++-
 .../skins/default/xui/en/menu_login.xml       | 17 ----
 3 files changed, 90 insertions(+), 48 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_test_textbox.xml b/indra/newview/skins/default/xui/en/floater_test_textbox.xml
index 9e2e9e74e3f..8dba05f1eeb 100644
--- a/indra/newview/skins/default/xui/en/floater_test_textbox.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_textbox.xml
@@ -2,11 +2,11 @@
 <floater
  legacy_header_height="18"
  can_resize="true"
- height="400"
+ height="450"
  layout="topleft"
  name="floater_test_textbox"
  help_topic="floater_test_textbox"
- width="400">
+ width="600">
     <text
      type="string"
      length="1"
@@ -48,61 +48,80 @@
         First line of multiple lines
     Second line of multiple lines
     </text>
+      <text
+       top_pad="10"
+       left="10"
+       right="-10" 
+       follows="top|left"
+       font.name="SansSerifSmall"
+       name="test_text10"
+       tool_tip="text">
+        SansSerifSmall. Русский 中文 (简体) The quick brown fox jumped over the lazy dog.
+      </text>
+      <text
+       top_pad="10"
+       left="10"
+       right="-10" 
+       follows="top|left"
+       font.name="SansSerif"
+       name="test_text11"
+       tool_tip="text">
+        SansSerif.  Русский 中文 (简体) The quick brown fox jumped over the lazy dog.
+      </text>
+      <text
+       top_pad="10"
+       left="10"
+       right="-10" 
+       follows="top|left"
+       font.name="SansSerifLarge"
+       name="test_text12"
+       tool_tip="text">
+        SansSerifLarge.  Русский 中文 (简体) The quick brown fox jumped over the lazy dog.
+      </text>
+      <text
+       top_pad="10"
+       left="10"
+       right="-10" 
+       follows="top|left"
+       font.name="SansSerifHuge"
+       name="test_text13"
+       tool_tip="text">
+        SansSerifHuge.  Русский 中文 (简体) The quick brown fox jumped over the lazy dog.
+      </text>
     <text
      type="string"
      length="1"
      font="SansSerif"
-     height="10"
-     layout="topleft"
-     left_delta="0"
-     top_pad="30"
-     width="300">
-        font SansSerif
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="bottom|right"
-     height="10"
-     layout="topleft"
-     left_delta="0"
-     top_pad="10"
-     width="300">
-        follows bottom right
-    </text>
-    <text
-     type="string"
-     length="1"
-     font="SansSerifSmall"
      font.style="BOLD"
      height="10"
      layout="topleft"
      left_delta="0"
-     top_pad="10"
+     top_pad="40"
      width="300">
-        font style BOLD
+      SansSerif BOLD
     </text>
     <text
      type="string"
      length="1"
-     font="SansSerifSmall"
+     font="SansSerif"
      font.style="BOLD|UNDERLINE"
      height="10"
      layout="topleft"
      left_delta="0"
      top_pad="10"
      width="300">
-        font style BOLD UNDERLINE
+      SansSerif BOLD UNDERLINE
     </text>
     <text
      type="string"
      length="1"
+     font="SansSerif"
      height="10"
      layout="topleft"
      left_delta="0"
      top_pad="10"
      width="300">
-        font style UNDERLINE
+      SansSerif UNDERLINE
     </text>
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
index 718d724aa6a..44dcb075264 100644
--- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
@@ -338,13 +338,13 @@ line to actually fit
    height="400"
    halign="center"
    layout="topleft"
-   left="575"
+   left="525"
    name="group_tab_container"
    tab_position="top"
    tab_height="20"
    tool_tip="tab container"
    top="80"
-   width="250">
+   width="300">
     <!-- "panel" is a container for widgets.  It is automatically resized to
          fit the parent tab_container. -->
     <panel
@@ -380,6 +380,46 @@ line to actually fit
        tool_tip="Color Swatch: Click to open Color Picker"
        top_delta="0"
        width="80" />
+      <text
+       top_pad="10"
+       left="10"
+       width="250" 
+       follows="top|left"
+       font.name="SansSerifSmall"
+       name="test_text10"
+       tool_tip="text">
+        SansSerifSmall.  Русский 中文 (简体)
+      </text>
+      <text
+       top_pad="10"
+       left="10"
+       width="250"
+       follows="top|left"
+       font.name="SansSerif"
+       name="test_text11"
+       tool_tip="text">
+        SansSerif.  Русский 中文 (简体)
+      </text>
+      <text
+       top_pad="10"
+       left="10"
+       width="250" 
+       follows="top|left"
+       font.name="SansSerifLarge"
+       name="test_text12"
+       tool_tip="text">
+        SansSerifLarge.  Русский 中文 (简体)
+      </text>
+      <text
+       top_pad="10"
+       left="10"
+       width="250"
+       follows="top|left"
+       font.name="SansSerifHuge"
+       name="test_text13"
+       tool_tip="text">
+        SansSerifHuge.  Русский 中文 (简体)
+      </text>
     </panel>
     <!-- panels can also refer to other floaters or panels -->
     <panel
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index dfa5adb743a..5eb0560962d 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -179,23 +179,6 @@
              parameter="ui_preview" />
         </menu_item_call>
       <menu_item_separator />
-      <menu_item_call
-         label="Widget Test"
-         name="Widget Test"
-         shortcut="control|shift|T">
-        <menu_item_call.on_click
-         function="ShowFloater"
-         parameter="test_widgets" />
-      </menu_item_call>
-      <menu_item_call
-         label="Inspectors Test"
-         name="inspectors_test"
-         shortcut="control|shift|I"
-         >
-        <menu_item_call.on_click
-         function="ShowFloater"
-         parameter="test_inspectors" />
-      </menu_item_call>
       <menu_item_call
          label="Show Side Tray"
          name="Show Side Tray">
-- 
GitLab


From 113c7edf60b65a68510f75fdda69ba5b22dc23f0 Mon Sep 17 00:00:00 2001
From: Rick Pasetto <rick@lindenlab.com>
Date: Fri, 6 Nov 2009 12:21:21 -0800
Subject: [PATCH 237/306] FIX DEV-41587: Update current URL in draw()

The current URL is now re-fetched from the current selection.
Also did some minor refactoring
---
 indra/newview/llpanelmediasettingsgeneral.cpp | 101 +++++++++++-------
 indra/newview/llpanelmediasettingsgeneral.h   |   5 +-
 .../default/xui/en/floater_media_settings.xml |   2 +-
 3 files changed, 69 insertions(+), 39 deletions(-)

diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
index 85efe0f93e6..5186a5888b1 100644
--- a/indra/newview/llpanelmediasettingsgeneral.cpp
+++ b/indra/newview/llpanelmediasettingsgeneral.cpp
@@ -55,6 +55,8 @@
 #include "llfloatertools.h"
 #include "lltrans.h"
 
+const char *CHECKERBOARD_DATA_URL = "data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%22100%%22 height=%22100%%22 %3E%3Cdefs%3E%3Cpattern id=%22checker%22 patternUnits=%22userSpaceOnUse%22 x=%220%22 y=%220%22 width=%22128%22 height=%22128%22 viewBox=%220 0 128 128%22 %3E%3Crect x=%220%22 y=%220%22 width=%2264%22 height=%2264%22 fill=%22#ddddff%22 /%3E%3Crect x=%2264%22 y=%2264%22 width=%2264%22 height=%2264%22 fill=%22#ddddff%22 /%3E%3C/pattern%3E%3C/defs%3E%3Crect x=%220%22 y=%220%22 width=%22100%%22 height=%22100%%22 fill=%22url(#checker)%22 /%3E%3C/svg%3E";
+
 ////////////////////////////////////////////////////////////////////////////////
 //
 LLPanelMediaSettingsGeneral::LLPanelMediaSettingsGeneral() :
@@ -97,7 +99,6 @@ BOOL LLPanelMediaSettingsGeneral::postBuild()
 	childSetCommitCallback( "current_url_reset_btn",onBtnResetCurrentUrl, this);
 	// interrogates controls and updates widgets as required
 	updateMediaPreview();
-	updateCurrentURL();
 
 	return true;
 }
@@ -160,9 +161,9 @@ void LLPanelMediaSettingsGeneral::draw()
 		};
 	};
 
-	// current URL can change over time.
-//	updateCurrentURL();
-
+	// current URL can change over time, update it here
+	updateCurrentUrl();
+	
 	LLPermissions perm;
 	bool user_can_press_reset = mMediaEditable;
 
@@ -215,26 +216,15 @@ void LLPanelMediaSettingsGeneral::clearValues( void* userdata, bool editable)
 	self->updateMediaPreview();
 }
 
-////////////////////////////////////////////////////////////////////////////////
-// static 
-void LLPanelMediaSettingsGeneral::initValues( void* userdata, const LLSD& media_settings ,bool editable)
+// static
+bool LLPanelMediaSettingsGeneral::isMultiple()
 {
-	LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata;
-	self->mMediaEditable = editable;
-
-	//llinfos << "---------------" << llendl;
-	//llinfos << ll_pretty_print_sd(media_settings) << llendl;
-	//llinfos << "---------------" << llendl;
-
 	// IF all the faces have media (or all dont have media)
 	if ( LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo )
 	{
 		if(LLFloaterMediaSettings::getInstance()->mMultipleMedia) 
 		{
-			self->clearValues(self, self->mMediaEditable);
-			// only show multiple 
-			self->mHomeURL ->setText(LLTrans::getString("Multiple Media"));
-			return;
+			return true;
 		}
 		
 	}
@@ -242,13 +232,32 @@ void LLPanelMediaSettingsGeneral::initValues( void* userdata, const LLSD& media_
 	{
 		if(LLFloaterMediaSettings::getInstance()->mMultipleValidMedia) 
 		{
-			self->clearValues(self, self->mMediaEditable);
-			// only show multiple 
-			self->mHomeURL ->setText(LLTrans::getString("Multiple Media"));
-			return;
-		}			
-		
+			return true;
+		}
 	}
+	return false;
+}	
+
+////////////////////////////////////////////////////////////////////////////////
+// static 
+void LLPanelMediaSettingsGeneral::initValues( void* userdata, const LLSD& media_settings ,bool editable)
+{
+	LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata;
+	self->mMediaEditable = editable;
+
+	//llinfos << "---------------" << llendl;
+	//llinfos << ll_pretty_print_sd(media_settings) << llendl;
+	//llinfos << "---------------" << llendl;
+
+	if ( LLPanelMediaSettingsGeneral::isMultiple() )
+	{
+		self->clearValues(self, self->mMediaEditable);
+		// only show multiple 
+		self->mHomeURL->setText(LLTrans::getString("Multiple Media"));
+		self->mCurrentURL->setText(LLTrans::getString("Multiple Media"));
+		return;
+	}
+	
 	std::string base_key( "" );
 	std::string tentative_key( "" );
 
@@ -305,7 +314,6 @@ void LLPanelMediaSettingsGeneral::initValues( void* userdata, const LLSD& media_
 	
 	// interrogates controls and updates widgets as required
 	self->updateMediaPreview();
-	self->updateCurrentURL();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -320,21 +328,10 @@ void LLPanelMediaSettingsGeneral::updateMediaPreview()
 	// new home URL will be empty if media is deleted so display a 
 	// "preview goes here" data url page
 	{
-		mPreviewMedia->navigateTo( "data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%22100%%22 height=%22100%%22 %3E%3Cdefs%3E%3Cpattern id=%22checker%22 patternUnits=%22userSpaceOnUse%22 x=%220%22 y=%220%22 width=%22128%22 height=%22128%22 viewBox=%220 0 128 128%22 %3E%3Crect x=%220%22 y=%220%22 width=%2264%22 height=%2264%22 fill=%22#ddddff%22 /%3E%3Crect x=%2264%22 y=%2264%22 width=%2264%22 height=%2264%22 fill=%22#ddddff%22 /%3E%3C/pattern%3E%3C/defs%3E%3Crect x=%220%22 y=%220%22 width=%22100%%22 height=%22100%%22 fill=%22url(#checker)%22 /%3E%3C/svg%3E" );
+		mPreviewMedia->navigateTo( CHECKERBOARD_DATA_URL );
 	};
 }
 
-////////////////////////////////////////////////////////////////////////////////
-// Helper to set current URL
-void LLPanelMediaSettingsGeneral::updateCurrentURL()
-{
-	if( mCurrentURL->getText().empty() )
-	{
-		childSetText( "current_url", mHomeURL->getText() );
-	}
-	
-}
-
 ////////////////////////////////////////////////////////////////////////////////
 
 // virtual
@@ -441,6 +438,8 @@ bool LLPanelMediaSettingsGeneral::navigateHomeSelectedFace()
 	LLObjectSelectionHandle selected_objects =LLSelectMgr::getInstance()->getSelection();
 	selected_objects->getSelectedTEValue( &functor_navigate_media, all_face_media_navigated );
 	
+	// Note: we don't update the 'current URL' field until the media data itself changes
+	
 	return all_face_media_navigated;
 }
 
@@ -451,3 +450,31 @@ const std::string LLPanelMediaSettingsGeneral::getHomeUrl()
 	return mHomeURL->getValue().asString(); 
 }
 
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLPanelMediaSettingsGeneral::updateCurrentUrl()
+{
+	// Get the current URL from the selection
+	
+	const LLMediaEntry default_media_data;
+	std::string value_str = default_media_data.getCurrentURL();
+	struct functor_getter_current_url : public LLSelectedTEGetFunctor< std::string >
+	{
+		functor_getter_current_url(const LLMediaEntry& entry): mMediaEntry(entry) {}
+		
+		std::string get( LLViewerObject* object, S32 face )
+		{
+			if ( object )
+				if ( object->getTE(face) )
+					if ( object->getTE(face)->getMediaData() )
+						return object->getTE(face)->getMediaData()->getCurrentURL();
+			return mMediaEntry.getCurrentURL();
+		};
+		
+		const LLMediaEntry &  mMediaEntry;
+		
+	} func_current_url(default_media_data);
+	bool identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func_current_url, value_str );
+	mCurrentURL->setText(value_str);
+	mCurrentURL->setTentative(identical);
+}	
diff --git a/indra/newview/llpanelmediasettingsgeneral.h b/indra/newview/llpanelmediasettingsgeneral.h
index e82a31382ef..b48e081a1b5 100644
--- a/indra/newview/llpanelmediasettingsgeneral.h
+++ b/indra/newview/llpanelmediasettingsgeneral.h
@@ -63,7 +63,6 @@ class LLPanelMediaSettingsGeneral : public LLPanel
 	
 	bool navigateHomeSelectedFace();
 	void updateMediaPreview();
-	void updateCurrentURL();
 
 	const std::string getHomeUrl();
 	
@@ -72,8 +71,12 @@ class LLPanelMediaSettingsGeneral : public LLPanel
 	bool mMediaEditable;
 
 private:
+	void updateCurrentUrl();
+	
 	static void onBtnResetCurrentUrl(LLUICtrl* ctrl, void *userdata);
 	static void onCommitHomeURL(LLUICtrl* ctrl, void *userdata );
+	
+	static bool isMultiple();
 
 	LLComboBox* mControls;
 	LLCheckBoxCtrl* mAutoLoop;
diff --git a/indra/newview/skins/default/xui/en/floater_media_settings.xml b/indra/newview/skins/default/xui/en/floater_media_settings.xml
index 6b884d46a77..68dd2001afb 100644
--- a/indra/newview/skins/default/xui/en/floater_media_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_settings.xml
@@ -15,7 +15,7 @@
  min_height="430" 
  min_width="620"
  mouse_opaque="true" 
- name="Medis Settings" 
+ name="Media Settings" 
  help_topic = "media_settings"
  title="MEDIA SETTINGS">
 	<button 
-- 
GitLab


From c9b03c56afdaf9286745a8a50e0af0b9881ad2fb Mon Sep 17 00:00:00 2001
From: "Justin C. Rounds (Chuck)" <chuck@lindenlab.com>
Date: Fri, 6 Nov 2009 15:44:43 -0500
Subject: [PATCH 238/306] Updated default_profile_picture to match style. Added
 Blank graphic to use as overlay icon (in order to produce tool-tip). Created
 panel_profile_user.xml which is a profile panel specifically for the current
 user, and modified panel_me_profile to call it accordingly.
 http://jira.secondlife.com/browse/EXT-2245

---
 .../newview/skins/default/textures/Blank.png  | Bin 0 -> 110 bytes
 .../textures/default_profile_picture.j2c      | Bin 6128 -> 1512 bytes
 .../skins/default/textures/textures.xml       |   2 ++
 .../skins/default/xui/en/panel_profile.xml    |   4 ++--
 4 files changed, 4 insertions(+), 2 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/Blank.png

diff --git a/indra/newview/skins/default/textures/Blank.png b/indra/newview/skins/default/textures/Blank.png
new file mode 100644
index 0000000000000000000000000000000000000000..f38e9f9100c290bd0e9a0419810c2d0149562c8e
GIT binary patch
literal 110
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}bl$r9IylHmNblJdl&R0hYC{G?O`
z&)mfH)S%SFl*+=BsWw1G0-i38Ar-fhe*FJ$&+O2^$iVT3>EG=|zG6T*22WQ%mvv4F
FO#p>79=iYl

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/default_profile_picture.j2c b/indra/newview/skins/default/textures/default_profile_picture.j2c
index c53a22e8165c6e9fb1e6039644b113273a9b79b4..f21742cf09ba3fd83547aa2a2eec4136c725d62d 100644
GIT binary patch
delta 1439
zcmV;Q1z`H{FX#&(|4;u>051Rl0000$0000$00000000000000$0000$ksulY0+BmL
ze+6v-0soWFyc7qQz=&UffXCzw52P$Uz)%hkde%#33bFzOwGHB@dBuQ$!|5Lnq;wxJ
z;1*y?uZYvEz>zAkgf<~|1DM?Ov_<wYQnelBPLu~2aJNj?t^=Y|4WyEcfPlx+rXMnR
ze5U|lq;FOKF9Ln=#14Dv8RSS@OY(XCf7c@W+e|4l)#$c6bw_C=RiBB!v>xIB9Ww4h
zZESNMWT>p`hwJipxV;q>`$jQ|{R}=UFEvu3b|Ev4RSG6p&_Ngm(6eIN!<UpwUrA%)
z2|W95IJZ1+fPl}H#C&uJdX%i_gwj7;H|_%@$E<et^=aOE=<=&U=eL%sMZVq{e<Le}
zmah%7R@oNXXqv0n;b-gI9j1~xF=iz%kJq4ZdO$>@`@}I^1*2;w>HH-Z!I)gD?taw9
z3z-2#9OetG_#C&e(!uO<2y!QLMW!Ypn61}lSt`L7PykLX)<JQcCY5}*H^Ct_`nu<T
z#an=?2k|>KEF)%l7G^|%z+SQ^e}I6;!(|;n<BGxA5<XAq&ALTCnF0)8%;WGPjonng
z0K;zM%xA6s4+Z}p>-J*Go%L<BKp@XLA@$*m3Zq&y!K*ce&a7!(kRgD8{J?<gvVeg6
z0Q|tdFhE+UFmW`1fc#;;Fy9zp$_A9YU~=mLB^ayaAi47gFWG>A{ARv0e}5t15g6MW
zgt>79NFY;MW%yMc4?#>Cj$qg+RCUK$#Bl(xy~$Se_)@<^;|j)%@c&w!CL^DlN=C%5
zOvs1MG##1HdP5F?HXU`e2L5C&Kme}S%Fl{`fc%v|jVt6s=;_g+LgwPYe;@wSg5-hD
zNy?RACZW1n4I^@hplXrie|q@G?XZ^{h}pgc0vMaL1ziVGpTgh@$YlEU-u65}4Gq-c
zv*?&h8j>90SxUoKu`S{L`OVu#-XJu%M)1;xZqt+EnD?lcm$RxaUmM0@5$<G4$Of<3
zP>2|UEgfq|6(&TGa~8{J7lOS}K(~U=<}0rd5V_Jl?7<$FlB?3;e~*}-*E{-(@*2Y>
z$3BRcmhcCbbXyJtEhZ;pMkCr+3J<TQyl=aX<-L{jEyV&)9LuejU|R*{?JT;lay)re
z%4&ds{MGN%v*GnpAmj<HsDi)es+pLoL0(0TJuRI_F07|~7@_C%t}5rj&^N?eP<4a-
z5p3Q%jlPPeG_cTge}H1eN-F^&ElKc;jWUns=T`FYgfKS*JpI|gRNvR-&0?&7Y$Z2=
zWLjQT59;MVQ}K-#L#8<_An9~xWcGSK>`hLalit${YIj_Sk{%?34{tF)X6iJBtRl=r
z`i|aead|}K;4D({=YA|H5S$EU1}<b-o@;r0&VXL6hi0qMe=yq+1iFQbpPDXJvj7fs
zlygWB2iJ(ehszFb0W6TjM6PDTCH$*1gnkduy@4^7F==QL{*$GzN|%&tbXxuYehg_z
zn%pB1THuL<K*X!oBzWm$7`C803YiHe@%*J7^g^!8o=!D9wa<`g+Fdwlf=})Dr_VX2
zAAnJ?pbHjyf47jln3;oRtY1~J>r6QDrdpA^33_4>RTW%X&&-$3IP!oSI?^j5aso?C
zy|XxEM2lUQs?d_x;G1B;41#P28puFHoc{^ypS_fEMq&cmX;7Tr3<Set6qdwt<B^jV
zQDsM-{wyD%D;&f^n9M(bX=B=>go800uLI{xd8a#iarQCtRs}klsw1#I!+wB8(^{ZC
z_sQ|(^a}%eow1J8=n#zVkyuOA>?|#JQ?@YAiCk-6JE(YhqXMMLZpZlSpjgyhR|lQg
t9o8%W;#smWWN<NZQ%|-=@6aZt{vG@c5tXOayhF1tT!Y<f7LI^`|JgM8x1|68

delta 6092
zcmV;-7c=PS3-B)>|4;u>051Rl0001h0001h00000000000001h0001hksulY1CcvM
ze;0KC0soWFq<|6UF)0e<u7y*@V`_(NZ?DJ9G!xD*5Gp;(TLfs_hhN9iGz*n!eVmE7
z^Xt$qyDZ1hGCqND_{D%5##GFTdkyjT0sERAlvyLG_r08?;c*$0N6oO>26>mm6v6Qb
zfx|%IfEyXZGLH-+BmnCj9%8E+HYl*We}2K?pm30U0)Q2>p$C7E7eW)u8^^PSI>*X_
zK2vb`Q6rUgn~Y=P(TZRYW8g!hpwN8!jQ=<x9;wx6lV-d{5GD*rV{!M7bCNxCd|6WG
z26TN3WCKpWrHO}ZBGPzNLzPTHV3f5hhIv^G%E8j0;XoqkbDNA@RL_IlB<`&2f7rp(
zAmG3wn`JodO@GusjvoLen~lfB>OLe;>Oh3C#=i}pfZJxQ+o|hxq#HSqR!SJL5M3Dq
z#XfPKjgh0PseO6gsR(R7e)ogwWeZ&R7AAR_yc%g8l%WUQ@q$mgopPJ@E?8iBb@+sv
zOVr}!y43tHM;h8^k~uNwMUoaTfB41nun5rX=HEejLx6zJ)y|&4TR*MlaFY$}N*B?C
zhjL@)2KI$qi0h*o@m>;FNzs#%PAciXYCV{oEpTkE8Jt+=a~F;~HRcy{ihzKCfPnmA
zz_70Bg>l)x{9%9sdVcFUrSL$K&HN+$BYa`N_a&1F?z7MQ!GFtujk0?2f8{YMW&C0O
zAm0#RbV&ZZi*~~^!?=bP5ICfy3&+v?f_^bS7;yX8s>!w=q{dg5mLgeyFtM1SudT_o
zfNs0|EBs}?L!j_lA$8K71^^aCsBt#>KTc|c!@zGY(qZ@u9^sR)ZyB`=@$>>y_L&Jd
z@0qV4_u%lsHDe+ESysRjf7Npv6bm?=OJ`LPPaZ_4^!#RiGO#{Epk(_xoC&sE3!~Q{
zrGvhn)sg=?N~uwl0hYVI@HCjYYIS%-yXa0D8^K8ChgGj5etJ|xl}tfnB)d5mt^t~n
z+8{V3{6{`BkUk>dmo`JuTWOKJ^~o#(L+%)5@r?GCqX?h1cokw{f1<<*+c}*;n!ZGP
z_hAC72%DR*VAtKY@toeNgeVbn1isyz9C-st&7r;NO2c*hMPcv){5nU+NBF2<^uG;8
z_*72Y%8@}Nz0X7^@}j1~EV)Ilun7LAn2lDF^yqC1+}WYZ@b)>-k9n8yg^Yz9kMS`?
zHYgi9<!$yckiWXefA~*Fp_>gh@PB>!94*sIknpnk;9{s1`ckmZq>K@=Ph%wvV0)M*
zA5Xe2z`M{dv__1ata>wGH#?TGEwM_<ilo3pb-^aX72Wa?Wv1V+B3@5##&7iU6p7ED
zAh2~|J)RbpMPg?WiuR`~V{!d&Yk?J4T%mfO`13h^NlFEae^CBoV`>G@Qr=W?7?7mH
z!SOPK;a&!Cgo88hzWHKCC3D-@el*%m)ydv@l(Iue_~twO%n^L`n`oMd!}!qI@zp~e
zjRUZuh>AXi63ldAp0ObwnE4H^1$hW$7$}y5pE8q2k`^!c>oX_$Be7b+@jQXmpmh+0
zvgjQWqrLNWe<Z&ssE?&JwP2d+Mwr1rv1&VHaOQfuNZ%!K)Pt;2xu@A+vFx%F@l+vC
zz=1j`4E7{3IeS7~cu;jtK!vdOcI>!OObflAPXsaS7Gc63^fWQ3z6fUX2AwVZb+^ZK
zkCN=Y2<3(y5JKl%tu2-oh4ng)nRiiUP4~;#uN|3qe;J(X<%t9|f#lqk<n!1M@>XH=
zwUgLJSQhH!q0iSKnnK{|w--0yh&9oiz>{o)zGb{(1JzXT6W!utq*WnymdaXiAjuZN
zp}zkwxOx6EhSYwZ7O8=>lFP>=((~m!<1B{S%*k-q>#w2%ESTo|bEy{wL~F_^E8dBj
za)?%Ge_DD?Z3od-0G>)~ay|R=NC5j4dBKV5oew9bF_O@|SiJ`EA2IKncj09w80$6s
znCj|NN>?oCcGg2)!YiA4<7(gGQ^?2kWJtgJIvKbE@A&%eFjzVbKh{2bJ=q;3c^kLw
zvWynzP1o|R5le_)|8;Hf%M0aLNaXP#l<Yt`e>8EN6z-GWYL@aJ!43aQnVijBoN6A<
zjA>2ib+0Jo`NWAmu~Aoy)=Z{**k6JjWOTw(hn1<i$8_;=%Bi(S#r)wYaZd`G7m#(S
z=+w|@W^F~+4mDsDa~Z4@46lojTD$F!L~?u$#SRj=A<7la4JjVUhCAp$1w?fvX-150
ze^cOsi4bSQl_AD}z)k2@AF@2c950iEq*7W;J9A>PYxPRLF~c~!_n|F!U&FNEz*fbJ
z>lQ`<jJ^mz=uuD#-6fd(3Gf`pK}ig)&SG%&C{p$kDQ3>cwV3n3^7c5XFu;7`cXN5;
zYl_-0YliIPNK?Bzt`4t7veZng4Ifjef6>mPyRJD&{qv5oVqe=BkP9aHqdq^(bPiB4
zE>FYbZb$%7rJqZ3Kaj+@%>i3*41@G<J(k3E1~dmorhggkh`SVl%c-Vt{nzJOLYd3i
zSZ$ptfPnmAfZ;Pv3*H(0VSt$pNh`<h{K7!?=pdvFL+36J{9(Q@-xzS^#L-l(f3<;4
zAm7|UqRZ0RtL+^8BYc8BK>%l6r_^*7f4d7kviOEq`EK%s6Vetf{9(Q@{|q>Fbg%nW
zK!MKXy&|ct$&ys;O5CRWX8sm_7C`?~jKma+%jZ{{?oZG>t>pi4+A5joB3^P+k(`EP
zjSy0chs8Y~TVHKvS^icI6m;ise<MGlg_wnMoC;`fifYg<<7P$Wz1dGe=P^i3{6_vW
zzY)M6<gh7NLUGrgA-~&cEBhW7L%{INmBi{~#V9}D?#jN+Rb^%BLD8h$ujj)1_mTP&
zp<?$-+yWTVxuyFR(W|64Zp50#?NMBY=uO5a#dG%22~uqQX1+6@A@Chte~?IYd!DDj
zv%Q~E6H*d6`b{J+re-_z5AEN2e$x6)H_gw$KH^eJ<_eCs{~nh;dyoVKKdFZiZwX_S
z(xj=e5w+B^W$eCfRu?%fjdDd?&Z>MP{APcKx$-Z7W@An3xWJTA$kd#gfZ9Da^ilt7
z{&wGJ2fyZckFuL>2Xklwf6Lqth)=ONfid*E_Q-_cvkB}z|8}bgY}5MF<$(!!i>SW=
z`^po>@ziR@gEa+xjN(d1k&_w5TWImwWnjF}*t%4h+i+jcCX?~HVBWllnJiy+ISzmb
z$xW5#E-c6bN;blt7ir^mSYa!KAKXLR1DRzdN}r-syUD-?nTVSDe_QvSEXY4C!c`e<
z4;n6w&inI0Tm3UlIXX`hq2Ww6CR8XF%l){bXZs)nj6ezAAX>I>CtTGy**uu1F;=hT
zABQ$0LPLDF4y0S&Gz2h|wILT6IeHMCFdfxZ<C%N`aui_+v?%MW3>xiff#I8D`^$8T
z**;NgS3fz|<h19^fBbbHlE?DUK;IwOUi!-OKqf*LoQ8?Abl=~OZAuJ@rmgGanrD+M
z$n&fHH*AzVRwH&yb1(leLYIU0Oo+(GV%iMD#nS##zA@C07w+Nl;2rUVb63TifM!zK
zK0~EV-mVugdsx4*Q<BgR+}5nyRfB9H%?&;|;<*j4XEb)2f4uG5+i2O2@WS{cLb^Ue
zIz2#qZP~vE!^}ZZ2S&`?cmNjs<ON!LK<Ra{*Kqr@h3x{pbw1{CW+bPu^`Pne9I$<d
zX&#X!ALR}YIdGYZ5Ah8WT}DEZ84ET90w>+M7^eET1JOd&sCa@EFs$NMMj`N{6V6&n
zXE$zb6t;Ezf41M2_3~B#wSY<Mpe=6Uonv*=BP#khi94uSvreC;vYK~bfeA^|#Ux~9
zb=IMXZQbAL>c?p<5&44KJoyqVT*uBDs2}WmgDCyAs;?%m`Ap@v(Y9903sEGAXL3R5
zjoc~OVo7thwDl-nudAiZscXnB=M16aR;%WpDa-sgf2d_7GR|=ieCi4Fq+?OG%rp2l
z7Wa*?TIX0K>r5w;b@dC>|3gEWJvHSVP>4FSaCiS?qBDY?qVpbrX@RQV^J{?Ls>Yh<
zSzTSWx@4~FzaTy35@eOUX-<=%odJco+y}Y4#fC+8?sG8SWJBVK{jSt+4aPC+{<J!*
zyQJV+e~WF8yCc9uU_^_9N-B=0%pka%aX7q~8uFxE=GwiGf+IKwgx`HAr8;{rOyP1N
zy>|_(d0H|0YhvRcP^owIZ37}p%l2gG;rw)a<I>NH%d@n*SqL9e=ac5@TBReOpQ{y!
z*Qfz~hdv(nn}wM;`dw0|542uNW8)JJDSnHMe{vF|BU`p4$lL5f|0Sa=;zor($A0~}
zdJx@33Z&FDjD9?cnlH?UHKvMt(Sjs3FLI@^K``G7i;yUxH3?<WwZwKo_WEC2a!C=U
z`Rg5(s$-lcV#yWGgQV?Y+Txyh6}5+Z|0{+~&p1TaKyc8%>>Q`aO>Kl)IxkWxy!mG)
zf7sUL%&XxPI~<%@->2`ZXGDcts!nd4QXi<fAg_K<=52F`AB{%@l*^2n$%#V&`p9l*
zllXpe2+KUKln-Gc=AP3&&mST@=*DAFQAppWG$(17oDP=f#R2g*0*O#-${zjVwt&;l
zn!1MQ%u?P}Lg#!9v<XPNKWQM0FrYi3e+`HlDm4|HjIcS$hZqY|Cqtie0gL;MiH(P+
zIbI>#dRh&H0-|6vfipFc%y-8bgS%<;eWWQpTlG}m8oxKPhYCU(O^8$Fm95u;<ZD^l
zCdQZNg)3fN(M@6xNyF&Fs(4YKpkdV)bc1`5LlUJYYw!PQMfb+Iw7$6Ec?z67e`?yF
zP!>;eI$-YodS%arZVPpt%#0)m@2!-5U2fz!Juqs^?=Ecx+~MZq{F%Y~@u&Tq4hb;1
z%I%dXyUC0`<3^T2%(0Y=F%YpoINkd60O;?^B1va(dxG_8NF+gmNklo@p+dL82H-ga
z?P&}uu;SXHJH)w?8Q!taU?{{De*)n0j+tRm+$>xFSQ}UW9^}U;oc6_)re=i%vUkU~
zwR)|Uq>t|ewWvs@@?1(~*nazs#HL$KyU$EzletXx7ioVflWm~V7ph5QHkV%w>!@Cn
zHsR6P{3ou~Kh^94;dUX_JnR(KL!S2};uvIT5^z6jR-)(9^I1f|B0Y8He^iLRf;l!F
zjxa8;TCFVSQX<RAI=sXPvJh$>jCq}#ZFV10adC9eYca^XhnkhCalGHBla3d_Zs!sL
zRgf9p0$tE~3>5mUOm_v*QzqF)53^PV$E}}0|94@JhxGVZdJN4EIlKv>$BFc`{FR5v
ze1qV!5oy6-Uh;ru!~^Y)e}*)-(=K~BmJ@nlf4q{&r}ve4=$;VJ9X9Zjm8hu`hCGBr
z-e+2TH1}DaNzMUifB#En(%2NADhlucg9iyk5V}Ztc$Fx>mqk3{Uo<<g7b<tQ7st@5
zWk8uXQp9d<5wo1a2t7fbiW*s=rhx(&SzV2lXQ`~GL8_XP7a5)pf36#!fQ-$cuOUD#
z7UK%c@J>l*gKA#1g17`9u&*`aOZ!fD(aA<U((b<z7_pxX-U7e_;E!{s7FwWpB0_N>
zZUrl*B{R)qPi@Xqzyn;%TfZCZt0pPb`PB;)ip`&qbS5lAe?beWC}Y5Zozdy55b%D{
zO-C>O;AVv55eHB)e@MjBMNmqrx#-~1JW+zG8mRaBx^?0VQjFUL%$b2HpSh5kjH4Ay
zQHvou4bMp$kLp?lH=j-%I&I{~l!7H_o|Tf1a)4*W$}!~dH=Lj`PaMTmOZ=B4K8=M3
z#Z%JXZlXUUi69=V+5BFnlT$4A3(+i5h4U%1DYlDKQ~n&xe>=y?7L2Z(w&SXa&o?K7
zY~*Cm1rY+Pa>gfQ1H&s{C%k4A*3NV(j8ROiS<W|Y-#3Ty#0Sb2k%-nJ|6XG-0Azhz
zQx(3vFJf>A!vth<1v#@D1b-|X3$w#h95yrKU1DiY5ydqtxp*@(T>vpp`m5lhH7j*o
zwEor)X}Gvte_Vkz+i!z!3<i0oFPjF{C#F<K3K9S?QR#;=Df5wit%(~gG#q#5CtR@z
zjFS&gJ{v6|&Auqlp~$Ui)2-uK6H3goow0$*0V~-Psj79-Eb7~U59%XblcT)nmVyRQ
z9zv!KgR+lKx%^vmcP&+Ys|GJznMoA&-^nS<y*uCIe--za#B<aiYBftz>belSOtF<|
z5ilH$a+3LchQa3ZK7|~b3cI}QRuxVNAD1#x)J~CBL4FsfL%#X)X?|+AdYZ&CKDxS6
zd+gZ1e`3>H$+4<X_G*cK^&ZnEZHX@e{RyIa*&s!|i{!90aUoPk#Y-jcA~KX5ZLJ}C
z^KmMKe`zj!h6hIynfwGCwKGl9u5QrIScyUG_;ED)!2d|-fw_l2hkGKYHCOk|q=(?Y
z@Igt+VvCUb&6%GKb#2Z7Mhy<>tC;mw-3ckEF8b}D*7opX3*DfODkFdVx8LOIWIi2C
zIstq6Ceaf!_@@SA_iQVaLN#ZBoP>=qhwsLie~I!7Y1?FOrM8LQ&3#KfZ#lS>ULMN^
zzC$>!F21McC_z((51@le=jTBMTeL}n)NQc88NXUk_sJ{MtvF1H?&S&Pjx^%HdETJV
zD$T7#Z+Yo%)SdUvq0(b=xox<8hDP7OGx^+}2xvNT&y;g`IWNfTMJwxV8KO|<t@=kX
ze>vP3f7ssS=c3i_euBMXp>&xb%Ysr?d*2^S3shVl4mPggr2f-#Jk#p7sALOUr`TRP
z=z=zDnJX|iOm?E)2rtM@nZ+l;vQ{890AqLkmPe4kr`;PZ(I*j92j(>{$;mW+_s-=8
zSvU`banLT$Bux4@xk(JsD?$W?;Oc=6f8$0daXnvo_oBZROG8T9FzRSSh_(ep8rI1V
z7A*={H;UxFMGdoYm(&?8(&K^7C=qtyh<M|tLUhXH31aV9Gu?C%A<6OVM@Sq_hj{-F
z!@u*lK*4-`V-(u1D-y!@N52M)uIOIU>sf<Lp-XMx{;ZY_B!`{$0)8Ek?6a^He+e6d
zZYE}S9JyXsEL_rj=s#I<@_6Tq_ezT~K?BSpX#6VE!!X8^p~r{t+on~a!ikwIx^TRV
ziPE;s%etdbi@+}lm9f6i#ii8+?WGI1b&UoqI+9n0?(v(?QzWGFVQS6pGWc1yr6&}`
zc-QvAno_v76{xatZ7FN=ge{S;f1$YC!K&50HBTif3I3K9co3|f?KUvRCf&I922YgB
z2MO|o!SCa*7K!>^84pE(?#u<WdMSCq0cLo}IFJQ5RmY<$8Zdty{9~(Nn_z|9P0$ZT
zM--8hF-raq=OS$x|9=5dqg%^_D6yv^NelRfmm&xFN8ev45sL&2PXcpOfAm?DaETZO
zF1B6#s06viB*re4!m@#EOFH>A=DRJGcDy_BQP<b4vGOPXSZWJb6rpn2beRjF&mzjh
zfylkxx*NhB(x*WfLeTI>5l%&YHeQ(hP9pwuZ&MD*Z`x5V;~u?5>8yO+G|xCA4$OP)
zEd5h2ERJ_jq#I?^1mkSpe{%hJidNNkHWPM!YXu44Zu7Ux=^`Y>5_h7h*Uj}Q68C`7
zb!TSw0~d=RI5g9=kqE&pwV-fPF-O8HA?Ucey*#rBz6<S`c2+y*aX5dU$LJI{hs|sw
zF4Z(5I@*?`;ZQQ5r47+gfeJ%ss1l40_BEk-(zPAZ4mW!rW{~rSe+<FfXgZkk_T;p=
z>nwxQ1Sgd&g2d13pLfcuCyyl!PkI;cqTk3)`oeAq1ts(uM%07XPoq3ZRnrS*FvNOh
zL<fC2aplwDaJ!QAjm|Jf!SM7v9}Vd6ln<;tgD(z_ml6-z$@*h`+fZ5MD+?CXwQ`V9
zXFb2!64wooh?|?~e<~z{&{kUVxt3vJi(@EQm`)Arb6eAJ(Sx^UqE1>wpeMwVLyHQ|
z>ttq1rmueF9|+>Q%_+pT!;{IK(|q6a0;1LlXaFpc_=wizvEVSKt_hOXdL3V=rk3Y2
zt_NH3qCZVG-BVDC#MSdB?WtVm{6#U7UUBW*fdumwY|@7U9=F~E(fB0mPcUmyk@eXE
SmIE@;yi8inf{B5>YX8}3cIT)7

diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index cf7ab46dd5b..7f33330123d 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -27,6 +27,8 @@
   <texture name="BackArrow_Off" file_name="icons/BackArrow_Off.png" preload="false" />
   <texture name="BackArrow_Press" file_name="icons/BackArrow_Press.png" preload="false" />
 
+  <texture name="Blank" file_name="Blank.png" preload="false" />
+  
   <texture name="BottomTray_BG" file_name="bottomtray/BottomTray_BG.png" preload="false" />
 
   <texture name="BuyArrow_Off" file_name="navbar/BuyArrow_Off.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0"  />
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index 23d55b33e22..a0055383b1c 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -58,7 +58,7 @@
              default_image_name="None"
              enabled="false"
              follows="top|left"
-             height="117"
+             height="102"
              layout="topleft"
              left="0"
              name="2nd_life_pic"
@@ -102,7 +102,7 @@
              default_image_name="None"
              enabled="false"
              follows="top|left"
-             height="117"
+             height="102"
              layout="topleft"
              left="0"
              name="real_world_pic"
-- 
GitLab


From eea1057b706cbe1a3b94eab7e6eb00b54adf2c05 Mon Sep 17 00:00:00 2001
From: Steve Bennetts <steve@lindenlab.com>
Date: Fri, 6 Nov 2009 12:58:10 -0800
Subject: [PATCH 239/306] EXT-2215 - Viewer crashes while trying to decode
 image llwarns is not entirely thread safe. Need to fix that, but for now, use
 LL_DEBUGS instead.

---
 indra/llimagej2coj/llimagej2coj.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/indra/llimagej2coj/llimagej2coj.cpp b/indra/llimagej2coj/llimagej2coj.cpp
index ec6264dcf55..e71429b18d3 100644
--- a/indra/llimagej2coj/llimagej2coj.cpp
+++ b/indra/llimagej2coj/llimagej2coj.cpp
@@ -168,7 +168,7 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
 	// dereference the array.
 	if(!image || !image->numcomps)
 	{
-		llwarns << "ERROR -> decodeImpl: failed to decode image!" << llendl;
+		LL_DEBUGS("Texture") << "ERROR -> decodeImpl: failed to decode image!" << LL_ENDL;
 		if (image)
 		{
 			opj_image_destroy(image);
@@ -241,7 +241,7 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
 		}
 		else // Some rare OpenJPEG versions have this bug.
 		{
-			llwarns << "ERROR -> decodeImpl: failed to decode image! (NULL comp data - OpenJPEG bug)" << llendl;
+			LL_DEBUGS("Texture") << "ERROR -> decodeImpl: failed to decode image! (NULL comp data - OpenJPEG bug)" << LL_ENDL;
 			opj_image_destroy(image);
 
 			return TRUE; // done
@@ -375,7 +375,7 @@ BOOL LLImageJ2COJ::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, con
 	if (!bSuccess)
 	{
 		opj_cio_close(cio);
-		llinfos << "Failed to encode image." << llendl;
+		LL_DEBUGS("Texture") << "Failed to encode image." << LL_ENDL;
 		return FALSE;
 	}
 	codestream_length = cio_tell(cio);
-- 
GitLab


From d4f790f72866b43956ce4216bf6471c85f4afc6c Mon Sep 17 00:00:00 2001
From: Rick Pasetto <rick@lindenlab.com>
Date: Fri, 6 Nov 2009 13:07:50 -0800
Subject: [PATCH 240/306] FIX: zoom/unzoom should appear to be one icon

this was a fairly trivial UI change....
---
 indra/newview/llpanelprimmediacontrols.cpp    |  7 +++-
 .../xui/en/panel_prim_media_controls.xml      | 40 +++++++++----------
 2 files changed, 25 insertions(+), 22 deletions(-)

diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 0b2a7e8756b..73e19b3b2a0 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -228,6 +228,7 @@ void LLPanelPrimMediaControls::updateShape()
 
 	bool can_navigate = parcel->getMediaAllowNavigate();
 	bool enabled = false;
+	bool is_zoomed = (mCurrentZoom != ZOOM_NONE);
 	// There is no such thing as "has_focus" being different from normal controls set
 	// anymore (as of user feedback from bri 10/09).  So we cheat here and force 'has_focus'
 	// to 'true' (or, actually, we use a setting)
@@ -256,7 +257,7 @@ void LLPanelPrimMediaControls::updateShape()
 		LLUICtrl* stop_ctrl					= getChild<LLUICtrl>("stop");
 		LLUICtrl* media_stop_ctrl			= getChild<LLUICtrl>("media_stop");
 		LLUICtrl* home_ctrl					= getChild<LLUICtrl>("home");
-		LLUICtrl* close_ctrl				= getChild<LLUICtrl>("close");
+		LLUICtrl* unzoom_ctrl				= getChild<LLUICtrl>("close"); // This is actually "unzoom"
 		LLUICtrl* open_ctrl					= getChild<LLUICtrl>("new_window");
         LLUICtrl* zoom_ctrl					= getChild<LLUICtrl>("zoom_frame");
 		LLPanel* media_loading_panel		= getChild<LLPanel>("media_progress_indicator");
@@ -283,7 +284,8 @@ void LLPanelPrimMediaControls::updateShape()
 		reload_ctrl->setVisible(has_focus);
 		stop_ctrl->setVisible(false);
 		home_ctrl->setVisible(has_focus);
-		close_ctrl->setVisible(has_focus);
+		zoom_ctrl->setVisible(!is_zoomed);
+		unzoom_ctrl->setVisible(has_focus && is_zoomed);
 		open_ctrl->setVisible(true);
 		media_address_ctrl->setVisible(has_focus && !mini_controls);
 		media_play_slider_panel->setVisible(has_focus && !mini_controls);
@@ -294,6 +296,7 @@ void LLPanelPrimMediaControls::updateShape()
 		whitelist_icon->setVisible(!mini_controls && (media_data)?media_data->getWhiteListEnable():false);
 		// Disable zoom if HUD
 		zoom_ctrl->setEnabled(!objectp->isHUDAttachment());
+		unzoom_ctrl->setEnabled(!objectp->isHUDAttachment());
 		secure_lock_icon->setVisible(false);
 		mCurrentURL = media_impl->getCurrentMediaURL();
 		
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 fc5ccdb63e6..3bdd7114eed 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
@@ -494,13 +494,32 @@ disabled
 		  image_selected="media_btn_optimalzoom.png"
 		  image_unselected="media_btn_optimalzoom.png"
 		  layout="topleft"
-		  tool_tip="Zoom"
+		  tool_tip="Zoom into media"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
 			function="MediaCtrl.Zoom" />
 	  </button>
 	</layout_panel>
+	<layout_panel
+		name="close"
+		auto_resize="false"
+		user_resize="false"
+		layout="topleft"
+		min_width="21"
+		width="21" >
+	  <button
+		  height="22"
+		  image_selected="media_btn_done.png"
+		  image_unselected="media_btn_done.png"
+		  layout="topleft"
+		  tool_tip ="Zoom Back"
+		  top_delta="-4"
+		  width="21" >
+		<button.commit_callback
+			function="MediaCtrl.Close" />
+	  </button>
+	</layout_panel>
 <!--
 	<panel
 		height="22"
@@ -553,25 +572,6 @@ disabled
 		  width="3" />
 	</panel>
 -->
-	<layout_panel
-		name="close"
-		auto_resize="false"
-		user_resize="false"
-		layout="topleft"
-		min_width="21"
-		width="21" >
-	  <button
-		  height="22"
-		  image_selected="media_btn_done.png"
-		  image_unselected="media_btn_done.png"
-		  layout="topleft"
-		  tool_tip ="Close media control"
-		  top_delta="-4"
-		  width="21" >
-		<button.commit_callback
-			function="MediaCtrl.Close" />
-	  </button>
-	</layout_panel>
 	<layout_panel
 		width="0"
 		layout="topleft"
-- 
GitLab


From f7483487c45472f1471ea43b2c543102b282e91b Mon Sep 17 00:00:00 2001
From: "Justin C. Rounds (Chuck)" <chuck@lindenlab.com>
Date: Fri, 6 Nov 2009 16:11:42 -0500
Subject: [PATCH 241/306] Changed "Support" tab to "Info".
 http://jira.secondlife.com/browse/EXT-2177

---
 indra/newview/skins/default/xui/en/floater_about.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index c74b1929b47..2ff99dcf5ac 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -69,7 +69,7 @@ Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number
     tab_position="top">
     <panel
       border="true" 
-      label="Support"
+      label="Info"
       help_topic="about_support_tab"
       name="support_panel">
       <text_editor
-- 
GitLab


From 98eb085b6439091fa16fb42dfbd3d78839a31240 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Fri, 6 Nov 2009 16:30:35 -0500
Subject: [PATCH 242/306] Changed llwarns on spurious
 InventoryPanel::buildNewViews debug mesage to lldebugs.

--HG--
branch : avatar-pipeline
---
 indra/newview/llinventorypanel.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 36d9455fa25..f13651f7f9b 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -457,8 +457,8 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
 			if (objectp->getType() <= LLAssetType::AT_NONE ||
 				objectp->getType() >= LLAssetType::AT_COUNT)
 			{
-				llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << 
-					((S32) objectp->getType()) << llendl;
+				lldebugs << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << 
+					((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID() << llendl;
 				return;
 			}
 			
-- 
GitLab


From d158cc86197f2afd26f39ab2a1d207ecab7e39e7 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 6 Nov 2009 13:49:07 -0800
Subject: [PATCH 243/306] Don't hg ignore the newview/skins directory, we add
 files there regularly.

---
 .hgignore | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.hgignore b/.hgignore
index e390f591e57..4d98acf5d97 100644
--- a/.hgignore
+++ b/.hgignore
@@ -29,7 +29,6 @@ indra/newview/fmod.dll
 indra/newview/mozilla-theme
 indra/newview/mozilla-universal-darwin.tgz
 indra/newview/res-sdl
-indra/newview/skins
 indra/newview/vivox-runtime
 indra/server-linux-*
 indra/test/linden_file.dat
-- 
GitLab


From 0b3bbf8cfc2b3c2afcb9cc79a8c74677d8645b92 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 6 Nov 2009 13:51:16 -0800
Subject: [PATCH 244/306] EXT-1501 Menu fonts now configurable in XUI, set size
 to SansSerifSmall

---
 indra/llui/llmenugl.cpp                       | 23 +++++++++++++++++++
 indra/llui/llmenugl.h                         | 21 +----------------
 .../default/xui/en/widgets/menu_item.xml      |  6 +++++
 3 files changed, 30 insertions(+), 20 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/en/widgets/menu_item.xml

diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 956e8439874..c6a38c7ca76 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -118,6 +118,7 @@ const F32 PIE_SHRINK_TIME = 0.2f; // time of transition between unbounded and bo
 
 const F32 ACTIVATE_HIGHLIGHT_TIME = 0.3f;
 
+static MenuRegistry::Register<LLMenuItemGL> register_menu_item("menu_item");
 static MenuRegistry::Register<LLMenuItemSeparatorGL> register_separator("menu_item_separator");
 static MenuRegistry::Register<LLMenuItemCallGL> register_menu_item_call("menu_item_call");
 static MenuRegistry::Register<LLMenuItemCheckGL> register_menu_item_check("menu_item_check");
@@ -132,6 +133,28 @@ static LLDefaultChildRegistry::Register<LLMenuGL> register_menu_default("menu");
 ///============================================================================
 /// Class LLMenuItemGL
 ///============================================================================
+
+LLMenuItemGL::Params::Params()
+:	shortcut("shortcut"),
+	jump_key("jump_key", KEY_NONE),
+	use_mac_ctrl("use_mac_ctrl", false),
+	rect("rect"),
+	left("left"),
+	top("top"),
+	right("right"),
+	bottom("bottom"),
+	width("width"),
+	height("height"),
+	bottom_delta("bottom_delta"),
+	left_delta("left_delta"),
+	enabled_color("enabled_color"),
+	disabled_color("disabled_color"),
+	highlight_bg_color("highlight_bg_color"),
+	highlight_fg_color("highlight_fg_color")
+{	
+	mouse_opaque = true;
+}
+
 // Default constructor
 LLMenuItemGL::LLMenuItemGL(const LLMenuItemGL::Params& p)
 :	LLUICtrl(p),
diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h
index 09d9e407c7b..dc8ed3b3fd6 100644
--- a/indra/llui/llmenugl.h
+++ b/indra/llui/llmenugl.h
@@ -79,26 +79,7 @@ class LLMenuItemGL : public LLUICtrl
 								highlight_fg_color;
 
 
-		Params()
-		:	shortcut("shortcut"),
-			jump_key("jump_key", KEY_NONE),
-			use_mac_ctrl("use_mac_ctrl", false),
-			rect("rect"),
-			left("left"),
-			top("top"),
-			right("right"),
-			bottom("bottom"),
-			width("width"),
-			height("height"),
-			bottom_delta("bottom_delta"),
-			left_delta("left_delta"),
-			enabled_color("enabled_color"),
-			disabled_color("disabled_color"),
-			highlight_bg_color("highlight_bg_color"),
-			highlight_fg_color("highlight_fg_color")
-		{	
-			mouse_opaque = true;
-		}
+		Params();
 	};
 
 protected:
diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item.xml b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
new file mode 100644
index 00000000000..c98e9cb6b83
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- Use this for the top-level menu styling -->
+<menu_item
+  font="SansSerifSmall"
+  >
+</menu_item>
-- 
GitLab


From 2aa981ac23bbdf2fd609e04434179be0cfec79ce Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Fri, 6 Nov 2009 17:35:05 -0500
Subject: [PATCH 245/306] EXT-2278 : "Save Texture As" for bottom panel
 EXT-2310 : "Save Texture As" for inventory right-click menu

"Save Texture As" now works properly and brings up the texture preview while saving.
Also added "Save Texture As" to the right-click inventory context menu.

--HG--
branch : avatar-pipeline
---
 indra/newview/llinventorybridge.cpp           | 45 +++++++++++++++-
 indra/newview/llinventorybridge.h             |  2 +
 indra/newview/llpanellandmarks.cpp            |  2 +-
 indra/newview/llpanellandmarks.h              |  2 +-
 indra/newview/llpanelmaininventory.cpp        | 51 +++----------------
 indra/newview/llpreviewtexture.cpp            | 24 +++++++--
 indra/newview/llpreviewtexture.h              | 12 ++---
 .../skins/default/xui/en/menu_inventory.xml   | 10 ++++
 8 files changed, 92 insertions(+), 56 deletions(-)

diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index f46bbbe1884..9c7be2fcf53 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -3086,6 +3086,49 @@ void LLTextureBridge::openItem()
 	}
 }
 
+void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	lldebugs << "LLTextureBridge::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+
+		items.push_back(std::string("Texture Separator"));
+		items.push_back(std::string("Save As"));
+	}
+	hide_context_entries(menu, items, disabled_items);	
+}
+
+// virtual
+void LLTextureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("save_as" == action)
+	{
+		LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
+		LLPreviewTexture* preview_texture = LLFloaterReg::findTypedInstance<LLPreviewTexture>("preview_texture", mUUID);
+		if (preview_texture)
+		{
+			preview_texture->openToSave();
+		}
+	}
+	else LLItemBridge::performAction(folder, model, action);
+}
+
 // +=================================================+
 // |        LLSoundBridge                            |
 // +=================================================+
@@ -3134,7 +3177,7 @@ void LLSoundBridge::openSoundPreview(void* which)
 
 void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 {
-	lldebugs << "LLTextureBridge::buildContextMenu()" << llendl;
+	lldebugs << "LLSoundBridge::buildContextMenu()" << llendl;
 	std::vector<std::string> items;
 	std::vector<std::string> disabled_items;
 
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 3f3513a665e..cce06813b78 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -383,6 +383,8 @@ class LLTextureBridge : public LLItemBridge
 public:
 	virtual LLUIImagePtr getIcon() const;
 	virtual void openItem();
+	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
 
 protected:
 	LLTextureBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type) :
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 91e1590dc3e..cb5f4718373 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -265,7 +265,7 @@ LLLandmark* LLLandmarksPanel::getCurSelectedLandmark() const
 	return NULL;
 }
 
-LLFolderViewItem* LLLandmarksPanel::getCurSelectedItem () const 
+LLFolderViewItem* LLLandmarksPanel::getCurSelectedItem() const 
 {
 	return mCurrentSelectedList ?  mCurrentSelectedList->getRootFolder()->getCurSelectedItem() : NULL;
 }
diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h
index 0e7abb48650..6498f2c7787 100644
--- a/indra/newview/llpanellandmarks.h
+++ b/indra/newview/llpanellandmarks.h
@@ -69,7 +69,7 @@ class LLLandmarksPanel : public LLPanelPlacesTab, LLRemoteParcelInfoObserver
 	bool isLandmarkSelected() const;
 	bool isReceivedFolderSelected() const;
 	LLLandmark* getCurSelectedLandmark() const;
-	LLFolderViewItem* getCurSelectedItem () const;
+	LLFolderViewItem* getCurSelectedItem() const;
 	void updateSortOrder(LLInventoryPanel* panel, bool byDate);
 
 	//LLRemoteParcelInfoObserver interface
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index bdfff9b2ab3..f4c88b9f828 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -41,6 +41,7 @@
 #include "llinventorypanel.h"
 #include "llfiltereditor.h"
 #include "llfloaterreg.h"
+#include "llpreviewtexture.h"
 #include "llscrollcontainer.h"
 #include "llsdserialize.h"
 #include "llspinctrl.h"
@@ -965,18 +966,11 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
 		}
 
 		const LLUUID& item_id = current_item->getListener()->getUUID();
-		LLFilePicker& file_picker = LLFilePicker::instance();
-		const LLInventoryItem* item = gInventory.getItem(item_id);
-		if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_TGA, item ? LLDir::getScrubbedFileName(item->getName()) : LLStringUtil::null) )
+		LLPreviewTexture* preview_texture = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(item_id), TAKE_FOCUS_YES);
+		if (preview_texture)
 		{
-			// User canceled or we failed to acquire save file.
-			return;
+			preview_texture->openToSave();
 		}
-		// remember the user-approved/edited file name.
-		const LLUUID& asset_id = item->getAssetUUID();
-		LLPointer<LLViewerFetchedTexture> image = LLViewerTextureManager::getFetchedTexture(asset_id, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
-		image->setLoadedCallback( on_file_loaded_for_save, 
-								  0, TRUE, FALSE, new std::string(file_picker.getFirstFile()) );
 	}
 }
 
@@ -1002,6 +996,7 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
 			}
 			return can_delete;
 		}
+		return FALSE;
 	}
 	if (command_name == "save_texture")
 	{
@@ -1010,8 +1005,9 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
 		{
 			return (current_item->getListener()->getInventoryType() == LLInventoryType::IT_TEXTURE);
 		}
+		return FALSE;
 	}
-	return FALSE;
+	return TRUE;
 }
 
 bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept)
@@ -1027,36 +1023,3 @@ bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType
 	}
 	return true;
 }
-
-void on_file_loaded_for_save(BOOL success, 
-							 LLViewerFetchedTexture *src_vi,
-							 LLImageRaw* src, 
-							 LLImageRaw* aux_src, 
-							 S32 discard_level,
-							 BOOL final,
-							 void* userdata)
-{
-	std::string *filename = (std::string*) userdata;
-
-	if (final && success)
-	{
-		LLPointer<LLImageTGA> image_tga = new LLImageTGA;
-		if( !image_tga->encode( src ) )
-		{
-			LLSD args;
-			args["FILE"] = *filename;
-			LLNotifications::instance().add("CannotEncodeFile", args);
-		}
-		else if( !image_tga->save( *filename ) )
-		{
-			LLSD args;
-			args["FILE"] = *filename;
-			LLNotifications::instance().add("CannotWriteFile", args);
-		}
-	}
-	
-	if(!success )
-	{
-		LLNotifications::instance().add("CannotDownloadFile");
-	}
-}
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 9c21faa3be5..6324b0adf9c 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -48,6 +48,7 @@
 #include "lltextbox.h"
 #include "lltextureview.h"
 #include "llui.h"
+#include "llviewerinventory.h"
 #include "llviewertexture.h"
 #include "llviewertexturelist.h"
 #include "lluictrlfactory.h"
@@ -63,7 +64,7 @@ const F32 PREVIEW_TEXTURE_MIN_ASPECT = 0.005f;
 
 
 LLPreviewTexture::LLPreviewTexture(const LLSD& key)
-	: LLPreview( key ),
+	: LLPreview(key),
 	  mLoadingFullImage( FALSE ),
 	  mShowKeepDiscard(FALSE),
 	  mCopyToInv(FALSE),
@@ -71,7 +72,8 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
 	  mUpdateDimensions(TRUE),
 	  mLastHeight(0),
 	  mLastWidth(0),
-	  mAspectRatio(0.f)
+	  mAspectRatio(0.f),
+	  mPreviewToSave(FALSE)
 {
 	const LLInventoryItem *item = getItem();
 	if(item)
@@ -104,6 +106,10 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
 		mIsCopyable = TRUE;
 	}
 
+	if (key.has("save_as"))
+	{
+		mPreviewToSave = TRUE;
+	}
 	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_texture.xml", FALSE);
 }
 
@@ -181,6 +187,12 @@ void LLPreviewTexture::draw()
 
 		if ( mImage.notNull() )
 		{
+			// Automatically bring up SaveAs dialog if we opened this to save the texture.
+			if (mPreviewToSave)
+			{
+				mPreviewToSave = FALSE;
+				saveAs();
+			}
 			// Draw the texture
 			glColor3f( 1.f, 1.f, 1.f );
 			gl_draw_scaled_image(interior.mLeft,
@@ -209,7 +221,7 @@ void LLPreviewTexture::draw()
 
 			if( mLoadingFullImage )
 			{
-				LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("Receiving:"), 0,
+				LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("Receiving"), 0,
 					interior.mLeft + 4, 
 					interior.mBottom + 4,
 					LLColor4::white, LLFontGL::LEFT, LLFontGL::BOTTOM,
@@ -304,6 +316,11 @@ void LLPreviewTexture::onFocusReceived()
 	LLPreview::onFocusReceived();
 }
 
+void LLPreviewTexture::openToSave()
+{
+	mPreviewToSave = TRUE;
+}
+
 // static
 void LLPreviewTexture::onFileLoadedForSave(BOOL success, 
 											LLViewerFetchedTexture *src_vi,
@@ -356,6 +373,7 @@ void LLPreviewTexture::onFileLoadedForSave(BOOL success,
 	{
 		LLNotifications::instance().add("CannotDownloadFile");
 	}
+
 }
 
 
diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h
index 520626b49f1..9b3c91d8312 100644
--- a/indra/newview/llpreviewtexture.h
+++ b/indra/newview/llpreviewtexture.h
@@ -67,8 +67,7 @@ class LLPreviewTexture : public LLPreview
 							S32 discard_level, 
 							BOOL final,
 							void* userdata );
-
-
+	void 				openToSave();
 protected:
 	void				init();
 	/* virtual */ BOOL	postBuild();
@@ -77,14 +76,17 @@ class LLPreviewTexture : public LLPreview
 	
 private:
 	void				updateDimensions();
-	LLUUID						mImageID;
+	LLUUID				mImageID;
 	LLPointer<LLViewerFetchedTexture>		mImage;
 	BOOL				mLoadingFullImage;
 	std::string			mSaveFileName;
 	LLFrameTimer		mSavedFileTimer;
 	BOOL                mShowKeepDiscard;
 	BOOL                mCopyToInv;
-	
+
+	// Save the image once it's loaded.
+	BOOL                mPreviewToSave;
+
 	// This is stored off in a member variable, because the save-as
 	// button and drag and drop functionality need to know.
 	BOOL mIsCopyable;
@@ -94,6 +96,4 @@ class LLPreviewTexture : public LLPreview
 	F32 mAspectRatio;
 	BOOL mUpdateDimensions;
 };
-
-
 #endif  // LL_LLPREVIEWTEXTURE_H
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index 62940b87dc3..8b6ab4e4d81 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -550,6 +550,16 @@
          function="Inventory.DoToSelected"
          parameter="deactivate" />
     </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Save As"
+     layout="topleft"
+     name="Save As">
+        <menu_item_call.on_click
+         function="Inventory.DoToSelected"
+         parameter="save_as" />
+    </menu_item_call>
     <menu_item_separator
      layout="topleft" />
     <menu_item_call
-- 
GitLab


From a24eee0dd69940f7c3ca8d7569c8ae965072376b Mon Sep 17 00:00:00 2001
From: Steve Bennetts <steve@lindenlab.com>
Date: Fri, 6 Nov 2009 14:36:16 -0800
Subject: [PATCH 246/306] DEV-42272 - viewer crash on startup in
 LLCurlRequest::process

---
 indra/llcommon/llqueuedthread.cpp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
index 395d2988874..e7ad571a905 100644
--- a/indra/llcommon/llqueuedthread.cpp
+++ b/indra/llcommon/llqueuedthread.cpp
@@ -113,8 +113,11 @@ S32 LLQueuedThread::update(U32 max_time_ms)
 {
 	if (!mStarted)
 	{
-		startThread();
-		mStarted = TRUE;
+		if (!mThreaded)
+		{
+			startThread();
+			mStarted = TRUE;
+		}
 	}
 	return updateQueue(max_time_ms);
 }
-- 
GitLab


From 4b9abdc83351b5d79f958cf13fa612a28c71bc04 Mon Sep 17 00:00:00 2001
From: Steve Bennetts <steve@lindenlab.com>
Date: Fri, 6 Nov 2009 14:51:52 -0800
Subject: [PATCH 247/306] Reverting OSX changes to expat from texture-pipeline
 merge

---
 install.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/install.xml b/install.xml
index a05122418dc..6d40d6fe4e3 100644
--- a/install.xml
+++ b/install.xml
@@ -326,9 +326,9 @@
           <key>darwin</key>
           <map>
             <key>md5sum</key>
-            <string>9c5603e328e9f543e0a599d6b25be973</string>
+            <string>c457a0a041ac4946265889a503d26c3d</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-darwin-20080812.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-darwin-20090805.tar.bz2</uri>
           </map>
           <key>linux</key>
           <map>
-- 
GitLab


From 3fa1e785a6964d672682b9e5c3fcbdda0fa1f8df Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 6 Nov 2009 15:16:40 -0800
Subject: [PATCH 248/306] EXT-1576 	 "Zoom In" menu option should be
 disabled when the person is not in range EXT-2306   	 Default voice
 input/output pref panel to closed

---
 indra/newview/llfloatervoicedevicesettings.cpp      |  3 +++
 indra/newview/llinspectavatar.cpp                   |  9 +++++++++
 .../default/xui/en/menu_inspect_avatar_gear.xml     |  2 ++
 .../default/xui/en/panel_preferences_sound.xml      | 13 -------------
 4 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp
index bbeb2871714..43024a4bd03 100644
--- a/indra/newview/llfloatervoicedevicesettings.cpp
+++ b/indra/newview/llfloatervoicedevicesettings.cpp
@@ -95,6 +95,9 @@ void LLPanelVoiceDeviceSettings::handleVisibilityChange ( BOOL new_visibility )
 	else
 	{
 		cleanup();
+		// when closing this window, turn of visiblity control so that 
+		// next time preferences is opened we don't suspend voice
+		gSavedSettings.setBOOL("ShowDeviceSettings", FALSE);
 	}
 }
 void LLPanelVoiceDeviceSettings::draw()
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index bfad2b16248..0329e740af9 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -47,6 +47,7 @@
 #include "llstartup.h"
 #include "llviewermenu.h"
 #include "llvoiceclient.h"
+#include "llviewerobjectlist.h"
 
 // Linden libraries
 #include "llfloater.h"
@@ -113,6 +114,7 @@ class LLInspectAvatar : public LLInspect
 	void onClickFindOnMap();
 	bool onVisibleFindOnMap();
 	bool onVisibleFreezeEject();
+	bool onVisibleZoomIn();
 	void onClickMuteVolume();
 	void onVolumeChange(const LLSD& data);
 	
@@ -203,6 +205,8 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
 	mVisibleCallbackRegistrar.add("InspectAvatar.VisibleFindOnMap",	boost::bind(&LLInspectAvatar::onVisibleFindOnMap, this));	
 	mVisibleCallbackRegistrar.add("InspectAvatar.VisibleFreezeEject",	
 		boost::bind(&LLInspectAvatar::onVisibleFreezeEject, this));	
+	mVisibleCallbackRegistrar.add("InspectAvatar.VisibleZoomIn", 
+		boost::bind(&LLInspectAvatar::onVisibleZoomIn, this));
 
 	// can't make the properties request until the widgets are constructed
 	// as it might return immediately, so do it in postBuild.
@@ -464,6 +468,11 @@ bool LLInspectAvatar::onVisibleFreezeEject()
 	return enable_freeze_eject( LLSD(mAvatarID) );
 }
 
+bool LLInspectAvatar::onVisibleZoomIn()
+{
+	return gObjectList.findObject(mAvatarID);
+}
+
 void LLInspectAvatar::onClickIM()
 { 
 	LLAvatarActions::startIM(mAvatarID);
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
index 6049476a43f..db2c9ea0fb3 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
@@ -101,6 +101,8 @@
    name="zoom_in">
     <menu_item_call.on_click
      function="InspectAvatar.ZoomIn"/>
+    <menu_item_call.on_visible
+     function="InspectAvatar.VisibleZoomIn"/>
   </menu_item_call>  
   <menu_item_call
    label="Pay"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index 78ae9a82240..402d0b6ab41 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -502,17 +502,4 @@
      top_pad="0"
      width="200" />
     </panel>
-          <!-- Until new panel is hooked up to code, we need to be able to get to
-    the old window to change input devices. James -->
-  <button
-    follows="left|bottom"
-    label="Old"
-    name="legacy_device_window_btn"
-    height="16"
-    left="20"
-    top="-270"
-    width="40"
-    commit_callback.function="Floater.Show"
-    commit_callback.parameter="pref_voicedevicesettings"
-    />
     </panel>
-- 
GitLab


From 99f75c9bca7a28cdb913e740922b71d5722bf503 Mon Sep 17 00:00:00 2001
From: CG Linden <cg@lindenlab.com>
Date: Fri, 6 Nov 2009 15:52:51 -0800
Subject: [PATCH 249/306] Add support for externally specified revision number
 (codeticket)

---
 scripts/update_version_files.py | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/scripts/update_version_files.py b/scripts/update_version_files.py
index ee1ce69a15b..204986c73a4 100755
--- a/scripts/update_version_files.py
+++ b/scripts/update_version_files.py
@@ -47,6 +47,9 @@ def usage():
 Options:
   --version
    Specify the version string to replace current version.
+  --revision
+   Specify the revision to replace the last digit of the version.
+   By default, revision is computed from the version control system.
   --skip-on-branch
    Specify a regular expression against which the current branch
    is matched. If it matches, then leave version strings alone.
@@ -171,12 +174,15 @@ def main():
     update_server = False
     update_viewer = False
     new_version = None
+    new_revision = None
     new_viewer_channel = None
     new_server_channel = None
     skip_on_branch_re = None
     for o,a in opts:
         if o in ('--version'):
             new_version = a
+        if o in ('--revision'):
+            new_revision = a
         if o in ('--skip-on-branch'):
             skip_on_branch_re = re.compile(a)
         if o in ('--channel'):
@@ -243,11 +249,20 @@ def main():
     else:
 
         if llversion.using_svn():
-            revision = llversion.get_svn_revision()
+            if new_revision:
+                revision = new_revision
+            else:
+                revision = llversion.get_svn_revision()
             branch = llversion.get_svn_branch()
         elif llversion.using_hg():
-            revision = llversion.get_hg_changeset()
+            if new_revision:
+                revision = new_revision
+            else:
+                revision = llversion.get_hg_changeset()
             branch = llversion.get_hg_repo()
+        elif new_revision:
+            revision = new_revision
+            branch = "unknown"
         else:
             print >>sys.stderr, "ERROR: could not determine revision and branch"
             return -1
-- 
GitLab


From 66cf090114379244ae8c67dc37b8c8d75b806cae Mon Sep 17 00:00:00 2001
From: CG Linden <cg@lindenlab.com>
Date: Fri, 6 Nov 2009 15:54:11 -0800
Subject: [PATCH 250/306] Adding new option definition - forgot.

---
 indra/llcommon/llversionserver.h              | 2 +-
 indra/llcommon/llversionviewer.h              | 2 +-
 indra/newview/English.lproj/InfoPlist.strings | 4 ++--
 indra/newview/Info-SecondLife.plist           | 2 +-
 indra/newview/res/viewerRes.rc                | 8 ++++----
 scripts/update_version_files.py               | 1 +
 6 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h
index 71c6fc05919..0f1e59a18cc 100644
--- a/indra/llcommon/llversionserver.h
+++ b/indra/llcommon/llversionserver.h
@@ -36,7 +36,7 @@
 const S32 LL_VERSION_MAJOR = 1;
 const S32 LL_VERSION_MINOR = 31;
 const S32 LL_VERSION_PATCH = 0;
-const S32 LL_VERSION_BUILD = 3256;
+const S32 LL_VERSION_BUILD = 200030;
 
 const char * const LL_CHANNEL = "Second Life Server";
 
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index 082d054ba2e..540aea42522 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -36,7 +36,7 @@
 const S32 LL_VERSION_MAJOR = 2;
 const S32 LL_VERSION_MINOR = 0;
 const S32 LL_VERSION_PATCH = 0;
-const S32 LL_VERSION_BUILD = 3256;
+const S32 LL_VERSION_BUILD = 200030;
 
 const char * const LL_CHANNEL = "Second Life Developer";
 
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index dceaba9a434..879408d6e4f 100644
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -2,6 +2,6 @@
 
 CFBundleName = "Second Life";
 
-CFBundleShortVersionString = "Second Life version 2.0.0.3256";
-CFBundleGetInfoString = "Second Life version 2.0.0.3256, Copyright 2004-2009 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version 2.0.0.200030";
+CFBundleGetInfoString = "Second Life version 2.0.0.200030, Copyright 2004-2009 Linden Research, Inc.";
 
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index 7aec8a343d6..38ebb22b848 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>2.0.0.3256</string>
+	<string>2.0.0.200030</string>
 	<key>CSResourcesFileMapped</key>
 	<true/>
 </dict>
diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc
index 433070ce343..38291e45c93 100644
--- a/indra/newview/res/viewerRes.rc
+++ b/indra/newview/res/viewerRes.rc
@@ -134,8 +134,8 @@ TOOLMEDIAOPEN           CURSOR                  "toolmediaopen.cur"
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,0,0,3256
- PRODUCTVERSION 2,0,0,3256
+ FILEVERSION 2,0,0,200030
+ PRODUCTVERSION 2,0,0,200030
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -152,12 +152,12 @@ BEGIN
         BEGIN
             VALUE "CompanyName", "Linden Lab"
             VALUE "FileDescription", "Second Life"
-            VALUE "FileVersion", "2.0.0.3256"
+            VALUE "FileVersion", "2.0.0.200030"
             VALUE "InternalName", "Second Life"
             VALUE "LegalCopyright", "Copyright © 2001-2008, Linden Research, Inc."
             VALUE "OriginalFilename", "SecondLife.exe"
             VALUE "ProductName", "Second Life"
-            VALUE "ProductVersion", "2.0.0.3256"
+            VALUE "ProductVersion", "2.0.0.200030"
         END
     END
     BLOCK "VarFileInfo"
diff --git a/scripts/update_version_files.py b/scripts/update_version_files.py
index 204986c73a4..da60fd105a9 100755
--- a/scripts/update_version_files.py
+++ b/scripts/update_version_files.py
@@ -164,6 +164,7 @@ def main():
     opts, args = getopt.getopt(sys.argv[1:],
                                "",
                                ['version=',
+                                'revision=',
                                 'channel=',
                                 'server_channel=',
                                 'skip-on-branch=',
-- 
GitLab


From 0a5cbfd195c5c67f105e7ea05684c4e726e689f0 Mon Sep 17 00:00:00 2001
From: Steve Bennetts <steve@lindenlab.com>
Date: Fri, 6 Nov 2009 16:14:42 -0800
Subject: [PATCH 251/306] EXT-2031   	 Admin Menu Missing Without Advanced
 Menu Enabled

---
 indra/newview/llviewermenu.cpp                 |  2 +-
 .../skins/default/xui/en/menu_viewer.xml       | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 207f0e3f429..a3b119456b3 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -5192,7 +5192,7 @@ void show_debug_menus()
 		gMenuBarView->setItemEnabled("Develop", qamode);
 
 		// Server ('Admin') menu hidden when not in godmode.
-		const bool show_server_menu = debug && (gAgent.getGodLevel() > GOD_NOT);
+		const bool show_server_menu = debug && (gAgent.getGodLevel() > GOD_NOT || gAgent.getAdminOverride());
 		gMenuBarView->setItemVisible("Admin", show_server_menu);
 		gMenuBarView->setItemEnabled("Admin", show_server_menu);
 	}
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 633c258ecc4..66c9060b06d 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -98,6 +98,24 @@
                  function="World.SetBusy"/>
             </menu_item_call>
         </menu>
+        <menu_item_call
+         label="Request Admin Status"
+         layout="topleft"
+         name="Request Admin Options"
+         shortcut="control|alt|G"
+		 visible="false">
+            <menu_item_call.on_click
+             function="Advanced.RequestAdminStatus" />
+        </menu_item_call>
+        <menu_item_call
+         label="Leave Admin Status"
+         layout="topleft"
+         name="Leave Admin Options"
+         shortcut="control|alt|shift|G"
+		 visible="false">
+            <menu_item_call.on_click
+             function="Advanced.LeaveAdminStatus" />
+        </menu_item_call>
         <menu_item_separator
          layout="topleft" />
         <menu_item_call
-- 
GitLab


From 485dcd9a8f89e885ceb290e70749fcb48767fdc6 Mon Sep 17 00:00:00 2001
From: Steve Bennetts <steve@lindenlab.com>
Date: Fri, 6 Nov 2009 16:16:01 -0800
Subject: [PATCH 252/306] Fixed textrue prioritization so that boosted textures
 are always highest priority.

---
 indra/newview/llpreviewtexture.cpp |  5 --
 indra/newview/llviewertexture.cpp  | 86 ++++++++++++------------------
 indra/newview/llviewertexture.h    |  4 --
 3 files changed, 35 insertions(+), 60 deletions(-)

diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index d2527065db0..3eab13fc4a2 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -204,11 +204,6 @@ void LLPreviewTexture::draw()
 			// Pump the texture priority
 			F32 pixel_area = mLoadingFullImage ? (F32)MAX_IMAGE_AREA  : (F32)(interior.getWidth() * interior.getHeight() );
 			mImage->addTextureStats( pixel_area );
-			if(pixel_area > 0.f)
-			{
-				//boost the previewed image priority to the highest to make it to get loaded first.
-				mImage->setAdditionalDecodePriority(1.0f) ;
-			}
 
 			// Don't bother decoding more than we can display, unless
 			// we're loading the full image.
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index b2d7d71b538..9923c9ac74f 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -986,8 +986,6 @@ void LLViewerFetchedTexture::init(bool firstinit)
 	mFetchPriority = 0;
 	mDownloadProgress = 0.f;
 	mFetchDeltaTime = 999999.f;
-	mDecodeFrame = 0;
-	mVisibleFrame = 0;
 	mForSculpt = FALSE ;
 	mIsFetched = FALSE ;
 
@@ -1370,16 +1368,6 @@ void LLViewerFetchedTexture::processTextureStats()
 	}
 }
 
-//texture does not have any data, so we don't know the size of the image, treat it like 32 * 32.
-F32 LLViewerFetchedTexture::calcDecodePriorityForUnknownTexture(F32 pixel_priority)
-{
-	F32 desired = (F32)(log(32.0/pixel_priority) / log_2);
-	S32 ddiscard = MAX_DISCARD_LEVEL - (S32)desired + 1;
-	ddiscard = llclamp(ddiscard, 1, 9);
-	
-	return ddiscard*100000.f;
-}
-
 F32 LLViewerFetchedTexture::calcDecodePriority()
 {
 #ifndef LL_RELEASE_FOR_DOWNLOAD
@@ -1406,12 +1394,6 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 	S32 cur_discard = getDiscardLevel();
 	bool have_all_data = (cur_discard >= 0 && (cur_discard <= mDesiredDiscardLevel));
 	F32 pixel_priority = fsqrtf(mMaxVirtualSize);
-	const S32 MIN_NOT_VISIBLE_FRAMES = 30; // NOTE: this function is not called every frame
-	mDecodeFrame++;
-	if (pixel_priority > 0.f)
-	{
-		mVisibleFrame = mDecodeFrame;
-	}
 
 	F32 priority;
 	if (mIsMissingAsset)
@@ -1422,10 +1404,6 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 	{
 		priority = -1.0f ;
 	}
-	else if (!isJustBound() && mCachedRawImageReady && !mBoostLevel)
-	{
-		priority = -1.0f;
-	}
 	else if(mCachedRawDiscardLevel > -1 && mDesiredDiscardLevel >= mCachedRawDiscardLevel)
 	{
 		priority = -1.0f;
@@ -1447,11 +1425,6 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 			// Always want high boosted images
 			priority = 1.f;
 		}
-		else if (mVisibleFrame == 0 || (mDecodeFrame - mVisibleFrame > MIN_NOT_VISIBLE_FRAMES))
-		{
-			// Don't decode anything that isn't visible unless it's important
-			priority = -2.0f;
-		}
 		else
 		{
 			// Leave the priority as-is
@@ -1460,7 +1433,13 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 	}
 	else if (cur_discard < 0)
 	{
-		priority = calcDecodePriorityForUnknownTexture(pixel_priority) ;
+		//texture does not have any data, so we don't know the size of the image, treat it like 32 * 32.
+		// priority range = 100,000 - 500,000
+		static const F64 log_2 = log(2.0);
+		F32 desired = (F32)(log(32.0/pixel_priority) / log_2);
+		S32 ddiscard = MAX_DISCARD_LEVEL - (S32)desired;
+		ddiscard = llclamp(ddiscard, 0, 4);
+		priority = (ddiscard+1)*100000.f;
 	}
 	else if ((mMinDiscardLevel > 0) && (cur_discard <= mMinDiscardLevel))
 	{
@@ -1473,38 +1452,47 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 	}
 	else
 	{
-		// priority range = 100000-400000
-		S32 ddiscard = cur_discard - mDesiredDiscardLevel;
+		// priority range = 100,000 - 500,000
+		S32 desired_discard = mDesiredDiscardLevel;
 		if (getDontDiscard())
 		{
-			ddiscard+=2;
+			desired_discard -= 2;
 		}
-		else if (ddiscard > 2 && mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == LLViewerTexture::BOOST_NONE)
+		else if (!isJustBound() && mCachedRawImageReady && !mBoostLevel)
 		{
-			ddiscard-=2;
+			// We haven't rendered this in the last half second, and we have a cached raw image, leave the desired discard as-is
+			desired_discard = cur_discard;
 		}
+		else if (mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == LLViewerTexture::BOOST_NONE)
+		{
+			// We haven't rendered this in a while, de-prioritize it
+			desired_discard += 2;
+		}
+		S32 ddiscard = cur_discard - desired_discard;
 		ddiscard = llclamp(ddiscard, 0, 4);
-		priority = ddiscard*100000.f;
+		priority = (ddiscard+1)*100000.f;
 	}
+
+	// Priority Formula:
+	// BOOST_HIGH  +  ADDITIONAL PRI + DELTA DISCARD + BOOST LEVEL + PIXELS
+	// [10,000,000] + [1-9,000,000]  + [1-400,000]   + [1-20,000]  + [0-999]
 	if (priority > 0.0f)
 	{
-		// priority range = 100000-900000
-		pixel_priority = llclamp(pixel_priority, 0.0f, priority-1.f); 
+		pixel_priority = llclamp(pixel_priority, 0.0f, 999.f); 
+
+		priority = pixel_priority + 1000.f * mBoostLevel;
 
-		// priority range = [100000.f, 2000000.f]
 		if ( mBoostLevel > BOOST_HIGH)
 		{
-			priority = 1000000.f + pixel_priority + 1000.f * (mBoostLevel - LLViewerTexture::BOOST_NONE);
+			priority += 10000000.f;
 		}
-		else
-		{
-			priority +=      0.f + pixel_priority + 1000.f * (mBoostLevel - LLViewerTexture::BOOST_NONE);
-		}
-
-		// priority range = [2100000.f, 5000000.f] if mAdditionalDecodePriority > 1.0
-		if(mAdditionalDecodePriority > 1.0f)
+		
+		if(mAdditionalDecodePriority > 0.0f)
 		{
-			priority += 2000000.f + mAdditionalDecodePriority ;
+			// 1-9
+			S32 additional_priority = (S32)(1.0f + mAdditionalDecodePriority*8.0f + .5f); // round
+			// priority range += 0-9,000,000
+			priority += 1000000.f * (F32)additional_priority;
 		}
 	}
 	return priority;
@@ -1517,13 +1505,9 @@ void LLViewerFetchedTexture::setDecodePriority(F32 priority)
 	mDecodePriority = priority;
 }
 
-F32 LLViewerFetchedTexture::maxAdditionalDecodePriority()
-{
-	return 2000000.f;
-}
 void LLViewerFetchedTexture::setAdditionalDecodePriority(F32 priority)
 {
-	priority *= maxAdditionalDecodePriority();
+	priority = llclamp(priority, 0.f, 1.f);
 	if(mAdditionalDecodePriority < priority)
 	{
 		mAdditionalDecodePriority = priority;
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 4da6620658d..bde87d1dd57 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -383,7 +383,6 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	F32 getDecodePriority() const { return mDecodePriority; };
 
 	void setAdditionalDecodePriority(F32 priority) ;
-	F32  maxAdditionalDecodePriority() ;
 	
 	void updateVirtualSize() ;
 
@@ -454,7 +453,6 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	void init(bool firstinit) ;
 	void cleanup() ;
 
-	F32 calcDecodePriorityForUnknownTexture(F32 pixel_priority) ;
 	void saveRawImage() ;
 	BOOL forceFetch() ;
 	void setCachedRawImage() ;
@@ -488,8 +486,6 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	F32 mDownloadProgress;
 	F32 mFetchDeltaTime;
 	F32 mRequestDeltaTime;
-	S32 mDecodeFrame;
-	S32 mVisibleFrame; // decode frame where image was last visible
 	F32 mDecodePriority;			// The priority for decoding this image.
 	S32	mMinDiscardLevel;
 	S8  mDesiredDiscardLevel;			// The discard level we'd LIKE to have - if we have it and there's space	
-- 
GitLab


From 5e85642650d4ffa822b749c5a4a211531545d660 Mon Sep 17 00:00:00 2001
From: Steve Bennetts <steve@lindenlab.com>
Date: Fri, 6 Nov 2009 18:04:29 -0800
Subject: [PATCH 253/306] Temp fix to prevent crash while missing
 sidepanel_task_info.xml.

---
 indra/newview/llsidepanelinventory.cpp | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 3a1b354c502..6aa5c53194f 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -95,8 +95,11 @@ BOOL LLSidepanelInventory::postBuild()
 	// UI elements from task panel
 	{
 		mTaskPanel = getChild<LLSidepanelTaskInfo>("sidepanel__task_panel");
-		LLButton* back_btn = mTaskPanel->getChild<LLButton>("back_btn");
-		back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
+		if (mTaskPanel)
+		{
+			LLButton* back_btn = mTaskPanel->getChild<LLButton>("back_btn");
+			back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
+		}
 	}
 	
 	return TRUE;
@@ -120,7 +123,8 @@ void LLSidepanelInventory::onOpen(const LLSD& key)
 	}
 	if (key.has("task"))
 	{
-		mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
+		if (mTaskPanel)
+			mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
 		showTaskInfoPanel();
 	}
 }
@@ -184,7 +188,8 @@ void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*>
 void LLSidepanelInventory::showItemInfoPanel()
 {
 	mItemPanel->setVisible(TRUE);
-	mTaskPanel->setVisible(FALSE);
+	if (mTaskPanel)
+		mTaskPanel->setVisible(FALSE);
 	mInventoryPanel->setVisible(FALSE);
 
 	mItemPanel->dirty();
@@ -194,17 +199,21 @@ void LLSidepanelInventory::showItemInfoPanel()
 void LLSidepanelInventory::showTaskInfoPanel()
 {
 	mItemPanel->setVisible(FALSE);
-	mTaskPanel->setVisible(TRUE);
 	mInventoryPanel->setVisible(FALSE);
 
-	mTaskPanel->dirty();
-	mTaskPanel->setIsEditing(FALSE);
+	if (mTaskPanel)
+	{
+		mTaskPanel->setVisible(TRUE);
+		mTaskPanel->dirty();
+		mTaskPanel->setIsEditing(FALSE);
+	}
 }
 
 void LLSidepanelInventory::showInventoryPanel()
 {
 	mItemPanel->setVisible(FALSE);
-	mTaskPanel->setVisible(FALSE);
+	if (mTaskPanel)
+		mTaskPanel->setVisible(FALSE);
 	mInventoryPanel->setVisible(TRUE);
 	updateVerbs();
 }
-- 
GitLab


From 4a2b77aebb5d48607c1f36f127211ea25f494dbe Mon Sep 17 00:00:00 2001
From: Erica <erica@lindenlab.com>
Date: Fri, 6 Nov 2009 18:08:51 -0800
Subject: [PATCH 254/306] New inventory icon

---
 .../skins/default/xui/en/panel_navigation_bar.xml      |  4 ++--
 indra/newview/skins/default/xui/en/panel_side_tray.xml | 10 +++++-----
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index 44fd44cde58..255b92844f0 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -7,7 +7,7 @@
  height="65"
  layout="topleft"
  name="navigation_bar"
- chrome="true" 
+ chrome="true"
  width="600">
 	<icon
 	 follows="all"
@@ -145,7 +145,7 @@
 	     top_delta="0"
 	     width="200" >
          <combo_editor
-          label="Search" />
+          label="Search Second Life" />
         </search_combo_box>
 	</panel>
 
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml
index 3582de1c711..a9874f45530 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<!-- Side tray cannot show background because it is always 
+<!-- Side tray cannot show background because it is always
 	partially on screen to hold tab buttons. -->
 <side_tray
   name="sidebar"
@@ -10,7 +10,7 @@
 >
   <!-- Individual tabs must show background to have seemless
 	appearance up to tray panel header word like "Home".
-	Embedded panels are inset by a pixel and so their 
+	Embedded panels are inset by a pixel and so their
 	backgrounds will not block the world fully. -->
   <sidetray_tab
     name="sidebar_home"
@@ -70,7 +70,7 @@
 
     </panel_container>
   </sidetray_tab>
-  
+
   <sidetray_tab
     name="sidebar_places"
     help_topic="sidebar_places"
@@ -133,8 +133,8 @@
     help_topic="sidebar_inventory"
     tab_title="Inventory"
     description="Browse your inventory."
-    image="TabIcon_Inventory_Off"
-    image_selected="TabIcon_Inventory_Selected"
+    image="TabIcon_Things_Off"
+    image_selected="TabIcon_Things_Selected"
     mouse_opaque="false"
     background_visible="true"
   >
-- 
GitLab


From fcbad172a68f12169f1e6ab0390f71be10b900fb Mon Sep 17 00:00:00 2001
From: Erica <erica@lindenlab.com>
Date: Fri, 6 Nov 2009 18:57:35 -0800
Subject: [PATCH 255/306] Added camera preset art and attached to camera
 controls

---
 .../bottomtray/Cam_Preset_Back_Off.png        | Bin 0 -> 700 bytes
 .../bottomtray/Cam_Preset_Back_On.png         | Bin 0 -> 754 bytes
 .../bottomtray/Cam_Preset_Eye_Off.png         | Bin 0 -> 914 bytes
 .../bottomtray/Cam_Preset_Front_Off.png       | Bin 0 -> 959 bytes
 .../bottomtray/Cam_Preset_Front_On.png        | Bin 0 -> 1087 bytes
 .../bottomtray/Cam_Preset_Side_Off.png        | Bin 0 -> 945 bytes
 .../bottomtray/Cam_Preset_Side_On.png         | Bin 0 -> 1049 bytes
 .../default/textures/icons/Inv_Alpha.png      | Bin 253 -> 319 bytes
 .../default/textures/icons/Inv_Tattoo.png     | Bin 253 -> 416 bytes
 .../skins/default/textures/textures.xml       |  15 ++++--
 .../skins/default/xui/en/floater_camera.xml   |  46 +++++++++---------
 11 files changed, 33 insertions(+), 28 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png
 create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png
 create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png
 create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png
 create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png
 create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png
 create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png

diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png
new file mode 100644
index 0000000000000000000000000000000000000000..3cfe2e850e614f131b343dec26aa23b3542720c0
GIT binary patch
literal 700
zcmV;t0z>_YP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!UP(kjRCwC#m^*LcKoEe}2Es$a5+KA8
zFa@H)PD`X*pHuz-lvGKdQ+~iD*WV?*LqnHHX=zeY<o>{=prC-`)tNT}3^&7Zr(7Pg
z&yU5YWTcU8?d<y7*_qk3ndNf1MF`<Q@oFcTg7z2yd<Qoyv8OCp8^fWnc82>!_y%ZD
zoMsGCDwTvzr*rW8+2L^XGMUU(I-Twt9UHTF+sFWtB%M#E)7*1ye!u@yKA*qb*b)~C
zh0~YdQ2PD;S+Q6=+z22p>tr%HQnN$Ia=9F*4%lk7a$0RGmC7M?!1;W>V}<SOse@jx
zm(yzNcDv(^Mnj+mSglsGJkN_-?SsJ}KO7EEr~xh(3qBf+5~ovJoeu;8*ylYpKq$c1
zcvcex^;N@3gu`LHO4I-&k;o75;4bV!$7;5TMB)x6w4X|)zHVZx`&O&f_;$NZn$6~4
z4WUqo#9}d$OeXPhAM~C!U>5X3qwROl57d?zwy*49F!-#+R#6nR7rWi=`FK2zTk1h5
z6$0!E=rvK6<<-kQ9?vQf9%nRUErEjsf&F^b=JWZ8%jN2^Ec*pw^3rs`HQdem3-AvF
zLe6Hh7c&@@ee`9)Fw8Z_aUV?s#H9gm+&+Xed=O<A2_R2Ri9vw7FcS_19CHM5yk{72
zJ;)xhKp;HM3<JU-C&W4t)x5~6#hz8(dyr^3-GGp_mcp%L@jy2qbQX#A!eI&13%El8
z5Z}Y=O_C>DQ@vg{1oK>fh(l2?;FFn+Mk7Oj|JwiU=aJTWXxYD+*W$td8&I(^pMrog
imLeO%A(Q-5fB^vYSp_L!SU`IK0000<MNUMnLSTY!?m=h(

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png
new file mode 100644
index 0000000000000000000000000000000000000000..bb5d85e4100c3865a7c0f0afa1f49e622defa49d
GIT binary patch
literal 754
zcmV<O0uB9%P)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!lu1NERCwC#nBQyDP!z{cZjvr-m%6&u
zE}2SokTMV-wl_i8AJF<L+aI8hg7bY9AAFkNqdp9L+3?kZuj<QuQjmeL$!O>N(Tdup
zKk}n#Q}3NRR_$z-G-+fz5NMKf&;9g!?mZ`5s@-n$05E~CF!;;r`1(j;z>D|?3;r|%
z`52BEi@@i04CvIDegxTAdn$d&y`BAiPcv+F>hhIrR6JL68k_9m87BdrE#FzxYI3^U
zyA$y<OP8+RSRGi3Up%^d^B_24a&c#2?eYD&fdG=UD)P7aUVa4f{rXG6bHKv8Hz}*W
zx!2F<JO?y1CFzFm(W!$0F34N1Wo$rDih0R1z)EgCbxKTFo-i^pChDc)HO~OerXj|J
zv!ozf1B{M=*=o*s2FQ(yS)i!u`KjrizT{6tV*=2Dpsj*!tJQHQ$3N3Up|mWQNqfuu
z%Xd7Hd=-qHUJAt%n}cX|Prhz%h^4|deE+c3@q&+uFgh^_@yQG1mK1c)0aLxy+h?1<
zAiY_GO0Ax%)YJtlzO9xCrHU$*<?3QXZwRg`sB4;pC&}P3(x<WxMym~Bjs=#bA;8d`
zU}hUM-GI7gzz~CAB*Xy6qAE?(55xTMYTp3~oUZ8)$nx4NHyEOUAvMG7Ud$N^I1Gmn
z)j26bSw6zw?i(OUji#zA`{5k7FoafyBmBL-tU;_^rk`*>)i>u=MV)pGNP;;1>ORPt
zhH=X=AP#cftuGa_*?OsndaXUT)Y}uF*-YC8#Ok>Ux2vLQ&e{gV3t0m9jVC3{79dV<
z(gQ%!Z3Mf3e+}H)DL8`ZHXdgxX?GWke?F+Inj^r&jz2y;vbd8a*Un~+go6J)py6Y_
k-9z-ePaz3Y{)Yeq08Drm=&BNvuK)l507*qoM6N<$g1}p6IRF3v

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b509867805cdfb55be8c3a1f976ee94612bab9b
GIT binary patch
literal 914
zcmV;D18w|?P)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#G)Y83RCwCVSj|ovQ53$6{3r>KC`M8l
z6CeV`C%_lL2WSlsQ1`XnlGY|{o4U72*VR5iyEP$pLtIHsG?D-&8a6s4iU`>A-5>!v
zg*(h0!bxuC@64I+o}anjxwfaLCnsafO9RJgk_HXUMgRkJqOj?dwlc-wAj&j@<6@U#
zq*AFQ8jZ$UyWLj%r>~TqPUlH57%Yry8#(x5oEL9zZ#~s&b*tHIZqlVXLcMIa+xHh2
z7x#QVU(IrW#bPn_@bIwPseU7(xm>Qdp-||TWdP64&URX@)|Q!+n3<W`TU}k<5vmd+
zhR@H>-<bsmfeqM_3b0fvB`M$D%c@S;f=y`v@9yrt$o_?h*c1YIadGilpi;*XwPV{H
zKnll(RX^fUwuJ!F57;t*qiic8#bNbwHtZXUKnQ|X1041ZMIZ#K)c}WmV=Oi^J39-b
ztX{7(kH<4q7tf&w{ZYDxmO7AutE;PT^gP+KM6p01z;d}9D-;Us{{Eh=tgNtfI?XOG
zFFBB2-R0$Fc6fNm^7%Z!x4yp4lF1}1m&;g9`qpS-Js-m1@PV)g2f;z`L3jb+ve_&j
zl;F^1s;Y8O&){(V`1shTdwhJ%z2B?b5iilTUA<z_1$cdZ9UKJL;dkBhxw$z$AjDAq
zdEN^Edh_%1-D`)#q3aZiz#AdLN>oZWX%QOCK9x#!?<Eomwy?0kLky2~$N;~FE<&2g
zWcYo&hi5t==0Z;K3FRPMP3z>3|4=37^?I4x?dIpChkWgV)6;z}j#{n8G)>b5$HCZa
zN3mG!l~9qKo}T_0gOHjM3jN1OB=S|LNWgq2368vX;`jT%8)DQ5H6`vQ>8xQ`1q}TP
z!0GiX!jzvv{@Vh|rN!g%mr@8TW+}brwcGckF>17on6XTNRNed103ts`W^BNFpO==F
zDpI>TiC)w?w&b>*@S=?04{V6;Fc_v=*cCwIZKi2Ava>K2AH=Qz5d*_jjdw(M6ifkx
zM5EDdBc6mV-kI3$R_|&<#P!pVm8ML@Vw;HV(L}f3^!5m8S=<<C4St&08<YyrDnSmm
orWjuf0B_LwO(8g7y7?=>0Jg7&)rX?`xc~qF07*qoM6N<$f>8Fi$p8QV

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png
new file mode 100644
index 0000000000000000000000000000000000000000..9876aa456cf1282e74a459ba3ec0173a9c1fc75b
GIT binary patch
literal 959
zcmV;w13>(VP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#VM#<mRCwC#SW8bDQ53#|3ZgP-Fj^aD
zW8w?=10=XHX~NEp^%wX9NV{*F?%V!=wsz&pl%>**i5qRZaAPQ%s2d<ce1wNDK(ODr
zGGrXb*9?xc;3PM5=W_1MchC9GV-PMcFYSym5reK)k`hK<0KgZR*qAk?YO^pn5}TF5
zT_J1&G$^e`AF#N%=uIY*Z_DL!NL~{JA>Y>477Yf2@5aZ+3r3z#QT$Tx=13$GNT<_t
zc!sFWa9hIf_fJnuOe9TraXcP(WipvBU0q$G*Xv~i0|QqsX>H}By}g}Pt5qo$i_JX?
z2iMovLj+)Wc$kADkRu}_Y-nhR-^<rZrQ(~PpMPyS2Tx8;LOne_jD{?dB(aN&3sxu;
z_&NbRKR;*3$H&Ca1yd~u-no_F>L-SKmFqMo-DVzC3W8&>zrWu{fpDL6cXtyv1KZo%
zZ%pGLI5smjHYPqqS9UjoWd@herdW{j+oKb%AS6w5F;d6^g5eWh8he0x9tVoL-R`jI
zl_ZzTx%T$<{?-~^O|jeUVLH&WL@}&VI5;?n-jOR4$ct;HM==s_AfL~F-`w0xt*)-l
z?Ck7lS(mM>tVsCn59YrSShJ;4$@QczrWc%@o&CTxK=<fa7=c?_T4ElLhgT9>J3KsO
zySuxrudk0yO-)fy)%n=c(h^4f{?%}RaF-YE`l;lb%jM!P-`Ln-%gf8GSS;4{(Z#UI
z$w^*WuvZ<?Uqw;;&@g~C%UufwSc1V4bseg?sZ@&3dwY9{pUS*RosBwGy~hE+H3T5>
z4SFHvT1Q6*cjvWFFo1w{_)r~?;ec9o`&DOW=RZT0gaSehjsPgZp_}GGK~_Y?;I5}3
z>mb!=0t96~;xcUrAgnU0UUN7c9LVYEDF;RtqBW<}$?pkFHk;*5D*+{I6G+liNq`Ih
zs;ub(NZeCfujX>jE4g!qo0O5txk;eNvPVZpY=3{BAt-K8qGkZ9(fR-)Dnqx_Ro<mg
zpxjZfxm9Ir<Dj?ol>yy}8k>Du>tu<$z^R3F$=bJw1WF9*1?V@UDW&fgy`}EP$r6c#
zAuw9|!9(2uCG`SDt`T|c{)T;%Y;A2>`@fmd(NQDYeNWP`Hvipf0&Eb#iiPo22w;|S
hr3JwertE(K1_0Olhg?>2i@^W@002ovPDHLkV1n<MyWju-

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png
new file mode 100644
index 0000000000000000000000000000000000000000..f481fed88cbcf322624217a3aa058806cb4846db
GIT binary patch
literal 1087
zcmV-F1i<@=P)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#;Ymb6RCwC#Sj}r2M-+d%vmeraNLDH*
zw&J)}N@P@Ox7df0OA+J}NJ1b-C+CEo`w#dJsCo_cAJC9Pa<Ll<rC^t|bqjXECNx%S
zB9wS-WBEhc@6~Fzvs>gymh2>wy3xT8h8^C{oBhrE&3p592-kH*0632u54|NSZW{y!
zIF36s^rlqE9tP(LO+t^$DZoyJ>U4s&U!SC2J^SOXr7M}5jvz>x<;D5WuHMPU5=o_#
z`MoHfY}a_@$A=Tr^QEloI$}$D5GAF*xOs1Q?DA&d6z@wfgw5Qa(_vl|lj#YF4-ETy
zMA3d@LL4|%JMsMKT=u<CoLl@M;{h1HGzO7a9Qp@`ffJ+tJ5$&EzPw+A;#MK``{Vo9
zKfm?mT%Z7z-R+Fn7x%%{WZ=R_U{@-jDWyZurlI*`@$0!jDR!NzSP$-S#WdXj+Ut8`
zPxD~C7<*fTvG_pB3xqd`w+)6arY8^nUcMXH9yE5P8zZBiz7=gXx*f~7jvq6Dc#x!M
z>D`UU&A=#*B**3u%gqoZ%Dwq0AY{CtdG6fEbl@jRMJ)^E{OT<HSM;{7m-y(kx1jeD
z#WWvLiu<McV@qOPmoz%E6!=M^Yx)FE$Wz-=A+zwyQyBj^4VRM1hA{`FGW@)_m`JAO
zSx)Ga5JC?^;m|CiDCK{nxN6&irfS)m4b9L{SpN$ao;-s1nKSU=&=4>*1v|TY@J~Ju
zADkV8D>rZB_&~KOWSq#SIi6eSIzZDfQl?>k>!r4uPKb#3<0P!DF2Qd<eGist9F9+Y
zG69#bT=NSDO;L{oH2EF2{ibUGJ<q9%I$IA8Q3!ZJs9S&z+ZzSHAB&#_F&cY)Zp$*R
zY@CKUG38la6drU1pj;|{jmKr`bzz<Znr{5xavTR|6~b@zVp$d#n%*=o8)B!}P$<_?
z6ng=26dXYk4dARw6{MmJ>l^#9Rw%;up5p6j!Y~XrYM$FNt*<(cVlP^c>KK-VDyFQg
znoulhU{-A47zD8}g3Xc*s%F5>feIW;Lre@qglBz_7*JzHgxT{P5az<mZ2|Q5-cj#)
zvRBe!S2+L%ksz=L`Y`~KeC?vRKx4Wo&@2agQ-+OV8Tv&Q!gRA6ZQH(qAMF9eQJZO{
zM}!NBC<_!KPB?lA5JJdrcGU&Pb)gl{uH#I$y$A88PqosA@c;fv;F`RE$1>EhpGsir
z2ipRO=^YKCD8)3V+6CCOvh|l+9f4_OkC_^6H_arP3jm|DJGFPT@7h1fN-p2qcQfOu
zk+yB!V}h~cg7x%v>l9#@09JY!pMQy-?@^E*ru@GG3;=iXl9T09?yLX+002ovPDHLk
FV1l}u0!9D;

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png
new file mode 100644
index 0000000000000000000000000000000000000000..d58b4ff9904f774cad3344fecbf79b06e5350fb9
GIT binary patch
literal 945
zcmV;i15W&jP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#Q%OWYRCwCVm^n`yVGxGL#@Hb68Y7N?
zVu=Q%VAD`I;Rjfu1rqlpav$IaBuWpVPb4ae5J8EQ^aQ1#B$DM0%q1=#oIdl;hrI#g
zH4ENrq!nxLw;#{W@y@Jm#bVJ(L=q1EYbDFzNZA1R3@3K7rWNcKhGVl^8BUl(tBuyy
z)&>s_4m^B5K0dy#)xMmAz4dIcva&LgN~OM>pP&2WO>MSRb93|8$;rt%Qvnwj7vCll
ziFu{#PN#Dz5{XRJm4r{dadmZduoj%qiA*NEu&^*~3gGeaaahf|%gf7%DS&}MV03tR
zm<9$0$mjDZu0sk*oTr9YF^a&4gS=j^`0RGO$>DI&_VzZNo}S)WdvbEZfa|8pOixeG
z&4z$vK=$m`))rk|T~R|rgYh9&GWH}JhrPG=Mj-O}ymbKCgJsCFH8nM*3<rc5Zz^32
z27@weOG^tMzYPV1zPTG48&%~cdvk1T%s3CCr42&cmRnm}{VLXqVu8&V0?2T=Ty7bs
zewWL|txR!kGMS`UEJi~^LzK;C!+U#s)4Bq3SW9qH`MdV^b_{Iyw>UaFqK%CW3WY-A
zGs_MHdj`<IcpqJK5PJ6cHXIwmEOHE^mH=h1?eFgk-J6)0pziK&y1u@qv$Hd5Yir|M
z{Mct6o`0|DG=rRbjwk<9QN<)l5~b5=Iy^iigiw6n)zwA){r$53#p7|}bl|S@e@wQ2
z#Djg)3=s3)C#<{E^bv01nNr&m=Y4&Ba>&_p49*Y2p03;y_XOd|v?e(SxX~&)C^U{k
z#~xxsG01ScySoCm3LKk+P)D>Zl6&I{=UJr|A`J*LBJJ$#lm)uhLx*(}>S#1t{T;DT
z5IO1bcx12EdT6A@Yr}gn7Y?^LRWH4T!ieF3k1>QfU@D+eD%>(_d(e=1kVpKBiwkoB
zp?R~+Qteu2XQ!Hq)fW(zIS1)@1>yZr35sdCu6GViLyZ3UgF(?f-aYj#&5#_#5c(6K
zZ=iP}gny}?6xOv!(8~TI{8MQ9FFQIqI8Prn+9PFV4Urj4Ch=09z9{AC=0gJ#uj7=_
z{pYt@uLqb1c?$C5e|So2ki@Z$s{gKL)Y27D%Oc5Jm@m(O2_7sg2**r`e*z2u8YWAi
T{GoM700000NkvXXu0mjfGUm5^

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e7389899218710977c298873d66ecfbff197989
GIT binary patch
literal 1049
zcmV+!1m^pRP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#yGcYrRCwCVn9ENSQ51*IJUWlg3kpSA
zg+S0s6i5)m!f1enF)^SE7Y5w9=wHCr2zy-{*(-752BHf$5{%IWL@_2>MIkM3=^Lh<
zX=l8*V3k67NIUIGCihNzbLX3LfA^kqhA>T20)Ug~5}>?n16>OQ0&GJa8<eN%WEsO@
zvyo8dMi*)#|Hn6;(CUJS`)yZmPZw%ltig`sOfd86*@d9rH>AcR?(C!l850~eqgU<>
zj+7Me{qsk?!NBZLzW+H<8SA-wZ}>QX|E<BVZ(n%!gTt1HNBSn8Jn)tTaDDzu@1YK}
z;A($K02@xXbT_wOhWazDaN<-`-f^aBNLZ(q?_!p>yU_)5Wp(D>E-66MHdyx0LM;4i
z$Jn(c|3%bHTk64FbGquG(&>Vejm?>R>{*7hXZj3Pf+fypc2UW+wRKGyXlz=#i~wny
zEen}_h`l0aIUqq&zI^|+boOLg3TcuN6cC(sQ<egzQz?;P_yfmP*VY3myP&h{nspvb
zCK8^_jm;54a(WIL8{bsH-Q145UP}NmTr!b-jKZUbWJMs@{5fto5{1t{=izK?2WWb_
zFR&8w78MXLD~3Z|>CbOWRUOviuCZ(D>+tTwN4RwLX6Ak+6o*tQ?TtmEPw_lONfu(!
z*nQJ5`gR^E0+0m2r^%PV5(b2$QCM7F0h4B->-sIIKH&y6sl)6-5Znq2G)16Hhj=Y1
z@?b#$wWQ`ssOs3xT}*%^%MgmHu)G$8@X`-pK!d6p7c_XzZFxOyz_-9Uhztob|2Jq+
z6!lP$#L<F<IxU&p74TKvgoXJv9Be@mcu2WCaK6zAB)O#;?76^d6h#qY2iz8T+KZNY
zjH2myK{RL>M)&SFGr?h}!Ck?E$ZhFR*YzyikHruwC`_mp_bhoNRZR>Oa+A1s0V2<E
zIVFv*Y49t&0p9~bs6<|K2>I(VBc1Lo+Ce?zo6GZ1yiqp6r7&5q?)TE@JngbP7T3rO
zF!bT3MPBT%9PlWHPLQ)D1<WUfe*nwdgO=ojv;Jk26eLOuNKzCoz!&%2icSacEK^!Q
zQ4&Yw3gre((?hwSJjbBWRXn8}sj5TC!8mHhUCyd56!Zs<``M&uWoJ|4sR`6f;QUb2
z^#0r|=Loh~)J?*2oKKRaVUFkf8fyfs(<7z!NHQaq95W2dEN$zw2kR6qzwe;*5|7)K
zOmRQI?N=V?da4^OzvrJUJciP-DURn3m1-3gu#m@$UdDWxkLYt{3W=HKehV-F{489X
TTcS`l00000NkvXXu0mjf9{=a6

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/Inv_Alpha.png b/indra/newview/skins/default/textures/icons/Inv_Alpha.png
index e8d246c6faf0aeaa4b4ff49b8f28e79cf8c92d52..b65dc1929df4bb77e27d4cf15e82bd7d18b9c9ae 100644
GIT binary patch
delta 254
zcmV<a00IB~0lxx}Nq^x<L_t(|+G6<s|33pdK6B=bJ~3h-%m^Yt;OyD6`9P`wh!w6}
zxx%2Mqa$E!Z2S=_#}A}FK*b*b*%N?r6G3t;KuLX&01!Jcpn?NHxd1481CqD`NIg`p
zfN{l&74Lui_#wbRCSXxfQ32WBfGh}gDqc1eG%x{)1xNxPh<CIYrfvZ^5P|-&2XZca
z{P=Oh<HwI32<hhF;0OS^`~xr`55i*s8ru6ofl0^<K#hzrJxmM~0v2Qr&<hMeFTia>
z4pd||&;<-wUBJ)J4|gtz#>GYkqh4TOKuHJW0Du4k07w+44R{J`s{jB107*qoM6N<$
Eg7b-EjsO4v

delta 188
zcmV;t07L)30{sDyNq?V7L_t(|+G6<s|33o;e*aLPC@~;r1QB5H;ZZ)2EC6B!hya5C
zgMi#es2o3tgo-}^;t4>xi69Om$Yihp1A_wtD!2f|0Z{e^AT~ggKLD~2WWal{ZRCLu
zOi<g&1rtCnkcaw<0qRdeu0d9#zyu78hfx0uK>bY!T!5-|05$1lfrPi*L1<_b=Ws~u
qfb}pjPzXj17z_p=awC}lAiw}<-deHF?60r@0000<MNUMnLSTZoOiCF5

diff --git a/indra/newview/skins/default/textures/icons/Inv_Tattoo.png b/indra/newview/skins/default/textures/icons/Inv_Tattoo.png
index e8d246c6faf0aeaa4b4ff49b8f28e79cf8c92d52..a632197eb530c75502ff25b823b9bf0dbcee18dc 100644
GIT binary patch
delta 353
zcmV-n0iOQ-0iXkrNPhuBNkl<Zc-nkYyKTcj3_U3hkj~m5+CbVM@&s`j*B-&WiztQb
zC>zABD`f)P8^{wxo**s*1cCB+cm#;^DFg`WDDv^~lMKV)M1D^vr}DGg6)+9-9h%)P
z7H{-VVM@G@H$~xNQx^z=9++4`SI~<A?Vxjf-)nq2lHAi(%6}XFPre0g3C%TUVv+^5
z<#SFTNjT6iY%=jn3o!<jQlym`)J$@$>|5h3yd>ce@$;E2l&tCus}Ja-6u8@L&QSmZ
zQnQ5>+wcjX?_+ceb_RP^%}v#e)Jw8z73ivk@AZ1m<lK$Rg?Dg{-9b(5X%$TGp)-u!
z)fTuK39j+|Vp@VL0%eAU8{Gou@fvJEr3Ltt9b!7tt5iN9I5BPHnrvk<0?_ebz6^C)
z<tz-0GC-vnSv0hL*!#Z#1le-$4ec@(_b0#rEzpATy1;!O00000NkvXXu0mjfQTd`G

delta 189
zcmV;u07Czu1N{MzNPhsINkl<Zc-mt4|NlP&27dogpC~aPW&{yn@ZnKDkSqXV1&9EH
z0E2+sN2nY>h=hti0OAQixrrbSBgka100V;q11h)x!~szD1|T*-lRp5m5M;o6ux;dl
z4@^+o$psTYE|7=%ivj9SLasqpqre0VjE7MF3qbu%2wZ@wbv6L$Wr2jZ+(Bq)6X$S9
r?11$!F;ECb4HygtAaWy_03g5sXx>_}&g`$S00000NkvXXu0mjfqwz`m

diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 7f33330123d..fba8e0b06c5 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -28,7 +28,7 @@
   <texture name="BackArrow_Press" file_name="icons/BackArrow_Press.png" preload="false" />
 
   <texture name="Blank" file_name="Blank.png" preload="false" />
-  
+
   <texture name="BottomTray_BG" file_name="bottomtray/BottomTray_BG.png" preload="false" />
 
   <texture name="BuyArrow_Off" file_name="navbar/BuyArrow_Off.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0"  />
@@ -51,6 +51,16 @@
   <texture name="Cam_Pan_Off" file_name="bottomtray/Cam_Pan_Off.png" preload="false" />
   <texture name="Cam_Pan_Over" file_name="bottomtray/CCam_Pan_Over.png" preload="false" />
   <texture name="Cam_Pan_Press" file_name="bottomtray/Cam_Pan_Press.png" preload="false" />
+
+  <texture name="Cam_Preset_Back_Off" file_name="bottomtray/Cam_Preset_Back_Off.png" preload="false" />
+  <texture name="Cam_Preset_Back_On" file_name="bottomtray/Cam_Preset_Back_On.png" preload="false" />
+  <texture name="Cam_Preset_Eye_Off" file_name="bottomtray/Cam_Preset_Eye_Off.png" preload="false" />
+  <texture name="Cam_Preset_Eye_On" file_name="bottomtray/Cam_Preset_Eye_On.png" preload="false" />
+  <texture name="Cam_Preset_Front_Off" file_name="bottomtray/Cam_Preset_Front_Off.png" preload="false" />
+  <texture name="Cam_Preset_Front_On" file_name="bottomtray/Cam_Preset_Front_On.png" preload="false" />
+  <texture name="Cam_Preset_Side_Off" file_name="bottomtray/Cam_Preset_Side_Off.png" preload="false" />
+  <texture name="Cam_Preset_Side_On" file_name="bottomtray/Cam_Preset_Side_On.png" preload="false" />
+
   <texture name="Cam_Rotate_In" file_name="bottomtray/Cam_Rotate_In.png" preload="false" />
   <texture name="Cam_Rotate_Out" file_name="bottomtray/Cam_Rotate_Out.png" preload="false" />
   <texture name="Cam_Tracking_In" file_name="bottomtray/Cam_Tracking_In.png" preload="false" />
@@ -499,9 +509,6 @@
 
   <!--WARNING OLD ART *do not use*-->
 
- <texture name="Banner_ForSale" file_name="Banner_ForSale.png" preload="false" />
-  <texture name="Banner_YouAreHere" file_name="Banner_YouAreHere.png" preload="false" />
-
   <texture name="btn_chatbar.tga" scale.left="20" scale.top="24" scale.right="44" scale.bottom="0" />
   <texture name="btn_chatbar_selected.tga" scale.left="20" scale.top="24" scale.right="44" scale.bottom="0" />
 
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
index a569b62e967..5c09bc3a02b 100644
--- a/indra/newview/skins/default/xui/en/floater_camera.xml
+++ b/indra/newview/skins/default/xui/en/floater_camera.xml
@@ -34,7 +34,7 @@
      mouse_opaque="false"
      name="controls"
      width="148">
-        <joystick_track
+    <joystick_track
          follows="top|left"
          height="78"
          image_selected="Cam_Tracking_In"
@@ -50,7 +50,7 @@
          visible="false"
          width="78" />
          <!--TODO: replace with slider, + - images -->
-        <joystick_zoom
+ <joystick_zoom
          follows="top|left"
          height="78"
          image_unselected="ScrollThumb_Vert"
@@ -80,66 +80,65 @@
          tool_tip="Orbit camera around focus"
          top="22"
          width="78" />
-        <panel
+            <panel
          height="78"
          layout="topleft"
          left="36"
          name="camera_presets"
-         top="30"
+         top="20"
          visible="false"
          width="78">
             <button
-             height="30"
-             image_selected="CameraPreset_Rear"
-             image_unselected="CameraPreset_Rear"
+             height="40"
+             image_selected="Cam_Preset_Back_On"
+             image_unselected="Cam_Preset_Back_Off"
              layout="topleft"
-             left="5"
+             left="0"
              name="rear_view"
              tool_tip="Rear View"
              top="2"
-             width="30">
+             width="40">
                 <click_callback
                  function="CameraPresets.ChangeView"
                  parameter="rear_view" />
             </button>
             <button
-             height="30"
-             image_selected="CameraPreset_3_4"
-             image_unselected="CameraPreset_3_4"
+             height="40"
+             image_selected="Cam_Preset_Side_On"
+             image_unselected="Cam_Preset_Side_Off"
              layout="topleft"
              left_pad="5"
              name="group_view"
              tool_tip="Group View"
              top="2"
-             width="30">
+             width="40">
                 <click_callback
                  function="CameraPresets.ChangeView"
                  parameter="group_view" />
             </button>
             <button
-             height="30"
-             image_selected="CameraPreset_Front"
-             image_unselected="CameraPreset_Front"
+             height="40"
+             image_selected="Cam_Preset_Front_On"
+             image_unselected="Cam_Preset_Front_Off"
              layout="topleft"
-             left="5"
+             left="0"
              name="front_view"
              tool_tip="Front View"
              top_pad="5"
-             width="30">
+             width="40">
                 <click_callback
                  function="CameraPresets.ChangeView"
                  parameter="front_view" />
             </button>
             <button
-             height="30"
-             image_selected="CameraPreset_Mouselook"
-             image_unselected="CameraPreset_Mouselook"
+             height="40"
+             image_selected="Cam_Preset_Eye_Off"
+             image_unselected="Cam_Preset_Eye_Off"
              layout="topleft"
              left_pad="5"
              name="mouselook_view"
              tool_tip="Mouselook View"
-             top_pad="-30"
-             width="30">
+             width="40">
                 <click_callback
                  function="CameraPresets.ChangeView"
                  parameter="mouselook_view" />
@@ -165,7 +164,6 @@
          name="orbit_btn"
          tab_stop="false"
          tool_tip="Orbit camera"
-         value="true"
          width="25">
         </button>
         <button
-- 
GitLab


From 5fba55f58e35e52485f161d069f323120ec68b6d Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Fri, 6 Nov 2009 19:30:52 -0800
Subject: [PATCH 256/306] Partial fix for DEV-42153.

This code seems to work on some objects and not on others.  I suspect I'm not doing something quite right in LLVOVolume::getApproximateFaceNormal().
---
 indra/newview/llviewermediafocus.cpp | 10 +++++--
 indra/newview/llvovolume.cpp         | 39 ++++++++++++++++++++++++++++
 indra/newview/llvovolume.h           |  2 ++
 3 files changed, 49 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
index b2a0fa4b1c7..70a7d835a36 100644
--- a/indra/newview/llviewermediafocus.cpp
+++ b/indra/newview/llviewermediafocus.cpp
@@ -499,8 +499,14 @@ void LLViewerMediaFocus::focusZoomOnMedia(LLUUID media_id)
 			S32 face = obj->getFaceIndexWithMediaImpl(impl, -1);
 			
 			// We don't have a proper pick normal here, and finding a face's real normal is... complicated.
-			// For now, use +z to look at the top of the object.
-			LLVector3 normal(0.0f, 0.0f, 1.0f);
+			LLVector3 normal = obj->getApproximateFaceNormal(face);
+			if(normal.isNull())
+			{
+				// If that didn't work, use the inverse of the camera "look at" axis, which should keep the camera pointed in the same direction.
+//				llinfos << "approximate face normal invalid, using camera direction." << llendl;
+				normal = LLViewerCamera::getInstance()->getAtAxis();
+				normal *= (F32)-1.0f;
+			}
 			
 			// Attempt to focus/zoom on that face.
 			setFocusFace(obj, face, impl, normal);
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 78f534bacd8..021fc746488 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1638,6 +1638,45 @@ bool LLVOVolume::hasMedia() const
 	return result;
 }
 
+LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id)
+{
+	LLVector3 result = LLVector3::zero;
+	
+	LLFace* facep = mDrawable->getFace(face_id);
+	if(facep)
+	{
+		LLStrider<LLVector3> verticesp;
+		LLStrider<LLVector3> normalsp;
+		LLStrider<LLVector2> texCoordsp;
+		LLStrider<U16> indicesp;
+		S32 index_offset;
+		index_offset = facep->getGeometry(verticesp,normalsp,texCoordsp, indicesp);
+		
+		if(index_offset != -1 && (normalsp.get() != NULL))
+		{
+			U16 count = facep->getGeomCount();
+			U16 i;
+			
+			for(i=0; i < count; i++)
+			{
+				LLVector3 normal = *normalsp++;
+//				llinfos << "adding " << normal << llendl;
+				result += normal;
+			}
+		}
+	}
+	
+	if(!result.isNull())
+	{
+//		llinfos << "before conversion: " << result << llendl;
+		result = volumeDirectionToAgent(result);
+		result.normalize();
+//		llinfos << "after conversion: " << result << llendl;
+	}
+	
+	return result;
+}
+
 void LLVOVolume::requestMediaDataUpdate()
 {
     sObjectMediaClient->fetchMedia(new LLMediaDataClientObjectImpl(this));
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index 0574d3e3856..784ef16ba36 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -263,6 +263,8 @@ class LLVOVolume : public LLViewerObject
 	F64 getTotalMediaInterest() const;
    
 	bool hasMedia() const;
+	
+	LLVector3 getApproximateFaceNormal(U8 face_id);
 
 protected:
 	S32	computeLODDetail(F32	distance, F32 radius);
-- 
GitLab


From 12f038b599bf1f5e0779ac23d08d57c17e07383e Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Sat, 7 Nov 2009 12:49:07 -0500
Subject: [PATCH 257/306] DEV-42215: Don't zap valid g(First|Last)name with
 empty strings. In the --autologin case, gFirstname, gLastname were validly
 set from gSavedSettings, but at the last minute were overwritten with empty
 strings from gLoginHandler. Only perform those assignments if gLoginHandler
 has non-empty strings to contribute.

---
 indra/newview/llstartup.cpp | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 4c322810d50..2c1f468f77a 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -744,6 +744,7 @@ bool idle_startup()
 			// We have at least some login information on a SLURL
 			gFirstname = gLoginHandler.getFirstName();
 			gLastname = gLoginHandler.getLastName();
+			LL_DEBUGS("LLStartup") << "STATE_FIRST: setting gFirstname, gLastname from gLoginHandler: '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL;
 
 			// Show the login screen if we don't have everything
 			show_connect_box = 
@@ -754,6 +755,7 @@ bool idle_startup()
             LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo");
 			gFirstname = cmd_line_login[0].asString();
 			gLastname = cmd_line_login[1].asString();
+			LL_DEBUGS("LLStartup") << "Setting gFirstname, gLastname from gSavedSettings(\"UserLoginInfo\"): '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL;
 
 			LLMD5 pass((unsigned char*)cmd_line_login[2].asString().c_str());
 			char md5pass[33];               /* Flawfinder: ignore */
@@ -771,6 +773,7 @@ bool idle_startup()
 		{
 			gFirstname = gSavedSettings.getString("FirstName");
 			gLastname = gSavedSettings.getString("LastName");
+			LL_DEBUGS("LLStartup") << "AutoLogin: setting gFirstname, gLastname from gSavedSettings(\"First|LastName\"): '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL;
 			gPassword = LLStartUp::loadPasswordFromDisk();
 			gSavedSettings.setBOOL("RememberPassword", TRUE);
 			
@@ -786,6 +789,7 @@ bool idle_startup()
 			// a valid grid is selected
 			gFirstname = gSavedSettings.getString("FirstName");
 			gLastname = gSavedSettings.getString("LastName");
+			LL_DEBUGS("LLStartup") << "normal login: setting gFirstname, gLastname from gSavedSettings(\"First|LastName\"): '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL;
 			gPassword = LLStartUp::loadPasswordFromDisk();
 			show_connect_box = true;
 		}
@@ -896,8 +900,15 @@ bool idle_startup()
 		gViewerWindow->moveProgressViewToFront();
 
 		//reset the values that could have come in from a slurl
-		gFirstname = gLoginHandler.getFirstName();
-		gLastname = gLoginHandler.getLastName();
+		// DEV-42215: Make sure they're not empty -- gFirstname and gLastname
+		// might already have been set from gSavedSettings, and it's too bad
+		// to overwrite valid values with empty strings.
+		if (! gLoginHandler.getFirstName().empty() && ! gLoginHandler.getLastName().empty())
+		{
+			gFirstname = gLoginHandler.getFirstName();
+			gLastname = gLoginHandler.getLastName();
+			LL_DEBUGS("LLStartup") << "STATE_LOGIN_CLEANUP: setting gFirstname, gLastname from gLoginHandler: '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL;
+		}
 
 		if (show_connect_box)
 		{
-- 
GitLab


From 7cabb9de683cd3177f9ddbe2e7af873f0c9155c9 Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Sun, 8 Nov 2009 17:24:08 +0000
Subject: [PATCH 258/306] EXT-332: Added support for local currency estimates
 to the Buy L$ and Buy Land floaters.

We now check for a new estimatedLocalCost key from the XML-RPC server,
which provides the estimated cost in the user's local currency, e.g.,
"US$ 10.00" or "10.00 Euros". Note: the server is not currently
sending this information.

The previous codepath still exists and should be unaffected. That is,
we will continue to check for an estimatedCost key from the server with
a value specified in US cents. We give precedence to estimatedLocalCost
though and may want to remove this code once the international billing
server changes go live.

<lynx@lindenlab.com> HG: branch 'default' HG: changed
indra/newview/llcurrencyuimanager.cpp HG: changed
indra/newview/llcurrencyuimanager.h HG: changed
indra/newview/llfloaterbuyland.cpp HG: changed
indra/newview/skins/default/xui/en/floater_buy_land.xml
---
 indra/newview/llcurrencyuimanager.cpp         | 121 ++++++++++++++----
 indra/newview/llcurrencyuimanager.h           |   9 +-
 indra/newview/llfloaterbuyland.cpp            |  16 ++-
 .../skins/default/xui/en/floater_buy_land.xml |   8 +-
 4 files changed, 116 insertions(+), 38 deletions(-)

diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp
index c4bfd719991..319cbf8209c 100644
--- a/indra/newview/llcurrencyuimanager.cpp
+++ b/indra/newview/llcurrencyuimanager.cpp
@@ -76,8 +76,15 @@ class LLCurrencyUIManager::Impl
 	bool			mUserEnteredCurrencyBuy;
 	
 	// from website
-	bool			mSiteCurrencyEstimated;
-	S32				mSiteCurrencyEstimatedCost;
+
+	// pre-viewer 2.0, the server returned estimates as an
+	// integer US cents value, e.g., "1000" for $10.00
+	// post-viewer 2.0, the server may also return estimates
+	// as a string with currency embedded, e.g., "10.00 Euros"
+	bool			mUSDCurrencyEstimated;
+	S32				mUSDCurrencyEstimatedCost;
+	bool			mLocalCurrencyEstimated;
+	std::string		mLocalCurrencyEstimatedCost;
 	std::string		mSiteConfirm;
 	
 	bool			mBought;
@@ -101,6 +108,10 @@ class LLCurrencyUIManager::Impl
 	
 	void startCurrencyBuy(const std::string& password);
 	void finishCurrencyBuy();
+
+	void clearEstimate();
+	bool hasEstimate() const;
+	std::string getLocalEstimate() const;
 	
 	void startTransaction(TransactionType type,
 		const char* method, LLXMLRPCValue params);
@@ -126,12 +137,11 @@ LLCurrencyUIManager::Impl::Impl(LLPanel& dialog)
 	mError(false),
 	mUserCurrencyBuy(2000), // note, this is a default, real value set in llfloaterbuycurrency.cpp
 	mUserEnteredCurrencyBuy(false),
-	mSiteCurrencyEstimated(false),
-	mSiteCurrencyEstimatedCost(0),
 	mBought(false),
 	mTransactionType(TransactionNone), mTransaction(0),
 	mCurrencyChanged(false)
 {
+	clearEstimate();
 }
 
 LLCurrencyUIManager::Impl::~Impl()
@@ -141,14 +151,13 @@ LLCurrencyUIManager::Impl::~Impl()
 
 void LLCurrencyUIManager::Impl::updateCurrencyInfo()
 {
-	mSiteCurrencyEstimated = false;
-	mSiteCurrencyEstimatedCost = 0;
+	clearEstimate();
 	mBought = false;
 	mCurrencyChanged = false;
 
 	if (mUserCurrencyBuy == 0)
 	{
-		mSiteCurrencyEstimated = true;
+		mLocalCurrencyEstimated = true;
 		return;
 	}
 	
@@ -185,9 +194,21 @@ void LLCurrencyUIManager::Impl::finishCurrencyInfo()
 	}
 	
 	LLXMLRPCValue currency = result["currency"];
-	mSiteCurrencyEstimated = true;
-	mSiteCurrencyEstimatedCost = currency["estimatedCost"].asInt();
-	
+
+	// old XML-RPC server: estimatedCost = value in US cents
+	mUSDCurrencyEstimated = currency["estimatedCost"].isValid();
+	if (mUSDCurrencyEstimated)
+	{
+		mUSDCurrencyEstimatedCost = currency["estimatedCost"].asInt();
+	}
+
+	// newer XML-RPC server: estimatedLocalCost = local currency string
+	mLocalCurrencyEstimated = currency["estimatedLocalCost"].isValid();
+	if (mLocalCurrencyEstimated)
+	{
+		mLocalCurrencyEstimatedCost = currency["estimatedLocalCost"].asString();
+	}
+
 	S32 newCurrencyBuy = currency["currencyBuy"].asInt();
 	if (newCurrencyBuy != mUserCurrencyBuy)
 	{
@@ -200,17 +221,20 @@ void LLCurrencyUIManager::Impl::finishCurrencyInfo()
 
 void LLCurrencyUIManager::Impl::startCurrencyBuy(const std::string& password)
 {
-	mSiteCurrencyEstimated = false;
-	mSiteCurrencyEstimatedCost = 0;
-	mCurrencyChanged = false;
-	
 	LLXMLRPCValue keywordArgs = LLXMLRPCValue::createStruct();
 	keywordArgs.appendString("agentId", gAgent.getID().asString());
 	keywordArgs.appendString(
 		"secureSessionId",
 		gAgent.getSecureSessionID().asString());
 	keywordArgs.appendInt("currencyBuy", mUserCurrencyBuy);
-	keywordArgs.appendInt("estimatedCost", mSiteCurrencyEstimatedCost);
+	if (mUSDCurrencyEstimated)
+	{
+		keywordArgs.appendInt("estimatedCost", mUSDCurrencyEstimatedCost);
+	}
+	if (mLocalCurrencyEstimated)
+	{
+		keywordArgs.appendString("estimatedLocalCost", mLocalCurrencyEstimatedCost);
+	}
 	keywordArgs.appendString("confirm", mSiteConfirm);
 	if (!password.empty())
 	{
@@ -226,6 +250,9 @@ void LLCurrencyUIManager::Impl::startCurrencyBuy(const std::string& password)
 	params.append(keywordArgs);
 
 	startTransaction(TransactionBuy, "buyCurrency", params);
+
+	clearEstimate();
+	mCurrencyChanged = false;	
 }
 
 void LLCurrencyUIManager::Impl::finishCurrencyBuy()
@@ -270,6 +297,34 @@ void LLCurrencyUIManager::Impl::startTransaction(TransactionType type,
 	clearError();
 }
 
+void LLCurrencyUIManager::Impl::clearEstimate()
+{
+	mUSDCurrencyEstimated = false;
+	mUSDCurrencyEstimatedCost = 0;
+	mLocalCurrencyEstimated = false;
+	mLocalCurrencyEstimatedCost = "0";
+}
+
+bool LLCurrencyUIManager::Impl::hasEstimate() const
+{
+	return (mUSDCurrencyEstimated || mLocalCurrencyEstimated);
+}
+
+std::string LLCurrencyUIManager::Impl::getLocalEstimate() const
+{
+	if (mLocalCurrencyEstimated)
+	{
+		// we have the new-style local currency string
+		return mLocalCurrencyEstimatedCost;
+	}
+	if (mUSDCurrencyEstimated)
+	{
+		// we have the old-style USD-specific value
+		return "US$ " + llformat("%#.2f", mUSDCurrencyEstimatedCost / 100.0);
+	}
+	return "";
+}
+
 bool LLCurrencyUIManager::Impl::checkTransaction()
 {
 	if (!mTransaction)
@@ -342,8 +397,8 @@ void LLCurrencyUIManager::Impl::currencyKey(S32 value)
 
 	mUserCurrencyBuy = value;
 	
-	if (mSiteCurrencyEstimated) {
-		mSiteCurrencyEstimated = false;
+	if (hasEstimate()) {
+		clearEstimate();
 		//cannot just simply refresh the whole UI, as the edit field will
 		// get reset and the cursor will change...
 		
@@ -406,8 +461,8 @@ void LLCurrencyUIManager::Impl::updateUI()
 		}
 	}
 
-	mPanel.childSetTextArg("currency_est", "[LOCALAMOUNT]", "US$ " + llformat("%#.2f", mSiteCurrencyEstimatedCost / 100.0));
-	mPanel.childSetVisible("currency_est", mSiteCurrencyEstimated && mUserCurrencyBuy > 0);
+	mPanel.childSetTextArg("currency_est", "[LOCALAMOUNT]", getLocalEstimate());
+	mPanel.childSetVisible("currency_est", hasEstimate() && mUserCurrencyBuy > 0);
 
 	if (mPanel.childIsEnabled("buy_btn")
 		||mPanel.childIsVisible("currency_est")
@@ -448,18 +503,32 @@ void LLCurrencyUIManager::setZeroMessage(const std::string& message)
 	impl.mZeroMessage = message;
 }
 
-void LLCurrencyUIManager::setEstimate(int amount)
+void LLCurrencyUIManager::setUSDEstimate(int amount)
+{
+	impl.mUSDCurrencyEstimatedCost = amount;
+	impl.mUSDCurrencyEstimated = true;
+	impl.updateUI();
+	
+	impl.mCurrencyChanged = false;
+}
+
+int LLCurrencyUIManager::getUSDEstimate()
+{
+	return impl.mUSDCurrencyEstimated ? impl.mUSDCurrencyEstimatedCost : 0;
+}
+
+void LLCurrencyUIManager::setLocalEstimate(const std::string &amount)
 {
-	impl.mSiteCurrencyEstimatedCost = amount;
-	impl.mSiteCurrencyEstimated = true;
+	impl.mLocalCurrencyEstimatedCost = amount;
+	impl.mLocalCurrencyEstimated = true;
 	impl.updateUI();
 	
 	impl.mCurrencyChanged = false;
 }
 
-int LLCurrencyUIManager::getEstimate()
+std::string LLCurrencyUIManager::getLocalEstimate() const
 {
-	return impl.mSiteCurrencyEstimated ? impl.mSiteCurrencyEstimatedCost : 0;
+	return impl.getLocalEstimate();
 }
 
 void LLCurrencyUIManager::prepare()
@@ -490,7 +559,7 @@ void LLCurrencyUIManager::buy(const std::string& buy_msg)
 
 	LLUIString msg = buy_msg;
 	msg.setArg("[LINDENS]", llformat("%d", impl.mUserCurrencyBuy));
-	msg.setArg("[LOCALAMOUNT]", "US$ " + llformat("%#.2f", impl.mSiteCurrencyEstimatedCost / 100.0));
+	msg.setArg("[LOCALAMOUNT]", getLocalEstimate());
 	LLConfirmationManager::confirm(impl.mSiteConfirm,
 								   msg,
 								   impl,
@@ -511,7 +580,7 @@ bool LLCurrencyUIManager::canCancel()
 bool LLCurrencyUIManager::canBuy()
 {
 	return impl.mTransactionType == Impl::TransactionNone
-		&& impl.mSiteCurrencyEstimated
+		&& impl.hasEstimate()
 		&& impl.mUserCurrencyBuy > 0;
 }
 
diff --git a/indra/newview/llcurrencyuimanager.h b/indra/newview/llcurrencyuimanager.h
index 93427aed7f1..dfe027098d0 100644
--- a/indra/newview/llcurrencyuimanager.h
+++ b/indra/newview/llcurrencyuimanager.h
@@ -57,11 +57,16 @@ class LLCurrencyUIManager
 	void setZeroMessage(const std::string& message);
 		// sets the gray message to show when zero
 		
-	void setEstimate(int);
-	int getEstimate();
+	void setUSDEstimate(int);  // deprecated in 2.0
+	int getUSDEstimate();      // deprecated in 2.0
 		// the amount in US$ * 100 (in otherwords, in cents)
 		// use set when you get this information from elsewhere
 		
+	void setLocalEstimate(const std::string &local_est);
+	std::string getLocalEstimate() const;
+		// the estimated cost in the user's local currency
+		// for example, "US$ 10.00" or "10.00 Euros"
+		
 	void prepare();
 		// call once after dialog is built, from postBuild()
 	void updateUI(bool show = true);
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 36f03157904..467796b4a39 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -685,7 +685,14 @@ void LLFloaterBuyLandUI::finishWebSiteInfo()
 	mSiteLandUseAction = landUse["action"].asString();
 
 	LLXMLRPCValue currency = result["currency"];
-	mCurrency.setEstimate(currency["estimatedCost"].asInt());
+	if (currency["estimatedCost"].isValid())
+	{
+		mCurrency.setUSDEstimate(currency["estimatedCost"].asInt());
+	}
+	if (currency["estimatedLocalCost"].isValid())
+	{
+		mCurrency.setLocalEstimate(currency["estimatedLocalCost"].asString());
+	}
 
 	mSiteConfirm = result["confirm"].asString();
 }
@@ -733,7 +740,8 @@ void LLFloaterBuyLandUI::runWebSitePrep(const std::string& password)
 	keywordArgs.appendInt("billableArea",
 		mIsForGroup ? 0 : mParcelBillableArea);
 	keywordArgs.appendInt("currencyBuy", mCurrency.getAmount());
-	keywordArgs.appendInt("estimatedCost", mCurrency.getEstimate());
+	keywordArgs.appendInt("estimatedCost", mCurrency.getUSDEstimate());
+	keywordArgs.appendString("estimatedLocalCost", mCurrency.getLocalEstimate());
 	keywordArgs.appendString("confirm", mSiteConfirm);
 	if (!password.empty())
 	{
@@ -1217,7 +1225,7 @@ void LLFloaterBuyLandUI::refreshUI()
 			
 			childSetText("currency_reason", getString("not_enough_lindens", string_args));
 
-			childSetTextArg("currency_est", "[AMOUNT2]", llformat("%#.2f", mCurrency.getEstimate() / 100.0));
+			childSetTextArg("currency_est", "[LOCAL_AMOUNT]", mCurrency.getLocalEstimate());
 		}
 		
 		if (willHaveEnough)
@@ -1297,7 +1305,7 @@ void LLFloaterBuyLandUI::startBuyPreConfirm()
 	{
 		LLStringUtil::format_map_t string_args;
 		string_args["[AMOUNT]"] = llformat("%d", mCurrency.getAmount());
-		string_args["[AMOUNT2]"] = llformat("%#.2f", mCurrency.getEstimate() / 100.0);
+		string_args["[LOCAL_AMOUNT]"] = mCurrency.getLocalEstimate();
 		
 		action += getString("buy_for_US", string_args);
 	}
diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml
index 0f710a8047b..6e0c3dfe540 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml
@@ -115,7 +115,7 @@ Try selecting a smaller area.
     </floater.string>
     <floater.string
      name="buy_for_US">
-        Buy L$ [AMOUNT] for approx. US$ [AMOUNT2],
+        Buy L$ [AMOUNT] for approx. [LOCAL_AMOUNT],
     </floater.string>
     <floater.string
      name="parcel_meters">
@@ -172,10 +172,6 @@ supports [AMOUNT2] objects
      name="no_parcel_selected">
         (no parcel selected)
     </floater.string>
-    <floater.string
-     name="buy_currency">
-        Buy L$ [LINDENS] for approx. US$ [USD]
-    </floater.string>
     <text
      type="string"
      length="1"
@@ -667,7 +663,7 @@ This parcel is 512 m² of land.
      name="currency_est"
      top="409"
      width="178">
-        for approx. US$ [AMOUNT2]
+        for approx. [LOCAL_AMOUNT]
     </text>
     <text
      type="string"
-- 
GitLab


From 73b1e2bf471dc7261667016825e12fc81576d350 Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Sun, 8 Nov 2009 19:38:21 +0000
Subject: [PATCH 259/306] DEV-38840: Fix the Pay Resident floater.

It was failing to open due to an unknown string and the L$5 button was
labelled incorrectly (it said L$1).
---
 .../skins/default/xui/en/floater_pay.xml       | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml
index b4becfa0225..509cffe490b 100644
--- a/indra/newview/skins/default/xui/en/floater_pay.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay.xml
@@ -2,22 +2,29 @@
 <floater
  legacy_header_height="18"
  can_minimize="false"
- height="185"
+ height="200"
  layout="topleft"
  name="Give Money"
  help_topic="give_money"
  save_rect="true"
  width="225">
+   <string
+    name="payee_group">
+        Pay Group
+   </string>
+   <string
+    name="payee_resident">
+        Pay Resident
+   </string>
    <text
      type="string"
      length="1"
      follows="left|top"
-     font="SansSerifBold"
      height="18"
      layout="topleft"
      left="12"
      name="payee_label"
-     top="7"
+     top="22"
      width="75">
         Pay:
     </text>
@@ -45,7 +52,6 @@
     </text>
     <button
      height="23"
-     font="SansSerifSmall"  
      label="L$1"
      label_selected="L$1"
      layout="topleft"
@@ -55,8 +61,7 @@
      width="80" />
     <button
      height="23"
-     label="L$1"
-     font="SansSerif"  
+     label="L$5"
      label_selected="L$5"
      layout="topleft"
      left_pad="15"
@@ -65,7 +70,6 @@
     <button
      height="23"
      label="L$10"
-     font="SansSerifHuge"  
      label_selected="L$10"
      layout="topleft"
      left="25"
-- 
GitLab


From 8ea12297e2e757ad6efbeaebd3ee86c0605ce385 Mon Sep 17 00:00:00 2001
From: angela <angela@lindenlab.com>
Date: Mon, 9 Nov 2009 13:34:32 +0800
Subject: [PATCH 260/306] escape from infinitive loop of fetching inventory
 folder with NULL uuid

---
 indra/newview/llinventorybridge.cpp | 1 +
 indra/newview/llinventorymodel.cpp  | 2 ++
 2 files changed, 3 insertions(+)

diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 90e48d22ec6..c5903eb5cab 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2127,6 +2127,7 @@ void LLFolderBridge::openItem()
 	lldebugs << "LLFolderBridge::openItem()" << llendl;
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return;
+	if(mUUID.isNull()) return;
 	bool fetching_inventory = model->fetchDescendentsOf(mUUID);
 	// Only change folder type if we have the folder contents.
 	if (!fetching_inventory)
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index baf34b42ff3..c8b9841e5dd 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -1267,6 +1267,8 @@ void LLInventoryModel::fetchInventoryResponder::error(U32 status, const std::str
 
 bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id)
 {
+	if(folder_id.isNull()) return false;
+	
 	LLViewerInventoryCategory* cat = getCategory(folder_id);
 	if(!cat)
 	{
-- 
GitLab


From 4f66c87c11910a715735bdb7621526f4c5b8d01c Mon Sep 17 00:00:00 2001
From: Ramzi Linden <ramzi@lindenlab.com>
Date: Mon, 9 Nov 2009 17:48:02 +0800
Subject: [PATCH 261/306] EXT-2106 I18N Nav bar: a node in
 panel_navigation_bar.xml cant be localized because it has no name= I18N: 2
 nodes in panel_preferences_privacy.xml cant be localized because it has no
 name= I18N: 2 EN files menu_inspect_object_gear.xml, panel_group.xml use
 duplicate name= parameters from a copy/paste error L10N: rephrase for
 localizability in panel_preferences_advanced.xml and
 panel_preferences_sound.xml

---
 .../skins/default/xui/en/menu_inspect_object_gear.xml     | 2 +-
 .../newview/skins/default/xui/en/panel_navigation_bar.xml | 3 ++-
 .../skins/default/xui/en/panel_preferences_advanced.xml   | 8 ++++----
 .../skins/default/xui/en/panel_preferences_privacy.xml    | 2 ++
 .../skins/default/xui/en/panel_preferences_sound.xml      | 2 +-
 5 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
index 93c53981f3d..04a247fd548 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
@@ -73,7 +73,7 @@
   <menu_item_call
    label="Edit"
    layout="topleft"
-   name="report">
+   name="edit">
         <menu_item_call.on_click
          function="Object.Edit" />
         <menu_item_call.on_enable
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index 255b92844f0..a90337d31a2 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -145,7 +145,8 @@
 	     top_delta="0"
 	     width="200" >
          <combo_editor
-          label="Search Second Life" />
+          label="Search [SECOND_LIFE]"
+          name="search_combo_editor"/>
         </search_combo_box>
 	</panel>
 
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 613decad8d3..06f07104065 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -272,7 +272,7 @@ Avatars:
          width="315" />
         <radio_item
          height="16"
-         label="In window"
+         label="In a window"
          layout="topleft"
          left_delta="175"
          name="1"
@@ -284,13 +284,13 @@ Avatars:
      enabled_control="EnableVoiceChat"
      control_name="PushToTalkToggle"
      height="20"
-     label="Use Push-to-talk in toggle mode"
+     label="Toggle mode for microphone when I press the Speak trigger key:"
      layout="topleft"
      left="30"
      name="push_to_talk_toggle_check"
      width="237"
      top_pad="-25"
-     tool_tip="When in toggle mode, press and release the push-to-talk trigger to switch your microphone on and off. When not in toggle mode, the microphone is active only when the trigger is held down."/>
+     tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/>
     <line_editor
      follows="top|left"
      control_name="PushToTalkButton"
@@ -300,7 +300,7 @@ Avatars:
      left_delta="50"
      max_length="254"
      name="modifier_combo"
-     label="Push-to-talk trigger"
+     label="Push-to-Speak trigger"
      top_pad="0"
      width="280" />
     <button
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 ce7939c00f5..acf4601bfe5 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -94,6 +94,7 @@
      layout="topleft"
      left="30"
      mouse_opaque="false"
+     name="Logs:"
      top_pad="10"
      width="350">
         Logs:
@@ -184,6 +185,7 @@
      layout="topleft"
      left_delta="0"
      mouse_opaque="false"
+     name="log_path_desc"
      top_pad="1"
      width="128"
      text_color="LtGray_50">
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index ba2ddd8b32a..d454b9e5c8d 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -336,7 +336,7 @@
    follows="left|bottom"
    height="19"
    is_toggle="true"
-   label="Input / Output  Devices"
+   label="Input/Output Devices"
    layout="topleft"
    left="165"
    top_pad="12"
-- 
GitLab


From 5561001c926cb0f005d54cb5e9cf4f57d5e0ba15 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 9 Nov 2009 14:24:40 +0000
Subject: [PATCH 262/306] randgauss.h isn't *really* used by the viewer -
 remove #include and move it to llmath with ll-header naming convention.

---
 indra/llmath/CMakeLists.txt  | 1 +
 indra/newview/CMakeLists.txt | 1 -
 indra/newview/llvowater.cpp  | 2 --
 3 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt
index 7957c32be2c..8ae643099f1 100644
--- a/indra/llmath/CMakeLists.txt
+++ b/indra/llmath/CMakeLists.txt
@@ -55,6 +55,7 @@ set(llmath_HEADER_FILES
     llplane.h
     llquantize.h
     llquaternion.h
+    llrandgauss.h
     llrect.h
     llsphere.h
     lltreenode.h
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 08e43da9e4c..649d86aaa68 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1031,7 +1031,6 @@ set(viewer_HEADER_FILES
     macmain.h
     noise.h
     pipeline.h
-    randgauss.h
     VertexCache.h
     VorbisFramework.h
     )
diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp
index e5ff62746e3..a8c4625f6ed 100644
--- a/indra/newview/llvowater.cpp
+++ b/indra/newview/llvowater.cpp
@@ -55,8 +55,6 @@ const BOOL gUseRoam = FALSE;
 
 ///////////////////////////////////
 
-#include "randgauss.h"
-
 template<class T> inline T LERP(T a, T b, F32 factor)
 {
 	return a + (b - a) * factor;
-- 
GitLab


From fbf57b442b7291b354f63f46c3bdfb1b85439866 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 9 Nov 2009 14:26:10 +0000
Subject: [PATCH 263/306] ... remove unused llrandgauss.h - because on second
 thoughts, there's not much wisdom in carrying probably-not-tested-for-years
 code around 'just in case'.

---
 indra/llmath/CMakeLists.txt | 1 -
 1 file changed, 1 deletion(-)

diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt
index 8ae643099f1..7957c32be2c 100644
--- a/indra/llmath/CMakeLists.txt
+++ b/indra/llmath/CMakeLists.txt
@@ -55,7 +55,6 @@ set(llmath_HEADER_FILES
     llplane.h
     llquantize.h
     llquaternion.h
-    llrandgauss.h
     llrect.h
     llsphere.h
     lltreenode.h
-- 
GitLab


From a492b2815a66f41bde0138444d410209b6b615f8 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 9 Nov 2009 14:41:31 +0000
Subject: [PATCH 264/306] trivial comment fix while I was there.

---
 indra/newview/llvoiceclient.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 9df96d9a521..2b61086680f 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -196,7 +196,7 @@ static	void updatePosition(void);
 		void setEarLocation(S32 loc);
 		void setVoiceVolume(F32 volume);
 		void setMicGain(F32 volume);
-		void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal)
+		void setUserVolume(const LLUUID& id, F32 volume); // sets volume for specified agent, from 0-1 (where .5 is nominal)
 		void setLipSyncEnabled(BOOL enabled);
 		BOOL lipSyncEnabled();
 
-- 
GitLab


From f8a010e4dd136aba5443b68a367fe39bd1b1ba33 Mon Sep 17 00:00:00 2001
From: angela <angela@lindenlab.com>
Date: Mon, 9 Nov 2009 23:46:41 +0800
Subject: [PATCH 265/306] check for NULL UUID for friendListFolderID

---
 indra/newview/llfriendcard.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp
index c9566578256..1ff2566dca2 100644
--- a/indra/newview/llfriendcard.cpp
+++ b/indra/newview/llfriendcard.cpp
@@ -519,7 +519,7 @@ bool LLFriendCardsManager::addFriendCardToInventory(const LLUUID& avatarID)
 	}
 
 	LLUUID friendListFolderID = findFriendAllSubfolderUUIDImpl();
-	if (shouldBeAdded && !invModel->isCategoryComplete(friendListFolderID))
+	if (friendListFolderID.notNull() && shouldBeAdded && !invModel->isCategoryComplete(friendListFolderID))
 	{
 		mFriendsAllFolderCompleted = false;
 		shouldBeAdded = false;
-- 
GitLab


From b423ea58ca2fe4f9be36fa7b3e70017bc7e8368d Mon Sep 17 00:00:00 2001
From: angela <angela@lindenlab.com>
Date: Tue, 10 Nov 2009 01:04:52 +0800
Subject: [PATCH 266/306] fix xml function param problem and adding missing
 settings in settings.xml

---
 indra/newview/app_settings/settings.xml       | 11 ++++++++
 .../skins/default/xui/en/menu_viewer.xml      | 28 ++++---------------
 2 files changed, 17 insertions(+), 22 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 6f6d5fb9796..55ff255c38e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3598,6 +3598,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>HideSelectedObjects</key>
+    <map>
+      <key>Comment</key>
+      <string>Hide Selected Objects</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>	
     <key>HtmlHelpLastPage</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 66c9060b06d..dbc9601680c 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -1932,18 +1932,15 @@
                  function="Advanced.ToggleConsole"
                  parameter="debug" />
             </menu_item_check>
-            <menu_item_check
+            <menu_item_call
              label="Notifications Console"
              layout="topleft"
              name="Notifications"
              shortcut="control|shift|5">
-              <menu_item_check.on_check
-               function="Advanced.CheckConsole"
-               parameter="notifications" />
-              <menu_item_check.on_click
-               function="Floater.Show"
+              <menu_item_call.on_click
+               function="Floater.Toggle"
                parameter="notifications_console" />
-            </menu_item_check>
+            </menu_item_call>
             <menu_item_check
                label="Texture Size Console"
                layout="topleft"
@@ -1994,19 +1991,6 @@
                  function="Advanced.ToggleConsole"
                  parameter="memory view" />
             </menu_item_check>
-            <menu_item_check
-             label="Notifications Console"
-             layout="topleft"
-             name="Notifications"
-             shortcut="control|shift|5"
-             use_mac_ctrl="true">
-                <menu_item_check.on_check
-                 function="Advanced.CheckConsole"
-                 parameter="notifications" />
-                <menu_item_check.on_click
-                 function="Floater.Show"
-                 parameter="notifications_console" />
-            </menu_item_check>
             <menu_item_separator
              layout="topleft" />
             <menu_item_call
@@ -2558,10 +2542,10 @@
              name="Texture Atlas">
               <menu_item_check.on_check
                function="CheckControl"
-               parameter="TextureAtlas" />
+               parameter="EnableTextureAtlas" />
               <menu_item_check.on_click
                function="ToggleControl"
-               parameter="TextureAtlas" />
+               parameter="EnableTextureAtlas" />
             </menu_item_check>
               <menu_item_check
              label="Render Attached Lights"
-- 
GitLab


From e9d09879d6aed037710f4f023ca7e01195a42bf8 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 9 Nov 2009 17:06:49 +0000
Subject: [PATCH 267/306] Don't have LLVoiceClient manually poke the
 nearbychatbar's 'speak' button's visual state as a special case - all speak
 buttons will soon know how to poll (sigh) the ptt state, with more
 reliability.

---
 indra/newview/llnearbychatbar.cpp | 5 -----
 indra/newview/llnearbychatbar.h   | 1 -
 indra/newview/llvoiceclient.cpp   | 2 --
 3 files changed, 8 deletions(-)

diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index bcb4edd7c18..d54545971bb 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -695,11 +695,6 @@ LLWString LLNearbyChatBar::stripChannelNumber(const LLWString &mesg, S32* channe
 	}
 }
 
-void LLNearbyChatBar::setPTTState(bool state)
-{
-	mSpeakBtn->setSpeakBtnToggleState(state);
-}
-
 void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel)
 {
 	LLMessageSystem* msg = gMessageSystem;
diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h
index aa25b6aa685..56ee706a974 100644
--- a/indra/newview/llnearbychatbar.h
+++ b/indra/newview/llnearbychatbar.h
@@ -96,7 +96,6 @@ class LLNearbyChatBar
 	std::string getCurrentChat();
 	virtual BOOL handleKeyHere( KEY key, MASK mask );
 
-	void setPTTState(bool state);
 	static void startChat(const char* line);
 	static void stopChat();
 
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index df5481c874c..5e7afe19137 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -5791,7 +5791,6 @@ bool LLVoiceClient::getMuteMic() const
 void LLVoiceClient::setUserPTTState(bool ptt)
 {
 	mUserPTTState = ptt;
-	if (LLNearbyChatBar::instanceExists()) LLNearbyChatBar::getInstance()->setPTTState(ptt);
 }
 
 bool LLVoiceClient::getUserPTTState()
@@ -5802,7 +5801,6 @@ bool LLVoiceClient::getUserPTTState()
 void LLVoiceClient::toggleUserPTTState(void)
 {
 	mUserPTTState = !mUserPTTState;
-	if (LLNearbyChatBar::instanceExists()) LLNearbyChatBar::getInstance()->setPTTState(mUserPTTState);
 }
 
 void LLVoiceClient::setVoiceEnabled(bool enabled)
-- 
GitLab


From 7804990998c1cc4cb0faa5fd7b37b3a22321c3b6 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 9 Nov 2009 17:07:36 +0000
Subject: [PATCH 268/306] remove #include no longer needed.

---
 indra/newview/llvoiceclient.cpp | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 5e7afe19137..f303f14843d 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -68,9 +68,6 @@
 #include "llfloaterfriends.h"  //VIVOX, inorder to refresh communicate panel
 #include "llfloaterchat.h"		// for LLFloaterChat::addChat()
 
-// for Talk Button's state updating
-#include "llnearbychatbar.h"
-
 // for base64 decoding
 #include "apr_base64.h"
 
-- 
GitLab


From e9048b17792b91e6bf8a05692d859ea9c94011d6 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 9 Nov 2009 17:13:37 +0000
Subject: [PATCH 269/306] Central-source the authoritative state of mic
 openness.

---
 indra/newview/llbottomtray.cpp  | 1 -
 indra/newview/llspeakbutton.cpp | 9 +++++++++
 indra/newview/llspeakbutton.h   | 1 +
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index a17ba79078b..e5cc2fce881 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -50,7 +50,6 @@ LLBottomTray::LLBottomTray(const LLSD&)
 	mSpeakBtn(NULL),
 	mNearbyChatBar(NULL),
 	mToolbarStack(NULL)
-
 {
 	mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);
 
diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp
index cd765b0338f..312d7050b91 100644
--- a/indra/newview/llspeakbutton.cpp
+++ b/indra/newview/llspeakbutton.cpp
@@ -62,6 +62,15 @@ LLSpeakButton::Params::Params()
 	// See widgets/talk_button.xml
 }
 
+void LLSpeakButton::draw()
+{
+	// gVoiceClient is the authoritative global source of info regarding our open-mic state, we merely reflect that state.
+	bool openmic = gVoiceClient->getUserPTTState();
+	mSpeakBtn->setToggleState(openmic);
+	llinfos << "mic state " << int(openmic) << llendl;
+	LLUICtrl::draw();
+}
+
 LLSpeakButton::LLSpeakButton(const Params& p)
 : LLUICtrl(p)
 , mPrivateCallPanel(NULL)
diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h
index f59ded21333..48a4d5880b2 100644
--- a/indra/newview/llspeakbutton.h
+++ b/indra/newview/llspeakbutton.h
@@ -61,6 +61,7 @@ class LLSpeakButton : public LLUICtrl
 	};
 
 	/*virtual*/ ~LLSpeakButton();
+	/*virtual*/ void draw();
 
 	void setSpeakBtnToggleState(bool state);
 
-- 
GitLab


From c9937716aa3a1f7aac0e93fc1d58488d02d30e6e Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Mon, 9 Nov 2009 12:26:27 -0500
Subject: [PATCH 270/306] EXT-1866 : Inventory Side Panel

Various trivial UI behavioral changes for disabling/enabling old/new floaters when bringing up properties of objects/items.
This is to make the UI behavior compliant with the Inventory Panel MVP.

Also added missing sidepanel_task_info.xml (although this is not actually enabled for viewer2.0).
---
 indra/newview/llinventorybridge.cpp           |   4 +
 indra/newview/llpanelobjectinventory.cpp      |   4 +-
 indra/newview/llviewermenu.cpp                |   3 +
 .../default/xui/en/sidepanel_task_info.xml    | 547 ++++++++++++++++++
 4 files changed, 557 insertions(+), 1 deletion(-)
 create mode 100644 indra/newview/skins/default/xui/en/sidepanel_task_info.xml

diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 90e48d22ec6..84e0f58c4b1 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -284,7 +284,10 @@ void LLInvFVBridge::showProperties()
 	key["id"] = mUUID;
 	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
 
+	// Disable old properties floater; this is replaced by the sidepanel.
+	/*
 	LLFloaterReg::showInstance("properties", mUUID);
+	*/
 }
 
 void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch)
@@ -3912,6 +3915,7 @@ void LLObjectBridge::openItem()
 	key["id"] = mUUID;
 	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
 
+	// Disable old properties floater; this is replaced by the sidepanel.
 	/*
 	LLFloaterReg::showInstance("properties", mUUID);
 	*/
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 79b33e29f52..a5e9407a41f 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -165,7 +165,9 @@ void LLTaskInvFVBridge::showProperties()
 	key["object"] = mPanel->getTaskUUID();
 	key["id"] = mUUID;
 	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
-	
+
+
+	// Disable old properties floater; this is replaced by the sidepanel.
 	/*
 	LLFloaterProperties* floater = LLFloaterReg::showTypedInstance<LLFloaterProperties>("properties", mUUID);
 	if (floater)
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 07d073c3a9b..4d4ad1c0221 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2634,6 +2634,8 @@ void handle_object_edit()
 
 void handle_object_inspect()
 {
+	// Disable sidepanel inspector
+	/*
 	LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
 	LLViewerObject* selected_objectp = selection->getFirstRootObject();
 	if (selected_objectp)
@@ -2642,6 +2644,7 @@ void handle_object_inspect()
 		key["task"] = "task";
 		LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
 	}
+	*/
 
 	LLFloaterReg::showInstance("inspect", LLSD());
 }
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
new file mode 100644
index 00000000000..8eb22541126
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -0,0 +1,547 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+	 auto_tile="true"
+	 height="570"
+	 layout="topleft"
+	 name="object properties"
+	 help_topic="object_properties"
+	 save_rect="true"
+	 title="Object Properties"
+	 width="333">
+	 <panel.string
+	  name="text deed continued">
+		Deed
+	 </panel.string>
+	<panel.string
+	 name="text deed">
+		Deed
+	</panel.string>
+            <panel.string
+             name="text modify info 1">
+                You can modify this object
+            </panel.string>
+            <panel.string
+             name="text modify info 2">
+                You can modify these objects
+            </panel.string>
+            <panel.string
+             name="text modify info 3">
+                You can't modify this object
+            </panel.string>
+            <panel.string
+             name="text modify info 4">
+                You can't modify these objects
+            </panel.string>
+            <panel.string
+             name="text modify warning">
+                This object has linked parts
+            </panel.string>
+            <panel.string
+             name="Cost Default">
+                Price: L$
+            </panel.string>
+            <panel.string
+             name="Cost Total">
+                Total Price: L$
+            </panel.string>
+            <panel.string
+             name="Cost Per Unit">
+                Price Per: L$
+            </panel.string>
+            <panel.string
+             name="Cost Mixed">
+                Mixed Price
+            </panel.string>
+            <panel.string
+             name="Sale Mixed">
+                Mixed Sale
+            </panel.string>
+    <button
+	     follows="top|right"
+	     height="25"
+	     image_overlay="BackArrow_Off"
+	     layout="topleft"
+	     name="back_btn"
+	     picture_style="true"
+	     right="-5"
+	     tab_stop="false"
+	     top="0"
+	     width="25" />
+	<panel
+         follows="all"
+         height="500"
+         label=""
+         layout="topleft"
+         left="5"
+         help_topic=""
+         top="30"
+		 border="1"
+         width="313">
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left="10"
+             name="Name:"
+             top_pad="5"
+             width="90">
+                Name:
+            </text>
+            <line_editor
+             follows="left|top|right"
+             height="19"
+             layout="topleft"
+             left_pad="0"
+             max_length="63"
+             name="Object Name"
+             select_on_focus="true"
+             top_delta="0"
+             width="170" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left="10"
+             name="Description:"
+             top_pad="3"
+             width="90">
+                Description:
+            </text>
+            <line_editor
+             follows="left|top|right"
+             height="19"
+             layout="topleft"
+             left_pad="0"
+             max_length="127"
+             name="Object Description"
+             select_on_focus="true"
+             top_delta="0"
+             width="170" />
+            <text
+             type="string"
+             left="10"
+             length="1"
+             follows="left|top"
+             height="19"
+             layout="topleft"
+             name="Creator:"
+             width="90">
+                Creator:
+            </text>
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             left_pad="0"
+             height="19"
+             layout="topleft"
+             name="Creator Name"
+             width="175">
+                Esbee Linden
+            </text>
+            <text
+             type="string"
+             length="1"
+             left="10"
+             follows="left|top"
+             height="19"
+             layout="topleft"
+             name="Owner:"
+             width="90">
+                Owner:
+            </text>
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="19"
+             layout="topleft"
+             name="Owner Name"
+             left_pad="0"
+             width="175">
+                Erica Linden
+            </text>
+           <text
+             type="string"
+             length="1"
+             follows="left|top"
+             layout="topleft"
+             left="10"
+             height="18"
+             name="Group:"
+             top_pad="4"
+             width="75">
+                Group:
+            </text>
+            <button
+			 follows="top|left"
+			 height="10"
+			 image_disabled="Activate_Checkmark"
+			 image_selected="Activate_Checkmark"
+			 image_unselected="Activate_Checkmark"
+			 image_color="White_50"
+			 layout="topleft"
+			 left_pad="0"
+			 top_delta="0"
+			 name="button set group"
+			 picture_style="true"
+			 tab_stop="false"
+			 tool_tip="Choose a group to share this object's permissions"
+			 width="10" />
+            <name_box
+             follows="left|top"
+             height="18"
+             initial_value="Loading..."
+             layout="topleft"
+             left_pad="5"
+             top_delta="-1"
+             name="Group Name Proxy"
+             width="150" />
+            <button
+             follows="top|left"
+             font="SansSerifSmall"
+             height="20"
+             label="Deed"
+             label_selected="Deed"
+             layout="topleft"
+             name="button deed"
+             top_pad="0"
+             left="100"
+             tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."
+             width="80" />
+            <check_box
+             height="19"
+             follows="left|top"
+             label="Share"
+             layout="topleft"
+             name="checkbox share with group"
+             tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."
+             left_pad="3"
+             width="100" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="16"
+             layout="topleft"
+             top_pad="15"
+             left="10"
+             name="label click action"
+             width="90">
+                Click to:
+            </text>
+            <combo_box
+             follows="left|top"
+             height="20"
+             layout="topleft"
+             name="clickaction"
+             width="168"
+             left_pad="0">
+                <combo_box.item
+                 label="Touch  (default)"
+                 name="Touch/grab(default)"
+                 value="Touch/grab (default)" />
+                <combo_box.item
+                 label="Sit on object"
+                 name="Sitonobject"
+                 value="Sit on object" />
+                <combo_box.item
+                 label="Buy object"
+                 name="Buyobject"
+                 value="Buy object" />
+                <combo_box.item
+                 label="Pay object"
+                 name="Payobject"
+                 value="Pay object" />
+                <combo_box.item
+                 label="Open"
+                 name="Open"
+                 value="Open" />
+            </combo_box>
+            <check_box
+             height="16"
+             top_pad="15"
+             label="For Sale:"
+             layout="topleft"
+             name="checkbox for sale"
+             left="10"
+             width="90" />
+<!-- NEW SALE TYPE COMBO BOX -->
+      <combo_box
+            left_pad="0"
+            layout="topleft"
+            follows="left|top"
+            allow_text_entry="false"
+            height="20"
+            intial_value="2"
+            max_chars="20"
+            mouse_opaque="true"
+            name="sale type"
+            width="158">
+        <combo_box.item
+           name="Copy"
+           label="Copy"
+           value="2" />
+        <combo_box.item
+           name="Contents"
+           label="Contents"
+           value="3" />
+        <combo_box.item
+           name="Original"
+           label="Original"
+           value="1" />
+      </combo_box>
+<!-- NEW PRICE SPINNER -->
+      <spinner
+        follows="left|top"
+        decimal_digits="0"
+        increment="1"
+        top_pad="8"
+        left="100"
+        control_name="Edit Cost"
+        name="Edit Cost"
+        label="Price: L$"
+        label_width="65"
+        width="150"
+        min_val="1"
+        height="20"
+        max_val="999999999" />
+      <check_box
+	   height="15"
+	   width="110"
+	   top_pad="3"
+	   label="Show in search"
+       layout="topleft"
+	   left="100"
+       name="search_check"
+       tool_tip="Let people see this object in search results" />
+		<panel
+         border="false"
+         follows="left|top"
+         layout="topleft"
+         mouse_opaque="false"
+         background_visible="true"
+         bg_alpha_color="DkGray"
+         name="perms_build"
+         left="0"
+         top="241"
+         height="120"
+         width="278">
+            <text
+             type="string"
+             length="1"
+             left="10"
+             top_pad="9"
+             text_color="EmphasisColor"
+             height="16"
+             follows="left|top|right"
+             layout="topleft"
+             name="perm_modify"
+             width="250">
+                You can modify this object
+            </text>
+            <text
+               type="string"
+               follows="left|top"
+               name="Anyone can:"
+               width="250"
+               left="10">
+                 Anyone:
+            </text>
+            <check_box
+             height="19"
+             label="Move"
+             layout="topleft"
+             name="checkbox allow everyone move"
+             left="15"
+             width="85" />
+            <check_box
+             height="19"
+             label="Copy"
+             layout="topleft"
+             left_pad="0"
+             name="checkbox allow everyone copy"
+             width="90" />
+            <text
+               type="string"
+               follows="left|top"
+               height="19"
+               name="Next owner can:"
+               width="250"
+               left="10">
+                  Next owner:
+            </text>
+            <check_box
+             follows="left|top|right"
+             label="Modify"
+             layout="topleft"
+             left="15"
+             name="checkbox next owner can modify"
+             width="85" />
+            <check_box
+             follows="left|top|right"
+             height="19"
+             label="Copy"
+             layout="topleft"
+             left_pad="0"
+             name="checkbox next owner can copy"
+             width="90" />
+            <check_box
+             follows="left|top|right"
+             height="19"
+             label="Transfer"
+             layout="topleft"
+             name="checkbox next owner can transfer"
+             left_pad="0"
+             top_delta="0"
+             tool_tip="Next owner can give away or resell this object"
+             width="90" />
+            <text
+             type="string"
+             text_color="EmphasisColor"
+             length="1"
+             top_pad="5"
+             follows="left|top"
+             layout="topleft"
+             left="10"
+             name="B:"
+             height="10"
+             width="45">
+                B:
+            </text>
+            <text
+             type="string"
+             text_color="White"
+             length="1"
+             follows="left|top"
+             layout="topleft"
+             left_pad="0"
+             name="O:"
+             height="10"
+             width="44">
+                O:
+            </text>
+            <text
+             type="string"
+             text_color="EmphasisColor"
+             length="1"
+             follows="left|top"
+             layout="topleft"
+             left_pad="0"
+             name="G:"
+             height="10"
+             width="43">
+                G:
+            </text>
+            <text
+             type="string"
+             text_color="White"
+             length="1"
+             follows="left|top"
+             left_pad="0"
+             layout="topleft"
+             name="E:"
+             height="10"
+             width="43">
+                E:
+            </text>
+            <text
+             type="string"
+             text_color="EmphasisColor"
+             length="1"
+             follows="left|top"
+             layout="topleft"
+             left_pad="0"
+             name="N:"
+             height="10"
+             width="48">
+                N:
+            </text>
+            <text
+             type="string"
+             text_color="White"
+             length="1"
+             follows="left|top"
+             layout="topleft"
+             left_pad="0"
+             name="F:"
+             height="10"
+             width="50">
+                F:
+            </text>
+		</panel>
+ </panel>
+    <panel
+		 height="25"
+		 layout="bottomright"
+		 help_topic="button_tab"
+		 name="button_panel"
+		 left="5"
+		 bottom="5"
+		 width="313">
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Edit"
+		     layout="topleft"
+		     left="0"
+		     name="edit_btn"
+		     top="0"
+		     width="50" />
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Open"
+		     layout="topleft"
+		     left_pad="5"
+		     name="open_btn"
+		     top="0"
+		     width="60" />
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Pay"
+		     layout="topleft"
+		     left_pad="5"
+		     name="pay_btn"
+		     top="0"
+		     width="50" />
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Buy"
+		     layout="topleft"
+		     left_pad="5"
+		     name="buy_btn"
+		     top="0"
+		     width="60" />
+	    <button
+		     follows="bottom|right"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Cancel"
+		     layout="topleft"
+		     name="cancel_btn"
+		     right="-1"
+		     top="0"
+		     width="70" />
+	    <button
+		     follows="bottom|right"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Save"
+		     layout="topleft"
+		     name="save_btn"
+		     left_pad="-135"
+		     top="0"
+		     width="60" />
+	</panel>
+</panel>
\ No newline at end of file
-- 
GitLab


From 56841bb2118184aa0a0c2b2a8bc52d2b593cc0c5 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 9 Nov 2009 17:45:53 +0000
Subject: [PATCH 271/306] don't have the 'speak' button be, technically, a
 toggle button - we'll be managing its state rather manually, not necessarily
 conforming to 'toggle' semantics.

---
 indra/newview/skins/default/xui/en/widgets/talk_button.xml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
index d9f39b69372..1d8257fbc8a 100644
--- a/indra/newview/skins/default/xui/en/widgets/talk_button.xml
+++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
@@ -11,7 +11,6 @@
     label_selected="Speak"
     font="SansSerifSmall"
     tab_stop="false"
-    is_toggle="true"
     />
   <show_button
     name="right"
-- 
GitLab


From 8b9c031f596280f79d06f688c2f654d7ec07a7d0 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 9 Nov 2009 17:51:21 +0000
Subject: [PATCH 272/306] Smarter mildly-refactored voice-toggle state
 management.

---
 indra/newview/llspeakbutton.cpp | 15 ++++++-----
 indra/newview/llspeakbutton.h   |  6 ++---
 indra/newview/llvoiceclient.cpp | 45 ++++++++++++++-------------------
 indra/newview/llvoiceclient.h   |  1 +
 4 files changed, 30 insertions(+), 37 deletions(-)

diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp
index 312d7050b91..b2c0fcdaf2a 100644
--- a/indra/newview/llspeakbutton.cpp
+++ b/indra/newview/llspeakbutton.cpp
@@ -93,7 +93,8 @@ LLSpeakButton::LLSpeakButton(const Params& p)
 	addChild(mSpeakBtn);
 	LLTransientFloaterMgr::getInstance()->addControlView(mSpeakBtn);
 
-	mSpeakBtn->setClickedCallback(boost::bind(&LLSpeakButton::onClick_SpeakBtn, this));
+	mSpeakBtn->setMouseDownCallback(boost::bind(&LLSpeakButton::onMouseDown_SpeakBtn, this));
+	mSpeakBtn->setMouseUpCallback(boost::bind(&LLSpeakButton::onMouseUp_SpeakBtn, this));
 	mSpeakBtn->setToggleState(FALSE);
 
 	LLButton::Params show_params = p.show_button;
@@ -131,15 +132,15 @@ LLSpeakButton::~LLSpeakButton()
 {
 }
 
-void LLSpeakButton::setSpeakBtnToggleState(bool state)
+void LLSpeakButton::onMouseDown_SpeakBtn()
 {
-	mSpeakBtn->setToggleState(state);
+	bool down = true;
+	gVoiceClient->inputUserControlState(down); // this method knows/care about whether this translates into a toggle-to-talk or down-to-talk
 }
-
-void LLSpeakButton::onClick_SpeakBtn()
+void LLSpeakButton::onMouseUp_SpeakBtn()
 {
-	bool speaking = mSpeakBtn->getToggleState();
-	gVoiceClient->setUserPTTState(speaking);
+	bool down = false;
+	gVoiceClient->inputUserControlState(down);
 }
 
 void LLSpeakButton::onClick_ShowBtn()
diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h
index 48a4d5880b2..e213c562dd8 100644
--- a/indra/newview/llspeakbutton.h
+++ b/indra/newview/llspeakbutton.h
@@ -45,7 +45,6 @@ class LLOutputMonitorCtrl;
  * clicked.
 */
 class LLSpeakButton : public LLUICtrl
-
 {
 public:
 
@@ -63,13 +62,12 @@ class LLSpeakButton : public LLUICtrl
 	/*virtual*/ ~LLSpeakButton();
 	/*virtual*/ void draw();
 
-	void setSpeakBtnToggleState(bool state);
-
 protected:
 	friend class LLUICtrlFactory;
 	LLSpeakButton(const Params& p);
 
-	void onClick_SpeakBtn();
+	void onMouseDown_SpeakBtn();
+	void onMouseUp_SpeakBtn();
 
 	void onClick_ShowBtn();
 
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index f303f14843d..39d4bb0c029 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -5925,8 +5925,6 @@ void LLVoiceClient::setMicGain(F32 volume)
 
 void LLVoiceClient::keyDown(KEY key, MASK mask)
 {	
-//	LL_DEBUGS("Voice") << "key is " << LLKeyboard::stringFromKey(key) << LL_ENDL;
-
 	if (gKeyboard->getKeyRepeated(key))
 	{
 		// ignore auto-repeat keys
@@ -5935,44 +5933,39 @@ void LLVoiceClient::keyDown(KEY key, MASK mask)
 
 	if(!mPTTIsMiddleMouse)
 	{
-		if(mPTTIsToggle)
-		{
-			if(key == mPTTKey)
-			{
-				toggleUserPTTState();
-			}
-		}
-		else if(mPTTKey != KEY_NONE)
-		{
-			setUserPTTState(gKeyboard->getKeyDown(mPTTKey));
-		}
+		bool down = (mPTTKey != KEY_NONE)
+			&& gKeyboard->getKeyDown(mPTTKey);
+		inputUserControlState(down);
 	}
 }
 void LLVoiceClient::keyUp(KEY key, MASK mask)
 {
 	if(!mPTTIsMiddleMouse)
 	{
-		if(!mPTTIsToggle && (mPTTKey != KEY_NONE))
+		bool down = (mPTTKey != KEY_NONE)
+			&& gKeyboard->getKeyDown(mPTTKey);
+		inputUserControlState(down);
+	}
+}
+void LLVoiceClient::inputUserControlState(bool down)
+{
+	if(mPTTIsToggle)
+	{
+		if(down) // toggle open-mic state on 'down'
 		{
-			setUserPTTState(gKeyboard->getKeyDown(mPTTKey));
+			toggleUserPTTState();
 		}
 	}
+	else // set open-mic state as an absolute
+	{
+		setUserPTTState(down);
+	}
 }
 void LLVoiceClient::middleMouseState(bool down)
 {
 	if(mPTTIsMiddleMouse)
 	{
-		if(mPTTIsToggle)
-		{
-			if(down)
-			{
-				toggleUserPTTState();
-			}
-		}
-		else
-		{
-			setUserPTTState(down);
-		}
+		inputUserControlState(down);
 	}
 }
 
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 2b61086680f..347fae6156b 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -188,6 +188,7 @@ static	void updatePosition(void);
 		void setUserPTTState(bool ptt);
 		bool getUserPTTState();
 		void toggleUserPTTState(void);
+		void inputUserControlState(bool down); // interpret any sort of up-down mic-open control input according to ptt-toggle prefs
 		void setVoiceEnabled(bool enabled);
 		static bool voiceEnabled();
 		void setUsePTT(bool usePTT);
-- 
GitLab


From 0777c177525c8ff2889e9cd5f06877de3c5f9f31 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 9 Nov 2009 17:54:40 +0000
Subject: [PATCH 273/306] remove debug spew.

---
 indra/newview/llspeakbutton.cpp | 1 -
 1 file changed, 1 deletion(-)

diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp
index b2c0fcdaf2a..d441762fa6f 100644
--- a/indra/newview/llspeakbutton.cpp
+++ b/indra/newview/llspeakbutton.cpp
@@ -67,7 +67,6 @@ void LLSpeakButton::draw()
 	// gVoiceClient is the authoritative global source of info regarding our open-mic state, we merely reflect that state.
 	bool openmic = gVoiceClient->getUserPTTState();
 	mSpeakBtn->setToggleState(openmic);
-	llinfos << "mic state " << int(openmic) << llendl;
 	LLUICtrl::draw();
 }
 
-- 
GitLab


From 1d7abc99f007a1c37bb806a4bbda7c87153b0714 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 9 Nov 2009 10:05:06 -0800
Subject: [PATCH 274/306] Fixed crash on hovering over debug rendering menu due
 to texture atlas.

---
 indra/newview/skins/default/xui/en/menu_viewer.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 633c258ecc4..215a25ffdab 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2540,10 +2540,10 @@
              name="Texture Atlas">
               <menu_item_check.on_check
                function="CheckControl"
-               parameter="TextureAtlas" />
+               parameter="EnableTextureAtlas" />
               <menu_item_check.on_click
                function="ToggleControl"
-               parameter="TextureAtlas" />
+               parameter="EnableTextureAtlas" />
             </menu_item_check>
               <menu_item_check
              label="Render Attached Lights"
-- 
GitLab


From a9b16734a1690551cc6277dc419dcb8629f4ddd1 Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Mon, 9 Nov 2009 19:28:14 +0000
Subject: [PATCH 275/306] DEV-41317 DEV-41318: Enabled the Call button in the
 Profile panel.

I've added a new LLAvatarActions::startCall() method to make it easy
to start a new P2P call. The Resident Profile "Call" button is now
hooked up to this.

I've also put back the "Call" menu in the avatar popup menu and hooked
this up too. While I was there I noticed that the "IM" popup menu code
could all be removed in favor of a call to LLAvatarActions::startIM().
---
 indra/newview/llavataractions.cpp             | 32 +++++++++++++++++++
 indra/newview/llavataractions.h               | 10 ++++++
 indra/newview/llviewermenu.cpp                | 32 ++++++++-----------
 .../skins/default/xui/en/panel_profile.xml    |  1 -
 4 files changed, 56 insertions(+), 19 deletions(-)

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 3fc37aa3d50..dae4296a82e 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -185,6 +185,38 @@ void LLAvatarActions::startIM(const LLUUID& id)
 	make_ui_sound("UISndStartIM");
 }
 
+// static
+void LLAvatarActions::startCall(const LLUUID& id)
+{
+	if (id.isNull() || isCalling(id))
+	{
+		return;
+	}
+
+	std::string name;
+	gCacheName->getFullName(id, name);
+	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+	if (session_id != LLUUID::null)
+	{
+		// always open IM window when connecting to voice
+		LLIMFloater::show(session_id);
+		gIMMgr->startCall(session_id);
+	}
+	make_ui_sound("UISndStartIM");
+}
+
+// static
+bool LLAvatarActions::isCalling(const LLUUID &id)
+{
+	if (id.isNull())
+	{
+		return false;
+	}
+
+	LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL, id);
+	return (LLIMModel::getInstance()->findIMSession(session_id) != NULL);
+}
+
 // static
 void LLAvatarActions::startConference(const std::vector<LLUUID>& ids)
 {
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 512f673b432..0ec20ae3572 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -66,6 +66,11 @@ class LLAvatarActions
 	 */
 	static void startIM(const LLUUID& id);
 
+	/**
+	 * Start an avatar-to-avatar voice call with another user
+	 */
+	static void startCall(const LLUUID& id);
+
 	/**
 	 * Start conference chat with the given avatars.
 	 */
@@ -96,6 +101,11 @@ class LLAvatarActions
 	 */
 	static bool isBlocked(const LLUUID& id);
 
+	/**
+	 * Return true if the avatar is in a P2P voice call with a given user
+	 */
+	static bool isCalling(const LLUUID &id);
+
 	/**
 	 * Invite avatar to a group.
 	 */	
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 07d073c3a9b..b086e6d0553 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -6249,25 +6249,20 @@ class LLAvatarSendIM : public view_listener_t
 		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
 		if(avatar)
 		{
-			std::string name("IM");
-			LLNameValue *first = avatar->getNVPair("FirstName");
-			LLNameValue *last = avatar->getNVPair("LastName");
-			if (first && last)
-			{
-				name.assign( first->getString() );
-				name.append(" ");
-				name.append( last->getString() );
-			}
+			LLAvatarActions::startIM(avatar->getID());
+		}
+		return true;
+	}
+};
 
-			//EInstantMessage type = have_agent_callingcard(gLastHitObjectID)
-			//	? IM_SESSION_ADD : IM_SESSION_CARDLESS_START;
-			LLUUID session_id = gIMMgr->addSession(name,
-								IM_NOTHING_SPECIAL,
-								avatar->getID());
-			if (session_id != LLUUID::null)
-			{
-				LLIMFloater::show(session_id);
-			}
+class LLAvatarCall : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
+		if(avatar)
+		{
+			LLAvatarActions::startCall(avatar->getID());
 		}
 		return true;
 	}
@@ -7938,6 +7933,7 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAvatarGiveCard(), "Avatar.GiveCard");
 	commit.add("Avatar.Eject", boost::bind(&handle_avatar_eject, LLSD()));
 	view_listener_t::addMenu(new LLAvatarSendIM(), "Avatar.SendIM");
+	view_listener_t::addMenu(new LLAvatarCall(), "Avatar.Call");
 	view_listener_t::addMenu(new LLAvatarReportAbuse(), "Avatar.ReportAbuse");
 	
 	view_listener_t::addMenu(new LLAvatarEnableAddFriend(), "Avatar.EnableAddFriend");
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index a0055383b1c..0f5e96416df 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -294,7 +294,6 @@
          left_pad="5"
          width="45" />
         <button
-         enabled="false"
          follows="bottom|left"
          height="19"
          label="Call"
-- 
GitLab


From e477a74feb21c4ddcb077c7256457b44e69fba24 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Mon, 9 Nov 2009 12:14:29 -0800
Subject: [PATCH 276/306] Better fix for DEV-42153.

---
 indra/newview/llvovolume.cpp | 39 +++++++++---------------------------
 1 file changed, 10 insertions(+), 29 deletions(-)

diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 021fc746488..09769d5e80a 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1640,38 +1640,19 @@ bool LLVOVolume::hasMedia() const
 
 LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id)
 {
-	LLVector3 result = LLVector3::zero;
-	
-	LLFace* facep = mDrawable->getFace(face_id);
-	if(facep)
-	{
-		LLStrider<LLVector3> verticesp;
-		LLStrider<LLVector3> normalsp;
-		LLStrider<LLVector2> texCoordsp;
-		LLStrider<U16> indicesp;
-		S32 index_offset;
-		index_offset = facep->getGeometry(verticesp,normalsp,texCoordsp, indicesp);
-		
-		if(index_offset != -1 && (normalsp.get() != NULL))
+	LLVolume* volume = getVolume();
+	LLVector3 result;
+
+	if (volume && face_id < volume->getNumVolumeFaces())
+	{
+		const LLVolumeFace& face = volume->getVolumeFace(face_id);
+		for (S32 i = 0; i < face.mVertices.size(); ++i)
 		{
-			U16 count = facep->getGeomCount();
-			U16 i;
-			
-			for(i=0; i < count; i++)
-			{
-				LLVector3 normal = *normalsp++;
-//				llinfos << "adding " << normal << llendl;
-				result += normal;
-			}
+			result += face.mVertices[i].mNormal;
 		}
-	}
-	
-	if(!result.isNull())
-	{
-//		llinfos << "before conversion: " << result << llendl;
+
 		result = volumeDirectionToAgent(result);
-		result.normalize();
-//		llinfos << "after conversion: " << result << llendl;
+		result.normVec();
 	}
 	
 	return result;
-- 
GitLab


From ca0d3966dfed4a4188243e3ffe12b18e410e860b Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Mon, 9 Nov 2009 20:18:46 +0000
Subject: [PATCH 277/306] DEV-41358: Renamed the title of the search floater to
 be "Find".

As requested by the search team.
---
 indra/newview/skins/default/xui/en/floater_search.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index f7ba719dc26..edc1fb88385 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -10,7 +10,7 @@
  help_topic="floater_search"
  save_rect="true"
  single_instance="true"
- title="SEARCH [SECOND_LIFE]"
+ title="FIND"
  width="620">
     <floater.string
      name="search_url">
-- 
GitLab


From 75bdd2ff321032a3a9d4e814d6067088d48cafab Mon Sep 17 00:00:00 2001
From: "Nyx (Neal Orman)" <nyx@lindenlab.com>
Date: Mon, 9 Nov 2009 16:41:16 -0500
Subject: [PATCH 278/306] EXT-2326 Editing appearance causes too many texture
 callbacks stalls the viewer

problem was caused by triggering updateMeshTextures() every time visual params
or textures were changed on your base avatar object. The latest structure
makes the parameters and textures in the wearables authoritative, causing them
to be copied to the avatar on a regular basis. This resulted in way too many callbacks
to be registered while waiting for baked textures to be uploaded.

Fixed by removing many calls to updateMeshTextures() and ensuring that it gets called
every time an appropriate param or texture actually changes, or a wearable gets
added/removed. This appears to cut the number of callbacks to a reasonable level.

Code reviewed by Bigpapi.
---
 indra/newview/lltexlayerparams.cpp |  2 --
 indra/newview/llvoavatar.cpp       |  1 -
 indra/newview/llvoavatarself.cpp   | 14 +-------------
 indra/newview/llwearable.cpp       |  4 +---
 4 files changed, 2 insertions(+), 19 deletions(-)

diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp
index 74e0fa077e3..b744722f4cd 100644
--- a/indra/newview/lltexlayerparams.cpp
+++ b/indra/newview/lltexlayerparams.cpp
@@ -183,7 +183,6 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL set_by_user)
 			}
 			mAvatar->invalidateComposite(mTexLayer->getTexLayerSet(), set_by_user);
 			mTexLayer->invalidateMorphMasks();
-			mAvatar->updateMeshTextures();
 		}
 	}
 }
@@ -479,7 +478,6 @@ void LLTexLayerParamColor::setWeight(F32 weight, BOOL set_by_user)
 			if (mTexLayer)
 			{
 				mAvatar->invalidateComposite(mTexLayer->getTexLayerSet(), set_by_user);
-				mAvatar->updateMeshTextures();
 			}
 		}
 
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index a6f20922d91..16bd74f7989 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5377,7 +5377,6 @@ void LLVOAvatar::updateSexDependentLayerSets( BOOL set_by_user )
 	invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, set_by_user );
 	invalidateComposite( mBakedTextureDatas[BAKED_UPPER].mTexLayerSet, set_by_user );
 	invalidateComposite( mBakedTextureDatas[BAKED_LOWER].mTexLayerSet, set_by_user );
-	updateMeshTextures();
 }
 
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 7a830707702..a2203ba2ea8 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -757,19 +757,7 @@ void LLVOAvatarSelf::setLocalTextureTE(U8 te, LLViewerTexture* image, BOOL set_b
 		return;
 	}
 
-	LLTexLayerSet* layer_set = getLayerSet((ETextureIndex)te);
-	if (layer_set)
-	{
-		invalidateComposite(layer_set, set_by_user);
-	}
-
 	setTEImage(te, image);
-	updateMeshTextures();
-
-	if (gAgent.cameraCustomizeAvatar())
-	{
-		LLVisualParamHint::requestHintUpdates();
-	}
 }
 
 //virtual
@@ -1377,6 +1365,7 @@ void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL set_by_u
 		ETextureIndex baked_te = getBakedTE( layerset );
 		setTEImage( baked_te, LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR) );
 		layerset->requestUpload();
+		updateMeshTextures();
 	}
 }
 
@@ -1386,7 +1375,6 @@ void LLVOAvatarSelf::invalidateAll()
 	{
 		invalidateComposite(mBakedTextureDatas[i].mTexLayerSet, TRUE);
 	}
-	updateMeshTextures();
 }
 
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 2b4861ce4fe..3185ee45bfe 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -674,8 +674,6 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater
 		avatar->updateSexDependentLayerSets( set_by_user );
 	}	
 	
-	avatar->updateMeshTextures();
-
 //	if( set_by_user )
 //	{
 //		gAgent.sendAgentSetAppearance();
@@ -719,7 +717,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user )
 	}
 
 	avatar->updateVisualParams();
-	avatar->updateMeshTextures();
+	avatar->wearableUpdated(type);
 
 //	if( set_by_user )
 //	{
-- 
GitLab


From a54192db4bcdb8f0241c9c1082c5228d1694887c Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Mon, 9 Nov 2009 16:57:17 -0500
Subject: [PATCH 279/306] For EXT-2335 Diagnose warning spam:
 "LLInventoryPanel::buildNewViews called with invalid objectp->mType"

Trivial fix to just ignore reading in items that have unknown/none asset type.
---
 indra/newview/llinventorymodel.cpp | 16 ++++++++++++----
 indra/newview/llinventorypanel.cpp |  4 ++--
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index baf34b42ff3..b41695fd341 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -1823,17 +1823,25 @@ void LLInventoryModel::addCategory(LLViewerInventoryCategory* category)
 void LLInventoryModel::addItem(LLViewerInventoryItem* item)
 {
 	//llinfos << "LLInventoryModel::addItem()" << llendl;
+
+	
+	// This can happen if assettype enums change.  This can be a backwards compatibility issue 
+	// in some viewer prototypes prior to when the AT_LINK enum changed from 23 to 24.
+	if ((item->getType() == LLAssetType::AT_NONE)
+		|| LLAssetType::lookup(item->getType()) == LLAssetType::badLookup())
+	{
+		llwarns << "Got bad asset type for item ( name: " << item->getName() << " type: " << item->getType() << " inv-type: " << item->getInventoryType() << " ), ignoring." << llendl;
+		return;
+	}
 	if(item)
 	{
 		// This condition means that we tried to add a link without the baseobj being in memory.
 		// The item will show up as a broken link.
 		if (item->getIsBrokenLink())
 		{
-			llwarns << "Add link item without baseobj present ( name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " )  parent: " << item->getParentUUID() << llendl;
-//			llassert_always(FALSE); // DO NOT MERGE THIS IN.  This is an AVP debugging line.  If this line triggers, it means that you just loaded in a broken link.  Unless that happens because you actually deleted a baseobj without deleting the link, it's indicative of a serious problem (likely with your inventory) and should be diagnosed.
+			llinfos << "Adding broken link ( name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " )  parent: " << item->getParentUUID() << llendl;
 		}
 		mItemMap[item->getUUID()] = item;
-		//mInventory[item->getUUID()] = item;
 	}
 }
 
@@ -2175,7 +2183,7 @@ bool LLInventoryModel::loadSkeleton(
 						// This can happen if the linked object's baseobj is removed from the cache but the linked object is still in the cache.
 						if (item->getIsBrokenLink())
 						{
-							llinfos << "Attempted to cached link item without baseobj present ( itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ) " << llendl;
+							llinfos << "Attempted to add cached link item without baseobj present ( name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ).  Ignoring and invalidating " << cat->getName() << " . " << llendl;
 							invalid_categories.insert(cit->second);
 							continue;
 						}
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 7f69ce9641e..9a71e53441e 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -371,7 +371,7 @@ void LLInventoryPanel::modelChanged(U32 mask)
 						// this object was probably moved, check its parent
 						if ((mask & LLInventoryObserver::STRUCTURE) != LLInventoryObserver::STRUCTURE)
 						{
-							llwarns << *id_it << " is in model and in view, but STRUCTURE flag not set" << llendl;
+							llwarns << *id_it << " is in model and in view, but STRUCTURE flag not set" << " for model (Name :" << model_item->getName() << " )" << llendl;
 						}
 
 						LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID());
@@ -472,7 +472,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
 			if (objectp->getType() <= LLAssetType::AT_NONE ||
 				objectp->getType() >= LLAssetType::AT_COUNT)
 			{
-				lldebugs << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << 
+				llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << 
 					((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID() << llendl;
 				return;
 			}
-- 
GitLab


From 1d4a6d144111100d30eaefb96ed632f1d8a11dc5 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Mon, 9 Nov 2009 17:01:08 -0500
Subject: [PATCH 280/306] For EXT-2325: Should purge inventory cache moving
 from 1.23 to 2.0.

Added a version field at the beginning of inventory cache files.  If version field is not found or does not match expectected value, then the cache is discarded.  In 1.23, the version line triggers a warning but is otherwise ignored.

Reviewed by Seraph.
---
 indra/newview/llinventorymodel.cpp | 47 +++++++++++++++++++++++++++---
 indra/newview/llinventorymodel.h   |  6 +++-
 2 files changed, 48 insertions(+), 5 deletions(-)

diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index baf34b42ff3..74c2c7aa693 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -81,6 +81,10 @@ BOOL LLInventoryModel::sTimelyFetchPending = FALSE;
 LLFrameTimer LLInventoryModel::sFetchTimer;
 S16 LLInventoryModel::sBulkFetchCount = 0;
 
+// Increment this if the inventory contents change in a non-backwards-compatible way.
+// For viewer 2, the addition of link items makes a pre-viewer-2 cache incorrect.
+const S32 LLInventoryModel::sCurrentInvCacheVersion = 2;
+
 // RN: for some reason, using std::queue in the header file confuses the compiler which things it's an xmlrpc_queue
 static std::deque<LLUUID> sFetchQueue;
 
@@ -2101,7 +2105,8 @@ bool LLInventoryModel::loadSkeleton(
 				llinfos << "Unable to gunzip " << gzip_filename << llendl;
 			}
 		}
-		if(loadFromFile(inventory_filename, categories, items))
+		bool is_cache_obsolete = false;
+		if(loadFromFile(inventory_filename, categories, items, is_cache_obsolete))
 		{
 			// We were able to find a cache of files. So, use what we
 			// found to generate a set of categories we should add. We
@@ -2236,6 +2241,12 @@ bool LLInventoryModel::loadSkeleton(
 			// clean up the gunzipped file.
 			LLFile::remove(inventory_filename);
 		}
+		if(is_cache_obsolete)
+		{
+			// If out of date, remove the gzipped file too.
+			llwarns << "Inv cache out of date, removing" << llendl;
+			LLFile::remove(gzip_filename);
+		}
 		categories.clear(); // will unref and delete entries
 	}
 
@@ -2634,7 +2645,8 @@ bool LLUUIDAndName::operator>(const LLUUIDAndName& rhs) const
 // static
 bool LLInventoryModel::loadFromFile(const std::string& filename,
 									LLInventoryModel::cat_array_t& categories,
-									LLInventoryModel::item_array_t& items)
+									LLInventoryModel::item_array_t& items,
+									bool &is_cache_obsolete)
 {
 	if(filename.empty())
 	{
@@ -2651,11 +2663,32 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
 	// *NOTE: This buffer size is hard coded into scanf() below.
 	char buffer[MAX_STRING];		/*Flawfinder: ignore*/
 	char keyword[MAX_STRING];		/*Flawfinder: ignore*/
+	char value[MAX_STRING];			/*Flawfinder: ignore*/
+	is_cache_obsolete = true;  		// Obsolete until proven current
 	while(!feof(file) && fgets(buffer, MAX_STRING, file)) 
 	{
-		sscanf(buffer, " %254s", keyword);	/* Flawfinder: ignore */
-		if(0 == strcmp("inv_category", keyword))
+		sscanf(buffer, " %126s %126s", keyword, value);	/* Flawfinder: ignore */
+		if(0 == strcmp("inv_cache_version", keyword))
 		{
+			S32 version;
+			int succ = sscanf(value,"%d",&version);
+			if ((1 == succ) && (version == sCurrentInvCacheVersion))
+			{
+				// Cache is up to date
+				is_cache_obsolete = false;
+				continue;
+			}
+			else
+			{
+				// Cache is out of date
+				break;
+			}
+		}
+		else if(0 == strcmp("inv_category", keyword))
+		{
+			if (is_cache_obsolete)
+				break;
+			
 			LLPointer<LLViewerInventoryCategory> inv_cat = new LLViewerInventoryCategory(LLUUID::null);
 			if(inv_cat->importFileLocal(file))
 			{
@@ -2669,6 +2702,9 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
 		}
 		else if(0 == strcmp("inv_item", keyword))
 		{
+			if (is_cache_obsolete)
+				break;
+
 			LLPointer<LLViewerInventoryItem> inv_item = new LLViewerInventoryItem;
 			if( inv_item->importFileLocal(file) )
 			{
@@ -2700,6 +2736,8 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
 		}
 	}
 	fclose(file);
+	if (is_cache_obsolete)
+		return false;
 	return true;
 }
 
@@ -2721,6 +2759,7 @@ bool LLInventoryModel::saveToFile(const std::string& filename,
 		return false;
 	}
 
+	fprintf(file, "\tinv_cache_version\t%d\n",sCurrentInvCacheVersion);
 	S32 count = categories.count();
 	S32 i;
 	for(i = 0; i < count; ++i)
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index aba0a619dba..faf026887a9 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -446,7 +446,8 @@ class LLInventoryModel
 	// file import/export.
 	static bool loadFromFile(const std::string& filename,
 							 cat_array_t& categories,
-							 item_array_t& items); 
+							 item_array_t& items,
+							 bool& is_cache_obsolete); 
 	static bool saveToFile(const std::string& filename,
 						   const cat_array_t& categories,
 						   const item_array_t& items); 
@@ -518,6 +519,9 @@ class LLInventoryModel
 	static F32 sMaxTimeBetweenFetches;
 	static S16 sBulkFetchCount;
 
+	// Expected inventory cache version
+	const static S32 sCurrentInvCacheVersion;
+	
 	// This flag is used to handle an invalid inventory state.
 	bool mIsAgentInvUsable;
 
-- 
GitLab


From b82fadeda8489134a12bb573e612f32e135d6cc5 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 9 Nov 2009 14:01:32 -0800
Subject: [PATCH 281/306] Fix signed/unsigned build breakage in llvovolume.cpp

---
 indra/newview/llvovolume.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 09769d5e80a..a32abf3ab94 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1646,7 +1646,7 @@ LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id)
 	if (volume && face_id < volume->getNumVolumeFaces())
 	{
 		const LLVolumeFace& face = volume->getVolumeFace(face_id);
-		for (S32 i = 0; i < face.mVertices.size(); ++i)
+		for (S32 i = 0; i < (S32)face.mVertices.size(); ++i)
 		{
 			result += face.mVertices[i].mNormal;
 		}
-- 
GitLab


From 115fb4e342f5523c3c662e1adf213a15e0468d8e Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Mon, 9 Nov 2009 17:26:37 -0500
Subject: [PATCH 282/306] Removed some log file spam.

---
 indra/newview/llappearancemgr.cpp | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 41cd77b45d5..d14de1c3012 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -1243,14 +1243,14 @@ void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)
 void LLAppearanceManager::registerAttachment(const LLUUID& item_id)
 {
        sRegisteredAttachments.insert(item_id);
-       dumpAttachmentSet(sRegisteredAttachments,"after register:");
+       //dumpAttachmentSet(sRegisteredAttachments,"after register:");
 
 	   if (sAttachmentInvLinkEnabled)
 	   {
 		   LLViewerInventoryItem *item = gInventory.getItem(item_id);
 		   if (item)
 		   {
-			   LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:");
+			   //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:");
 			   LLAppearanceManager::wearItem(item,false);  // Add COF link for item.
 			   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
 			   gInventory.notifyObservers();
@@ -1258,7 +1258,7 @@ void LLAppearanceManager::registerAttachment(const LLUUID& item_id)
 	   }
 	   else
 	   {
-		   llinfos << "no link changes, inv link not enabled" << llendl;
+		   //llinfos << "no link changes, inv link not enabled" << llendl;
 	   }
 }
 
@@ -1266,11 +1266,11 @@ void LLAppearanceManager::registerAttachment(const LLUUID& item_id)
 void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id)
 {
        sRegisteredAttachments.erase(item_id);
-       dumpAttachmentSet(sRegisteredAttachments,"after unregister:");
+       //dumpAttachmentSet(sRegisteredAttachments,"after unregister:");
 
 	   if (sAttachmentInvLinkEnabled)
 	   {
-		   LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:");
+		   //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:");
 		   LLAppearanceManager::removeItemLinks(item_id, false);
 		   // BAP - needs to change for label to track link.
 		   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
@@ -1278,6 +1278,6 @@ void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id)
 	   }
 	   else
 	   {
-		   llinfos << "no link changes, inv link not enabled" << llendl;
+		   //llinfos << "no link changes, inv link not enabled" << llendl;
 	   }
 }
-- 
GitLab


From dffbe3f2ee2f6141552a6aa507d8c6e7f5037c05 Mon Sep 17 00:00:00 2001
From: Lis Pardi <lis@lindenlab.com>
Date: Mon, 9 Nov 2009 17:40:21 -0500
Subject: [PATCH 283/306] ext-1444 log, speak and gestures btns don't have
 tool-tips These changes had been made last month, but got smooshed.

---
 .../newview/skins/default/xui/en/panel_bottomtray.xml | 11 +++++++----
 .../skins/default/xui/en/panel_nearby_chat_bar.xml    |  2 +-
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index f833e0a1cbb..c5e129cf2fc 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -69,7 +69,9 @@
           left="0"
           name="talk"
           top="3"
-          width="100" />
+          width="100"
+          speak_button.tool_tip="Turns microphone on/off"
+          show_button.tool_tip="Shows/hides voice control panel" />
         </layout_panel>
 		 <icon
          auto_resize="false"
@@ -102,7 +104,8 @@
           left="0"
           top="3"
          use_ellipses="true"
-          width="80" />
+          width="80"
+          tool_tip="Shows/hides gestures"/>
         </layout_panel>
 		 <icon
          auto_resize="false"
@@ -133,7 +136,7 @@
              label="Move"
              layout="topleft"
              name="movement_btn"
-             tool_tip="Show/hide movement controls"
+             tool_tip="Shows/hides movement controls"
              top="3"
              width="80">
                 <button.init_callback
@@ -171,7 +174,7 @@
              label="View"
              layout="topleft"
              left="0"
-             tool_tip="Show/hide camera controls"
+             tool_tip="Shows/hides camera controls"
              top="3"
              name="camera_btn"
              width="80">
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
index 555fedb1ffb..7128c200380 100644
--- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
@@ -50,7 +50,7 @@
      label="Log"
      height="23"
      name="show_nearby_chat"
-     tool_tip="Show/hide nearby chat log">
+     tool_tip="Shows/hides nearby chat log">
         <button.init_callback
            function="Button.SetDockableFloaterToggle"
            parameter="nearby_chat" />
-- 
GitLab


From 4eb72a12a2280d3be6ac556ad80eb953d249e8eb Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Mon, 9 Nov 2009 15:29:47 -0800
Subject: [PATCH 284/306] data driven layout of top-level UI elements EXT-1219
 Side tray slide-out animation cleaned up some layout of bottom tray contents

reviewed by James
---
 .hgignore                                     |   1 -
 indra/llui/llconsole.cpp                      |   2 +
 indra/llui/lllayoutstack.cpp                  |  43 +++-
 indra/llui/lllayoutstack.h                    |   8 +-
 indra/llui/lluictrlfactory.h                  |   2 +-
 indra/llui/llview.cpp                         |   3 +
 indra/llui/llview.h                           |   3 -
 indra/newview/llfasttimerview.cpp             |   3 +-
 indra/newview/llfloatersnapshot.cpp           |   8 +-
 indra/newview/llmoveview.cpp                  |   2 +-
 indra/newview/llnavigationbar.cpp             |  16 +-
 indra/newview/llpanelpeople.cpp               |   3 +-
 indra/newview/llpanelpeoplemenus.cpp          |   1 -
 indra/newview/llpanelprimmediacontrols.cpp    |   1 +
 indra/newview/llpanelteleporthistory.cpp      |   2 -
 indra/newview/llsidetray.cpp                  | 200 ++++-------------
 indra/newview/llsidetray.h                    |  10 +-
 indra/newview/llviewerwindow.cpp              |  79 +++----
 indra/newview/llviewerwindow.h                |   3 +-
 indra/newview/pipeline.cpp                    |   2 +
 .../skins/default/xui/en/main_view.xml        | 203 ++++++++++--------
 .../skins/default/xui/en/panel_bottomtray.xml |  51 +++--
 .../skins/default/xui/en/panel_status_bar.xml |   2 +-
 .../default/xui/en/widgets/context_menu.xml   |   2 +
 .../default/xui/en/widgets/side_tray.xml      |   9 +-
 .../xui/en/widgets/toggleable_menu.xml        |   2 +
 26 files changed, 293 insertions(+), 368 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/en/widgets/context_menu.xml
 create mode 100644 indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml

diff --git a/.hgignore b/.hgignore
index e390f591e57..4d98acf5d97 100644
--- a/.hgignore
+++ b/.hgignore
@@ -29,7 +29,6 @@ indra/newview/fmod.dll
 indra/newview/mozilla-theme
 indra/newview/mozilla-universal-darwin.tgz
 indra/newview/res-sdl
-indra/newview/skins
 indra/newview/vivox-runtime
 indra/server-linux-*
 indra/test/linden_file.dat
diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp
index e0053b4cc70..48c76cf105c 100644
--- a/indra/llui/llconsole.cpp
+++ b/indra/llui/llconsole.cpp
@@ -60,6 +60,8 @@ LLConsole* gConsole = NULL;  // Created and destroyed in LLViewerWindow.
 const F32 FADE_DURATION = 2.f;
 const S32 MIN_CONSOLE_WIDTH = 200;
  
+static LLDefaultChildRegistry::Register<LLConsole> r("console");
+
 LLConsole::LLConsole(const LLConsole::Params& p) 
 :	LLUICtrl(p),
 	LLFixedBuffer(p.max_lines),
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index bac54919432..596b3a3e70a 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -137,6 +137,7 @@ LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p)
 	mPanelSpacing(p.border_size),
 	mOrientation((p.orientation() == "vertical") ? VERTICAL : HORIZONTAL),
 	mAnimate(p.animate),
+	mAnimatedThisFrame(false),
 	mClip(p.clip)
 {}
 
@@ -172,6 +173,7 @@ void LLLayoutStack::draw()
 		// only force drawing invisible children if visible amount is non-zero
 		drawChild(panelp, 0, 0, !clip_rect.isEmpty());
 	}
+	mAnimatedThisFrame = false;
 }
 
 void LLLayoutStack::removeChild(LLView* view)
@@ -411,8 +413,10 @@ void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL au
 	}
 }
 
+static LLFastTimer::DeclareTimer FTM_UPDATE_LAYOUT("Update LayoutStacks");
 void LLLayoutStack::updateLayout(BOOL force_resize)
 {
+	LLFastTimer ft(FTM_UPDATE_LAYOUT);
 	static LLUICachedControl<S32> resize_bar_overlap ("UIResizeBarOverlap", 0);
 	calcMinExtents();
 
@@ -431,10 +435,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		{
 			if (mAnimate)
 			{
-				(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(ANIM_OPEN_TIME));
-				if ((*panel_it)->mVisibleAmt > 0.99f)
+				if (!mAnimatedThisFrame)
 				{
-					(*panel_it)->mVisibleAmt = 1.f;
+					(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(ANIM_OPEN_TIME));
+					if ((*panel_it)->mVisibleAmt > 0.99f)
+					{
+						(*panel_it)->mVisibleAmt = 1.f;
+					}
 				}
 			}
 			else
@@ -446,10 +453,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		{
 			if (mAnimate)
 			{
-				(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(ANIM_CLOSE_TIME));
-				if ((*panel_it)->mVisibleAmt < 0.001f)
+				if (!mAnimatedThisFrame)
 				{
-					(*panel_it)->mVisibleAmt = 0.f;
+					(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(ANIM_CLOSE_TIME));
+					if ((*panel_it)->mVisibleAmt < 0.001f)
+					{
+						(*panel_it)->mVisibleAmt = 0.f;
+					}
 				}
 			}
 			else
@@ -631,10 +641,10 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		// adjust running headroom count based on new sizes
 		shrink_headroom_total += delta_size;
 
-		panelp->reshape(new_width, new_height);
-		panelp->setOrigin(cur_x, cur_y - new_height);
+		LLRect panel_rect;
+		panel_rect.setLeftTopAndSize(cur_x, cur_y, new_width, new_height);
+		panelp->setShape(panel_rect);
 
-		LLRect panel_rect = panelp->getRect();
 		LLRect resize_bar_rect = panel_rect;
 		if (mOrientation == HORIZONTAL)
 		{
@@ -705,6 +715,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		llassert_always(force_resize == FALSE);
 		updateLayout(TRUE);
 	}
+
+	 mAnimatedThisFrame = true;
 } // end LLLayoutStack::updateLayout
 
 
@@ -772,3 +784,16 @@ void LLLayoutStack::calcMinExtents()
 		}
 	}
 }
+
+// update layout stack animations, etc. once per frame
+// NOTE: we use this to size world view based on animating UI, *before* we draw the UI
+// we might still need to call updateLayout during UI draw phase, in case UI elements
+// are resizing themselves dynamically
+//static 
+void LLLayoutStack::idle()
+{
+	for (LLInstanceTracker::instance_iter it = beginInstances(); it != endInstances(); ++it)
+	{
+		(*it)->updateLayout();
+	}
+}
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index 9ded48ef6a1..11d604b7ec7 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -38,7 +38,7 @@
 
 class LLPanel;
 
-class LLLayoutStack : public LLView
+class LLLayoutStack : public LLView, LLInstanceTracker<LLLayoutStack>
 {
 public:
 	struct Params : public LLInitParam::Block<Params, LLView::Params>
@@ -81,6 +81,10 @@ class LLLayoutStack : public LLView
 	S32 getNumPanels() { return mPanels.size(); }
 
 	void updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize);
+
+
+	static void idle();
+
 protected:
 	LLLayoutStack(const Params&);
 	friend class LLUICtrlFactory;
@@ -105,6 +109,8 @@ class LLLayoutStack : public LLView
 	S32 mMinHeight;  // calculated by calcMinExtents
 	S32 mPanelSpacing;
 
+	// true if we already applied animation this frame
+	bool mAnimatedThisFrame;
 	bool mAnimate;
 	bool mClip;
 }; // end class LLLayoutStack
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index 17e32dc7a99..0ccd3047f6c 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -188,7 +188,7 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
 		T* widget = new T(params);
 		widget->initFromParams(params);
 		if (parent)
-			widget->setParent(parent);
+			parent->addChild(widget);
 		return widget;
 	}
 
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index fe7fd59de80..da564befa9b 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -1698,8 +1698,11 @@ LLView* LLView::getChildView(const std::string& name, BOOL recurse) const
 	return child;
 }
 
+static LLFastTimer::DeclareTimer FTM_FIND_VIEWS("Find Widgets");
+
 LLView* LLView::findChildView(const std::string& name, BOOL recurse) const
 {
+	LLFastTimer ft(FTM_FIND_VIEWS);
 	//richard: should we allow empty names?
 	//if(name.empty())
 	//	return NULL;
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index c3b442e0224..2607120e17c 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -267,9 +267,6 @@ class LLView : public LLMouseHandler, public LLMortician, public LLFocusableElem
 	// remove the specified child from the view, and set it's parent to NULL.
 	virtual void	removeChild(LLView* view);
 
-	// helper function for lluictrlfactory.h create<> template
-	void setParent(LLView* parent) { if (parent) parent->addChild(this); }
-
 	virtual BOOL	postBuild() { return TRUE; }
 
 	child_tab_order_t getCtrlOrder() const		{ return mCtrlOrder; }
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 2ab17d62200..71265fdd2f8 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -256,7 +256,8 @@ BOOL LLFastTimerView::handleToolTip(S32 x, S32 y, MASK mask)
 
 			LLToolTipMgr::instance().show(LLToolTip::Params()
 				.message(mHoverTimer->getToolTip(LLFastTimer::NamedTimer::HISTORY_NUM - mScrollIndex - mHoverBarIndex))
-				.sticky_rect(screen_rect));
+				.sticky_rect(screen_rect)
+				.delay_time(0.f));
 
 			return TRUE;
 		}
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 347cc3a58e4..e5700728030 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -2044,10 +2044,12 @@ BOOL LLFloaterSnapshot::postBuild()
 	LLSnapshotLivePreview::Params p;
 	p.rect(full_screen_rect);
 	LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p);
-	getRootView()->removeChild(gSnapshotFloaterView);
+	LLView* parent_view = gSnapshotFloaterView->getParent();
+	
+	parent_view->removeChild(gSnapshotFloaterView);
 	// make sure preview is below snapshot floater
-	getRootView()->addChild(previewp);
-	getRootView()->addChild(gSnapshotFloaterView);
+	parent_view->addChild(previewp);
+	parent_view->addChild(gSnapshotFloaterView);
 	
 	//move snapshot floater to special purpose snapshotfloaterview
 	gFloaterView->removeChild(this);
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index b0520874752..e3ba1b8e4ad 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -677,7 +677,7 @@ void LLPanelStandStopFlying::updatePosition()
 	//align centers of a button and a floater
 	S32 x = movement_btn->calcScreenRect().getCenterX() - getRect().getWidth()/2;
 
-	S32 y = tray->getRect().getHeight();
+	S32 y = 0;
 
 	LLFloater *move_floater = LLFloaterReg::findInstance("moveview");
 	if (move_floater)
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 4f145891ea6..d37236aadf7 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -587,6 +587,8 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 			// this is duplicated in 'else' section because it should be called BEFORE fb->reshape
 			reshape(nbRect.getWidth(), nbRect.getHeight());
 			setRect(nbRect);
+			// propagate size to parent container
+			getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 
 			fb->reshape(fbRect.getWidth(), fbRect.getHeight());
 			fb->setRect(fbRect);
@@ -600,6 +602,7 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 
 			reshape(nbRect.getWidth(), nbRect.getHeight());
 			setRect(nbRect);
+			getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 		}
 	}
 	else
@@ -614,6 +617,7 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 			// this is duplicated in 'else' section because it should be called BEFORE fb->reshape
 			reshape(nbRect.getWidth(), nbRect.getHeight());
 			setRect(nbRect);
+			getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 
 			fb->reshape(fbRect.getWidth(), fbRect.getHeight());
 			fb->setRect(fbRect);
@@ -626,16 +630,12 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 
 			reshape(nbRect.getWidth(), nbRect.getHeight());
 			setRect(nbRect);
+			getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 		}
 	}
 
 	childSetVisible("bg_icon", fpVisible);
 	childSetVisible("bg_icon_no_fav", !fpVisible);
-
-	if(LLSideTray::instanceCreated())
-	{
-		LLSideTray::getInstance()->resetPanelRect();
-	}
 }
 
 void LLNavigationBar::showFavoritesPanel(BOOL visible)
@@ -670,6 +670,7 @@ void LLNavigationBar::showFavoritesPanel(BOOL visible)
 
 		reshape(nbRect.getWidth(), nbRect.getHeight());
 		setRect(nbRect);
+		getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 
 		fb->reshape(fbRect.getWidth(), fbRect.getHeight());
 		fb->setRect(fbRect);
@@ -694,14 +695,11 @@ void LLNavigationBar::showFavoritesPanel(BOOL visible)
 
 		reshape(nbRect.getWidth(), nbRect.getHeight());
 		setRect(nbRect);
+		getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 	}
 
 	childSetVisible("bg_icon", visible);
 	childSetVisible("bg_icon_no_fav", !visible);
 
 	fb->setVisible(visible);
-	if(LLSideTray::instanceCreated())
-	{
-		LLSideTray::getInstance()->resetPanelRect();
-	}
 }
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 65a7b5322b5..e0b0b0f1e20 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -198,7 +198,8 @@ class LLFriendListUpdater : public LLAvatarListUpdater, public LLFriendObserver
 
 	~LLFriendListUpdater()
 	{
-		delete mInvObserver;
+		// will be deleted by ~LLInventoryModel
+		//delete mInvObserver;
 		LLVoiceClient::getInstance()->removeObserver(this);
 		LLAvatarTracker::instance().removeObserver(this);
 	}
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
index aaf6849fe94..7dea5eaf675 100644
--- a/indra/newview/llpanelpeoplemenus.cpp
+++ b/indra/newview/llpanelpeoplemenus.cpp
@@ -64,7 +64,6 @@ void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids,
 		if (parent)
 		{
 			parent->removeChild(mMenu);
-			mMenu->setParent(NULL);
 		}
 		delete mMenu;
 		mMenu = NULL;
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 0b2a7e8756b..f82593822d7 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -694,6 +694,7 @@ bool LLPanelPrimMediaControls::isMouseOver()
 		LLView* controls_view = NULL;
 		controls_view = getChild<LLView>("media_controls");
 		
+		//FIXME: rewrite as LLViewQuery or get hover set from LLViewerWindow?
 		if(controls_view && controls_view->getVisible())
 		{
 			controls_view->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y);
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index a34f029095b..d094f22ae13 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -163,7 +163,6 @@ void LLTeleportHistoryPanel::ContextMenu::show(LLView* spawning_view, S32 index,
 		if (parent)
 		{
 			parent->removeChild(mMenu);
-			mMenu->setParent(NULL);
 		}
 		delete mMenu;
 	}
@@ -645,7 +644,6 @@ void LLTeleportHistoryPanel::onAccordionTabRightClick(LLView *view, S32 x, S32 y
 		if (parent)
 		{
 			parent->removeChild(mAccordionTabMenu);
-			mAccordionTabMenu->setParent(NULL);
 		}
 		delete mAccordionTabMenu;
 	}
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index a11ee05532f..f0e782d44d8 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -100,7 +100,7 @@ LLSideTray* LLSideTray::getInstance()
 {
 	if (!sInstance)
 	{
-		sInstance = LLUICtrlFactory::createFromFile<LLSideTray>("panel_side_tray.xml",gViewerWindow->getRootView(), LLRootView::child_registry_t::instance());
+		sInstance = LLUICtrlFactory::createFromFile<LLSideTray>("panel_side_tray.xml",NULL, LLRootView::child_registry_t::instance());
 	}
 
 	return sInstance;
@@ -148,7 +148,6 @@ class LLSideTrayTab: public LLPanel
 	/*virtual*/ bool	addChild	(LLView* view, S32 tab_group);
 	
 	
-	void			arrange		(S32 width, S32 height);
 	void			reshape		(S32 width, S32 height, BOOL called_from_parent = TRUE);
 	
 	static LLSideTrayTab*  createInstance	();
@@ -156,8 +155,6 @@ class LLSideTrayTab: public LLPanel
 	const std::string& getDescription () const { return mDescription;}
 	const std::string& getTabTitle() const { return mTabTitle;}
 	
-	void draw();
-	
 	void			onOpen		(const LLSD& key);
 	
 private:
@@ -209,60 +206,24 @@ BOOL LLSideTrayTab::postBuild()
 
 static const S32 splitter_margin = 1;
 
-//virtual 
-void	LLSideTrayTab::arrange(S32 width, S32 height )
-{
-	if(!mMainPanel)
-		return;
-	
-	S32 offset = 0;
-
-	LLView* title_panel = findChildView(TAB_PANEL_CAPTION_NAME, true);
-
-	if(title_panel)
-	{
-		title_panel->setOrigin( 0, height - title_panel->getRect().getHeight() );
-		offset = title_panel->getRect().getHeight();
-	}
-
-	LLRect sRect = mMainPanel->getRect();
-	sRect.setLeftTopAndSize( splitter_margin, height - offset - splitter_margin, width - 2*splitter_margin, height - offset - 2*splitter_margin);
-	mMainPanel->reshape(sRect.getWidth(),sRect.getHeight());
-	mMainPanel->setRect(sRect);
-	
-
-	
-}
-
 void LLSideTrayTab::reshape		(S32 width, S32 height, BOOL called_from_parent )
 {
-	if(!mMainPanel)
-		return;
-	S32 offset = 0;
-
+	LLPanel::reshape(width, height, called_from_parent);
 	LLView* title_panel = findChildView(TAB_PANEL_CAPTION_NAME, true);
-
-	if(title_panel)
+	if (!title_panel)
 	{
-		title_panel->setOrigin( 0, height - title_panel->getRect().getHeight() );
-		title_panel->reshape(width,title_panel->getRect().getHeight());
-		offset = title_panel->getRect().getHeight();
+		// not fully constructed yet
+		return;
 	}
 
-	
-
-	LLRect sRect = mMainPanel->getRect();
-	sRect.setLeftTopAndSize( splitter_margin, height - offset - splitter_margin, width - 2*splitter_margin, height - offset - 2*splitter_margin);
-	//mMainPanel->setMaxWidth(sRect.getWidth());
-	mMainPanel->reshape(sRect.getWidth(), sRect.getHeight());
-	
-	mMainPanel->setRect(sRect);
-
-}
+	S32 title_height = title_panel->getRect().getHeight();
+	title_panel->setOrigin( 0, height - title_height );
+	title_panel->reshape(width,title_height);
 
-void LLSideTrayTab::draw()
-{
-	LLPanel::draw();
+	LLRect sRect;
+	sRect.setLeftTopAndSize( splitter_margin, height - title_height - splitter_margin, 
+							width - 2*splitter_margin, height - title_height - 2*splitter_margin);
+	mMainPanel->setShape(sRect);
 }
 
 void	LLSideTrayTab::onOpen		(const LLSD& key)
@@ -300,17 +261,20 @@ LLSideTray::LLSideTray(Params& params)
 	    ,mActiveTab(0)
 		,mCollapsed(false)
 		,mCollapseButton(0)
-	    ,mMaxBarWidth(params.rect.width)
 {
 	mCollapsed=params.collapsed;
 
-
 	LLUICtrl::CommitCallbackRegistry::Registrar& commit = LLUICtrl::CommitCallbackRegistry::currentRegistrar();
 
 	// register handler function to process data from the xml. 
 	// panel_name should be specified via "parameter" attribute.
 	commit.add("SideTray.ShowPanel", boost::bind(&LLSideTray::showPanel, this, _2, LLUUID::null));
 	LLTransientFloaterMgr::getInstance()->addControlView(this);
+
+	LLPanel::Params p;
+	p.name = "buttons_panel";
+	p.mouse_opaque = false;
+	mButtonsPanel = LLUICtrlFactory::create<LLPanel>(p);
 }
 
 
@@ -399,7 +363,7 @@ LLButton* LLSideTray::createButton	(const std::string& name,const std::string& i
 	rect.setOriginAndSize(0, 0, sidetray_params.default_button_width, sidetray_params.default_button_height); 
 
 	bparams.name(name);
-	bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_BOTTOM);
+	bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_TOP);
 	bparams.rect (rect);
 	bparams.tab_stop(false);
 	bparams.image_unselected.name(sidetray_params.tab_btn_image_normal);
@@ -416,7 +380,7 @@ LLButton* LLSideTray::createButton	(const std::string& name,const std::string& i
 		button->setImageOverlay(image);
 	}
 
-	addChildInBack(button);
+	mButtonsPanel->addChildInBack(button);
 
 	return button;
 }
@@ -500,23 +464,24 @@ void LLSideTray::reflectCollapseChange()
 	}
 	else
 	{
-		gFloaterView->setSnapOffsetRight(mMaxBarWidth);
+		gFloaterView->setSnapOffsetRight(getRect().getWidth());
 		setFocus(TRUE);
 	}
 
 	gFloaterView->refresh();
 }
 
-void LLSideTray::arrange			()
+void LLSideTray::arrange()
 {
 	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
 
 	setPanelRect();
 	
 	LLRect ctrl_rect;
-	ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-sidetray_params.default_button_width
-							,sidetray_params.default_button_width
-							,sidetray_params.default_button_height);
+	ctrl_rect.setLeftTopAndSize(0,
+								mButtonsPanel->getRect().getHeight() - sidetray_params.default_button_width,
+								sidetray_params.default_button_width,
+								sidetray_params.default_button_height);
 
 	mCollapseButton->setRect(ctrl_rect);
 
@@ -528,9 +493,10 @@ void LLSideTray::arrange			()
 	{
 		LLSideTrayTab* sidebar_tab = *child_it;
 		
-		ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-offset
-								,sidetray_params.default_button_width
-								,sidetray_params.default_button_height);
+		ctrl_rect.setLeftTopAndSize(0,
+									mButtonsPanel->getRect().getHeight()-offset,
+									sidetray_params.default_button_width,
+									sidetray_params.default_button_height);
 
 		if(mTabButtons.find(sidebar_tab->getName()) == mTabButtons.end())
 			continue;
@@ -544,14 +510,11 @@ void LLSideTray::arrange			()
 		btn->setVisible(ctrl_rect.mBottom > 0);
 	}
 
-	ctrl_rect.setLeftTopAndSize(sidetray_params.default_button_width,getRect().getHeight(),mMaxBarWidth,getRect().getHeight());
-
 	//arrange tabs
-	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
+	for ( child_vector_t::iterator child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
 	{
 		LLSideTrayTab* sidebar_tab = *child_it;
-		sidebar_tab->setRect(ctrl_rect);
-		sidebar_tab->arrange(mMaxBarWidth,getRect().getHeight());
+		sidebar_tab->setShape(getLocalRect());
 	}
 }
 
@@ -580,7 +543,7 @@ void LLSideTray::collapseSideBar()
 	{
 		mCollapseButton->setImageOverlay( home_tab->mImage );
 	}
-	mActiveTab->setVisible(FALSE);
+	//mActiveTab->setVisible(FALSE);
 	reflectCollapseChange();
 	setFocus( FALSE );
 
@@ -596,7 +559,6 @@ void LLSideTray::expandSideBar()
 	}
 	LLSD key;//empty
 	mActiveTab->onOpen(key);
-	mActiveTab->setVisible(TRUE);
 
 	reflectCollapseChange();
 }
@@ -612,15 +574,6 @@ void LLSideTray::highlightFocused()
 	*/
 }
 
-BOOL	LLSideTray::handleScrollWheel(S32 x, S32 y, S32 mask)
-{
-	BOOL ret = LLPanel::handleScrollWheel(x,y,mask);
-
-	if(!ret && childFromPoint(x,y) != 0 )
-		return TRUE;//mouse wheel over sidetray buttons, eat mouse wheel
-	return ret;
-}
-
 //virtual
 BOOL		LLSideTray::handleMouseDown	(S32 x, S32 y, MASK mask)
 {
@@ -630,58 +583,13 @@ BOOL		LLSideTray::handleMouseDown	(S32 x, S32 y, MASK mask)
 	return ret;
 }
 
-void LLSideTray::reshape			(S32 width, S32 height, BOOL called_from_parent)
+void LLSideTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 {
-	
 	LLPanel::reshape(width, height, called_from_parent);
 	if(!mActiveTab)
 		return;
 	
-	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
-
-	setPanelRect();
-
-	LLRect ctrl_rect;
-	ctrl_rect.setLeftTopAndSize(0
-							,getRect().getHeight()-sidetray_params.default_button_width
-							,sidetray_params.default_button_width
-							,sidetray_params.default_button_height);
-	
-	mCollapseButton->setRect(ctrl_rect);
-
-	//arrange tab buttons
-	child_vector_const_iter_t child_it;
-	int offset = (sidetray_params.default_button_height+sidetray_params.default_button_margin)*2;
-	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)	
-	{
-		LLSideTrayTab* sidebar_tab = *child_it;
-		
-		ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-offset
-								,sidetray_params.default_button_width
-								,sidetray_params.default_button_height);
-
-		if(mTabButtons.find(sidebar_tab->getName()) == mTabButtons.end())
-			continue;
-
-		LLButton* btn = mTabButtons[sidebar_tab->getName()];
-
-		btn->setRect(ctrl_rect);
-		offset+=sidetray_params.default_button_height;
-		offset+=sidetray_params.default_button_margin;
-
-		btn->setVisible(ctrl_rect.mBottom > 0);
-	}
-
-	//arrange tabs
-	
-	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
-	{
-		LLSideTrayTab* sidebar_tab = *child_it;
-		sidebar_tab->reshape(mMaxBarWidth,getRect().getHeight());
-		ctrl_rect.setLeftTopAndSize(sidetray_params.default_button_width,getRect().getHeight(),mMaxBarWidth,getRect().getHeight());
-		sidebar_tab->setRect(ctrl_rect);
-		
-	}
+	arrange();
 }
 
 /**
@@ -729,42 +637,12 @@ LLPanel*	LLSideTray::showPanel		(const std::string& panel_name, const LLSD& para
 static const S32	fake_offset = 132;
 static const S32	fake_top_offset = 18;
 
-void LLSideTray::resetPanelRect	()
-{
-	const LLRect& parent_rect = gViewerWindow->getRootView()->getRect();
-
-	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
-
-	S32 panel_width = sidetray_params.default_button_width;
-	panel_width += mCollapsed ? 0 : mMaxBarWidth;
-
-	S32 panel_height = parent_rect.getHeight()-fake_top_offset;
-
-	reshape(panel_width,panel_height);
-}
-
 void	LLSideTray::setPanelRect	()
 {
-	LLNavigationBar* nav_bar = LLNavigationBar::getInstance();
-	LLRect nav_rect = nav_bar->getRect();
-	
-	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
-
-	const LLRect& parent_rect = gViewerWindow->getRootView()->getRect();
-
-	S32 panel_width = sidetray_params.default_button_width;
-	panel_width += mCollapsed ? 0 : mMaxBarWidth;
-
-	S32 panel_height = parent_rect.getHeight()-fake_top_offset - nav_rect.getHeight();
-	S32 panel_top = parent_rect.mTop-fake_top_offset - nav_rect.getHeight();
-
-	LLRect panel_rect;
-	panel_rect.setLeftTopAndSize( parent_rect.mRight-panel_width, panel_top, panel_width, panel_height);
-	setRect(panel_rect);
+	// set visibility of parent container based on collapsed state
+	if (getParent())
+	{
+		getParent()->setVisible(!mCollapsed);
+	}
 }
 
-S32	LLSideTray::getTrayWidth()
-{
-	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
-	return getRect().getWidth() - (sidetray_params.default_button_width + sidetray_params.default_button_margin);
-}
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index b49251ec79b..72a9465baa0 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -118,6 +118,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 		LLPanel::setVisible(visible);
 	}
 
+	LLPanel*	getButtonsPanel() { return mButtonsPanel; }
+
 public:
 	virtual ~LLSideTray(){};
 
@@ -129,10 +131,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 	bool		addChild		(LLView* view, S32 tab_group);
 
 	BOOL		handleMouseDown	(S32 x, S32 y, MASK mask);
-	BOOL		handleScrollWheel(S32 x, S32 y, S32 mask);
 	
 	void		reshape			(S32 width, S32 height, BOOL called_from_parent = TRUE);
-	S32			getTrayWidth();
 
 	void		resetPanelRect	();
 	
@@ -163,15 +163,15 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 
 private:
 
-	std::map<std::string,LLButton*>	mTabButtons;
+	LLPanel*						mButtonsPanel;
+	typedef std::map<std::string,LLButton*> button_map_t;
+	button_map_t					mTabButtons;
 	child_vector_t					mTabs;
 	LLSideTrayTab*					mActiveTab;	
 	
 	LLButton*						mCollapseButton;
 	bool							mCollapsed;
 	
-	S32								mMaxBarWidth;
-
 	static LLSideTray*				sInstance;
 };
 
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 86303699717..b15019f830f 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1405,6 +1405,9 @@ void LLViewerWindow::initBase()
 	main_view->setShape(full_window);
 	getRootView()->addChild(main_view);
 
+	// placeholder widget that controls where "world" is rendered
+	mWorldViewPlaceholder = main_view->getChildView("world_view_rect");
+
 	// Constrain floaters to inside the menu and status bar regions.
 	gFloaterView = getRootView()->getChild<LLFloaterView>("Floater View");
 	gSnapshotFloaterView = getRootView()->getChild<LLSnapshotFloaterView>("Snapshot Floater View");
@@ -1458,9 +1461,6 @@ void LLViewerWindow::initWorldUI()
 
 	gIMMgr = LLIMMgr::getInstance();
 
-	// side tray
-	//getRootView()->addChild(LLSideTray::getInstance());
-
 	getRootView()->sendChildToFront(gFloaterView);
 	getRootView()->sendChildToFront(gSnapshotFloaterView);
 
@@ -1468,7 +1468,7 @@ void LLViewerWindow::initWorldUI()
 	LLPanel* bottom_tray_container = getRootView()->getChild<LLPanel>("bottom_tray_container");
 	LLBottomTray* bottom_tray = LLBottomTray::getInstance();
 	bottom_tray->setShape(bottom_tray_container->getLocalRect());
-	bottom_tray->setFollows(FOLLOWS_ALL);
+	bottom_tray->setFollowsAll();
 	bottom_tray_container->addChild(bottom_tray);
 	bottom_tray_container->setVisible(TRUE);
 
@@ -1498,7 +1498,8 @@ void LLViewerWindow::initWorldUI()
 	// Status bar
 	LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container");
 	gStatusBar = new LLStatusBar(status_bar_container->getLocalRect());
-	gStatusBar->setFollows(FOLLOWS_ALL);
+	gStatusBar->setFollowsAll();
+	gStatusBar->setShape(status_bar_container->getLocalRect());
 	// sync bg color with menu bar
 	gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor().get() );
 	status_bar_container->addChild(gStatusBar);
@@ -1559,10 +1560,24 @@ void LLViewerWindow::initWorldUI()
 	LLPanel* panel_ssf_container = getRootView()->getChild<LLPanel>("stand_stop_flying_container");
 	LLPanelStandStopFlying* panel_stand_stop_flying	= LLPanelStandStopFlying::getInstance();
 	panel_stand_stop_flying->setShape(panel_ssf_container->getLocalRect());
-	panel_stand_stop_flying->setFollows(FOLLOWS_ALL);
+	panel_stand_stop_flying->setFollowsAll();
 	panel_ssf_container->addChild(panel_stand_stop_flying);
 	panel_ssf_container->setVisible(TRUE);
 
+	// put sidetray in container
+	LLPanel* side_tray_container = getRootView()->getChild<LLPanel>("side_tray_container");
+	LLSideTray* sidetrayp = LLSideTray::getInstance();
+	sidetrayp->setShape(side_tray_container->getLocalRect());
+	sidetrayp->setFollowsAll();
+	side_tray_container->addChild(sidetrayp);
+	side_tray_container->setVisible(FALSE);
+	
+	// put sidetray buttons in their own panel
+	LLPanel* buttons_panel = sidetrayp->getButtonsPanel();
+	LLPanel* buttons_panel_container = getRootView()->getChild<LLPanel>("side_bar_tabs");
+	buttons_panel->setShape(buttons_panel_container->getLocalRect());
+	buttons_panel->setFollowsAll();
+	buttons_panel_container->addChild(buttons_panel);
 }
 
 // Destroy the UI
@@ -2272,29 +2287,6 @@ void LLViewerWindow::moveCursorToCenter()
 	LLUI::setMousePositionScreen(x, y);	
 }
 
-void LLViewerWindow::updateBottomTrayRect()
-{
-	//if(LLBottomTray::instanceExists() && LLSideTray::instanceCreated())
-	//{
-	//	S32 side_tray_width = 0;
-	//	if(LLSideTray::getInstance()->getVisible())
-	//	{
-	//		side_tray_width = LLSideTray::getInstance()->getTrayWidth();
-	//	}
-
-	//	LLBottomTray* bottom_tray = LLBottomTray::getInstance();
-	//	S32 right = llround((F32)mWindowRect.mRight / mDisplayScale.mV[VX]) - side_tray_width;
-
-	//	LLRect rc = bottom_tray->getRect();
-	//	if (right != rc.mRight)
-	//	{
-	//		rc.mRight = right;
-	//		bottom_tray->reshape(rc.getWidth(), rc.getHeight(), FALSE);
-	//		bottom_tray->setRect(rc);
-	//		mOnBottomTrayWidthChanged();
-	//	}
-	//}
-}
 
 //////////////////////////////////////////////////////////////////////
 //
@@ -2336,9 +2328,10 @@ void LLViewerWindow::updateUI()
 {
 	static std::string last_handle_msg;
 
-	updateWorldViewRect();
+	// animate layout stacks so we have up to date rect for world view
+	LLLayoutStack::idle();
 
-	updateBottomTrayRect();
+	updateWorldViewRect();
 
 	LLView::sMouseHandlerMessage.clear();
 
@@ -2838,32 +2831,20 @@ void LLViewerWindow::updateKeyboardFocus()
 		LLSideTray::getInstance()->highlightFocused();
 }
 
+static LLFastTimer::DeclareTimer FTM_UPDATE_WORLD_VIEW("Update World View");
 void LLViewerWindow::updateWorldViewRect(bool use_full_window)
 {
-	if (!LLSideTray::instanceCreated()) return;
+	LLFastTimer ft(FTM_UPDATE_WORLD_VIEW);
 
 	// start off using whole window to render world
 	LLRect new_world_rect = mWindowRect;
 
 	if (use_full_window == false)
 	{
-		// pull in right side of world view based on sidetray
-		LLSideTray* sidetray = LLSideTray::getInstance();
-		if (sidetray->getVisible())
-		{
-			new_world_rect.mRight -= llround((F32)sidetray->getTrayWidth() * mDisplayScale.mV[VX]);
-		}
-
-		// push top of world view below nav bar
-		if (LLNavigationBar::getInstance()->getVisible())
-		{
-			LLNavigationBar* barp = LLNavigationBar::getInstance();
-			LLRect nav_bar_rect;
-			if(barp->localRectToOtherView(barp->getLocalRect(), &nav_bar_rect, mRootView))
-			{
-				new_world_rect.mTop = llround((F32)LLNavigationBar::getInstance()->getRect().mBottom * mDisplayScale.mV[VY]);
-			}
-		}
+		new_world_rect = mWorldViewPlaceholder->calcScreenRect();
+		// clamp to at least a 1x1 rect so we don't try to allocate zero width gl buffers
+		new_world_rect.mTop = llmax(new_world_rect.mTop, new_world_rect.mBottom + 1);
+		new_world_rect.mRight = llmax(new_world_rect.mRight, new_world_rect.mLeft + 1);
 	}
 
 	if (mWorldViewRect != new_world_rect)
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index d7c403739e4..31a458a15b5 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -294,7 +294,6 @@ class LLViewerWindow : public LLWindowCallbacks
 	void				updateKeyboardFocus();		
 
 	void			updateWorldViewRect(bool use_full_window=false);
-	void			updateBottomTrayRect();
 
 	BOOL			handleKey(KEY key, MASK mask);
 	void			handleScrollWheel	(S32 clicks);
@@ -451,6 +450,8 @@ class LLViewerWindow : public LLWindowCallbacks
 	BOOL			mIgnoreActivate;
 
 	std::string		mInitAlert;			// Window / GL initialization requires an alert
+
+	LLView*			mWorldViewPlaceholder;	// widget that spans the portion of screen dedicated to rendering the 3d world
 	
 	class LLDebugText* mDebugText; // Internal class for debug text
 	
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 0dc1a88ee89..eac83c0bdc0 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -506,8 +506,10 @@ void LLPipeline::destroyGL()
 	}
 }
 
+static LLFastTimer::DeclareTimer FTM_RESIZE_SCREEN_TEXTURE("Resize Screen Texture");
 void LLPipeline::resizeScreenTexture()
 {
+	LLFastTimer ft(FTM_RESIZE_SCREEN_TEXTURE);
 	if (gPipeline.canUseVertexShaders() && assertInitialized())
 	{
 		GLuint resX = gViewerWindow->getWorldViewWidth();
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 2d69465b580..08f7ee456e4 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -1,119 +1,130 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  follows="left|right|top|bottom"
- height="768" 
+ height="768"
  layout="topleft"
  left="0"
  mouse_opaque="false"
- name="screen"
+ name="main_view"
  width="1024">
   <layout_stack border_size="0"
                 follows="all"
-                height="768" 
-                mouse_opaque="false" 
+                mouse_opaque="false"
+                height="772"
                 name="menu_stack"
-                orientation="vertical">
-    <!-- filename="panel_status_bar.xml"-->
+                orientation="vertical"
+                top="0">
     <layout_panel auto_resize="false"
+                  min_height="19"
                   mouse_opaque="false"
                   name="status_bar_container"
+                  height="19"
                   width="1024"
                   visible="false"/>
-    <!--filename="panel_navigation_bar.xml"-->
     <layout_panel auto_resize="false"
-                  height="65" 
-                  mouse_opaque="false" 
+                  height="65"
+                  mouse_opaque="false"
                   name="nav_bar_container"
                   width="1024"
                   visible="false"/>
-    <layout_stack auto_resize="true" 
-                  border_size="0" 
-                  follows="all" 
-                  height="500" 
+    <panel        auto_resize="true"
+                  follows="all"
+                  height="500"
+                  layout="topleft"
                   mouse_opaque="false"
-                  name="hud_stack" 
-                  orientation="horizontal" 
+                  name="hud"
                   width="1024">
-      <panel auto_resize="true" 
-             follows="all" 
-             height="500" 
-             layout="topleft" 
-             mouse_opaque="false"
-             name="main_view" 
-             user_resize="true" 
-             width="500">
-        <layout_stack bottom="500" 
-                      follows="all" 
-                      height="500"
-                      mouse_opaque="false"
-                      name="hud_stack" 
-                      orientation="vertical">
-          <panel auto_resize="true" 
-                 follows="all" 
-                 height="500" 
-                 layout="topleft" 
-                 mouse_opaque="false"
-                 name="hud container" 
-                 width="500">
-            <debug_view follows="all"
-                        left="0" 
-                        top="0"
-                        mouse_opaque="false" 
+      <layout_stack border_size="0"
+                    follows="all"
+                    height="500"
+                    left="0"
+                    mouse_opaque="false"
+                    name="hud_stack"
+                    orientation="horizontal"
+                    top="0"
+                    width="1024">
+        <panel auto_resize="true"
+               follows="all"
+               height="500"
+               layout="topleft"
+               mouse_opaque="false"
+               name="main_view"
+               user_resize="true"
+               width="500">
+          <layout_stack border_size="0"
+                        bottom="500"
+                        follows="all"
                         height="500"
-                        name="DebugView"
-                        width="500"/>
-
-              <panel follows="right|top|bottom" 
-                     height="500" 
+                        left="0"
+                        mouse_opaque="false"
+                        name="world_stack"
+                        orientation="vertical">
+            <panel auto_resize="true"
+                   follows="all"
+                   height="500"
+                   layout="topleft"
+                   mouse_opaque="false"
+                   name="hud container"
+                   width="500">
+              <view bottom="500"
+                    follows="all"
+                    height="500"
+                    left="0"
+                    mouse_opaque="false"
+                    name="world_view_rect"
+                    width="500"/>
+              <panel follows="right|top|bottom"
+                     height="500"
                      mouse_opaque="false"
-                     name="side_bar_tabs" 
-                     right="500" 
-                     top="0" 
+                     name="side_bar_tabs"
+                     right="500"
+                     top="0"
                      width="32"/>
-          </panel>
-          <!--filename="panel_stand_stop_flying.xml"-->
-          <layout_panel auto_resize="false"
-                 follows="all"
-                 min_height="25"
-                 mouse_opaque="false"
-                 name="stand_stop_flying_container"
-                 visible="false"/>
-          <!--filename="panel_bottomtray.xml"-->
-          <layout_panel auto_resize="false" 
-                 follows="all" 
-                 min_height="33" 
-                 mouse_opaque="false"
-                 name="bottom_tray_container"
-                 visible="false"/>
-        </layout_stack>
-        <floater_view follows="all" 
-                      height="500" 
-                      mouse_opaque="false" 
-                      name="Floater View"
-                      tab_group="-1" 
-                      tab_stop="false"
-                      top="0"/>
-        <snapshot_floater_view enabled="false"
-                               follows="all"
-                               height="500"
-                               left="0" 
-                               mouse_opaque="false"
-                               name="Snapshot Floater View"
-                               tab_stop="false"
-                               top="0"
-                               visible="false"/>
-      </panel>
-      <!-- side tray -->
-      <layout_panel auto_resize="false" 
-                    follows="all" 
-                    height="500" 
-                    min_width="333" 
+              <panel bottom="500"
+                     follows="left|right|bottom"
+                     height="25"
+                     left="0"
+                     mouse_opaque="false"
+                     name="stand_stop_flying_container"
+                     visible="false"
+                     width="500"/>
+            </panel>
+            <layout_panel auto_resize="false"
+                   follows="all"
+                   min_height="33"
+                   mouse_opaque="false"
+                   name="bottom_tray_container"
+                   visible="false"/>
+          </layout_stack>
+        </panel>
+        <!-- side tray -->
+        <layout_panel auto_resize="false"
+                      follows="all"
+                      height="500"
+                      min_width="333"
+                      mouse_opaque="false"
+                      name="side_tray_container"
+                      user_resize="true"
+                      visible="false"
+                      width="333"/>
+      </layout_stack>
+      <floater_view follows="all"
+                    height="500"
+                    left="0"
                     mouse_opaque="false"
-                    name="side_tray_container" 
-                    user_resize="true"
-                    visible="false" 
-                    width="333"/>
-    </layout_stack>
+                    name="Floater View"
+                    tab_group="-1"
+                    tab_stop="false"
+                    top="0"
+                    width="1024"/>
+      <debug_view follows="all"
+                  left="0"
+                  top="0"
+                  mouse_opaque="false"
+                  height="500"
+                  name="DebugView"
+                  width="1024"/>
+  </panel>
   </layout_stack>
   <notify_box_view top="0"
                    follows="all"
@@ -128,6 +139,16 @@
                mouse_opaque="false"
                name="Menu Holder"
                width="1024"/>
+  <snapshot_floater_view enabled="false"
+                         follows="all"
+                         height="768"
+                         left="0"
+                         mouse_opaque="false"
+                         name="Snapshot Floater View"
+                         tab_stop="false"
+                         top="0"
+                         visible="false"
+                         width="1024"/>
   <tooltip_view top="0"
                 follows="all"
                 height="768"
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index f833e0a1cbb..faa38084f1a 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -31,6 +31,7 @@
          height="10"
          image_name="spacer24.tga"
          layout="topleft"
+         min_width="4"
          left="0"
          top="0"
          width="4" />
@@ -44,7 +45,7 @@
          min_height="23"
          width="310"
          top="0"
-         min_width="300"
+         min_width="310"
          name="chat_bar"
          user_resize="false"
          filename="panel_nearby_chat_bar.xml" />
@@ -57,30 +58,31 @@
          min_height="28"
          width="100"
          top_delta="0"
-         min_width="96"
+         min_width="100"
          name="speak_panel"
          user_resize="false">
-         <talk_button
-          follows="right"
-          height="23"
-          speak_button.tab_stop="true"
-          show_button.tab_stop="true"
-          layout="topleft"
-          left="0"
-          name="talk"
-          top="3"
-          width="100" />
+          <talk_button
+           follows="right"
+           height="23"
+           speak_button.tab_stop="true"
+           show_button.tab_stop="true"
+           layout="topleft"
+           left="0"
+           name="talk"
+           top="3"
+           width="100" />
         </layout_panel>
-		 <icon
-         auto_resize="false"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
-         left="0"
-         name="DUMMY"
-         top="0"
-         width="4"/>
+        <icon
+            auto_resize="false"
+            follows="left|right"
+            height="10"
+            image_name="spacer24.tga"
+            layout="topleft"
+            left="0"
+            name="DUMMY"
+            min_width="4"
+            top="0"
+            width="4"/>
         <layout_panel
          mouse_opaque="false"
          auto_resize="false"
@@ -112,6 +114,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
+         min_width="4" 
          name="DUMMY"
          top="0"
          width="4"/>
@@ -149,6 +152,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
+         min_width="4" 
          name="DUMMY"
          top="0"
          width="4"/>
@@ -188,6 +192,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
+         min_width="4" 
          name="DUMMY"
          top="0"
          width="4"/>
@@ -243,6 +248,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
+         min_width="4" 
          top="0"
          width="5"/>
         <layout_panel
@@ -288,6 +294,7 @@
          height="10"
          image_name="spacer24.tga"
          layout="topleft"
+         min_width="4" 
          right="-1"
          top="0"
          width="26"/>
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index 7b9c9f47a2f..1171a8f0b5d 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -3,7 +3,7 @@
  background_opaque="true"
  background_visible="true"
  bg_opaque_color="MouseGray"
- follows="top|left|right"
+ follows="all"
  height="19"
  layout="topleft"
  left="0"
diff --git a/indra/newview/skins/default/xui/en/widgets/context_menu.xml b/indra/newview/skins/default/xui/en/widgets/context_menu.xml
new file mode 100644
index 00000000000..459706c689c
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/context_menu.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu visible="false"/>
diff --git a/indra/newview/skins/default/xui/en/widgets/side_tray.xml b/indra/newview/skins/default/xui/en/widgets/side_tray.xml
index 8b4a5afbe95..022564c12fc 100644
--- a/indra/newview/skins/default/xui/en/widgets/side_tray.xml
+++ b/indra/newview/skins/default/xui/en/widgets/side_tray.xml
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <side_tray tab_btn_image="TaskPanel_Tab_Off"
-        tab_btn_image_selected="TaskPanel_Tab_Selected"
-		tab_btn_width="32"
-		tab_btn_height="40"
-		tab_btn_margin="1"
-        >
+           tab_btn_image_selected="TaskPanel_Tab_Selected"
+           tab_btn_width="32"
+           tab_btn_height="40"
+           tab_btn_margin="1">
 </side_tray>
diff --git a/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml b/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml
new file mode 100644
index 00000000000..48950a98ad5
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu visible="false"/>
-- 
GitLab


From b7d51146344cb2c50828cc4860cd61a90ee6e3c1 Mon Sep 17 00:00:00 2001
From: callum <none@none>
Date: Mon, 9 Nov 2009 15:49:15 -0800
Subject: [PATCH 285/306] Fix for DEV-41797 - "LL_QUICKTIME_ENABLED is often
 unset on Windows builds"

---
 indra/cmake/QuickTimePlugin.cmake | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/cmake/QuickTimePlugin.cmake b/indra/cmake/QuickTimePlugin.cmake
index 8afd8f304cc..02f432e3c10 100644
--- a/indra/cmake/QuickTimePlugin.cmake
+++ b/indra/cmake/QuickTimePlugin.cmake
@@ -12,13 +12,13 @@ elseif (WINDOWS)
   set(QUICKTIME_SDK_DIR "$ENV{PROGRAMFILES}/QuickTime SDK"
       CACHE PATH "Location of the QuickTime SDK.")
 
-  find_library(DEBUG_QUICKTIME_LIBRARY qtmlclient
+  find_library(DEBUG_QUICKTIME_LIBRARY qtmlclient.lib
                PATHS
                ${ARCH_PREBUILT_DIRS_DEBUG}
                "${QUICKTIME_SDK_DIR}\\libraries"
                )
 
-  find_library(RELEASE_QUICKTIME_LIBRARY qtmlclient
+  find_library(RELEASE_QUICKTIME_LIBRARY qtmlclient.lib
                PATHS
                ${ARCH_PREBUILT_DIRS_RELEASE}
                "${QUICKTIME_SDK_DIR}\\libraries"
-- 
GitLab


From 5cbf5b63fc9db6fa693cd70c01170db97f1c1442 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 9 Nov 2009 15:55:12 -0800
Subject: [PATCH 286/306] First name field on login screen is now same size as
 last name. Reviewed with Ambroff

---
 indra/newview/skins/default/xui/en/panel_login.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 1646cba0a73..cb5ec153875 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -51,6 +51,7 @@
     </text>
     <line_editor
      follows="left|bottom"
+     font="SansSerif"
      handle_edit_keys_directly="true"
      height="20"
      left_delta="0"
-- 
GitLab


From 668ba958c77d46c87f54f8d6e77b5aac921b5733 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 9 Nov 2009 15:59:53 -0800
Subject: [PATCH 287/306] Disabled saving notifications to disk because the
 load code hasn't worked for months, it spams the logs, and it hits the disk.
 Discussed with Q, the author.

---
 indra/llui/llnotifications.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index ef222bad608..eb8cc3e2c50 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -81,6 +81,11 @@ class LLNotificationHistoryChannel : public LLNotificationChannel
 
 	void savePersistentNotifications()
 	{
+		/* NOTE: As of 2009-11-09 the reload of notifications on startup does not
+		work, and has not worked for months.  Skip saving notifications until the
+		read can be fixed, because this hits the disk once per notification and
+		causes log spam.  James
+
 		llinfos << "Saving open notifications to " << mFileName << llendl;
 
 		llofstream notify_file(mFileName.c_str());
@@ -107,6 +112,7 @@ class LLNotificationHistoryChannel : public LLNotificationChannel
 
 		LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
 		formatter->format(output, notify_file, LLSDFormatter::OPTIONS_PRETTY);
+		*/
 	}
 
 	void loadPersistentNotifications()
-- 
GitLab


From 2f4174692e91768ad1302fbfadb5e12fb8670da3 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 9 Nov 2009 16:00:46 -0800
Subject: [PATCH 288/306] DEV-42409 Email snapshot now fills in sender email
 address as before. Sending now works. Reviewed with Ambroff.

---
 indra/newview/llfloaterpostcard.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index 938370b732a..ae1a99e5fc4 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -291,7 +291,7 @@ void LLFloaterPostcard::uploadCallback(const LLUUID& asset_id, void *user_data,
 // static
 void LLFloaterPostcard::updateUserInfo(const std::string& email)
 {
-	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel");
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("postcard");
 	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin();
 		 iter != inst_list.end(); ++iter)
 	{
-- 
GitLab


From 2bc97bd68a774dd373c5688b5dc660abe90b37cc Mon Sep 17 00:00:00 2001
From: richard <none@none>
Date: Mon, 9 Nov 2009 16:01:21 -0800
Subject: [PATCH 289/306] renamed LLLayoutStack::idle to
 LLLayoutStack::updateClass converted mWorldViewPlaceholder to a
 LLHandle<LLView> improved layout of panel_bottomtray

reviewed by James
---
 indra/llui/lllayoutstack.cpp                            | 2 +-
 indra/llui/lllayoutstack.h                              | 2 +-
 indra/newview/llsidetray.cpp                            | 6 +++---
 indra/newview/llsidetray.h                              | 5 +----
 indra/newview/llviewerwindow.cpp                        | 8 ++++----
 indra/newview/llviewerwindow.h                          | 2 +-
 indra/newview/skins/default/xui/en/panel_bottomtray.xml | 4 ++--
 7 files changed, 13 insertions(+), 16 deletions(-)

diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index 596b3a3e70a..5999e1a29e0 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -790,7 +790,7 @@ void LLLayoutStack::calcMinExtents()
 // we might still need to call updateLayout during UI draw phase, in case UI elements
 // are resizing themselves dynamically
 //static 
-void LLLayoutStack::idle()
+void LLLayoutStack::updateClass()
 {
 	for (LLInstanceTracker::instance_iter it = beginInstances(); it != endInstances(); ++it)
 	{
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index 11d604b7ec7..8475079f5eb 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -83,7 +83,7 @@ class LLLayoutStack : public LLView, LLInstanceTracker<LLLayoutStack>
 	void updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize);
 
 
-	static void idle();
+	static void updateClass();
 
 protected:
 	LLLayoutStack(const Params&);
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index f0e782d44d8..061587f11b7 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -455,7 +455,7 @@ void		LLSideTray::onToggleCollapse()
 
 void LLSideTray::reflectCollapseChange()
 {
-	setPanelRect();
+	updateSidetrayVisibility();
 
 	if(mCollapsed)
 	{
@@ -475,7 +475,7 @@ void LLSideTray::arrange()
 {
 	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
 
-	setPanelRect();
+	updateSidetrayVisibility();
 	
 	LLRect ctrl_rect;
 	ctrl_rect.setLeftTopAndSize(0,
@@ -637,7 +637,7 @@ LLPanel*	LLSideTray::showPanel		(const std::string& panel_name, const LLSD& para
 static const S32	fake_offset = 132;
 static const S32	fake_top_offset = 18;
 
-void	LLSideTray::setPanelRect	()
+void	LLSideTray::updateSidetrayVisibility()
 {
 	// set visibility of parent container based on collapsed state
 	if (getParent())
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 72a9465baa0..4d6081e230c 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -134,9 +134,6 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 	
 	void		reshape			(S32 width, S32 height, BOOL called_from_parent = TRUE);
 
-	void		resetPanelRect	();
-	
-
 protected:
 	LLSideTrayTab* getTab		(const std::string& name);
 
@@ -147,7 +144,7 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 
 	void		toggleTabButton	(LLSideTrayTab* tab);
 
-	void		setPanelRect	();
+	void		updateSidetrayVisibility();
 
 	
 
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index b15019f830f..5e5aec5cb95 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1406,7 +1406,7 @@ void LLViewerWindow::initBase()
 	getRootView()->addChild(main_view);
 
 	// placeholder widget that controls where "world" is rendered
-	mWorldViewPlaceholder = main_view->getChildView("world_view_rect");
+	mWorldViewPlaceholder = main_view->getChildView("world_view_rect")->getHandle();
 
 	// Constrain floaters to inside the menu and status bar regions.
 	gFloaterView = getRootView()->getChild<LLFloaterView>("Floater View");
@@ -2329,7 +2329,7 @@ void LLViewerWindow::updateUI()
 	static std::string last_handle_msg;
 
 	// animate layout stacks so we have up to date rect for world view
-	LLLayoutStack::idle();
+	LLLayoutStack::updateClass();
 
 	updateWorldViewRect();
 
@@ -2839,9 +2839,9 @@ void LLViewerWindow::updateWorldViewRect(bool use_full_window)
 	// start off using whole window to render world
 	LLRect new_world_rect = mWindowRect;
 
-	if (use_full_window == false)
+	if (use_full_window == false && mWorldViewPlaceholder.get())
 	{
-		new_world_rect = mWorldViewPlaceholder->calcScreenRect();
+		new_world_rect = mWorldViewPlaceholder.get()->calcScreenRect();
 		// clamp to at least a 1x1 rect so we don't try to allocate zero width gl buffers
 		new_world_rect.mTop = llmax(new_world_rect.mTop, new_world_rect.mBottom + 1);
 		new_world_rect.mRight = llmax(new_world_rect.mRight, new_world_rect.mLeft + 1);
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 31a458a15b5..6750c39dbbf 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -451,7 +451,7 @@ class LLViewerWindow : public LLWindowCallbacks
 
 	std::string		mInitAlert;			// Window / GL initialization requires an alert
 
-	LLView*			mWorldViewPlaceholder;	// widget that spans the portion of screen dedicated to rendering the 3d world
+	LLHandle<LLView> mWorldViewPlaceholder;	// widget that spans the portion of screen dedicated to rendering the 3d world
 	
 	class LLDebugText* mDebugText; // Internal class for debug text
 	
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index faa38084f1a..d990ebfd4a9 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -56,9 +56,9 @@
          height="28"
          layout="topleft"
          min_height="28"
-         width="100"
+         width="104"
          top_delta="0"
-         min_width="100"
+         min_width="104"
          name="speak_panel"
          user_resize="false">
           <talk_button
-- 
GitLab


From 17ab5928c2416b4787e03c54307add77217d831e Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Tue, 10 Nov 2009 00:10:44 +0000
Subject: [PATCH 290/306] DEV-41317 DEV-42311: Enabled the "Call" button in
 more side panels.

The various People panels now have Call buttons that work. Currently
we only support single selection of users in lists for P2P voice chat.
Multiple selection for ad-hoc chat is next...
---
 indra/newview/llpanelavatar.cpp               |   4 +-
 indra/newview/llpanelpeople.cpp               |  32 ++-
 .../skins/default/xui/en/panel_notes.xml      |   1 -
 .../skins/default/xui/en/panel_people.xml     | 210 ++++++------------
 4 files changed, 93 insertions(+), 154 deletions(-)

diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index 6413d939f0e..3b54f1546e8 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -255,7 +255,7 @@ void LLPanelAvatarNotes::onTeleportButtonClick()
 
 void LLPanelAvatarNotes::onCallButtonClick()
 {
-	//*TODO not implemented.
+	LLAvatarActions::startCall(getAvatarId());
 }
 
 void LLPanelAvatarNotes::onShareButtonClick()
@@ -544,7 +544,7 @@ void LLPanelAvatarProfile::onTeleportButtonClick()
 
 void LLPanelAvatarProfile::onCallButtonClick()
 {
-	//*TODO not implemented
+	LLAvatarActions::startCall(getAvatarId());
 }
 
 void LLPanelAvatarProfile::onShareButtonClick()
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index bb6cdd2f78e..0c66e7155c5 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -588,14 +588,9 @@ void LLPanelPeople::updateRecentList()
 
 void LLPanelPeople::buttonSetVisible(std::string btn_name, BOOL visible)
 {
-	// Currently all bottom buttons are wrapped with layout panels.
-	// Hiding a button has no effect: the panel still occupies its space.
-	// So we have to hide the whole panel (along with its button)
-	// to free some space up.
-	LLButton* btn = getChild<LLView>("button_bar")->getChild<LLButton>(btn_name);
-	LLPanel* btn_parent = dynamic_cast<LLPanel*>(btn->getParent());
-	if (btn_parent)
-		btn_parent->setVisible(visible);
+	// To make sure we're referencing the right widget (a child of the button bar).
+	LLButton* button = getChild<LLView>("button_bar")->getChild<LLButton>(btn_name);
+	button->setVisible(visible);
 }
 
 void LLPanelPeople::buttonSetEnabled(const std::string& btn_name, bool enabled)
@@ -624,14 +619,16 @@ void LLPanelPeople::updateButtons()
 	std::vector<LLUUID> selected_uuids;
 	getCurrentItemIDs(selected_uuids);
 	bool item_selected = (selected_uuids.size() == 1);
+	bool multiple_selected = (selected_uuids.size() >= 1);
 
 	buttonSetVisible("group_info_btn",		group_tab_active);
 	buttonSetVisible("chat_btn",			group_tab_active);
 	buttonSetVisible("add_friend_btn",		nearby_tab_active || recent_tab_active);
 	buttonSetVisible("view_profile_btn",	!group_tab_active);
 	buttonSetVisible("im_btn",				!group_tab_active);
+	buttonSetVisible("call_btn",			!group_tab_active);
 	buttonSetVisible("teleport_btn",		friends_tab_active);
-	buttonSetVisible("share_btn",			!recent_tab_active && false); // not implemented yet
+	buttonSetVisible("share_btn",			nearby_tab_active || friends_tab_active);
 
 	if (group_tab_active)
 	{
@@ -664,8 +661,8 @@ void LLPanelPeople::updateButtons()
 
 	buttonSetEnabled("teleport_btn",		friends_tab_active && item_selected);
 	buttonSetEnabled("view_profile_btn",	item_selected);
-	buttonSetEnabled("im_btn",				(selected_uuids.size() >= 1)); // allow starting the friends conference for multiple selection
-	buttonSetEnabled("call_btn",			item_selected && false); // not implemented yet
+	buttonSetEnabled("im_btn",				multiple_selected); // allow starting the friends conference for multiple selection
+	buttonSetEnabled("call_btn",			item_selected);
 	buttonSetEnabled("share_btn",			item_selected && false); // not implemented yet
 
 	bool none_group_selected = item_selected && selected_id.isNull();
@@ -1071,7 +1068,18 @@ bool LLPanelPeople::onRecentViewSortMenuItemCheck(const LLSD& userdata)
 
 void LLPanelPeople::onCallButtonClicked()
 {
-	// *TODO: not implemented yet
+	std::vector<LLUUID> selected_uuids;
+	getCurrentItemIDs(selected_uuids);
+
+	if (selected_uuids.size() == 1)
+	{
+		// initiate a P2P voice chat with the selected user
+		LLAvatarActions::startCall(getCurrentItemID());
+	}
+	else if (selected_uuids.size() > 1)
+	{
+		// *NOTE: ad-hoc voice chat not implemented yet
+	}
 }
 
 void LLPanelPeople::onTeleportButtonClicked()
diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml
index b9c9100ebcd..c02dabed2c1 100644
--- a/indra/newview/skins/default/xui/en/panel_notes.xml
+++ b/indra/newview/skins/default/xui/en/panel_notes.xml
@@ -132,7 +132,6 @@
          left_pad="5"
          width="40" />
         <button
-         enabled="false"
          follows="bottom|left"
          height="19"
          label="Call"
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index d6e2aa64fa5..15fdd73bdc1 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -329,156 +329,88 @@ background_visible="true"
             </panel>
         </panel>
     </tab_container>
-    <layout_stack
-     animate="false"
-     border_size="0"
-     follows="left|right|bottom"
+    <panel
+     follows="bottom|left"
      height="25"
      layout="topleft"
      left="10"
      name="button_bar"
-     orientation="horizontal"
      width="313">
-        <layout_panel
-         default_tab_group="1"
-         follows="left|top"
-         height="25"
-         layout="topleft"
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         top="4"
          left="0"
-         name="view_profile_btn_panel"
-         top="-25"
-         width="100">
-            <button
-             follows="top|left"
-             font="SansSerifSmall"
-             height="19"
-             label="Profile"
-             layout="topleft"
-             name="view_profile_btn"
-             tool_tip="Show picture, groups, and other residents information"
-             width="100" />
-        </layout_panel>
-        <layout_panel
-         default_tab_group="1"
-         follows="left|top"
          height="19"
+         label="Profile"
          layout="topleft"
-         left="0"
-         min_width="80"
-         name="group_info_btn_panel"
-         width="100">
-            <button
-             follows="top|left"
-             font="SansSerifSmall"
-             height="19"
-             label="Group Profile"
-             layout="topleft"
-             name="group_info_btn"
-             tool_tip="Show group information"
-             width="100" />
-        </layout_panel>
-        <layout_panel
-         default_tab_group="1"
-         follows="left|top"
-         height="25"
-         layout="topleft"
-         left_pad="5"
-         min_width="45"
-         name="chat_btn_panel"
-         top_delta="0"
-         width="100">
-            <button
-             follows="top|left"
-             font="SansSerifSmall"
-             height="19"
-             label="Group Chat"
-             layout="topleft"
-             name="chat_btn"
-             tool_tip="Open chat session"
-             width="100" />
-        </layout_panel>
-        <layout_panel
-         default_tab_group="1"
-         follows="left|top|"
-         height="25"
+         name="view_profile_btn"
+         tool_tip="Show picture, groups, and other residents information"
+         width="70" />
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         top="4"
+         left_pad="2"
+         height="19"
+         label="IM"
          layout="topleft"
-         left_pad="5"
-         min_width="35"
-         name="im_btn_panel"
-         top_delta="0"
-         width="50">
-            <button
-             follows="top|left"
-             font="SansSerifSmall"
-             height="19"
-             label="IM"
-             layout="topleft"
-             name="im_btn"
-             tool_tip="Open instant message session"
-             width="50" />
-        </layout_panel>
-        <layout_panel
-         default_tab_group="1"
-         follows="left|top|right"
-         height="25"
+         name="im_btn"
+         tool_tip="Open instant message session"
+         width="45" />
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         top="4"
+         left_pad="2"
+         height="19"
+         label="Call"
          layout="topleft"
-         left_pad="5"
-         min_width="40"
-         name="call_btn_panel"
-         top_delta="0"
-         visible="false"
-         width="40">
-            <button
-             enabled="false"
-             follows="top|left"
-             font="SansSerifSmall"
-             height="19"
-             label="Call"
-             layout="topleft"
-             name="call_btn"
-             width="50" />
-        </layout_panel>
-        <layout_panel
-         default_tab_group="1"
+         name="call_btn"
+         tool_tip="Call this resident"
+         width="50" />
+        <button
          follows="left|top"
-         height="25"
+         font="SansSerifSmall"
+         top="4"
+         left_pad="2"
+         height="19"
+         label="Share"
          layout="topleft"
-         left_pad="5"
-         min_width="65"
-         name="teleport_btn_panel"
-         top_delta="0"
-         width="100">
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="19"
-             label="Teleport"
-             layout="topleft"
-             name="teleport_btn"
-             tool_tip="Offer teleport"
-             width="100" />
-        </layout_panel>
-      <layout_panel
-         default_tab_group="1"
-         enabled="false"
-         follows="left|top"
-         height="25"
+         name="share_btn"
+         width="60" />
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         top="4"
+         left_pad="2"
+         height="19"
+         label="Teleport"
          layout="topleft"
-         left_pad="5"
-         min_width="50"
-         name="share_btn_panel"
-         top_delta="0"
-         visible="false"
-         width="80">
-            <button
-             enabled="false"
-             follows="top|left"
-             font="SansSerifSmall"
-             height="19"
-             label="Share"
-             layout="topleft"
-             name="share_btn"
-             width="80" />
-        </layout_panel>
-    </layout_stack>
+         name="teleport_btn"
+         tool_tip="Offer teleport"
+         width="75" />
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         top="4"
+         left="0"
+         height="19"
+         label="Group Profile"
+         layout="topleft"
+         name="group_info_btn"
+         tool_tip="Show group information"
+         width="110" />
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         top="4"
+         left_pad="2"
+         height="19"
+         label="Group Chat"
+         layout="topleft"
+         name="chat_btn"
+         tool_tip="Open chat session"
+         width="110" />
+    </panel>
 </panel>
-- 
GitLab


From caadf0be39b844e6bf91c5a302a837d107a1e415 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Mon, 9 Nov 2009 16:19:33 -0800
Subject: [PATCH 291/306] Fix for DEV-42029 (changing media on multiple faces
 can make a zombie SLPlugin).

Made LLViewerMedia::updateMediaImpl() unload the impl's media plugin when the current URL goes empty.

Made LLVOVolume::syncMediaData() call removeMediaImpl() if the media data gets deleted.
---
 indra/newview/llviewermedia.cpp | 14 ++++++++++++--
 indra/newview/llvovolume.cpp    |  4 ++++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 40bf9fb1fe2..91f4ff9b845 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -261,9 +261,19 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
 			media_impl->mMediaSource->setSize(media_entry->getWidthPixels(), media_entry->getHeightPixels());
 		}
 		
-		if((was_loaded || (media_entry->getAutoPlay() && gSavedSettings.getBOOL("AutoPlayMedia"))) && !update_from_self)
+		if(media_entry->getCurrentURL().empty())
 		{
-			if(!media_entry->getCurrentURL().empty())
+			// The current media URL is now empty.  Unload the media source.
+			if(was_loaded)
+				media_impl->destroyMediaSource();
+		}
+		else
+		{
+			// The current media URL is not empty.
+			// If (the media was already loaded OR the media was set to autoplay) AND this update didn't come from this agent,
+			// do a navigate.
+			
+			if((was_loaded || (media_entry->getAutoPlay() && gSavedSettings.getBOOL("AutoPlayMedia"))) && !update_from_self)
 			{
 				needs_navigate = (media_entry->getCurrentURL() != previous_url);
 			}
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index a32abf3ab94..c987dd17647 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1733,6 +1733,10 @@ void LLVOVolume::syncMediaData(S32 texture_index, const LLSD &media_data, bool m
 			
 		addMediaImpl(media_impl, texture_index) ;
 	}
+	else
+	{
+		removeMediaImpl(texture_index);
+	}
 
 	//llinfos << "AFTER: texture_index = " << texture_index
 	//	<< " hasMedia = " << te->hasMedia() << " : " 
-- 
GitLab


From ed43195ee059e0a1cebf24066a4c39c52bd1e827 Mon Sep 17 00:00:00 2001
From: Palmer <palmer@lindenlab.com>
Date: Mon, 9 Nov 2009 16:24:58 -0800
Subject: [PATCH 292/306] Dev-42424 Turning on impostors for intel cards above
 965

---
 indra/newview/featuretable.txt | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index d557df3d927..d20c23df808 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -245,7 +245,6 @@ RenderVBOEnable				1	0
 list Intel
 RenderAnisotropic			1	0
 RenderLightingDetail		1	0
-RenderUseImpostors			0	0
 
 list GeForce2
 RenderAnisotropic			1	0
@@ -261,51 +260,63 @@ UseOcclusion				0	0
 list Intel_830M
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_845G					
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_855GM				
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_865G			
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_900		
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_915GM	
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_915G					
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_945GM			
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_945G
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_950
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_965
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
 UseOcclusion				0	0
+RenderUseImpostors			0	0
 
 list Intel_G33
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_G45
 WindLightUseAtmosShaders		0	0
-- 
GitLab


From ebbb468a795d503a8869467d642d5f4962a3d7bf Mon Sep 17 00:00:00 2001
From: Rick Pasetto <rick@lindenlab.com>
Date: Mon, 9 Nov 2009 16:56:33 -0800
Subject: [PATCH 293/306] FIX DEV-42093 - Make sure to navigate home if current
 URL is empty on "Apply"

This change gets rid of the crufty (and confusing) "apply()"
functions from llpanelmediasettings*.  Those functions were
never being called, yet changes were being made in them.

Instead, I added "preApply()" and "postApply()" to each of
these panels, which the floater (who really does the "apply()"ing)
now calls before and after it applies the changes to the
media data.
---
 indra/newview/llfloatermediasettings.cpp      |  9 ++-
 indra/newview/llpanelmediasettingsgeneral.cpp | 69 +++++++++++--------
 indra/newview/llpanelmediasettingsgeneral.h   | 23 +++++--
 .../llpanelmediasettingspermissions.cpp       | 21 +++---
 .../newview/llpanelmediasettingspermissions.h | 46 +++++++------
 .../newview/llpanelmediasettingssecurity.cpp  | 52 +++++++-------
 indra/newview/llpanelmediasettingssecurity.h  | 56 ++++++++-------
 7 files changed, 157 insertions(+), 119 deletions(-)

diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp
index d941f24f49e..44e68d77455 100644
--- a/indra/newview/llfloatermediasettings.cpp
+++ b/indra/newview/llfloatermediasettings.cpp
@@ -145,13 +145,18 @@ LLFloaterMediaSettings* LLFloaterMediaSettings::getInstance()
 //static 
 void LLFloaterMediaSettings::apply()
 {
-	
     LLSD settings;
+	sInstance->mPanelMediaSettingsGeneral->preApply();
     sInstance->mPanelMediaSettingsGeneral->getValues( settings );
-    sInstance->mPanelMediaSettingsSecurity->getValues( settings );
+	sInstance->mPanelMediaSettingsSecurity->preApply();
+	sInstance->mPanelMediaSettingsSecurity->getValues( settings );
+	sInstance->mPanelMediaSettingsPermissions->preApply();
     sInstance->mPanelMediaSettingsPermissions->getValues( settings );
 	LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA );
     LLSelectMgr::getInstance()->selectionSetMediaData(settings);
+	sInstance->mPanelMediaSettingsGeneral->postApply();
+	sInstance->mPanelMediaSettingsSecurity->postApply();
+	sInstance->mPanelMediaSettingsPermissions->postApply();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
index 5186a5888b1..2cf56d55711 100644
--- a/indra/newview/llpanelmediasettingsgeneral.cpp
+++ b/indra/newview/llpanelmediasettingsgeneral.cpp
@@ -366,21 +366,15 @@ void LLPanelMediaSettingsGeneral::onCommitHomeURL( LLUICtrl* ctrl, void *userdat
 void LLPanelMediaSettingsGeneral::onBtnResetCurrentUrl(LLUICtrl* ctrl, void *userdata)
 {
 	LLPanelMediaSettingsGeneral* self =(LLPanelMediaSettingsGeneral *)userdata;
-	self->navigateHomeSelectedFace();
+	self->navigateHomeSelectedFace(false);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsGeneral::apply( void* userdata )
+// 
+void LLPanelMediaSettingsGeneral::preApply()
 {
-	LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata;
-	self->mHomeURL->onCommit();
-	// build LLSD Fragment
-	LLSD media_data_general;
-	self->getValues(media_data_general);
-
-	// this merges contents of LLSD passed in with what's there so this is ok
-	LLSelectMgr::getInstance()->selectionSetMediaData( media_data_general );
+	// Make sure the home URL entry is committed
+	mHomeURL->onCommit();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -392,13 +386,24 @@ void LLPanelMediaSettingsGeneral::getValues( LLSD &fill_me_in )
     fill_me_in[LLMediaEntry::AUTO_SCALE_KEY] = mAutoScale->getValue();
     fill_me_in[LLMediaEntry::AUTO_ZOOM_KEY] = mAutoZoom->getValue();
     fill_me_in[LLMediaEntry::CONTROLS_KEY] = mControls->getCurrentIndex();
-    fill_me_in[LLMediaEntry::CURRENT_URL_KEY] = mCurrentURL->getValue();
+    //Don't fill in current URL: this is only supposed to get changed via navigate
+	// fill_me_in[LLMediaEntry::CURRENT_URL_KEY] = mCurrentURL->getValue();
     fill_me_in[LLMediaEntry::HEIGHT_PIXELS_KEY] = mHeightPixels->getValue();
     fill_me_in[LLMediaEntry::HOME_URL_KEY] = mHomeURL->getValue();
     fill_me_in[LLMediaEntry::FIRST_CLICK_INTERACT_KEY] = mFirstClick->getValue();
     fill_me_in[LLMediaEntry::WIDTH_PIXELS_KEY] = mWidthPixels->getValue();
 }
 
+////////////////////////////////////////////////////////////////////////////////
+// 
+void LLPanelMediaSettingsGeneral::postApply()
+{	
+	// Make sure to navigate to the home URL if the current URL is empty and 
+	// autoplay is on
+	navigateHomeSelectedFace(true);
+}
+
+
 ////////////////////////////////////////////////////////////////////////////////
 //
 void LLPanelMediaSettingsGeneral::setParent( LLFloaterMediaSettings* parent )
@@ -406,33 +411,37 @@ void LLPanelMediaSettingsGeneral::setParent( LLFloaterMediaSettings* parent )
 	mParent = parent;
 };
 
-bool LLPanelMediaSettingsGeneral::navigateHomeSelectedFace()
+////////////////////////////////////////////////////////////////////////////////
+//
+bool LLPanelMediaSettingsGeneral::navigateHomeSelectedFace(bool only_if_current_is_empty)
 {
-	// HACK: This is directly referencing an impl name.  BAD!
-	// This can be removed when we have a truly generic media browser that only 
-	// builds an impl based on the type of url it is passed.
 	struct functor_navigate_media : public LLSelectedTEGetFunctor< bool>
 	{
+		functor_navigate_media(bool flag) : only_if_current_is_empty(flag) {}
 		bool get( LLViewerObject* object, S32 face )
 		{
-			if ( object )
-				if ( object->getTE(face) )
-					if ( object->getTE(face)->getMediaData() )
+			if ( object && object->getTE(face) && object->permModify() )
+			{
+				const LLMediaEntry *media_data = object->getTE(face)->getMediaData();
+				if ( media_data )
+				{	
+					if (!only_if_current_is_empty || (media_data->getCurrentURL().empty() && media_data->getAutoPlay()))
 					{
-						if(object->permModify())
+						viewer_media_t media_impl =
+							LLViewerMedia::getMediaImplFromTextureID(object->getTE(face)->getMediaData()->getMediaID());
+						if(media_impl)
 						{
-							viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(object->getTE(face)->getMediaData()->getMediaID());
-							if(media_impl)
-							{
-								media_impl->navigateHome();
-								return true;
-							}
-						}	
+							media_impl->navigateHome();
+							return true;
+						}
 					}
-		   return false;
-		 };
+				}
+			}
+			return false;
+		};
+		bool only_if_current_is_empty;
 				
-	} functor_navigate_media;
+	} functor_navigate_media(only_if_current_is_empty);
 	
 	bool all_face_media_navigated = false;
 	LLObjectSelectionHandle selected_objects =LLSelectMgr::getInstance()->getSelection();
diff --git a/indra/newview/llpanelmediasettingsgeneral.h b/indra/newview/llpanelmediasettingsgeneral.h
index b48e081a1b5..f8b8f0d224a 100644
--- a/indra/newview/llpanelmediasettingsgeneral.h
+++ b/indra/newview/llpanelmediasettingsgeneral.h
@@ -47,21 +47,30 @@ class LLFloaterMediaSettings;
 class LLPanelMediaSettingsGeneral : public LLPanel
 {
 public:
+	LLPanelMediaSettingsGeneral();
+	~LLPanelMediaSettingsGeneral();
+	
+	// XXX TODO: put these into a common parent class?
+	// Hook that the floater calls before applying changes from the panel
+	void preApply();
+	// Function that asks the panel to fill in values associated with the panel
+    void getValues(LLSD &fill_me_in);
+	// Hook that the floater calls after applying changes to the panel
+	void postApply();
+	
 	BOOL postBuild();
 	/*virtual*/ void draw();
 	/*virtual*/ void onClose(bool app_quitting);
 
-	static void apply(void*);
-    void getValues(LLSD &fill_me_in);
-
-	LLPanelMediaSettingsGeneral();
-	~LLPanelMediaSettingsGeneral();
-
 	void setParent( LLFloaterMediaSettings* parent );
 	static void initValues( void* userdata, const LLSD& media_settings ,bool editable);
 	static void clearValues( void* userdata, bool editable);
 	
-	bool navigateHomeSelectedFace();
+	// Navigates the current selected face to the Home URL.
+	// If 'only_if_current_is_empty' is "true", it only performs
+	// the operation if: 1) the current URL is empty, and 2) auto play is true.
+	bool navigateHomeSelectedFace(bool only_if_current_is_empty);
+	
 	void updateMediaPreview();
 
 	const std::string getHomeUrl();
diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp
index 4d84874e7a8..2f3f550e35b 100644
--- a/indra/newview/llpanelmediasettingspermissions.cpp
+++ b/indra/newview/llpanelmediasettingspermissions.cpp
@@ -218,17 +218,10 @@ void LLPanelMediaSettingsPermissions::initValues( void* userdata, const LLSD& me
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsPermissions::apply( void* userdata )
+// 
+void LLPanelMediaSettingsPermissions::preApply()
 {
-    LLPanelMediaSettingsPermissions *self =(LLPanelMediaSettingsPermissions *)userdata;
-
-    // build LLSD Fragment
-    LLSD media_data_permissions;
-    self->getValues(media_data_permissions);
-
-    // this merges contents of LLSD passed in with what's there so this is ok
-    LLSelectMgr::getInstance()->selectionSetMediaData( media_data_permissions );
+    // no-op
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -254,3 +247,11 @@ void LLPanelMediaSettingsPermissions::getValues( LLSD &fill_me_in )
     fill_me_in[LLMediaEntry::PERMS_CONTROL_KEY] = control;
     fill_me_in[LLMediaEntry::PERMS_INTERACT_KEY] = interact;
 }
+
+
+////////////////////////////////////////////////////////////////////////////////
+// 
+void LLPanelMediaSettingsPermissions::postApply()
+{
+    // no-op
+}
diff --git a/indra/newview/llpanelmediasettingspermissions.h b/indra/newview/llpanelmediasettingspermissions.h
index ecc50e35826..45a596c615e 100644
--- a/indra/newview/llpanelmediasettingspermissions.h
+++ b/indra/newview/llpanelmediasettingspermissions.h
@@ -46,26 +46,32 @@ class LLNameBox;
 
 class LLPanelMediaSettingsPermissions : public LLPanel
 {
-	public:
-		BOOL postBuild();
-		virtual void draw();
-		static void apply(void*);
-        void getValues(LLSD &fill_me_in);
-
-		LLPanelMediaSettingsPermissions();
-		~LLPanelMediaSettingsPermissions();
-
-		static void initValues( void* userdata, const LLSD& media_settings, bool editable );
-		static void clearValues( void* userdata,  bool editable);
-
-	private:
-        LLCheckBoxCtrl* mPermsOwnerInteract;
-		LLCheckBoxCtrl* mPermsOwnerControl;
-		LLNameBox* mPermsGroupName;
-		LLCheckBoxCtrl* mPermsGroupInteract;
-		LLCheckBoxCtrl* mPermsGroupControl;
-		LLCheckBoxCtrl* mPermsWorldInteract;
-		LLCheckBoxCtrl* mPermsWorldControl;
+public:
+	LLPanelMediaSettingsPermissions();
+	~LLPanelMediaSettingsPermissions();
+	
+	BOOL postBuild();
+	virtual void draw();
+	
+	// XXX TODO: put these into a common parent class?
+	// Hook that the floater calls before applying changes from the panel
+	void preApply();
+	// Function that asks the panel to fill in values associated with the panel
+    void getValues(LLSD &fill_me_in);
+	// Hook that the floater calls after applying changes to the panel
+	void postApply();
+	
+	static void initValues( void* userdata, const LLSD& media_settings, bool editable );
+	static void clearValues( void* userdata,  bool editable);
+	
+private:
+	LLCheckBoxCtrl* mPermsOwnerInteract;
+	LLCheckBoxCtrl* mPermsOwnerControl;
+	LLNameBox* mPermsGroupName;
+	LLCheckBoxCtrl* mPermsGroupInteract;
+	LLCheckBoxCtrl* mPermsGroupControl;
+	LLCheckBoxCtrl* mPermsWorldInteract;
+	LLCheckBoxCtrl* mPermsWorldControl;
 };
 
 #endif  // LL_LLPANELMEDIAMEDIASETTINGSPERMISSIONS_H
diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp
index 3577f63340f..611293f3e20 100644
--- a/indra/newview/llpanelmediasettingssecurity.cpp
+++ b/indra/newview/llpanelmediasettingssecurity.cpp
@@ -198,17 +198,12 @@ void LLPanelMediaSettingsSecurity::clearValues( void* userdata , bool editable)
 	self->mEnableWhiteList->setEnabled(editable);
 	self->mWhiteListList->setEnabled(editable);
 }
+
 ////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsSecurity::apply( void* userdata )
+// 
+void LLPanelMediaSettingsSecurity::preApply()
 {
-	LLPanelMediaSettingsSecurity *self =(LLPanelMediaSettingsSecurity *)userdata;
-
-	// build LLSD Fragment
-	LLSD media_data_security;
-	self->getValues(media_data_security);
-	// this merges contents of LLSD passed in with what's there so this is ok
-	LLSelectMgr::getInstance()->selectionSetMediaData( media_data_security );
+	// no-op
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -220,7 +215,7 @@ void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in )
     // iterate over white list and extract items
     std::vector< LLScrollListItem* > white_list_items = mWhiteListList->getAllData();
     std::vector< LLScrollListItem* >::iterator iter = white_list_items.begin();
-    fill_me_in[LLMediaEntry::WHITELIST_KEY].clear();
+    fill_me_in.erase(LLMediaEntry::WHITELIST_KEY);
     while( iter != white_list_items.end() )
     {
         std::string white_list_url = (*iter)->getValue().asString();
@@ -229,23 +224,30 @@ void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in )
     };
 }
 
+////////////////////////////////////////////////////////////////////////////////
+// 
+void LLPanelMediaSettingsSecurity::postApply()
+{
+	// no-op
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 // Try to make a valid URL if a fragment (
 // white list list box widget and build a list to test against. Can also
 const std::string LLPanelMediaSettingsSecurity::makeValidUrl( const std::string& src_url )
 {
 	// use LLURI to determine if we have a valid scheme
-	LLURI candidate_url( src_url );
-	if ( candidate_url.scheme().empty() )
-	{
+	LLURI candidate_url( src_url );
+	if ( candidate_url.scheme().empty() )
+	{
 		// build a URL comprised of default scheme and the original fragment 
 		const std::string default_scheme( "http://" );
 		return default_scheme + src_url;
-	};
-
-	// we *could* test the "default scheme" + "original fragment" URL again
-	// using LLURI to see if it's valid but I think the outcome is the same
-	// in either case - our only option is to return the original URL
+	};
+
+	// we *could* test the "default scheme" + "original fragment" URL again
+	// using LLURI to see if it's valid but I think the outcome is the same
+	// in either case - our only option is to return the original URL
 
 	// we *think* the original url passed in was valid
 	return src_url;
@@ -332,10 +334,10 @@ void LLPanelMediaSettingsSecurity::onBtnDel( void* userdata )
 	self->mWhiteListList->deleteSelectedItems();
 }
 
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLPanelMediaSettingsSecurity::setParent( LLFloaterMediaSettings* parent )
-{
-	mParent = parent;
-};
-
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLPanelMediaSettingsSecurity::setParent( LLFloaterMediaSettings* parent )
+{
+	mParent = parent;
+};
+
diff --git a/indra/newview/llpanelmediasettingssecurity.h b/indra/newview/llpanelmediasettingssecurity.h
index 2555bb8dc85..638664e59d7 100644
--- a/indra/newview/llpanelmediasettingssecurity.h
+++ b/indra/newview/llpanelmediasettingssecurity.h
@@ -41,31 +41,37 @@ class LLFloaterMediaSettings;
 
 class LLPanelMediaSettingsSecurity : public LLPanel
 {
-	public:
-		BOOL postBuild();
-		virtual void draw();
-		static void apply(void*);
-        void getValues(LLSD &fill_me_in);
-
-		LLPanelMediaSettingsSecurity();
-		~LLPanelMediaSettingsSecurity();
-
-		static void initValues( void* userdata, const LLSD& media_settings,bool editable );
-		static void clearValues( void* userdata, bool editable);
-		void addWhiteListItem(const std::string& url);
-		void setParent( LLFloaterMediaSettings* parent );
-		const std::string makeValidUrl( const std::string& src_url );
-		bool passesWhiteList( const std::string& added_url, const std::string& test_url );
-
-	protected:
-		LLFloaterMediaSettings* mParent;
-
-	private:
-		LLCheckBoxCtrl* mEnableWhiteList;
-		LLScrollListCtrl* mWhiteListList;
-
-		static void onBtnAdd(void*);
-		static void onBtnDel(void*);
+public:
+	LLPanelMediaSettingsSecurity();
+	~LLPanelMediaSettingsSecurity();
+	
+	BOOL postBuild();
+	virtual void draw();	
+	
+	// XXX TODO: put these into a common parent class?
+	// Hook that the floater calls before applying changes from the panel
+	void preApply();
+	// Function that asks the panel to fill in values associated with the panel
+    void getValues(LLSD &fill_me_in);
+	// Hook that the floater calls after applying changes to the panel
+	void postApply();
+	
+	static void initValues( void* userdata, const LLSD& media_settings,bool editable );
+	static void clearValues( void* userdata, bool editable);
+	void addWhiteListItem(const std::string& url);
+	void setParent( LLFloaterMediaSettings* parent );
+	const std::string makeValidUrl( const std::string& src_url );
+	bool passesWhiteList( const std::string& added_url, const std::string& test_url );
+	
+protected:
+	LLFloaterMediaSettings* mParent;
+	
+private:
+	LLCheckBoxCtrl* mEnableWhiteList;
+	LLScrollListCtrl* mWhiteListList;
+	
+	static void onBtnAdd(void*);
+	static void onBtnDel(void*);
 };
 
 #endif  // LL_LLPANELMEDIAMEDIASETTINGSSECURITY_H
-- 
GitLab


From 312e7d21a4d4996460e84aca478691ac0a4828ea Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Mon, 9 Nov 2009 17:11:13 -0800
Subject: [PATCH 294/306] Refinement to my previous commit:

Created LLViewerMediaImpl::unload(), which unloads the media and clears internal state (such as the last-navigated URL) to keep it from getting reloaded.

LLViewerMedia::updateMediaImpl() now calls unload() on the impl instead of just using destroyMediaSource().
---
 indra/newview/llviewermedia.cpp | 14 ++++++++++++--
 indra/newview/llviewermedia.h   |  1 +
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 91f4ff9b845..11c1fcb1ea5 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -264,8 +264,7 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
 		if(media_entry->getCurrentURL().empty())
 		{
 			// The current media URL is now empty.  Unload the media source.
-			if(was_loaded)
-				media_impl->destroyMediaSource();
+			media_impl->unload();
 		}
 		else
 		{
@@ -1270,6 +1269,17 @@ void LLViewerMediaImpl::navigateHome()
 	navigateTo(mHomeURL, "", true, false);
 }
 
+//////////////////////////////////////////////////////////////////////////////////////////
+void LLViewerMediaImpl::unload()
+{
+	// Unload the media impl and clear its state.
+	destroyMediaSource();
+	resetPreviousMediaState();
+	mMediaURL.clear();
+	mMimeType.clear();
+	mCurrentMediaURL.clear();
+}
+
 //////////////////////////////////////////////////////////////////////////////////////////
 void LLViewerMediaImpl::navigateTo(const std::string& url, const std::string& mime_type,  bool rediscover_type, bool server_request)
 {
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 4cb08177353..7cbfb56ffcc 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -165,6 +165,7 @@ class LLViewerMediaImpl
 	void navigateForward();
 	void navigateReload();
 	void navigateHome();
+	void unload();
 	void navigateTo(const std::string& url, const std::string& mime_type = "", bool rediscover_type = false, bool server_request = false);
 	void navigateInternal();
 	void navigateStop();
-- 
GitLab


From f4186b6d3d45259c83fa1b13db25abcd34f227a9 Mon Sep 17 00:00:00 2001
From: Rick Pasetto <rick@lindenlab.com>
Date: Mon, 9 Nov 2009 18:17:42 -0800
Subject: [PATCH 295/306] PARTIAL FIX (workaround) DEV-41949:
 LLMediaEntry::setWhitelist() and LLMediaEntry::asLLSD() have a contract
 conflict Review #31

So, here's what was happening, briefly:

- LLMediaEntry::setWhitelist() would be a no-op if given an LLSD that did not have a WHITELIST_KEY
- LLMediaEntry::asLLSD() would render the LLMediaEntry *without* a WHITELIST_KEY if the whitelist was empty

Therefore, when the viewer marshalled an LLMediaEntry for the server, it would send it without a WHITELIST_KEY. When the server got it, it would not erase the last value.

This is actually a workaround: it patches asLLSD() with an LLSD::emptyArray() if the key is not there. However, this should be fixed on the server: in either or both of the following ways:

1) LLMediaEntry::setWhitelist() should not be a no-op if the LLSD has no WHITELIST_KEY: it should erase the whitelist
2) LLMediaEntry::asLLSD() should render an empty whitelist in WHITELIST_KEY as an empty array

Note that both could be done and still work.

A unit test should and will be written next.
---
 indra/newview/llpanelmediasettingssecurity.cpp | 4 +++-
 indra/newview/llvovolume.cpp                   | 5 +++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp
index 611293f3e20..bec2494eac9 100644
--- a/indra/newview/llpanelmediasettingssecurity.cpp
+++ b/indra/newview/llpanelmediasettingssecurity.cpp
@@ -215,7 +215,9 @@ void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in )
     // iterate over white list and extract items
     std::vector< LLScrollListItem* > white_list_items = mWhiteListList->getAllData();
     std::vector< LLScrollListItem* >::iterator iter = white_list_items.begin();
-    fill_me_in.erase(LLMediaEntry::WHITELIST_KEY);
+	// *NOTE: need actually set the key to be an emptyArray(), or the merge
+	// we do with this LLSD will think there's nothing to change.
+    fill_me_in[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray();
     while( iter != white_list_items.end() )
     {
         std::string white_list_url = (*iter)->getValue().asString();
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 021fc746488..3803c65e749 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -108,6 +108,11 @@ class LLMediaDataClientObjectImpl : public LLMediaDataClientObject
 				if (te->getMediaData() != NULL)
 				{
 					result = te->getMediaData()->asLLSD();
+					// XXX HACK: workaround bug in asLLSD() where whitelist is not set properly
+					if (!result.has(LLMediaEntry::WHITELIST_KEY))
+					{
+						result[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray();
+					}
 				}
 			}
 			return result;
-- 
GitLab


From ca1356d4655223781b5e317b430c67fcb081249c Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Mon, 9 Nov 2009 18:41:55 -0800
Subject: [PATCH 296/306] LLViewerMediaImpl now keeps track of which instance
 is the current parcel media instance.

The active parcel media instance always gets priority over other inworld media.
---
 indra/newview/llviewermedia.cpp       | 15 +++++++++++++--
 indra/newview/llviewermedia.h         |  8 ++++++--
 indra/newview/llviewerparcelmedia.cpp |  2 ++
 3 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 11c1fcb1ea5..69650425cb4 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -459,12 +459,12 @@ LLViewerMedia::impl_list &LLViewerMedia::getPriorityList()
 // This is the predicate function used to sort sViewerMediaImplList by priority.
 bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2)
 {
-	if(i1->isForcedUnloaded())
+	if(i1->isForcedUnloaded() && !i2->isForcedUnloaded())
 	{
 		// Muted or failed items always go to the end of the list, period.
 		return false;
 	}
-	else if(i2->isForcedUnloaded())
+	else if(i2->isForcedUnloaded() && !i1->isForcedUnloaded())
 	{
 		// Muted or failed items always go to the end of the list, period.
 		return true;
@@ -489,6 +489,16 @@ bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLView
 		// i2 is a UI element, i1 is not.  This makes i2 "less than" i1, so it sorts earlier in our list.
 		return false;
 	}
+	else if(i1->isParcelMedia())
+	{
+		// The parcel media impl sorts above all other inworld media, unless one has focus.
+		return true;
+	}
+	else if(i2->isParcelMedia())
+	{
+		// The parcel media impl sorts above all other inworld media, unless one has focus.
+		return false;
+	}
 	else
 	{
 		// The object with the larger interest value should be earlier in the list, so we reverse the sense of the comparison here.
@@ -686,6 +696,7 @@ LLViewerMediaImpl::LLViewerMediaImpl(	  const LLUUID& texture_id,
 	mPreviousMediaState(MEDIA_NONE),
 	mPreviousMediaTime(0.0f),
 	mIsDisabled(false),
+	mIsParcelMedia(false),
 	mProximity(-1),
 	mIsUpdated(false)
 { 
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 7cbfb56ffcc..3f5f3ca746c 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -191,14 +191,17 @@ class LLViewerMediaImpl
 	bool isMediaPlaying();
 	bool isMediaPaused();
 	bool hasMedia();
-	bool isMediaFailed() { return mMediaSourceFailed; };
+	bool isMediaFailed() const { return mMediaSourceFailed; };
 	void resetPreviousMediaState();
 	
 	void setDisabled(bool disabled) { mIsDisabled = disabled; };
-	bool isMediaDisabled() { return mIsDisabled; };
+	bool isMediaDisabled() const { return mIsDisabled; };
 
 	// returns true if this instance should not be loaded (disabled, muted object, crashed, etc.)
 	bool isForcedUnloaded() const;
+	
+	void setIsParcelMedia(bool is_parcel_media) { mIsParcelMedia = is_parcel_media; };
+	bool isParcelMedia() const { return mIsParcelMedia; };
 
 	ECursorType getLastSetCursor() { return mLastSetCursor; };
 	
@@ -326,6 +329,7 @@ class LLViewerMediaImpl
 	int mPreviousMediaState;
 	F64 mPreviousMediaTime;
 	bool mIsDisabled;
+	bool mIsParcelMedia;
 	S32 mProximity;
 
 private:
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 6233a337a66..336d7f684e6 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -226,6 +226,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
 				media_height, 
 				media_auto_scale,
 				media_loop);
+			sMediaImpl->setIsParcelMedia(true);
 			sMediaImpl->navigateTo(media_url, mime_type, true);
 		}
 	}
@@ -240,6 +241,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
 			media_height, 
 			media_auto_scale,
 			media_loop);
+		sMediaImpl->setIsParcelMedia(true);
 		sMediaImpl->navigateTo(media_url, mime_type, true);
 	}
 
-- 
GitLab


From c84624b2e9656241bd08ea613e37c9d87087096b Mon Sep 17 00:00:00 2001
From: angela <angela@lindenlab.com>
Date: Tue, 10 Nov 2009 10:47:53 +0800
Subject: [PATCH 297/306] clean up include llfontgl

---
 indra/llui/llui.cpp   | 1 -
 indra/llui/llview.cpp | 1 -
 2 files changed, 2 deletions(-)

diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index a82e6eb372a..4cf503b413c 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -43,7 +43,6 @@
 #include "llrender.h"
 #include "llrect.h"
 #include "lldir.h"
-#include "llfontgl.h"
 #include "llgl.h"
 
 // Project includes
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index fe7fd59de80..f9b4a6b73d5 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -40,7 +40,6 @@
 
 #include "llrender.h"
 #include "llevent.h"
-#include "llfontgl.h"
 #include "llfocusmgr.h"
 #include "llrect.h"
 #include "llstl.h"
-- 
GitLab


From cf7fdf86bf58051cb4d0aa6c0c598fff6475c019 Mon Sep 17 00:00:00 2001
From: Ramzi Linden <ramzi@lindenlab.com>
Date: Tue, 10 Nov 2009 11:50:01 +0800
Subject: [PATCH 298/306] Develop>XUI>Send Test IMs: Lets not poke fun of a
 resident tradition in the public beta. Also it should test a sentence that
 wraps. Ideally it would also test a string with double-byte characters but I
 dont know how to do that.

---
 indra/newview/llimview.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index fdf119fbeeb..8fb7027e82c 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -315,7 +315,7 @@ void LLIMModel::testMessages()
 	bot2_id.generate(from);
 	LLUUID bot2_session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, bot2_id);
 	newSession(bot2_session_id, from, IM_NOTHING_SPECIAL, bot2_id);
-	addMessage(bot2_session_id, from, bot2_id, "Test Message: Can I haz bear? ");
+	addMessage(bot2_session_id, from, bot2_id, "Test Message: Hello there, I have a question. Can I bother you for a second? ");
 	addMessage(bot2_session_id, from, bot2_id, "Test Message: OMGWTFBBQ.");
 }
 
-- 
GitLab


From 5662a8d126b3dab1100aab014aeaeb1752dba26a Mon Sep 17 00:00:00 2001
From: Ramzi Linden <ramzi@lindenlab.com>
Date: Tue, 10 Nov 2009 12:07:42 +0800
Subject: [PATCH 299/306] DEV-35097 final check in XUI for instances of the
 nonapproved terms "2nd Life", "1st Life", "SLURL"

---
 .../newview/skins/default/xui/en/floater_preview_texture.xml  | 4 ++--
 .../skins/default/xui/en/menu_places_gear_landmark.xml        | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
index e7abfb075af..52a19ac6b3d 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
@@ -109,10 +109,10 @@
     	<combo_item name="Unconstrained" value="Unconstrained">
     		Unconstrained
     	</combo_item>
-   	<combo_item name="1:1" value="1:1" tool_tip="Group insignia or 1st Life profile">
+   	<combo_item name="1:1" value="1:1" tool_tip="Group insignia or Real World profile">
 		1:1
 	</combo_item>
-	<combo_item name="4:3" value="4:3" tool_tip="2nd Life profile">
+	<combo_item name="4:3" value="4:3" tool_tip="[SECOND_LIFE] profile">
 		4:3
 	</combo_item>
 	<combo_item name="10:7" value="10:7" tool_tip="Classifieds and search listings, landmarks">
diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml
index 63d1a67d0f1..4b8bc8132fc 100644
--- a/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml
+++ b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml
@@ -82,7 +82,7 @@
          parameter="copy" />
     </menu_item_call>
     <menu_item_call
-     label="Copy SLURL"
+     label="Copy SLurl"
      layout="topleft"
      name="copy_slurl">
         <on_click
-- 
GitLab


From 729e0b125287586f19f862ec5221bf11d9e5fe49 Mon Sep 17 00:00:00 2001
From: Ramzi Linden <ramzi@lindenlab.com>
Date: Tue, 10 Nov 2009 13:10:15 +0800
Subject: [PATCH 300/306] I18N: several nodes in XUI have no name= or a
 duplicate name=, thus cant be localized. Notifications console was listed
 twice in the Develop>Console menu

---
 indra/newview/skins/default/xui/en/menu_viewer.xml     |  2 ++
 .../newview/skins/default/xui/en/panel_group_roles.xml |  4 ++--
 .../default/xui/en/panel_media_settings_general.xml    | 10 +++++-----
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index df2c2465c59..6ee50f16477 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -1994,6 +1994,7 @@
                  function="Advanced.ToggleConsole"
                  parameter="memory view" />
             </menu_item_check>
+<!-- Delete this duplicate menu entry
             <menu_item_check
              label="Notifications Console"
              layout="topleft"
@@ -2007,6 +2008,7 @@
                  function="Floater.Show"
                  parameter="notifications_console" />
             </menu_item_check>
+-->
             <menu_item_separator
              layout="topleft" />
             <menu_item_call
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index 5ed464bcec8..4129d7b4488 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -440,7 +440,7 @@ things in this group. There&apos;s a broad variety of Abilities.
          layout="topleft"
          follows="left|top"
          left="0"
-         name="static"
+         name="static4"
          top_pad="5"
          width="295">
             Assigned Roles
@@ -467,7 +467,7 @@ things in this group. There&apos;s a broad variety of Abilities.
          layout="topleft"
          follows="left|top"
          left="0"
-         name="static2"
+         name="static5"
          top_pad="5"
          width="295">
             Allowed Abilities
diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
index cc47e99c2cb..686f4ac1d5e 100644
--- a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
@@ -16,7 +16,7 @@
    follows="top|left" 
    height="15" 
    left="10" 
-   name="">
+   name="home_label">
     Home URL:
   </text>
   <line_editor 
@@ -49,7 +49,7 @@
    follows="top|left"
    height="15"
    left="164"
-   name="">
+   name="preview_label">
     Preview
   </text>
   
@@ -88,7 +88,7 @@
    follows="top|left" 
    height="15"
    left="10" 
-   name="">
+   name="controls_label">
     Controls:
   </text>
   <combo_box 
@@ -207,7 +207,7 @@
    follows="top|left" 
    height="15" 
    left="30" 
-   name="">
+   name="size_label">
     Size:
   </text>
   
@@ -228,7 +228,7 @@
    name="width_pixels" 
    width="50" />
    
-  <text bottom_delta="0" follows="top|left" height="15" left_delta="60" name="">
+  <text bottom_delta="0" follows="top|left" height="15" left_delta="60" name="X_label">
     X
   </text>
   <spinner bottom_delta="0"
-- 
GitLab


From 54b39c3786a4e77b86f70538a29df98c7ff4ff77 Mon Sep 17 00:00:00 2001
From: Ramzi Linden <ramzi@lindenlab.com>
Date: Tue, 10 Nov 2009 17:36:28 +0800
Subject: [PATCH 301/306] L10N:  Add some translations to FR, DE, JA from
 Localization Cycle1.

---
 .../skins/default/xui/de/floater_about.xml    |   83 +-
 .../default/xui/de/floater_about_land.xml     |  969 ++-
 .../xui/de/floater_animation_preview.xml      |  275 +-
 .../default/xui/de/floater_avatar_picker.xml  |   88 +-
 .../skins/default/xui/de/floater_beacons.xml  |   36 +-
 .../default/xui/de/floater_build_options.xml  |   19 +-
 .../default/xui/de/floater_bulk_perms.xml     |   97 +-
 .../default/xui/de/floater_buy_object.xml     |   52 +-
 .../skins/default/xui/de/floater_camera.xml   |   39 +-
 .../default/xui/de/floater_color_picker.xml   |   64 +-
 .../default/xui/de/floater_god_tools.xml      |  238 +-
 .../xui/de/floater_hardware_settings.xml      |   58 +-
 .../default/xui/de/floater_image_preview.xml  |   64 +-
 .../de/floater_inventory_item_properties.xml  |  148 +-
 .../default/xui/de/floater_land_holdings.xml  |   80 +-
 .../default/xui/de/floater_live_lsleditor.xml |   27 +-
 .../skins/default/xui/de/floater_map.xml      |  105 +-
 .../default/xui/de/floater_media_browser.xml  |   49 +-
 .../default/xui/de/floater_mem_leaking.xml    |   36 +-
 .../skins/default/xui/de/floater_moveview.xml |   51 +-
 .../skins/default/xui/de/floater_pay.xml      |   40 +-
 .../default/xui/de/floater_pay_object.xml     |   59 +-
 .../xui/de/floater_preview_animation.xml      |   23 +-
 .../xui/de/floater_preview_classified.xml     |    8 +-
 .../default/xui/de/floater_preview_event.xml  |    8 +-
 .../xui/de/floater_preview_gesture_info.xml   |    2 +
 .../xui/de/floater_preview_gesture_steps.xml  |    2 +
 .../xui/de/floater_preview_notecard.xml       |   38 +-
 .../default/xui/de/floater_preview_sound.xml  |   23 +-
 .../xui/de/floater_preview_texture.xml        |   26 +-
 .../default/xui/de/floater_report_abuse.xml   |  210 +-
 .../xui/de/floater_script_debug_panel.xml     |    2 +
 .../default/xui/de/floater_script_preview.xml |   15 +-
 .../default/xui/de/floater_script_queue.xml   |   23 +-
 .../default/xui/de/floater_sell_land.xml      |  134 +-
 .../default/xui/de/floater_settings_debug.xml |   26 +-
 .../skins/default/xui/de/floater_stats.xml    |   71 +
 .../skins/default/xui/de/floater_tools.xml    | 1053 ++-
 .../skins/default/xui/de/inspect_avatar.xml   |   16 +
 .../skins/default/xui/de/menu_avatar_icon.xml |    7 +
 .../skins/default/xui/de/menu_favorites.xml   |   10 +
 .../skins/default/xui/de/menu_group_plus.xml  |    5 +
 .../skins/default/xui/de/menu_inventory.xml   |  142 +-
 .../skins/default/xui/de/menu_landmark.xml    |    6 +
 .../skins/default/xui/de/menu_mini_map.xml    |   16 +-
 .../skins/default/xui/de/menu_navbar.xml      |   10 +
 .../skins/default/xui/de/menu_picks.xml       |    8 +
 .../skins/default/xui/de/menu_place.xml       |    7 +
 .../skins/default/xui/de/menu_slurl.xml       |   12 +-
 .../skins/default/xui/de/menu_url_agent.xml   |    6 +
 .../skins/default/xui/de/menu_url_group.xml   |    6 +
 .../skins/default/xui/de/menu_url_http.xml    |    7 +
 .../default/xui/de/menu_url_objectim.xml      |    7 +
 .../skins/default/xui/de/menu_url_parcel.xml  |    5 +
 .../skins/default/xui/de/menu_url_slurl.xml   |    6 +
 .../default/xui/de/menu_url_teleport.xml      |    5 +
 .../skins/default/xui/de/notifications.xml    | 5545 +++++++--------
 .../default/xui/de/panel_edit_profile.xml     |   83 +-
 .../default/xui/de/panel_group_invite.xml     |   58 +-
 .../default/xui/de/panel_group_land_money.xml |  341 +-
 .../default/xui/de/panel_group_notices.xml    |  303 +-
 .../default/xui/de/panel_group_roles.xml      |  434 +-
 .../default/xui/de/panel_im_control_panel.xml |    9 +
 .../skins/default/xui/de/panel_login.xml      |   62 +-
 .../default/xui/de/panel_nearby_chat_bar.xml  |    4 +
 .../skins/default/xui/de/panel_pick_info.xml  |   16 +
 .../skins/default/xui/de/panel_picks.xml      |    9 +
 .../default/xui/de/panel_preferences_chat.xml |  100 +-
 .../xui/de/panel_preferences_graphics1.xml    |  287 +-
 .../xui/de/panel_preferences_privacy.xml      |   52 +-
 .../xui/de/panel_preferences_setup.xml        |   76 +-
 .../skins/default/xui/de/panel_profile.xml    |   41 +
 .../default/xui/de/panel_profile_view.xml     |   15 +
 .../skins/default/xui/de/panel_script_ed.xml  |   43 +
 .../xui/de/panel_stand_stop_flying.xml        |    6 +
 .../skins/default/xui/de/panel_status_bar.xml |   64 +-
 .../skins/default/xui/de/panel_world_map.xml  |  108 +-
 .../newview/skins/default/xui/de/strings.xml  | 3803 +++++++++--
 .../skins/default/xui/de/teleport_strings.xml |  156 +-
 .../skins/default/xui/fr/floater_about.xml    |   83 +-
 .../default/xui/fr/floater_about_land.xml     |  981 ++-
 .../xui/fr/floater_animation_preview.xml      |  277 +-
 .../default/xui/fr/floater_avatar_picker.xml  |   83 +-
 .../skins/default/xui/fr/floater_beacons.xml  |   36 +-
 .../default/xui/fr/floater_build_options.xml  |   19 +-
 .../default/xui/fr/floater_bulk_perms.xml     |   97 +-
 .../default/xui/fr/floater_buy_object.xml     |   52 +-
 .../skins/default/xui/fr/floater_camera.xml   |   39 +-
 .../default/xui/fr/floater_color_picker.xml   |   64 +-
 .../default/xui/fr/floater_god_tools.xml      |  205 +-
 .../xui/fr/floater_hardware_settings.xml      |   56 +-
 .../default/xui/fr/floater_image_preview.xml  |   64 +-
 .../fr/floater_inventory_item_properties.xml  |  148 +-
 .../default/xui/fr/floater_land_holdings.xml  |   80 +-
 .../default/xui/fr/floater_live_lsleditor.xml |   27 +-
 .../skins/default/xui/fr/floater_map.xml      |  105 +-
 .../default/xui/fr/floater_media_browser.xml  |   51 +-
 .../default/xui/fr/floater_mem_leaking.xml    |   36 +-
 .../skins/default/xui/fr/floater_moveview.xml |   49 +-
 .../skins/default/xui/fr/floater_pay.xml      |   42 +-
 .../default/xui/fr/floater_pay_object.xml     |   61 +-
 .../xui/fr/floater_preview_animation.xml      |   21 +-
 .../xui/fr/floater_preview_classified.xml     |    8 +-
 .../default/xui/fr/floater_preview_event.xml  |    8 +-
 .../xui/fr/floater_preview_gesture_info.xml   |    2 +
 .../xui/fr/floater_preview_gesture_steps.xml  |    2 +
 .../xui/fr/floater_preview_notecard.xml       |   38 +-
 .../default/xui/fr/floater_preview_sound.xml  |   23 +-
 .../xui/fr/floater_preview_texture.xml        |   26 +-
 .../default/xui/fr/floater_report_abuse.xml   |  248 +-
 .../xui/fr/floater_script_debug_panel.xml     |    2 +
 .../default/xui/fr/floater_script_preview.xml |   15 +-
 .../default/xui/fr/floater_script_queue.xml   |   23 +-
 .../default/xui/fr/floater_sell_land.xml      |  132 +-
 .../default/xui/fr/floater_settings_debug.xml |   26 +-
 .../skins/default/xui/fr/floater_stats.xml    |   71 +
 .../skins/default/xui/fr/floater_tools.xml    |  992 ++-
 .../skins/default/xui/fr/inspect_avatar.xml   |   16 +
 .../skins/default/xui/fr/menu_avatar_icon.xml |    7 +
 .../skins/default/xui/fr/menu_favorites.xml   |   10 +
 .../skins/default/xui/fr/menu_group_plus.xml  |    5 +
 .../skins/default/xui/fr/menu_inventory.xml   |  142 +-
 .../skins/default/xui/fr/menu_landmark.xml    |    6 +
 .../skins/default/xui/fr/menu_mini_map.xml    |   16 +-
 .../skins/default/xui/fr/menu_navbar.xml      |   10 +
 .../skins/default/xui/fr/menu_picks.xml       |    8 +
 .../skins/default/xui/fr/menu_place.xml       |    7 +
 .../skins/default/xui/fr/menu_slurl.xml       |   12 +-
 .../skins/default/xui/fr/menu_url_agent.xml   |    6 +
 .../skins/default/xui/fr/menu_url_group.xml   |    6 +
 .../skins/default/xui/fr/menu_url_http.xml    |    7 +
 .../default/xui/fr/menu_url_objectim.xml      |    7 +
 .../skins/default/xui/fr/menu_url_parcel.xml  |    5 +
 .../skins/default/xui/fr/menu_url_slurl.xml   |    6 +
 .../default/xui/fr/menu_url_teleport.xml      |    5 +
 .../skins/default/xui/fr/notifications.xml    | 5521 +++++++--------
 .../default/xui/fr/panel_edit_profile.xml     |   83 +-
 .../default/xui/fr/panel_group_invite.xml     |   55 +-
 .../default/xui/fr/panel_group_land_money.xml |  172 +-
 .../default/xui/fr/panel_group_list_item.xml  |    4 +
 .../default/xui/fr/panel_group_notices.xml    |  134 +-
 .../default/xui/fr/panel_group_roles.xml      |  273 +-
 .../default/xui/fr/panel_im_control_panel.xml |    9 +
 .../skins/default/xui/fr/panel_login.xml      |   62 +-
 .../default/xui/fr/panel_nearby_chat_bar.xml  |    4 +
 .../skins/default/xui/fr/panel_picks.xml      |    9 +
 .../default/xui/fr/panel_preferences_chat.xml |  101 +-
 .../xui/fr/panel_preferences_graphics1.xml    |  279 +-
 .../xui/fr/panel_preferences_privacy.xml      |   53 +-
 .../xui/fr/panel_preferences_setup.xml        |   76 +-
 .../xui/fr/panel_preferences_sound.xml        |   80 +-
 .../skins/default/xui/fr/panel_profile.xml    |   41 +
 .../default/xui/fr/panel_profile_view.xml     |   15 +
 .../skins/default/xui/fr/panel_script_ed.xml  |   43 +
 .../xui/fr/panel_stand_stop_flying.xml        |    6 +
 .../skins/default/xui/fr/panel_status_bar.xml |   63 +-
 .../skins/default/xui/fr/panel_world_map.xml  |  108 +-
 .../newview/skins/default/xui/fr/strings.xml  | 3804 +++++++++--
 .../skins/default/xui/fr/teleport_strings.xml |  154 +-
 .../skins/default/xui/ja/floater_about.xml    |   83 +-
 .../default/xui/ja/floater_about_land.xml     |  970 ++-
 .../xui/ja/floater_animation_preview.xml      |  284 +-
 .../default/xui/ja/floater_avatar_picker.xml  |   80 +-
 .../skins/default/xui/ja/floater_beacons.xml  |   36 +-
 .../default/xui/ja/floater_build_options.xml  |   19 +-
 .../default/xui/ja/floater_bulk_perms.xml     |   97 +-
 .../default/xui/ja/floater_buy_object.xml     |   52 +-
 .../skins/default/xui/ja/floater_camera.xml   |   39 +-
 .../default/xui/ja/floater_color_picker.xml   |   62 +-
 .../default/xui/ja/floater_god_tools.xml      |  241 +-
 .../xui/ja/floater_hardware_settings.xml      |   60 +-
 .../default/xui/ja/floater_image_preview.xml  |   64 +-
 .../ja/floater_inventory_item_properties.xml  |  148 +-
 .../default/xui/ja/floater_land_holdings.xml  |   80 +-
 .../default/xui/ja/floater_live_lsleditor.xml |   27 +-
 .../skins/default/xui/ja/floater_map.xml      |  105 +-
 .../default/xui/ja/floater_media_browser.xml  |   49 +-
 .../default/xui/ja/floater_mem_leaking.xml    |   37 +-
 .../skins/default/xui/ja/floater_moveview.xml |   52 +-
 .../skins/default/xui/ja/floater_pay.xml      |   40 +-
 .../default/xui/ja/floater_pay_object.xml     |   59 +-
 .../xui/ja/floater_preview_animation.xml      |   21 +-
 .../xui/ja/floater_preview_classified.xml     |    8 +-
 .../default/xui/ja/floater_preview_event.xml  |    8 +-
 .../xui/ja/floater_preview_gesture_info.xml   |    2 +
 .../xui/ja/floater_preview_gesture_steps.xml  |    2 +
 .../xui/ja/floater_preview_notecard.xml       |   38 +-
 .../default/xui/ja/floater_preview_sound.xml  |   22 +-
 .../xui/ja/floater_preview_texture.xml        |   26 +-
 .../default/xui/ja/floater_report_abuse.xml   |  246 +-
 .../xui/ja/floater_script_debug_panel.xml     |    2 +
 .../default/xui/ja/floater_script_preview.xml |   15 +-
 .../default/xui/ja/floater_script_queue.xml   |   23 +-
 .../default/xui/ja/floater_sell_land.xml      |  140 +-
 .../default/xui/ja/floater_settings_debug.xml |   26 +-
 .../skins/default/xui/ja/floater_stats.xml    |   71 +
 .../skins/default/xui/ja/floater_tools.xml    |  988 ++-
 .../skins/default/xui/ja/inspect_avatar.xml   |   16 +
 .../skins/default/xui/ja/menu_avatar_icon.xml |    7 +
 .../skins/default/xui/ja/menu_favorites.xml   |   10 +
 .../skins/default/xui/ja/menu_group_plus.xml  |    5 +
 .../skins/default/xui/ja/menu_inventory.xml   |  142 +-
 .../skins/default/xui/ja/menu_landmark.xml    |    6 +
 .../skins/default/xui/ja/menu_mini_map.xml    |   16 +-
 .../skins/default/xui/ja/menu_navbar.xml      |   10 +
 .../skins/default/xui/ja/menu_picks.xml       |    8 +
 .../skins/default/xui/ja/menu_place.xml       |    7 +
 .../skins/default/xui/ja/menu_slurl.xml       |   12 +-
 .../skins/default/xui/ja/menu_url_agent.xml   |    6 +
 .../skins/default/xui/ja/menu_url_group.xml   |    6 +
 .../skins/default/xui/ja/menu_url_http.xml    |    7 +
 .../default/xui/ja/menu_url_objectim.xml      |    7 +
 .../skins/default/xui/ja/menu_url_parcel.xml  |    5 +
 .../skins/default/xui/ja/menu_url_slurl.xml   |    6 +
 .../default/xui/ja/menu_url_teleport.xml      |    5 +
 .../skins/default/xui/ja/notifications.xml    | 5949 ++++++++---------
 .../default/xui/ja/panel_edit_profile.xml     |   83 +-
 .../default/xui/ja/panel_group_invite.xml     |   60 +-
 .../default/xui/ja/panel_group_land_money.xml |  170 +-
 .../default/xui/ja/panel_group_list_item.xml  |    4 +
 .../default/xui/ja/panel_group_notices.xml    |  132 +-
 .../default/xui/ja/panel_group_roles.xml      |  275 +-
 .../default/xui/ja/panel_im_control_panel.xml |    9 +
 .../skins/default/xui/ja/panel_login.xml      |   64 +-
 .../default/xui/ja/panel_nearby_chat_bar.xml  |    4 +
 .../skins/default/xui/ja/panel_pick_info.xml  |   16 +
 .../skins/default/xui/ja/panel_picks.xml      |    9 +
 .../default/xui/ja/panel_preferences_chat.xml |   99 +-
 .../xui/ja/panel_preferences_graphics1.xml    |  287 +-
 .../xui/ja/panel_preferences_privacy.xml      |   52 +-
 .../xui/ja/panel_preferences_setup.xml        |   77 +-
 .../xui/ja/panel_preferences_sound.xml        |  149 +-
 .../skins/default/xui/ja/panel_profile.xml    |   41 +
 .../default/xui/ja/panel_profile_view.xml     |   15 +
 .../skins/default/xui/ja/panel_script_ed.xml  |   43 +
 .../xui/ja/panel_stand_stop_flying.xml        |    6 +
 .../skins/default/xui/ja/panel_status_bar.xml |   64 +-
 .../skins/default/xui/ja/panel_world_map.xml  |  108 +-
 .../newview/skins/default/xui/ja/strings.xml  | 3803 +++++++++--
 .../skins/default/xui/ja/teleport_strings.xml |  158 +-
 240 files changed, 27408 insertions(+), 20831 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml
 create mode 100644 indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml
 create mode 100644 indra/newview/skins/default/xui/de/floater_script_debug_panel.xml
 create mode 100644 indra/newview/skins/default/xui/de/floater_stats.xml
 create mode 100644 indra/newview/skins/default/xui/de/inspect_avatar.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_avatar_icon.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_favorites.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_group_plus.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_landmark.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_navbar.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_picks.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_place.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_url_agent.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_url_group.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_url_http.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_url_objectim.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_url_parcel.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_url_slurl.xml
 create mode 100644 indra/newview/skins/default/xui/de/menu_url_teleport.xml
 create mode 100644 indra/newview/skins/default/xui/de/panel_im_control_panel.xml
 create mode 100644 indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml
 create mode 100644 indra/newview/skins/default/xui/de/panel_pick_info.xml
 create mode 100644 indra/newview/skins/default/xui/de/panel_picks.xml
 create mode 100644 indra/newview/skins/default/xui/de/panel_profile.xml
 create mode 100644 indra/newview/skins/default/xui/de/panel_profile_view.xml
 create mode 100644 indra/newview/skins/default/xui/de/panel_script_ed.xml
 create mode 100644 indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml
 create mode 100644 indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml
 create mode 100644 indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml
 create mode 100644 indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml
 create mode 100644 indra/newview/skins/default/xui/fr/floater_stats.xml
 create mode 100644 indra/newview/skins/default/xui/fr/inspect_avatar.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_avatar_icon.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_favorites.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_group_plus.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_landmark.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_navbar.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_picks.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_place.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_url_agent.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_url_group.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_url_http.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_url_objectim.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_url_parcel.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_url_slurl.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_url_teleport.xml
 create mode 100644 indra/newview/skins/default/xui/fr/panel_group_list_item.xml
 create mode 100644 indra/newview/skins/default/xui/fr/panel_im_control_panel.xml
 create mode 100644 indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml
 create mode 100644 indra/newview/skins/default/xui/fr/panel_picks.xml
 create mode 100644 indra/newview/skins/default/xui/fr/panel_profile.xml
 create mode 100644 indra/newview/skins/default/xui/fr/panel_profile_view.xml
 create mode 100644 indra/newview/skins/default/xui/fr/panel_script_ed.xml
 create mode 100644 indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml
 create mode 100644 indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml
 create mode 100644 indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml
 create mode 100644 indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml
 create mode 100644 indra/newview/skins/default/xui/ja/floater_stats.xml
 create mode 100644 indra/newview/skins/default/xui/ja/inspect_avatar.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_avatar_icon.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_favorites.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_group_plus.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_landmark.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_navbar.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_picks.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_place.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_url_agent.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_url_group.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_url_http.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_url_objectim.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_url_parcel.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_url_slurl.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_url_teleport.xml
 create mode 100644 indra/newview/skins/default/xui/ja/panel_group_list_item.xml
 create mode 100644 indra/newview/skins/default/xui/ja/panel_im_control_panel.xml
 create mode 100644 indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml
 create mode 100644 indra/newview/skins/default/xui/ja/panel_pick_info.xml
 create mode 100644 indra/newview/skins/default/xui/ja/panel_picks.xml
 create mode 100644 indra/newview/skins/default/xui/ja/panel_profile.xml
 create mode 100644 indra/newview/skins/default/xui/ja/panel_profile_view.xml
 create mode 100644 indra/newview/skins/default/xui/ja/panel_script_ed.xml
 create mode 100644 indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml

diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml
index 6e51fe3e2dd..8522a89ec1c 100644
--- a/indra/newview/skins/default/xui/de/floater_about.xml
+++ b/indra/newview/skins/default/xui/de/floater_about.xml
@@ -1,43 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="ÃœBER [APP_NAME]">
-<tab_container name="about_tab">
-	<panel name="credits_panel">
-	<text_editor name="credits_editor">
-		Second Life wird Ihnen präsentiert von Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl und vielen anderen.
-
-Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
-
-
-
-Um im Geschäftsleben erfolreich zu sein, sei kühn, sei schnell, sei anders. --Henry Marchant
-	</text_editor>
-	</panel>
-	<panel name="licenses_panel">
-	<text_editor name="credits_editor">
-3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
-APR Copyright (C) 2000-2004 The Apache Software Foundation
-cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
-expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
-FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
-GL Copyright (C) 1999-2004 Brian Paul.
-Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
-jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
-jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
-ogg/vorbis Copyright (C) 2001, Xiphophorus
-OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
-SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
-SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
-xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler.
-google-perftools Copyright (c) 2005, Google Inc.
-
-Alle Rechte vorbehalten. Details siehe licenses.txt.
-
-Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) (ITU-T Empf.G.722.1 Anhang C)
-	</text_editor>
-	</panel>
-</tab_container>
-	<text name="you_are_at">
-		Sie befinden sich in [POSITION]
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="ÃœBER [APP_NAME]">
+	<tab_container name="about_tab">
+		<panel label="Danksagung" name="credits_panel">
+			<text_editor name="credits_editor">
+				Second Life wird Ihnen präsentiert von Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl und vielen anderen.
+
+Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
+
+
+
+Um im Geschäftsleben erfolreich zu sein, sei kühn, sei schnell, sei anders. --Henry Marchant
+			</text_editor>
+		</panel>
+		<panel label="Lizenzen" name="licenses_panel">
+			<text_editor name="credits_editor">
+				3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
+APR Copyright (C) 2000-2004 The Apache Software Foundation
+cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+GL Copyright (C) 1999-2004 Brian Paul.
+Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
+jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
+jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
+ogg/vorbis Copyright (C) 2001, Xiphophorus
+OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
+SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
+SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
+zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler.
+google-perftools Copyright (c) 2005, Google Inc.
+
+Alle Rechte vorbehalten. Details siehe licenses.txt.
+
+Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) (ITU-T Empf.G.722.1 Anhang C)
+			</text_editor>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml
index ceb831c12de..ae0ad2af65d 100644
--- a/indra/newview/skins/default/xui/de/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_about_land.xml
@@ -1,494 +1,475 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="LAND-INFO">
-	<tab_container name="landtab">
-		<panel label="Allgemein" name="land_general_panel">
-			<text name="Name:">
-				Name:
-			</text>
-			<text name="Description:">
-				Beschreibung:
-			</text>
-			<text name="LandType">
-				Typ:
-			</text>
-			<text name="LandTypeText">
-				Mainland / Homestead
-			</text>
-			<text name="ContentRating">
-				Einstufung:
-			</text>
-			<text name="ContentRatingText">
-				Adult
-			</text>
-			<text name="Owner:">
-				Eigentümer:
-			</text>
-			<text name="OwnerText">
-				Leyla Linden
-			</text>
-			<button label="Profil..." label_selected="Profil..." name="Profile..."/>
-			<text name="Group:">
-				Gruppe:
-			</text>
-			<button label="Einstellen..." label_selected="Einstellen..." name="Set..."/>
-			<check_box label="Übertragung an Gruppe zulassen" name="check deed" tool_tip="Ein Gruppen-Officer kann dieses Land der Gruppe übertragen. Das Land wird dann über die Landzuteilung der Gruppe verwaltet."/>
-			<button label="Übertragen..." label_selected="Übertragen..." name="Deed..." tool_tip="Sie können Land nur übertragen, wenn Sie in der ausgewählten Gruppe Officer sind."/>
-			<check_box label="Eigentümer leistet Beitrag durch Übertragung" name="check contrib" tool_tip="Wenn das Land an die Gruppe übertragen wird, trägt der frühere Eigentümer ausreichend Landnutzungsrechte bei, um es zu halten."/>
-			<text name="For Sale:">
-				Zum Verkauf:
-			</text>
-			<text name="Not for sale.">
-				Nicht zu verkaufen.
-			</text>
-			<text name="For Sale: Price L$[PRICE].">
-				Preis: [PRICE] L$ ([PRICE_PER_SQM] L$/qm.).
-			</text>
-			<text name="SalePending"/>
-			<button bottom="-222" label="Land verkaufen..." label_selected="Land verkaufen..." name="Sell Land..."/>
-			<text name="For sale to">
-				Zum Verkauf an: [BUYER]
-			</text>
-			<text name="Sell with landowners objects in parcel." width="210">
-				Objekte sind im Verkauf eingeschlossen.
-			</text>
-			<text name="Selling with no objects in parcel." width="237">
-				Objekte sind im Verkauf nicht eingeschlossen.
-			</text>
-			<button bottom="-222" label="Landverkauf abbrechen" label_selected="Landverkauf abbrechen" name="Cancel Land Sale"/>
-			<text name="Claimed:">
-				Gekauft am:
-			</text>
-			<text name="DateClaimText">
-				Dienstag, 15. Aug. 2006, 13:47:25
-			</text>
-			<text name="PriceLabel">
-				Gebiet:
-			</text>
-			<text name="PriceText">
-				4048 qm.
-			</text>
-			<text name="Traffic:">
-				Traffic:
-			</text>
-			<text name="DwellText">
-				0
-			</text>
-			<button label="Land kaufen..." label_selected="Land kaufen..." name="Buy Land..."/>
-			<button label="Für Gruppe kaufen..." label_selected="Für Gruppe kaufen..." name="Buy For Group..."/>
-			<button label="Pass kaufen..." label_selected="Pass kaufen..." name="Buy Pass..." tool_tip="Ein Pass gibt Ihnen zeitbegrenzten Zugang zu diesem Land."/>
-			<button label="Land aufgeben..." label_selected="Land aufgeben..." name="Abandon Land..."/>
-			<button label="Land in Besitz nehmen..." label_selected="Land in Besitz nehmen..." name="Reclaim Land..."/>
-			<button label="Linden-Verkauf..." label_selected="Linden-Verkauf..." name="Linden Sale..." tool_tip="Land muss Eigentum und auf Inhalt gesetzt sein und nicht zur Auktion stehen."/>
-			<panel.string name="new users only">
-				Nur neue Benutzer
-			</panel.string>
-			<panel.string name="anyone">
-				Jeder
-			</panel.string>
-			<panel.string name="area_text">
-				Gebiet:
-			</panel.string>
-			<panel.string name="area_size_text">
-				[AREA] qm.
-			</panel.string>
-			<panel.string name="auction_id_text">
-				Auktions-ID: [ID]
-			</panel.string>
-			<panel.string name="need_tier_to_modify">
-				Bestätigen Sie den Kauf, um dieses Land zu bearbeiten.
-			</panel.string>
-			<panel.string name="group_owned_text">
-				(In Gruppenbesitz)
-			</panel.string>
-			<panel.string name="profile_text">
-				Profil...
-			</panel.string>
-			<panel.string name="info_text">
-				Info...
-			</panel.string>
-			<panel.string name="public_text">
-				(öffentlich)
-			</panel.string>
-			<panel.string name="none_text">
-				(keiner)
-			</panel.string>
-			<panel.string name="sale_pending_text">
-				(Wird verkauft)
-			</panel.string>
-			<panel.string name="no_selection_text">
-				Keine Parzelle ausgewählt.
-Öffnen Sie „Welt“ &gt; „Land-Info“ oder wählen Sie eine andere Parzelle aus, um Informationen darüber anzuzeigen.
-			</panel.string>
-		</panel>
-		<panel label="Vertrag" name="land_covenant_panel">
-			<text name="estate_section_lbl">
-				Grundstück:
-			</text>
-			<text name="estate_name_lbl">
-				Name:
-			</text>
-			<text name="estate_name_text">
-				Mainland
-			</text>
-			<text name="estate_owner_lbl">
-				Eigentümer:
-			</text>
-			<text name="estate_owner_text">
-				(keiner)
-			</text>
-			<text_editor name="covenant_editor">
-				Für dieses Grundstück fehlt der Vertrag.
-			</text_editor>
-			<text name="covenant_timestamp_text">
-				Letzte Änderung am Mittwoch, den 31. Dez. 1969, 16:00:00
-			</text>
-			<text name="region_section_lbl">
-				Region:
-			</text>
-			<text name="region_name_lbl">
-				Name:
-			</text>
-			<text name="region_name_text">
-				leyla
-			</text>
-			<text name="region_landtype_lbl">
-				Typ:
-			</text>
-			<text name="region_landtype_text">
-				Mainland / Homestead
-			</text>
-			<text name="region_maturity_lbl">
-				Einstufung:
-			</text>
-			<text name="region_maturity_text">
-				Adult
-			</text>
-			<text name="resellable_lbl">
-				Wiederverkauf:
-			</text>
-			<text name="resellable_clause">
-				Land in dieser Region kann nicht wiederverkauft werden.
-			</text>
-			<text name="changeable_lbl">
-				Unterteilen:
-			</text>
-			<text name="changeable_clause">
-				Land in dieser Region kann nicht zusammengelegt/geteilt
-werden.
-			</text>
-			<panel.string name="can_resell">
-				Gekauftes Land in dieser Region kann wiederverkauft werden.
-			</panel.string>
-			<panel.string name="can_not_resell">
-				Gekauftes Land in dieser Region kann nicht wiederverkauft werden.
-			</panel.string>
-			<panel.string name="can_change">
-				Gekauftes Land in dieser Region kann zusammengelegt und
-geteilt werden.
-			</panel.string>
-			<panel.string name="can_not_change">
-				Gekauftes Land in dieser Region kann nicht zusammengelegt
-und geteilt werden.
-			</panel.string>
-		</panel>
-		<panel label="Objekte" name="land_objects_panel">
-			<text name="parcel_object_bonus">
-				Objektbonusfaktor in Region: [BONUS]
-			</text>
-			<text name="Simulator primitive usage:">
-				Primitive in Simulator:
-			</text>
-			<text name="objects_available">
-				[COUNT] von [MAX] ([AVAILABLE] verfügbar)
-			</text>
-			<panel.string name="objects_available_text">
-				[COUNT] von [MAX] ([AVAILABLE] verfügbar)
-			</panel.string>
-			<panel.string name="objects_deleted_text">
-				[COUNT] von [MAX] ([DELETED] werden gelöscht)
-			</panel.string>
-			<text name="Primitives parcel supports:" width="200">
-				Von Parzelle unterstützte Primitiva:
-			</text>
-			<text left="204" name="object_contrib_text" width="152">
-				[COUNT]
-			</text>
-			<text name="Primitives on parcel:">
-				Primitiva auf Parzelle:
-			</text>
-			<text left="204" name="total_objects_text" width="48">
-				[COUNT]
-			</text>
-			<text left="14" name="Owned by parcel owner:" width="200">
-				Im Eigentum des Parzellenbesitzers:
-			</text>
-			<text left="204" name="owner_objects_text" width="48">
-				[COUNT]
-			</text>
-			<button label="Anzeigen" label_selected="Anzeigen" name="ShowOwner" right="-135" width="60"/>
-			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOwner..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
-			<text left="14" name="Set to group:">
-				Der Gruppe zugeordnet:
-			</text>
-			<text left="204" name="group_objects_text" width="48">
-				[COUNT]
-			</text>
-			<button label="Anzeigen" label_selected="Anzeigen" name="ShowGroup" right="-135" width="60"/>
-			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnGroup..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
-			<text left="14" name="Owned by others:" width="128">
-				Im Eigentum anderer:
-			</text>
-			<text left="204" name="other_objects_text" width="48">
-				[COUNT]
-			</text>
-			<button label="Anzeigen" label_selected="Anzeigen" name="ShowOther" right="-135" width="60"/>
-			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOther..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
-			<text left="14" name="Selected / sat upon:" width="140">
-				Ausgewählt/gesessen auf:
-			</text>
-			<text left="204" name="selected_objects_text" width="48">
-				[COUNT]
-			</text>
-			<text left="4" name="Autoreturn" width="380">
-				Objekte anderer Einwohner automatisch zurückgeben (Minuten, 0 für aus):
-			</text>
-			<line_editor name="clean other time" right="-10" width="56"/>
-			<text name="Object Owners:">
-				Objekteigentümer:
-			</text>
-			<button label="Liste aktualisieren" label_selected="Liste aktualisieren" name="Refresh List"/>
-			<button label="Objekte zurückgeben..." label_selected="Objekte zurückgeben..." name="Return objects..."/>
-			<name_list name="owner list">
-				<column label="Typ" name="type"/>
-				<column label="Name" name="name"/>
-				<column label="Zählen" name="count"/>
-				<column label="Aktuellster" name="mostrecent"/>
-			</name_list>
-		</panel>
-		<panel label="Optionen" name="land_options_panel">
-			<text name="allow_label">
-				Anderen Einwohnern gestatten:
-			</text>
-			<check_box label="Terrain bearbeiten" name="edit land check" tool_tip="Falls aktiviert, kann jeder Ihr Land terraformen. Am besten ist es, wenn Sie diese Option deaktiviert lassen. Sie können Ihr eigenes Land jederzeit bearbeiten."/>
-			<check_box label="Landmarken erstellen" name="check landmark"/>
-			<check_box label="Fliegen" name="check fly" tool_tip="Falls aktiviert, können Einwohner auf Ihrem Land fliegen. Falls nicht aktiviert, können Einwohner lediglich auf Ihr Land fliegen und dort landen (dann jedoch nicht wieder weiterfliegen) oder über Ihr Land hinweg fliegen."/>
-			<text name="allow_label2">
-				Objekte erstellen:
-			</text>
-			<check_box label="Alle Einwohner" name="edit objects check"/>
-			<check_box label="Gruppe" name="edit group objects check"/>
-			<text name="allow_label3">
-				Objekteintritt:
-			</text>
-			<check_box label="Alle Einwohner" name="all object entry check"/>
-			<check_box label="Gruppe" name="group object entry check"/>
-			<text name="allow_label4">
-				Skripts ausführen:
-			</text>
-			<check_box label="Alle Einwohner" name="check other scripts"/>
-			<check_box label="Gruppe" name="check group scripts"/>
-			<text name="land_options_label">
-				Landoptionen:
-			</text>
-			<check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. Falls nicht aktiviert, sind Kampfschäden aktiviert."/>
-			<check_box label="Kein Stoßen" name="PushRestrictCheck" tool_tip="Verhindert Skripte am Stoßen. Durch Aktivieren dieser Option verhindern Sie störendes Verhalten auf Ihrem Land."/>
-			<check_box label="Ort in Suche anzeigen (30 L$/Woche) unter" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/>
-			<panel.string name="search_enabled_tooltip">
-				Diese Parzelle in Suchergebnissen anzeigen.
-			</panel.string>
-			<panel.string name="search_disabled_small_tooltip">
-				Diese Option ist nicht aktiviert, da diese Parzelle nicht größer als 128 qm ist.
-Nur große Parzellen können in der Suche aufgeführt werden.
-			</panel.string>
-			<panel.string name="search_disabled_permissions_tooltip">
-				Diese Option ist nicht aktiviert, da Sie die Parzellenoptionen nicht verändern können.
-			</panel.string>
-			<combo_box name="land category with adult">
-				<combo_box.item name="item0" label="Alle Kategorien"
-				/>
-				<combo_box.item name="item1" label="Lindenort"
-				/>
-				<combo_box.item name="item2" label="Adult"
-				/>
-				<combo_box.item name="item3" label="Kunst &amp; Kultur"
-				/>
-				<combo_box.item name="item4" label="Business"
-				/>
-				<combo_box.item name="item5" label="Bildung"
-				/>
-				<combo_box.item name="item6" label="Spielen"
-				/>
-				<combo_box.item name="item7" label="Treffpunkt"
-				/>
-				<combo_box.item name="item8" label="Anfängergerecht"
-				/>
-				<combo_box.item name="item9" label="Parks und Natur"
-				/>
-				<combo_box.item name="item10" label="Wohngebiet"
-				/>
-				<combo_box.item name="item11" label="Shopping"
-				/>
-				<combo_box.item name="item12" label="Sonstige"
-				/>
-			</combo_box>
-			<combo_box left="266" name="land category" width="130">
-				<combo_box.item name="item0" label="Alle Kategorien"
-				/>
-				<combo_box.item name="item1" label="Lindenort"
-				/>
-				<combo_box.item name="item3" label="Kunst und Kultur"
-				/>
-				<combo_box.item name="item4" label="Business"
-				/>
-				<combo_box.item name="item5" label="Bildung"
-				/>
-				<combo_box.item name="item6" label="Spielen"
-				/>
-				<combo_box.item name="item7" label="Treffpunkt"
-				/>
-				<combo_box.item name="item8" label="Anfängergerecht"
-				/>
-				<combo_box.item name="item9" label="Parks und Natur"
-				/>
-				<combo_box.item name="item10" label="Wohngebiet"
-				/>
-				<combo_box.item name="item11" label="Shopping"
-				/>
-				<combo_box.item name="item12" label="Sonstige"
-				/>
-			</combo_box>
-			<button label="?" label_selected="?" name="?"/>
-			<check_box label="Mature-Inhalt" name="MatureCheck" tool_tip=""/>
-			<panel.string name="mature_check_mature">
-				Mature-Inhalt
-			</panel.string>
-			<panel.string name="mature_check_adult">
-				Adult-Inhalt
-			</panel.string>
-			<panel.string name="mature_check_mature_tooltip">
-				Die Informationen oder Inhalte Ihrer Parzelle sind „Mature“.
-			</panel.string>
-			<panel.string name="mature_check_adult_tooltip">
-				Die Informationen oder Inhalte Ihrer Parzelle sind „Adult“.
-			</panel.string>
-			<text name="Snapshot:">
-				Foto:
-			</text>
-			<texture_picker label="" name="snapshot_ctrl" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<text name="landing_point">
-				Landepunkt: [LANDING]
-			</text>
-			<panel.string name="landing_point_none">
-				(keiner)
-			</panel.string>
-			<button label="Festlegen" label_selected="Festlegen" left="234" name="Set" tool_tip="Legt den Landepunkt fest, an dem Besucher ankommen. Legt die Position Ihres Avatars innerhalb dieser Parzelle fest." width="70"/>
-			<button label="Löschen" label_selected="Löschen" left="312" name="Clear" tool_tip="Landepunkt löschen." width="70"/>
-			<text name="Teleport Routing: ">
-				Teleport-Route:
-			</text>
-			<combo_box name="landing type" tool_tip="Teleport-Route -- festlegen, wie Teleports auf Ihrem Land gehandhabt werden sollen.">
-				<combo_box.item name="Blocked" label="Blockiert"
-				/>
-				<combo_box.item name="LandingPoint" label="Landepunkt"
-				/>
-				<combo_box.item name="Anywhere" label="Ãœberall"
-				/>
-			</combo_box>
-			<panel.string name="push_restrict_text">
-				Kein Stoßen
-			</panel.string>
-			<panel.string name="push_restrict_region_text">
-				Kein Stoßen (regional)
-			</panel.string>
-		</panel>
-		<panel label="Medien" name="land_media_panel">
-			<text name="with media:">
-				Medientyp:
-			</text>
-			<combo_box name="media type" tool_tip="Geben Sie einen URL für den Film, die Webseite oder ein anderes Medium ein"/>
-			<text name="at URL:">
-				Medien-URL:
-			</text>
-			<button label="Einstellen..." label_selected="Einstellen..." name="set_media_url"/>
-			<text name="Description:">
-				Inhalt:
-			</text>
-			<line_editor name="url_description" tool_tip="Text, der neben der Abspielen/Laden-Schaltfläche angezeigt wird"/>
-			<text name="Media texture:">
-				Textur
-ersetzen:
-			</text>
-			<texture_picker label="" name="media texture" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<text name="replace_texture_help">
-				(Objekte mit dieser Textur zeigen nach Anklicken
-des Abspielen-Pfeils den Film oder die Webseite an.)
-			</text>
-			<text name="Options:">
-				Medien-
-Optionen:
-			</text>
-			<check_box label="Automatisch skalieren" name="media_auto_scale" tool_tip="Aktivieren Sie diese Option, um den Inhalt für diese Parzelle automatisch zu skalieren. Dies ist eventuell langsamer und die Qualität ist schlechter, aber Sie müssen keine weitere Texturskalierung oder -anpassung vornehmen."/>
-			<check_box label="Als Schleife wiedergeben" name="media_loop" tool_tip="Spielt das Medium in einer Schleife ab.  Der Abspielvorgang wird immer wieder von vorne fortgesetzt."/>
-			<check_box label="Medien-URL verstecken" name="hide_media_url" tool_tip="Aktivieren Sie diese Option, wenn Sie nicht möchten, dass unautorisierte Personen die Medien-URL sehen können. Diese Option ist für HTML-Medien nicht verfügbar."/>
-			<check_box label="Musik-URL verstecken" name="hide_music_url" tool_tip="Aktivieren Sie diese Option, wenn Sie nicht möchten, dass unautorisierte Personen die Musik-URL sehen können."/>
-			<text name="media_size" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen.">
-				Größe:
-			</text>
-			<spinner name="media_size_width" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."/>
-			<spinner name="media_size_height" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."/>
-			<text name="pixels">
-				Pixel
-			</text>
-			<text name="MusicURL:">
-				Musik-URL:
-			</text>
-			<text name="Sound:">
-				Sound:
-			</text>
-			<check_box label="Gesten- und Objektgeräusche auf diese Parzelle beschränken" name="check sound local"/>
-			<button label="?" label_selected="?" left="418" name="?"/>
-			<text name="Voice settings:">
-				Voice:
-			</text>
-			<check_box label="Voice-Chat aktivieren" name="parcel_enable_voice_channel"/>
-			<check_box label="Voice-Chat aktivieren (vom Grundstück festgelegt)" name="parcel_enable_voice_channel_is_estate_disabled"/>
-			<check_box label="Voice-Chat auf diese Parzelle beschränken" name="parcel_enable_voice_channel_parcel"/>
-		</panel>
-		<panel label="Zugang" name="land_access_panel">
-			<text name="Limit access to this parcel to:">
-				Zugang zu dieser Parzelle
-			</text>
-			<check_box label="Freien Zugang erlauben" name="public_access"/>
-			<text name="Only Allow">
-				Zugang verweigern für:
-			</text>
-			<check_box label="Einwohner, die keine Zahlungsinformationen bei Linden Lab hinterlegt haben" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen."/>
-			<check_box label="Einwohner, die keine altersgeprüften Erwachsenen sind" name="limit_age_verified" tool_tip="Einwohner ohne Altersprüfung verbannen. Weitere Informationen finden Sie auf support.secondlife.com."/>
-			<panel.string name="estate_override">
-				Eine oder mehrere dieser Optionen gelten auf Grundstücksebene
-			</panel.string>
-			<check_box label="Gruppenzugang erlauben: [GROUP]" name="GroupCheck" tool_tip="Gruppe im Register „Allgemein“ festlegen."/>
-			<check_box label="Pässe verkaufen an:" name="PassCheck" tool_tip="Ermöglicht befristeten Zugang zu dieser Parzelle"/>
-			<combo_box name="pass_combo">
-				<combo_box.item name="Anyone" label="Jeden"
-				/>
-				<combo_box.item name="Group" label="Gruppe"
-				/>
-			</combo_box>
-			<spinner label="Preis in L$:" name="PriceSpin"/>
-			<spinner label="Online-Zeit:" name="HoursSpin"/>
-			<text label="Immer erlauben" name="AllowedText">
-				Zulässige Einwohner
-			</text>
-			<name_list name="AccessList" tool_tip="([LISTED] angezeigt, max. [MAX])"/>
-			<button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_allowed"/>
-			<button label="Entfernen" label_selected="Entfernen" name="remove_allowed"/>
-			<text label="Verbannen" name="BanCheck">
-				Verbannte Einwohner
-			</text>
-			<name_list name="BannedList" tool_tip="([LISTED] angezeigt, max. [MAX])"/>
-			<button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_banned"/>
-			<button label="Entfernen" label_selected="Entfernen" name="remove_banned"/>
-		</panel>
-	</tab_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterland" title="LAND-INFO">
+	<floater.string name="Minutes">
+		[MINUTES] Minuten
+	</floater.string>
+	<floater.string name="Minute">
+		Minute
+	</floater.string>
+	<floater.string name="Seconds">
+		[SECONDS] Sekunden
+	</floater.string>
+	<tab_container name="landtab">
+		<panel label="Allgemein" name="land_general_panel">
+			<panel.string name="new users only">
+				Nur neue Benutzer
+			</panel.string>
+			<panel.string name="anyone">
+				Jeder
+			</panel.string>
+			<panel.string name="area_text">
+				Gebiet:
+			</panel.string>
+			<panel.string name="area_size_text">
+				[AREA] qm.
+			</panel.string>
+			<panel.string name="auction_id_text">
+				Auktions-ID: [ID]
+			</panel.string>
+			<panel.string name="need_tier_to_modify">
+				Bestätigen Sie den Kauf, um dieses Land zu bearbeiten.
+			</panel.string>
+			<panel.string name="group_owned_text">
+				(In Gruppenbesitz)
+			</panel.string>
+			<panel.string name="profile_text">
+				Profil...
+			</panel.string>
+			<panel.string name="info_text">
+				Info...
+			</panel.string>
+			<panel.string name="public_text">
+				(öffentlich)
+			</panel.string>
+			<panel.string name="none_text">
+				(keiner)
+			</panel.string>
+			<panel.string name="sale_pending_text">
+				(Wird verkauft)
+			</panel.string>
+			<panel.string name="no_selection_text">
+				Keine Parzelle ausgewählt.
+Öffnen Sie „Welt“ &gt; „Land-Info“ oder wählen Sie eine andere Parzelle aus, um Informationen darüber anzuzeigen.
+			</panel.string>
+			<text name="Name:">
+				Name:
+			</text>
+			<text name="Description:">
+				Beschreibung:
+			</text>
+			<text name="LandType">
+				Typ:
+			</text>
+			<text name="LandTypeText">
+				Mainland / Homestead
+			</text>
+			<text name="ContentRating">
+				Einstufung:
+			</text>
+			<text name="ContentRatingText">
+				Adult
+			</text>
+			<text name="Owner:">
+				Eigentümer:
+			</text>
+			<text name="OwnerText">
+				Leyla Linden
+			</text>
+			<button label="Profil..." label_selected="Profil..." name="Profile..."/>
+			<text name="Group:">
+				Gruppe:
+			</text>
+			<button label="Einstellen..." label_selected="Einstellen..." name="Set..."/>
+			<check_box label="Übertragung an Gruppe zulassen" name="check deed" tool_tip="Ein Gruppen-Officer kann dieses Land der Gruppe übertragen. Das Land wird dann über die Landzuteilung der Gruppe verwaltet."/>
+			<button label="Übertragen..." label_selected="Übertragen..." name="Deed..." tool_tip="Sie können Land nur übertragen, wenn Sie in der ausgewählten Gruppe Officer sind."/>
+			<check_box label="Eigentümer leistet Beitrag durch Übertragung" name="check contrib" tool_tip="Wenn das Land an die Gruppe übertragen wird, trägt der frühere Eigentümer ausreichend Landnutzungsrechte bei, um es zu halten."/>
+			<text name="For Sale:">
+				Zum Verkauf:
+			</text>
+			<text name="Not for sale.">
+				Nicht zu verkaufen.
+			</text>
+			<text name="For Sale: Price L$[PRICE].">
+				Preis: [PRICE] L$ ([PRICE_PER_SQM] L$/qm.).
+			</text>
+			<text name="SalePending"/>
+			<button bottom="-222" label="Land verkaufen..." label_selected="Land verkaufen..." name="Sell Land..."/>
+			<text name="For sale to">
+				Zum Verkauf an: [BUYER]
+			</text>
+			<text name="Sell with landowners objects in parcel." width="210">
+				Objekte sind im Verkauf eingeschlossen.
+			</text>
+			<text name="Selling with no objects in parcel." width="237">
+				Objekte sind im Verkauf nicht eingeschlossen.
+			</text>
+			<button bottom="-222" label="Landverkauf abbrechen" label_selected="Landverkauf abbrechen" name="Cancel Land Sale"/>
+			<text name="Claimed:">
+				Gekauft am:
+			</text>
+			<text name="DateClaimText">
+				Dienstag, 15. Aug. 2006, 13:47:25
+			</text>
+			<text name="PriceLabel">
+				Gebiet:
+			</text>
+			<text name="PriceText">
+				4048 qm.
+			</text>
+			<text name="Traffic:">
+				Traffic:
+			</text>
+			<text name="DwellText">
+				0
+			</text>
+			<button label="Land kaufen..." label_selected="Land kaufen..." name="Buy Land..."/>
+			<button label="Für Gruppe kaufen..." label_selected="Für Gruppe kaufen..." name="Buy For Group..."/>
+			<button label="Pass kaufen..." label_selected="Pass kaufen..." name="Buy Pass..." tool_tip="Ein Pass gibt Ihnen zeitbegrenzten Zugang zu diesem Land."/>
+			<button label="Land aufgeben..." label_selected="Land aufgeben..." name="Abandon Land..."/>
+			<button label="Land in Besitz nehmen..." label_selected="Land in Besitz nehmen..." name="Reclaim Land..."/>
+			<button label="Linden-Verkauf..." label_selected="Linden-Verkauf..." name="Linden Sale..." tool_tip="Land muss Eigentum und auf Inhalt gesetzt sein und nicht zur Auktion stehen."/>
+		</panel>
+		<panel label="Vertrag" name="land_covenant_panel">
+			<panel.string name="can_resell">
+				Gekauftes Land in dieser Region kann wiederverkauft werden.
+			</panel.string>
+			<panel.string name="can_not_resell">
+				Gekauftes Land in dieser Region kann nicht wiederverkauft werden.
+			</panel.string>
+			<panel.string name="can_change">
+				Gekauftes Land in dieser Region kann zusammengelegt und
+geteilt werden.
+			</panel.string>
+			<panel.string name="can_not_change">
+				Gekauftes Land in dieser Region kann nicht zusammengelegt
+und geteilt werden.
+			</panel.string>
+			<text name="estate_section_lbl">
+				Grundstück:
+			</text>
+			<text name="estate_name_lbl">
+				Name:
+			</text>
+			<text name="estate_name_text">
+				Mainland
+			</text>
+			<text name="estate_owner_lbl">
+				Eigentümer:
+			</text>
+			<text name="estate_owner_text">
+				(keiner)
+			</text>
+			<text_editor name="covenant_editor">
+				Für dieses Grundstück fehlt der Vertrag.
+			</text_editor>
+			<text name="covenant_timestamp_text">
+				Letzte Änderung am Mittwoch, den 31. Dez. 1969, 16:00:00
+			</text>
+			<text name="region_section_lbl">
+				Region:
+			</text>
+			<text name="region_name_lbl">
+				Name:
+			</text>
+			<text name="region_name_text">
+				leyla
+			</text>
+			<text name="region_landtype_lbl">
+				Typ:
+			</text>
+			<text name="region_landtype_text">
+				Mainland / Homestead
+			</text>
+			<text name="region_maturity_lbl">
+				Einstufung:
+			</text>
+			<text name="region_maturity_text">
+				Adult
+			</text>
+			<text name="resellable_lbl">
+				Wiederverkauf:
+			</text>
+			<text name="resellable_clause">
+				Land in dieser Region kann nicht wiederverkauft werden.
+			</text>
+			<text name="changeable_lbl">
+				Unterteilen:
+			</text>
+			<text name="changeable_clause">
+				Land in dieser Region kann nicht zusammengelegt/geteilt
+werden.
+			</text>
+		</panel>
+		<panel label="Objekte" name="land_objects_panel">
+			<panel.string name="objects_available_text">
+				[COUNT] von [MAX] ([AVAILABLE] verfügbar)
+			</panel.string>
+			<panel.string name="objects_deleted_text">
+				[COUNT] von [MAX] ([DELETED] werden gelöscht)
+			</panel.string>
+			<text name="parcel_object_bonus">
+				Objektbonusfaktor in Region: [BONUS]
+			</text>
+			<text name="Simulator primitive usage:">
+				Primitive in Simulator:
+			</text>
+			<text name="objects_available">
+				[COUNT] von [MAX] ([AVAILABLE] verfügbar)
+			</text>
+			<text name="Primitives parcel supports:" width="200">
+				Von Parzelle unterstützte Primitiva:
+			</text>
+			<text left="204" name="object_contrib_text" width="152">
+				[COUNT]
+			</text>
+			<text name="Primitives on parcel:">
+				Primitiva auf Parzelle:
+			</text>
+			<text left="204" name="total_objects_text" width="48">
+				[COUNT]
+			</text>
+			<text left="14" name="Owned by parcel owner:" width="200">
+				Im Eigentum des Parzellenbesitzers:
+			</text>
+			<text left="204" name="owner_objects_text" width="48">
+				[COUNT]
+			</text>
+			<button label="Anzeigen" label_selected="Anzeigen" name="ShowOwner" right="-135" width="60"/>
+			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOwner..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
+			<text left="14" name="Set to group:">
+				Der Gruppe zugeordnet:
+			</text>
+			<text left="204" name="group_objects_text" width="48">
+				[COUNT]
+			</text>
+			<button label="Anzeigen" label_selected="Anzeigen" name="ShowGroup" right="-135" width="60"/>
+			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnGroup..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
+			<text left="14" name="Owned by others:" width="128">
+				Im Eigentum anderer:
+			</text>
+			<text left="204" name="other_objects_text" width="48">
+				[COUNT]
+			</text>
+			<button label="Anzeigen" label_selected="Anzeigen" name="ShowOther" right="-135" width="60"/>
+			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOther..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
+			<text left="14" name="Selected / sat upon:" width="140">
+				Ausgewählt/gesessen auf:
+			</text>
+			<text left="204" name="selected_objects_text" width="48">
+				[COUNT]
+			</text>
+			<text left="4" name="Autoreturn" width="380">
+				Objekte anderer Einwohner automatisch zurückgeben (Minuten, 0 für aus):
+			</text>
+			<line_editor name="clean other time" right="-10" width="56"/>
+			<text name="Object Owners:">
+				Objekteigentümer:
+			</text>
+			<button label="Liste aktualisieren" label_selected="Liste aktualisieren" name="Refresh List"/>
+			<button label="Objekte zurückgeben..." label_selected="Objekte zurückgeben..." name="Return objects..."/>
+			<name_list name="owner list">
+				<name_list.columns label="Typ" name="type"/>
+				<name_list.columns label="Name" name="name"/>
+				<name_list.columns label="Zählen" name="count"/>
+				<name_list.columns label="Aktuellster" name="mostrecent"/>
+			</name_list>
+		</panel>
+		<panel label="Optionen" name="land_options_panel">
+			<panel.string name="search_enabled_tooltip">
+				Diese Parzelle in Suchergebnissen anzeigen.
+			</panel.string>
+			<panel.string name="search_disabled_small_tooltip">
+				Diese Option ist nicht aktiviert, da diese Parzelle nicht größer als 128 qm ist.
+Nur große Parzellen können in der Suche aufgeführt werden.
+			</panel.string>
+			<panel.string name="search_disabled_permissions_tooltip">
+				Diese Option ist nicht aktiviert, da Sie die Parzellenoptionen nicht verändern können.
+			</panel.string>
+			<panel.string name="mature_check_mature">
+				Mature-Inhalt
+			</panel.string>
+			<panel.string name="mature_check_adult">
+				Adult-Inhalt
+			</panel.string>
+			<panel.string name="mature_check_mature_tooltip">
+				Die Informationen oder Inhalte Ihrer Parzelle sind „Mature“.
+			</panel.string>
+			<panel.string name="mature_check_adult_tooltip">
+				Die Informationen oder Inhalte Ihrer Parzelle sind „Adult“.
+			</panel.string>
+			<panel.string name="landing_point_none">
+				(keiner)
+			</panel.string>
+			<panel.string name="push_restrict_text">
+				Kein Stoßen
+			</panel.string>
+			<panel.string name="push_restrict_region_text">
+				Kein Stoßen (regional)
+			</panel.string>
+			<text name="allow_label">
+				Anderen Einwohnern gestatten:
+			</text>
+			<check_box label="Terrain bearbeiten" name="edit land check" tool_tip="Falls aktiviert, kann jeder Ihr Land terraformen. Am besten ist es, wenn Sie diese Option deaktiviert lassen. Sie können Ihr eigenes Land jederzeit bearbeiten."/>
+			<check_box label="Fliegen" name="check fly" tool_tip="Falls aktiviert, können Einwohner auf Ihrem Land fliegen. Falls nicht aktiviert, können Einwohner lediglich auf Ihr Land fliegen und dort landen (dann jedoch nicht wieder weiterfliegen) oder über Ihr Land hinweg fliegen."/>
+			<text name="allow_label2">
+				Objekte erstellen:
+			</text>
+			<check_box label="Alle Einwohner" name="edit objects check"/>
+			<check_box label="Gruppe" name="edit group objects check"/>
+			<text name="allow_label3">
+				Objekteintritt:
+			</text>
+			<check_box label="Alle Einwohner" name="all object entry check"/>
+			<check_box label="Gruppe" name="group object entry check"/>
+			<text name="allow_label4">
+				Skripts ausführen:
+			</text>
+			<check_box label="Alle Einwohner" name="check other scripts"/>
+			<check_box label="Gruppe" name="check group scripts"/>
+			<text name="land_options_label">
+				Landoptionen:
+			</text>
+			<check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. Falls nicht aktiviert, sind Kampfschäden aktiviert."/>
+			<check_box label="Kein Stoßen" name="PushRestrictCheck" tool_tip="Verhindert Skripte am Stoßen. Durch Aktivieren dieser Option verhindern Sie störendes Verhalten auf Ihrem Land."/>
+			<check_box label="Ort in Suche anzeigen (30 L$/Woche) unter" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/>
+			<combo_box name="land category with adult">
+				<combo_box.item label="Alle Kategorien" name="item0"/>
+				<combo_box.item label="Lindenort" name="item1"/>
+				<combo_box.item label="Adult" name="item2"/>
+				<combo_box.item label="Kunst &amp; Kultur" name="item3"/>
+				<combo_box.item label="Business" name="item4"/>
+				<combo_box.item label="Bildung" name="item5"/>
+				<combo_box.item label="Spielen" name="item6"/>
+				<combo_box.item label="Treffpunkt" name="item7"/>
+				<combo_box.item label="Anfängergerecht" name="item8"/>
+				<combo_box.item label="Parks und Natur" name="item9"/>
+				<combo_box.item label="Wohngebiet" name="item10"/>
+				<combo_box.item label="Shopping" name="item11"/>
+				<combo_box.item label="Sonstige" name="item12"/>
+			</combo_box>
+			<combo_box left="266" name="land category" width="130">
+				<combo_box.item label="Alle Kategorien" name="item0"/>
+				<combo_box.item label="Lindenort" name="item1"/>
+				<combo_box.item label="Kunst und Kultur" name="item3"/>
+				<combo_box.item label="Business" name="item4"/>
+				<combo_box.item label="Bildung" name="item5"/>
+				<combo_box.item label="Spielen" name="item6"/>
+				<combo_box.item label="Treffpunkt" name="item7"/>
+				<combo_box.item label="Anfängergerecht" name="item8"/>
+				<combo_box.item label="Parks und Natur" name="item9"/>
+				<combo_box.item label="Wohngebiet" name="item10"/>
+				<combo_box.item label="Shopping" name="item11"/>
+				<combo_box.item label="Sonstige" name="item12"/>
+			</combo_box>
+			<check_box label="Mature-Inhalt" name="MatureCheck" tool_tip=""/>
+			<text name="Snapshot:">
+				Foto:
+			</text>
+			<texture_picker label="" name="snapshot_ctrl" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+			<text name="landing_point">
+				Landepunkt: [LANDING]
+			</text>
+			<button label="Festlegen" label_selected="Festlegen" left="234" name="Set" tool_tip="Legt den Landepunkt fest, an dem Besucher ankommen. Legt die Position Ihres Avatars innerhalb dieser Parzelle fest." width="70"/>
+			<button label="Löschen" label_selected="Löschen" left="312" name="Clear" tool_tip="Landepunkt löschen." width="70"/>
+			<text name="Teleport Routing: ">
+				Teleport-Route:
+			</text>
+			<combo_box name="landing type" tool_tip="Teleport-Route -- festlegen, wie Teleports auf Ihrem Land gehandhabt werden sollen.">
+				<combo_box.item label="Blockiert" name="Blocked"/>
+				<combo_box.item label="Landepunkt" name="LandingPoint"/>
+				<combo_box.item label="Ãœberall" name="Anywhere"/>
+			</combo_box>
+		</panel>
+		<panel label="Medien" name="land_media_panel">
+			<text name="with media:">
+				Typ:
+			</text>
+			<combo_box name="media type" tool_tip="Geben Sie einen URL für den Film, die Webseite oder ein anderes Medium ein"/>
+			<text name="at URL:">
+				Start URL:
+			</text>
+			<button label="Einstellen..." label_selected="Einstellen..." name="set_media_url"/>
+			<text name="CurrentURL:">
+				Aktuelle URL:
+			</text>
+			<button label="Zurücksetzen..." label_selected="Zurücksetzen..." name="reset_media_url"/>
+			<check_box label="URL ausblenden" name="hide_media_url" tool_tip="Aktivieren Sie diese Option, wenn Sie nicht möchten, dass unautorisierte Personen die Medien-URL sehen können. Diese Option ist für HTML-Medien nicht verfügbar."/>
+			<text name="Description:">
+				Inhalt:
+			</text>
+			<line_editor name="url_description" tool_tip="Text, der neben der Abspielen/Laden-Schaltfläche angezeigt wird"/>
+			<text name="Media texture:">
+				Textur
+ersetzen:
+			</text>
+			<texture_picker label="" name="media texture" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+			<text name="replace_texture_help">
+				Objekte, die diese Textur verwenden, werden den Film oder die Webseite anzeigen, nachdem Sie auf den Pfeil (Wiedergabe) klicken.
+
+Wählen Sie das kleine Bild aus, um eine andere Textur auszuwählen.
+			</text>
+			<check_box label="Automatisch skalieren" name="media_auto_scale" tool_tip="Aktivieren Sie diese Option, um den Inhalt für diese Parzelle automatisch zu skalieren. Dies ist eventuell langsamer und die Qualität ist schlechter, aber Sie müssen keine weitere Texturskalierung oder -anpassung vornehmen."/>
+			<text name="media_size" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen.">
+				Größe:
+			</text>
+			<spinner name="media_size_width" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."/>
+			<spinner name="media_size_height" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."/>
+			<text name="pixels">
+				Pixel
+			</text>
+			<text name="Options:">
+				Optionen:
+			</text>
+			<check_box label="Schleife" name="media_loop" tool_tip="Spielt das Medium in einer Schleife ab.  Der Abspielvorgang wird immer wieder von vorne fortgesetzt."/>
+		</panel>
+		<panel label="Audio" name="land_audio_panel">
+			<text name="MusicURL:">
+				Musik-URL:
+			</text>
+			<text name="Sound:">
+				Sound:
+			</text>
+			<check_box label="Gesten- und Objektgeräusche auf diese Parzelle beschränken" name="check sound local"/>
+			<text name="Voice settings:">
+				Voice:
+			</text>
+			<check_box label="Voice aktivieren" name="parcel_enable_voice_channel"/>
+			<check_box label="Voice aktivieren (vom Grundstück eingerichtet)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+			<check_box label="Voice auf diese Parzelle beschränken" name="parcel_enable_voice_channel_parcel"/>
+		</panel>
+		<panel label="Zugang" name="land_access_panel">
+			<panel.string name="estate_override">
+				Eine oder mehrere dieser Optionen gelten auf Grundstücksebene
+			</panel.string>
+			<text name="Limit access to this parcel to:">
+				Zugang zu dieser Parzelle
+			</text>
+			<check_box label="Freien Zugang erlauben" name="public_access"/>
+			<text name="Only Allow">
+				Zugang verweigern für:
+			</text>
+			<check_box label="Einwohner, die keine Zahlungsinformationen bei Linden Lab hinterlegt haben" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen."/>
+			<check_box label="Einwohner, die keine altersgeprüften Erwachsenen sind" name="limit_age_verified" tool_tip="Einwohner ohne Altersüberprüfung verbannen. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
+			<check_box label="Gruppenzugang erlauben: [GROUP]" name="GroupCheck" tool_tip="Gruppe im Register „Allgemein“ festlegen."/>
+			<check_box label="Pässe verkaufen an:" name="PassCheck" tool_tip="Ermöglicht befristeten Zugang zu dieser Parzelle"/>
+			<combo_box name="pass_combo">
+				<combo_box.item label="Jeden" name="Anyone"/>
+				<combo_box.item label="Gruppe" name="Group"/>
+			</combo_box>
+			<spinner label="Preis in L$:" name="PriceSpin"/>
+			<spinner label="Online-Zeit:" name="HoursSpin"/>
+			<text label="Immer erlauben" name="AllowedText">
+				Zulässige Einwohner
+			</text>
+			<name_list name="AccessList" tool_tip="([LISTED] angezeigt, max. [MAX])"/>
+			<button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_allowed"/>
+			<button label="Entfernen" label_selected="Entfernen" name="remove_allowed"/>
+			<text label="Verbannen" name="BanCheck">
+				Verbannte Einwohner
+			</text>
+			<name_list name="BannedList" tool_tip="([LISTED] angezeigt, max. [MAX])"/>
+			<button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_banned"/>
+			<button label="Entfernen" label_selected="Entfernen" name="remove_banned"/>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_animation_preview.xml b/indra/newview/skins/default/xui/de/floater_animation_preview.xml
index fbd03ab3d73..0d56f1ef9f5 100644
--- a/indra/newview/skins/default/xui/de/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_animation_preview.xml
@@ -1,91 +1,184 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Animation Preview" title="">
-	<text name="name_label">
-		Name:
-	</text>
-	<line_editor name="name_form"/>
-	<text name="description_label">
-		Beschreibung:
-	</text>
-	<spinner label="Priorität" name="priority" tool_tip="Steuert, welche Animationen von dieser Animation überschrieben werden können."/>
-	<check_box bottom_delta="-18" label="Schleife" name="loop_check" tool_tip="Erzeugt eine Animationsschleife."/>
-	<spinner label="In (%)" name="loop_in_point" tool_tip="Anfang einer Animationsschleife festlegen."/>
-	<spinner label="Aus (%)" name="loop_out_point" tool_tip="Ende einer Animationsschleife festlegen."/>
-	<text name="hand_label">
-		Handhaltung
-	</text>
-	<combo_box label="" name="hand_pose_combo" tool_tip="Steuert während der Animation die Bewegung der Hände.">
-		<combo_box.item name="Spread" label="Dehnen" />
-		<combo_box.item name="Relaxed" label="Entspannt" />
-		<combo_box.item name="PointBoth" label="Beide zeigen" />
-		<combo_box.item name="Fist" label="Faust" />
-		<combo_box.item name="RelaxedLeft" label="Links entspannt" />
-		<combo_box.item name="PointLeft" label="Nach links zeigen" />
-		<combo_box.item name="FistLeft" label="Linke Faust" />
-		<combo_box.item name="RelaxedRight" label="Rechts entspannt" />
-		<combo_box.item name="PointRight" label="Nach rechts zeigen" />
-		<combo_box.item name="FistRight" label="Rechte Faust" />
-		<combo_box.item name="SaluteRight" label="Rechts salutieren" />
-		<combo_box.item name="Typing" label="Tippt" />
-		<combo_box.item name="PeaceRight" label="Friedensrecht" />
-	</combo_box>
-	<text name="emote_label">
-		Ausdruck
-	</text>
-	<combo_box label="" name="emote_combo" tool_tip="Steuert Gesichtsregungen während der Animation.">
-		<combo_box.item name="[None]" label="Keine]" />
-		<combo_box.item name="Aaaaah" label="Aaaaah" />
-		<combo_box.item name="Afraid" label="Ängstlich" />
-		<combo_box.item name="Angry" label="Verärgert" />
-		<combo_box.item name="BigSmile" label="Grinst" />
-		<combo_box.item name="Bored" label="Gelangweilt" />
-		<combo_box.item name="Cry" label="Weinen" />
-		<combo_box.item name="Disdain" label="Verachten" />
-		<combo_box.item name="Embarrassed" label="Verlegen" />
-		<combo_box.item name="Frown" label="Stirnrunzeln" />
-		<combo_box.item name="Kiss" label="Küssen" />
-		<combo_box.item name="Laugh" label="Lachen" />
-		<combo_box.item name="Plllppt" label="Bäääh" />
-		<combo_box.item name="Repulsed" label="Zurückgestoßen" />
-		<combo_box.item name="Sad" label="Traurig" />
-		<combo_box.item name="Shrug" label="Schulterzucken" />
-		<combo_box.item name="Smile" label="Lächeln" />
-		<combo_box.item name="Surprise" label="Ãœberraschung" />
-		<combo_box.item name="Wink" label="Zwinkern" />
-		<combo_box.item name="Worry" label="Sorgenvoll" />
-	</combo_box>
-	<text name="preview_label" width="97">
-		Vorschau während:
-	</text>
-	<combo_box label="" left_delta="107" name="preview_base_anim" tool_tip="Hiermit können Sie das Verhalten Ihres Avatars testen, während Ihr Avatar normale Bewegungen ausführt.">
-		<combo_box.item name="Standing" label="Stehend" />
-		<combo_box.item name="Walking" label="Geht" />
-		<combo_box.item name="Sitting" label="Sitzt" />
-		<combo_box.item name="Flying" label="Fliegend" />
-	</combo_box>
-	<spinner label="Eingang glätten (s)" label_width="105" name="ease_in_time" tool_tip="Einblendungsgeschwindigkeit von Animationen (in Sekunden)." width="175"/>
-	<spinner bottom_delta="-20" label="Ausgang glätten (s)" label_width="105" left="10" name="ease_out_time" tool_tip="Ausblendungsgeschwindigkeit von Animationen (in Sekunden)." width="175"/>
-	<button bottom_delta="-32" label="" name="play_btn" tool_tip="Animation stoppen/wiedergeben."/>
-	<button label="" name="stop_btn" tool_tip="Animation anhalten"/>
-	<slider label="" name="playback_slider"/>
-	<text name="bad_animation_text">
-		Animationsdatei konnte nicht gelesen werden.
-
-Wir empfehlen exportierte BVH-Dateien aus Poser 4.
-	</text>
-	<button label="Abbrechen" name="cancel_btn"/>
-	<button label="Hochladen ([AMOUNT] L$)" name="ok_btn"/>
-	<string name="failed_to_initialize">
-		Bewegung konnte nicht initialisiert werden
-	</string>
-	<string name="anim_too_long">
-		Animationsdatei ist [LENGTH] Sekunden lang.
-
-Maximal erlaubt sind [MAX_LENGTH] Sekunden.
-	</string>
-	<string name="failed_file_read">
-		Animationsdatei konnte nicht gelesen werden.
-
-[STATUS]
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview" title="">
+	<floater.string name="failed_to_initialize">
+		Bewegung konnte nicht initialisiert werden
+	</floater.string>
+	<floater.string name="anim_too_long">
+		Animationsdatei ist [LENGTH] Sekunden lang.
+
+Maximal erlaubt sind [MAX_LENGTH] Sekunden.
+	</floater.string>
+	<floater.string name="failed_file_read">
+		Animationsdatei konnte nicht gelesen werden.
+
+[STATUS]
+	</floater.string>
+	<floater.string name="E_ST_OK">
+		OK
+	</floater.string>
+	<floater.string name="E_ST_EOF">
+		Unvollständige Datei
+	</floater.string>
+	<floater.string name="E_ST_NO_CONSTRAINT">
+		Constraint-Definition kann nicht gelesen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_FILE">
+		BVH-Datei kann nicht geöffnet werden
+	</floater.string>
+	<floater.string name="E_ST_NO_HIER">
+		Ungültiger HIERARCHY-Titel.
+	</floater.string>
+	<floater.string name="E_ST_NO_JOINT">
+		ROOT oder JOINT nicht gefunden.
+	</floater.string>
+	<floater.string name="E_ST_NO_NAME">
+		JOINT-Name nicht erfasst.
+	</floater.string>
+	<floater.string name="E_ST_NO_OFFSET">
+		VERSATZ nicht gefunden.
+	</floater.string>
+	<floater.string name="E_ST_NO_CHANNELS">
+		CHANNELS nicht gefunden.
+	</floater.string>
+	<floater.string name="E_ST_NO_ROTATION">
+		Kann Rotations-Reihenfolge nicht erfassen.
+	</floater.string>
+	<floater.string name="E_ST_NO_AXIS">
+		Kann Rotations-Achse nicht erfassen.
+	</floater.string>
+	<floater.string name="E_ST_NO_MOTION">
+		MOTION nicht gefunden.
+	</floater.string>
+	<floater.string name="E_ST_NO_FRAMES">
+		Anzahl der Bilder kann nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_FRAME_TIME">
+		Bildzeit kann nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_POS">
+		Positions-Werte können nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_ROT">
+		Kann Rotations-Werte nicht erfassen.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_FILE">
+		Datei kann nicht geöffnet werden
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_HEADER">
+		Ãœbersetzungstitel kann nicht gelesen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_NAME">
+		Übersetzungsnamen können nicht geladen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_IGNORE">
+		Ignorier-Wert kann nicht gelesen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_RELATIVE">
+		Ãœbersetzungs-Wert kann nicht gelesen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_OUTNAME">
+		Outname-Wert kann nicht gelesen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MATRIX">
+		Ãœbersetzungsmatrix kann nicht geladen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MERGECHILD">
+		Mergechild-Name nicht erfasst.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MERGEPARENT">
+		Mergeparent-Name nicht erfasst.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_PRIORITY">
+		Prioritätswert kann nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_LOOP">
+		Loop-Wert kann nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EASEIN">
+		Easeln-Wert kann nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EASEOUT">
+		easeOut-Wert kann nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_HAND">
+		Hand-Morph-Wert nicht erfasst.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EMOTE">
+		Emote-Name kann nicht gelesen werden.
+	</floater.string>
+	<text name="name_label">
+		Name:
+	</text>
+	<line_editor name="name_form"/>
+	<text name="description_label">
+		Beschreibung:
+	</text>
+	<spinner label="Priorität" name="priority" tool_tip="Steuert, welche Animationen von dieser Animation überschrieben werden können."/>
+	<check_box bottom_delta="-18" label="Schleife" name="loop_check" tool_tip="Erzeugt eine Animationsschleife."/>
+	<spinner label="In (%)" name="loop_in_point" tool_tip="Anfang einer Animationsschleife festlegen."/>
+	<spinner label="Aus (%)" name="loop_out_point" tool_tip="Ende einer Animationsschleife festlegen."/>
+	<text name="hand_label">
+		Handhaltung
+	</text>
+	<combo_box label="" name="hand_pose_combo" tool_tip="Steuert während der Animation die Bewegung der Hände.">
+		<combo_box.item label="Dehnen" name="Spread"/>
+		<combo_box.item label="Entspannt" name="Relaxed"/>
+		<combo_box.item label="Beide zeigen" name="PointBoth"/>
+		<combo_box.item label="Faust" name="Fist"/>
+		<combo_box.item label="Links entspannt" name="RelaxedLeft"/>
+		<combo_box.item label="Nach links zeigen" name="PointLeft"/>
+		<combo_box.item label="Linke Faust" name="FistLeft"/>
+		<combo_box.item label="Rechts entspannt" name="RelaxedRight"/>
+		<combo_box.item label="Nach rechts zeigen" name="PointRight"/>
+		<combo_box.item label="Rechte Faust" name="FistRight"/>
+		<combo_box.item label="Rechts salutieren" name="SaluteRight"/>
+		<combo_box.item label="Tippt" name="Typing"/>
+		<combo_box.item label="Friedensrecht" name="PeaceRight"/>
+	</combo_box>
+	<text name="emote_label">
+		Ausdruck
+	</text>
+	<combo_box label="" name="emote_combo" tool_tip="Steuert Gesichtsregungen während der Animation.">
+		<combo_box.item label="Keine]" name="[None]"/>
+		<combo_box.item label="Aaaaah" name="Aaaaah"/>
+		<combo_box.item label="Ängstlich" name="Afraid"/>
+		<combo_box.item label="Verärgert" name="Angry"/>
+		<combo_box.item label="Grinst" name="BigSmile"/>
+		<combo_box.item label="Gelangweilt" name="Bored"/>
+		<combo_box.item label="Weinen" name="Cry"/>
+		<combo_box.item label="Verachten" name="Disdain"/>
+		<combo_box.item label="Verlegen" name="Embarrassed"/>
+		<combo_box.item label="Stirnrunzeln" name="Frown"/>
+		<combo_box.item label="Küssen" name="Kiss"/>
+		<combo_box.item label="Lachen" name="Laugh"/>
+		<combo_box.item label="Bäääh" name="Plllppt"/>
+		<combo_box.item label="Zurückgestoßen" name="Repulsed"/>
+		<combo_box.item label="Traurig" name="Sad"/>
+		<combo_box.item label="Schulterzucken" name="Shrug"/>
+		<combo_box.item label="Lächeln" name="Smile"/>
+		<combo_box.item label="Ãœberraschung" name="Surprise"/>
+		<combo_box.item label="Zwinkern" name="Wink"/>
+		<combo_box.item label="Sorgenvoll" name="Worry"/>
+	</combo_box>
+	<text name="preview_label" width="97">
+		Vorschau während:
+	</text>
+	<combo_box label="" left_delta="107" name="preview_base_anim" tool_tip="Hiermit können Sie das Verhalten Ihres Avatars testen, während Ihr Avatar normale Bewegungen ausführt.">
+		<combo_box.item label="Stehend" name="Standing"/>
+		<combo_box.item label="Geht" name="Walking"/>
+		<combo_box.item label="Sitzt" name="Sitting"/>
+		<combo_box.item label="Fliegend" name="Flying"/>
+	</combo_box>
+	<spinner label="Eingang glätten (s)" label_width="105" name="ease_in_time" tool_tip="Einblendungsgeschwindigkeit von Animationen (in Sekunden)." width="175"/>
+	<spinner bottom_delta="-20" label="Ausgang glätten (s)" label_width="105" left="10" name="ease_out_time" tool_tip="Ausblendungsgeschwindigkeit von Animationen (in Sekunden)." width="175"/>
+	<button bottom_delta="-32" label="" name="play_btn" tool_tip="Animation stoppen/wiedergeben."/>
+	<button label="" name="stop_btn" tool_tip="Animation anhalten"/>
+	<slider label="" name="playback_slider"/>
+	<text name="bad_animation_text">
+		Animationsdatei konnte nicht gelesen werden.
+
+Wir empfehlen exportierte BVH-Dateien aus Poser 4.
+	</text>
+	<button label="Abbrechen" name="cancel_btn"/>
+	<button label="Hochladen ([AMOUNT] L$)" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
index e1ea7926944..b95b6febd98 100644
--- a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
@@ -1,45 +1,43 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="EINWOHNER AUSWÄHLEN">
-	<tab_container name="ResidentChooserTabs">
-		<panel label="Suchen" name="SearchPanel">
-			<text name="InstructSearchResidentName">
-				Geben Sie einen Teil des Namens des
-Einwohners ein:
-			</text>
-			<line_editor bottom_delta="-36" name="Edit" />
-			<button label="Suchen" label_selected="Suchen" name="Find"/>
-			<scroll_list height="74" name="SearchResults" bottom_delta="-79"/>
-		</panel>
-		<panel label="Visitenkarten" name="CallingCardsPanel">
-			<text name="InstructSelectCallingCard">
-				Wählen Sie eine Visitenkarte:
-			</text>
-		</panel>
-		<panel label="In meiner Nähe" name="NearMePanel">
-			<text name="InstructSelectResident">
-				Einwohner in der Nähe
-auswählen:
-			</text>
-			<button font="SansSerifSmall" label="Liste aktualisieren" label_selected="Liste aktualisieren" name="Refresh" left_delta="10" width="105"/>
-			<slider label="Bereich" name="near_me_range" bottom_delta="-36"/>
-			<text name="meters">
-				Meter
-			</text>
-      <scroll_list bottom_delta="-169" height="159" name="NearMe"  />
-		</panel>
-	</tab_container>
-	<button label="Auswählen" label_selected="Auswählen" name="Select"/>
-	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
-	<string name="not_found">
-		„[TEXT]“ nicht gefunden
-	</string>
-	<string name="no_one_near">
-		Niemand in der Nähe
-	</string>
-	<string name="no_results">
-		Keine Ergebnisse
-	</string>
-	<string name="searching">
-		Suchen...
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="avatarpicker" title="EINWOHNER AUSWÄHLEN">
+	<tab_container name="ResidentChooserTabs">
+		<panel label="Suchen" name="SearchPanel">
+			<text name="InstructSearchResidentName">
+				Geben Sie einen Teil des Namens einer Person ein:
+			</text>
+			<line_editor bottom_delta="-36" name="Edit"/>
+			<button label="Los" label_selected="Los" name="Find"/>
+			<scroll_list bottom_delta="-79" height="74" name="SearchResults"/>
+		</panel>
+		<panel label="Visitenkarten" name="CallingCardsPanel">
+			<text name="InstructSelectCallingCard">
+				Wählen Sie eine Visitenkarte:
+			</text>
+		</panel>
+		<panel label="In meiner Nähe" name="NearMePanel">
+			<text name="InstructSelectResident">
+				Wählen Sie eine Person aus, die sich in der Nähe befindet:
+			</text>
+			<button font="SansSerifSmall" label="Liste aktualisieren" label_selected="Liste aktualisieren" left_delta="10" name="Refresh" width="105"/>
+			<slider bottom_delta="-36" label="Bereich" name="near_me_range"/>
+			<text name="meters">
+				Meter
+			</text>
+			<scroll_list bottom_delta="-169" height="159" name="NearMe"/>
+		</panel>
+	</tab_container>
+	<button label="OK" label_selected="OK" name="Select"/>
+	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
+	<string name="not_found">
+		„[TEXT]“ nicht gefunden
+	</string>
+	<string name="no_one_near">
+		Niemand in der Nähe
+	</string>
+	<string name="no_results">
+		Keine Ergebnisse
+	</string>
+	<string name="searching">
+		Suchen...
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_beacons.xml b/indra/newview/skins/default/xui/de/floater_beacons.xml
index 58e2e2681f4..bfa3f6e4c93 100644
--- a/indra/newview/skins/default/xui/de/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/de/floater_beacons.xml
@@ -1,15 +1,21 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="BEACONS">
-	<panel name="beacons_panel">
-		<check_box label="Auf Berührung beschränkte Skriptobjekte" name="touch_only"/>
-		<check_box label="Skripting-Objekte" name="scripted"/>
-		<check_box label="Physische Objekte" name="physical"/>
-		<check_box label="Soundquellen" name="sounds"/>
-		<check_box label="Partikelquellen" name="particles"/>
-		<check_box label="Glanzlichter anzeigen" name="highlights"/>
-		<check_box label="Beacons anzeigen" name="beacons"/>
-		<text name="beacon_width_label">
-			Beacon-Breite:
-		</text>
-	</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="beacons" title="BEACONS">
+	<panel name="beacons_panel">
+		<text name="label_show">
+			Anzeigen:
+		</text>
+		<check_box label="Beacons" name="beacons"/>
+		<check_box label="Glanzlichter" name="highlights"/>
+		<text name="beacon_width_label" tool_tip="Beacon-Breite">
+			Breite:
+		</text>
+		<text name="label_objects">
+			Für diese Objekte:
+		</text>
+		<check_box label="Physisch" name="physical"/>
+		<check_box label="Skriptobjekte" name="scripted"/>
+		<check_box label="Nur berühren" name="touch_only"/>
+		<check_box label="Soundquellen" name="sounds"/>
+		<check_box label="Partikelquellen" name="particles"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_build_options.xml b/indra/newview/skins/default/xui/de/floater_build_options.xml
index 58f117f6b16..2f510cd75af 100644
--- a/indra/newview/skins/default/xui/de/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_build_options.xml
@@ -1,8 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="build options floater" title="RASTEROPTIONEN">
-	<spinner label="Rastereinheit (Meter)" name="GridResolution" />
-	<spinner label="Rastergröße (Meter)" name="GridDrawSize" />
-	<check_box label="Einrasten von Untereinheiten aktivieren" name="GridSubUnit" />
-	<check_box label="Querschnitte anzeigen" name="GridCrossSection" />
-	<slider label="Rasterdeckkraft" name="GridOpacity" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="build options floater" title="RASTEROPTIONEN">
+	<spinner label="Rastereinheit (Meter)" name="GridResolution"/>
+	<spinner label="Rastergröße (Meter)" name="GridDrawSize"/>
+	<check_box label="An Untereinheiten ausrichten" name="GridSubUnit"/>
+	<check_box label="Querschnitte anzeigen" name="GridCrossSection"/>
+	<text name="grid_opacity_label" tool_tip="Rasterdeckkraft">
+		Deckkraft:
+	</text>
+	<slider label="Rasterdeckkraft" name="GridOpacity"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
index fff6aa4b73e..1dceb1ad674 100644
--- a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
@@ -1,44 +1,53 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="MEHRERE INHALTSBERECHTIGUNGEN ÄNDERN">
-	<text name="applyto">
-		Inhaltsarten
-	</text>
-	<check_box label="Animation" name="check_animation"/>
-	<check_box label="Körperteile" name="check_bodypart"/>
-	<check_box label="Kleidung" name="check_clothing"/>
-	<check_box label="Gesten" name="check_gesture"/>
-	<check_box label="Landmarken" name="check_landmark"/>
-	<check_box label="Notizkarten" name="check_notecard"/>
-	<check_box label="Objekte" name="check_object"/>
-	<check_box label="Skripts" name="check_script"/>
-	<check_box label="Sounds" name="check_sound"/>
-	<check_box label="Texturen" name="check_texture"/>
-	<button label="Alle auswählen" label_selected="Alle" name="check_all"/>
-	<button label="Keine" label_selected="Keine" name="check_none"/>
-	<text name="newperms">
-		Neue Berechtigungen
-	</text>
-	<check_box label="Mit Gruppe teilen" name="share_with_group"/>
-	<check_box label="Kopieren allen erlauben" name="everyone_copy"/>
-	<text name="NextOwnerLabel">
-		Nächster Eigentümer kann:
-	</text>
-	<check_box label="Bearbeiten" name="next_owner_modify"/>
-	<check_box label="Kopieren" name="next_owner_copy"/>
-	<check_box label="Verkaufen/Weggeben" name="next_owner_transfer"/>
-	<button label="Hilfe" name="help"/>
-	<button label="Ãœbernehmen" name="apply"/>
-	<button label="Schließen" name="close"/>
-	<string name="nothing_to_modify_text">
-		Auswahl enthält keinen Inhalt, der bearbeitet werden kann.
-	</string>
-	<string name="status_text">
-		Berechtigungen werden eingestellt auf [NAME]
-	</string>
-	<string name="start_text">
-		Start: Anforderung auf Änderung der Berechtigung...
-	</string>
-	<string name="done_text">
-		Ende: Anforderung auf Änderung der Berechtigung.
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterbulkperms" title="Inhalt-Berechtigungen bearbeiten">
+	<floater.string name="nothing_to_modify_text">
+		Auswahl enthält keinen Inhalt, der bearbeitet werden kann.
+	</floater.string>
+	<floater.string name="status_text">
+		Berechtigungen werden eingestellt auf [NAME]
+	</floater.string>
+	<floater.string name="start_text">
+		Start: Anforderung auf Änderung der Berechtigung...
+	</floater.string>
+	<floater.string name="done_text">
+		Ende: Anforderung auf Änderung der Berechtigung.
+	</floater.string>
+	<check_box label="Animation" name="check_animation"/>
+	<icon name="icon_animation" tool_tip="Animation"/>
+	<check_box label="Körperteile" name="check_bodypart"/>
+	<icon name="icon_bodypart" tool_tip="Körperteile"/>
+	<check_box label="Kleidung" name="check_clothing"/>
+	<icon name="icon_clothing" tool_tip="Kleidung"/>
+	<check_box label="Gesten" name="check_gesture"/>
+	<icon name="icon_gesture" tool_tip="Gesten"/>
+	<check_box label="Notizkarten" name="check_notecard"/>
+	<icon name="icon_notecard" tool_tip="Notizkarten"/>
+	<check_box label="Objekte" name="check_object"/>
+	<icon name="icon_object" tool_tip="Objekte"/>
+	<check_box label="Skripts" name="check_script"/>
+	<icon name="icon_script" tool_tip="Skripts"/>
+	<check_box label="Sounds" name="check_sound"/>
+	<icon name="icon_sound" tool_tip="Sounds"/>
+	<check_box label="Texturen" name="check_texture"/>
+	<button label="√ Alle" label_selected="Alle" name="check_all"/>
+	<button label="Löschen" label_selected="Keine" name="check_none"/>
+	<text name="newperms">
+		Neue Inhalts-Berechtigungen
+	</text>
+	<text name="GroupLabel">
+		Gruppe:
+	</text>
+	<check_box label="Freigeben" name="share_with_group"/>
+	<text name="AnyoneLabel">
+		Jeder:
+	</text>
+	<check_box label="Kopieren" name="everyone_copy"/>
+	<text name="NextOwnerLabel">
+		Nächster Eigentümer:
+	</text>
+	<check_box label="Bearbeiten" name="next_owner_modify"/>
+	<check_box label="Kopieren" name="next_owner_copy"/>
+	<check_box initial_value="true" label="Transferieren" name="next_owner_transfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/>
+	<button label="OK" name="apply"/>
+	<button label="Abbrechen" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_buy_object.xml b/indra/newview/skins/default/xui/de/floater_buy_object.xml
index df6bf76240d..b1e4476207f 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_object.xml
@@ -1,26 +1,26 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="contents" title="OBJEKTKOPIE KAUFEN">
-	<text name="contents_text">
-		samt Inhalt:
-	</text>
-	<text name="buy_text">
-		[AMOUNT] L$ von [NAME] kaufen?
-	</text>
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn" width="73" />
-	<button label="Kaufen" label_selected="Kaufen" name="buy_btn" />
-	<text name="title_buy_text">
-		Kaufen
-	</text>
-	<string name="title_buy_copy_text">
-		Kopie kaufen von
-	</string>
-	<text name="no_copy_text">
-		(kein Kopieren)
-	</text>
-	<text name="no_modify_text">
-		(kein Bearbeiten)
-	</text>
-	<text name="no_transfer_text">
-		(kein Transferieren)
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="contents" title="OBJEKTKOPIE KAUFEN">
+	<text name="contents_text">
+		Inhalt:
+	</text>
+	<text name="buy_text">
+		[AMOUNT] L$ von [NAME] kaufen?
+	</text>
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn" width="73"/>
+	<button label="Kaufen" label_selected="Kaufen" name="buy_btn"/>
+	<text name="title_buy_text">
+		Kaufen
+	</text>
+	<string name="title_buy_copy_text">
+		Kopie kaufen von
+	</string>
+	<text name="no_copy_text">
+		(kein Kopieren)
+	</text>
+	<text name="no_modify_text">
+		(kein Bearbeiten)
+	</text>
+	<text name="no_transfer_text">
+		(kein Transferieren)
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_camera.xml b/indra/newview/skins/default/xui/de/floater_camera.xml
index f44db713d8b..a0cf6cbecf3 100644
--- a/indra/newview/skins/default/xui/de/floater_camera.xml
+++ b/indra/newview/skins/default/xui/de/floater_camera.xml
@@ -1,16 +1,23 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="camera_floater">
-	<floater.string name="rotate_tooltip">
-		Kamera um Fokus drehen
-	</floater.string>
-	<floater.string name="zoom_tooltip">
-		Kamera auf Fokus zoomen
-	</floater.string>
-	<floater.string name="move_tooltip">
-		Kamera nach oben, unten, links und rechts bewegen
-	</floater.string>
-	<panel name="controls">
-		<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
-		<joystick_zoom name="zoom" tool_tip="Kamera auf Fokus zoomen"/>
-	</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater">
+	<floater.string name="rotate_tooltip">
+		Kamera um Fokus drehen
+	</floater.string>
+	<floater.string name="zoom_tooltip">
+		Kamera auf Fokus zoomen
+	</floater.string>
+	<floater.string name="move_tooltip">
+		Kamera nach oben, unten, links und rechts bewegen
+	</floater.string>
+	<panel name="controls">
+		<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
+		<joystick_zoom name="zoom" tool_tip="Kamera auf Fokus zoomen"/>
+		<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus herum kreisen"/>
+	</panel>
+	<panel name="buttons">
+		<button label="" name="orbit_btn" tool_tip="Kamera kreisen"/>
+		<button label="" name="pan_btn" tool_tip="Kamera schwenken"/>
+		<button label="" name="avatarview_btn" tool_tip="Avatarsicht"/>
+		<button label="" name="freecamera_btn" tool_tip="Objekt ansehen"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_color_picker.xml b/indra/newview/skins/default/xui/de/floater_color_picker.xml
index 47f256918a0..4143f634aff 100644
--- a/indra/newview/skins/default/xui/de/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/de/floater_color_picker.xml
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="ColorPicker" title="FARBAUSWAHL">
-	<text name="r_val_text">
-		Rot:
-	</text>
-	<text name="g_val_text">
-		Grün:
-	</text>
-	<text name="b_val_text">
-		Blau:
-	</text>
-	<text name="h_val_text">
-		Farbton:
-	</text>
-	<text name="s_val_text">
-		Sätt.:
-	</text>
-	<text name="l_val_text">
-		Hell.:
-	</text>
-	<check_box label="Sofort übernehmen" name="apply_immediate" />
-	<button label="" label_selected="" name="color_pipette" />
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn" />
-	<button label="Auswählen" label_selected="Auswählen" name="select_btn" />
-	<text name="Current color:">
-		Aktuelle Farbe:
-	</text>
-	<text name="(Drag below to save.)">
-(Nach unten ziehen,
- um zu speichern)
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ColorPicker" title="FARBAUSWAHL">
+	<text name="r_val_text">
+		Rot:
+	</text>
+	<text name="g_val_text">
+		Grün:
+	</text>
+	<text name="b_val_text">
+		Blau:
+	</text>
+	<text name="h_val_text">
+		Farbton:
+	</text>
+	<text name="s_val_text">
+		Sätt.:
+	</text>
+	<text name="l_val_text">
+		Hell.:
+	</text>
+	<check_box label="Jetzt übernehmen" name="apply_immediate"/>
+	<button label="" label_selected="" name="color_pipette"/>
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
+	<button label="OK" label_selected="Auswählen" name="select_btn"/>
+	<text name="Current color:">
+		Aktuelle Farbe:
+	</text>
+	<text name="(Drag below to save.)">
+		(Nach unten ziehen,
+ um zu speichern)
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_god_tools.xml b/indra/newview/skins/default/xui/de/floater_god_tools.xml
index f93a9b94761..34ea18457e4 100644
--- a/indra/newview/skins/default/xui/de/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_god_tools.xml
@@ -1,136 +1,102 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="godtools floater" title="GOTT-WERKZEUGE">
-	<tab_container name="GodTools Tabs">
-		<panel label="Raster" name="grid">
-			<button label="Alle Benutzer hinauswerfen" label_selected="Alle Benutzer hinauswerfen"
-			     name="Kick all users" width="175" />
-			<button label="Sichtbarkeits-Cache dieser Regionskarte leeren"
-			     label_selected="Sichtbarkeits-Cache dieser Regionskarte leeren"
-			     name="Flush This Region&apos;s Map Visibility Caches" width="285" />
-		</panel>
-		<panel label="Region" name="region">
-			<text name="Sim Name:" width="55">
-				Sim-Name:
-			</text>
-			<check_box label="Startbereich Einleitung" name="check prelude"
-			     tool_tip="Diese Region zu einem Startbereich machen." />
-			<check_box label="Sonne fest" name="check fixed sun"
-			     tool_tip="Fixiert den Sonnenstand (wie in „Region/Grundstück“ &gt; „Terrain“." />
-			<check_box label="Zuhause auf Teleport &#10;zurücksetzen" name="check reset home"
-			     tool_tip="Wenn Einwohner wegteleportieren, ihr Zuhause auf Zielposition setzen." height="32" />
-			<check_box label="Sichtbar" name="check visible"
-			     tool_tip="Diese Region für Nicht-Götter sichtbar machen." bottom_delta="-32" />
-			<check_box label="Schaden" name="check damage"
-			     tool_tip="Schaden in dieser Region aktivieren." />
-			<check_box label="Trafficüberwachung blockieren" name="block dwell"
-			     tool_tip="In dieser Region die Traffic-Berechnung abschalten." />
-			<check_box label="Terraformen blockieren" name="block terraform"
-			     tool_tip="Das Terraformen von Land verbieten (Benutzen Sie dies um Leuten das Terraformen ihres Landes zu verbieten)" />
-			<check_box label="Sandkasten" name="is sandbox"
-			     tool_tip="Sandkastenregion ein-/ausschalten." />
-			<button label="Terrain formen" label_selected="Terrain formen" name="Bake Terrain"
-			     tool_tip="Das aktuelle Terrain als Standard speichern." width="118" />
-			<button label="Terrain zurücksetzen" label_selected="Terrain zurücksetzen"
-			     name="Revert Terrain"
-			     tool_tip="Das aktuelle Terrain mit dem Standard ersetzen." width="118" />
-			<button label="Terrain tauschen" label_selected="Terrain tauschen" name="Swap Terrain"
-			     tool_tip="Aktuelles Terrain gegen Standard austauschen." width="118" />
-			<text name="estate id">
-				Grundstücks-ID:
-			</text>
-			<text name="parent id">
-				Parent ID:
-			</text>
-			<line_editor name="parentestate" tool_tip="Das übergeordnete Grundstück dieser Region" />
-			<text name="Grid Pos: ">
-				Raster-Pos.:
-			</text>
-			<line_editor name="gridposx" tool_tip="Die X-Rasterposition dieser Region" left_delta="110" width="35" />
-			<line_editor name="gridposy" tool_tip="Die Y-Rasterposition dieser Region" left_delta="45" width="35" />
-			<text name="Redirect to Grid: " >
-				Auf Raster umleiten:
-			</text>
-			<line_editor left_delta="110" name="redirectx" width="35" />
-			<line_editor left_delta="45" name="redirecty" width="35" />
-			<text name="billable factor text" font="SansSerifSmall" >
-				Abrechnungsfaktor:
-			</text>
-			<text name="land cost text">
-				L$ pro qm:
-			</text>
-			<button label="Aktualisieren" label_selected="Aktualisieren" name="Refresh"
-			     tool_tip="Klicken Sie hier, um die obigen Informationen zu aktualisieren." />
-			<button label="Ãœbernehmen" label_selected="Ãœbernehmen" name="Apply"
-			     tool_tip="Klicken Sie hier, um die obigen Änderungen zu übernehmen." />
-			<button label="Region auswählen" label_selected="Region auswählen"
-			     name="Select Region"
-			     tool_tip="Die gesamte Region mit dem Landwerkzeug auswählen." width="130" left="136"/>
-			<button label="Automatisch speichern" label_selected="Automatisch speichern"
-			     name="Autosave now"
-			     tool_tip="gzipped-Status im Autosave-Verzeichnis speichern." width="130" left="136"/>
-		</panel>
-		<panel label="Objekte" name="objects">
-			<text name="Sim Name:" width="55">
-				Sim-Name:
-			</text>
-			<text name="region name">
-				Welsh
-			</text>
-			<check_box label="Skripts &#10;deaktivieren" name="disable scripts"
-			     tool_tip="Skripts in dieser Region komplett abschalten" />
-			<check_box label="Kollisionen &#10;deaktivieren" name="disable collisions"
-			     tool_tip="Nicht-Avatar-Kollisionen in dieser Region komplett abschalten" />
-			<check_box label="Physik deaktivieren" name="disable physics"
-			     tool_tip="Die Physik in dieser Region komplett abschalten" />
-			<button label="Ãœbernehmen" label_selected="Ãœbernehmen" name="Apply"
-			     tool_tip="Klicken Sie hier, um die obigen Änderungen zu übernehmen." />
-			<button label="Ziel festlegen" label_selected="Ziel festlegen" name="Set Target"
-			     tool_tip="Den Ziel-Avatar für das Löschen von Objekten auswählen." />
-			<text name="target_avatar_name">
-				(kein Ziel)
-			</text>
-			<button label="Geskriptete Objekte des Ziels auf anderen Ländern löschen"
-			     label_selected="Geskriptete Objekte des Ziels auf anderen Ländern löschen"
-			     name="Delete Target&apos;s Scripted Objects On Others Land"
-			     tool_tip="Alle dem Ziel gehörenden geskripteten Objekte auf Land, das dem Ziel nicht gehört, löschen. Objekte (nicht kopierfähig) werden zurückgegeben." />
-			<button label="Geskriptete Objekte des Ziels auf *allen* Ländern löschen"
-			     label_selected="Geskriptete Objekte des Ziels auf *allen* Ländern löschen"
-			     name="Delete Target&apos;s Scripted Objects On *Any* Land"
-			     tool_tip="Alle dem Ziel gehörenden geskripteten Objekte in dieser Region löschen. Objekte (nicht kopierfähig) werden zurückgegeben." />
-			<button label="*ALLE* Objekte des Ziels löschen"
-			     label_selected="*ALLE* Objekte des Ziels löschen"
-			     name="Delete *ALL* Of Target&apos;s Objects"
-			     tool_tip="Alle dem Ziel gehörenden Objekte in dieser Region löschen. Objekte (nicht kopierfähig) werden zurückgegeben." />
-			<button label="Top-Kollisionsobjekte" label_selected="Top-Kollisionsobjekte"
-			     name="Get Top Colliders"
-			     tool_tip="Zeigt eine Liste der Objekte mit den meisten Callbacks in der nahen Phase an." width="130" />
-			<button label="Top-Skripts" label_selected="Top-Skripts" name="Get Top Scripts"
-			     tool_tip="Zeigt eine Liste der Objekte an, die die meiste Zeit über Skripts ausführen." width="130" />
-			<button label="Scripting-Ãœbersicht" label_selected="Scripting-Ãœbersicht"
-			     name="Scripts digest"
-			     tool_tip="Zeigt eine Liste aller Skripts mit Häufigkeit an." width="130" />
-		</panel>
-		<panel label="Anfrage" name="request">
-			<text name="Destination:">
-				Ziel:
-			</text>
-			<combo_box name="destination">
-				<combo_box.item name="item1" label="Auswahl" />
-				<combo_box.item name="item2" label="Avatar-Region" />
-			</combo_box>
-			<text name="Request:">
-				Anfrage:
-			</text>
-			<combo_box name="request">
-				<combo_box.item name="item1" label="Kollisionsobjekte &lt;Schritte&gt;" />
-				<combo_box.item name="item2" label="Skripts &lt;Zähler&gt;,&lt;Optionales Muster&gt;" />
-				<combo_box.item name="item3" label="Objekte &lt;Muster&gt;" />
-				<combo_box.item name="item4" label="lt;asset_id&gt; erstellen" />
-			</combo_box>
-			<text name="Parameter:">
-				Parameter:
-			</text>
-			<button label="Anfrage" label_selected="Anfrage" name="Make Request" />
-		</panel>
-	</tab_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="godtools floater" title="GOTT-WERKZEUGE">
+	<tab_container name="GodTools Tabs">
+		<panel label="Raster" name="grid">
+			<button label="Alle Benutzer hinauswerfen" label_selected="Alle Benutzer hinauswerfen" name="Kick all users" width="175"/>
+			<button label="Sichtbarkeits-Cache dieser Regionskarte leeren" label_selected="Sichtbarkeits-Cache dieser Regionskarte leeren" name="Flush This Region&apos;s Map Visibility Caches" width="285"/>
+		</panel>
+		<panel label="Region" name="region">
+			<text name="Sim Name:" width="55">
+				Sim-Name:
+			</text>
+			<check_box label="Startbereich Einleitung" name="check prelude" tool_tip="Diese Region zu einem Startbereich machen."/>
+			<check_box label="Sonne fest" name="check fixed sun" tool_tip="Fixiert den Sonnenstand (wie in „Region/Grundstück“ &gt; „Terrain“."/>
+			<check_box height="32" label="Zuhause auf Teleport 
+zurücksetzen" name="check reset home" tool_tip="Wenn Einwohner wegteleportieren, ihr Zuhause auf Zielposition setzen."/>
+			<check_box bottom_delta="-32" label="Sichtbar" name="check visible" tool_tip="Diese Region für Nicht-Götter sichtbar machen."/>
+			<check_box label="Schaden" name="check damage" tool_tip="Schaden in dieser Region aktivieren."/>
+			<check_box label="Trafficüberwachung blockieren" name="block dwell" tool_tip="In dieser Region die Traffic-Berechnung abschalten."/>
+			<check_box label="Terraformen blockieren" name="block terraform" tool_tip="Das Terraformen von Land verbieten (Benutzen Sie dies um Leuten das Terraformen ihres Landes zu verbieten)"/>
+			<check_box label="Sandkasten" name="is sandbox" tool_tip="Sandkastenregion ein-/ausschalten."/>
+			<button label="Terrain formen" label_selected="Terrain formen" name="Bake Terrain" tool_tip="Das aktuelle Terrain als Standard speichern." width="118"/>
+			<button label="Terrain zurücksetzen" label_selected="Terrain zurücksetzen" name="Revert Terrain" tool_tip="Das aktuelle Terrain mit dem Standard ersetzen." width="118"/>
+			<button label="Terrain tauschen" label_selected="Terrain tauschen" name="Swap Terrain" tool_tip="Aktuelles Terrain gegen Standard austauschen." width="118"/>
+			<text name="estate id">
+				Grundstücks-ID:
+			</text>
+			<text name="parent id">
+				Parent ID:
+			</text>
+			<line_editor name="parentestate" tool_tip="Das übergeordnete Grundstück dieser Region"/>
+			<text name="Grid Pos: ">
+				Raster-Pos.:
+			</text>
+			<line_editor left_delta="110" name="gridposx" tool_tip="Die X-Rasterposition dieser Region" width="35"/>
+			<line_editor left_delta="45" name="gridposy" tool_tip="Die Y-Rasterposition dieser Region" width="35"/>
+			<text name="Redirect to Grid: ">
+				Auf Raster umleiten:
+			</text>
+			<line_editor left_delta="110" name="redirectx" width="35"/>
+			<line_editor left_delta="45" name="redirecty" width="35"/>
+			<text font="SansSerifSmall" name="billable factor text">
+				Abrechnungsfaktor:
+			</text>
+			<text name="land cost text">
+				L$ pro qm:
+			</text>
+			<button label="Aktualisieren" label_selected="Aktualisieren" name="Refresh" tool_tip="Klicken Sie hier, um die obigen Informationen zu aktualisieren."/>
+			<button label="Übernehmen" label_selected="Übernehmen" name="Apply" tool_tip="Klicken Sie hier, um die obigen Änderungen zu übernehmen."/>
+			<button label="Region auswählen" label_selected="Region auswählen" left="136" name="Select Region" tool_tip="Die gesamte Region mit dem Landwerkzeug auswählen." width="130"/>
+			<button label="Automatisch speichern" label_selected="Automatisch speichern" left="136" name="Autosave now" tool_tip="gzipped-Status im Autosave-Verzeichnis speichern." width="130"/>
+		</panel>
+		<panel label="Objekte" name="objects">
+			<panel.string name="no_target">
+				(kein Ziel)
+			</panel.string>
+			<text name="Sim Name:" width="55">
+				Sim-Name:
+			</text>
+			<text name="region name">
+				Welsh
+			</text>
+			<check_box label="Skripts 
+deaktivieren" name="disable scripts" tool_tip="Skripts in dieser Region komplett abschalten"/>
+			<check_box label="Kollisionen 
+deaktivieren" name="disable collisions" tool_tip="Nicht-Avatar-Kollisionen in dieser Region komplett abschalten"/>
+			<check_box label="Physik deaktivieren" name="disable physics" tool_tip="Die Physik in dieser Region komplett abschalten"/>
+			<button label="Übernehmen" label_selected="Übernehmen" name="Apply" tool_tip="Klicken Sie hier, um die obigen Änderungen zu übernehmen."/>
+			<button label="Ziel festlegen" label_selected="Ziel festlegen" name="Set Target" tool_tip="Den Ziel-Avatar für das Löschen von Objekten auswählen."/>
+			<text name="target_avatar_name">
+				(kein Ziel)
+			</text>
+			<button label="Geskriptete Objekte des Ziels auf anderen Ländern löschen" label_selected="Geskriptete Objekte des Ziels auf anderen Ländern löschen" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="Alle dem Ziel gehörenden geskripteten Objekte auf Land, das dem Ziel nicht gehört, löschen. Objekte (nicht kopierfähig) werden zurückgegeben."/>
+			<button label="Geskriptete Objekte des Ziels auf *allen* Ländern löschen" label_selected="Geskriptete Objekte des Ziels auf *allen* Ländern löschen" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Alle dem Ziel gehörenden geskripteten Objekte in dieser Region löschen. Objekte (nicht kopierfähig) werden zurückgegeben."/>
+			<button label="*ALLE* Objekte des Ziels löschen" label_selected="*ALLE* Objekte des Ziels löschen" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="Alle dem Ziel gehörenden Objekte in dieser Region löschen. Objekte (nicht kopierfähig) werden zurückgegeben."/>
+			<button label="Top-Kollisionsobjekte" label_selected="Top-Kollisionsobjekte" name="Get Top Colliders" tool_tip="Zeigt eine Liste der Objekte mit den meisten Callbacks in der nahen Phase an." width="130"/>
+			<button label="Top-Skripts" label_selected="Top-Skripts" name="Get Top Scripts" tool_tip="Zeigt eine Liste der Objekte an, die die meiste Zeit über Skripts ausführen." width="130"/>
+			<button label="Scripting-Übersicht" label_selected="Scripting-Übersicht" name="Scripts digest" tool_tip="Zeigt eine Liste aller Skripts mit Häufigkeit an." width="130"/>
+		</panel>
+		<panel label="Anfrage" name="request">
+			<text name="Destination:">
+				Ziel:
+			</text>
+			<combo_box name="destination">
+				<combo_box.item label="Auswahl" name="item1"/>
+				<combo_box.item label="Avatar-Region" name="item2"/>
+			</combo_box>
+			<text name="Request:">
+				Anfrage:
+			</text>
+			<combo_box name="request">
+				<combo_box.item label="Kollisionsobjekte &lt;Schritte&gt;" name="item1"/>
+				<combo_box.item label="Skripts &lt;Zähler&gt;,&lt;Optionales Muster&gt;" name="item2"/>
+				<combo_box.item label="Objekte &lt;Muster&gt;" name="item3"/>
+				<combo_box.item label="lt;asset_id&gt; erstellen" name="item4"/>
+			</combo_box>
+			<text name="Parameter:">
+				Parameter:
+			</text>
+			<button label="Anfrage" label_selected="Anfrage" name="Make Request"/>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_hardware_settings.xml b/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
index 68f7d6872e8..ba2269012fe 100644
--- a/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
@@ -1,30 +1,28 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Hardware Settings Floater" title="HARDWARE-EINSTELLUNGEN">
-	<text name="Filtering:">
-		Filtern:
-	</text>
-	<check_box label="Anisotropische Filterung (langsamer, wenn aktiviert)" name="ani" />
-	<text name="Antialiasing:">
-		Antialiasing:
-	</text>
-	<combo_box label="Antialiasing" name="fsaa">
-		<combo_box.item name="FSAADisabled" label="Deaktiviert" />
-		<combo_box.item name="2x" label="2x" />
-		<combo_box.item name="4x" label="4x" />
-		<combo_box.item name="8x" label="8x" />
-		<combo_box.item name="16x" label="16x" />
-	</combo_box>
-	<spinner label="Gamma:" name="gamma" />
-	<text name="(brightness, lower is brighter)">
-		(Helligkeit, niedriger ist heller, 0=Standard)
-	</text>
-	<text name="Enable VBO:">
-		VBO aktivieren:
-	</text>
-	<check_box label="OpenGL Vertex-Buffer-Objekte aktivieren" name="vbo"
-	     tool_tip="Wenn Sie über moderne Grafikhardware verfügen, können Sie durch Aktivieren dieser Option die Geschwindigkeit verbessern.  Bei alter Hardware sind die VBO oft schlecht implementiert, was zu Abstürzen führen kann, wenn diese Option aktiviert ist." />
-	<slider label="Texturspeicher (MB):" name="GrapicsCardTextureMemory"
-	     tool_tip="Speicherplatz, der für Texturen zur Verfügung steht. In der Regel handelt es sich um Grafikkartenspeicher. Ein kleinerer Wert kann die Geschwindigkeit erhöhen, aber auch zu Texturunschärfen führen." />
-	<spinner label="Nebeldistanzverhältnis:" name="fog" />
-	<button label="OK" label_selected="OK" name="OK" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Hardware Settings Floater" title="HARDWARE-EINSTELLUNGEN">
+	<text name="Filtering:">
+		Filtern:
+	</text>
+	<check_box label="Anisotropische Filterung (langsamer, wenn aktiviert)" name="ani"/>
+	<text name="Antialiasing:">
+		Antialiasing:
+	</text>
+	<combo_box label="Antialiasing" name="fsaa">
+		<combo_box.item label="Deaktiviert" name="FSAADisabled"/>
+		<combo_box.item label="2x" name="2x"/>
+		<combo_box.item label="4x" name="4x"/>
+		<combo_box.item label="8x" name="8x"/>
+		<combo_box.item label="16x" name="16x"/>
+	</combo_box>
+	<spinner label="Gamma:" name="gamma"/>
+	<text name="(brightness, lower is brighter)">
+		(0 = Standard-Helligkeit, weniger = heller)
+	</text>
+	<text name="Enable VBO:">
+		VBO aktivieren:
+	</text>
+	<check_box label="OpenGL Vertex-Buffer-Objekte aktivieren" name="vbo" tool_tip="Wenn Sie über moderne Grafikhardware verfügen, können Sie durch Aktivieren dieser Option die Geschwindigkeit verbessern.  Bei alter Hardware sind die VBO oft schlecht implementiert, was zu Abstürzen führen kann, wenn diese Option aktiviert ist."/>
+	<slider label="Texturspeicher (MB):" name="GrapicsCardTextureMemory" tool_tip="Speicherplatz, der für Texturen zur Verfügung steht. In der Regel handelt es sich um Grafikkartenspeicher. Ein kleinerer Wert kann die Geschwindigkeit erhöhen, aber auch zu Texturunschärfen führen."/>
+	<spinner label="Nebeldistanzverhältnis:" name="fog"/>
+	<button label="OK" label_selected="OK" name="OK"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_image_preview.xml b/indra/newview/skins/default/xui/de/floater_image_preview.xml
index 724da834954..80c71d41f77 100644
--- a/indra/newview/skins/default/xui/de/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_image_preview.xml
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Image Preview" title="">
-	<text name="name_label">
-		Name:
-	</text>
-	<text name="description_label">
-		Beschreibung:
-	</text>
-	<text name="preview_label">
-		Bildvorschau als:
-	</text>
-	<combo_box label="Kleidungstyp" name="clothing_type_combo">
-		<combo_box.item name="Image" label="Bild" />
-		<combo_box.item name="Hair" label="Haar" />
-		<combo_box.item name="FemaleHead" label="Kopf (Frau)" />
-		<combo_box.item name="FemaleUpperBody" label="Oberkörper (Frau)" />
-		<combo_box.item name="FemaleLowerBody" label="Unterkörper (Frau)" />
-		<combo_box.item name="MaleHead" label="Kopf (Mann)" />
-		<combo_box.item name="MaleUpperBody" label="Oberkörper (Mann)" />
-		<combo_box.item name="MaleLowerBody" label="Unterkörper (Mann)" />
-		<combo_box.item name="Skirt" label="Rock" />
-		<combo_box.item name="SculptedPrim" label="Geformtes Primitiv" />
-	</combo_box>
-	<text name="bad_image_text">
-		Bild kann nicht gelesen werden.
-
-Speichern Sie das Bild als 24 Bit Targa (.tga).
-	</text>
-	<check_box label="Verlustfreie Komprimierung verwenden" name="lossless_check" />
-	<button label="Abbrechen" name="cancel_btn" />
-	<button label="Hochladen ([AMOUNT] L$)" name="ok_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Image Preview" title="">
+	<text name="name_label">
+		Name:
+	</text>
+	<text name="description_label">
+		Beschreibung:
+	</text>
+	<text name="preview_label">
+		Bildvorschau als:
+	</text>
+	<combo_box label="Kleidungstyp" name="clothing_type_combo">
+		<combo_box.item label="Bild" name="Image"/>
+		<combo_box.item label="Haare" name="Hair"/>
+		<combo_box.item label="Kopf (Frau)" name="FemaleHead"/>
+		<combo_box.item label="Oberkörper (Frau)" name="FemaleUpperBody"/>
+		<combo_box.item label="Unterkörper (Frau)" name="FemaleLowerBody"/>
+		<combo_box.item label="Kopf (Mann)" name="MaleHead"/>
+		<combo_box.item label="Oberkörper (Mann)" name="MaleUpperBody"/>
+		<combo_box.item label="Unterkörper (Mann)" name="MaleLowerBody"/>
+		<combo_box.item label="Rock" name="Skirt"/>
+		<combo_box.item label="Geformtes Primitiv" name="SculptedPrim"/>
+	</combo_box>
+	<text name="bad_image_text">
+		Bild kann nicht gelesen werden.
+
+Speichern Sie das Bild als 24 Bit Targa (.tga).
+	</text>
+	<check_box label="Verlustfreie Komprimierung verwenden" name="lossless_check"/>
+	<button label="Abbrechen" name="cancel_btn"/>
+	<button label="Hochladen ([AMOUNT] L$)" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
index ef85efdae0d..b5e8ed0b6fe 100644
--- a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
@@ -1,81 +1,67 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="item properties" title="INVENTAROBJEKT-EIGENSCHAFTEN">
-	<text name="LabelItemNameTitle">
-		Name:
-	</text>
-	<text name="LabelItemDescTitle">
-		Beschreibung:
-	</text>
-	<text name="LabelCreatorTitle">
-		Ersteller:
-	</text>
-	<text name="LabelCreatorName">
-		Nicole Linden
-	</text>
-	<button label="Profil..." label_selected="" name="BtnCreator" />
-	<text name="LabelOwnerTitle">
-		Eigentümer:
-	</text>
-	<text name="LabelOwnerName">
-		Thrax Linden
-	</text>
-	<button label="Profil..." label_selected="" name="BtnOwner" />
-	<text name="LabelAcquiredTitle">
-		Erworben:
-	</text>
-	<text name="LabelAcquiredDate">
-		Mittwoch, 24. Mai 2006, 12:50:46
-	</text>
-	<text name="OwnerLabel">
-		Sie können:
-	</text>
-	<check_box label="Bearbeiten" name="CheckOwnerModify" />
-	<check_box label="Kopieren" name="CheckOwnerCopy" left_delta="85" />
-	<check_box label="Verkaufen/Weggeben" name="CheckOwnerTransfer" />
-	<text name="BaseMaskDebug">
-		B:
-	</text>
-	<text name="OwnerMaskDebug">
-		O:
-	</text>
-	<text name="GroupMaskDebug">
-		G:
-	</text>
-	<text name="EveryoneMaskDebug">
-		E:
-	</text>
-	<text name="NextMaskDebug">
-		N:
-	</text>
-	<check_box label="Mit Gruppe teilen" name="CheckShareWithGroup" />
-	<check_box label="Kopieren allen erlauben" name="CheckEveryoneCopy" />
-	<text name="NextOwnerLabel" width="150">
-		Nächster Eigentümer kann:
-	</text>
-	<check_box label="Bearbeiten" name="CheckNextOwnerModify" />
-	<check_box label="Kopieren" name="CheckNextOwnerCopy" left_delta="85" />
-	<check_box label="Verkaufen/Weggeben" name="CheckNextOwnerTransfer" />
-	<text name="SaleLabel">
-		Objekt markieren:
-	</text>
-	<check_box label="Zum Verkauf" name="CheckPurchase" />
-	<radio_group name="RadioSaleType" left_delta="85"  width="245" >
-		<radio_item name="radio" label="Original" />
-		<radio_item name="radio2" label="Kopieren" />
-	</radio_group>
-	<text name="TextPrice">
-		Preis:  L$
-	</text>
-	<text name="unknown">
-		(unbekannt)
-	</text>
-	<text name="public">
-		(öffentlich)
-	</text>
-	<text name="you_can">
-		Sie können:
-	</text>
-	<text name="owner_can">
-		Eigentümer kann:
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="item properties" title="INVENTAROBJEKT-EIGENSCHAFTEN">
+	<floater.string name="unknown">
+		(unbekannt)
+	</floater.string>
+	<floater.string name="public">
+		(öffentlich)
+	</floater.string>
+	<floater.string name="you_can">
+		Sie können:
+	</floater.string>
+	<floater.string name="owner_can">
+		Eigentümer kann:
+	</floater.string>
+	<text name="LabelItemNameTitle">
+		Name:
+	</text>
+	<text name="LabelItemDescTitle">
+		Beschreibung:
+	</text>
+	<text name="LabelCreatorTitle">
+		Ersteller:
+	</text>
+	<text name="LabelCreatorName">
+		Nicole Linden
+	</text>
+	<button label="Profil..." label_selected="" name="BtnCreator"/>
+	<text name="LabelOwnerTitle">
+		Eigentümer:
+	</text>
+	<text name="LabelOwnerName">
+		Thrax Linden
+	</text>
+	<button label="Profil..." label_selected="" name="BtnOwner"/>
+	<text name="LabelAcquiredTitle">
+		Erworben:
+	</text>
+	<text name="LabelAcquiredDate">
+		Mittwoch, 24. Mai 2006, 12:50:46
+	</text>
+	<text name="OwnerLabel">
+		Sie:
+	</text>
+	<check_box label="Bearbeiten" name="CheckOwnerModify"/>
+	<check_box label="Kopieren" left_delta="85" name="CheckOwnerCopy"/>
+	<check_box label="Wiederverkaufen" name="CheckOwnerTransfer"/>
+	<text name="AnyoneLabel">
+		Jeder:
+	</text>
+	<check_box label="Kopieren" name="CheckEveryoneCopy"/>
+	<text name="GroupLabel">
+		Gruppe:
+	</text>
+	<check_box label="Teilen" name="CheckShareWithGroup"/>
+	<text name="NextOwnerLabel" width="150">
+		Nächster Eigentümer:
+	</text>
+	<check_box label="Bearbeiten" name="CheckNextOwnerModify"/>
+	<check_box label="Kopieren" left_delta="85" name="CheckNextOwnerCopy"/>
+	<check_box label="Wiederverkaufen" name="CheckNextOwnerTransfer"/>
+	<check_box label="Zum Verkauf" name="CheckPurchase"/>
+	<combo_box name="combobox sale copy">
+		<combo_box.item label="Kopieren" name="Copy"/>
+		<combo_box.item label="Original" name="Original"/>
+	</combo_box>
+	<spinner label="Preis: L$" name="Edit Cost"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_land_holdings.xml b/indra/newview/skins/default/xui/de/floater_land_holdings.xml
index 39752111177..f258dc2f5d6 100644
--- a/indra/newview/skins/default/xui/de/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/de/floater_land_holdings.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="MEIN LAND">
-	<scroll_list name="parcel list">
-		<column label="Parzellenname" name="name"/>
-		<column label="Region" name="location"/>
-		<column label="Typ" name="type"/>
-		<column label="Gebiet" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="Teleportieren" label_selected="Teleportieren" name="Teleport" tool_tip="Zum Mittelpunkt dieses Landes teleportieren."/>
-	<button label="Auf Karte" label_selected="Auf Karte" name="Show on Map" tool_tip="Dieses Land auf der Weltkarte anzeigen."/>
-	<text name="contrib_label">
-		Beiträge zu Ihren Gruppen:
-	</text>
-	<scroll_list name="grant list">
-		<column label="Gruppe" name="group"/>
-		<column label="Gebiet" name="area"/>
-	</scroll_list>
-	<text name="allowed_label">
-		Zulässiger Landbesitz bei aktuellem Zahlungsplan:
-	</text>
-	<text name="allowed_text">
-		[AREA] qm
-	</text>
-	<text name="current_label">
-		Aktueller Landbesitz:
-	</text>
-	<text name="current_text">
-		[AREA] qm
-	</text>
-	<text name="available_label">
-		Für Landkäufe verfügbar:
-	</text>
-	<text name="available_text">
-		[AREA] qm
-	</text>
-	<string name="area_string">
-		[AREA] qm
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="land holdings floater" title="MEIN LAND">
+	<scroll_list name="parcel list">
+		<column label="Parzelle" name="name"/>
+		<column label="Region" name="location"/>
+		<column label="Typ" name="type"/>
+		<column label="Gebiet" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="Teleportieren" label_selected="Teleportieren" name="Teleport" tool_tip="Zum Mittelpunkt dieses Landes teleportieren."/>
+	<button label="Karte" label_selected="Karte" name="Show on Map" tool_tip="Dieses Land auf der Weltkarte anzeigen."/>
+	<text name="contrib_label">
+		Beiträge zu Ihren Gruppen:
+	</text>
+	<scroll_list name="grant list">
+		<column label="Gruppe" name="group"/>
+		<column label="Gebiet" name="area"/>
+	</scroll_list>
+	<text name="allowed_label">
+		Zulässiger Landbesitz bei aktuellem Zahlungsplan:
+	</text>
+	<text name="allowed_text">
+		[AREA] qm
+	</text>
+	<text name="current_label">
+		Aktueller Landbesitz:
+	</text>
+	<text name="current_text">
+		[AREA] qm
+	</text>
+	<text name="available_label">
+		Für Landkäufe verfügbar:
+	</text>
+	<text name="available_text">
+		[AREA] qm
+	</text>
+	<string name="area_string">
+		[AREA] qm
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml
index 5afeb033951..947a435f8ad 100644
--- a/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml
@@ -1,12 +1,15 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="SKRIPT: NEUES SKRIPT">
-	<button label="Zurücksetzen" label_selected="Zurücksetzen" name="Reset" />
-	<check_box label="Läuft" name="running" />
-	<check_box label="Mono" name="mono" />
-	<text name="not_allowed">
-		Sie können dieses Skript nicht anzeigen.
-	</text>
-	<string name="script_running">
-		Läuft
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script ed float" title="SKRIPT: NEUES SKRIPT">
+	<floater.string name="not_allowed">
+		Dieses Skript kann nicht angezeigt oder bearbeitet werden, da als Berechtigung &quot;kein kopieren&quot; festgelegt wurde. Um ein Skript innerhalb eines Objektes anzuzeigen oder zu bearbeiten, benötigen Sie die vollständige Berechtigung.
+	</floater.string>
+	<floater.string name="script_running">
+		Läuft
+	</floater.string>
+	<floater.string name="Title">
+		Skript: [NAME]
+	</floater.string>
+	<button label="Zurücksetzen" label_selected="Zurücksetzen" name="Reset"/>
+	<check_box initial_value="true" label="Läuft" name="running"/>
+	<check_box initial_value="true" label="Mono" name="mono"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_map.xml b/indra/newview/skins/default/xui/de/floater_map.xml
index 97b3d76a463..73737846734 100644
--- a/indra/newview/skins/default/xui/de/floater_map.xml
+++ b/indra/newview/skins/default/xui/de/floater_map.xml
@@ -1,51 +1,54 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map">
-	<floater.string name="mini_map_north">
-		N
-	</floater.string>
-	<floater.string name="mini_map_east">
-		O
-	</floater.string>
-	<floater.string name="mini_map_west">
-		W
-	</floater.string>
-	<floater.string name="mini_map_south">
-		S
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		SO
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		NO
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		SW
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		NW
-	</floater.string>
-	<text label="N" name="floater_map_north" text="N">
-		N
-	</text>
-	<text label="O" name="floater_map_east" text="O">
-		O
-	</text>
-	<text label="W" name="floater_map_west" text="W">
-		W
-	</text>
-	<text label="S" name="floater_map_south" text="S">
-		S
-	</text>
-	<text label="SO" name="floater_map_southeast" text="SO">
-		SO
-	</text>
-	<text label="NO" name="floater_map_northeast" text="NO">
-		NO
-	</text>
-	<text label="SW" name="floater_map_southwest" text="SW">
-		SW
-	</text>
-	<text label="NW" name="floater_map_northwest" text="NW">
-		NW
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+	<floater.string name="mini_map_north">
+		N
+	</floater.string>
+	<floater.string name="mini_map_east">
+		O
+	</floater.string>
+	<floater.string name="mini_map_west">
+		W
+	</floater.string>
+	<floater.string name="mini_map_south">
+		S
+	</floater.string>
+	<floater.string name="mini_map_southeast">
+		SO
+	</floater.string>
+	<floater.string name="mini_map_northeast">
+		NO
+	</floater.string>
+	<floater.string name="mini_map_southwest">
+		SW
+	</floater.string>
+	<floater.string name="mini_map_northwest">
+		NW
+	</floater.string>
+	<floater.string name="ToolTipMsg">
+		[AGENT][REGION](Karte mit Doppelklick öffnen)
+	</floater.string>
+	<text label="N" name="floater_map_north" text="N">
+		N
+	</text>
+	<text label="O" name="floater_map_east" text="O">
+		O
+	</text>
+	<text label="W" name="floater_map_west" text="W">
+		W
+	</text>
+	<text label="S" name="floater_map_south" text="S">
+		S
+	</text>
+	<text label="SO" name="floater_map_southeast" text="SO">
+		SO
+	</text>
+	<text label="NO" name="floater_map_northeast" text="NO">
+		NO
+	</text>
+	<text label="SW" name="floater_map_southwest" text="SW">
+		SW
+	</text>
+	<text label="NW" name="floater_map_northwest" text="NW">
+		NW
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_media_browser.xml b/indra/newview/skins/default/xui/de/floater_media_browser.xml
index a16c2408fec..21bf7aa5630 100644
--- a/indra/newview/skins/default/xui/de/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/de/floater_media_browser.xml
@@ -1,19 +1,30 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="MEDIENBROWSER">
-	<layout_stack name="stack1">
-		<layout_panel name="nav_controls">
-			<button label="Zurück" name="back" />
-			<button label="Weiter" name="forward" />
-			<button label="Neu laden" name="reload" />
-			<button label="Los" name="go" />
-		</layout_panel>
-		<layout_panel name="parcel_owner_controls">
-			<button label="Aktuelle URL an Parzelle senden" name="assign" />
-		</layout_panel>
-		<layout_panel name="external_controls">
-			<button label="In meinem Browser öffnen" name="open_browser" />
-			<check_box label="Immer in meinem Browser öffnen" name="open_always" />
-			<button label="Schließen" name="close" />
-		</layout_panel>
-	</layout_stack>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="MEDIENBROWSER">
+	<floater.string name="home_page_url">
+		http://www.secondlife.com
+	</floater.string>
+	<floater.string name="support_page_url">
+		http://support.secondlife.com
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button label="Zurück" name="back"/>
+			<button label="Weiter" name="forward"/>
+			<button label="Neu laden" name="reload"/>
+			<button label="Los" name="go"/>
+		</layout_panel>
+		<layout_panel name="time_controls">
+			<button label="zurückspulen" name="rewind"/>
+			<button label="anhalten" name="stop"/>
+			<button label="vorwärts" name="seek"/>
+		</layout_panel>
+		<layout_panel name="parcel_owner_controls">
+			<button label="Aktuelle URL an Parzelle senden" name="assign"/>
+		</layout_panel>
+		<layout_panel name="external_controls">
+			<button label="In meinem Browser öffnen" name="open_browser"/>
+			<check_box label="Immer in meinem Browser öffnen" name="open_always"/>
+			<button label="Schließen" name="close"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_mem_leaking.xml b/indra/newview/skins/default/xui/de/floater_mem_leaking.xml
index 44249a6075e..72210aa750b 100644
--- a/indra/newview/skins/default/xui/de/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/de/floater_mem_leaking.xml
@@ -1,18 +1,18 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="SPEICHERVERLUST-SIMULATION">
-	<spinner label="Verlustgeschwindigkeit (Bytes pro Frame):" name="leak_speed" />
-	<spinner label="Max. Speicherverlust (MB):" name="max_leak" />
-	<text name="total_leaked_label">
-		Aktueller Speicherverlust:[SIZE] KB
-	</text>
-	<text name="note_label_1">
-		[NOTE1]
-	</text>
-	<text name="note_label_2">
-		[NOTE2]
-	</text>
-	<button label="Start" name="start_btn" />
-	<button label="Stopp" name="stop_btn" />
-	<button label="Freigeben" name="release_btn" />
-	<button label="Schließen" name="close_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="MemLeak" title="Speicherverlust simulieren">
+	<spinner label="Verlustgeschwindigkeit (Bytes pro Frame):" name="leak_speed"/>
+	<spinner label="Max. Speicherverlust (MB):" name="max_leak"/>
+	<text name="total_leaked_label">
+		Aktueller Speicherverlust:[SIZE] KB
+	</text>
+	<text name="note_label_1">
+		[NOTE1]
+	</text>
+	<text name="note_label_2">
+		[NOTE2]
+	</text>
+	<button label="Start" name="start_btn"/>
+	<button label="Stopp" name="stop_btn"/>
+	<button label="Freigeben" name="release_btn"/>
+	<button label="Schließen" name="close_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_moveview.xml b/indra/newview/skins/default/xui/de/floater_moveview.xml
index 4ea2048e623..af133b6bd79 100644
--- a/indra/newview/skins/default/xui/de/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/de/floater_moveview.xml
@@ -1,16 +1,35 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="move_floater">
-<panel name="panel_actions">
-	<button label="" label_selected="" name="turn left btn" tool_tip="Nach links" />
-	<button label="" label_selected="" name="turn right btn" tool_tip="Nach rechts" />
-	<button label="" label_selected="" name="move up btn"
-	     tool_tip="Springen oder Steigflug" />
-	<button label="" label_selected="" name="move down btn" tool_tip="Ducken oder Sinkflug" />
-	<button label="Fliegen" label_selected="Fliegen" name="fly btn"
-	     tool_tip="Fliegen/Landen" />
-	<joystick_slide name="slide left btn" tool_tip="Nach links" />
-	<joystick_slide name="slide right btn" tool_tip="Nach rechts" />
-	<joystick_turn name="forward btn" tool_tip="Nach vorn" />
-	<joystick_turn name="backward btn" tool_tip="Nach hinten" />
-</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="move_floater">
+	<string name="walk_forward_tooltip">
+		Vorwärts gehen (Nach-oben-Pfeil oder W drücken)
+	</string>
+	<string name="walk_back_tooltip">
+		Rückwärts gehen (Nach-Unten-Pfeil oder S drücken)
+	</string>
+	<string name="run_forward_tooltip">
+		Vorwärts rennen (Nach-oben-Pfeil oder W drücken)
+	</string>
+	<string name="run_back_tooltip">
+		Rückwärts rennen (Nach-Unten-Pfeil oder S drücken)
+	</string>
+	<string name="fly_forward_tooltip">
+		Vorwärts fliegen (Nach-oben-Pfeil oder W drücken)
+	</string>
+	<string name="fly_back_tooltip">
+		Rückwärts fliegen (Nach-Unten-Pfeil oder S drücken)
+	</string>
+	<panel name="panel_actions">
+		<button label="" label_selected="" name="turn left btn" tool_tip="Nach links (Links-Pfeil oder A drücken)"/>
+		<button label="" label_selected="" name="turn right btn" tool_tip="Nach rechts (Rechts-Pfeil oder D drücken)"/>
+		<button label="" label_selected="" name="move up btn" tool_tip="Nach oben fliegen, „E&quot; drücken"/>
+		<button label="" label_selected="" name="move down btn" tool_tip="Nach unten fliegen, „C&quot; drücken"/>
+		<joystick_turn name="forward btn" tool_tip="Vorwärts gehen (Nach-oben-Pfeil oder W drücken)"/>
+		<joystick_turn name="backward btn" tool_tip="Rückwärts gehen (Nach-Unten-Pfeil oder S drücken)"/>
+	</panel>
+	<panel name="panel_modes">
+		<button label="" name="mode_walk_btn" tool_tip="Gehen"/>
+		<button label="" name="mode_run_btn" tool_tip="Rennen"/>
+		<button label="" name="mode_fly_btn" tool_tip="Fliegen"/>
+		<button label="Landen" name="stop_fly_btn" tool_tip="Landen"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_pay.xml b/indra/newview/skins/default/xui/de/floater_pay.xml
index a2e40fa0782..c224d85ac19 100644
--- a/indra/newview/skins/default/xui/de/floater_pay.xml
+++ b/indra/newview/skins/default/xui/de/floater_pay.xml
@@ -1,21 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Give Money" title="">
-	<button label="1 L$" label_selected="1 L$" name="fastpay 1" />
-	<button label="5 L$" label_selected="5 L$" name="fastpay 5" />
-	<button label="10 L$" label_selected="10 L$" name="fastpay 10" />
-	<button label="20 L$" label_selected="20 L$" name="fastpay 20" />
-	<button label="Zahlen" label_selected="Zahlen" name="pay btn" />
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel btn" />
-	<text name="payee_label" width="130">
-		Einwohner bezahlen:
-	</text>
-	<text name="payee_name" left="130">
-		[FIRST] [LAST]
-	</text>
-	<text name="fastpay text">
-		Schnellzahlung:
-	</text>
-	<text name="amount text">
-		Betrag:
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+	<text name="payee_label" width="130">
+		Zahlen:
+	</text>
+	<icon name="icon_person" tool_tip="Person"/>
+	<text left="130" name="payee_name">
+		[FIRST] [LAST]
+	</text>
+	<button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
+	<button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
+	<button label="10 L$" label_selected="10 L$" name="fastpay 10"/>
+	<button label="20 L$" label_selected="20 L$" name="fastpay 20"/>
+	<text name="amount text">
+		Oder Betrag auswählen:
+	</text>
+	<button label="Zahlen" label_selected="Zahlen" name="pay btn"/>
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_pay_object.xml b/indra/newview/skins/default/xui/de/floater_pay_object.xml
index 49bf0c8957f..32a026f7e89 100644
--- a/indra/newview/skins/default/xui/de/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/de/floater_pay_object.xml
@@ -1,30 +1,29 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Give Money" title="">
-	<text name="payee_group" width="105">
-		Gruppe bezahlen:
-	</text>
-	<text name="payee_resident" width="118">
-		Einwohner bezahlen:
-	</text>
-	<text name="payee_name" left="128" width="168">
-		[FIRST] [LAST]
-	</text>
-	<text name="object_name_label" halign="left">
-		Ãœber Objekt:
-	</text>
-	<text name="object_name_text" left="105">
-		...
-	</text>
-	<text name="fastpay text" width="95" halign="left">
-		Schnellzahlung:
-	</text>
-	<text name="amount text">
-		Betrag:
-	</text>
-	<button label="1 L$" label_selected="1 L$" name="fastpay 1" left="105" />
-	<button label="5 L$" label_selected="5 L$" name="fastpay 5" left="190" />
-	<button label="10 L$" label_selected="10 L$" name="fastpay 10" left="105" />
-	<button label="20 L$" label_selected="20 L$" name="fastpay 20" left="190" />
-	<button label="Zahlen" label_selected="Zahlen" name="pay btn" />
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel btn" width="76" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+	<string name="payee_group" width="105">
+		Gruppe bezahlen:
+	</string>
+	<string name="payee_resident" width="118">
+		Einwohner bezahlen:
+	</string>
+	<icon name="icon_person" tool_tip="Person"/>
+	<text left="128" name="payee_name" width="168">
+		[FIRST] [LAST]
+	</text>
+	<text halign="left" name="object_name_label">
+		Ãœber Objekt:
+	</text>
+	<icon name="icon_object" tool_tip="Objekte"/>
+	<text left="105" name="object_name_text">
+		...
+	</text>
+	<button label="1 L$" label_selected="1 L$" left="105" name="fastpay 1"/>
+	<button label="5 L$" label_selected="5 L$" left="190" name="fastpay 5"/>
+	<button label="10 L$" label_selected="10 L$" left="105" name="fastpay 10"/>
+	<button label="20 L$" label_selected="20 L$" left="190" name="fastpay 20"/>
+	<text name="amount text">
+		Oder Betrag auswählen:
+	</text>
+	<button label="Zahlen" label_selected="Zahlen" name="pay btn"/>
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel btn" width="76"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_animation.xml b/indra/newview/skins/default/xui/de/floater_preview_animation.xml
index 630127f310e..c167427da91 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_animation.xml
@@ -1,11 +1,12 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_anim">
-	<text name="desc txt">
-		Beschreibung:
-	</text>
-<line_editor left="98" name="desc" width="189" />
-	<button label="In Welt abspielen" label_selected="Stopp" name="Anim play btn"
-	     tool_tip="Gibt diese Animation so wieder, dass andere sie sehen können." width="116" />
-	<button label="Lokal wiedergeben" label_selected="Stopp" name="Anim audition btn"
-	     tool_tip="Gibt diese Animation so wieder, dass nur Sie sie sehen." left="171" width="116" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_anim">
+	<floater.string name="Title">
+		Animation: [NAME]
+	</floater.string>
+	<text name="desc txt">
+		Beschreibung:
+	</text>
+	<line_editor left="98" name="desc" width="189"/>
+	<button label="In Welt abspielen" label_selected="Stopp" name="Anim play btn" tool_tip="Gibt diese Animation so wieder, dass andere sie sehen können." width="116"/>
+	<button label="Lokal wiedergeben" label_selected="Stopp" left="171" name="Anim audition btn" tool_tip="Gibt diese Animation so wieder, dass nur Sie sie sehen." width="116"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_classified.xml b/indra/newview/skins/default/xui/de/floater_preview_classified.xml
index be702145c37..e946f08b141 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_classified.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="VERTRAULICHE INFORMATIONEN" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="classified_preview" title="VERTRAULICHE INFORMATIONEN">
+	<floater.string name="Title">
+		Anzeige: [NAME]
+	</floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_event.xml b/indra/newview/skins/default/xui/de/floater_preview_event.xml
index 21e8c67787d..fffcf7c1cf5 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_event.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="EVENT-INFORMATIONEN" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="event_preview" title="EVENT-INFORMATIONEN">
+	<floater.string name="Title">
+		Veranstaltung: [NAME]
+	</floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml
new file mode 100644
index 00000000000..9fbe8d869e6
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="Gesten-Tastaturbefehl"/>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml
new file mode 100644
index 00000000000..9fbe8d869e6
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="Gesten-Tastaturbefehl"/>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
index 2c3258440f2..1887433b617 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
@@ -1,16 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview notecard" title="HINWEIS:">
-	<button label="Speichern" label_selected="Speichern" name="Save" />
-	<text name="desc txt">
-		Beschreibung:
-	</text>
-	<text_editor name="Notecard Editor">
-		Wird geladen...
-	</text_editor>
-	<text name="no_object">
-		Es wurde kein Objekt gefunden, das diese Notiz enthält.
-	</text>
-	<text name="not_allowed">
-		Sie können diese Notiz nicht anzeigen.
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview notecard" title="HINWEIS:">
+	<floater.string name="no_object">
+		Es wurde kein Objekt gefunden, das diese Notiz enthält.
+	</floater.string>
+	<floater.string name="not_allowed">
+		Ihnen fehlt die Berechtigung zur Anzeige dieser Notizkarte.
+	</floater.string>
+	<floater.string name="Title">
+		Notizkarte: [NAME]
+	</floater.string>
+	<floater.string label="Speichern" label_selected="Speichern" name="Save">
+		Speichern
+	</floater.string>
+	<text name="desc txt">
+		Beschreibung:
+	</text>
+	<text_editor name="Notecard Editor">
+		Wird geladen...
+	</text_editor>
+	<button label="Speichern" label_selected="Speichern" name="Save"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_sound.xml b/indra/newview/skins/default/xui/de/floater_preview_sound.xml
index 3f2e39c0d6a..397b417d44e 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_sound.xml
@@ -1,12 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_sound">
-	<text name="desc txt">
-		Beschreibung:
-	</text>
-	<button label="In Welt abspielen" label_selected="In Welt abspielen"
-	     name="Sound play btn"
-	     tool_tip="Gibt diesen Sound so wieder, dass andere ihn hören können." />
-	<button label="Lokal wiedergeben" label_selected="Lokal wiedergeben"
-	     name="Sound audition btn"
-	     tool_tip="Gibt diesen Sound so wieder, dass nur Sie ihn hören." />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_sound">
+	<floater.string name="Title">
+		Sound: [NAME]
+	</floater.string>
+	<text name="desc txt">
+		Beschreibung:
+	</text>
+	<button label="In Welt abspielen" label_selected="In Welt abspielen" name="Sound play btn" tool_tip="Gibt diesen Sound so wieder, dass andere ihn hören können."/>
+	<button label="Lokal wiedergeben" label_selected="Lokal wiedergeben" name="Sound audition btn" tool_tip="Gibt diesen Sound so wieder, dass nur Sie ihn hören."/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_texture.xml b/indra/newview/skins/default/xui/de/floater_preview_texture.xml
index 0c53eb7ca3d..c33e52dac8d 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_texture.xml
@@ -1,9 +1,17 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_texture">
-	<text name="desc txt">
-		Beschreibung:
-	</text>
-	<text name="dimensions">
-		Maße: [WIDTH] x [HEIGHT]
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_texture">
+	<floater.string name="Title">
+		Textur: [NAME]
+	</floater.string>
+	<floater.string name="Copy">
+		In Inventar kopieren
+	</floater.string>
+	<text name="desc txt">
+		Beschreibung:
+	</text>
+	<button label="Speichern" name="Keep"/>
+	<button label="Löschen" name="Discard"/>
+	<text name="dimensions">
+		[WIDTH]px x [HEIGHT]px
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
index a5dd9fa4b19..1e287268613 100644
--- a/indra/newview/skins/default/xui/de/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
@@ -1,106 +1,104 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="MISSBRAUCH MELDEN">
-	<texture_picker label="" name="screenshot"/>
-	<check_box bottom_delta="-20" label="Screenshot einschließen" name="screen_check"/>
-	<text name="reporter_title">
-		Melder:
-	</text>
-	<text name="reporter_field">
-		Loremipsum Dolorsitamut
-	</text>
-	<text name="sim_title">
-		Region:
-	</text>
-	<text name="sim_field">
-		Name der Region
-	</text>
-	<text name="pos_title">
-		Position:
-	</text>
-	<text name="pos_field">
-		{128.1, 128.1, 15.4}
-	</text>
-	<text bottom_delta="-38" height="32" name="select_object_label">
-		Klicken Sie auf die Schaltfläche,
-dann auf das Objekt:
-	</text>
-	<button label="" label_selected="" name="pick_btn" tool_tip="Objektauswahl – Wählen Sie ein Objekt als Thema dieses Berichts aus"/>
-	<text name="object_name_label">
-		Name:
-	</text>
-	<text name="object_name">
-		Consetetur Sadipscing
-	</text>
-	<text name="owner_name_label">
-		Eigentümer:
-	</text>
-	<text name="owner_name">
-		Hendrerit Vulputate
-	</text>
-	<combo_box name="category_combo" tool_tip="Kategorie -- wählen Sie die Kategorie aus, die am besten auf diesen Bericht zutrifft">
-		<combo_box.item name="Select_category" label="Kategorie auswählen"/>
-		<combo_box.item name="Age__Age_play" label="Alter&gt; Age-Play"/>
-		<combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Alter&gt; Erwachsener Einwohner in Teen Second Life"/>
-		<combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Alter &gt; Minderjähriger Einwohner außerhalb Teen Second Life"/>
-		<combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Angriff&gt; Kampf-Sandbox / unsichere Region"/>
-		<combo_box.item name="Assault__Safe_area" label="Angriff&gt; Sichere Region"/>
-		<combo_box.item name="Assault__Weapons_testing_sandbox" label="Angriff &gt; Sandbox für Waffentest"/>
-		<combo_box.item name="Commerce__Failure_to_deliver_product_or_service" label="Handel &gt; Produkt nicht geliefert oder Dienstleistung nicht erbracht"/>
-		<combo_box.item name="Disclosure__Real_world_information" label="Offenlegung &gt; Informationen aus realer Welt"/>
-		<combo_box.item name="Disclosure__Remotely_monitoring chat" label="Offenlegung &gt; Abhören eines Chats aus der Ferne"/>
-		<combo_box.item name="Disclosure__Second_Life_information_chat_IMs" label="Offenlegung &gt; Second Life-Informationen/Chat/IMs"/>
-		<combo_box.item name="Disturbing_the_peace__Unfair_use_of_region_resources" label="Ruhestörung &gt; Unfaire Nutzung von Regionsressourcen"/>
-		<combo_box.item name="Disturbing_the_peace__Excessive_scripted_objects" label="Ruhestörung &gt; Exzessive Nutzung geskripteter Objekte"/>
-		<combo_box.item name="Disturbing_the_peace__Object_littering" label="Ruhestörung &gt; Wildes Erzeugen von Objekten"/>
-		<combo_box.item name="Disturbing_the_peace__Repetitive_spam" label="Ruhestörung &gt; Ständige Spam-Wiederholung"/>
-		<combo_box.item name="Disturbing_the_peace__Unwanted_advert_spam" label="Ruhestörung &gt; Unerwünschte Spam-Werbung"/>
-		<combo_box.item name="Fraud__L$" label="Betrug &gt; L$"/>
-		<combo_box.item name="Fraud__Land" label="Betrug&gt; Land"/>
-		<combo_box.item name="Fraud__Pyramid_scheme_or_chain_letter" label="Betrug &gt; Schneeballsystem oder Kettenbrief"/>
-		<combo_box.item name="Fraud__US$" label="Betrug &gt; US$"/>
-		<combo_box.item name="Harassment__Advert_farms___visual_spam" label="Belästigung &gt; Werbefarmen / visueller Spam"/>
-		<combo_box.item name="Harassment__Defaming_individuals_or_groups" label="Belästigung &gt; Diffamieren von Einzelpersonen/Gruppen"/>
-		<combo_box.item name="Harassment__Impeding_movement" label="Belästigung &gt; Bewegungseinschränkung"/>
-		<combo_box.item name="Harassment__Sexual_harassment" label="Belästigung &gt; Sexuelle Belästigung"/>
-		<combo_box.item name="Harassment__Solicting_inciting_others_to_violate_ToS" label="Belästigung &gt; Anstiften Dritter zur Missachtung der Nutzungsbedingungen"/>
-		<combo_box.item name="Harassment__Verbal_abuse" label="Belästigung &gt; Beschimpfung"/>
-		<combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Unanständigkeit &gt; Anstößige Inhalte oder Handlungen in der Öffentlichkeit"/>
-		<combo_box.item name="Indecency__Inappropriate_avatar_name" label="Unanständigkeit &gt; Anstößiger Avatarname"/>
-		<combo_box.item name="Indecency__Mature_content_in_PG_region" label="Unanständigkeit &gt; Unangemessener Inhalt oder unangemessenes Verhalten in PG-Region"/>
-		<combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Unanständigkeit &gt; Unangemessener Inhalt oder unangemessenes Verhalten in Mature-Region"/>
-		<combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Urheberrechtsverletzung &gt; Entfernen von Inhalten"/>
-		<combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Urheberrechtsverletzung &gt; CopyBot oder Berechtigungs-Exploit"/>
-		<combo_box.item name="Intolerance" label="Intoleranz"/>
-		<combo_box.item name="Land__Abuse_of_sandbox_resources" label="Land &gt; Missbrauch der Sandbox-Ressourcen"/>
-		<combo_box.item name="Land__Encroachment__Objects_textures" label="Land &gt; Unbefugte Nutzung &gt; Objekte/Texturen"/>
-		<combo_box.item name="Land__Encroachment__Particles" label="Land &gt; Unbefugte Nutzung &gt; Partikel"/>
-		<combo_box.item name="Land__Encroachment__Trees_plants" label="Land &gt; Unbefugte Nutzung &gt; Bäume/Pflanzen"/>
-		<combo_box.item name="Wagering_gambling" label="Wetten/Glücksspiel"/>
-		<combo_box.item name="Other" label="Sonstige"/>
-	</combo_box>
-	<text name="abuser_name_title">
-		Name des Beschuldigten:
-	</text>
-	<button label="Einwohner auswählen" label_selected="" name="select_abuser" tool_tip="Den Namen des Beschuldigten aus einer Liste wählen"/>
-	<check_box label="Name des Täters ist nicht bekannt" name="omit_abuser_name" tool_tip="Wählen Sie diese Option, wenn Ihnen der Name des Täters unbekannt ist"/>
-	<text name="abuser_name_title2">
-		Ort des Missbrauchs:
-	</text>
-	<text name="sum_title">
-		Zusammenfassung:
-	</text>
-	<text name="dscr_title">
-		Details:
-	</text>
-	<text name="bug_aviso">
-		Machen Sie genaue Angaben zu Datum, Ort und Art des 
-Missbrauchs, relevantem Chat/IM und wählen Sie das 
-Objekt, wenn möglich.
-	</text>
-	<text_editor bottom_delta="-136" height="130" name="details_edit"/>
-	<text bottom_delta="-20" name="incomplete_title">
-		Hinweis: Unvollständige Meldungen werden nicht bearbeitet.
-	</text>
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
-	<button label="Missbrauch melden" label_selected="Missbrauch melden" name="send_btn"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_report_abuse" title="MISSBRAUCH MELDEN">
+	<floater.string name="Screenshot">
+		Foto
+	</floater.string>
+	<check_box bottom_delta="-20" label="Dieses Foto verwenden" name="screen_check"/>
+	<text name="reporter_title">
+		Melder:
+	</text>
+	<text name="reporter_field">
+		Loremipsum Dolorsitamut
+	</text>
+	<text name="sim_title">
+		Region:
+	</text>
+	<text name="sim_field">
+		Name der Region
+	</text>
+	<text name="pos_title">
+		Position:
+	</text>
+	<text name="pos_field">
+		{128.1, 128.1, 15.4}
+	</text>
+	<text bottom_delta="-38" height="32" name="select_object_label">
+		Klicken Sie auf die Schaltfläche, dann auf das entsprechende Objekt:
+	</text>
+	<button label="" label_selected="" name="pick_btn" tool_tip="Objektauswahl – Wählen Sie ein Objekt als Thema dieses Berichts aus"/>
+	<text name="object_name_label">
+		Objekt:
+	</text>
+	<text name="object_name">
+		Consetetur Sadipscing
+	</text>
+	<text name="owner_name_label">
+		Eigentümer:
+	</text>
+	<text name="owner_name">
+		Hendrerit Vulputate
+	</text>
+	<combo_box name="category_combo" tool_tip="Kategorie -- wählen Sie die Kategorie aus, die am besten auf diesen Bericht zutrifft">
+		<combo_box.item label="Kategorie auswählen" name="Select_category"/>
+		<combo_box.item label="Alter&gt; Age-Play" name="Age__Age_play"/>
+		<combo_box.item label="Alter&gt; Erwachsener Einwohner in Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/>
+		<combo_box.item label="Alter &gt; Minderjähriger Einwohner außerhalb Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
+		<combo_box.item label="Angriff&gt; Kampf-Sandbox / unsichere Region" name="Assault__Combat_sandbox___unsafe_area"/>
+		<combo_box.item label="Angriff&gt; Sichere Region" name="Assault__Safe_area"/>
+		<combo_box.item label="Angriff &gt; Sandbox für Waffentest" name="Assault__Weapons_testing_sandbox"/>
+		<combo_box.item label="Handel &gt; Produkt nicht geliefert oder Dienstleistung nicht erbracht" name="Commerce__Failure_to_deliver_product_or_service"/>
+		<combo_box.item label="Offenlegung &gt; Informationen aus realer Welt" name="Disclosure__Real_world_information"/>
+		<combo_box.item label="Offenlegung &gt; Abhören eines Chats aus der Ferne" name="Disclosure__Remotely_monitoring chat"/>
+		<combo_box.item label="Offenlegung &gt; Second Life-Informationen/Chat/IMs" name="Disclosure__Second_Life_information_chat_IMs"/>
+		<combo_box.item label="Ruhestörung &gt; Unfaire Nutzung von Regionsressourcen" name="Disturbing_the_peace__Unfair_use_of_region_resources"/>
+		<combo_box.item label="Ruhestörung &gt; Exzessive Nutzung geskripteter Objekte" name="Disturbing_the_peace__Excessive_scripted_objects"/>
+		<combo_box.item label="Ruhestörung &gt; Wildes Erzeugen von Objekten" name="Disturbing_the_peace__Object_littering"/>
+		<combo_box.item label="Ruhestörung &gt; Ständige Spam-Wiederholung" name="Disturbing_the_peace__Repetitive_spam"/>
+		<combo_box.item label="Ruhestörung &gt; Unerwünschte Spam-Werbung" name="Disturbing_the_peace__Unwanted_advert_spam"/>
+		<combo_box.item label="Betrug &gt; L$" name="Fraud__L$"/>
+		<combo_box.item label="Betrug&gt; Land" name="Fraud__Land"/>
+		<combo_box.item label="Betrug &gt; Schneeballsystem oder Kettenbrief" name="Fraud__Pyramid_scheme_or_chain_letter"/>
+		<combo_box.item label="Betrug &gt; US$" name="Fraud__US$"/>
+		<combo_box.item label="Belästigung &gt; Werbefarmen / visueller Spam" name="Harassment__Advert_farms___visual_spam"/>
+		<combo_box.item label="Belästigung &gt; Diffamieren von Einzelpersonen/Gruppen" name="Harassment__Defaming_individuals_or_groups"/>
+		<combo_box.item label="Belästigung &gt; Bewegungseinschränkung" name="Harassment__Impeding_movement"/>
+		<combo_box.item label="Belästigung &gt; Sexuelle Belästigung" name="Harassment__Sexual_harassment"/>
+		<combo_box.item label="Belästigung &gt; Anstiften Dritter zur Missachtung der Nutzungsbedingungen" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+		<combo_box.item label="Belästigung &gt; Beschimpfung" name="Harassment__Verbal_abuse"/>
+		<combo_box.item label="Unanständigkeit &gt; Anstößige Inhalte oder Handlungen in der Öffentlichkeit" name="Indecency__Broadly_offensive_content_or_conduct"/>
+		<combo_box.item label="Unanständigkeit &gt; Anstößiger Avatarname" name="Indecency__Inappropriate_avatar_name"/>
+		<combo_box.item label="Unanständigkeit &gt; Unangemessener Inhalt oder unangemessenes Verhalten in PG-Region" name="Indecency__Mature_content_in_PG_region"/>
+		<combo_box.item label="Unanständigkeit &gt; Unangemessener Inhalt oder unangemessenes Verhalten in Mature-Region" name="Indecency__Inappropriate_content_in_Mature_region"/>
+		<combo_box.item label="Urheberrechtsverletzung &gt; Entfernen von Inhalten" name="Intellectual_property_infringement_Content_Removal"/>
+		<combo_box.item label="Urheberrechtsverletzung &gt; CopyBot oder Berechtigungs-Exploit" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
+		<combo_box.item label="Intoleranz" name="Intolerance"/>
+		<combo_box.item label="Land &gt; Missbrauch der Sandbox-Ressourcen" name="Land__Abuse_of_sandbox_resources"/>
+		<combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Objekte/Texturen" name="Land__Encroachment__Objects_textures"/>
+		<combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Partikel" name="Land__Encroachment__Particles"/>
+		<combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Bäume/Pflanzen" name="Land__Encroachment__Trees_plants"/>
+		<combo_box.item label="Wetten/Glücksspiel" name="Wagering_gambling"/>
+		<combo_box.item label="Sonstige" name="Other"/>
+	</combo_box>
+	<text name="abuser_name_title">
+		Name des Beschuldigten:
+	</text>
+	<button label="Auswählen" label_selected="" name="select_abuser" tool_tip="Den Namen des Beschuldigten aus einer Liste wählen"/>
+	<text name="abuser_name_title2">
+		Ort des Missbrauchs:
+	</text>
+	<text name="sum_title">
+		Zusammenfassung:
+	</text>
+	<text name="dscr_title">
+		Details:
+	</text>
+	<text name="bug_aviso">
+		Bitte beschreiben Sie so genau wie möglich.
+	</text>
+	<text_editor bottom_delta="-136" height="130" name="details_edit"/>
+	<text bottom_delta="-20" name="incomplete_title">
+		Hinweis: Unvollständige Meldungen werden nicht bearbeitet.
+	</text>
+	<button label="Missbrauch melden" label_selected="Missbrauch melden" name="send_btn"/>
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml
new file mode 100644
index 00000000000..fc805e879b8
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script" short_title="[All scripts]" title="[All scripts]"/>
diff --git a/indra/newview/skins/default/xui/de/floater_script_preview.xml b/indra/newview/skins/default/xui/de/floater_script_preview.xml
index be6017cff51..1d6def4602d 100644
--- a/indra/newview/skins/default/xui/de/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_script_preview.xml
@@ -1,6 +1,9 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="SKRIPT: ROTATIONSSKRIPT">
-	<text name="desc txt">
-		Beschreibung:
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview lsl text" title="SKRIPT: ROTATIONSSKRIPT">
+	<floater.string name="Title">
+		Skript: [NAME]
+	</floater.string>
+	<text name="desc txt">
+		Beschreibung:
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_script_queue.xml b/indra/newview/skins/default/xui/de/floater_script_queue.xml
index b2011a4dfb4..d5dc7a0fd72 100644
--- a/indra/newview/skins/default/xui/de/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/de/floater_script_queue.xml
@@ -1,4 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="queue" title="RÜCKGÄNGIG">
-	<button label="Schließen" label_selected="Schließen" name="close" left="215" width="72"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="queue" title="RÜCKGÄNGIG">
+	<floater.string name="Starting">
+		[START] von [COUNT] Artikeln.
+	</floater.string>
+	<floater.string name="Done">
+		Fertig.
+	</floater.string>
+	<floater.string name="Resetting">
+		Wird zurückgesetzt
+	</floater.string>
+	<floater.string name="Running">
+		Läuft
+	</floater.string>
+	<floater.string name="NotRunning">
+		Läuft nicht
+	</floater.string>
+	<button label="Schließen" label_selected="Schließen" left="215" name="close" width="72"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_sell_land.xml b/indra/newview/skins/default/xui/de/floater_sell_land.xml
index 47ab51d5027..82da881a54b 100644
--- a/indra/newview/skins/default/xui/de/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_sell_land.xml
@@ -1,67 +1,67 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="sell land" title="LAND VERKAUFEN">
-    <scroll_container name="profile_scroll">
-    <panel name="scroll_content_panel">
-	<text name="info_parcel_label">
-		Parzelle:
-	</text>
-	<text bottom_delta="-5" height="16" name="info_parcel">
-		PARZELLENNAME
-	</text>
-	<text name="info_size_label">
-		Größe:
-	</text>
-	<text bottom_delta="-21" height="32" name="info_size">
-		[AREA] qm
-	</text>
-	<text height="28" name="info_action" bottom_delta="-57">
-		Zum Verkauf
-dieser Parzelle:
-	</text>
-	<icon bottom_delta="-80" name="step_price" />
-	<text name="price_label">
-		Preis festlegen:
-	</text>
-	<text name="price_text">
-		Geben Sie einen angemessenen Preis für dieses Land ein.
-	</text>
-	<text name="price_ld">
-		L$
-	</text>
-	<text name="price_per_m">
-		([PER_METER] L$ pro Quadratmeter)
-	</text>
-	<icon height="64" left="0" name="step_sell_to" width="64" />
-	<text bottom_delta="38" left="72" name="sell_to_label" right="-20">
-		Land verkaufen an:
-	</text>
-	<text height="16" left="72" name="sell_to_text" bottom_delta="-16" right="-10">
-		Wählen Sie, ob der Verkauf offen oder auf eine bestimmte Person
-beschränkt ist.
-	</text>
-	<combo_box height="16" left="72" name="sell_to" bottom_delta="-32" width="140">
-		<combo_box.item name="--selectone--" label="select one --" />
-		<combo_box.item name="Anyone" label="Jeder" />
-		<combo_box.item name="Specificuser:" label="Bestimmter Benutzer:" />
-	</combo_box>
-	<button label="Auswählen..." name="sell_to_select_agent" />
-	<text name="sell_objects_label">
-		Die Objekte mit dem Land verkaufen?
-	</text>
-	<text name="sell_objects_text">
-		Die transferierbaren Landeigentümer-Objekte auf der Parzelle
-wechseln den Eigentümer.
-	</text>
-	<radio_group bottom_delta="-58" name="sell_objects">
-		<radio_item name="no" label="Nein, Objekte behalten" />
-		<radio_item name="yes" label="Ja, Objekte mit Land verkaufen" />
-	</radio_group>
-	<button label="Objekte anzeigen" name="show_objects" width="116"/>
-	<text name="nag_message_label">
-		ACHTUNG: Verkäufe sind endgültig.
-	</text>
-	<button label="Land zum Verkauf freigeben" width="180" name="sell_btn" />
-	<button label="Abbrechen" name="cancel_btn" />
-    </panel>
-    </scroll_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="sell land" title="LAND VERKAUFEN">
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<text name="info_parcel_label">
+				Parzelle:
+			</text>
+			<text bottom_delta="-5" height="16" name="info_parcel">
+				PARZELLENNAME
+			</text>
+			<text name="info_size_label">
+				Größe:
+			</text>
+			<text bottom_delta="-21" height="32" name="info_size">
+				[AREA] qm
+			</text>
+			<text bottom_delta="-57" height="28" name="info_action">
+				Zum Verkauf
+dieser Parzelle:
+			</text>
+			<icon bottom_delta="-80" name="step_price"/>
+			<text name="price_label">
+				Preis festlegen:
+			</text>
+			<text name="price_text">
+				Einen angemessenen Preis auswählen.
+			</text>
+			<text name="price_ld">
+				L$
+			</text>
+			<text name="price_per_m">
+				([PER_METER] L$ pro Quadratmeter)
+			</text>
+			<icon height="64" left="0" name="step_sell_to" width="64"/>
+			<text bottom_delta="38" left="72" name="sell_to_label" right="-20">
+				Land verkaufen an:
+			</text>
+			<text bottom_delta="-16" height="16" left="72" name="sell_to_text" right="-10">
+				Wählen Sie, ob der Verkauf offen oder auf eine bestimmte Person
+beschränkt ist.
+			</text>
+			<combo_box bottom_delta="-32" height="16" left="72" name="sell_to" width="140">
+				<combo_box.item label="select one --" name="--selectone--"/>
+				<combo_box.item label="Jeder" name="Anyone"/>
+				<combo_box.item label="Bestimmte Person:" name="Specificuser:"/>
+			</combo_box>
+			<button label="Auswählen..." name="sell_to_select_agent"/>
+			<text name="sell_objects_label">
+				Die Objekte mit dem Land verkaufen?
+			</text>
+			<text name="sell_objects_text">
+				Die transferierbaren Landeigentümer-Objekte auf der Parzelle
+wechseln den Eigentümer.
+			</text>
+			<radio_group bottom_delta="-58" name="sell_objects">
+				<radio_item label="Nein, Objekte behalten" name="no"/>
+				<radio_item label="Ja, Objekte mit Land verkaufen" name="yes"/>
+			</radio_group>
+			<button label="Objekte anzeigen" name="show_objects" width="116"/>
+			<text name="nag_message_label">
+				ACHTUNG: Verkäufe sind endgültig.
+			</text>
+			<button label="Land zum Verkauf freigeben" name="sell_btn" width="180"/>
+			<button label="Abbrechen" name="cancel_btn"/>
+		</panel>
+	</scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_settings_debug.xml b/indra/newview/skins/default/xui/de/floater_settings_debug.xml
index ea3295797d3..f9a944165fc 100644
--- a/indra/newview/skins/default/xui/de/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/de/floater_settings_debug.xml
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="settings_debug" title="DEBUG-EINSTELLUNGEN">
-	<combo_box name="boolean_combo">
-		<combo_box.item name="TRUE" label="WAHR" />
-		<combo_box.item name="FALSE" label="FALSCH" />
-	</combo_box>
-	<color_swatch label="Farbe" name="color_swatch" />
-	<spinner label="x" name="val_spinner_1" />
-	<spinner label="x" name="val_spinner_2" />
-	<spinner label="x" name="val_spinner_3" />
-	<spinner label="x" name="val_spinner_4" />
-	<button label="Standard wiederherstellen" name="default_btn" width="170" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="settings_debug" title="DEBUG-EINSTELLUNGEN">
+	<combo_box name="boolean_combo">
+		<combo_box.item label="WAHR" name="TRUE"/>
+		<combo_box.item label="FALSCH" name="FALSE"/>
+	</combo_box>
+	<color_swatch label="Farbe" name="val_color_swatch"/>
+	<spinner label="x" name="val_spinner_1"/>
+	<spinner label="x" name="val_spinner_2"/>
+	<spinner label="x" name="val_spinner_3"/>
+	<spinner label="x" name="val_spinner_4"/>
+	<button label="Standard wiederherstellen" name="default_btn" width="170"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_stats.xml b/indra/newview/skins/default/xui/de/floater_stats.xml
new file mode 100644
index 00000000000..38494faf16b
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_stats.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Statistics" title="Statistik">
+	<scroll_container name="statistics_scroll">
+		<container_view name="statistics_view">
+			<stat_view label="Basic" name="basic">
+				<stat_bar label="FPS" name="fps"/>
+				<stat_bar label="Bandbreite" name="bandwidth"/>
+				<stat_bar label="Paketverlust" name="packet_loss"/>
+				<stat_bar label="Ping Sim" name="ping"/>
+			</stat_view>
+			<stat_view label="Erweitert" name="advanced">
+				<stat_view label="Darstellung" name="render">
+					<stat_bar label="Gezeichnete KTris" name="ktrisframe"/>
+					<stat_bar label="Gezeichnete KTris" name="ktrissec"/>
+					<stat_bar label="Objektanzahl" name="objs"/>
+					<stat_bar label="Neue Objekte" name="newobjs"/>
+				</stat_view>
+				<stat_view label="Textur" name="texture">
+					<stat_bar label="Zählen" name="numimagesstat"/>
+					<stat_bar label="Rohanzahl" name="numrawimagesstat"/>
+					<stat_bar label="GL Sp" name="gltexmemstat"/>
+					<stat_bar label="Formattierter Sp:" name="formattedmemstat"/>
+					<stat_bar label="Rohsp" name="rawmemstat"/>
+					<stat_bar label="Zugeteilter Sp" name="glboundmemstat"/>
+				</stat_view>
+				<stat_view label="Netzwerk" name="network">
+					<stat_bar label="Paketeingang" name="packetsinstat"/>
+					<stat_bar label="Paketausgang" name="packetsoutstat"/>
+					<stat_bar label="Objekte" name="objectkbitstat"/>
+					<stat_bar label="Textur" name="texturekbitstat"/>
+					<stat_bar label="Bestand" name="assetkbitstat"/>
+					<stat_bar label="Ebenen" name="layerskbitstat"/>
+					<stat_bar label="Tatsächlicher Eingang" name="actualinkbitstat"/>
+					<stat_bar label="Tatsächlicher Ausgang" name="actualoutkbitstat"/>
+					<stat_bar label="VFS Ausstehende Ops" name="vfspendingoperations"/>
+				</stat_view>
+			</stat_view>
+			<stat_view label="Simulator" name="sim">
+				<stat_bar label="Zeitdilation" name="simtimedilation"/>
+				<stat_bar label="Sim FPS" name="simfps"/>
+				<stat_bar label="Physik FPS" name="simphysicsfps"/>
+				<stat_view label="Physikdetails" name="physicsdetail">
+					<stat_bar label="Eingerastete Objekte" name="physicspinnedtasks"/>
+					<stat_bar label="Niedrig LOD-Objekte" name="physicslodtasks"/>
+					<stat_bar label="Zugeordneter Speicher" name="physicsmemoryallocated"/>
+					<stat_bar label="Agent Updates/Sek" name="simagentups"/>
+					<stat_bar label="Haupt-Agenten" name="simmainagents"/>
+					<stat_bar label="Child-Agenten" name="simchildagents"/>
+					<stat_bar label="Objekte" name="simobjects"/>
+					<stat_bar label="Aktive Objekte" name="simactiveobjects"/>
+					<stat_bar label="Aktive Skripts" name="simactivescripts"/>
+					<stat_bar label="Skript-Events" name="simscripteps"/>
+					<stat_bar label="Paketeingang" name="siminpps"/>
+					<stat_bar label="Paketausgang" name="simoutpps"/>
+					<stat_bar label="Ausstehende Downloads" name="simpendingdownloads"/>
+					<stat_bar label="Ausstehende Uploads" name="simpendinguploads"/>
+					<stat_bar label="Gesamtanzahl „Unacked&quot; Bytes" name="simtotalunackedbytes"/>
+				</stat_view>
+				<stat_view label="Zeit (ms)" name="simperf">
+					<stat_bar label="Gesamtzeit Frame" name="simframemsec"/>
+					<stat_bar label="Netto-Zeit" name="simnetmsec"/>
+					<stat_bar label="Physik-Zeit" name="simsimphysicsmsec"/>
+					<stat_bar label="Simulationszeit" name="simsimothermsec"/>
+					<stat_bar label="Agent-Zeit" name="simagentmsec"/>
+					<stat_bar label="Bilder-Zeit" name="simimagesmsec"/>
+					<stat_bar label="Skript-Zeit" name="simscriptmsec"/>
+				</stat_view>
+			</stat_view>
+		</container_view>
+	</scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index 6bad64324b9..b458d922ba5 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -1,573 +1,480 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="BAUEN">
-	<button label="" label_selected="" name="button focus" tool_tip="Fokus"/>
-	<button label="" label_selected="" name="button move" tool_tip="Verschieben"/>
-	<button label="" label_selected="" name="button edit" tool_tip="Bearbeiten"/>
-	<button label="" label_selected="" name="button create" tool_tip="Erstellen"/>
-	<button label="" label_selected="" name="button land" tool_tip="Land"/>
-	<radio_group name="focus_radio_group">
-		<radio_item label="Zoom" name="radio zoom"/>
-		<radio_item label="Orbit (Strg)" name="radio orbit"/>
-		<radio_item label="Schwenken (Strg-Umschalt)" name="radio pan"/>
-	</radio_group>
-	<radio_group name="move_radio_group">
-		<radio_item label="Verschieben" name="radio move"/>
-		<radio_item label="Heben (Strg)" name="radio lift"/>
-		<radio_item label="Rotieren (Strg-Umschalt)" name="radio spin"/>
-	</radio_group>
-	<radio_group name="edit_radio_group">
-		<radio_item label="Position" name="radio position"/>
-		<radio_item label="Drehen (Strg)" name="radio rotate"/>
-		<radio_item label="Dehnen (Strg-Umschalt)" name="radio stretch"/>
-		<radio_item label="Textur auswählen" name="radio select face"/>
-	</radio_group>
-	<check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/>
-	<text name="text ruler mode">
-		Lineal:
-	</text>
-	<combo_box name="combobox grid mode">
-		<combo_box.item name="World" label="Welt"
-		/>
-		<combo_box.item name="Local" label="Lokal"
-		/>
-		<combo_box.item name="Reference" label="Referenz"
-		/>
-	</combo_box>
-	<check_box label="Beide Seiten dehnen" name="checkbox uniform"/>
-	<check_box label="Texturen dehnen" name="checkbox stretch textures"/>
-	<check_box label="Raster verwenden" name="checkbox snap to grid"/>
-	<button label="Optionen..." label_selected="Optionen..." name="Options..."/>
-	<text name="text status">
-		Zum Verschieben ziehen, zum Kopieren Umschalttaste-Ziehen
-	</text>
-	<button label="" label_selected="" name="ToolCube" tool_tip="Würfel"/>
-	<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
-	<button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
-	<button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tetraeder"/>
-	<button label="" label_selected="" name="ToolCylinder" tool_tip="Zylinder"/>
-	<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Halbzylinder"/>
-	<button label="" label_selected="" name="ToolCone" tool_tip="Kegel"/>
-	<button label="" label_selected="" name="ToolHemiCone" tool_tip="Halbkegel"/>
-	<button label="" label_selected="" name="ToolSphere" tool_tip="Kugel"/>
-	<button label="" label_selected="" name="ToolHemiSphere" tool_tip="Halbkugel"/>
-	<button label="" label_selected="" name="ToolTorus" tool_tip="Torus"/>
-	<button label="" label_selected="" name="ToolTube" tool_tip="Rohr"/>
-	<button label="" label_selected="" name="ToolRing" tool_tip="Ring"/>
-	<button label="" label_selected="" name="ToolTree" tool_tip="Baum"/>
-	<button label="" label_selected="" name="ToolGrass" tool_tip="Gras"/>
-	<check_box label="Auswahl behalten" name="checkbox sticky"/>
-	<check_box label="Auswahl kopieren" name="checkbox copy selection"/>
-	<check_box label="Zentrieren" name="checkbox copy centers"/>
-	<check_box label="Drehen" name="checkbox copy rotates"/>
-	<radio_group name="land_radio_group">
-		<radio_item label="Land auswählen" name="radio select land"/>
-		<radio_item label="Einebnen" name="radio flatten"/>
-		<radio_item label="Anheben" name="radio raise"/>
-		<radio_item label="Absenken" name="radio lower"/>
-		<radio_item label="Glätten" name="radio smooth"/>
-		<radio_item label="Aufrauen" name="radio noise"/>
-		<radio_item label="Zurücksetzen" name="radio revert"/>
-	</radio_group>
-	<button label="Übernehmen" label_selected="Übernehmen" name="button apply to selection" tool_tip="Ausgewähltes Land ändern"/>
-	<text name="Bulldozer:">
-		Planierraupe:
-	</text>
-	<text name="Dozer Size:">
-		Größe
-	</text>
-	<text name="Strength:">
-		Stärke
-	</text>
-	<text name="obj_count">
-		Ausgewählte Objekte: [COUNT]
-	</text>
-	<text name="prim_count">
-		Primitive: [COUNT]
-	</text>
-	<tab_container name="Object Info Tabs">
-		<panel label="Allgemein" name="General">
-			<text name="Name:">
-				Name:
-			</text>
-			<text name="Description:">
-				Beschreibung:
-			</text>
-			<text name="Creator:">
-				Ersteller:
-			</text>
-			<text name="Creator Name">
-				Thrax Linden
-			</text>
-			<button label="Profil..." label_selected="Profil..." name="button creator profile"/>
-			<text name="Owner:">
-				Eigentümer:
-			</text>
-			<text name="Owner Name">
-				Thrax Linden
-			</text>
-			<button label="Profil..." label_selected="Profil..." name="button owner profile"/>
-			<text name="Group:">
-				Gruppe:
-			</text>
-			<text name="Group Name Proxy">
-				Die Lindens
-			</text>
-			<button label="Festlegen..." label_selected="Festlegen..." name="button set group"/>
-			<text name="Permissions:">
-				Berechtigungen:
-			</text>
-
-			<check_box label="Mit Gruppe teilen" name="checkbox share with group" tool_tip="Allen Mitgliedern der zugeordneten Gruppe die Erlaubnis erteilen, Ihre Berechtigungen für dieses Objekt zu teilen und zu verwenden. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/>
-			<string name="text deed continued">
-				Ãœbertragung...
-			</string>
-			<string name="text deed">
-				Ãœbertragung
-			</string>
-			<button label="Übertragung..." label_selected="Übertragung..." name="button deed" tool_tip="In der Gruppe gemeinsam verwendete Objekte können von einem Gruppenfunktionär übertragen werden."/>
-			<check_box label="Verschieben durch beliebige Personen zulassen" name="checkbox allow everyone move"/>
-			<check_box label="Kopieren durch beliebige Personen zulassen" name="checkbox allow everyone copy"/>
-			<check_box label="In Suche anzeigen" name="search_check" tool_tip="Dieses Objekt in Suchergebnissen anzeigen"/>
-			<check_box label="Zu verkaufen" name="checkbox for sale"/>
-			<text name="Cost">
-				Preis:L$
-			</text>
-			<combo_box name="sale type">
-				<combo_box.item label="Kopieren" name="Copy"/>
-				<combo_box.item label="Inhalt" name="Contents"/>
-				<combo_box.item label="Original" name="Original"/>
-			</combo_box>
-
-			<text name="label click action">
-				Bei Linksklicken:
-			</text>
-			<combo_box name="clickaction">
-				<combo_box.item name="Touch/grab(default)" label="Berühren/Greifen (Standard)"
-				/>
-				<combo_box.item name="Sitonobject" label="Auf Objekt sitzen"
-				/>
-				<combo_box.item name="Buyobject" label="Objekt kaufen"
-				/>
-				<combo_box.item name="Payobject" label="Objekt bezahlen"
-				/>
-				<combo_box.item name="Open" label="Öffnen"
-				/>
-				<combo_box.item name="Play" label="Parzellenmedien wiedergeben"
-				/>
-				<combo_box.item name="Opemmedia" label="Parzellenmedien öffnen"
-				/>
-			</combo_box>
-		<panel name="perms_build">
-			<text name="perm_modify">
-				Sie können dieses Objekt ändern
-			</text>
-			<text name="B:">
-				B:
-			</text>
-			<text name="O:">
-				O:
-			</text>
-			<text name="G:">
-				G:
-			</text>
-			<text name="E:">
-				E:
-			</text>
-			<text name="N:">
-				N:
-			</text>
-			<text name="F:">
-				F:
-			</text>
-			<text name="Next owner can:">
-				Nächster Eigentümer kann:
-			</text>
-			<check_box label="Ändern" name="checkbox next owner can modify"/>
-			<check_box label="Kopieren" name="checkbox next owner can copy"/>
-			<check_box name="checkbox next owner can transfer"/>
-		</panel>
-			<string name="text modify info 1">
-				Sie können dieses Objekt ändern
-			</string>
-			<string name="text modify info 2">
-				Sie können diese Objekte ändern
-			</string>
-			<string name="text modify info 3">
-				Sie können dieses Objekt nicht ändern
-			</string>
-			<string name="text modify info 4">
-				Sie können diese Objekte nicht ändern
-			</string>
-			<string name="text modify warning">
-				Gesamtes Objekt muss gewählt werden, um Berechtigungen festzulegen
-			</string>
-			<string name="Cost Default">
-				Preis: L$
-			</string>
-			<string name="Cost Total">
-				Summe: L$
-			</string>
-			<string name="Cost Per Unit">
-				Stückpreis: L$
-			</string>
-			<string name="Cost Mixed">
-				Mischpreis
-			</string>
-			<string name="Sale Mixed">
-				Mischverkauf
-			</string>
-		</panel>
-		<panel label="Objekt" name="Object">
-			<text name="select_single">
-				Wählen Sie nur ein Primitivum aus, um Parameter zu bearbeiten.
-			</text>
-			<text name="edit_object">
-				Objektparameter bearbeiten:
-			</text>
-			<check_box label="Gesperrt" name="checkbox locked" tool_tip="Verhindert, dass Objekt verschoben oder gelöscht wird. Oft beim Bauen nützlich, um unbeabsichtigte Bearbeitungen zu vermeiden."/>
-			<check_box label="Physisch" name="Physical Checkbox Ctrl" tool_tip="Gestattet, das Objekt geschoben und von Schwerkraft beeinflusst wird"/>
-			<check_box label="Temporär" name="Temporary Checkbox Ctrl" tool_tip="Verursacht, dass Objekt 1 Minute nach Erstellung gelöscht wird."/>
-			<check_box label="Phantom" name="Phantom Checkbox Ctrl" tool_tip="Verursacht, dass Objekt nicht mit anderen Objekten oder Avataren kollidiert"/>
-			<text name="label position">
-				Position (Meter)
-			</text>
-			<spinner label="X" name="Pos X"/>
-			<spinner label="Y" name="Pos Y"/>
-			<spinner label="Z" name="Pos Z"/>
-			<text name="label size">
-				Größe (Meter)
-			</text>
-			<spinner label="X" name="Scale X"/>
-			<spinner label="Y" name="Scale Y"/>
-			<spinner label="Z" name="Scale Z"/>
-			<text name="label rotation">
-				Rotation (Grad)
-			</text>
-			<spinner label="X" name="Rot X"/>
-			<spinner label="Y" name="Rot Y"/>
-			<spinner label="Z" name="Rot Z"/>
-			<text name="label material">
-				Material
-			</text>
-			<combo_box name="material">
-				<combo_box.item name="Stone" label="Stein"
-				/>
-				<combo_box.item name="Metal" label="Metall"
-				/>
-				<combo_box.item name="Glass" label="Glas"
-				/>
-				<combo_box.item name="Wood" label="Holz"
-				/>
-				<combo_box.item name="Flesh" label="Fleisch"
-				/>
-				<combo_box.item name="Plastic" label="Kunststoff"
-				/>
-				<combo_box.item name="Rubber" label="Gummi"
-				/>
-			</combo_box>
-			<text name="label basetype">
-				Bausteintyp
-			</text>
-			<combo_box name="comboBaseType">
-				<combo_box.item name="Box" label="Quader"
-				/>
-				<combo_box.item name="Cylinder" label="Zylinder"
-				/>
-				<combo_box.item name="Prism" label="Prisma"
-				/>
-				<combo_box.item name="Sphere" label="Kugel"
-				/>
-				<combo_box.item name="Torus" label="Torus"
-				/>
-				<combo_box.item name="Tube" label="Rohr"
-				/>
-				<combo_box.item name="Ring" label="Ring"
-				/>
-				<combo_box.item name="Sculpted" label="Geformt"
-				/>
-			</combo_box>
-			<text name="text cut">
-				Pfadschnitt Beginn und Ende
-			</text>
-			<spinner label="B" name="cut begin"/>
-			<spinner label="E" name="cut end"/>
-			<text name="text hollow">
-				Hohl
-			</text>
-			<text name="text skew">
-				Versatz
-			</text>
-			<spinner name="Scale 1"/>
-			<spinner name="Skew"/>
-			<text name="Hollow Shape">
-				Hohlform
-			</text>
-			<combo_box name="hole">
-				<combo_box.item name="Default" label="Standard"
-				/>
-				<combo_box.item name="Circle" label="Kreis"
-				/>
-				<combo_box.item name="Square" label="Quadrat"
-				/>
-				<combo_box.item name="Triangle" label="Dreieck"
-				/>
-			</combo_box>
-			<text name="text twist">
-				Torsion
-			</text>
-			<spinner label="B" name="Twist Begin"/>
-			<spinner label="E" name="Twist End"/>
-			<text name="scale_taper">
-				Verjüngung
-			</text>
-			<text name="scale_hole">
-				Lochgröße
-			</text>
-			<spinner label="X" name="Taper Scale X"/>
-			<spinner label="Y" name="Taper Scale Y"/>
-			<text name="text topshear">
-				Verscherung
-			</text>
-			<spinner label="X" name="Shear X"/>
-			<spinner label="Y" name="Shear Y"/>
-			<text name="advanced_cut">
-				Profilschnitt-Beginn und Ende
-			</text>
-			<text name="advanced_dimple">
-				Vertiefung-Beginn und Ende
-			</text>
-			<text name="advanced_slice">
-				Anfang/Ende abschneiden
-			</text>
-			<spinner label="B" name="Path Limit Begin"/>
-			<spinner label="E" name="Path Limit End"/>
-			<text name="text taper2">
-				Verjüngung
-			</text>
-			<spinner label="X" name="Taper X"/>
-			<spinner label="Y" name="Taper Y"/>
-			<text name="text radius delta">
-				Radius
-			</text>
-			<text name="text revolutions">
-				Umdrehungen
-			</text>
-			<spinner name="Radius Offset"/>
-			<texture_picker label="Textur für gestaltetes 
-Primitiv" name="sculpt texture control" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<check_box label="Spiegeln" name="sculpt mirror control" tool_tip="Geformtes Primitiv entlang der X-Achse spiegeln."/>
-			<check_box label="Wenden" name="sculpt invert control" tool_tip="Dreht die Normalen des geformten Primitivs von innen nach außen."/>
-			<text name="label sculpt type">
-				Naht
-			</text>
-			<combo_box name="sculpt type control">
-				<combo_box.item name="None" label="(keiner)"
-				/>
-				<combo_box.item name="Sphere" label="Kugel"
-				/>
-				<combo_box.item name="Torus" label="Torus"
-				/>
-				<combo_box.item name="Plane" label="Fläche"
-				/>
-				<combo_box.item name="Cylinder" label="Zylinder"
-				/>
-			</combo_box>
-		</panel>
-		<panel label="Eigenschaften" name="Features">
-			<text name="select_single">
-				Wählen Sie nur einen einzelnen Baustein aus, um Eigenschaften zu bearbeiten.
-			</text>
-			<text name="edit_object">
-				Objekteigenschaften bearbeiten:
-			</text>
-			<check_box label="Flexibler Weg" name="Flexible1D Checkbox Ctrl" tool_tip="Gestattet, dass Objekt um die Z-Achse gebogen wird. (nur Client-Seite)"/>
-			<spinner label="Weichheit" name="FlexNumSections"/>
-			<spinner label="Schwerkraft" name="FlexGravity"/>
-			<spinner label="Ziehen" name="FlexFriction"/>
-			<spinner label="Wind" name="FlexWind"/>
-			<spinner label="Spannung" name="FlexTension"/>
-			<spinner label="Erzwingen X" name="FlexForceX"/>
-			<spinner label="Erzwingen Y" name="FlexForceY"/>
-			<spinner label="Erzwingen Z" name="FlexForceZ"/>
-			<check_box label="Licht" name="Light Checkbox Ctrl" tool_tip="Verursacht, dass Objekt Licht emittiert"/>
-			<text name="label color">
-				Farbe
-			</text>
-			<color_swatch label="" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/>
-			<spinner label="Intensität" name="Light Intensity"/>
-			<spinner label="Radius" name="Light Radius"/>
-			<spinner label="Abnehmend" name="Light Falloff"/>
-		</panel>
-		<panel label="Textur" name="Texture">
-			<texture_picker label="Textur" name="texture control" tool_tip="Klicken, um ein Bild zu wählen"/>
-			<color_swatch label="Farbe" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/>
-			<text name="color trans">
-				Transparenz %
-			</text>
-			<text name="glow label">
-				Leuchten
-			</text>
-			<check_box label="Ganz hell" name="checkbox fullbright"/>
-			<text name="tex gen">
-				Zuordnung
-			</text>
-			<combo_box name="combobox texgen">
-				<combo_box.item name="Default" label="Standard"
-				/>
-				<combo_box.item name="Planar" label="Eben"
-				/>
-			</combo_box>
-			<text name="label shininess">
-				Glanz
-			</text>
-			<combo_box name="combobox shininess">
-				<combo_box.item name="None" label="Kein"
-				/>
-				<combo_box.item name="Low" label="Niedrig"
-				/>
-				<combo_box.item name="Medium" label="Mittel"
-				/>
-				<combo_box.item name="High" label="Hoch"
-				/>
-			</combo_box>
-			<text name="label bumpiness">
-				Holprigkeit
-			</text>
-			<combo_box name="combobox bumpiness">
-				<combo_box.item name="None" label="Keine"
-				/>
-				<combo_box.item name="Brightness" label="Helligkeit"
-				/>
-				<combo_box.item name="Darkness" label="Dunkelheit"
-				/>
-				<combo_box.item name="woodgrain" label="Holzmaserung"
-				/>
-				<combo_box.item name="bark" label="Rinde"
-				/>
-				<combo_box.item name="bricks" label="Ziegel"
-				/>
-				<combo_box.item name="checker" label="Karo"
-				/>
-				<combo_box.item name="concrete" label="Beton"
-				/>
-				<combo_box.item name="crustytile" label="verkrustete Fliesen"
-				/>
-				<combo_box.item name="cutstone" label="Steinplatten"
-				/>
-				<combo_box.item name="discs" label="Scheiben"
-				/>
-				<combo_box.item name="gravel" label="Kies"
-				/>
-				<combo_box.item name="petridish" label="Petrischale"
-				/>
-				<combo_box.item name="siding" label="Verkleidung"
-				/>
-				<combo_box.item name="stonetile" label="Steinfliesen"
-				/>
-				<combo_box.item name="stucco" label="Stuck"
-				/>
-				<combo_box.item name="suction" label="Saugen"
-				/>
-				<combo_box.item name="weave" label="gewoben"
-				/>
-			</combo_box>
-			<text name="tex scale">
-				Wiederholungen
-			</text>
-			<spinner label="Horizontal (U)" name="TexScaleU"/>
-			<check_box label="Umkehren" name="checkbox flip s"/>
-			<spinner label="Vertikal (V)" name="TexScaleV"/>
-			<check_box label="Umkehren" name="checkbox flip t"/>
-			<text name="tex rotate">
-				Rotation (Grad)
-			</text>
-			<string name="string repeats per meter">
-				Kacheln pro Meter
-			</string>
-			<string name="string repeats per face">
-				Wiederholungen pro Fläche
-			</string>
-			<text name="rpt">
-				Kacheln pro Meter
-			</text>
-			<button label="Ãœbernehmen" label_selected="Ãœbernehmen" name="button apply"/>
-			<text name="tex offset">
-				Versatz
-			</text>
-			<spinner label="Horizontal (U)" name="TexOffsetU"/>
-			<spinner label="Vertikal (V)" name="TexOffsetV"/>
-			<text name="textbox autofix">
-				Medientextur ausrichten
-(zuerst laden)
-			</text>
-			<button label="Ausrichten" label_selected="Ausrichten" name="button align"/>
-		</panel>
-		<panel label="Inhalt" name="Contents">
-			<button label="Neues Skript" label_selected="Neues Skript" name="button new script"/>
-			<button label="Berechtigungen" name="button permissions"/>
-		</panel>
-	</tab_container>
-	<panel name="land info panel">
-		<text name="label_parcel_info">
-			Parzelleninformation
-		</text>
-		<text name="label_area_price">
-			Preis: L$ [PRICE] für [AREA] m²
-		</text>
-		<text name="label_area">
-			Fläche: [AREA] m²
-		</text>
-		<button label="Info zu Land..." label_selected="Info zu Land..." name="button about land"/>
-		<check_box label="Eigentümer anzeigen" name="checkbox show owners" tool_tip="Parzellen nach Eigentümer farbig kennzeichnen: &#10;&#10;Grün = Ihr Land &#10;Blau = Das Land Ihrer Gruppe &#10;Rot = Im Eigentum anderer &#10;Geld = Zum Verkauf &#10;Lila = Zur Auktion &#10;Grau = Öffentlich"/>
-		<button label="?" label_selected="?" name="button show owners help"/>
-		<text name="label_parcel_modify">
-			Parzelle ändern
-		</text>
-		<button label="Unterteilen" label_selected="Unterteilen" name="button subdivide land"/>
-		<button label="Zusammenlegen" label_selected="Zusammenlegen" name="button join land"/>
-		<text name="label_parcel_trans">
-			Land-Transaktionen
-		</text>
-		<button label="Land kaufen" label_selected="Land kaufen" name="button buy land"/>
-		<button label="Land aufgeben" label_selected="Land aufgeben" name="button abandon land"/>
-	</panel>
-	<floater.string name="status_rotate">
-		An den farbigen Bändern ziehen, um das Objekt zu drehen
-	</floater.string>
-	<floater.string name="status_scale">
-		Klicken und ziehen, um die ausgewählte Seite zu dehnen
-	</floater.string>
-	<floater.string name="status_move">
-		Maus verschiebt, Umschalt-Taste und Maus kopiert
-	</floater.string>
-	<floater.string name="status_modifyland">
-		Klicken und halten, um das Land zu bearbeiten
-	</floater.string>
-	<floater.string name="status_camera">
-		Klicken und ziehen, um die Ansicht zu ändern
-	</floater.string>
-	<floater.string name="status_grab">
-		Ziehen, um Objekte zu verschieben, Strg zum Heben, Strg-Umschalt zum Drehen
-	</floater.string>
-	<floater.string name="status_place">
-		Inworld klicken, um zu bauen.
-	</floater.string>
-	<floater.string name="status_selectland">
-		Klicken und ziehen, um Land auszuwählen
-	</floater.string>
-	<floater.string name="grid_screen_text">
-		Bildschirm
-	</floater.string>
-	<floater.string name="grid_local_text">
-		Lokal
-	</floater.string>
-	<floater.string name="grid_world_text">
-		Welt
-	</floater.string>
-	<floater.string name="grid_reference_text">
-		Referenz
-	</floater.string>
-	<floater.string name="grid_attachment_text">
-		Anhang
-	</floater.string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="toolbox floater" short_title="Bau-Werkzeuge" title="">
+	<floater.string name="status_rotate">
+		An den farbigen Bändern ziehen, um das Objekt zu drehen
+	</floater.string>
+	<floater.string name="status_scale">
+		Klicken und ziehen, um die ausgewählte Seite zu dehnen
+	</floater.string>
+	<floater.string name="status_move">
+		Maus verschiebt, Umschalt-Taste und Maus kopiert
+	</floater.string>
+	<floater.string name="status_modifyland">
+		Klicken und halten, um das Land zu bearbeiten
+	</floater.string>
+	<floater.string name="status_camera">
+		Klicken und ziehen, um Kamera zu bewegen
+	</floater.string>
+	<floater.string name="status_grab">
+		Ziehen, um Objekte zu verschieben, Strg zum Heben, Strg-Umschalt zum Drehen
+	</floater.string>
+	<floater.string name="status_place">
+		Inworld klicken, um zu bauen.
+	</floater.string>
+	<floater.string name="status_selectland">
+		Klicken und ziehen, um Land auszuwählen
+	</floater.string>
+	<floater.string name="grid_screen_text">
+		Bildschirm
+	</floater.string>
+	<floater.string name="grid_local_text">
+		Lokal
+	</floater.string>
+	<floater.string name="grid_world_text">
+		Welt
+	</floater.string>
+	<floater.string name="grid_reference_text">
+		Referenz
+	</floater.string>
+	<floater.string name="grid_attachment_text">
+		Anhang
+	</floater.string>
+	<button label="" label_selected="" name="button focus" tool_tip="Fokus"/>
+	<button label="" label_selected="" name="button move" tool_tip="Verschieben"/>
+	<button label="" label_selected="" name="button edit" tool_tip="Bearbeiten"/>
+	<button label="" label_selected="" name="button create" tool_tip="Erstellen"/>
+	<button label="" label_selected="" name="button land" tool_tip="Land"/>
+	<text name="text status">
+		Zum Verschieben ziehen, zum Kopieren Umschalttaste-Ziehen
+	</text>
+	<radio_group name="focus_radio_group">
+		<radio_item label="Zoom" name="radio zoom"/>
+		<radio_item label="Orbit (Strg)" name="radio orbit"/>
+		<radio_item label="Schwenken (Strg-Umschalt)" name="radio pan"/>
+	</radio_group>
+	<radio_group name="move_radio_group">
+		<radio_item label="Verschieben" name="radio move"/>
+		<radio_item label="Heben (Strg)" name="radio lift"/>
+		<radio_item label="Rotieren (Strg-Umschalt)" name="radio spin"/>
+	</radio_group>
+	<radio_group name="edit_radio_group">
+		<radio_item label="Bewegen" name="radio position"/>
+		<radio_item label="Drehen (Strg)" name="radio rotate"/>
+		<radio_item label="Dehnen (Strg-Umschalt)" name="radio stretch"/>
+		<radio_item label="Textur auswählen" name="radio select face"/>
+	</radio_group>
+	<check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/>
+	<check_box label="Beide Seiten dehnen" name="checkbox uniform"/>
+	<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures"/>
+	<check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid"/>
+	<combo_box name="combobox grid mode">
+		<combo_box.item label="Welt-Lineal" name="World"/>
+		<combo_box.item label="Lokal-Lineal" name="Local"/>
+		<combo_box.item label="Referenz-Lineal" name="Reference"/>
+	</combo_box>
+	<button label="Optionen..." label_selected="Optionen..." name="Options..." tool_tip="Grid-Optionen einstellen"/>
+	<button label="" label_selected="" name="ToolCube" tool_tip="Würfel"/>
+	<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
+	<button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
+	<button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tetraeder"/>
+	<button label="" label_selected="" name="ToolCylinder" tool_tip="Zylinder"/>
+	<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Halbzylinder"/>
+	<button label="" label_selected="" name="ToolCone" tool_tip="Kegel"/>
+	<button label="" label_selected="" name="ToolHemiCone" tool_tip="Halbkegel"/>
+	<button label="" label_selected="" name="ToolSphere" tool_tip="Kugel"/>
+	<button label="" label_selected="" name="ToolHemiSphere" tool_tip="Halbkugel"/>
+	<button label="" label_selected="" name="ToolTorus" tool_tip="Torus"/>
+	<button label="" label_selected="" name="ToolTube" tool_tip="Rohr"/>
+	<button label="" label_selected="" name="ToolRing" tool_tip="Ring"/>
+	<button label="" label_selected="" name="ToolTree" tool_tip="Baum"/>
+	<button label="" label_selected="" name="ToolGrass" tool_tip="Gras"/>
+	<check_box label="Ausgewähltes Werkzeug beibehalten" name="checkbox sticky"/>
+	<check_box label="Auswahl kopieren" name="checkbox copy selection"/>
+	<check_box initial_value="true" label="Kopie zentrieren" name="checkbox copy centers"/>
+	<check_box label="Kopie drehen" name="checkbox copy rotates"/>
+	<radio_group name="land_radio_group">
+		<radio_item label="Land auswählen" name="radio select land"/>
+		<radio_item label="Einebnen" name="radio flatten"/>
+		<radio_item label="Anheben" name="radio raise"/>
+		<radio_item label="Absenken" name="radio lower"/>
+		<radio_item label="Glätten" name="radio smooth"/>
+		<radio_item label="Aufrauen" name="radio noise"/>
+		<radio_item label="Zurücksetzen" name="radio revert"/>
+	</radio_group>
+	<text name="Bulldozer:">
+		Planierraupe:
+	</text>
+	<text name="Dozer Size:">
+		Größe
+	</text>
+	<text name="Strength:">
+		Stärke
+	</text>
+	<button label="Übernehmen" label_selected="Übernehmen" name="button apply to selection" tool_tip="Ausgewähltes Land ändern"/>
+	<text name="obj_count">
+		Objekte: [COUNT]
+	</text>
+	<text name="prim_count">
+		Primitive: [COUNT]
+	</text>
+	<tab_container name="Object Info Tabs">
+		<panel label="Allgemein" name="General">
+			<panel.string name="text deed continued">
+				Ãœbertragung
+			</panel.string>
+			<panel.string name="text deed">
+				Ãœbertragung
+			</panel.string>
+			<panel.string name="text modify info 1">
+				Sie können dieses Objekt ändern
+			</panel.string>
+			<panel.string name="text modify info 2">
+				Sie können diese Objekte ändern
+			</panel.string>
+			<panel.string name="text modify info 3">
+				Sie können dieses Objekt nicht ändern
+			</panel.string>
+			<panel.string name="text modify info 4">
+				Sie können diese Objekte nicht ändern
+			</panel.string>
+			<panel.string name="text modify warning">
+				Gesamtes Objekt wählen, um Berechtigungen festzulegen.
+			</panel.string>
+			<panel.string name="Cost Default">
+				Preis: L$
+			</panel.string>
+			<panel.string name="Cost Total">
+				Summe: L$
+			</panel.string>
+			<panel.string name="Cost Per Unit">
+				Stückpreis: L$
+			</panel.string>
+			<panel.string name="Cost Mixed">
+				Mischpreis
+			</panel.string>
+			<panel.string name="Sale Mixed">
+				Mischverkauf
+			</panel.string>
+			<text name="Name:">
+				Name:
+			</text>
+			<text name="Description:">
+				Beschreibung:
+			</text>
+			<text name="Creator:">
+				Ersteller:
+			</text>
+			<text name="Creator Name">
+				Thrax Linden
+			</text>
+			<text name="Owner:">
+				Eigentümer:
+			</text>
+			<text name="Owner Name">
+				Thrax Linden
+			</text>
+			<text name="Group:">
+				Gruppe:
+			</text>
+			<button label="Festlegen..." label_selected="Festlegen..." name="button set group" tool_tip="Eine Gruppe auswählen, um die Berechtigungen des Objekts zu teilen."/>
+			<name_box initial_value="Wird geladen..." name="Group Name Proxy"/>
+			<button label="Übertragung" label_selected="Übertragung" name="button deed" tool_tip="Eine Übertragung bedeutet, dass das Objekt mit den Berechtigungen „Nächster Eigentümer“ weitergegeben wird. Mit der Gruppe geteilte Objekte können von einem Gruppen-Officer übertragen werden."/>
+			<check_box label="Teilen" name="checkbox share with group" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern teilen. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/>
+			<text name="label click action">
+				Bei Linksklick:
+			</text>
+			<combo_box name="clickaction">
+				<combo_box.item label="Berühren (Standard)" name="Touch/grab(default)"/>
+				<combo_box.item label="Auf Objekt sitzen" name="Sitonobject"/>
+				<combo_box.item label="Objekt kaufen" name="Buyobject"/>
+				<combo_box.item label="Objekt bezahlen" name="Payobject"/>
+				<combo_box.item label="Öffnen" name="Open"/>
+			</combo_box>
+			<check_box label="Zum Verkauf:" name="checkbox for sale"/>
+			<combo_box name="sale type">
+				<combo_box.item label="Kopieren" name="Copy"/>
+				<combo_box.item label="Inhalt" name="Contents"/>
+				<combo_box.item label="Original" name="Original"/>
+			</combo_box>
+			<spinner label="Preis: L$" name="Edit Cost"/>
+			<check_box label="In Suche anzeigen" name="search_check" tool_tip="Dieses Objekt in Suchergebnissen anzeigen"/>
+			<panel name="perms_build">
+				<text name="perm_modify">
+					Sie können dieses Objekt bearbeiten.
+				</text>
+				<text name="Anyone can:">
+					Jeder:
+				</text>
+				<check_box label="Kopieren" name="checkbox allow everyone copy"/>
+				<text name="Next owner can:">
+					Nächster Eigentümer:
+				</text>
+				<check_box label="Ändern" name="checkbox next owner can modify"/>
+				<check_box label="Kopieren" name="checkbox next owner can copy"/>
+				<check_box label="Transferieren" name="checkbox next owner can transfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/>
+				<text name="B:">
+					B:
+				</text>
+				<text name="O:">
+					O:
+				</text>
+				<text name="G:">
+					G:
+				</text>
+				<text name="E:">
+					E:
+				</text>
+				<text name="N:">
+					N:
+				</text>
+				<text name="F:">
+					F:
+				</text>
+			</panel>
+		</panel>
+		<panel label="Objekt" name="Object">
+			<check_box label="Gesperrt" name="checkbox locked" tool_tip="Verhindert, dass Objekt verschoben oder gelöscht wird. Oft beim Bauen nützlich, um unbeabsichtigte Bearbeitungen zu vermeiden."/>
+			<check_box label="Physisch" name="Physical Checkbox Ctrl" tool_tip="Gestattet, das Objekt geschoben und von Schwerkraft beeinflusst wird"/>
+			<check_box label="Temporär" name="Temporary Checkbox Ctrl" tool_tip="Verursacht, dass Objekt 1 Minute nach Erstellung gelöscht wird."/>
+			<check_box label="Phantom" name="Phantom Checkbox Ctrl" tool_tip="Verursacht, dass Objekt nicht mit anderen Objekten oder Avataren kollidiert"/>
+			<text name="label position">
+				Position (Meter)
+			</text>
+			<spinner label="X" name="Pos X"/>
+			<spinner label="Y" name="Pos Y"/>
+			<spinner label="Z" name="Pos Z"/>
+			<text name="label size">
+				Größe (Meter)
+			</text>
+			<spinner label="X" name="Scale X"/>
+			<spinner label="Y" name="Scale Y"/>
+			<spinner label="Z" name="Scale Z"/>
+			<text name="label rotation">
+				Rotation (Grad)
+			</text>
+			<spinner label="X" name="Rot X"/>
+			<spinner label="Y" name="Rot Y"/>
+			<spinner label="Z" name="Rot Z"/>
+			<combo_box name="comboBaseType">
+				<combo_box.item label="Quader" name="Box"/>
+				<combo_box.item label="Zylinder" name="Cylinder"/>
+				<combo_box.item label="Prisma" name="Prism"/>
+				<combo_box.item label="Kugel" name="Sphere"/>
+				<combo_box.item label="Torus" name="Torus"/>
+				<combo_box.item label="Rohr" name="Tube"/>
+				<combo_box.item label="Ring" name="Ring"/>
+				<combo_box.item label="Geformt" name="Sculpted"/>
+			</combo_box>
+			<combo_box name="material">
+				<combo_box.item label="Stein" name="Stone"/>
+				<combo_box.item label="Metall" name="Metal"/>
+				<combo_box.item label="Glas" name="Glass"/>
+				<combo_box.item label="Holz" name="Wood"/>
+				<combo_box.item label="Fleisch" name="Flesh"/>
+				<combo_box.item label="Kunststoff" name="Plastic"/>
+				<combo_box.item label="Gummi" name="Rubber"/>
+			</combo_box>
+			<text name="text cut">
+				Pfadschnitt (Anfang/Ende)
+			</text>
+			<spinner label="B" name="cut begin"/>
+			<spinner label="E" name="cut end"/>
+			<text name="text hollow">
+				Hohl
+			</text>
+			<text name="text skew">
+				Versatz
+			</text>
+			<spinner name="Scale 1"/>
+			<spinner name="Skew"/>
+			<text name="Hollow Shape">
+				Hohlform
+			</text>
+			<combo_box name="hole">
+				<combo_box.item label="Standard" name="Default"/>
+				<combo_box.item label="Kreis" name="Circle"/>
+				<combo_box.item label="Quadrat" name="Square"/>
+				<combo_box.item label="Dreieck" name="Triangle"/>
+			</combo_box>
+			<text name="text twist">
+				Torsion (Anfang/Ende)
+			</text>
+			<spinner label="B" name="Twist Begin"/>
+			<spinner label="E" name="Twist End"/>
+			<text name="scale_taper">
+				Verjüngung
+			</text>
+			<text name="scale_hole">
+				Lochgröße
+			</text>
+			<spinner label="X" name="Taper Scale X"/>
+			<spinner label="Y" name="Taper Scale Y"/>
+			<text name="text topshear">
+				Verscherung
+			</text>
+			<spinner label="X" name="Shear X"/>
+			<spinner label="Y" name="Shear Y"/>
+			<text name="advanced_cut">
+				Profilschnitt (Anfang/Ende)
+			</text>
+			<text name="advanced_dimple">
+				Vertiefung (Anfang/Ende)
+			</text>
+			<text name="advanced_slice">
+				Abschneiden (Anfang/Ende)
+			</text>
+			<spinner label="B" name="Path Limit Begin"/>
+			<spinner label="E" name="Path Limit End"/>
+			<text name="text taper2">
+				Verjüngung
+			</text>
+			<spinner label="X" name="Taper X"/>
+			<spinner label="Y" name="Taper Y"/>
+			<text name="text radius delta">
+				Radius
+			</text>
+			<text name="text revolutions">
+				Umdrehungen
+			</text>
+			<spinner name="Radius Offset"/>
+			<texture_picker label="Textur für gestaltetes  Primitiv" name="sculpt texture control" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+			<check_box label="Spiegeln" name="sculpt mirror control" tool_tip="Geformtes Primitiv entlang der X-Achse spiegeln."/>
+			<check_box label="Wenden" name="sculpt invert control" tool_tip="Dreht die Normalen des geformten Primitivs von innen nach außen."/>
+			<text name="label sculpt type">
+				Naht
+			</text>
+			<combo_box name="sculpt type control">
+				<combo_box.item label="(keiner)" name="None"/>
+				<combo_box.item label="Kugel" name="Sphere"/>
+				<combo_box.item label="Torus" name="Torus"/>
+				<combo_box.item label="Fläche" name="Plane"/>
+				<combo_box.item label="Zylinder" name="Cylinder"/>
+			</combo_box>
+		</panel>
+		<panel label="Eigenschaften" name="Features">
+			<text name="select_single">
+				Wählen Sie nur einen einzelnen Baustein aus, um Eigenschaften zu bearbeiten.
+			</text>
+			<text name="edit_object">
+				Objekteigenschaften bearbeiten:
+			</text>
+			<check_box label="Flexibler Weg" name="Flexible1D Checkbox Ctrl" tool_tip="Gestattet, dass Objekt um die Z-Achse gebogen wird. (nur Client-Seite)"/>
+			<spinner label="Weichheit" name="FlexNumSections"/>
+			<spinner label="Schwerkraft" name="FlexGravity"/>
+			<spinner label="Ziehen" name="FlexFriction"/>
+			<spinner label="Wind" name="FlexWind"/>
+			<spinner label="Spannung" name="FlexTension"/>
+			<spinner label="Erzwingen X" name="FlexForceX"/>
+			<spinner label="Erzwingen Y" name="FlexForceY"/>
+			<spinner label="Erzwingen Z" name="FlexForceZ"/>
+			<check_box label="Licht" name="Light Checkbox Ctrl" tool_tip="Verursacht, dass Objekt Licht emittiert"/>
+			<color_swatch label="" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/>
+			<spinner label="Intensität" name="Light Intensity"/>
+			<spinner label="Radius" name="Light Radius"/>
+			<spinner label="Abnehmend" name="Light Falloff"/>
+		</panel>
+		<panel label="Textur" name="Texture">
+			<panel.string name="string repeats per meter">
+				Kacheln pro Meter
+			</panel.string>
+			<panel.string name="string repeats per face">
+				Wiederholungen pro Fläche
+			</panel.string>
+			<texture_picker label="Textur" name="texture control" tool_tip="Klicken, um ein Bild zu wählen"/>
+			<color_swatch label="Farbe" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/>
+			<text name="color trans">
+				Transparenz %
+			</text>
+			<text name="glow label">
+				Leuchten
+			</text>
+			<check_box label="Ganz hell" name="checkbox fullbright"/>
+			<text name="tex gen">
+				Zuordnung
+			</text>
+			<combo_box name="combobox texgen">
+				<combo_box.item label="Standard" name="Default"/>
+				<combo_box.item label="Eben" name="Planar"/>
+			</combo_box>
+			<text name="label shininess">
+				Glanz
+			</text>
+			<combo_box name="combobox shininess">
+				<combo_box.item label="Kein" name="None"/>
+				<combo_box.item label="Niedrig" name="Low"/>
+				<combo_box.item label="Mittel" name="Medium"/>
+				<combo_box.item label="Hoch" name="High"/>
+			</combo_box>
+			<text name="label bumpiness">
+				Holprigkeit
+			</text>
+			<combo_box name="combobox bumpiness">
+				<combo_box.item label="Keine" name="None"/>
+				<combo_box.item label="Helligkeit" name="Brightness"/>
+				<combo_box.item label="Dunkelheit" name="Darkness"/>
+				<combo_box.item label="Holzmaserung" name="woodgrain"/>
+				<combo_box.item label="Rinde" name="bark"/>
+				<combo_box.item label="Ziegel" name="bricks"/>
+				<combo_box.item label="Karo" name="checker"/>
+				<combo_box.item label="Beton" name="concrete"/>
+				<combo_box.item label="verkrustete Fliesen" name="crustytile"/>
+				<combo_box.item label="Steinplatten" name="cutstone"/>
+				<combo_box.item label="Scheiben" name="discs"/>
+				<combo_box.item label="Kies" name="gravel"/>
+				<combo_box.item label="Petrischale" name="petridish"/>
+				<combo_box.item label="Verkleidung" name="siding"/>
+				<combo_box.item label="Steinfliesen" name="stonetile"/>
+				<combo_box.item label="Stuck" name="stucco"/>
+				<combo_box.item label="Saugen" name="suction"/>
+				<combo_box.item label="gewoben" name="weave"/>
+			</combo_box>
+			<text name="tex scale">
+				Wiederholungen
+			</text>
+			<spinner label="Horizontal (U)" name="TexScaleU"/>
+			<check_box label="Umkehren" name="checkbox flip s"/>
+			<spinner label="Vertikal (V)" name="TexScaleV"/>
+			<check_box label="Umkehren" name="checkbox flip t"/>
+			<button label="Ãœbernehmen" label_selected="Ãœbernehmen" name="button apply"/>
+			<text name="tex offset">
+				Texture-Versatz
+			</text>
+			<spinner label="Horizontal (U)" name="TexOffsetU"/>
+			<spinner label="Vertikal (V)" name="TexOffsetV"/>
+		</panel>
+		<panel label="Inhalt" name="Contents">
+			<button label="Neues Skript" label_selected="Neues Skript" name="button new script"/>
+			<button label="Berechtigungen" name="button permissions"/>
+		</panel>
+	</tab_container>
+	<panel name="land info panel">
+		<text name="label_parcel_info">
+			Parzelleninformation
+		</text>
+		<text name="label_area_price">
+			Preis: L$ [PRICE] für [AREA] m²
+		</text>
+		<text name="label_area">
+			Fläche: [AREA] m²
+		</text>
+		<button label="Info zu Land..." label_selected="Info zu Land..." name="button about land"/>
+		<check_box label="Eigentümer anzeigen" name="checkbox show owners" tool_tip="Parzellen nach Eigentümer farbig kennzeichnen: 
+
+Grün = Ihr Land 
+Blau = Das Land Ihrer Gruppe 
+Rot = Im Eigentum anderer 
+Geld = Zum Verkauf 
+Lila = Zur Auktion 
+Grau = Öffentlich"/>
+		<text name="label_parcel_modify">
+			Parzelle ändern
+		</text>
+		<button label="Unterteilen" label_selected="Unterteilen" name="button subdivide land"/>
+		<button label="Zusammenlegen" label_selected="Zusammenlegen" name="button join land"/>
+		<text name="label_parcel_trans">
+			Land-Transaktionen
+		</text>
+		<button label="Land kaufen" label_selected="Land kaufen" name="button buy land"/>
+		<button label="Land aufgeben" label_selected="Land aufgeben" name="button abandon land"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/inspect_avatar.xml b/indra/newview/skins/default/xui/de/inspect_avatar.xml
new file mode 100644
index 00000000000..d2d6d202706
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/inspect_avatar.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_avatar">
+	<string name="Subtitle">
+		[AGE]
+	</string>
+	<string name="Details">
+		[ACCTTYPE], [PAYMENTINFO]
+Profil: [SL_PROFILE]
+	</string>
+	<slider name="volume_slider" tool_tip="Lautstärke" value="0.5"/>
+	<button label="Freund hinzufügen" name="add_friend_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_icon.xml b/indra/newview/skins/default/xui/de/menu_avatar_icon.xml
new file mode 100644
index 00000000000..ae9a70024ae
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_avatar_icon.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+	<menu_item_call label="Profil anzeigen..." name="Show Profile"/>
+	<menu_item_call label="IM senden..." name="Send IM"/>
+	<menu_item_call label="Freund hinzufügen..." name="Add Friend"/>
+	<menu_item_call label="Freund entfernen..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_favorites.xml b/indra/newview/skins/default/xui/de/menu_favorites.xml
new file mode 100644
index 00000000000..b73010e7b5a
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_favorites.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Teleportieren" name="Teleport To Landmark"/>
+	<menu_item_call label="Landmarken anzeigen/bearbeiten" name="Landmark Open"/>
+	<menu_item_call label="SLurl kopieren" name="Copy slurl"/>
+	<menu_item_call label="Auf Karte zeigen" name="Show On Map"/>
+	<menu_item_call label="Kopieren" name="Landmark Copy"/>
+	<menu_item_call label="Einfügen" name="Landmark Paste"/>
+	<menu_item_call label="Löschen" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_group_plus.xml b/indra/newview/skins/default/xui/de/menu_group_plus.xml
new file mode 100644
index 00000000000..f90fcb04519
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_group_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="Werden Sie Mitglied..." name="item_join"/>
+	<menu_item_call label="Neue Gruppe..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml
index e05b2e9f1a3..67250fc7328 100644
--- a/indra/newview/skins/default/xui/de/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/de/menu_inventory.xml
@@ -1,66 +1,76 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Popup">
-	<menu_item_call label="Kaufen" name="Task Buy"/>
-	<menu_item_call label="Öffnen" name="Task Open"/>
-	<menu_item_call label="Wiedergeben/Abspielen" name="Task Play"/>
-	<menu_item_call label="Eigenschaften" name="Task Properties"/>
-	<menu_item_call label="Umbenennen" name="Task Rename"/>
-	<menu_item_call label="Löschen" name="Task Remove"/>
-	<menu_item_call label="Papierkorb ausleeren" name="Empty Trash"/>
-	<menu_item_call label="Fundstücke ausleeren" name="Empty Lost And Found"/>
-	<menu_item_call label="Neuer Ordner" name="New Folder"/>
-	<menu_item_call label="Neues Skript" name="New Script"/>
-	<menu_item_call label="Neue Notiz" name="New Note"/>
-	<menu_item_call label="Neue Geste" name="New Gesture"/>
-	<menu name="New Clothes">
-		<menu_item_call label="Neues Hemd" name="New Shirt"/>
-		<menu_item_call label="Neue Hose" name="New Pants"/>
-		<menu_item_call label="Neue Schuhe" name="New Shoes"/>
-		<menu_item_call label="Neue Socken" name="New Socks"/>
-		<menu_item_call label="Neue Jacke" name="New Jacket"/>
-		<menu_item_call label="Neuer Rock" name="New Skirt"/>
-		<menu_item_call label="Neue Handschuhe" name="New Gloves"/>
-		<menu_item_call label="Neues Unterhemd" name="New Undershirt"/>
-		<menu_item_call label="Neue Unterhose" name="New Underpants"/>
-	</menu>
-	<menu name="New Body Parts">
-		<menu_item_call label="Neue Form/Gestalt" name="New Shape"/>
-		<menu_item_call label="Neue Haut" name="New Skin"/>
-		<menu_item_call label="Neues Haar" name="New Hair"/>
-		<menu_item_call label="Neue Augen" name="New Eyes"/>
-	</menu>
-	<menu_item_call label="Teleportieren" name="Landmark Open"/>
-	<menu_item_call label="Öffnen" name="Animation Open"/>
-	<menu_item_call label="Öffnen" name="Sound Open"/>
-	<menu_item_call label="Objekt löschen" name="Purge Item"/>
-	<menu_item_call label="Objekt wiederherstellen" name="Restore Item"/>
-	<menu_item_call label="Öffnen" name="Open"/>
-	<menu_item_call label="Eigenschaften" name="Properties"/>
-	<menu_item_call label="Umbenennen" name="Rename"/>
-	<menu_item_call label="Asset-UUID kopieren" name="Copy Asset UUID"/>
-	<menu_item_call label="Kopieren" name="Copy"/>
-	<menu_item_call label="Einfügen" name="Paste"/>
-	<menu_item_call label="Löschen" name="Delete"/>
-	<menu_item_call label="Objekte abnehmen" name="Take Off Items"/>
-	<menu_item_call label="Zum Outfit hinzufügen" name="Add To Outfit"/>
-	<menu_item_call label="Outfit ersetzen" name="Replace Outfit"/>
-	<menu_item_call label="Konferenz-Chat starten" name="Conference Chat Folder"/>
-	<menu_item_call label="Wiedergeben/Abspielen" name="Sound Play"/>
-	<menu_item_call label="Landmarken-Info" name="Teleport To Landmark"/>
-	<menu_item_call label="In Welt abspielen" name="Animation Play"/>
-	<menu_item_call label="Lokal wiedergeben" name="Animation Audition"/>
-	<menu_item_call label="Instant Message senden" name="Send Instant Message"/>
-	<menu_item_call label="Teleport anbieten..." name="Offer Teleport..."/>
-	<menu_item_call label="Konferenz-Chat starten" name="Conference Chat"/>
-	<menu_item_call label="Aktivieren" name="Activate"/>
-	<menu_item_call label="Deaktivieren" name="Deactivate"/>
-	<menu_item_call label="Von Körper abnehmen" name="Detach From Yourself"/>
-	<menu_item_call label="Zu letzter Position zurücksetzen" name="Restore to Last Position"/>
-	<menu_item_call label="Anziehen" name="Object Wear"/>
-	<menu label="Anhängen an" name="Attach To"/>
-	<menu label="An HUD hängen" name="Attach To HUD"/>
-	<menu_item_call label="Bearbeiten" name="Wearable Edit"/>
-	<menu_item_call label="Anziehen" name="Wearable Wear"/>
-	<menu_item_call label="Ausziehen" name="Take Off"/>
-	<menu_item_call label="--keine Optionen--" name="--no options--"/>
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Kaufen" name="Task Buy"/>
+	<menu_item_call label="Öffnen" name="Task Open"/>
+	<menu_item_call label="Wiedergeben/Abspielen" name="Task Play"/>
+	<menu_item_call label="Eigenschaften" name="Task Properties"/>
+	<menu_item_call label="Umbenennen" name="Task Rename"/>
+	<menu_item_call label="Löschen" name="Task Remove"/>
+	<menu_item_call label="Papierkorb ausleeren" name="Empty Trash"/>
+	<menu_item_call label="Fundstücke ausleeren" name="Empty Lost And Found"/>
+	<menu_item_call label="Neuer Ordner" name="New Folder"/>
+	<menu_item_call label="Neues Skript" name="New Script"/>
+	<menu_item_call label="Neue Notiz" name="New Note"/>
+	<menu_item_call label="Neue Geste" name="New Gesture"/>
+	<menu label="Neue Kleider" name="New Clothes">
+		<menu_item_call label="Neues Hemd" name="New Shirt"/>
+		<menu_item_call label="Neue Hose" name="New Pants"/>
+		<menu_item_call label="Neue Schuhe" name="New Shoes"/>
+		<menu_item_call label="Neue Socken" name="New Socks"/>
+		<menu_item_call label="Neue Jacke" name="New Jacket"/>
+		<menu_item_call label="Neuer Rock" name="New Skirt"/>
+		<menu_item_call label="Neue Handschuhe" name="New Gloves"/>
+		<menu_item_call label="Neues Unterhemd" name="New Undershirt"/>
+		<menu_item_call label="Neue Unterhose" name="New Underpants"/>
+	</menu>
+	<menu label="Neue Körperteile" name="New Body Parts">
+		<menu_item_call label="Neue Form/Gestalt" name="New Shape"/>
+		<menu_item_call label="Neue Haut" name="New Skin"/>
+		<menu_item_call label="Neues Haar" name="New Hair"/>
+		<menu_item_call label="Neue Augen" name="New Eyes"/>
+	</menu>
+	<menu label="Typ ändern" name="Change Type">
+		<menu_item_call label="Standard" name="Default"/>
+		<menu_item_call label="Handschuhe" name="Gloves"/>
+		<menu_item_call label="Jacke" name="Jacket"/>
+		<menu_item_call label="Hose" name="Pants"/>
+		<menu_item_call label="Form" name="Shape"/>
+		<menu_item_call label="Schuhe" name="Shoes"/>
+		<menu_item_call label="Hemd" name="Shirt"/>
+		<menu_item_call label="Rock" name="Skirt"/>
+		<menu_item_call label="Unterhose" name="Underpants"/>
+		<menu_item_call label="Unterhemd" name="Undershirt"/>
+	</menu>
+	<menu_item_call label="Teleportieren" name="Landmark Open"/>
+	<menu_item_call label="Öffnen" name="Animation Open"/>
+	<menu_item_call label="Öffnen" name="Sound Open"/>
+	<menu_item_call label="Objekt löschen" name="Purge Item"/>
+	<menu_item_call label="Objekt wiederherstellen" name="Restore Item"/>
+	<menu_item_call label="Öffnen" name="Open"/>
+	<menu_item_call label="Eigenschaften" name="Properties"/>
+	<menu_item_call label="Umbenennen" name="Rename"/>
+	<menu_item_call label="Asset-UUID kopieren" name="Copy Asset UUID"/>
+	<menu_item_call label="Kopieren" name="Copy"/>
+	<menu_item_call label="Einfügen" name="Paste"/>
+	<menu_item_call label="Löschen" name="Delete"/>
+	<menu_item_call label="Objekte abnehmen" name="Take Off Items"/>
+	<menu_item_call label="Zum Outfit hinzufügen" name="Add To Outfit"/>
+	<menu_item_call label="Outfit ersetzen" name="Replace Outfit"/>
+	<menu_item_call label="Konferenz-Chat starten" name="Conference Chat Folder"/>
+	<menu_item_call label="Wiedergeben/Abspielen" name="Sound Play"/>
+	<menu_item_call label="In Welt abspielen" name="Animation Play"/>
+	<menu_item_call label="Lokal wiedergeben" name="Animation Audition"/>
+	<menu_item_call label="Instant Message senden" name="Send Instant Message"/>
+	<menu_item_call label="Teleport anbieten..." name="Offer Teleport..."/>
+	<menu_item_call label="Konferenz-Chat starten" name="Conference Chat"/>
+	<menu_item_call label="Aktivieren" name="Activate"/>
+	<menu_item_call label="Deaktivieren" name="Deactivate"/>
+	<menu_item_call label="Von Körper abnehmen" name="Detach From Yourself"/>
+	<menu_item_call label="Anziehen" name="Object Wear"/>
+	<menu label="Anhängen an" name="Attach To"/>
+	<menu label="An HUD hängen" name="Attach To HUD"/>
+	<menu_item_call label="Bearbeiten" name="Wearable Edit"/>
+	<menu_item_call label="Anziehen" name="Wearable Wear"/>
+	<menu_item_call label="Ausziehen" name="Take Off"/>
+	<menu_item_call label="--keine Optionen--" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_landmark.xml b/indra/newview/skins/default/xui/de/menu_landmark.xml
new file mode 100644
index 00000000000..40b5b67079b
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_landmark.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+	<menu_item_call label="SLurl kopieren" name="copy"/>
+	<menu_item_call label="Löschen" name="delete"/>
+	<menu_item_call label="Auswahl erstellen" name="pick"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_mini_map.xml b/indra/newview/skins/default/xui/de/menu_mini_map.xml
index 9b7117cf42c..840e7c41b24 100644
--- a/indra/newview/skins/default/xui/de/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/de/menu_mini_map.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
-	<menu_item_call label="Zoom Nah" name="Zoom Close"/>
-	<menu_item_call label="Zoom Mittel" name="Zoom Medium"/>
-	<menu_item_call label="Zoom Weit" name="Zoom Far"/>
-	<menu_item_call label="Verfolgung abschalten" name="Stop Tracking"/>
-	<menu_item_call label="Profil..." name="Profile"/>
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="popup">
+	<menu_item_call label="Zoom Nah" name="Zoom Close"/>
+	<menu_item_call label="Zoom Mittel" name="Zoom Medium"/>
+	<menu_item_call label="Zoom Weit" name="Zoom Far"/>
+	<menu_item_call label="Verfolgung abschalten" name="Stop Tracking"/>
+	<menu_item_call label="Weltkarte" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_navbar.xml b/indra/newview/skins/default/xui/de/menu_navbar.xml
new file mode 100644
index 00000000000..677de7c116d
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_navbar.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+	<menu_item_check label="Koordinaten anzeigen" name="Show Coordinates"/>
+	<menu_item_call label="Landmarke" name="Landmark"/>
+	<menu_item_call label="Ausschneiden" name="Cut"/>
+	<menu_item_call label="Kopieren" name="Copy"/>
+	<menu_item_call label="Einfügen" name="Paste"/>
+	<menu_item_call label="Löschen" name="Delete"/>
+	<menu_item_call label="Alle auswählen" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_picks.xml b/indra/newview/skins/default/xui/de/menu_picks.xml
new file mode 100644
index 00000000000..102dd4cc5d6
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_picks.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+	<menu_item_call label="Info" name="pick_info"/>
+	<menu_item_call label="Bearbeiten" name="pick_edit"/>
+	<menu_item_call label="Teleportieren" name="pick_teleport"/>
+	<menu_item_call label="Karte" name="pick_map"/>
+	<menu_item_call label="Löschen" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_place.xml b/indra/newview/skins/default/xui/de/menu_place.xml
new file mode 100644
index 00000000000..36cb3377c14
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_place.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+	<menu_item_call label="Eine Landmarke setzen" name="landmark"/>
+	<menu_item_call label="Auswahl erstellen" name="pick"/>
+	<menu_item_call label="Pass kaufen" name="pass"/>
+	<menu_item_call label="Bearbeiten" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_slurl.xml b/indra/newview/skins/default/xui/de/menu_slurl.xml
index d9793e5906e..b379c1ca6a9 100644
--- a/indra/newview/skins/default/xui/de/menu_slurl.xml
+++ b/indra/newview/skins/default/xui/de/menu_slurl.xml
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu name="Popup">
-	<menu_item_call label="URL-Info" name="about_url" />
-	<menu_item_call label="Zu URL teleportieren" name="teleport_to_url" />
-	<menu_item_call label="Auf Karte" name="show_on_map" />
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="URL-Info" name="about_url"/>
+	<menu_item_call label="Zu URL teleportieren" name="teleport_to_url"/>
+	<menu_item_call label="Karte" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_agent.xml b/indra/newview/skins/default/xui/de/menu_url_agent.xml
new file mode 100644
index 00000000000..e9effe0bf26
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_agent.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Einwohnerprofil anzeigen" name="show_agent"/>
+	<menu_item_call label="Name in Zwischenablage kopieren" name="url_copy_label"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_group.xml b/indra/newview/skins/default/xui/de/menu_url_group.xml
new file mode 100644
index 00000000000..78051fe726e
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Gruppeninformation anzeigen" name="show_group"/>
+	<menu_item_call label="Gruppe in Zwischenablage kopieren" name="url_copy_label"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_http.xml b/indra/newview/skins/default/xui/de/menu_url_http.xml
new file mode 100644
index 00000000000..ae4aaad4803
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_http.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Webseite öffnen" name="url_open"/>
+	<menu_item_call label="Im internen Browser öffnen" name="url_open_internal"/>
+	<menu_item_call label="Im externen Browser öffnen" name="url_open_external"/>
+	<menu_item_call label="URL in Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_objectim.xml b/indra/newview/skins/default/xui/de/menu_url_objectim.xml
new file mode 100644
index 00000000000..8bb1822405c
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_objectim.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Objektinformationen anzeigen" name="show_object"/>
+	<menu_item_call label="Zu Objekt-Position teleportieren" name="teleport_to_object"/>
+	<menu_item_call label="Objektname in Zwischenablage kopieren" name="url_copy_label"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_parcel.xml b/indra/newview/skins/default/xui/de/menu_url_parcel.xml
new file mode 100644
index 00000000000..b3117c8fbe8
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_parcel.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Parzelleninformationen anzeigen" name="show_parcel"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_slurl.xml b/indra/newview/skins/default/xui/de/menu_url_slurl.xml
new file mode 100644
index 00000000000..b4d15b2c3db
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_slurl.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Ortsinformationen anzeigen" name="show_place"/>
+	<menu_item_call label="Zu Position teleportieren" name="teleport_to_location"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_teleport.xml b/indra/newview/skins/default/xui/de/menu_url_teleport.xml
new file mode 100644
index 00000000000..254807295f4
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_teleport.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="An diesen Standort teleportieren" name="teleport"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index ebe2d9b260f..94bb7582c37 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -1,2982 +1,2563 @@
-<?xml version="1.0" encoding="utf-8"?>
-<notifications>
-	<global name="skipnexttime">
-		Nicht mehr anzeigen
-	</global>
-	<global name="alwayschoose">
-		Diese Option immer auswählen
-	</global>
-	<global name="implicitclosebutton">
-		Schließen
-	</global>
-  <template name="okbutton">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-    </form>
-  </template>
-
-  <template name="okignore">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <ignore text="$ignoretext"/>
-    </form>
-  </template>
-
-  <template name="okcancelbuttons">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Cancel"
-       text="$notext"/>
-    </form>
-  </template>
-
-  <template name="okcancelignore">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Cancel"
-       text="$notext"/>
-      <ignore text="$ignoretext"/>
-    </form>
-  </template>
-
-  <template name="okhelpbuttons">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Help"
-       text="$helptext"/>
-    </form>
-  </template>
-
-  <template name="yesnocancelbuttons">
-    <form>
-      <button
-       name="Yes"
-       text="$yestext"/>
-      <button
-       name="No"
-       text="$notext"/>
-      <button
-       name="Cancel"
-       text="$canceltext"/>
-    </form>
-  </template>
-	<notification functor="GenericAcknowledge" label="Unbekannter Warnhinweis" name="MissingAlert">
-		Ihre Version von [APP_NAME] kann den gerade empfangenen Warnhinweis nicht anzeigen.
-
-Fehlerdetails: Der Warnhinweis „[_NAME]“ wurde in notifications.xml nicht gefunden.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="FloaterNotFound">
-		Floater-Fehler: Folgende Steuerelemente wurden nicht gefunden:
-
-[CONTROLS]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="TutorialNotFound">
-		Derzeit ist kein Tutorial verfügbar.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GenericAlert">
-		[MESSAGE]
-	</notification>
-	<notification name="GenericAlertYesCancel">
-		[MESSAGE]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
-	</notification>
-	<notification name="BadInstallation">
-		Beim Aktualisieren von [APP_NAME] ist ein Fehler aufgetreten. Bitte laden Sie die aktuellste Version von secondlife.com herunter.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LoginFailedNoNetwork">
-		Netzwerk Fehler: Eine Verbindung konnte nicht hergestellt werden. 
-„[DIAGNOSTIC]“
-Bitte überprüfen Sie Ihre Netzwerkverbindung.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MessageTemplateNotFound">
-		Meldungsvorlage [PATH] nicht gefunden.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="WearableSave">
-		Änderung an aktueller Kleidung/Körperteil speichern?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
-	</notification>
-	<notification name="CompileQueueSaveText">
-		Der Text für ein Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="CompileQueueSaveBytecode">
-		Eine kompiliertes Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="WriteAnimationFail">
-		Fehler beim Schreiben von Animationsdaten.  Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="UploadAuctionSnapshotFail">
-		Eine Auktions-Screenshot konnte aus folgendem Grund nicht hochgeladen werden: [REASON]
-	</notification>
-	<notification name="UnableToViewContentsMoreThanOne">
-		Es kann nur jeweils der Inhalt von einem Objekt angezeigt werden.
-Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
-	</notification>
-	<notification name="SaveClothingBodyChanges">
-		Änderung an Kleidung/Körperteilen speichern?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Alles speichern"/>
-	</notification>
-	<notification name="GrantModifyRights">
-		Die Gewährung von Änderungsrechten an andere Einwohner ermöglicht es diesen, JEDES BELIEBIGE Objekt zu ändern oder an sich zu nehmen, das Sie in der [SECOND_LIFE]-Welt besitzen. Seien Sie SEHR vorsichtig beim Erteilen dieser Erlaubnis.
-Möchten Sie [FIRST_NAME] [LAST_NAME] Änderungsrechte gewähren?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="GrantModifyRightsMultiple">
-		Die Gewährung von Änderungsrechten an andere Einwohner ermöglicht es diesen, JEDES BELIEBIGE Objekt zu ändern, das Sie in der [SECOND_LIFE]-Welt besitzen. Seien Sie SEHR vorsichtig beim Erteilen dieser Erlaubnis.
-Möchten Sie den ausgewählten Einwohnern Änderungsrechte gewähren?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="RevokeModifyRights">
-		Möchten Sie [FIRST_NAME] [LAST_NAME] die Änderungsrechte entziehen?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="RevokeModifyRightsMultiple">
-		Möchten Sie den ausgewählten Einwohnern die Änderungsrechte entziehen?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="UnableToCreateGroup">
-		Gruppe konnte nicht erstellt werden.
-[MESSAGE]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="PanelGroupApply">
-		[NEEDS_APPLY_MESSAGE]
-[WANT_APPLY_MESSAGE]
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Änderungen verwerfen" yestext="Änderungen übernehmen"/>
-	</notification>
-	<notification name="MustSpecifyGroupNoticeSubject">
-		Geben Sie einen Betreff für die Gruppenmitteilung ein.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="AddGroupOwnerWarning">
-		Sie sind im Begriff, Gruppenmitgliedern die Rolle [ROLE_NAME] zuzuweisen.
-Diese Rolle kann Mitgliedern nicht mehr entzogen werden.
-Sie müssen die Rolle selbst niederlegen.
-Möchten Sie fortfahren?
-		<usetemplate ignoretext="Beim Hinzufügen von Gruppenmitgliedern zur Eigentümerrolle" name="okcancelignore" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="AssignDangerousActionWarning">
-		Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen.
-
- *ACHTUNG*
- Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst -
- und allen anderen Mitgliedern – Rollen zuweisen, die mehr Rechte
- beinhalten als sie derzeit haben, und damit nahezu
- Eigentümerrechte erreichen. Überlegen Sie sich, wem Sie diese Fähigkeit
- verleihen.
-
-Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="AssignDangerousAbilityWarning">
-		Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen.
-
- *ACHTUNG*
- Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst -
- und allen anderen Mitgliedern – alle Fähigkeiten zuweisen und
- damit fast Eigentümerrechte erreichen.
-
-Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="ClickPublishHelpLand">
-		Auswahl von „In Suche veröffentlichen“
-Dieses Kontrollkästchen zeigt Folgendes an:
-- diese Parzelle in den Suchergebnissen
-- die öffentlichen Objekte dieser Parzelle
-- diese Parzelle in der Websuche
-	</notification>
-	<notification name="ClickSoundHelpLand">
-		Medien und Musik können nur innerhalb der Parzelle abgespielt werden. Sound- und Voice-Chat-Optionen können auf die Parzelle beschränkt werden oder von Einwohnern außerhalb der Parzelle, entsprechend ihrer Alterseinstufung, gehört werden. Möchten Sie unsere Knowledgebase besuchen, um mehr darüber zu erfahren, wie diese Optionen eingestellt werden können?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Medien_auf_Parzellen_(KB)
-		</url>
-		<usetemplate name="okcancelbuttons" notext="Schließen" yestext="Zur Knowledgbase"/>
-	</notification>
-	<notification name="ClickSearchHelpAll">
-		Die Suchergebnisse wurde aufgrund der entsprechenden Registerkarte, Ihrer Alterseinstufung, der gewählten Kategorie und anderen Faktoren geordnet. Bitte besuchen Sie unsere Knowledgebase, um weitere Informationen zu erhalten.
-		<url name="url">
-			http://wiki.secondlife.com/wiki/FAQ_zur_Suchfunktion_(KB)
-		</url>
-		<usetemplate name="okcancelbuttons" notext="Schließen" yestext="Zur Knowledgbase"/>
-	</notification>
-	<notification name="ClickPublishHelpLandDisabled">
-		Diese Parzelle kann nicht in der Suche angezeigt werden, da sie sich in einer Region befindet, die das verbietet.
-	</notification>
-	<notification name="ClickPublishHelpAvatar">
-		Auswahl von „In Suche anzeigen“ zeigt Folgendes an:
-- Ihr Profil in den Suchergebnissen
-- einen Link auf Ihr Profil in den öffentlichen Gruppenseiten
-	</notification>
-	<notification name="ClickPartnerHelpAvatar">
-		Auf der [SECOND_LIFE] Website können Sie anderen Einwohnern eine Partnerschaft vorschlagen und bestehende Partnerschaften lösen.
-
-Die [SECOND_LIFE] Website für weitere Informationen über Partnerschaften öffnen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Gehe zu Seite"/>
-	</notification>
-	<notification name="ClickUploadHelpPermissions">
-		Ihre Standardberechtigung funktionieren in älteren Regionen möglicherweise nicht.
-	</notification>
-	<notification name="ClickWebProfileHelpAvatar">
-		Wenn dieser Einwohner einen Webprofil-URL angegeben hat, können Sie:
- * Auf „Laden“ klicken und die Seite in dieser Web-Registerkarte anzeigen.
- * Auf Laden &gt; „In externem Browser“ klicken und die Seite im Standard-Browser anzeigen.
- * Auf Laden &gt; „Start-URL“ klicken und zum Webprofil des Bewohners zurückkehren.
-
-In Ihrem eigenen Profil können Sie jeden beliebigen URL als Ihr Webprofil eingeben und mit OK übernehmen.
-Wenn sich andere Einwohner Ihr Profil ansehen, können sie diesen URL besuchen.
-	</notification>
-	<notification name="JoinGroupCanAfford">
-		Der Beitritt zu dieser Gruppe kostet [COST] L$.
-Fortfahren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Beitreten"/>
-	</notification>
-	<notification name="JoinGroupCannotAfford">
-		Der Beitritt zu dieser Gruppe kostet [COST] L$.
-Sie haben nicht genug L$, um dieser Gruppe beizutreten.
-	</notification>
-	<notification name="LandBuyPass">
-		Sie können dieses Land („[PARCEL_NAME]“) für [COST] L$
-[TIME] Stunden lang betreten.  Pass kaufen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="SalePriceRestriction">
-		Der Verkaufspreis muss beim allgemeinen Verkauf über 0 L$ liegen.
-Wählen Sie eine bestimmte Person aus, wenn Sie für 0 L$ verkaufen.
-	</notification>
-	<notification name="ConfirmLandSaleChange">
-		Die ausgewählten [LAND_SIZE] qm Land werden zum Verkauf freigegeben.
-Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf an [NAME] autorisiert.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmLandSaleToAnyoneChange">
-		ACHTUNG: Wenn Sie auf „An jeden verkaufen“ klicken, kann jeder in [SECOND_LIFE] Ihr Land kaufen, auch Einwohner in anderen Regionen.
-
-Die ausgewählten [LAND_SIZE] qm Land werden zum Verkauf freigegeben.
-Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf an [NAME] autorisiert.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsDeededToGroup">
-		Möchten Sie alle Ihre Objekte auf dieser Parzelle, die der Gruppe „[NAME]“ gehören, zurück in das jeweilige Inventar ihrer vorherigen Eigentümer transferieren?
-
-*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
-
-Objekte: [N]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsOwnedByUser">
-		Möchten Sie alle Objekte auf dieser Parzelle, die dem Einwohner „[NAME]“ gehören, in das jeweilige Inventar ihrer Eigentümer transferieren?
-
-Objekte: [N]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsOwnedBySelf">
-		Möchten Sie alle Objekte auf dieser Parzelle, die Ihnen gehören, zurück in Ihr Inventar transferieren?
-
-Objekte: [N]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedBySelf">
-		Möchten Sie alle Objekte auf dieser Parzelle, die NICHT Ihnen gehören, in das Inventar ihrer Eigentümer transferieren?
-Transferierbare Objekte, die an eine Gruppe übertragen wurden, werden ihren vorherigen Eigentümern zurückgegeben.
-
-*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
-
-Objekte: [N]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedByUser">
-		Möchten Sie alle Objekte auf dieser Parzelle, die NICHT [NAME] gehören, in das Inventar ihrer Eigentümer transferieren?
-Transferierbare Objekte, die an eine Gruppe übertragen wurden, werden ihren vorherigen Eigentümern zurückgegeben.
-
-*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
-
-Objekte: [N]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnAllTopObjects">
-		Möchten Sie alle aufgeführten Objekte ihren Eigentümern zurückgeben?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="DisableAllTopObjects">
-		Möchten Sie alle Objekte in dieser Region deaktivieren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedByGroup">
-		Objekte auf dieser Parzelle, die von der Gruppe [NAME] nicht gemeinsam genutzt werden, an ihre Eigentümer zurückgeben?
-
-Objekte: [N]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="UnableToDisableOutsideScripts">
-		Skriptdeaktivierung nicht möglich.
-Für die gesamte Region ist Schaden aktiviert.
-Damit Waffen funktionieren, müssen Skripts erlaubt sein.
-	</notification>
-	<notification name="MustBeInParcel">
-		Sie müssen auf einer Landparzelle stehen, um ihren Landepunkt festzulegen.
-	</notification>
-	<notification name="PromptRecipientEmail">
-		Bitte geben Sie für den/die Empfänger eine gültige Email-Adresse ein.
-	</notification>
-	<notification name="PromptSelfEmail">
-		Geben Sie Ihre E-Mail-Adresse ein.
-	</notification>
-	<notification name="PromptMissingSubjMsg">
-		Foto mit Standardbetreff bzw. -nachricht als E-Mail versenden?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ErrorProcessingSnapshot">
-		Fehler beim Verarbeiten der Fotodaten
-	</notification>
-	<notification name="ErrorEncodingSnapshot">
-		Fehler beim Erstellen des Fotos!
-	</notification>
-	<notification name="ErrorUploadingPostcard">
-		Ein Foto konnte aus folgendem Grund nicht gesendet werden: [REASON]
-	</notification>
-	<notification name="ErrorUploadingReportScreenshot">
-		Ein Report-Screenshot konnte aus folgendem Grund nicht hochgeladen werden: [REASON]
-	</notification>
-	<notification name="MustAgreeToLogIn">
-		Bevor Sie sich in [SECOND_LIFE] anmelden können, müssen Sie den Nutzungsbedingungen zustimmen.
-	</notification>
-	<notification name="CouldNotPutOnOutfit">
-		Outfit konnte nicht angezogen werden.
-Der Outfit-Ordner enthält keine Kleidung, Körperteile oder Anhänge.
-	</notification>
-	<notification name="CannotWearTrash">
-		Kleider oder Körperteile im Papierkorb können nicht getragen werden
-	</notification>
-	<notification name="CannotWearInfoNotComplete">
-		Sie können das Objekt nicht anziehen, weil es noch nicht geladen wurde. Warten Sie kurz und versuchen Sie es dann noch einmal.
-	</notification>
-	<notification name="MustHaveAccountToLogIn">
-		Hoppla! Da fehlt noch etwas.
-Geben Sie bitte den Vor- und den Nachnamen Ihres Avatars ein.
-
-Sie benötigen ein Benutzerkonto, um [SECOND_LIFE] betreten zu können. Möchten Sie jetzt ein Benutzerkonto anlegen?
-		<usetemplate name="okcancelbuttons" notext="Erneut versuchen" yestext="Neues Benutzerkonto anlegen"/>
-	</notification>
-	<notification name="AddClassified">
-		Anzeigen erscheinen für eine Woche unter „Anzeigen“ im Suchverzeichnis. Füllen Sie Ihre Anzeige aus und klicken Sie auf „Veröffentlichen...“, um sie zum Verzeichnis hinzuzufügen. Sie werden gebeten, einen Preis zu bezahlen, wenn Sie auf „Veröffentlichen“ klicken. Wenn Sie mehr bezahlen oder ein Benutzer nach Ihren Suchbegriffen sucht, erscheint Ihre Anzeige weiter oben in der Liste.
-		<usetemplate ignoretext="Beim Hinzufügen einer neuen Anzeige" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="DeleteClassified">
-		Anzeige „[NAME]“ löschen?
-Gebühren werden nicht rückerstattet.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ClassifiedSave">
-		Änderung an Anzeige [NAME] speichern?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
-	</notification>
-	<notification name="DeleteAvatarPick">
-		Auswahl [PICK] löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="PromptGoToEventsPage">
-		Zur [SECOND_LIFE] Events-Webseite?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="SelectProposalToView">
-		Wählen Sie ein Angebot zur Ansicht.
-	</notification>
-	<notification name="SelectHistoryItemToView">
-		Wählen Sie ein Element zur Ansicht.
-	</notification>
-	<notification name="ResetShowNextTimeDialogs">
-		Möchten Sie alle Popups wieder aktivieren, die Sie zuvor auf „Nicht mehr anzeigen“ gesetzt haben?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="SkipShowNextTimeDialogs">
-		Möchten Sie alle Popups, die übersprungen werden können, deaktivieren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="CacheWillClear">
-		Der Cache wird nach einem Neustart von [APP_NAME] geleert.
-	</notification>
-	<notification name="CacheWillBeMoved">
-		Der Cache wird nach einem Neustart von [APP_NAME] verschoben.
-Hinweis: Der Cache wird dabei gelöscht/geleert.
-	</notification>
-	<notification name="ChangeConnectionPort">
-		Die Port-Einstellungen werden nach einem Neustart von [APP_NAME] wirksam.
-	</notification>
-	<notification name="ChangeSkin">
-		Die neue Benutzeroberfläche wird nach einem Neustart von [APP_NAME] angewendet.
-	</notification>
-	<notification name="GoToAuctionPage">
-		Zur [SECOND_LIFE]-Webseite, um Auktionen anzuzeigen oder ein Gebot abzugeben?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="SaveChanges">
-		Änderungen speichern?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
-	</notification>
-	<notification name="GestureSaveFailedTooManySteps">
-		Speichern der Geste fehlgeschlagen.
-Die Geste besteht aus zu vielen Schritten.
-Löschen Sie einige Schritte und versuchen Sie es erneut.
-	</notification>
-	<notification name="GestureSaveFailedTryAgain">
-		Speichern der Geste fehlgeschlagen.  Warten Sie kurz und versuchen Sie es dann noch einmal.
-	</notification>
-	<notification name="GestureSaveFailedObjectNotFound">
-		Geste konnte nicht gespeichert werden, da das Objekt oder das zugehörige Objektinventar nicht gefunden wurden.
-Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
-	</notification>
-	<notification name="GestureSaveFailedReason">
-		Eine Geste konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie die Geste bitte später.
-	</notification>
-	<notification name="SaveNotecardFailObjectNotFound">
-		Notizkarte konnte nicht gespeichert werden, da das Objekt oder das zugehörige Objektinventar nicht gefunden wurden.
-Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
-	</notification>
-	<notification name="SaveNotecardFailReason">
-		Eine Notizkarte konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie die Notizkarte bitte später.
-	</notification>
-	<notification name="ScriptCannotUndo">
-		Es konnten nicht alle Änderungen in Ihrer Skriptversion rückgängig gemacht werden.
-Möchten Sie die letzte gespeicherte Version vom Server laden?
-(**Warnung** Dieser Vorgang kann nicht rückgängig gemacht werden.)
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="SaveScriptFailReason">
-		Ein Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie das Skript bitte später.
-	</notification>
-	<notification name="SaveScriptFailObjectNotFound">
-		Skript konnte nicht gespeichert werden, weil das zugehörige Objekt nicht gefunden wurde.
-Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
-	</notification>
-	<notification name="SaveBytecodeFailReason">
-		Ein kompiliertes Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie das Skript bitte später.
-	</notification>
-	<notification name="CouldNotStartStopScript">
-		Skript konnte nicht gestartet oder beendet werden, weil das zugehörige Objekt nicht gefunden wurde.
-Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
-	</notification>
-	<notification name="CannotDownloadFile">
-		Dateidownload nicht möglich
-	</notification>
-	<notification name="CannotWriteFile">
-		Datei [[FILE]] kann nicht geschrieben werden
-	</notification>
-	<notification name="UnsupportedHardware">
-		Achtung: Ihr System erfüllt nicht die Mindestanforderungen von [APP_NAME]. Dies kann eine schlechte Darstellungsleistung in [APP_NAME] zur Folge haben. Für nicht unterstützte Systemkonfigurationen bieten wir keinen technischen Support.
-
-MINSPECS
-Die Seite [_URL] für weitere Informationen öffnen?
-		<url name="url" option="0">
-			http://secondlife.com/support/sysreqs.php?lang=de
-		</url>
-		<usetemplate ignoretext="Bei Entdeckung nicht unterstützter Hardware" name="okcancelignore" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="UnknownGPU">
-		Ihr System verwendet eine uns zurzeit unbekannte Grafikkarte.
-Dies ist häufig der Fall bei neuer Hardware, die wir noch nicht testen konnten.
-[APP_NAME] funktioniert aller Voraussicht nach normal, möglicherweise müssen Sie aber die Grafikeinstellungen anpassen.
-(Bearbeiten &gt; Einstellungen &gt; Grafik).
-		<form name="form">
-			<ignore name="ignore" text="Bei Entdeckung einer unbekannten Grafikkarte"/>
-		</form>
-	</notification>
-	<notification name="DisplaySettingsNoShaders">
-		[APP_NAME] ist bei der Initialisierung der Grafiktreiber abgestürzt.
-Die Grafikqualität wird auf eine niedrige Stufe zurückgesetzt, um einige typische Treiberfehler zu vermeiden.
-Einige Grafikfunktionen werden ausgeschaltet.
-Wir empfehlen die Aktualisierung Ihrer Grafikkartentreiber.
-Sie können die Grafikqualität unter „Einstellungen“ &gt; „Grafik“ wieder erhöhen.
-	</notification>
-	<notification name="RegionNoTerraforming">
-		Die Region [REGION] erlaubt kein Terraforming.
-	</notification>
-	<notification name="CannotCopyWarning">
-		Sie sind nicht berechtigt, dieses Objekt zu kopieren und verlieren es aus Ihrem Inventar, wenn Sie es weggeben. Möchten Sie dieses Objekt anbieten?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="CannotGiveItem">
-		Inventarobjekt kann nicht übergeben werden.
-	</notification>
-	<notification name="TransactionCancelled">
-		Transaktion abgebrochen.
-	</notification>
-	<notification name="TooManyItems">
-		Es können maximal 42 Objekte auf einmal in das Inventar transferiert werden.
-	</notification>
-	<notification name="NoItems">
-		Sie sind nicht berechtigt, die ausgewählten Objekte zu kopieren.
-	</notification>
-	<notification name="CannotCopyCountItems">
-		Sie sind nicht berechtigt, [COUNT] der ausgewählten Objekte zu kopieren. Diese Objekte werden aus Ihrem Inventar gelöscht.
-Möchten Sie diese Objekte weggeben?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="CannotGiveCategory">
-		Sie sind nicht berechtigt, den ausgewählten Ordner zu kopieren.
-	</notification>
-	<notification name="FreezeAvatar">
-		Diesen Avatar einfrieren?
-Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Auftauen" yestext="Einfrieren"/>
-	</notification>
-	<notification name="FreezeAvatarFullname">
-		[AVATAR_NAME] einfrieren?
-Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Auftauen" yestext="Einfrieren"/>
-	</notification>
-	<notification name="EjectAvatarFullname">
-		[AVATAR_NAME] von Ihrem Land werfen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Ausschließen und Verbannen" yestext="Ausschließen"/>
-	</notification>
-	<notification name="EjectAvatarNoBan">
-		Diesen Avatar aus Ihrem Land werfen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hinauswerfen"/>
-	</notification>
-	<notification name="EjectAvatarFullnameNoBan">
-		[AVATAR_NAME] aus Ihrem Land werfen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hinauswerfen"/>
-	</notification>
-	<notification name="AcquireErrorTooManyObjects">
-		FEHLER: Zu viele Objekte ausgewählt.
-	</notification>
-	<notification name="AcquireErrorObjectSpan">
-		FEHLER: Die Objekte überspannen mehrere Regionen.
-Verschieben Sie alle betreffenden Objekte in dieselbe Region.
-	</notification>
-	<notification name="PromptGoToCurrencyPage">
-		[EXTRA]
-
-[_URL] für Informationen zum Deviseneinkauf öffnen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="UnableToLinkObjects">
-		Verknüpfung dieser [COUNT] Objekte nicht möglich.
-Sie können maximal [MAX] Objekte verknüpfen.
-	</notification>
-	<notification name="CannotLinkIncompleteSet">
-		Sie können nur vollständige Objektsätze verknüpfen und Sie müssen mehr als ein Objekt auswählen.
-	</notification>
-	<notification name="CannotLinkModify">
-		Verknüpfung nicht möglich, da Sie nicht alle Objekte bearbeiten dürfen.
-
-Stellen Sie sicher, dass kein Objekt gesperrt ist und alle Objekte Ihnen gehören.
-	</notification>
-	<notification name="CannotLinkDifferentOwners">
-		Verknüpfung nicht möglich, da nicht alle Objekte denselben Eigentümer haben.
-
-Stellen Sie sicher, dass alle ausgewählten Objekte Ihnen gehören.
-	</notification>
-	<notification name="NoFileExtension">
-		Kein Dateityp für Datei: „[FILE]“
-
-Vergewissern Sie sich, dass die Datei den richtigen Dateityp hat.
-	</notification>
-	<notification name="InvalidFileExtension">
-		Ungültige Datei-Endung [EXTENSION]
-Erwartet wurde [VALIDS]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CannotUploadSoundFile">
-		Sounddatei konnte nicht hochgeladen werden:
-[FILE]
-	</notification>
-	<notification name="SoundFileNotRIFF">
-		Die Datei ist anscheinend keine RIFF WAVE-Datei:
-[FILE]
-	</notification>
-	<notification name="SoundFileNotPCM">
-		Die Datei ist anscheinend keine PCM WAVE-Audiodatei:
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidChannelCount">
-		Die Datei hat eine ungültige Anzahl Tonkanäle (muss Mono oder Stereo sein):
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidSampleRate">
-		Die Sample-Rate dieser Datei wird nicht unterstützt (muss 44,1 K sein):
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidWordSize">
-		Die Word-Größe dieser Datei wird nicht unterstützt (muss 8 oder 16 Bit sein):
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidHeader">
-		„Daten“-Chunk in WAV-Header nicht gefunden:
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidTooLong">
-		Audiodatei ist zu lang (max. 10 Sekunden):
-[FILE]
-	</notification>
-	<notification name="ProblemWithFile">
-		Problem mit Datei [FILE]:
-
-[ERROR]
-	</notification>
-	<notification name="CannotOpenTemporarySoundFile">
-		Temporäre komprimierte Sounddatei konnte nicht geöffnet werden: [FILE]
-	</notification>
-	<notification name="UnknownVorbisEncodeFailure">
-		Unbekannter Vorbis-Kodierungsfehler in: [FILE]
-	</notification>
-	<notification name="CannotEncodeFile">
-		Datei konnte nicht kodiert werden: [FILE]
-	</notification>
-	<notification name="CorruptResourceFile">
-		Ressourcendatei beschädigt: [FILE]
-	</notification>
-	<notification name="UnknownResourceFileVersion">
-		Unbekannte Linden-Ressourcenversion in Datei: [FILE]
-	</notification>
-	<notification name="UnableToCreateOutputFile">
-		Ausgabedatei konnte nicht erstellt werden: [FILE]
-	</notification>
-	<notification name="DoNotSupportBulkAnimationUpload">
-		Der Mehrfach-Upload von Animationsdateien wird zurzeit nicht unterstützt.
-	</notification>
-	<notification name="CannotUploadReason">
-		Datei [FILE] kann aus folgendem Grund nicht hochgeladen werden: [REASON]
-Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="CannotCreateLandmarkNotOwner">
-		Sie können hier keine Landmarke erstellen, da der Landeigentümer dies verboten hat.
-	</notification>
-	<notification name="CannotRecompileSelectObjectsNoScripts">
-		„Rekompilieren“ nicht möglich.
-Objekt mit Skript wählen.
-	</notification>
-	<notification name="CannotRecompileSelectObjectsNoPermission">
-		„Rekompilieren“ nicht möglich.
-
-Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
-	</notification>
-	<notification name="CannotResetSelectObjectsNoScripts">
-		„Zurücksetzen“ nicht möglich.
-
-Wählen Sie Objekte mit Skripts.
-	</notification>
-	<notification name="CannotResetSelectObjectsNoPermission">
-		„Zurücksetzen“ nicht möglich.
-
-Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
-	</notification>
-	<notification name="CannotSetRunningSelectObjectsNoScripts">
-		„Ausführen“ von Skripts nicht möglich.
-
-Wählen Sie Objekte mit Skripts.
-	</notification>
-	<notification name="CannotSetRunningNotSelectObjectsNoScripts">
-		„Deaktivieren“ von Skripts nicht möglich.
-
-Wählen Sie Objekte mit Skripts.
-	</notification>
-	<notification name="NoFrontmostFloater">
-		Kein vorderster Floater zum Speichern.
-	</notification>
-	<notification name="SeachFilteredOnShortWords">
-		Ihre Suchanfrage wurde geändert.
-Zu kurze Begriffe wurden entfernt.
-
-Ihre Suchanfrage: [FINALQUERY]
-	</notification>
-	<notification name="SeachFilteredOnShortWordsEmpty">
-		Ihre Suchbegriffe sind zu kurz.
-Es wurde keine Suche durchgeführt.
-	</notification>
-	<notification name="CouldNotTeleportReason">
-		Teleport fehlgeschlagen.
-[REASON]
-	</notification>
-	<notification name="invalid_tport">
-		Bei der Bearbeitung Ihrer Teleport-Anfrage ist ein Problem aufgetreten. Sie müssen sich zum Teleportieren eventuell neu anmelden. Wenn Sie diese Nachricht weiterhin erhalten, konsultieren Sie bitte die Tech-Support-FAQ unter:
-www.secondlife.com/support
-	</notification>
-	<notification name="invalid_region_handoff">
-		Bei der Bearbeitung Ihres Regionswechsels ist ein Problem aufgetreten. Sie müssen sich zum Wechsel der Region eventuell neu anmelden. Wenn Sie diese Nachricht weiterhin erhalten, konsultieren Sie bitte die Tech-Support-FAQ unter:
-www.secondlife.com/support
-	</notification>
-	<notification name="blocked_tport">
-		Teleportieren ist zurzeit leider nicht möglich. Versuchen Sie es später noch einmal.
-Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab und wieder an.
-	</notification>
-	<notification name="nolandmark_tport">
-		Das System konnte das Landmarken-Ziel nicht finden.
-	</notification>
-	<notification name="timeout_tport">
-		Das System konnte keine Teleport-Verbindung herstellen.
-Versuchen Sie es später noch einmal.
-	</notification>
-	<notification name="noaccess_tport">
-		Sie haben leider keinen Zugang zu diesem Teleport-Ziel.
-	</notification>
-	<notification name="missing_attach_tport">
-		Ihre Anhänge sind noch nicht eingetroffen. Warten Sie kurz oder melden Sie sich ab und wieder an, bevor Sie einen neuen Teleport-Versuch unternehmen.
-	</notification>
-	<notification name="too_many_uploads_tport">
-		Die Asset-Warteschlange in dieser Region ist zurzeit überlastet.
-Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in einigen Minuten erneut oder besuchen Sie eine weniger überfüllte Region.
-	</notification>
-	<notification name="expired_tport">
-		Das System konnte Ihre Teleport-Anfrage nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
-	</notification>
-	<notification name="expired_region_handoff">
-		Das System konnte Ihre Anfrage zum Regionswechsel nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
-	</notification>
-	<notification name="no_host">
-		Teleport-Ziel wurde nicht gefunden. Das Ziel ist entweder im Moment nicht verfügbar oder existiert nicht mehr. Versuchen Sie es in einigen Minuten erneut.
-	</notification>
-	<notification name="no_inventory_host">
-		Das Inventarsystem ist zurzeit nicht verfügbar.
-	</notification>
-	<notification name="CannotSetLandOwnerNothingSelected">
-		Landeigentümer kann nicht festgelegt werden:
-Keine Parzelle ausgewählt.
-	</notification>
-	<notification name="CannotSetLandOwnerMultipleRegions">
-		Eine erzwungene Landübertragung ist nicht möglich, da die Auswahl mehrere Regionen umfasst. Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut.
-	</notification>
-	<notification name="ForceOwnerAuctionWarning">
-		Diese Parzelle steht zur Auktion. Eine zwangsweise Eigentumsübertragung beendet die Auktion und verärgert womöglich Einwohner, die bereits ein Gebot abgegeben haben. Eigentumsübertragung erzwingen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="CannotContentifyNothingSelected">
-		Inhaltsidentifizierung nicht möglich:
-Keine Parzelle ausgewählt.
-	</notification>
-	<notification name="CannotContentifyNoRegion">
-		Inhaltsidentifizierung nicht möglich:
-Keine Region ausgewählt.
-	</notification>
-	<notification name="CannotReleaseLandNothingSelected">
-		Land kann nicht aufgegeben werden:
-Keine Parzelle ausgewählt.
-	</notification>
-	<notification name="CannotReleaseLandNoRegion">
-		Land kann nicht aufgegeben werden:
-Region nicht gefunden.
-	</notification>
-	<notification name="CannotBuyLandNothingSelected">
-		Land kann nicht gekauft werden:
-Keine Parzelle ausgewählt.
-	</notification>
-	<notification name="CannotBuyLandNoRegion">
-		Land kann nicht gekauft werden:
-Kann die Region nicht finden, in der sich dieses Land befindet.
-	</notification>
-	<notification name="CannotCloseFloaterBuyLand">
-		Das Fenster „Land kaufen“ kann erst geschlossen werden, nachdem [APP_NAME] den Transaktionspreis geschätzt hat.
-	</notification>
-	<notification name="CannotDeedLandNothingSelected">
-		Land kann nicht übertragen werden:
-Keine Parzelle ausgewählt.
-	</notification>
-	<notification name="CannotDeedLandNoGroup">
-		Land kann nicht übertragen werden:
-Keine Gruppe ausgewählt.
-	</notification>
-	<notification name="CannotDeedLandNoRegion">
-		Land kann nicht übertragen werden:
-Kann die Region nicht finden, in der sich dieses Land befindet.
-	</notification>
-	<notification name="CannotDeedLandMultipleSelected">
-		Land kann nicht übertragen werden:
-Mehrere Parzellen ausgewählt.
-
-Wählen Sie eine einzelne Parzelle.
-	</notification>
-	<notification name="ParcelCanPlayMedia">
-		Dieser Ort kann Streaming-Medien abspielen.
-Streaming-Medien erfordern eine schnelle Internet-Verbindung.
-
-Streaming-Medien abspielen, wenn verfügbar?
-(Sie können diese Option später unter „Einstellungen“ &gt; „Audio &amp; Video“ ändern.)
-		<usetemplate name="okcancelbuttons" notext="Deaktivieren" yestext="Medien wiedergeben"/>
-	</notification>
-	<notification name="CannotDeedLandWaitingForServer">
-		Land kann nicht übertragen werden:
-Warte auf Server für Eigentümerinformationen.
-
-Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="CannotDeedLandNoTransfer">
-		Land kann nicht übertragen werden:
-Die Region [REGION] erlaubt keine Landübertragung.
-	</notification>
-	<notification name="CannotReleaseLandWatingForServer">
-		Land kann nicht aufgegeben werden:
-Server muss Parzelleninformation aktualisieren.
-
-Versuchen Sie es in einigen Sekunden erneut.
-	</notification>
-	<notification name="CannotReleaseLandSelected">
-		Land kann nicht aufgegeben werden:
-Die ausgewählten Parzellen gehören Ihnen nicht.
-
-Wählen Sie eine einzelne Parzelle.
-	</notification>
-	<notification name="CannotReleaseLandDontOwn">
-		Land kann nicht aufgegeben werden:
-Ihnen fehlt die Berechtigung zur Freigabe dieser Parzelle.
-Parzellen, die Ihnen gehören, werden grün dargestellt.
-	</notification>
-	<notification name="CannotReleaseLandRegionNotFound">
-		Land kann nicht aufgegeben werden:
-Kann die Region nicht finden, in der sich dieses Land befindet.
-	</notification>
-	<notification name="CannotReleaseLandNoTransfer">
-		Land kann nicht aufgegeben werden:
-Die Region [REGION] erlaubt keine Landübertragung.
-	</notification>
-	<notification name="CannotReleaseLandPartialSelection">
-		Land kann nicht aufgegeben werden:
-Zum Freigeben müssen Sie eine ganze Parzelle auswählen.
-
-Wählen Sie eine ganze Parzelle oder teilen Sie Ihre Parzelle.
-	</notification>
-	<notification name="ReleaseLandWarning">
-		Sie sind im Begriff, [AREA] qm Land aufzugeben.
-Wenn Sie diese Parzelle aufgeben, wird sie ohne L$-Erstattung von Ihrem Landbesitz entfernt.
-
-Dieses Land aufgeben?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="CannotDivideLandNothingSelected">
-		Land kann nicht aufgeteilt werden:
-
-Keine Parzellen ausgewählt.
-	</notification>
-	<notification name="CannotDivideLandPartialSelection">
-		Land kann nicht aufgeteilt werden:
-
-Sie haben eine ganze Parzelle ausgewählt.
-Wählen Sie einen Parzellenabschnitt aus.
-	</notification>
-	<notification name="LandDivideWarning">
-		Wenn Sie dieses Land teilen, wird diese Parzelle in zwei geteilt, jede mit ihren eigenen Einstellungen. Einige dieser Einstellungen werden aufgrund dieses Vorgangs zurückgesetzt.
-
-Land teilen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="CannotDivideLandNoRegion">
-		Land kann nicht aufgeteilt werden:
-Kann die Region nicht finden, in der sich dieses Land befindet.
-	</notification>
-	<notification name="CannotJoinLandNoRegion">
-		Land kann nicht zusammengelegt werden:
-Kann die Region nicht finden, in der sich dieses Land befindet.
-	</notification>
-	<notification name="CannotJoinLandNothingSelected">
-		Land kann nicht zusammengelegt werden:
-Keine Parzellen ausgewählt.
-	</notification>
-	<notification name="CannotJoinLandEntireParcelSelected">
-		Land kann nicht zusammengelegt werden:
-Sie haben nur eine Parzelle ausgewählt.
-
-Wählen Sie Land auf beiden Parzellen aus.
-	</notification>
-	<notification name="CannotJoinLandSelection">
-		Land kann nicht zusammengelegt werden:
-Sie müssen mehrere Parzellen auswählen.
-
-Wählen Sie Land auf beiden Parzellen aus.
-	</notification>
-	<notification name="JoinLandWarning">
-		Beim Zusammenlegen entsteht aus den vom Auswahlrechteck
-erfassten Parzellen eine große Parzelle.
-Sie müssen der neuen Parzelle einen Namen geben und ihre Optionen festlegen.
-
-Land zusammenlegen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ShowOwnersHelp">
-		Eigentümer anzeigen:
-Parzellen farblich kennzeichnen, um Eigentumsart anzuzeigen.
-
-Grün = Ihr Land
-Blau = Das Land Ihrer Gruppe
-Rot = Im Eigentum anderer
-Geld = Zum Verkauf
-Lila = Zur Auktion
-Grau = Öffentlich
-	</notification>
-	<notification name="ConfirmNotecardSave">
-		Um das Objekt kopieren oder anzeigen zu können, müssen Sie zuerst diese Notizkarte speichern. Notizkarte speichern?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmItemCopy">
-		Dieses Objekt in Ihr Inventar kopieren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Kopieren"/>
-	</notification>
-	<notification name="ResolutionSwitchFail">
-		Auflösung konnte nicht auf [RESX] x [RESY] gesetzt werden
-	</notification>
-	<notification name="ErrorUndefinedGrasses">
-		Fehler: Nicht definierte Gräser: [SPECIES]
-	</notification>
-	<notification name="ErrorUndefinedTrees">
-		Fehler: Nicht definierte Bäume: [SPECIES]
-	</notification>
-	<notification name="CannotSaveWearableOutOfSpace">
-		„[NAME]“ konnte nicht in Kleidungsdatei gespeichert werden.  Geben Sie Speicherplatz auf dem Computer frei und speichern Sie das Kleidungsstück erneut.
-	</notification>
-	<notification name="CannotSaveToAssetStore">
-		[NAME] kann nicht in Zentral-Asset-Speicher geladen werden.
-Dies ist ein temporärer Fehler. Bitte passen Sie das Kleidungsstück in einigen Minuten noch einmal an und speichern Sie es erneut.
-	</notification>
-	<notification name="YouHaveBeenLoggedOut">
-		Sie wurden von [SECOND_LIFE] abgemeldet:
-            [MESSAGE]
-Klicken Sie auf „IM &amp; Chat anzeigen“, um vorhandene Nachrichten und Chat weiterhin anzuzeigen. Klicken Sie andernfalls auf „Beenden“, um [APP_NAME] sofort zu beenden.
-		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="IM &amp; Chat anzeigen"/>
-	</notification>
-	<notification name="OnlyOfficerCanBuyLand">
-		Landkauf für Gruppe nicht möglich:
-Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
-	</notification>
-	<notification label="Freund hinzufügen" name="AddFriend">
-		Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
-
-[NAME] Freundschaft anbieten?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification label="Freund hinzufügen" name="AddFriendWithMessage">
-		Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
-
-[NAME] Freundschaft anbieten?
-		<form name="form">
-			<input name="message">
-				Wollen wir Freunde sein?
-			</input>
-			<button name="Offer" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="RemoveFromFriends">
-		Möchten Sie [FIRST_NAME] [LAST_NAME] aus Ihrer Freundesliste entfernen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="RemoveMultipleFromFriends">
-		Möchten Sie mehrere Freunde aus Ihrer Freundesliste entfernen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllScriptedPublicObjectsByUser">
-		Möchten Sie alle geskripteten Objekte von
-** [AVATAR_NAME] **
-auf allen anderen Ländern in diesem Sim löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllScriptedObjectsByUser">
-		Möchten Sie ALLE geskripteten Objekte von
-** [AVATAR_NAME] **
-auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllObjectsByUser">
-		Möchten Sie ALLE Objekte (einschließlich geskriptete) von
-** [AVATAR_NAME] **
-auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BlankClassifiedName">
-		Geben Sie einen Namen für die Anzeige ein.
-	</notification>
-	<notification name="MinClassifiedPrice">
-		Der Mindestbetrag für die Listung ist [MIN_PRICE] L$.
-
-Geben sie einen höheren Betrag ein.
-	</notification>
-	<notification name="ConfirmObjectDeleteLock">
-		Mindestens ein ausgewähltes Objekt ist gesperrt.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoCopy">
-		Mindestens ein ausgewähltes Objekt kann nicht kopiert werden.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoOwn">
-		Mindestens eines der ausgewählten Objekt gehört nicht Ihnen.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoCopy">
-		Mindestens ein Objekt ist gesperrt.
-Mindestens ein Objekt kann nicht kopiert werden.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoOwn">
-		Mindestens ein Objekt ist gesperrt.
-Mindestens ein Objekt gehört nicht Ihnen.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoCopyNoOwn">
-		Mindestens ein Objekt kann nicht kopiert werden.
-Mindestens ein Objekt gehört nicht Ihnen.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
-		Mindestens ein Objekt ist gesperrt.
-Mindestens ein Objekt kann nicht kopiert werden.
-Mindestens ein Objekt gehört nicht Ihnen.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeLock">
-		Mindestens ein Objekt ist gesperrt.
-
-Möchten Sie diese Objekte nehmen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeNoOwn">
-		Nicht alle Objekte, die Sie aufgenommen haben, gehören Ihnen.
-Wenn Sie fortfahren, werden die Rechte für den nächsten Eigentümer angewandt und Sie können die Objekte möglicherweise nicht bearbeiten oder kopieren.
-
-Möchten Sie diese Objekte nehmen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeLockNoOwn">
-		Mindestens ein Objekt ist gesperrt.
-Nicht alle Objekte, die Sie aufgenommen haben, gehören Ihnen.
-Wenn Sie fortfahren, werden die Rechte für den nächsten Eigentümer abgefragt und Sie können die Objekte möglicherweise nicht bearbeiten oder kopieren.
-Die aktuelle Auswahl können Sie jedoch aufnehmen.
-
-Möchten Sie diese Objekte nehmen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="CantBuyLandAcrossMultipleRegions">
-		Landkauf nicht möglich, da die Auswahl mehrere Regionen umfasst.
-
-Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut.
-	</notification>
-	<notification name="DeedLandToGroup">
-		Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
-Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt.
-
-Der Gruppe „[GROUP_NAME]“
- [AREA] m² Land schenken?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="DeedLandToGroupWithContribution">
-		Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
-Die Schenkung beinhaltet eine Landübertragung an die Gruppe von „[FIRST_NAME] [LAST_NAME]“.
-Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt.
-
-Der Gruppe „[GROUP_NAME]“
- [AREA] m² Land schenken?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="DisplaySetToSafe">
-		Es wurden sichere Anzeige-Einstellungen gewählt, da die Option -safe verwendet wurde.
-	</notification>
-	<notification name="DisplaySetToRecommended">
-		Es wurden die für Ihre Systemkonfiguration empfohlenen Anzeige-Einstellungen gewählt.
-	</notification>
-	<notification name="ErrorMessage">
-		[ERROR_MESSAGE]
-	</notification>
-	<notification name="AvatarMoved">
-		Ihr [TYPE]-Ort ist zurzeit nicht verfügbar. [HELP]
-Sie wurden zur nächstgelegenen Region teleportiert.
-	</notification>
-	<notification name="ClothingLoading">
-		Ihre Kleidung wird noch heruntergeladen.
-Sie können [SECOND_LIFE] normal verwenden. Andere Benutzer können Sie korrekt dargestellt sehen.
-		<form name="form">
-			<ignore name="ignore" text="Wenn das Herunterladen von Kleidung lange dauert"/>
-		</form>
-	</notification>
-	<notification name="FirstRun">
-		Die Installation von [APP_NAME] ist abgeschlossen.
-
-Wenn Sie [SECOND_LIFE] das erste Mal verwenden, müssen Sie ein Konto anlegen, bevor Sie sich anmelden können.
-Möchten Sie auf www.secondlife.com ein Konto erstellen?
-		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Neues Konto..."/>
-	</notification>
-	<notification name="LoginPacketNeverReceived">
-		Die Verbindung kann nicht hergestellt werden. Möglicherweise besteht ein Problem mit Ihrer Internetverbindung oder den [SECOND_LIFE]-Servern.
-
-Überprüfen Sie Ihre Internetverbindung und versuchen Sie es dann erneut, oder klicken Sie auf „Hilfe“, um zu unserer Supportseite zu gelangen, oder klicken Sie auf „Teleportieren“, um nach Hause zu teleportieren.
-		<form name="form">
-			<button name="OK" text="OK"/>
-			<button name="Help" text="Hilfe"/>
-			<button name="Teleport" text="Teleportieren"/>
-		</form>
-	</notification>
-	<notification name="WelcomeChooseSex">
-		Ihr Avatar erscheint jeden Moment.
-
-Benutzen Sie die Pfeiltasten, um sich fortzubewegen.
-Drücken Sie F1 für Hilfe oder für weitere Informationen über [SECOND_LIFE].
-Bitte wählen Sie einen männlichen oder weiblichen Avatar.
-Sie können sich später noch umentscheiden.
-		<usetemplate name="okcancelbuttons" notext="Weiblich" yestext="Männlich"/>
-	</notification>
-	<notification name="NotEnoughCurrency">
-		[NAME] [PRICE] L$  Sie haben nicht genügend L$, um diese Aktion auszuführen.
-	</notification>
-	<notification name="GrantedModifyRights">
-		Sie verfügen über Änderungsrechte für die Objekte von [FIRST_NAME] [LAST_NAME].
-	</notification>
-	<notification name="RevokedModifyRights">
-		Ihnen wurden die Änderungsrechte für die Objekte von [FIRST_NAME] [LAST_NAME] entzogen.
-	</notification>
-	<notification name="FlushMapVisibilityCaches">
-		Der Kartencache dieser Region wird geleert.
-Diese Aktion ist nur beim Debugging sinnvoll.
-(Auf dem Produktionssystem warten Sie einfach 5 Minuten. Die Karten werden nach erneuter Anmeldung automatisch aktualisiert.)
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BuyOneObjectOnly">
-		Sie können jeweils nur ein Objekt kaufen.  Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
-	</notification>
-	<notification name="OnlyCopyContentsOfSingleItem">
-		Es kann nur jeweils der Inhalt von einem Objekt kopiert werden.
-Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="KickUsersFromRegion">
-		Alle Einwohner in dieser Region nach Hause teleportieren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="EstateObjectReturn">
-		Möchten Sie wirklich alle Objekte zurückgeben, die [USER_NAME] gehören?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="InvalidTerrainBitDepth">
-		Die Regionstexturen konnten nicht festgelegt werden:
-Die Terraintextur [TEXTURE_NUM] hat eine ungültige Bit-Tiefe [TEXTURE_BIT_DEPTH].
-
-Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf „Übernehmen“.
-	</notification>
-	<notification name="InvalidTerrainSize">
-		Die Regionstexturen konnten nicht festgelegt werden:
-Die Terraintextur [TEXTURE_NUM] ist mit [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y] zu groß.
-
-Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf „Übernehmen“.
-	</notification>
-	<notification name="RawUploadStarted">
-		Hochladen gestartet. Je nach Verbindungsgeschwindigkeit kann der Vorgang bis zu 2 Minuten dauern.
-	</notification>
-	<notification name="ConfirmBakeTerrain">
-		Möchten Sie das aktuelle Terrain formen, es zum Mittelpunkt der oberen und unteren Terraingrenzen und zum Standard des „Zurücksetzen“-Tools machen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="MaxAllowedAgentOnRegion">
-		Es sind maximal [MAX_AGENTS] zulässige Einwohner erlaubt.
-	</notification>
-	<notification name="MaxBannedAgentsOnRegion">
-		Es sind maximal [MAX_BANNED] verbannte Einwohner erlaubt.
-	</notification>
-	<notification name="MaxAgentOnRegionBatch">
-		Fehler beim Versuch, [NUM_ADDED] Agenten hinzuzufügen:
-Ãœberschreitet den Grenzwert [MAX_AGENTS] [LIST_TYPE] um [NUM_EXCESS].
-	</notification>
-	<notification name="MaxAllowedGroupsOnRegion">
-		Es sind maximal [MAX_GROUPS] zulässige Gruppen erlaubt.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Formen"/>
-	</notification>
-	<notification name="MaxManagersOnRegion">
-		Es sind maximal [MAX_MANAGER]  verbannte Einwohner erlaub.
-	</notification>
-	<notification name="OwnerCanNotBeDenied">
-		Der Eigentümer des Grundstücks kann nicht zur Liste der „Verbannten Einwohner“ hinzugefügt werden.
-	</notification>
-	<notification name="CanNotChangeAppearanceUntilLoaded">
-		Das Aussehen lässt sich erst ändern, wenn Kleider und Form/Gestalt geladen sind.
-	</notification>
-	<notification name="ClassifiedMustBeAlphanumeric">
-		Der Name der Anzeige muss mit einem Buchstaben von A bis Z oder einer Ziffer beginnen.  Satzzeichen sind nicht erlaubt.
-	</notification>
-	<notification name="CantSetBuyObject">
-		„Objekt kaufen“ nicht möglich, da das Objekt nicht zum Verkauf freigegeben ist.
-Geben Sie das Objekt zum Verkauf frei und versuchen Sie es erneut.
-	</notification>
-	<notification name="FinishedRawDownload">
-		Raw-Terrain-Datei wurde heruntergeladen nach:
-[DOWNLOAD_PATH].
-	</notification>
-	<notification name="DownloadWindowsMandatory">
-		Eine neue Version von [APP_NAME] ist verfügbar.
-[MESSAGE]
-Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
-		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
-	</notification>
-	<notification name="DownloadWindows">
-		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
-[MESSAGE]
-Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
-		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
-	</notification>
-	<notification name="DownloadWindowsReleaseForDownload">
-		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
-[MESSAGE]
-Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
-		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
-	</notification>
-	<notification name="DownloadMacMandatory">
-		Eine neue Version von [APP_NAME] ist verfügbar.
-[MESSAGE]
-Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
-
-In Ihren Anwendungsordner herunterladen?
-		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
-	</notification>
-	<notification name="DownloadMac">
-		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
-[MESSAGE]
-Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
-
-In Ihren Anwendungsordner herunterladen?
-		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
-	</notification>
-	<notification name="DownloadMacReleaseForDownload">
-		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
-[MESSAGE]
-Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
-
-In Ihren Anwendungsordner herunterladen?
-		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
-	</notification>
-	<notification name="DeedObjectToGroup">
-		Bei Übertragung dieses Objekts erhält die Gruppe:
-* An das Objekt bezahlte L$
-		<usetemplate ignoretext="Beim Ãœbertragen von Objekten an Gruppen" name="okcancelignore" notext="Abbrechen" yestext="Ãœbertragung"/>
-	</notification>
-	<notification name="WebLaunchExternalTarget">
-		Den System-Webbrowser öffnen, um diesen Inhalt anzuzeigen?
-		<usetemplate ignoretext="Wenn der System-Webbrowser zur Anzeige einer Webseite geöffnet wird" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchJoinNow">
-		Zu www.secondlife.com, um Ihr Konto zu verwalten?
-		<usetemplate ignoretext="Beim Starten eines Browsers, um Ihr Konto zu verwalten" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchSecurityIssues">
-		Informieren Sie sich im [SECOND_LIFE] Wiki, wie man Sicherheitsprobleme richtig meldet.
-		<usetemplate ignoretext="Beim Starten eines Browsers, um das Sicherheitsfragen-Wiki anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchQAWiki">
-		Besuchen Sie das [SECOND_LIFE] QA-Wiki.
-		<usetemplate ignoretext="Beim Starten eines Browsers, um das QA-Wiki anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchPublicIssue">
-		Im [SECOND_LIFE] Allgemeine-Fragen-Tracker können Sie Fehler und andere Probleme melden.
-		<usetemplate ignoretext="Beim Starten eines Browsers, um den Allgemeine Probleme Tracker anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
-	</notification>
-	<notification name="WebLaunchPublicIssueHelp">
-		Informieren Sie sich im [SECOND_LIFE] Wiki über den Allgemeine Fragen-Tracker.
-		<usetemplate ignoretext="Beim Starten eines Browsers, um das Allgemeine Fragen-Wiki anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
-	</notification>
-	<notification name="WebLaunchSupportWiki">
-		Im offiziellen Linden-Blog finden Sie die neuesten Nachrichten und Informationen.
-		<usetemplate ignoretext="Beim Starten eines Browsers, um das Blog anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchLSLGuide">
-		Zur Scripting-Anleitung, um Scripting-Hilfe zu erhalten?
-		<usetemplate ignoretext="Beim Starten eines Browsers, um die Scripting-Anleitung anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchLSLWiki">
-		Zum LSL-Portal, um Scripting-Hilfe zu erhalten?
-		<usetemplate ignoretext="Beim Starten eines Browsers, um das LSL-Portal anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
-	</notification>
-	<notification name="ReturnToOwner">
-		Möchten Sie die ausgewählten Objekte an ihre Eigentümer zurückgeben? Transferierbare übertragene Objekte werden ihren früheren Eigentümern zurückgegeben.
-
-*WARNUNG* Nicht transferierbare übertragene Objekte werden dabei gelöscht!
-		<usetemplate ignoretext="Beim Zurückgeben von Objekten an ihre Eigentümer" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="GroupLeaveConfirmMember">
-		Sie sind Mitglied der Gruppe [GROUP].
-Diese Gruppe verlassen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmKick">
-		Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/>
-	</notification>
-	<notification name="MuteLinden">
-		Lindens können nicht stummgeschaltet werden.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CannotStartAuctionAlreadyForSale">
-		Eine Parzelle, die bereits zum Verkauf freigegeben ist, kann nicht versteigert werden.  Deaktivieren Sie den Landverkauf, wenn Sie das Land zur Versteigerung freigeben möchten.
-	</notification>
-	<notification label="Objekt nach Name stummschalten fehlgeschlagen" name="MuteByNameFailed">
-		Dieser Name ist bereits stummgeschaltet.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="RemoveItemWarn">
-		Diese Aktion ist zwar erlaubt, aber beim Löschen von Inhalten wird das Objekt beschädigt. Möchten Sie dieses Element löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="CantOfferCallingCard">
-		Sie können gerade keine Visitenkarte übergeben. Warten Sie kurz und versuchen Sie es dann noch einmal.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CantOfferFriendship">
-		Sie können gerade keine Freundschaft anbieten. Warten Sie kurz und versuchen Sie es dann noch einmal.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="BusyModeSet">
-		Beschäftigt-Modus aktiviert.
-Chat und Instant Messages werden ausgeblendet. Instant Messages erhalten Ihre Beschäftigt-Antwort. Alle Teleport-Angebote werden ausgeschlagen. Alle Inventar-Angebote werden in den Papierkorb verschoben.
-		<usetemplate ignoretext="Beim Aktivieren des Beschäftigt-Modus" name="okignore" yestext="OK"/>
-	</notification>
-	<notification name="JoinedTooManyGroupsMember">
-		Sie sind bereits in zu vielen Gruppen Mitglied und können keiner weiteren beitreten. Bitte verlassen Sie eine Gruppe, bevor Sie dieser beitreten oder lehnen Sie das Angebot ab.
-Die Option zum Austritt aus einer Gruppe finden Sie unter „Bearbeiten“ &gt; „Gruppen...“.
-[NAME] hat Sie eingeladen, einer Gruppe beizutreten.
-[INVITE]
-		<usetemplate name="okcancelbuttons" notext="Ablehnen" yestext="Beitreten"/>
-	</notification>
-	<notification name="KickUser">
-		Beim Hinauswerfen dieses Benutzers welche Meldung anzeigen?
-		<form name="form">
-			<input name="message">
-				Sie wurden von einem Administrator abgemeldet.
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="KickAllUsers">
-		Beim Hinauswerfen aller Personen vom Grid welche Meldung anzeigen?
-		<form name="form">
-			<input name="message">
-				Sie wurden von einem Administrator abgemeldet.
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="FreezeUser">
-		Beim Einfrieren dieses Benutzers welche Meldung anzeigen?
-		<form name="form">
-			<input name="message">
-				Sie wurden eingefroren. Bewegen oder Chatten ist nicht mehr möglich. Ein Administrator wird sich über IM an Sie wenden
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="UnFreezeUser">
-		Beim Auftauen dieses Benutzers welche Meldung anzeigen?
-		<form name="form">
-			<input name="message">
-				Sie sind nicht mehr eingefroren.
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="OfferTeleport">
-		Teleport an Ihre Position mit der folgenden Meldung anbieten?
-		<form name="form">
-			<input name="message">
-				Triff mich in [REGION]
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="OfferTeleportFromGod">
-		Benutzer an Ihrem Standort herbeirufen?
-		<form name="form">
-			<input name="message">
-				Triff mich in [REGION]
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="TeleportFromLandmark">
-		Möchten Sie sich wirklich teleportieren?
-		<usetemplate ignoretext="Beim Teleportieren von einer Landmarke im Inventar" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/>
-	</notification>
-	<notification label="Nachricht an alle auf diesem Grundstück" name="MessageEstate">
-		Geben Sie eine kurze Nachricht ein, die an jede Person auf Ihrem Grundstück gesendet wird.
-		<form name="form">
-			<input name="message"/>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification label="Linden-Grundstück ändern" name="ChangeLindenEstate">
-		Sie sind im Begriff, ein Grundstück in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
-
-Dies ist ÄUSSERST GEFÄHRLICH, da es grundlegende Auswirkungen auf das Benutzererlebnis hat.  Auf dem Mainland werden tausende Regionen geändert, was den Spaceserver stark belastet.
-
-Fortfahren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification label="Zugang zu Linden-Grundstück ändern" name="ChangeLindenAccess">
-		Sie sind im Begriff, die Zugangsliste für ein Grundstück in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
-
-Dies ist GEFÄHRLICH und sollte nur erfolgen, um Objekte/L$ per Hack in und aus dem Raster zu entfernen.
-Tausende Regionen werden verändert und der Spaceserver wird dadurch stark belastet.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateAllowedAgentAdd">
-		Nur für dieses Grundstück oder für alle [ALL_ESTATES] zur Erlaubnisliste hinzufügen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateAllowedAgentRemove">
-		Nur für dieses Grundstück oder für alle [ALL_ESTATES] von Erlaubnisliste entfernen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateAllowedGroupAdd">
-		Nur für dieses Grundstück oder für alle [ALL_ESTATES] zur Gruppen-Erlaubnisliste hinzufügen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateAllowedGroupRemove">
-		Nur für dieses Grundstück oder für alle [ALL_ESTATES] von Gruppen-Erlaubnisliste entfernen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateBannedAgentAdd">
-		Zugang nur für dieses Grundstück oder für [ALL_ESTATES] verweigern?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateBannedAgentRemove">
-		Einwohner nur für dieses Grundstück oder für alle [ALL_ESTATES] von der Bannliste entfernen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateManagerAdd">
-		Verwalter nur für dieses Grundstück oder für [ALL_ESTATES] festlegen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateManagerRemove">
-		Verwalter nur für dieses Grundstück oder für [ALL_ESTATES] entfernen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Rauswurf bestätigen" name="EstateKickUser">
-		Benutzer [EVIL_USER] von diesem Grundstück werfen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="EstateChangeCovenant">
-		Möchten Sie den Grundstücksvertrag wirklich ändern?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked">
-		Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
-
-Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked_KB">
-		Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten.
-
-Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
-		</url>
-		<usetemplate ignoretext="Wenn Regionzugang aufgrund von Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked_Notify">
-		Aufgrund Ihrer Alterseinstufung dürfen Sie diese Region nicht betreten.
-	</notification>
-	<notification name="RegionEntryAccessBlocked_Change">
-		Sie dürfen diese Region aufgrund der Einstellung Ihrer Alterseinstufung nicht betreten.
-
-Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen... &gt; Allgemein.
-	<form name="form">
-      <button
-       name="OK"
-       text="Einstellung ändern"/>
-      <button
-       name="Cancel"
-       text="Schließen"/>
-       <ignore name="ignore" text="Wenn Regionzugang aufgrund von Einstellung für Alterseinstufung gesperrt ist"/>
-    </form>
-	</notification>
-	<notification name="LandClaimAccessBlocked">
-		Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
-
-Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LandClaimAccessBlocked_KB">
-		Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
-
-Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
-		</url>
-		<usetemplate ignoretext="Wenn Landanspruch aufgrund von Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
-	</notification>
-	<notification name="LandClaimAccessBlocked_Notify">
-		Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
-	</notification>
-	<notification name="LandClaimAccessBlocked_Change">
-		Sie haben aufgrund der Einstellung Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
-
-Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen... &gt; Allgemein.
-		<usetemplate ignoretext="Wenn Landanspruch aufgrund von Einstellung der Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked">
-		Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
-
-Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked_KB">
-		Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen.
-
-Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
-		</url>
-		<usetemplate ignoretext="Wenn Landkauf aufgrund von Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked_Notify">
-		Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen.
-	</notification>
-	<notification name="LandBuyAccessBlocked_Change">
-		Sie können aufgrund Ihrer Einstellung für Alterseinstufung dieses Land nicht kaufen.
-
-Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen... &gt; Allgemein.
-		<usetemplate ignoretext="Wenn Landkauf aufgrund von Einstellung für Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/>
-	</notification>
-	<notification name="TooManyPrimsSelected">
-		&quot;Zu viele Prims wurden ausgewählt.  Bitte wählen Sie höchstens [MAX_PRIM_COUNT] Prims aus und versuchen Sie es erneut.&quot;
-	</notification>
-	<notification name="ProblemImportingEstateCovenant">
-		Problem beim Import des Grundstückvertrags.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ProblemAddingEstateManager">
-		Es gibt Probleme beim Hinzufügen eines neuen Grundstücksverwalters.  Bei mindestens einem Grundstück ist die Verwalterliste voll.
-	</notification>
-	<notification name="ProblemAddingEstateGeneric">
-		Problem beim Hinzufügen zu dieser Grundstücksliste.  Bei mindestens einem Grundstück ist die Liste voll.
-	</notification>
-	<notification name="UnableToLoadNotecardAsset">
-		Notizkarten-Asset konnte nicht geladen werden.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="NotAllowedToViewNotecard">
-		Unzureichende Rechte, um die mit der angeforderten Asset-ID verbundene Notizkarte anzuzeigen.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MissingNotecardAssetID">
-		Asset-ID für Notizkarte fehlt in Datenbank.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="PublishClassified">
-		Hinweis: Anzeigengebühren werden nicht zurückerstattet.
-
-Anzeige für [AMOUNT] L$ veröffentlichen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="SetClassifiedMature">
-		Enthält diese Anzeige Mature-Inhalte?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="SetGroupMature">
-		Beschäftigt sich diese Gruppe mit Mature-Inhalten?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification label="Neustart bestätigen" name="ConfirmRestart">
-		Möchten Sie diese Region in 2 Minuten neu starten?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification label="Nachricht an alle in dieser Region" name="MessageRegion">
-		Geben Sie eine kurze Nachricht ein, die an jede Person in dieser Region gesendet wird.
-		<form name="form">
-			<input name="message"/>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification label="Terraformen blockieren" name="HelpRegionBlockTerraform">
-		Wenn diese Option aktiviert ist, können Landeigentümer Ihr Land nicht terraformen. Ausgenommen davon ist die parzelleneigene Einstellung „Terrain bearbeiten“.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Fliegen blockieren" name="HelpRegionBlockFly">
-		Wenn diese Option aktiviert ist, ist Fliegen in dieser Region nicht möglich, auch wenn für die Parzelle eine andere Einstellung aktiv ist.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Mehrere Inhaltsberechtigungen ändern" name="HelpBulkPermission">
-		Mit dem Werkzeug „Mehrere Berechtigungen“ können Sie Berechtigungen für mehrere Objekte in den Inhalten des ausgewählten Objekts schnell ändern.  Bitte beachten Sie, dass Sie nur Berechtigungen an den Objekten im Inhalt der ausgewählten Objekte einstellen, nicht Berechtigungen an dem/den Container-Objekt(en=) selbst.  
-
-Bitte beachten Sie auch, dass die Berechtigungen nicht auf eingebettete Inhalte der enthaltenen Objekte angewandt werden.  Ihre Auftrag wird nur an Objekten ausgeführt, die sie sich in diesem Level befinden.
-
-Sie können auswählen, welche Objektarten Sie ändern möchten, indem Sie diese in der Liste unter „Inhaltsarten“ auswählen. Wenn Sie Texturen auswählen, sind Fotos mit eingeschlossen.
-
-* Mit diesem Werkzeug können Sie nur an Objekten, die Sie ändern dürfen, Änderungen vornehmen.
-* Sie können dem nächsten Eigentümer keine Berechtigungen geben, die Sie nicht besitzen.
-* Die Berechtigungen für den nächsten Eigentümer sind nur Anfragen. Wenn ein Objekt nicht alle Berechtigungen annehmen kann, dann werden keine seiner Berechtigungen geändert.
-
-Wenn Sie bereit sind, die Berechtigungen mehrfach zu ändern, klicken Sie auf Übernehmen und warten Sie, bis die Ergebnisse angezeigt werden.
-
-Wenn Sie das Fenster „Mehrfach-Berechtigungen“ schließen, während die Berechtigungen geändert werden, wird der Vorgang gestoppt.
-	</notification>
-	<notification label="Schaden zulassen" name="HelpRegionAllowDamage">
-		Wenn diese Option aktiviert ist, ist das Gesundheitssystem auf allen Parzellen aktiviert, unabhängig von den Parzelleneinstellungen. Ist die Option links deaktiviert, können die Parzelleneigentümer das Gesundheitssystem individuell einschalten.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Avatar-Limit" name="HelpRegionAgentLimit">
-		Legt die maximale Anzahl an Avataren für diese Region fest.
-Die Leistung hängt von der Anzahl der Avatare in der Region ab.
-
-Standard: 40
-	</notification>
-	<notification label="Objektbonus" name="HelpRegionObjectBonus">
-		Der Objektbonus ist ein Multiplikator für die Anzahl an zulässigen Primitiven auf einer Parzelle. Gültig sind Werte zwischen 1 und 10. „1“ erlaubt auf einer 512 qm großen Parzelle 117 Objekte. „2“ erlaubt auf einer 512 qm großen Parzelle 234 Objekte, also die doppelte Menge. Die maximale Objektanzahl in einer Region beträgt unabhängig vom Objektbonus 15.000.
-Eine nachträglich Senkung des Objektbonus führt dazu, dass Objekte zurückgegeben oder gelöscht werden.
-
-Standard: 1.0
-	</notification>
-	<notification label="Alterseinstufung" name="HelpRegionMaturity">
-		Legt die Alterseinstufung für die Region fest. Dies wird in der Menüleiste oben im Viewer angezeigt und auch in den Kurzinfos auf der Weltkarte, wenn der Cursor über diese Region schwebt. Diese Einstellung wirkt sich auch auf den Zugang zu dieser Region und die Suchergebnisse aus. Andere Einwohner können Regionen nur dann betreten oder Suchergebnisse anzeigen, wenn Ihre Alterseinstufung in Ihren Einstellungen der Alterseinstellung der Region bzw. Suchergebnisse entsprechen.
-
-Es kann eine Weile dauern, bis diese Änderung auf der Karte angezeigt wird.
-	</notification>
-	<notification label="Stoßen beschränken" name="HelpRegionRestrictPushObject">
-		Aktivieren sie diese Option, um in der gesamten Region das Stoßen zu beschränken. Wenn aktiviert, können Einwohner nur von sich selbst oder vom Parzelleneigentümer gestoßen werden.
-(Stoßen meint die LSL-Funktion llPushObject().)
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Parzelle zusammenlegen/teilen" name="HelpParcelChanges">
-		Dieses Kontrollkästchen steuert, ob Parzellen des Grundstückseigentümers zusammengelegt bzw. unterteilt werden können. Wenn deaktiviert:
- * Nur Grundstückseigentümer bzw. –verwalter können Parzellen zusammenlegen/teilen.  * Sie können nur Parzellen zusammenlegen/teilen, die dem Eigentümer oder einer Gruppe gehören, bei der sie entsprechende Gruppenrechte innehaben.
-Wenn aktiviert:
- * Die Parzelleneigentümer können ihre Parzellen selbst zusammenlegen/teilen.
- * Parzellen in Gruppeneigentum können von Mitgliedern mit den entsprechenden Rechten zusammengelegt bzw. unterteilt werden.
-
-Standard: aktiviert
-	</notification>
-	<notification label="Nicht in Suche anzeigen" name="HelpRegionSearch">
-		Wenn Sie diese Option auswählen, können Parzelleneigentümer ihre Parzellen nicht in der Suche anzeigen lassen
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Alterseinstufung der Region ändern" name="RegionMaturityChange">
-		Die Alterseinstufung dieser Region wurde aktualisiert.
-Es kann eine Weile dauern, bis sich die Änderung auf die Karte auswirkt.
-	</notification>
-	<notification label="Landwiederverkauf" name="HelpRegionLandResell">
-		Grundstückseigentümer und -verwalter können jedes Land im Besitz des Grundstückseigentümers verkaufen.
-Ist diese Option deaktiviert, können Käufer ihr Land in dieser Region nicht weiterverkaufen.
-Ist die Option aktiviert, können Käufer ihr Land in dieser Region weiterverkaufen.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Skripts deaktivieren" name="HelpRegionDisableScripts">
-		Schlechte Sim-Performance ist oftmals auf ein Skript zurückzuführen. Öffnen Sie die Statistikleiste (Strg+Umschalt+1). Sehen Sie sich den Wert für „Simulator Physics FPS“ (Simulator Physik-FPS) an.
-Wenn der Wert unter 45 liegt, öffnen Sie den Bereich „Time“ (Zeit) ganz unten in der Statistikleiste. Wenn der Wert für „Script Time“ (Skriptzeit) 25 ms oder höher ist, klicken Sie auf „Top-Skripts“. Der Name und die Position der Skripts, die für die schlechte Performance verantwortlich sind, werden angezeigt.
-Wenn Sie das Kontrollkästchen „Skripts deaktivieren“ aktivieren und auf „Übernehmen“ klicken, werden alle Skripts in der Region zeitweilig deaktiviert. Dieser Schritt ist eventuell notwendig, damit Sie an die Position des gemeldeten „Top-Skripts“ reisen können. Sobald Sie dort angekommen sind, sollten Sie das Skript auf die Ursache des Problems hin untersuchen. Möglicherweise müssen Sie sich an den Skript-Eigentümer wenden oder das Objekt löschen bzw. zurückgeben. Um die Skripte in der Region wieder zu aktivieren, deaktivieren Sie „Skript deaktivieren“ und klicken Sie auf „Übernehmen“.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Kollisionen deaktivieren" name="HelpRegionDisableCollisions">
-		Schlechte Sim-Performance ist oftmals auf physische Objekte zurückzuführen.
-Öffnen Sie die Statistikleiste (Strg+Umschalt+1). Sehen Sie sich den Wert „Simulator Physics FPS“ an. Liegt dieser unter 45, öffnen Sie unten in der Statistikleiste den „Time“-Bereich. Liegt die „Sim Time (Physics)“ bei 20 ms oder darüber, klicken Sie auf „Top-Kollisionsobjekte“.
-Der Name und der Standort der physischen Objekte, die das Problem verursachen, werden angezeigt.
-
-Wenn Sie das Kontrollkästchen „Kollisionen deaktivieren“ aktivieren und auf „Übernehmen“ klicken, werden alle Objekt-Objekt-Kollisionen in der Region zeitweilig deaktiviert. Dieser Schritt ist eventuell notwendig, damit Sie an die Position des gemeldeten „Top-Kollisionsobjekts“ reisen können. Überprüfen Sie das Objekt an der angegebenen Position.
-Kollidiert es ständig mit anderen Objekten? Wenden Sie sich eventuell an den Eigentümer des Objekts, löschen Sie es oder geben Sie es zurück.
-Deaktivieren Sie die Option „Kollisionen deaktivieren“ und klicken Sie auf „Übernehmen“, um Kollisionen in dieser Region wieder zu aktivieren.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Physik deaktivieren" name="HelpRegionDisablePhysics">
-		Das Deaktivieren der Physik ähnelt dem Deaktivieren von Kollisionen, außer dass die gesamte Physiksimulation ausgeschaltet wird.  Das hat nicht nur zur Folge, dass Objekte nicht mehr kollidieren, sondern dass Avatare sich nicht mehr bewegen können.
-
-Diese Option sollte nur verwendet werden, wenn das Deaktivieren von Kollisionen keine ausreichende Leistungssteigerung bringt, um Physikprobleme in der Region oder die Top-Kollisionsobjekte zu erkennen.
-
-Schalten Sie die Physiksimulation hinterher wieder ein. Andernfalls können sich Avatare nicht mehr bewegen.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Top-Kollisionsobjekte" name="HelpRegionTopColliders">
-		Zeigt eine Liste der Objekte mit den potenziell meisten Objekt-Objekt-Kollisionen an.  Diese Objekte können die Leistung beeinträchtigen.  Wählen Sie „Ansicht“ &gt; „Statistikleiste“ aus und sehen Sie unter „Simulator“ &gt; „Time“ &gt; „Sim Time (Physics)“ nach, ob die Physikberechnung länger als 20 ms dauert.
-	</notification>
-	<notification label="Top-Skripts" name="HelpRegionTopScripts">
-		Zeigt eine Liste der Objekte an, die die meiste Zeit benötigen, um LSL-Skripts auszuführen.  Diese Objekte können die Leistung beeinträchtigen.
-Wählen Sie „Ansicht“ &gt; „Statistikleiste“ und sehen Sie unter „Simulator“ &gt; „Time“ &gt; „Script Time“ nach, ob mehr als 25 ms für Skripts benötigt werden.
-	</notification>
-	<notification label="Region neu starten" name="HelpRegionRestart">
-		Starten Sie den Serverprozess für diese Region nach der 2-Minuten-Warnung neu. Die Verbindung aller Einwohner in dieser Region wird getrennt.  Die Region wird gespeichert und sollte nach 90 Sekunden wieder verfügbar sein.
-
-Der Neustart der Region behebt die meisten Leistungs-probleme, sollte aber nur nach Anweisung erfolgen.
-	</notification>
-	<notification label="Wasserhöhe" name="HelpRegionWaterHeight">
-		Die Höhe der Wasserlinie in Metern. Liegt dieser Wert unter 20 und haben Sie Wasser nahe am Rand der Welt oder „offenes“ Wasser definiert, wird eine deutliche Lücke sichtbar.
-
-Standard: 20
-	</notification>
-	<notification label="Obere Terraingrenze" name="HelpRegionTerrainRaise">
-		Der maximale Betrag in Metern, um den Parzelleneigentümer ihr Terrain über die Standardhöhe des „geformten“ Terrains erhöhen können.
-
-Standard: 4
-	</notification>
-	<notification label="Untere Terraingrenze" name="HelpRegionTerrainLower">
-		Der maximale Betrag in Metern, um den Parzelleneigentümer ihr Terrain unter die Standardhöhe des „geformten“ Terrains absenken können.
-
-Standard: -4
-	</notification>
-	<notification label="RAW-Terrain hochladen" name="HelpRegionUploadRaw">
-		Mit dieser Schaltfläche laden Sie eine RAW-Datei in die Region hoch, in der Sie sich befinden.
-Die Datei muss die korrekten Maße (RGB, 256x256) und 13 Kanäle haben.  Um eine neue Terraindatei zu erstellen, laden Sie am besten die vorhandene RAW-Datei herunter.  Beginnen Sie damit, den Rot-Kanal (Höhe des Landes) zu bearbeiten und laden Sie die Datei wieder hoch.
-
-Der Ladevorgang kann bis zu 45 Sekunden dauern. Beachten Sie, dass beim Hochladen einer Terraindatei die Objekte auf dem Land *nicht* verschoben werden, sondern nur das Land und die mit den Parzellen verbundenen Berechtigungen.  Dies kann dazu führen, dass Objekte unter dem Terrain verschwinden.
-
-Weitere Informationen zur Bearbeitung der Höhendaten der Region enthält die F1-Hilfe.
-	</notification>
-	<notification label="RAW-Terrain herunterladen" name="HelpRegionDownloadRaw">
-		Mit dieser Schaltfläche laden Sie eine Datei herunter, welche die Höhendaten, Maße, den Verkaufsstatus der Parzelle und einige Parzellenrechte für diese Region enthält. Wenn Sie diese Datei in einem Programm wie Photoshop öffnen, müssen Sie die Bilddaten eingeben. Diese sind: RGB, 256x256 mit 13 Kanälen. Anders lässt sich diese Terraindatei nicht öffnen.
-
-Weitere Informationen zur Bearbeitung der Höhendaten der Region enthält die F1-Hilfe.
-	</notification>
-	<notification label="Grundstücksonne verwenden" name="HelpRegionUseEstateSun">
-		Aktivieren Sie diese Option, um in dieser Region denselben Sonnenstand wie auf dem restlichen Grundstück einzustellen.
-
-Standard: aktiviert
-	</notification>
-	<notification label="Sonne fest" name="HelpRegionFixedSun">
-		Aktivieren Sie diese Option, um den Sonnenstand auf die im Regler definierte Position festzulegen und die Animation auszuschalten.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Terrain formen" name="HelpRegionBakeTerrain">
-		Mit dieser Schaltfläche speichern Sie die aktuelle Terrain-Form als neuen Standard für die Region. Nach der Formung können Sie und andere das Land mit der Option „Terrain bearbeiten“ &gt; „Zurücksetzen“ in den ursprünglichen Zustand zurückversetzen. Das geformte Terrain ist auch das Zentrum für die oberen und unteren Terraingrenzen.
-	</notification>
-	<notification label="Grundstücksverwalter" name="HelpEstateEstateManager">
-		Ein Grundstücksverwalter ist ein Einwohner, dem Sie die Kontrolle über die Regions- und Grundstückseinstellungen übertragen haben.  Ein Grundstücksverwalter kann alle Einstellungen ändern, außer das Hochladen, Herunterladen und Formen von Terrain.  Vor allem kann er Einwohner auf dem Grundstück erlauben und davon verbannen.
-
-Nur der Eigentümer kann den Grundstücksverwalter bestimmen und entlassen. Der Verwalter hat dieses Recht nicht.  Wählen Sie nur vertrauenswürdige Einwohner als Grundstücksverwalter, da Sie letztlich für deren Handlungen verantwortlich sind.
-	</notification>
-	<notification label="Globale Zeit verwenden" name="HelpEstateUseGlobalTime">
-		Aktivieren Sie diese Option, um auf Ihrem Grundstück denselben Sonnenstand wie auf dem Linden-„Mainland“ einzustellen.
-
-Standard: aktiviert
-	</notification>
-	<notification label="Sonne fest" name="HelpEstateFixedSun">
-		Aktivieren Sie diese Option, um den Sonnenstand auf die im Regler definierte Position festzulegen und die Animation auszuschalten.
-	</notification>
-	<notification label="Öffentlich" name="HelpEstateExternallyVisible">
-		Aktivieren Sie diese Option, um Einwohnern den Zugang zu diesem Grundstück zu erlauben, ohne auf der Zugangsliste zu stehen.
-
-Standard: aktiviert
-	</notification>
-	<notification label="Direktteleport zulassen" name="HelpEstateAllowDirectTeleport">
-		Wenn aktiviert, können sich Einwohner an jede Stelle auf Ihrem Grundstück teleportieren.  Wenn deaktiviert, werden Einwohner zum nächstgelegenen Telehub teleportiert.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Zugang erlauben" name="HelpEstateAllowResident">
-		Der Zugang zu diesem Grundstück wird auf die hier aufgeführten Einwohner und Gruppen beschränkt.  Diese Einstellung ist nur verfügbar, wenn „Öffentlich“ deaktiviert ist.
-	</notification>
-	<notification label="Gruppenzugang erlauben" name="HelpEstateAllowGroup">
-		Der Zugang zu diesem Grundstück wird auf die hier aufgeführten Einwohner und Gruppen beschränkt.  Diese Einstellung ist nur verfügbar, wenn „Öffentlich“ deaktiviert ist.
-	</notification>
-	<notification label="E-Mail-Adresse für Missbrauchsmeldungen" name="HelpEstateAbuseEmailAddress">
-		Geben Sie hier eine E-Mail-Adresse ein, an die Missbrauchsmeldungen von diesem Grundstück gesendet werden.
-Wenn dieses Feld leer ist, werden Missbrauchsmeldungen nur an Linden Lab gesendet.
-	</notification>
-	<notification label="Zugang verweigern" name="HelpEstateBanResident">
-		Einwohnern auf dieser Liste wird der Zugang zum Grundstück verwehrt, unabhängig von etwaigen anderen Einstellungen.
-	</notification>
-	<notification label="Voice-Chat erlauben" name="HelpEstateVoiceChat">
-		Die Parzellen auf diesem Grundstück können über eigene Voice-Channel verfügen, die es Einwohnern ermöglichen, sich mit anderen Personen in der Nähe zu unterhalten.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Falsche Voice-Version" name="VoiceVersionMismatch">
-		Diese Version von [APP_NAME] mit dem Voice-Chat-Feature in dieser Region nicht kompatibel. Damit Voice-Chat funktioniert, müssen Sie [APP_NAME] aktualisieren.
-	</notification>
-	<notification label="Grunstücksvertrag" name="HelpEstateCovenant">
-		Ein Grundstücksvertrag ermöglicht es Ihnen, Grundstücksparzellen zu verkaufen. Ohne Vertrag können Sie kein Land verkaufen. Wenn Sie keine Regeln festlegen oder Käufern vor dem Kauf keine anderen Informationen über das Land bereitstellen möchten, können Sie die Vertrags-Notizkarte auch leer lassen.
-
-Ein Vertrag kann Regeln und Richtlinien, kulturelle Informationen oder einfach nur Ihre eigenen Erwartungen bezüglich der Landnutzung durch den Käufer enthalten. Das kann Zoning, Baubeschränkungen, Zahloptionen und alle möglichen anderen Informationen betreffen, die der neue Eigentümer Ihrer Meinung nach kennen und akzeptieren sollte.
-
-Der Käufer muss dem Vertrag durch Auswahl dieses Kontrollkästchens zustimmen, bevor der Kauf abgeschlossen werden kann. Grundstücksverträge sind jederzeit unter „Land-Info“ für jede Parzelle einsehbar, für die ein Vertrag definiert wurde.
-	</notification>
-	<notification label="Objekte können nicht gekauft werden" name="BuyObjectOneOwner">
-		Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden.
-Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
-	</notification>
-	<notification label="Inhalte können nicht gekauft werden" name="BuyContentsOneOnly">
-		Inhalte können jeweils nur für ein Objekt gekauft werden.
-Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
-	</notification>
-	<notification label="Inhalte können nicht gekauft werden" name="BuyContentsOneOwner">
-		Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden.
-Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
-	</notification>
-	<notification name="BuyOriginal">
-		Von [OWNER] Originalobjekt für [PRICE] L$ kaufen?
-Sie werden der Eigentümer dieses Objekts.
-Sie können das Objekt:
- Bearbeiten: [MODIFYPERM]
- Kopieren: [COPYPERM]
- Verkaufen oder weggeben: [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BuyOriginalNoOwner">
-		Originalobjekt für [PRICE] L$ kaufen?
-Sie werden der Eigentümer dieses Objekts.
-Sie können das Objekt:
- Bearbeiten: [MODIFYPERM]
- Kopieren: [COPYPERM]
- Verkaufen oder weggeben: [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BuyCopy">
-		Von [OWNER] Kopie für [PRICE] L$ kaufen?
-Das Objekt wird in Ihr Inventar kopiert.
-Sie können das Objekt:
- Bearbeiten: [MODIFYPERM]
- Kopieren: [COPYPERM]
- Verkaufen oder weggeben: [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BuyCopyNoOwner">
-		Kopie für [PRICE] L$ kaufen?
-Das Objekt wird in Ihr Inventar kopiert.
-Sie können das Objekt:
- Bearbeiten: [MODIFYPERM]
- Kopieren: [COPYPERM]
- Verkaufen oder weggeben: [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BuyContents">
-		Von [OWNER] Inhalte für [PRICE] L$ kaufen?
-Die Inhalte werden in Ihr Inventar kopiert.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BuyContentsNoOwner">
-		Inhalte für [PRICE] L$ kaufen?
-Die Inhalte werden in Ihr Inventar kopiert.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmPurchase">
-		Transaktion:
-[ACTION]
-
-Möchten Sie diesen Kauf fortsetzen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmPurchasePassword">
-		Transaktion:
-[ACTION]
-
-Möchten Sie diesen Kauf fortsetzen?
-Geben Sie Ihr Kennwort erneut ein und klicken Sie auf OK.
-		<form name="form">
-			<input name="message"/>
-			<button name="ConfirmPurchase" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="SetPickLocation">
-		Hinweis:
-Sie haben die Position dieser Auswahl aktualisiert, aber die anderen Daten behalten ihre ursprünglichen Werte.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MoveInventoryFromObject">
-		Sie haben „nicht kopierfähige“ Inventarobjekte ausgewählt.
-Diese Objekte werden nicht kopiert, sondern in Ihr Inventar verschoben.
-
-Inventarobjekt(e) verschieben?
-		<usetemplate ignoretext="Beim Verschieben von nicht-kopierfähigem Inventar von Objekten" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="MoveInventoryFromScriptedObject">
-		Sie haben „nicht kopierfähige“ Inventarobjekte ausgewählt.  Diese Objekte werden nicht kopiert, sondern in Ihr Inventar verschoben.
-Da es sich um ein geskriptetes Objekt handelt, geht die Skriptfunktion beim Verschieben in das Inventar möglicherweise verloren.
-
-Inventarobjekt(e) verschieben?
-		<usetemplate ignoretext="Beim Verschieben von nicht-kopierfähigem Inventar von geskripteten Objekten" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ClickActionNotPayable">
-		Achtung: Die Klick-Aktion „Objekt bezahlen“ wurde definiert, sie funktioniert aber nur, wenn ein Skript mit einem money() Ereignis hinzugefügt wird.
-		<form name="form">
-			<ignore name="ignore" text="Beim Einrichten von Events mit „Objektbezahlung“ ohne Geld"/>
-		</form>
-	</notification>
-	<notification name="OpenObjectCannotCopy">
-		Sie haben keine Berechtigung zum Kopieren von Elementen in diesem Objekt.
-	</notification>
-	<notification name="WebLaunchAccountHistory">
-		Zur [SECOND_LIFE]-Website, um Ihre Kontostatistik anzuzeigen?
-		<usetemplate ignoretext="Beim Laden der Kontostatistik-Website" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
-	</notification>
-	<notification name="ClickOpenF1Help">
-		Die Support-Website von [SECOND_LIFE] öffnen?
-		<usetemplate ignoretext="Bei Besuch der [SECOND_LIFE] Support-Website." name="okcancelignore" notext="Abbrechen" yestext="Los"/>
-	</notification>
-	<notification name="ConfirmQuit">
-		Wirklich beenden?
-		<usetemplate ignoretext="Beim Beenden von [APP_NAME]." name="okcancelignore" notext="Weiter" yestext="Beenden"/>
-	</notification>
-	<notification name="HelpReportAbuseEmailLL">
-		Verwenden Sie dieses Tool, um Verletzungen der Servicebedingungen und Community-Standards zu melden. Siehe:
-
-http://secondlife.com/corporate/tos.php
-http://secondlife.com/corporate/cs.php
-
-Alle gemeldeten Verletzungen der Servicebedingungen und Community-Standards werden geprüft und geklärt Sie können den Prozess im Incident Report (Vorfallsbericht) verfolgen:
-
-http://secondlife.com/support/incidentreport.php
-	</notification>
-	<notification name="HelpReportAbuseEmailEO">
-		WICHTIG: Diese Meldung wird an den Eigentümer der Region gesendet, in der Sie sich gerade befinden, nicht an Linden Lab.
--
-Als besonderen Service für Einwohner und Besucher übernimmt der Eigentümer dieser Region die Bearbeitung aller anfallenden Meldungen. Von diesem Standort aus eingereichte Meldungen werden nicht von Linden Lab bearbeitet. Der Eigentümer der Region bearbeitet Meldungen auf Grundlage der Richtlinien, die im für diese Region geltenden Grundstücksvertrag festgelegt sind.
-(Den Vertrag können Sie unter „Welt“ &gt; „Land-Info“ einsehen.)
--
-Das Resultat, das sich aus dieser Meldung ergibt, betrifft nur diese Region; der Einwohnerzugang zu anderen Bereichen von [SECOND_LIFE] ist davon nicht betroffen. Nur Linden Lab kann den Zugang zu [SECOND_LIFE] beschränken.
-	</notification>
-	<notification name="HelpReportAbuseSelectCategory">
-		Wählen Sie eine Missbrauchskategorie aus.
-Die Angabe einer Kategorie hilft uns bei der Bearbeitung des Berichts.
-	</notification>
-	<notification name="HelpReportAbuseAbuserNameEmpty">
-		Geben Sie den Namen des Täters ein.
-Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden.
-	</notification>
-	<notification name="HelpReportAbuseAbuserLocationEmpty">
-		Bitte geben Sie den Ort an, an dem der Missbrauch stattgefunden hat.
-Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden.
-	</notification>
-	<notification name="HelpReportAbuseSummaryEmpty">
-		Bitte geben Sie eine Zusammenfassung des Vorfalls ein.
-Eine genaue Zusammenfassung hilft uns, Fälle von Missbrauch zu ahnden.
-	</notification>
-	<notification name="HelpReportAbuseDetailsEmpty">
-		Bitte geben Sie eine ausführliche Beschreibung des Vorfalls ein.
-Eine möglichst genaue Beschreibung mit Namen und Einzelheiten hilft uns, Fälle von Missbrauch zu ahnden.
-	</notification>
-	<notification name="HelpReportAbuseContainsCopyright">
-		Sehr geehrte(r) Einwohner(in),
-
-Sie melden eine Urheberrechtsverletzung. Sind Sie wirklich sicher, dass Sie eine Verletzung des Urheberrechts melden möchten?
-
-1. Missbrauch melden. Wenn Sie der Meinung sind, ein Einwohner nutzt das Berechtigungssystem von [SECOND_LIFE] auf unerlaubte Weise zu seinem Vorteil aus, indem er zum Beispiel einen CopyBot oder ähnliche Kopiertools verwendet und damit eine Urheberrechtsverletzung begeht, können Sie diesen Missbrauch melden. Das Missbrauchsteam untersucht etwaige Verstöße gegen die [SECOND_LIFE] Community Standards oder die Nutzungsbedingungen und verhängt entsprechende Strafen. Das Missbrauchsteam ist jedoch nicht dafür zuständig, Inhalte aus der [SECOND_LIFE]-Welt zu entfernen und reagiert auch nicht auf entsprechende Anfragen.
-
-2. Der DMCA oder das Entfernen von Inhalten. Sie können das Entfernen von Inhalten aus [SECOND_LIFE] beantragen. Dazu MÜSSEN Sie eine Urheberrechtsverletzung gemäß den in unserer DMCA-Richtlinie unter http://secondlife.com/corporate/dmca.php dargelegten Anweisungen einreichen.
-
-Wenn Sie mit der Missbrauchmeldung jetzt fortfahren möchten, schließen Sie bitte dieses Fenster und senden Sie Ihren Bericht ein.  Möglicherweise müssen Sie Kategorie „CopyBot oder Berechtigungs-Exploit“ auswählen.
-
-Vielen Dank,
-
-Linden Lab
-	</notification>
-	<notification name="FailedRequirementsCheck">
-		Die folgenden erforderlichen Komponenten fehlen in [FLOATER]:
-[COMPONENTS]
-	</notification>
-	<notification label="Vorhandenen Anhang ersetzen" name="ReplaceAttachment">
-		An dieser Körperstelle ist bereits ein Objekt angebracht.
-Möchten Sie es mit dem ausgewählten Objekt ersetzen?
-		<form name="form">
-			<ignore name="ignore" save_option="true" text="Beim Wechseln von Anhängen"/>
-			<button ignore="Automatisch ersetzen" name="Yes" text="OK"/>
-			<button ignore="Nie ersetzen" name="No" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification label="Beschäftigt-Modus-Warnung" name="BusyModePay">
-		Sie sind im Beschäftigt-Modus, sodass Sie im Austausch für diese Zahlung keine Objekte erhalten können.
-
-Möchten Sie den Bechäftigt-Modus verlassen, bevor Sie diese Transaktion abschließen?
-		<form name="form">
-			<ignore name="ignore" save_option="true" text="Beim Bezahlen einer Person oder eines Objekts im Beschäftigt-Modus"/>
-			<button ignore="Beschäftigt-Modus immer deaktivieren" name="Yes" text="OK"/>
-			<button ignore="Beschäftigt-Modus aktiviert lassen" name="No" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="ConfirmEmptyTrash">
-		Möchten Sie den Inhalt Ihres Papierkorbs wirklich löschen?
-		<usetemplate ignoretext="Beim Leeren des Inventar-Papierkorbs" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmClearBrowserCache">
-		Möchten Sie Ihren Browser-Cache wirklich leeren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
-	</notification>
-	<notification name="ConfirmClearCookies">
-		Sind Sie sicher, dass Sie Ihre Cookies löschen möchten?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
-	</notification>
-	<notification name="ConfirmClearMediaUrlList">
-		Die Liste mit gespeicherten URLs wirklich löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
-	</notification>
-	<notification name="ConfirmEmptyLostAndFound">
-		Möchten Sie den Inhalt Ihres Fundstücke-Ordners wirklich permanent löschen?
-		<usetemplate ignoretext="Beim Leeren von Inventar und Fundstückeordner-" name="okcancelignore" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="CopySLURL">
-		Die folgende SLurl wurde in die Zwischenablage kopiert:
- [SLURL]
-
-Veröffentlichen Sie sie auf einer Website, um anderen den Zugang zu diesem Ort zu erleichtern, oder testen Sie sie, indem Sie sie in die Adressleiste Ihres Browsers kopieren.
-		<form name="form">
-			<ignore name="ignore" text="Beim Kopieren einer SLurl in die Zwischenablage"/>
-		</form>
-	</notification>
-	<notification name="GraphicsPreferencesHelp">
-		Die Optionen in diesem Dialog steuern Fenstergröße und Auflösung sowie die Qualität der Grafikdarstellung im Client.  Im Fenster „Einstellungen“ &gt; „Grafik“ stehen vier Grafikeinstellungen zur Wahl: Niedrig, Mittel, Hoch und Ultra. Die Grafikeinstellungen lassen sich auch individuell anpassen; aktivieren Sie das Kontrollkästchen „Benutzerdefiniert“, um die folgenden Einstellungen zu bearbeiten:
-
-Shader: Aktivieren oder deaktivieren Sie die verschiedenen Pixel-Shader.
-
-Spiegelung: Legen Sie hier fest, welche Objekte sich in Wasser spiegeln.
-
-Avatar-Darstellung: Einige Optionen, die über die Darstellung Ihres Avatars bestimmen.
-
-Sichtweite: Legt fest, bis zu welcher Entfernung von Ihrem Avatar die Objekte in der Szene berechnet und dargestellt werden.
-
-Max. Partikelzahl: Legt fest, wie viele Partikel gleichzeitig berechnet und angezeigt werden.
-
-Post-Processing-Qualität: Legt fest, mit welcher Auflösung der Glüheffekt berechnet wird.
-
-Gitterdetails: Legt den Detailgrad bzw. die Anzahl an Dreiecken bei der Berechnung bestimmter Objekte fest. Höhere Werte führen zu einer genaueren Darstellung, dauern aber länger in der Berechnung.
-
-Beleuchtungsdetails: Legt fest, welche Lichtquellen berechnet werden.
-
-Terraindetails: Legt den Detailgrad bei der Berechnung der Terraintextur fest.
-	</notification>
-	<notification name="WLSavePresetAlert">
-		Die gespeicherte Voreinstellung überschreiben?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="WLDeletePresetAlert">
-		[SKY] löschen?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="WLNoEditDefault">
-		Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
-	</notification>
-	<notification name="WLMissingSky">
-		Diese Tageszyklusdatei verweist auf eine fehlende Himmel-Datei: [SKY].
-	</notification>
-	<notification name="PPSaveEffectAlert">
-		Post-Processing-Effekt bereits vorhanden. Möchten Sie ihn überschreiben?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="HelpEditSky">
-		Verschieben Sie die WindLight-Regler, um verschiedene Himmelsansichten zu erstellen und zu speichern.
-	</notification>
-	<notification name="HelpEditDayCycle">
-		Wählen Sie für jede Tageszeit eine Himmelsansicht aus.
-	</notification>
-	<notification name="EnvSettingsHelpButton">
-		Diese Einstellungen haben Auswirkung auf die lokale Darstellung der Umwelt auf Ihrem Computer. Zugriff auf alle Einstellungen haben Sie nur, wenn Ihre Grafikkarte Atmosphären-Shader unterstützt.
-
-Mit dem Regler „Tageszeit“ stellen Sie die lokal in Ihrem Viewer dargestellte Tageszeit ein.
-
-Mit dem Regler „Wolkendecke“ steuern Sie die Wolkendichte am Himmel.
-
-Unter „Wasserfarbe“ können Sie eine Farbe für die Wasserdarstellung auswählen.
-
-Mit dem Regler „Wassertrübung“ steuern Sie die Sichtweite unter Wasser.
-
-Klicken Sie auf „Grundstückszeit verw.“, um die aktuelle Zeit in der Region fest als Tageszeit einzustellen.
-
-Klicken Sie auf „Himmel (erweitert)“, um einen Editor mit erweiterten Einstellungen für die Himmeldarstellung anzuzeigen.
-
-Klicken Sie auf „Wasser (erweitert)“, um einen Editor mit erweiterten Einstellungen für die Wasserdarstellung anzuzeigen.
-	</notification>
-	<notification name="HelpDayCycle">
-		Im Tageszyklus-Editor steuern Sie den Tag-/Nachtzyklus am [SECOND_LIFE] Himmel. Dabei handelt es sich um den Zyklus, der mit dem Tageszeit-Regler im Umwelt-Basiseditor gesteuert wird.
-
-Der Tageszyklus-Editor verwendet sogenannte Keyframes zur Steuerung des Tag-/Nachtablaufs. Dabei handelt es sich um „Schlüsselbilder“ (die grauen Kreise auf der Zeitskala), für die bestimmte Himmelseinstellungen definiert wurden. Bei voranschreitender Tageszeit interpoliert WindLight den Übergang zwischen diesen Keyframes und erzeugt eine entsprechende Himmelsanimation.
-
-Der gelbe Pfeil über der Zeitskala repräsentiert die aktuelle Tageszeit-Darstellung. Ziehen Sie den Pfeil, um die Tagesanimation anzuzeigen. Mit „Key hinzu“ und „Key löschen“ rechts neben der Zeitskala können Sie neue Keys einfügen und vorhandene löschen.
-
-Keyframes lassen sich einfach entlang der Zeitskala verschieben, oder Sie geben die Werte manuell unter „Keyframe-Einstellungen“ ein. Hier wählen Sie auch eine WindLight-Voreinstellung für den Keyframe aus.
-
-„Zykluslänge“ bestimmt die Gesamtlänge eines „Tages“. Ein niedriger Wert (z.B. 2 Minuten) führt dazu, dass ein ganzer 24-Stunden-Tag innerhalb von zwei Minuten Echtzeit abgespult wird! Wenn Sie alle Einstellungen auf der Zeitskala und für die einzelnen Keyframes vorgenommen haben, können Sie mit „Start“ und „Stopp“ die Animation anzeigen. Das funktioniert natürlich genauso interaktiv, indem Sie den gelben Pfeil über der Zeitskala verschieben. Mit der Schaltfläche „Grundstückszeit verw.“ synchronisieren Sie die Tageszeit und -länge mit den auf dem Grundstück geltenden Einstellungen.
-
-Ihre Tageszyklus-Einstellungen lassen sich mit den Schaltflächen „Testtag speichern“ und „Testtag laden“ speichern bzw. laden. Bis dato kann nur ein Tageszyklus gleichzeitig in Verwendung sein.
-	</notification>
-	<notification name="HelpBlueHorizon">
-		Mit den Reglern für Rot/Grün/Blau (RGB) steuern Sie die Farbe des Himmels. Verwenden Sie den Intensitätsregler (I), um alle drei RGB-Regler gleichzeitig zu verschieben.
-	</notification>
-	<notification name="HelpHazeHorizon">
-		Horizonttrübung ist einer der wichtigsten Parameter, um die Gesamtlichtsituation in der Szene zu steuern.  Damit lassen sich viele Belichtungseinstellungen simulieren, z.B. ein Überstrahlen durch die Sonne oder starker Dunst.
-	</notification>
-	<notification name="HelpBlueDensity">
-		Farbintensität steuert die Gesamtfarbsättigung von Himmel und Nebel. Je weiter Sie den Intensitätsregler (I) nach rechts verschieben, desto heller und lebendiger werden die Farben. Wenn Sie ihn ganz nach links verschieben, verlieren die Farben an Intensität und gehen in Schwarz oder Weiß über. Volle Kontrolle über die Farbsättigung des Himmels bieten ihnen die Regler für Rot/Grün/Blau (RGB).
-	</notification>
-	<notification name="HelpHazeDensity">
-		Trübungsintensität steuert die Stärke des grauen Dunsts in der Atmosphäre.  Damit lassen sich zum Beispiel starker Rauch oder Luftverschmutzung simulieren.  Auch für Nebel und Sprühregen geeignet.
-	</notification>
-	<notification name="HelpDensityMult">
-		Der Dichtemultiplikator beeinflusst die Gesamtdichte der Atmosphäre. Niedrige Einstellungen erzeugen den Eindruck dünner, sauberer Luft, hohe Einstellungen erzeugen den Eindruck schweren Smogs.
-	</notification>
-	<notification name="HelpDistanceMult">
-		Steuert die Entfernungswirkung von WindLight.  Ein Wert von Null schaltet den Einfluss von WindLight auf Terrain und Objekte praktisch aus.  Werte über 1 simulieren größere Entfernungen und verstärken den Atmosphäreneffekt.
-	</notification>
-	<notification name="HelpMaxAltitude">
-		Max. Höhe steuert die Höhenberechnungen von WindLight bei der Berechnung der atmosphärischen Beleuchtung. Zu späteren Tageszeiten lässt sich damit zum Beispiel die „Intensität“ des Sonnenuntergangs beeinflussen.
-	</notification>
-	<notification name="HelpSunlightColor">
-		Steuert Farbe und Intensität von direktem Licht in der Szene.
-	</notification>
-	<notification name="HelpSunAmbient">
-		Steuert Farbe und Intensität von atmosphärischem Umgebungslicht in der Szene.
-	</notification>
-	<notification name="HelpSunGlow">
-		Der Regler „Größe“ steuert die Größe der Sonne.
-Der Regler „Fokus“ steuert, wie unscharf die Sonne am Himmel erscheint.
-	</notification>
-	<notification name="HelpSceneGamma">
-		Regelt den Hell/Dunkel-Wert des Bildschirms.
-	</notification>
-	<notification name="HelpStarBrightness">
-		Regelt die Helligkeit der Sterne am Himmel.
-	</notification>
-	<notification name="HelpTimeOfDay">
-		Steuert die Sonnenstellung am Himmel.
-Entspricht der Elevation.
-	</notification>
-	<notification name="HelpEastAngle">
-		Steuert die Sonnenstellung am Himmel.
-Entspricht dem Azimut.
-	</notification>
-	<notification name="HelpCloudColor">
-		Steuert die Wolkenfarbe. Generell empfiehlt sich hier ein Weißton, aber hey, warum nicht ein bisschen Spaß haben?
-	</notification>
-	<notification name="HelpCloudDetail">
-		Steuert das Detailbild, welches über das Wolken-Hauptbild gelegt wird.  X und Y bestimmen seine Position.  D (Dichte) regelt, wie ausgebeult oder zerrissen die Wolken wirken.
-	</notification>
-	<notification name="HelpCloudDensity">
-		Mit den X- und Y-Reglern steuern Sie die Position der Wolken, mit dem Regler D die Wolkendichte.
-	</notification>
-	<notification name="HelpCloudCoverage">
-		Steuert, wie stark die Wolken den Himmel bedecken.
-	</notification>
-	<notification name="HelpCloudScale">
-		Steuert die Skalierung des Wolkenbilds auf der Himmelskuppel.
-	</notification>
-	<notification name="HelpCloudScrollX">
-		Steuert die Bewegungsgeschwindigkeit der Wolken in X-Richtung.
-	</notification>
-	<notification name="HelpCloudScrollY">
-		Steuert die Bewegungsgeschwindigkeit der Wolken in Y-Richtung.
-	</notification>
-	<notification name="HelpClassicClouds">
-		Aktivieren Sie dieses Kontrollkästchen, um die Darstellung der klassischen [SECOND_LIFE] Wolken zusätzlich zu den WindLight-Wolken zu erzwingen.
-	</notification>
-	<notification name="HelpWaterFogColor">
-		Steuert die Farbe der Wassertrübung
-	</notification>
-	<notification name="HelpWaterFogDensity">
-		Steuert die Dichte der Wassertrübung und wie weit Sie unter Wasser sehen können.
-	</notification>
-	<notification name="HelpUnderWaterFogMod">
-		Beeinflusst die Auswirkung des Wassertrübungs-Exponenten und regelt die Sichtweite Ihres Avatars unter Wasser.
-	</notification>
-	<notification name="HelpWaterGlow">
-		Steuert, wie groß der Anteil der leuchtenden Wasseroberfläche ist.
-	</notification>
-	<notification name="HelpWaterNormalScale">
-		Steuert die Skalierung der drei Elementarwellen, die das Wasser ausmachen.
-	</notification>
-	<notification name="HelpWaterFresnelScale">
-		Steuert die winkelabhängige Lichtreflexion.
-	</notification>
-	<notification name="HelpWaterFresnelOffset">
-		Steuert die Intensität des reflektierten Lichts.
-	</notification>
-	<notification name="HelpWaterScaleAbove">
-		Steuert die Stärke der Lichtbrechung von oberhalb der Wasseroberfläche aus gesehen.
-	</notification>
-	<notification name="HelpWaterScaleBelow">
-		Steuert die Stärke der Lichtbrechung von unterhalb der Wasseroberfläche aus gesehen.
-	</notification>
-	<notification name="HelpWaterBlurMultiplier">
-		Steuert die Mischung von Wellen und Reflexionen.
-	</notification>
-	<notification name="HelpWaterNormalMap">
-		Ermöglicht die Auswahl einer Normal-Map zur Berechnung von Reflexionen/Brechungen auf dem Wasser.
-	</notification>
-	<notification name="HelpWaterWave1">
-		Steuert die Bewegungsgeschwindigkeit und -richtung der großen Normal-Map-Version in X- und Y-Richtung.
-	</notification>
-	<notification name="HelpWaterWave2">
-		Steuert die Bewegungsgeschwindigkeit und -richtung der kleinen Normal-Map-Version in X- und Y-Richtung.
-	</notification>
-	<notification name="NewSkyPreset">
-		Wählen Sie einen Namen für den neuen Himmel.
-		<form name="form">
-			<input name="message">
-				Neue Voreinstellung
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="ExistsSkyPresetAlert">
-		Voreinstellung bereits vorhanden!
-	</notification>
-	<notification name="NewWaterPreset">
-		Wählen Sie einen Namen für die neue Wasservoreinstellung.
-		<form name="form">
-			<input name="message">
-				Neue Voreinstellung
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="ExistsWaterPresetAlert">
-		Voreinstellung bereits vorhanden!
-	</notification>
-	<notification name="WaterNoEditDefault">
-		Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
-	</notification>
-	<notification name="ChatterBoxSessionStartError">
-		Neue Chat-Sitzung mit [RECIPIENT] konnte nicht gestartet werden.
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ChatterBoxSessionEventError">
-		[EVENT]
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ForceCloseChatterBoxSession">
-		Ihre Chat-Sitzung mit [NAME] muss beendet werden.
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="Cannot_Purchase_an_Attachment">
-		Objekte können nicht gekauft werden, solange sie Teil eines Anhangs sind.
-	</notification>
-	<notification label="Info zur Abfrage der Abbucherlaubnis" name="DebitPermissionDetails">
-		Wenn Sie dieser Anfrage zustimmen, erhält das Skript die Erlaubnis, regelmäßig Linden-Dollar (L$) von Ihrem Konto abzubuchen. Diese Erlaubnis kann nur zurückgezogen werden, wenn der Eigentümer das Objekt löscht oder die Skripts in dem Objekt zurücksetzt.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="AutoWearNewClothing">
-		Möchten Sie das neu erstellte Kleidungsstück automatisch anziehen?
-		<usetemplate ignoretext="Neue Kleidung automatisch tragen" name="okcancelignore" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="NotAgeVerified">
-		Um Zugang zu dieser Parzelle zu erhalten, müssen Sie sich einer Altersprüfung unterziehen.
-Möchten Sie auf der [SECOND_LIFE] Website eine Altersüberprüfung durchführen?
-
-[_URL]
-		<url name="url" option="0">
-			https://secondlife.com/account/verification.php?lang=de
-		</url>
-		<usetemplate ignoretext="Auf fehlende Altersprüfung aufmerksam machen" name="okcancelignore" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="Cannot enter parcel: no payment info on file">
-		Um Zugang zu dieser Parzelle zu erhalten, müssen Sie Zahlungsinformationen hinterlegt haben.
-Möchten Sie die [SECOND_LIFE] Website öffnen, um diese Angaben zu hinterlegen?
-
-[_URL]
-		<url name="url" option="0">
-			https://secondlife.com/account/index.php?lang=de
-		</url>
-		<usetemplate ignoretext="Auf fehlende Zahlungsinformationen aufmerksam machen" name="okcancelignore" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="MissingString">
-		Der String „[STRING_NAME]“ fehlt in strings.xml
-	</notification>
-	<notification name="SystemMessageTip">
-		[MESSAGE]
-	</notification>
-	<notification name="Cancelled">
-		Abgebrochen
-	</notification>
-	<notification name="CancelledSit">
-		Sitzen beendet
-	</notification>
-	<notification name="CancelledAttach">
-		Anhängen abgebrochen
-	</notification>
-	<notification name="ReplacedMissingWearable">
-		Fehlende(s) Kleidung/Körperteil mit Standard ersetzt.
-	</notification>
-	<notification name="GroupNotice">
-		Betreff: [SUBJECT], Nachricht: [MESSAGE]
-	</notification>
-	<notification name="FriendOnline">
-		[FIRST] [LAST] ist online
-	</notification>
-	<notification name="FriendOffline">
-		[FIRST] [LAST] ist offline
-	</notification>
-	<notification name="AddSelfFriend">
-		Sie können sich nicht selbst als Freund hinzufügen.
-	</notification>
-	<notification name="UploadingAuctionSnapshot">
-		In-Welt- und Website-Fotos werden hochgeladen...
-(Dauert ca. 5 Minuten.)
-	</notification>
-	<notification name="UploadPayment">
-		Sie haben für das Hochladen [AMOUNT] L$ bezahlt.
-	</notification>
-	<notification name="UploadWebSnapshotDone">
-		Das Website-Foto wurde hochgeladen.
-	</notification>
-	<notification name="UploadSnapshotDone">
-		In-Welt-Foto hochgeladen
-	</notification>
-	<notification name="TerrainDownloaded">
-		Terrain.raw heruntergeladen
-	</notification>
-	<notification name="GestureMissing">
-		Geste [NAME] fehlt in Datenbank.
-	</notification>
-	<notification name="UnableToLoadGesture">
-		Geste [NAME] konnte nicht geladen werden.
-Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="LandmarkMissing">
-		Landmarke fehlt in Datenbank.
-	</notification>
-	<notification name="UnableToLoadLandmark">
-		Landmarke konnte nicht geladen werden.  Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="CapsKeyOn">
-		Die Feststelltaste ist aktiv.
-Da dies Auswirkung auf die Kennworteingabe hat, sollten Sie die Taste besser ausschalten.
-	</notification>
-	<notification name="NotecardMissing">
-		Notizkarte fehlt in Datenbank.
-	</notification>
-	<notification name="NotecardNoPermissions">
-		Unzureichende Rechte zur Anzeige der Notizkarte.
-	</notification>
-	<notification name="RezItemNoPermissions">
-		Keine Berechtigung zum Rezzen von Objekten.
-	</notification>
-	<notification name="UnableToLoadNotecard">
-		Notizkarten-Asset konnte nicht geladen werden.
-	</notification>
-	<notification name="ScriptMissing">
-		Skript fehlt in Datenbank.
-	</notification>
-	<notification name="ScriptNoPermissions">
-		Unzureichende Rechte zur Anzeige des Skripts.
-	</notification>
-	<notification name="UnableToLoadScript">
-		Skript konnte nicht geladen werden.  Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="IncompleteInventory">
-		Die von Ihnen angebotenen Inhalte sind noch nicht vollständig lokal verfügbar. Warten Sie kurz und wiederholen Sie dann das Angebot.
-	</notification>
-	<notification name="CannotModifyProtectedCategories">
-		Geschützte Kategorien können nicht geändert werden.
-	</notification>
-	<notification name="CannotRemoveProtectedCategories">
-		Geschützte Kategorien können nicht entfernt werden.
-	</notification>
-	<notification name="OfferedCard">
-		Sie haben [FIRST] [LAST] eine Visitenkarte angeboten.
-	</notification>
-	<notification name="UnableToBuyWhileDownloading">
-		Kauf nicht möglich. Objektdaten werden noch geladen.
-Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="UnableToLinkWhileDownloading">
-		Verknüpfung nicht möglich. Objektdaten werden noch geladen.
-Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="CannotBuyObjectsFromDifferentOwners">
-		Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden.
-Wählen Sie ein einzelnes Objekt aus.
-	</notification>
-	<notification name="ObjectNotForSale">
-		Objekt ist nicht zu verkaufen.
-	</notification>
-	<notification name="EnteringGodMode">
-		Gott-Modus aktiviert, Level [LEVEL]
-	</notification>
-	<notification name="LeavingGodMode">
-		Gott-Modus deaktiviert, Level [LEVEL]
-	</notification>
-	<notification name="CopyFailed">
-		Kopieren aufgrund fehlender Kopierrechte fehlgeschlagen
-	</notification>
-	<notification name="InventoryAccepted">
-		[NAME] hat Ihr Inventarangebot akzeptiert.
-	</notification>
-	<notification name="InventoryDeclined">
-		[NAME] hat Ihr Inventarangebot abgelehnt.
-	</notification>
-	<notification name="ObjectMessage">
-		[NAME]: [MESSAGE]
-	</notification>
-	<notification name="CallingCardAccepted">
-		Ihre Visitenkarte wurde akzeptiert.
-	</notification>
-	<notification name="CallingCardDeclined">
-		Ihre Visitenkarte wurde abgelehnt.
-	</notification>
-	<notification name="TeleportToLandmark">
-		Jetzt, nachdem Sie das Mainland erreicht haben, können Sie sich an Positionen wie „[NAME]“ teleportieren, indem Sie unten rechts im Fenster auf „Inventar“ klicken und den Ordner „Landmarken“ auswählen.
-Klicken Sie eine Landmarke doppelt an und wählen Sie „Teleportieren“, um an diesen Ort zu gelangen.
-	</notification>
-	<notification name="TeleportToPerson">
-		Jetzt, nachdem Sie das Mainland erreicht haben, können Sie mit Einwohnern wie „[NAME]“ Kontakt aufnehmen, indem Sie unten rechts im Fenster auf „Inventar“ klicken und den Ordner „Visitenkarten“ auswählen.
-Klicken Sie die Karte doppelt an, wählen Sie „Instant Message“ und geben Sie eine Nachricht ein.
-	</notification>
-	<notification name="CantSelectLandFromMultipleRegions">
-		Land kann nicht über Servergrenzen hinweg ausgewählt werden.
-Wählen Sie eine kleinere Landfläche.
-	</notification>
-	<notification name="SearchWordBanned">
-		Einige Begriffe in Ihrer Suchanfrage wurden ausgeschlossen, aufgrund von in den Community Standards definierten Inhaltsbeschränkungen.
-	</notification>
-	<notification name="NoContentToSearch">
-		Bitte wählen Sie mindestens eine Inhaltsart für die Suche aus (PG, Mature oder Adult).
-	</notification>
-	<notification name="GroupVote">
-		[NAME] hat eine Abstimmung vorgeschlagen über:
-[MESSAGE]
-		<form name="form">
-			<button name="VoteNow" text="Abstimmen"/>
-			<button name="Later" text="Später"/>
-		</form>
-	</notification>
-	<notification name="SystemMessage">
-		[MESSAGE]
-	</notification>
-	<notification name="EventNotification">
-		Event-Benachrichtigung:
-
-[NAME]
-[DATE]
-		<form name="form">
-			<button name="Teleport" text="Teleportieren"/>
-			<button name="Description" text="Beschreibung"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="TransferObjectsHighlighted">
-		Alle Objekte auf dieser Parzelle, die an den Käufer der Parzelle übertragen werden, sind jetzt markiert.
-
-* Übertragene Bäume und Gräser sind nicht markiert.
-		<form name="form">
-			<button name="Done" text="Fertig"/>
-		</form>
-	</notification>
-	<notification name="DeactivatedGesturesTrigger">
-		Gesten mit demselben Trigger wurden deaktiviert:
-[NAMES]
-	</notification>
-	<notification name="NoQuickTime">
-		Apple QuickTime ist auf Ihrem System anscheinend nicht installiert.
-Laden Sie QuickTime von der QuickTime-Webseite (http://www.apple.com/de/quicktime) herunter, um auf Parzellen, die diese Funktion unterstützen, Streaming-Inhalte wiederzugeben.
-	</notification>
-	<notification name="OwnedObjectsReturned">
-		Ihre Objekte auf der ausgewählten Parzelle wurden in Ihr Inventar transferiert.
-	</notification>
-	<notification name="OtherObjectsReturned">
-		Die Objekte von [FIRST] [LAST] auf dieser Parzelle wurden in das Inventar dieser Person transferiert.
-	</notification>
-	<notification name="OtherObjectsReturned2">
-		Die Objekte von [FIRST] [LAST] auf dieser
-Parzelle von „[NAME]“ wurden an ihren Eigentümer zurückgegeben.
-	</notification>
-	<notification name="GroupObjectsReturned">
-		Die mit der Gruppe [GROUPNAME] gemeinsam genutzten Objekte auf dieser Parzelle wurden in das Inventar ihrer Eigentümer transferiert.
-Transferierbare übertragene Objekte wurden an ihre früheren Eigentümer zurückgegeben.
-Nicht transferierbare an die Gruppe übertragene Objekte wurden gelöscht.
-	</notification>
-	<notification name="UnOwnedObjectsReturned">
-		Alle Objekte auf der ausgewählten Parzelle, die NICHT Ihnen gehören, wurden ihren Eigentümern zurückgegeben.
-	</notification>
-	<notification name="NotSafe">
-		Auf diesem Land ist Schaden aktiviert („Unsicher“).
-Verletzungen sind möglich. Wenn Sie sterben, werden Sie zu Ihrem Heimatstandort teleportiert.
-	</notification>
-	<notification name="NoFly">
-		Auf diesem Land ist Fliegen deaktiviert („Fliegen aus“).
-Fliegen ist hier nicht möglich.
-	</notification>
-	<notification name="PushRestricted">
-		Auf diesem Land gilt „Kein Stoßen“.
-Sie können keine anderen Personen stoßen, außer Ihnen gehört das Land.
-	</notification>
-	<notification name="NoVoice">
-		Auf diesem Land ist Voice deaktiviert.
-	</notification>
-	<notification name="NoBuild">
-		Auf diesem Land ist Bauen deaktiviert („Bauen aus“).
-Sie können hier keine Objekte erstellen.
-	</notification>
-	<notification name="ScriptsStopped">
-		Ein Administrator hat die Skriptausführung in dieser Region vorübergehend deaktiviert.
-	</notification>
-	<notification name="ScriptsNotRunning">
-		In dieser Region werden keine Skipts ausgeführt.
-	</notification>
-	<notification name="NoOutsideScripts">
-		Auf diesem Land sind externe Skripts deaktiviert
-(„Externe Skripts aus“).
-Nur Skripts, die dem Landeigentümer gehören, funktionieren.
-	</notification>
-	<notification name="ClaimPublicLand">
-		Öffentliches Land kann nur in der Region in Besitz genommen werden, in der Sie sich befinden.
-	</notification>
-	<notification name="RegionTPAccessBlocked">
-		Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Sie müssen eventuell eine Altersüberprüfung vornehmen und/oder den aktuellsten Viewer installieren.
-
-Bitte besuchen Sie unsere Knowledgebase, um mehr Details über Zugang zu Regionen mit dieser Alterseinstufung zu erhalten.
-	</notification>
-	<notification name="URBannedFromRegion">
-		Sie dürfen diese Region nicht betreten.
-	</notification>
-	<notification name="NoTeenGridAccess">
-		Ihr Konto kann keine Verbindung zu dieser Teen Grid-Region herstellen.
-	</notification>
-	<notification name="NoHelpIslandTP">
-		Sie können nicht zurück nach Help Island teleportieren. 
-Gehen Sie zu „Help Island Public“ und wiederholen sie das Tutorial.
-	</notification>
-	<notification name="ImproperPaymentStatus">
-		Die für den Zutritt zu dieser Region erforderlichen Zahlungsinformationen liegen nicht vor.
-	</notification>
-	<notification name="MustGetAgeRegion">
-		Sie müssen alterüberprüft sein, um diese Region betreten zu können.
-	</notification>
-	<notification name="MustGetAgeParcel">
-		Sie müssen alterüberprüft sein, um diese Parzelle betreten zu können.
-	</notification>
-	<notification name="NoDestRegion">
-		Keine Zielregion gefunden.
-	</notification>
-	<notification name="NotAllowedInDest">
-		Der Zutritt wurde Ihnen verweigert.
-	</notification>
-	<notification name="RegionParcelBan">
-		Diese Parzelle ist abgesperrt und kann nicht überquert werden. Versuchen Sie einen anderen Weg.
-	</notification>
-	<notification name="TelehubRedirect">
-		Sie wurden zu einem Telehub umgeleitet.
-	</notification>
-	<notification name="CouldntTPCloser">
-		Ein Teleport näher am Ziel ist leider nicht möglich.
-	</notification>
-	<notification name="TPCancelled">
-		Teleport abgebrochen.
-	</notification>
-	<notification name="FullRegionTryAgain">
-		Die Region, die Sie betreten möchten, ist im Moment voll.
-Versuchen Sie es in einigen Minuten erneut.
-	</notification>
-	<notification name="GeneralFailure">
-		Allgemeiner Fehler.
-	</notification>
-	<notification name="RoutedWrongRegion">
-		In falsche Region umgeleitet.  Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="NoValidAgentID">
-		Keine gültige Agent ID.
-	</notification>
-	<notification name="NoValidSession">
-		Keine gültige Sitzungs-ID.
-	</notification>
-	<notification name="NoValidCircuit">
-		Kein gültiger Verbindungscode.
-	</notification>
-	<notification name="NoValidTimestamp">
-		Kein gültiger Zeitstempel.
-	</notification>
-	<notification name="NoPendingConnection">
-		Verbindung kann nicht hergestellt werden.
-	</notification>
-	<notification name="InternalUsherError">
-		Interner Fehler beim Versuch, Verbindung mit Agent Usher herzustellen.
-	</notification>
-	<notification name="NoGoodTPDestination">
-		In dieser Region konnte kein gültiges Teleportziel gefunden werden.
-	</notification>
-	<notification name="InternalErrorRegionResolver">
-		Interner Fehler bei Teleport.
-	</notification>
-	<notification name="NoValidLanding">
-		Ein gültiger Landpunkt konnte nicht gefunden werden.
-	</notification>
-	<notification name="NoValidParcel">
-		Es konnte keine gültige Parzelle gefunden werden.
-	</notification>
-	<notification name="ObjectGiveItem">
-		Das Objekt [OBJECTFROMNAME] von [FIRST] [LAST] hat Ihnen Folgendes übergeben: [OBJECTTYPE] ([OBJECTNAME]).
-		<form name="form">
-			<button name="Keep" text="Behalten"/>
-			<button name="Discard" text="Verwerfen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="ObjectGiveItemUnknownUser">
-		Das Objekt [OBJECTFROMNAME] von (unbekannt) hat Ihnen Folgendes übergeben: [OBJECTTYPE] ([OBJECTNAME]).
-		<form name="form">
-			<button name="Keep" text="Behalten"/>
-			<button name="Discard" text="Verwerfen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="UserGiveItem">
-		[NAME] hat Ihnen ein [OBJECTTYPE] namens „[OBJECTNAME]“ gegeben.
-		<form name="form">
-			<button name="Keep" text="Behalten"/>
-			<button name="Discard" text="Verwerfen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="GodMessage">
-		[NAME]
-[MESSAGE]
-	</notification>
-	<notification name="JoinGroup">
-		[MESSAGE]
-		<form name="form">
-			<button name="Join" text="Beitreten"/>
-			<button name="Decline" text="Ablehnen"/>
-			<button name="Info" text="Info"/>
-		</form>
-	</notification>
-	<notification name="TeleportOffered">
-		[NAME] hat angeboten, Sie zu ihrem/seinem Standort zu teleportieren:
-
-[MESSAGE]
-		<form name="form">
-			<button name="Teleport" text="Teleportieren"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="GotoURL">
-		[MESSAGE]
-[URL]
-		<form name="form">
-			<button name="Later" text="Später"/>
-			<button name="GoNow..." text="Jetzt gehen..."/>
-		</form>
-	</notification>
-	<notification name="OfferFriendship">
-		[NAME] bietet Ihnen die Freundschaft an.
-
-[MESSAGE]
-
-(Standardmäßig werden Sie gegenseitig ihren Online-Status sehen können.)
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-		</form>
-	</notification>
-	<notification name="OfferFriendshipNoMessage">
-		[NAME] bietet Ihnen die Freundschaft an.
-
-(Sie werden dadurch den gegenseitigen Online-Status sehen können.)
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-		</form>
-	</notification>
-	<notification name="FriendshipAccepted">
-		[NAME] hat Ihr Freundschaftsangebot akzeptiert.
-	</notification>
-	<notification name="FriendshipDeclined">
-		[NAME] hat Ihr Freundschaftsangebot abgelehnt.
-	</notification>
-	<notification name="OfferCallingCard">
-		[FIRST] [LAST] bietet Ihnen eine Visitenkarte an.
-Dies erstellt ein Lesezeichen in Ihrem Inventar, damit Sie diesen Einwohner jederzeit über IM erreichen.
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-		</form>
-	</notification>
-	<notification name="RegionRestartMinutes">
-		Region wird in [MINUTES] Minuten neu gestartet.
-Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
-	</notification>
-	<notification name="RegionRestartSeconds">
-		Region wird in [SECONDS] Sekunden neu gestartet.
-Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
-	</notification>
-	<notification name="LoadWebPage">
-		Webseite [URL] laden?
-
-[MESSAGE]
-
-Von Objekt: [OBJECTNAME], Eigentümer: [NAME]?
-		<form name="form">
-			<button name="Gotopage" text="Zur Seite"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="FailedToFindWearableUnnamed">
-		[TYPE] nicht in Datenbank.
-	</notification>
-	<notification name="FailedToFindWearable">
-		[TYPE] namens [DESC] nicht in Datenbank.
-	</notification>
-	<notification name="InvalidWearable">
-		Dieser Artikel verwendet eine Funktion, die Ihr Viewer nicht unterstützt. Bitte aktualisieren Sie Ihre Version von [APP_NAME], um diesen Artikel anziehen zu können.
-	</notification>
-	<notification name="ScriptQuestion">
-		Das Objekt „[OBJECTNAME]“, Eigentum von „[NAME]“, möchte:
-
-[QUESTIONS]
-Ist das OK?
-		<form name="form">
-			<button name="Yes" text="Ja"/>
-			<button name="No" text="Nein"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="ScriptQuestionCaution">
-		Das Objekt „[OBJECTNAME]“, Eigentum von „[NAME]“, möchte:
-
-[QUESTIONS]
-Wenn Sie diesem Objekt und seinem Ersteller nicht vertrauen, sollten Sie diese Anfrage ablehnen. Klicken Sie für weitere Informationen auf „Info...“.
-
-Anfrage gestatten?
-		<form name="form">
-			<button name="Grant" text="Gewähren"/>
-			<button name="Deny" text="Verweigern"/>
-			<button name="Details" text="Info..."/>
-		</form>
-	</notification>
-	<notification name="ScriptDialog">
-		[FIRST] [LAST]s „[TITLE]“
-[MESSAGE]
-		<form name="form">
-			<button name="Ignore" text="Ignorieren"/>
-		</form>
-	</notification>
-	<notification name="ScriptDialogGroup">
-		[GROUPNAME]s „[TITLE]“
-[MESSAGE]
-		<form name="form">
-			<button name="Ignore" text="Ignorieren"/>
-		</form>
-	</notification>
-	<notification name="FirstBalanceIncrease">
-		Sie haben gerade [AMOUNT] L$ erhalten.
-Objekte und andere Benutzer können Ihnen L$ geben.
-Ihren Kontostand sehen Sie in der oberen rechten Ecke des Bildschirms.
-	</notification>
-	<notification name="FirstBalanceDecrease">
-		Sie haben gerade [AMOUNT] L$ bezahlt.
-Ihren Kontostand sehen Sie in der oberen rechten Ecke des Bildschirms.
-	</notification>
-	<notification name="FirstSit">
-		Sie sitzen.
-Benutzen Sie die Pfeil- oder WASD-Tasten, um die Ansicht zu ändern.
-Klicken Sie auf „Aufstehen“, um aufzustehen.
-	</notification>
-	<notification name="FirstMap">
-		Zum Verschieben der Karte klicken und ziehen.
-Zum Teleportieren doppelklicken.
-Nutzen Sie die Optionen links, um Dinge zu finden und um verschiedene Hintergründe anzuzeigen.
-	</notification>
-	<notification name="FirstBuild">
-		In einigen Bereichen von [SECOND_LIFE] können Sie neue Objekte erstellen.
-Verwenden Sie zum Bauen die Werkzeuge oben links.
-Mit den Strg- und Alt-Tasten können Sie schnell zwischen den Werkzeugen umschalten.
-Drücken Sie Esc, um das Bauen abzubrechen.
-	</notification>
-	<notification name="FirstLeftClickNoHit">
-		Die linke Maustaste ermöglicht Objektinteraktionen.
-Der Mauszeiger zeigt eine Hand, wenn Sie
-mit dem Objekt interagieren können.
-Die rechte Maustaste zeigt immer ein Aktionsmenü an.
-	</notification>
-	<notification name="FirstTeleport">
-		Diese Region unterstützt keine direkten Teleports. Sie wurden zum nächstgelegenen Telehub transportiert.
-Ihr Ziel ist mit einem großen roten Strahl markiert. Folgen Sie dem roten Pfeil zum Strahl oder klicken Sie auf den Pfeil, um den Strahl zu entfernen.
-	</notification>
-	<notification name="FirstOverrideKeys">
-		Ihre Bewegungstasten werden jetzt von einem Objekt gesteuert.
-Probieren Sie die Pfeil- oder WASD-Tasten aus.
-Manche Objekte (wie Waffen) müssen per Mouselook gesteuert werden.
-Drücken Sie dazu „M“.
-	</notification>
-	<notification name="FirstAppearance">
-		Sie bearbeiten gerade Ihr Aussehen.
-Benutzen Sie die Pfeiltasten zum Drehen und Zoomen.
-Klicken Sie auf „Alles speichern“, wenn Sie fertig sind, um Ihr Aussehen zu speichern.
-Sie können Ihr Aussehen jederzeit verändern.
-	</notification>
-	<notification name="FirstInventory">
-		Ihr Inventar. Es enthält Objekte, Notizkarten, Kleidung und andere Dinge in Ihrem Besitz.
-* Zum Anziehen eines Objekts oder Outfit-Ordners ziehen Sie es/ihn auf sich.
-* Um ein Objekt in der Welt abzulegen, ziehen Sie es auf den Boden.
-* Zum Lesen einer Notizkarte klicken Sie sie doppelt an.
-	</notification>
-	<notification name="FirstSandbox">
-		Dies ist eine Sandkastenregion.
-Objekte, die Sie hier bauen, können gelöscht werden, wenn Sie das Gebiet verlassen. Sandkästen werden regelmäßig gereinigt. Weitere Informationen hierzu finden Sie oben im Bild neben dem Regionsnamen.
-
-Sandkastenregionen kommen selten vor und sind entsprechend gekennzeichnet.
-	</notification>
-	<notification name="FirstFlexible">
-		Dieses Objekt ist flexibel.
-Ein flexibles Objekt ist ein Phantom und nicht physisch, bis die Option „Flexibel“ deaktiviert wurde.
-	</notification>
-	<notification name="FirstDebugMenus">
-		Sie haben das Advanced-Menü aktiviert.
-Dieses Menü enthält nützliche Funktionen zum Debuggen von [SECOND_LIFE].
-Drücken Sie in Windows Strg+Alt+D (Mac: &#8997;&#8984;D) zum Ein- und Ausschalten dieses Menüs.
-	</notification>
-	<notification name="FirstSculptedPrim">
-		Sie bearbeiten ein geformtes Primitiv.
-Geformte Primitive benötigen eine spezielle Textur, die ihre Form definiert.
-Beispiele für Formtexturen finden Sie in der Inventarbibliothek.
-	</notification>
-	<notification name="FirstMedia">
-		Sie haben die Medienwiedergabe gestartet.  Unter „Audio und Video“ im Fenster „Einstellungen“ können Sie festlegen, dass Medien automatisch wiedergegeben werden. Beachten Sie, dass dies bei nicht vertrauenswürdigen Medienseiten ein Sicherheitsrisiko darstellen kann.
-	</notification>
-	<notification name="MaxListSelectMessage">
-		Sie können maximal [MAX_SELECT] Objekte
-von der Liste auswählen.
-	</notification>
-	<notification name="VoiceInviteP2P">
-		[NAME] lädt Sie zu einem Voice-Chat ein.
-Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Anrufer stumm zu schalten.
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST] hat eine Instant Message erhalten; die Stummschaltung wurde aufgehoben.
-	</notification>
-	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST] hat Geld erhalten; die Stummschaltung wurde aufgehoben.
-	</notification>
-	<notification name="AutoUnmuteByInventory">
-		[FIRST] [LAST] wurde ein Inventarobjekt angeboten; die Stummschaltung wurde aufgehoben.
-	</notification>
-	<notification name="VoiceInviteGroup">
-		[NAME] ist einem Voice-Chat mit der Gruppe [GROUP] beigetreten.
-Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Anrufer stumm zu schalten.
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="VoiceInviteAdHoc">
-		[NAME] ist einem Voice-Konferenz-Chat beigetreten.
-Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Benutzer stumm zu schalten.
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="InviteAdHoc">
-		[NAME] lädt Sie zu einem Konferenz-Chat ein.
-Klicken Sie auf „Akzeptieren“, um dem Chat beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Benutzer stumm zu schalten.
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="VoiceChannelFull">
-		Der Voice-Chat, dem Sie beitreten möchten, [VOICE_CHANNEL_NAME], hat seine maximale Teilnehmerzahl erreicht. Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="ProximalVoiceChannelFull">
-		Es tut uns Leid.  Dieses Gebiet hat seine maximale Kapazität für Voice-Gespräche erreicht.  Bitte versuchen Sie es in einem anderen Gebiet.
-	</notification>
-	<notification name="VoiceChannelDisconnected">
-		Sie haben [VOICE_CHANNEL_NAME] verlassen.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
-	</notification>
-	<notification name="VoiceChannelDisconnectedP2P">
-		[VOICE_CHANNEL_NAME] hat das Gespräch beendet.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
-	</notification>
-	<notification name="P2PCallDeclined">
-		[VOICE_CHANNEL_NAME] hat Ihren Anruf abgelehnt.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
-	</notification>
-	<notification name="P2PCallNoAnswer">
-		[VOICE_CHANNEL_NAME] ist zurzeit nicht erreichbar.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
-	</notification>
-	<notification name="VoiceChannelJoinFailed">
-		Verbindung zu [VOICE_CHANNEL_NAME] nicht möglich. Bitte versuchen Sie es später.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
-	</notification>
-	<notification name="VoiceLoginRetry">
-		Wir erstellen einen Voice-Kanal für Sie. Bitte warten Sie einen Moment.
-	</notification>
-	<notification name="Cannot enter parcel: not a group member">
-		Zugang zur Parzelle verweigert, Sie gehören keiner berechtigten Gruppe an.
-	</notification>
-	<notification name="Cannot enter parcel: banned">
-		Zugang zur Parzelle verweigert. Sie wurden verbannt.
-	</notification>
-	<notification name="Cannot enter parcel: not on access list">
-		Zugang zur Parzelle verweigert. Sie stehen nicht auf der Zugangsliste.
-	</notification>
-	<notification name="VoiceNotAllowed">
-		Sie sind nicht berechtigt, einem Voice-Chat in [VOICE_CHANNEL_NAME] beizutreten.
-	</notification>
-	<notification name="VoiceCallGenericError">
-		Fehler beim Versuch, eine Voice-Chat-Verbindung zu [VOICE_CHANNEL_NAME] herzustellen.  Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="ServerVersionChanged">
-		Die Region, die Sie betreten haben, verwendet eine andere Simulatorversion. Klicken Sie auf diese Nachricht, um weitere Informationen zu erhalten.
-	</notification>
-	<notification name="UnableToOpenCommandURL">
-		Die URL, die Sie angeklickt haben, kann in diesem Web Browser nicht geöffnet werden.
-	</notification>
-	<global name="UnsupportedCPU">
-		- Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen.
-	</global>
-	<global name="UnsupportedGLRequirements">
-		Ihr Computer entspricht nicht den Hardwareanforderungen von [APP_NAME]. [APP_NAME] setzt eine OpenGL-Grafikkarte mit Multitextur-Unterstützung voraus. Falls Ihre Grafikkarte diese Funktion unterstützt, installieren Sie die neuesten Treiber sowie die aktuellen Service Packs und Patches für Ihr Betriebssystem.
-
-Sollte das Problem fortbestehen, finden Sie weitere Hilfestellung unter: http://www.secondlife.com/support
-	</global>
-	<global name="UnsupportedCPUAmount">
-		796
-	</global>
-	<global name="UnsupportedRAMAmount">
-		510
-	</global>
-	<global name="UnsupportedGPU">
-		- Ihre Grafikkarte entspricht nicht den Mindestanforderungen.
-	</global>
-	<global name="UnsupportedRAM">
-		- Ihr Arbeitsspeicher entspricht nicht den Mindestanforderungen.
-	</global>
-	<global name="PermYes">
-		Ja
-	</global>
-	<global name="PermNo">
-		Nein
-	</global>
-</notifications>
+<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+	<global name="skipnexttime">
+		Nicht mehr anzeigen
+	</global>
+	<global name="alwayschoose">
+		Diese Option immer auswählen
+	</global>
+	<global name="implicitclosebutton">
+		Schließen
+	</global>
+	<template name="okbutton">
+		<form>
+			<button name="OK" text="$yestext"/>
+		</form>
+	</template>
+	<template name="okignore"/>
+	<template name="okcancelbuttons">
+		<form>
+			<button name="Cancel" text="$notext"/>
+		</form>
+	</template>
+	<template name="okcancelignore"/>
+	<template name="okhelpbuttons">
+		<form>
+			<button name="Help" text="$helptext"/>
+		</form>
+	</template>
+	<template name="yesnocancelbuttons">
+		<form>
+			<button name="Yes" text="$yestext"/>
+			<button name="No" text="$notext"/>
+		</form>
+	</template>
+	<notification functor="GenericAcknowledge" label="Unbekannter Warnhinweis" name="MissingAlert">
+		Ihre Version von [APP_NAME] kann den gerade empfangenen Warnhinweis nicht anzeigen.  Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben.
+
+Fehlerdetails: Der Warnhinweis &apos;[_NAME]&apos; wurde in notifications.xml nicht gefunden.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="FloaterNotFound">
+		Floater-Fehler: Folgende Steuerelemente wurden nicht gefunden:
+
+[CONTROLS]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="TutorialNotFound">
+		Derzeit ist kein Tutorial verfügbar.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="GenericAlert">
+		[MESSAGE]
+	</notification>
+	<notification name="GenericAlertYesCancel">
+		[MESSAGE]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
+	</notification>
+	<notification name="BadInstallation">
+		Beim Aktualisieren von [APP_NAME] ist ein Fehler aufgetreten.  Bitte laden Sie die aktuellste Version des Viewers herunter. http://get.secondlife.com
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LoginFailedNoNetwork">
+		Eine Verbindung zum [SECOND_LIFE_GRID] konnte nicht hergestellt werden.
+ &apos;[DIAGNOSTIC]&apos;
+Bitte vergewissern Sie sich, dass Ihre Internetverbindung funktioniert.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MessageTemplateNotFound">
+		Meldungsvorlage [PATH] nicht gefunden.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="WearableSave">
+		Änderung an aktueller Kleidung/Körperteil speichern?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
+	</notification>
+	<notification name="CompileQueueSaveText">
+		Der Text für ein Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="CompileQueueSaveBytecode">
+		Eine kompiliertes Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="WriteAnimationFail">
+		Fehler beim Schreiben von Animationsdaten.  Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="UploadAuctionSnapshotFail">
+		Eine Auktions-Screenshot konnte aus folgendem Grund nicht hochgeladen werden: [REASON]
+	</notification>
+	<notification name="UnableToViewContentsMoreThanOne">
+		Es kann nur jeweils der Inhalt von einem Objekt angezeigt werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+	</notification>
+	<notification name="SaveClothingBodyChanges">
+		Änderung an Kleidung/Körperteilen speichern?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Alles speichern"/>
+	</notification>
+	<notification name="GrantModifyRights">
+		Die Gewährung von Änderungsrechten an andere Einwohner ermöglicht es diesen, JEDES BELIEBIGE Objekt zu ändern oder an sich zu nehmen, das Sie in der [SECOND_LIFE]-Welt besitzen. Seien Sie SEHR vorsichtig beim Erteilen dieser Erlaubnis.
+Möchten Sie [FIRST_NAME] [LAST_NAME] Änderungsrechte gewähren?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="GrantModifyRightsMultiple">
+		Die Gewährung von Änderungsrechten an andere Einwohner ermöglicht es diesen, JEDES BELIEBIGE Objekt zu ändern, das Sie in der [SECOND_LIFE]-Welt besitzen. Seien Sie SEHR vorsichtig beim Erteilen dieser Erlaubnis.
+Möchten Sie den ausgewählten Einwohnern Änderungsrechte gewähren?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="RevokeModifyRights">
+		Möchten Sie [FIRST_NAME] [LAST_NAME] die Änderungsrechte entziehen?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="RevokeModifyRightsMultiple">
+		Möchten Sie den ausgewählten Einwohnern die Änderungsrechte entziehen?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="UnableToCreateGroup">
+		Gruppe konnte nicht erstellt werden.
+[MESSAGE]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="PanelGroupApply">
+		[NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Änderungen verwerfen" yestext="Änderungen übernehmen"/>
+	</notification>
+	<notification name="MustSpecifyGroupNoticeSubject">
+		Geben Sie einen Betreff für die Gruppenmitteilung ein.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="AddGroupOwnerWarning">
+		Sie sind im Begriff, Gruppenmitgliedern die Rolle [ROLE_NAME] zuzuweisen.
+Diese Rolle kann Mitgliedern nicht mehr entzogen werden.
+Sie müssen die Rolle selbst niederlegen.
+Möchten Sie fortfahren?
+		<usetemplate ignoretext="Bestätigen, bevor ich einen neuen Gruppeneigentümer hinzufüge" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="AssignDangerousActionWarning">
+		Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen.
+
+ *ACHTUNG*
+ Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst -
+ und allen anderen Mitgliedern – Rollen zuweisen, die mehr Rechte
+ beinhalten als sie derzeit haben, und damit nahezu
+ Eigentümerrechte erreichen. Überlegen Sie sich, wem Sie diese Fähigkeit
+ verleihen.
+
+Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="AssignDangerousAbilityWarning">
+		Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen.
+
+ *ACHTUNG*
+ Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst -
+ und allen anderen Mitgliedern – alle Fähigkeiten zuweisen und
+ damit fast Eigentümerrechte erreichen.
+
+Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="JoinGroupCanAfford">
+		Der Beitritt zu dieser Gruppe kostet [COST] L$.
+Fortfahren?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Beitreten"/>
+	</notification>
+	<notification name="JoinGroupCannotAfford">
+		Der Beitritt zu dieser Gruppe kostet [COST] L$.
+Sie haben nicht genug L$, um dieser Gruppe beizutreten.
+	</notification>
+	<notification name="CreateGroupCost">
+		Die Gründung dieser Gruppe kostet 100 L$.
+Gruppen müssen mehr als ein Mitglied haben oder sie werden gelöscht.
+Bitte laden Sie innerhalb von 48 Stunden Mitglieder in Ihre Gruppe ein.
+		<usetemplate canceltext="Abbrechen" name="okcancelbuttons" notext="Abbrechen" yestext="Gruppe für 100 L$ erstellen"/>
+	</notification>
+	<notification name="LandBuyPass">
+		Sie können dieses Land („[PARCEL_NAME]“) für [COST] L$
+[TIME] Stunden lang betreten.  Pass kaufen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="SalePriceRestriction">
+		Der Verkaufspreis muss beim allgemeinen Verkauf über 0 L$ liegen.
+Wählen Sie eine bestimmte Person aus, wenn Sie für 0 L$ verkaufen.
+	</notification>
+	<notification name="ConfirmLandSaleChange">
+		Die ausgewählten [LAND_SIZE] qm Land werden zum Verkauf freigegeben.
+Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf an [NAME] autorisiert.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmLandSaleToAnyoneChange">
+		ACHTUNG: Wenn Sie auf „An jeden verkaufen“ klicken, kann jeder in [SECOND_LIFE] Ihr Land kaufen, auch Einwohner in anderen Regionen.
+
+Die ausgewählten [LAND_SIZE] qm Land werden zum Verkauf freigegeben.
+Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf an [NAME] autorisiert.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsDeededToGroup">
+		Möchten Sie alle Ihre Objekte auf dieser Parzelle, die der Gruppe „[NAME]“ gehören, zurück in das jeweilige Inventar ihrer vorherigen Eigentümer transferieren?
+
+*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
+
+Objekte: [N]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsOwnedByUser">
+		Möchten Sie alle Objekte auf dieser Parzelle, die dem Einwohner „[NAME]“ gehören, in das jeweilige Inventar ihrer Eigentümer transferieren?
+
+Objekte: [N]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsOwnedBySelf">
+		Möchten Sie alle Objekte auf dieser Parzelle, die Ihnen gehören, zurück in Ihr Inventar transferieren?
+
+Objekte: [N]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedBySelf">
+		Möchten Sie alle Objekte auf dieser Parzelle, die NICHT Ihnen gehören, in das Inventar ihrer Eigentümer transferieren?
+Transferierbare Objekte, die an eine Gruppe übertragen wurden, werden ihren vorherigen Eigentümern zurückgegeben.
+
+*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
+
+Objekte: [N]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedByUser">
+		Möchten Sie alle Objekte auf dieser Parzelle, die NICHT [NAME] gehören, in das Inventar ihrer Eigentümer transferieren?
+Transferierbare Objekte, die an eine Gruppe übertragen wurden, werden ihren vorherigen Eigentümern zurückgegeben.
+
+*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
+
+Objekte: [N]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnAllTopObjects">
+		Möchten Sie alle aufgeführten Objekte ihren Eigentümern zurückgeben?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="DisableAllTopObjects">
+		Möchten Sie alle Objekte in dieser Region deaktivieren?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedByGroup">
+		Objekte auf dieser Parzelle, die von der Gruppe [NAME] nicht gemeinsam genutzt werden, an ihre Eigentümer zurückgeben?
+
+Objekte: [N]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="UnableToDisableOutsideScripts">
+		Skriptdeaktivierung nicht möglich.
+Für die gesamte Region ist Schaden aktiviert.
+Damit Waffen funktionieren, müssen Skripts erlaubt sein.
+	</notification>
+	<notification name="MustBeInParcel">
+		Sie müssen auf einer Landparzelle stehen, um ihren Landepunkt festzulegen.
+	</notification>
+	<notification name="PromptRecipientEmail">
+		Bitte geben Sie für den/die Empfänger eine gültige Email-Adresse ein.
+	</notification>
+	<notification name="PromptSelfEmail">
+		Geben Sie Ihre E-Mail-Adresse ein.
+	</notification>
+	<notification name="PromptMissingSubjMsg">
+		Foto mit Standardbetreff bzw. -nachricht als E-Mail versenden?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ErrorProcessingSnapshot">
+		Fehler beim Verarbeiten der Fotodaten
+	</notification>
+	<notification name="ErrorEncodingSnapshot">
+		Fehler beim Erstellen des Fotos!
+	</notification>
+	<notification name="ErrorUploadingPostcard">
+		Ein Foto konnte aus folgendem Grund nicht gesendet werden: [REASON]
+	</notification>
+	<notification name="ErrorUploadingReportScreenshot">
+		Ein Report-Screenshot konnte aus folgendem Grund nicht hochgeladen werden: [REASON]
+	</notification>
+	<notification name="MustAgreeToLogIn">
+		Bevor Sie sich in [SECOND_LIFE] anmelden können, müssen Sie den Nutzungsbedingungen zustimmen.
+	</notification>
+	<notification name="CouldNotPutOnOutfit">
+		Outfit konnte nicht angezogen werden.
+Der Outfit-Ordner enthält keine Kleidung, Körperteile oder Anhänge.
+	</notification>
+	<notification name="CannotWearTrash">
+		Kleider oder Körperteile im Papierkorb können nicht getragen werden
+	</notification>
+	<notification name="CannotWearInfoNotComplete">
+		Sie können das Objekt nicht anziehen, weil es noch nicht geladen wurde. Warten Sie kurz und versuchen Sie es dann noch einmal.
+	</notification>
+	<notification name="MustHaveAccountToLogIn">
+		Hoppla! Da fehlt noch etwas.
+Geben Sie bitte den Vor- und den Nachnamen Ihres Avatars ein.
+
+Sie benötigen ein Benutzerkonto, um [SECOND_LIFE] betreten zu können. Möchten Sie jetzt ein Benutzerkonto anlegen?
+		<url name="url">
+			https://join.secondlife.com/index.php?lang=de-DE
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Erneut versuchen" yestext="Neues Benutzerkonto anlegen"/>
+	</notification>
+	<notification name="AddClassified">
+		Anzeigen erscheinen für eine Woche unter „Anzeigen“ im Suchverzeichnis. Füllen Sie Ihre Anzeige aus und klicken Sie auf „Veröffentlichen...“, um sie zum Verzeichnis hinzuzufügen. Sie werden gebeten, einen Preis zu bezahlen, wenn Sie auf „Veröffentlichen“ klicken. Wenn Sie mehr bezahlen oder ein Benutzer nach Ihren Suchbegriffen sucht, erscheint Ihre Anzeige weiter oben in der Liste.
+		<usetemplate ignoretext="So wird eine neue Anzeige erstellt" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="DeleteClassified">
+		Anzeige „[NAME]“ löschen?
+Gebühren werden nicht rückerstattet.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ClassifiedSave">
+		Änderung an Anzeige [NAME] speichern?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
+	</notification>
+	<notification name="DeleteAvatarPick">
+		Auswahl [PICK] löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="PromptGoToEventsPage">
+		Zur [SECOND_LIFE] Events-Webseite?
+		<url name="url">
+			http://de.secondlife.com/events/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="SelectProposalToView">
+		Wählen Sie ein Angebot zur Ansicht.
+	</notification>
+	<notification name="SelectHistoryItemToView">
+		Wählen Sie ein Element zur Ansicht.
+	</notification>
+	<notification name="ResetShowNextTimeDialogs">
+		Möchten Sie alle Popups wieder aktivieren, die Sie zuvor auf „Nicht mehr anzeigen“ gesetzt haben?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="SkipShowNextTimeDialogs">
+		Möchten Sie alle Popups, die übersprungen werden können, deaktivieren?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="CacheWillClear">
+		Der Cache wird nach einem Neustart von [APP_NAME] geleert.
+	</notification>
+	<notification name="CacheWillBeMoved">
+		Der Cache wird nach einem Neustart von [APP_NAME] verschoben.
+Hinweis: Der Cache wird dabei gelöscht/geleert.
+	</notification>
+	<notification name="ChangeConnectionPort">
+		Die Port-Einstellungen werden nach einem Neustart von [APP_NAME] wirksam.
+	</notification>
+	<notification name="ChangeSkin">
+		Die neue Benutzeroberfläche wird nach einem Neustart von [APP_NAME] angewendet.
+	</notification>
+	<notification name="GoToAuctionPage">
+		Zur [SECOND_LIFE]-Webseite, um Auktionen anzuzeigen oder ein Gebot abzugeben?
+		<url name="url">
+			http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="SaveChanges">
+		Änderungen speichern?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
+	</notification>
+	<notification name="GestureSaveFailedTooManySteps">
+		Speichern der Geste fehlgeschlagen.
+Die Geste besteht aus zu vielen Schritten.
+Löschen Sie einige Schritte und versuchen Sie es erneut.
+	</notification>
+	<notification name="GestureSaveFailedTryAgain">
+		Speichern der Geste fehlgeschlagen.  Warten Sie kurz und versuchen Sie es dann noch einmal.
+	</notification>
+	<notification name="GestureSaveFailedObjectNotFound">
+		Geste konnte nicht gespeichert werden, da das Objekt oder das zugehörige Objektinventar nicht gefunden wurden.
+Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
+	</notification>
+	<notification name="GestureSaveFailedReason">
+		Eine Geste konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie die Geste bitte später.
+	</notification>
+	<notification name="SaveNotecardFailObjectNotFound">
+		Notizkarte konnte nicht gespeichert werden, da das Objekt oder das zugehörige Objektinventar nicht gefunden wurden.
+Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
+	</notification>
+	<notification name="SaveNotecardFailReason">
+		Eine Notizkarte konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie die Notizkarte bitte später.
+	</notification>
+	<notification name="ScriptCannotUndo">
+		Es konnten nicht alle Änderungen in Ihrer Skriptversion rückgängig gemacht werden.
+Möchten Sie die letzte gespeicherte Version vom Server laden?
+(**Warnung** Dieser Vorgang kann nicht rückgängig gemacht werden.)
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="SaveScriptFailReason">
+		Ein Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie das Skript bitte später.
+	</notification>
+	<notification name="SaveScriptFailObjectNotFound">
+		Skript konnte nicht gespeichert werden, weil das zugehörige Objekt nicht gefunden wurde.
+Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
+	</notification>
+	<notification name="SaveBytecodeFailReason">
+		Ein kompiliertes Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie das Skript bitte später.
+	</notification>
+	<notification name="StartRegionEmpty">
+		Sie haben keine Start-Region festgelegt. 
+Bitte geben Sie den Namen der Region im Feld „Startposition“ ein oder wählen Sie „Mein letzter Standort“ oder „Mein Heimatort“ als Startposition aus.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CouldNotStartStopScript">
+		Skript konnte nicht gestartet oder beendet werden, weil das zugehörige Objekt nicht gefunden wurde.
+Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
+	</notification>
+	<notification name="CannotDownloadFile">
+		Dateidownload nicht möglich
+	</notification>
+	<notification name="CannotWriteFile">
+		Datei [[FILE]] kann nicht geschrieben werden
+	</notification>
+	<notification name="UnsupportedHardware">
+		Achtung: Ihr System erfüllt nicht die Mindestanforderungen von [APP_NAME]. Dies kann eine schlechte Darstellungsleistung in [APP_NAME] zur Folge haben. Bei nicht unterstützten Systemkonfigurationen kann Ihnen unsere [SUPPORT_SITE] leider nicht helfen.
+
+MINDESTANF.
+Die Seite [_URL] für weitere Informationen öffnen?
+		<url name="url" option="0">
+			http://secondlife.com/support/sysreqs.php?lang=de
+		</url>
+		<usetemplate ignoretext="Meine Hardware wird nicht unterstützt" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="UnknownGPU">
+		Ihr System verwendet eine uns zurzeit unbekannte Grafikkarte.
+Dies passiert dann, wenn die neue Hardware noch nicht mit [APP_NAME] getestet wurde.  [APP_NAME] wird wahrscheinlich korrekt ausgeführt werden, jedoch sollten Sie Ihre Grafikeinstellungen anpassen, um eine bessere Darstellung zu erzielen.
+(Einstellungen &gt; Grafik).
+		<form name="form">
+			<ignore name="ignore" text="Meine Grafikkarte konnte nicht identifiziert werden."/>
+		</form>
+	</notification>
+	<notification name="DisplaySettingsNoShaders">
+		[APP_NAME] ist bei der Initialisierung der Grafiktreiber abgestürzt.
+Die Grafikqualität wird auf eine niedrige Stufe zurückgesetzt, um einige typische Treiberfehler zu vermeiden.
+Einige Grafikfunktionen werden ausgeschaltet.
+Wir empfehlen die Aktualisierung Ihrer Grafikkartentreiber.
+Sie können die Grafikqualität unter „Einstellungen“ &gt; „Grafik“ wieder erhöhen.
+	</notification>
+	<notification name="RegionNoTerraforming">
+		Die Region [REGION] erlaubt kein Terraforming.
+	</notification>
+	<notification name="CannotCopyWarning">
+		Sie sind nicht berechtigt, dieses Objekt zu kopieren und verlieren es aus Ihrem Inventar, wenn Sie es weggeben. Möchten Sie dieses Objekt anbieten?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="CannotGiveItem">
+		Inventarobjekt kann nicht übergeben werden.
+	</notification>
+	<notification name="TransactionCancelled">
+		Transaktion abgebrochen.
+	</notification>
+	<notification name="TooManyItems">
+		Es können maximal 42 Objekte auf einmal in das Inventar transferiert werden.
+	</notification>
+	<notification name="NoItems">
+		Sie sind nicht berechtigt, die ausgewählten Objekte zu kopieren.
+	</notification>
+	<notification name="CannotCopyCountItems">
+		Sie sind nicht berechtigt, [COUNT] der ausgewählten Objekte zu kopieren. Diese Objekte werden aus Ihrem Inventar gelöscht.
+Möchten Sie diese Objekte weggeben?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="CannotGiveCategory">
+		Sie sind nicht berechtigt, den ausgewählten Ordner zu kopieren.
+	</notification>
+	<notification name="FreezeAvatar">
+		Diesen Avatar einfrieren?
+Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Auftauen" yestext="Einfrieren"/>
+	</notification>
+	<notification name="FreezeAvatarFullname">
+		[AVATAR_NAME] einfrieren?
+Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Auftauen" yestext="Einfrieren"/>
+	</notification>
+	<notification name="EjectAvatarFullname">
+		[AVATAR_NAME] von Ihrem Land werfen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Ausschließen und Verbannen" yestext="Ausschließen"/>
+	</notification>
+	<notification name="EjectAvatarNoBan">
+		Diesen Avatar aus Ihrem Land werfen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hinauswerfen"/>
+	</notification>
+	<notification name="EjectAvatarFullnameNoBan">
+		[AVATAR_NAME] aus Ihrem Land werfen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hinauswerfen"/>
+	</notification>
+	<notification name="AcquireErrorTooManyObjects">
+		FEHLER: Zu viele Objekte ausgewählt.
+	</notification>
+	<notification name="AcquireErrorObjectSpan">
+		FEHLER: Die Objekte überspannen mehrere Regionen.
+Verschieben Sie alle betreffenden Objekte in dieselbe Region.
+	</notification>
+	<notification name="PromptGoToCurrencyPage">
+		[EXTRA]
+
+[_URL] für Informationen zum Kauf von L$ öffnen?
+		<url name="url">
+			http://de.secondlife.com/app/currency/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="UnableToLinkObjects">
+		Verknüpfung dieser [COUNT] Objekte nicht möglich.
+Sie können maximal [MAX] Objekte verknüpfen.
+	</notification>
+	<notification name="CannotLinkIncompleteSet">
+		Sie können nur vollständige Objektsätze verknüpfen und Sie müssen mehr als ein Objekt auswählen.
+	</notification>
+	<notification name="CannotLinkModify">
+		Verknüpfung nicht möglich, da Sie nicht alle Objekte bearbeiten dürfen.
+
+Stellen Sie sicher, dass kein Objekt gesperrt ist und alle Objekte Ihnen gehören.
+	</notification>
+	<notification name="CannotLinkDifferentOwners">
+		Verknüpfung nicht möglich, da nicht alle Objekte denselben Eigentümer haben.
+
+Stellen Sie sicher, dass alle ausgewählten Objekte Ihnen gehören.
+	</notification>
+	<notification name="NoFileExtension">
+		Kein Dateityp für Datei: „[FILE]“
+
+Vergewissern Sie sich, dass die Datei den richtigen Dateityp hat.
+	</notification>
+	<notification name="InvalidFileExtension">
+		Ungültige Datei-Endung [EXTENSION]
+Erwartet wurde [VALIDS]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CannotUploadSoundFile">
+		Sounddatei konnte nicht hochgeladen werden:
+[FILE]
+	</notification>
+	<notification name="SoundFileNotRIFF">
+		Die Datei ist anscheinend keine RIFF WAVE-Datei:
+[FILE]
+	</notification>
+	<notification name="SoundFileNotPCM">
+		Die Datei ist anscheinend keine PCM WAVE-Audiodatei:
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidChannelCount">
+		Die Datei hat eine ungültige Anzahl Tonkanäle (muss Mono oder Stereo sein):
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidSampleRate">
+		Die Sample-Rate dieser Datei wird nicht unterstützt (muss 44,1 K sein):
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidWordSize">
+		Die Word-Größe dieser Datei wird nicht unterstützt (muss 8 oder 16 Bit sein):
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidHeader">
+		„Daten“-Chunk in WAV-Header nicht gefunden:
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidTooLong">
+		Audiodatei ist zu lang (max. 10 Sekunden):
+[FILE]
+	</notification>
+	<notification name="ProblemWithFile">
+		Problem mit Datei [FILE]:
+
+[ERROR]
+	</notification>
+	<notification name="CannotOpenTemporarySoundFile">
+		Temporäre komprimierte Sounddatei konnte nicht geöffnet werden: [FILE]
+	</notification>
+	<notification name="UnknownVorbisEncodeFailure">
+		Unbekannter Vorbis-Kodierungsfehler in: [FILE]
+	</notification>
+	<notification name="CannotEncodeFile">
+		Datei konnte nicht kodiert werden: [FILE]
+	</notification>
+	<notification name="CorruptResourceFile">
+		Ressourcendatei beschädigt: [FILE]
+	</notification>
+	<notification name="UnknownResourceFileVersion">
+		Unbekannte Linden-Ressourcenversion in Datei: [FILE]
+	</notification>
+	<notification name="UnableToCreateOutputFile">
+		Ausgabedatei konnte nicht erstellt werden: [FILE]
+	</notification>
+	<notification name="DoNotSupportBulkAnimationUpload">
+		Der Mehrfach-Upload von Animationsdateien wird zurzeit von [APP_NAME] nicht unterstützt.
+	</notification>
+	<notification name="CannotUploadReason">
+		Datei [FILE] kann aus folgendem Grund nicht hochgeladen werden: [REASON]
+Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="LandmarkCreated">
+		„[LANDMARK_NAME]“ wurde zum Ordner „[FOLDER_NAME]“ hinzugefügt.
+	</notification>
+	<notification name="CannotCreateLandmarkNotOwner">
+		Sie können hier keine Landmarke erstellen, da der Landeigentümer dies verboten hat.
+	</notification>
+	<notification name="CannotRecompileSelectObjectsNoScripts">
+		„Rekompilieren“ nicht möglich.
+Objekt mit Skript wählen.
+	</notification>
+	<notification name="CannotRecompileSelectObjectsNoPermission">
+		„Rekompilieren“ nicht möglich.
+
+Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
+	</notification>
+	<notification name="CannotResetSelectObjectsNoScripts">
+		„Zurücksetzen“ nicht möglich.
+
+Wählen Sie Objekte mit Skripts.
+	</notification>
+	<notification name="CannotResetSelectObjectsNoPermission">
+		„Zurücksetzen“ nicht möglich.
+
+Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
+	</notification>
+	<notification name="CannotSetRunningSelectObjectsNoScripts">
+		„Ausführen“ von Skripts nicht möglich.
+
+Wählen Sie Objekte mit Skripts.
+	</notification>
+	<notification name="CannotSetRunningNotSelectObjectsNoScripts">
+		„Deaktivieren“ von Skripts nicht möglich.
+
+Wählen Sie Objekte mit Skripts.
+	</notification>
+	<notification name="NoFrontmostFloater">
+		Kein vorderster Floater zum Speichern.
+	</notification>
+	<notification name="SeachFilteredOnShortWords">
+		Ihre Suchanfrage wurde geändert.
+Zu kurze Begriffe wurden entfernt.
+
+Ihre Suchanfrage: [FINALQUERY]
+	</notification>
+	<notification name="SeachFilteredOnShortWordsEmpty">
+		Ihre Suchbegriffe sind zu kurz.
+Es wurde keine Suche durchgeführt.
+	</notification>
+	<notification name="CouldNotTeleportReason">
+		Teleport fehlgeschlagen.
+[REASON]
+	</notification>
+	<notification name="invalid_tport">
+		Bei der Bearbeitung Ihrer Teleport-Anfrage ist ein Problem aufgetreten. Sie müssen sich zum Teleportieren eventuell neu anmelden.
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+	</notification>
+	<notification name="invalid_region_handoff">
+		Bei der Bearbeitung Ihres Regionswechsels ist ein Problem aufgetreten. Sie müssen sich zum Wechsel der Region eventuell neu anmelden.
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+	</notification>
+	<notification name="blocked_tport">
+		Teleportieren ist zurzeit leider nicht möglich. Versuchen Sie es später noch einmal.
+Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab und wieder an.
+	</notification>
+	<notification name="nolandmark_tport">
+		Das System konnte das Landmarken-Ziel nicht finden.
+	</notification>
+	<notification name="timeout_tport">
+		Das System konnte keine Teleport-Verbindung herstellen.
+Versuchen Sie es später noch einmal.
+	</notification>
+	<notification name="noaccess_tport">
+		Sie haben leider keinen Zugang zu diesem Teleport-Ziel.
+	</notification>
+	<notification name="missing_attach_tport">
+		Ihre Anhänge sind noch nicht eingetroffen. Warten Sie kurz oder melden Sie sich ab und wieder an, bevor Sie einen neuen Teleport-Versuch unternehmen.
+	</notification>
+	<notification name="too_many_uploads_tport">
+		Die Asset-Warteschlange in dieser Region ist zurzeit überlastet.
+Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in einigen Minuten erneut oder besuchen Sie eine weniger überfüllte Region.
+	</notification>
+	<notification name="expired_tport">
+		Das System konnte Ihre Teleport-Anfrage nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
+	</notification>
+	<notification name="expired_region_handoff">
+		Das System konnte Ihre Anfrage zum Regionswechsel nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
+	</notification>
+	<notification name="no_host">
+		Teleport-Ziel wurde nicht gefunden. Das Ziel ist entweder im Moment nicht verfügbar oder existiert nicht mehr. Versuchen Sie es in einigen Minuten erneut.
+	</notification>
+	<notification name="no_inventory_host">
+		Das Inventarsystem ist zurzeit nicht verfügbar.
+	</notification>
+	<notification name="CannotSetLandOwnerNothingSelected">
+		Landeigentümer kann nicht festgelegt werden:
+Keine Parzelle ausgewählt.
+	</notification>
+	<notification name="CannotSetLandOwnerMultipleRegions">
+		Eine erzwungene Landübertragung ist nicht möglich, da die Auswahl mehrere Regionen umfasst. Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut.
+	</notification>
+	<notification name="ForceOwnerAuctionWarning">
+		Diese Parzelle steht zur Auktion. Eine zwangsweise Eigentumsübertragung beendet die Auktion und verärgert womöglich Einwohner, die bereits ein Gebot abgegeben haben. Eigentumsübertragung erzwingen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="CannotContentifyNothingSelected">
+		Inhaltsidentifizierung nicht möglich:
+Keine Parzelle ausgewählt.
+	</notification>
+	<notification name="CannotContentifyNoRegion">
+		Inhaltsidentifizierung nicht möglich:
+Keine Region ausgewählt.
+	</notification>
+	<notification name="CannotReleaseLandNothingSelected">
+		Land kann nicht aufgegeben werden:
+Keine Parzelle ausgewählt.
+	</notification>
+	<notification name="CannotReleaseLandNoRegion">
+		Land kann nicht aufgegeben werden:
+Region nicht gefunden.
+	</notification>
+	<notification name="CannotBuyLandNothingSelected">
+		Land kann nicht gekauft werden:
+Keine Parzelle ausgewählt.
+	</notification>
+	<notification name="CannotBuyLandNoRegion">
+		Land kann nicht gekauft werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+	</notification>
+	<notification name="CannotCloseFloaterBuyLand">
+		Das Fenster „Land kaufen“ kann erst geschlossen werden, nachdem [APP_NAME] den Transaktionspreis geschätzt hat.
+	</notification>
+	<notification name="CannotDeedLandNothingSelected">
+		Land kann nicht übertragen werden:
+Keine Parzelle ausgewählt.
+	</notification>
+	<notification name="CannotDeedLandNoGroup">
+		Land kann nicht übertragen werden:
+Keine Gruppe ausgewählt.
+	</notification>
+	<notification name="CannotDeedLandNoRegion">
+		Land kann nicht übertragen werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+	</notification>
+	<notification name="CannotDeedLandMultipleSelected">
+		Land kann nicht übertragen werden:
+Mehrere Parzellen ausgewählt.
+
+Wählen Sie eine einzelne Parzelle.
+	</notification>
+	<notification name="ParcelCanPlayMedia">
+		Dieser Ort kann Streaming-Medien abspielen.
+Streaming-Medien erfordern eine schnelle Internet-Verbindung.
+
+Streaming-Medien abspielen, wenn verfügbar?
+(Sie können diese Option später unter „Einstellungen“ &gt; „Audio &amp; Video“ ändern.)
+		<usetemplate name="okcancelbuttons" notext="Deaktivieren" yestext="Medien wiedergeben"/>
+	</notification>
+	<notification name="CannotDeedLandWaitingForServer">
+		Land kann nicht übertragen werden:
+Warte auf Server für Eigentümerinformationen.
+
+Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="CannotDeedLandNoTransfer">
+		Land kann nicht übertragen werden:
+Die Region [REGION] erlaubt keine Landübertragung.
+	</notification>
+	<notification name="CannotReleaseLandWatingForServer">
+		Land kann nicht aufgegeben werden:
+Server muss Parzelleninformation aktualisieren.
+
+Versuchen Sie es in einigen Sekunden erneut.
+	</notification>
+	<notification name="CannotReleaseLandSelected">
+		Land kann nicht aufgegeben werden:
+Die ausgewählten Parzellen gehören Ihnen nicht.
+
+Wählen Sie eine einzelne Parzelle.
+	</notification>
+	<notification name="CannotReleaseLandDontOwn">
+		Land kann nicht aufgegeben werden:
+Ihnen fehlt die Berechtigung zur Freigabe dieser Parzelle.
+Parzellen, die Ihnen gehören, werden grün dargestellt.
+	</notification>
+	<notification name="CannotReleaseLandRegionNotFound">
+		Land kann nicht aufgegeben werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+	</notification>
+	<notification name="CannotReleaseLandNoTransfer">
+		Land kann nicht aufgegeben werden:
+Die Region [REGION] erlaubt keine Landübertragung.
+	</notification>
+	<notification name="CannotReleaseLandPartialSelection">
+		Land kann nicht aufgegeben werden:
+Zum Freigeben müssen Sie eine ganze Parzelle auswählen.
+
+Wählen Sie eine ganze Parzelle oder teilen Sie Ihre Parzelle.
+	</notification>
+	<notification name="ReleaseLandWarning">
+		Sie sind im Begriff, [AREA] qm Land aufzugeben.
+Wenn Sie diese Parzelle aufgeben, wird sie ohne L$-Erstattung von Ihrem Landbesitz entfernt.
+
+Dieses Land aufgeben?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="CannotDivideLandNothingSelected">
+		Land kann nicht aufgeteilt werden:
+
+Keine Parzellen ausgewählt.
+	</notification>
+	<notification name="CannotDivideLandPartialSelection">
+		Land kann nicht aufgeteilt werden:
+
+Sie haben eine ganze Parzelle ausgewählt.
+Wählen Sie einen Parzellenabschnitt aus.
+	</notification>
+	<notification name="LandDivideWarning">
+		Wenn Sie dieses Land teilen, wird diese Parzelle in zwei geteilt, jede mit ihren eigenen Einstellungen. Einige dieser Einstellungen werden aufgrund dieses Vorgangs zurückgesetzt.
+
+Land teilen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="CannotDivideLandNoRegion">
+		Land kann nicht aufgeteilt werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+	</notification>
+	<notification name="CannotJoinLandNoRegion">
+		Land kann nicht zusammengelegt werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+	</notification>
+	<notification name="CannotJoinLandNothingSelected">
+		Land kann nicht zusammengelegt werden:
+Keine Parzellen ausgewählt.
+	</notification>
+	<notification name="CannotJoinLandEntireParcelSelected">
+		Land kann nicht zusammengelegt werden:
+Sie haben nur eine Parzelle ausgewählt.
+
+Wählen Sie Land auf beiden Parzellen aus.
+	</notification>
+	<notification name="CannotJoinLandSelection">
+		Land kann nicht zusammengelegt werden:
+Sie müssen mehrere Parzellen auswählen.
+
+Wählen Sie Land auf beiden Parzellen aus.
+	</notification>
+	<notification name="JoinLandWarning">
+		Beim Zusammenlegen entsteht aus den vom Auswahlrechteck
+erfassten Parzellen eine große Parzelle.
+Sie müssen der neuen Parzelle einen Namen geben und ihre Optionen festlegen.
+
+Land zusammenlegen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmNotecardSave">
+		Um das Objekt kopieren oder anzeigen zu können, müssen Sie zuerst diese Notizkarte speichern. Notizkarte speichern?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmItemCopy">
+		Dieses Objekt in Ihr Inventar kopieren?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Kopieren"/>
+	</notification>
+	<notification name="ResolutionSwitchFail">
+		Auflösung konnte nicht auf [RESX] x [RESY] gesetzt werden
+	</notification>
+	<notification name="ErrorUndefinedGrasses">
+		Fehler: Nicht definierte Gräser: [SPECIES]
+	</notification>
+	<notification name="ErrorUndefinedTrees">
+		Fehler: Nicht definierte Bäume: [SPECIES]
+	</notification>
+	<notification name="CannotSaveWearableOutOfSpace">
+		„[NAME]“ konnte nicht in Kleidungsdatei gespeichert werden.  Geben Sie Speicherplatz auf dem Computer frei und speichern Sie das Kleidungsstück erneut.
+	</notification>
+	<notification name="CannotSaveToAssetStore">
+		[NAME] kann nicht in Zentral-Asset-Speicher geladen werden.
+Dies ist ein temporärer Fehler. Bitte passen Sie das Kleidungsstück in einigen Minuten noch einmal an und speichern Sie es erneut.
+	</notification>
+	<notification name="YouHaveBeenLoggedOut">
+		Sie wurden von [SECOND_LIFE] abgemeldet:
+            [MESSAGE]
+Klicken Sie auf „IM &amp; Chat anzeigen“, um vorhandene Nachrichten und Chat weiterhin anzuzeigen. Klicken Sie andernfalls auf „Beenden“, um [APP_NAME] sofort zu beenden.
+		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="IM &amp; Chat anzeigen"/>
+	</notification>
+	<notification name="OnlyOfficerCanBuyLand">
+		Landkauf für Gruppe nicht möglich:
+Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
+	</notification>
+	<notification label="Freund hinzufügen" name="AddFriend">
+		Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
+
+[NAME] Freundschaft anbieten?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification label="Freund hinzufügen" name="AddFriendWithMessage">
+		Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
+
+[NAME] Freundschaft anbieten?
+		<form name="form">
+			<input name="message">
+				Wollen wir Freunde sein?
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="RemoveFromFriends">
+		Möchten Sie [FIRST_NAME] [LAST_NAME] aus Ihrer Freundesliste entfernen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="RemoveMultipleFromFriends">
+		Möchten Sie mehrere Freunde aus Ihrer Freundesliste entfernen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllScriptedPublicObjectsByUser">
+		Möchten Sie alle geskripteten Objekte von
+** [AVATAR_NAME] **
+auf allen anderen Ländern in diesem Sim löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllScriptedObjectsByUser">
+		Möchten Sie ALLE geskripteten Objekte von
+** [AVATAR_NAME] **
+auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllObjectsByUser">
+		Möchten Sie ALLE Objekte (einschließlich geskriptete) von
+** [AVATAR_NAME] **
+auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BlankClassifiedName">
+		Geben Sie einen Namen für die Anzeige ein.
+	</notification>
+	<notification name="MinClassifiedPrice">
+		Der Mindestbetrag für die Listung ist [MIN_PRICE] L$.
+
+Geben sie einen höheren Betrag ein.
+	</notification>
+	<notification name="ConfirmObjectDeleteLock">
+		Mindestens ein ausgewähltes Objekt ist gesperrt.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoCopy">
+		Mindestens ein ausgewähltes Objekt kann nicht kopiert werden.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoOwn">
+		Mindestens eines der ausgewählten Objekt gehört nicht Ihnen.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoCopy">
+		Mindestens ein Objekt ist gesperrt.
+Mindestens ein Objekt kann nicht kopiert werden.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoOwn">
+		Mindestens ein Objekt ist gesperrt.
+Mindestens ein Objekt gehört nicht Ihnen.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoCopyNoOwn">
+		Mindestens ein Objekt kann nicht kopiert werden.
+Mindestens ein Objekt gehört nicht Ihnen.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
+		Mindestens ein Objekt ist gesperrt.
+Mindestens ein Objekt kann nicht kopiert werden.
+Mindestens ein Objekt gehört nicht Ihnen.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeLock">
+		Mindestens ein Objekt ist gesperrt.
+
+Möchten Sie diese Objekte nehmen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeNoOwn">
+		Nicht alle Objekte, die Sie aufgenommen haben, gehören Ihnen.
+Wenn Sie fortfahren, werden die Rechte für den nächsten Eigentümer angewandt und Sie können die Objekte möglicherweise nicht bearbeiten oder kopieren.
+
+Möchten Sie diese Objekte nehmen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeLockNoOwn">
+		Mindestens ein Objekt ist gesperrt.
+Nicht alle Objekte, die Sie aufgenommen haben, gehören Ihnen.
+Wenn Sie fortfahren, werden die Rechte für den nächsten Eigentümer abgefragt und Sie können die Objekte möglicherweise nicht bearbeiten oder kopieren.
+Die aktuelle Auswahl können Sie jedoch aufnehmen.
+
+Möchten Sie diese Objekte nehmen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="CantBuyLandAcrossMultipleRegions">
+		Landkauf nicht möglich, da die Auswahl mehrere Regionen umfasst.
+
+Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut.
+	</notification>
+	<notification name="DeedLandToGroup">
+		Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
+Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt.
+
+Der Gruppe „[GROUP_NAME]“
+ [AREA] m² Land schenken?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="DeedLandToGroupWithContribution">
+		Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
+Die Schenkung beinhaltet eine Landübertragung an die Gruppe von „[FIRST_NAME] [LAST_NAME]“.
+Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt.
+
+Der Gruppe „[GROUP_NAME]“
+ [AREA] m² Land schenken?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="DisplaySetToSafe">
+		Es wurden sichere Anzeige-Einstellungen gewählt, da die Option -safe verwendet wurde.
+	</notification>
+	<notification name="DisplaySetToRecommended">
+		Es wurden die für Ihre Systemkonfiguration empfohlenen Anzeige-Einstellungen gewählt.
+	</notification>
+	<notification name="ErrorMessage">
+		[ERROR_MESSAGE]
+	</notification>
+	<notification name="AvatarMovedDesired">
+		Ihr gewünschter Zielort ist zurzeit nicht verfügbar.
+Sie wurden zur nächstgelegenen Region teleportiert.
+	</notification>
+	<notification name="AvatarMovedLast">
+		Ihr letzter Standort ist zurzeit nicht verfügbar.
+Sie wurden zur nächstgelegenen Region teleportiert.
+	</notification>
+	<notification name="AvatarMovedHome">
+		Ihr Heimatort ist zurzeit nicht verfügbar.
+Sie wurden zur nächstgelegenen Region teleportiert.
+Sie müssen eventuell einen neuen Heimatort festlegen.
+	</notification>
+	<notification name="ClothingLoading">
+		Ihre Kleidung wird noch heruntergeladen.
+Sie können [SECOND_LIFE] normal verwenden. Andere Benutzer können Sie korrekt dargestellt sehen.
+		<form name="form">
+			<ignore name="ignore" text="Das Herunterladen der Kleidung dauert lange"/>
+		</form>
+	</notification>
+	<notification name="FirstRun">
+		Die Installation von [APP_NAME] ist abgeschlossen.
+
+Wenn Sie [SECOND_LIFE] das erste Mal verwenden, müssen Sie ein Konto anlegen, bevor Sie sich anmelden können.
+Möchten Sie auf www.secondlife.com ein Konto erstellen?
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Neues Konto..."/>
+	</notification>
+	<notification name="LoginPacketNeverReceived">
+		Es gibt Probleme mit der Verbindung. Möglicherweise besteht ein Problem mit Ihrer Internetverbindung oder dem [SECOND_LIFE_GRID].
+
+Überprüfen Sie Ihre Internetverbindung und versuchen Sie es dann erneut, oder klicken Sie auf Hilfe, um zu [SUPPORT_SITE] zu gelangen, oder klicken Sie auf Teleportieren, um nach Hause zu teleportieren.
+		<url name="url">
+			http://de.secondlife.com/support/
+		</url>
+		<form name="form">
+			<button name="OK" text="OK"/>
+			<button name="Help" text="Hilfe"/>
+			<button name="Teleport" text="Teleportieren"/>
+		</form>
+	</notification>
+	<notification name="WelcomeChooseSex">
+		Ihr Avatar erscheint jeden Moment.
+
+Benutzen Sie die Pfeiltasten, um sich fortzubewegen.
+Drücken Sie F1 für Hilfe oder für weitere Informationen über [SECOND_LIFE].
+Bitte wählen Sie einen männlichen oder weiblichen Avatar.
+Sie können sich später noch umentscheiden.
+		<usetemplate name="okcancelbuttons" notext="Weiblich" yestext="Männlich"/>
+	</notification>
+	<notification name="NotEnoughCurrency">
+		[NAME] [PRICE] L$  Sie haben nicht genügend L$, um diese Aktion auszuführen.
+	</notification>
+	<notification name="GrantedModifyRights">
+		[FIRST_NAME] [LAST_NAME] hat Ihnen die Erlaubnis erteilt, ihre/seine Objekte zu bearbeiten.
+	</notification>
+	<notification name="RevokedModifyRights">
+		Ihnen wurden die Änderungsrechte für die Objekte von [FIRST_NAME] [LAST_NAME] entzogen.
+	</notification>
+	<notification name="FlushMapVisibilityCaches">
+		Der Kartencache dieser Region wird geleert.
+Diese Aktion ist nur beim Debugging sinnvoll.
+(Auf dem Produktionssystem warten Sie einfach 5 Minuten. Die Karten werden nach erneuter Anmeldung automatisch aktualisiert.)
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BuyOneObjectOnly">
+		Sie können jeweils nur ein Objekt kaufen.  Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+	</notification>
+	<notification name="OnlyCopyContentsOfSingleItem">
+		Es kann nur jeweils der Inhalt von einem Objekt kopiert werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="KickUsersFromRegion">
+		Alle Einwohner in dieser Region nach Hause teleportieren?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="EstateObjectReturn">
+		Möchten Sie wirklich alle Objekte zurückgeben, die [USER_NAME] gehören?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="InvalidTerrainBitDepth">
+		Die Regionstexturen konnten nicht festgelegt werden:
+Die Terraintextur [TEXTURE_NUM] hat eine ungültige Bit-Tiefe [TEXTURE_BIT_DEPTH].
+
+Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf „Übernehmen“.
+	</notification>
+	<notification name="InvalidTerrainSize">
+		Die Regionstexturen konnten nicht festgelegt werden:
+Die Terraintextur [TEXTURE_NUM] ist mit [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y] zu groß.
+
+Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf „Übernehmen“.
+	</notification>
+	<notification name="RawUploadStarted">
+		Hochladen gestartet. Je nach Verbindungsgeschwindigkeit kann der Vorgang bis zu 2 Minuten dauern.
+	</notification>
+	<notification name="ConfirmBakeTerrain">
+		Möchten Sie das aktuelle Terrain formen, es zum Mittelpunkt der oberen und unteren Terraingrenzen und zum Standard des „Zurücksetzen“-Tools machen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="MaxAllowedAgentOnRegion">
+		Es sind maximal [MAX_AGENTS] zulässige Einwohner erlaubt.
+	</notification>
+	<notification name="MaxBannedAgentsOnRegion">
+		Es sind maximal [MAX_BANNED] verbannte Einwohner erlaubt.
+	</notification>
+	<notification name="MaxAgentOnRegionBatch">
+		Fehler beim Versuch, [NUM_ADDED] Agenten hinzuzufügen:
+Ãœberschreitet den Grenzwert [MAX_AGENTS] [LIST_TYPE] um [NUM_EXCESS].
+	</notification>
+	<notification name="MaxAllowedGroupsOnRegion">
+		Es sind maximal [MAX_GROUPS] zulässige Gruppen erlaubt.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Formen"/>
+	</notification>
+	<notification name="MaxManagersOnRegion">
+		Es sind maximal [MAX_MANAGER]  verbannte Einwohner erlaub.
+	</notification>
+	<notification name="OwnerCanNotBeDenied">
+		Der Eigentümer des Grundstücks kann nicht zur Liste der „Verbannten Einwohner“ hinzugefügt werden.
+	</notification>
+	<notification name="CanNotChangeAppearanceUntilLoaded">
+		Das Aussehen lässt sich erst ändern, wenn Kleider und Form/Gestalt geladen sind.
+	</notification>
+	<notification name="ClassifiedMustBeAlphanumeric">
+		Der Name der Anzeige muss mit einem Buchstaben von A bis Z oder einer Ziffer beginnen.  Satzzeichen sind nicht erlaubt.
+	</notification>
+	<notification name="CantSetBuyObject">
+		„Objekt kaufen“ nicht möglich, da das Objekt nicht zum Verkauf freigegeben ist.
+Geben Sie das Objekt zum Verkauf frei und versuchen Sie es erneut.
+	</notification>
+	<notification name="FinishedRawDownload">
+		Raw-Terrain-Datei wurde heruntergeladen nach:
+[DOWNLOAD_PATH].
+	</notification>
+	<notification name="DownloadWindowsMandatory">
+		Eine neue Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
+		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadWindows">
+		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadWindowsReleaseForDownload">
+		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadLinuxMandatory">
+		Eine neue Version von [SUPPORT_SITE] ist verfügbar.
+[MESSAGE]
+Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
+		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadLinux">
+		Eine neue Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadLinuxReleaseForDownload">
+		Eine neue Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadMacMandatory">
+		Eine neue Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
+
+In Ihren Anwendungsordner herunterladen?
+		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadMac">
+		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+
+In Ihren Anwendungsordner herunterladen?
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadMacReleaseForDownload">
+		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+
+In Ihren Anwendungsordner herunterladen?
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DeedObjectToGroup">
+		Bei Übertragung dieses Objekts erhält die Gruppe:
+* An das Objekt bezahlte L$
+		<usetemplate ignoretext="Bestätigen, bevor ich ein Objekt an eine Gruppe übertrage" name="okcancelignore" notext="Abbrechen" yestext="Übertragung"/>
+	</notification>
+	<notification name="WebLaunchExternalTarget">
+		Möchten Sie Ihren Internetbrowser öffnen, um diesen Inhalt anzuzeigen?
+		<usetemplate ignoretext="Meinen Browser starten, um eine Webseite anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchJoinNow">
+		de.secondlife.com öffnen, um Ihr Konto zu verwalten?
+		<usetemplate ignoretext="Meinen Browser starten, um mein Konto zu verwalten" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchSecurityIssues">
+		Informieren Sie sich im [SECOND_LIFE] Wiki, wie man Sicherheitsprobleme richtig meldet.
+		<usetemplate ignoretext="Meinen Browser starten, um anzuzeigen, wie ein Sicherheitsproblem gemeldet werden soll" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchQAWiki">
+		Besuchen Sie das [SECOND_LIFE] QA-Wiki.
+		<usetemplate ignoretext="Meinen Browser starten, um das QA-Wiki anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchPublicIssue">
+		Im [SECOND_LIFE] Allgemeine-Fragen-Tracker können Sie Fehler und andere Probleme melden.
+		<usetemplate ignoretext="Meinen Browser starten, um die Datenbank für Fehler und Verbesserungsvorschläge anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
+	</notification>
+	<notification name="WebLaunchSupportWiki">
+		Im offiziellen Linden-Blog finden Sie die neuesten Nachrichten und Informationen.
+		<usetemplate ignoretext="Meinen Browser starten, um das Blog anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchLSLGuide">
+		Möchten Sie den Scripting Guide öffnen?
+		<usetemplate ignoretext="Meinen Browser starten, um den Scripting Guide anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchLSLWiki">
+		Möchten Sie das LSL-Portal besuchen?
+		<usetemplate ignoretext="Meinen Browser starten, um das LSL-Portal anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
+	</notification>
+	<notification name="ReturnToOwner">
+		Möchten Sie die ausgewählten Objekte an ihre Eigentümer zurückgeben? Transferierbare übertragene Objekte werden ihren früheren Eigentümern zurückgegeben.
+
+*WARNUNG* Nicht transferierbare übertragene Objekte werden dabei gelöscht!
+		<usetemplate ignoretext="Bestätigen, bevor Objekte an Ihre Eigentümer zurückgegeben werden" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="GroupLeaveConfirmMember">
+		Sie sind Mitglied der Gruppe [GROUP].
+Diese Gruppe verlassen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmKick">
+		Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/>
+	</notification>
+	<notification name="MuteLinden">
+		Lindens können nicht stummgeschaltet werden.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CannotStartAuctionAlreadyForSale">
+		Eine Parzelle, die bereits zum Verkauf freigegeben ist, kann nicht versteigert werden.  Deaktivieren Sie den Landverkauf, wenn Sie das Land zur Versteigerung freigeben möchten.
+	</notification>
+	<notification label="Objekt nach Name stummschalten fehlgeschlagen" name="MuteByNameFailed">
+		Dieser Name ist bereits stummgeschaltet.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="RemoveItemWarn">
+		Diese Aktion ist zwar erlaubt, aber beim Löschen von Inhalten wird das Objekt beschädigt. Möchten Sie dieses Element löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="CantOfferCallingCard">
+		Sie können gerade keine Visitenkarte übergeben. Warten Sie kurz und versuchen Sie es dann noch einmal.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CantOfferFriendship">
+		Sie können gerade keine Freundschaft anbieten. Warten Sie kurz und versuchen Sie es dann noch einmal.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="BusyModeSet">
+		Beschäftigt-Modus ist aktiviert.
+Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachrichten) erhalten Ihre Beschäftigt-Antwort. Alle Teleport-Angebote werden abgelehnt. Alle Inventar-Angebote werden in Ihren Papierkorb geschoben.
+		<usetemplate ignoretext="Ich ändere meinen Status zu Beschäftigt" name="okignore" yestext="OK"/>
+	</notification>
+	<notification name="JoinedTooManyGroupsMember">
+		Sie haben die maximale Anzahl an Gruppen erreicht. Bitte verlassen Sie eine andere Gruppe, um dieser beitreten zu können oder lehnen Sie das Angebot ab.
+[NAME]  hat Sie eingeladen, einer Gruppe beizutreten.
+[INVITE]
+		<usetemplate name="okcancelbuttons" notext="Ablehnen" yestext="Beitreten"/>
+	</notification>
+	<notification name="KickUser">
+		Beim Hinauswerfen dieses Benutzers welche Meldung anzeigen?
+		<form name="form">
+			<input name="message">
+				Sie wurden von einem Administrator abgemeldet.
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="KickAllUsers">
+		Beim Hinauswerfen aller Personen vom Grid welche Meldung anzeigen?
+		<form name="form">
+			<input name="message">
+				Sie wurden von einem Administrator abgemeldet.
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="FreezeUser">
+		Beim Einfrieren dieses Benutzers welche Meldung anzeigen?
+		<form name="form">
+			<input name="message">
+				Sie wurden eingefroren. Bewegen oder Chatten ist nicht mehr möglich. Ein Administrator wird sich über IM an Sie wenden
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="UnFreezeUser">
+		Beim Auftauen dieses Benutzers welche Meldung anzeigen?
+		<form name="form">
+			<input name="message">
+				Sie sind nicht mehr eingefroren.
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="OfferTeleport">
+		Teleport an Ihre Position mit der folgenden Meldung anbieten?
+		<form name="form">
+			<input name="message">
+				Triff mich in [REGION]
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="OfferTeleportFromGod">
+		Benutzer an Ihrem Standort herbeirufen?
+		<form name="form">
+			<input name="message">
+				Triff mich in [REGION]
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="TeleportFromLandmark">
+		Möchten Sie sich wirklich teleportieren?
+		<usetemplate ignoretext="Bestätigen, dass ich zu einer Landmarke teleportieren möchte" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/>
+	</notification>
+	<notification name="TeleportToPick">
+		Nach [PICK] teleportieren?
+		<usetemplate ignoretext="Bestätigen, dass ich zu einer Position in Auswahl teleportieren möchte" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/>
+	</notification>
+	<notification label="Nachricht an alle auf diesem Grundstück" name="MessageEstate">
+		Geben Sie eine kurze Nachricht ein, die an jede Person auf Ihrem Grundstück gesendet wird.
+		<form name="form">
+			<input name="message"/>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification label="Linden-Grundstück ändern" name="ChangeLindenEstate">
+		Sie sind im Begriff, ein Grundstück in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
+
+Dies ist ÄUSSERST GEFÄHRLICH, da es grundlegende Auswirkungen auf das Benutzererlebnis hat.  Auf dem Mainland werden tausende Regionen geändert, was den Spaceserver stark belastet.
+
+Fortfahren?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification label="Zugang zu Linden-Grundstück ändern" name="ChangeLindenAccess">
+		Sie sind im Begriff, die Zugangsliste für ein Grundstück in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
+
+Dies ist GEFÄHRLICH und sollte nur erfolgen, um Objekte/L$ per Hack in und aus dem Raster zu entfernen.
+Tausende Regionen werden verändert und der Spaceserver wird dadurch stark belastet.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateAllowedAgentAdd">
+		Nur für dieses Grundstück oder für alle [ALL_ESTATES] zur Erlaubnisliste hinzufügen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateAllowedAgentRemove">
+		Nur für dieses Grundstück oder für alle [ALL_ESTATES] von Erlaubnisliste entfernen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateAllowedGroupAdd">
+		Nur für dieses Grundstück oder für alle [ALL_ESTATES] zur Gruppen-Erlaubnisliste hinzufügen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateAllowedGroupRemove">
+		Nur für dieses Grundstück oder für alle [ALL_ESTATES] von Gruppen-Erlaubnisliste entfernen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateBannedAgentAdd">
+		Zugang nur für dieses Grundstück oder für [ALL_ESTATES] verweigern?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateBannedAgentRemove">
+		Einwohner nur für dieses Grundstück oder für alle [ALL_ESTATES] von der Bannliste entfernen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateManagerAdd">
+		Verwalter nur für dieses Grundstück oder für [ALL_ESTATES] festlegen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateManagerRemove">
+		Verwalter nur für dieses Grundstück oder für [ALL_ESTATES] entfernen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Rauswurf bestätigen" name="EstateKickUser">
+		Benutzer [EVIL_USER] von diesem Grundstück werfen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="EstateChangeCovenant">
+		Möchten Sie den Grundstücksvertrag wirklich ändern?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked">
+		Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
+
+Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked_KB">
+		Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten.
+
+Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
+		</url>
+		<usetemplate ignoretext="Ich kann diese Region aufgrund der Alterseinstufung nicht betreten" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked_Notify">
+		Aufgrund Ihrer Alterseinstufung dürfen Sie diese Region nicht betreten.
+	</notification>
+	<notification name="RegionEntryAccessBlocked_Change">
+		Sie dürfen diese Region aufgrund der Einstellung Ihrer Alterseinstufung nicht betreten.
+
+Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen... &gt; Allgemein.
+		<form name="form">
+			<button name="OK" text="Einstellung ändern"/>
+			<button name="Cancel" text="Schließen"/>
+			<ignore name="ignore" text="Meine Alterseinstufung lässt nicht zu, dass ich eine Region betrete."/>
+		</form>
+	</notification>
+	<notification name="LandClaimAccessBlocked">
+		Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
+
+Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LandClaimAccessBlocked_KB">
+		Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
+
+Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
+		</url>
+		<usetemplate ignoretext="Ich habe aufgrund der Alterseinstufung keinen Anspruch auf dieses Land" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
+	</notification>
+	<notification name="LandClaimAccessBlocked_Notify">
+		Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
+	</notification>
+	<notification name="LandClaimAccessBlocked_Change">
+		Sie haben aufgrund der Einstellung Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
+
+Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen... &gt; Allgemein.
+		<usetemplate ignoretext="Meine Alterseinstufung lässt nicht zu, dass ich auf Land Anspruch erhebe" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked">
+		Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
+
+Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked_KB">
+		Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen.
+
+Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
+		</url>
+		<usetemplate ignoretext="Ich kann aufgrund der Alterseinstufung dieses Land nicht kaufen" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked_Notify">
+		Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen.
+	</notification>
+	<notification name="LandBuyAccessBlocked_Change">
+		Sie können aufgrund Ihrer Einstellung für Alterseinstufung dieses Land nicht kaufen.
+
+Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen... &gt; Allgemein.
+		<usetemplate ignoretext="Meine Alterseinstufung lässt nicht zu, dass ich Land kaufe" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/>
+	</notification>
+	<notification name="TooManyPrimsSelected">
+		&quot;Zu viele Prims wurden ausgewählt.  Bitte wählen Sie höchstens [MAX_PRIM_COUNT] Prims aus und versuchen Sie es erneut.&quot;
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ProblemImportingEstateCovenant">
+		Problem beim Import des Grundstückvertrags.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ProblemAddingEstateManager">
+		Es gibt Probleme beim Hinzufügen eines neuen Grundstücksverwalters.  Bei mindestens einem Grundstück ist die Verwalterliste voll.
+	</notification>
+	<notification name="ProblemAddingEstateGeneric">
+		Problem beim Hinzufügen zu dieser Grundstücksliste.  Bei mindestens einem Grundstück ist die Liste voll.
+	</notification>
+	<notification name="UnableToLoadNotecardAsset">
+		Notizkarten-Asset konnte nicht geladen werden.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="NotAllowedToViewNotecard">
+		Unzureichende Rechte, um die mit der angeforderten Asset-ID verbundene Notizkarte anzuzeigen.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MissingNotecardAssetID">
+		Asset-ID für Notizkarte fehlt in Datenbank.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="PublishClassified">
+		Hinweis: Anzeigengebühren werden nicht zurückerstattet.
+
+Anzeige für [AMOUNT] L$ veröffentlichen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="SetClassifiedMature">
+		Enthält diese Anzeige Mature-Inhalte?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="SetGroupMature">
+		Beschäftigt sich diese Gruppe mit Mature-Inhalten?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification label="Neustart bestätigen" name="ConfirmRestart">
+		Möchten Sie diese Region in 2 Minuten neu starten?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification label="Nachricht an alle in dieser Region" name="MessageRegion">
+		Geben Sie eine kurze Nachricht ein, die an jede Person in dieser Region gesendet wird.
+		<form name="form">
+			<input name="message"/>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification label="Alterseinstufung der Region ändern" name="RegionMaturityChange">
+		Die Alterseinstufung dieser Region wurde aktualisiert.
+Es kann eine Weile dauern, bis sich die Änderung auf die Karte auswirkt.
+	</notification>
+	<notification label="Falsche Voice-Version" name="VoiceVersionMismatch">
+		Diese Version von [APP_NAME] mit dem Voice-Chat-Feature in dieser Region nicht kompatibel. Damit Voice-Chat funktioniert, müssen Sie [APP_NAME] aktualisieren.
+	</notification>
+	<notification label="Objekte können nicht gekauft werden" name="BuyObjectOneOwner">
+		Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+	</notification>
+	<notification label="Inhalte können nicht gekauft werden" name="BuyContentsOneOnly">
+		Inhalte können jeweils nur für ein Objekt gekauft werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+	</notification>
+	<notification label="Inhalte können nicht gekauft werden" name="BuyContentsOneOwner">
+		Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+	</notification>
+	<notification name="BuyOriginal">
+		Von [OWNER] Originalobjekt für [PRICE] L$ kaufen?
+Sie werden der Eigentümer dieses Objekts.
+Sie können das Objekt:
+ Bearbeiten: [MODIFYPERM]
+ Kopieren: [COPYPERM]
+ Verkaufen oder weggeben: [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BuyOriginalNoOwner">
+		Originalobjekt für [PRICE] L$ kaufen?
+Sie werden der Eigentümer dieses Objekts.
+Sie können das Objekt:
+ Bearbeiten: [MODIFYPERM]
+ Kopieren: [COPYPERM]
+ Verkaufen oder weggeben: [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BuyCopy">
+		Von [OWNER] Kopie für [PRICE] L$ kaufen?
+Das Objekt wird in Ihr Inventar kopiert.
+Sie können das Objekt:
+ Bearbeiten: [MODIFYPERM]
+ Kopieren: [COPYPERM]
+ Verkaufen oder weggeben: [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BuyCopyNoOwner">
+		Kopie für [PRICE] L$ kaufen?
+Das Objekt wird in Ihr Inventar kopiert.
+Sie können das Objekt:
+ Bearbeiten: [MODIFYPERM]
+ Kopieren: [COPYPERM]
+ Verkaufen oder weggeben: [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BuyContents">
+		Von [OWNER] Inhalte für [PRICE] L$ kaufen?
+Die Inhalte werden in Ihr Inventar kopiert.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BuyContentsNoOwner">
+		Inhalte für [PRICE] L$ kaufen?
+Die Inhalte werden in Ihr Inventar kopiert.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmPurchase">
+		Transaktion:
+[ACTION]
+
+Möchten Sie diesen Kauf fortsetzen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmPurchasePassword">
+		Transaktion:
+[ACTION]
+
+Möchten Sie diesen Kauf fortsetzen?
+Geben Sie Ihr Kennwort erneut ein und klicken Sie auf OK.
+		<form name="form">
+			<input name="message"/>
+			<button name="ConfirmPurchase" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="SetPickLocation">
+		Hinweis:
+Sie haben die Position dieser Auswahl aktualisiert, aber die anderen Daten behalten ihre ursprünglichen Werte.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MoveInventoryFromObject">
+		Sie haben „nicht kopierfähige“ Inventarobjekte ausgewählt.
+Diese Objekte werden nicht kopiert, sondern in Ihr Inventar verschoben.
+
+Inventarobjekt(e) verschieben?
+		<usetemplate ignoretext="Warnhinweis anzeigen, bevor ich nicht kopierbare Artikel aus einem Objekt verschiebe" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="MoveInventoryFromScriptedObject">
+		Sie haben „nicht kopierfähige“ Inventarobjekte ausgewählt.  Diese Objekte werden nicht kopiert, sondern in Ihr Inventar verschoben.
+Da es sich um ein geskriptetes Objekt handelt, geht die Skriptfunktion beim Verschieben in das Inventar möglicherweise verloren.
+
+Inventarobjekt(e) verschieben?
+		<usetemplate ignoretext="Warnhinweis anzeigen, bevor ich nicht-kopierbare Artikel verschiebe, die ein geskriptetes Objekt beschädigen können" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ClickActionNotPayable">
+		Achtung: Die Klickaktion „Objekt bezahlen&quot; wurde eingestellt. Diese funktioniert jedoch nicht, wenn ein Skript mit einer Geldtransaktion () hinzugefügt wird.
+		<form name="form">
+			<ignore name="ignore" text="I habe die Aktion „Objekt bezahlen&quot; eingestellt, während ich ein Objekt gebaut habe, dass kein Geld()-Skript enthält."/>
+		</form>
+	</notification>
+	<notification name="OpenObjectCannotCopy">
+		Sie haben keine Berechtigung zum Kopieren von Elementen in diesem Objekt.
+	</notification>
+	<notification name="WebLaunchAccountHistory">
+		de.secondlife.com öffnen, um Ihre Konto-Statistik anzuzeigen?
+		<usetemplate ignoretext="Meinen Browser starten, um meine Konto-Statistik anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
+	</notification>
+	<notification name="ConfirmQuit">
+		Wirklich beenden?
+		<usetemplate ignoretext="Bestätigen, bevor Sitzung beendet wird" name="okcancelignore" notext="Nicht beenden" yestext="Beenden"/>
+	</notification>
+	<notification name="HelpReportAbuseEmailLL">
+		Verwenden Sie dieses Tool, um Verletzungen der Servicebedingungen und Community-Standards zu melden. Siehe:
+
+http://secondlife.com/corporate/tos.php
+http://secondlife.com/corporate/cs.php
+
+Alle gemeldeten Verletzungen der Servicebedingungen und Community-Standards werden geprüft und geklärt Sie können den Prozess im Incident Report (Vorfallsbericht) verfolgen:
+
+http://secondlife.com/support/incidentreport.php
+	</notification>
+	<notification name="HelpReportAbuseEmailEO">
+		WICHTIG: Diese Meldung wird an den Eigentümer der Region gesendet, in der Sie sich gerade befinden, nicht an Linden Lab.
+-
+Als besonderen Service für Einwohner und Besucher übernimmt der Eigentümer dieser Region die Bearbeitung aller anfallenden Meldungen. Von diesem Standort aus eingereichte Meldungen werden nicht von Linden Lab bearbeitet. Der Eigentümer der Region bearbeitet Meldungen auf Grundlage der Richtlinien, die im für diese Region geltenden Grundstücksvertrag festgelegt sind.
+(Den Vertrag können Sie unter „Welt“ &gt; „Land-Info“ einsehen.)
+-
+Das Resultat, das sich aus dieser Meldung ergibt, betrifft nur diese Region; der Einwohnerzugang zu anderen Bereichen von [SECOND_LIFE] ist davon nicht betroffen. Nur Linden Lab kann den Zugang zu [SECOND_LIFE] beschränken.
+	</notification>
+	<notification name="HelpReportAbuseSelectCategory">
+		Wählen Sie eine Missbrauchskategorie aus.
+Die Angabe einer Kategorie hilft uns bei der Bearbeitung des Berichts.
+	</notification>
+	<notification name="HelpReportAbuseAbuserNameEmpty">
+		Geben Sie den Namen des Täters ein.
+Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden.
+	</notification>
+	<notification name="HelpReportAbuseAbuserLocationEmpty">
+		Bitte geben Sie den Ort an, an dem der Missbrauch stattgefunden hat.
+Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden.
+	</notification>
+	<notification name="HelpReportAbuseSummaryEmpty">
+		Bitte geben Sie eine Zusammenfassung des Vorfalls ein.
+Eine genaue Zusammenfassung hilft uns, Fälle von Missbrauch zu ahnden.
+	</notification>
+	<notification name="HelpReportAbuseDetailsEmpty">
+		Bitte geben Sie eine ausführliche Beschreibung des Vorfalls ein.
+Eine möglichst genaue Beschreibung mit Namen und Einzelheiten hilft uns, Fälle von Missbrauch zu ahnden.
+	</notification>
+	<notification name="HelpReportAbuseContainsCopyright">
+		Sehr geehrte(r) Einwohner(in),
+
+Sie melden eine Urheberrechtsverletzung. Sind Sie wirklich sicher, dass Sie eine Verletzung des Urheberrechts melden möchten?
+
+1. Missbrauch melden. Wenn Sie der Meinung sind, ein Einwohner nutzt das Berechtigungssystem von [SECOND_LIFE] auf unerlaubte Weise zu seinem Vorteil aus, indem er zum Beispiel einen CopyBot oder ähnliche Kopiertools verwendet und damit eine Urheberrechtsverletzung begeht, können Sie diesen Missbrauch melden. Das Missbrauchsteam untersucht etwaige Verstöße gegen die [SECOND_LIFE] Community Standards oder die Nutzungsbedingungen und verhängt entsprechende Strafen. Das Missbrauchsteam ist jedoch nicht dafür zuständig, Inhalte aus der [SECOND_LIFE]-Welt zu entfernen und reagiert auch nicht auf entsprechende Anfragen.
+
+2. Der DMCA oder das Entfernen von Inhalten. Sie können das Entfernen von Inhalten aus [SECOND_LIFE] beantragen. Dazu MÜSSEN Sie eine Urheberrechtsverletzung gemäß den in unserer DMCA-Richtlinie unter http://secondlife.com/corporate/dmca.php dargelegten Anweisungen einreichen.
+
+Wenn Sie mit der Missbrauchmeldung jetzt fortfahren möchten, schließen Sie bitte dieses Fenster und senden Sie Ihren Bericht ein.  Möglicherweise müssen Sie Kategorie „CopyBot oder Berechtigungs-Exploit“ auswählen.
+
+Vielen Dank,
+
+Linden Lab
+	</notification>
+	<notification name="FailedRequirementsCheck">
+		Die folgenden erforderlichen Komponenten fehlen in [FLOATER]:
+[COMPONENTS]
+	</notification>
+	<notification label="Vorhandenen Anhang ersetzen" name="ReplaceAttachment">
+		An dieser Körperstelle ist bereits ein Objekt angebracht.
+Möchten Sie es mit dem ausgewählten Objekt ersetzen?
+		<form name="form">
+			<ignore name="ignore" save_option="true" text="Einen bestehenden Anhang mit dem ausgewählten Artikel ersetzen"/>
+			<button ignore="Automatisch ersetzen" name="Yes" text="OK"/>
+			<button ignore="Nie ersetzen" name="No" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification label="Beschäftigt-Modus-Warnung" name="BusyModePay">
+		Sie sind im Beschäftigt-Modus, sodass Sie im Austausch für diese Zahlung keine Objekte erhalten können.
+
+Möchten Sie den Bechäftigt-Modus verlassen, bevor Sie diese Transaktion abschließen?
+		<form name="form">
+			<ignore name="ignore" save_option="true" text="Ich bin im Begriff eine Person oder ein Objekt zu bezahlen, während ich im Modus Beschäftigt bin."/>
+			<button ignore="Beschäftigt-Modus immer deaktivieren" name="Yes" text="OK"/>
+			<button ignore="Beschäftigt-Modus aktiviert lassen" name="No" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="ConfirmEmptyTrash">
+		Sind Sie sicher, dass Sie den Inhalt Ihres Papierkorbs löschen möchten?
+		<usetemplate ignoretext="Bestätigen, bevor der Ordner Papierkorb im Inventar geleert wird" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmClearBrowserCache">
+		Sind Sie sicher, dass Sie Ihren Reise-, Internet- und Suchverlauf löschen möchten?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
+	</notification>
+	<notification name="ConfirmClearCookies">
+		Sind Sie sicher, dass Sie Ihre Cookies löschen möchten?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
+	</notification>
+	<notification name="ConfirmClearMediaUrlList">
+		Die Liste mit gespeicherten URLs wirklich löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
+	</notification>
+	<notification name="ConfirmEmptyLostAndFound">
+		Sind Sie sicher, dass Sie den Inhalt Ihres Ordners Fundbüro löschen möchten?
+		<usetemplate ignoretext="Bestätigen, bevor der Ordner Fundbüro im Inventar geleert wird" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="CopySLURL">
+		Die folgende SLurl wurde in die Zwischenablage kopiert:
+ [SLURL]
+
+Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dieser Position zu ermöglichen. Oder versuchen Sie es selbst: kopieren Sie die SLurl in die Adressleiste eines Webbrowsers.
+		<form name="form">
+			<ignore name="ignore" text="Slurl wurde in meine Zwischenablage kopiert"/>
+		</form>
+	</notification>
+	<notification name="WLSavePresetAlert">
+		Die gespeicherte Voreinstellung überschreiben?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="WLDeletePresetAlert">
+		[SKY] löschen?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="WLNoEditDefault">
+		Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
+	</notification>
+	<notification name="WLMissingSky">
+		Diese Tageszyklusdatei verweist auf eine fehlende Himmel-Datei: [SKY].
+	</notification>
+	<notification name="PPSaveEffectAlert">
+		Post-Processing-Effekt bereits vorhanden. Möchten Sie ihn überschreiben?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="NewSkyPreset">
+		Wählen Sie einen Namen für den neuen Himmel.
+		<form name="form">
+			<input name="message">
+				Neue Voreinstellung
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="ExistsSkyPresetAlert">
+		Voreinstellung bereits vorhanden!
+	</notification>
+	<notification name="NewWaterPreset">
+		Wählen Sie einen Namen für die neue Wasservoreinstellung.
+		<form name="form">
+			<input name="message">
+				Neue Voreinstellung
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="ExistsWaterPresetAlert">
+		Voreinstellung bereits vorhanden!
+	</notification>
+	<notification name="WaterNoEditDefault">
+		Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
+	</notification>
+	<notification name="ChatterBoxSessionStartError">
+		Neue Chat-Sitzung mit [RECIPIENT] konnte nicht gestartet werden.
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ChatterBoxSessionEventError">
+		[EVENT]
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ForceCloseChatterBoxSession">
+		Ihre Chat-Sitzung mit [NAME] muss beendet werden.
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="Cannot_Purchase_an_Attachment">
+		Sie können kein Objekt kaufen, während es angehängt ist.
+	</notification>
+	<notification label="Info zur Abfrage der Abbucherlaubnis" name="DebitPermissionDetails">
+		Wenn Sie dieser Anfrage zustimmen, erhält das Skript die Erlaubnis, regelmäßig Linden-Dollar (L$) von Ihrem Konto abzubuchen. Diese Erlaubnis kann nur zurückgezogen werden, wenn der Eigentümer das Objekt löscht oder die Skripts in dem Objekt zurücksetzt.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="AutoWearNewClothing">
+		Möchten Sie das neu erstellte Kleidungsstück automatisch anziehen?
+		<usetemplate ignoretext="Die Kleidung, die während dem Bearbeiten meines Aussehens erstellt wird, sofort anziehen" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="NotAgeVerified">
+		Sie müssen altersüberprüft sein, um diesen Bereich betreten zu können.  Möchten Sie auf der [SECOND_LIFE]-Webseite Ihr Alter verifizieren lassen?
+
+[_URL]
+		<url name="url" option="0">
+			https://secondlife.com/account/verification.php?lang=de
+		</url>
+		<usetemplate ignoretext="Ich habe mein Alter nicht verifizieren lassen" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="Cannot enter parcel: no payment info on file">
+		Um diesen Bereich besuchen zu können, müssen Ihre Zahlungsinformationen gespeichert sein.  Möchten Sie diese Einstellung auf der [SECOND_LIFE]-Webseite einrichten?
+
+[_URL]
+		<url name="url" option="0">
+			https://secondlife.com/account/index.php?lang=de
+		</url>
+		<usetemplate ignoretext="Meine Zahlungsinformation ist nicht gespeichert" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="MissingString">
+		Der String „[STRING_NAME]“ fehlt in strings.xml
+	</notification>
+	<notification name="SystemMessageTip">
+		[MESSAGE]
+	</notification>
+	<notification name="Cancelled">
+		Abgebrochen
+	</notification>
+	<notification name="CancelledSit">
+		Sitzen beendet
+	</notification>
+	<notification name="CancelledAttach">
+		Anhängen abgebrochen
+	</notification>
+	<notification name="ReplacedMissingWearable">
+		Fehlende(s) Kleidung/Körperteil mit Standard ersetzt.
+	</notification>
+	<notification name="GroupNotice">
+		Betreff: [SUBJECT], Nachricht: [MESSAGE]
+	</notification>
+	<notification name="FriendOnline">
+		[FIRST] [LAST] ist online
+	</notification>
+	<notification name="FriendOffline">
+		[FIRST] [LAST] ist offline
+	</notification>
+	<notification name="AddSelfFriend">
+		Obwohl Sie ein sehr netter Mensch sind, können Sie sich nicht selbst als Freund hinzufügen.
+	</notification>
+	<notification name="UploadingAuctionSnapshot">
+		In-Welt- und Website-Fotos werden hochgeladen...
+(Dauert ca. 5 Minuten.)
+	</notification>
+	<notification name="UploadPayment">
+		Sie haben für das Hochladen [AMOUNT] L$ bezahlt.
+	</notification>
+	<notification name="UploadWebSnapshotDone">
+		Das Website-Foto wurde hochgeladen.
+	</notification>
+	<notification name="UploadSnapshotDone">
+		In-Welt-Foto hochgeladen
+	</notification>
+	<notification name="TerrainDownloaded">
+		Terrain.raw heruntergeladen
+	</notification>
+	<notification name="GestureMissing">
+		Geste [NAME] fehlt in Datenbank.
+	</notification>
+	<notification name="UnableToLoadGesture">
+		Geste [NAME] konnte nicht geladen werden.
+Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="LandmarkMissing">
+		Landmarke fehlt in Datenbank.
+	</notification>
+	<notification name="UnableToLoadLandmark">
+		Landmarke konnte nicht geladen werden.  Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="CapsKeyOn">
+		Die Umschalttaste ist aktiv.
+Dies kann die Eingabe Ihres Passworts beeinflussen.
+	</notification>
+	<notification name="NotecardMissing">
+		Notizkarte fehlt in Datenbank.
+	</notification>
+	<notification name="NotecardNoPermissions">
+		Ihnen fehlt die Berechtigung zur Anzeige dieser Notizkarte.
+	</notification>
+	<notification name="RezItemNoPermissions">
+		Keine Berechtigung zum Rezzen von Objekten.
+	</notification>
+	<notification name="UnableToLoadNotecard">
+		Notizkarten-Asset konnte nicht geladen werden.
+	</notification>
+	<notification name="ScriptMissing">
+		Skript fehlt in Datenbank.
+	</notification>
+	<notification name="ScriptNoPermissions">
+		Unzureichende Rechte zur Anzeige des Skripts.
+	</notification>
+	<notification name="UnableToLoadScript">
+		Skript konnte nicht geladen werden.  Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="IncompleteInventory">
+		Die von Ihnen angebotenen Inhalte sind noch nicht vollständig lokal verfügbar. Warten Sie kurz und wiederholen Sie dann das Angebot.
+	</notification>
+	<notification name="CannotModifyProtectedCategories">
+		Geschützte Kategorien können nicht geändert werden.
+	</notification>
+	<notification name="CannotRemoveProtectedCategories">
+		Geschützte Kategorien können nicht entfernt werden.
+	</notification>
+	<notification name="OfferedCard">
+		Sie haben [FIRST] [LAST] eine Visitenkarte angeboten.
+	</notification>
+	<notification name="UnableToBuyWhileDownloading">
+		Kauf nicht möglich. Objektdaten werden noch geladen.
+Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="UnableToLinkWhileDownloading">
+		Verknüpfung nicht möglich. Objektdaten werden noch geladen.
+Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="CannotBuyObjectsFromDifferentOwners">
+		Sie können nur von einem Eigentümer auf einmal Objekte kaufen.
+Wählen Sie ein einzelnes Objekt aus.
+	</notification>
+	<notification name="ObjectNotForSale">
+		Dieses Objekt wird nicht verkauft.
+	</notification>
+	<notification name="EnteringGodMode">
+		Gott-Modus aktiviert, Level [LEVEL]
+	</notification>
+	<notification name="LeavingGodMode">
+		Gott-Modus wird nun de-aktiviert, Level [LEVEL]
+	</notification>
+	<notification name="CopyFailed">
+		Ihnen fehlt die Berechtigung zum Kopieren.
+	</notification>
+	<notification name="InventoryAccepted">
+		[NAME] hat Ihr Inventarangebot akzeptiert.
+	</notification>
+	<notification name="InventoryDeclined">
+		[NAME] hat Ihr Inventarangebot abgelehnt.
+	</notification>
+	<notification name="ObjectMessage">
+		[NAME]: [MESSAGE]
+	</notification>
+	<notification name="CallingCardAccepted">
+		Ihre Visitenkarte wurde akzeptiert.
+	</notification>
+	<notification name="CallingCardDeclined">
+		Ihre Visitenkarte wurde abgelehnt.
+	</notification>
+	<notification name="TeleportToLandmark">
+		Jetzt, nachdem Sie das Mainland erreicht haben, können Sie sich an Positionen wie „[NAME]“ teleportieren, indem Sie unten rechts im Fenster auf „Inventar“ klicken und den Ordner „Landmarken“ auswählen.
+Klicken Sie eine Landmarke doppelt an und wählen Sie „Teleportieren“, um an diesen Ort zu gelangen.
+	</notification>
+	<notification name="TeleportToPerson">
+		Jetzt, nachdem Sie das Mainland erreicht haben, können Sie mit Einwohnern wie „[NAME]“ Kontakt aufnehmen, indem Sie unten rechts im Fenster auf „Inventar“ klicken und den Ordner „Visitenkarten“ auswählen.
+Klicken Sie die Karte doppelt an, wählen Sie „Instant Message“ und geben Sie eine Nachricht ein.
+	</notification>
+	<notification name="CantSelectLandFromMultipleRegions">
+		Land kann nicht über Servergrenzen hinweg ausgewählt werden.
+Wählen Sie eine kleinere Landfläche.
+	</notification>
+	<notification name="SearchWordBanned">
+		Einige Begriffe in Ihrer Suchanfrage wurden ausgeschlossen, aufgrund von in den Community Standards definierten Inhaltsbeschränkungen.
+	</notification>
+	<notification name="NoContentToSearch">
+		Bitte wählen Sie mindestens eine Inhaltsart für die Suche aus (PG, Mature oder Adult).
+	</notification>
+	<notification name="GroupVote">
+		[NAME] hat eine Abstimmung vorgeschlagen über:
+[MESSAGE]
+		<form name="form">
+			<button name="VoteNow" text="Abstimmen"/>
+			<button name="Later" text="Später"/>
+		</form>
+	</notification>
+	<notification name="SystemMessage">
+		[MESSAGE]
+	</notification>
+	<notification name="EventNotification">
+		Event-Benachrichtigung:
+
+[NAME]
+[DATE]
+		<form name="form">
+			<button name="Teleport" text="Teleportieren"/>
+			<button name="Description" text="Beschreibung"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="TransferObjectsHighlighted">
+		Alle Objekte auf dieser Parzelle, die an den Käufer der Parzelle übertragen werden, sind jetzt markiert.
+
+* Übertragene Bäume und Gräser sind nicht markiert.
+		<form name="form">
+			<button name="Done" text="Fertig"/>
+		</form>
+	</notification>
+	<notification name="DeactivatedGesturesTrigger">
+		Gesten mit demselben Trigger wurden deaktiviert:
+[NAMES]
+	</notification>
+	<notification name="NoQuickTime">
+		Apple QuickTime ist auf Ihrem System anscheinend nicht installiert.
+Laden Sie QuickTime von der QuickTime-Webseite (http://www.apple.com/de/quicktime) herunter, um auf Parzellen, die diese Funktion unterstützen, Streaming-Inhalte wiederzugeben.
+	</notification>
+	<notification name="NoPlugin">
+		Es wurde kein Medien-Plugin gefunden, das &quot;[MIME_TYPE]&quot; ausführen kann.  Medien dieses Dateityps sind nicht verfügbar.
+	</notification>
+	<notification name="MediaPluginFailed">
+		Bei folgendem Plugin ist ein Fehler aufgetreten:
+    [PLUGIN]
+
+Bitte installieren Sie das Plugin erneut. Falls weiterhin Problem auftreten, kontaktieren Sie bitte den Hersteller.
+		<form name="form">
+			<ignore name="ignore" text="Ein Plugin kann nicht ausgeführt werden"/>
+		</form>
+	</notification>
+	<notification name="OwnedObjectsReturned">
+		Ihre Objekte auf der ausgewählten Parzelle wurden in Ihr Inventar transferiert.
+	</notification>
+	<notification name="OtherObjectsReturned">
+		Die Objekte von [FIRST] [LAST] auf dieser Parzelle wurden in das Inventar dieser Person transferiert.
+	</notification>
+	<notification name="OtherObjectsReturned2">
+		Die Objekte von [FIRST] [LAST] auf dieser
+Parzelle von „[NAME]“ wurden an ihren Eigentümer zurückgegeben.
+	</notification>
+	<notification name="GroupObjectsReturned">
+		Die mit der Gruppe [GROUPNAME] gemeinsam genutzten Objekte auf dieser Parzelle wurden in das Inventar ihrer Eigentümer transferiert.
+Transferierbare übertragene Objekte wurden an ihre früheren Eigentümer zurückgegeben.
+Nicht transferierbare an die Gruppe übertragene Objekte wurden gelöscht.
+	</notification>
+	<notification name="UnOwnedObjectsReturned">
+		Alle Objekte auf der ausgewählten Parzelle, die NICHT Ihnen gehören, wurden ihren Eigentümern zurückgegeben.
+	</notification>
+	<notification name="NotSafe">
+		Auf diesem Land ist Schaden aktiviert.
+Verletzungen sind möglich. Wenn Sie sterben, werden Sie zu Ihrem Heimatstandort teleportiert.
+	</notification>
+	<notification name="NoFly">
+		In diesem Bereich ist das Fliegen deaktiviert.
+Fliegen ist hier nicht möglich.
+	</notification>
+	<notification name="PushRestricted">
+		In diesem Bereich ist Stoßen nicht erlaubt.
+Sie können keine anderen Personen stoßen, außer Ihnen gehört das Land.
+	</notification>
+	<notification name="NoVoice">
+		In diesem Bereich ist Voice deaktiviert. Sie werden niemanden sprechen hören.
+	</notification>
+	<notification name="NoBuild">
+		In diesem Bereich ist das Bauen deaktiviert. Sie können keine Objekte bauen oder rezzen.
+	</notification>
+	<notification name="ScriptsStopped">
+		Ein Administrator hat die Skriptausführung in dieser Region vorübergehend deaktiviert.
+	</notification>
+	<notification name="ScriptsNotRunning">
+		In dieser Region werden keine Skipts ausgeführt.
+	</notification>
+	<notification name="NoOutsideScripts">
+		Auf diesem Land sind externe Skripts deaktiviert
+
+Hier funktionieren nur Skripts, die dem Landeigentümer gehören.
+	</notification>
+	<notification name="ClaimPublicLand">
+		Öffentliches Land kann nur in der Region in Besitz genommen werden, in der Sie sich befinden.
+	</notification>
+	<notification name="RegionTPAccessBlocked">
+		Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Sie müssen eventuell eine Altersüberprüfung vornehmen und/oder den aktuellsten Viewer installieren.
+
+Bitte besuchen Sie unsere Knowledgebase, um mehr Details über Zugang zu Regionen mit dieser Alterseinstufung zu erhalten.
+	</notification>
+	<notification name="URBannedFromRegion">
+		Sie dürfen diese Region nicht betreten.
+	</notification>
+	<notification name="NoTeenGridAccess">
+		Ihr Konto kann keine Verbindung zu dieser Teen Grid-Region herstellen.
+	</notification>
+	<notification name="ImproperPaymentStatus">
+		Die für den Zutritt zu dieser Region erforderlichen Zahlungsinformationen liegen nicht vor.
+	</notification>
+	<notification name="MustGetAgeParcel">
+		Sie müssen alterüberprüft sein, um diese Parzelle betreten zu können.
+	</notification>
+	<notification name="NoDestRegion">
+		Keine Zielregion gefunden.
+	</notification>
+	<notification name="NotAllowedInDest">
+		Der Zutritt wurde Ihnen verweigert.
+	</notification>
+	<notification name="RegionParcelBan">
+		Diese Parzelle ist abgesperrt und kann nicht überquert werden. Versuchen Sie einen anderen Weg.
+	</notification>
+	<notification name="TelehubRedirect">
+		Sie wurden zu einem Telehub umgeleitet.
+	</notification>
+	<notification name="CouldntTPCloser">
+		Ein Teleport näher am Ziel ist leider nicht möglich.
+	</notification>
+	<notification name="TPCancelled">
+		Teleport abgebrochen.
+	</notification>
+	<notification name="FullRegionTryAgain">
+		Die Region, die Sie betreten möchten, ist im Moment voll.
+Versuchen Sie es in einigen Minuten erneut.
+	</notification>
+	<notification name="GeneralFailure">
+		Allgemeiner Fehler.
+	</notification>
+	<notification name="RoutedWrongRegion">
+		In falsche Region umgeleitet.  Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="NoValidAgentID">
+		Keine gültige Agent ID.
+	</notification>
+	<notification name="NoValidSession">
+		Keine gültige Sitzungs-ID.
+	</notification>
+	<notification name="NoValidCircuit">
+		Kein gültiger Verbindungscode.
+	</notification>
+	<notification name="NoValidTimestamp">
+		Kein gültiger Zeitstempel.
+	</notification>
+	<notification name="NoPendingConnection">
+		Verbindung kann nicht hergestellt werden.
+	</notification>
+	<notification name="InternalUsherError">
+		Interner Fehler beim Versuch, Verbindung mit Agent Usher herzustellen.
+	</notification>
+	<notification name="NoGoodTPDestination">
+		In dieser Region konnte kein gültiges Teleportziel gefunden werden.
+	</notification>
+	<notification name="InternalErrorRegionResolver">
+		Interner Fehler bei Teleport.
+	</notification>
+	<notification name="NoValidLanding">
+		Ein gültiger Landpunkt konnte nicht gefunden werden.
+	</notification>
+	<notification name="NoValidParcel">
+		Es konnte keine gültige Parzelle gefunden werden.
+	</notification>
+	<notification name="ObjectGiveItem">
+		Das Objekt [OBJECTFROMNAME] von [FIRST] [LAST] hat Ihnen Folgendes übergeben: [OBJECTTYPE] ([OBJECTNAME]).
+		<form name="form">
+			<button name="Keep" text="Behalten"/>
+			<button name="Discard" text="Verwerfen"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="ObjectGiveItemUnknownUser">
+		Das Objekt [OBJECTFROMNAME] von (unbekannt) hat Ihnen Folgendes übergeben: [OBJECTTYPE] ([OBJECTNAME]).
+		<form name="form">
+			<button name="Keep" text="Behalten"/>
+			<button name="Discard" text="Verwerfen"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="UserGiveItem">
+		[NAME] hat Ihnen ein [OBJECTTYPE] namens „[OBJECTNAME]“ gegeben.
+		<form name="form">
+			<button name="Keep" text="Behalten"/>
+			<button name="Discard" text="Verwerfen"/>
+		</form>
+	</notification>
+	<notification name="GodMessage">
+		[NAME]
+[MESSAGE]
+	</notification>
+	<notification name="JoinGroup">
+		[MESSAGE]
+		<form name="form">
+			<button name="Join" text="Beitreten"/>
+			<button name="Decline" text="Ablehnen"/>
+			<button name="Info" text="Info"/>
+		</form>
+	</notification>
+	<notification name="TeleportOffered">
+		[NAME] hat angeboten, Sie zu ihrem/seinem Standort zu teleportieren:
+
+[MESSAGE]
+		<form name="form">
+			<button name="Teleport" text="Teleportieren"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="GotoURL">
+		[MESSAGE]
+[URL]
+		<form name="form">
+			<button name="Later" text="Später"/>
+			<button name="GoNow..." text="Jetzt gehen..."/>
+		</form>
+	</notification>
+	<notification name="OfferFriendship">
+		[NAME] bietet Ihnen die Freundschaft an.
+
+[MESSAGE]
+
+(Standardmäßig werden Sie gegenseitig ihren Online-Status sehen können.)
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+		</form>
+	</notification>
+	<notification name="OfferFriendshipNoMessage">
+		[NAME] bietet Ihnen die Freundschaft an.
+
+(Sie werden dadurch den gegenseitigen Online-Status sehen können.)
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+		</form>
+	</notification>
+	<notification name="FriendshipAccepted">
+		[NAME] hat Ihr Freundschaftsangebot akzeptiert.
+	</notification>
+	<notification name="FriendshipDeclined">
+		[NAME] hat Ihr Freundschaftsangebot abgelehnt.
+	</notification>
+	<notification name="OfferCallingCard">
+		[FIRST] [LAST] bietet Ihnen eine Visitenkarte an.
+Dies erstellt ein Lesezeichen in Ihrem Inventar, damit Sie diesen Einwohner jederzeit über IM erreichen.
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+		</form>
+	</notification>
+	<notification name="RegionRestartMinutes">
+		Region wird in [MINUTES] Minuten neu gestartet.
+Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
+	</notification>
+	<notification name="RegionRestartSeconds">
+		Diese Region wird in [SECONDS] neu gestartet.
+Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
+	</notification>
+	<notification name="LoadWebPage">
+		Webseite [URL] laden?
+
+[MESSAGE]
+
+Von Objekt: [OBJECTNAME], Eigentümer: [NAME]?
+		<form name="form">
+			<button name="Gotopage" text="Zur Seite"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="FailedToFindWearableUnnamed">
+		[TYPE] nicht in Datenbank.
+	</notification>
+	<notification name="FailedToFindWearable">
+		[TYPE] namens [DESC] nicht in Datenbank.
+	</notification>
+	<notification name="InvalidWearable">
+		Dieser Artikel verwendet eine Funktion, die Ihr Viewer nicht unterstützt. Bitte aktualisieren Sie Ihre Version von [APP_NAME], um diesen Artikel anziehen zu können.
+	</notification>
+	<notification name="ScriptQuestion">
+		Das Objekt „[OBJECTNAME]“, Eigentum von „[NAME]“, möchte:
+
+[QUESTIONS]
+Ist das OK?
+		<form name="form">
+			<button name="Yes" text="Ja"/>
+			<button name="No" text="Nein"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="ScriptQuestionCaution">
+		Ein Objekt namens „[OBJECTNAME]“ des Eigentümers „[NAME]“ möchte:
+
+[QUESTIONS]
+Wenn Sie diesem Objekt und seinem Ersteller nicht vertrauen, sollten Sie diese Anfrage ablehnen.
+
+Anfrage gestatten?
+		<form name="form">
+			<button name="Grant" text="Gewähren"/>
+			<button name="Deny" text="Verweigern"/>
+			<button name="Details" text="Info..."/>
+		</form>
+	</notification>
+	<notification name="ScriptDialog">
+		[FIRST] [LAST]s „[TITLE]“
+[MESSAGE]
+		<form name="form">
+			<button name="Ignore" text="Ignorieren"/>
+		</form>
+	</notification>
+	<notification name="ScriptDialogGroup">
+		[GROUPNAME]s „[TITLE]“
+[MESSAGE]
+		<form name="form">
+			<button name="Ignore" text="Ignorieren"/>
+		</form>
+	</notification>
+	<notification name="FirstBalanceIncrease">
+		Sie haben gerade [AMOUNT] L$ erhalten.
+Ihr Kontostand wird oben rechts angezeigt.
+	</notification>
+	<notification name="FirstBalanceDecrease">
+		Sie haben gerade [AMOUNT] L$ bezahlt.
+Ihr Kontostand wird oben rechts angezeigt.
+	</notification>
+	<notification name="FirstSit">
+		Sie sitzen.
+Verwenden Sie die Pfeiltasten (oder AWSD-Tasten), um sich umzusehen.
+Um aufzustehen, klicken Sie auf die Schaltfläche „Aufstehen“.
+	</notification>
+	<notification name="FirstMap">
+		Klicken Sie auf die Karte und bewegen Sie die Maus, um sich auf der Karte umzusehen.
+Mit Doppelklick können Sie teleportieren.
+Nutzen Sie die Optionen rechts, um Objekte, Einwohner oder Events anzuzeigen und einen anderen Hintergrund auszuwählen.
+	</notification>
+	<notification name="FirstBuild">
+		Sie haben die Bauwerkzeuge geöffnet. Jedes Objekt, dass Sie sehen wurde mit diesen Werkzeugen gebaut.
+	</notification>
+	<notification name="FirstTeleport">
+		Sie können nur zu bestimmten Bereichen in dieser Region teleportieren. Der Pfeil deutet zu Ihrem Ziel hin. Klicken Sie auf den Pfeil, um diesen auszublenden.
+	</notification>
+	<notification name="FirstOverrideKeys">
+		Ihre Bewegungstasten werden jetzt von einem Objekt gesteuert.
+Probieren Sie die Pfeil- oder WASD-Tasten aus.
+Manche Objekte (wie Waffen) müssen per Mouselook gesteuert werden.
+Drücken Sie dazu „M“.
+	</notification>
+	<notification name="FirstAppearance">
+		Sie bearbeiten gerade Ihr Aussehen.
+Verwenden Sie die Pfeiltasten, um sich umzusehen.
+Klicken Sie auf „Alles speichern“, wenn Sie fertig sind.
+	</notification>
+	<notification name="FirstInventory">
+		Dies ist Ihr Inventar. Es enthält Objekte, die Ihnen gehören.
+
+* Um etwas anzuziehen, ziehen Sie es mit der Maus auf Ihren Avatar.
+* Um etwas inworld zu rezzen, ziehen Sie das Objekt auf den Boden.
+* Zum Lesen einer Notizkarte klicken Sie sie doppelt an.
+	</notification>
+	<notification name="FirstSandbox">
+		Dies ist ein Sandkasten. Hier können Einwohner lernen, wie Objekte gebaut werden. 
+
+Objekte, die Sie hier bauen, werden gelöscht, nachdem Sie den Sandkasten verlassen. Vergessen Sie nicht, Ihr Werk mit einem Rechtsklick und der Auswahl „Nehmen“ in Ihrem Inventar zu speichern.
+	</notification>
+	<notification name="FirstFlexible">
+		Dieses Objekt ist flexibel. Flexible Objekte müssen die Eigenschaft „Phantom“ haben und dürfen nicht „physisch“ sein.
+	</notification>
+	<notification name="FirstDebugMenus">
+		Sie haben das Menü „Erweitert“ geöffnet.
+
+Um dieses Menü zu aktivieren bzw. deaktivieren:
+  Windows Strg-Alt-D
+  Mac ⌘-Opt-D
+	</notification>
+	<notification name="FirstSculptedPrim">
+		Sie bearbeiten ein geformtes Primitiv. Geformte Primitive benötigen eine spezielle Textur, die ihre Form definiert.
+	</notification>
+	<notification name="MaxListSelectMessage">
+		Sie können maximal [MAX_SELECT] Objekte
+von der Liste auswählen.
+	</notification>
+	<notification name="VoiceInviteP2P">
+		[NAME] lädt Sie zu einem Voice-Chat ein.
+Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Anrufer stumm zu schalten.
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="AutoUnmuteByIM">
+		[FIRST] [LAST] hat eine Instant Message erhalten; die Stummschaltung wurde aufgehoben.
+	</notification>
+	<notification name="AutoUnmuteByMoney">
+		[FIRST] [LAST] hat Geld erhalten; die Stummschaltung wurde aufgehoben.
+	</notification>
+	<notification name="AutoUnmuteByInventory">
+		[FIRST] [LAST] wurde ein Inventarobjekt angeboten; die Stummschaltung wurde aufgehoben.
+	</notification>
+	<notification name="VoiceInviteGroup">
+		[NAME] ist einem Voice-Chat mit der Gruppe [GROUP] beigetreten.
+Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Anrufer stumm zu schalten.
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="VoiceInviteAdHoc">
+		[NAME] ist einem Voice-Konferenz-Chat beigetreten.
+Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Benutzer stumm zu schalten.
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="InviteAdHoc">
+		[NAME] lädt Sie zu einem Konferenz-Chat ein.
+Klicken Sie auf „Akzeptieren“, um dem Chat beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Benutzer stumm zu schalten.
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="VoiceChannelFull">
+		Der Voice-Chat, dem Sie beitreten möchten, [VOICE_CHANNEL_NAME], hat seine maximale Teilnehmerzahl erreicht. Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="ProximalVoiceChannelFull">
+		Es tut uns Leid.  Dieses Gebiet hat seine maximale Kapazität für Voice-Gespräche erreicht.  Bitte versuchen Sie es in einem anderen Gebiet.
+	</notification>
+	<notification name="VoiceChannelDisconnected">
+		Sie haben [VOICE_CHANNEL_NAME] verlassen.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+	</notification>
+	<notification name="VoiceChannelDisconnectedP2P">
+		[VOICE_CHANNEL_NAME] hat das Gespräch beendet.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+	</notification>
+	<notification name="P2PCallDeclined">
+		[VOICE_CHANNEL_NAME] hat Ihren Anruf abgelehnt.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+	</notification>
+	<notification name="P2PCallNoAnswer">
+		[VOICE_CHANNEL_NAME] ist zurzeit nicht erreichbar.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+	</notification>
+	<notification name="VoiceChannelJoinFailed">
+		Verbindung zu [VOICE_CHANNEL_NAME] nicht möglich. Bitte versuchen Sie es später.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+	</notification>
+	<notification name="VoiceLoginRetry">
+		Wir erstellen einen Voice-Kanal für Sie. Bitte warten Sie einen Moment.
+	</notification>
+	<notification name="Cannot enter parcel: not a group member">
+		Nur Mitglieder einer bestimmten Gruppe dürfen diesen Bereich betreten.
+	</notification>
+	<notification name="Cannot enter parcel: banned">
+		Zugang zur Parzelle verweigert. Sie wurden verbannt.
+	</notification>
+	<notification name="Cannot enter parcel: not on access list">
+		Zugang zur Parzelle verweigert. Sie stehen nicht auf der Zugangsliste.
+	</notification>
+	<notification name="VoiceNotAllowed">
+		Sie sind nicht berechtigt, einem Voice-Chat in [VOICE_CHANNEL_NAME] beizutreten.
+	</notification>
+	<notification name="VoiceCallGenericError">
+		Fehler beim Versuch, eine Voice-Chat-Verbindung zu [VOICE_CHANNEL_NAME] herzustellen.  Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="ServerVersionChanged">
+		Sie haben eine Region betreten, die eine andere Server-Version verwendet. Dies kann sich auf die Leistung auswirken. Klicken Sie hier, um die Versionshinweise anzuzeigen.
+	</notification>
+	<notification name="UnsupportedCommandSLURL">
+		Die SLurl, auf die Sie geklickt haben, wird nicht unterstützt.
+	</notification>
+	<notification name="IMToast">
+		<form name="form">
+			<button name="respondbutton" text="Antworten"/>
+		</form>
+	</notification>
+	<notification name="AttachmentSaved">
+		Der Anhang wurde gespeichert.
+	</notification>
+	<notification name="UnableToFindHelpTopic">
+		Hilfethema für dieses Element wurde nicht gefunden.
+	</notification>
+	<global name="UnsupportedCPU">
+		- Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen.
+	</global>
+	<global name="UnsupportedGLRequirements">
+		Ihr Computer entspricht nicht den Hardwareanforderungen von [APP_NAME]. [APP_NAME] setzt eine OpenGL-Grafikkarte mit Multitextur-Unterstützung voraus. Falls Ihre Grafikkarte diese Funktion unterstützt, installieren Sie die neuesten Treiber sowie die aktuellen Service Packs und Patches für Ihr Betriebssystem.
+
+Sollte das Problem fortbestehen, finden Sie weitere Hilfestellung unter [SUPPORT_SITE].
+	</global>
+	<global name="UnsupportedCPUAmount">
+		796
+	</global>
+	<global name="UnsupportedRAMAmount">
+		510
+	</global>
+	<global name="UnsupportedGPU">
+		- Ihre Grafikkarte entspricht nicht den Mindestanforderungen.
+	</global>
+	<global name="UnsupportedRAM">
+		- Ihr Arbeitsspeicher entspricht nicht den Mindestanforderungen.
+	</global>
+	<global name="PermYes">
+		Ja
+	</global>
+	<global name="PermNo">
+		Nein
+	</global>
+	<global name="You can only set your &apos;Home Location&apos; on your land or at a mainland Infohub.">
+		Wenn Sie ein Stück Land besitzen, können Sie dies als Ihren Heimatort festlegen. 
+Ansonsten können Sie auf der Karte nachsehen und dort Ort suchen, die als „Infohub“ gekennzeichnet sind.
+	</global>
+</notifications>
diff --git a/indra/newview/skins/default/xui/de/panel_edit_profile.xml b/indra/newview/skins/default/xui/de/panel_edit_profile.xml
index 3203eacdb55..4a163c317e2 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_profile.xml
@@ -1,45 +1,38 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
-   <string name="CaptionTextAcctInfo">
-       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
-   </string>
-   <string name="AcctTypeResident"
-    value="Einwohner" />
-   <string name="AcctTypeTrial"
-    value="Test" />
-   <string name="AcctTypeCharterMember"
-    value="Charta-Mitglied" />
-   <string name="AcctTypeEmployee"
-    value="Linden Lab-Mitarbeiter" />
-   <string name="PaymentInfoUsed"
-    value="Zahlungsinfo verwendet" />
-   <string name="PaymentInfoOnFile"
-    value="Zahlungsinfo archiviert" />
-   <string name="NoPaymentInfoOnFile"
-    value="Keine Zahlungsinfo archiviert" />
-   <string name="AgeVerified"
-    value="Altersgeprüft" />
-   <string name="NotAgeVerified"
-    value="Nicht altersgeprüft" />
-   <string name="partner_edit_link_url">
-       http://www.secondlife.com/account/partners.php?lang=de
-   </string>
-    <panel name="scroll_content_panel">
-    <panel name="data_panel" >
-     <panel name="lifes_images_panel">
-          <panel name="second_life_image_panel">
-              <text name="second_life_photo_title_text">
-			[SECOND_LIFE]:
-              </text>
-          </panel>
-      </panel>
-        <text name="title_partner_text" value="Partner:"/>
-        <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
-         </panel>
-      <text name="text_box3">
-	Antwort für Beschäftigt-Modus:
-      </text>
-    </panel>
-    </panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profile Edit" name="edit_profile_panel">
+	<string name="CaptionTextAcctInfo">
+		[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+	</string>
+	<string name="AcctTypeResident" value="Einwohner"/>
+	<string name="AcctTypeTrial" value="Test"/>
+	<string name="AcctTypeCharterMember" value="Charta-Mitglied"/>
+	<string name="AcctTypeEmployee" value="Linden Lab-Mitarbeiter"/>
+	<string name="PaymentInfoUsed" value="Zahlungsinfo verwendet"/>
+	<string name="PaymentInfoOnFile" value="Zahlungsinfo archiviert"/>
+	<string name="NoPaymentInfoOnFile" value="Keine Zahlungsinfo archiviert"/>
+	<string name="AgeVerified" value="Altersgeprüft"/>
+	<string name="NotAgeVerified" value="Nicht altersgeprüft"/>
+	<string name="partner_edit_link_url">
+		http://www.secondlife.com/account/partners.php?lang=de
+	</string>
+	<string name="no_partner_text" value="Keiner"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<panel name="data_panel">
+				<panel name="lifes_images_panel">
+					<icon label="" name="2nd_life_edit_icon" tool_tip="Klicken, um ein Bild auszuwählen"/>
+				</panel>
+				<icon label="" name="real_world_edit_icon" tool_tip="Klicken, um ein Bild auszuwählen"/>
+				<text name="title_homepage_text">
+					Webseite:
+				</text>
+				<check_box label="In Suchergebnissen anzeigen" name="show_in_search_checkbox"/>
+				<text name="title_acc_status_text" value="Kontostatus:"/>
+			</panel>
+		</panel>
+	</scroll_container>
+	<panel name="profile_me_buttons_panel">
+		<button label="Änderungen speichern" name="save_btn"/>
+		<button label="Abbrechen" name="cancel_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_invite.xml b/indra/newview/skins/default/xui/de/panel_group_invite.xml
index 84ba91a63f9..81a255a14f3 100644
--- a/indra/newview/skins/default/xui/de/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_invite.xml
@@ -1,29 +1,29 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="Mitglied einladen" name="invite_panel">
-	<text name="help_text">
-		Sie können mehrere Einwohner in Ihre 
-Gruppe einladen. Klicken Sie hierzu
-auf „Einwohnerliste öffnen“.
-	</text>
-	<button label="Einwohnerliste öffnen" name="add_button" tool_tip=""/>
-	<name_list name="invitee_list"
-	     tool_tip="Halten Sie zur Mehrfachauswahl die Strg-Taste gedrückt und klicken Sie auf die Einwohnernamen." />
-	<button label="Auswahl aus Liste löschen" name="remove_button"
-	     tool_tip="Die oben ausgewählten Einwohner von der Einladungsliste entfernen." />
-	<text>
-		Wählen Sie eine Rolle aus:
-	</text>
-	<text name="role_text">
-		Wählen Sie eine Rolle aus:
-	</text>
-	<combo_box name="role_name"
-	     tool_tip="Wählen Sie aus der Liste der Rollen, die Sie an Mitglieder vergeben dürfen." />
-	<button label="Einladungen versenden" name="ok_button" />
-	<button label="Abbrechen" name="cancel_button" />
-	<string name="confirm_invite_owner_str">
-		Möchten Sie wirklich (einen) neue(n) Eigentümer einladen? Dies kann nicht rückgängig gemacht werden!
-	</string>
-	<text name="loading">
-		(wird geladen...)
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Mitglied einladen" name="invite_panel">
+	<panel.string name="confirm_invite_owner_str">
+		Möchten Sie wirklich (einen) neue(n) Eigentümer einladen? Dies kann nicht rückgängig gemacht werden!
+	</panel.string>
+	<panel.string name="loading">
+		(wird geladen...)
+	</panel.string>
+	<panel.string name="already_in_group">
+		Einige Avatare sind bereits Mitglied und wurden nicht eingeladen.
+	</panel.string>
+	<text name="help_text">
+		Sie können mehrere Einwohner in Ihre 
+Gruppe einladen. Klicken Sie hierzu
+auf „Einwohnerliste öffnen“.
+	</text>
+	<button label="Einwohnerliste öffnen" name="add_button" tool_tip=""/>
+	<name_list name="invitee_list" tool_tip="Halten Sie zur Mehrfachauswahl die Strg-Taste gedrückt und klicken Sie auf die Einwohnernamen."/>
+	<button label="Auswahl aus Liste löschen" name="remove_button" tool_tip="Die oben ausgewählten Einwohner von der Einladungsliste entfernen."/>
+	<text name="role_text">
+		Wählen Sie eine Rolle aus:
+	</text>
+	<combo_box name="role_name" tool_tip="Wählen Sie aus der Liste der Rollen, die Sie an Mitglieder vergeben dürfen."/>
+	<button label="Einladungen versenden" name="ok_button"/>
+	<button label="Abbrechen" name="cancel_button"/>
+	<string name="GroupInvitation">
+		Gruppeneinladung
+	</string>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_land_money.xml b/indra/newview/skins/default/xui/de/panel_group_land_money.xml
index bc39a3a1bbf..fcd8cd358fb 100644
--- a/indra/newview/skins/default/xui/de/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_land_money.xml
@@ -1,171 +1,170 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Land und L$" name="land_money_tab">
-	<string name="help_text">
-		Parzellen in Gruppenbesitz werden zusammen mit Beitragsdetails angezeigt. Ein Warnhinweis wird angezeigt, solange der Wert für das insgesamt verwendete Land gleich oder weniger ist als der Gesamtbeitrag. Die Registerkarten „Planung“, „Details“ und „Verkäufe“ enthalten Informationen über die Gruppenfinanzen.
-	</string>
-	<button label="?" name="help_button"/>
-	<string name="cant_view_group_land_text">
-		Sie sind nicht berechtigt, Landeigentum der Gruppe anzuzeigen.
-	</string>
-	<string name="cant_view_group_accounting_text">
-		Sie sind nicht berechtigt, die Finanzinformationen der Gruppe anzuzeigen.
-	</string>
-	<string name="loading_txt">
-		Wird geladen...
-	</string>
-	<text name="group_land_heading">
-		Land in Gruppenbesitz
-	</text>
-	<scroll_list name="group_parcel_list">
-		<column label="Parzellenname" name="name"/>
-		<column label="Region" name="location"/>
-		<column label="Typ" name="type"/>
-		<column label="Gebiet" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="Auf Karte" label_selected="Auf Karte" name="map_button"/>
-	<text name="total_contributed_land_label">
-		Gesamtbeitrag:
-	</text>
-	<text name="total_contributed_land_value">
-		[AREA] qm
-	</text>
-	<text name="total_land_in_use_label">
-		Insgesamt verwendetes Land:
-	</text>
-	<text name="total_land_in_use_value">
-		[AREA] qm
-	</text>
-	<text name="land_available_label">
-		Land verfügbar:
-	</text>
-	<text name="land_available_value">
-		[AREA] qm
-	</text>
-	<text name="your_contribution_label">
-		Ihr Beitrag:
-	</text>
-	<string name="land_contrib_error">
-		Ihr Landbeitrag kann nicht festgelegt werden.
-	</string>
-	<text name="your_contribution_units">
-		( qm )
-	</text>
-	<text name="your_contribution_max_value">
-		(max. [AMOUNT])
-	</text>
-	<text name="group_over_limit_text">
-		Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit das verwendete Land gehalten werden kann.
-	</text>
-	<text name="group_money_heading">
-		Gruppen-L$
-	</text>
-	<tab_container name="group_money_tab_container">
-		<panel label="Planung" name="group_money_planning_tab">
-			<text_editor name="group_money_planning_text">
-				Wird berechnet...
-			</text_editor>
-		</panel>
-		<panel label="Details" name="group_money_details_tab">
-			<text_editor name="group_money_details_text">
-				Wird berechnet...
-			</text_editor>
-			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_details_button" tool_tip="Zurück in der Zeit"/>
-			<button label="Später &gt;" label_selected="Später &gt;" name="later_details_button" tool_tip="Weiter in der Zeit"/>
-		</panel>
-		<panel label="Verkäufe" name="group_money_sales_tab">
-			<text_editor name="group_money_sales_text">
-				Wird berechnet...
-			</text_editor>
-			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_sales_button" tool_tip="Zurück in der Zeit"/>
-			<button label="Später &gt;" label_selected="Später &gt;" name="later_sales_button" tool_tip="Weiter in der Zeit"/>
-		</panel>
-	</tab_container>
-</panel>
-
-<!--
-
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Land und L$" name="land_money_tab">
-	<string name="help_text">
-		Parzellen in Gruppenbesitz werden zusammen mit Beitragsdetails angezeigt. Ein Warnhinweis wird angezeigt, solange der Wert für das insgesamt verwendete Land gleich oder weniger ist als der Gesamtbeitrag. Die Registerkarten „Planung“, „Details“ und „Verkäufe“ enthalten Informationen über die Gruppenfinanzen.
-	</string>
-	<button label="?" name="help_button"/>
-	<string name="cant_view_group_land_text">
-		Sie sind nicht berechtigt, Landeigentum der Gruppe anzuzeigen.
-	</string>
-	<string name="cant_view_group_accounting_text">
-		Sie sind nicht berechtigt, die Finanzinformationen der Gruppe anzuzeigen.
-	</string>
-	<string name="loading_txt">
-		Wird geladen...
-	</string>
-	<text name="group_land_heading">
-		Land in Gruppenbesitz
-	</text>
-	<scroll_list name="group_parcel_list">
-		<column label="Parzellenname" name="name"/>
-		<column label="Region" name="location"/>
-		<column label="Typ" name="type"/>
-		<column label="Gebiet" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="Auf Karte" label_selected="Auf Karte" name="map_button"/>
-	<text name="total_contributed_land_label">
-		Gesamtbeitrag:
-	</text>
-	<text name="total_contributed_land_value">
-		[AREA] qm
-	</text>
-	<text name="total_land_in_use_label">
-		Insgesamt verwendetes Land:
-	</text>
-	<text name="total_land_in_use_value">
-		[AREA] qm
-	</text>
-	<text name="land_available_label">
-		Land verfügbar:
-	</text>
-	<text name="land_available_value">
-		[AREA] qm
-	</text>
-	<text name="your_contribution_label">
-		Ihr Beitrag:
-	</text>
-	<string name="land_contrib_error">
-		Ihr Landbeitrag kann nicht festgelegt werden.
-	</string>
-	<text name="your_contribution_max_value">
-		qm (max. [AMOUNT])
-	</text>
-	<text name="group_over_limit_text">
-		Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit
-das verwendete Land gehalten werden kann.
-	</text>
-	<text name="group_money_heading">
-		Gruppen-L$
-	</text>
-	<tab_container name="group_money_tab_container">
-		<panel label="Planung" name="group_money_planning_tab">
-			<text_editor name="group_money_planning_text">
-				Wird berechnet...
-			</text_editor>
-		</panel>
-		<panel label="Details" name="group_money_details_tab">
-			<text_editor name="group_money_details_text">
-				Wird berechnet...
-			</text_editor>
-			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_details_button" tool_tip="Zurück in der Zeit"/>
-			<button label="Später &gt;" label_selected="Später &gt;" name="later_details_button" tool_tip="Weiter in der Zeit"/>
-		</panel>
-		<panel label="Verkäufe" name="group_money_sales_tab">
-			<text_editor name="group_money_sales_text">
-				Wird berechnet...
-			</text_editor>
-			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_sales_button" tool_tip="Zurück in der Zeit"/>
-			<button label="Später &gt;" label_selected="Später &gt;" name="later_sales_button" tool_tip="Weiter in der Zeit"/>
-		</panel>
-	</tab_container>
-</panel>
-
--->
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Land und L$" name="land_money_tab">
+	<string name="help_text">
+		Parzellen in Gruppenbesitz werden zusammen mit Beitragsdetails angezeigt. Ein Warnhinweis wird angezeigt, solange der Wert für das insgesamt verwendete Land gleich oder weniger ist als der Gesamtbeitrag. Die Registerkarten „Planung“, „Details“ und „Verkäufe“ enthalten Informationen über die Gruppenfinanzen.
+	</string>
+	<button label="?" name="help_button"/>
+	<string name="cant_view_group_land_text">
+		Sie sind nicht berechtigt, Landeigentum der Gruppe anzuzeigen.
+	</string>
+	<string name="cant_view_group_accounting_text">
+		Sie sind nicht berechtigt, die Finanzinformationen der Gruppe anzuzeigen.
+	</string>
+	<string name="loading_txt">
+		Wird geladen...
+	</string>
+	<text name="group_land_heading">
+		Land in Gruppenbesitz
+	</text>
+	<scroll_list name="group_parcel_list">
+		<column label="Parzelle" name="name"/>
+		<column label="Region" name="location"/>
+		<column label="Typ" name="type"/>
+		<column label="Gebiet" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="Karte" label_selected="Karte" name="map_button"/>
+	<text name="total_contributed_land_label">
+		Gesamtbeitrag:
+	</text>
+	<text name="total_contributed_land_value">
+		[AREA] qm
+	</text>
+	<text name="total_land_in_use_label">
+		Insgesamt verwendetes Land:
+	</text>
+	<text name="total_land_in_use_value">
+		[AREA] qm
+	</text>
+	<text name="land_available_label">
+		Land verfügbar:
+	</text>
+	<text name="land_available_value">
+		[AREA] qm
+	</text>
+	<text name="your_contribution_label">
+		Ihr Beitrag:
+	</text>
+	<string name="land_contrib_error">
+		Ihr Landbeitrag kann nicht festgelegt werden.
+	</string>
+	<text name="your_contribution_units">
+		( qm )
+	</text>
+	<text name="your_contribution_max_value">
+		(max. [AMOUNT])
+	</text>
+	<text name="group_over_limit_text">
+		Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit das verwendete Land gehalten werden kann.
+	</text>
+	<text name="group_money_heading">
+		Gruppen-L$
+	</text>
+	<tab_container name="group_money_tab_container">
+		<panel label="Planung" name="group_money_planning_tab">
+			<text_editor name="group_money_planning_text">
+				Wird berechnet...
+			</text_editor>
+		</panel>
+		<panel label="Details" name="group_money_details_tab">
+			<text_editor name="group_money_details_text">
+				Wird berechnet...
+			</text_editor>
+			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_details_button" tool_tip="Zurück in der Zeit"/>
+			<button label="Später &gt;" label_selected="Später &gt;" name="later_details_button" tool_tip="Weiter in der Zeit"/>
+		</panel>
+		<panel label="Verkäufe" name="group_money_sales_tab">
+			<text_editor name="group_money_sales_text">
+				Wird berechnet...
+			</text_editor>
+			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_sales_button" tool_tip="Zurück in der Zeit"/>
+			<button label="Später &gt;" label_selected="Später &gt;" name="later_sales_button" tool_tip="Weiter in der Zeit"/>
+		</panel>
+	</tab_container>
+</panel>
+<!--
+
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Land und L$" name="land_money_tab">
+	<string name="help_text">
+		Parzellen in Gruppenbesitz werden zusammen mit Beitragsdetails angezeigt. Ein Warnhinweis wird angezeigt, solange der Wert für das insgesamt verwendete Land gleich oder weniger ist als der Gesamtbeitrag. Die Registerkarten „Planung“, „Details“ und „Verkäufe“ enthalten Informationen über die Gruppenfinanzen.
+	</string>
+	<button label="?" name="help_button"/>
+	<string name="cant_view_group_land_text">
+		Sie sind nicht berechtigt, Landeigentum der Gruppe anzuzeigen.
+	</string>
+	<string name="cant_view_group_accounting_text">
+		Sie sind nicht berechtigt, die Finanzinformationen der Gruppe anzuzeigen.
+	</string>
+	<string name="loading_txt">
+		Wird geladen...
+	</string>
+	<text name="group_land_heading">
+		Land in Gruppenbesitz
+	</text>
+	<scroll_list name="group_parcel_list">
+		<column label="Parzellenname" name="name"/>
+		<column label="Region" name="location"/>
+		<column label="Typ" name="type"/>
+		<column label="Gebiet" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="Auf Karte" label_selected="Auf Karte" name="map_button"/>
+	<text name="total_contributed_land_label">
+		Gesamtbeitrag:
+	</text>
+	<text name="total_contributed_land_value">
+		[AREA] qm
+	</text>
+	<text name="total_land_in_use_label">
+		Insgesamt verwendetes Land:
+	</text>
+	<text name="total_land_in_use_value">
+		[AREA] qm
+	</text>
+	<text name="land_available_label">
+		Land verfügbar:
+	</text>
+	<text name="land_available_value">
+		[AREA] qm
+	</text>
+	<text name="your_contribution_label">
+		Ihr Beitrag:
+	</text>
+	<string name="land_contrib_error">
+		Ihr Landbeitrag kann nicht festgelegt werden.
+	</string>
+	<text name="your_contribution_max_value">
+		qm (max. [AMOUNT])
+	</text>
+	<text name="group_over_limit_text">
+		Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit
+das verwendete Land gehalten werden kann.
+	</text>
+	<text name="group_money_heading">
+		Gruppen-L$
+	</text>
+	<tab_container name="group_money_tab_container">
+		<panel label="Planung" name="group_money_planning_tab">
+			<text_editor name="group_money_planning_text">
+				Wird berechnet...
+			</text_editor>
+		</panel>
+		<panel label="Details" name="group_money_details_tab">
+			<text_editor name="group_money_details_text">
+				Wird berechnet...
+			</text_editor>
+			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_details_button" tool_tip="Zurück in der Zeit"/>
+			<button label="Später &gt;" label_selected="Später &gt;" name="later_details_button" tool_tip="Weiter in der Zeit"/>
+		</panel>
+		<panel label="Verkäufe" name="group_money_sales_tab">
+			<text_editor name="group_money_sales_text">
+				Wird berechnet...
+			</text_editor>
+			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_sales_button" tool_tip="Zurück in der Zeit"/>
+			<button label="Später &gt;" label_selected="Später &gt;" name="later_sales_button" tool_tip="Weiter in der Zeit"/>
+		</panel>
+	</tab_container>
+</panel>
+
+-->
diff --git a/indra/newview/skins/default/xui/de/panel_group_notices.xml b/indra/newview/skins/default/xui/de/panel_group_notices.xml
index ff6f957a73f..137713b7712 100644
--- a/indra/newview/skins/default/xui/de/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_notices.xml
@@ -1,156 +1,147 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="Mitteilungen" name="notices_tab">
-	<text name="help_text">
-		Mitteilungen sind eine schnelle Möglichkeit, 
-Mitglieder auf dem Laufenden zu halten und 
-Objekte im Anhang zu versenden. Mitteilungen werden
-nur an Mitglieder mit einer entsprechenden Rolle 
-gesendet. Mitteilungen können unter 
-„Allgemein“ ausgeschaltet werden.
-	</text>
-	<text name="no_notices_text">
-		Keine älteren Mitteilungen.
-	</text>
-	<button label="?" label_selected="?" name="help_button" />
-	<text name="lbl">
-		Gruppenmitteilungsarchiv
-	</text>
-	<text name="lbl2">
-		Mitteilungen werden 14 Tage lang aufbewahrt. Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich.
-	</text>
-	<scroll_list name="notice_list">
-		<column label="" name="icon" />
-		<column label="Thema" name="subject" />
-		<column label="Von" name="from" />
-		<column label="Datum" name="date" />
-	</scroll_list>
-	<text name="notice_list_none_found">
-		Nicht gefunden.
-	</text>
-	<button label="Neue Mitteilung" label_selected="Neue Mitteilung"
-	     name="create_new_notice" />
-	<button label="Aktualisieren" label_selected="Liste aktualisieren"
-	     name="refresh_notices" />
-	<panel label="Neue Mitteilung" name="panel_create_new_notice">
-		<text name="lbl">
-			Mitteilung schreiben
-		</text>
-		<text name="lbl2">
-			Sie können der Mitteilung ein Objekt anfügen, indem Sie es aus dem Inventar in dieses Feld ziehen. Angehängte Objekte müssen kopier-und transferierbar sein. Ordner können nicht gesendet werden.
-		</text>
-		<text name="lbl3">
-			Betreff:
-		</text>
-		<text name="lbl4">
-			Nachricht:
-		</text>
-		<text name="lbl5">
-			Anhängen:
-		</text>
-		<button label="Anhang entfernen" label_selected="Anhang entfernen"
-		     name="remove_attachment" />
-		<button label="Senden" label_selected="Senden" name="send_notice" />
-		<panel name="drop_target"
-		     tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." />
-	</panel>
-	<panel label="Ältere Notiz anzeigen" name="panel_view_past_notice">
-		<text name="lbl">
-			Archivierte Mitteilung
-		</text>
-		<text name="lbl2">
-			Klicken Sie zum Senden einer Mitteilung auf „Neue Mitteilung“.
-		</text>
-		<text name="lbl3">
-			Betreff:
-		</text>
-		<text name="lbl4">
-			Nachricht:
-		</text>
-		<button label="Anlage öffnen" label_selected="Anlage öffnen" name="open_attachment" />
-	</panel>
-</panel>
-
-
-<!-- original file
-
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="Mitteilungen" name="notices_tab">
-	<text name="help_text">
-		Mitteilungen sind eine schnelle Möglichkeit, 
-Mitglieder auf dem Laufenden zu halten und 
-Objekte im Anhang zu versenden. Mitteilungen werden
-nur an Mitglieder mit einer entsprechenden Rolle 
-gesendet. Mitteilungen können unter 
-„Allgemein“ ausgeschaltet werden.
-	</text>
-	<text name="no_notices_text">
-		Keine älteren Mitteilungen.
-	</text>
-	<button label="?" label_selected="?" name="help_button" />
-	<text name="lbl">
-		Gruppenmitteilungsarchiv
-	</text>
-	<text name="lbl2">
-		Mitteilungen werden 14 Tage lang aufbewahrt. Klicken Sie auf eine Mitteilung,
-um sie anzuzeigen. Klicken Sie „Aktualisieren“, um neue Mitteilungen zu suchen.
-Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich.
-	</text>
-	<scroll_list name="notice_list">
-		<column label="" name="icon" />
-		<column label="Thema" name="subject" />
-		<column label="Von" name="from" />
-		<column label="Datum" name="date" />
-	</scroll_list>
-	<text name="notice_list_none_found">
-		Nicht gefunden.
-	</text>
-	<button label="Neue Mitteilung" label_selected="Neue Mitteilung"
-	     name="create_new_notice" />
-	<button label="Aktualisieren" label_selected="Liste aktualisieren"
-	     name="refresh_notices" />
-	<panel label="Neue Mitteilung" name="panel_create_new_notice">
-		<text name="lbl">
-			Mitteilung schreiben
-		</text>
-		<text name="lbl2">
-			Geben Sie einen Betreff für die Mitteilung ein. Sie können der
-Mitteilung ein Objekt anfügen, indem Sie es aus dem Inventar
-in dieses Feld ziehen. Angehängte Objekte müssen kopier-
-und transferierbar sein. Ordner können nicht gesendet werden.
-		</text>
-		<text name="lbl3">
-			Betreff:
-		</text>
-		<text name="lbl4">
-			Nachricht:
-		</text>
-		<text name="lbl5">
-			Anhängen:
-		</text>
-		<button label="Anhang entfernen" label_selected="Anhang entfernen"
-		     name="remove_attachment" />
-		<button label="Mitteilung senden" label_selected="Mitteilung senden" name="send_notice" />
-		<panel name="drop_target"
-		     tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." />
-	</panel>
-	<panel label="Ältere Notiz anzeigen" name="panel_view_past_notice">
-		<text name="lbl">
-			Archivierte Mitteilung
-		</text>
-		<text name="lbl2">
-			Klicken Sie zum Senden einer Mitteilung auf „Neue Mitteilung“.
-		</text>
-		<text name="lbl3">
-			Betreff:
-		</text>
-		<text name="lbl4">
-			Nachricht:
-		</text>
-		<button label="Anlage öffnen" label_selected="Anlage öffnen" name="open_attachment" />
-	</panel>
-</panel>
-
--->
-
-
-
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Mitteilungen" name="notices_tab">
+	<text name="help_text">
+		Mitteilungen sind eine schnelle Möglichkeit, 
+Mitglieder auf dem Laufenden zu halten und 
+Objekte im Anhang zu versenden. Mitteilungen werden
+nur an Mitglieder mit einer entsprechenden Rolle 
+gesendet. Mitteilungen können unter 
+„Allgemein“ ausgeschaltet werden.
+	</text>
+	<text name="no_notices_text">
+		Keine älteren Mitteilungen.
+	</text>
+	<button label="?" label_selected="?" name="help_button"/>
+	<text name="lbl">
+		Gruppenmitteilungsarchiv
+	</text>
+	<text name="lbl2">
+		Mitteilungen werden 14 Tage lang aufbewahrt. Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich.
+	</text>
+	<scroll_list name="notice_list">
+		<column label="" name="icon"/>
+		<column label="Thema" name="subject"/>
+		<column label="Von" name="from"/>
+		<column label="Datum" name="date"/>
+	</scroll_list>
+	<text name="notice_list_none_found">
+		Nicht gefunden.
+	</text>
+	<button label="Neue Mitteilung" label_selected="Neue Mitteilung" name="create_new_notice"/>
+	<button label="Aktualisieren" label_selected="Liste aktualisieren" name="refresh_notices"/>
+	<panel label="Neue Mitteilung" name="panel_create_new_notice">
+		<text name="lbl">
+			Mitteilung schreiben
+		</text>
+		<text name="lbl2">
+			Sie können ein Objekt zu einer Mitteilung hinzufügen, wenn Sie es aus Ihrem Inventar auf dieses Feld ziehen. Die angehängten Objekte müssen kopier- und übertragbar sein. Ordner können nicht verschickt werden.
+		</text>
+		<text name="lbl3">
+			Betreff:
+		</text>
+		<text name="lbl4">
+			Nachricht:
+		</text>
+		<text name="lbl5">
+			Anhängen:
+		</text>
+		<button label="Anhang entfernen" label_selected="Anhang entfernen" name="remove_attachment"/>
+		<button label="Senden" label_selected="Senden" name="send_notice"/>
+		<panel name="drop_target" tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice."/>
+	</panel>
+	<panel label="Ältere Notiz anzeigen" name="panel_view_past_notice">
+		<text name="lbl">
+			Archivierte Mitteilung
+		</text>
+		<text name="lbl2">
+			Klicken Sie zum Senden einer Mitteilung auf „Neue Mitteilung“.
+		</text>
+		<text name="lbl3">
+			Betreff:
+		</text>
+		<text name="lbl4">
+			Nachricht:
+		</text>
+		<button label="Anlage öffnen" label_selected="Anlage öffnen" name="open_attachment"/>
+	</panel>
+</panel>
+<!-- original file
+
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel label="Mitteilungen" name="notices_tab">
+	<text name="help_text">
+		Mitteilungen sind eine schnelle Möglichkeit, 
+Mitglieder auf dem Laufenden zu halten und 
+Objekte im Anhang zu versenden. Mitteilungen werden
+nur an Mitglieder mit einer entsprechenden Rolle 
+gesendet. Mitteilungen können unter 
+„Allgemein“ ausgeschaltet werden.
+	</text>
+	<text name="no_notices_text">
+		Keine älteren Mitteilungen.
+	</text>
+	<button label="?" label_selected="?" name="help_button" />
+	<text name="lbl">
+		Gruppenmitteilungsarchiv
+	</text>
+	<text name="lbl2">
+		Mitteilungen werden 14 Tage lang aufbewahrt. Klicken Sie auf eine Mitteilung,
+um sie anzuzeigen. Klicken Sie „Aktualisieren“, um neue Mitteilungen zu suchen.
+Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich.
+	</text>
+	<scroll_list name="notice_list">
+		<column label="" name="icon" />
+		<column label="Thema" name="subject" />
+		<column label="Von" name="from" />
+		<column label="Datum" name="date" />
+	</scroll_list>
+	<text name="notice_list_none_found">
+		Nicht gefunden.
+	</text>
+	<button label="Neue Mitteilung" label_selected="Neue Mitteilung"
+	     name="create_new_notice" />
+	<button label="Aktualisieren" label_selected="Liste aktualisieren"
+	     name="refresh_notices" />
+	<panel label="Neue Mitteilung" name="panel_create_new_notice">
+		<text name="lbl">
+			Mitteilung schreiben
+		</text>
+		<text name="lbl2">
+			Geben Sie einen Betreff für die Mitteilung ein. Sie können der
+Mitteilung ein Objekt anfügen, indem Sie es aus dem Inventar
+in dieses Feld ziehen. Angehängte Objekte müssen kopier-
+und transferierbar sein. Ordner können nicht gesendet werden.
+		</text>
+		<text name="lbl3">
+			Betreff:
+		</text>
+		<text name="lbl4">
+			Nachricht:
+		</text>
+		<text name="lbl5">
+			Anhängen:
+		</text>
+		<button label="Anhang entfernen" label_selected="Anhang entfernen"
+		     name="remove_attachment" />
+		<button label="Mitteilung senden" label_selected="Mitteilung senden" name="send_notice" />
+		<panel name="drop_target"
+		     tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." />
+	</panel>
+	<panel label="Ältere Notiz anzeigen" name="panel_view_past_notice">
+		<text name="lbl">
+			Archivierte Mitteilung
+		</text>
+		<text name="lbl2">
+			Klicken Sie zum Senden einer Mitteilung auf „Neue Mitteilung“.
+		</text>
+		<text name="lbl3">
+			Betreff:
+		</text>
+		<text name="lbl4">
+			Nachricht:
+		</text>
+		<button label="Anlage öffnen" label_selected="Anlage öffnen" name="open_attachment" />
+	</panel>
+</panel>
+
+-->
diff --git a/indra/newview/skins/default/xui/de/panel_group_roles.xml b/indra/newview/skins/default/xui/de/panel_group_roles.xml
index d7f47de46fa..a8080afeb3c 100644
--- a/indra/newview/skins/default/xui/de/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_roles.xml
@@ -1,316 +1,118 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Mitglieder und Rollen" name="roles_tab">
-	<string name="default_needs_apply_text">
-		Das Unterregister enthält nicht übernommene Änderungen.
-	</string>
-	<string name="want_apply_text">
-		Diese Änderungen übernehmen?
-	</string>
-	<button label="?" name="help_button"/>
-	<panel name="members_header">
-		<text name="static">
-			Mitglieder und Rollen
-		</text>
-		<text name="static2">
-			Gruppenmitgliedern werden Rollen mit Fähigkeiten zugewiesen. Diese Einstellungen können zur flexibleren Organisation angepasst werden.
-		</text>
-	</panel>
-	<panel name="roles_header">
-		<text name="static">
-			Rollen
-		</text>
-		<text name="role_properties_modifiable">
-			Wählen Sie eine Rolle. Sie können ihren Namen, ihre Beschreibung und den Mitgliedstitel ändern.
-		</text>
-		<text name="role_properties_not_modifiable">
-			Rolle anklicken um Mitglieder und Fähigkeiten anzuzeigen.
-		</text>
-		<text name="role_actions_modifiable">
-			Sie können der Rolle auch Fähigkeiten zuweisen.
-		</text>
-		<text name="role_actions_not_modifiable">
-			Sie können zugewiesene Fähigkeiten anzeigen, aber nicht bearbeiten.
-		</text>
-	</panel>
-	<panel name="actions_header">
-		<text name="static">
-			Fähigkeiten
-		</text>
-		<text name="static2">
-			Sie können Fähigkeiten-Beschreibungen anzeigen und welche Rollen bzw. Mitglieder diese Fähigkeit haben.
-		</text>
-	</panel>
-	<tab_container name="roles_tab_container">
-		<panel label="Mitglieder" name="members_sub_tab" tool_tip="Mitglieder">
-			<button label="Suchen" name="search_button"/>
-			<button label="Alle anzeigen" name="show_all_button"/>
-			<name_list name="member_list">
-				<column label="Mitgliedsname" name="name"/>
-				<column label="Ãœbertragene Landanteile" name="donated"/>
-				<column label="Letzte Anmeldung" name="online"/>
-			</name_list>
-			<button label="Neues Mitglied einladen..." name="member_invite"/>
-			<button label="Aus Gruppe werfen" name="member_eject"/>
-			<string name="help_text">
-				Sie können Mitgliedern Rollen zuweisen und entziehen.
-Drücken Sie die Strg-Taste und klicken Sie auf Namen,
-um mehrere Mitglieder auszuwählen.
-			</string>
-		</panel>
-		<panel label="Rollen" name="roles_sub_tab">
-			<button label="Suchen" name="search_button"/>
-			<button label="Alle anzeigen" name="show_all_button"/>
-			<scroll_list name="role_list">
-				<column label="Rolle" name="name"/>
-				<column label="Titel" name="title"/>
-				<column label="Mitglieder" name="members"/>
-			</scroll_list>
-			<button label="Neue Rolle erstellen..." name="role_create"/>
-			<button label="Rolle löschen" name="role_delete"/>
-			<string name="help_text">
-				Rollen haben einen Titel und umfassen bestimmte
-Fähigkeiten. Mitglieder können mehrere 
-Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen
-definieren, darunter „Jeder“ und „Eigentümer“.
-			</string>
-			<string name="cant_delete_role">
-				Die Rollen „Jeder“ und „Eigentümer“ können nicht gelöscht werden.
-			</string>
-		</panel>
-		<panel label="Fähigkeiten" name="actions_sub_tab">
-			<button label="Suchen" name="search_button"/>
-			<button label="Alle anzeigen" name="show_all_button"/>
-			<scroll_list name="action_list" tool_tip="Select an Ability to view more details.">
-				<column label="" name="icon"/>
-				<column label="" name="action"/>
-			</scroll_list>
-			<string name="help_text">
-				Fähigkeiten verleihen Mitgliedern in Rollen bestimmte
-Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
-			</string>
-		</panel>
-	</tab_container>
-	<panel name="members_footer">
-		<text name="static">
-			Rollen
-		</text>
-		<text name="static2">
-			Zulässige Fähigkeiten
-		</text>
-		<scroll_list name="member_assigned_roles">
-			<column label="" name="checkbox"/>
-			<column label="" name="role"/>
-		</scroll_list>
-		<scroll_list name="member_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
-			<column label="" name="icon"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="roles_footer">
-		<text name="static">
-			Name
-		</text>
-		<text name="static2">
-			Beschreibung
-		</text>
-		<line_editor name="role_name">
-			Angestellte
-		</line_editor>
-		<text name="static3">
-			Titel
-		</text>
-		<line_editor name="role_title">
-			(wartet)
-		</line_editor>
-		<text_editor name="role_description">
-			(wartet)
-		</text_editor>
-		<text name="static4">
-			Mitglieder in Rolle
-		</text>
-		<text name="static5" tool_tip="Eine Liste der Fähigkeiten der aktuell ausgewählten Rolle.">
-			Zulässige Fähigkeiten
-		</text>
-		<check_box label="Mitglieder sind sichtbar" name="role_visible_in_list" tool_tip="Festlegen, ob Mitglieder in dieser Rolle auf der Registerkarte „Allgemein“ für Personen außerhalb der Gruppe sichtbar sind."/>
-		<scroll_list name="role_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
-			<column label="" name="icon"/>
-			<column label="" name="checkbox"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="actions_footer">
-		<text name="static">
-			Beschreibung
-		</text>
-		<text_editor name="action_description">
-			Diese Fähigkeit heißt „Mitglieder aus dieser Gruppe werfen“. Eigentümer können nur von anderen Eigentümern hinausgeworfen werden.
-		</text_editor>
-		<text name="static2">
-			Rollen mit Fähigkeit
-		</text>
-		<text name="static3">
-			Mitglieder mit Fähigkeit
-		</text>
-	</panel>
-</panel>
-
-<!-- original file
-
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Mitglieder und Rollen" name="roles_tab">
-	<string name="default_needs_apply_text">
-		Das Unterregister enthält nicht übernommene Änderungen.
-	</string>
-	<string name="want_apply_text">
-		Diese Änderungen übernehmen?
-	</string>
-	<button label="?" name="help_button"/>
-	<panel name="members_header">
-		<text name="static">
-			Mitglieder und Rollen
-		</text>
-		<text name="static2">
-			Gruppenmitgliedern werden Rollen mit Fähigkeiten zugewiesen. Diese Einstellungen können zur flexibleren Organisation angepasst werden.
-		</text>
-	</panel>
-	<panel name="roles_header">
-		<text name="static">
-			Rollen
-		</text>
-		<text name="role_properties_modifiable">
-			Wählen Sie eine Rolle. Sie können ihren Namen, ihre Beschreibung und den Mitgliedstitel ändern.
-		</text>
-		<text name="role_properties_not_modifiable">
-			Rolle anklicken um Mitglieder und Fähigkeiten anzuzeigen.
-		</text>
-		<text name="role_actions_modifiable">
-			Sie können der Rolle auch Fähigkeiten zuweisen.
-		</text>
-		<text name="role_actions_not_modifiable">
-			Sie können zugewiesene Fähigkeiten anzeigen, aber nicht bearbeiten.
-		</text>
-	</panel>
-	<panel name="actions_header">
-		<text name="static">
-			Fähigkeiten
-		</text>
-		<text name="static2">
-			Sie können Fähigkeiten-Beschreibungen anzeigen und welche Rollen bzw. 
-Mitglieder diese Fähigkeit haben.
-		</text>
-	</panel>
-	<tab_container name="roles_tab_container">
-		<panel label="Mitglieder" name="members_sub_tab" tool_tip="Mitglieder">
-			<button label="Suchen" name="search_button"/>
-			<button label="Alle anzeigen" name="show_all_button"/>
-			<name_list name="member_list">
-				<column label="Mitgliedsname" name="name" width="116"/>
-				<column label="Ãœbertragene Landanteile" name="donated" width="156"/>
-				<column label="Letzte Anmeldung" name="online"/>
-			</name_list>
-			<button label="Neues Mitglied einladen..." name="member_invite"/>
-			<button label="Aus Gruppe werfen" name="member_eject"/>
-			<string name="help_text">
-				Sie können Mitgliedern Rollen zuweisen und entziehen.
-Drücken Sie die Strg-Taste und klicken Sie auf Namen,
-um mehrere Mitglieder auszuwählen.
-			</string>
-		</panel>
-		<panel label="Rollen" name="roles_sub_tab">
-			<button label="Suchen" name="search_button"/>
-			<button label="Alle anzeigen" name="show_all_button"/>
-			<scroll_list name="role_list">
-				<column label="Rolle" name="name" width="126"/>
-				<column label="Titel" name="title" width="180"/>
-				<column label="Mitglieder" name="members" width="82"/>
-			</scroll_list>
-			<button label="Neue Rolle erstellen..." name="role_create"/>
-			<button label="Rolle löschen" name="role_delete"/>
-			<string name="help_text">
-				Rollen haben einen Titel und umfassen bestimmte
-Fähigkeiten. Mitglieder können mehrere 
-Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen
-definieren, darunter „Jeder“ und „Eigentümer“.
-			</string>
-			<string name="cant_delete_role">
-				Die Rollen „Jeder“ und „Eigentümer“ können nicht gelöscht werden.
-			</string>
-		</panel>
-		<panel label="Fähigkeiten" name="actions_sub_tab">
-			<button label="Suchen" name="search_button"/>
-			<button label="Alle anzeigen" name="show_all_button"/>
-			<scroll_list name="action_list" tool_tip="Select an Ability to view more details.">
-				<column label="" name="icon"/>
-				<column label="" name="action"/>
-			</scroll_list>
-			<string name="help_text">
-				Fähigkeiten verleihen Mitgliedern in Rollen bestimmte
-Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
-			</string>
-		</panel>
-	</tab_container>
-	<panel name="members_footer">
-		<text name="static">
-			Rollen
-		</text>
-		<text name="static2">
-			Zulässige Fähigkeiten
-		</text>
-		<scroll_list name="member_assigned_roles">
-			<column label="" name="checkbox"/>
-			<column label="" name="role"/>
-		</scroll_list>
-		<scroll_list name="member_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
-			<column label="" name="icon"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="roles_footer">
-		<text name="static">
-			Name
-		</text>
-		<text name="static2">
-			Beschreibung
-		</text>
-		<line_editor name="role_name">
-			Angestellte
-		</line_editor>
-		<text name="static3">
-			Titel
-		</text>
-		<line_editor name="role_title">
-			(wartet)
-		</line_editor>
-		<text_editor name="role_description">
-			(wartet)
-		</text_editor>
-		<text name="static4">
-			Mitglieder in Rolle
-		</text>
-		<text name="static5" tool_tip="Eine Liste der Fähigkeiten der aktuell ausgewählten Rolle.">
-			Zulässige Fähigkeiten
-		</text>
-		<check_box label="Mitglieder sind sichtbar" name="role_visible_in_list" tool_tip="Festlegen, ob Mitglieder in dieser Rolle auf der Registerkarte „Allgemein“ für Personen außerhalb der Gruppe sichtbar sind."/>
-		<scroll_list name="role_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
-			<column label="" name="icon"/>
-			<column label="" name="checkbox"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="actions_footer">
-		<text name="static">
-			Beschreibung
-		</text>
-		<text_editor name="action_description">
-			Diese Fähigkeit heißt „Mitglieder aus dieser Gruppe werfen“. Eigentümer können nur von anderen Eigentümern hinausgeworfen werden.
-		</text_editor>
-		<text name="static2">
-			Rollen mit Fähigkeit
-		</text>
-		<text name="static3">
-			Mitglieder mit Fähigkeit
-		</text>
-	</panel>
-</panel>
-
--->
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Mitglieder und Rollen" name="roles_tab">
+	<panel.string name="default_needs_apply_text">
+		Das Unterregister enthält nicht übernommene Änderungen.
+	</panel.string>
+	<panel.string name="want_apply_text">
+		Diese Änderungen übernehmen?
+	</panel.string>
+	<tab_container name="roles_tab_container">
+		<panel label="Mitglieder" name="members_sub_tab" tool_tip="Mitglieder">
+			<panel.string name="help_text">
+				Sie können Mitgliedern Rollen zuweisen und entziehen.
+Drücken Sie die Strg-Taste und klicken Sie auf Namen,
+um mehrere Mitglieder auszuwählen.
+			</panel.string>
+			<filter_editor label="Mitglieder filtern" name="filter_input"/>
+			<name_list name="member_list">
+				<name_list.columns label="Mitglied" name="name"/>
+				<name_list.columns label="Ãœbereignungen" name="donated"/>
+				<name_list.columns label="Online" name="online"/>
+			</name_list>
+			<button label="Einladen" name="member_invite"/>
+			<button label="Hinauswerfen" name="member_eject"/>
+		</panel>
+		<panel label="Rollen" name="roles_sub_tab">
+			<panel.string name="help_text">
+				Rollen haben einen Titel und umfassen bestimmte
+Fähigkeiten. Mitglieder können mehrere 
+Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen
+definieren, darunter „Jeder“ und „Eigentümer“.
+			</panel.string>
+			<panel.string name="cant_delete_role">
+				Die Rollen „Jeder“ und „Eigentümer“ können nicht gelöscht werden.
+			</panel.string>
+			<filter_editor label="Rollen filtern" name="filter_input"/>
+			<scroll_list name="role_list">
+				<scroll_list.columns label="Rolle" name="name"/>
+				<scroll_list.columns label="Titel" name="title"/>
+				<scroll_list.columns label="Mitglieder" name="members"/>
+			</scroll_list>
+			<button label="Rolle hinzufügen" name="role_create"/>
+			<button label="Rolle löschen" name="role_delete"/>
+		</panel>
+		<panel label="Fähigkeiten" name="actions_sub_tab" tool_tip="Sie können Fähigkeiten-Beschreibungen anzeigen und welche Rollen bzw. Mitglieder über diese Fähigkeit verfügen.">
+			<panel.string name="help_text">
+				Fähigkeiten verleihen Mitgliedern in Rollen bestimmte
+Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
+			</panel.string>
+			<filter_editor label="Fähigkeiten filtern" name="filter_input"/>
+			<scroll_list name="action_list" tool_tip="Select an Ability to view more details.">
+				<scroll_list.columns label="" name="icon"/>
+				<scroll_list.columns label="" name="action"/>
+			</scroll_list>
+		</panel>
+	</tab_container>
+	<panel name="members_footer">
+		<text name="static">
+			Rollen
+		</text>
+		<scroll_list name="member_assigned_roles">
+			<scroll_list.columns label="" name="checkbox"/>
+			<scroll_list.columns label="" name="role"/>
+		</scroll_list>
+		<text name="static2">
+			Zulässige Fähigkeiten
+		</text>
+		<scroll_list name="member_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
+			<scroll_list.columns label="" name="icon"/>
+			<scroll_list.columns label="" name="action"/>
+		</scroll_list>
+	</panel>
+	<panel name="roles_footer">
+		<text name="static">
+			Name
+		</text>
+		<line_editor name="role_name">
+			Angestellte
+		</line_editor>
+		<text name="static3">
+			Titel
+		</text>
+		<line_editor name="role_title">
+			(wartet)
+		</line_editor>
+		<text name="static2">
+			Beschreibung
+		</text>
+		<text_editor name="role_description">
+			(wartet)
+		</text_editor>
+		<text name="static4">
+			Mitglieder in Rolle
+		</text>
+		<check_box label="Mitglieder sind sichtbar" name="role_visible_in_list" tool_tip="Festlegen, ob Mitglieder in dieser Rolle auf der Registerkarte „Allgemein“ für Personen außerhalb der Gruppe sichtbar sind."/>
+		<text name="static5" tool_tip="Eine Liste der Fähigkeiten der aktuell ausgewählten Rolle.">
+			Zulässige Fähigkeiten
+		</text>
+		<scroll_list name="role_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
+			<scroll_list.columns label="" name="icon"/>
+			<scroll_list.columns label="" name="checkbox"/>
+			<scroll_list.columns label="" name="action"/>
+		</scroll_list>
+	</panel>
+	<panel name="actions_footer">
+		<text name="static">
+			Beschreibung
+		</text>
+		<text_editor name="action_description">
+			Diese Fähigkeit heißt „Mitglieder aus dieser Gruppe werfen“. Eigentümer können nur von anderen Eigentümern hinausgeworfen werden.
+		</text_editor>
+		<text name="static2">
+			Rollen mit Fähigkeit
+		</text>
+		<text name="static3">
+			Mitglieder mit Fähigkeit
+		</text>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_im_control_panel.xml b/indra/newview/skins/default/xui/de/panel_im_control_panel.xml
new file mode 100644
index 00000000000..487eb07b9e4
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_im_control_panel.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<button label="Profil anzeigen" name="view_profile_btn"/>
+	<button label="Freund hinzufügen" name="add_friend_btn"/>
+	<button label="Freigeben" name="share_btn"/>
+	<panel name="panel_call_buttons">
+		<button label="Anrufen" name="call_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml
index 93f2d6c2576..dc170ce245f 100644
--- a/indra/newview/skins/default/xui/de/panel_login.xml
+++ b/indra/newview/skins/default/xui/de/panel_login.xml
@@ -1,43 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="panel_login">
-	<text name="first_name_text">
-		Vorname:
-	</text>
-	<text name="last_name_text">
-		Nachname:
-	</text>
-	<text name="password_text">
-		Kennwort:
-	</text>
-	<text name="start_location_text">
-		Startposition:
-	</text>
-	<combo_box name="start_location_combo">
-		<combo_box.item name="MyHome" label="Mein Heimatort" />
-		<combo_box.item name="MyLastLocation" label="Mein letzter Standort" />
-		<combo_box.item name="Typeregionname" label="&lt;Region eingeben&gt;" />
-	</combo_box>
-	<check_box label="Kennwort merken" name="remember_check"/>
-	<text name="full_screen_text">
-		Die Anzeige schaltet bei Anmeldung auf Vollbild um.
-	</text>
-	<button label="Neues Konto..." label_selected="Neues Konto..." name="new_account_btn"/>
-	<button label="Einstellungen..." label_selected="Einstellungen..." name="preferences_btn"/>
-	<button label="Anmelden" label_selected="Anmelden" name="connect_btn"/>
-	<button label="Beenden" label_selected="Beenden" name="quit_btn"/>
-	<text name="version_text">
-		1.23.4 (5)
-	</text>
-	<text name="create_new_account_text">
-		Konto erstellen
-	</text>
-	<text name="channel_text">
-		[VERSION]
-	</text>
-	<text name="forgot_password_text">
-		Namen oder Kennwort vergessen?
-	</text>
-	<text name="forgot_password_url">
-		http://secondlife.com/account/request.php
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+	<panel.string name="create_account_url">
+		http://de.secondlife.com/registration/
+	</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php
+	</panel.string>
+	<panel name="login_widgets">
+		<line_editor name="first_name_edit" tool_tip="[SECOND_LIFE] Vorname"/>
+		<line_editor name="last_name_edit" tool_tip="[SECOND_LIFE] Nachname"/>
+		<text name="start_location_text">
+			Startposition:
+		</text>
+		<text name="create_new_account_text">
+			Neues Konto erstellen
+		</text>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml
new file mode 100644
index 00000000000..fb4f3e0f53d
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="chat_bar">
+	<line_editor label="Zum Chatten hier klicken." name="chat_box" tool_tip="Eingabe drücken, um zu sprechen, Strg-Eingabe drücken, um zu Rufen."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_pick_info.xml b/indra/newview/skins/default/xui/de/panel_pick_info.xml
new file mode 100644
index 00000000000..8c1de575e92
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_pick_info.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_pick_info">
+	<text name="title" value="Auswahl-Info"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<text name="pick_name" value="[name]"/>
+			<text name="pick_location" value="[wird geladen...]"/>
+			<text name="pick_desc" value="[description]"/>
+		</panel>
+	</scroll_container>
+	<panel name="buttons">
+		<button label="Teleportieren" name="teleport_btn"/>
+		<button label="Karte" name="show_on_map_btn"/>
+		<button label="Bearbeiten" name="edit_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_picks.xml b/indra/newview/skins/default/xui/de/panel_picks.xml
new file mode 100644
index 00000000000..fb25fe89fdd
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_picks.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Auswahl" name="panel_picks">
+	<panel label="bottom_panel" name="edit_panel">
+		<button name="new_btn" tool_tip="Aktuellen Standort zur Auswahl hinzufügen"/>
+	</panel>
+	<panel name="buttons_cucks">
+		<button label="Karte" name="show_on_map_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
index c99ba9a118d..a9526c90149 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
@@ -1,58 +1,42 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="Text-Chat" name="chat">
-	<text name="text_box">
-		Chat-Schriftgröße:
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item name="radio" label="Klein" />
-		<radio_item name="radio2" label="Mittel" />
-		<radio_item name="radio3" label="Groß" />
-	</radio_group>
-	<color_swatch label="Sie" name="user"/>
-	<text name="text_box1">
-		Sie
-	</text>
-	<color_swatch label="Andere" name="agent"/>
-	<text name="text_box2">
-		Andere
-	</text>
-	<color_swatch label="IM" name="im"/>
-	<text name="text_box3">
-		IM
-	</text>
-	<color_swatch label="System" name="system"/>
-	<text name="text_box4">
-		System
-	</text>
-	<color_swatch label="Skriptfehler" name="script_error"/>
-	<text name="text_box5">
-		Skriptfehler
-	</text>
-	<color_swatch label="Objekte" name="objects"/>
-	<text name="text_box6">
-		Objekte
-	</text>
-	<color_swatch label="Eigentümer" name="owner"/>
-	<text name="text_box7">
-		Eigentümer
-	</text>
-	<color_swatch label="Blase" name="background"/>
-	<text name="text_box8">
-		Blase
-	</text>
-	<color_swatch label="URLs" name="links"/>
-	<text name="text_box9">
-		URLs
-	</text>
-	<spinner label="Chat ausblenden nach" label_width="115" left="148" name="fade_chat_time" width="160"/>
-	<spinne left="370" name="max_chat_count"/>
-	<slider label="Deckkraft" name="console_opacity"/>
-	<check_box label="Chat verwendet volle Bildbreite (Neustart erforderlich)" name="chat_full_width_check"/>
-	<check_box label="Chatleiste nach Drücken der Eingabetaste schließen" name="close_chat_on_return_check"/>
-	<check_box label="Pfeiltasten bewegen immer den Avatar beim Chatten" name="arrow_keys_move_avatar_check"/>
-	<check_box label="Zeitstempel im lokalen Chat anzeigen" name="show_timestamps_check"/>
-	<check_box label="Beim Chatten Tippanimation abspielen" name="play_typing_animation"/>
-	<check_box label="Chat-Blasen anzeigen" name="bubble_text_chat"/>
-	<slider label="Deckkraft" name="bubble_chat_opacity"/>
-	<check_box label="Skriptfehler und Warnungen als normalen Chat anzeigen" name="script_errors_as_chat"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Text-Chat" name="chat">
+	<radio_group name="chat_font_size">
+		<radio_item label="Klein" name="radio"/>
+		<radio_item label="Mittel" name="radio2"/>
+		<radio_item label="Groß" name="radio3"/>
+	</radio_group>
+	<color_swatch label="Sie" name="user"/>
+	<text name="text_box1">
+		Ich
+	</text>
+	<color_swatch label="Andere" name="agent"/>
+	<text name="text_box2">
+		Andere
+	</text>
+	<color_swatch label="IM" name="im"/>
+	<text name="text_box3">
+		IM
+	</text>
+	<color_swatch label="System" name="system"/>
+	<text name="text_box4">
+		System
+	</text>
+	<color_swatch label="Skriptfehler" name="script_error"/>
+	<text name="text_box5">
+		Skriptfehler
+	</text>
+	<color_swatch label="Objekte" name="objects"/>
+	<text name="text_box6">
+		Objekte
+	</text>
+	<color_swatch label="Eigentümer" name="owner"/>
+	<text name="text_box7">
+		Eigentümer
+	</text>
+	<color_swatch label="URLs" name="links"/>
+	<text name="text_box9">
+		URLs
+	</text>
+	<check_box initial_value="true" label="Beim Chatten Tippanimation abspielen" name="play_typing_animation"/>
+	<check_box label="IMs per Email zuschicken, wenn ich offline bin" name="send_im_to_email"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
index fe074069087..7008389dd7f 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
@@ -1,171 +1,116 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="Grafik" name="Display panel">
-	<text name="text">
-		Anzeigeauflösung:
-	</text>
-	<button label=" ?" name="GraphicsPreferencesHelpButton" />
-	<check_box label="Second Life in einem Fenster ausführen" name="windowed mode" />
-	<text_editor name="voice_chat_description">
-		Wenn deaktiviert Anzeige bei Anmeldung in Vollbild.
-	</text_editor>
-	<text name="Fullscreen Aspect Ratio:">
-		Vollbild-Aspektverhältnis:
-	</text>
-	<text name="(width / height)">
-		(Breite/Höhe)
-	</text>
-	<text_editor name="FullScreenInfo" width="480">
-		Wenn deaktiviert, schaltet die Anzeige bei Anmeldung auf Vollbild um.
-	</text_editor>
-	<text name="WindowSizeLabel">
-		Fenstergröße:
-	</text>
-	<combo_box left="115" name="windowsize combo">
-		<combo_box.item name="640x480" label="640x480" />
-		<combo_box.item name="800x600" label="800x600" />
-		<combo_box.item name="720x480" label="720x480 (NTSC)" />
-		<combo_box.item name="768x576" label="768x576 (PAL)" />
-		<combo_box.item name="1024x768" label="1024x768" />
-	</combo_box>
-	<text name="DisplayResLabel" width="100">
-		Anzeigeauflösung:
-	</text>
-	<combo_box left="115" name="fullscreen combo" />
-	<text name="AspectRatioLabel1" tool_tip="Breite/Höhe" width="100">
-		Aspektverhältnis:
-	</text>
-	<combo_box left="115" name="aspect_ratio" tool_tip="Breite/Höhe">
-		<combo_box.item name="4:3(StandardCRT)" label="4:3 (Standard-CRT)" />
-		<combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" />
-		<combo_box.item name="8:5(Widescreen)" label="8:5 (Widescreen)" />
-		<combo_box.item name="16:9(Widescreen)" label="16:9 (Widescreen)" />
-	</combo_box>
-	<check_box label="Verhältnis automatisch erkennen" left="275" name="aspect_auto_detect" />
-	<text name="UI Size:">
-		UI-Größe:
-	</text>
-	<text name="(meters, lower is faster)">
-		(Meter, niedriger ist schneller)
-	</text>
-	<text name="text2">
-		Anzeigeoptionen:
-	</text>
-	<check_box label="Auflösungsunabhängigen Maßstab verwenden" name="ui_auto_scale" />
-	<spinner label="Sichtweite:" name="draw_distance" />
-	<check_box label="Avatar in Mouselook anzeigen" name="avfp" />
-	<text name="HigherText">
-		Qualität und
-	</text>
-	<text name="QualityText">
-		Performance:
-	</text>
-	<text name="FasterText">
-		Schneller
-	</text>
-	<text name="ShadersPrefText">
-		Niedrig
-	</text>
-	<text name="ShadersPrefText2">
-		Mittel
-	</text>
-	<text name="ShadersPrefText3">
-		Hoch
-	</text>
-	<text name="ShadersPrefText4">
-		Ultra
-	</text>
-	<text name="HigherText2">
-		Höhere
-	</text>
-	<text name="QualityText2">
-		Qualität
-	</text>
-	<check_box label="Benutzerdefiniert" name="CustomSettings" />
-	<panel name="CustomGraphics Panel">
-	<text name="ShadersText">
-		Shader:
-	</text>
-	<check_box label="Bumpmapping und Glanz" name="BumpShiny" />
-	<check_box label="Einfache Shader" name="BasicShaders"
-	     tool_tip="Deaktivieren Sie diese Option, wenn der Grafikkartentreiber Abstürze verursacht." />
-	<check_box label="Atmosphären-Shader" name="WindLightUseAtmosShaders" />
-	<check_box label="Wasserreflexionen" name="Reflections" />
-	<text name="ReflectionDetailText">
-		Spiegelung:
-	</text>
-	<radio_group name="ReflectionDetailRadio">
-		<radio_item name="0" label="Terrain und Bäume" />
-		<radio_item name="1" label="Alle statischen Objekte" />
-		<radio_item name="2" label="Alle Avatare und Objekte" />
-		<radio_item name="3" label="Alles" />
-	</radio_group>
-	<text name="AvatarRenderingText">
-		Avatar-Darstellung:
-	</text>
-	<check_box label="Ersatzavatare" name="AvatarImpostors" />
-	<check_box label="Hardware-Hautberechnung" name="AvatarVertexProgram" />
-	<check_box label="Avatar-Kleidung" name="AvatarCloth" />
-	<text name="DrawDistanceMeterText1">
-		m
-	</text>
-	<text name="DrawDistanceMeterText2">
-		m
-	</text>
-	<slider label="Sichtweite:" name="DrawDistance" />
-	<slider label="Max. Partikelzahl:" name="MaxParticleCount" />
-	<slider label="Post-Processing-Qualität:" name="RenderPostProcess" />
-	<text name="MeshDetailText">
-		Gitterdetails:
-	</text>
-	<slider label="   Objekte:" name="ObjectMeshDetail" />
-	<slider label="   Flexiprimitiva:" name="FlexibleMeshDetail" />
-	<slider label="   Bäume:" name="TreeMeshDetail" />
-	<slider label="   Avatare:" name="AvatarMeshDetail" />
-	<slider label="   Terrain:" name="TerrainMeshDetail" />
-	<slider label="   Himmel:" name="SkyMeshDetail" />
-	<text name="PostProcessText">
-		Niedrig
-	</text>
-	<text name="ObjectMeshDetailText">
-		Niedrig
-	</text>
-	<text name="FlexibleMeshDetailText">
-		Niedrig
-	</text>
-	<text name="TreeMeshDetailText">
-		Niedrig
-	</text>
-	<text name="AvatarMeshDetailText">
-		Niedrig
-	</text>
-	<text name="TerrainMeshDetailText">
-		Niedrig
-	</text>
-	<text name="SkyMeshDetailText">
-		Niedrig
-	</text>
-	<text name="LightingDetailText">
-		Beleuchtungsdetails:
-	</text>
-	<radio_group name="LightingDetailRadio">
-		<radio_item name="SunMoon" label="Nur Sonne und Mond" />
-		<radio_item name="LocalLights" label="Lokale Lichtquellen" />
-	</radio_group>
-	<text name="TerrainDetailText">
-		Terraindetails:
-	</text>
-	<radio_group name="TerrainDetailRadio">
-		<radio_item name="0" label="Niedrig" />
-		<radio_item name="2" label="Hoch" />
-	</radio_group>
-	</panel>
-	<button label="Empfohlene Einstellungen" name="Defaults" />
-	<button label="Hardware-Optionen" label_selected="Hardware-Optionen"
-	     name="GraphicsHardwareButton" />
-	<panel.string name="resolution_format">
-		[RES_X] x [RES_Y]
-	</panel.string>
-	<panel.string name="aspect_ratio_text">
-		[NUM]:[DEN]
-	</panel.string>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Grafik" name="Display panel">
+	<text name="WindowSizeLabel">
+		Fenstergröße:
+	</text>
+	<check_box label="Vollbildmodus verwenden" name="windowed mode"/>
+	<combo_box left="115" name="windowsize combo">
+		<combo_box.item label="640x480" name="640x480"/>
+		<combo_box.item label="800x600" name="800x600"/>
+		<combo_box.item label="720x480 (NTSC)" name="720x480"/>
+		<combo_box.item label="768x576 (PAL)" name="768x576"/>
+		<combo_box.item label="1024x768" name="1024x768"/>
+	</combo_box>
+	<text name="UI Size:">
+		UI-Größe:
+	</text>
+	<text name="QualitySpeed">
+		Qualität und Geschwindigkeit:
+	</text>
+	<text name="FasterText">
+		Schneller
+	</text>
+	<text name="BetterText">
+		Besser
+	</text>
+	<text name="ShadersPrefText">
+		Niedrig
+	</text>
+	<text name="ShadersPrefText2">
+		Mittel
+	</text>
+	<text name="ShadersPrefText3">
+		Hoch
+	</text>
+	<text name="ShadersPrefText4">
+		Ultra
+	</text>
+	<panel label="CustomGraphics" name="CustomGraphics Panel">
+		<text name="ShadersText">
+			Shader:
+		</text>
+		<check_box initial_value="true" label="Bumpmapping und Glanz" name="BumpShiny"/>
+		<check_box initial_value="true" label="Einfache Shader" name="BasicShaders" tool_tip="Deaktivieren Sie diese Option, wenn der Grafikkartentreiber Abstürze verursacht."/>
+		<check_box initial_value="true" label="Atmosphären-Shader" name="WindLightUseAtmosShaders"/>
+		<check_box initial_value="true" label="Wasserreflexionen" name="Reflections"/>
+		<text name="ReflectionDetailText">
+			Spiegelung:
+		</text>
+		<radio_group name="ReflectionDetailRadio">
+			<radio_item label="Terrain und Bäume" name="0"/>
+			<radio_item label="Alle statischen Objekte" name="1"/>
+			<radio_item label="Alle Avatare und Objekte" name="2"/>
+			<radio_item label="Alles" name="3"/>
+		</radio_group>
+		<text name="AvatarRenderingText">
+			Avatar-Darstellung:
+		</text>
+		<check_box initial_value="true" label="Ersatzavatare" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="Hardware-Hautberechnung" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="Avatar-Kleidung" name="AvatarCloth"/>
+		<slider label="Sichtweite:" name="DrawDistance"/>
+		<text name="DrawDistanceMeterText2">
+			m
+		</text>
+		<slider label="Max. Partikelzahl:" name="MaxParticleCount"/>
+		<slider label="Post-Processing-Qualität:" name="RenderPostProcess"/>
+		<text name="MeshDetailText">
+			Gitterdetails:
+		</text>
+		<slider label="   Objekte:" name="ObjectMeshDetail"/>
+		<slider label="   Flexiprimitiva:" name="FlexibleMeshDetail"/>
+		<slider label="   Bäume:" name="TreeMeshDetail"/>
+		<slider label="   Avatare:" name="AvatarMeshDetail"/>
+		<slider label="   Terrain:" name="TerrainMeshDetail"/>
+		<slider label="   Himmel:" name="SkyMeshDetail"/>
+		<text name="PostProcessText">
+			Niedrig
+		</text>
+		<text name="ObjectMeshDetailText">
+			Niedrig
+		</text>
+		<text name="FlexibleMeshDetailText">
+			Niedrig
+		</text>
+		<text name="TreeMeshDetailText">
+			Niedrig
+		</text>
+		<text name="AvatarMeshDetailText">
+			Niedrig
+		</text>
+		<text name="TerrainMeshDetailText">
+			Niedrig
+		</text>
+		<text name="SkyMeshDetailText">
+			Niedrig
+		</text>
+		<text name="LightingDetailText">
+			Beleuchtungsdetails:
+		</text>
+		<radio_group name="LightingDetailRadio">
+			<radio_item label="Nur Sonne und Mond" name="SunMoon"/>
+			<radio_item label="Lokale Lichtquellen" name="LocalLights"/>
+		</radio_group>
+		<text name="TerrainDetailText">
+			Terraindetails:
+		</text>
+		<radio_group name="TerrainDetailRadio">
+			<radio_item label="Niedrig" name="0"/>
+			<radio_item label="Hoch" name="2"/>
+		</radio_group>
+	</panel>
+	<button label="Ãœbernehmen" label_selected="Ãœbernehmen" name="Apply"/>
+	<button label="Zurücksetzen" name="Defaults"/>
+	<button label="Erweitert" name="Advanced"/>
+	<button label="Hardware" label_selected="Hardware" name="GraphicsHardwareButton"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
index b52e5351149..d5305d3cbe3 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
@@ -1,32 +1,20 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="Kommunikation" name="im">
-	<text name="text_box">
-		Mein Onlinestatus:
-	</text>
-	<check_box label="Nur Freunden und Gruppen meinen Online-Status mitteilen" name="online_visibility"/>
-	<text name="text_box2">
-		IM-Optionen:
-	</text>
-	<text name="log_in_to_change">
-		Zum Ändern anmelden
-	</text>
-	<check_box label="IM an E-Mail senden ([EMAIL])" name="send_im_to_email"/>
-	<check_box label="IM in Chat-Konsole anzeigen" name="include_im_in_chat_console"/>
-	<check_box label="Zeitstempel in IM anzeigen" name="show_timestamps_check"/>
-	<check_box label="Online-Freundbenachrichtigungen anzeigen" name="friends_online_notify_checkbox"/>
-	<text name="text_box3">
-		Antwort für 
-Beschäftigt-Modus:
-	</text>
-	<text name="text_box4">
-		Protokolloptionen:
-	</text>
-	<check_box label="IM-Verlauf auf meinem Computer speichern" name="log_instant_messages"/>
-	<check_box label="Zeitstempel in IM-Verlauf anzeigen" name="log_instant_messages_timestamp"/>
-	<check_box label="Ende des letzten IM-Gesprächs anzeigen" name="log_show_history"/>
-	<check_box label="Verlauf des lokalen Chats auf meinem Computer speichern" name="log_chat"/>
-	<check_box label="Zeitstempel im Verlauf des lokalen Chats anzeigen" name="log_chat_timestamp"/>
-	<check_box label="Eingehende IM in Chat-Verlauf anzeigen" name="log_chat_IM"/>
-	<check_box label="Datum mit Zeitstempeln hinzufügen" name="log_date_timestamp"/>
-	<button label="Pfad ändern" label_selected="Pfad ändern" name="log_path_button"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Kommunikation" name="im">
+	<panel.string name="log_in_to_change">
+		Zum Ändern anmelden
+	</panel.string>
+	<button label="Cache löschen" name="clear_cache"/>
+	<text name="cache_size_label_l">
+		(Positionen, Bilder, Internet, Suchverlauf)
+	</text>
+	<check_box label="Nur Freunden und Gruppen meinen Online-Status mitteilen" name="online_visibility"/>
+	<check_box label="Nur IMs und Anrufe von Freunden oder Gruppen durchstellen" name="voice_call_friends_only_check"/>
+	<check_box label="Nach Beendigung von Anrufen Mikrofon abschalten." name="auto_disengage_mic_check"/>
+	<check_box label="Cookies annehmen" name="cookies_enabled"/>
+	<check_box label="Protokoll auf meinem Computer speichern" name="log_instant_messages"/>
+	<radio_group name="ChatIMLogs">
+		<radio_item label="Chat" name="radio1"/>
+		<radio_item label="IM" name="radio2"/>
+	</radio_group>
+	<button label="Durchsuchen" label_selected="Durchsuchen" name="log_path_button"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
index 97ec745d4dc..a2c317acbb1 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
@@ -1,30 +1,46 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Kamera" name="Input panel">
-	<text name=" Mouselook Options:">
-		Mouselook-Optionen:
-	</text>
-	<text name=" Mouse Sensitivity:">
-		Mausempfindlichkeit:
-	</text>
-	<check_box label="Maus umkehren" name="invert_mouse"/>
-	<text name=" Auto Fly Options:">
-		Auto-Flug-Optionen:
-	</text>
-	<check_box label="Zum Fliegen/Landen nach oben/unten halten" name="automatic_fly"/>
-	<text name=" Camera Options:">
-		Kameraoptionen:
-	</text>
-	<text name="camera_fov_label">
-		Kamera-Sichtwinkel:
-	</text>
-	<text name="Camera Follow Distance:">
-		Kameraabstand:
-	</text>
-	<check_box label="Automatischer Kameraschwenk im Bearbeiten-Modus" name="edit_camera_movement" tool_tip="Automatische Kamerapositionierung bei Wechsel in und aus dem Bearbeitungsmodus verwenden"/>
-	<check_box label="Automatischer Kameraschwenk im Aussehen-Modus" name="appearance_camera_movement" tool_tip="Automatische Kamerapositionierung im Bearbeitenmodus verwenden"/>
-	<text name="text2">
-		Avatar-Anzeigeoptionen:
-	</text>
-	<check_box label="Avatar in Mouselook anzeigen" name="first_person_avatar_visible"/>
-	<button label="Joystick-Einrichtung" name="joystick_setup_button"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Kamera" name="Input panel">
+	<button label="Andere Geräte" name="joystick_setup_button"/>
+	<text name="Mouselook:">
+		Mouselook:
+	</text>
+	<text name=" Mouse Sensitivity">
+		Mausempfindlichkeit:
+	</text>
+	<check_box label="Umkehren" name="invert_mouse"/>
+	<text name="Network:">
+		Netzwerk:
+	</text>
+	<text name="Maximum bandwidth">
+		Maximale Bandbreite
+	</text>
+	<text name="text_box2">
+		kbps
+	</text>
+	<check_box label="Benutzerdefinierter Port" name="connection_port_enabled"/>
+	<spinner label="Port-Nummer:" name="web_proxy_port"/>
+	<text name="cache_size_label_l">
+		Cache
+	</text>
+	<text name="text_box5">
+		MB
+	</text>
+	<button label="Durchsuchen" label_selected="Durchsuchen" name="set_cache"/>
+	<button label="Zurücksetzen" label_selected="Festlegen" name="reset_cache"/>
+	<text name="Cache location">
+		Cache-Ordner
+	</text>
+	<text name="Web:">
+		Internet:
+	</text>
+	<radio_group name="use_external_browser">
+		<radio_item label="Integrierten Browser verwenden" name="internal" tool_tip="Den integrierten Browser für Hilfe, Internetlinks, usw. verwenden. Der Browser wird als eigenständiges Fenster in [APP_NAME] geöffnet."/>
+		<radio_item label="Meinen Browser verwenden (IE, Firefox)" name="external" tool_tip="Standard-Browser für Hilfe, Weblinks usw. verwenden. Im Vollbildmodus nicht empfohlen."/>
+	</radio_group>
+	<check_box initial_value="false" label="Web-Proxy:" name="web_proxy_enabled"/>
+	<line_editor name="web_proxy_editor" tool_tip="Name oder IP-Adresse des Proxys"/>
+	<button label="Durchsuchen" label_selected="Durchsuchen" name="set_proxy"/>
+	<text name="Proxy location">
+		Proxy-Standort
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_profile.xml b/indra/newview/skins/default/xui/de/panel_profile.xml
new file mode 100644
index 00000000000..907803b32f0
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_profile.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profil" name="panel_profile">
+	<string name="CaptionTextAcctInfo">
+		[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+	</string>
+	<string name="payment_update_link_url">
+		http://www.secondlife.com/account/billing.php?lang=de-DE
+	</string>
+	<string name="my_account_link_url" value="http://secondlife.com/my/account/index.php?lang=de-DE"/>
+	<string name="no_partner_text" value="Keiner"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<panel name="second_life_image_panel">
+				<text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+			</panel>
+			<panel name="first_life_image_panel">
+				<text name="title_rw_descr_text" value="Echtes Leben:"/>
+			</panel>
+			<text name="me_homepage_text">
+				Webseite:
+			</text>
+			<text name="title_member_text" value="Mitglied seit:"/>
+			<text name="title_acc_status_text" value="Kontostatus:"/>
+			<text name="title_partner_text" value="Partner:"/>
+			<panel name="partner_data_panel">
+				<text name="partner_text" value="[FIRST] [LAST]"/>
+			</panel>
+			<text name="title_groups_text" value="Gruppen:"/>
+		</panel>
+	</scroll_container>
+	<panel name="profile_buttons_panel">
+		<button label="Freund hinzufügen" name="add_friend"/>
+		<button label="IM" name="im"/>
+		<button label="Anrufen" name="call"/>
+		<button label="Teleportieren" name="teleport"/>
+	</panel>
+	<panel name="profile_me_buttons_panel">
+		<button label="Profil bearbeiten" name="edit_profile_btn"/>
+		<button label="Aussehen bearbeiten" name="edit_appearance_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_profile_view.xml b/indra/newview/skins/default/xui/de/panel_profile_view.xml
new file mode 100644
index 00000000000..4ae27907aa0
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_profile_view.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_target_profile">
+	<string name="status_online">
+		Online
+	</string>
+	<string name="status_offline">
+		Offline
+	</string>
+	<text name="user_name" value="(wird geladen...)"/>
+	<text name="status" value="Online"/>
+	<tab_container name="tabs">
+		<panel label="Profil" name="panel_profile"/>
+		<panel label="Auswahl" name="panel_picks"/>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_script_ed.xml b/indra/newview/skins/default/xui/de/panel_script_ed.xml
new file mode 100644
index 00000000000..c1208f19cf5
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_script_ed.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="script panel">
+	<panel.string name="loading">
+		Wird geladen...
+	</panel.string>
+	<panel.string name="can_not_view">
+		Dieses Skript kann nicht angezeigt oder bearbeitet werden, da als Berechtigung „kein kopieren&quot; festgelegt wurde. Um ein Skript innerhalb eines Objektes anzuzeigen oder zu bearbeiten, benötigen Sie die vollständige Berechtigung.
+	</panel.string>
+	<panel.string name="public_objects_can_not_run">
+		Öffentliche Objekte können keine Skripts ausführen
+	</panel.string>
+	<panel.string name="script_running">
+		Läuft
+	</panel.string>
+	<panel.string name="Title">
+		Skript: [NAME]
+	</panel.string>
+	<text_editor name="Script Editor">
+		Wird geladen...
+	</text_editor>
+	<button label="Speichern" label_selected="Speichern" name="Save_btn"/>
+	<combo_box label="Einfügen..." name="Insert..."/>
+	<menu_bar name="script_menu">
+		<menu label="Datei" name="File">
+			<menu_item_call label="Speichern" name="Save"/>
+			<menu_item_call label="Alle Änderungen zurücksetzen" name="Revert All Changes"/>
+		</menu>
+		<menu label="Bearbeiten" name="Edit">
+			<menu_item_call label="Rückgängig" name="Undo"/>
+			<menu_item_call label="Wiederherstellen" name="Redo"/>
+			<menu_item_call label="Ausschneiden" name="Cut"/>
+			<menu_item_call label="Kopieren" name="Copy"/>
+			<menu_item_call label="Einfügen" name="Paste"/>
+			<menu_item_call label="Alle auswählen" name="Select All"/>
+			<menu_item_call label="Auswahl aufheben" name="Deselect"/>
+			<menu_item_call label="Suchen / Ersetzen..." name="Search / Replace..."/>
+		</menu>
+		<menu label="Hilfe" name="Help">
+			<menu_item_call label="Hilfe..." name="Help..."/>
+			<menu_item_call label="Schlüsselwort-Hilfe" name="Keyword Help..."/>
+		</menu>
+	</menu_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml
new file mode 100644
index 00000000000..59fee002b8b
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml-->
+<panel name="panel_stand_stop_flying">
+	<button label="Stehen" name="stand_btn" tool_tip="Klicken Sie hier, um aufzustehen."/>
+	<button label="Landen" name="stop_fly_btn" tool_tip="Landen"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_status_bar.xml b/indra/newview/skins/default/xui/de/panel_status_bar.xml
index 01091e38fbd..0ca050c81f2 100644
--- a/indra/newview/skins/default/xui/de/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/de/panel_status_bar.xml
@@ -1,42 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="status">
-	<text name="ParcelNameText" tool_tip="Der Name der Parzelle, auf der Sie sich befinden. Klicken Sie für Land-Informationen.">
-		Parzellenname hier
-	</text>
-	<text name="BalanceText" tool_tip="Kontostand">
-		Wird geladen...
-	</text>
-	<button label="" label_selected="" name="buycurrency" tool_tip="Geld kaufen"/>
-	<text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)">
-		12:00
-	</text>
-	<text name="StatBarDaysOfWeek">
-		Sonntag:Montag:Dienstag:Mittwoch:Donnerstag:Freitag:Samstag
-	</text>
-	<text name="StatBarMonthsOfYear">
-		Januar:Februar:März:April:Mai:Juni:Juli:August:September:Oktober:November:Dezember
-	</text>
-	<button label="" label_selected="" name="scriptout" tool_tip="Skriptwarnungen und -fehler"/>
-	<button label="" label_selected="" name="health" tool_tip="Gesundheit"/>
-	<text name="HealthText" tool_tip="Gesundheit">
-		100%
-	</text>
-	<button label="" label_selected="" name="fly" tool_tip="Fliegen aus"/>
-	<button label="" label_selected="" name="build" tool_tip="Bauen aus"/>
-	<button label="" label_selected="" name="scripts" tool_tip="Skripts aus"/>
-	<button name="no_fly" tool_tip="Fliegen ist unzulässig"/>
-	<button name="no_build" tool_tip="Bauen/Rezzen ist unzulässig"/>
-	<button name="no_scripts" tool_tip="Skripte sind unzulässig"/>
-	<button label="" label_selected="" name="restrictpush" tool_tip="Kein Stoßen"/>
-	<button name="status_voice" tool_tip="Voice aktiviert"/>
-	<button name="status_no_voice" tool_tip="Voice hier nicht möglich"/>
-	<button label="" label_selected="" name="buyland" tool_tip="Diese Parzelle kaufen"/>
-	<text name="packet_loss_tooltip">
-		Paketverlust
-	</text>
-	<text name="bandwidth_tooltip">
-		Bandbreite
-	</text>
-	<line_editor label="Suchen" name="search_editor" tool_tip="[SECOND_LIFE] durchsuchen"/>
-	<button name="search_btn" tool_tip="[SECOND_LIFE] durchsuchen"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+	<panel.string name="StatBarDaysOfWeek">
+		Sonntag:Montag:Dienstag:Mittwoch:Donnerstag:Freitag:Samstag
+	</panel.string>
+	<panel.string name="StatBarMonthsOfYear">
+		Januar:Februar:März:April:Mai:Juni:Juli:August:September:Oktober:November:Dezember
+	</panel.string>
+	<panel.string name="packet_loss_tooltip">
+		Paketverlust
+	</panel.string>
+	<panel.string name="bandwidth_tooltip">
+		Bandbreite
+	</panel.string>
+	<panel.string name="buycurrencylabel">
+		[AMT] L$
+	</panel.string>
+	<button label="" label_selected="" name="buycurrency" tool_tip="Mein Kontostand: Hier klicken, um mehr L$ zu kaufen"/>
+	<text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)">
+		12:00
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_world_map.xml b/indra/newview/skins/default/xui/de/panel_world_map.xml
index 7b18c5e822e..d83d32a9525 100644
--- a/indra/newview/skins/default/xui/de/panel_world_map.xml
+++ b/indra/newview/skins/default/xui/de/panel_world_map.xml
@@ -1,51 +1,57 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="world_map">
-	<panel.string name="world_map_north">
-		N
-	</panel.string>
-	<panel.string name="world_map_east">
-		O
-	</panel.string>
-	<panel.string name="world_map_west">
-		W
-	</panel.string>
-	<panel.string name="world_map_south">
-		S
-	</panel.string>
-	<panel.string name="world_map_southeast">
-		SO
-	</panel.string>
-	<panel.string name="world_map_northeast">
-		NO
-	</panel.string>
-	<panel.string name="world_map_southwest">
-		SW
-	</panel.string>
-	<panel.string name="world_map_northwest">
-		NW
-	</panel.string>
-	<text label="N" name="floater_map_north" text="N">
-		N
-	</text>
-	<text label="O" name="floater_map_east" text="O">
-		O
-	</text>
-	<text label="W" name="floater_map_west" text="W">
-		W
-	</text>
-	<text label="S" name="floater_map_south" text="S">
-		S
-	</text>
-	<text label="SO" name="floater_map_southeast" text="SO">
-		SO
-	</text>
-	<text label="NO" name="floater_map_northeast" text="NO">
-		NO
-	</text>
-	<text label="SW" name="floater_map_southwest" text="SW">
-		SW
-	</text>
-	<text label="NW" name="floater_map_northwest" text="NW">
-		NW
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+	<panel.string name="Loading">
+		Wird geladen...
+	</panel.string>
+	<panel.string name="InvalidLocation">
+		Ungültige Position
+	</panel.string>
+	<panel.string name="world_map_north">
+		N
+	</panel.string>
+	<panel.string name="world_map_east">
+		O
+	</panel.string>
+	<panel.string name="world_map_west">
+		W
+	</panel.string>
+	<panel.string name="world_map_south">
+		S
+	</panel.string>
+	<panel.string name="world_map_southeast">
+		SO
+	</panel.string>
+	<panel.string name="world_map_northeast">
+		NO
+	</panel.string>
+	<panel.string name="world_map_southwest">
+		SW
+	</panel.string>
+	<panel.string name="world_map_northwest">
+		NW
+	</panel.string>
+	<text label="N" name="floater_map_north" text="N">
+		N
+	</text>
+	<text label="O" name="floater_map_east" text="O">
+		O
+	</text>
+	<text label="W" name="floater_map_west" text="W">
+		W
+	</text>
+	<text label="S" name="floater_map_south" text="S">
+		S
+	</text>
+	<text label="SO" name="floater_map_southeast" text="SO">
+		SO
+	</text>
+	<text label="NO" name="floater_map_northeast" text="NO">
+		NO
+	</text>
+	<text label="SW" name="floater_map_southwest" text="SW">
+		SW
+	</text>
+	<text label="NW" name="floater_map_northwest" text="NW">
+		NW
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index af9185e0b7d..e1ba2025cdd 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -1,654 +1,3149 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- This file contains strings that used to be hardcoded in the source.
-     It is only for those strings which do not belong in a floater.
-     For example, the strings used in avatar chat bubbles, and strings 
-     that are returned from one component and may appear in many places-->
-<strings>
-	<string name="LoginInProgress">
-		Anmeldevorgang gestartet. [APP_NAME] reagiert möglicherweise nicht.  Bitte warten.
-	</string>
-	<string name="LoginAuthenticating">
-		Authentifizierung
-	</string>
-	<string name="LoginMaintenance">
-		Account wird aktualisiert...
-	</string>
-	<string name="LoginAttempt">
-		Ein früherer Anmeldeversuch ist fehlgeschlagen. Anmeldung, Versuch [NUMBER]
-	</string>
-	<string name="LoginPrecaching">
-		Welt wird geladen...
-	</string>
-	<string name="LoginInitializingBrowser">
-		Integrierter Webbrowser wird initialisiert...
-	</string>
-	<string name="LoginInitializingMultimedia">
-		Multimedia wird initialisiert...
-	</string>
-	<string name="LoginVerifyingCache">
-		Cache-Dateien werden überprüft (dauert 60-90 Sekunden)...
-	</string>
-	<string name="LoginProcessingResponse">
-		Antwort wird verarbeitet...
-	</string>
-	<string name="LoginInitializingWorld">
-		Welt wird initialisiert...
-	</string>
-	<string name="LoginDecodingImages">
-		Bilder werden entpackt...
-	</string>
-	<string name="LoginInitializingQuicktime">
-		QuickTime wird initialisiert...
-	</string>
-	<string name="LoginQuicktimeNotFound">
-		QuickTime nicht gefunden - Initialisierung nicht möglich.
-	</string>
-	<string name="LoginQuicktimeOK">
-		QuickTime wurde initialisiert.
-	</string>
-	<string name="LoginWaitingForRegionHandshake">
-		Region-Handshake...
-	</string>
-	<string name="LoginConnectingToRegion">
-		Region-Verbindung...
-	</string>
-	<string name="LoginDownloadingClothing">
-		Kleidung wird geladen...
-	</string>
-	<string name="AgentLostConnection">
-		In dieser Region kann es zu Problemen kommen. Bitte überprüfen Sie Ihre Internetverbindung.
-	</string>
-	<string name="TooltipPerson">
-		Person
-	</string>
-	<string name="TooltipNoName">
-		(namenlos)
-	</string>
-	<string name="TooltipOwner">
-		Eigentümer:
-	</string>
-	<string name="TooltipPublic">
-		Öffentlich
-	</string>
-	<string name="TooltipIsGroup">
-		(Gruppe)
-	</string>
-	<string name="TooltipFlagScript">
-		Skript
-	</string>
-	<string name="TooltipFlagPhysics">
-		Physik
-	</string>
-	<string name="TooltipFlagTouch">
-		Berühren
-	</string>
-	<string name="TooltipFlagL$">
-		L$
-	</string>
-	<string name="TooltipFlagDropInventory">
-		Inventar fallen lassen
-	</string>
-	<string name="TooltipFlagPhantom">
-		Phantom
-	</string>
-	<string name="TooltipFlagTemporary">
-		Temporär
-	</string>
-	<string name="TooltipFlagRightClickMenu">
-		(Rechtsklick für Menü)
-	</string>
-	<string name="TooltipFreeToCopy">
-		Kopieren möglich
-	</string>
-	<string name="TooltipForSaleL$">
-		Zum Verkauf: [AMOUNT] L$
-	</string>
-	<string name="TooltipForSaleMsg">
-		Zum Verkauf: [MESSAGE]
-	</string>
-	<string name="TooltipFlagGroupBuild">
-		Gruppenbau
-	</string>
-	<string name="TooltipFlagNoBuild">
-		Bauen aus
-	</string>
-	<string name="TooltipFlagNoEdit">
-		Gruppenbau
-	</string>
-	<string name="TooltipFlagNotSafe">
-		Unsicher
-	</string>
-	<string name="TooltipFlagNoFly">
-		Fliegen aus
-	</string>
-	<string name="TooltipFlagGroupScripts">
-		Gruppenskripte
-	</string>
-	<string name="TooltipFlagNoScripts">
-		Skripte aus
-	</string>
-	<string name="TooltipLand">
-		Land:
-	</string>
-	<string name="TooltipMustSingleDrop">
-		Sie können nur ein einzelnes Objekt hierher ziehen
-	</string>
-	<string name="RetrievingData">
-		Laden...
-	</string>
-	<string name="ReleaseNotes">
-		Versionshinweise
-	</string>
-	<string name="LoadingData">
-		Wird geladen...
-	</string>
-	<string name="AvatarNameNobody">
-		(niemand)
-	</string>
-	<string name="AvatarNameWaiting">
-		(wartet)
-	</string>
-	<string name="AvatarNameHippos">
-		(hippos)
-	</string>
-	<string name="GroupNameNone">
-		(keiner)
-	</string>
-	<string name="AssetErrorNone">
-		Kein Fehler
-	</string>
-	<string name="AssetErrorRequestFailed">
-		Asset-Anforderung: fehlgeschlagen
-	</string>
-	<string name="AssetErrorNonexistentFile">
-		Asset-Anforderung: Datei existiert nicht
-	</string>
-	<string name="AssetErrorNotInDatabase">
-		Asset-Anforderung: Asset in Datenbank nicht gefunden
-	</string>
-	<string name="AssetErrorEOF">
-		Ende der Datei
-	</string>
-	<string name="AssetErrorCannotOpenFile">
-		Datei kann nicht geöffnet werden
-	</string>
-	<string name="AssetErrorFileNotFound">
-		Datei nicht gefunden
-	</string>
-	<string name="AssetErrorTCPTimeout">
-		Zeitüberschreitung bei Dateiübertragung
-	</string>
-	<string name="AssetErrorCircuitGone">
-		Verbindung verloren
-	</string>
-	<string name="AssetErrorPriceMismatch">
-		Viewer und Server sind sich nicht über Preis einig
-	</string>
-	<string name="AssetErrorUnknownStatus">
-		Status unbekannt
-	</string>
-	<string name="AvatarEditingApparance">
-		(Aussehen wird bearbeitet)
-	</string>
-	<string name="AvatarAway">
-		Abwesend
-	</string>
-	<string name="AvatarBusy">
-		Beschäftigt
-	</string>
-	<string name="AvatarMuted">
-		Stummgeschaltet
-	</string>
-	<string name="anim_express_afraid">
-		Ängstlich
-	</string>
-	<string name="anim_express_anger">
-		Verärgert
-	</string>
-	<string name="anim_away">
-		Abwesend
-	</string>
-	<string name="anim_backflip">
-		Rückwärtssalto
-	</string>
-	<string name="anim_express_laugh">
-		Lachkrampf
-	</string>
-	<string name="anim_express_toothsmile">
-		Grinsen
-	</string>
-	<string name="anim_blowkiss">
-		Kusshand
-	</string>
-	<string name="anim_express_bored">
-		Gelangweilt
-	</string>
-	<string name="anim_bow">
-		Verbeugen
-	</string>
-	<string name="anim_clap">
-		Klatschen
-	</string>
-	<string name="anim_courtbow">
-		Diener
-	</string>
-	<string name="anim_express_cry">
-		Weinen
-	</string>
-	<string name="anim_dance1">
-		Tanz 1
-	</string>
-	<string name="anim_dance2">
-		Tanz 2
-	</string>
-	<string name="anim_dance3">
-		Tanz 3
-	</string>
-	<string name="anim_dance4">
-		Tanz 4
-	</string>
-	<string name="anim_dance5">
-		Tanz 5
-	</string>
-	<string name="anim_dance6">
-		Tanz 6
-	</string>
-	<string name="anim_dance7">
-		Tanz 7
-	</string>
-	<string name="anim_dance8">
-		Tanz 8
-	</string>
-	<string name="anim_express_disdain">
-		Verachten
-	</string>
-	<string name="anim_drink">
-		Trinken
-	</string>
-	<string name="anim_express_embarrased">
-		Verlegen
-	</string>
-	<string name="anim_angry_fingerwag">
-		Drohen
-	</string>
-	<string name="anim_fist_pump">
-		Faust pumpen
-	</string>
-	<string name="anim_yoga_float">
-		Yogaflieger
-	</string>
-	<string name="anim_express_frown">
-		Stirnrunzeln
-	</string>
-	<string name="anim_impatient">
-		Ungeduldig
-	</string>
-	<string name="anim_jumpforjoy">
-		Freudensprung
-	</string>
-	<string name="anim_kissmybutt">
-		LMA
-	</string>
-	<string name="anim_express_kiss">
-		Küssen
-	</string>
-	<string name="anim_laugh_short">
-		Lachen
-	</string>
-	<string name="anim_musclebeach">
-		Posen
-	</string>
-	<string name="anim_no_unhappy">
-		Nein (Bedauernd)
-	</string>
-	<string name="anim_no_head">
-		Nein
-	</string>
-	<string name="anim_nyanya">
-		Ällabätsch
-	</string>
-	<string name="anim_punch_onetwo">
-		Eins-Zwei-Punch
-	</string>
-	<string name="anim_express_open_mouth">
-		Mund offen
-	</string>
-	<string name="anim_peace">
-		Friede
-	</string>
-	<string name="anim_point_you">
-		Auf anderen zeigen
-	</string>
-	<string name="anim_point_me">
-		Auf mich zeigen
-	</string>
-	<string name="anim_punch_l">
-		Linker Haken
-	</string>
-	<string name="anim_punch_r">
-		Rechter Haken
-	</string>
-	<string name="anim_rps_countdown">
-		SSP zählen
-	</string>
-	<string name="anim_rps_paper">
-		SSP Papier
-	</string>
-	<string name="anim_rps_rock">
-		SSP Stein
-	</string>
-	<string name="anim_rps_scissors">
-		SSP Schere
-	</string>
-	<string name="anim_express_repulsed">
-		Angewidert
-	</string>
-	<string name="anim_kick_roundhouse_r">
-		Rundkick
-	</string>
-	<string name="anim_express_sad">
-		Traurig
-	</string>
-	<string name="anim_salute">
-		Salutieren
-	</string>
-	<string name="anim_shout">
-		Rufen
-	</string>
-	<string name="anim_express_shrug">
-		Schulterzucken
-	</string>
-	<string name="anim_express_smile">
-		Lächeln
-	</string>
-	<string name="anim_smoke_idle">
-		Zigarette halten
-	</string>
-	<string name="anim_smoke_inhale">
-		Rauchen
-	</string>
-	<string name="anim_smoke_throw_down">
-		Zigarette wegwerfen
-	</string>
-	<string name="anim_express_surprise">
-		Ãœberraschung
-	</string>
-	<string name="anim_sword_strike_r">
-		Schwerthieb
-	</string>
-	<string name="anim_angry_tantrum">
-		Wutanfall
-	</string>
-	<string name="anim_express_tongue_out">
-		Zunge rausstrecken
-	</string>
-	<string name="anim_hello">
-		Winken
-	</string>
-	<string name="anim_whisper">
-		Flüstern
-	</string>
-	<string name="anim_whistle">
-		Pfeifen
-	</string>
-	<string name="anim_express_wink">
-		Zwinkern
-	</string>
-	<string name="anim_wink_hollywood">
-		Zwinkern (Hollywood)
-	</string>
-	<string name="anim_express_worry">
-		Sorgenvoll
-	</string>
-	<string name="anim_yes_happy">
-		Ja (Erfreut)
-	</string>
-	<string name="anim_yes_head">
-		Ja
-	</string>
-	<string name="texture_loading">
-		Wird geladen...
-	</string>
-	<string name="worldmap_offline">
-		Offline
-	</string>
-	<string name="whisper">
-		flüstert:
-	</string>
-	<string name="shout">
-		ruft:
-	</string>
-	<string name="SIM_ACCESS_PG">
-		PG
-	</string>
-	<string name="SIM_ACCESS_MATURE">
-		Mature
-	</string>
-	<string name="SIM_ACCESS_ADULT">
-		Adult
-	</string>
-	<string name="SIM_ACCESS_DOWN">
-		Offline
-	</string>
-	<string name="SIM_ACCESS_MIN">
-		Unbekannt
-	</string>
-	<string name="land_type_unknown">
-		(unbekannt)
-	</string>
-	<string name="covenant_never_modified">
-		Zuletzt geändert: (nie)
-	</string>
-	<string name="covenant_modified">
-		Zuletzt geändert:
-	</string>
-	<string name="all_files">
-		Alle Dateien
-	</string>
-	<string name="sound_files">
-		Sounds
-	</string>
-	<string name="animation_files">
-		Animationen
-	</string>
-	<string name="image_files">
-		Bilder
-	</string>
-	<string name="save_file_verb">
-		Speichern
-	</string>
-	<string name="load_file_verb">
-		Laden
-	</string>
-	<string name="targa_image_files">
-		Targa-Bilder
-	</string>
-	<string name="bitmap_image_files">
-		Bitmap-Bilder
-	</string>
-	<string name="avi_movie_file">
-		AVI-Filmdatei
-	</string>
-	<string name="xaf_animation_file">
-		XAF Anim-Datei
-	</string>
-	<string name="xml_file">
-		XML-Datei
-	</string>
-	<string name="dot_raw_file">
-		RAW-Datei
-	</string>
-	<string name="compressed_image_files">
-		Komprimierte Bilder
-	</string>
-	<string name="load_files">
-		Dateien laden
-	</string>
-	<string name="choose_the_directory">
-		Verzeichnis auswählen
-	</string>
-	<string name="accel-mac-control">
-		&#8963;
-	</string>
-	<string name="accel-mac-command">
-		&#8984;
-	</string>
-	<string name="accel-mac-option">
-		&#8997;
-	</string>
-	<string name="accel-mac-shift">
-		&#8679;
-	</string>
-	<string name="accel-win-control">
-		Strg+
-	</string>
-	<string name="accel-win-alt">
-		Alt+
-	</string>
-	<string name="accel-win-shift">
-		Umschalt+
-	</string>
-	<string name="GraphicsQualityLow">
-		Niedrig
-	</string>
-	<string name="GraphicsQualityMid">
-		Mittel
-	</string>
-	<string name="GraphicsQualityHigh">
-		Hoch
-	</string>
-        
-	<!-- PARCEL_CATEGORY_UI_STRING -->
-	<string name="Linden Location">Lindenort</string>
-	<string name="Adult">Adult</string>
-	<string name="Arts&amp;Culture">Kunst &amp; Kultur</string>
-	<string name="Business">Business</string>
-	<string name="Educational">Bildung</string>
-	<string name="Gaming">Spielen</string>
-	<string name="Hangout">Treffpunkt</string>
-	<string name="Newcomer Friendly">Anfängergerecht</string>
-	<string name="Parks&amp;Nature">Parks und Natur</string>
-	<string name="Residential">Wohngebiet</string>
-	<string name="Shopping">Shopping</string>
-	<string name="Other">Sonstige</string>
-	<string name="ringing">
-		Verbindung mit In-Welt-Voice-Chat...
-	</string>
-	<string name="connected">
-		Verbunden
-	</string>
-	<string name="unavailable">
-		Der aktuelle Standort unterstützt keine Voice-Kommunikation
-	</string>
-	<string name="hang_up">
-		Verbindung mit In-Welt-Voice-Chat getrennt
-	</string>
-	<string name="ScriptQuestionCautionChatGranted">
-		Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung erteilt: [PERMISSIONS].
-	</string>
-	<string name="ScriptQuestionCautionChatDenied">
-		Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung verweigert: [PERMISSIONS].
-	</string>
-	<string name="ScriptTakeMoney">
-		Linden-Dollar (L$) von Ihnen nehmen
-	</string>
-	<string name="ActOnControlInputs">
-		Steuerung festlegen
-	</string>
-	<string name="RemapControlInputs">
-		Steuerung neu zuweisen
-	</string>
-	<string name="AnimateYourAvatar">
-		Avatar animieren
-	</string>
-	<string name="AttachToYourAvatar">
-		An Avatar anhängen
-	</string>
-	<string name="ReleaseOwnership">
-		Eigentum aufgeben und öffentlich machen
-	</string>
-	<string name="LinkAndDelink">
-		Mit Objekten verknüpfen und davon trennen
-	</string>
-	<string name="AddAndRemoveJoints">
-		Verbindungen zu anderen Objekten hinzufügen und entfernen
-	</string>
-	<string name="ChangePermissions">
-		Berechtigungen ändern
-	</string>
-	<string name="TrackYourCamera">
-		Kameraverfolgung
-	</string>
-	<string name="ControlYourCamera">
-		Kamerasteuerung
-	</string>
-	<string name="only_user_message">
-		Sie sind der einzige Benutzer in dieser Sitzung.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] ist offline.
-	</string>
-	<string name="invite_message">
-		Klicken Sie auf [BUTTON NAME], um eine Verbindung zu diesem Voice-Chat herzustellen.
-	</string>
-	<string name="generic_request_error">
-		Fehler bei Anfrage, bitte versuchen Sie es später.
-	</string>
-	<string name="insufficient_perms_error">
-		Sie sind dazu nicht berechtigt.
-	</string>
-	<string name="session_does_not_exist_error">
-		Die Sitzung ist abgelaufen
-	</string>
-	<string name="no_ability_error">
-		Sie besitzen diese Fähigkeit nicht.
-	</string>
-	<string name="no_ability">
-		Sie besitzen diese Fähigkeit nicht.
-	</string>
-	<string name="not_a_mod_error">
-		Sie sind kein Sitzungsmoderator.
-	</string>
-	<string name="muted_error">
-		Ein Gruppenmoderator hat Ihren Text-Chat deaktiviert.
-	</string>
-	<string name="add_session_event">
-		Es konnten keine Benutzer zur Chat-Sitzung mit [RECIPIENT] hinzugefügt werden.
-	</string>
-	<string name="message_session_event">
-		Ihre Nachricht konnte nicht an die Chat-Sitzung mit [RECIPIENT] gesendet werden.
-	</string>
-	<string name="removed_from_group">
-		Sie wurden von der Gruppe ausgeschlossen.
-	</string>
-	<string name="close_on_no_ability">
-		Sie haben nicht mehr die Berechtigung an der Chat-Sitzung teilzunehmen.
-	</string>
-			<string name="AcctTypeResident">
-				Einwohner
-			</string>
-			<string name="AcctTypeTrial">
-				Test
-			</string>
-			<string name="AcctTypeCharterMember">
-				Charta-Mitglied
-			</string>
-			<string name="AcctTypeEmployee">
-				Linden Lab-Mitarbeiter
-			</string>
-			<string name="PaymentInfoUsed">
-				Zahlungsinfo verwendet
-			</string>
-			<string name="PaymentInfoOnFile">
-				Zahlungsinfo archiviert
-			</string>
-			<string name="NoPaymentInfoOnFile">
-				Keine Zahlungsinfo archiviert
-			</string>
-			<string name="AgeVerified">
-				Altersgeprüft
-			</string>
-			<string name="NotAgeVerified">
-				Nicht altersgeprüft
-			</string>
-</strings>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- This file contains strings that used to be hardcoded in the source.
+     It is only for those strings which do not belong in a floater.
+     For example, the strings used in avatar chat bubbles, and strings 
+     that are returned from one component and may appear in many places-->
+<strings>
+	<string name="SECOND_LIFE">
+		Second Life
+	</string>
+	<string name="APP_NAME">
+		Second Life
+	</string>
+	<string name="SECOND_LIFE_GRID">
+		Second Life-Grid:
+	</string>
+	<string name="SUPPORT_SITE">
+		Second Life Support-Portal
+	</string>
+	<string name="StartupDetectingHardware">
+		Hardware wird erfasst...
+	</string>
+	<string name="StartupLoading">
+		Wird geladen
+	</string>
+	<string name="Fullbright">
+		Fullbright (Legacy)
+	</string>
+	<string name="LoginInProgress">
+		Anmeldevorgang gestartet. [APP_NAME] reagiert möglicherweise nicht.  Bitte warten.
+	</string>
+	<string name="LoginInProgressNoFrozen">
+		Anmeldung erfolgt...
+	</string>
+	<string name="LoginAuthenticating">
+		Authentifizierung
+	</string>
+	<string name="LoginMaintenance">
+		Account wird aktualisiert...
+	</string>
+	<string name="LoginAttempt">
+		Ein früherer Anmeldeversuch ist fehlgeschlagen. Anmeldung, Versuch [NUMBER]
+	</string>
+	<string name="LoginPrecaching">
+		Welt wird geladen...
+	</string>
+	<string name="LoginInitializingBrowser">
+		Integrierter Webbrowser wird initialisiert...
+	</string>
+	<string name="LoginInitializingMultimedia">
+		Multimedia wird initialisiert...
+	</string>
+	<string name="LoginVerifyingCache">
+		Cache-Dateien werden überprüft (dauert 60-90 Sekunden)...
+	</string>
+	<string name="LoginProcessingResponse">
+		Antwort wird verarbeitet...
+	</string>
+	<string name="LoginInitializingWorld">
+		Welt wird initialisiert...
+	</string>
+	<string name="LoginDecodingImages">
+		Bilder werden entpackt...
+	</string>
+	<string name="LoginInitializingQuicktime">
+		QuickTime wird initialisiert...
+	</string>
+	<string name="LoginQuicktimeNotFound">
+		QuickTime nicht gefunden - Initialisierung nicht möglich.
+	</string>
+	<string name="LoginQuicktimeOK">
+		QuickTime wurde initialisiert.
+	</string>
+	<string name="LoginWaitingForRegionHandshake">
+		Region-Handshake...
+	</string>
+	<string name="LoginConnectingToRegion">
+		Region-Verbindung...
+	</string>
+	<string name="LoginDownloadingClothing">
+		Kleidung wird geladen...
+	</string>
+	<string name="AgentLostConnection">
+		In dieser Region kann es zu Problemen kommen. Bitte überprüfen Sie Ihre Internetverbindung.
+	</string>
+	<string name="TooltipPerson">
+		Person
+	</string>
+	<string name="TooltipNoName">
+		(namenlos)
+	</string>
+	<string name="TooltipOwner">
+		Eigentümer:
+	</string>
+	<string name="TooltipPublic">
+		Öffentlich
+	</string>
+	<string name="TooltipIsGroup">
+		(Gruppe)
+	</string>
+	<string name="TooltipForSaleL$">
+		Zum Verkauf: [AMOUNT] L$
+	</string>
+	<string name="TooltipFlagGroupBuild">
+		Gruppenbau
+	</string>
+	<string name="TooltipFlagNoBuild">
+		Bauen aus
+	</string>
+	<string name="TooltipFlagNoEdit">
+		Gruppenbau
+	</string>
+	<string name="TooltipFlagNotSafe">
+		Unsicher
+	</string>
+	<string name="TooltipFlagNoFly">
+		Fliegen aus
+	</string>
+	<string name="TooltipFlagGroupScripts">
+		Gruppenskripte
+	</string>
+	<string name="TooltipFlagNoScripts">
+		Skripte aus
+	</string>
+	<string name="TooltipLand">
+		Land:
+	</string>
+	<string name="TooltipMustSingleDrop">
+		Sie können nur ein einzelnes Objekt hierher ziehen
+	</string>
+	<string name="TooltipHttpUrl">
+		Anklicken, um Webseite anzuzeigen
+	</string>
+	<string name="TooltipSLURL">
+		Anklicken, um Informationen zu diesem Standort anzuzeigen
+	</string>
+	<string name="TooltipAgentUrl">
+		Anklicken, um das Profil dieses Einwohners anzuzeigen
+	</string>
+	<string name="TooltipGroupUrl">
+		Anklicken, um Beschreibung der Gruppe anzuzeigen
+	</string>
+	<string name="TooltipEventUrl">
+		Anklicken, um Beschreibung der Veranstaltung anzuzeigen
+	</string>
+	<string name="TooltipClassifiedUrl">
+		Anklicken, um diese Anzeige anzuzeigen
+	</string>
+	<string name="TooltipParcelUrl">
+		Anklicken, um Beschreibung der Parzelle anzuzeigen
+	</string>
+	<string name="TooltipTeleportUrl">
+		Anklicken, um zu diesem Standort zu teleportieren
+	</string>
+	<string name="TooltipObjectIMUrl">
+		Anklicken, um Beschreibung des Objekts anzuzeigen
+	</string>
+	<string name="TooltipSLAPP">
+		Anklicken, um Befehl secondlife:// auszuführen
+	</string>
+	<string name="BUTTON_CLOSE_DARWIN">
+		Schließen (⌘-W)
+	</string>
+	<string name="BUTTON_CLOSE_WIN">
+		Schließen (Strg+W)
+	</string>
+	<string name="BUTTON_RESTORE">
+		Wiederherstellen
+	</string>
+	<string name="BUTTON_MINIMIZE">
+		Minimieren
+	</string>
+	<string name="BUTTON_TEAR_OFF">
+		Abnehmen
+	</string>
+	<string name="BUTTON_DOCK">
+		Andocken
+	</string>
+	<string name="BUTTON_UNDOCK">
+		Abkoppeln
+	</string>
+	<string name="BUTTON_HELP">
+		Hilfe anzeigen
+	</string>
+	<string name="RetrievingData">
+		Laden...
+	</string>
+	<string name="ReleaseNotes">
+		Versionshinweise
+	</string>
+	<string name="LoadingData">
+		Wird geladen...
+	</string>
+	<string name="AvatarNameNobody">
+		(niemand)
+	</string>
+	<string name="AvatarNameWaiting">
+		(wartet)
+	</string>
+	<string name="AvatarNameHippos">
+		(hippos)
+	</string>
+	<string name="GroupNameNone">
+		(keiner)
+	</string>
+	<string name="AssetErrorNone">
+		Kein Fehler
+	</string>
+	<string name="AssetErrorRequestFailed">
+		Asset-Anforderung: fehlgeschlagen
+	</string>
+	<string name="AssetErrorNonexistentFile">
+		Asset-Anforderung: Datei existiert nicht
+	</string>
+	<string name="AssetErrorNotInDatabase">
+		Asset-Anforderung: Asset in Datenbank nicht gefunden
+	</string>
+	<string name="AssetErrorEOF">
+		Ende der Datei
+	</string>
+	<string name="AssetErrorCannotOpenFile">
+		Datei kann nicht geöffnet werden
+	</string>
+	<string name="AssetErrorFileNotFound">
+		Datei nicht gefunden
+	</string>
+	<string name="AssetErrorTCPTimeout">
+		Zeitüberschreitung bei Dateiübertragung
+	</string>
+	<string name="AssetErrorCircuitGone">
+		Verbindung verloren
+	</string>
+	<string name="AssetErrorPriceMismatch">
+		Viewer und Server sind sich nicht über Preis einig
+	</string>
+	<string name="AssetErrorUnknownStatus">
+		Status unbekannt
+	</string>
+	<string name="texture">
+		Textur
+	</string>
+	<string name="sound">
+		Sound
+	</string>
+	<string name="calling card">
+		Visitenkarte
+	</string>
+	<string name="landmark">
+		Landmarke
+	</string>
+	<string name="legacy script">
+		Skript (veraltet)
+	</string>
+	<string name="clothing">
+		Kleidung
+	</string>
+	<string name="object">
+		Objekt
+	</string>
+	<string name="note card">
+		Notizkarte
+	</string>
+	<string name="folder">
+		Ordner
+	</string>
+	<string name="root">
+		Hauptverzeichnis
+	</string>
+	<string name="lsl2 script">
+		LSL2 Skript
+	</string>
+	<string name="lsl bytecode">
+		LSL Bytecode
+	</string>
+	<string name="tga texture">
+		tga-Textur
+	</string>
+	<string name="body part">
+		Körperteil
+	</string>
+	<string name="snapshot">
+		Foto
+	</string>
+	<string name="lost and found">
+		Fundbüro
+	</string>
+	<string name="targa image">
+		targa-Bild
+	</string>
+	<string name="trash">
+		Papierkorb
+	</string>
+	<string name="jpeg image">
+		jpeg-Bild
+	</string>
+	<string name="animation">
+		Animation
+	</string>
+	<string name="gesture">
+		Geste
+	</string>
+	<string name="simstate">
+		simstate
+	</string>
+	<string name="favorite">
+		Favoriten
+	</string>
+	<string name="symbolic link">
+		Link
+	</string>
+	<string name="AvatarAway">
+		Abwesend
+	</string>
+	<string name="AvatarBusy">
+		Beschäftigt
+	</string>
+	<string name="AvatarMuted">
+		Stummgeschaltet
+	</string>
+	<string name="anim_express_afraid">
+		Ängstlich
+	</string>
+	<string name="anim_express_anger">
+		Verärgert
+	</string>
+	<string name="anim_away">
+		Abwesend
+	</string>
+	<string name="anim_backflip">
+		Rückwärtssalto
+	</string>
+	<string name="anim_express_laugh">
+		Lachkrampf
+	</string>
+	<string name="anim_express_toothsmile">
+		Grinsen
+	</string>
+	<string name="anim_blowkiss">
+		Kusshand
+	</string>
+	<string name="anim_express_bored">
+		Gelangweilt
+	</string>
+	<string name="anim_bow">
+		Verbeugen
+	</string>
+	<string name="anim_clap">
+		Klatschen
+	</string>
+	<string name="anim_courtbow">
+		Diener
+	</string>
+	<string name="anim_express_cry">
+		Weinen
+	</string>
+	<string name="anim_dance1">
+		Tanz 1
+	</string>
+	<string name="anim_dance2">
+		Tanz 2
+	</string>
+	<string name="anim_dance3">
+		Tanz 3
+	</string>
+	<string name="anim_dance4">
+		Tanz 4
+	</string>
+	<string name="anim_dance5">
+		Tanz 5
+	</string>
+	<string name="anim_dance6">
+		Tanz 6
+	</string>
+	<string name="anim_dance7">
+		Tanz 7
+	</string>
+	<string name="anim_dance8">
+		Tanz 8
+	</string>
+	<string name="anim_express_disdain">
+		Verachten
+	</string>
+	<string name="anim_drink">
+		Trinken
+	</string>
+	<string name="anim_express_embarrased">
+		Verlegen
+	</string>
+	<string name="anim_angry_fingerwag">
+		Drohen
+	</string>
+	<string name="anim_fist_pump">
+		Faust pumpen
+	</string>
+	<string name="anim_yoga_float">
+		Yogaflieger
+	</string>
+	<string name="anim_express_frown">
+		Stirnrunzeln
+	</string>
+	<string name="anim_impatient">
+		Ungeduldig
+	</string>
+	<string name="anim_jumpforjoy">
+		Freudensprung
+	</string>
+	<string name="anim_kissmybutt">
+		LMA
+	</string>
+	<string name="anim_express_kiss">
+		Küssen
+	</string>
+	<string name="anim_laugh_short">
+		Lachen
+	</string>
+	<string name="anim_musclebeach">
+		Posen
+	</string>
+	<string name="anim_no_unhappy">
+		Nein (Bedauernd)
+	</string>
+	<string name="anim_no_head">
+		Nein
+	</string>
+	<string name="anim_nyanya">
+		Ällabätsch
+	</string>
+	<string name="anim_punch_onetwo">
+		Eins-Zwei-Punch
+	</string>
+	<string name="anim_express_open_mouth">
+		Mund offen
+	</string>
+	<string name="anim_peace">
+		Friede
+	</string>
+	<string name="anim_point_you">
+		Auf anderen zeigen
+	</string>
+	<string name="anim_point_me">
+		Auf mich zeigen
+	</string>
+	<string name="anim_punch_l">
+		Linker Haken
+	</string>
+	<string name="anim_punch_r">
+		Rechter Haken
+	</string>
+	<string name="anim_rps_countdown">
+		SSP zählen
+	</string>
+	<string name="anim_rps_paper">
+		SSP Papier
+	</string>
+	<string name="anim_rps_rock">
+		SSP Stein
+	</string>
+	<string name="anim_rps_scissors">
+		SSP Schere
+	</string>
+	<string name="anim_express_repulsed">
+		Angewidert
+	</string>
+	<string name="anim_kick_roundhouse_r">
+		Rundkick
+	</string>
+	<string name="anim_express_sad">
+		Traurig
+	</string>
+	<string name="anim_salute">
+		Salutieren
+	</string>
+	<string name="anim_shout">
+		Rufen
+	</string>
+	<string name="anim_express_shrug">
+		Schulterzucken
+	</string>
+	<string name="anim_express_smile">
+		Lächeln
+	</string>
+	<string name="anim_smoke_idle">
+		Zigarette halten
+	</string>
+	<string name="anim_smoke_inhale">
+		Rauchen
+	</string>
+	<string name="anim_smoke_throw_down">
+		Zigarette wegwerfen
+	</string>
+	<string name="anim_express_surprise">
+		Ãœberraschung
+	</string>
+	<string name="anim_sword_strike_r">
+		Schwerthieb
+	</string>
+	<string name="anim_angry_tantrum">
+		Wutanfall
+	</string>
+	<string name="anim_express_tongue_out">
+		Zunge rausstrecken
+	</string>
+	<string name="anim_hello">
+		Winken
+	</string>
+	<string name="anim_whisper">
+		Flüstern
+	</string>
+	<string name="anim_whistle">
+		Pfeifen
+	</string>
+	<string name="anim_express_wink">
+		Zwinkern
+	</string>
+	<string name="anim_wink_hollywood">
+		Zwinkern (Hollywood)
+	</string>
+	<string name="anim_express_worry">
+		Sorgenvoll
+	</string>
+	<string name="anim_yes_happy">
+		Ja (Erfreut)
+	</string>
+	<string name="anim_yes_head">
+		Ja
+	</string>
+	<string name="texture_loading">
+		Wird geladen...
+	</string>
+	<string name="worldmap_offline">
+		Offline
+	</string>
+	<string name="Ok">
+		OK
+	</string>
+	<string name="Premature end of file">
+		Unvollständige Datei
+	</string>
+	<string name="ST_NO_JOINT">
+		HAUPTVERZEICHNIS oder VERBINDUNG nicht gefunden.
+	</string>
+	<string name="whisper">
+		flüstert:
+	</string>
+	<string name="shout">
+		ruft:
+	</string>
+	<string name="ringing">
+		Verbindung mit In-Welt-Voice-Chat...
+	</string>
+	<string name="connected">
+		Verbunden
+	</string>
+	<string name="unavailable">
+		Der aktuelle Standort unterstützt keine Voice-Kommunikation
+	</string>
+	<string name="hang_up">
+		Verbindung mit In-Welt-Voice-Chat getrennt
+	</string>
+	<string name="ScriptQuestionCautionChatGranted">
+		Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung erteilt: [PERMISSIONS].
+	</string>
+	<string name="ScriptQuestionCautionChatDenied">
+		Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung verweigert: [PERMISSIONS].
+	</string>
+	<string name="ScriptTakeMoney">
+		Linden-Dollar (L$) von Ihnen nehmen
+	</string>
+	<string name="ActOnControlInputs">
+		Steuerung festlegen
+	</string>
+	<string name="RemapControlInputs">
+		Steuerung neu zuweisen
+	</string>
+	<string name="AnimateYourAvatar">
+		Avatar animieren
+	</string>
+	<string name="AttachToYourAvatar">
+		An Avatar anhängen
+	</string>
+	<string name="ReleaseOwnership">
+		Eigentum aufgeben und öffentlich machen
+	</string>
+	<string name="LinkAndDelink">
+		Mit Objekten verknüpfen und davon trennen
+	</string>
+	<string name="AddAndRemoveJoints">
+		Verbindungen zu anderen Objekten hinzufügen und entfernen
+	</string>
+	<string name="ChangePermissions">
+		Berechtigungen ändern
+	</string>
+	<string name="TrackYourCamera">
+		Kameraverfolgung
+	</string>
+	<string name="ControlYourCamera">
+		Kamerasteuerung
+	</string>
+	<string name="SIM_ACCESS_PG">
+		PG
+	</string>
+	<string name="SIM_ACCESS_MATURE">
+		Mature
+	</string>
+	<string name="SIM_ACCESS_ADULT">
+		Adult
+	</string>
+	<string name="SIM_ACCESS_DOWN">
+		Offline
+	</string>
+	<string name="SIM_ACCESS_MIN">
+		Unbekannt
+	</string>
+	<string name="land_type_unknown">
+		(unbekannt)
+	</string>
+	<string name="all_files">
+		Alle Dateien
+	</string>
+	<string name="sound_files">
+		Sounds
+	</string>
+	<string name="animation_files">
+		Animationen
+	</string>
+	<string name="image_files">
+		Bilder
+	</string>
+	<string name="save_file_verb">
+		Speichern
+	</string>
+	<string name="load_file_verb">
+		Laden
+	</string>
+	<string name="targa_image_files">
+		Targa-Bilder
+	</string>
+	<string name="bitmap_image_files">
+		Bitmap-Bilder
+	</string>
+	<string name="avi_movie_file">
+		AVI-Filmdatei
+	</string>
+	<string name="xaf_animation_file">
+		XAF Anim-Datei
+	</string>
+	<string name="xml_file">
+		XML-Datei
+	</string>
+	<string name="dot_raw_file">
+		RAW-Datei
+	</string>
+	<string name="compressed_image_files">
+		Komprimierte Bilder
+	</string>
+	<string name="load_files">
+		Dateien laden
+	</string>
+	<string name="choose_the_directory">
+		Verzeichnis auswählen
+	</string>
+	<string name="AvatarSetNotAway">
+		Als anwesend anzeigen
+	</string>
+	<string name="AvatarSetAway">
+		Als abwesend anzeigen
+	</string>
+	<string name="AvatarSetNotBusy">
+		Als nicht beschäftigt anzeigen
+	</string>
+	<string name="AvatarSetBusy">
+		Als beschäftigt anzeigen
+	</string>
+	<string name="shape">
+		Form
+	</string>
+	<string name="skin">
+		Haut
+	</string>
+	<string name="hair">
+		Haare
+	</string>
+	<string name="eyes">
+		Augen
+	</string>
+	<string name="shirt">
+		Hemd
+	</string>
+	<string name="pants">
+		Hose
+	</string>
+	<string name="shoes">
+		Schuhe
+	</string>
+	<string name="socks">
+		Socken
+	</string>
+	<string name="jacket">
+		Jacke
+	</string>
+	<string name="gloves">
+		Handschuhe
+	</string>
+	<string name="undershirt">
+		Unterhemd
+	</string>
+	<string name="underpants">
+		Unterhose
+	</string>
+	<string name="skirt">
+		Rock
+	</string>
+	<string name="invalid">
+		ungültig
+	</string>
+	<string name="BodyPartsRightArm">
+		Rechter Arm
+	</string>
+	<string name="BodyPartsHead">
+		Kopf
+	</string>
+	<string name="BodyPartsLeftArm">
+		Linker Arm
+	</string>
+	<string name="BodyPartsLeftLeg">
+		Linkes Bein
+	</string>
+	<string name="BodyPartsTorso">
+		Oberkörper
+	</string>
+	<string name="BodyPartsRightLeg">
+		Rechtes Bein
+	</string>
+	<string name="GraphicsQualityLow">
+		Niedrig
+	</string>
+	<string name="GraphicsQualityMid">
+		Mittel
+	</string>
+	<string name="GraphicsQualityHigh">
+		Hoch
+	</string>
+	<string name="LeaveMouselook">
+		ESC drücken, um zur Normalansicht zurückzukehren
+	</string>
+	<string name="InventoryNoMatchingItems">
+		Im Inventar wurden keine passenden Artikel gefunden.
+	</string>
+	<string name="InventoryNoTexture">
+		Sie haben keine Kopie dieser Textur in Ihrem Inventar.
+	</string>
+	<string name="LoadingContents">
+		Inhalte werden geladen...
+	</string>
+	<string name="NoContents">
+		Keine Inhalte
+	</string>
+	<string name="InvFolder My Inventory">
+		Mein Inventar
+	</string>
+	<string name="InvFolder My Favorites">
+		Meine Favoriten
+	</string>
+	<string name="InvFolder Library">
+		Bibliothek
+	</string>
+	<string name="InvFolder Textures">
+		Texturen
+	</string>
+	<string name="InvFolder Sounds">
+		Sounds
+	</string>
+	<string name="InvFolder Calling Cards">
+		Visitenkarten
+	</string>
+	<string name="InvFolder Landmarks">
+		Landmarken
+	</string>
+	<string name="InvFolder Scripts">
+		Skripts
+	</string>
+	<string name="InvFolder Clothing">
+		Kleidung
+	</string>
+	<string name="InvFolder Objects">
+		Objekte
+	</string>
+	<string name="InvFolder Notecards">
+		Notizkarten
+	</string>
+	<string name="InvFolder New Folder">
+		Neuer Ordner
+	</string>
+	<string name="InvFolder Inventory">
+		Inventar
+	</string>
+	<string name="InvFolder Uncompressed Images">
+		Nicht-Komprimierte Bilder
+	</string>
+	<string name="InvFolder Body Parts">
+		Körperteile
+	</string>
+	<string name="InvFolder Trash">
+		Papierkorb
+	</string>
+	<string name="InvFolder Photo Album">
+		Fotoalbum
+	</string>
+	<string name="InvFolder Lost And Found">
+		Fundbüro
+	</string>
+	<string name="InvFolder Uncompressed Sounds">
+		Nicht-Komprimierte Sounds
+	</string>
+	<string name="InvFolder Animations">
+		Animationen
+	</string>
+	<string name="InvFolder Gestures">
+		Gesten
+	</string>
+	<string name="InvFolder favorite">
+		Favoriten
+	</string>
+	<string name="InvFolder Current Outfit">
+		Aktuelles Outfit
+	</string>
+	<string name="InvFolder My Outfits">
+		Meine Outfits
+	</string>
+	<string name="InvFolder Friends">
+		Freunde
+	</string>
+	<string name="InvFolder All">
+		Alle
+	</string>
+	<string name="Buy">
+		Kaufen
+	</string>
+	<string name="BuyforL$">
+		Kaufen für L$
+	</string>
+	<string name="Stone">
+		Stein
+	</string>
+	<string name="Metal">
+		Metall
+	</string>
+	<string name="Glass">
+		Glas
+	</string>
+	<string name="Wood">
+		Holz
+	</string>
+	<string name="Flesh">
+		Fleisch
+	</string>
+	<string name="Plastic">
+		Plastik
+	</string>
+	<string name="Rubber">
+		Gummi
+	</string>
+	<string name="Light">
+		Licht
+	</string>
+	<string name="KBShift">
+		Umschalt-Taste
+	</string>
+	<string name="KBCtrl">
+		Strg
+	</string>
+	<string name="Chest">
+		Brust
+	</string>
+	<string name="Skull">
+		Schädel
+	</string>
+	<string name="Left Shoulder">
+		Linke Schulter
+	</string>
+	<string name="Right Shoulder">
+		Rechte Schulter
+	</string>
+	<string name="Left Hand">
+		Linke Hand
+	</string>
+	<string name="Right Hand">
+		Rechte Hand
+	</string>
+	<string name="Left Foot">
+		Linker Fuß
+	</string>
+	<string name="Right Foot">
+		Rechter Fuß
+	</string>
+	<string name="Spine">
+		Wirbelsäule
+	</string>
+	<string name="Pelvis">
+		Becken
+	</string>
+	<string name="Mouth">
+		Mund
+	</string>
+	<string name="Chin">
+		Kinn
+	</string>
+	<string name="Left Ear">
+		Linkes Ohr
+	</string>
+	<string name="Right Ear">
+		Rechtes Ohr
+	</string>
+	<string name="Left Eyeball">
+		Linker Augapfel
+	</string>
+	<string name="Right Eyeball">
+		Rechter Augapfel
+	</string>
+	<string name="Nose">
+		Nase
+	</string>
+	<string name="R Upper Arm">
+		R Oberarm
+	</string>
+	<string name="R Forearm">
+		R Unterarm
+	</string>
+	<string name="L Upper Arm">
+		L Oberarm
+	</string>
+	<string name="L Forearm">
+		L Unterarm
+	</string>
+	<string name="Right Hip">
+		Rechte Hüfte
+	</string>
+	<string name="R Upper Leg">
+		R Oberschenkel
+	</string>
+	<string name="R Lower Leg">
+		R Unterschenkel
+	</string>
+	<string name="Left Hip">
+		Linke Hüfte
+	</string>
+	<string name="L Upper Leg">
+		L Oberschenkel
+	</string>
+	<string name="L Lower Leg">
+		L Unterschenkel
+	</string>
+	<string name="Stomach">
+		Bauch
+	</string>
+	<string name="Left Pec">
+		Linke Brust
+	</string>
+	<string name="Right Pec">
+		Rechts
+	</string>
+	<string name="YearsMonthsOld">
+		[AGEYEARS] [AGEMONTHS] alt
+	</string>
+	<string name="YearsOld">
+		[AGEYEARS] alt
+	</string>
+	<string name="MonthsOld">
+		[AGEMONTHS] alt
+	</string>
+	<string name="WeeksOld">
+		[AGEWEEKS] alt
+	</string>
+	<string name="DaysOld">
+		[AGEDAYS] alt
+	</string>
+	<string name="TodayOld">
+		Seit heute Mitglied
+	</string>
+	<string name="AgeYearsA">
+		[COUNT] Jahr
+	</string>
+	<string name="AgeYearsB">
+		[COUNT] Jahre
+	</string>
+	<string name="AgeYearsC">
+		[COUNT] Jahre
+	</string>
+	<string name="AgeMonthsA">
+		[COUNT] Monat
+	</string>
+	<string name="AgeMonthsB">
+		[COUNT] Monate
+	</string>
+	<string name="AgeMonthsC">
+		[COUNT] Monate
+	</string>
+	<string name="AgeWeeksA">
+		[COUNT] Woche
+	</string>
+	<string name="AgeWeeksB">
+		[COUNT] Wochen
+	</string>
+	<string name="AgeWeeksC">
+		[COUNT] Wochen
+	</string>
+	<string name="AgeDaysA">
+		[COUNT] Tag
+	</string>
+	<string name="AgeDaysB">
+		[COUNT] Tage
+	</string>
+	<string name="AgeDaysC">
+		[COUNT] Tage
+	</string>
+	<string name="AcctTypeResident">
+		Einwohner
+	</string>
+	<string name="AcctTypeTrial">
+		Test
+	</string>
+	<string name="AcctTypeCharterMember">
+		Charta-Mitglied
+	</string>
+	<string name="AcctTypeEmployee">
+		Linden Lab-Mitarbeiter
+	</string>
+	<string name="PaymentInfoUsed">
+		Zahlungsinfo verwendet
+	</string>
+	<string name="PaymentInfoOnFile">
+		Zahlungsinfo archiviert
+	</string>
+	<string name="NoPaymentInfoOnFile">
+		Keine Zahlungsinfo archiviert
+	</string>
+	<string name="AgeVerified">
+		Altersgeprüft
+	</string>
+	<string name="NotAgeVerified">
+		Nicht altersgeprüft
+	</string>
+	<string name="Center 2">
+		Mitte 2
+	</string>
+	<string name="Top Right">
+		Oben rechts
+	</string>
+	<string name="Top">
+		Oben
+	</string>
+	<string name="Top Left">
+		Oben links
+	</string>
+	<string name="Center">
+		Zentrieren
+	</string>
+	<string name="Bottom Left">
+		Unten links
+	</string>
+	<string name="Bottom">
+		Unten
+	</string>
+	<string name="Bottom Right">
+		Unten rechts
+	</string>
+	<string name="CompileQueueDownloadedCompiling">
+		Heruntergeladen, wird kompiliert
+	</string>
+	<string name="CompileQueueScriptNotFound">
+		Skript wurde auf Server nicht gefunden.
+	</string>
+	<string name="CompileQueueProblemDownloading">
+		Beim Herunterladen ist ein Problem aufgetreten
+	</string>
+	<string name="CompileQueueInsufficientPermDownload">
+		Unzureichende Rechte zum Herunterladen eines Skripts.
+	</string>
+	<string name="CompileQueueInsufficientPermFor">
+		Unzureichende Berechtigungen für
+	</string>
+	<string name="CompileQueueUnknownFailure">
+		Unbekannter Fehler beim Herunterladen
+	</string>
+	<string name="CompileQueueTitle">
+		Rekompilierung
+	</string>
+	<string name="CompileQueueStart">
+		rekompilieren
+	</string>
+	<string name="ResetQueueTitle">
+		Zurücksetzen
+	</string>
+	<string name="ResetQueueStart">
+		Zurücksetzen
+	</string>
+	<string name="RunQueueTitle">
+		Skript ausführen
+	</string>
+	<string name="RunQueueStart">
+		Skript ausführen
+	</string>
+	<string name="NotRunQueueTitle">
+		Skript anhalten
+	</string>
+	<string name="NotRunQueueStart">
+		Skript anhalten
+	</string>
+	<string name="CompileSuccessful">
+		Kompilieren erfolgreich abgeschlossen!
+	</string>
+	<string name="CompileSuccessfulSaving">
+		Kompilieren erfolgreich abgeschlossen, speichern...
+	</string>
+	<string name="SaveComplete">
+		Speichervorgang abgeschlossen.
+	</string>
+	<string name="ObjectOutOfRange">
+		Skript (Objekt außerhalb des Bereichs)
+	</string>
+	<string name="GodToolsObjectOwnedBy">
+		Objekt [OBJECT], Besitzer [OWNER]
+	</string>
+	<string name="GroupsNone">
+		keine
+	</string>
+	<string name="Unknown">
+		(unbekannt)
+	</string>
+	<string name="Balance">
+		Kontostand
+	</string>
+	<string name="Credits">
+		Danksagung
+	</string>
+	<string name="Debits">
+		Soll
+	</string>
+	<string name="Total">
+		Gesamtbetrag
+	</string>
+	<string name="NoGroupDataFound">
+		Für Gruppe wurden keine Gruppendaten gefunden
+	</string>
+	<string name="IMParentEstate">
+		parent estate
+	</string>
+	<string name="IMMainland">
+		Mainland
+	</string>
+	<string name="IMTeen">
+		Teen
+	</string>
+	<string name="RegionInfoError">
+		Fehler
+	</string>
+	<string name="RegionInfoAllEstatesOwnedBy">
+		alle Grundstücke gehören [OWNER]
+	</string>
+	<string name="RegionInfoAllEstatesYouOwn">
+		alle Grundstücke, die Ihnen gehört haben
+	</string>
+	<string name="RegionInfoAllEstatesYouManage">
+		alle Grundstücke, die Sie für [OWNER] verwaltet haben
+	</string>
+	<string name="RegionInfoAllowedResidents">
+		Zulässige Einwohner: ([ALLOWEDAGENTS], max [MAXACCESS])
+	</string>
+	<string name="RegionInfoAllowedGroups">
+		Zulässige Gruppen: ([ALLOWEDGROUPS], max [MAXACCESS])
+	</string>
+	<string name="CursorPos">
+		Zeile [LINE], Spalte [COLUMN]
+	</string>
+	<string name="PanelDirCountFound">
+		[COUNT] gefunden
+	</string>
+	<string name="PanelContentsNewScript">
+		Neues Skript
+	</string>
+	<string name="MuteByName">
+		(nach Namen)
+	</string>
+	<string name="MuteAgent">
+		(Einwohner)
+	</string>
+	<string name="MuteObject">
+		(Objekt)
+	</string>
+	<string name="MuteGroup">
+		(Gruppe)
+	</string>
+	<string name="RegionNoCovenant">
+		Für dieses Grundstück liegt kein Vertrag vor.
+	</string>
+	<string name="RegionNoCovenantOtherOwner">
+		Für dieses Grundstück liegt kein Vertrag vor. Das Land auf diesem Grundstück wird vom Grundstückseigentümer und nicht von Linden Lab verkauft.  Für Informationen zum Verkauf setzen Sie sich bitte mit dem Grundstückseigentümer in Verbindung.
+	</string>
+	<string name="covenant_last_modified">
+		Zuletzt geändert:
+	</string>
+	<string name="GroupOwned">
+		In Gruppenbesitz
+	</string>
+	<string name="Public">
+		Öffentlich
+	</string>
+	<string name="ClassifiedClicksTxt">
+		Klicks: [TELEPORT] teleportieren, [MAP] Karte, [PROFILE] Profil
+	</string>
+	<string name="ClassifiedUpdateAfterPublish">
+		(wird nach Veröffentlichung aktualisiert)
+	</string>
+	<string name="GroupVoteYes">
+		Ja
+	</string>
+	<string name="GroupVoteNo">
+		Nein
+	</string>
+	<string name="GroupVoteNoActiveProposals">
+		Zurzeit sind keine Umfragen aktiv
+	</string>
+	<string name="GroupVoteNoArchivedProposals">
+		Zurzeit sind keine Umfragen aktiv
+	</string>
+	<string name="GroupVoteRetrievingArchivedProposals">
+		Archivierte Umfragen werden geladen
+	</string>
+	<string name="GroupVoteRetrievingActiveProposals">
+		Aktive Umfragen werden geladen
+	</string>
+	<string name="MultiPreviewTitle">
+		Vorschau
+	</string>
+	<string name="MultiPropertiesTitle">
+		Eigenschaften
+	</string>
+	<string name="InvOfferAnObjectNamed">
+		Ein Objekt namens
+	</string>
+	<string name="InvOfferOwnedByGroup">
+		im Besitz der Gruppe
+	</string>
+	<string name="InvOfferOwnedByUnknownGroup">
+		im Besitz einer unbekannten Gruppe
+	</string>
+	<string name="InvOfferOwnedBy">
+		im Besitz von
+	</string>
+	<string name="InvOfferOwnedByUnknownUser">
+		im Besitz eines unbekannten Einwohners
+	</string>
+	<string name="InvOfferGaveYou">
+		hat Ihnen folgendes übergeben
+	</string>
+	<string name="InvOfferYouDecline">
+		Sie lehnen folgendes ab:
+	</string>
+	<string name="InvOfferFrom">
+		von
+	</string>
+	<string name="GroupMoneyTotal">
+		Gesamtbetrag
+	</string>
+	<string name="GroupMoneyBought">
+		gekauft
+	</string>
+	<string name="GroupMoneyPaidYou">
+		bezahlte Ihnen
+	</string>
+	<string name="GroupMoneyPaidInto">
+		bezahlte an
+	</string>
+	<string name="GroupMoneyBoughtPassTo">
+		kaufte Pass für
+	</string>
+	<string name="GroupMoneyPaidFeeForEvent">
+		bezahlte Gebühr für Event
+	</string>
+	<string name="GroupMoneyPaidPrizeForEvent">
+		bezahlte Preis für Event
+	</string>
+	<string name="GroupMoneyBalance">
+		Kontostand
+	</string>
+	<string name="GroupMoneyCredits">
+		Danksagung
+	</string>
+	<string name="GroupMoneyDebits">
+		Soll
+	</string>
+	<string name="ViewerObjectContents">
+		Inhalte
+	</string>
+	<string name="AcquiredItems">
+		Erworbene Artikel
+	</string>
+	<string name="Cancel">
+		Abbrechen
+	</string>
+	<string name="UploadingCosts">
+		Hochladen von %s kostet
+	</string>
+	<string name="UnknownFileExtension">
+		Unbekanntes Dateiformat .%s
+Gültige Formate: .wav, .tga, .bmp, .jpg, .jpeg oder .bvh
+	</string>
+	<string name="AddLandmarkNavBarMenu">
+		Landmarke hinzufügen...
+	</string>
+	<string name="EditLandmarkNavBarMenu">
+		Landmarke bearbeiten...
+	</string>
+	<string name="accel-mac-control">
+		⌃
+	</string>
+	<string name="accel-mac-command">
+		⌘
+	</string>
+	<string name="accel-mac-option">
+		⌥
+	</string>
+	<string name="accel-mac-shift">
+		⇧
+	</string>
+	<string name="accel-win-control">
+		Strg+
+	</string>
+	<string name="accel-win-alt">
+		Alt+
+	</string>
+	<string name="accel-win-shift">
+		Umschalt+
+	</string>
+	<string name="FileSaved">
+		Datei wurde gespeichert
+	</string>
+	<string name="Receiving">
+		Daten werden empfangen
+	</string>
+	<string name="AM">
+		Uhr
+	</string>
+	<string name="PM">
+		Uhr
+	</string>
+	<string name="PST">
+		PST
+	</string>
+	<string name="PDT">
+		PDT
+	</string>
+	<string name="Forward">
+		Vorwärts
+	</string>
+	<string name="Left">
+		Links
+	</string>
+	<string name="Right">
+		Rechts
+	</string>
+	<string name="Back">
+		Zurück
+	</string>
+	<string name="North">
+		Norden
+	</string>
+	<string name="South">
+		Süden
+	</string>
+	<string name="West">
+		Westen
+	</string>
+	<string name="East">
+		Osten
+	</string>
+	<string name="Up">
+		Nach oben
+	</string>
+	<string name="Down">
+		Nach unten
+	</string>
+	<string name="Any Category">
+		Alle Kategorien
+	</string>
+	<string name="Shopping">
+		Shopping
+	</string>
+	<string name="Land Rental">
+		Land mieten
+	</string>
+	<string name="Property Rental">
+		Immobilie mieten
+	</string>
+	<string name="Special Attraction">
+		Attraktionen
+	</string>
+	<string name="New Products">
+		Neue Produkte
+	</string>
+	<string name="Employment">
+		Stellenangebote
+	</string>
+	<string name="Wanted">
+		Gesucht
+	</string>
+	<string name="Service">
+		Dienstleistungen
+	</string>
+	<string name="Personal">
+		Verschiedenes
+	</string>
+	<string name="None">
+		Keiner
+	</string>
+	<string name="Linden Location">
+		Lindenort
+	</string>
+	<string name="Adult">
+		Adult
+	</string>
+	<string name="Arts&amp;Culture">
+		Kunst &amp; Kultur
+	</string>
+	<string name="Business">
+		Business
+	</string>
+	<string name="Educational">
+		Bildung
+	</string>
+	<string name="Gaming">
+		Spielen
+	</string>
+	<string name="Hangout">
+		Treffpunkt
+	</string>
+	<string name="Newcomer Friendly">
+		Anfängergerecht
+	</string>
+	<string name="Parks&amp;Nature">
+		Parks und Natur
+	</string>
+	<string name="Residential">
+		Wohngebiet
+	</string>
+	<string name="Stage">
+		Phase
+	</string>
+	<string name="Other">
+		Sonstige
+	</string>
+	<string name="Any">
+		Alle
+	</string>
+	<string name="You">
+		Sie
+	</string>
+	<string name=":">
+		:
+	</string>
+	<string name=",">
+		,
+	</string>
+	<string name="...">
+		...
+	</string>
+	<string name="***">
+		***
+	</string>
+	<string name="(">
+		(
+	</string>
+	<string name=")">
+		)
+	</string>
+	<string name=".">
+		.
+	</string>
+	<string name="&apos;">
+		&apos;
+	</string>
+	<string name="---">
+		---
+	</string>
+	<string name="MBCmdLineError">
+		Beim Parsen der Befehlszeile wurde ein Fehler festgestellt.
+Weitere Informationen: http://wiki.secondlife.com/wiki/Client_parameters (EN)
+Fehler:
+	</string>
+	<string name="MBCmdLineUsg">
+		[APP_NAME] Verwendung in Befehlszeile:
+	</string>
+	<string name="MBUnableToAccessFile">
+		[APP_NAME] kann auf die erforderliche Datei nicht zugreifen.
+
+Grund hierfür ist, dass Sie entweder mehrere Instanzen gleichzeitig ausführen oder dass Ihr System denkt, eine Datei sei geöffnet.
+Falls diese Nachricht erneut angezeigt wird, starten Sie bitte Ihren Computer neu und probieren Sie es noch einmal.
+Falls der Fehler dann weiterhin auftritt, müssen Sie [APP_NAME] von Ihrem System de-installieren und erneut installieren.
+	</string>
+	<string name="MBFatalError">
+		Unbehebbarer Fehler
+	</string>
+	<string name="MBRequiresAltiVec">
+		[APP_NAME] erfordert einen Prozessor mit AltiVec (G4 oder später).
+	</string>
+	<string name="MBAlreadyRunning">
+		[APP_NAME] läuft bereits.
+Bitte sehen Sie in Ihrer Menüleiste nach, dort sollte ein Symbol für das Programm angezeigt werden.
+Falls diese Nachricht erneut angezeigt wird, starten Sie Ihren Computer bitte neu.
+	</string>
+	<string name="MBFrozenCrashed">
+		[APP_NAME] scheint eingefroren zu sein oder ist abgestürzt.
+Möchten Sie einen Absturz-Bericht einschicken?
+	</string>
+	<string name="MBAlert">
+		Alarm
+	</string>
+	<string name="MBNoDirectX">
+		[APP_NAME] kann DirectX 9.0b oder höher nicht feststellen.
+[APP_NAME] verwendet DirectX, um nach Hardware und/oder veralteten Treibern zu suchen, die zu Problemen mit der Stabilität, Leistung und Abstürzen führen können.  Sie können [APP_NAME] auch so ausführen, wir empfehlen jedoch, dass DirectX 9.0b vorhanden ist und ausgeführt wird.
+
+Möchten Sie fortfahren?
+	</string>
+	<string name="MBWarning">
+		Hinweis
+	</string>
+	<string name="MBNoAutoUpdate">
+		Für Linux ist zur Zeit noch kein automatisches Aktualisieren möglich.
+Bitte laden Sie die aktuellste Version von www.secondlife.com herunter.
+	</string>
+	<string name="MBRegClassFailed">
+		RegisterClass fehlgeschlagen
+	</string>
+	<string name="MBError">
+		Fehler
+	</string>
+	<string name="MBFullScreenErr">
+		Vollbildschirm mit [WIDTH] x [HEIGHT] kann nicht ausgeführt werden.
+Ausführung erfolgt in Fenster.
+	</string>
+	<string name="MBDestroyWinFailed">
+		Fehler beim Herunterfahren während Fenster geschlossen wurde (DestroyWindow() fehlgeschlagen)
+	</string>
+	<string name="MBShutdownErr">
+		Fehler beim Herunterfahren
+	</string>
+	<string name="MBDevContextErr">
+		Kann keinen Kontext für GL-Gerät erstellen
+	</string>
+	<string name="MBPixelFmtErr">
+		Passendes Pixelformat wurde nicht gefunden
+	</string>
+	<string name="MBPixelFmtDescErr">
+		Beschreibung für Pixelformat nicht verfügbar
+	</string>
+	<string name="MBTrueColorWindow">
+		Um [APP_NAME] in einem Fenster auszuführen, ist True Color (32-bit) erforderlich.
+Klicken Sie auf Systemsteuerung &gt; Anzeige &gt; Einstellungen und stellen Sie den Bildschirm auf 32-bit Farbe ein.
+Wenn Sie die Anwendung im Modus Vollbildschirm ausführen möchten, dann wird [APP_NAME] den Bildschirm automatisch während der Ausführung anpassen.
+	</string>
+	<string name="MBAlpha">
+		[APP_NAME] kann nicht ausgeführt werden, da kein 8-Bit-Alpha-Kanal verfügbar ist.  Dies geschieht normalerweise bei Problemen mit dem Treiber der Video-Karte.
+Bitte vergewissern Sie sich, dass Sie die aktuellsten Treiber für Ihre Videokarte installiert haben.
+Vergewissern Sie sich außerdem, dass Ihr Bildschirm auf True Color (32-Bit) eingestellt ist (Systemsteuerung &gt; Anzeige &gt; Einstellungen).
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+	</string>
+	<string name="MBPixelFmtSetErr">
+		Pixel-Format kann nicht eingestellt werden.
+	</string>
+	<string name="MBGLContextErr">
+		Kann keinen Kontext für GL-Gerät erstellen
+	</string>
+	<string name="MBGLContextActErr">
+		Kann keinen Kontext für GL-Gerät aktivieren
+	</string>
+	<string name="MBVideoDrvErr">
+		[APP_NAME] kann nicht ausgeführt werden, da die Treiber Ihrer Videokarte entweder nicht richtig installiert oder veraltet sind, oder die entsprechende Hardware nicht unterstützt wird. Bitte vergewissern Sie sich, dass Sie die aktuellsten Treiber für die Videokarte installiert haben. Falls Sie die aktuellsten Treiber bereits installiert haben, installieren Sie diese bitte erneut.
+
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+	</string>
+	<string name="5 O&apos;Clock Shadow">
+		Bartschatten
+	</string>
+	<string name="All White">
+		Ganz weiß
+	</string>
+	<string name="Anime Eyes">
+		Anime-Augen
+	</string>
+	<string name="Arced">
+		Gewölbt
+	</string>
+	<string name="Arm Length">
+		Armlänge
+	</string>
+	<string name="Attached">
+		Angewachsen
+	</string>
+	<string name="Attached Earlobes">
+		Angewachsene Ohrläppchen
+	</string>
+	<string name="Back Bangs">
+		Nackenhaar
+	</string>
+	<string name="Back Bangs Down">
+		Lang
+	</string>
+	<string name="Back Bangs Up">
+		Kurz
+	</string>
+	<string name="Back Fringe">
+		Nackenfransen
+	</string>
+	<string name="Back Hair">
+		Hinterkopfhaar
+	</string>
+	<string name="Back Hair Down">
+		lang
+	</string>
+	<string name="Back Hair Up">
+		kurz
+	</string>
+	<string name="Baggy">
+		Tränensäcke
+	</string>
+	<string name="Bangs">
+		Pony
+	</string>
+	<string name="Bangs Down">
+		Pony lang
+	</string>
+	<string name="Bangs Up">
+		Pony kurz
+	</string>
+	<string name="Beady Eyes">
+		Knopfaugen
+	</string>
+	<string name="Belly Size">
+		Bauchgröße
+	</string>
+	<string name="Big">
+		Groß
+	</string>
+	<string name="Big Butt">
+		Großer Hintern
+	</string>
+	<string name="Big Eyeball">
+		Großer Augapfel
+	</string>
+	<string name="Big Hair Back">
+		Volumen: Hinten
+	</string>
+	<string name="Big Hair Front">
+		Volumen: Vorne
+	</string>
+	<string name="Big Hair Top">
+		Volumen: Oben
+	</string>
+	<string name="Big Head">
+		Großer Kopf
+	</string>
+	<string name="Big Pectorals">
+		Große Brustmuskeln
+	</string>
+	<string name="Big Spikes">
+		Große Stacheln
+	</string>
+	<string name="Black">
+		Schwarz
+	</string>
+	<string name="Blonde">
+		Blond
+	</string>
+	<string name="Blonde Hair">
+		Blondes Haar
+	</string>
+	<string name="Blush">
+		Rouge
+	</string>
+	<string name="Blush Color">
+		Rougefarbe
+	</string>
+	<string name="Blush Opacity">
+		Rouge Deckkraft
+	</string>
+	<string name="Body Definition">
+		Körperkonturen
+	</string>
+	<string name="Body Fat">
+		Körperfett
+	</string>
+	<string name="Body Freckles">
+		Sommersprossen
+	</string>
+	<string name="Body Thick">
+		Körper - breit
+	</string>
+	<string name="Body Thickness">
+		Körperbreite
+	</string>
+	<string name="Body Thin">
+		Körper - schmal
+	</string>
+	<string name="Bow Legged">
+		o-beinig
+	</string>
+	<string name="Breast Buoyancy">
+		Brust, Straffheit
+	</string>
+	<string name="Breast Cleavage">
+		Dekolleté
+	</string>
+	<string name="Breast Size">
+		Brustgröße
+	</string>
+	<string name="Bridge Width">
+		Rückenbreite
+	</string>
+	<string name="Broad">
+		Breit
+	</string>
+	<string name="Brow Size">
+		Brauengröße
+	</string>
+	<string name="Bug Eyes">
+		Glubschaugen
+	</string>
+	<string name="Bugged Eyes">
+		Hervortretend
+	</string>
+	<string name="Bulbous">
+		Knollennase
+	</string>
+	<string name="Bulbous Nose">
+		Knollennase
+	</string>
+	<string name="Bushy Eyebrows">
+		Buschige Augenbrauen
+	</string>
+	<string name="Bushy Hair">
+		Buschiges Haar
+	</string>
+	<string name="Butt Size">
+		Hintern, Größe
+	</string>
+	<string name="bustle skirt">
+		Tournürenrock
+	</string>
+	<string name="no bustle">
+		Ohne
+	</string>
+	<string name="more bustle">
+		Mit
+	</string>
+	<string name="Chaplin">
+		Chaplin
+	</string>
+	<string name="Cheek Bones">
+		Wangenknochen
+	</string>
+	<string name="Chest Size">
+		Brustgröße
+	</string>
+	<string name="Chin Angle">
+		Kinnwinkel
+	</string>
+	<string name="Chin Cleft">
+		Kinnspalte
+	</string>
+	<string name="Chin Curtains">
+		Schifferfräse
+	</string>
+	<string name="Chin Depth">
+		Kinnlänge
+	</string>
+	<string name="Chin Heavy">
+		Kinn ausgeprägt
+	</string>
+	<string name="Chin In">
+		Kinn zurück
+	</string>
+	<string name="Chin Out">
+		Kinn nach vorne
+	</string>
+	<string name="Chin-Neck">
+		Kinn-Hals
+	</string>
+	<string name="Clear">
+		Löschen
+	</string>
+	<string name="Cleft">
+		Spalte
+	</string>
+	<string name="Close Set Eyes">
+		Eng stehende Augen
+	</string>
+	<string name="Closed">
+		Geschlossen
+	</string>
+	<string name="Closed Back">
+		Hinten geschlossen
+	</string>
+	<string name="Closed Front">
+		Vorne geschlossen
+	</string>
+	<string name="Closed Left">
+		Links geschlossen
+	</string>
+	<string name="Closed Right">
+		Rechts geschlossen
+	</string>
+	<string name="Coin Purse">
+		Klein
+	</string>
+	<string name="Collar Back">
+		Kragen hinten
+	</string>
+	<string name="Collar Front">
+		Kragen vorne
+	</string>
+	<string name="Corner Down">
+		Nach unten
+	</string>
+	<string name="Corner Normal">
+		Normal
+	</string>
+	<string name="Corner Up">
+		Nach oben
+	</string>
+	<string name="Creased">
+		Schlupflid
+	</string>
+	<string name="Crooked Nose">
+		Krumme Nase
+	</string>
+	<string name="Cropped Hair">
+		Kurze Haare
+	</string>
+	<string name="Cuff Flare">
+		Hosenaufschlag
+	</string>
+	<string name="Dark">
+		Dunkel
+	</string>
+	<string name="Dark Green">
+		Dunkelgrün
+	</string>
+	<string name="Darker">
+		Dunkler
+	</string>
+	<string name="Deep">
+		Tief
+	</string>
+	<string name="Default Heels">
+		Standardabsätze
+	</string>
+	<string name="Default Toe">
+		Standardspitze
+	</string>
+	<string name="Dense">
+		Dicht
+	</string>
+	<string name="Dense hair">
+		Dichtes Haar
+	</string>
+	<string name="Double Chin">
+		Doppelkinn
+	</string>
+	<string name="Downturned">
+		Nach unten
+	</string>
+	<string name="Duffle Bag">
+		Groß
+	</string>
+	<string name="Ear Angle">
+		Ohrenwinkel
+	</string>
+	<string name="Ear Size">
+		Ohrengröße
+	</string>
+	<string name="Ear Tips">
+		Ohrenspitzen
+	</string>
+	<string name="Egg Head">
+		Eierkopf
+	</string>
+	<string name="Eye Bags">
+		Augenränder
+	</string>
+	<string name="Eye Color">
+		Augenfarbe
+	</string>
+	<string name="Eye Depth">
+		Augentiefe
+	</string>
+	<string name="Eye Lightness">
+		Helligkeit
+	</string>
+	<string name="Eye Opening">
+		Öffnung
+	</string>
+	<string name="Eye Pop">
+		Symmetrie
+	</string>
+	<string name="Eye Size">
+		Augengröße
+	</string>
+	<string name="Eye Spacing">
+		Augenstand
+	</string>
+	<string name="Eyeball Size">
+		Größe des Augapfels
+	</string>
+	<string name="Eyebrow Arc">
+		Brauenbogen
+	</string>
+	<string name="Eyebrow Density">
+		Brauendichte
+	</string>
+	<string name="Eyebrow Height">
+		Brauenhöhe
+	</string>
+	<string name="Eyebrow Points">
+		Brauenenden
+	</string>
+	<string name="Eyebrow Size">
+		Brauengröße
+	</string>
+	<string name="Eyelash Length">
+		Wimpernlänge
+	</string>
+	<string name="Eyeliner">
+		Eyeliner
+	</string>
+	<string name="Eyeliner Color">
+		Farbe des Eyeliners
+	</string>
+	<string name="Eyes Back">
+		Augen zurück
+	</string>
+	<string name="Eyes Bugged">
+		Glubschaugen
+	</string>
+	<string name="Eyes Forward">
+		Augen nach vorne
+	</string>
+	<string name="Eyes Long Head">
+		Augen langer Kopf
+	</string>
+	<string name="Eyes Shear Left Up">
+		Augen Verzerrung links hoch
+	</string>
+	<string name="Eyes Shear Right Up">
+		Augen Verzerrung rechts hoch
+	</string>
+	<string name="Eyes Short Head">
+		Augen kurzer Kopf
+	</string>
+	<string name="Eyes Spread">
+		Augen auseinander
+	</string>
+	<string name="Eyes Sunken">
+		eingesunkene Augen
+	</string>
+	<string name="Eyes Together">
+		Augen zusammen
+	</string>
+	<string name="Face Shear">
+		Gesichtsverzerrung
+	</string>
+	<string name="Facial Definition">
+		Gesichtskonturen
+	</string>
+	<string name="Far Set Eyes">
+		Weit auseinander
+	</string>
+	<string name="Fat">
+		Dick
+	</string>
+	<string name="Fat Head">
+		Dicker Kopf
+	</string>
+	<string name="Fat Lips">
+		Volle Lippen
+	</string>
+	<string name="Fat Lower">
+		Volle Unterlippe
+	</string>
+	<string name="Fat Lower Lip">
+		Volle Unterlippe
+	</string>
+	<string name="Fat Torso">
+		Dicker Körper
+	</string>
+	<string name="Fat Upper">
+		Volle Oberlippe
+	</string>
+	<string name="Fat Upper Lip">
+		Volle Oberlippe
+	</string>
+	<string name="Female">
+		weiblich
+	</string>
+	<string name="Fingerless">
+		Ohne Finger
+	</string>
+	<string name="Fingers">
+		Finger
+	</string>
+	<string name="Flared Cuffs">
+		Ausgestellt
+	</string>
+	<string name="Flat">
+		Flach
+	</string>
+	<string name="Flat Butt">
+		Flacher Hintern
+	</string>
+	<string name="Flat Head">
+		Flacher Kopf
+	</string>
+	<string name="Flat Toe">
+		Flache Spitze
+	</string>
+	<string name="Foot Size">
+		Fußgröße
+	</string>
+	<string name="Forehead Angle">
+		Stirnwinkel
+	</string>
+	<string name="Forehead Heavy">
+		Stirn ausgeprägt
+	</string>
+	<string name="Freckles">
+		Sommersprossen
+	</string>
+	<string name="Front Bangs Down">
+		Langer Pony
+	</string>
+	<string name="Front Bangs Up">
+		Kurzer Pony
+	</string>
+	<string name="Front Fringe">
+		Fransen, vorne
+	</string>
+	<string name="Front Hair">
+		Vorderhaar
+	</string>
+	<string name="Front Hair Down">
+		langes Vorderhaar
+	</string>
+	<string name="Front Hair Up">
+		Kurzes Vorderhaar
+	</string>
+	<string name="Full Back">
+		Hinten volles Haar
+	</string>
+	<string name="Full Eyeliner">
+		Starker Eyeliner
+	</string>
+	<string name="Full Front">
+		Vorne volles Haar
+	</string>
+	<string name="Full Hair Sides">
+		Seitlich volles Haar
+	</string>
+	<string name="Full Sides">
+		Volle Seiten
+	</string>
+	<string name="Glossy">
+		Glänzend
+	</string>
+	<string name="Glove Fingers">
+		Handschuhfinger
+	</string>
+	<string name="Glove Length">
+		Handschuhlänge
+	</string>
+	<string name="Hair">
+		Haare
+	</string>
+	<string name="Hair Back">
+		Haare: Hinten
+	</string>
+	<string name="Hair Front">
+		Haare: Vorne
+	</string>
+	<string name="Hair Sides">
+		Haare: Seiten
+	</string>
+	<string name="Hair Sweep">
+		Haartolle
+	</string>
+	<string name="Hair Thickess">
+		Haardicke
+	</string>
+	<string name="Hair Thickness">
+		Haardicke
+	</string>
+	<string name="Hair Tilt">
+		Haarneigung
+	</string>
+	<string name="Hair Tilted Left">
+		Nach links
+	</string>
+	<string name="Hair Tilted Right">
+		Nach rechts
+	</string>
+	<string name="Hair Volume">
+		Haare: Volumen
+	</string>
+	<string name="Hand Size">
+		Handgröße
+	</string>
+	<string name="Handlebars">
+		Zwirbelbart
+	</string>
+	<string name="Head Length">
+		Kopflänge
+	</string>
+	<string name="Head Shape">
+		Kopfform
+	</string>
+	<string name="Head Size">
+		Kopfgröße
+	</string>
+	<string name="Head Stretch">
+		Kopfstreckung
+	</string>
+	<string name="Heel Height">
+		Absatzhöhe
+	</string>
+	<string name="Heel Shape">
+		Absatzform
+	</string>
+	<string name="Height">
+		Höhe
+	</string>
+	<string name="High">
+		Hoch
+	</string>
+	<string name="High Heels">
+		Hohe Absätze
+	</string>
+	<string name="High Jaw">
+		Hoch
+	</string>
+	<string name="High Platforms">
+		Hohe Plattformsohlen
+	</string>
+	<string name="High and Tight">
+		Hoch und eng
+	</string>
+	<string name="Higher">
+		Höhere
+	</string>
+	<string name="Hip Length">
+		Länge der Hüfte
+	</string>
+	<string name="Hip Width">
+		Breite der Hüfte
+	</string>
+	<string name="In">
+		In
+	</string>
+	<string name="In Shdw Color">
+		Farbe Innenseite
+	</string>
+	<string name="In Shdw Opacity">
+		Deckkraft: innerer Lidschatten
+	</string>
+	<string name="Inner Eye Corner">
+		Ecke: Nasenseite
+	</string>
+	<string name="Inner Eye Shadow">
+		Innerer Lidschatten
+	</string>
+	<string name="Inner Shadow">
+		Innerer Lidschatten
+	</string>
+	<string name="Jacket Length">
+		Jackenlänge
+	</string>
+	<string name="Jacket Wrinkles">
+		Jackenfalten
+	</string>
+	<string name="Jaw Angle">
+		Kinnansatz
+	</string>
+	<string name="Jaw Jut">
+		Kinnposition
+	</string>
+	<string name="Jaw Shape">
+		Kinnform
+	</string>
+	<string name="Join">
+		Zusammen
+	</string>
+	<string name="Jowls">
+		Hängebacken
+	</string>
+	<string name="Knee Angle">
+		Kniewinkel
+	</string>
+	<string name="Knock Kneed">
+		X-beinig
+	</string>
+	<string name="Large">
+		Groß
+	</string>
+	<string name="Large Hands">
+		Große Hände
+	</string>
+	<string name="Left Part">
+		Linksscheitel
+	</string>
+	<string name="Leg Length">
+		Beinlänge
+	</string>
+	<string name="Leg Muscles">
+		Beinmuskeln
+	</string>
+	<string name="Less">
+		Weniger
+	</string>
+	<string name="Less Body Fat">
+		Weniger Speck
+	</string>
+	<string name="Less Curtains">
+		Weniger
+	</string>
+	<string name="Less Freckles">
+		Weniger
+	</string>
+	<string name="Less Full">
+		Weniger
+	</string>
+	<string name="Less Gravity">
+		Weniger
+	</string>
+	<string name="Less Love">
+		Weniger
+	</string>
+	<string name="Less Muscles">
+		Weniger
+	</string>
+	<string name="Less Muscular">
+		Weniger
+	</string>
+	<string name="Less Rosy">
+		Weniger
+	</string>
+	<string name="Less Round">
+		Weniger
+	</string>
+	<string name="Less Saddle">
+		Weniger
+	</string>
+	<string name="Less Square">
+		Weniger
+	</string>
+	<string name="Less Volume">
+		Weniger
+	</string>
+	<string name="Less soul">
+		Weniger
+	</string>
+	<string name="Lighter">
+		Heller
+	</string>
+	<string name="Lip Cleft">
+		Amorbogen
+	</string>
+	<string name="Lip Cleft Depth">
+		Tiefe: Amorbogen
+	</string>
+	<string name="Lip Fullness">
+		Fülle
+	</string>
+	<string name="Lip Pinkness">
+		Pinkton
+	</string>
+	<string name="Lip Ratio">
+		Lippenproportionen
+	</string>
+	<string name="Lip Thickness">
+		Lippendicke
+	</string>
+	<string name="Lip Width">
+		Mundbreite
+	</string>
+	<string name="Lipgloss">
+		Lipgloss
+	</string>
+	<string name="Lipstick">
+		Lippenstift
+	</string>
+	<string name="Lipstick Color">
+		Farbe
+	</string>
+	<string name="Long">
+		Lang
+	</string>
+	<string name="Long Head">
+		Langer Kopf
+	</string>
+	<string name="Long Hips">
+		Lange Hüften
+	</string>
+	<string name="Long Legs">
+		Lange Beine
+	</string>
+	<string name="Long Neck">
+		Langer Hals
+	</string>
+	<string name="Long Pigtails">
+		Lange Zöpfe
+	</string>
+	<string name="Long Ponytail">
+		Langer Pferdeschwanz
+	</string>
+	<string name="Long Torso">
+		Langer Oberkörper
+	</string>
+	<string name="Long arms">
+		Lange Arme
+	</string>
+	<string name="Longcuffs">
+		Manschetten
+	</string>
+	<string name="Loose Pants">
+		Weite Hosen
+	</string>
+	<string name="Loose Shirt">
+		Weites Hemd
+	</string>
+	<string name="Loose Sleeves">
+		Weite Ärmel
+	</string>
+	<string name="Love Handles">
+		Fettpölsterchen
+	</string>
+	<string name="Low">
+		Niedrig
+	</string>
+	<string name="Low Heels">
+		Niedrig
+	</string>
+	<string name="Low Jaw">
+		Niedrig
+	</string>
+	<string name="Low Platforms">
+		Niedrig
+	</string>
+	<string name="Low and Loose">
+		Weit
+	</string>
+	<string name="Lower">
+		Absenken
+	</string>
+	<string name="Lower Bridge">
+		Brücke, Unterer Teil
+	</string>
+	<string name="Lower Cheeks">
+		Wangen, unterer Bereich
+	</string>
+	<string name="Male">
+		Männlich
+	</string>
+	<string name="Middle Part">
+		Mittelscheitel
+	</string>
+	<string name="More">
+		Mehr
+	</string>
+	<string name="More Blush">
+		Mehr
+	</string>
+	<string name="More Body Fat">
+		Mehr Speck
+	</string>
+	<string name="More Curtains">
+		Mehr
+	</string>
+	<string name="More Eyeshadow">
+		Mehr
+	</string>
+	<string name="More Freckles">
+		Mehr
+	</string>
+	<string name="More Full">
+		Voller
+	</string>
+	<string name="More Gravity">
+		Mehr
+	</string>
+	<string name="More Lipstick">
+		Mehr
+	</string>
+	<string name="More Love">
+		Mehr
+	</string>
+	<string name="More Lower Lip">
+		Größer
+	</string>
+	<string name="More Muscles">
+		Mehr
+	</string>
+	<string name="More Muscular">
+		Mehr
+	</string>
+	<string name="More Rosy">
+		Mehr
+	</string>
+	<string name="More Round">
+		Runder
+	</string>
+	<string name="More Saddle">
+		Mehr
+	</string>
+	<string name="More Sloped">
+		Mehr
+	</string>
+	<string name="More Square">
+		Mehr
+	</string>
+	<string name="More Upper Lip">
+		Mehr
+	</string>
+	<string name="More Vertical">
+		Mehr
+	</string>
+	<string name="More Volume">
+		Mehr
+	</string>
+	<string name="More soul">
+		Mehr
+	</string>
+	<string name="Moustache">
+		Schnauzer
+	</string>
+	<string name="Mouth Corner">
+		Mundwinkel
+	</string>
+	<string name="Mouth Position">
+		Mundposition
+	</string>
+	<string name="Mowhawk">
+		Irokese
+	</string>
+	<string name="Muscular">
+		Muskulös
+	</string>
+	<string name="Mutton Chops">
+		Koteletten
+	</string>
+	<string name="Nail Polish">
+		Nagellack
+	</string>
+	<string name="Nail Polish Color">
+		Farbe
+	</string>
+	<string name="Narrow">
+		Schmal
+	</string>
+	<string name="Narrow Back">
+		Wenig
+	</string>
+	<string name="Narrow Front">
+		Wenig
+	</string>
+	<string name="Narrow Lips">
+		Schmale Lippen
+	</string>
+	<string name="Natural">
+		Natürlich
+	</string>
+	<string name="Neck Length">
+		Halslänge
+	</string>
+	<string name="Neck Thickness">
+		Halsdicke
+	</string>
+	<string name="No Blush">
+		Kein Rouge
+	</string>
+	<string name="No Eyeliner">
+		Kein Eyeliner
+	</string>
+	<string name="No Eyeshadow">
+		Kein Lidschatten
+	</string>
+	<string name="No Heels">
+		Keine Absätze
+	</string>
+	<string name="No Lipgloss">
+		Kein Lipgloss
+	</string>
+	<string name="No Lipstick">
+		Kein Lippenstift
+	</string>
+	<string name="No Part">
+		Kein Scheitel
+	</string>
+	<string name="No Polish">
+		Kein Nagellack
+	</string>
+	<string name="No Red">
+		Nicht rot
+	</string>
+	<string name="No Spikes">
+		Keine Stachel
+	</string>
+	<string name="No White">
+		Kein Weiß
+	</string>
+	<string name="No Wrinkles">
+		Keine Falten
+	</string>
+	<string name="Normal Lower">
+		Normal unten
+	</string>
+	<string name="Normal Upper">
+		Normal oben
+	</string>
+	<string name="Nose Left">
+		Links
+	</string>
+	<string name="Nose Right">
+		Rechts
+	</string>
+	<string name="Nose Size">
+		Größe
+	</string>
+	<string name="Nose Thickness">
+		Dicke
+	</string>
+	<string name="Nose Tip Angle">
+		Nasenspitze
+	</string>
+	<string name="Nose Tip Shape">
+		Nasenspitze
+	</string>
+	<string name="Nose Width">
+		Nasenbreite
+	</string>
+	<string name="Nostril Division">
+		Teilung
+	</string>
+	<string name="Nostril Width">
+		Größe
+	</string>
+	<string name="Old">
+		Alt
+	</string>
+	<string name="Opaque">
+		Deckend
+	</string>
+	<string name="Open">
+		Öffnen
+	</string>
+	<string name="Open Back">
+		Hinten offen
+	</string>
+	<string name="Open Front">
+		Vorne offen
+	</string>
+	<string name="Open Left">
+		Links offen
+	</string>
+	<string name="Open Right">
+		Rechts offen
+	</string>
+	<string name="Orange">
+		Orange
+	</string>
+	<string name="Out">
+		Aus
+	</string>
+	<string name="Out Shdw Color">
+		Farbe: Oberer Lidschatten
+	</string>
+	<string name="Out Shdw Opacity">
+		Deckkraft: Oberer Lidschatten
+	</string>
+	<string name="Outer Eye Corner">
+		Äußerer Augenwinkel
+	</string>
+	<string name="Outer Eye Shadow">
+		Lidschatten: Oben
+	</string>
+	<string name="Outer Shadow">
+		Lidschatten: Oben
+	</string>
+	<string name="Overbite">
+		Ãœberbiss
+	</string>
+	<string name="Package">
+		Ausbeulung
+	</string>
+	<string name="Painted Nails">
+		Lackierte Nägel
+	</string>
+	<string name="Pale">
+		Blass
+	</string>
+	<string name="Pants Crotch">
+		Schritt
+	</string>
+	<string name="Pants Fit">
+		Passform
+	</string>
+	<string name="Pants Length">
+		Hosenlänge
+	</string>
+	<string name="Pants Waist">
+		Hüfte
+	</string>
+	<string name="Pants Wrinkles">
+		Falten
+	</string>
+	<string name="Part">
+		Scheitel
+	</string>
+	<string name="Part Bangs">
+		Pony scheiteln
+	</string>
+	<string name="Pectorals">
+		Brustmuskel
+	</string>
+	<string name="Pigment">
+		Pigmentierung
+	</string>
+	<string name="Pigtails">
+		Zöpfe
+	</string>
+	<string name="Pink">
+		Pink
+	</string>
+	<string name="Pinker">
+		Mehr Pink
+	</string>
+	<string name="Platform Height">
+		Höhe
+	</string>
+	<string name="Platform Width">
+		Breite
+	</string>
+	<string name="Pointy">
+		Spitz
+	</string>
+	<string name="Pointy Heels">
+		Pfennigabsätze
+	</string>
+	<string name="Pointy Toe">
+		Spitz
+	</string>
+	<string name="Ponytail">
+		Pferdeschwanz
+	</string>
+	<string name="Poofy Skirt">
+		Weit ausgestellt
+	</string>
+	<string name="Pop Left Eye">
+		Linkes Auge größer
+	</string>
+	<string name="Pop Right Eye">
+		Rechtes Auge größer
+	</string>
+	<string name="Puffy">
+		Geschwollen
+	</string>
+	<string name="Puffy Eyelids">
+		Geschwollene Lider
+	</string>
+	<string name="Rainbow Color">
+		Regenbogenfarben
+	</string>
+	<string name="Red Hair">
+		Rote Haare
+	</string>
+	<string name="Red Skin">
+		Rote Haut
+	</string>
+	<string name="Regular">
+		Normal
+	</string>
+	<string name="Regular Muscles">
+		Normal muskulös
+	</string>
+	<string name="Right Part">
+		Scheitel rechts
+	</string>
+	<string name="Rosy Complexion">
+		Rosiger Teint
+	</string>
+	<string name="Round">
+		Rund
+	</string>
+	<string name="Round Forehead">
+		Runde Stirn
+	</string>
+	<string name="Ruddiness">
+		Röte
+	</string>
+	<string name="Ruddy">
+		Rötlich
+	</string>
+	<string name="Rumpled Hair">
+		Zerzauste Haare
+	</string>
+	<string name="Saddle Bags">
+		Hüftspeck
+	</string>
+	<string name="Saddlebags">
+		Hüftspeck
+	</string>
+	<string name="Scrawny">
+		Dürr
+	</string>
+	<string name="Scrawny Leg">
+		Dürres Bein
+	</string>
+	<string name="Separate">
+		Auseinander
+	</string>
+	<string name="Shading">
+		Schattierung
+	</string>
+	<string name="Shadow hair">
+		Schattenhaar
+	</string>
+	<string name="Shallow">
+		Flach
+	</string>
+	<string name="Shear Back">
+		Hinterkopf rasiert
+	</string>
+	<string name="Shear Face">
+		Gesicht verzerren
+	</string>
+	<string name="Shear Front">
+		Vorne rasiert
+	</string>
+	<string name="Shear Left">
+		Links
+	</string>
+	<string name="Shear Left Up">
+		Links
+	</string>
+	<string name="Shear Right">
+		Rechts
+	</string>
+	<string name="Shear Right Up">
+		Rechts
+	</string>
+	<string name="Sheared Back">
+		Hinterkopf rasiert
+	</string>
+	<string name="Sheared Front">
+		Vorne rasiert
+	</string>
+	<string name="Shift Left">
+		Nach links
+	</string>
+	<string name="Shift Mouth">
+		Mund verschieben
+	</string>
+	<string name="Shift Right">
+		Nach rechts
+	</string>
+	<string name="Shirt Bottom">
+		Hemdlänge
+	</string>
+	<string name="Shirt Fit">
+		Passform
+	</string>
+	<string name="Shirt Wrinkles">
+		Falten
+	</string>
+	<string name="Shoe Height">
+		Höhe
+	</string>
+	<string name="Short">
+		Kurz
+	</string>
+	<string name="Short Arms">
+		Kurze Arme
+	</string>
+	<string name="Short Legs">
+		Kurze Beine
+	</string>
+	<string name="Short Neck">
+		Kurzer Hals
+	</string>
+	<string name="Short Pigtails">
+		Kurze Zöpfe
+	</string>
+	<string name="Short Ponytail">
+		Kurzer Pferdeschwanz
+	</string>
+	<string name="Short Sideburns">
+		Kurze Koteletten
+	</string>
+	<string name="Short Torso">
+		Kurzer Oberkörper
+	</string>
+	<string name="Short hips">
+		Kurze Hüften
+	</string>
+	<string name="Shoulders">
+		Schultern
+	</string>
+	<string name="Side Bangs">
+		Seitlicher Pony
+	</string>
+	<string name="Side Bangs Down">
+		Lang
+	</string>
+	<string name="Side Bangs Up">
+		Kurz
+	</string>
+	<string name="Side Fringe">
+		Seitliche Fransen
+	</string>
+	<string name="Sideburns">
+		Koteletten
+	</string>
+	<string name="Sides Hair">
+		Seitliches Haar
+	</string>
+	<string name="Sides Hair Down">
+		Lang
+	</string>
+	<string name="Sides Hair Up">
+		Kurz
+	</string>
+	<string name="Skinny">
+		Dünn
+	</string>
+	<string name="Skinny Neck">
+		Dünner Hals
+	</string>
+	<string name="Skirt Fit">
+		Passform
+	</string>
+	<string name="Skirt Length">
+		Rocklänge
+	</string>
+	<string name="Slanted Forehead">
+		Fliehende Stirn
+	</string>
+	<string name="Sleeve Length">
+		Ärmellänge
+	</string>
+	<string name="Sleeve Looseness">
+		Passform Ärmel
+	</string>
+	<string name="Slit Back">
+		Schlitz: Hinten
+	</string>
+	<string name="Slit Front">
+		Schlitz: Vorne
+	</string>
+	<string name="Slit Left">
+		Schlitz: Links
+	</string>
+	<string name="Slit Right">
+		Schlitz: Rechts
+	</string>
+	<string name="Small">
+		Klein
+	</string>
+	<string name="Small Hands">
+		Kleine Hände
+	</string>
+	<string name="Small Head">
+		Kleiner Kopf
+	</string>
+	<string name="Smooth">
+		Glätten
+	</string>
+	<string name="Smooth Hair">
+		Glattes Haar
+	</string>
+	<string name="Socks Length">
+		Strumpflänge
+	</string>
+	<string name="Some">
+		Etwas
+	</string>
+	<string name="Soulpatch">
+		Unterlippenbart
+	</string>
+	<string name="Sparse">
+		Wenig
+	</string>
+	<string name="Spiked Hair">
+		Stachelhaare
+	</string>
+	<string name="Square">
+		Rechteck
+	</string>
+	<string name="Square Toe">
+		Eckig
+	</string>
+	<string name="Squash Head">
+		Gestaucht
+	</string>
+	<string name="Squash/Stretch Head">
+		Gestretcht/Gestaucht
+	</string>
+	<string name="Stretch Head">
+		Gestreckt
+	</string>
+	<string name="Sunken">
+		Eingefallen
+	</string>
+	<string name="Sunken Chest">
+		Trichterbrust
+	</string>
+	<string name="Sunken Eyes">
+		Eingesunkene Augen
+	</string>
+	<string name="Sweep Back">
+		Nach hinten
+	</string>
+	<string name="Sweep Forward">
+		Nach vorne
+	</string>
+	<string name="Swept Back">
+		Nach hinten
+	</string>
+	<string name="Swept Back Hair">
+		Haar nach hinten
+	</string>
+	<string name="Swept Forward">
+		Haare nach vorne
+	</string>
+	<string name="Swept Forward Hair">
+		Haare nach vorne
+	</string>
+	<string name="Tall">
+		Groß
+	</string>
+	<string name="Taper Back">
+		Ansatzbreite hinten
+	</string>
+	<string name="Taper Front">
+		Ansatzbreite vorne
+	</string>
+	<string name="Thick Heels">
+		Dicke Absätze
+	</string>
+	<string name="Thick Neck">
+		Dicker Hals
+	</string>
+	<string name="Thick Toe">
+		Dick
+	</string>
+	<string name="Thickness">
+		Dicke
+	</string>
+	<string name="Thin">
+		Dünn
+	</string>
+	<string name="Thin Eyebrows">
+		Dünne Augenbrauen
+	</string>
+	<string name="Thin Lips">
+		Dünne Lippen
+	</string>
+	<string name="Thin Nose">
+		Dünne Nase
+	</string>
+	<string name="Tight Chin">
+		Straffes Kinn
+	</string>
+	<string name="Tight Cuffs">
+		Eng
+	</string>
+	<string name="Tight Pants">
+		Enge Hosen
+	</string>
+	<string name="Tight Shirt">
+		Enges Hemd
+	</string>
+	<string name="Tight Skirt">
+		Enger Rock
+	</string>
+	<string name="Tight Sleeves">
+		Enge Ärmel
+	</string>
+	<string name="Tilt Left">
+		Nach links
+	</string>
+	<string name="Tilt Right">
+		Nach rechts
+	</string>
+	<string name="Toe Shape">
+		Spitze
+	</string>
+	<string name="Toe Thickness">
+		Dicke
+	</string>
+	<string name="Torso Length">
+		Länge des Oberkörpers
+	</string>
+	<string name="Torso Muscles">
+		Muskeln
+	</string>
+	<string name="Torso Scrawny">
+		Dürr
+	</string>
+	<string name="Unattached">
+		Frei
+	</string>
+	<string name="Uncreased">
+		Straffes Lid
+	</string>
+	<string name="Underbite">
+		Unterbiss
+	</string>
+	<string name="Unnatural">
+		Unnatürlich
+	</string>
+	<string name="Upper Bridge">
+		Brücke, oberer Teil
+	</string>
+	<string name="Upper Cheeks">
+		Obere Wangen
+	</string>
+	<string name="Upper Chin Cleft">
+		Obere Kinnspalte
+	</string>
+	<string name="Upper Eyelid Fold">
+		Obere Lidfalte
+	</string>
+	<string name="Upturned">
+		Stupsnase
+	</string>
+	<string name="Very Red">
+		Sehr rot
+	</string>
+	<string name="Waist Height">
+		Bund
+	</string>
+	<string name="Well-Fed">
+		Gut genährt
+	</string>
+	<string name="White Hair">
+		Weiße Haare
+	</string>
+	<string name="Wide">
+		Breit
+	</string>
+	<string name="Wide Back">
+		Breit
+	</string>
+	<string name="Wide Front">
+		Breit
+	</string>
+	<string name="Wide Lips">
+		Breit
+	</string>
+	<string name="Wild">
+		Wild
+	</string>
+	<string name="Wrinkles">
+		Falten
+	</string>
+	<string name="LocationCtrlAddLandmarkTooltip">
+		Zu meinen Landmarken hinzufügen
+	</string>
+	<string name="LocationCtrlEditLandmarkTooltip">
+		Meine Landmarken bearbeiten
+	</string>
+	<string name="UpdaterWindowTitle">
+		[APP_NAME] Aktualisierung
+	</string>
+	<string name="UpdaterNowUpdating">
+		[APP_NAME] wird aktualisiert...
+	</string>
+	<string name="UpdaterNowInstalling">
+		[APP_NAME] wird installiert...
+	</string>
+	<string name="UpdaterUpdatingDescriptive">
+		Ihr [APP_NAME]-Viewer wird aktualisiert.  Dies kann einen Moment dauern. Wir bitten um Ihr Verständnis.
+	</string>
+	<string name="UpdaterProgressBarTextWithEllipses">
+		Aktualisierung wird heruntergeladen...
+	</string>
+	<string name="UpdaterProgressBarText">
+		Aktualisierung wird heruntergeladen
+	</string>
+	<string name="UpdaterFailDownloadTitle">
+		Herunterladen ist fehlgeschlagen
+	</string>
+	<string name="UpdaterFailUpdateDescriptive">
+		Beim Aktualisieren von [APP_NAME] ist ein Fehler aufgetreten. Bitte laden Sie die aktuellste Version von www.secondlife.com herunter.
+	</string>
+	<string name="UpdaterFailInstallTitle">
+		Aktualisierung konnte nicht installiert werden
+	</string>
+	<string name="UpdaterFailStartTitle">
+		Viewer konnte nicht gestartet werden
+	</string>
+	<string name="only_user_message">
+		Sie sind der einzige Benutzer in dieser Sitzung.
+	</string>
+	<string name="offline_message">
+		[FIRST] [LAST] ist offline.
+	</string>
+	<string name="invite_message">
+		Klicken Sie auf [BUTTON NAME], um eine Verbindung zu diesem Voice-Chat herzustellen.
+	</string>
+	<string name="generic_request_error">
+		Fehler bei Anfrage, bitte versuchen Sie es später.
+	</string>
+	<string name="insufficient_perms_error">
+		Sie sind dazu nicht berechtigt.
+	</string>
+	<string name="session_does_not_exist_error">
+		Die Sitzung ist abgelaufen
+	</string>
+	<string name="no_ability_error">
+		Sie besitzen diese Fähigkeit nicht.
+	</string>
+	<string name="no_ability">
+		Sie besitzen diese Fähigkeit nicht.
+	</string>
+	<string name="not_a_mod_error">
+		Sie sind kein Sitzungsmoderator.
+	</string>
+	<string name="muted_error">
+		Ein Gruppenmoderator hat Ihren Text-Chat deaktiviert.
+	</string>
+	<string name="add_session_event">
+		Es konnten keine Benutzer zur Chat-Sitzung mit [RECIPIENT] hinzugefügt werden.
+	</string>
+	<string name="message_session_event">
+		Ihre Nachricht konnte nicht an die Chat-Sitzung mit [RECIPIENT] gesendet werden.
+	</string>
+	<string name="removed_from_group">
+		Sie wurden von der Gruppe ausgeschlossen.
+	</string>
+	<string name="close_on_no_ability">
+		Sie haben nicht mehr die Berechtigung an der Chat-Sitzung teilzunehmen.
+	</string>
+</strings>
diff --git a/indra/newview/skins/default/xui/de/teleport_strings.xml b/indra/newview/skins/default/xui/de/teleport_strings.xml
index 31f92dc920b..231798c6a6f 100644
--- a/indra/newview/skins/default/xui/de/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/de/teleport_strings.xml
@@ -1,78 +1,78 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<teleport_messages name="">
-	<message_set name="errors">
-		<message name="invalid_tport">
-			Bei der Bearbeitung Ihrer Teleport-Anfrage ist ein Problem aufgetreten. Sie müssen sich zum Teleportieren eventuell neu anmelden. Wenn Sie diese Nachricht weiterhin erhalten, konsultieren Sie bitte die Tech-Support-FAQ unter:
-www.secondlife.com/support
-		</message>
-		<message name="invalid_region_handoff">
-			Bei der Bearbeitung Ihres Regionswechsels ist ein Problem aufgetreten. Sie müssen sich zum Wechsel der Region eventuell neu anmelden. Wenn Sie diese Nachricht weiterhin erhalten, konsultieren Sie bitte die Tech-Support-FAQ unter:
-www.secondlife.com/support
-		</message>
-		<message name="blocked_tport">
-			Teleportieren ist zurzeit leider nicht möglich. Versuchen Sie es später noch einmal.
-Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab und wieder an.
-		</message>
-		<message name="nolandmark_tport">
-			Das System konnte das Landmarken-Ziel nicht finden.
-		</message>
-		<message name="timeout_tport">
-			Das System konnte keine Teleport-Verbindung herstellen.
-Versuchen Sie es später noch einmal.
-		</message>
-		<message name="noaccess_tport">
-			Sie haben leider keinen Zugang zu diesem Teleport-Ziel.
-		</message>
-		<message name="missing_attach_tport">
-			Ihre Anhänge sind noch nicht eingetroffen. Warten Sie kurz oder melden Sie sich ab und wieder an, bevor Sie einen neuen Teleport-Versuch unternehmen.
-		</message>
-		<message name="too_many_uploads_tport">
-			Die Asset-Warteschlange in dieser Region ist zurzeit überlastet.
-Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in einigen Minuten erneut oder besuchen Sie eine weniger überfüllte Region.
-		</message>
-		<message name="expired_tport">
-			Das System konnte Ihre Teleport-Anfrage nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
-		</message>
-		<message name="expired_region_handoff">
-			Das System konnte Ihre Anfrage zum Regionswechsel nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
-		</message>
-		<message name="no_host">
-			Teleport-Ziel wurde nicht gefunden. Das Ziel ist entweder im Moment nicht verfügbar oder existiert nicht mehr. Versuchen Sie es in einigen Minuten erneut.
-		</message>
-		<message name="no_inventory_host">
-			Das Inventarsystem ist zurzeit nicht verfügbar.
-		</message>
-	</message_set>
-	<message_set name="progress">
-		<message name="sending_dest">
-			Transport zum Ziel.
-		</message>
-		<message name="redirecting">
-			Weiterleitung an anderes Ziel.
-		</message>
-		<message name="relaying">
-			Weiterleitung zum Ziel.
-		</message>
-		<message name="sending_home">
-			Zuhause-Position wird ermittelt.
-		</message>
-		<message name="sending_landmark">
-			Landmarken-Position wird ermittelt.
-		</message>
-		<message name="completing">
-			Teleport wird abgeschlossen.
-		</message>
-		<message name="resolving">
-			Ziel wird ermittelt.
-		</message>
-		<message name="contacting">
-			Verbindung zu neuer Region.
-		</message>
-		<message name="arriving">
-			Ziel erreicht...
-		</message>
-		<message name="requesting">
-			Teleport wird initialisiert...
-		</message>
-	</message_set>
-</teleport_messages>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<teleport_messages name="">
+	<message_set name="errors">
+		<message name="invalid_tport">
+			Bei der Bearbeitung Ihrer Teleport-Anfrage ist ein Problem aufgetreten. Sie müssen sich zum Teleportieren eventuell neu anmelden.
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+		</message>
+		<message name="invalid_region_handoff">
+			Bei der Bearbeitung Ihres Regionswechsels ist ein Problem aufgetreten. Sie müssen eventuell neu anmelden, um die Region wechseln zu können.
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+		</message>
+		<message name="blocked_tport">
+			Teleportieren ist zurzeit leider nicht möglich. Versuchen Sie es später noch einmal.
+Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab und wieder an.
+		</message>
+		<message name="nolandmark_tport">
+			Das System konnte das Landmarken-Ziel nicht finden.
+		</message>
+		<message name="timeout_tport">
+			Das System konnte keine Teleport-Verbindung herstellen.
+Versuchen Sie es später noch einmal.
+		</message>
+		<message name="noaccess_tport">
+			Sie haben leider keinen Zugang zu diesem Teleport-Ziel.
+		</message>
+		<message name="missing_attach_tport">
+			Ihre Anhänge sind noch nicht eingetroffen. Warten Sie kurz oder melden Sie sich ab und wieder an, bevor Sie einen neuen Teleport-Versuch unternehmen.
+		</message>
+		<message name="too_many_uploads_tport">
+			Die Asset-Warteschlange in dieser Region ist zurzeit überlastet.
+Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in einigen Minuten erneut oder besuchen Sie eine weniger überfüllte Region.
+		</message>
+		<message name="expired_tport">
+			Das System konnte Ihre Teleport-Anfrage nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
+		</message>
+		<message name="expired_region_handoff">
+			Das System konnte Ihre Anfrage zum Regionswechsel nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
+		</message>
+		<message name="no_host">
+			Teleport-Ziel wurde nicht gefunden. Das Ziel ist entweder im Moment nicht verfügbar oder existiert nicht mehr. Versuchen Sie es in einigen Minuten erneut.
+		</message>
+		<message name="no_inventory_host">
+			Das Inventarsystem ist zurzeit nicht verfügbar.
+		</message>
+	</message_set>
+	<message_set name="progress">
+		<message name="sending_dest">
+			Transport zum Ziel.
+		</message>
+		<message name="redirecting">
+			Weiterleitung an anderes Ziel.
+		</message>
+		<message name="relaying">
+			Weiterleitung zum Ziel.
+		</message>
+		<message name="sending_home">
+			Zuhause-Position wird ermittelt.
+		</message>
+		<message name="sending_landmark">
+			Landmarken-Position wird ermittelt.
+		</message>
+		<message name="completing">
+			Teleport wird abgeschlossen.
+		</message>
+		<message name="resolving">
+			Ziel wird ermittelt.
+		</message>
+		<message name="contacting">
+			Verbindung zu neuer Region.
+		</message>
+		<message name="arriving">
+			Ziel erreicht...
+		</message>
+		<message name="requesting">
+			Teleport wird initialisiert...
+		</message>
+	</message_set>
+</teleport_messages>
diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml
index 53e48352f10..8cd1ec4e09a 100644
--- a/indra/newview/skins/default/xui/fr/floater_about.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about.xml
@@ -1,43 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="A PROPOS DE [APP_NAME]">
-<tab_container name="about_tab">
-	<panel name="credits_panel">
-	<text_editor name="credits_editor">
-		Second Life existe grâce aux efforts de Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl et de nombreuses autres personnes.
-
-  Tous nos remerciements aux résidents suivants pour avoir testé cette version (la meilleure qui soit jusqu&apos;à présent) :  able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
-
-
-
-  Pour réussir dans les affaires, soyez audacieux, créatif et différent. - Henry Marchant
-	</text_editor>
-	</panel>
-	<panel name="licenses_panel">
-	<text_editor name="credits_editor">
-  3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
-  APR Copyright (C) 2000-2004 The Apache Software Foundation
-  cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
-  expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
-  FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
-  GL Copyright (C) 1999-2004 Brian Paul.
-  Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
-  jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
-  jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
-  ogg/vorbis Copyright (C) 2001, Xiphophorus
-  OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
-  SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
-  SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
-  xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-  zlib Copyright (C) 1995-2002 Jean-loup Gailly et Mark Adler.
-  google-perftools Copyright (c) 2005, Google Inc.
-  
-  Tous droits réservés.  Voir licenses.txt pour plus de détails.
-
-  Codage Audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
-	</text_editor>
-	</panel>
-</tab_container>
-	<string name="you_are_at">
-		Votre position : [POSITION]
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="A PROPOS DE [APP_NAME]">
+	<tab_container name="about_tab">
+		<panel label="Remerciements" name="credits_panel">
+			<text_editor name="credits_editor">
+				Second Life existe grâce aux efforts de Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl et de nombreuses autres personnes.
+
+  Tous nos remerciements aux résidents suivants pour avoir testé cette version (la meilleure qui soit jusqu&apos;à présent) :  able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
+
+
+
+  Pour réussir dans les affaires, soyez audacieux, créatif et différent. - Henry Marchant
+			</text_editor>
+		</panel>
+		<panel label="Licences" name="licenses_panel">
+			<text_editor name="credits_editor">
+				3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
+  APR Copyright (C) 2000-2004 The Apache Software Foundation
+  cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+  expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+  FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+  GL Copyright (C) 1999-2004 Brian Paul.
+  Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
+  jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
+  jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
+  ogg/vorbis Copyright (C) 2001, Xiphophorus
+  OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
+  SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
+  SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+  xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
+  zlib Copyright (C) 1995-2002 Jean-loup Gailly et Mark Adler.
+  google-perftools Copyright (c) 2005, Google Inc.
+  
+  Tous droits réservés.  Voir licenses.txt pour plus de détails.
+
+  Codage Audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+			</text_editor>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml
index 0729c79cbb8..d1aea074e6a 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -1,501 +1,480 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="À PROPOS DU TERRAIN">
-	<tab_container name="landtab">
-		<panel label="Général" name="land_general_panel">
-			<text name="Name:">
-				Nom :
-			</text>
-			<line_editor name="Name"/>
-			<text name="Description:">
-				Description :
-			</text>
-			<text_editor name="Description"/>
-			<text name="LandType">
-				Type :
-			</text>
-			<text name="LandTypeText">
-				Continent / Homestead
-			</text>
-			<text name="ContentRating">
-				Catégorie :
-			</text>
-			<text name="ContentRatingText">
-				Adult
-			</text>
-			<text name="Owner:">
-				Propriétaire :
-			</text>
-			<text name="OwnerText">
-				Leyla Linden
-			</text>
-			<button label="Profil..." label_selected="Profil..." name="Profile..."/>
-			<text name="Group:">
-				Groupe :
-			</text>
-			<text name="GroupText"/>
-			<button label="Définir..." label_selected="Définir..." name="Set..."/>
-			<check_box label="Autoriser la cession au groupe" name="check deed" tool_tip="Un officier peut céder ce terrain au groupe. Il viendra alors s&apos;ajouter au patrimoine du groupe."/>
-			<button label="Céder..." label_selected="Céder..." name="Deed..." tool_tip="Vous ne pouvez céder le terrain que si vous avez un rôle d&apos;officier dans le groupe sélectionné."/>
-			<check_box label="Le propriétaire contribue en cédant du terrain" name="check contrib" tool_tip="Lorsqu&apos;un terrain est cédé au groupe, l&apos;ancien propriétaire fait également un don de terrain suffisant."/>
-			<text name="For Sale:">
-				À vendre :
-			</text>
-			<text name="Not for sale.">
-				Pas à vendre
-			</text>
-			<text name="For Sale: Price L$[PRICE].">
-				Prix : [PRICE] L$ ([PRICE_PER_SQM] L$/m²).
-			</text>
-			<text name="SalePending"/>
-			<button label="Vendre le terrain..." label_selected="Vendre le terrain..." name="Sell Land..."/>
-			<text name="For sale to">
-				À vendre à : [BUYER]
-			</text>
-			<text name="Sell with landowners objects in parcel.">
-				Objets inclus dans la vente.
-			</text>
-			<text name="Selling with no objects in parcel.">
-				Objets non inclus dans la vente.
-			</text>
-			<button label="Annuler la vente du terrain" label_selected="Annuler la vente du terrain" left="275" name="Cancel Land Sale" width="165"/>
-			<text name="Claimed:">
-				Acquis :
-			</text>
-			<text name="DateClaimText">
-				Tue Aug 15 13:47:25 2006
-			</text>
-			<text name="PriceLabel">
-				Superficie :
-			</text>
-			<text name="PriceText">
-				4048 m²
-			</text>
-			<text name="Traffic:">
-				Trafic :
-			</text>
-			<text name="DwellText">
-				0
-			</text>
-			<button label="Acheter le terrain..." label_selected="Acheter le terrain..." left="130" name="Buy Land..." width="125"/>
-			<button label="Acheter pour le groupe..." label_selected="Acheter pour le groupe..." name="Buy For Group..."/>
-			<button label="Acheter un pass..." label_selected="Acheter un pass..." left="130" name="Buy Pass..." tool_tip="Un pass vous donne un accès temporaire à ce terrain." width="125"/>
-			<button label="Abandonner le terrain..." label_selected="Abandonner le terrain..." name="Abandon Land..."/>
-			<button label="Redemander le terrain..." label_selected="Redemander le terrain…" name="Reclaim Land..."/>
-			<button label="Vente Linden..." label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit être la propriété d&apos;un résident, avoir un contenu défini et ne pas être aux enchères."/>
-			<panel.string name="new users only">
-				Nouveaux utilisateurs uniquement
-			</panel.string>
-			<panel.string name="anyone">
-				Tout le monde
-			</panel.string>
-			<panel.string name="area_text">
-				Surface
-			</panel.string>
-			<panel.string name="area_size_text">
-				[AREA] m²
-			</panel.string>
-			<panel.string name="auction_id_text">
-				Code de l&apos;enchère : [ID]
-			</panel.string>
-			<panel.string name="need_tier_to_modify">
-				Pour modifier ce terrain, vous devez approuver votre achat.
-			</panel.string>
-			<panel.string name="group_owned_text">
-				(propriété du groupe)
-			</panel.string>
-			<panel.string name="profile_text">
-				Profil...
-			</panel.string>
-			<panel.string name="info_text">
-				Infos...
-			</panel.string>
-			<panel.string name="public_text">
-				(public)
-			</panel.string>
-			<panel.string name="none_text">
-				(aucun)
-			</panel.string>
-			<panel.string name="sale_pending_text">
-				(vente en cours)
-			</panel.string>
-			<panel.string name="no_selection_text">
-				Aucune parcelle sélectionnée.
-Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre parcelle pour en afficher les détails.
-			</panel.string>
-		</panel>
-		<panel label="Règlement" name="land_covenant_panel">
-			<text name="estate_section_lbl">
-				Domaine :
-			</text>
-			<text name="estate_name_lbl">
-				Nom :
-			</text>
-			<text name="estate_name_text">
-				continent
-			</text>
-			<text name="estate_owner_lbl">
-				Propriétaire :
-			</text>
-			<text name="estate_owner_text">
-				(aucun)
-			</text>
-			<text_editor name="covenant_editor">
-				Il n&apos;y a aucun règlement pour ce domaine.
-			</text_editor>
-			<text name="covenant_timestamp_text">
-				Last Modified Wed Dec 31 16:00:00 1969
-			</text>
-			<text name="region_section_lbl">
-				Région :
-			</text>
-			<text name="region_name_lbl">
-				Nom :
-			</text>
-			<text name="region_name_text">
-				leyla
-			</text>
-			<text name="region_landtype_lbl">
-				Type :
-			</text>
-			<text name="region_landtype_text">
-				Continent / Homestead
-			</text>
-			<text name="region_maturity_lbl">
-				Catégorie :
-			</text>
-			<text name="region_maturity_text">
-				Adult
-			</text>
-			<text name="resellable_lbl">
-				Revendre :
-			</text>
-			<text name="resellable_clause">
-				Le terrain dans cette région ne peut être revendu.
-			</text>
-			<text name="changeable_lbl">
-				Sous-diviser :
-			</text>
-			<text name="changeable_clause">
-				Le terrain dans cette région ne peut être fusionné/divisé.
-			</text>
-			<panel.string name="can_resell">
-				Le terrain acheté dans cette région peut être revendu.
-			</panel.string>
-			<panel.string name="can_not_resell">
-				Le terrain acheté dans cette région ne peut pas être revendu.
-			</panel.string>
-			<panel.string name="can_change">
-				Le terrain acheté dans cette région peut être fusionné
-ou divisé.
-			</panel.string>
-			<panel.string name="can_not_change">
-				Le terrain acheté dans cette région ne peut pas être fusionné
-ou divisé.
-			</panel.string>
-		</panel>
-		<panel label="Objets" name="land_objects_panel">
-			<text name="parcel_object_bonus">
-				Facteur Bonus Objets : [BONUS]
-			</text>
-			<text name="Simulator primitive usage:">
-				Prims utilisées sur la parcelle :
-			</text>
-			<text left="214" name="objects_available" width="230">
-				[COUNT] sur [MAX] ([AVAILABLE] disponibles)
-			</text>
-			<panel.string name="objects_available_text">
-				[COUNT] sur [MAX] ([AVAILABLE] disponibles)
-			</panel.string>
-			<panel.string name="objects_deleted_text">
-				[COUNT] sur [MAX] ([DELETED] seront supprimés)
-			</panel.string>
-			<text name="Primitives parcel supports:" width="200">
-				Prims max. sur la parcelle :
-			</text>
-			<text left="214" name="object_contrib_text" width="152">
-				[COUNT]
-			</text>
-			<text name="Primitives on parcel:">
-				Prims sur la parcelle :
-			</text>
-			<text left="214" name="total_objects_text" width="48">
-				[COUNT]
-			</text>
-			<text left="14" name="Owned by parcel owner:" width="180">
-				Appartenant au propriétaire :
-			</text>
-			<text left="214" name="owner_objects_text" width="48">
-				[COUNT]
-			</text>
-			<button label="Afficher" label_selected="Afficher" name="ShowOwner" right="-135" width="60"/>
-			<button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOwner..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
-			<text left="14" name="Set to group:" width="180">
-				Données au groupe :
-			</text>
-			<text left="214" name="group_objects_text" width="48">
-				[COUNT]
-			</text>
-			<button label="Afficher" label_selected="Afficher" name="ShowGroup" right="-135" width="60"/>
-			<button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnGroup..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
-			<text left="14" name="Owned by others:" width="128">
-				Appartenant à d&apos;autres :
-			</text>
-			<text left="214" name="other_objects_text" width="48">
-				[COUNT]
-			</text>
-			<button label="Afficher" label_selected="Afficher" name="ShowOther" right="-135" width="60"/>
-			<button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOther..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
-			<text left="14" name="Selected / sat upon:" width="193">
-				Sélectionnées/où quelqu&apos;un est assis :
-			</text>
-			<text left="214" name="selected_objects_text" width="48">
-				[COUNT]
-			</text>
-			<text left="4" name="Autoreturn" width="412">
-				Renvoi automatique des objets des autres résidents (min., 0 pour désactiver) :
-			</text>
-			<line_editor name="clean other time" right="-6" width="36"/>
-			<text name="Object Owners:">
-				Propriétaires :
-			</text>
-			<button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh List"/>
-			<button label="Renvoyer les objets..." label_selected="Renvoyer les objets..." name="Return objects..."/>
-			<name_list label="Plus récents" name="owner list">
-				<column label="Type" name="type"/>
-				<column name="online_status"/>
-				<column label="Nom" name="name"/>
-				<column label="Nombre" name="count"/>
-				<column label="Plus récents" name="mostrecent"/>
-			</name_list>
-		</panel>
-		<panel label="Options" name="land_options_panel">
-			<text name="allow_label">
-				Autoriser les autres résidents à :
-			</text>
-			<check_box label="Modifier le terrain" name="edit land check" tool_tip="Si cette option est cochée, n&apos;importe qui peut terraformer votre terrain. Il vaut mieux ne pas cocher cette option pour toujours pouvoir modifer votre propre terrain."/>
-			<check_box label="Créer des repères" name="check landmark"/>
-			<check_box label="Voler" name="check fly" tool_tip="Si cette option est cochée, les résidents peuvent voler sur votre terrain. Si elle n&apos;est pas cochée, ils ne pourront voler que lorsqu&apos;ils arrivent et passent au dessus de votre terrain."/>
-			<text left="152" name="allow_label2">
-				Créer des objets :
-			</text>
-			<check_box label="Tous les résidents" left="285" name="edit objects check"/>
-			<check_box label="Groupe" left="395" name="edit group objects check"/>
-			<text left="152" name="allow_label3" width="134">
-				Laisser entrer des objets :
-			</text>
-			<check_box label="Tous les résidents" left="285" name="all object entry check"/>
-			<check_box label="Groupe" left="395" name="group object entry check"/>
-			<text left="152" name="allow_label4">
-				Exécuter des scripts :
-			</text>
-			<check_box label="Tous les résidents" left="285" name="check other scripts"/>
-			<check_box label="Groupe" left="395" name="check group scripts"/>
-			<text name="land_options_label">
-				Options du terrain :
-			</text>
-			<check_box label="Sécurisé (pas de dégâts)" name="check safe" tool_tip="Si cette option est cochée, le terrain est sécurisé et il n&apos;y pas de risques de dommages causés par des combats. Si elle est décochée, des dommages causés par les combats peuvent avoir lieu."/>
-			<check_box bottom="-140" label="Pas de bousculades" left="14" name="PushRestrictCheck" tool_tip="Empêche l&apos;utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/>
-			<check_box bottom="-160" label="Afficher dans la recherche (30 L$/semaine) sous" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/>
-			<panel.string name="search_enabled_tooltip">
-				Permettre aux autres résidents de voir cette parcelle dans les résultats de recherche
-			</panel.string>
-			<panel.string name="search_disabled_small_tooltip">
-				Cette option est désactivée car la superficie de cette parcelle est inférieure ou égale à 128 m².
-Seules les parcelles de grande taille peuvent apparaître dans la recherche.
-			</panel.string>
-			<panel.string name="search_disabled_permissions_tooltip">
-				Cette option est désactivée car vous ne pouvez pas modifier les options de cette parcelle.
-			</panel.string>
-			<combo_box bottom="-160" left="286" name="land category with adult" width="146">
-				<combo_box.item name="item0" label="Toutes catégories"
-				/>
-				<combo_box.item name="item1" label="Appartenant aux Lindens"
-				/>
-				<combo_box.item name="item2" label="Adult"
-				/>
-				<combo_box.item name="item3" label="Art et Culture"
-				/>
-				<combo_box.item name="item4" label="Affaires"
-				/>
-				<combo_box.item name="item5" label="Éducation"
-				/>
-				<combo_box.item name="item6" label="Jeux"
-				/>
-				<combo_box.item name="item7" label="Favoris"
-				/>
-				<combo_box.item name="item8" label="Accueil pour les nouveaux"
-				/>
-				<combo_box.item name="item9" label="Parcs et Nature"
-				/>
-				<combo_box.item name="item10" label="Résidentiel"
-				/>
-				<combo_box.item name="item11" label="Shopping"
-				/>
-				<combo_box.item name="item12" label="Autre"
-				/>
-			</combo_box>
-			<combo_box bottom="-160" left="286" name="land category" width="146">
-				<combo_box.item name="item0" label="Toutes catégories"
-				/>
-				<combo_box.item name="item1" label="Appartenant aux Lindens"
-				/>
-				<combo_box.item name="item3" label="Art et Culture"
-				/>
-				<combo_box.item name="item4" label="Affaires"
-				/>
-				<combo_box.item name="item5" label="Éducation"
-				/>
-				<combo_box.item name="item6" label="Jeux"
-				/>
-				<combo_box.item name="item7" label="Favoris"
-				/>
-				<combo_box.item name="item8" label="Accueil pour les nouveaux"
-				/>
-				<combo_box.item name="item9" label="Parcs et Nature"
-				/>
-				<combo_box.item name="item10" label="Résidentiel"
-				/>
-				<combo_box.item name="item11" label="Shopping"
-				/>
-				<combo_box.item name="item12" label="Autre"
-				/>
-			</combo_box>
-			<button bottom="-160" label="?" label_selected="?" left="436" name="?"/>
-			<check_box bottom="-180" label="Contenu Mature" name="MatureCheck" tool_tip=""/>
-			<panel.string name="mature_check_mature">
-				Contenu Mature
-			</panel.string>
-			<panel.string name="mature_check_adult">
-				Contenu Adult
-			</panel.string>
-			<panel.string name="mature_check_mature_tooltip">
-				Les informations ou contenu de votre parcelle sont classés Mature.
-			</panel.string>
-			<panel.string name="mature_check_adult_tooltip">
-				Les informations ou contenu de votre parcelle sont classés Adult.
-			</panel.string>
-			<text bottom="-200" name="Snapshot:">
-				Photo :
-			</text>
-			<texture_picker bottom="-319" label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/>
-			<text bottom="-323" name="landing_point">
-				Lieu d&apos;arrivée : [LANDING]
-			</text>
-			<panel.string name="landing_point_none">
-				(aucun)
-			</panel.string>
-			<button bottom="-323" label="Définir" label_selected="Définir" name="Set" tool_tip="Définit le point d&apos;arrivée des visiteurs. Définit l&apos;emplacement de votre avatar sur ce terrain."/>
-			<button bottom="-323" label="Annuler" label_selected="Annuler" name="Clear" tool_tip="Libérer le lieu d&apos;arrivée."/>
-			<text bottom="-343" name="Teleport Routing: ">
-				Règles de téléportation :
-			</text>
-			<combo_box bottom="-343" left="140" name="landing type" tool_tip="Vous permet de paramétrer les téléportations sur votre terrain." width="140">
-				<combo_box.item name="Blocked" label="Bloqué"
-				/>
-				<combo_box.item name="LandingPoint" label="Lieu d&apos;arrivée fixe"
-				/>
-				<combo_box.item name="Anywhere" label="Lieu d&apos;arrivée libre"
-				/>
-			</combo_box>
-			<panel.string name="push_restrict_text">
-				Pas de bousculades
-			</panel.string>
-			<panel.string name="push_restrict_region_text">
-				Pas de bousculades (les règles de la région priment)
-			</panel.string>
-		</panel>
-		<panel label="Médias" name="land_media_panel">
-			<text name="with media:" width="85">
-				Type de média :
-			</text>
-			<combo_box left="97" name="media type" tool_tip="Indiquez s&apos;il s&apos;agit de l&apos;URL d&apos;un film, d&apos;une page web ou autre"/>
-			<text name="mime_type"/>
-			<text name="at URL:" width="85">
-				URL du média :
-			</text>
-			<line_editor left="97" name="media_url"/>
-			<button label="Définir..." label_selected="Définir..." name="set_media_url"/>
-			<text name="Description:">
-				Description :
-			</text>
-			<line_editor left="97" name="url_description" tool_tip="Texte affiché à côté du bouton Jouer/Charger"/>
-			<text name="Media texture:">
-				Remplacer
-la texture :
-			</text>
-			<texture_picker label="" left="97" name="media texture" tool_tip="Cliquez pour sélectionner une image"/>
-			<text name="replace_texture_help">
-				(Les objets avec cette texture affichent le film ou 
-la page web quand vous cliquez sur la flèche Jouer.)
-			</text>
-			<text name="Options:">
-				Options
-média :
-			</text>
-			<check_box label="Échelle automatique" left="97" name="media_auto_scale" tool_tip="Si vous sélectionnez cette option, le contenu de cette parcelle sera automatiquement mis à l&apos;échelle. La qualité visuelle sera peut-être amoindrie mais vous n&apos;aurez à faire aucune autre mise à l&apos;échelle ou alignement."/>
-			<check_box label="Média en boucle" name="media_loop" tool_tip="Jouer le média en boucle. Lorsque le média aura fini de jouer, il recommencera."/>
-			<check_box label="Masquer l&apos;URL du média" left="97" name="hide_media_url" tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l&apos;URL du média. Cette option n&apos;est pas disponible pour les fichiers HTML."/>
-			<check_box label="Masquer l&apos;URL de la musique" name="hide_music_url" tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l&apos;URL de la musique."/>
-			<text left="102" name="media_size" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut." width="105">
-				Taille du média :
-			</text>
-			<spinner left_delta="89" name="media_size_width" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."/>
-			<spinner name="media_size_height" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."/>
-			<text name="pixels">
-				pixels
-			</text>
-			<text bottom_delta="-28" name="MusicURL:">
-				URL de la
-musique :
-			</text>
-			<line_editor bottom_delta="-12" left="97" name="music_url"/>
-			<text name="Sound:">
-				Son :
-			</text>
-			<check_box label="Limiter les gestes et sons d&apos;objet à cette parcelle" left="97" name="check sound local"/>
-			<button label="?" label_selected="?" left="378" name="?"/>
-			<text name="Voice settings:">
-				Voix :
-			</text>
-			<check_box label="Activer le chat vocal" left="97" name="parcel_enable_voice_channel"/>
-			<check_box label="Activer le chat vocal (contrôlé par le domaine)" left="97" name="parcel_enable_voice_channel_is_estate_disabled"/>
-			<check_box label="Limiter le chat vocal à cette parcelle" left="117" name="parcel_enable_voice_channel_parcel"/>
-		</panel>
-		<panel label="Accès" name="land_access_panel">
-			<text name="Limit access to this parcel to:">
-				Accès à cette parcelle
-			</text>
-			<check_box label="Autoriser l&apos;accès public" name="public_access"/>
-			<text name="Only Allow">
-				Bloquer l&apos;accès aux résidents :
-			</text>
-			<check_box label="Qui n&apos;ont pas fourni leurs informations de paiement à Linden Lab" name="limit_payment" tool_tip="Aux résidents non identifés"/>
-			<check_box label="Dont l&apos;âge n&apos;a pas été vérifié" name="limit_age_verified" tool_tip="Aux résidents dont l&apos;âge n&apos;a pas été vérifié. Pour plus d&apos;infos, consultez la page support.secondlife.com."/>
-			<panel.string name="estate_override">
-				Au moins une de ces options est définie au niveau du domaine.
-			</panel.string>
-			<check_box label="Autoriser l&apos;accès au groupe : [GROUP]" name="GroupCheck" tool_tip="Définir le groupe à l&apos;onglet Général."/>
-			<check_box label="Vendre des pass à :" name="PassCheck" tool_tip="Autoriser un accès temporaire à cette parcelle"/>
-			<combo_box name="pass_combo">
-				<combo_box.item name="Anyone" label="Tout le monde"
-				/>
-				<combo_box.item name="Group" label="Groupe"
-				/>
-			</combo_box>
-			<spinner label="Prix en L$ :" name="PriceSpin"/>
-			<spinner label="Durée en heures :" name="HoursSpin"/>
-			<text label="Toujours autoriser" name="AllowedText">
-				Résidents autorisés
-			</text>
-			<name_list name="AccessList" tool_tip="([LISTED] listés, [MAX] max)"/>
-			<button label="Ajouter..." label_selected="Ajouter..." name="add_allowed"/>
-			<button label="Supprimer" label_selected="Supprimer" name="remove_allowed"/>
-			<text label="Bannir" name="BanCheck">
-				Résidents bannis
-			</text>
-			<name_list name="BannedList" tool_tip="([LISTED] listés, [MAX] max)"/>
-			<button label="Ajouter..." label_selected="Ajouter..." name="add_banned"/>
-			<button label="Supprimer" label_selected="Supprimer" name="remove_banned"/>
-		</panel>
-	</tab_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterland" title="À PROPOS DU TERRAIN">
+	<floater.string name="Minutes">
+		[MINUTES] minutes
+	</floater.string>
+	<floater.string name="Minute">
+		minute
+	</floater.string>
+	<floater.string name="Seconds">
+		[SECONDS] secondes
+	</floater.string>
+	<tab_container name="landtab">
+		<panel label="Général" name="land_general_panel">
+			<panel.string name="new users only">
+				Nouveaux utilisateurs uniquement
+			</panel.string>
+			<panel.string name="anyone">
+				Tout le monde
+			</panel.string>
+			<panel.string name="area_text">
+				Surface
+			</panel.string>
+			<panel.string name="area_size_text">
+				[AREA] m²
+			</panel.string>
+			<panel.string name="auction_id_text">
+				Code de l&apos;enchère : [ID]
+			</panel.string>
+			<panel.string name="need_tier_to_modify">
+				Pour modifier ce terrain, vous devez approuver votre achat.
+			</panel.string>
+			<panel.string name="group_owned_text">
+				(propriété du groupe)
+			</panel.string>
+			<panel.string name="profile_text">
+				Profil...
+			</panel.string>
+			<panel.string name="info_text">
+				Infos...
+			</panel.string>
+			<panel.string name="public_text">
+				(public)
+			</panel.string>
+			<panel.string name="none_text">
+				(aucun)
+			</panel.string>
+			<panel.string name="sale_pending_text">
+				(vente en cours)
+			</panel.string>
+			<panel.string name="no_selection_text">
+				Aucune parcelle sélectionnée.
+Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre parcelle pour en afficher les détails.
+			</panel.string>
+			<text name="Name:">
+				Nom :
+			</text>
+			<line_editor name="Name"/>
+			<text name="Description:">
+				Description :
+			</text>
+			<text_editor name="Description"/>
+			<text name="LandType">
+				Type :
+			</text>
+			<text name="LandTypeText">
+				Continent / Homestead
+			</text>
+			<text name="ContentRating">
+				Catégorie :
+			</text>
+			<text name="ContentRatingText">
+				Adult
+			</text>
+			<text name="Owner:">
+				Propriétaire :
+			</text>
+			<text name="OwnerText">
+				Leyla Linden
+			</text>
+			<button label="Profil..." label_selected="Profil..." name="Profile..."/>
+			<text name="Group:">
+				Groupe :
+			</text>
+			<text name="GroupText"/>
+			<button label="Définir..." label_selected="Définir..." name="Set..."/>
+			<check_box label="Autoriser la cession au groupe" name="check deed" tool_tip="Un officier peut céder ce terrain au groupe. Il viendra alors s&apos;ajouter au patrimoine du groupe."/>
+			<button label="Céder..." label_selected="Céder..." name="Deed..." tool_tip="Vous ne pouvez céder le terrain que si vous avez un rôle d&apos;officier dans le groupe sélectionné."/>
+			<check_box label="Le propriétaire contribue en cédant du terrain" name="check contrib" tool_tip="Lorsqu&apos;un terrain est cédé au groupe, l&apos;ancien propriétaire fait également un don de terrain suffisant."/>
+			<text name="For Sale:">
+				À vendre :
+			</text>
+			<text name="Not for sale.">
+				Pas à vendre
+			</text>
+			<text name="For Sale: Price L$[PRICE].">
+				Prix : [PRICE] L$ ([PRICE_PER_SQM] L$/m²).
+			</text>
+			<text name="SalePending"/>
+			<button label="Vendre le terrain..." label_selected="Vendre le terrain..." name="Sell Land..."/>
+			<text name="For sale to">
+				À vendre à : [BUYER]
+			</text>
+			<text name="Sell with landowners objects in parcel.">
+				Objets inclus dans la vente.
+			</text>
+			<text name="Selling with no objects in parcel.">
+				Objets non inclus dans la vente.
+			</text>
+			<button label="Annuler la vente du terrain" label_selected="Annuler la vente du terrain" left="275" name="Cancel Land Sale" width="165"/>
+			<text name="Claimed:">
+				Acquis :
+			</text>
+			<text name="DateClaimText">
+				Tue Aug 15 13:47:25 2006
+			</text>
+			<text name="PriceLabel">
+				Superficie :
+			</text>
+			<text name="PriceText">
+				4048 m²
+			</text>
+			<text name="Traffic:">
+				Trafic :
+			</text>
+			<text name="DwellText">
+				0
+			</text>
+			<button label="Acheter le terrain..." label_selected="Acheter le terrain..." left="130" name="Buy Land..." width="125"/>
+			<button label="Acheter pour le groupe..." label_selected="Acheter pour le groupe..." name="Buy For Group..."/>
+			<button label="Acheter un pass..." label_selected="Acheter un pass..." left="130" name="Buy Pass..." tool_tip="Un pass vous donne un accès temporaire à ce terrain." width="125"/>
+			<button label="Abandonner le terrain..." label_selected="Abandonner le terrain..." name="Abandon Land..."/>
+			<button label="Redemander le terrain..." label_selected="Redemander le terrain…" name="Reclaim Land..."/>
+			<button label="Vente Linden..." label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit être la propriété d&apos;un résident, avoir un contenu défini et ne pas être aux enchères."/>
+		</panel>
+		<panel label="Règlement" name="land_covenant_panel">
+			<panel.string name="can_resell">
+				Le terrain acheté dans cette région peut être revendu.
+			</panel.string>
+			<panel.string name="can_not_resell">
+				Le terrain acheté dans cette région ne peut pas être revendu.
+			</panel.string>
+			<panel.string name="can_change">
+				Le terrain acheté dans cette région peut être fusionné
+ou divisé.
+			</panel.string>
+			<panel.string name="can_not_change">
+				Le terrain acheté dans cette région ne peut pas être fusionné
+ou divisé.
+			</panel.string>
+			<text name="estate_section_lbl">
+				Domaine :
+			</text>
+			<text name="estate_name_lbl">
+				Nom :
+			</text>
+			<text name="estate_name_text">
+				continent
+			</text>
+			<text name="estate_owner_lbl">
+				Propriétaire :
+			</text>
+			<text name="estate_owner_text">
+				(aucun)
+			</text>
+			<text_editor name="covenant_editor">
+				Il n&apos;y a aucun règlement pour ce domaine.
+			</text_editor>
+			<text name="covenant_timestamp_text">
+				Last Modified Wed Dec 31 16:00:00 1969
+			</text>
+			<text name="region_section_lbl">
+				Région :
+			</text>
+			<text name="region_name_lbl">
+				Nom :
+			</text>
+			<text name="region_name_text">
+				leyla
+			</text>
+			<text name="region_landtype_lbl">
+				Type :
+			</text>
+			<text name="region_landtype_text">
+				Continent / Homestead
+			</text>
+			<text name="region_maturity_lbl">
+				Catégorie :
+			</text>
+			<text name="region_maturity_text">
+				Adult
+			</text>
+			<text name="resellable_lbl">
+				Revendre :
+			</text>
+			<text name="resellable_clause">
+				Le terrain dans cette région ne peut être revendu.
+			</text>
+			<text name="changeable_lbl">
+				Sous-diviser :
+			</text>
+			<text name="changeable_clause">
+				Le terrain dans cette région ne peut être fusionné/divisé.
+			</text>
+		</panel>
+		<panel label="Objets" name="land_objects_panel">
+			<panel.string name="objects_available_text">
+				[COUNT] sur [MAX] ([AVAILABLE] disponibles)
+			</panel.string>
+			<panel.string name="objects_deleted_text">
+				[COUNT] sur [MAX] ([DELETED] seront supprimés)
+			</panel.string>
+			<text name="parcel_object_bonus">
+				Facteur Bonus Objets : [BONUS]
+			</text>
+			<text name="Simulator primitive usage:">
+				Prims utilisées sur la parcelle :
+			</text>
+			<text left="214" name="objects_available" width="230">
+				[COUNT] sur [MAX] ([AVAILABLE] disponibles)
+			</text>
+			<text name="Primitives parcel supports:" width="200">
+				Prims max. sur la parcelle :
+			</text>
+			<text left="214" name="object_contrib_text" width="152">
+				[COUNT]
+			</text>
+			<text name="Primitives on parcel:">
+				Prims sur la parcelle :
+			</text>
+			<text left="214" name="total_objects_text" width="48">
+				[COUNT]
+			</text>
+			<text left="14" name="Owned by parcel owner:" width="180">
+				Appartenant au propriétaire :
+			</text>
+			<text left="214" name="owner_objects_text" width="48">
+				[COUNT]
+			</text>
+			<button label="Afficher" label_selected="Afficher" name="ShowOwner" right="-135" width="60"/>
+			<button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOwner..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
+			<text left="14" name="Set to group:" width="180">
+				Données au groupe :
+			</text>
+			<text left="214" name="group_objects_text" width="48">
+				[COUNT]
+			</text>
+			<button label="Afficher" label_selected="Afficher" name="ShowGroup" right="-135" width="60"/>
+			<button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnGroup..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
+			<text left="14" name="Owned by others:" width="128">
+				Appartenant à d&apos;autres :
+			</text>
+			<text left="214" name="other_objects_text" width="48">
+				[COUNT]
+			</text>
+			<button label="Afficher" label_selected="Afficher" name="ShowOther" right="-135" width="60"/>
+			<button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOther..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
+			<text left="14" name="Selected / sat upon:" width="193">
+				Sélectionnées/où quelqu&apos;un est assis :
+			</text>
+			<text left="214" name="selected_objects_text" width="48">
+				[COUNT]
+			</text>
+			<text left="4" name="Autoreturn" width="412">
+				Renvoi automatique des objets des autres résidents (min., 0 pour désactiver) :
+			</text>
+			<line_editor name="clean other time" right="-6" width="36"/>
+			<text name="Object Owners:">
+				Propriétaires :
+			</text>
+			<button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh List"/>
+			<button label="Renvoyer les objets..." label_selected="Renvoyer les objets..." name="Return objects..."/>
+			<name_list label="Plus récents" name="owner list">
+				<name_list.columns label="Type" name="type"/>
+				<name_list.columns name="online_status"/>
+				<name_list.columns label="Nom" name="name"/>
+				<name_list.columns label="Nombre" name="count"/>
+				<name_list.columns label="Plus récents" name="mostrecent"/>
+			</name_list>
+		</panel>
+		<panel label="Options" name="land_options_panel">
+			<panel.string name="search_enabled_tooltip">
+				Permettre aux autres résidents de voir cette parcelle dans les résultats de recherche
+			</panel.string>
+			<panel.string name="search_disabled_small_tooltip">
+				Cette option est désactivée car la superficie de cette parcelle est inférieure ou égale à 128 m².
+Seules les parcelles de grande taille peuvent apparaître dans la recherche.
+			</panel.string>
+			<panel.string name="search_disabled_permissions_tooltip">
+				Cette option est désactivée car vous ne pouvez pas modifier les options de cette parcelle.
+			</panel.string>
+			<panel.string name="mature_check_mature">
+				Contenu Mature
+			</panel.string>
+			<panel.string name="mature_check_adult">
+				Contenu Adult
+			</panel.string>
+			<panel.string name="mature_check_mature_tooltip">
+				Les informations ou contenu de votre parcelle sont classés Mature.
+			</panel.string>
+			<panel.string name="mature_check_adult_tooltip">
+				Les informations ou contenu de votre parcelle sont classés Adult.
+			</panel.string>
+			<panel.string name="landing_point_none">
+				(aucun)
+			</panel.string>
+			<panel.string name="push_restrict_text">
+				Pas de bousculades
+			</panel.string>
+			<panel.string name="push_restrict_region_text">
+				Pas de bousculades (les règles de la région priment)
+			</panel.string>
+			<text name="allow_label">
+				Autoriser les autres résidents à :
+			</text>
+			<check_box label="Modifier le terrain" name="edit land check" tool_tip="Si cette option est cochée, n&apos;importe qui peut terraformer votre terrain. Il vaut mieux ne pas cocher cette option pour toujours pouvoir modifer votre propre terrain."/>
+			<check_box label="Voler" name="check fly" tool_tip="Si cette option est cochée, les résidents peuvent voler sur votre terrain. Si elle n&apos;est pas cochée, ils ne pourront voler que lorsqu&apos;ils arrivent et passent au dessus de votre terrain."/>
+			<text left="152" name="allow_label2">
+				Créer des objets :
+			</text>
+			<check_box label="Tous les résidents" left="285" name="edit objects check"/>
+			<check_box label="Groupe" left="395" name="edit group objects check"/>
+			<text left="152" name="allow_label3" width="134">
+				Laisser entrer des objets :
+			</text>
+			<check_box label="Tous les résidents" left="285" name="all object entry check"/>
+			<check_box label="Groupe" left="395" name="group object entry check"/>
+			<text left="152" name="allow_label4">
+				Exécuter des scripts :
+			</text>
+			<check_box label="Tous les résidents" left="285" name="check other scripts"/>
+			<check_box label="Groupe" left="395" name="check group scripts"/>
+			<text name="land_options_label">
+				Options du terrain :
+			</text>
+			<check_box label="Sécurisé (pas de dégâts)" name="check safe" tool_tip="Si cette option est cochée, le terrain est sécurisé et il n&apos;y pas de risques de dommages causés par des combats. Si elle est décochée, des dommages causés par les combats peuvent avoir lieu."/>
+			<check_box bottom="-140" label="Pas de bousculades" left="14" name="PushRestrictCheck" tool_tip="Empêche l&apos;utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/>
+			<check_box bottom="-160" label="Afficher dans la recherche (30 L$/semaine) sous" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/>
+			<combo_box bottom="-160" left="286" name="land category with adult" width="146">
+				<combo_box.item label="Toutes catégories" name="item0"/>
+				<combo_box.item label="Appartenant aux Lindens" name="item1"/>
+				<combo_box.item label="Adult" name="item2"/>
+				<combo_box.item label="Art et Culture" name="item3"/>
+				<combo_box.item label="Affaires" name="item4"/>
+				<combo_box.item label="Éducation" name="item5"/>
+				<combo_box.item label="Jeux" name="item6"/>
+				<combo_box.item label="Favoris" name="item7"/>
+				<combo_box.item label="Accueil pour les nouveaux" name="item8"/>
+				<combo_box.item label="Parcs et Nature" name="item9"/>
+				<combo_box.item label="Résidentiel" name="item10"/>
+				<combo_box.item label="Shopping" name="item11"/>
+				<combo_box.item label="Autre" name="item12"/>
+			</combo_box>
+			<combo_box bottom="-160" left="286" name="land category" width="146">
+				<combo_box.item label="Toutes catégories" name="item0"/>
+				<combo_box.item label="Appartenant aux Lindens" name="item1"/>
+				<combo_box.item label="Art et Culture" name="item3"/>
+				<combo_box.item label="Affaires" name="item4"/>
+				<combo_box.item label="Éducation" name="item5"/>
+				<combo_box.item label="Jeux" name="item6"/>
+				<combo_box.item label="Favoris" name="item7"/>
+				<combo_box.item label="Accueil pour les nouveaux" name="item8"/>
+				<combo_box.item label="Parcs et Nature" name="item9"/>
+				<combo_box.item label="Résidentiel" name="item10"/>
+				<combo_box.item label="Shopping" name="item11"/>
+				<combo_box.item label="Autre" name="item12"/>
+			</combo_box>
+			<check_box bottom="-180" label="Contenu Mature" name="MatureCheck" tool_tip=""/>
+			<text bottom="-200" name="Snapshot:">
+				Photo :
+			</text>
+			<texture_picker bottom="-319" label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/>
+			<text bottom="-323" name="landing_point">
+				Lieu d&apos;arrivée : [LANDING]
+			</text>
+			<button bottom="-323" label="Définir" label_selected="Définir" name="Set" tool_tip="Définit le point d&apos;arrivée des visiteurs. Définit l&apos;emplacement de votre avatar sur ce terrain."/>
+			<button bottom="-323" label="Annuler" label_selected="Annuler" name="Clear" tool_tip="Libérer le lieu d&apos;arrivée."/>
+			<text bottom="-343" name="Teleport Routing: ">
+				Règles de téléportation :
+			</text>
+			<combo_box bottom="-343" left="140" name="landing type" tool_tip="Vous permet de paramétrer les téléportations sur votre terrain." width="140">
+				<combo_box.item label="Bloqué" name="Blocked"/>
+				<combo_box.item label="Lieu d&apos;arrivée fixe" name="LandingPoint"/>
+				<combo_box.item label="Lieu d&apos;arrivée libre" name="Anywhere"/>
+			</combo_box>
+		</panel>
+		<panel label="Médias" name="land_media_panel">
+			<text name="with media:" width="85">
+				Type :
+			</text>
+			<combo_box left="97" name="media type" tool_tip="Indiquez s&apos;il s&apos;agit de l&apos;URL d&apos;un film, d&apos;une page web ou autre"/>
+			<text name="mime_type"/>
+			<text name="at URL:" width="85">
+				URL du domicile :
+			</text>
+			<line_editor left="97" name="media_url"/>
+			<button label="Définir..." label_selected="Définir..." name="set_media_url"/>
+			<text name="CurrentURL:">
+				URL actuelle :
+			</text>
+			<button label="Réinitialiser..." label_selected="Réinitialiser..." name="reset_media_url"/>
+			<check_box label="Masquer l&apos;URL" left="97" name="hide_media_url" tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l&apos;URL du média. Cette option n&apos;est pas disponible pour les fichiers HTML."/>
+			<text name="Description:">
+				Description :
+			</text>
+			<line_editor left="97" name="url_description" tool_tip="Texte affiché à côté du bouton Jouer/Charger"/>
+			<text name="Media texture:">
+				Remplacer
+la texture :
+			</text>
+			<texture_picker label="" left="97" name="media texture" tool_tip="Cliquez pour sélectionner une image"/>
+			<text name="replace_texture_help">
+				Les objets avec cette texture affichent le film ou la page web quand vous cliquez sur la flèche Jouer.
+
+Sélectionnez l&apos;image miniature pour choisir une texture différente.
+			</text>
+			<check_box label="Échelle automatique" left="97" name="media_auto_scale" tool_tip="Si vous sélectionnez cette option, le contenu de cette parcelle sera automatiquement mis à l&apos;échelle. La qualité visuelle sera peut-être amoindrie mais vous n&apos;aurez à faire aucune autre mise à l&apos;échelle ou alignement."/>
+			<text left="102" name="media_size" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut." width="105">
+				Taille :
+			</text>
+			<spinner left_delta="89" name="media_size_width" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."/>
+			<spinner name="media_size_height" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."/>
+			<text name="pixels">
+				pixels
+			</text>
+			<text name="Options:">
+				Options :
+			</text>
+			<check_box label="En boucle" name="media_loop" tool_tip="Jouer le média en boucle. Lorsque le média aura fini de jouer, il recommencera."/>
+		</panel>
+		<panel label="Audio" name="land_audio_panel">
+			<text name="MusicURL:">
+				URL de la musique :
+			</text>
+			<text name="Sound:">
+				Son :
+			</text>
+			<check_box label="Limiter les gestes et sons d&apos;objet à cette parcelle" name="check sound local"/>
+			<text name="Voice settings:">
+				Voix :
+			</text>
+			<check_box label="Activer le chat vocal" name="parcel_enable_voice_channel"/>
+			<check_box label="Activer la voix (contrôlé par le domaine)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+			<check_box label="Limiter le chat vocal à cette parcelle" name="parcel_enable_voice_channel_parcel"/>
+		</panel>
+		<panel label="Accès" name="land_access_panel">
+			<panel.string name="estate_override">
+				Au moins une de ces options est définie au niveau du domaine.
+			</panel.string>
+			<text name="Limit access to this parcel to:">
+				Accès à cette parcelle
+			</text>
+			<check_box label="Autoriser l&apos;accès public" name="public_access"/>
+			<text name="Only Allow">
+				Bloquer l&apos;accès aux résidents :
+			</text>
+			<check_box label="Qui n&apos;ont pas fourni leurs informations de paiement à Linden Lab" name="limit_payment" tool_tip="Aux résidents non identifés"/>
+			<check_box label="Dont l&apos;âge n&apos;a pas été vérifié" name="limit_age_verified" tool_tip="Interdire les résidents qui n&apos;ont pas vérifié leur âge. Consultez la page [SUPPORT_SITE] pour plus d&apos;informations."/>
+			<check_box label="Autoriser l&apos;accès au groupe : [GROUP]" name="GroupCheck" tool_tip="Définir le groupe à l&apos;onglet Général."/>
+			<check_box label="Vendre des pass à :" name="PassCheck" tool_tip="Autoriser un accès temporaire à cette parcelle"/>
+			<combo_box name="pass_combo">
+				<combo_box.item label="Tout le monde" name="Anyone"/>
+				<combo_box.item label="Groupe" name="Group"/>
+			</combo_box>
+			<spinner label="Prix en L$ :" name="PriceSpin"/>
+			<spinner label="Durée en heures :" name="HoursSpin"/>
+			<text label="Toujours autoriser" name="AllowedText">
+				Résidents autorisés
+			</text>
+			<name_list name="AccessList" tool_tip="([LISTED] listés, [MAX] max)"/>
+			<button label="Ajouter..." label_selected="Ajouter..." name="add_allowed"/>
+			<button label="Supprimer" label_selected="Supprimer" name="remove_allowed"/>
+			<text label="Bannir" name="BanCheck">
+				Résidents bannis
+			</text>
+			<name_list name="BannedList" tool_tip="([LISTED] listés, [MAX] max)"/>
+			<button label="Ajouter..." label_selected="Ajouter..." name="add_banned"/>
+			<button label="Supprimer" label_selected="Supprimer" name="remove_banned"/>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_animation_preview.xml b/indra/newview/skins/default/xui/fr/floater_animation_preview.xml
index af6cb41ba85..00ab29703ff 100644
--- a/indra/newview/skins/default/xui/fr/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_animation_preview.xml
@@ -1,91 +1,186 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Animation Preview" title="">
-	<text name="name_label">
-		Nom :
-	</text>
-	<text name="description_label">
-		Description :
-	</text>
-	<spinner label="Priorité" name="priority" tool_tip="Contrôle quelles animations peuvent êtres écrasées par cette animation."/>
-	<text name="preview_label" width="110">
-		Prévisualiser pendant
-	</text>
-	<combo_box label="" name="preview_base_anim" tool_tip="Utilisez cette option pour tester votre animation pendant que votre avatar fait des choses banales." left_delta="116" width="124">
-		<combo_box.item name="Standing" label="Debout" />
-		<combo_box.item name="Walking" label="En train de marcher" />
-		<combo_box.item name="Sitting" label="Assis" />
-		<combo_box.item name="Flying" label="En train de voler" />
-	</combo_box>
-	<check_box  left="6" label="Boucle" name="loop_check" tool_tip="Joue cette animation en boucle."/>
-	<spinner left="76" label_width="55" width="105" label="Début (%)" name="loop_in_point" tool_tip="Définit le moment de l&apos;animation où la boucle repart."/>
-	<spinner left="195" label="Fin (%)" name="loop_out_point" tool_tip="Définit le moment de l&apos;animation où la boucle finit."/>
-	<text name="hand_label" width="110">
-		Mouvement de main
-	</text>
-	<combo_box label="" name="hand_pose_combo" tool_tip="Contrôle le mouvement des mains au cours de l&apos;animation" left_delta="116" width="124">
-		<combo_box.item name="Spread" label="Doigts écartés" />
-		<combo_box.item name="Relaxed" label="Détendues" />
-		<combo_box.item name="PointBoth" label="Pointer (les deux)" />
-		<combo_box.item name="Fist" label="Poing" />
-		<combo_box.item name="RelaxedLeft" label="Détendue (gauche)" />
-		<combo_box.item name="PointLeft" label="Pointer (gauche)" />
-		<combo_box.item name="FistLeft" label="Poing (gauche)" />
-		<combo_box.item name="RelaxedRight" label="Détendue (droite)" />
-		<combo_box.item name="PointRight" label="Pointer (droite)" />
-		<combo_box.item name="FistRight" label="Poing (droite)" />
-		<combo_box.item name="SaluteRight" label="Saluer (droite)" />
-		<combo_box.item name="Typing" label="Taper" />
-		<combo_box.item name="PeaceRight" label="Paix (main droite)" />
-	</combo_box>
-	<text name="emote_label">
-		Expression
-	</text>
-	<combo_box label="" name="emote_combo" tool_tip="Contrôle l&apos;expression du visage au cours de l&apos;animation." left_delta="116" width="124">
-		<combo_box.item name="[None]" label="None]" />
-		<combo_box.item name="Aaaaah" label="Aaaaah" />
-		<combo_box.item name="Afraid" label="Effrayé" />
-		<combo_box.item name="Angry" label="En colère" />
-		<combo_box.item name="BigSmile" label="Grand sourire" />
-		<combo_box.item name="Bored" label="Ennui" />
-		<combo_box.item name="Cry" label="Pleurer" />
-		<combo_box.item name="Disdain" label="Mépris" />
-		<combo_box.item name="Embarrassed" label="Gêne" />
-		<combo_box.item name="Frown" label="Froncer les sourcils" />
-		<combo_box.item name="Kiss" label="Embrasser" />
-		<combo_box.item name="Laugh" label="Rire" />
-		<combo_box.item name="Plllppt" label="Plllppt" />
-		<combo_box.item name="Repulsed" label="Dégoût" />
-		<combo_box.item name="Sad" label="Triste" />
-		<combo_box.item name="Shrug" label="Hausser les épaules" />
-		<combo_box.item name="Smile" label="Sourire" />
-		<combo_box.item name="Surprise" label="Surprise" />
-		<combo_box.item name="Wink" label="Clin d&apos;Å“il" />
-		<combo_box.item name="Worry" label="Soucis" />
-	</combo_box>
-	<spinner label_width="65" label="Transition &#10;début (s)" name="ease_in_time" tool_tip="Durée (en secondes) pendant laquelle l&apos;animation s&apos;intègre au mouvement."/>
-	<spinner label_width="65" left="160" width="125" label="Transition &#10;fin (s)" name="ease_out_time" tool_tip="Durée (en secondes) pendant laquelle l&apos;animation disparaît du mouvement."/>
-	<button label="" name="play_btn" tool_tip="Jouer/Arrêter votre animation." bottom_delta="-48"/>
-	<button label="" name="stop_btn" tool_tip="Arrêter le playback"/>
-	<slider label="" name="playback_slider"/>
-	<text name="bad_animation_text">
-		Impossible de lire le fichier d&apos;animation.
-
-Nous recommandons les fichiers BVH extraits de
-Poser 4.
-	</text>
-	<button label="Annuler" name="cancel_btn"/>
-	<button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
-	<string name="failed_to_initialize">
-		Echec de l&apos;initialisation du mouvement
-	</string>
-	<string name="anim_too_long">
-		Le fichier d&apos;animation fait [LENGTH] secondes.
-
-La longueur maximale est de [MAX_LENGTH] secondes.
-	</string>
-	<string name="failed_file_read">
-		Impossible de lire le fichier d&apos;animation.
-
-[STATUS]
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview" title="">
+	<floater.string name="failed_to_initialize">
+		Echec de l&apos;initialisation du mouvement
+	</floater.string>
+	<floater.string name="anim_too_long">
+		Le fichier d&apos;animation fait [LENGTH] secondes.
+
+La longueur maximale est de [MAX_LENGTH] secondes.
+	</floater.string>
+	<floater.string name="failed_file_read">
+		Impossible de lire le fichier d&apos;animation.
+
+[STATUS]
+	</floater.string>
+	<floater.string name="E_ST_OK">
+		Ok
+	</floater.string>
+	<floater.string name="E_ST_EOF">
+		Fichier incomplet.
+	</floater.string>
+	<floater.string name="E_ST_NO_CONSTRAINT">
+		Impossible de lire la définition des contraintes.
+	</floater.string>
+	<floater.string name="E_ST_NO_FILE">
+		Impossible d&apos;ouvrir le fichier BVH.
+	</floater.string>
+	<floater.string name="E_ST_NO_HIER">
+		En-tête HIERARCHY non valide.
+	</floater.string>
+	<floater.string name="E_ST_NO_JOINT">
+		Impossible de trouver ROOT ou JOINT.
+	</floater.string>
+	<floater.string name="E_ST_NO_NAME">
+		Impossible de trouver le nom JOINT.
+	</floater.string>
+	<floater.string name="E_ST_NO_OFFSET">
+		Impossible de trouver OFFSET.
+	</floater.string>
+	<floater.string name="E_ST_NO_CHANNELS">
+		Impossible se trouver les CHANNELS.
+	</floater.string>
+	<floater.string name="E_ST_NO_ROTATION">
+		Impossible d&apos;obtenir l&apos;ordre de rotation.
+	</floater.string>
+	<floater.string name="E_ST_NO_AXIS">
+		Impossible d&apos;obtenir l&apos;axe de rotation.
+	</floater.string>
+	<floater.string name="E_ST_NO_MOTION">
+		Impossible de trouver MOTION.
+	</floater.string>
+	<floater.string name="E_ST_NO_FRAMES">
+		Impossible d&apos;obtenir le nombre de cadres.
+	</floater.string>
+	<floater.string name="E_ST_NO_FRAME_TIME">
+		Impossible d&apos;obtenir le temps du cadre.
+	</floater.string>
+	<floater.string name="E_ST_NO_POS">
+		Impossible de trouver les valeurs de la position.
+	</floater.string>
+	<floater.string name="E_ST_NO_ROT">
+		Impossible de trouver les valeurs de rotation.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_FILE">
+		Impossible d&apos;ouvrir le fichier de traduction.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_HEADER">
+		Impossible de lire l&apos;en-tête de traduction.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_NAME">
+		Impossible de lire la traduction.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_IGNORE">
+		Impossible de lire la traduction.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_RELATIVE">
+		Impossible de lire la valeur de traduction relative.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_OUTNAME">
+		Impossible de lire la traduction.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MATRIX">
+		Impossible de lire la matrice de traduction.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MERGECHILD">
+		Impossible de trouver le nom mergechild.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MERGEPARENT">
+		Impossible de trouver le nom mergeparent.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_PRIORITY">
+		Impossible de définir la valeur de la priorité.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_LOOP">
+		Impossible de définir la valeur de la boucle
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EASEIN">
+		Impossible de trouver les valeurs easeln.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EASEOUT">
+		Impossible de trouver les valeurs easeOut.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_HAND">
+		Impossible d&apos;obtenir la valeur hand morph.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EMOTE">
+		Impossible de lire le nom emote.
+	</floater.string>
+	<text name="name_label">
+		Nom :
+	</text>
+	<text name="description_label">
+		Description :
+	</text>
+	<spinner label="Priorité" name="priority" tool_tip="Contrôle quelles animations peuvent êtres écrasées par cette animation."/>
+	<check_box label="Boucle" left="6" name="loop_check" tool_tip="Joue cette animation en boucle."/>
+	<spinner label="Début (%)" label_width="55" left="76" name="loop_in_point" tool_tip="Définit le moment de l&apos;animation où la boucle repart." width="105"/>
+	<spinner label="Fin (%)" left="195" name="loop_out_point" tool_tip="Définit le moment de l&apos;animation où la boucle finit."/>
+	<text name="hand_label" width="110">
+		Mouvement de main
+	</text>
+	<combo_box label="" left_delta="116" name="hand_pose_combo" tool_tip="Contrôle le mouvement des mains au cours de l&apos;animation" width="124">
+		<combo_box.item label="Doigts écartés" name="Spread"/>
+		<combo_box.item label="Détendues" name="Relaxed"/>
+		<combo_box.item label="Pointer (les deux)" name="PointBoth"/>
+		<combo_box.item label="Poing" name="Fist"/>
+		<combo_box.item label="Détendue (gauche)" name="RelaxedLeft"/>
+		<combo_box.item label="Pointer (gauche)" name="PointLeft"/>
+		<combo_box.item label="Poing (gauche)" name="FistLeft"/>
+		<combo_box.item label="Détendue (droite)" name="RelaxedRight"/>
+		<combo_box.item label="Pointer (droite)" name="PointRight"/>
+		<combo_box.item label="Poing (droite)" name="FistRight"/>
+		<combo_box.item label="Saluer (droite)" name="SaluteRight"/>
+		<combo_box.item label="Taper" name="Typing"/>
+		<combo_box.item label="Paix (main droite)" name="PeaceRight"/>
+	</combo_box>
+	<text name="emote_label">
+		Expression
+	</text>
+	<combo_box label="" left_delta="116" name="emote_combo" tool_tip="Contrôle l&apos;expression du visage au cours de l&apos;animation." width="124">
+		<combo_box.item label="None]" name="[None]"/>
+		<combo_box.item label="Aaaaah" name="Aaaaah"/>
+		<combo_box.item label="Effrayé" name="Afraid"/>
+		<combo_box.item label="En colère" name="Angry"/>
+		<combo_box.item label="Grand sourire" name="BigSmile"/>
+		<combo_box.item label="Ennui" name="Bored"/>
+		<combo_box.item label="Pleurer" name="Cry"/>
+		<combo_box.item label="Mépris" name="Disdain"/>
+		<combo_box.item label="Gêne" name="Embarrassed"/>
+		<combo_box.item label="Froncer les sourcils" name="Frown"/>
+		<combo_box.item label="Embrasser" name="Kiss"/>
+		<combo_box.item label="Rire" name="Laugh"/>
+		<combo_box.item label="Plllppt" name="Plllppt"/>
+		<combo_box.item label="Dégoût" name="Repulsed"/>
+		<combo_box.item label="Triste" name="Sad"/>
+		<combo_box.item label="Hausser les épaules" name="Shrug"/>
+		<combo_box.item label="Sourire" name="Smile"/>
+		<combo_box.item label="Surprise" name="Surprise"/>
+		<combo_box.item label="Clin d&apos;Å“il" name="Wink"/>
+		<combo_box.item label="Soucis" name="Worry"/>
+	</combo_box>
+	<text name="preview_label" width="110">
+		Prévisualiser pendant
+	</text>
+	<combo_box label="" left_delta="116" name="preview_base_anim" tool_tip="Utilisez cette option pour tester votre animation pendant que votre avatar fait des choses banales." width="124">
+		<combo_box.item label="Debout" name="Standing"/>
+		<combo_box.item label="En train de marcher" name="Walking"/>
+		<combo_box.item label="Assis" name="Sitting"/>
+		<combo_box.item label="En train de voler" name="Flying"/>
+	</combo_box>
+	<spinner label="Transition 
+début (s)" label_width="65" name="ease_in_time" tool_tip="Durée (en secondes) pendant laquelle l&apos;animation s&apos;intègre au mouvement."/>
+	<spinner label="Transition 
+fin (s)" label_width="65" left="160" name="ease_out_time" tool_tip="Durée (en secondes) pendant laquelle l&apos;animation disparaît du mouvement." width="125"/>
+	<button bottom_delta="-48" label="" name="play_btn" tool_tip="Jouer/Arrêter votre animation."/>
+	<button label="" name="stop_btn" tool_tip="Arrêter le playback"/>
+	<slider label="" name="playback_slider"/>
+	<text name="bad_animation_text">
+		Impossible de lire le fichier d&apos;animation.
+
+Nous recommandons les fichiers BVH extraits de
+Poser 4.
+	</text>
+	<button label="Annuler" name="cancel_btn"/>
+	<button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
index c713d3e9305..5742b0af04b 100644
--- a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
@@ -1,42 +1,41 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="CHOISIR LE RÉSIDENT">
-	<tab_container name="ResidentChooserTabs">
-		<panel label="Rechercher" name="SearchPanel">
-			<text name="InstructSearchResidentName">
-				Saisissez une partie du nom du résident :
-			</text>
-			<button label="Trouver" label_selected="Trouver" name="Find"/>
-		</panel>
-		<panel label="Cartes de visite" name="CallingCardsPanel">
-			<text name="InstructSelectCallingCard">
-				Sélectionnez une carte de visite :
-			</text>
-		</panel>
-		<panel label="Près de moi" name="NearMePanel">
-			<text name="InstructSelectResident">
-				Choisir un résident
-près de vous :
-			</text>
-			<button font="SansSerifSmall" label="Rafraîchir la liste" label_selected="Rafraîchir la liste" name="Refresh" left_delta="10" width="105"/>
-			<slider label="Distance" name="near_me_range" bottom_delta="-36"/>
-			<text name="meters">
-				mètres
-			</text>
-			<scroll_list bottom_delta="-169" height="159" name="NearMe"  />
-		</panel>
-	</tab_container>
-	<button label="Sélectionner" label_selected="Sélectionner" name="Select"/>
-	<button label="Annuler" label_selected="Annuler" name="Cancel"/>
-	<string name="not_found">
-		&apos;[TEXT]&apos; introuvable
-	</string>
-	<string name="no_one_near">
-		Il n'y a personne près de vous
-	</string>
-	<string name="no_results">
-		Aucun résultat
-	</string>
-	<string name="searching">
-		Recherche...
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="avatarpicker" title="CHOISIR LE RÉSIDENT">
+	<tab_container name="ResidentChooserTabs">
+		<panel label="Rechercher" name="SearchPanel">
+			<text name="InstructSearchResidentName">
+				Saisissez une partie du nom du résident :
+			</text>
+			<button label="OK" label_selected="OK" name="Find"/>
+		</panel>
+		<panel label="Cartes de visite" name="CallingCardsPanel">
+			<text name="InstructSelectCallingCard">
+				Sélectionnez une carte de visite :
+			</text>
+		</panel>
+		<panel label="Près de moi" name="NearMePanel">
+			<text name="InstructSelectResident">
+				Sélectionner une personne près de vous :
+			</text>
+			<button font="SansSerifSmall" label="Rafraîchir la liste" label_selected="Rafraîchir la liste" left_delta="10" name="Refresh" width="105"/>
+			<slider bottom_delta="-36" label="Distance" name="near_me_range"/>
+			<text name="meters">
+				mètres
+			</text>
+			<scroll_list bottom_delta="-169" height="159" name="NearMe"/>
+		</panel>
+	</tab_container>
+	<button label="OK" label_selected="OK" name="Select"/>
+	<button label="Annuler" label_selected="Annuler" name="Cancel"/>
+	<string name="not_found">
+		&apos;[TEXT]&apos; introuvable
+	</string>
+	<string name="no_one_near">
+		Il n&apos;y a personne près de vous
+	</string>
+	<string name="no_results">
+		Aucun résultat
+	</string>
+	<string name="searching">
+		Recherche...
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_beacons.xml b/indra/newview/skins/default/xui/fr/floater_beacons.xml
index 4f5c5d442f5..a7476898830 100644
--- a/indra/newview/skins/default/xui/fr/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/fr/floater_beacons.xml
@@ -1,15 +1,21 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="BALISES">
-	<panel name="beacons_panel">
-		<check_box label="Objets scriptés avec Toucher uniquement" name="touch_only"/>
-		<check_box label="Objets scriptés" name="scripted"/>
-		<check_box label="Objets physiques" name="physical"/>
-		<check_box label="Sources sonores" name="sounds"/>
-		<check_box label="Sources de particules" name="particles"/>
-		<check_box label="Mettre en surbrillance" name="highlights"/>
-		<check_box label="Montrer les balises" name="beacons"/>
-		<text name="beacon_width_label">
-			Largeur de la balise :
-		</text>
-	</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="beacons" title="BALISES">
+	<panel name="beacons_panel">
+		<text name="label_show">
+			Afficher :
+		</text>
+		<check_box label="Balises" name="beacons"/>
+		<check_box label="Surbrillances" name="highlights"/>
+		<text name="beacon_width_label" tool_tip="Largeur de la balise">
+			Largeur :
+		</text>
+		<text name="label_objects">
+			Pour ces objets :
+		</text>
+		<check_box label="Physique" name="physical"/>
+		<check_box label="Scripté" name="scripted"/>
+		<check_box label="Toucher uniquement" name="touch_only"/>
+		<check_box label="Sources sonores" name="sounds"/>
+		<check_box label="Sources des particules" name="particles"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_build_options.xml b/indra/newview/skins/default/xui/fr/floater_build_options.xml
index 76e8e2f6375..e8e6a59dc4f 100644
--- a/indra/newview/skins/default/xui/fr/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_build_options.xml
@@ -1,8 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="build options floater" title="OPTIONS DE LA GRILLE">
-	<spinner label="Unité (mètres)" name="GridResolution" />
-	<spinner label="Mesures (mètres)" name="GridDrawSize" />
-	<check_box label="Activer la fixation des sous-unités" name="GridSubUnit" />
-	<check_box label="Afficher les sections transversales" name="GridCrossSection" />
-	<slider label="Opacité de la grille" name="GridOpacity" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="build options floater" title="OPTIONS DE LA GRILLE">
+	<spinner label="Unités (mètres)" name="GridResolution"/>
+	<spinner label="Mesures (mètres)" name="GridDrawSize"/>
+	<check_box label="Fixation des sous-unités" name="GridSubUnit"/>
+	<check_box label="Afficher les sections transversales" name="GridCrossSection"/>
+	<text name="grid_opacity_label" tool_tip="Opacité de la grille">
+		Opacité :
+	</text>
+	<slider label="Opacité de la grille" name="GridOpacity"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
index 98b7faa2ccc..212ee2504a8 100644
--- a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
@@ -1,44 +1,53 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="CHANGEMENT DES DROITS RELATIFS AU CONTENU">
-	<text name="applyto">
-		Types de contenu
-	</text>
-	<check_box label="Animation" name="check_animation"/>
-	<check_box label="Parties du corps" name="check_bodypart"/>
-	<check_box label="Habits" name="check_clothing"/>
-	<check_box label="Gestes" name="check_gesture"/>
-	<check_box label="Repères" name="check_landmark"/>
-	<check_box label="Notes" name="check_notecard"/>
-	<check_box label="Objets" name="check_object"/>
-	<check_box label="Scripts" name="check_script"/>
-	<check_box label="Sons" name="check_sound"/>
-	<check_box label="Textures" name="check_texture"/>
-	<button label="Tout cocher" label_selected="Tout" name="check_all"/>
-	<button label="Tout décocher" label_selected="Aucun" name="check_none"/>
-	<text name="newperms">
-		Nouveaux droits
-	</text>
-	<check_box label="Partager avec le groupe" name="share_with_group"/>
-	<check_box label="Autoriser tout le monde à copier" name="everyone_copy"/>
-	<text name="NextOwnerLabel">
-		Le prochain propriétaire pourra :
-	</text>
-	<check_box label="Modifier" name="next_owner_modify"/>
-	<check_box label="Copier" name="next_owner_copy"/>
-	<check_box label="Revendre/Donner" name="next_owner_transfer"/>
-	<button label="Aide" name="help"/>
-	<button label="Appliquer" name="apply"/>
-	<button label="Fermer" name="close"/>
-	<string name="nothing_to_modify_text">
-		La sélection contient des contenus non modifiables.
-	</string>
-	<string name="status_text">
-		Permissions paramétrées sur [NAME]
-	</string>
-	<string name="start_text">
-		Demande de changement des droits lancée...
-	</string>
-	<string name="done_text">
-		Demande de changement des droits finie.
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterbulkperms" title="Modifier les droits relatifs au contenu">
+	<floater.string name="nothing_to_modify_text">
+		La sélection contient des contenus non modifiables.
+	</floater.string>
+	<floater.string name="status_text">
+		Permissions paramétrées sur [NAME]
+	</floater.string>
+	<floater.string name="start_text">
+		Demande de changement des droits lancée...
+	</floater.string>
+	<floater.string name="done_text">
+		Demande de changement des droits finie.
+	</floater.string>
+	<check_box label="Animation" name="check_animation"/>
+	<icon name="icon_animation" tool_tip="Animation"/>
+	<check_box label="Parties du corps" name="check_bodypart"/>
+	<icon name="icon_bodypart" tool_tip="Parties du corps"/>
+	<check_box label="Habits" name="check_clothing"/>
+	<icon name="icon_clothing" tool_tip="Habits"/>
+	<check_box label="Gestes" name="check_gesture"/>
+	<icon name="icon_gesture" tool_tip="Gestes"/>
+	<check_box label="Notes" name="check_notecard"/>
+	<icon name="icon_notecard" tool_tip="Notes"/>
+	<check_box label="Objets" name="check_object"/>
+	<icon name="icon_object" tool_tip="Objets"/>
+	<check_box label="Scripts" name="check_script"/>
+	<icon name="icon_script" tool_tip="Scripts"/>
+	<check_box label="Sons" name="check_sound"/>
+	<icon name="icon_sound" tool_tip="Sons"/>
+	<check_box label="Textures" name="check_texture"/>
+	<button label="√ Tout" label_selected="Tout" name="check_all"/>
+	<button label="Effacer" label_selected="Aucun" name="check_none"/>
+	<text name="newperms">
+		Nouvelles permissions relatives au contenu
+	</text>
+	<text name="GroupLabel">
+		Groupe :
+	</text>
+	<check_box label="Partager" name="share_with_group"/>
+	<text name="AnyoneLabel">
+		N&apos;importe qui :
+	</text>
+	<check_box label="Copier" name="everyone_copy"/>
+	<text name="NextOwnerLabel">
+		Le prochain propriétaire :
+	</text>
+	<check_box label="Modifier" name="next_owner_modify"/>
+	<check_box label="Copier" name="next_owner_copy"/>
+	<check_box initial_value="true" label="Transférer" name="next_owner_transfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet"/>
+	<button label="OK" name="apply"/>
+	<button label="Annuler" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_object.xml b/indra/newview/skins/default/xui/fr/floater_buy_object.xml
index 893d559e6e8..86b67ad491d 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_object.xml
@@ -1,26 +1,26 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="ACHETER UNE COPIE DE L&apos;OBJET">
-	<text name="contents_text">
-		et ses contenus :
-	</text>
-	<text name="buy_text">
-		Acheter pour [AMOUNT] L$ à [NAME] ?
-	</text>
-	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
-	<button label="Acheter" label_selected="Acheter" name="buy_btn"/>
-	<string name="title_buy_text">
-		Acheter
-	</string>
-	<string name="title_buy_copy_text">
-		Acheter une copie
-	</string>
-	<string name="no_copy_text">
-		(pas de copie)
-	</string>
-	<string name="no_modify_text">
-		(pas de modification)
-	</string>
-	<string name="no_transfer_text">
-		(pas de transfert)
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="contents" title="ACHETER UNE COPIE DE L&apos;OBJET">
+	<text name="contents_text">
+		Contient :
+	</text>
+	<text name="buy_text">
+		Acheter pour [AMOUNT] L$ à [NAME] ?
+	</text>
+	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
+	<button label="Acheter" label_selected="Acheter" name="buy_btn"/>
+	<string name="title_buy_text">
+		Acheter
+	</string>
+	<string name="title_buy_copy_text">
+		Acheter une copie
+	</string>
+	<string name="no_copy_text">
+		(pas de copie)
+	</string>
+	<string name="no_modify_text">
+		(pas de modification)
+	</string>
+	<string name="no_transfer_text">
+		(pas de transfert)
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_camera.xml b/indra/newview/skins/default/xui/fr/floater_camera.xml
index 8ea640853f2..2fc01b9f171 100644
--- a/indra/newview/skins/default/xui/fr/floater_camera.xml
+++ b/indra/newview/skins/default/xui/fr/floater_camera.xml
@@ -1,16 +1,23 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="camera_floater">
-	<floater.string name="rotate_tooltip">
-		Faire tourner la caméra autour du point central
-	</floater.string>
-	<floater.string name="zoom_tooltip">
-		Zoomer en direction du point central
-	</floater.string>
-	<floater.string name="move_tooltip">
-		Déplacer la caméra vers le haut et le bas, la gauche et la droite
-	</floater.string>
-	<panel name="controls">
-		<joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut et le bas, la gauche et la droite"/>
-		<joystick_zoom name="zoom" tool_tip="Zoomer en direction du point central"/>
-	</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater">
+	<floater.string name="rotate_tooltip">
+		Faire tourner la caméra autour du point central
+	</floater.string>
+	<floater.string name="zoom_tooltip">
+		Zoomer en direction du point central
+	</floater.string>
+	<floater.string name="move_tooltip">
+		Déplacer la caméra vers le haut et le bas, la gauche et la droite
+	</floater.string>
+	<panel name="controls">
+		<joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut et le bas, la gauche et la droite"/>
+		<joystick_zoom name="zoom" tool_tip="Zoomer en direction du point central"/>
+		<joystick_rotate name="cam_rotate_stick" tool_tip="Faire tourner la caméra autour du point central"/>
+	</panel>
+	<panel name="buttons">
+		<button label="" name="orbit_btn" tool_tip="Faire tourner la caméra"/>
+		<button label="" name="pan_btn" tool_tip="Vue panoramique"/>
+		<button label="" name="avatarview_btn" tool_tip="Vue subjective"/>
+		<button label="" name="freecamera_btn" tool_tip="Voir l&apos;objet"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_color_picker.xml b/indra/newview/skins/default/xui/fr/floater_color_picker.xml
index 996f3e9b073..111e4d3e5e1 100644
--- a/indra/newview/skins/default/xui/fr/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/fr/floater_color_picker.xml
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="ColorPicker" title="CHOIX DE TEXTURE ET DE COULEUR">
-	<text name="r_val_text">
-		Rouge :
-	</text>
-	<text name="g_val_text">
-		Vert :
-	</text>
-	<text name="b_val_text">
-		Bleu :
-	</text>
-	<text name="h_val_text">
-		Teinte :
-	</text>
-	<text name="s_val_text">
-		Sat :
-	</text>
-	<text name="l_val_text">
-		Lum :
-	</text>
-	<check_box label="Application auto" left="4" name="apply_immediate" width="108"/>
-	<button label="" label_selected="" left_delta="138" name="color_pipette"/>
-	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
-	<button label="Sélectionner" label_selected="Sélectionner" name="select_btn"/>
-	<text left="8" name="Current color:">
-		Couleur actuelle :
-	</text>
-	<text left="8" name="(Drag below to save.)" width="114">
-		(Faire glisser dessous
-pour enregistrer)
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ColorPicker" title="CHOIX DE TEXTURE ET DE COULEUR">
+	<text name="r_val_text">
+		Rouge :
+	</text>
+	<text name="g_val_text">
+		Vert :
+	</text>
+	<text name="b_val_text">
+		Bleu :
+	</text>
+	<text name="h_val_text">
+		Teinte :
+	</text>
+	<text name="s_val_text">
+		Sat :
+	</text>
+	<text name="l_val_text">
+		Lum :
+	</text>
+	<check_box label="Appliquer maintenant" left="4" name="apply_immediate" width="108"/>
+	<button label="" label_selected="" left_delta="138" name="color_pipette"/>
+	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
+	<button label="OK" label_selected="Sélectionner" name="select_btn"/>
+	<text left="8" name="Current color:">
+		Couleur actuelle :
+	</text>
+	<text left="8" name="(Drag below to save.)" width="114">
+		(Faire glisser dessous
+pour enregistrer)
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_god_tools.xml b/indra/newview/skins/default/xui/fr/floater_god_tools.xml
index 33cb43f7ac7..f670fa9965e 100644
--- a/indra/newview/skins/default/xui/fr/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_god_tools.xml
@@ -1,99 +1,106 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="godtools floater" title="OUTILS DIVINS">
-	<tab_container name="GodTools Tabs">
-		<panel label="Grille" name="grid">
-			<button label="Éjecter tous" label_selected="Éjecter tous" name="Kick all users" width="175" />
-			<button label="Vider le cache cartographique de la région" label_selected="Vider le cache cartographique de la région" name="Flush This Region&apos;s Map Visibility Caches" width="285"/>
-		</panel>
-		<panel label="Région" name="region">
-			<text name="Sim Name:" width="70">
-				Nom du sim :
-			</text>
-			<line_editor left="85" name="region name" width="198" />
-			<check_box label="Initiation" name="check prelude" tool_tip="Définir cette région comme zone d&apos;initiation."/>
-			<check_box label="Soleil fixe" name="check fixed sun" tool_tip="Définir la position du soleil (comme dans Région et Domaine &gt; Terrain.)"/>
-			<check_box label="Réinitialiser le domicile &#10;à la téléportation" name="check reset home" tool_tip="Lorsqu&apos;un résident se téléporte à l&apos;extérieur, réinitialise son domicile à la position de sa destination."  height="32"/>
-			<check_box label="Visible" name="check visible" tool_tip="Cochez pour rendre la région visible aux non-admins."  bottom_delta="-32"/>
-			<check_box label="Dégâts" name="check damage" tool_tip="Cochez pour activer les dégâts dans cette région."/>
-			<check_box label="Bloquer le suivi de trafic" name="block dwell" tool_tip="Cochez pour que la région ne comptabilise pas le trafic."/>
-			<check_box label="Interdire le terraformage" name="block terraform" tool_tip="Cochez pour empêcher les personnes de terraformer leur terrain"/>
-			<check_box label="Bac à sable" name="is sandbox" tool_tip="Basculer cette région en bac à sable."/>
-			<button label="Figer le terrain" label_selected="Figer le terrain" name="Bake Terrain" tool_tip="Enregistrer le terrain actuel comme terrain par défaut." width="118" />
-			<button label="Rétablir le terrain" label_selected="Rétablir le terrain" name="Revert Terrain" tool_tip="Remplacer le terrain actuel avec le terrain par défaut." width="118" />
-			<button label="Échanger le terrain" label_selected="Échanger le terrain" name="Swap Terrain" tool_tip="Échangez le terrain actuel avec le terrain par défaut." width="118" />
-			<text name="estate id">
-				ID du domaine :
-			</text>
-			<text name="parent id">
-				ID parent :
-			</text>
-			<line_editor name="parentestate" tool_tip="Il s&apos;agit du domaine parent de cette région"/>
-			<text name="Grid Pos: ">
-				Position sur la grille :
-			</text>
-			<line_editor name="gridposx" tool_tip="Position x de cette région sur la grille" left_delta="120" width="35"/>
-			<line_editor name="gridposy" tool_tip="Position y de cette région sur la grille" left_delta="40" width="35" />
-			<text name="Redirect to Grid: ">
-				Rediriger vers la grille :
-			</text>
-			<line_editor left_delta="120" name="redirectx" width="35" />
-			<line_editor left_delta="40" name="redirecty" width="35" />
-			<spinner left="320" name="billable factor" width="70" />
-			<text name="billable factor text" font="SansSerifSmall" left_delta="-120" width="120">
-				Facteur de facturation :
-			</text>
-			<spinner left="320" name="land cost" width="70" />
-			<text name="land cost text" left_delta="-120">
-				L$ par m² :
-			</text>
-			<button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh" tool_tip="Cliquez ici pour rafraîchir les informations ci-dessus."/>
-			<button label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus."/>
-			<button label="Sélectionner une région" label_selected="Sélectionner une région" name="Select Region" tool_tip="Sélectionnez une région entière à l&apos;aide de l&apos;outil Terrain."  width="140" left="136"/>
-			<button label="Sauvegarde automatique" label_selected="Sauvegarde automatique" name="Autosave now" tool_tip="Sauvegarde automatique au format gzip." width="140" left="136"/>
-		</panel>
-		<panel label="Objets" name="objects">
-			<text name="Sim Name:" width="70">
-				Nom du sim :
-			</text>
-			<text name="region name" left_delta="75">
-				Welsh
-			</text>
-			<check_box label="Désactiver les &#10;scripts" name="disable scripts" tool_tip="Cochez pour désactiver tous les scripts dans cette région"/>
-			<check_box label="Désactiver les &#10;collisions" name="disable collisions" tool_tip="Cochez pour désactiver les collisions entre non-avatars dans cette région"/>
-			<check_box label="Désactiver la &#10;physique" name="disable physics" tool_tip="Cochez pour désactiver tous les effets liés à la physique dans cette région"/>
-			<button label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus."  bottom="-85"/>
-			<button label="Définir la cible" label_selected="Définir la cible" name="Set Target" tool_tip="Définir l&apos;avatar cible pour la suppression de l&apos;objet."/>
-			<text name="target_avatar_name">
-				(aucune cible)
-			</text>
-			<button label="Supprimer tous les objets scriptés de la cible sur les terrains des autres" label_selected="Supprimer tous les objets scriptés de la cible sur les terrains des autres" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="Supprimer tous les objets scriptés appartenant à la cible sur les terrains ne lui appartenant pas. Les objets non copiables seront renvoyés."/>
-			<button label="Supprimer les objets scriptés de la cible sur *tous* les terrains" label_selected="Supprimer les objets scriptés de la cible sur *tous* les terrains" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Supprimer les objets scriptés appartenant à la cible dans cette région. Les objets non copiables seront renvoyés."/>
-			<button label="Supprimer *tous* les objets de la cible" label_selected="Supprimer *tous* les objets de la cible" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="Supprimer tous les objets appartenant à la cible dans cette région. Les objets non copiables seront renvoyés."/>
-			<button width="300" label="Afficher les collisions les plus consommatrices" label_selected="Afficher les collisions les plus consommatrices" name="Get Top Colliders" tool_tip="Dresse une liste des objets avec les callbacks les plus fréquents. "/>
-			<button width="300" label="Afficher les objets scriptés les plus consommateurs" label_selected="Afficher les objets scriptés les plus consommateurs" name="Get Top Scripts" tool_tip="Dresse une liste des objets qui passent le plus de temps à exécuter des scripts."/>
-			<button width="300" label="Résumé des scripts" label_selected="Résumé des scripts" name="Scripts digest" tool_tip="Dresse une liste des scripts et de leurs occurrences."/>
-		</panel>
-		<panel label="Requête" name="request">
-			<text name="Destination:">
-				Destination :
-			</text>
-			<combo_box name="destination">
-				<combo_box.item name="item1" label="Sélection" />
-				<combo_box.item name="item2" label="Région de l&apos;avatar" />
-			</combo_box>
-			<text name="Request:">
-				Requête :
-			</text>
-			<combo_box name="request">
-				<combo_box.item name="item1" label="Objets responsables de collisions : étapes" />
-				<combo_box.item name="item2" label="Nombre de scripts et schéma optionnel" />
-				<combo_box.item name="item3" label="Schéma des objets" />
-				<combo_box.item name="item4" label="rezzer &lt;asset_id&gt;" />
-			</combo_box>
-			<text name="Parameter:">
-				Paramètre :
-			</text>
-			<button label="Effectuer la requête" label_selected="Effectuer la requête" name="Make Request" width="140"/>
-		</panel>
-	</tab_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="godtools floater" title="OUTILS DIVINS">
+	<tab_container name="GodTools Tabs">
+		<panel label="Grille" name="grid">
+			<button label="Éjecter tous" label_selected="Éjecter tous" name="Kick all users" width="175"/>
+			<button label="Vider le cache cartographique de la région" label_selected="Vider le cache cartographique de la région" name="Flush This Region&apos;s Map Visibility Caches" width="285"/>
+		</panel>
+		<panel label="Région" name="region">
+			<text name="Sim Name:" width="70">
+				Nom du sim :
+			</text>
+			<line_editor left="85" name="region name" width="198"/>
+			<check_box label="Initiation" name="check prelude" tool_tip="Définir cette région comme zone d&apos;initiation."/>
+			<check_box label="Soleil fixe" name="check fixed sun" tool_tip="Définir la position du soleil (comme dans Région et Domaine &gt; Terrain.)"/>
+			<check_box height="32" label="Réinitialiser le domicile 
+à la téléportation" name="check reset home" tool_tip="Lorsqu&apos;un résident se téléporte à l&apos;extérieur, réinitialise son domicile à la position de sa destination."/>
+			<check_box bottom_delta="-32" label="Visible" name="check visible" tool_tip="Cochez pour rendre la région visible aux non-admins."/>
+			<check_box label="Dégâts" name="check damage" tool_tip="Cochez pour activer les dégâts dans cette région."/>
+			<check_box label="Bloquer le suivi de trafic" name="block dwell" tool_tip="Cochez pour que la région ne comptabilise pas le trafic."/>
+			<check_box label="Interdire le terraformage" name="block terraform" tool_tip="Cochez pour empêcher les personnes de terraformer leur terrain"/>
+			<check_box label="Bac à sable" name="is sandbox" tool_tip="Basculer cette région en bac à sable."/>
+			<button label="Figer le terrain" label_selected="Figer le terrain" name="Bake Terrain" tool_tip="Enregistrer le terrain actuel comme terrain par défaut." width="118"/>
+			<button label="Rétablir le terrain" label_selected="Rétablir le terrain" name="Revert Terrain" tool_tip="Remplacer le terrain actuel avec le terrain par défaut." width="118"/>
+			<button label="Échanger le terrain" label_selected="Échanger le terrain" name="Swap Terrain" tool_tip="Échangez le terrain actuel avec le terrain par défaut." width="118"/>
+			<text name="estate id">
+				ID du domaine :
+			</text>
+			<text name="parent id">
+				ID parent :
+			</text>
+			<line_editor name="parentestate" tool_tip="Il s&apos;agit du domaine parent de cette région"/>
+			<text name="Grid Pos: ">
+				Position sur la grille :
+			</text>
+			<line_editor left_delta="120" name="gridposx" tool_tip="Position x de cette région sur la grille" width="35"/>
+			<line_editor left_delta="40" name="gridposy" tool_tip="Position y de cette région sur la grille" width="35"/>
+			<text name="Redirect to Grid: ">
+				Rediriger vers la grille :
+			</text>
+			<line_editor left_delta="120" name="redirectx" width="35"/>
+			<line_editor left_delta="40" name="redirecty" width="35"/>
+			<text font="SansSerifSmall" left_delta="-120" name="billable factor text" width="120">
+				Facteur de facturation :
+			</text>
+			<spinner left="320" name="billable factor" width="70"/>
+			<text left_delta="-120" name="land cost text">
+				L$ par m² :
+			</text>
+			<spinner left="320" name="land cost" width="70"/>
+			<button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh" tool_tip="Cliquez ici pour rafraîchir les informations ci-dessus."/>
+			<button label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus."/>
+			<button label="Sélectionner une région" label_selected="Sélectionner une région" left="136" name="Select Region" tool_tip="Sélectionnez une région entière à l&apos;aide de l&apos;outil Terrain." width="140"/>
+			<button label="Sauvegarde automatique" label_selected="Sauvegarde automatique" left="136" name="Autosave now" tool_tip="Sauvegarde automatique au format gzip." width="140"/>
+		</panel>
+		<panel label="Objets" name="objects">
+			<panel.string name="no_target">
+				(aucune cible)
+			</panel.string>
+			<text name="Sim Name:" width="70">
+				Nom du sim :
+			</text>
+			<text left_delta="75" name="region name">
+				Welsh
+			</text>
+			<check_box label="Désactiver les 
+scripts" name="disable scripts" tool_tip="Cochez pour désactiver tous les scripts dans cette région"/>
+			<check_box label="Désactiver les 
+collisions" name="disable collisions" tool_tip="Cochez pour désactiver les collisions entre non-avatars dans cette région"/>
+			<check_box label="Désactiver la 
+physique" name="disable physics" tool_tip="Cochez pour désactiver tous les effets liés à la physique dans cette région"/>
+			<button bottom="-85" label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus."/>
+			<button label="Définir la cible" label_selected="Définir la cible" name="Set Target" tool_tip="Définir l&apos;avatar cible pour la suppression de l&apos;objet."/>
+			<text name="target_avatar_name">
+				(aucune cible)
+			</text>
+			<button label="Supprimer tous les objets scriptés de la cible sur les terrains des autres" label_selected="Supprimer tous les objets scriptés de la cible sur les terrains des autres" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="Supprimer tous les objets scriptés appartenant à la cible sur les terrains ne lui appartenant pas. Les objets non copiables seront renvoyés."/>
+			<button label="Supprimer les objets scriptés de la cible sur *tous* les terrains" label_selected="Supprimer les objets scriptés de la cible sur *tous* les terrains" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Supprimer les objets scriptés appartenant à la cible dans cette région. Les objets non copiables seront renvoyés."/>
+			<button label="Supprimer *tous* les objets de la cible" label_selected="Supprimer *tous* les objets de la cible" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="Supprimer tous les objets appartenant à la cible dans cette région. Les objets non copiables seront renvoyés."/>
+			<button label="Afficher les collisions les plus consommatrices" label_selected="Afficher les collisions les plus consommatrices" name="Get Top Colliders" tool_tip="Dresse une liste des objets avec les callbacks les plus fréquents. " width="300"/>
+			<button label="Afficher les objets scriptés les plus consommateurs" label_selected="Afficher les objets scriptés les plus consommateurs" name="Get Top Scripts" tool_tip="Dresse une liste des objets qui passent le plus de temps à exécuter des scripts." width="300"/>
+			<button label="Résumé des scripts" label_selected="Résumé des scripts" name="Scripts digest" tool_tip="Dresse une liste des scripts et de leurs occurrences." width="300"/>
+		</panel>
+		<panel label="Requête" name="request">
+			<text name="Destination:">
+				Destination :
+			</text>
+			<combo_box name="destination">
+				<combo_box.item label="Sélection" name="item1"/>
+				<combo_box.item label="Région de l&apos;avatar" name="item2"/>
+			</combo_box>
+			<text name="Request:">
+				Requête :
+			</text>
+			<combo_box name="request">
+				<combo_box.item label="Objets responsables de collisions : étapes" name="item1"/>
+				<combo_box.item label="Nombre de scripts et schéma optionnel" name="item2"/>
+				<combo_box.item label="Schéma des objets" name="item3"/>
+				<combo_box.item label="rezzer &lt;asset_id&gt;" name="item4"/>
+			</combo_box>
+			<text name="Parameter:">
+				Paramètre :
+			</text>
+			<button label="Effectuer la requête" label_selected="Effectuer la requête" name="Make Request" width="140"/>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
index 6c1ea09c903..018c0d81cf2 100644
--- a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Hardware Settings Floater" title="CONFIGURATION DU MATÉRIEL">
-	<text name="Filtering:">
-		Filtres :
-	</text>
-	<check_box label="Filtre anisotrope (plus lent si activé)" name="ani"/>
-	<text name="Antialiasing:">
-		Anti-aliasing :
-	</text>
-	<combo_box label="Anti-aliasing" name="fsaa" width="84">
-		<combo_box.item name="FSAADisabled" label="Désactivé" />
-		<combo_box.item name="2x" label="2x" />
-		<combo_box.item name="4x" label="4x" />
-		<combo_box.item name="8x" label="8x" />
-		<combo_box.item name="16x" label="16x" />
-	</combo_box>
-	<spinner label="Gamma :" name="gamma"/>
-	<text left="217" name="(brightness, lower is brighter)">
-		(0 = défaut, valeur faible = plus lumineux)
-	</text>
-	<text name="Enable VBO:">
-		Activer le VBO :
-	</text>
-	<check_box label="Activer OpenGL Vertex Buffer Objects" name="vbo" tool_tip="Sur un matériel moderne, cette option permet une meilleure performance. Par contre, sur un matériel plus ancien, les VBO sont souvent mal implémentés et peuvent causer des crashs lorsqu&apos;ils sont activés."/>
-	<slider label="Mémoire vidéo (Mo) :" name="GrapicsCardTextureMemory" tool_tip="Total de la mémoire alloué aux textures. Mémoire de la carte vidéo par défaut. En réduisant cette valeur, vous pouvez accroître la performance mais les textures risquent de devenir floues."/>
-	<spinner label="Indice du brouillard :" name="fog"/>
-	<button label="OK" label_selected="OK" name="OK"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Hardware Settings Floater" title="CONFIGURATION DU MATÉRIEL">
+	<text name="Filtering:">
+		Filtres :
+	</text>
+	<check_box label="Filtre anisotrope (plus lent si activé)" name="ani"/>
+	<text name="Antialiasing:">
+		Anti-aliasing :
+	</text>
+	<combo_box label="Anti-aliasing" name="fsaa" width="84">
+		<combo_box.item label="Désactivé" name="FSAADisabled"/>
+		<combo_box.item label="2x" name="2x"/>
+		<combo_box.item label="4x" name="4x"/>
+		<combo_box.item label="8x" name="8x"/>
+		<combo_box.item label="16x" name="16x"/>
+	</combo_box>
+	<spinner label="Gamma :" name="gamma"/>
+	<text left="217" name="(brightness, lower is brighter)">
+		(0 = défaut, valeur faible = plus lumineux)
+	</text>
+	<text name="Enable VBO:">
+		Activer le VBO :
+	</text>
+	<check_box label="Activer OpenGL Vertex Buffer Objects" name="vbo" tool_tip="Sur un matériel moderne, cette option permet une meilleure performance. Par contre, sur un matériel plus ancien, les VBO sont souvent mal implémentés et peuvent causer des crashs lorsqu&apos;ils sont activés."/>
+	<slider label="Mémoire vidéo (Mo) :" name="GrapicsCardTextureMemory" tool_tip="Total de la mémoire alloué aux textures. Mémoire de la carte vidéo par défaut. En réduisant cette valeur, vous pouvez accroître la performance mais les textures risquent de devenir floues."/>
+	<spinner label="Indice du brouillard :" name="fog"/>
+	<button label="OK" label_selected="OK" name="OK"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_image_preview.xml b/indra/newview/skins/default/xui/fr/floater_image_preview.xml
index f12c1fee448..57b60a28bf5 100644
--- a/indra/newview/skins/default/xui/fr/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_image_preview.xml
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Image Preview" title="">
-	<text name="name_label">
-		Nom :
-	</text>
-	<text name="description_label">
-		Description :
-	</text>
-	<text name="preview_label">
-		Prévisualiser comme :
-	</text>
-	<combo_box label="Habits" name="clothing_type_combo" left="126" >
-		<combo_box.item name="Image" label="Image" />
-		<combo_box.item name="Hair" label="Cheveux" />
-		<combo_box.item name="FemaleHead" label="Tête de femme" />
-		<combo_box.item name="FemaleUpperBody" label="Corps de femme (haut)" />
-		<combo_box.item name="FemaleLowerBody" label="Corps de femme (bas)" />
-		<combo_box.item name="MaleHead" label="Tête d&apos;homme" />
-		<combo_box.item name="MaleUpperBody" label="Corps d&apos;homme (haut)" />
-		<combo_box.item name="MaleLowerBody" label="Corps d&apos;homme (bas)" />
-		<combo_box.item name="Skirt" label="Jupe" />
-		<combo_box.item name="SculptedPrim" label="Sculptie" />
-	</combo_box>
-	<text name="bad_image_text">
-		Impossible de lire l&apos;image.
-
-Sauvegardez en Targa 24 bit (.tga).
-	</text>
-	<check_box label="Utiliser une compression sans perte" name="lossless_check"/>
-	<button label="Annuler" name="cancel_btn"/>
-	<button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Image Preview" title="">
+	<text name="name_label">
+		Nom :
+	</text>
+	<text name="description_label">
+		Description :
+	</text>
+	<text name="preview_label">
+		Prévisualiser comme :
+	</text>
+	<combo_box label="Habits" left="126" name="clothing_type_combo">
+		<combo_box.item label="Image" name="Image"/>
+		<combo_box.item label="Cheveux" name="Hair"/>
+		<combo_box.item label="Tête de femme" name="FemaleHead"/>
+		<combo_box.item label="Corps de femme (haut)" name="FemaleUpperBody"/>
+		<combo_box.item label="Corps de femme (bas)" name="FemaleLowerBody"/>
+		<combo_box.item label="Tête d&apos;homme" name="MaleHead"/>
+		<combo_box.item label="Corps d&apos;homme (haut)" name="MaleUpperBody"/>
+		<combo_box.item label="Corps d&apos;homme (bas)" name="MaleLowerBody"/>
+		<combo_box.item label="Jupe" name="Skirt"/>
+		<combo_box.item label="Sculptie" name="SculptedPrim"/>
+	</combo_box>
+	<text name="bad_image_text">
+		Impossible de lire l&apos;image.
+
+Sauvegardez en Targa 24 bit (.tga).
+	</text>
+	<check_box label="Utiliser une compression sans perte" name="lossless_check"/>
+	<button label="Annuler" name="cancel_btn"/>
+	<button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
index 2885a7e316a..2e982305bf2 100644
--- a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
@@ -1,81 +1,67 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="item properties" title="PROPRIÉTÉS DE L&apos;OBJET DE L&apos;INVENTAIRE">
-	<text name="LabelItemNameTitle">
-		Nom :
-	</text>
-	<text name="LabelItemDescTitle">
-		Description :
-	</text>
-	<text name="LabelCreatorTitle">
-		Créateur :
-	</text>
-	<text name="LabelCreatorName">
-		Nicole Linden
-	</text>
-	<button label="Profil..." label_selected="" name="BtnCreator"/>
-	<text name="LabelOwnerTitle">
-		Propriétaire :
-	</text>
-	<text name="LabelOwnerName">
-		Thrax Linden
-	</text>
-	<button label="Profil..." label_selected="" name="BtnOwner"/>
-	<text name="LabelAcquiredTitle">
-		Acquis :
-	</text>
-	<text name="LabelAcquiredDate">
-		Wed May 24 12:50:46 2006
-	</text>
-	<text name="OwnerLabel">
-		Vous pouvez :
-	</text>
-	<check_box label="Modifier" name="CheckOwnerModify"/>
-	<check_box label="Copier" name="CheckOwnerCopy"/>
-	<check_box label="Revendre/Donner" name="CheckOwnerTransfer"/>
-	<text name="BaseMaskDebug">
-		B :
-	</text>
-	<text name="OwnerMaskDebug">
-		O :
-	</text>
-	<text name="GroupMaskDebug">
-		G :
-	</text>
-	<text name="EveryoneMaskDebug">
-		E :
-	</text>
-	<text name="NextMaskDebug">
-		N :
-	</text>
-	<check_box label="Partager avec le groupe" name="CheckShareWithGroup"/>
-	<check_box label="Autoriser tout le monde à copier" name="CheckEveryoneCopy"/>
-	<text name="NextOwnerLabel" width="192">
-		Le prochain propriétaire pourra :
-	</text>
-	<check_box label="Modifier" name="CheckNextOwnerModify"/>
-	<check_box label="Copier" name="CheckNextOwnerCopy"/>
-	<check_box label="Revendre/Donner" name="CheckNextOwnerTransfer"/>
-	<text name="SaleLabel">
-		Marquer l&apos;objet :
-	</text>
-	<check_box label="À vendre" name="CheckPurchase"/>
-	<radio_group name="RadioSaleType">
-		<radio_item name="radio" label="Original" />
-		<radio_item name="radio2" label="Copie" />
-	</radio_group>
-	<text name="TextPrice">
-		Prix :  L$
-	</text>
-	<string name="unknown">
-		(inconnu)
-	</string>
-	<string name="public">
-		(public)
-	</string>
-	<string name="you_can">
-		Vous pouvez :
-	</string>
-	<string name="owner_can">
-		Le propriétaire peut :
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="item properties" title="PROPRIÉTÉS DE L&apos;OBJET DE L&apos;INVENTAIRE">
+	<floater.string name="unknown">
+		(inconnu)
+	</floater.string>
+	<floater.string name="public">
+		(public)
+	</floater.string>
+	<floater.string name="you_can">
+		Vous pouvez :
+	</floater.string>
+	<floater.string name="owner_can">
+		Le propriétaire peut :
+	</floater.string>
+	<text name="LabelItemNameTitle">
+		Nom :
+	</text>
+	<text name="LabelItemDescTitle">
+		Description :
+	</text>
+	<text name="LabelCreatorTitle">
+		Créateur :
+	</text>
+	<text name="LabelCreatorName">
+		Nicole Linden
+	</text>
+	<button label="Profil..." label_selected="" name="BtnCreator"/>
+	<text name="LabelOwnerTitle">
+		Propriétaire :
+	</text>
+	<text name="LabelOwnerName">
+		Thrax Linden
+	</text>
+	<button label="Profil..." label_selected="" name="BtnOwner"/>
+	<text name="LabelAcquiredTitle">
+		Acquis :
+	</text>
+	<text name="LabelAcquiredDate">
+		Wed May 24 12:50:46 2006
+	</text>
+	<text name="OwnerLabel">
+		Vous :
+	</text>
+	<check_box label="Éditer" name="CheckOwnerModify"/>
+	<check_box label="Copier" name="CheckOwnerCopy"/>
+	<check_box label="Revendre" name="CheckOwnerTransfer"/>
+	<text name="AnyoneLabel">
+		N&apos;importe qui :
+	</text>
+	<check_box label="Copier" name="CheckEveryoneCopy"/>
+	<text name="GroupLabel">
+		Groupe :
+	</text>
+	<check_box label="Partager" name="CheckShareWithGroup"/>
+	<text name="NextOwnerLabel" width="192">
+		Le prochain propriétaire :
+	</text>
+	<check_box label="Éditer" name="CheckNextOwnerModify"/>
+	<check_box label="Copier" name="CheckNextOwnerCopy"/>
+	<check_box label="Revendre" name="CheckNextOwnerTransfer"/>
+	<check_box label="À vendre" name="CheckPurchase"/>
+	<combo_box name="combobox sale copy">
+		<combo_box.item label="Copier" name="Copy"/>
+		<combo_box.item label="Original" name="Original"/>
+	</combo_box>
+	<spinner label="Prix : L$" name="Edit Cost"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_land_holdings.xml b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
index 17adafa8d9f..87fe2a8352e 100644
--- a/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="MES TERRAINS">
-	<scroll_list name="parcel list">
-		<column label="Nom de la parcelle" name="name"/>
-		<column label="Région" name="location"/>
-		<column label="Type" name="type"/>
-		<column label="Surface" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="Téléporter" label_selected="Téléporter" name="Teleport" tool_tip="Téléportez-vous au milieu de ce terrain."/>
-	<button label="Voir sur la carte" label_selected="Voir sur la carte" name="Show on Map" tool_tip="Affichez ce terrain sur la carte du monde."/>
-	<text name="contrib_label">
-		Vos contributions :
-	</text>
-	<scroll_list name="grant list">
-		<column label="Groupe" name="group"/>
-		<column label="Surface" name="area"/>
-	</scroll_list>
-	<text name="allowed_label">
-		Surface de terrain autorisée avec votre compte :
-	</text>
-	<text name="allowed_text">
-		[AREA] m²
-	</text>
-	<text name="current_label">
-		Surface occupée actuellement :
-	</text>
-	<text name="current_text">
-		[AREA] m²
-	</text>
-	<text name="available_label">
-		Disponible à l&apos;achat :
-	</text>
-	<text name="available_text">
-		[AREA] m²
-	</text>
-	<string name="area_string">
-		[AREA] m²
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="land holdings floater" title="MES TERRAINS">
+	<scroll_list name="parcel list">
+		<column label="Parcelle" name="name"/>
+		<column label="Région" name="location"/>
+		<column label="Type" name="type"/>
+		<column label="Surface" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="Téléporter" label_selected="Téléporter" name="Teleport" tool_tip="Téléportez-vous au milieu de ce terrain."/>
+	<button label="Carte" label_selected="Carte" name="Show on Map" tool_tip="Affichez ce terrain sur la carte du monde."/>
+	<text name="contrib_label">
+		Vos contributions :
+	</text>
+	<scroll_list name="grant list">
+		<column label="Groupe" name="group"/>
+		<column label="Surface" name="area"/>
+	</scroll_list>
+	<text name="allowed_label">
+		Surface de terrain autorisée avec votre compte :
+	</text>
+	<text name="allowed_text">
+		[AREA] m²
+	</text>
+	<text name="current_label">
+		Surface occupée actuellement :
+	</text>
+	<text name="current_text">
+		[AREA] m²
+	</text>
+	<text name="available_label">
+		Disponible à l&apos;achat :
+	</text>
+	<text name="available_text">
+		[AREA] m²
+	</text>
+	<string name="area_string">
+		[AREA] m²
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
index 76db22cea43..4879327acee 100644
--- a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
@@ -1,12 +1,15 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="SCRIPT : NOUVEAU SCRIPT">
-	<button label="Réinitialiser" label_selected="Réinitialiser" name="Reset" width="100" left="390"/>
-	<check_box label="Exécution en cours" name="running" left="4"/>
-	<check_box label="Mono" name="mono" left="130"/>
-	<string name="not_allowed">
-		Vous n&apos;êtes pas autorisé à afficher ce script.
-	</string>
-	<string name="script_running">
-		Exécution en cours
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script ed float" title="SCRIPT : NOUVEAU SCRIPT">
+	<floater.string name="not_allowed">
+		Ce scipt ne peut pas être copié, visualisé ou modifié.  Pour visualiser ou modifier un script à l&apos;intérieur d&apos;un objet, vous devez avoir les permissions requises.
+	</floater.string>
+	<floater.string name="script_running">
+		Exécution en cours
+	</floater.string>
+	<floater.string name="Title">
+		Script : [NAME]
+	</floater.string>
+	<button label="Réinitialiser" label_selected="Réinitialiser" left="390" name="Reset" width="100"/>
+	<check_box initial_value="true" label="Exécution en cours" left="4" name="running"/>
+	<check_box initial_value="true" label="Mono" left="130" name="mono"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_map.xml b/indra/newview/skins/default/xui/fr/floater_map.xml
index ec4bd4ef4ad..de5b707ee49 100644
--- a/indra/newview/skins/default/xui/fr/floater_map.xml
+++ b/indra/newview/skins/default/xui/fr/floater_map.xml
@@ -1,51 +1,54 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map">
-	<floater.string name="mini_map_north">
-		N
-	</floater.string>
-	<floater.string name="mini_map_east">
-		E
-	</floater.string>
-	<floater.string name="mini_map_west">
-		O
-	</floater.string>
-	<floater.string name="mini_map_south">
-		S
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		SE
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		NE
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		SO
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		NO
-	</floater.string>
-	<text label="N" name="floater_map_north" text="N">
-		N
-	</text>
-	<text label="E" name="floater_map_east" text="E">
-		E
-	</text>
-	<text label="O" name="floater_map_west" text="O">
-		O
-	</text>
-	<text label="S" name="floater_map_south" text="S">
-		S
-	</text>
-	<text label="SE" name="floater_map_southeast" text="SE">
-		SE
-	</text>
-	<text label="NE" name="floater_map_northeast" text="NE">
-		NE
-	</text>
-	<text label="SO" name="floater_map_southwest" text="SO">
-		SO
-	</text>
-	<text label="NO" name="floater_map_northwest" text="NO">
-		NO
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+	<floater.string name="mini_map_north">
+		N
+	</floater.string>
+	<floater.string name="mini_map_east">
+		E
+	</floater.string>
+	<floater.string name="mini_map_west">
+		O
+	</floater.string>
+	<floater.string name="mini_map_south">
+		S
+	</floater.string>
+	<floater.string name="mini_map_southeast">
+		SE
+	</floater.string>
+	<floater.string name="mini_map_northeast">
+		NE
+	</floater.string>
+	<floater.string name="mini_map_southwest">
+		SO
+	</floater.string>
+	<floater.string name="mini_map_northwest">
+		NO
+	</floater.string>
+	<floater.string name="ToolTipMsg">
+		[AGENT][REGION](Double-cliquez pour ouvrir la carte)
+	</floater.string>
+	<text label="N" name="floater_map_north" text="N">
+		N
+	</text>
+	<text label="E" name="floater_map_east" text="E">
+		E
+	</text>
+	<text label="O" name="floater_map_west" text="O">
+		O
+	</text>
+	<text label="S" name="floater_map_south" text="S">
+		S
+	</text>
+	<text label="SE" name="floater_map_southeast" text="SE">
+		SE
+	</text>
+	<text label="NE" name="floater_map_northeast" text="NE">
+		NE
+	</text>
+	<text label="SO" name="floater_map_southwest" text="SO">
+		SO
+	</text>
+	<text label="NO" name="floater_map_northwest" text="NO">
+		NO
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_media_browser.xml b/indra/newview/skins/default/xui/fr/floater_media_browser.xml
index 5a787a6bf9d..377b80f847d 100644
--- a/indra/newview/skins/default/xui/fr/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/fr/floater_media_browser.xml
@@ -1,20 +1,31 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="NAVIGATEUR">
-	<layout_stack name="stack1">
-		<layout_panel name="nav_controls">
-			<button label="Précédente" name="back" width="75"/>
-			<button label="Suivante" left_delta="75" name="forward" width="70"/>
-			<button label="Rafraîchir" left_delta="75" name="reload"/>
-			<combo_box left_delta="75" name="address" width="510"/>
-			<button label="OK" left_delta="515" name="go"/>
-		</layout_panel>
-		<layout_panel name="parcel_owner_controls">
-			<button label="Envoyer l&apos;URL sur la parcelle" name="assign"/>
-		</layout_panel>
-		<layout_panel name="external_controls">
-			<button label="Ouvrir dans mon navigateur web" name="open_browser" width="196"/>
-			<check_box label="Toujours ouvrir dans mon navigateur web" left_delta="201" name="open_always"/>
-			<button label="Fermer" name="close"/>
-		</layout_panel>
-	</layout_stack>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="NAVIGATEUR">
+	<floater.string name="home_page_url">
+		http://www.secondlife.com
+	</floater.string>
+	<floater.string name="support_page_url">
+		http://support.secondlife.com
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button label="Précédente" name="back" width="75"/>
+			<button label="Suivante" left_delta="75" name="forward" width="70"/>
+			<button label="Rafraîchir" left_delta="75" name="reload"/>
+			<combo_box left_delta="75" name="address" width="510"/>
+			<button label="OK" left_delta="515" name="go"/>
+		</layout_panel>
+		<layout_panel name="time_controls">
+			<button label="en arrière" name="rewind"/>
+			<button label="stop" name="stop"/>
+			<button label="en avant" name="seek"/>
+		</layout_panel>
+		<layout_panel name="parcel_owner_controls">
+			<button label="Envoyer l&apos;URL sur la parcelle" name="assign"/>
+		</layout_panel>
+		<layout_panel name="external_controls">
+			<button label="Ouvrir dans mon navigateur web" name="open_browser" width="196"/>
+			<check_box label="Toujours ouvrir dans mon navigateur web" left_delta="201" name="open_always"/>
+			<button label="Fermer" name="close"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
index e62aad6cd38..aadf16ab8ae 100644
--- a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
@@ -1,18 +1,18 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="SIMULATION FUITE MÉMOIRE">
-	<spinner label="Vitesse de la fuite (octets) :" name="leak_speed" />
-	<spinner label="Max mémoire perdue (Mo) :" name="max_leak" />
-	<text name="total_leaked_label">
-		Mémoire perdue actuelle : [SIZE] Ko
-	</text>
-	<text name="note_label_1">
-		[NOTE1]
-	</text>
-	<text name="note_label_2">
-		[NOTE2]
-	</text>
-	<button label="Commencer" name="start_btn" width="85"/>
-	<button label="Stop" name="stop_btn" left="100"/>
-	<button label="Libérer" name="release_btn"  left="177"/>
-	<button label="Fermer" name="close_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="MemLeak" title="Simuler une fuite de mémoire">
+	<spinner label="Vitesse de la fuite (octets) :" name="leak_speed"/>
+	<spinner label="Max mémoire perdue (Mo) :" name="max_leak"/>
+	<text name="total_leaked_label">
+		Mémoire perdue actuelle : [SIZE] Ko
+	</text>
+	<text name="note_label_1">
+		[NOTE1]
+	</text>
+	<text name="note_label_2">
+		[NOTE2]
+	</text>
+	<button label="Commencer" name="start_btn" width="85"/>
+	<button label="Stop" left="100" name="stop_btn"/>
+	<button label="Libérer" left="177" name="release_btn"/>
+	<button label="Fermer" name="close_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_moveview.xml b/indra/newview/skins/default/xui/fr/floater_moveview.xml
index e59f09cba1c..7e7dc53c6c8 100644
--- a/indra/newview/skins/default/xui/fr/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_moveview.xml
@@ -1,14 +1,35 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="move_floater">
-<panel name="panel_actions">
-	<button label="" label_selected="" name="turn left btn" tool_tip="Tourner à gauche"/>
-	<button label="" label_selected="" name="turn right btn" tool_tip="Tourner à droite"/>
-	<button label="" label_selected="" name="move up btn" tool_tip="Sauter ou voler vers le haut"/>
-	<button label="" label_selected="" name="move down btn" tool_tip="S&apos;accroupir ou voler vers le bas"/>
-	<button label="Voler" label_selected="Voler" name="fly btn" tool_tip="Démarrer/arrêter le vol"/>
-	<joystick_slide name="slide left btn" tool_tip="Se déplacer vers la gauche"/>
-	<joystick_slide name="slide right btn" tool_tip="Se déplacer vers la droite"/>
-	<joystick_turn name="forward btn" tool_tip="Se déplacer vers l&apos;avant"/>
-	<joystick_turn name="backward btn" tool_tip="Se déplacer vers l&apos;arrière"/>
-</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="move_floater">
+	<string name="walk_forward_tooltip">
+		Vous déplacer vers l&apos;avant (appuyer sur la flèche vers le haut ou W)
+	</string>
+	<string name="walk_back_tooltip">
+		Marcher en arrière (appuyer sur la flèche vers le bas ou S)
+	</string>
+	<string name="run_forward_tooltip">
+		Courir vers l&apos;avant (appuyer sur la flèche vers le haut ou W)
+	</string>
+	<string name="run_back_tooltip">
+		Courir en arrière (appuyer sur la flèche vers le bas ou S)
+	</string>
+	<string name="fly_forward_tooltip">
+		Voler vers l&apos;avant (appuyer sur la flèche vers le haut ou W)
+	</string>
+	<string name="fly_back_tooltip">
+		Voler vers l&apos;arrière (appuyer sur la flèche vers le bas ou S)
+	</string>
+	<panel name="panel_actions">
+		<button label="" label_selected="" name="turn left btn" tool_tip="Tourner à gauche (appuyer sur la flèche de gauche ou sur A)"/>
+		<button label="" label_selected="" name="turn right btn" tool_tip="Tourner à droite (appuyer sur la flèche de droite ou sur D)"/>
+		<button label="" label_selected="" name="move up btn" tool_tip="Vous envoler, appuyer sur E"/>
+		<button label="" label_selected="" name="move down btn" tool_tip="Atterrir, appuyer sur C"/>
+		<joystick_turn name="forward btn" tool_tip="Vous déplacer vers l&apos;avant (appuyer sur la flèche vers le haut ou W)"/>
+		<joystick_turn name="backward btn" tool_tip="Marcher en arrière (appuyer sur la flèche vers le bas ou S)"/>
+	</panel>
+	<panel name="panel_modes">
+		<button label="" name="mode_walk_btn" tool_tip="Mode marche"/>
+		<button label="" name="mode_run_btn" tool_tip="Mode courir"/>
+		<button label="" name="mode_fly_btn" tool_tip="Mode voler"/>
+		<button label="Atterrir" name="stop_fly_btn" tool_tip="Atterrir"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_pay.xml b/indra/newview/skins/default/xui/fr/floater_pay.xml
index b66ea79e7b6..5432cb27d0a 100644
--- a/indra/newview/skins/default/xui/fr/floater_pay.xml
+++ b/indra/newview/skins/default/xui/fr/floater_pay.xml
@@ -1,22 +1,20 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Give Money" title="">
-	<button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
-	<button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
-	<button label="10 L$" label_selected="10 L$" name="fastpay 10"/>
-	<button label="20 L$" label_selected="20 L$" name="fastpay 20"/>
-	<button label="Payer" label_selected="Payer" name="pay btn"/>
-	<button label="Annuler" label_selected="Annuler" name="cancel btn"/>
-	<text name="payee_label" left="5">
-		Payer :
-	</text>
-	<text name="payee_name">
-		[FIRST] [LAST]
-	</text>
-	<text name="fastpay text" width="100" halign="left">
-		Paiement rapide :
-	</text>
-	<text left="4" name="amount text">
-		Montant :
-	</text>
-	<line_editor left="60" name="amount" width="55"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+	<text left="5" name="payee_label">
+		Payer :
+	</text>
+	<icon name="icon_person" tool_tip="Résident"/>
+	<text name="payee_name">
+		[FIRST] [LAST]
+	</text>
+	<button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
+	<button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
+	<button label="10 L$" label_selected="10 L$" name="fastpay 10"/>
+	<button label="20 L$" label_selected="20 L$" name="fastpay 20"/>
+	<text left="4" name="amount text">
+		Ou choisissez un montant :
+	</text>
+	<line_editor left="60" name="amount" width="55"/>
+	<button label="Payer" label_selected="Payer" name="pay btn"/>
+	<button label="Annuler" label_selected="Annuler" name="cancel btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_pay_object.xml b/indra/newview/skins/default/xui/fr/floater_pay_object.xml
index 077e6965b61..04511f5ba02 100644
--- a/indra/newview/skins/default/xui/fr/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/fr/floater_pay_object.xml
@@ -1,31 +1,30 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Give Money" title="">
-	<text name="payee_group" width="95">
-		Payer le groupe :
-	</text>
-	<text name="payee_resident" width="100" halign="left" >
-		Payer le résident :
-	</text>
-	<text name="payee_name" left="105">
-		[FIRST] [LAST]
-	</text>
-	<text name="object_name_label" left="25">
-		Via un objet :
-	</text>
-	<text name="object_name_text" left="105">
-		...
-	</text>
-	<text name="fastpay text" width="95">
-		Paiement rapide :
-	</text>
-	<text name="amount text" left="5" halign="left">
-		Montant :
-	</text>
-	<button label="1 L$" label_selected="1 L$" name="fastpay 1" left="105" />
-	<button label="5 L$" label_selected="5 L$" name="fastpay 5" left="190"/>
-	<button label="10 L$" label_selected="10 L$" name="fastpay 10" left="105" />
-	<button label="20 L$" label_selected="20 L$" name="fastpay 20" left="190"/>
-	<button label="Payer" label_selected="Payer" name="pay btn"/>
-	<button label="Annuler" label_selected="Annuler" name="cancel btn"/>
-	<line_editor left="65" name="amount" width="50" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+	<string name="payee_group" width="95">
+		Payer le groupe :
+	</string>
+	<string halign="left" name="payee_resident" width="100">
+		Payer le résident :
+	</string>
+	<icon name="icon_person" tool_tip="Résident"/>
+	<text left="105" name="payee_name">
+		[FIRST] [LAST]
+	</text>
+	<text left="25" name="object_name_label">
+		Via un objet :
+	</text>
+	<icon name="icon_object" tool_tip="Objets"/>
+	<text left="105" name="object_name_text">
+		...
+	</text>
+	<button label="1 L$" label_selected="1 L$" left="105" name="fastpay 1"/>
+	<button label="5 L$" label_selected="5 L$" left="190" name="fastpay 5"/>
+	<button label="10 L$" label_selected="10 L$" left="105" name="fastpay 10"/>
+	<button label="20 L$" label_selected="20 L$" left="190" name="fastpay 20"/>
+	<text halign="left" left="5" name="amount text">
+		Ou choisissez un montant :
+	</text>
+	<line_editor left="65" name="amount" width="50"/>
+	<button label="Payer" label_selected="Payer" name="pay btn"/>
+	<button label="Annuler" label_selected="Annuler" name="cancel btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
index 813e6116217..b7d3eb0a799 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
@@ -1,10 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_anim">
-	<text name="desc txt">
-		Description :
-	</text>
-	<button label="Jouer dans le Monde" label_selected="Stop" name="Anim play btn"
-	     tool_tip="Jouer cette animation et partagez-la avec d&apos;autres." width="131" left="20"/>
-	<button label="Jouer localement" label_selected="Stop" name="Anim audition btn"
-	     tool_tip="Jouer cette animation et soyez le seul à la voir." width="125" left="162"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_anim">
+	<floater.string name="Title">
+		Animation : [NAME]
+	</floater.string>
+	<text name="desc txt">
+		Description :
+	</text>
+	<button label="Jouer dans le Monde" label_selected="Stop" left="20" name="Anim play btn" tool_tip="Jouer cette animation et partagez-la avec d&apos;autres." width="131"/>
+	<button label="Jouer localement" label_selected="Stop" left="162" name="Anim audition btn" tool_tip="Jouer cette animation et soyez le seul à la voir." width="125"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
index 436a386dc8e..a50a4057f8d 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="INFORMATIONS SUR LA PETITE ANNONCE" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="classified_preview" title="INFORMATIONS SUR LA PETITE ANNONCE">
+	<floater.string name="Title">
+		Petite annonce : [NAME]
+	</floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_event.xml b/indra/newview/skins/default/xui/fr/floater_preview_event.xml
index 30eeeec70db..b901751eecf 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_event.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="INFORMATIONS SUR L&apos;ÉVÉNEMENT" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="event_preview" title="INFORMATIONS SUR L&apos;ÉVÉNEMENT">
+	<floater.string name="Title">
+		Événement : [NAME]
+	</floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml
new file mode 100644
index 00000000000..e6a4514460b
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="Raccourci du geste"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml
new file mode 100644
index 00000000000..e6a4514460b
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="Raccourci du geste"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
index ea524422369..1039760623e 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
@@ -1,16 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview notecard" title="REMARQUE :">
-	<button label="Enregistrer" label_selected="Enregistrer" name="Save" />
-	<text name="desc txt">
-		Description :
-	</text>
-	<text_editor name="Notecard Editor">
-		Chargement...
-	</text_editor>
-	<string name="no_object">
-		Impossible de trouver l&apos;objet contenant cette note.
-	</string>
-	<string name="not_allowed">
-		Vous n&apos;êtes pas autorisé à afficher cette note.
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview notecard" title="REMARQUE :">
+	<floater.string name="no_object">
+		Impossible de trouver l&apos;objet contenant cette note.
+	</floater.string>
+	<floater.string name="not_allowed">
+		Vous n&apos;avez pas le droit de voir cette note.
+	</floater.string>
+	<floater.string name="Title">
+		Note : [NAME]
+	</floater.string>
+	<floater.string label="Enregistrer" label_selected="Enregistrer" name="Save">
+		Enregistrer
+	</floater.string>
+	<text name="desc txt">
+		Description :
+	</text>
+	<text_editor name="Notecard Editor">
+		Chargement...
+	</text_editor>
+	<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_sound.xml b/indra/newview/skins/default/xui/fr/floater_preview_sound.xml
index 19ae28c4630..d1729ac8dfe 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_sound.xml
@@ -1,12 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_sound">
-	<text name="desc txt">
-		Description :
-	</text>
-	<button label="Jouer dans le Monde" label_selected="Jouer dans le Monde"
-	     name="Sound play btn"
-	     tool_tip="Jouer ce son et partagez-le avec d&apos;autres." width="131" left_delta="-142"/>
-	<button label="Jouer localement" label_selected="Jouer localement"
-	     name="Sound audition btn"
-	     tool_tip="Jouer ce son et soyez le seul à l&apos;entendre." width="125" left="162"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_sound">
+	<floater.string name="Title">
+		Son : [NAME]
+	</floater.string>
+	<text name="desc txt">
+		Description :
+	</text>
+	<button label="Jouer dans le Monde" label_selected="Jouer dans le Monde" left_delta="-142" name="Sound play btn" tool_tip="Jouer ce son et partagez-le avec d&apos;autres." width="131"/>
+	<button label="Jouer localement" label_selected="Jouer localement" left="162" name="Sound audition btn" tool_tip="Jouer ce son et soyez le seul à l&apos;entendre." width="125"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
index e5fd5fc78f8..beebebfd4da 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
@@ -1,9 +1,17 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_texture">
-	<text name="desc txt">
-		Description :
-	</text>
-	<text name="dimensions">
-		Dimensions : [WIDTH] x [HEIGHT]
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_texture">
+	<floater.string name="Title">
+		Texture : [NAME]
+	</floater.string>
+	<floater.string name="Copy">
+		Copier dans l&apos;inventaire
+	</floater.string>
+	<text name="desc txt">
+		Description :
+	</text>
+	<button label="Enregistrer" name="Keep"/>
+	<button label="Supprimer" name="Discard"/>
+	<text name="dimensions">
+		[WIDTH]px x [HEIGHT]px
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
index be97165a3e9..6335e41babb 100644
--- a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
@@ -1,144 +1,104 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="SIGNALER UNE INFRACTION">
-	<texture_picker label="" name="screenshot"/>
-	<check_box label="Inclure une capture d&apos;écran" name="screen_check"/>
-	<text name="reporter_title" width="60">
-		Déposant :
-	</text>
-	<text name="reporter_field">
-		Loremipsum Dolorsitamut
-	</text>
-	<text name="sim_title">
-		Région :
-	</text>
-	<text name="sim_field">
-		Nom de la région
-	</text>
-	<text name="pos_title">
-		Position :
-	</text>
-	<text name="pos_field">
-		{128.1, 128.1, 15.4}
-	</text>
-	<text name="select_object_label">
-		Cliquez sur le bouton puis l&apos;objet :
-	</text>
-	<button label="" label_selected="" name="pick_btn" tool_tip="Le sélecteur d&apos;objet vous permet d&apos;identifier un objet comme sujet du rapport."/>
-	<text name="object_name_label">
-		Nom :
-	</text>
-	<text left_delta="70" name="object_name" width="105">
-		Consetetur Sadipscing
-	</text>
-	<text name="owner_name_label" width="66">
-		Propriétaire :
-	</text>
-	<text left_delta="70" name="owner_name" width="105">
-		Hendrerit Vulputate
-	</text>
-	<combo_box name="category_combo" tool_tip="Choisissez la catégorie qui décrit le mieux ce rapport">
-		<combo_box.item name="Select_category" label="Sélectionnez une catégorie"
-		/>
-		<combo_box.item name="Age__Age_play" label="Âge &gt; « Age play »"
-		/>
-		<combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Âge &gt; Résident adulte sur Second Life pour adolescents"
-		/>
-		<combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Âge &gt; Resident mineur en dehors de Teen Second Life"
-		/>
-		<combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Assaut &gt; Bac à sable utilisé pour des combats/zone non sécurisée"
-		/>
-		<combo_box.item name="Assault__Safe_area" label="Assaut &gt; Zone sécurisée"
-		/>
-		<combo_box.item name="Assault__Weapons_testing_sandbox" label="Assaut &gt; Bac à sable pour tests d&apos;armes à feu"
-		/>
-		<combo_box.item name="Commerce__Failure_to_deliver_product_or_service" label="Commerce &gt; Incapacité à fournir un produit ou service"
-		/>
-		<combo_box.item name="Disclosure__Real_world_information" label="Divulgation &gt; Informations sur la vie réelle"
-		/>
-		<combo_box.item name="Disclosure__Remotely_monitoring chat" label="Divulgation &gt; Écoute d&apos;un chat à distance"
-		/>
-		<combo_box.item name="Disclosure__Second_Life_information_chat_IMs" label="Divulgation &gt; Informations sur Second Life/chat/IM"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Unfair_use_of_region_resources" label="Trouble de la paix &gt; Utilisation inadéquate des ressources de la région"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Excessive_scripted_objects" label="Trouble de la paix &gt; Nombre d&apos;objets scriptés excessif"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Object_littering" label="Trouble de la paix &gt; Abandon d&apos;objets"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Repetitive_spam" label="Trouble de la paix &gt; Spam à répétition"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Unwanted_advert_spam" label="Trouble de la paix &gt; Spam à caractère commercial"
-		/>
-		<combo_box.item name="Fraud__L$" label="Fraude &gt; L$"
-		/>
-		<combo_box.item name="Fraud__Land" label="Fraude &gt; Terrain"
-		/>
-		<combo_box.item name="Fraud__Pyramid_scheme_or_chain_letter" label="Fraude &gt; Vente pyramidale ou lettre-chaîne"
-		/>
-		<combo_box.item name="Fraud__US$" label="Fraude &gt; US$"
-		/>
-		<combo_box.item name="Harassment__Advert_farms___visual_spam" label="Harcèlement &gt; Spam visuel"
-		/>
-		<combo_box.item name="Harassment__Defaming_individuals_or_groups" label="Harcèlement &gt; Diffamation envers des individus ou des groupes"
-		/>
-		<combo_box.item name="Harassment__Impeding_movement" label="Harcèlement &gt; Immobilisation"
-		/>
-		<combo_box.item name="Harassment__Sexual_harassment" label="Harcèlement &gt;  Harcèlement sexuel"
-		/>
-		<combo_box.item name="Harassment__Solicting_inciting_others_to_violate_ToS" label="Harcèlement &gt; Incitation à enfreindre les Conditions d&apos;utilisation"
-		/>
-		<combo_box.item name="Harassment__Verbal_abuse" label="Harcèlement &gt; Abus verbal"
-		/>
-		<combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Indécence &gt; Contenu ou comportement offensifs"
-		/>
-		<combo_box.item name="Indecency__Inappropriate_avatar_name" label="Indécence &gt; Nom d&apos;avatar inapproprié"
-		/>
-		<combo_box.item name="Indecency__Mature_content_in_PG_region" label="Indécence &gt; Contenu ou conduite inappropriés dans une région PG"
-		/>
-		<combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Indécence &gt; Contenu ou conduite inappropriés dans une région Mature"
-		/>
-		<combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Violation de droits de propriété intellectuelle &gt; Suppression de contenu"
-		/>
-		<combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Violation de droits de propriété intellectuelle &gt; CopyBot ou exploitation abusive des droits"
-		/>
-		<combo_box.item name="Intolerance" label="Intolérance"
-		/>
-		<combo_box.item name="Land__Abuse_of_sandbox_resources" label="Terrain &gt; Utilisation abusive des ressources du bac à sable"
-		/>
-		<combo_box.item name="Land__Encroachment__Objects_textures" label="Terrain &gt; Empiètement &gt; Objets/textures"
-		/>
-		<combo_box.item name="Land__Encroachment__Particles" label="Terrain &gt; Empiètement &gt; Particules"
-		/>
-		<combo_box.item name="Land__Encroachment__Trees_plants" label="Terrain &gt; Empiètement &gt; Arbres/plantes"
-		/>
-		<combo_box.item name="Wagering_gambling" label="Paris/jeux d&apos;argent"
-		/>
-		<combo_box.item name="Other" label="Autre"
-		/>
-	</combo_box>
-	<text name="abuser_name_title">
-		Nom du contrevenant :
-	</text>
-	<button label="Choisir le résident" label_selected="" name="select_abuser" tool_tip="Sélectionnez le nom du résident dans une liste"/>
-	<check_box label="Ne connaît pas le nom du contrevenant" name="omit_abuser_name" tool_tip="Cochez cette case si vous ne connaissez pas le nom du contrevenant"/>
-	<text name="abuser_name_title2">
-		Indiquez où l&apos;infraction a eu lieu :
-	</text>
-	<text name="sum_title">
-		Récapitulatif :
-	</text>
-	<text name="dscr_title">
-		Détails :
-	</text>
-	<text name="bug_aviso">
-		Indiquez la date, le lieu, la nature de l&apos;infraction, ainsi que
-tout chat ou IM relatif à l&apos;infraction, en étant aussi précis
-que possible. Pensez à indiquer un objet si possible.
-	</text>
-	<text bottom_delta="-16" name="incomplete_title">
-		Remarque : les rapports incomplets ne feront pas l&apos;objet d&apos;une
-enquête.
-	</text>
-	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
-	<button label="Signaler une infraction" label_selected="Signaler une infraction" name="send_btn"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_report_abuse" title="SIGNALER UNE INFRACTION">
+	<floater.string name="Screenshot">
+		Capture d&apos;écran
+	</floater.string>
+	<check_box label="Utiliser cette capture d&apos;écran" name="screen_check"/>
+	<text name="reporter_title" width="60">
+		Déposant :
+	</text>
+	<text name="reporter_field">
+		Loremipsum Dolorsitamut
+	</text>
+	<text name="sim_title">
+		Région :
+	</text>
+	<text name="sim_field">
+		Nom de la région
+	</text>
+	<text name="pos_title">
+		Position :
+	</text>
+	<text name="pos_field">
+		{128.1, 128.1, 15.4}
+	</text>
+	<text name="select_object_label">
+		Cliquez sur le bouton puis l&apos;objet responsable :
+	</text>
+	<button label="" label_selected="" name="pick_btn" tool_tip="Le sélecteur d&apos;objet vous permet d&apos;identifier un objet comme sujet du rapport."/>
+	<text name="object_name_label">
+		Objet :
+	</text>
+	<text left_delta="70" name="object_name" width="105">
+		Consetetur Sadipscing
+	</text>
+	<text name="owner_name_label" width="66">
+		Propriétaire :
+	</text>
+	<text left_delta="70" name="owner_name" width="105">
+		Hendrerit Vulputate
+	</text>
+	<combo_box name="category_combo" tool_tip="Choisissez la catégorie qui décrit le mieux ce rapport">
+		<combo_box.item label="Sélectionnez une catégorie" name="Select_category"/>
+		<combo_box.item label="Âge &gt; « Age play »" name="Age__Age_play"/>
+		<combo_box.item label="Âge &gt; Résident adulte sur Second Life pour adolescents" name="Age__Adult_resident_on_Teen_Second_Life"/>
+		<combo_box.item label="Âge &gt; Resident mineur en dehors de Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
+		<combo_box.item label="Assaut &gt; Bac à sable utilisé pour des combats/zone non sécurisée" name="Assault__Combat_sandbox___unsafe_area"/>
+		<combo_box.item label="Assaut &gt; Zone sécurisée" name="Assault__Safe_area"/>
+		<combo_box.item label="Assaut &gt; Bac à sable pour tests d&apos;armes à feu" name="Assault__Weapons_testing_sandbox"/>
+		<combo_box.item label="Commerce &gt; Incapacité à fournir un produit ou service" name="Commerce__Failure_to_deliver_product_or_service"/>
+		<combo_box.item label="Divulgation &gt; Informations sur la vie réelle" name="Disclosure__Real_world_information"/>
+		<combo_box.item label="Divulgation &gt; Écoute d&apos;un chat à distance" name="Disclosure__Remotely_monitoring chat"/>
+		<combo_box.item label="Divulgation &gt; Informations sur Second Life/chat/IM" name="Disclosure__Second_Life_information_chat_IMs"/>
+		<combo_box.item label="Trouble de la paix &gt; Utilisation inadéquate des ressources de la région" name="Disturbing_the_peace__Unfair_use_of_region_resources"/>
+		<combo_box.item label="Trouble de la paix &gt; Nombre d&apos;objets scriptés excessif" name="Disturbing_the_peace__Excessive_scripted_objects"/>
+		<combo_box.item label="Trouble de la paix &gt; Abandon d&apos;objets" name="Disturbing_the_peace__Object_littering"/>
+		<combo_box.item label="Trouble de la paix &gt; Spam à répétition" name="Disturbing_the_peace__Repetitive_spam"/>
+		<combo_box.item label="Trouble de la paix &gt; Spam à caractère commercial" name="Disturbing_the_peace__Unwanted_advert_spam"/>
+		<combo_box.item label="Fraude &gt; L$" name="Fraud__L$"/>
+		<combo_box.item label="Fraude &gt; Terrain" name="Fraud__Land"/>
+		<combo_box.item label="Fraude &gt; Vente pyramidale ou lettre-chaîne" name="Fraud__Pyramid_scheme_or_chain_letter"/>
+		<combo_box.item label="Fraude &gt; US$" name="Fraud__US$"/>
+		<combo_box.item label="Harcèlement &gt; Spam visuel" name="Harassment__Advert_farms___visual_spam"/>
+		<combo_box.item label="Harcèlement &gt; Diffamation envers des individus ou des groupes" name="Harassment__Defaming_individuals_or_groups"/>
+		<combo_box.item label="Harcèlement &gt; Immobilisation" name="Harassment__Impeding_movement"/>
+		<combo_box.item label="Harcèlement &gt;  Harcèlement sexuel" name="Harassment__Sexual_harassment"/>
+		<combo_box.item label="Harcèlement &gt; Incitation à enfreindre les Conditions d&apos;utilisation" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+		<combo_box.item label="Harcèlement &gt; Abus verbal" name="Harassment__Verbal_abuse"/>
+		<combo_box.item label="Indécence &gt; Contenu ou comportement offensifs" name="Indecency__Broadly_offensive_content_or_conduct"/>
+		<combo_box.item label="Indécence &gt; Nom d&apos;avatar inapproprié" name="Indecency__Inappropriate_avatar_name"/>
+		<combo_box.item label="Indécence &gt; Contenu ou conduite inappropriés dans une région PG" name="Indecency__Mature_content_in_PG_region"/>
+		<combo_box.item label="Indécence &gt; Contenu ou conduite inappropriés dans une région Mature" name="Indecency__Inappropriate_content_in_Mature_region"/>
+		<combo_box.item label="Violation de droits de propriété intellectuelle &gt; Suppression de contenu" name="Intellectual_property_infringement_Content_Removal"/>
+		<combo_box.item label="Violation de droits de propriété intellectuelle &gt; CopyBot ou exploitation abusive des droits" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
+		<combo_box.item label="Intolérance" name="Intolerance"/>
+		<combo_box.item label="Terrain &gt; Utilisation abusive des ressources du bac à sable" name="Land__Abuse_of_sandbox_resources"/>
+		<combo_box.item label="Terrain &gt; Empiètement &gt; Objets/textures" name="Land__Encroachment__Objects_textures"/>
+		<combo_box.item label="Terrain &gt; Empiètement &gt; Particules" name="Land__Encroachment__Particles"/>
+		<combo_box.item label="Terrain &gt; Empiètement &gt; Arbres/plantes" name="Land__Encroachment__Trees_plants"/>
+		<combo_box.item label="Paris/jeux d&apos;argent" name="Wagering_gambling"/>
+		<combo_box.item label="Autre" name="Other"/>
+	</combo_box>
+	<text name="abuser_name_title">
+		Nom du contrevenant :
+	</text>
+	<button label="Choisir" label_selected="" name="select_abuser" tool_tip="Sélectionnez le nom du résident dans une liste"/>
+	<text name="abuser_name_title2">
+		Indiquez où l&apos;infraction a eu lieu :
+	</text>
+	<text name="sum_title">
+		Récapitulatif :
+	</text>
+	<text name="dscr_title">
+		Détails :
+	</text>
+	<text name="bug_aviso">
+		Soyez aussi spécifique que possible
+	</text>
+	<text bottom_delta="-16" name="incomplete_title">
+		Remarque : les rapports incomplets ne feront pas l&apos;objet d&apos;une
+enquête.
+	</text>
+	<button label="Signaler une infraction" label_selected="Signaler une infraction" name="send_btn"/>
+	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml
new file mode 100644
index 00000000000..fc805e879b8
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script" short_title="[All scripts]" title="[All scripts]"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_preview.xml b/indra/newview/skins/default/xui/fr/floater_script_preview.xml
index 43541e8de31..dbd3558c190 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_preview.xml
@@ -1,6 +1,9 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="SCRIPT : SCRIPT DE ROTATION">
-	<text name="desc txt">
-		Description :
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview lsl text" title="SCRIPT : SCRIPT DE ROTATION">
+	<floater.string name="Title">
+		Script : [NAME]
+	</floater.string>
+	<text name="desc txt">
+		Description :
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_queue.xml b/indra/newview/skins/default/xui/fr/floater_script_queue.xml
index d5f39e7acef..dbbe2539dc7 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_queue.xml
@@ -1,4 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="queue" title="RÉINITIALISER PROGRESSION">
-	<button label="Fermer" label_selected="Fermer" name="close" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="queue" title="RÉINITIALISER PROGRESSION">
+	<floater.string name="Starting">
+		Début du [START] sur [COUNT] objets.
+	</floater.string>
+	<floater.string name="Done">
+		Fini.
+	</floater.string>
+	<floater.string name="Resetting">
+		Réinitialisation
+	</floater.string>
+	<floater.string name="Running">
+		Exécution en cours
+	</floater.string>
+	<floater.string name="NotRunning">
+		Arrêt
+	</floater.string>
+	<button label="Fermer" label_selected="Fermer" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_sell_land.xml b/indra/newview/skins/default/xui/fr/floater_sell_land.xml
index 81c3ccc79ab..2ded68309c5 100644
--- a/indra/newview/skins/default/xui/fr/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_sell_land.xml
@@ -1,66 +1,66 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sell land" title="VENDRE TERRAIN">
-    <scroll_container name="profile_scroll">
-    <panel name="scroll_content_panel">
-	<text name="info_parcel_label">
-		Parcelle :
-	</text>
-	<text name="info_parcel">
-		PARCEL NAME
-	</text>
-	<text name="info_size_label">
-		Taille :
-	</text>
-	<text name="info_size">
-		[AREA] m²
-	</text>
-	<text name="info_action" bottom_delta="-60">
-		Pour vendre cette
-parcelle :
-	</text>
-	<icon bottom_delta="-86" name="step_price" />
-	<text name="price_label">
-		Votre prix de vente :
-	</text>
-	<text name="price_text">
-		Fixez un prix convenable pour ce terrain.
-	</text>
-	<text name="price_ld">
-		L$
-	</text>
-	<text name="price_per_m">
-		([PER_METER] L$ par mètre carré)
-	</text>
-	<text name="sell_to_label">
-		Vos acheteurs :
-	</text>
-	<text name="sell_to_text">
-		Vendez votre terrain à n&apos;importe qui ou uniquement à un acheteur
-spécifique.
-	</text>
-	<combo_box name="sell_to" bottom_delta="-32">
-		<combo_box.item name="--selectone--" label="Sélectionnez --" />
-		<combo_box.item name="Anyone" label="N&apos;importe qui" />
-		<combo_box.item name="Specificuser:" label="Acheteur spécifique :" />
-	</combo_box>
-	<button label="Sélectionner..." name="sell_to_select_agent" width="100"/>
-	<text name="sell_objects_label">
-		Vendez-vous des objets avec ce terrain ?
-	</text>
-	<text name="sell_objects_text">
-		Les objets transférables se trouvant sur la parcelle changeront
-de propriétaire.
-	</text>
-	<radio_group name="sell_objects" right="430" bottom_delta="-54">
-		<radio_item name="no" label="Non, rester le propriétaire des objets" />
-		<radio_item name="yes" label="Oui, vendre les objets avec le terrain" />
-	</radio_group>
-	<button label="Afficher les objets" name="show_objects" right="420" width="120"/>
-	<text name="nag_message_label" bottom_delta="-30">
-		Rappel : toute vente est définitive.
-	</text>
-	<button label="Mettre le terrain en vente" name="sell_btn" width="165"/>
-	<button label="Annuler" name="cancel_btn"/>
-    </panel>
-    </scroll_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="sell land" title="VENDRE TERRAIN">
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<text name="info_parcel_label">
+				Parcelle :
+			</text>
+			<text name="info_parcel">
+				PARCEL NAME
+			</text>
+			<text name="info_size_label">
+				Taille :
+			</text>
+			<text name="info_size">
+				[AREA] m²
+			</text>
+			<text bottom_delta="-60" name="info_action">
+				Pour vendre cette
+parcelle :
+			</text>
+			<icon bottom_delta="-86" name="step_price"/>
+			<text name="price_label">
+				Votre prix de vente :
+			</text>
+			<text name="price_text">
+				Fixez un prix convenable.
+			</text>
+			<text name="price_ld">
+				L$
+			</text>
+			<text name="price_per_m">
+				([PER_METER] L$ par mètre carré)
+			</text>
+			<text name="sell_to_label">
+				Vos acheteurs :
+			</text>
+			<text name="sell_to_text">
+				Vendez votre terrain à n&apos;importe qui ou uniquement à un acheteur
+spécifique.
+			</text>
+			<combo_box bottom_delta="-32" name="sell_to">
+				<combo_box.item label="Sélectionnez --" name="--selectone--"/>
+				<combo_box.item label="N&apos;importe qui" name="Anyone"/>
+				<combo_box.item label="Personne spécifique :" name="Specificuser:"/>
+			</combo_box>
+			<button label="Sélectionner..." name="sell_to_select_agent" width="100"/>
+			<text name="sell_objects_label">
+				Vendez-vous des objets avec ce terrain ?
+			</text>
+			<text name="sell_objects_text">
+				Les objets transférables se trouvant sur la parcelle changeront
+de propriétaire.
+			</text>
+			<radio_group bottom_delta="-54" name="sell_objects" right="430">
+				<radio_item label="Non, rester le propriétaire des objets" name="no"/>
+				<radio_item label="Oui, vendre les objets avec le terrain" name="yes"/>
+			</radio_group>
+			<button label="Afficher les objets" name="show_objects" right="420" width="120"/>
+			<text bottom_delta="-30" name="nag_message_label">
+				Rappel : toute vente est définitive.
+			</text>
+			<button label="Mettre le terrain en vente" name="sell_btn" width="165"/>
+			<button label="Annuler" name="cancel_btn"/>
+		</panel>
+	</scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
index f0781d0b321..3550d8c86f6 100644
--- a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="settings_debug" title="PARAMÉTRAGES DU MODE DEBUG">
-	<combo_box name="boolean_combo">
-		<combo_box.item name="TRUE" label="TRUE" />
-		<combo_box.item name="FALSE" label="FALSE" />
-	</combo_box>
-	<color_swatch label="Couleur" name="color_swatch" width="43" />
-	<spinner label="x" name="val_spinner_1" />
-	<spinner label="x" name="val_spinner_2" />
-	<spinner label="x" name="val_spinner_3" />
-	<spinner label="x" name="val_spinner_4" />
-	<button label="Paramètres par défaut" name="default_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="settings_debug" title="PARAMÉTRAGES DU MODE DEBUG">
+	<combo_box name="boolean_combo">
+		<combo_box.item label="TRUE" name="TRUE"/>
+		<combo_box.item label="FALSE" name="FALSE"/>
+	</combo_box>
+	<color_swatch label="Couleur" name="val_color_swatch"/>
+	<spinner label="x" name="val_spinner_1"/>
+	<spinner label="x" name="val_spinner_2"/>
+	<spinner label="x" name="val_spinner_3"/>
+	<spinner label="x" name="val_spinner_4"/>
+	<button label="Paramètres par défaut" name="default_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_stats.xml b/indra/newview/skins/default/xui/fr/floater_stats.xml
new file mode 100644
index 00000000000..5d5e3213ca2
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_stats.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Statistics" title="Statistiques">
+	<scroll_container name="statistics_scroll">
+		<container_view name="statistics_view">
+			<stat_view label="Basic" name="basic">
+				<stat_bar label="FPS" name="fps"/>
+				<stat_bar label="Bandwidth" name="bandwidth"/>
+				<stat_bar label="Packet Loss" name="packet_loss"/>
+				<stat_bar label="Ping Sim" name="ping"/>
+			</stat_view>
+			<stat_view label="Advanced" name="advanced">
+				<stat_view label="Render" name="render">
+					<stat_bar label="KTris Drawn" name="ktrisframe"/>
+					<stat_bar label="KTris Drawn" name="ktrissec"/>
+					<stat_bar label="Total Objects" name="objs"/>
+					<stat_bar label="New Objects" name="newobjs"/>
+				</stat_view>
+				<stat_view label="Texture" name="texture">
+					<stat_bar label="Count" name="numimagesstat"/>
+					<stat_bar label="Raw Count" name="numrawimagesstat"/>
+					<stat_bar label="GL Mem" name="gltexmemstat"/>
+					<stat_bar label="Formatted Mem" name="formattedmemstat"/>
+					<stat_bar label="Raw Mem" name="rawmemstat"/>
+					<stat_bar label="Bound Mem" name="glboundmemstat"/>
+				</stat_view>
+				<stat_view label="Network" name="network">
+					<stat_bar label="Packets In" name="packetsinstat"/>
+					<stat_bar label="Packets Out" name="packetsoutstat"/>
+					<stat_bar label="Objects" name="objectkbitstat"/>
+					<stat_bar label="Texture" name="texturekbitstat"/>
+					<stat_bar label="Asset" name="assetkbitstat"/>
+					<stat_bar label="Layers" name="layerskbitstat"/>
+					<stat_bar label="Actual In" name="actualinkbitstat"/>
+					<stat_bar label="Actual Out" name="actualoutkbitstat"/>
+					<stat_bar label="VFS Pending Ops" name="vfspendingoperations"/>
+				</stat_view>
+			</stat_view>
+			<stat_view label="Simulator" name="sim">
+				<stat_bar label="Time Dilation" name="simtimedilation"/>
+				<stat_bar label="Sim FPS" name="simfps"/>
+				<stat_bar label="Physics FPS" name="simphysicsfps"/>
+				<stat_view label="Physics Details" name="physicsdetail">
+					<stat_bar label="Pinned Objects" name="physicspinnedtasks"/>
+					<stat_bar label="Low LOD Objects" name="physicslodtasks"/>
+					<stat_bar label="Memory Allocated" name="physicsmemoryallocated"/>
+					<stat_bar label="Agent Updates/Sec" name="simagentups"/>
+					<stat_bar label="Main Agents" name="simmainagents"/>
+					<stat_bar label="Child Agents" name="simchildagents"/>
+					<stat_bar label="Objets" name="simobjects"/>
+					<stat_bar label="Active Objects" name="simactiveobjects"/>
+					<stat_bar label="Active Scripts" name="simactivescripts"/>
+					<stat_bar label="Script Events" name="simscripteps"/>
+					<stat_bar label="Packets In" name="siminpps"/>
+					<stat_bar label="Packets Out" name="simoutpps"/>
+					<stat_bar label="Pending Downloads" name="simpendingdownloads"/>
+					<stat_bar label="Pending Uploads" name="simpendinguploads"/>
+					<stat_bar label="Total Unacked Bytes" name="simtotalunackedbytes"/>
+				</stat_view>
+				<stat_view label="Time (ms)" name="simperf">
+					<stat_bar label="Total Frame Time" name="simframemsec"/>
+					<stat_bar label="Net Time" name="simnetmsec"/>
+					<stat_bar label="Physics Time" name="simsimphysicsmsec"/>
+					<stat_bar label="Simulation Time" name="simsimothermsec"/>
+					<stat_bar label="Agent Time" name="simagentmsec"/>
+					<stat_bar label="Images Time" name="simimagesmsec"/>
+					<stat_bar label="Script Time" name="simscriptmsec"/>
+				</stat_view>
+			</stat_view>
+		</container_view>
+	</scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index 3638c3fb425..5ded9a1de4e 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -1,513 +1,479 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="CONSTRUIRE">
-	<button label="" label_selected="" name="button focus" tool_tip="Mise au point"/>
-	<button label="" label_selected="" name="button move" tool_tip="Déplacer"/>
-	<button label="" label_selected="" name="button edit" tool_tip="Modifier"/>
-	<button label="" label_selected="" name="button create" tool_tip="Créer"/>
-	<button label="" label_selected="" name="button land" tool_tip="Terrain"/>
-	<radio_group name="focus_radio_group">
-		<radio_item label="Zoom" name="radio zoom"/>
-		<radio_item label="Orbite (Ctrl)" name="radio orbit"/>
-		<radio_item label="Panoramique (Ctrl-Maj)" name="radio pan"/>
-	</radio_group>
-	<radio_group name="move_radio_group">
-		<radio_item label="Déplacer" name="radio move"/>
-		<radio_item label="Orbite (Ctrl)" name="radio lift"/>
-		<radio_item label="Faire tourner (Ctrl-Maj)" name="radio spin"/>
-	</radio_group>
-	<radio_group name="edit_radio_group">
-		<radio_item label="Positionner" name="radio position"/>
-		<radio_item label="Pivoter (Ctrl)" name="radio rotate"/>
-		<radio_item label="Étirer (Ctrl-Maj)" name="radio stretch"/>
-		<radio_item label="Sélectionner une face" name="radio select face"/>
-	</radio_group>
-	<check_box label="Modifier les parties liées" name="checkbox edit linked parts"/>
-	<text name="text ruler mode">
-		Axe :
-	</text>
-	<combo_box name="combobox grid mode">
-		<combo_box.item name="World" label="Monde"/>
-		<combo_box.item name="Local" label="Local"/>
-		<combo_box.item name="Reference" label="Référence"/>
-	</combo_box>
-	<check_box label="Étirer les deux côtés" name="checkbox uniform"/>
-	<check_box label="Étirer les textures" name="checkbox stretch textures"/>
-	<check_box label="Utiliser la grille" name="checkbox snap to grid"/>
-	<button label="Options..." label_selected="Options..." name="Options..."/>
-	<text name="text status">
-		Glissez pour déplacer, Maj-glissez pour copier.
-	</text>
-	<button label="" label_selected="" name="ToolCube" tool_tip="Cube"/>
-	<button label="" label_selected="" name="ToolPrism" tool_tip="Prisme droit"/>
-	<button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
-	<button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tétraèdre"/>
-	<button label="" label_selected="" name="ToolCylinder" tool_tip="Cylindre"/>
-	<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Demi-cylindre"/>
-	<button label="" label_selected="" name="ToolCone" tool_tip="Cône"/>
-	<button label="" label_selected="" name="ToolHemiCone" tool_tip="Demi-cône"/>
-	<button label="" label_selected="" name="ToolSphere" tool_tip="Sphère"/>
-	<button label="" label_selected="" name="ToolHemiSphere" tool_tip="Demi-sphère"/>
-	<button label="" label_selected="" name="ToolTorus" tool_tip="Tore"/>
-	<button label="" label_selected="" name="ToolTube" tool_tip="Tube"/>
-	<button label="" label_selected="" name="ToolRing" tool_tip="Anneau"/>
-	<button label="" label_selected="" name="ToolTree" tool_tip="Arbre"/>
-	<button label="" label_selected="" name="ToolGrass" tool_tip="Herbe"/>
-	<check_box label="Maintenir l&apos;outil sélectionné" name="checkbox sticky"/>
-	<check_box label="Copier la sélection" name="checkbox copy selection"/>
-	<check_box label="Centrer" name="checkbox copy centers"/>
-	<check_box label="Pivoter" name="checkbox copy rotates"/>
-	<radio_group name="land_radio_group">
-		<radio_item label="Sélectionner le terrain" name="radio select land"/>
-		<radio_item label="Aplatir" name="radio flatten"/>
-		<radio_item label="Élever" name="radio raise"/>
-		<radio_item label="Abaisser" name="radio lower"/>
-		<radio_item label="Lisser" name="radio smooth"/>
-		<radio_item label="Bosseler" name="radio noise"/>
-		<radio_item label="Annuler modification" name="radio revert"/>
-	</radio_group>
-	<button label="Appliquer" label_selected="Appliquer" name="button apply to selection" tool_tip="Modifier le terrain sélectionné" left="176"/>
-	<text name="Bulldozer:">
-		Bulldozer :
-	</text>
-	<text name="Dozer Size:">
-		Taille
-	</text>
-	<text name="Strength:">
-		Force
-	</text>
-	<text name="obj_count">
-		Objets sélectionnés : [COUNT]
-	</text>
-	<text name="prim_count">
-		Prims : [COUNT]
-	</text>
-	<tab_container name="Object Info Tabs">
-		<panel label="Général" name="General">
-			<text name="Name:">
-				Nom :
-			</text>
-			<text name="Description:">
-				Description :
-			</text>
-			<text name="Creator:">
-				Créateur :
-			</text>
-			<text name="Creator Name">
-				Thrax Linden
-			</text>
-			<button label="Profil..." label_selected="Profil..." name="button creator profile"/>
-			<text name="Owner:">
-				Propriétaire :
-			</text>
-			<text name="Owner Name">
-				Thrax Linden
-			</text>
-			<button label="Profil..." label_selected="Profil..." name="button owner profile"/>
-			<text name="Group:">
-				Groupe :
-			</text>
-			<text name="Group Name Proxy">
-				Les Lindens
-			</text>
-			<button label="Définir..." label_selected="Définir..." name="button set group"/>
-			<text name="Permissions:">
-				Droits :
-			</text>
-
-			<check_box label="Partager avec le groupe" name="checkbox share with group" tool_tip="Autorisez tous les membres du groupe choisi à utiliser et à partager vos droits pour cet objet. Pour activer les restrictions de rôles, vous devez d&apos;abord cliquer sur Transférer."/>
-			<string name="text deed continued">
-				Transférer...
-			</string>
-			<string name="text deed">
-				Transférer
-			</string>
-			<button label="Céder..." label_selected="Céder..." name="button deed" tool_tip="Les objets partagés par un groupe peuvent être cédés par un officier."/>
-			<check_box label="Autoriser tout le monde à déplacer" name="checkbox allow everyone move"/>
-			<check_box label="Autoriser tout le monde à copier" name="checkbox allow everyone copy"/>
-			<check_box label="Afficher dans la recherche" name="search_check" tool_tip="Afficher l&apos;objet dans les résultats de recherche"/>
-			<check_box label="À vendre" name="checkbox for sale"/>
-			<text name="Cost">
-				Prix : L$
-			</text>
-			<combo_box name="sale type">
-				<combo_box.item label="Copie" name="Copy"/>
-				<combo_box.item label="Contenus" name="Contents"/>
-				<combo_box.item label="Original" name="Original"/>
-			</combo_box>
-
-			<text name="label click action">
-				Action du clic-gauche :
-			</text>
-			<combo_box name="clickaction" width="178">
-				<combo_box.item name="Touch/grab(default)" label="Toucher/attraper (défaut)"/>
-				<combo_box.item name="Sitonobject" label="S&apos;asseoir sur l&apos;objet"/>
-				<combo_box.item name="Buyobject" label="Acheter l&apos;objet"/>
-				<combo_box.item name="Payobject" label="Payer l&apos;objet"/>
-				<combo_box.item name="Open" label="Ouvrir"/>
-				<combo_box.item name="Play" label="Jouer le média de la parcelle"/>
-				<combo_box.item name="Opemmedia" label="Ouvrir le média de la parcelle"/>
-			</combo_box>
-		<panel name="perms_build">
-			<text name="perm_modify">
-				Vous pouvez modifier cet objet
-			</text>
-			<text name="B:">
-				B :
-			</text>
-			<text name="O:">
-				O :
-			</text>
-			<text name="G:">
-				G :
-			</text>
-			<text name="E:">
-				E :
-			</text>
-			<text name="N:">
-				N :
-			</text>
-			<text name="F:">
-				F :
-			</text>
-			<text name="Next owner can:">
-				Le prochain propriétaire pourra :
-			</text>
-			<check_box label="Modifier" name="checkbox next owner can modify"/>
-			<check_box label="Copier" left_delta="66" name="checkbox next owner can copy"/>
-			<check_box name="checkbox next owner can transfer"/>
-		</panel>
-			<string name="text modify info 1">
-				Vous pouvez modifier cet objet
-			</string>
-			<string name="text modify info 2">
-				Vous pouvez modifier ces objets
-			</string>
-			<string name="text modify info 3">
-				Vous ne pouvez pas modifier cet objet
-			</string>
-			<string name="text modify info 4">
-				Vous ne pouvez pas modifier ces objets
-			</string>
-			<string name="text modify warning">
-				Sélectionnez l&apos;objet en entier
-			</string>
-			<string name="Cost Default">
-				Prix : L$
-			</string>
-			<string name="Cost Total">
-				Prix total : L$
-			</string>
-			<string name="Cost Per Unit">
-				Prix par : L$
-			</string>
-			<string name="Cost Mixed">
-				Prix mixte
-			</string>
-			<string name="Sale Mixed">
-				Vente mixte
-			</string>
-		</panel>
-		<panel label="Objet" name="Object">
-			<text name="select_single">
-				Sélectionnez un prim pour modifier les paramètres.
-			</text>
-			<text name="edit_object">
-				Modifier les paramètres de l&apos;objet :
-			</text>
-			<check_box label="Verrouillé" name="checkbox locked" tool_tip="Empêche l&apos;objet d&apos;être déplacé ou supprimé. Utile pendant la construction pour éviter les modifications involontaires."/>
-			<check_box label="Physique" name="Physical Checkbox Ctrl" tool_tip="Permet à l&apos;objet d&apos;être poussé et affecté par la gravité"/>
-			<check_box label="Temporaire" name="Temporary Checkbox Ctrl" tool_tip="L&apos;objet est supprimé 1 mn après sa création."/>
-			<check_box label="Fantôme" name="Phantom Checkbox Ctrl" tool_tip="Permet à l&apos;objet de ne pas entrer en collision avec d&apos;autres objets ou avatars."/>
-			<text name="label position">
-				Position (mètres)
-			</text>
-			<spinner label="X" name="Pos X"/>
-			<spinner label="Y" name="Pos Y"/>
-			<spinner label="Z" name="Pos Z"/>
-			<text name="label size">
-				Taille (mètres)
-			</text>
-			<spinner label="X" name="Scale X"/>
-			<spinner label="Y" name="Scale Y"/>
-			<spinner label="Z" name="Scale Z"/>
-			<text name="label rotation">
-				Rotation (degrés)
-			</text>
-			<spinner label="X" name="Rot X"/>
-			<spinner label="Y" name="Rot Y"/>
-			<spinner label="Z" name="Rot Z"/>
-			<text name="label material">
-				Matériau
-			</text>
-			<combo_box name="material">
-				<combo_box.item name="Stone" label="Pierre"/>
-				<combo_box.item name="Metal" label="Métal"/>
-				<combo_box.item name="Glass" label="Verre"/>
-				<combo_box.item name="Wood" label="Bois"/>
-				<combo_box.item name="Flesh" label="Chair"/>
-				<combo_box.item name="Plastic" label="Plastique"/>
-				<combo_box.item name="Rubber" label="Caoutchouc"/>
-			</combo_box>
-			<text name="label basetype">
-				Type de construction
-			</text>
-			<combo_box name="comboBaseType">
-				<combo_box.item name="Box" label="Boîte"/>
-				<combo_box.item name="Cylinder" label="Cylindre"/>
-				<combo_box.item name="Prism" label="Prisme"/>
-				<combo_box.item name="Sphere" label="Sphère"/>
-				<combo_box.item name="Torus" label="Tore"/>
-				<combo_box.item name="Tube" label="Tube"/>
-				<combo_box.item name="Ring" label="Anneau"/>
-				<combo_box.item name="Sculpted" label="Sculptie"/>
-			</combo_box>
-			<text name="text cut">
-				Début et fin de découpe du tracé
-			</text>
-			<spinner label="D" name="cut begin"/>
-			<spinner label="F" name="cut end"/>
-			<text name="text hollow">
-				Creux
-			</text>
-			<text name="text skew">
-				Biais
-			</text>
-			<text name="Hollow Shape">
-				Forme du creux
-			</text>
-			<combo_box name="hole">
-				<combo_box.item name="Default" label="Défaut"/>
-				<combo_box.item name="Circle" label="Cercle"/>
-				<combo_box.item name="Square" label="Carré"/>
-				<combo_box.item name="Triangle" label="Triangle"/>
-			</combo_box>
-			<text name="text twist">
-				Début et fin de vrille
-			</text>
-			<spinner label="D" name="Twist Begin"/>
-			<spinner label="F" name="Twist End"/>
-			<text name="scale_taper">
-				Biseautage
-			</text>
-			<text name="scale_hole">
-				Taille du trou
-			</text>
-			<spinner label="X" name="Taper Scale X"/>
-			<spinner label="Y" name="Taper Scale Y"/>
-			<text name="text topshear">
-				Inclinaison
-			</text>
-			<spinner label="X" name="Shear X"/>
-			<spinner label="Y" name="Shear Y"/>
-			<text name="advanced_cut">
-				Début et fin de découpe du profilé
-			</text>
-			<text name="advanced_dimple">
-				Début et fin du creux
-			</text>
-			<text name="advanced_slice">
-				Début et fin de la tranche
-			</text>
-			<spinner label="D" name="Path Limit Begin"/>
-			<spinner label="F" name="Path Limit End"/>
-			<text name="text taper2">
-				Biseautage
-			</text>
-			<spinner label="X" name="Taper X"/>
-			<spinner label="Y" name="Taper Y"/>
-			<text name="text radius delta">
-				Rayon
-			</text>
-			<text name="text revolutions">
-				Révolutions
-			</text>
-			<texture_picker label="Texture du sculptie" name="sculpt texture control" tool_tip="Cliquez pour sélectionner une image"/>
-			<check_box label="Mirroir" name="sculpt mirror control" tool_tip="Retourne le sculptie le long de l&apos;axe des X."/>
-			<check_box label="A l&apos;envers" name="sculpt invert control" tool_tip="Inverse les valeurs normales d&apos;un sculptie et le fait apparaître à l&apos;envers."/>
-			<text name="label sculpt type">
-				Type de raccord
-			</text>
-			<combo_box name="sculpt type control">
-				<combo_box.item name="None" label="(aucun)"/>
-				<combo_box.item name="Sphere" label="Sphère"/>
-				<combo_box.item name="Torus" label="Tore"/>
-				<combo_box.item name="Plane" label="Plan"/>
-				<combo_box.item name="Cylinder" label="Cylindre"/>
-			</combo_box>
-		</panel>
-		<panel label="Attributs" name="Features">
-			<text name="select_single">
-				Sélectionnez un prim pour modifier les attributs.
-			</text>
-			<text name="edit_object">
-				Modifier les attributs de l&apos;objet :
-			</text>
-			<check_box label="Flexibilité" name="Flexible1D Checkbox Ctrl" tool_tip="Donne à l&apos;objet de la souplesse sur l&apos;axe des Z (côté client uniquement)."/>
-			<spinner label="Souplesse" name="FlexNumSections"/>
-			<spinner label="Gravité" name="FlexGravity"/>
-			<spinner label="Élasticité" name="FlexFriction"/>
-			<spinner label="Vent" name="FlexWind"/>
-			<spinner label="Tension" name="FlexTension"/>
-			<spinner label="Force X" name="FlexForceX"/>
-			<spinner label="Force Y" name="FlexForceY"/>
-			<spinner label="Force Z" name="FlexForceZ"/>
-			<check_box label="Lumière" name="Light Checkbox Ctrl" tool_tip="Permet aux objets d&apos;émettre de la lumière"/>
-			<text name="label color">
-				Couleur
-			</text>
-			<color_swatch label="" name="colorswatch" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
-			<spinner label="Intensité" name="Light Intensity"/>
-			<spinner label="Portée" name="Light Radius"/>
-			<spinner label="Atténuation" name="Light Falloff"/>
-		</panel>
-		<panel label="Texture" name="Texture">
-			<texture_picker label="Texture" name="texture control" tool_tip="Cliquez pour sélectionner une image"/>
-			<color_swatch label="Couleur" name="colorswatch" tool_tip="Cliquer pour ouvrir le sélecteur de couleurs"/>
-			<text name="color trans" width="88">
-				Transparence
-			</text>
-			<text name="glow label">
-				Rayonnement
-			</text>
-			<check_box label="Lumineux" name="checkbox fullbright"/>
-			<text name="tex gen">
-				Application
-			</text>
-			<combo_box name="combobox texgen">
-				<combo_box.item name="Default" label="Défaut"/>
-				<combo_box.item name="Planar" label="Planar"/>
-			</combo_box>
-			<text name="label shininess">
-				Brillance
-			</text>
-			<combo_box name="combobox shininess">
-				<combo_box.item name="None" label="Aucune"/>
-				<combo_box.item name="Low" label="Faible"/>
-				<combo_box.item name="Medium" label="Moyenne"/>
-				<combo_box.item name="High" label="Élevée"/>
-			</combo_box>
-			<text name="label bumpiness">
-				Relief
-			</text>
-			<combo_box name="combobox bumpiness">
-				<combo_box.item name="None" label="Aucun"/>
-				<combo_box.item name="Brightness" label="Luminosité"/>
-				<combo_box.item name="Darkness" label="Obscurité"/>
-				<combo_box.item name="woodgrain" label="Aggloméré"/>
-				<combo_box.item name="bark" label="Écorce"/>
-				<combo_box.item name="bricks" label="Briques"/>
-				<combo_box.item name="checker" label="Damier"/>
-				<combo_box.item name="concrete" label="Béton"/>
-				<combo_box.item name="crustytile" label="Carrelage"/>
-				<combo_box.item name="cutstone" label="Pierre de taille"/>
-				<combo_box.item name="discs" label="Disques"/>
-				<combo_box.item name="gravel" label="Gravier"/>
-				<combo_box.item name="petridish" label="Boîte de Petri"/>
-				<combo_box.item name="siding" label="Lattes"/>
-				<combo_box.item name="stonetile" label="Carreaux"/>
-				<combo_box.item name="stucco" label="Stuc"/>
-				<combo_box.item name="suction" label="Ventouses"/>
-				<combo_box.item name="weave" label="Tissage"/>
-			</combo_box>
-			<text name="tex scale">
-				Répétitions par face
-			</text>
-			<spinner label="Horizontal (U)" name="TexScaleU"/>
-			<check_box label="Inverser" name="checkbox flip s"/>
-			<spinner label="Vertical (V)" name="TexScaleV"/>
-			<check_box label="Inverser" name="checkbox flip t"/>
-			<text name="tex rotate">
-				Rotation (degrés)
-			</text>
-			<spinner left="122" name="TexRot" width="58"/>
-			<string name="string repeats per meter">
-				Répétitions au mètre
-			</string>
-			<string name="string repeats per face">
-				Répétitions par face
-			</string>
-			<text name="rpt" width="160">
-				Répétitions au mètre
-			</text>
-			<spinner left="122" name="rptctrl" width="58"/>
-			<button label="Appliquer" label_selected="Appliquer" left_delta="68" name="button apply" width="75"/>
-			<text name="tex offset">
-				Décalage
-			</text>
-			<spinner label="Horizontal (U)" name="TexOffsetU"/>
-			<spinner label="Vertical (V)" name="TexOffsetV"/>
-			<text name="textbox autofix">
-				Ajuster la texture du média
-(chargement préalable)
-			</text>
-			<button label="Ajuster" label_selected="Ajuster" left="150" name="button align"/>
-		</panel>
-		<panel label="Contenu" name="Contents">
-			<button label="Nouveau script" label_selected="Nouveau script" name="button new script"/>
-			<button label="Droits" name="button permissions"/>
-		</panel>
-	</tab_container>
-	<panel name="land info panel">
-		<text name="label_parcel_info">
-			Informations sur la parcelle
-		</text>
-		<text name="label_area_price">
-			Prix : [PRICE] L$ pour [AREA] m².
-		</text>
-		<text name="label_area">
-			Surface : [AREA] m²
-		</text>
-		<button label="À propos du terrain..." label_selected="À propos du terrain..." name="button about land" width="142"/>
-		<check_box label="Afficher les propriétaires" name="checkbox show owners" tool_tip="Colorie les parcelles en fonction de leur propriétaire : &#10;&#10;Vert = votre terrain &#10;Turquoise = le terrain de votre groupe &#10;Rouge = appartenant à d&apos;autres &#10;Jaune = en vente &#10;Mauve = aux enchères &#10;Gris = public"/>
-		<button label="?" label_selected="?" name="button show owners help" left_delta="154"/>
-		<text name="label_parcel_modify">
-			Modifier la parcelle
-		</text>
-		<button label="Diviser" label_selected="Diviser" name="button subdivide land" width="142"/>
-		<button label="Fusionner" label_selected="Fusionner" name="button join land" width="142"/>
-		<text name="label_parcel_trans">
-			Transactions
-		</text>
-		<button label="Acheter le terrain" label_selected="Acheter le terrain" name="button buy land" width="142"/>
-		<button label="Abandonner le terrain" label_selected="Abandonner le terrain" name="button abandon land" width="142"/>
-	</panel>
-	<floater.string name="status_rotate">
-		Pour faire tourner l&apos;objet, faîtes glisser les bandes de couleur.
-	</floater.string>
-	<floater.string name="status_scale">
-		Pour étirer le côté sélectionné, cliquez et faites glisser.
-	</floater.string>
-	<floater.string name="status_move">
-		Glissez pour déplacer, Maj-glissez pour copier.
-	</floater.string>
-	<floater.string name="status_modifyland">
-		Cliquez et maintenez pour modifier le terrain.
-	</floater.string>
-	<floater.string name="status_camera">
-		Cliquez et faites glisser pour changer l&apos;affichage.
-	</floater.string>
-	<floater.string name="status_grab">
-		Glisser pour déplacer, Ctrl pour soulever, Crtl-Maj pour pivoter.
-	</floater.string>
-	<floater.string name="status_place">
-		Cliquez dans le monde pour construire.
-	</floater.string>
-	<floater.string name="status_selectland">
-		Cliquez et faites glisser pour sélectionner le terrain.
-	</floater.string>
-	<floater.string name="grid_screen_text">
-		Écran
-	</floater.string>
-	<floater.string name="grid_local_text">
-		Local
-	</floater.string>
-	<floater.string name="grid_world_text">
-		Monde
-	</floater.string>
-	<floater.string name="grid_reference_text">
-		Référence
-	</floater.string>
-	<floater.string name="grid_attachment_text">
-		Pièce-jointe
-	</floater.string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="toolbox floater" short_title="Outils de construction" title="">
+	<floater.string name="status_rotate">
+		Pour faire tourner l&apos;objet, faîtes glisser les bandes de couleur.
+	</floater.string>
+	<floater.string name="status_scale">
+		Pour étirer le côté sélectionné, cliquez et faites glisser.
+	</floater.string>
+	<floater.string name="status_move">
+		Glissez pour déplacer, Maj-glissez pour copier.
+	</floater.string>
+	<floater.string name="status_modifyland">
+		Cliquez et maintenez pour modifier le terrain.
+	</floater.string>
+	<floater.string name="status_camera">
+		Cliquez et faîtes glisser pour bouger la caméra
+	</floater.string>
+	<floater.string name="status_grab">
+		Glisser pour déplacer, Ctrl pour soulever, Crtl-Maj pour pivoter.
+	</floater.string>
+	<floater.string name="status_place">
+		Cliquez dans le monde pour construire.
+	</floater.string>
+	<floater.string name="status_selectland">
+		Cliquez et faites glisser pour sélectionner le terrain.
+	</floater.string>
+	<floater.string name="grid_screen_text">
+		Écran
+	</floater.string>
+	<floater.string name="grid_local_text">
+		Local
+	</floater.string>
+	<floater.string name="grid_world_text">
+		Monde
+	</floater.string>
+	<floater.string name="grid_reference_text">
+		Référence
+	</floater.string>
+	<floater.string name="grid_attachment_text">
+		Pièce-jointe
+	</floater.string>
+	<button label="" label_selected="" name="button focus" tool_tip="Mise au point"/>
+	<button label="" label_selected="" name="button move" tool_tip="Déplacer"/>
+	<button label="" label_selected="" name="button edit" tool_tip="Modifier"/>
+	<button label="" label_selected="" name="button create" tool_tip="Créer"/>
+	<button label="" label_selected="" name="button land" tool_tip="Terrain"/>
+	<text name="text status">
+		Glissez pour déplacer, Maj-glissez pour copier.
+	</text>
+	<radio_group name="focus_radio_group">
+		<radio_item label="Zoom" name="radio zoom"/>
+		<radio_item label="Orbite (Ctrl)" name="radio orbit"/>
+		<radio_item label="Panoramique (Ctrl-Maj)" name="radio pan"/>
+	</radio_group>
+	<radio_group name="move_radio_group">
+		<radio_item label="Déplacer" name="radio move"/>
+		<radio_item label="Orbite (Ctrl)" name="radio lift"/>
+		<radio_item label="Faire tourner (Ctrl-Maj)" name="radio spin"/>
+	</radio_group>
+	<radio_group name="edit_radio_group">
+		<radio_item label="Bouger" name="radio position"/>
+		<radio_item label="Pivoter (Ctrl)" name="radio rotate"/>
+		<radio_item label="Étirer (Ctrl-Maj)" name="radio stretch"/>
+		<radio_item label="Sélectionner une face" name="radio select face"/>
+	</radio_group>
+	<check_box label="Modification liée" name="checkbox edit linked parts"/>
+	<check_box label="Étirer les deux côtés" name="checkbox uniform"/>
+	<check_box initial_value="true" label="Étirer les textures" name="checkbox stretch textures"/>
+	<check_box initial_value="true" label="Fixer sur la grille" name="checkbox snap to grid"/>
+	<combo_box name="combobox grid mode">
+		<combo_box.item label="Axe du monde" name="World"/>
+		<combo_box.item label="Axe local" name="Local"/>
+		<combo_box.item label="Axe de référence" name="Reference"/>
+	</combo_box>
+	<button label="Options..." label_selected="Options..." name="Options..." tool_tip="Définir les options de la grille"/>
+	<button label="" label_selected="" name="ToolCube" tool_tip="Cube"/>
+	<button label="" label_selected="" name="ToolPrism" tool_tip="Prisme droit"/>
+	<button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
+	<button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tétraèdre"/>
+	<button label="" label_selected="" name="ToolCylinder" tool_tip="Cylindre"/>
+	<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Demi-cylindre"/>
+	<button label="" label_selected="" name="ToolCone" tool_tip="Cône"/>
+	<button label="" label_selected="" name="ToolHemiCone" tool_tip="Demi-cône"/>
+	<button label="" label_selected="" name="ToolSphere" tool_tip="Sphère"/>
+	<button label="" label_selected="" name="ToolHemiSphere" tool_tip="Demi-sphère"/>
+	<button label="" label_selected="" name="ToolTorus" tool_tip="Tore"/>
+	<button label="" label_selected="" name="ToolTube" tool_tip="Tube"/>
+	<button label="" label_selected="" name="ToolRing" tool_tip="Anneau"/>
+	<button label="" label_selected="" name="ToolTree" tool_tip="Arbre"/>
+	<button label="" label_selected="" name="ToolGrass" tool_tip="Herbe"/>
+	<check_box label="Maintenir l&apos;outil sélectionné" name="checkbox sticky"/>
+	<check_box label="Copier la sélection" name="checkbox copy selection"/>
+	<check_box initial_value="true" label="Centrer" name="checkbox copy centers"/>
+	<check_box label="Pivoter" name="checkbox copy rotates"/>
+	<radio_group name="land_radio_group">
+		<radio_item label="Sélectionner le terrain" name="radio select land"/>
+		<radio_item label="Aplatir" name="radio flatten"/>
+		<radio_item label="Élever" name="radio raise"/>
+		<radio_item label="Abaisser" name="radio lower"/>
+		<radio_item label="Lisser" name="radio smooth"/>
+		<radio_item label="Bosseler" name="radio noise"/>
+		<radio_item label="Annuler modification" name="radio revert"/>
+	</radio_group>
+	<text name="Bulldozer:">
+		Bulldozer :
+	</text>
+	<text name="Dozer Size:">
+		Taille
+	</text>
+	<text name="Strength:">
+		Force
+	</text>
+	<button label="Appliquer" label_selected="Appliquer" left="176" name="button apply to selection" tool_tip="Modifier le terrain sélectionné"/>
+	<text name="obj_count">
+		Objets : [COUNT]
+	</text>
+	<text name="prim_count">
+		Prims : [COUNT]
+	</text>
+	<tab_container name="Object Info Tabs">
+		<panel label="Général" name="General">
+			<panel.string name="text deed continued">
+				Céder
+			</panel.string>
+			<panel.string name="text deed">
+				Transférer
+			</panel.string>
+			<panel.string name="text modify info 1">
+				Vous pouvez modifier cet objet
+			</panel.string>
+			<panel.string name="text modify info 2">
+				Vous pouvez modifier ces objets
+			</panel.string>
+			<panel.string name="text modify info 3">
+				Vous ne pouvez pas modifier cet objet
+			</panel.string>
+			<panel.string name="text modify info 4">
+				Vous ne pouvez pas modifier ces objets
+			</panel.string>
+			<panel.string name="text modify warning">
+				Sélectionnez l&apos;objet en entier
+			</panel.string>
+			<panel.string name="Cost Default">
+				Prix : L$
+			</panel.string>
+			<panel.string name="Cost Total">
+				Prix total : L$
+			</panel.string>
+			<panel.string name="Cost Per Unit">
+				Prix par : L$
+			</panel.string>
+			<panel.string name="Cost Mixed">
+				Prix mixte
+			</panel.string>
+			<panel.string name="Sale Mixed">
+				Vente mixte
+			</panel.string>
+			<text name="Name:">
+				Nom :
+			</text>
+			<text name="Description:">
+				Description :
+			</text>
+			<text name="Creator:">
+				Créateur :
+			</text>
+			<text name="Creator Name">
+				Thrax Linden
+			</text>
+			<text name="Owner:">
+				Propriétaire :
+			</text>
+			<text name="Owner Name">
+				Thrax Linden
+			</text>
+			<text name="Group:">
+				Groupe :
+			</text>
+			<button label="Définir..." label_selected="Définir..." name="button set group" tool_tip="Choisissez un groupe pour partager les permissions de cet objet"/>
+			<name_box initial_value="Chargement…" name="Group Name Proxy"/>
+			<button label="Céder" label_selected="Céder" name="button deed" tool_tip="En cédant un objet, vous donnez aussi les permissions au prochain propriétaire. Seul un officier peut céder les objets d&apos;un groupe."/>
+			<check_box label="Partager" name="checkbox share with group" tool_tip="Autorisez tous les membres du groupe choisi à utiliser et à partager vos droits pour cet objet. Pour activer les restrictions de rôles, vous devez d&apos;abord cliquer sur Transférer."/>
+			<text name="label click action">
+				Cliquer pour :
+			</text>
+			<combo_box name="clickaction" width="178">
+				<combo_box.item label="Toucher (défaut)" name="Touch/grab(default)"/>
+				<combo_box.item label="S&apos;asseoir sur l&apos;objet" name="Sitonobject"/>
+				<combo_box.item label="Acheter l&apos;objet" name="Buyobject"/>
+				<combo_box.item label="Payer l&apos;objet" name="Payobject"/>
+				<combo_box.item label="Ouvrir" name="Open"/>
+			</combo_box>
+			<check_box label="À vendre :" name="checkbox for sale"/>
+			<combo_box name="sale type">
+				<combo_box.item label="Copie" name="Copy"/>
+				<combo_box.item label="Contenus" name="Contents"/>
+				<combo_box.item label="Original" name="Original"/>
+			</combo_box>
+			<spinner label="Prix : L$" name="Edit Cost"/>
+			<check_box label="Afficher dans la recherche" name="search_check" tool_tip="Afficher l&apos;objet dans les résultats de recherche"/>
+			<panel name="perms_build">
+				<text name="perm_modify">
+					Vous pouvez modifier cet objet
+				</text>
+				<text name="Anyone can:">
+					N&apos;importe qui :
+				</text>
+				<check_box label="Copier" name="checkbox allow everyone copy"/>
+				<text name="Next owner can:">
+					Le prochain propriétaire :
+				</text>
+				<check_box label="Modifier" name="checkbox next owner can modify"/>
+				<check_box label="Copier" left_delta="66" name="checkbox next owner can copy"/>
+				<check_box label="Transférer" name="checkbox next owner can transfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet"/>
+				<text name="B:">
+					B :
+				</text>
+				<text name="O:">
+					O :
+				</text>
+				<text name="G:">
+					G :
+				</text>
+				<text name="E:">
+					E :
+				</text>
+				<text name="N:">
+					N :
+				</text>
+				<text name="F:">
+					F :
+				</text>
+			</panel>
+		</panel>
+		<panel label="Objet" name="Object">
+			<check_box label="Verrouillé" name="checkbox locked" tool_tip="Empêche l&apos;objet d&apos;être déplacé ou supprimé. Utile pendant la construction pour éviter les modifications involontaires."/>
+			<check_box label="Physique" name="Physical Checkbox Ctrl" tool_tip="Permet à l&apos;objet d&apos;être poussé et affecté par la gravité"/>
+			<check_box label="Temporaire" name="Temporary Checkbox Ctrl" tool_tip="L&apos;objet est supprimé 1 mn après sa création."/>
+			<check_box label="Fantôme" name="Phantom Checkbox Ctrl" tool_tip="Permet à l&apos;objet de ne pas entrer en collision avec d&apos;autres objets ou avatars."/>
+			<text name="label position">
+				Position (mètres)
+			</text>
+			<spinner label="X" name="Pos X"/>
+			<spinner label="Y" name="Pos Y"/>
+			<spinner label="Z" name="Pos Z"/>
+			<text name="label size">
+				Taille (mètres)
+			</text>
+			<spinner label="X" name="Scale X"/>
+			<spinner label="Y" name="Scale Y"/>
+			<spinner label="Z" name="Scale Z"/>
+			<text name="label rotation">
+				Rotation (degrés)
+			</text>
+			<spinner label="X" name="Rot X"/>
+			<spinner label="Y" name="Rot Y"/>
+			<spinner label="Z" name="Rot Z"/>
+			<combo_box name="comboBaseType">
+				<combo_box.item label="Boîte" name="Box"/>
+				<combo_box.item label="Cylindre" name="Cylinder"/>
+				<combo_box.item label="Prisme" name="Prism"/>
+				<combo_box.item label="Sphère" name="Sphere"/>
+				<combo_box.item label="Tore" name="Torus"/>
+				<combo_box.item label="Tube" name="Tube"/>
+				<combo_box.item label="Anneau" name="Ring"/>
+				<combo_box.item label="Sculptie" name="Sculpted"/>
+			</combo_box>
+			<combo_box name="material">
+				<combo_box.item label="Pierre" name="Stone"/>
+				<combo_box.item label="Métal" name="Metal"/>
+				<combo_box.item label="Verre" name="Glass"/>
+				<combo_box.item label="Bois" name="Wood"/>
+				<combo_box.item label="Chair" name="Flesh"/>
+				<combo_box.item label="Plastique" name="Plastic"/>
+				<combo_box.item label="Caoutchouc" name="Rubber"/>
+			</combo_box>
+			<text name="text cut">
+				Découpe du tracé (début/fin)
+			</text>
+			<spinner label="D" name="cut begin"/>
+			<spinner label="F" name="cut end"/>
+			<text name="text hollow">
+				Creux
+			</text>
+			<text name="text skew">
+				Biais
+			</text>
+			<text name="Hollow Shape">
+				Forme du creux
+			</text>
+			<combo_box name="hole">
+				<combo_box.item label="Défaut" name="Default"/>
+				<combo_box.item label="Cercle" name="Circle"/>
+				<combo_box.item label="Carré" name="Square"/>
+				<combo_box.item label="Triangle" name="Triangle"/>
+			</combo_box>
+			<text name="text twist">
+				Vrille (début/fin)
+			</text>
+			<spinner label="D" name="Twist Begin"/>
+			<spinner label="F" name="Twist End"/>
+			<text name="scale_taper">
+				Biseautage
+			</text>
+			<text name="scale_hole">
+				Taille du trou
+			</text>
+			<spinner label="X" name="Taper Scale X"/>
+			<spinner label="Y" name="Taper Scale Y"/>
+			<text name="text topshear">
+				Inclinaison
+			</text>
+			<spinner label="X" name="Shear X"/>
+			<spinner label="Y" name="Shear Y"/>
+			<text name="advanced_cut">
+				Découpe du profilé (début/fin)
+			</text>
+			<text name="advanced_dimple">
+				Creux (début/fin)
+			</text>
+			<text name="advanced_slice">
+				Tranche (début/fin)
+			</text>
+			<spinner label="D" name="Path Limit Begin"/>
+			<spinner label="F" name="Path Limit End"/>
+			<text name="text taper2">
+				Biseautage
+			</text>
+			<spinner label="X" name="Taper X"/>
+			<spinner label="Y" name="Taper Y"/>
+			<text name="text radius delta">
+				Rayon
+			</text>
+			<text name="text revolutions">
+				Révolutions
+			</text>
+			<texture_picker label="Texture du sculptie" name="sculpt texture control" tool_tip="Cliquez pour sélectionner une image"/>
+			<check_box label="Mirroir" name="sculpt mirror control" tool_tip="Retourne le sculptie le long de l&apos;axe des X."/>
+			<check_box label="A l&apos;envers" name="sculpt invert control" tool_tip="Inverse les valeurs normales d&apos;un sculptie et le fait apparaître à l&apos;envers."/>
+			<text name="label sculpt type">
+				Type de raccord
+			</text>
+			<combo_box name="sculpt type control">
+				<combo_box.item label="(aucun)" name="None"/>
+				<combo_box.item label="Sphère" name="Sphere"/>
+				<combo_box.item label="Tore" name="Torus"/>
+				<combo_box.item label="Plan" name="Plane"/>
+				<combo_box.item label="Cylindre" name="Cylinder"/>
+			</combo_box>
+		</panel>
+		<panel label="Attributs" name="Features">
+			<text name="select_single">
+				Sélectionnez un prim pour modifier les attributs.
+			</text>
+			<text name="edit_object">
+				Modifier les attributs de l&apos;objet :
+			</text>
+			<check_box label="Flexibilité" name="Flexible1D Checkbox Ctrl" tool_tip="Donne à l&apos;objet de la souplesse sur l&apos;axe des Z (côté client uniquement)."/>
+			<spinner label="Souplesse" name="FlexNumSections"/>
+			<spinner label="Gravité" name="FlexGravity"/>
+			<spinner label="Élasticité" name="FlexFriction"/>
+			<spinner label="Vent" name="FlexWind"/>
+			<spinner label="Tension" name="FlexTension"/>
+			<spinner label="Force X" name="FlexForceX"/>
+			<spinner label="Force Y" name="FlexForceY"/>
+			<spinner label="Force Z" name="FlexForceZ"/>
+			<check_box label="Lumière" name="Light Checkbox Ctrl" tool_tip="Permet aux objets d&apos;émettre de la lumière"/>
+			<color_swatch label="" name="colorswatch" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+			<spinner label="Intensité" name="Light Intensity"/>
+			<spinner label="Portée" name="Light Radius"/>
+			<spinner label="Atténuation" name="Light Falloff"/>
+		</panel>
+		<panel label="Texture" name="Texture">
+			<panel.string name="string repeats per meter">
+				Répétitions au mètre
+			</panel.string>
+			<panel.string name="string repeats per face">
+				Répétitions par face
+			</panel.string>
+			<texture_picker label="Texture" name="texture control" tool_tip="Cliquez pour sélectionner une image"/>
+			<color_swatch label="Couleur" name="colorswatch" tool_tip="Cliquer pour ouvrir le sélecteur de couleurs"/>
+			<text name="color trans" width="88">
+				Transparence
+			</text>
+			<text name="glow label">
+				Rayonnement
+			</text>
+			<check_box label="Lumineux" name="checkbox fullbright"/>
+			<text name="tex gen">
+				Application
+			</text>
+			<combo_box name="combobox texgen">
+				<combo_box.item label="Défaut" name="Default"/>
+				<combo_box.item label="Planar" name="Planar"/>
+			</combo_box>
+			<text name="label shininess">
+				Brillance
+			</text>
+			<combo_box name="combobox shininess">
+				<combo_box.item label="Aucune" name="None"/>
+				<combo_box.item label="Faible" name="Low"/>
+				<combo_box.item label="Moyenne" name="Medium"/>
+				<combo_box.item label="Élevée" name="High"/>
+			</combo_box>
+			<text name="label bumpiness">
+				Relief
+			</text>
+			<combo_box name="combobox bumpiness">
+				<combo_box.item label="Aucun" name="None"/>
+				<combo_box.item label="Luminosité" name="Brightness"/>
+				<combo_box.item label="Obscurité" name="Darkness"/>
+				<combo_box.item label="Aggloméré" name="woodgrain"/>
+				<combo_box.item label="Écorce" name="bark"/>
+				<combo_box.item label="Briques" name="bricks"/>
+				<combo_box.item label="Damier" name="checker"/>
+				<combo_box.item label="Béton" name="concrete"/>
+				<combo_box.item label="Carrelage" name="crustytile"/>
+				<combo_box.item label="Pierre de taille" name="cutstone"/>
+				<combo_box.item label="Disques" name="discs"/>
+				<combo_box.item label="Gravier" name="gravel"/>
+				<combo_box.item label="Boîte de Petri" name="petridish"/>
+				<combo_box.item label="Lattes" name="siding"/>
+				<combo_box.item label="Carreaux" name="stonetile"/>
+				<combo_box.item label="Stuc" name="stucco"/>
+				<combo_box.item label="Ventouses" name="suction"/>
+				<combo_box.item label="Tissage" name="weave"/>
+			</combo_box>
+			<text name="tex scale">
+				Répétitions par face
+			</text>
+			<spinner label="Horizontal (U)" name="TexScaleU"/>
+			<check_box label="Inverser" name="checkbox flip s"/>
+			<spinner label="Vertical (V)" name="TexScaleV"/>
+			<check_box label="Inverser" name="checkbox flip t"/>
+			<spinner label="RotationËš" left="122" name="TexRot" width="58"/>
+			<spinner label="Repeats / Meter" left="122" name="rptctrl" width="58"/>
+			<button label="Appliquer" label_selected="Appliquer" left_delta="68" name="button apply" width="75"/>
+			<text name="tex offset">
+				Décalage de la texture
+			</text>
+			<spinner label="Horizontal (U)" name="TexOffsetU"/>
+			<spinner label="Vertical (V)" name="TexOffsetV"/>
+		</panel>
+		<panel label="Contenu" name="Contents">
+			<button label="Nouveau script" label_selected="Nouveau script" name="button new script"/>
+			<button label="Droits" name="button permissions"/>
+		</panel>
+	</tab_container>
+	<panel name="land info panel">
+		<text name="label_parcel_info">
+			Informations sur la parcelle
+		</text>
+		<text name="label_area_price">
+			Prix : [PRICE] L$ pour [AREA] m².
+		</text>
+		<text name="label_area">
+			Surface : [AREA] m²
+		</text>
+		<button label="À propos du terrain..." label_selected="À propos du terrain..." name="button about land" width="142"/>
+		<check_box label="Afficher les propriétaires" name="checkbox show owners" tool_tip="Colorie les parcelles en fonction de leur propriétaire : 
+
+Vert = votre terrain 
+Turquoise = le terrain de votre groupe 
+Rouge = appartenant à d&apos;autres 
+Jaune = en vente 
+Mauve = aux enchères 
+Gris = public"/>
+		<text name="label_parcel_modify">
+			Modifier la parcelle
+		</text>
+		<button label="Diviser" label_selected="Diviser" name="button subdivide land" width="142"/>
+		<button label="Fusionner" label_selected="Fusionner" name="button join land" width="142"/>
+		<text name="label_parcel_trans">
+			Transactions
+		</text>
+		<button label="Acheter le terrain" label_selected="Acheter le terrain" name="button buy land" width="142"/>
+		<button label="Abandonner le terrain" label_selected="Abandonner le terrain" name="button abandon land" width="142"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/inspect_avatar.xml b/indra/newview/skins/default/xui/fr/inspect_avatar.xml
new file mode 100644
index 00000000000..993f2bd5e43
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/inspect_avatar.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_avatar">
+	<string name="Subtitle">
+		[AGE]
+	</string>
+	<string name="Details">
+		[ACCTTYPE], [PAYMENTINFO]
+Profil : [SL_PROFILE]
+	</string>
+	<slider name="volume_slider" tool_tip="Volume de la voix" value="0.5"/>
+	<button label="Devenir amis" name="add_friend_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml b/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml
new file mode 100644
index 00000000000..ba2559a9a11
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+	<menu_item_call label="Voir le profil..." name="Show Profile"/>
+	<menu_item_call label="Envoyer IM..." name="Send IM"/>
+	<menu_item_call label="Devenir amis..." name="Add Friend"/>
+	<menu_item_call label="Supprimer cet ami..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_favorites.xml b/indra/newview/skins/default/xui/fr/menu_favorites.xml
new file mode 100644
index 00000000000..663df9449ac
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_favorites.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Téléporter" name="Teleport To Landmark"/>
+	<menu_item_call label="Voir/Modifier le repère" name="Landmark Open"/>
+	<menu_item_call label="Copier la SLurl" name="Copy slurl"/>
+	<menu_item_call label="Voir sur la carte" name="Show On Map"/>
+	<menu_item_call label="Copier" name="Landmark Copy"/>
+	<menu_item_call label="Coller" name="Landmark Paste"/>
+	<menu_item_call label="Supprimer" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_group_plus.xml b/indra/newview/skins/default/xui/fr/menu_group_plus.xml
new file mode 100644
index 00000000000..e4ad89751f5
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_group_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="Rejoignez des groupes..." name="item_join"/>
+	<menu_item_call label="Nouveau groupe..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml
index ce347afe899..c3c931ad5c3 100644
--- a/indra/newview/skins/default/xui/fr/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml
@@ -1,66 +1,76 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Popup">
-	<menu_item_call label="Acheter" name="Task Buy"/>
-	<menu_item_call label="Ouvrir" name="Task Open"/>
-	<menu_item_call label="Jouer" name="Task Play"/>
-	<menu_item_call label="Propriétés" name="Task Properties"/>
-	<menu_item_call label="Renommer" name="Task Rename"/>
-	<menu_item_call label="Supprimer" name="Task Remove"/>
-	<menu_item_call label="Vider la corbeille" name="Empty Trash"/>
-	<menu_item_call label="Vider les objets trouvés" name="Empty Lost And Found"/>
-	<menu_item_call label="Nouveau dossier" name="New Folder"/>
-	<menu_item_call label="Nouveau script" name="New Script"/>
-	<menu_item_call label="Nouvelle note" name="New Note"/>
-	<menu_item_call label="Nouveau geste" name="New Gesture"/>
-	<menu name="New Clothes">
-		<menu_item_call label="Nouvelle chemise" name="New Shirt"/>
-		<menu_item_call label="Nouveau pantalon" name="New Pants"/>
-		<menu_item_call label="Nouvelles chaussures" name="New Shoes"/>
-		<menu_item_call label="Nouvelles chaussettes" name="New Socks"/>
-		<menu_item_call label="Nouvelle veste" name="New Jacket"/>
-		<menu_item_call label="Nouvelle jupe" name="New Skirt"/>
-		<menu_item_call label="Nouveaux gants" name="New Gloves"/>
-		<menu_item_call label="Nouveau tricot" name="New Undershirt"/>
-		<menu_item_call label="Nouveaux sous-vêtements" name="New Underpants"/>
-	</menu>
-	<menu name="New Body Parts">
-		<menu_item_call label="Nouvelle silhouette" name="New Shape"/>
-		<menu_item_call label="Nouvelle peau" name="New Skin"/>
-		<menu_item_call label="Nouveaux cheveux" name="New Hair"/>
-		<menu_item_call label="Nouveaux yeux" name="New Eyes"/>
-	</menu>
-	<menu_item_call label="Téléporter" name="Landmark Open"/>
-	<menu_item_call label="Ouvrir" name="Animation Open"/>
-	<menu_item_call label="Ouvrir" name="Sound Open"/>
-	<menu_item_call label="Purger l&apos;objet" name="Purge Item"/>
-	<menu_item_call label="Restaurer l&apos;objet" name="Restore Item"/>
-	<menu_item_call label="Ouvrir" name="Open"/>
-	<menu_item_call label="Propriétés" name="Properties"/>
-	<menu_item_call label="Renommer" name="Rename"/>
-	<menu_item_call label="Copier l&apos;UUID (identifiant universel unique)" name="Copy Asset UUID"/>
-	<menu_item_call label="Copier" name="Copy"/>
-	<menu_item_call label="Coller" name="Paste"/>
-	<menu_item_call label="Supprimer" name="Delete"/>
-	<menu_item_call label="Enlever les objets" name="Take Off Items"/>
-	<menu_item_call label="Ajouter à l&apos;ensemble" name="Add To Outfit"/>
-	<menu_item_call label="Remplacer l&apos;ensemble" name="Replace Outfit"/>
-	<menu_item_call label="Démarrer le chat conférence" name="Conference Chat Folder"/>
-	<menu_item_call label="Jouer" name="Sound Play"/>
-	<menu_item_call label="Au sujet du repère" name="Teleport To Landmark"/>
-	<menu_item_call label="Jouer dans le Monde" name="Animation Play"/>
-	<menu_item_call label="Jouer localement" name="Animation Audition"/>
-	<menu_item_call label="Envoyer un message instantané" name="Send Instant Message"/>
-	<menu_item_call label="Offrir de téléporter..." name="Offer Teleport..."/>
-	<menu_item_call label="Démarrer le chat conférence" name="Conference Chat"/>
-	<menu_item_call label="Activer" name="Activate"/>
-	<menu_item_call label="Désactiver" name="Deactivate"/>
-	<menu_item_call label="Détacher de vous" name="Detach From Yourself"/>
-	<menu_item_call label="Remettre dans le dernier emplacement" name="Restore to Last Position"/>
-	<menu_item_call label="Porter" name="Object Wear"/>
-	<menu label="Attacher à" name="Attach To"/>
-	<menu label="Attacher au HUD " name="Attach To HUD"/>
-	<menu_item_call label="Éditer" name="Wearable Edit"/>
-	<menu_item_call label="Porter" name="Wearable Wear"/>
-	<menu_item_call label="Enlever" name="Take Off"/>
-	<menu_item_call label="--aucune option--" name="--no options--"/>
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Acheter" name="Task Buy"/>
+	<menu_item_call label="Ouvrir" name="Task Open"/>
+	<menu_item_call label="Jouer" name="Task Play"/>
+	<menu_item_call label="Propriétés" name="Task Properties"/>
+	<menu_item_call label="Renommer" name="Task Rename"/>
+	<menu_item_call label="Supprimer" name="Task Remove"/>
+	<menu_item_call label="Vider la corbeille" name="Empty Trash"/>
+	<menu_item_call label="Vider les objets trouvés" name="Empty Lost And Found"/>
+	<menu_item_call label="Nouveau dossier" name="New Folder"/>
+	<menu_item_call label="Nouveau script" name="New Script"/>
+	<menu_item_call label="Nouvelle note" name="New Note"/>
+	<menu_item_call label="Nouveau geste" name="New Gesture"/>
+	<menu label="Nouveaux habits" name="New Clothes">
+		<menu_item_call label="Nouvelle chemise" name="New Shirt"/>
+		<menu_item_call label="Nouveau pantalon" name="New Pants"/>
+		<menu_item_call label="Nouvelles chaussures" name="New Shoes"/>
+		<menu_item_call label="Nouvelles chaussettes" name="New Socks"/>
+		<menu_item_call label="Nouvelle veste" name="New Jacket"/>
+		<menu_item_call label="Nouvelle jupe" name="New Skirt"/>
+		<menu_item_call label="Nouveaux gants" name="New Gloves"/>
+		<menu_item_call label="Nouveau tricot" name="New Undershirt"/>
+		<menu_item_call label="Nouveaux sous-vêtements" name="New Underpants"/>
+	</menu>
+	<menu label="Nouvelles parties du corps" name="New Body Parts">
+		<menu_item_call label="Nouvelle silhouette" name="New Shape"/>
+		<menu_item_call label="Nouvelle peau" name="New Skin"/>
+		<menu_item_call label="Nouveaux cheveux" name="New Hair"/>
+		<menu_item_call label="Nouveaux yeux" name="New Eyes"/>
+	</menu>
+	<menu label="Changer de type" name="Change Type">
+		<menu_item_call label="Défaut" name="Default"/>
+		<menu_item_call label="Gants" name="Gloves"/>
+		<menu_item_call label="Veste" name="Jacket"/>
+		<menu_item_call label="Pantalon" name="Pants"/>
+		<menu_item_call label="Silhouette" name="Shape"/>
+		<menu_item_call label="Chaussures" name="Shoes"/>
+		<menu_item_call label="Chemise" name="Shirt"/>
+		<menu_item_call label="Jupe" name="Skirt"/>
+		<menu_item_call label="Sous-vêtements (femme)" name="Underpants"/>
+		<menu_item_call label="Sous-vêtements (homme)" name="Undershirt"/>
+	</menu>
+	<menu_item_call label="Téléporter" name="Landmark Open"/>
+	<menu_item_call label="Ouvrir" name="Animation Open"/>
+	<menu_item_call label="Ouvrir" name="Sound Open"/>
+	<menu_item_call label="Purger l&apos;objet" name="Purge Item"/>
+	<menu_item_call label="Restaurer l&apos;objet" name="Restore Item"/>
+	<menu_item_call label="Ouvrir" name="Open"/>
+	<menu_item_call label="Propriétés" name="Properties"/>
+	<menu_item_call label="Renommer" name="Rename"/>
+	<menu_item_call label="Copier l&apos;UUID (identifiant universel unique)" name="Copy Asset UUID"/>
+	<menu_item_call label="Copier" name="Copy"/>
+	<menu_item_call label="Coller" name="Paste"/>
+	<menu_item_call label="Supprimer" name="Delete"/>
+	<menu_item_call label="Enlever les objets" name="Take Off Items"/>
+	<menu_item_call label="Ajouter à l&apos;ensemble" name="Add To Outfit"/>
+	<menu_item_call label="Remplacer l&apos;ensemble" name="Replace Outfit"/>
+	<menu_item_call label="Démarrer le chat conférence" name="Conference Chat Folder"/>
+	<menu_item_call label="Jouer" name="Sound Play"/>
+	<menu_item_call label="Jouer dans le Monde" name="Animation Play"/>
+	<menu_item_call label="Jouer localement" name="Animation Audition"/>
+	<menu_item_call label="Envoyer un message instantané" name="Send Instant Message"/>
+	<menu_item_call label="Offrir de téléporter..." name="Offer Teleport..."/>
+	<menu_item_call label="Démarrer le chat conférence" name="Conference Chat"/>
+	<menu_item_call label="Activer" name="Activate"/>
+	<menu_item_call label="Désactiver" name="Deactivate"/>
+	<menu_item_call label="Détacher de vous" name="Detach From Yourself"/>
+	<menu_item_call label="Porter" name="Object Wear"/>
+	<menu label="Attacher à" name="Attach To"/>
+	<menu label="Attacher au HUD " name="Attach To HUD"/>
+	<menu_item_call label="Éditer" name="Wearable Edit"/>
+	<menu_item_call label="Porter" name="Wearable Wear"/>
+	<menu_item_call label="Enlever" name="Take Off"/>
+	<menu_item_call label="--aucune option--" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_landmark.xml b/indra/newview/skins/default/xui/fr/menu_landmark.xml
new file mode 100644
index 00000000000..d887fb0f399
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_landmark.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+	<menu_item_call label="Copier la SLurl" name="copy"/>
+	<menu_item_call label="Supprimer" name="delete"/>
+	<menu_item_call label="Créer un Favori" name="pick"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_mini_map.xml b/indra/newview/skins/default/xui/fr/menu_mini_map.xml
index 36107885f4c..5ab5f56ec59 100644
--- a/indra/newview/skins/default/xui/fr/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/fr/menu_mini_map.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
-	<menu_item_call label="Zoom rapproché" name="Zoom Close"/>
-	<menu_item_call label="Zoom moyen" name="Zoom Medium"/>
-	<menu_item_call label="Zoom éloigné" name="Zoom Far"/>
-	<menu_item_call label="Arrêter de suivre" name="Stop Tracking"/>
-	<menu_item_call label="Profil..." name="Profile"/>
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="popup">
+	<menu_item_call label="Zoom rapproché" name="Zoom Close"/>
+	<menu_item_call label="Zoom moyen" name="Zoom Medium"/>
+	<menu_item_call label="Zoom éloigné" name="Zoom Far"/>
+	<menu_item_call label="Arrêter de suivre" name="Stop Tracking"/>
+	<menu_item_call label="Carte du monde" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_navbar.xml b/indra/newview/skins/default/xui/fr/menu_navbar.xml
new file mode 100644
index 00000000000..ce48f8e6171
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_navbar.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+	<menu_item_check label="Voir les coordonnées" name="Show Coordinates"/>
+	<menu_item_call label="Repère" name="Landmark"/>
+	<menu_item_call label="Couper" name="Cut"/>
+	<menu_item_call label="Copier" name="Copy"/>
+	<menu_item_call label="Coller" name="Paste"/>
+	<menu_item_call label="Supprimer" name="Delete"/>
+	<menu_item_call label="Tout sélectionner" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_picks.xml b/indra/newview/skins/default/xui/fr/menu_picks.xml
new file mode 100644
index 00000000000..6fcb8570540
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_picks.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+	<menu_item_call label="Infos" name="pick_info"/>
+	<menu_item_call label="Éditer" name="pick_edit"/>
+	<menu_item_call label="Téléporter" name="pick_teleport"/>
+	<menu_item_call label="Carte" name="pick_map"/>
+	<menu_item_call label="Supprimer" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_place.xml b/indra/newview/skins/default/xui/fr/menu_place.xml
new file mode 100644
index 00000000000..85d8d339826
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_place.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+	<menu_item_call label="Enregistrer comme repère" name="landmark"/>
+	<menu_item_call label="Créer un Favori" name="pick"/>
+	<menu_item_call label="Acheter un pass" name="pass"/>
+	<menu_item_call label="Éditer" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_slurl.xml b/indra/newview/skins/default/xui/fr/menu_slurl.xml
index ebd042a38a5..055be714cf3 100644
--- a/indra/newview/skins/default/xui/fr/menu_slurl.xml
+++ b/indra/newview/skins/default/xui/fr/menu_slurl.xml
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu name="Popup">
-	<menu_item_call label="À propos de l&apos;URL" name="about_url" />
-	<menu_item_call label="Téléporter vers l&apos;URL" name="teleport_to_url" />
-	<menu_item_call label="Voir sur la carte" name="show_on_map" />
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="À propos de l&apos;URL" name="about_url"/>
+	<menu_item_call label="Téléporter vers l&apos;URL" name="teleport_to_url"/>
+	<menu_item_call label="Carte" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_agent.xml b/indra/newview/skins/default/xui/fr/menu_url_agent.xml
new file mode 100644
index 00000000000..76a573cfd57
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_agent.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Voir le profil du résident" name="show_agent"/>
+	<menu_item_call label="Copier le nom dans le presse-papier" name="url_copy_label"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_group.xml b/indra/newview/skins/default/xui/fr/menu_url_group.xml
new file mode 100644
index 00000000000..4615ad0939b
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Voir le profil du groupe" name="show_group"/>
+	<menu_item_call label="Copier le groupe dans le presse-papier" name="url_copy_label"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_http.xml b/indra/newview/skins/default/xui/fr/menu_url_http.xml
new file mode 100644
index 00000000000..27bcb91f7e9
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_http.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Ouvrir la page Web" name="url_open"/>
+	<menu_item_call label="Ouvrir dans un navigateur interne" name="url_open_internal"/>
+	<menu_item_call label="Ouvrir dans un navigateur externe" name="url_open_external"/>
+	<menu_item_call label="Copier l&apos;URL dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_objectim.xml b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml
new file mode 100644
index 00000000000..50bd5b4f747
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Afficher les informations sur l&apos;objet" name="show_object"/>
+	<menu_item_call label="Me téléporter à l&apos;endroit de l&apos;objet" name="teleport_to_object"/>
+	<menu_item_call label="Copier le nom de l&apos;objet dans le presse-papier" name="url_copy_label"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_parcel.xml b/indra/newview/skins/default/xui/fr/menu_url_parcel.xml
new file mode 100644
index 00000000000..1f30203a434
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_parcel.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Afficher les informations sur la parcelle" name="show_parcel"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_slurl.xml b/indra/newview/skins/default/xui/fr/menu_url_slurl.xml
new file mode 100644
index 00000000000..143da035330
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_slurl.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Afficher les informations sur ce lieu" name="show_place"/>
+	<menu_item_call label="Me téléporter à cet endroit" name="teleport_to_location"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_teleport.xml b/indra/newview/skins/default/xui/fr/menu_url_teleport.xml
new file mode 100644
index 00000000000..a32ce65ec15
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_teleport.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Me téléporter à cet endroit." name="teleport"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index a38cf858e0c..8832550add5 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -1,2974 +1,2547 @@
-<?xml version="1.0" encoding="utf-8"?>
-<notifications>
-	<global name="skipnexttime">
-		Ne plus afficher
-	</global>
-	<global name="alwayschoose">
-		Toujours choisir cette option
-	</global>
-	<global name="implicitclosebutton">
-		Fermer
-	</global>
-  <template name="okbutton">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-    </form>
-  </template>
-
-  <template name="okignore">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <ignore text="$ignoretext"/>
-    </form>
-  </template>
-
-  <template name="okcancelbuttons">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Cancel"
-       text="$notext"/>
-    </form>
-  </template>
-
-  <template name="okcancelignore">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Cancel"
-       text="$notext"/>
-      <ignore text="$ignoretext"/>
-    </form>
-  </template>
-
-  <template name="okhelpbuttons">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Help"
-       text="$helptext"/>
-    </form>
-  </template>
-
-  <template name="yesnocancelbuttons">
-    <form>
-      <button
-       name="Yes"
-       text="$yestext"/>
-      <button
-       name="No"
-       text="$notext"/>
-      <button
-       name="Cancel"
-       text="$canceltext"/>
-    </form>
-  </template>
-	<notification functor="GenericAcknowledge" label="Message d&apos;alerte inconnu" name="MissingAlert">
-		Votre version de [APP_NAME] ne peut afficher ce message d&apos;erreur.
-
-Détails de l&apos;erreur : L&apos;alerte, appelée &apos;[_NAME]&apos; est introuvable dans notifications.xml.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="FloaterNotFound">
-		Erreur floater : impossible de trouver les contrôles suivants :
-
-[CONTROLS]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="TutorialNotFound">
-		Aucun didacticiel n&apos;est disponible actuellement.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GenericAlert">
-		[MESSAGE]
-	</notification>
-	<notification name="GenericAlertYesCancel">
-		[MESSAGE]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
-	</notification>
-	<notification name="BadInstallation">
-		Une erreur est survenue lors de la mise à jour de [APP_NAME]. Veuillez télécharger la dernière version depuis secondlife.com.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LoginFailedNoNetwork">
-		Erreur réseau : impossible d&apos;établir une connexion. 
-&apos;[DIAGNOSTIC]&apos;
-Veuillez vérifier votre connexion.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MessageTemplateNotFound">
-		Le modèle de message [PATH] est introuvable.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="WearableSave">
-		Enregistrer les changements dans la partie du corps/les habits actuels ?
-		<usetemplate canceltext="Cancel" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
-	</notification>
-	<notification name="CompileQueueSaveText">
-		Une erreur est survenue lors du chargement du texte pour un script, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
-	</notification>
-	<notification name="CompileQueueSaveBytecode">
-		Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
-	</notification>
-	<notification name="WriteAnimationFail">
-		Une erreur est survenue lors de l&apos;écriture des données d&apos;animation. Veuillez réessayer ultérieurement.
-	</notification>
-	<notification name="UploadAuctionSnapshotFail">
-		Un problème est survenu lors du chargement du script compilé, suite au problème suivant : [REASON]
-	</notification>
-	<notification name="UnableToViewContentsMoreThanOne">
-		Impossible d&apos;afficher les contenus de plus d&apos;un objet à la fois.
-Veuillez ne sélectionner qu&apos;un seul objet.
-	</notification>
-	<notification name="SaveClothingBodyChanges">
-		Enregistrer tous les changements dans les habits/parties du corps ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Tout enregistrer"/>
-	</notification>
-	<notification name="GrantModifyRights">
-		Lorsque vous accordez des droits d&apos;édition à un autre résident, vous lui permettez de changer, supprimer ou prendre n&apos;importe lequel de vos objets dans le Monde. Réfléchissez bien avant d&apos;accorder ces droits.
-Souhaitez-vous accorder des droits d&apos;édition à [FIRST_NAME] [LAST_NAME] ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="GrantModifyRightsMultiple">
-		Lorsque vous accordez des droits d&apos;édition à un autre résident, vous lui permettez de changer n&apos;importe lequel de vos objets dans le Monde. Réfléchissez bien avant d&apos;accorder ces droits.
-Souhaitez-vous accorder des droits d&apos;édition aux résidents selectionnés ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="RevokeModifyRights">
-		Souhaitez-vous retirer les droits d&apos;édition à [FIRST_NAME] [LAST_NAME] ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="RevokeModifyRightsMultiple">
-		Souhaitez-vous retirer les droits d&apos;édition aux résidents selectionnés ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="UnableToCreateGroup">
-		Impossible de créer le groupe.
-[MESSAGE]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="PanelGroupApply">
-		[NEEDS_APPLY_MESSAGE]
-[WANT_APPLY_MESSAGE]
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ignorer les modifications" yestext="Enregistrer les modifications"/>
-	</notification>
-	<notification name="MustSpecifyGroupNoticeSubject">
-		Pour envoyer une notice au groupe, vous devez indiquer un sujet.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="AddGroupOwnerWarning">
-		Vous êtes sur le point d&apos;ajouter des membres du groupe dans le rôle de [ROLE_NAME].
-Les membres ne peuvent pas être destitués de ce rôle.
-Ils doivent donner eux-mêmes leur démission.
-Êtes-vous certain de vouloir continuer ?
-		<usetemplate ignoretext="Lorsque vous donnez à des membres du groupe le rôle de « propriétaire »" name="okcancelignore" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="AssignDangerousActionWarning">
-		Vous êtes sur le point d&apos;ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
- *Avertissement*
- Tout membre disposant de ce pouvoir peut s&apos;affecter lui-même, ainsi que tout autre membre, à des rôles disposant de pouvoirs plus importants, et accéder potentiellement à des pouvoirs proches de ceux d&apos;un propriétaire. Assurez-vous de bien comprendre ce que vous faites avant d&apos;attribuer ce pouvoir.
-
-Ajouter ce pouvoir à « [ROLE_NAME] » ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="AssignDangerousAbilityWarning">
-		Vous êtes sur le point d&apos;ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
-
- *Avertissement*
- Tout membre dans un rôle avec ce pouvoir peut s&apos;attribuer à lui-même, ainsi qu&apos;à tout autre membre, Tous les pouvoirs, et accéder potentiellement à des pouvoirs proches de ceux d&apos;un propriétaire.
-
-Ajouter ce pouvoir à « [ROLE_NAME] » ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="ClickPublishHelpLand">
-		Sélectionner l&apos;option Afficher dans la recherche
-En cochant cette case, votre parcelle apparaîtra :
-- dans les résultats de recherche ;
-- dans les objets publics ;
-- dans la recherche web.
-	</notification>
-	<notification name="ClickSoundHelpLand">
-		La musique et le média ne peuvent être utilisés que sur cette parcelle. Les options Son et Voix peuvent être limités à la parcelle ou seront entendus par les résidents en dehors de la parcelle, en fonction de leur catégorie d&apos;accès. Souhaitez-vous en savoir plus sur le paramétrage de ces options ?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/M%C3%A9dias_sur_la_parcelle_(KB)
-		</url>
-		<usetemplate name="okcancelbuttons" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
-	</notification>
-	<notification name="ClickSearchHelpAll">
-		Les résultats de recherche sont organisés en fonction de l&apos;onglet dans lequel vous vous trouvez, votre catégorie d&apos;accès, la catégorie choisie, ainsi que d&apos;autres facteurs. Pour plus de détails, veuillez consulter les pages d&apos;aide.
-		<url name="url">
-			http://wiki.secondlife.com/wiki/FAQ_sur_la_recherche_(KB)
-		</url>
-		<usetemplate name="okcancelbuttons" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
-	</notification>
-	<notification name="ClickPublishHelpLandDisabled">
-		Cette parcelle ne peut pas apparaître dans la recherche car elle est dans une région où cela n&apos;est pas autorisé.
-	</notification>
-	<notification name="ClickPublishHelpAvatar">
-		Si vous sélectionnez Afficher dans la recherche :
-- votre profil apparaîtra dans les résultats de recherche ;
-- un lien vers votre profil apparaîtra dans les pages de groupe publiques.
-	</notification>
-	<notification name="ClickPartnerHelpAvatar">
-		Vous pouvez proposer à un autre résident de devenir votre partenaire ou dissoudre un partenariat existant à partir du site de [SECOND_LIFE].
-
-Aller sur le site de [SECOND_LIFE] pour avoir plus d&apos;informations sur les partenariats ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Aller sur cette page"/>
-	</notification>
-	<notification name="ClickUploadHelpPermissions">
-		Il est possible que vos droits par défaut ne fonctionnent pas dans les anciennes régions.
-	</notification>
-	<notification name="ClickWebProfileHelpAvatar">
-		Si ce résident a défini une URL de profil web, vous pouvez :
- * Cliquer sur Charger pour afficher la page dans cet onglet ;
- * Cliquer sur Charger &gt; Dans un navigateur externe, pour afficher la page dans votre navigateur par défaut ;
- * Cliquer sur Charger &gt; URL du domicile, pour retourner au profil web du résident.
-
-Lorsque vous êtes dans votre propre profil, vous pouvez définir n&apos;importe quelle URL comme profil web. Pour cela, saisissez l&apos;URL et cliquez sur OK.
-Les autres résidents peuvent visiter l&apos;URL que vous avez définie en regardant votre profil.
-	</notification>
-	<notification name="JoinGroupCanAfford">
-		Rejoindre ce groupe coûte [COST] L$.
-Voulez-vous continuer ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Rejoindre"/>
-	</notification>
-	<notification name="JoinGroupCannotAfford">
-		Rejoindre ce groupe coûte [COST] L$.
-Vous n&apos;avez pas suffisamment de L$ pour rejoindre ce groupe.
-	</notification>
-	<notification name="LandBuyPass">
-		Pour [COST] L$ vous pouvez pénétrer sur ce terrain ([PARCEL_NAME]) et y rester [TIME] heures. Acheter un pass ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="SalePriceRestriction">
-		Pour rendre l&apos;annonce disponible à tous, le prix de vente doit être supérieur à 0 L$.
-Si le prix de vente est de 0 L$, vous devez choisir un acheteur spécifique.
-	</notification>
-	<notification name="ConfirmLandSaleChange">
-		Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
-Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmLandSaleToAnyoneChange">
-		Attention : en cliquant sur Vendre à n&apos;importe qui, vous rendez votre terrain disponible à toute la communauté de [SECOND_LIFE], même aux personnes qui ne sont pas dans cette région.
-
-Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
-Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsDeededToGroup">
-		Êtes-vous certain de vouloir renvoyer tous les objets partagés par le groupe [NAME] sur cette parcelle dans l&apos;inventaire du propriétaire précédent ?
-
-*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
-
-Objets : [N]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsOwnedByUser">
-		Etes-vous certain de vouloir renvoyer tous les objets que [NAME] possède sur cette parcelle dans son inventaire ?
-
-Objets : [N]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsOwnedBySelf">
-		Êtes-vous certain de vouloir renvoyer tous les objets que vous possédez sur cette parcelle dans votre inventaire ?
-
-Objets : [N]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedBySelf">
-		Êtes-vous certain de vouloir renvoyer tous les objets que vous ne possédez pas sur cette parcelle dans l&apos;inventaire de leur propriétaire ?
-Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
-
-*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
-
-Objets : [N]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedByUser">
-		Êtes-vous certain de vouloir renvoyer tous les objets que [NAME] ne possède pas sur cette parcelle dans l&apos;inventaire de leur propriétaire ?
-Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
-
-*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
-
-Objets : [N]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnAllTopObjects">
-		Êtes-vous certain de vouloir renvoyer tous les objets de la liste dans l&apos;inventaire de leur propriétaire ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="DisableAllTopObjects">
-		Êtes-vous certain de vouloir désactiver tous les objets dans cette région ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedByGroup">
-		Renvoyer les objets de cette parcelle qui ne sont pas partagés avec le groupe [NAME] à leur propriétaire ?
-
-Objets : [N]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="UnableToDisableOutsideScripts">
-		Impossible de désactiver les scripts.
-Les dégâts sont autorisés dans toute la région.
-Pour que les armes fonctionnent, les scripts doivent être autorisés.
-	</notification>
-	<notification name="MustBeInParcel">
-		Pour définir le point d&apos;atterrissage, vous devez vous trouver à l&apos;intérieur de la parcelle.
-	</notification>
-	<notification name="PromptRecipientEmail">
-		Veuillez saisir une adresse e-mail valide pour le(s) destinataire(s).
-	</notification>
-	<notification name="PromptSelfEmail">
-		Veuillez saisir votre adresse e-mail.
-	</notification>
-	<notification name="PromptMissingSubjMsg">
-		Envoyer la photo avec le sujet ou le message par défaut ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ErrorProcessingSnapshot">
-		Erreur dans le traitement des données de la photo
-	</notification>
-	<notification name="ErrorEncodingSnapshot">
-		Erreur d&apos;encodage de la photo.
-	</notification>
-	<notification name="ErrorUploadingPostcard">
-		Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]
-	</notification>
-	<notification name="ErrorUploadingReportScreenshot">
-		Une erreur est survenue lors du chargement de la capture d&apos;écran destinée au rapport, suite au problème suivant : [REASON]
-	</notification>
-	<notification name="MustAgreeToLogIn">
-		Pour vous connecter à [SECOND_LIFE], vous devez accepter les Conditions d&apos;utilisation.
-	</notification>
-	<notification name="CouldNotPutOnOutfit">
-		Impossible de mettre cet ensemble.
-Ce dossier ne contient pas d&apos;habits, de parties du corps ni de pièces jointes.
-	</notification>
-	<notification name="CannotWearTrash">
-		Vous ne pouvez pas porter d&apos;habits ni de parties du corps se trouvant dans la corbeille.
-	</notification>
-	<notification name="CannotWearInfoNotComplete">
-		Vous ne pouvez pas porter cet article car il n&apos;a pas encore été chargé. Veuillez réessayer dans une minute.
-	</notification>
-	<notification name="MustHaveAccountToLogIn">
-		Oups! Vous avez oublié de fournir certaines informations.
-Vous devez saisir le nom et le prénom de votre avatar.
-
-Pour entrer dans [SECOND_LIFE], vous devez avoir un compte. Voulez-vous en créer un maintenant ?
-		<usetemplate name="okcancelbuttons" notext="Réessayer" yestext="Créer un compte"/>
-	</notification>
-	<notification name="AddClassified">
-		Les petites annonces sont publiées à l&apos;onglet Petites annonces de la section Recherche pendant une semaine.
-Rédigez votre annonce, puis cliquez sur Publier pour l&apos;ajouter à la liste des annonces.
-Au moment de cliquer sur Publier, vous serez invité à payer des frais.
-Plus vous payez cher, plus votre annonce est visible dans la liste ainsi que dans les résultats de recherche de mots-clés.
-		<usetemplate ignoretext="Lors de l&apos;ajout d&apos;une nouvelle petite annonce" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="DeleteClassified">
-		Supprimer l&apos;annonce [NAME] ?
-Une fois payés, les frais ne sont pas remboursables.
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ClassifiedSave">
-		Enregistrer les changements dans l&apos;annonce [NAME] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
-	</notification>
-	<notification name="DeleteAvatarPick">
-		Supprimer le favori [PICK] ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="PromptGoToEventsPage">
-		Aller à la page web de [SECOND_LIFE] réservée aux événements ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="SelectProposalToView">
-		Veuillez sélectionner une proposition.
-	</notification>
-	<notification name="SelectHistoryItemToView">
-		Veuillez sélectionner un historique.
-	</notification>
-	<notification name="ResetShowNextTimeDialogs">
-		Souhaitez-vous réactiver tous les pop-ups que vous aviez désactivés ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="SkipShowNextTimeDialogs">
-		Voulez-vous désactiver tous les pop-ups qui peuvent être évités ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="CacheWillClear">
-		Le cache sera vidé après le redémarrage de [APP_NAME].
-	</notification>
-	<notification name="CacheWillBeMoved">
-		Le cache sera déplacé après le redémarrage de [APP_NAME].
-Remarque : cela videra le cache.
-	</notification>
-	<notification name="ChangeConnectionPort">
-		Les paramètres du port prendront effet après le redémarrage de [APP_NAME].
-	</notification>
-	<notification name="ChangeSkin">
-		Le nouveau thème apparaîtra après le redémarrage de [APP_NAME].
-	</notification>
-	<notification name="GoToAuctionPage">
-		Aller à la page web de [SECOND_LIFE] pour voir le détail des enchères ou enchérir ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="SaveChanges">
-		Enregistrer les changements ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
-	</notification>
-	<notification name="GestureSaveFailedTooManySteps">
-		L&apos;enregistrement du geste a échoué.
-Il y a trop d&apos;étapes dans ce geste.
-Essayez d&apos;en supprimer quelques-unes.
-	</notification>
-	<notification name="GestureSaveFailedTryAgain">
-		L&apos;enregistrement du geste a échoué. Veuillez réessayer dans une minute.
-	</notification>
-	<notification name="GestureSaveFailedObjectNotFound">
-		Le geste n&apos;a pas pu être enregistré car l&apos;objet ou l&apos;inventaire de l&apos;objet associé n&apos;a pas été trouvé.
-L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
-	</notification>
-	<notification name="GestureSaveFailedReason">
-		Une erreur est survenue lors de l&apos;enregistrement du geste, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre geste ultérieurement.
-	</notification>
-	<notification name="SaveNotecardFailObjectNotFound">
-		La note n&apos;a pas pu être enregistrée car l&apos;objet ou l&apos;inventaire de l&apos;objet associé n&apos;a pas été trouvé.
-L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
-	</notification>
-	<notification name="SaveNotecardFailReason">
-		Une erreur est survenue lors de l&apos;enregistrement de la note, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre note ultérieurement.
-	</notification>
-	<notification name="ScriptCannotUndo">
-		Impossible d&apos;annuler tous les changements dans votre version du script.
-Souhaitez-vous charger la dernière version enregistrée sur le serveur ?
-(**Attention** Cette opération est irréversible.)
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="SaveScriptFailReason">
-		Une erreur est survenue lors de l&apos;enregistrement du script, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre script ultérieurement.
-	</notification>
-	<notification name="SaveScriptFailObjectNotFound">
-		Impossible d&apos;enregistrer le script car l&apos;objet qui le contient est introuvable.
-L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
-	</notification>
-	<notification name="SaveBytecodeFailReason">
-		Une erreur est survenue lors de l&apos;enregistrement du script compilé, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre script ultérieurement.
-	</notification>
-	<notification name="CouldNotStartStopScript">
-		Impossible de lancer ou d&apos;arrêter le script car l&apos;objet qui le contient est introuvable.
-L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
-	</notification>
-	<notification name="CannotDownloadFile">
-		Impossible de télécharger le fichier
-	</notification>
-	<notification name="CannotWriteFile">
-		Impossible d&apos;écrire le fichier [[FILE]]
-	</notification>
-	<notification name="UnsupportedHardware">
-		Avertissement : vous n&apos;avez pas la configuration système requise pour utiliser [APP_NAME]. Si vous continuez à utiliser [APP_NAME], votre performance risque d&apos;être moindre. Malheureusement, nous n&apos;offrons aucune assistance pour les problèmes de configuration système.
-
-MINSPECS
-Voulez-vous visiter [_URL] pour plus d&apos;informations ?
-		<url name="url" option="0">
-			http://secondlife.com/support/sysreqs.php?lang=fr
-		</url>
-		<usetemplate ignoretext="Lors de la détection de matériel non pris en charge" name="okcancelignore" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="UnknownGPU">
-		Votre système contient une carte graphique que nous ne connaissons pas actuellement.
-Cela est souvent le cas avec le nouveau materiel qui n&apos;a pas encore été testé.
-Vous pourrez probablement utiliser [APP_NAME] sans problème, mais vous devrez peut-être ajuster les paramètres de vos graphiques.
-(Menu Édition &gt; Préférences &gt; Graphiques).
-		<form name="form">
-			<ignore name="ignore" text="Lors de la détection d&apos;une carte graphique inconnue"/>
-		</form>
-	</notification>
-	<notification name="DisplaySettingsNoShaders">
-		[APP_NAME] a planté lors de l&apos;initialisation des drivers graphiques.
-La qualité des graphiques sera paramétrée sur Faible pour éviter certaines erreurs de driver fréquentes.
-Certaines fonctionnalités graphiques seront donc désactivées.
-Nous vous recommandons de mettre à jour les drivers de votre carte graphique.
-La qualité des graphiques peut être augmentée à la section Préférences &gt; Graphiques
-	</notification>
-	<notification name="RegionNoTerraforming">
-		Le terraformage est interdit dans la région [REGION].
-	</notification>
-	<notification name="CannotCopyWarning">
-		Vous n&apos;êtes pas autorisé à copier cet objet et il disparaîtra de votre inventaire si vous le donnez. Souhaitez-vous vraiment offrir cet objet ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="CannotGiveItem">
-		Impossible de donner l&apos;objet de l&apos;inventaire.
-	</notification>
-	<notification name="TransactionCancelled">
-		Transaction annulée.
-	</notification>
-	<notification name="TooManyItems">
-		Impossible de donner plus de 42 objets au cours d&apos;un seul transfert d&apos;inventaire.
-	</notification>
-	<notification name="NoItems">
-		Vous n&apos;êtes pas autorisé à transférer les objets sélectionnés.
-	</notification>
-	<notification name="CannotCopyCountItems">
-		Vous n&apos;êtes pas autorisé à copier [COUNT] des objets sélectionnés. Ces objets disparaîtront de votre inventaire.
-Souhaitez-vous vraiment donner ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="CannotGiveCategory">
-		Vous n&apos;êtes pas autorisé à transférer le dossier sélectionné.
-	</notification>
-	<notification name="FreezeAvatar">
-		Geler cet avatar ?
-Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Dégeler" yestext="Geler"/>
-	</notification>
-	<notification name="FreezeAvatarFullname">
-		Geler [AVATAR_NAME] ?
-Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Dégeler" yestext="Geler"/>
-	</notification>
-	<notification name="EjectAvatarFullname">
-		Expulser [AVATAR_NAME] de votre terrain ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Expulser et bannir" yestext="Expulser"/>
-	</notification>
-	<notification name="EjectAvatarNoBan">
-		Expulser cet avatar de votre terrain ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Expulser"/>
-	</notification>
-	<notification name="EjectAvatarFullnameNoBan">
-		Expulser [AVATAR_NAME] de votre terrain ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Expulser"/>
-	</notification>
-	<notification name="AcquireErrorTooManyObjects">
-		Erreur d&apos;acquisition : trop d&apos;objets sélectionnés.
-	</notification>
-	<notification name="AcquireErrorObjectSpan">
-		Erreur d&apos;acquisition : les objets sont répartis dans plus d&apos;une région.
-Veuillez mettre tous les objets que vous souhaitez acquérir dans la même région.
-	</notification>
-	<notification name="PromptGoToCurrencyPage">
-		[EXTRA]
-
-Aller sur [_URL] pour obtenir des informations sur l&apos;achat de L$ ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="UnableToLinkObjects">
-		Impossible de lier ces [COUNT] objets.
-Vous pouvez lier un maximum de [MAX] objets.
-	</notification>
-	<notification name="CannotLinkIncompleteSet">
-		Vous ne pouvez lier que des ensembles d&apos;objets complets et vous devez choisir un minimum de deux objets.
-	</notification>
-	<notification name="CannotLinkModify">
-		Impossible de lier car vous n&apos;avez pas le droit de modifier tous les objets.
-
-Assurez-vous que vous êtes le propriétaire de tous les objets et qu&apos;aucun d&apos;eux n&apos;est verrouillé.
-	</notification>
-	<notification name="CannotLinkDifferentOwners">
-		Impossible de lier car les objets n&apos;ont pas tous le même propriétaire.
-
-Assurez-vous que vous êtes le propriétaire de tous les objets sélectionnés.
-	</notification>
-	<notification name="NoFileExtension">
-		Pas d&apos;extension pour le fichier suivant : &apos;[FILE]&apos;
-
-Assurez-vous que le fichier a l&apos;extension correcte.
-	</notification>
-	<notification name="InvalidFileExtension">
-		Extension de fichier [EXTENSION] invalide
-[VALIDS] attendu
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CannotUploadSoundFile">
-		Impossible de lire le fichier son chargé :
-[FILE]
-	</notification>
-	<notification name="SoundFileNotRIFF">
-		Il semble que le fichier ne soit pas un fichier RIFF WAVE :
-[FILE]
-	</notification>
-	<notification name="SoundFileNotPCM">
-		Il semble que le fichier ne soit pas un fichier audio PCM WAVE :
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidChannelCount">
-		Le fichier contient un nombre de canaux invalide (doit être mono ou stéréo) :
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidSampleRate">
-		Le fichier ne semble pas être pris en charge (doit être 44,1 k) :
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidWordSize">
-		Le fichier ne semble pas être pris en charge (doit faire 8 ou 16 bit) :
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidHeader">
-		Impossible de trouver les données dans l&apos;en-tête WAV :
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidTooLong">
-		Le fichier audio est trop long (10 secondes maximum) :
-[FILE]
-	</notification>
-	<notification name="ProblemWithFile">
-		Problème avec le fichier [FILE] :
-
-[ERROR]
-	</notification>
-	<notification name="CannotOpenTemporarySoundFile">
-		Impossible d&apos;ouvrir le fichier son compressé temporaire : [FILE]
-	</notification>
-	<notification name="UnknownVorbisEncodeFailure">
-		Échec d&apos;encodage Vorbis inconnu sur : [FILE]
-	</notification>
-	<notification name="CannotEncodeFile">
-		Impossible d&apos;encoder le fichier : [FILE]
-	</notification>
-	<notification name="CorruptResourceFile">
-		Fichier ressource corrompu : [FILE]
-	</notification>
-	<notification name="UnknownResourceFileVersion">
-		Version de fichier ressource Linden inconnu : [FILE]
-	</notification>
-	<notification name="UnableToCreateOutputFile">
-		Impossible de créer le fichier de sortie : [FILE]
-	</notification>
-	<notification name="DoNotSupportBulkAnimationUpload">
-		Actuellement, nous ne prenons pas en charge le chargement de lots de fichiers d&apos;animation.
-	</notification>
-	<notification name="CannotUploadReason">
-		Impossible de charger [FILE] suite au problème suivant : [REASON]
-Veuillez réessayer ultérieurement.
-	</notification>
-	<notification name="CannotCreateLandmarkNotOwner">
-		Vous ne pouvez pas créer de repère ici car le propriétaire du terrain ne l&apos;autorise pas.
-	</notification>
-	<notification name="CannotRecompileSelectObjectsNoScripts">
-		Impossible d&apos;effectuer les recompilations.
-Sélectionnez un objet avec un script.
-	</notification>
-	<notification name="CannotRecompileSelectObjectsNoPermission">
-		Impossible d&apos;effectuer les recompilations.
-
-Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
-	</notification>
-	<notification name="CannotResetSelectObjectsNoScripts">
-		Impossible d&apos;effectuer la réinitialisation.
-
-Veuillez sélectionner des objets avec des scripts.
-	</notification>
-	<notification name="CannotResetSelectObjectsNoPermission">
-		Impossible d&apos;effectuer la réinitialisation.
-
-Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
-	</notification>
-	<notification name="CannotSetRunningSelectObjectsNoScripts">
-		Impossible de définir les scripts sur « exécution ».
-
-Veuillez sélectionner des objets avec des scripts.
-	</notification>
-	<notification name="CannotSetRunningNotSelectObjectsNoScripts">
-		Impossible de définir les scripts sur « non-exécution ».
-
-Veuillez sélectionner des objets avec des scripts.
-	</notification>
-	<notification name="NoFrontmostFloater">
-		Aucun floater frontmost à sauvegarder.
-	</notification>
-	<notification name="SeachFilteredOnShortWords">
-		Votre requête a été modifiée et les mots trops courts ont été supprimés.
-
-Recherche effectuée : [FINALQUERY]
-	</notification>
-	<notification name="SeachFilteredOnShortWordsEmpty">
-		Vos termes de recherche étaient trop courts et aucune recherche n&apos;a été effectuée.
-	</notification>
-	<notification name="CouldNotTeleportReason">
-		Impossible de téléporter.
-[REASON]
-	</notification>
-	<notification name="invalid_tport">
-		Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à la page suivante :
-www.secondlife.com/support
-	</notification>
-	<notification name="invalid_region_handoff">
-		Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à la page suivante :
-www.secondlife.com/support
-	</notification>
-	<notification name="blocked_tport">
-		Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
-Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
-	</notification>
-	<notification name="nolandmark_tport">
-		Désolé, le système n&apos;a pas réussi à localiser la destination de votre repère.
-	</notification>
-	<notification name="timeout_tport">
-		Désolé, la connexion vers votre lieu de téléportation n&apos;a pas abouti.
-Veuillez réessayer dans un moment.
-	</notification>
-	<notification name="noaccess_tport">
-		Désolé, vous n&apos;avez pas accès à cette destination.
-	</notification>
-	<notification name="missing_attach_tport">
-		Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d&apos;essayer de vous téléporter.
-	</notification>
-	<notification name="too_many_uploads_tport">
-		Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
-	</notification>
-	<notification name="expired_tport">
-		Désolé, votre demande de téléportation n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
-	</notification>
-	<notification name="expired_region_handoff">
-		Désolé, votre demande pour passer dans une autre région n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
-	</notification>
-	<notification name="no_host">
-		Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu&apos;elle n&apos;existe plus. Veuillez réessayer dans quelques minutes.
-	</notification>
-	<notification name="no_inventory_host">
-		L&apos;inventaire est temporairement indisponible.
-	</notification>
-	<notification name="CannotSetLandOwnerNothingSelected">
-		Impossible de définir le propriétaire foncier :
-aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotSetLandOwnerMultipleRegions">
-		Impossible de définir un propriétaire car la sélection couvre plusieurs régions. Veuillez sélectionner une zone plus petite et réessayer.
-	</notification>
-	<notification name="ForceOwnerAuctionWarning">
-		Cette parcelle est mise aux enchères. Définir un propriétaire annulerait les enchères, ce qui pourrait être gênant pour certains résidents si ces dernières ont commencé. Souhaitez-vous définir un propriétaire ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="CannotContentifyNothingSelected">
-		Problème :
-Aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotContentifyNoRegion">
-		Problème :
-Aucune région sélectionnée.
-	</notification>
-	<notification name="CannotReleaseLandNothingSelected">
-		Impossible d&apos;abandonner le terrain :
-aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotReleaseLandNoRegion">
-		Impossible d&apos;abandonner le terrain :
-la région est introuvable.
-	</notification>
-	<notification name="CannotBuyLandNothingSelected">
-		Impossible d&apos;acheter le terrain :
-aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotBuyLandNoRegion">
-		Impossible d&apos;acheter le terrain :
-la région dans laquelle il est situé est introuvable.
-	</notification>
-	<notification name="CannotCloseFloaterBuyLand">
-		Vous ne pouvez pas fermer la fenêtre Acheter le terrain avant que [APP_NAME] n&apos;estime le montant de cette transaction.
-	</notification>
-	<notification name="CannotDeedLandNothingSelected">
-		Cession du terrain impossible :
-aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotDeedLandNoGroup">
-		Cession du terrain impossible :
-aucun groupe sélectionné.
-	</notification>
-	<notification name="CannotDeedLandNoRegion">
-		Cession du terrain impossible :
-la région dans laquelle il est situé est introuvable.
-	</notification>
-	<notification name="CannotDeedLandMultipleSelected">
-		Cession du terrain impossible :
-plusieurs parcelles sélectionnées.
-
-Essayez de ne sélectionner qu&apos;une seule parcelle.
-	</notification>
-	<notification name="ParcelCanPlayMedia">
-		Cette parcelle propose des flux média.
-Pour jouer des flux média, il faut avoir une connexion internet rapide.
-
-Jouer les flux média lorsqu&apos;ils sont disponibles ?
-(Vous pourrez modifier cette option ultérieurement sous Préférences &gt; Audio et vidéo.)
-		<usetemplate name="okcancelbuttons" notext="Désactiver" yestext="Jouer le média"/>
-	</notification>
-	<notification name="CannotDeedLandWaitingForServer">
-		Cession du terrain impossible :
-rapport de propriété sur le point d&apos;être envoyé par le serveur.
-
-Merci de réessayer.
-	</notification>
-	<notification name="CannotDeedLandNoTransfer">
-		Cession du terrain impossible :
-la cession de terrain est interdite dans la région [REGION].
-	</notification>
-	<notification name="CannotReleaseLandWatingForServer">
-		Impossible d&apos;abandonner le terrain :
-mise à jour des informations sur la parcelle sur le point d&apos;être envoyée par le serveur.
-
-Veuillez réessayer dans quelques secondes.
-	</notification>
-	<notification name="CannotReleaseLandSelected">
-		Impossible d&apos;abandonner le terrain :
-vous n&apos;êtes pas le propriétaire des parcelles sélectionnées.
-
-Veuillez sélectionner une seule parcelle.
-	</notification>
-	<notification name="CannotReleaseLandDontOwn">
-		Impossible d&apos;abandonner le terrain :
-vous n&apos;avez pas le droit de libérer cette parcelle.
-Les parcelles qui vous appartiennent sont en vert.
-	</notification>
-	<notification name="CannotReleaseLandRegionNotFound">
-		Impossible d&apos;abandonner le terrain :
-la région dans laquelle il est situé est introuvable.
-	</notification>
-	<notification name="CannotReleaseLandNoTransfer">
-		Impossible d&apos;abandonner le terrain :
-le transfert de terrain est interdit dans la région [REGION].
-	</notification>
-	<notification name="CannotReleaseLandPartialSelection">
-		Impossible d&apos;abandonner le terrain :
-vous devez sélectionner une parcelle entière pour la libérer.
-
-Sélectionnez toute la parcelle ou divisez-la d&apos;abord.
-	</notification>
-	<notification name="ReleaseLandWarning">
-		Vous vous apprêtez à libérer [AREA] m² de terrain.
-Si vous libérez cette parcelle, elle sera supprimée de votre patrimoine, mais vous ne recevrez pas de L$.
-
-Libérer ce terrain ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="CannotDivideLandNothingSelected">
-		Division du terrain impossible :
-
-aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotDivideLandPartialSelection">
-		Division du terrain impossible :
-
-Toute la parcelle est sélectionnée.
-Sélectionnez une partie de la parcelle uniquement.
-	</notification>
-	<notification name="LandDivideWarning">
-		Si vous divisez ce terrain, cette parcelle sera partagée en deux et chaque parcelle pourra avoir ses propres paramètres. Après cette opération, certains paramètres reviendront aux paramètres par défaut.
-
-Diviser le terrain ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="CannotDivideLandNoRegion">
-		Division du terrain impossible :
-la région dans laquelle il est situé est introuvable.
-	</notification>
-	<notification name="CannotJoinLandNoRegion">
-		Impossible de fusionner le terrain :
-la région dans laquelle il est situé est introuvable.
-	</notification>
-	<notification name="CannotJoinLandNothingSelected">
-		Impossible de fusionner le terrain :
-aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotJoinLandEntireParcelSelected">
-		Impossible de fusionner le terrain :
-vous avez sélectionné une seule parcelle.
-
-Sélectionnez le terrain sur les deux parcelles.
-	</notification>
-	<notification name="CannotJoinLandSelection">
-		Impossible de fusionner le terrain :
-vous devez sélectionner au moins deux parcelles.
-
-Sélectionnez le terrain sur les deux parcelles.
-	</notification>
-	<notification name="JoinLandWarning">
-		En fusionnant ce terrain, vous créerez une grande parcelle composée de toutes les parcelles se trouvant dans le rectangle sélectionné.
-Vous devrez réinitialiser le nom et les options de la nouvelle parcelle.
-
-Fusionner le terrain ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ShowOwnersHelp">
-		Afficher les propriétaires :
-La couleur des parcelles indique le type de propriété.
-
-Vert = votre terrain
-Turquoise = le terrain de votre groupe
-Rouge = appartenant à d&apos;autres
-Jaune = en vente
-Mauve = aux enchères
-Gris = public
-	</notification>
-	<notification name="ConfirmNotecardSave">
-		Cette note doit être sauvegardée avant que l&apos;objet ne puisse être copié ou visualisé. Enregistrer la note ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmItemCopy">
-		Copier cet objet dans votre inventaire ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Copier"/>
-	</notification>
-	<notification name="ResolutionSwitchFail">
-		Échec du changement de résolution (à [RESX], de [RESY])
-	</notification>
-	<notification name="ErrorUndefinedGrasses">
-		Erreur : herbes non identifiées : [SPECIES]
-	</notification>
-	<notification name="ErrorUndefinedTrees">
-		Erreur : arbres non identifiés : [SPECIES]
-	</notification>
-	<notification name="CannotSaveWearableOutOfSpace">
-		Impossible de sauvegarder [NAME]. Pour pouvoir sauvegarder ce fichier, vous devez d&apos;abord libérer de la mémoire sur votre ordinateur.
-	</notification>
-	<notification name="CannotSaveToAssetStore">
-		Impossible de sauvegarder le fichier [NAME] dans la base de données centrale.
-Cette erreur est généralement temporaire. Veuillez éditer et sauvegarder l&apos;élément endossable à nouveau d&apos;ici quelques minutes.
-	</notification>
-	<notification name="YouHaveBeenLoggedOut">
-		Vous avez été déconnecté(e) de [SECOND_LIFE] :
-            [MESSAGE]
-Vous pouvez afficher vos messages instantanés et votre chat en cliquant sur Afficher IM et chat. Sinon, cliquez sur Quitter pour quitter immédiatement [APP_NAME].
-		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Afficher IM et chat"/>
-	</notification>
-	<notification name="OnlyOfficerCanBuyLand">
-		Impossible d&apos;acheter du terrain pour le groupe :
-Vous n&apos;avez pas le droit d&apos;acheter de terrain pour votre groupe.
-	</notification>
-	<notification label="Devenir amis" name="AddFriend">
-		Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu&apos;ils se connectent.
-
-Proposer à [NAME] de devenir votre ami(e) ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification label="Devenir amis" name="AddFriendWithMessage">
-		Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu&apos;ils se connectent.
-
-Proposer à [NAME] de devenir votre ami(e) ?
-		<form name="form">
-			<input name="message">
-				Voulez-vous être mon ami(e) ?
-			</input>
-			<button name="Offer" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="RemoveFromFriends">
-		Voulez-vous supprimer [FIRST_NAME] [LAST_NAME] de votre liste d&apos;amis ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="RemoveMultipleFromFriends">
-		Voulez-vous supprimer plusieurs résidents de votre liste d&apos;amis ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllScriptedPublicObjectsByUser">
-		Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains des autres résidents dans cette région ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllScriptedObjectsByUser">
-		Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllObjectsByUser">
-		Êtes-vous certain de vouloir supprimer tous les objets (scriptés ou pas) appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BlankClassifiedName">
-		Vous devez choisir un nom pour votre petite annonce.
-	</notification>
-	<notification name="MinClassifiedPrice">
-		Le coût de l&apos;annonce doit être de [MIN_PRICE] L$ minimum.
-
-Veuillez saisir un montant plus élevé.
-	</notification>
-	<notification name="ConfirmObjectDeleteLock">
-		Au moins un des objets que vous avez sélectionnés est verrouillé.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoCopy">
-		Au moins un des objets que vous avez sélectionnés n&apos;est pas copiable.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoOwn">
-		Au moins un des objets que vous avez sélectionnés ne vous appartient pas.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoCopy">
-		Au moins un des objets est verrouillé.
-Au moins un des objets n&apos;est pas copiable.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoOwn">
-		Au moins un des objets est verrouillé.
-Au moins un des objets ne vous appartient pas.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoCopyNoOwn">
-		Au moins un des objets n&apos;est pas copiable.
-Au moins un des objets ne vous appartient pas.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
-		Au moins un des objets est verrouillé.
-Au moins un des objets n&apos;est pas copiable.
-Au moins un des objets ne vous appartient pas.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeLock">
-		Au moins un des objets est verrouillé.
-
-Êtes-vous certain de vouloir prendre ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeNoOwn">
-		Vous n&apos;êtes pas le propriétaire de tous les objets que vous prenez.
-Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
-
-Êtes-vous certain de vouloir prendre ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeLockNoOwn">
-		Au moins un des objets est verrouillé.
-Vous n&apos;êtes pas le propriétaire de tous les objets que vous prenez.
-Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
-Par contre, vous pouvez prendre les objets sélectionnés.
-
-Êtes-vous certain de vouloir prendre ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="CantBuyLandAcrossMultipleRegions">
-		Impossible d&apos;acheter le terrain car la sélection couvre plusieurs régions.
-
-Veuillez sélectionner une zone plus petite et réessayer.
-	</notification>
-	<notification name="DeedLandToGroup">
-		Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
-Le prix de la vente du terrain n&apos;est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
-
-Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="DeedLandToGroupWithContribution">
-		Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
-La cession incluera une contribution de terrain simultanée au groupe de [FIRST_NAME] [LAST_NAME].
-Le prix de la vente du terrain n&apos;est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
-
-Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="DisplaySetToSafe">
-		Les paramètres d&apos;affichage sont au niveau le plus sûr, comme vous l&apos;aviez indiqué.
-	</notification>
-	<notification name="DisplaySetToRecommended">
-		Vos paramètres d&apos;affichage ont été réglés avec une marge de sécurité en fonction de votre configuration système.
-	</notification>
-	<notification name="ErrorMessage">
-		[ERROR_MESSAGE]
-	</notification>
-	<notification name="AvatarMoved">
-		L&apos;emplacement [TYPE] n&apos;est pas disponible actuellement. [HELP]
-Vous avez été déplacé dans une région voisine.
-	</notification>
-	<notification name="ClothingLoading">
-		Vos habits sont toujours en train d&apos;être téléchargés.
-Vous pouvez utiliser [SECOND_LIFE] sans problème, les autres résidents vous voient normalement.
-		<form name="form">
-			<ignore name="ignore" text="Lorsque les habits prennent longtemps à télécharger"/>
-		</form>
-	</notification>
-	<notification name="FirstRun">
-		L&apos;installation de [APP_NAME] est terminée.
-
-S&apos;il s&apos;agit de la première fois que vous utilisez [SECOND_LIFE], vous devrez créer un compte avant de pouvoir vous connecter.
-Retourner sur www.secondlife.com pour créer un nouveau compte ?
-		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Nouveau compte..."/>
-	</notification>
-	<notification name="LoginPacketNeverReceived">
-		Vous avez des problèmes à vous connecter. Il peut s&apos;agir d&apos;un problème avec votre connexion internet ou les serveurs de [SECOND_LIFE].
-
-Nous vous conseillons de vérifier votre connexion Internet et de réessayer dans quelques minutes, de cliquer sur Aide, ou bien de cliquer sur Téléporter pour être téléporté vers votre domicile.
-		<form name="form">
-			<button name="OK" text="OK"/>
-			<button name="Help" text="Aide"/>
-			<button name="Teleport" text="Téléporter"/>
-		</form>
-	</notification>
-	<notification name="WelcomeChooseSex">
-		Votre personnage va apparaître dans un moment.
-
-Pour marcher, utilisez les flèches de direction.
-Appuyez sur F1 pour obtenir de l&apos;aide ou en savoir plus sur [SECOND_LIFE].
-Choisissez un avatar homme ou femme.
-Vous pourrez revenir sur votre décision plus tard.
-		<usetemplate name="okcancelbuttons" notext="Femme" yestext="Homme"/>
-	</notification>
-	<notification name="NotEnoughCurrency">
-		[NAME] [PRICE] L$ Vous n&apos;avez pas suffisamment de L$ pour faire cela.
-	</notification>
-	<notification name="GrantedModifyRights">
-		Vous avez reçu le droit de modifier les objets de [FIRST_NAME] [LAST_NAME].
-	</notification>
-	<notification name="RevokedModifyRights">
-		Vous n&apos;avez plus le droit de modifier les objets de [FIRST_NAME] [LAST_NAME].
-	</notification>
-	<notification name="FlushMapVisibilityCaches">
-		Cela videra le cache cartographique de cette région.
-Cela n&apos;est vraiment utile que pour faire du débugage.
-(En production, attendez 5 minutes. Les cartes seront mises à jour après reconnexion.)
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BuyOneObjectOnly">
-		Impossible d&apos;acheter plus d&apos;un objet à  la fois.  Veuillez ne sélectionner qu&apos;un seul objet.
-	</notification>
-	<notification name="OnlyCopyContentsOfSingleItem">
-		Impossible de copier les contenus de plus d&apos;un objet à la fois.
-Veuillez ne sélectionner qu&apos;un seul objet.
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="KickUsersFromRegion">
-		Téléporter tous les résidents de cette région chez eux ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="EstateObjectReturn">
-		Etes-vous certain de vouloir renvoyer les objets appartenant à [USER_NAME] ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="InvalidTerrainBitDepth">
-		Impossible de definir les textures de la région :
-La texture du terrain [TEXTURE_NUM] a une profondeur invalide ([TEXTURE_BIT_DEPTH]).
-
-Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
-	</notification>
-	<notification name="InvalidTerrainSize">
-		Impossible de definir les textures de la région :
-La texture du terrain [TEXTURE_NUM] est trop volumineuse ([TEXTURE_SIZE_X] X [TEXTURE_SIZE_Y]).
-
-Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
-	</notification>
-	<notification name="RawUploadStarted">
-		Le chargement a commencé. Cela va prendre une à deux minutes,
-suivant votre vitesse de connexion.
-	</notification>
-	<notification name="ConfirmBakeTerrain">
-		Etes-vous sûr(e) de vouloir figer le relief actuel, en faire le point central des limites d&apos;élévation/abaissement de relief et la valeur par défaut du bouton Annuler modification ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="MaxAllowedAgentOnRegion">
-		Vous ne pouvez pas autoriser plus de [MAX_AGENTS] résidents.
-	</notification>
-	<notification name="MaxBannedAgentsOnRegion">
-		Vous ne pouvez pas bannir plus de [MAX_BANNED] résidents.
-	</notification>
-	<notification name="MaxAgentOnRegionBatch">
-		Echec lors de la tentative d&apos;ajout de [NUM_ADDED] agents :
-Dépasse la limite fixée à [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS].
-	</notification>
-	<notification name="MaxAllowedGroupsOnRegion">
-		Vous ne pouvez pas avoir plus que [MAX_GROUPS] groupes autorisés.
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Figer"/>
-	</notification>
-	<notification name="MaxManagersOnRegion">
-		Vous ne pouvez avoir que [MAX_MANAGER] gérants de domaine.
-	</notification>
-	<notification name="OwnerCanNotBeDenied">
-		Impossible d&apos;ajouter le propriétaire du domaine à la liste des résidents bannis.
-	</notification>
-	<notification name="CanNotChangeAppearanceUntilLoaded">
-		Impossible de changer d&apos;apparence jusqu&apos;à ce que les habits et la silhouette soient chargés.
-	</notification>
-	<notification name="ClassifiedMustBeAlphanumeric">
-		Le nom de votre petite annonce doit commencer par un chiffre ou une lettre (A à Z). La ponctuation n&apos;est pas autorisée.
-	</notification>
-	<notification name="CantSetBuyObject">
-		Cet objet n&apos;est pas à vendre.
-Veuillez choisir un objet à vendre et réessayer.
-	</notification>
-	<notification name="FinishedRawDownload">
-		Chargement du fichier de terrain raw effectué vers :
-[DOWNLOAD_PATH].
-	</notification>
-	<notification name="DownloadWindowsMandatory">
-		Une nouvelle version de [APP_NAME] est disponible.
-[MESSAGE]
-Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
-		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
-	</notification>
-	<notification name="DownloadWindows">
-		Une mise à jour de [APP_NAME] est disponible.
-[MESSAGE]
-Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
-		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
-	</notification>
-	<notification name="DownloadWindowsReleaseForDownload">
-		Une mise à jour de [APP_NAME] est disponible.
-[MESSAGE]
-Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
-		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
-	</notification>
-	<notification name="DownloadMacMandatory">
-		Une nouvelle version de [APP_NAME] est disponible.
-[MESSAGE]
-Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
-
-Télécharger vers le dossier Applications ?
-		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
-	</notification>
-	<notification name="DownloadMac">
-		Une mise à jour de [APP_NAME] est disponible.
-[MESSAGE]
-Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
-
-Télécharger vers le dossier Applications ?
-		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
-	</notification>
-	<notification name="DownloadMacReleaseForDownload">
-		Une mise à jour de [APP_NAME] est disponible.
-[MESSAGE]
-Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
-
-Télécharger vers le dossier Applications ?
-		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
-	</notification>
-	<notification name="DeedObjectToGroup">
-		Si vous cédez cet objet, le groupe :
-* recevra les L$ versés pour l&apos;objet ;
-		<usetemplate ignoretext="Lors de la cession d&apos;objets au groupe" name="okcancelignore" notext="Annuler" yestext="Céder"/>
-	</notification>
-	<notification name="WebLaunchExternalTarget">
-		Ouvrir votre navigateur web système pour afficher ce contenu ?
-		<usetemplate ignoretext="Lors de l&apos;ouverture de votre navigateur système pour afficher une page web" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchJoinNow">
-		Aller sur www.secondlife.com pour gérer votre compte ?
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour gérer votre compte" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchSecurityIssues">
-		Pour apprendre à signaler un problème de sécurité, consultez le Wiki de [SECOND_LIFE].
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour consulter la page Wiki sur les problèmes de sécurité." name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchQAWiki">
-		Consultez le Wiki sur l&apos;Assurance Qualité de [SECOND_LIFE].
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour consulter la page Wiki sur l&apos;Assurance Qualité." name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchPublicIssue">
-		Pour signaler des bugs et autres problèmes, utilisez le JIRA de [SECOND_LIFE].
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour consulter le JIRA" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
-	</notification>
-	<notification name="WebLaunchPublicIssueHelp">
-		Pour apprendre à utiliser JIRA, consultez le Wiki de [SECOND_LIFE].
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour consulter la page Wiki sur le JIRA" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
-	</notification>
-	<notification name="WebLaunchSupportWiki">
-		Visitez le blog officiel des Lindens pour les dernières nouvelles et informations.
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour consulter le blog" name="okcancelignore" notext="Annuler" yestext="Aller à la page"/>
-	</notification>
-	<notification name="WebLaunchLSLGuide">
-		Consulter le Guide guide pour l&apos;écriture de scripts pour obtenir de l&apos;aide ?
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour voir le Guide pour l&apos;écriture de scripts" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchLSLWiki">
-		Consulter le Wiki LSL pour de l&apos;aide sur les scripts ?
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour consulter le Guide sur l&apos;écriture de scripts" name="okcancelignore" notext="Annuler" yestext="Aller à la page"/>
-	</notification>
-	<notification name="ReturnToOwner">
-		Êtes-vous certain de vouloir renvoyer les objets sélectionnés à leur propriétaire ? Les objets donnés transférables seront renvoyés à leur ancien propriétaire.
-
-*Avertissement* Les objets non transférables seront supprimés !
-		<usetemplate ignoretext="Lors du renvoi d&apos;objets à leurs propriétaires" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="GroupLeaveConfirmMember">
-		Vous êtes actuellement membre du groupe [GROUP].
-Quitter le groupe ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmKick">
-		Souhaitez-vous vraiment éjecter tous les utilisateurs de la grille ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous"/>
-	</notification>
-	<notification name="MuteLinden">
-		Désolé, vous ne pouvez pas ignorer un Linden.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CannotStartAuctionAlreadyForSale">
-		Vous ne pouvez pas démarrer des enchères sur une parcelle déjà en vente.  Si vous êtes certain de vouloir démarrer des enchères, mettez fin à la vente.
-	</notification>
-	<notification label="Échec de la fonction Ignorer les objets par nom" name="MuteByNameFailed">
-		Vous ignorez déjà ce résident.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="RemoveItemWarn">
-		Si vous supprimez des contenus, vous risquez d&apos;endommager l&apos;objet. Souhaitez-vous supprimer cet objet ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="CantOfferCallingCard">
-		Impossible d&apos;offrir une carte de visite actuellement. Veuillez réessayer dans un moment.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CantOfferFriendship">
-		Impossible de proposer votre amitié actuellement. Veuillez réessayer dans un moment.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="BusyModeSet">
-		Mode occupé activé.
-Les chats et les messages instantanés ne s&apos;afficheront pas. Vous répondrez aux messages instantanés en utilisant la réponse automatique que vous avez créée. Toutes les propositions de téléportation seront refusées. Tous objets envoyés iront dans la corbeille.
-		<usetemplate ignoretext="Lors de l&apos;utilisation du mode Occupé" name="okignore" yestext="OK"/>
-	</notification>
-	<notification name="JoinedTooManyGroupsMember">
-		Vous appartenez déjà à un nombre élevé de groupes et nous ne pouvez pas en rejoindre un nouveau. Avant de pouvoir rejoindre ce groupe, vous devez en quitter un ou refuser cette offre.
-Pour quitter un groupe, sélectionnez l&apos;option Groupe dans le menu Éditer.
-[NAME] vous invite à rejoindre un groupe.
-[INVITE]
-		<usetemplate name="okcancelbuttons" notext="Refuser" yestext="Rejoindre"/>
-	</notification>
-	<notification name="KickUser">
-		Éjecter cet utilisateur avec quel message ?
-		<form name="form">
-			<input name="message">
-				Un administrateur vous a déconnecté.
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="KickAllUsers">
-		Éjecter tous les résidents actuellement en ligne avec quel message ?
-		<form name="form">
-			<input name="message">
-				Un administrateur vous a déconnecté.
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="FreezeUser">
-		Geler cet utilisateur avec quel message ?
-		<form name="form">
-			<input name="message">
-				Vous avez été gelé. Vous ne pouvez ni bouger ni chatter. Un administrateur va vous envoyer un message instantané (IM).
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="UnFreezeUser">
-		Dégeler cet utilisateur avec quel message ?
-		<form name="form">
-			<input name="message">
-				Vous n&apos;êtes plus gelé.
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="OfferTeleport">
-		Proposez une téléportation avec le message suivant ?
-		<form name="form">
-			<input name="message">
-				On se rejoint à [REGION] ?
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="OfferTeleportFromGod">
-		Demander au résident de venir vous rejoindre ?
-		<form name="form">
-			<input name="message">
-				On se rejoint à [REGION] ?
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="TeleportFromLandmark">
-		Êtes-vous certain de vouloir être téléporté ?
-		<usetemplate ignoretext="Lors de la téléportation depuis un repère de l&apos;inventaire" name="okcancelignore" notext="Annuler" yestext="Téléporter"/>
-	</notification>
-	<notification label="Envoyer un message à tout le monde dans votre domaine" name="MessageEstate">
-		Saisissez un message court qui sera envoyé à tous les résidents se trouvant actuellement sur votre domaine.
-		<form name="form">
-			<input name="message"/>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification label="Modifier un domaine Linden" name="ChangeLindenEstate">
-		Vous vous apprêtez à modifier un domaine appartenant aux Lindens (continent, zone réservée aux ados, orientation etc.).
-
-Cela est extrêmement délicat car l&apos;expérience des résidents est en jeu. Sur le continent, cela modifiera des milliers de régions et sera difficile à digérer pour le serveur.
-
-Continuer ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification label="Modifier l&apos;accès à un domaine Linden" name="ChangeLindenAccess">
-		Vous vous apprêtez à modifier la liste d&apos;accès à un domaine appartenant aux Linden (continent, zone réservée aux ados, orientation etc.).
-
-Cette action est délicate et ne doit être effectuée que pour appeler le hack autorisant des objets/L$ à être transférés à l&apos;intérieur/extérieur de la grille.
-Cette action modifiera des milliers de régions et sera difficile à digérer pour le serveur.
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateAllowedAgentAdd">
-		Ajouter à la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateAllowedAgentRemove">
-		Supprimer de la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateAllowedGroupAdd">
-		Ajouter à la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateAllowedGroupRemove">
-		Supprimer de la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateBannedAgentAdd">
-		Refuser l&apos;accès à ce domaine uniquement ou à [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateBannedAgentRemove">
-		Supprimer ce résident de la liste des résidents bannis pour ce domaine uniquement ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateManagerAdd">
-		Ajouter un gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateManagerRemove">
-		Supprimer le gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Confirmer" name="EstateKickUser">
-		Éjecter [EVIL_USER] de ce domaine ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="EstateChangeCovenant">
-		Êtes-vous certain de vouloir modifier le règlement du domaine ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked">
-		Votre catégorie d&apos;accès ne vous autorise pas à pénétrer dans cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
-
-Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked_KB">
-		Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
-
-Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
-		</url>
-		<usetemplate ignoretext="Lorsque l&apos;accès à une région est bloqué à cause de la catégorie d&apos;accès" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked_Notify">
-		Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
-	</notification>
-	<notification name="RegionEntryAccessBlocked_Change">
-		Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
-
-En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition &gt; Préférences... &gt; Général.
-	<form name="form">
-      <button
-       name="OK"
-       text="Modifier les Préférences"/>
-      <button
-       default="true"
-       name="Cancel"
-       text="Fermer"/>
-       <ignore name="ignore" text="Lorsque l&apos;accès à une région est bloqué à cause des préférences concernant la catégorie d&apos;accès"/>
-    </form>
-	</notification>
-	<notification name="LandClaimAccessBlocked">
-		Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
-
-Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LandClaimAccessBlocked_KB">
-		Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région.
-
-Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
-		</url>
-		<usetemplate ignoretext="Lorsqu&apos;une région ne peut pas être réclamée à cause de la catégorie d&apos;accès" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
-	</notification>
-	<notification name="LandClaimAccessBlocked_Notify">
-		Votre catégorie d&apos;accès ne vous autorise pas à réclamer cette région.
-	</notification>
-	<notification name="LandClaimAccessBlocked_Change">
-		Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région.
-
-En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition &gt; Préférences... &gt; Général.
-		<usetemplate ignoretext="Lorsqu&apos;une région ne peut pas être réclamée à cause des préférences concernant la catégorie d&apos;accès" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked">
-		Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
-
-Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked_KB">
-		Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région.
-
-Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
-		</url>
-		<usetemplate ignoretext="Lorsqu&apos;une région ne peut pas être achetée à cause de la catégorie d&apos;accès" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked_Notify">
-		Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région.
-	</notification>
-	<notification name="LandBuyAccessBlocked_Change">
-		Votre catégorie d&apos;accès ne vous autorise pas à acheter cette région.
-
-En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition &gt; Préférences... &gt; Général.
-		<usetemplate ignoretext="Lorsqu&apos;une région ne peut pas être achetée à cause des préférences concernant la catégorie d&apos;accès" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/>
-	</notification>
-	<notification name="TooManyPrimsSelected">
-		&quot;Vous avez sélectionné trop de prims. Veuillez sélectionner au maximum [MAX_PRIM_COUNT] prims et réessayer.&quot;
-	</notification>
-	<notification name="ProblemImportingEstateCovenant">
-		Problème lors de l&apos;importation du règlement du domaine.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ProblemAddingEstateManager">
-		Problèmes lors de l&apos;ajout d&apos;un nouveau gérant de domaine. Il est possible qu&apos;au moins un des domaines ait une liste de gérants complète.
-	</notification>
-	<notification name="ProblemAddingEstateGeneric">
-		Problème lors de l&apos;ajout à la liste de ce domaine. Il est possible qu&apos;au moins un des domaines ait une liste complète.
-	</notification>
-	<notification name="UnableToLoadNotecardAsset">
-		Impossible de charger les données de la note actuellement.
-	</notification>
-	<notification name="NotAllowedToViewNotecard">
-		Permissions pour afficher la note insuffisantes.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MissingNotecardAssetID">
-		Les références de la note ne se trouvent pas dans la base de données.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="PublishClassified">
-		Rappel : les frais pour passer des petites annonces ne sont pas remboursables.
-
-Publier cette petite annonce maintenant pour [AMOUNT] L$ ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="SetClassifiedMature">
-		Cette petite annonce contient-elle du contenu Mature ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="SetGroupMature">
-		Ce groupe contient-il du contenu Mature ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification label="Confirmer le redémarrage" name="ConfirmRestart">
-		Souhaitez-vous vraiment redémarrer cette région dans 2 minutes ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification label="Envoyer un message à la région" name="MessageRegion">
-		Saisissez une message qui sera envoyé à tous les résidents présents dans cette région.
-		<form name="form">
-			<input name="message"/>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification label="Interdire le terraformage" name="HelpRegionBlockTerraform">
-		Si vous cochez cette case, les propriétaires ne pourront plus terraformer leur terrain, quel que soit le paramétrage individuel des parcelles.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Interdire le vol" name="HelpRegionBlockFly">
-		Si vous cochez cette case, les résidents ne pourront plus voler dans cette région, quel que soit le paramétrage individuel des parcelles.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Modifications groupées des droits relatifs au contenu" name="HelpBulkPermission">
-		L&apos;outil Modifications groupées des droits vous permet de modifier rapidement et simultanément les droits dans les contenus des objets séléctionnés. Notez toutefois que vous paramétrez uniquement les droits des objets dans les Contenus des objets sélectionnés, et non les droits sur les objets eux-mêmes.  
-
-Notez aussi que les droits ne s&apos;appliquent pas aux contenus imbriqués dans les objets contenus. Votre requête ne porte que sur les objets de premier niveau.
-
-Vous pouvez sélectionner quels types d&apos;objets modifier à la section Types de contenu. Les photos sont incluses quand vous sélectionnez Textures.
-
-* Cet outil ne vous permettra de changer que les droits des objets que vous êtes autorisés à modifier.
-* Vous ne pouvez pas accorder de droits que vous n&apos;avez pas au prochain propriétaire.
-* Les droits accordés au prochain propriétaire de sont que des requêtes. Si un objet ne peut recevoir tous les nouveaux droits, aucun de ses droits ne changera.
-
-Lorsque vous êtes prêt à modifier tous les droits, cliquez sur Appliquer et attendez de voir s&apos;afficher les résultats.
-
-Si vous fermez la fenêtre des modifications groupées alors que les droits sont en train d&apos;être modifiés, vous suspendez l&apos;opération.
-	</notification>
-	<notification label="Autoriser les dégâts" name="HelpRegionAllowDamage">
-		Si vous cochez cette case, les résidents peuvent subir des dégâts dans toute la région quel que soit le paramétrage individuel des parcelles. Si la case n&apos;est pas cochée, les propriétaires sont libres d&apos;activer ou non cette option sur leur parcelle.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Nombre maximum d&apos;avatars" name="HelpRegionAgentLimit">
-		Définit le nombre maximum d&apos;avatars autorisés dans cette région.
-La performance peut varier en fonction du nombre d&apos;avatars présents.
-
-Valeur par défaut : 40
-	</notification>
-	<notification label="Bonus objet" name="HelpRegionObjectBonus">
-		Le bonus objet est le multiplicateur de prims autorisées sur une parcelle donnée. L&apos;échelle autorisée est comprise entre 1 et 10. Lorsque ce chiffre est de 1, chaque parcelle de 512 m² peut contenir 117 prims. S&apos;il est de 2, chaque parcelle peut contenir 234 prims, ou deux fois plus, et ainsi de suite. Le nombre maximum de prims autorisées dans une région est de 15 000, quel que soit le bonus objet. Attention : si vous définissez un bonus objet et décidez ensuite de le diminuer, cela peut entraîner la suppression ou le renvoi d&apos;objets.
-
-Valeur par défaut : 1.0
-	</notification>
-	<notification label="Accès" name="HelpRegionMaturity">
-		Définit la catégorie d&apos;accès de la région, telle qu&apos;affichée dans la barre de menu en haut du client et dans les infobulles de la carte lorsque vous passez votre curseur au-dessus de cette région. Ce paramètre affecte aussi l&apos;accès à cette région et les résultats de recherche. Les autres résidents ne peuvent pénétrer que dans les régions ou n&apos;afficher que les résultats de recherche ayant la même catégorie d&apos;accès que celle indiquée dans leurs Préférences.
-
-Ce changement n&apos;apparaîtra pas immédiatement sur la carte.
-	</notification>
-	<notification label="Interdire les bousculades" name="HelpRegionRestrictPushObject">
-		Cette case permet de restreindre les bousculades dans toute une région.
-Lorsqu&apos;elle est cochée, les résidents ne peuvent être bousculés que par d&apos;autres résidents ou par le propriétaire de la parcelle.
-(Bousculer fait référence à la fonction LSL llPushObjet().)
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Fusionner/Diviser des parcelles" name="HelpParcelChanges">
-		Cette case permet de choisir si les parcelles n&apos;appartenant pas au gérant du domaine peuvent ou pas être fusionnées ou divisées.
-Si cette case n&apos;est pas cochée :
- * Seuls les propriétaires ou gérants de domaine peuvent fusionner ou diviser des parcelles.
- * Ils ne peuvent fusionner ou diviser que les parcelles du propriétaire,
-   ou celles d&apos;un groupe dans lequel ils ont les pouvoirs nécessaires.
-   Si cette case est cochée :
- * Tous les propriétaires peuvent fusionner ou diviser leurs parcelles.
- * Pour les parcelles appartenant à un groupe, les membres avec les pouvoirs nécessaires peuvent fusionner ou diviser les parcelles.
-
-Valeur par défaut : activée
-	</notification>
-	<notification label="Ne pas afficher dans la recherche" name="HelpRegionSearch">
-		Si vous cochez cette option, les propriétaires ne pourront pas faire apparaître leurs parcelles dans les résultats de recherche.
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Catégorie de la région modifiée" name="RegionMaturityChange">
-		La catégorie d&apos;accès de cette région a été mise à jour.
-Ce changement n&apos;apparaîtra pas immédiatement sur la carte.
-	</notification>
-	<notification label="Revente de terrain" name="HelpRegionLandResell">
-		Les propriétaires et gérants de domaine peuvent vendre n&apos;importe quel terrain appartenant au propriétaire du domaine.
-Si cette option n&apos;est pas cochée, les propriétaires ne peuvent pas revendre leur parcelle.
-Si cette option est cochée, les propriétaires sont libres de revendre leur parcelle.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Désactiver les scripts" name="HelpRegionDisableScripts">
-		Lorsque la performance d&apos;une région est faible, cela peut venir d&apos;un script. Ouvrez la section Statistiques (Ctrl+Maj+1) et vérifiez le FPS Physique (Physics FPS) de la section Simulateur.
-Si le FPS est en dessous de 45, ouvrez la section Time située en fin de liste. Si le Script Time est au dessus de 25ms, cliquez sur le bouton Afficher les objets scriptés les plus consommateurs. Vous verrez le nom et l&apos;emplacement des scripts éventuellement à l&apos;origine du problème.
-
-Si vous cochez la case Désactiver les scripts et que vous appuyez sur Appliquer, tous les scripts de cette région seront temporairement désactivés. Vous devrez peut-être faire cela le temps d&apos;arriver à l&apos;endroit su script en cause. Une fois sur place, assurez-vous que le script est bien à l&apos;origine du problème. Pour cela, vous devrez peut-être contacter le propriétaire du script ou bien supprimer ou renvoyer l&apos;objet.
-Décochez la case Désactiver le script, puis cliquez sur Appliquer pour réactiver tous les scripts dans la région.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Désactiver les collisions" name="HelpRegionDisableCollisions">
-		Des objets physiques peuvent fortement réduire les performances d&apos;une région.
-Ouvrez la barre de statistiques (Ctrl+Maj+1) et vérifiez le FPS Physique (Physics FPS) de la section Simulateur.
-Si le FPS est en dessous de 45, ouvrez la section Time située en fin de liste. Si le Script Time est au dessus de 25ms, cliquez sur le bouton Afficher les collisions les plus consommatrices.
-Vous verrez le nom et l&apos;emplacement des objets physiques éventuellement à l&apos;origine du problème.
-
-Si vous décochez la case Désactiver les collisions et que vous cliquez sur Appliquer, toutes les collisions entre objets seront désactivées. Vous pourrez avoir besoin de cette fonction le temps d&apos;arriver à l&apos;emplacement des objets en cause. Une fois sur place, vérifiez que l&apos;&apos;objet est bien responsable du problème (entre-t-il sans cesse en collision avec d&apos;autres objets ?) Pour cela, vous devrez peut-être contacter le propriétaire de l&apos;objet ou bien supprimer ou renvoyer l&apos;objet.
-Décochez la case Désactiver les collisions, puis cliquez sur le bouton Appliquer pour réactiver les collisions dans la région.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Désactiver la physique" name="HelpRegionDisablePhysics">
-		L&apos;option Désactiver la physique est similaire à l&apos;option Désactiver les collisions sauf qu&apos;elle englobe tous les effets liés à la physique. Cela signifie que les objets n&apos;entreront plus en collision et que les avatars ne pourront plus bouger.
-
-Vous ne devriez utiliser cette option que lorsque l&apos;option Désactiver les collisions n&apos;améliore pas sufisamment la performance de la région pour résoudre un problème de physique ou trouver les objets entrant en collision.
-
-Une fois que vous avez fini, n&apos;oubliez pas de réactiver les propriétés physiques sinon les avatars ne pourront pas bouger.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Afficher les collisions les plus consommatrices" name="HelpRegionTopColliders">
-		Montre une liste des objets générant le plus de collisions avec d&apos;autres objets. Ces objets peuvent ralentir les performances de votre région. Sélectionnez Affichage &gt; Statistiques et regardez sous Simulator &gt; Time &gt; Sim Time (Physics) pour voir si le temps du moteur physique est au dessus de 20 ms.
-	</notification>
-	<notification label="Afficher les objets scriptés les plus consommateurs" name="HelpRegionTopScripts">
-		Dresse une liste des objets dont les scripts consomment le plus de ressources. Ces objets peuvent ralentir la performance de votre région.
-Sélectionnez Affichage &gt; Statistiques et regardez sous Simulator &gt; Time &gt; Script Time pour voir si le temps des scripts est au dessus de 25 ms.
-	</notification>
-	<notification label="Redémarrer la région" name="HelpRegionRestart">
-		Redémarre le serveur en charge de la région après deux minutes d&apos;avertissement. Tous les résidents dans cette région seront déconnectés. Les données de la région seront sauvegardées et réapparaîtront au bout de 90 secondes.
-
-Le redémarrage de la région ne permet pas de résoudre la plupart des problèmes de performance. Les redémarrages ne doivent avoir lieu qu&apos;en dernier recours.
-	</notification>
-	<notification label="Niveau de l&apos;eau" name="HelpRegionWaterHeight">
-		Il s&apos;agit de la hauteur de l&apos;eau en mètres.
-Si ce paramètre est différent de 20 et que vous avez de l&apos;eau adjacente au bord du monde ou de l&apos;eau « vide », il y aura un espace vide visible.
-
-
-Valeur par défaut : 20
-	</notification>
-	<notification label="Surélévation du terrain" name="HelpRegionTerrainRaise">
-		Il s&apos;agit de la distance (en mètres) à laquelle les propriétaires de parcelle peuvent surélever leur terrain, par rapport au terrain « figé » dont la hauteur est fixée par défaut.
-
-Valeur par défaut : 4
-	</notification>
-	<notification label="Abaisser le terrain" name="HelpRegionTerrainLower">
-		Il s&apos;agit de la distance (en mètres) à laquelle les propriétaires de parcelle peuvent abaisser leur terrain, par rapport au terrain « figé » dont la hauteur est fixée par défaut.
-
-Valeur par défaut : -4
-	</notification>
-	<notification label="Charger le terrain au format RAW" name="HelpRegionUploadRaw">
-		Ce bouton permet de charger un fichier .RAW dans la région où vous vous trouvez.
-Ce fichier doit avoir les bonnes dimensions (RGB, 256 x 256) et 13 canaux. Le meilleur moyen de créer un fichier terrain est de télécharger le fichier RAW existant. Un bon moyen est de modifier le canal rouge (hauteur terrain) et de le charger.
-
-Le chargement peut prendre jusqu&apos;à 45 secondes. Veuillez noter que le chargement d&apos;un fichier terrain ne déplacera pas les objets qui se trouvent sur le terrain, mais seulement le terrain et les droits associés aux parcelles. Certains objets risquent d&apos;aller sous la terre.
-
-Pour en savoir plus sur la modification de la hauteur des terrains d&apos;une région, consultez l&apos;Aide F1.
-	</notification>
-	<notification label="Télécharger le terrain au format RAW" name="HelpRegionDownloadRaw">
-		Ce bouton permet de télécharger un fichier contenant les données relatives à la hauteur du terrain, dimensions de la parcelle, les mises en vente ainsi que certains droits relatifs à la parcelle pour cette région. Lorsque vous ouvrez le fichier avec un programme tel que Photoshop, vous devez indiquer les dimensions du document qui sont les suivantes : RGB, 256 x 256 avec 13 canaux. Le fichier terrain ne peut pas être ouvert différemment.
-
-Pour en savoir plus sur la modification de la hauteur des terrains d&apos;une région, consultez l&apos;Aide F1.
-	</notification>
-	<notification label="Utiliser le soleil du domaine" name="HelpRegionUseEstateSun">
-		Si vous cochez cette case, la position du soleil dans cette région sera la même que dans le reste du domaine.
-
-Valeur par défaut : activé
-	</notification>
-	<notification label="Soleil fixe" name="HelpRegionFixedSun">
-		Si vous cochez cette case, la position du soleil se fixe sur celle du curseur Phase et le soleil arrête de bouger.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Figer le terrain" name="HelpRegionBakeTerrain">
-		Ce bouton permet d&apos;enregistrer la forme actuelle du terrain comme nouvelle forme par défaut pour la région. Une fois figé, le terrain peut reprendre la forme enregistrée à partir de l&apos;option Rétablir le terrain à la section Modifer le terrain. Le terrain figé est aussi le point de référence pour les limites de surélévation et d&apos;abaissement.
-	</notification>
-	<notification label="Gérants du domaine" name="HelpEstateEstateManager">
-		Un gérant de domaine est un résident chargé du contrôle de la région et des paramètres du domaine. Un gérant de domaine peut modifier tous les paramètres, mais ne peut pas charger, télécharger ni figer de terrain. Un des pouvoirs principaux du gérant est de bannir ou d&apos;autoriser un résident sur votre domaine.
-
-Seuls les propriétaires de domaine peuvent ajouter ou supprimer des gérants de domaine. Lorsque vous choisissez un gérant de domaine, prenez un résident en qui vous avez confiance car vous serez en quelque sorte responsable de ses actions.
-	</notification>
-	<notification label="Utiliser le temps universel" name="HelpEstateUseGlobalTime">
-		Cette case permet au soleil de votre domaine de suivre la position du soleil sur les domaines Linden du continent.
-
-Valeur par défaut : activé
-	</notification>
-	<notification label="Soleil fixe" name="HelpEstateFixedSun">
-		Si vous cochez cette case, la position du soleil se fixe sur celle du curseur Phase et le soleil arrête de bouger.
-	</notification>
-	<notification label="Accès public" name="HelpEstateExternallyVisible">
-		Cette option vous permet de choisir quels résidents d&apos;autres domaines peuvent pénétrer sur votre domaine sans devoir être ajoutés à la liste d&apos;accès.
-
-Valeur par défaut : activé
-	</notification>
-	<notification label="Autoriser la téléportation directe" name="HelpEstateAllowDirectTeleport">
-		Lorsqu&apos;elle est cochée, cette option permet aux résidents d&apos;être téléportés à n&apos;importe quel endroit sur votre domaine.  Lorsque cette option n&apos;est pas cochée, les résidents sont téléportés au téléhub le plus proche.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Autoriser l&apos;accès" name="HelpEstateAllowResident">
-		L&apos;accès à ce domaine sera réservé aux résidents figurant dans cette liste et aux groupes ci-dessous.
-Cette option n&apos;est disponible que lorsque la case Accès public est décochée.
-	</notification>
-	<notification label="Autoriser l&apos;accès de groupe" name="HelpEstateAllowGroup">
-		L&apos;accès à ce domaine sera réservé aux groupes figurant dans cette liste et aux résidents ci-dessous.  Cette option n&apos;est disponible que lorsque la case Accès public est décochée.
-	</notification>
-	<notification label="Adresse e-mail où signaler une infraction" name="HelpEstateAbuseEmailAddress">
-		Si vous utilisez une adresse e-mail valide, les rapports d&apos;infraction de ce domaine iront à cette adresse.
-Si vous laissez ce champ vide, les rapports d&apos;infraction seront envoyés à Linden Lab uniquement.
-	</notification>
-	<notification label="Refuser l&apos;accès" name="HelpEstateBanResident">
-		Les résidents figurant sur cette liste ne peuvent pas pénétrer sur votre domaine, quels que soient les autres paramètres.
-	</notification>
-	<notification label="Autoriser les chats vocaux" name="HelpEstateVoiceChat">
-		Les parcelles de ce domaine peuvent avoir leurs propres canaux vocaux, ce qui permet aux résidents de communiquer avec leurs voisins.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Versions de voix non compatibles" name="VoiceVersionMismatch">
-		Cette version de [APP_NAME] n&apos;est pas compatible avec la fonctionnalité de chat vocal dans cette région. Vous devez mettre à jour [APP_NAME] pour que le chat vocal fonctionne correctement.
-	</notification>
-	<notification label="Règlement du domaine" name="HelpEstateCovenant">
-		Définir un règlement pour le domaine vous permet de vendre les parcelles de ce domaine. S&apos;il n&apos;y a pas de règlement, vous ne pouvez pas vendre le terrain. Si vous ne souhaitez pas indiquer de règlement ou donner de conseils aux acheteurs, laissez la section relative au règlement vide.
-
-Un règlement sert à communiquer des règles, des lignes directrices ou informations culturelles, ou simplement à expliquer vos attentes à un acheteur potentiel. Il peut s&apos;agir de régulations concernant la construction, les options de paiement ou tout autre information que vous souhaitez faire passer au résident avant que l&apos;achat n&apos;ait lieu.
-
-L&apos;acheteur est tenu  d&apos;accepter le règlement en cochant une case avant de pouvoir finaliser l&apos;achat. Les règlements, lorsqu&apos;ils existent, apparaissent toujours dans la boîte de dialogue À propos du terrain.
-	</notification>
-	<notification label="Impossible d&apos;acheter des objets" name="BuyObjectOneOwner">
-		Impossible d&apos;acheter simultanément des objets de propriétaires différents.
-Veuillez ne sélectionner qu&apos;un seul objet.
-	</notification>
-	<notification label="Impossible d&apos;acheter des contenus" name="BuyContentsOneOnly">
-		Impossible d&apos;acheter les contenus de plus d&apos;un objet à la fois.
-Veuillez ne sélectionner qu&apos;un seul objet.
-	</notification>
-	<notification label="Impossible d&apos;acheter des contenus" name="BuyContentsOneOwner">
-		Impossible d&apos;acheter simultanément des objets de propriétaires différents.
-Veuillez ne sélectionner qu&apos;un seul objet.
-	</notification>
-	<notification name="BuyOriginal">
-		Acheter l&apos;objet original pour [PRICE] L$ à [PRICE] ?
-Vous deviendrez le propriétaire de cet objet.
-Vous pourrez :
- Modifier : [MODIFYPERM]
- Copier : [COPYPERM]
- Revendre ou donner : [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BuyOriginalNoOwner">
-		Acheter l&apos;objet original pour [PRICE] L$ ?
-Vous deviendrez le propriétaire de cet objet.
-Vous pourrez :
- Modifier : [MODIFYPERM]
- Copier : [COPYPERM]
- Revendre ou donner : [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BuyCopy">
-		Acheter une copie pour [PRICE] L$ à [OWNER] ?
-L&apos;objet sera copié dans votre inventaire.
-Vous pourrez :
- Modifier : [MODIFYPERM]
- Copier : [COPYPERM]
- Revendre ou donner : [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BuyCopyNoOwner">
-		Acheter une copie pour [PRICE] L$ ?
-L&apos;objet sera copié dans votre inventaire.
-Vous pourrez :
- Modifier : [MODIFYPERM]
- Copier : [COPYPERM]
- Revendre ou donner : [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BuyContents">
-		Acheter des contenus pour [PRICE] L$ à [OWNER] ?
-Ils seront copiés dans votre inventaire.
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BuyContentsNoOwner">
-		Acheter des contenus pour [PRICE] L$ ?
-Ils seront copiés dans votre inventaire.
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmPurchase">
-		Suite à cette transaction, vous allez :
-[ACTION]
-
-Êtes-vous certain de vouloir effectuer cette transaction ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmPurchasePassword">
-		Suite à cette transaction, vous allez :
-[ACTION]
-
-Êtes-vous certain de vouloir effectuer cette transaction ?
-Veuillez saisir à nouveau votre mot de passe et cliquer sur OK.
-		<form name="form">
-			<button name="ConfirmPurchase" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="SetPickLocation">
-		Remarque :
-vous avez mis à jour l&apos;emplacement de ce favori mais les autres détails resteront inchangés.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MoveInventoryFromObject">
-		Vous avez sélectionné des objets non copiables.
-Ces objets seront déplacés dans votre inventaire et non pas copiés.
-
-Déplacer les objets de l&apos;inventaire ?
-		<usetemplate ignoretext="Lors du transfert d&apos;un inventaire non copiable depuis des objets" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="MoveInventoryFromScriptedObject">
-		Vous avez sélectionné des objets de l&apos;inventaire qui ne peuvent pas être copiés. Ces objets seront déplacés vers votre inventaire, et non pas copiés.
-L&apos;objet les contenant est scripté, déplacer ces objets peut causer des problèmes au niveau du script.
-
-Déplacer les objets de l&apos;inventaire ?
-		<usetemplate ignoretext="Lors du transfert d&apos;un inventaire non copiable depuis des objets scriptés" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ClickActionNotPayable">
-		Avertissement : l&apos;action du clic &apos;Payer l&apos;objet&apos; a été défini mais ne fonctionnera que si un script est ajouté avec l&apos;event money().
-		<form name="form">
-			<ignore name="ignore" text="Lors du paramétrage de la fonction Payer sur des objets sans événement monétaire"/>
-		</form>
-	</notification>
-	<notification name="OpenObjectCannotCopy">
-		Vous n&apos;êtes autorisé à copier aucun élément dans cet objet.
-	</notification>
-	<notification name="WebLaunchAccountHistory">
-		Aller sur le site de [SECOND_LIFE] pour consulter l&apos;historique de votre compte ?
-		<usetemplate ignoretext="Lors du chargement de la page web contenant l&apos;historique de votre compte" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
-	</notification>
-	<notification name="ClickOpenF1Help">
-		Visiter les pages d&apos;aide de [SECOND_LIFE] ?
-		<usetemplate ignoretext="Lors de la visite des pages d&apos;aide de [SECOND_LIFE]" name="okcancelignore" notext="Annuler" yestext="Aller"/>
-	</notification>
-	<notification name="ConfirmQuit">
-		Êtes-vous certain de vouloir quitter ?
-		<usetemplate ignoretext="Lorsque vous quittez [APP_NAME]" name="okcancelignore" notext="Continuer" yestext="Quitter"/>
-	</notification>
-	<notification name="HelpReportAbuseEmailLL">
-		Utilisez cet outil pour signaler des infractions aux Conditions d&apos;utilisation et aux Règles de la communauté. Voir :
-
-http://secondlife.com/corporate/tos.php
-http://secondlife.com/corporate/cs.php
-
-Lorsqu&apos;elles sont signalées, toutes les infractions aux Conditions d&apos;utilisation et aux Règles de la communauté font l&apos;objet d&apos;une enquête et sont résolues. Pour accéder aux détails de la résolution d&apos;un incident, allez sur :
-
-http://secondlife.com/support/incidentreport.php
-	</notification>
-	<notification name="HelpReportAbuseEmailEO">
-		Important : ce rapport ira au propriétaire de la région dans laquelle vous êtes et non à Linden Lab.
-
-Pour aider les résidents et les visiteurs, le propriétaire de la région dans laquelle vous êtes a choisi de recevoir et de s&apos;occuper de tous les rapports envoyés à partir de cette région. Linden Lab n&apos;enquêtera pas sur les rapports que vous envoyez à partir de cet endroit.
-
-Le propriétaire de la région traitera les rapports en fonction des règles de cette région, comme indiqué dans le réglement du domaine.
-(Les réglements sont visibles à partir du menu Monde &gt; À propos du terrain.)
-
-La résolution de ce rapport ne s&apos;applique qu&apos;à cette région ; L&apos;accès aux autres endroits de [SECOND_LIFE] ne sera pas affecté par les résultats de cette enquête. Seul Linden Lab peut interdire l&apos;accès à l&apos;ensemble de [SECOND_LIFE].
-	</notification>
-	<notification name="HelpReportAbuseSelectCategory">
-		Veuillez choisir une catégorie pour ce rapport d&apos;infraction.
-Le choix d&apos;une catégorie nous permet de traiter les rapports d&apos;infraction plus rapidement.
-	</notification>
-	<notification name="HelpReportAbuseAbuserNameEmpty">
-		Veuillez saisir le nom du contrevenant.
-Lorsque nous avons le nom du contrevenant, nous sommes en mesure de traiter les rapports plus rapidement.
-	</notification>
-	<notification name="HelpReportAbuseAbuserLocationEmpty">
-		Veuillez indiquer l&apos;endroit où l&apos;infraction a eu lieu.
-Les informations précises et exactes nous permettent de traiter les rapports plus rapidement.
-	</notification>
-	<notification name="HelpReportAbuseSummaryEmpty">
-		Veuillez saisir un récapitulatif de l&apos;infraction.
-Les récapitulatifs précis nous permettent de traiter les rapports plus rapidement.
-	</notification>
-	<notification name="HelpReportAbuseDetailsEmpty">
-		Veuillez saisir une description détaillée de l&apos;infraction.
-Soyez aussi précis que possible et essayez de fournir des noms ainsi que des détails sur l&apos;incident que vous signalez.
-Les descriptions précises nous permettent de traiter les rapports plus rapidement.
-	</notification>
-	<notification name="HelpReportAbuseContainsCopyright">
-		Cher résident,
-
-Il semble que vous souhaitiez reporter une infraction à des droits de propriété intellectuelle. Pour signaler correctement cette infraction :
-
-(1) Remplissez un rapport d&apos;infraction. Vous pouvez soumettre un rapport d&apos;infraction si vous pensez qu&apos;un résident exploite le système de droits de [SECOND_LIFE], par exemple en utilisant un CopyBot ou des outils similaires pour enfreindre des droits de propriété intellectuelle. Notre équipe chargée des infractions mènera une enquête et prendra les mesures nécessaires à l&apos;encontre du résident non respectueux des Conditions d&apos;utilisation ou des règles de la communauté. Sachez toutefois que l&apos;équipe chargée des infractions ne supprimera pas de contenu à l&apos;intérieur de [SECOND_LIFE].
-
-(2) Demandez à ce que du contenu à l&apos;intérieur de [SECOND_LIFE] soit supprimé. Pour demander à ce que du contenu soit supprimé de [SECOND_LIFE], vous devez soumettre un rapport d&apos;infraction valide, tel que fourni dans notre Règlement contre les violations des droit d&apos;auteurs (DMCA), à http://secondlife.com/corporate/dmca.php.
-
-Si vous souhaitez toujours reporter cette infraction, veuillez fermer cette fenêtre et soumettre votre rapport.  Vous devrez peut-être sélectionner la catégorie CopyBot ou exploitation abusive des droits.
-
-Merci,
-
-Linden Lab
-	</notification>
-	<notification name="FailedRequirementsCheck">
-		Les composantes requises suivantes ne se trouvent pas dans [FLOATER]:
-[COMPONENTS]
-	</notification>
-	<notification label="Remplacer la pièce-jointe existante" name="ReplaceAttachment">
-		Vous avez déjà un objet sur cette partie du corps.
-Voulez-vous le remplacer par l&apos;objet sélectionné ?
-		<form name="form">
-			<ignore name="ignore" save_option="true" text="Lors du remplacement de pièces-jointes existantes"/>
-			<button ignore="Remplacer automatiquement" name="Yes" text="OK"/>
-			<button ignore="Ne jamais remplacer" name="No" text="Annuler"/>
-		</form>
-	</notification>
-	<notification label="Réponse si occupé(e)" name="BusyModePay">
-		Vous êtes en mode occupé et vous ne recevrez donc aucun objet en échange de ce paiement.
-
-Souhaitez-vous quitter le mode occupé avant de terminer cette transaction ?
-		<form name="form">
-			<ignore name="ignore" save_option="true" text="Lorsque vous envoyez de l&apos;argent à une personne en mode Occupé"/>
-			<button ignore="Toujours quitter le mode occupé" name="Yes" text="OK"/>
-			<button ignore="Ne jamais quitter le mode occupé" name="No" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="ConfirmEmptyTrash">
-		Êtes-vous certain de vouloir supprimer le contenu de votre corbeille de manière permanente  ?
-		<usetemplate ignoretext="Lorsque vous videz la corbeille de l&apos;inventaire" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmClearBrowserCache">
-		Êtes-vous certain de vouloir vider le cache de votre navigateur ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
-	</notification>
-	<notification name="ConfirmClearCookies">
-		Êtes-vous certain de vouloir supprimer vos cookies ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
-	</notification>
-	<notification name="ConfirmClearMediaUrlList">
-		Êtes-vous certain de vouloir supprimer la liste des URL enregistrées ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
-	</notification>
-	<notification name="ConfirmEmptyLostAndFound">
-		Êtes-vous certain de vouloir supprimer le contenu de votre dossier Objets trouvés de manière permanente ?
-		<usetemplate ignoretext="Losque vous videz le dossier Objets trouvés dans votre inventaire" name="okcancelignore" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="CopySLURL">
-		La SLurl suivante a été copiée dans votre presse-papiers :
- [SLURL]
-
-Mettez-la dans une page web pour permettre aux autres résidents d&apos;accéder facilement à cet endroit ou bien collez-la dans la barre d&apos;adresse de votre navigateur.
-		<form name="form">
-			<ignore name="ignore" text="Lorsque vous copiez une SLurl dans votre presse-papier"/>
-		</form>
-	</notification>
-	<notification name="GraphicsPreferencesHelp">
-		Ce menu permet de contrôler la taille de la fenêtre et la résolution, ainsi que la qualité des graphiques client. Les préférences de l&apos;interface graphique vous permettent de choisir entre 4 niveaux de graphiques : Faible, Moyen, Élevé et Ultra. Personnalisez vos options graphiques en cliquant sur le bouton Personnaliser et en changeant les paramètres suivants :
-
-Effets : active ou désactive les différents types de shaders pixels.
-
-Objets reflétés : définit le type d&apos;objets reflétés dans l&apos;eau.
-
-Rendu de l&apos;avatar : définit les options qui influent sur la manière dont le client rend les avatars.
-
-Limite d&apos;affichage : la distance à laquelle vous voyez les objets s&apos;afficher dans la scène.
-
-Nombre de particules max. : définit le nombre maximum de particules que vous pouvez voir à la fois sur votre écran.
-
-Qualité post-traitement : définit la résolution du rayonnement.
-
-Détails des rendus : définit le niveau de détail ou le nombre de polygones utilisés dans le rendu de certains objets. Une valeur plus élevée prendra plus de temps pour apparaître, mais permettra d&apos;avoir des objets plus détaillés.
-
-Sources lumineuses : définit les types de lumières que vous souhaitez faire apparaître.
-
-Rendu du terrain : définit le niveau de détail que vous souhaitez utiliser dans la texture du terrain.
-	</notification>
-	<notification name="WLSavePresetAlert">
-		Voulez-vous écraser l&apos;option précédemment enregistrée ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="WLDeletePresetAlert">
-		Voulez-vous supprimer [SKY] ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="WLNoEditDefault">
-		Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
-	</notification>
-	<notification name="WLMissingSky">
-		Une dossier semble manquer au Cycle du jour : [SKY].
-	</notification>
-	<notification name="PPSaveEffectAlert">
-		Certains effets post-traitement existent. Voulez-vous quand même écraser ce fichier ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="HelpEditSky">
-		Pour créer et sauvegarder plusieurs ciels, utilisez les curseurs WindLight.
-	</notification>
-	<notification name="HelpEditDayCycle">
-		Choisissez quel ciel apparaît au cours de la journée.
-	</notification>
-	<notification name="EnvSettingsHelpButton">
-		Ces paramètres permettent de modifier l&apos;environnement local sur votre ordinateur. Pour que vous ayez accès à tous les paramètres, votre carte graphique doit prendre en charge les effets atmosphériques.
-
-Pour changer les différentes phases de la journée dans le client, utilisez le curseur Heure de la journée.
-
-Le curseur Couverture nuageuse permet de contrôler le nombre de nuages dans le ciel.
-
-L&apos;option Couleur de l&apos;eau vous permet de modifier la couleur de l&apos;eau grâce au sélecteur de couleurs.
-
-Le curseur Brouillard dans l&apos;eau permet de contrôler la densité du brouillard sous l&apos;eau.
-
-Pour synchroniser l&apos;heure du jour sur celle de la région, cliquez sur Utiliser heure domaine.
-
-En cliquant sur le bouton Ciel Avancé, vous aurez accès à tous les réglages relatifs au ciel.
-
-En cliquant sur le bouton Eau Avancée, vous aurez accès à tous les réglages relatifs à l&apos;eau.
-	</notification>
-	<notification name="HelpDayCycle">
-		L&apos;éditeur du cycle du jour vous permet de contrôler le ciel au cours du cycle jour/nuit de [SECOND_LIFE]. C&apos;est ce même cycle qui est contrôlé par le curseur Heure de la journée dans l&apos;éditeur d&apos;environnement basique.
-
-L&apos;éditeur du jour fonctionne grâce au réglage d&apos;images-clés. Ces images-clés sont représentées par les marques grises sur la ligne du temps et ont des préréglages qui leurs sont associées. Au cours de la journée et de la nuit, le ciel WindLight s&apos;anime en passant d&apos;une clé à l&apos;autre.
-
-La flèche jaune au dessus de la ligne du temps représente votre vue actuelle, basée sur l&apos;heure de la journée. Cliquez et faites glisser pour voir l&apos;animation au cours de votre journée. Ajoutez ou supprimez des clés en appuyant sur les boutons Ajouter clé ou Supprimer clé, à droite de la ligne du temps.
-
-Vous pouvez définir la position d&apos;une clé en la faisant glisser le long de la ligne du temps ou en définissant manuellement ses valeurs dans la section Réglages des images-clés. Dans cette même section, vous pouvez associer chaque clé au préréglage WindLight respectif.
-
-La Durée du cycle contrôle la durée d&apos;une « journée ». Si vous choisissez une valeur basse (2mn par exemple), cela signifie que toutes les animations de votre journée de 24h se dérouleront en 2mn seulement ! Une fois satisfait de vos choix, utilisez les boutons Jouer et Stop ! pour prévisualiser les résultats. Pour voir l&apos;animation, vous pouvez aussi bouger la flèche jaune au dessus de la ligne du temps. Si vous sélectionnez l&apos;option Utiliser heure domaine, vous synchronisez la durée de votre journée et votre heure avec celle du cycle du jour du domaine.
-
-Une fois que vous êtes satisfait de votre Cycle du jour, vous pouvez le sauvegarder et le charger grâce aux boutons Enregistrer jour test et Charger Jour Test. Veuillez noter que pour l&apos;instant, nous ne pouvez avoir qu&apos;un seul Cycle du jour.
-	</notification>
-	<notification name="HelpBlueHorizon">
-		Utilisez les curseurs Rouge/Vert/Bleu (RVB) pour ajuster la couleur du ciel. Pour déplacer les trois curseurs en même temps, utilisez le curseur Intensité.
-	</notification>
-	<notification name="HelpHazeHorizon">
-		Le paramètre Quantité de brume est l&apos;un des plus utiles pour ajuster l&apos;exposition lumineuse de la scène.
-Il permet de simuler de nombreux paramètres d&apos;exposition, tels que les voiles blancs créés par le soleil ou des lumières plus foncées.
-	</notification>
-	<notification name="HelpBlueDensity">
-		La Densité du bleu affecte la saturation générale des couleurs du ciel et du brouillard. Si vous déplacez le curseur Intensité (I) vers la droite, les couleurs deviennent plus vives et plus vibrantes. Si vous le déplacez complètement à gauche, les couleurs deviennent plus fades, puis finalement noires et blanches. Pour paramétrer avec précision la couleur du ciel, vous pouvez contrôler chacun des éléments de la saturation à l&apos;aide des curseurs Rouge/Vert/Bleu (RVB).
-	</notification>
-	<notification name="HelpHazeDensity">
-		Le paramètre Densité de la brume permet de contrôler le niveau de brume grisâtre dans l&apos;atmosphère. Ce paramètre est utile pour simuler les scènes dans lesquelles il y a beaucoup de fumée et de substances polluantes émises par l&apos;homme. Il est également utile pour simuler le brouillard et la brume.
-	</notification>
-	<notification name="HelpDensityMult">
-		Utilisez le Multiplicateur de densité pour modifier la densité atmosphérique générale. Une valeur basse donne l&apos;impression d&apos;un air « léger » alors qu&apos;une valeur élevée donne l&apos;impression d&apos;un air « lourd » et enfumé.
-	</notification>
-	<notification name="HelpDistanceMult">
-		Ajuste la distance perçue par WindLight.
-La valeur zéro désactive l&apos;influence de WindLight sur le terrain et les objets.
-Les valeurs supérieures à 1 simulent des distances plus importantes pour des effets atmosphériques plus épais.
-	</notification>
-	<notification name="HelpMaxAltitude">
-		L&apos;Altitude max. ajuste les calculs de WindLight lors de la computation de la lumière atmosphérique. Quand la fin de la journée approche, il est utile pour ajuster la « profondeur » du coucher de soleil.
-	</notification>
-	<notification name="HelpSunlightColor">
-		Ajuste la couleur et l&apos;intensité de la lumière directe de la scène.
-	</notification>
-	<notification name="HelpSunAmbient">
-		Ajuste la couleur et l&apos;intensité de la lumière atmosphérique ambiante.
-	</notification>
-	<notification name="HelpSunGlow">
-		Le curseur Taille contrôle la taille du soleil.
-Le curseur Netteté permet de rendre le soleil plus ou moins flou dans le ciel.
-	</notification>
-	<notification name="HelpSceneGamma">
-		Ajuste la distribution de clair et de foncé sur l&apos;écran.
-	</notification>
-	<notification name="HelpStarBrightness">
-		Vous permet de contrôler l&apos;intensité des étoiles dans le ciel.
-	</notification>
-	<notification name="HelpTimeOfDay">
-		Contrôle la position du soleil dans le ciel.
-Même chose que l&apos;élévation.
-	</notification>
-	<notification name="HelpEastAngle">
-		Contrôle la position du soleil dans le ciel.
-Même chose que l&apos;azimut.
-	</notification>
-	<notification name="HelpCloudColor">
-		Modifie la couleur des nuages. Il est recommandé de laisser les nuages en blanc mais vous pouvez aussi faire preuve de créativité...
-	</notification>
-	<notification name="HelpCloudDetail">
-		Contrôle le détail de l&apos;image placée sur l&apos;image du nuage principal. X et Y contrôlent sa position. D (Densité) permet de rendre les nuages plus ou moins pleins ou plus ou moins fracturés.
-	</notification>
-	<notification name="HelpCloudDensity">
-		Vous permet de contrôler la position des nuages avec les curseurs X et Y ainsi que leur densité avec le curseur D.
-	</notification>
-	<notification name="HelpCloudCoverage">
-		Contrôle la surface du ciel couverte par les nuages.
-	</notification>
-	<notification name="HelpCloudScale">
-		Contrôle l&apos;échelle de l&apos;image des nuages sur le dôme du ciel.
-	</notification>
-	<notification name="HelpCloudScrollX">
-		Contrôle la vitesse des nuages sur l&apos;axe des X.
-	</notification>
-	<notification name="HelpCloudScrollY">
-		Contrôle la vitesse des nuages sur l&apos;axe des Y.
-	</notification>
-	<notification name="HelpClassicClouds">
-		Cochez cette option pour utiliser les anciens nuages de [SECOND_LIFE] en plus des nuages WindLight.
-	</notification>
-	<notification name="HelpWaterFogColor">
-		Permet de sélectionner la couleur du brouillard sous l&apos;eau.
-	</notification>
-	<notification name="HelpWaterFogDensity">
-		Contrôle la densité du brouillard sous l&apos;eau, ainsi que votre visibilité.
-	</notification>
-	<notification name="HelpUnderWaterFogMod">
-		Modifie l&apos;effet créé par l&apos;option Densité du brouillard pour contrôler votre visibilité quand votre avatar est sous l&apos;eau.
-	</notification>
-	<notification name="HelpWaterGlow">
-		Contrôle l&apos;éclat de l&apos;eau à la surface.
-	</notification>
-	<notification name="HelpWaterNormalScale">
-		Contrôle l&apos;échelle des trois vaguelettes qui forment l&apos;eau.
-	</notification>
-	<notification name="HelpWaterFresnelScale">
-		Contrôle la quantité de lumière réfléchie à des angles différents.
-	</notification>
-	<notification name="HelpWaterFresnelOffset">
-		Contrôle l&apos;intensité de la lumière réfléchie.
-	</notification>
-	<notification name="HelpWaterScaleAbove">
-		Contrôle la quantité de lumière réfractée lorsque votre avatar regarde au dessus de l&apos;eau.
-	</notification>
-	<notification name="HelpWaterScaleBelow">
-		Contrôle la quantité de lumière réfractée lorsque votre avatar est sous l&apos;eau.
-	</notification>
-	<notification name="HelpWaterBlurMultiplier">
-		Contrôle le mélange reflets/vagues.
-	</notification>
-	<notification name="HelpWaterNormalMap">
-		Contrôle quelle normal map est posée sur l&apos;eau pour déterminer la réflection/réfraction.
-	</notification>
-	<notification name="HelpWaterWave1">
-		Contrôle dans quelle direction et à quelle vitesse la version grande échelle de la normal map se déplace sur l&apos;axe des X et l&apos;axe des Y.
-	</notification>
-	<notification name="HelpWaterWave2">
-		Contrôle dans quelle direction et à quelle vitesse la version grande échelle de la normal map se déplace sur l&apos;axe des X et l&apos;axe des Y.
-	</notification>
-	<notification name="NewSkyPreset">
-		Nommez le nouveau ciel.
-		<form name="form">
-			<input name="message">
-				Nouveau préréglage
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="ExistsSkyPresetAlert">
-		Ce préréglage existe déjà !
-	</notification>
-	<notification name="NewWaterPreset">
-		Nommez ce nouveau préréglage d&apos;eau.
-		<form name="form">
-			<input name="message">
-				Nouveau préréglage
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="ExistsWaterPresetAlert">
-		Ce préréglage existe déjà !
-	</notification>
-	<notification name="WaterNoEditDefault">
-		Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
-	</notification>
-	<notification name="ChatterBoxSessionStartError">
-		Impossible de démarrer une nouvelle session de chat avec [RECIPIENT].
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ChatterBoxSessionEventError">
-		[EVENT]
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ForceCloseChatterBoxSession">
-		Vous devez terminer votre session de chat avec [NAME].
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="Cannot_Purchase_an_Attachment">
-		Les objets qui font partie d&apos;une pièce-jointe ne peuvent pas être achetés.
-	</notification>
-	<notification label="À propos des requêtes pour les autorisations de débit" name="DebitPermissionDetails">
-		Accepter cette requête donne au script l&apos;autorisation de prélever des dollars Linden (L$) sur votre compte de manière continue. Pour révoquer cette autorisation, le propriétaire de l&apos;objet doit supprimer l&apos;objet ou bien réinitialiser les scripts dans l&apos;objet.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="AutoWearNewClothing">
-		Voulez-vous automatiquement porter l&apos;habit que vous créez ?
-		<usetemplate ignoretext="Porter automatiquement" name="okcancelignore" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="NotAgeVerified">
-		Pour que vous puissiez accéder à cette parcelle, votre âge doit être vérifié.
-Voulez-vous aller sur le site de [SECOND_LIFE] pour vérifier votre âge ?
-
-[_URL]
-		<url name="url" option="0">
-			https://secondlife.com/account/verification.php?lang=fr
-		</url>
-		<usetemplate ignoretext="Avertir si l&apos;âge n&apos;a pas été vérifié" name="okcancelignore" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="Cannot enter parcel: no payment info on file">
-		Avant de pouvoir pénétrer sur cette parcelle, vous devez enregistrer vos informations de paiement.
-Voulez-vous aller sur le site de [SECOND_LIFE] pour enregistrer ces informations ?
-
-[_URL]
-		<url name="url" option="0">
-			https://secondlife.com/account/index.php?lang=fr
-		</url>
-		<usetemplate ignoretext="Avertir si les informations de paiement ne sont pas fournies" name="okcancelignore" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="MissingString">
-		The string [STRING_NAME] is missing from strings.xml
-	</notification>
-	<notification name="SystemMessageTip">
-		[MESSAGE]
-	</notification>
-	<notification name="Cancelled">
-		Annulé
-	</notification>
-	<notification name="CancelledSit">
-		Action annulée
-	</notification>
-	<notification name="CancelledAttach">
-		Attachement annulé
-	</notification>
-	<notification name="ReplacedMissingWearable">
-		Habits et parties du corps manquants remplacés par les éléments par défaut.
-	</notification>
-	<notification name="GroupNotice">
-		Sujet : [SUBJECT], Message : [MESSAGE]
-	</notification>
-	<notification name="FriendOnline">
-		[FIRST] [LAST] est connecté(e)
-	</notification>
-	<notification name="FriendOffline">
-		[FIRST] [LAST] est déconnecté(e)
-	</notification>
-	<notification name="AddSelfFriend">
-		Vous ne pouvez pas devenir ami avec vous-même.
-	</notification>
-	<notification name="UploadingAuctionSnapshot">
-		Importation de photos SL et Web en cours...
-(prend environ 5 minutes.)
-	</notification>
-	<notification name="UploadPayment">
-		Le chargement a coûté [AMOUNT] L$.
-	</notification>
-	<notification name="UploadWebSnapshotDone">
-		Photo Web importée
-	</notification>
-	<notification name="UploadSnapshotDone">
-		Photo SL importée
-	</notification>
-	<notification name="TerrainDownloaded">
-		Fichier terrain.raw téléchargé
-	</notification>
-	<notification name="GestureMissing">
-		Geste [NAME] absent de la base de données.
-	</notification>
-	<notification name="UnableToLoadGesture">
-		Impossible de charger le geste [NAME].
-Merci de réessayer.
-	</notification>
-	<notification name="LandmarkMissing">
-		Repère absent de la base de données.
-	</notification>
-	<notification name="UnableToLoadLandmark">
-		Impossible de charger le repère. Merci de réessayer.
-	</notification>
-	<notification name="CapsKeyOn">
-		La touche Verr.maj est activée.
-Ce mode modifie le mot de passe que vous saisissez, vous devriez le quitter.
-	</notification>
-	<notification name="NotecardMissing">
-		Note absente de la base de données.
-	</notification>
-	<notification name="NotecardNoPermissions">
-		Permissions insuffisantes pour voir la note.
-	</notification>
-	<notification name="RezItemNoPermissions">
-		Permissions insuffisantes pour rezzer l&apos;objet.
-	</notification>
-	<notification name="UnableToLoadNotecard">
-		Impossible de lire les données de la note actuellement.
-	</notification>
-	<notification name="ScriptMissing">
-		Script absent de la base de données.
-	</notification>
-	<notification name="ScriptNoPermissions">
-		Permissions insuffisantes pour voir le script.
-	</notification>
-	<notification name="UnableToLoadScript">
-		Impossible de charger le script. Merci de réessayer.
-	</notification>
-	<notification name="IncompleteInventory">
-		Tous les éléments que vous souhaitez transférer ne sont pas encore disponibles sur le serveur.
-Merci d&apos;essayer à nouveau dans une minute.
-	</notification>
-	<notification name="CannotModifyProtectedCategories">
-		Vous ne pouvez pas modifier de catégories protégées.
-	</notification>
-	<notification name="CannotRemoveProtectedCategories">
-		Vous ne pouvez pas supprimer de catégories protégées.
-	</notification>
-	<notification name="OfferedCard">
-		Vous avez offert votre carte de visite à [FIRST] [LAST]
-	</notification>
-	<notification name="UnableToBuyWhileDownloading">
-		Achat impossible durant le chargement de l&apos;objet.
-Merci de réessayer.
-	</notification>
-	<notification name="UnableToLinkWhileDownloading">
-		Impossible de lier durant le chargement de l&apos;objet.
-Merci de réessayer.
-	</notification>
-	<notification name="CannotBuyObjectsFromDifferentOwners">
-		Impossible d&apos;acheter simultanément des objets de propriétaires différents. Veuillez sélectionner un seul objet.
-	</notification>
-	<notification name="ObjectNotForSale">
-		Cet objet ne semble pas à vendre.
-	</notification>
-	<notification name="EnteringGodMode">
-		Activation du mode divin : niveau [LEVEL]
-	</notification>
-	<notification name="LeavingGodMode">
-		Désactivation du mode divin : niveau [LEVEL]
-	</notification>
-	<notification name="CopyFailed">
-		Copie impossible, droits insuffisants.
-	</notification>
-	<notification name="InventoryAccepted">
-		[NAME] a accepté votre envoi.
-	</notification>
-	<notification name="InventoryDeclined">
-		[NAME] a refusé votre envoi.
-	</notification>
-	<notification name="ObjectMessage">
-		[NAME]: [MESSAGE]
-	</notification>
-	<notification name="CallingCardAccepted">
-		Votre carte de visite a été acceptée.
-	</notification>
-	<notification name="CallingCardDeclined">
-		Votre carte de visite a été refusée.
-	</notification>
-	<notification name="TeleportToLandmark">
-		A présent que vous êtes sur le continent, vous pouvez voyager par téléportation (vers [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l&apos;écran puis sélectionnez le dossier Repères (Landmarks).
-Choisissez un repère, double-cliquez dessus et cliquez sur Téléporter.
-	</notification>
-	<notification name="TeleportToPerson">
-		A présent que vous êtes sur le continent, vous pouvez contacter des résidents (tel [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l&apos;écran puis sélectionnez le dossier Cartes de visite (Calling Cards).
-Choisissez en une, double-cliquez dessus et cliquez sur Message Instantané.
-	</notification>
-	<notification name="CantSelectLandFromMultipleRegions">
-		Vous ne pouvez pas sélectionner de terrain en dehors des limites du serveur.
-Veuillez sélectionner un terrain plus petit.
-	</notification>
-	<notification name="SearchWordBanned">
-		Certains termes de votre recherche ont été exclus car ils ne correspondaient pas aux standards fixés dans les Règles communautaires.
-	</notification>
-	<notification name="NoContentToSearch">
-		Veuillez sélectionner au moins un type de contenu à rechercher (PG, Mature ou Adulte)
-	</notification>
-	<notification name="GroupVote">
-		[NAME] a proposé un vote pour :
-[MESSAGE]
-		<form name="form">
-			<button name="VoteNow" text="Voter"/>
-			<button name="Later" text="Plus tard"/>
-		</form>
-	</notification>
-	<notification name="SystemMessage">
-		[MESSAGE]
-	</notification>
-	<notification name="EventNotification">
-		Avis d&apos;événement :
-
-[NAME]
-[DATE]
-		<form name="form">
-			<button name="Teleport" text="Téléporter"/>
-			<button name="Description" text="Description"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="TransferObjectsHighlighted">
-		Tous les objets de cette parcelle qui seront transférés à l&apos;acheteur sont maintenant mis en surbrillance.
-
-* Les arbres et la pelouse qui seront transférés ne sont pas mis en surbrillance.
-		<form name="form">
-			<button name="Done" text="Transfert effectué"/>
-		</form>
-	</notification>
-	<notification name="DeactivatedGesturesTrigger">
-		Gestes désactivés ayant le même mot-clé :
-[NAMES]
-	</notification>
-	<notification name="NoQuickTime">
-		Le logiciel Apple QuickTime ne semble pas installé sur votre système.
-Pour voir les vidéos sur les terrains qui le permettent, allez sur le site de QuickTime (http://www.apple.com/fr/quicktime/download) et installez le lecteur QuickTime.
-	</notification>
-	<notification name="OwnedObjectsReturned">
-		Les objets que vous possédez sur la parcelle de terrain sélectionnée ont été renvoyés dans votre inventaire.
-	</notification>
-	<notification name="OtherObjectsReturned">
-		Les objets que vous possédez sur la parcelle de terrain appartenant à [FIRST] [LAST] ont été renvoyés dans votre inventaire.
-	</notification>
-	<notification name="OtherObjectsReturned2">
-		Les objets sur la parcelle appartenant à « [NAME] » ont étés renvoyés à leur propriétaire.
-	</notification>
-	<notification name="GroupObjectsReturned">
-		Les objets sélectionnés sur la parcelle de terrain partagée avec le groupe [GROUPNAME] ont été renvoyés dans l&apos;inventaire de leur propriétaire.
-Les objets donnés transférables ont étés renvoyés à leur propriétaire.
-Les objets non transférables donnés au groupe ont étés supprimés.
-	</notification>
-	<notification name="UnOwnedObjectsReturned">
-		Les objets sélectionnés sur la parcelle et qui ne sont pas à vous ont été rendus à leurs propriétaires.
-	</notification>
-	<notification name="NotSafe">
-		Les dégâts sont autorisés sur ce terrain (« non sécurisé »).
-Vous pouvez être blessé ici. Si vous décédez, vous serez téléporté à votre domicile.
-	</notification>
-	<notification name="NoFly">
-		Le vol est interdit sur ce terrain (« pas de vol »).
-Vous ne pouvez pas voler ici.
-	</notification>
-	<notification name="PushRestricted">
-		Les bousculades sont interdites sur ce terrain.
-Vous ne pouvez pas pousser les autres à moins que vous soyez propriétaire de ce terrain.
-	</notification>
-	<notification name="NoVoice">
-		La voix est désactivée sur ce terrain.
-	</notification>
-	<notification name="NoBuild">
-		Le mode construction sur ce terrain est désactivé (« pas de construction »).
-Vous ne pouvez pas créer d&apos;objets ici.
-	</notification>
-	<notification name="ScriptsStopped">
-		Un administrateur a temporairement stoppé les scripts dans cette région.
-	</notification>
-	<notification name="ScriptsNotRunning">
-		Aucun script ne fonctionne dans cette région.
-	</notification>
-	<notification name="NoOutsideScripts">
-		Les scripts externes sont désactivés sur ce terrain (« pas de scripts externes »).
-Aucun script n&apos;est exécuté à part ceux du propriétaire du terrain.
-	</notification>
-	<notification name="ClaimPublicLand">
-		Vous ne pouvez réclamer qu&apos;un terrain public dans la région où vous vous trouvez actuellement.
-	</notification>
-	<notification name="RegionTPAccessBlocked">
-		Votre catégorie d&apos;accès ne vous autorise pas à pénétrer dans cette région. Vous devez sans doute procéder à la vérification de votre âge ou installer une version plus récente du client.
-
-Pour savoir comment accéder aux zones ayant un tel niveau d&apos;accès, veuillez consulter les pages d&apos;aide.
-	</notification>
-	<notification name="URBannedFromRegion">
-		Vous avez été banni de cette région.
-	</notification>
-	<notification name="NoTeenGridAccess">
-		Votre compte ne peut pas se connecter à cette région du Teen grid.
-	</notification>
-	<notification name="NoHelpIslandTP">
-		Vous ne pouvez pas retourner sur Help Island.
-Pour répéter le didacticiel, veuillez aller sur Help Island Public.
-	</notification>
-	<notification name="ImproperPaymentStatus">
-		Vous n&apos;avez pas le statut de paiement approprié pour pénétrer dans cette région.
-	</notification>
-	<notification name="MustGetAgeRegion">
-		Pour pouvoir pénétrer dans cette région, vous devez avoir procédé à la vérification de votre âge.
-	</notification>
-	<notification name="MustGetAgeParcel">
-		Pour pouvoir pénétrer sur cette parcelle, vous devez avoir procédé à la vérification de votre âge.
-	</notification>
-	<notification name="NoDestRegion">
-		Région de destination introuvable.
-	</notification>
-	<notification name="NotAllowedInDest">
-		Vous n&apos;êtes pas autorisé dans cette région.
-	</notification>
-	<notification name="RegionParcelBan">
-		Impossible de traverser une parcelle bannie. Veuillez trouver une autre solution.
-	</notification>
-	<notification name="TelehubRedirect">
-		Vous avez été redirigé vers un téléhub.
-	</notification>
-	<notification name="CouldntTPCloser">
-		Il n&apos;a pas été possible de vous téléporter vers une destination plus proche.
-	</notification>
-	<notification name="TPCancelled">
-		Téléportation annulée.
-	</notification>
-	<notification name="FullRegionTryAgain">
-		La région dans laquelle vous essayez de pénétrer est pleine actuellement.
-Veuillez réessayer dans quelques minutes.
-	</notification>
-	<notification name="GeneralFailure">
-		Panne générale.
-	</notification>
-	<notification name="RoutedWrongRegion">
-		Dirigé vers la mauvaise région. Merci de réessayer.
-	</notification>
-	<notification name="NoValidAgentID">
-		ID agent non valide.
-	</notification>
-	<notification name="NoValidSession">
-		ID de session non valide.
-	</notification>
-	<notification name="NoValidCircuit">
-		Aucun code de circuit valide.
-	</notification>
-	<notification name="NoValidTimestamp">
-		Timestamp non valide.
-	</notification>
-	<notification name="NoPendingConnection">
-		Impossible de créer la connexion en attente.
-	</notification>
-	<notification name="InternalUsherError">
-		Erreur interne lors de la tentative de connexion.
-	</notification>
-	<notification name="NoGoodTPDestination">
-		Impossible de trouver un lieu de téléportation valide dans cette région.
-	</notification>
-	<notification name="InternalErrorRegionResolver">
-		Une erreur interne est survenue lors de la résolution des coodonnées de la région.
-	</notification>
-	<notification name="NoValidLanding">
-		Impossible de trouver un point d&apos;atterrissage valide.
-	</notification>
-	<notification name="NoValidParcel">
-		Aucune parcelle valide n&apos;a été trouvée.
-	</notification>
-	<notification name="ObjectGiveItem">
-		Un objet appelé [OBJECTFROMNAME] appartenant à [FIRST] [LAST] vous a donné : [OBJECTTYPE] appelé(e) [OBJECTNAME].
-		<form name="form">
-			<button name="Keep" text="Garder"/>
-			<button name="Discard" text="Jeter"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="ObjectGiveItemUnknownUser">
-		L&apos;objet [OBJECTFROMNAME] appartenant à un utilisateur inconnu vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
-		<form name="form">
-			<button name="Keep" text="Garder"/>
-			<button name="Discard" text="Jeter"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="UserGiveItem">
-		[NAME] vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
-		<form name="form">
-			<button name="Keep" text="Garder"/>
-			<button name="Discard" text="Jeter"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="GodMessage">
-		[NAME]
-[MESSAGE]
-	</notification>
-	<notification name="JoinGroup">
-		[MESSAGE]
-		<form name="form">
-			<button name="Join" text="Rejoindre"/>
-			<button name="Decline" text="Refuser"/>
-			<button name="Info" text="Infos"/>
-		</form>
-	</notification>
-	<notification name="TeleportOffered">
-		[NAME] vous propose de le/la rejoindre par téléportation :
-
-[MESSAGE]
-		<form name="form">
-			<button name="Teleport" text="Téléporter"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="GotoURL">
-		[MESSAGE]
-[URL]
-		<form name="form">
-			<button name="Later" text="Plus tard"/>
-			<button name="GoNow..." text="Y aller maintenant..."/>
-		</form>
-	</notification>
-	<notification name="OfferFriendship">
-		[NAME] vous demande de devenir son ami(e).
-
-[MESSAGE]
-
-(Par défaut, vous pourrez voir lorsque vous êtes tous deux connectés.)
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-		</form>
-	</notification>
-	<notification name="OfferFriendshipNoMessage">
-		[NAME] vous demande de devenir son ami.
-
-(Par défaut, vous pourrez voir quand vous êtes tous deux connectés)
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-		</form>
-	</notification>
-	<notification name="FriendshipAccepted">
-		[NAME] a accepté votre amitié.
-	</notification>
-	<notification name="FriendshipDeclined">
-		[NAME] a refusé votre amitié.
-	</notification>
-	<notification name="OfferCallingCard">
-		[FIRST] [LAST] vous offre sa carte de visite.
-Cela ajoute un marque-page dans votre inventaire, ce qui vous permet d&apos;envoyer rapidement un IM à ce résident.
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-		</form>
-	</notification>
-	<notification name="RegionRestartMinutes">
-		La région va redémarrer dans [MINUTES] minutes.
-Si vous restez dans cette région, vous serez déconnecté(e).
-	</notification>
-	<notification name="RegionRestartSeconds">
-		La région va redémarrer dans [SECONDS] secondes.
-Si vous restez dans cette région, vous serez déconnecté(e).
-	</notification>
-	<notification name="LoadWebPage">
-		Charger cette page web [URL] ?
-
-[MESSAGE]
-
-Venant de l&apos;objet : [OBJECTNAME], appartenant à : [NAME]?
-		<form name="form">
-			<button name="Gotopage" text="Charger"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="FailedToFindWearableUnnamed">
-		La recherche du [TYPE] dans la base de données a échoué.
-	</notification>
-	<notification name="FailedToFindWearable">
-		La recherche du [TYPE] nommé(e) [DESC] dans la base de données a échoué.
-	</notification>
-	<notification name="InvalidWearable">
-		L&apos;objet que vous essayez de porter utilise une fonctionnalité que le client ne peut lire.  Pour porter cet objet, veuillez télécharger une mise à jour du client.
-	</notification>
-	<notification name="ScriptQuestion">
-		&apos;[OBJECTNAME]&apos;, un objet appartenant à &apos;[NAME]&apos;, aimerait :
-
-[QUESTIONS]
-Acceptez-vous ?
-		<form name="form">
-			<button name="Yes" text="Oui"/>
-			<button name="No" text="Non"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="ScriptQuestionCaution">
-		[OBJECTNAME], un objet appartenant à [NAME], aimerait :
-
-[QUESTIONS]
-Si vous n&apos;avez pas confiance en cet objet ni en son créateur, vous devriez refuser cette requête. Pour plus d&apos;informations, cliquez sur le bouton Détails.
-
-Accepter cette requête ?
-		<form name="form">
-			<button name="Grant" text="Accepter"/>
-			<button name="Deny" text="Refuser"/>
-			<button name="Details" text="Détails..."/>
-		</form>
-	</notification>
-	<notification name="ScriptDialog">
-		&apos;[TITLE]&apos; de [FIRST] [LAST]
-[MESSAGE]
-		<form name="form">
-			<button name="Ignore" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="ScriptDialogGroup">
-		&apos;[TITLE]&apos; de [GROUPNAME]
-[MESSAGE]
-		<form name="form">
-			<button name="Ignore" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="FirstBalanceIncrease">
-		Vous venez de recevoir [AMOUNT] L$.
-Des objets et des utilisateurs peuvent vous donner des L$.
-Votre solde est affiché dans le coin supérieur droit de votre écran.
-	</notification>
-	<notification name="FirstBalanceDecrease">
-		Vous venez de payer [AMOUNT] L$.
-Votre solde est affiché dans le coin supérieur droit de votre écran.
-	</notification>
-	<notification name="FirstSit">
-		Vous êtes assis(e).
-Utilisez les touches de direction (ou AWSD) pour changer la vue.
-Pour vous lever, cliquez sur le bouton Me lever.
-	</notification>
-	<notification name="FirstMap">
-		Cliquez et faites glisser pour faire défiler la carte.
-Double-cliquez pour vous téléporter.
-Utilisez les contrôles à droite pour trouver des choses et afficher différents arrière-plans.
-	</notification>
-	<notification name="FirstBuild">
-		Vous pouvez construire des objets dans certaines zones de [SECOND_LIFE].
-Utilisez les outils en haut à gauche pour construire et gardez la touche Ctrl ou Alt enfoncée pour passer rapidement d&apos;un outil à l&apos;autre.
-Appuyez sur la touche Esc pour arrêter de construire.
-	</notification>
-	<notification name="FirstLeftClickNoHit">
-		Un clic gauche permet d&apos;interagir avec certains objets.
-Si le pointeur de la souris se transforme en main, vous pouvez interagir avec l&apos;objet.
-Un clic droit fait toujours apparaître un menu des choses que vous pouvez faire.
-	</notification>
-	<notification name="FirstTeleport">
-		Cette région n&apos;autorise pas la téléportation de point à point. Vous avez donc été transporté au téléhub le plus proche.
-Votre destination est marquée par une grande balise.
-Suivez la flèche rouge vers la balise ou cliquez sur la flèche pour faire disparaître la balise.
-	</notification>
-	<notification name="FirstOverrideKeys">
-		Vos mouvements sont maintenant pris en charge par un objet.
-Essayez les flèches de votre clavier ou AWSD pour voir à quoi elles servent.
-Certains objets (comme les armes) nécessitent l&apos;activation du mode Vue subjective pour être utilisés.
-Pour cela, appuyez sur la touche M.
-	</notification>
-	<notification name="FirstAppearance">
-		Vous êtes en train d&apos;éditer votre apparence.
-Pour tourner et zoomer, utilisez les flèches de direction.
-Lorsque vous avez terminé, appuyez sur Enregistrer tout pour sauvegarder votre apparence et sortir.
-Vous pouvez modifier votre apparence aussi souvent que vous le souhaitez.
-	</notification>
-	<notification name="FirstInventory">
-		Il s&apos;agit de votre inventaire qui contient des objets, notes, vêtements, et autres possessions.
-* Pour porter un objet ou le dossier contenant un ensemble complet, faites-le glisser sur vous-même.
-* Pour mettre un objet dans le monde, faites-le glisser sur le sol.
-* Pour lire une note, double-cliquez dessus.
-	</notification>
-	<notification name="FirstSandbox">
-		Cette région est un bac à sable.
-Les objets que vous construisez ici peuvent être supprimés quand vous partez. Les bacs à sable sont nettoyés régulièrement, veuillez lire les informations en haut de l&apos;écran à côté du nom de la région.
-
-Les régions bacs à sable sont rares et sont signalées par des panneaux.
-	</notification>
-	<notification name="FirstFlexible">
-		Cet objet est flexible.
-Les objets flexibles ne peuvent pas avoir de propriétés physiques et doivent rester fantômes jusqu&apos;à ce que la case Fantôme soit décochée.
-	</notification>
-	<notification name="FirstDebugMenus">
-		Vous avez activé le menu Avancé.
-Ce menu contient des fonctionnalités utiles pour les développeurs qui travaillent sur [SECOND_LIFE].
-Pour activer/désactiver ce menu sous Windows, appuyez sur Ctrl+Alt+D. Sur un Mac, appuyez sur &#8997;&#8984;D
-	</notification>
-	<notification name="FirstSculptedPrim">
-		Vous êtes en train d&apos;éditer un sculptie.
-Pour modifier la forme d&apos;un sculptie, vous devez utiliser une texture spécifique.
-Vous trouverez des textures dans la bibliothèque de votre inventaire.
-	</notification>
-	<notification name="FirstMedia">
-		Vous avez lancé la lecture d&apos;un média. Dans le menu Préférences, à l&apos;onglet Audio et vidéo, vous pouvez choisir de lire automatiquement les médias. Notez que cela peut être risqué lorsque les médias viennent de sites que vous ne connaissez pas.
-	</notification>
-	<notification name="MaxListSelectMessage">
-		Vous ne pouvez sélectionner que [MAX_SELECT] objets maximum dans cette liste.
-	</notification>
-	<notification name="VoiceInviteP2P">
-		[NAME] vous invite à un chat vocal.
-Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST] a reçu un message instantané et n&apos;est donc plus ignoré.
-	</notification>
-	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST] a reçu de l&apos;argent et n&apos;est donc plus ignoré.
-	</notification>
-	<notification name="AutoUnmuteByInventory">
-		[FIRST] [LAST] a reçu un inventaire et n&apos;est donc plus ignoré.
-	</notification>
-	<notification name="VoiceInviteGroup">
-		[NAME] a rejoint un chat vocal avec le groupe [GROUP].
-Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="VoiceInviteAdHoc">
-		[NAME] a rejoint un chat vocal avec conférence.
-Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="InviteAdHoc">
-		[NAME] vous invite à un chat conférence.
-Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="VoiceChannelFull">
-		L&apos;appel auquel vous essayez de participer, [VOICE_CHANNEL_NAME], a atteint le nombre maximum de participants. Veuillez réessayer ultérieurement.
-	</notification>
-	<notification name="ProximalVoiceChannelFull">
-		Nous sommes désolés. Le nombre maximum de conversations vocales a été atteint dans cette zone. Veuillez trouver un autre endroit pour discuter.
-	</notification>
-	<notification name="VoiceChannelDisconnected">
-		Vous avez été déconnecté(e) de [VOICE_CHANNEL_NAME]. Vous allez maintenant être reconnecté au chat vocal spatial.
-	</notification>
-	<notification name="VoiceChannelDisconnectedP2P">
-		[VOICE_CHANNEL_NAME] a mis fin à l&apos;appel. Vous allez maintenant être reconnecté au chat vocal spatial.
-	</notification>
-	<notification name="P2PCallDeclined">
-		[VOICE_CHANNEL_NAME] a refusé votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
-	</notification>
-	<notification name="P2PCallNoAnswer">
-		[VOICE_CHANNEL_NAME] ne peut pas prendre votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
-	</notification>
-	<notification name="VoiceChannelJoinFailed">
-		Echec de la connexion avec [VOICE_CHANNEL_NAME], veuillez réessayer ultérieurement. Vous allez maintenant être reconnecté au chat vocal spatial.
-	</notification>
-	<notification name="VoiceLoginRetry">
-		Nous sommes en train de créer un canal vocal pour vous. Veuillez patienter quelques instants.
-	</notification>
-	<notification name="Cannot enter parcel: not a group member">
-		Vous ne pouvez pas pénétrer sur ce terrain car vous n&apos;êtes pas membre du groupe adéquat.
-	</notification>
-	<notification name="Cannot enter parcel: banned">
-		Vous ne pouvez pas pénétrer sur ce terrain car l&apos;accès vous y est interdit.
-	</notification>
-	<notification name="Cannot enter parcel: not on access list">
-		Vous ne pouvez pas pénétrer sur ce terrain car vous n&apos;avez pas les droits d&apos;accès requis.
-	</notification>
-	<notification name="VoiceNotAllowed">
-		Vous n&apos;êtes pas autorisé à vous connecter au chat vocal pour [VOICE_CHANNEL_NAME].
-	</notification>
-	<notification name="VoiceCallGenericError">
-		Une erreur est survenue pendant la connexion au chat vocal pour [VOICE_CHANNEL_NAME]. Veuillez réessayer ultérieurement.
-	</notification>
-	<notification name="ServerVersionChanged">
-		La région dans laquelle vous avez pénétré utilise une version de simulateur différente. Pour plus de détails, cliquez sur ce message.
-	</notification>
-	<notification name="UnableToOpenCommandURL">
-		L&apos;URL sur laquelle vous avez cliqué ne peut pas être ouverte dans ce navigateur.
-	</notification>
-	<global name="UnsupportedCPU">
-		- Votre processeur ne remplit pas les conditions minimum requises.
-	</global>
-	<global name="UnsupportedGLRequirements">
-		Vous semblez ne pas avoir le matériel requis pour utiliser [APP_NAME]. [APP_NAME] requiert une carte graphique OpenGL avec une prise en charge du multitexturing. Si vous avez une telle carte, assurez-vous que vous avez aussi les drivers les plus récents pour la carte, ainsi que les service packs et les patchs pour votre système d&apos;exploitation.
-
-Si vous avez toujours des problèmes, veuillez consulter la page suivante : http://www.secondlife.com/support
-	</global>
-	<global name="UnsupportedCPUAmount">
-		796
-	</global>
-	<global name="UnsupportedRAMAmount">
-		510
-	</global>
-	<global name="UnsupportedGPU">
-		- Votre carte graphique ne remplit pas les conditions minimum requises.
-	</global>
-	<global name="UnsupportedRAM">
-		- Votre mémoire système ne remplit pas les conditions minimum requises.
-	</global>
-	<global name="PermYes">
-		Oui
-	</global>
-	<global name="PermNo">
-		Non
-	</global>
-</notifications>
+<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+	<global name="skipnexttime">
+		Ne plus afficher
+	</global>
+	<global name="alwayschoose">
+		Toujours choisir cette option
+	</global>
+	<global name="implicitclosebutton">
+		Fermer
+	</global>
+	<template name="okbutton">
+		<form>
+			<button name="OK" text="$yestext"/>
+		</form>
+	</template>
+	<template name="okignore"/>
+	<template name="okcancelbuttons">
+		<form>
+			<button name="Cancel" text="$notext"/>
+		</form>
+	</template>
+	<template name="okcancelignore"/>
+	<template name="okhelpbuttons">
+		<form>
+			<button name="Help" text="$helptext"/>
+		</form>
+	</template>
+	<template name="yesnocancelbuttons">
+		<form>
+			<button name="Yes" text="$yestext"/>
+			<button name="No" text="$notext"/>
+		</form>
+	</template>
+	<notification functor="GenericAcknowledge" label="Message d&apos;alerte inconnu" name="MissingAlert">
+		Votre version de [APP_NAME] ne peut afficher ce message d&apos;erreur.  Veuillez vous assurer que vous avez bien la toute dernière version du client.
+
+Détails de l&apos;erreur : L&apos;alerte, appelée &apos;[_NAME]&apos; est introuvable dans notifications.xml.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="FloaterNotFound">
+		Erreur floater : impossible de trouver les contrôles suivants :
+
+[CONTROLS]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="TutorialNotFound">
+		Aucun didacticiel n&apos;est disponible actuellement.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="GenericAlert">
+		[MESSAGE]
+	</notification>
+	<notification name="GenericAlertYesCancel">
+		[MESSAGE]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
+	</notification>
+	<notification name="BadInstallation">
+		Une erreur est survenue lors de la mise à jour de [APP_NAME].  Veuillez télécharger la dernière version su client. http://get.secondlife.com
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LoginFailedNoNetwork">
+		Connexion à [SECOND_LIFE_GRID] impossible.
+&apos;[DIAGNOSTIC]&apos;
+Veuillez vérifier votre connexion Internet.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MessageTemplateNotFound">
+		Le modèle de message [PATH] est introuvable.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="WearableSave">
+		Enregistrer les changements dans la partie du corps/les habits actuels ?
+		<usetemplate canceltext="Cancel" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
+	</notification>
+	<notification name="CompileQueueSaveText">
+		Une erreur est survenue lors du chargement du texte pour un script, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="CompileQueueSaveBytecode">
+		Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="WriteAnimationFail">
+		Une erreur est survenue lors de l&apos;écriture des données d&apos;animation. Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="UploadAuctionSnapshotFail">
+		Un problème est survenu lors du chargement du script compilé, suite au problème suivant : [REASON]
+	</notification>
+	<notification name="UnableToViewContentsMoreThanOne">
+		Impossible d&apos;afficher les contenus de plus d&apos;un objet à la fois.
+Veuillez ne sélectionner qu&apos;un seul objet.
+	</notification>
+	<notification name="SaveClothingBodyChanges">
+		Enregistrer tous les changements dans les habits/parties du corps ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Tout enregistrer"/>
+	</notification>
+	<notification name="GrantModifyRights">
+		Lorsque vous accordez des droits d&apos;édition à un autre résident, vous lui permettez de changer, supprimer ou prendre n&apos;importe lequel de vos objets dans le Monde. Réfléchissez bien avant d&apos;accorder ces droits.
+Souhaitez-vous accorder des droits d&apos;édition à [FIRST_NAME] [LAST_NAME] ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="GrantModifyRightsMultiple">
+		Lorsque vous accordez des droits d&apos;édition à un autre résident, vous lui permettez de changer n&apos;importe lequel de vos objets dans le Monde. Réfléchissez bien avant d&apos;accorder ces droits.
+Souhaitez-vous accorder des droits d&apos;édition aux résidents selectionnés ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="RevokeModifyRights">
+		Souhaitez-vous retirer les droits d&apos;édition à [FIRST_NAME] [LAST_NAME] ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="RevokeModifyRightsMultiple">
+		Souhaitez-vous retirer les droits d&apos;édition aux résidents selectionnés ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="UnableToCreateGroup">
+		Impossible de créer le groupe.
+[MESSAGE]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="PanelGroupApply">
+		[NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ignorer les modifications" yestext="Enregistrer les modifications"/>
+	</notification>
+	<notification name="MustSpecifyGroupNoticeSubject">
+		Pour envoyer une notice au groupe, vous devez indiquer un sujet.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="AddGroupOwnerWarning">
+		Vous êtes sur le point d&apos;ajouter des membres du groupe dans le rôle de [ROLE_NAME].
+Les membres ne peuvent pas être destitués de ce rôle.
+Ils doivent donner eux-mêmes leur démission.
+Êtes-vous certain de vouloir continuer ?
+		<usetemplate ignoretext="Confirmer avant d&apos;ajouter un nouveau propriétaire" name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="AssignDangerousActionWarning">
+		Vous êtes sur le point d&apos;ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
+ *Avertissement*
+ Tout membre disposant de ce pouvoir peut s&apos;affecter lui-même, ainsi que tout autre membre, à des rôles disposant de pouvoirs plus importants, et accéder potentiellement à des pouvoirs proches de ceux d&apos;un propriétaire. Assurez-vous de bien comprendre ce que vous faites avant d&apos;attribuer ce pouvoir.
+
+Ajouter ce pouvoir à « [ROLE_NAME] » ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="AssignDangerousAbilityWarning">
+		Vous êtes sur le point d&apos;ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
+
+ *Avertissement*
+ Tout membre dans un rôle avec ce pouvoir peut s&apos;attribuer à lui-même, ainsi qu&apos;à tout autre membre, Tous les pouvoirs, et accéder potentiellement à des pouvoirs proches de ceux d&apos;un propriétaire.
+
+Ajouter ce pouvoir à « [ROLE_NAME] » ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="JoinGroupCanAfford">
+		Rejoindre ce groupe coûte [COST] L$.
+Voulez-vous continuer ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Rejoindre"/>
+	</notification>
+	<notification name="JoinGroupCannotAfford">
+		Rejoindre ce groupe coûte [COST] L$.
+Vous n&apos;avez pas suffisamment de L$ pour rejoindre ce groupe.
+	</notification>
+	<notification name="CreateGroupCost">
+		La création de ce groupe coûte 100 L$.
+Les groupes doivent comporter plus d&apos;un membre, sinon ils sont supprimés.
+Veuillez inviter des membres d&apos;ici 48 heures.
+		<usetemplate canceltext="Annuler" name="okcancelbuttons" notext="Annuler" yestext="Créer un groupe pour 100 L$"/>
+	</notification>
+	<notification name="LandBuyPass">
+		Pour [COST] L$ vous pouvez pénétrer sur ce terrain ([PARCEL_NAME]) et y rester [TIME] heures. Acheter un pass ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="SalePriceRestriction">
+		Pour rendre l&apos;annonce disponible à tous, le prix de vente doit être supérieur à 0 L$.
+Si le prix de vente est de 0 L$, vous devez choisir un acheteur spécifique.
+	</notification>
+	<notification name="ConfirmLandSaleChange">
+		Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
+Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmLandSaleToAnyoneChange">
+		Attention : en cliquant sur Vendre à n&apos;importe qui, vous rendez votre terrain disponible à toute la communauté de [SECOND_LIFE], même aux personnes qui ne sont pas dans cette région.
+
+Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
+Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsDeededToGroup">
+		Êtes-vous certain de vouloir renvoyer tous les objets partagés par le groupe [NAME] sur cette parcelle dans l&apos;inventaire du propriétaire précédent ?
+
+*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
+
+Objets : [N]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsOwnedByUser">
+		Etes-vous certain de vouloir renvoyer tous les objets que [NAME] possède sur cette parcelle dans son inventaire ?
+
+Objets : [N]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsOwnedBySelf">
+		Êtes-vous certain de vouloir renvoyer tous les objets que vous possédez sur cette parcelle dans votre inventaire ?
+
+Objets : [N]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedBySelf">
+		Êtes-vous certain de vouloir renvoyer tous les objets que vous ne possédez pas sur cette parcelle dans l&apos;inventaire de leur propriétaire ?
+Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
+
+*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
+
+Objets : [N]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedByUser">
+		Êtes-vous certain de vouloir renvoyer tous les objets que [NAME] ne possède pas sur cette parcelle dans l&apos;inventaire de leur propriétaire ?
+Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
+
+*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
+
+Objets : [N]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnAllTopObjects">
+		Êtes-vous certain de vouloir renvoyer tous les objets de la liste dans l&apos;inventaire de leur propriétaire ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="DisableAllTopObjects">
+		Êtes-vous certain de vouloir désactiver tous les objets dans cette région ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedByGroup">
+		Renvoyer les objets de cette parcelle qui ne sont pas partagés avec le groupe [NAME] à leur propriétaire ?
+
+Objets : [N]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="UnableToDisableOutsideScripts">
+		Impossible de désactiver les scripts.
+Les dégâts sont autorisés dans toute la région.
+Pour que les armes fonctionnent, les scripts doivent être autorisés.
+	</notification>
+	<notification name="MustBeInParcel">
+		Pour définir le point d&apos;atterrissage, vous devez vous trouver à l&apos;intérieur de la parcelle.
+	</notification>
+	<notification name="PromptRecipientEmail">
+		Veuillez saisir une adresse e-mail valide pour le(s) destinataire(s).
+	</notification>
+	<notification name="PromptSelfEmail">
+		Veuillez saisir votre adresse e-mail.
+	</notification>
+	<notification name="PromptMissingSubjMsg">
+		Envoyer la photo avec le sujet ou le message par défaut ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ErrorProcessingSnapshot">
+		Erreur dans le traitement des données de la photo
+	</notification>
+	<notification name="ErrorEncodingSnapshot">
+		Erreur d&apos;encodage de la photo.
+	</notification>
+	<notification name="ErrorUploadingPostcard">
+		Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]
+	</notification>
+	<notification name="ErrorUploadingReportScreenshot">
+		Une erreur est survenue lors du chargement de la capture d&apos;écran destinée au rapport, suite au problème suivant : [REASON]
+	</notification>
+	<notification name="MustAgreeToLogIn">
+		Pour vous connecter à [SECOND_LIFE], vous devez accepter les Conditions d&apos;utilisation.
+	</notification>
+	<notification name="CouldNotPutOnOutfit">
+		Impossible de mettre cet ensemble.
+Ce dossier ne contient pas d&apos;habits, de parties du corps ni de pièces jointes.
+	</notification>
+	<notification name="CannotWearTrash">
+		Vous ne pouvez pas porter d&apos;habits ni de parties du corps se trouvant dans la corbeille.
+	</notification>
+	<notification name="CannotWearInfoNotComplete">
+		Vous ne pouvez pas porter cet article car il n&apos;a pas encore été chargé. Veuillez réessayer dans une minute.
+	</notification>
+	<notification name="MustHaveAccountToLogIn">
+		Oups! Vous avez oublié de fournir certaines informations.
+Vous devez saisir le nom et le prénom de votre avatar.
+
+Pour entrer dans [SECOND_LIFE], vous devez avoir un compte. Voulez-vous en créer un maintenant ?
+		<url name="url">
+			http://join.secondlife.com/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Réessayer" yestext="Créer un compte"/>
+	</notification>
+	<notification name="AddClassified">
+		Les petites annonces sont publiées à l&apos;onglet Petites annonces de la section Recherche pendant une semaine.
+Rédigez votre annonce, puis cliquez sur Publier pour l&apos;ajouter à la liste des annonces.
+Au moment de cliquer sur Publier, vous serez invité à payer des frais.
+Plus vous payez cher, plus votre annonce est visible dans la liste ainsi que dans les résultats de recherche de mots-clés.
+		<usetemplate ignoretext="Comment ajouter une nouvelle petite annonce" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="DeleteClassified">
+		Supprimer l&apos;annonce [NAME] ?
+Une fois payés, les frais ne sont pas remboursables.
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ClassifiedSave">
+		Enregistrer les changements dans l&apos;annonce [NAME] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
+	</notification>
+	<notification name="DeleteAvatarPick">
+		Supprimer le favori [PICK] ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="PromptGoToEventsPage">
+		Aller à la page web de [SECOND_LIFE] réservée aux événements ?
+		<url name="url">
+			http://secondlife.com/events/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="SelectProposalToView">
+		Veuillez sélectionner une proposition.
+	</notification>
+	<notification name="SelectHistoryItemToView">
+		Veuillez sélectionner un historique.
+	</notification>
+	<notification name="ResetShowNextTimeDialogs">
+		Souhaitez-vous réactiver tous les pop-ups que vous aviez désactivés ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="SkipShowNextTimeDialogs">
+		Voulez-vous désactiver tous les pop-ups qui peuvent être évités ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="CacheWillClear">
+		Le cache sera vidé après le redémarrage de [APP_NAME].
+	</notification>
+	<notification name="CacheWillBeMoved">
+		Le cache sera déplacé après le redémarrage de [APP_NAME].
+Remarque : cela videra le cache.
+	</notification>
+	<notification name="ChangeConnectionPort">
+		Les paramètres du port prendront effet après le redémarrage de [APP_NAME].
+	</notification>
+	<notification name="ChangeSkin">
+		Le nouveau thème apparaîtra après le redémarrage de [APP_NAME].
+	</notification>
+	<notification name="GoToAuctionPage">
+		Aller à la page web de [SECOND_LIFE] pour voir le détail des enchères ou enchérir ?
+		<url name="url">
+			http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="SaveChanges">
+		Enregistrer les changements ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
+	</notification>
+	<notification name="GestureSaveFailedTooManySteps">
+		L&apos;enregistrement du geste a échoué.
+Il y a trop d&apos;étapes dans ce geste.
+Essayez d&apos;en supprimer quelques-unes.
+	</notification>
+	<notification name="GestureSaveFailedTryAgain">
+		L&apos;enregistrement du geste a échoué. Veuillez réessayer dans une minute.
+	</notification>
+	<notification name="GestureSaveFailedObjectNotFound">
+		Le geste n&apos;a pas pu être enregistré car l&apos;objet ou l&apos;inventaire de l&apos;objet associé n&apos;a pas été trouvé.
+L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
+	</notification>
+	<notification name="GestureSaveFailedReason">
+		Une erreur est survenue lors de l&apos;enregistrement du geste, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre geste ultérieurement.
+	</notification>
+	<notification name="SaveNotecardFailObjectNotFound">
+		La note n&apos;a pas pu être enregistrée car l&apos;objet ou l&apos;inventaire de l&apos;objet associé n&apos;a pas été trouvé.
+L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
+	</notification>
+	<notification name="SaveNotecardFailReason">
+		Une erreur est survenue lors de l&apos;enregistrement de la note, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre note ultérieurement.
+	</notification>
+	<notification name="ScriptCannotUndo">
+		Impossible d&apos;annuler tous les changements dans votre version du script.
+Souhaitez-vous charger la dernière version enregistrée sur le serveur ?
+(**Attention** Cette opération est irréversible.)
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="SaveScriptFailReason">
+		Une erreur est survenue lors de l&apos;enregistrement du script, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre script ultérieurement.
+	</notification>
+	<notification name="SaveScriptFailObjectNotFound">
+		Impossible d&apos;enregistrer le script car l&apos;objet qui le contient est introuvable.
+L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
+	</notification>
+	<notification name="SaveBytecodeFailReason">
+		Une erreur est survenue lors de l&apos;enregistrement du script compilé, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre script ultérieurement.
+	</notification>
+	<notification name="StartRegionEmpty">
+		Vous n&apos;avez pas défini de région de départ. 
+Veuillez saisir le nom de la région dans la case Lieu de départ, ou choisissez Dernier emplacement ou Domicile comme Lieu de départ.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CouldNotStartStopScript">
+		Impossible de lancer ou d&apos;arrêter le script car l&apos;objet qui le contient est introuvable.
+L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
+	</notification>
+	<notification name="CannotDownloadFile">
+		Impossible de télécharger le fichier
+	</notification>
+	<notification name="CannotWriteFile">
+		Impossible d&apos;écrire le fichier [[FILE]]
+	</notification>
+	<notification name="UnsupportedHardware">
+		Avertissement : vous n&apos;avez pas la configuration système requise pour utiliser [APP_NAME]. Si vous continuez à utiliser [APP_NAME], votre performance risque d&apos;être moindre. Malheureusement, la section [SUPPORT_SITE] n&apos;offre aucune aide pour les problèmes de configuration système.
+
+MINSPECS
+Voulez-vous visiter [_URL] pour plus d&apos;informations ?
+		<url name="url" option="0">
+			http://secondlife.com/support/sysreqs.php?lang=fr
+		</url>
+		<usetemplate ignoretext="Mon matériel n&apos;est pas pris en charge" name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="UnknownGPU">
+		Votre système contient une carte graphique que nous ne connaissons pas actuellement.
+Cela est souvent le cas avec le nouveau materiel qui n&apos;a pas encore été testé avec [APP_NAME].  Vous pourrez probablement utiliser [APP_NAME] sans problème, mais vous devrez peut-être ajuster les paramètres de vos graphiques.
+(Préférences &gt; Graphiques).
+		<form name="form">
+			<ignore name="ignore" text="Ma carte graphique ne peut être identifiée"/>
+		</form>
+	</notification>
+	<notification name="DisplaySettingsNoShaders">
+		[APP_NAME] a planté lors de l&apos;initialisation des drivers graphiques.
+La qualité des graphiques sera paramétrée sur Faible pour éviter certaines erreurs de driver fréquentes.
+Certaines fonctionnalités graphiques seront donc désactivées.
+Nous vous recommandons de mettre à jour les drivers de votre carte graphique.
+La qualité des graphiques peut être augmentée à la section Préférences &gt; Graphiques
+	</notification>
+	<notification name="RegionNoTerraforming">
+		Le terraformage est interdit dans la région [REGION].
+	</notification>
+	<notification name="CannotCopyWarning">
+		Vous n&apos;êtes pas autorisé à copier cet objet et il disparaîtra de votre inventaire si vous le donnez. Souhaitez-vous vraiment offrir cet objet ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="CannotGiveItem">
+		Impossible de donner l&apos;objet de l&apos;inventaire.
+	</notification>
+	<notification name="TransactionCancelled">
+		Transaction annulée.
+	</notification>
+	<notification name="TooManyItems">
+		Impossible de donner plus de 42 objets au cours d&apos;un seul transfert d&apos;inventaire.
+	</notification>
+	<notification name="NoItems">
+		Vous n&apos;êtes pas autorisé à transférer les objets sélectionnés.
+	</notification>
+	<notification name="CannotCopyCountItems">
+		Vous n&apos;êtes pas autorisé à copier [COUNT] des objets sélectionnés. Ces objets disparaîtront de votre inventaire.
+Souhaitez-vous vraiment donner ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="CannotGiveCategory">
+		Vous n&apos;êtes pas autorisé à transférer le dossier sélectionné.
+	</notification>
+	<notification name="FreezeAvatar">
+		Geler cet avatar ?
+Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Dégeler" yestext="Geler"/>
+	</notification>
+	<notification name="FreezeAvatarFullname">
+		Geler [AVATAR_NAME] ?
+Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Dégeler" yestext="Geler"/>
+	</notification>
+	<notification name="EjectAvatarFullname">
+		Expulser [AVATAR_NAME] de votre terrain ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Expulser et bannir" yestext="Expulser"/>
+	</notification>
+	<notification name="EjectAvatarNoBan">
+		Expulser cet avatar de votre terrain ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Expulser"/>
+	</notification>
+	<notification name="EjectAvatarFullnameNoBan">
+		Expulser [AVATAR_NAME] de votre terrain ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Expulser"/>
+	</notification>
+	<notification name="AcquireErrorTooManyObjects">
+		Erreur d&apos;acquisition : trop d&apos;objets sélectionnés.
+	</notification>
+	<notification name="AcquireErrorObjectSpan">
+		Erreur d&apos;acquisition : les objets sont répartis dans plus d&apos;une région.
+Veuillez mettre tous les objets que vous souhaitez acquérir dans la même région.
+	</notification>
+	<notification name="PromptGoToCurrencyPage">
+		[EXTRA]
+
+Aller sur [_URL] pour obtenir des informations sur l&apos;achat de L$ ?
+		<url name="url">
+			http://secondlife.com/app/currency/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="UnableToLinkObjects">
+		Impossible de lier ces [COUNT] objets.
+Vous pouvez lier un maximum de [MAX] objets.
+	</notification>
+	<notification name="CannotLinkIncompleteSet">
+		Vous ne pouvez lier que des ensembles d&apos;objets complets et vous devez choisir un minimum de deux objets.
+	</notification>
+	<notification name="CannotLinkModify">
+		Impossible de lier car vous n&apos;avez pas le droit de modifier tous les objets.
+
+Assurez-vous que vous êtes le propriétaire de tous les objets et qu&apos;aucun d&apos;eux n&apos;est verrouillé.
+	</notification>
+	<notification name="CannotLinkDifferentOwners">
+		Impossible de lier car les objets n&apos;ont pas tous le même propriétaire.
+
+Assurez-vous que vous êtes le propriétaire de tous les objets sélectionnés.
+	</notification>
+	<notification name="NoFileExtension">
+		Pas d&apos;extension pour le fichier suivant : &apos;[FILE]&apos;
+
+Assurez-vous que le fichier a l&apos;extension correcte.
+	</notification>
+	<notification name="InvalidFileExtension">
+		Extension de fichier [EXTENSION] invalide
+[VALIDS] attendu
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CannotUploadSoundFile">
+		Impossible de lire le fichier son chargé :
+[FILE]
+	</notification>
+	<notification name="SoundFileNotRIFF">
+		Il semble que le fichier ne soit pas un fichier RIFF WAVE :
+[FILE]
+	</notification>
+	<notification name="SoundFileNotPCM">
+		Il semble que le fichier ne soit pas un fichier audio PCM WAVE :
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidChannelCount">
+		Le fichier contient un nombre de canaux invalide (doit être mono ou stéréo) :
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidSampleRate">
+		Le fichier ne semble pas être pris en charge (doit être 44,1 k) :
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidWordSize">
+		Le fichier ne semble pas être pris en charge (doit faire 8 ou 16 bit) :
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidHeader">
+		Impossible de trouver les données dans l&apos;en-tête WAV :
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidTooLong">
+		Le fichier audio est trop long (10 secondes maximum) :
+[FILE]
+	</notification>
+	<notification name="ProblemWithFile">
+		Problème avec le fichier [FILE] :
+
+[ERROR]
+	</notification>
+	<notification name="CannotOpenTemporarySoundFile">
+		Impossible d&apos;ouvrir le fichier son compressé temporaire : [FILE]
+	</notification>
+	<notification name="UnknownVorbisEncodeFailure">
+		Échec d&apos;encodage Vorbis inconnu sur : [FILE]
+	</notification>
+	<notification name="CannotEncodeFile">
+		Impossible d&apos;encoder le fichier : [FILE]
+	</notification>
+	<notification name="CorruptResourceFile">
+		Fichier ressource corrompu : [FILE]
+	</notification>
+	<notification name="UnknownResourceFileVersion">
+		Version de fichier ressource Linden inconnu : [FILE]
+	</notification>
+	<notification name="UnableToCreateOutputFile">
+		Impossible de créer le fichier de sortie : [FILE]
+	</notification>
+	<notification name="DoNotSupportBulkAnimationUpload">
+		Actuellement, APP_NAME] ne prend pas en charge le chargement de lots de fichiers d&apos;animation.
+	</notification>
+	<notification name="CannotUploadReason">
+		Impossible de charger [FILE] suite au problème suivant : [REASON]
+Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="LandmarkCreated">
+		Vous avez ajouté &quot;[LANDMARK_NAME]&quot; à votre dossier [FOLDER_NAME].
+	</notification>
+	<notification name="CannotCreateLandmarkNotOwner">
+		Vous ne pouvez pas créer de repère ici car le propriétaire du terrain ne l&apos;autorise pas.
+	</notification>
+	<notification name="CannotRecompileSelectObjectsNoScripts">
+		Impossible d&apos;effectuer les recompilations.
+Sélectionnez un objet avec un script.
+	</notification>
+	<notification name="CannotRecompileSelectObjectsNoPermission">
+		Impossible d&apos;effectuer les recompilations.
+
+Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
+	</notification>
+	<notification name="CannotResetSelectObjectsNoScripts">
+		Impossible d&apos;effectuer la réinitialisation.
+
+Veuillez sélectionner des objets avec des scripts.
+	</notification>
+	<notification name="CannotResetSelectObjectsNoPermission">
+		Impossible d&apos;effectuer la réinitialisation.
+
+Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
+	</notification>
+	<notification name="CannotSetRunningSelectObjectsNoScripts">
+		Impossible de définir les scripts sur « exécution ».
+
+Veuillez sélectionner des objets avec des scripts.
+	</notification>
+	<notification name="CannotSetRunningNotSelectObjectsNoScripts">
+		Impossible de définir les scripts sur « non-exécution ».
+
+Veuillez sélectionner des objets avec des scripts.
+	</notification>
+	<notification name="NoFrontmostFloater">
+		Aucun floater frontmost à sauvegarder.
+	</notification>
+	<notification name="SeachFilteredOnShortWords">
+		Votre requête a été modifiée et les mots trops courts ont été supprimés.
+
+Recherche effectuée : [FINALQUERY]
+	</notification>
+	<notification name="SeachFilteredOnShortWordsEmpty">
+		Vos termes de recherche étaient trop courts et aucune recherche n&apos;a été effectuée.
+	</notification>
+	<notification name="CouldNotTeleportReason">
+		Impossible de téléporter.
+[REASON]
+	</notification>
+	<notification name="invalid_tport">
+		Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir vous téléporter.
+Si ce message persiste, veuillez consulter la page [SUPPORT_SITE].
+	</notification>
+	<notification name="invalid_region_handoff">
+		Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir traverser des régions.
+Si ce message persiste, veuillez consulter la page [SUPPORT_SITE].
+	</notification>
+	<notification name="blocked_tport">
+		Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
+Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
+	</notification>
+	<notification name="nolandmark_tport">
+		Désolé, le système n&apos;a pas réussi à localiser la destination de votre repère.
+	</notification>
+	<notification name="timeout_tport">
+		Désolé, la connexion vers votre lieu de téléportation n&apos;a pas abouti.
+Veuillez réessayer dans un moment.
+	</notification>
+	<notification name="noaccess_tport">
+		Désolé, vous n&apos;avez pas accès à cette destination.
+	</notification>
+	<notification name="missing_attach_tport">
+		Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d&apos;essayer de vous téléporter.
+	</notification>
+	<notification name="too_many_uploads_tport">
+		Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
+	</notification>
+	<notification name="expired_tport">
+		Désolé, votre demande de téléportation n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+	</notification>
+	<notification name="expired_region_handoff">
+		Désolé, votre demande pour passer dans une autre région n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+	</notification>
+	<notification name="no_host">
+		Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu&apos;elle n&apos;existe plus. Veuillez réessayer dans quelques minutes.
+	</notification>
+	<notification name="no_inventory_host">
+		L&apos;inventaire est temporairement indisponible.
+	</notification>
+	<notification name="CannotSetLandOwnerNothingSelected">
+		Impossible de définir le propriétaire foncier :
+aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotSetLandOwnerMultipleRegions">
+		Impossible de définir un propriétaire car la sélection couvre plusieurs régions. Veuillez sélectionner une zone plus petite et réessayer.
+	</notification>
+	<notification name="ForceOwnerAuctionWarning">
+		Cette parcelle est mise aux enchères. Définir un propriétaire annulerait les enchères, ce qui pourrait être gênant pour certains résidents si ces dernières ont commencé. Souhaitez-vous définir un propriétaire ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="CannotContentifyNothingSelected">
+		Problème :
+Aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotContentifyNoRegion">
+		Problème :
+Aucune région sélectionnée.
+	</notification>
+	<notification name="CannotReleaseLandNothingSelected">
+		Impossible d&apos;abandonner le terrain :
+aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotReleaseLandNoRegion">
+		Impossible d&apos;abandonner le terrain :
+la région est introuvable.
+	</notification>
+	<notification name="CannotBuyLandNothingSelected">
+		Impossible d&apos;acheter le terrain :
+aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotBuyLandNoRegion">
+		Impossible d&apos;acheter le terrain :
+la région dans laquelle il est situé est introuvable.
+	</notification>
+	<notification name="CannotCloseFloaterBuyLand">
+		Vous ne pouvez pas fermer la fenêtre Acheter le terrain avant que [APP_NAME] n&apos;estime le montant de cette transaction.
+	</notification>
+	<notification name="CannotDeedLandNothingSelected">
+		Cession du terrain impossible :
+aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotDeedLandNoGroup">
+		Cession du terrain impossible :
+aucun groupe sélectionné.
+	</notification>
+	<notification name="CannotDeedLandNoRegion">
+		Cession du terrain impossible :
+la région dans laquelle il est situé est introuvable.
+	</notification>
+	<notification name="CannotDeedLandMultipleSelected">
+		Cession du terrain impossible :
+plusieurs parcelles sélectionnées.
+
+Essayez de ne sélectionner qu&apos;une seule parcelle.
+	</notification>
+	<notification name="ParcelCanPlayMedia">
+		Cette parcelle propose des flux média.
+Pour jouer des flux média, il faut avoir une connexion internet rapide.
+
+Jouer les flux média lorsqu&apos;ils sont disponibles ?
+(Vous pourrez modifier cette option ultérieurement sous Préférences &gt; Audio et vidéo.)
+		<usetemplate name="okcancelbuttons" notext="Désactiver" yestext="Jouer le média"/>
+	</notification>
+	<notification name="CannotDeedLandWaitingForServer">
+		Cession du terrain impossible :
+rapport de propriété sur le point d&apos;être envoyé par le serveur.
+
+Merci de réessayer.
+	</notification>
+	<notification name="CannotDeedLandNoTransfer">
+		Cession du terrain impossible :
+la cession de terrain est interdite dans la région [REGION].
+	</notification>
+	<notification name="CannotReleaseLandWatingForServer">
+		Impossible d&apos;abandonner le terrain :
+mise à jour des informations sur la parcelle sur le point d&apos;être envoyée par le serveur.
+
+Veuillez réessayer dans quelques secondes.
+	</notification>
+	<notification name="CannotReleaseLandSelected">
+		Impossible d&apos;abandonner le terrain :
+vous n&apos;êtes pas le propriétaire des parcelles sélectionnées.
+
+Veuillez sélectionner une seule parcelle.
+	</notification>
+	<notification name="CannotReleaseLandDontOwn">
+		Impossible d&apos;abandonner le terrain :
+vous n&apos;avez pas le droit de libérer cette parcelle.
+Les parcelles qui vous appartiennent sont en vert.
+	</notification>
+	<notification name="CannotReleaseLandRegionNotFound">
+		Impossible d&apos;abandonner le terrain :
+la région dans laquelle il est situé est introuvable.
+	</notification>
+	<notification name="CannotReleaseLandNoTransfer">
+		Impossible d&apos;abandonner le terrain :
+le transfert de terrain est interdit dans la région [REGION].
+	</notification>
+	<notification name="CannotReleaseLandPartialSelection">
+		Impossible d&apos;abandonner le terrain :
+vous devez sélectionner une parcelle entière pour la libérer.
+
+Sélectionnez toute la parcelle ou divisez-la d&apos;abord.
+	</notification>
+	<notification name="ReleaseLandWarning">
+		Vous vous apprêtez à libérer [AREA] m² de terrain.
+Si vous libérez cette parcelle, elle sera supprimée de votre patrimoine, mais vous ne recevrez pas de L$.
+
+Libérer ce terrain ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="CannotDivideLandNothingSelected">
+		Division du terrain impossible :
+
+aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotDivideLandPartialSelection">
+		Division du terrain impossible :
+
+Toute la parcelle est sélectionnée.
+Sélectionnez une partie de la parcelle uniquement.
+	</notification>
+	<notification name="LandDivideWarning">
+		Si vous divisez ce terrain, cette parcelle sera partagée en deux et chaque parcelle pourra avoir ses propres paramètres. Après cette opération, certains paramètres reviendront aux paramètres par défaut.
+
+Diviser le terrain ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="CannotDivideLandNoRegion">
+		Division du terrain impossible :
+la région dans laquelle il est situé est introuvable.
+	</notification>
+	<notification name="CannotJoinLandNoRegion">
+		Impossible de fusionner le terrain :
+la région dans laquelle il est situé est introuvable.
+	</notification>
+	<notification name="CannotJoinLandNothingSelected">
+		Impossible de fusionner le terrain :
+aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotJoinLandEntireParcelSelected">
+		Impossible de fusionner le terrain :
+vous avez sélectionné une seule parcelle.
+
+Sélectionnez le terrain sur les deux parcelles.
+	</notification>
+	<notification name="CannotJoinLandSelection">
+		Impossible de fusionner le terrain :
+vous devez sélectionner au moins deux parcelles.
+
+Sélectionnez le terrain sur les deux parcelles.
+	</notification>
+	<notification name="JoinLandWarning">
+		En fusionnant ce terrain, vous créerez une grande parcelle composée de toutes les parcelles se trouvant dans le rectangle sélectionné.
+Vous devrez réinitialiser le nom et les options de la nouvelle parcelle.
+
+Fusionner le terrain ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmNotecardSave">
+		Cette note doit être sauvegardée avant que l&apos;objet ne puisse être copié ou visualisé. Enregistrer la note ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmItemCopy">
+		Copier cet objet dans votre inventaire ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Copier"/>
+	</notification>
+	<notification name="ResolutionSwitchFail">
+		Échec du changement de résolution (à [RESX], de [RESY])
+	</notification>
+	<notification name="ErrorUndefinedGrasses">
+		Erreur : herbes non identifiées : [SPECIES]
+	</notification>
+	<notification name="ErrorUndefinedTrees">
+		Erreur : arbres non identifiés : [SPECIES]
+	</notification>
+	<notification name="CannotSaveWearableOutOfSpace">
+		Impossible de sauvegarder [NAME]. Pour pouvoir sauvegarder ce fichier, vous devez d&apos;abord libérer de la mémoire sur votre ordinateur.
+	</notification>
+	<notification name="CannotSaveToAssetStore">
+		Impossible de sauvegarder le fichier [NAME] dans la base de données centrale.
+Cette erreur est généralement temporaire. Veuillez éditer et sauvegarder l&apos;élément endossable à nouveau d&apos;ici quelques minutes.
+	</notification>
+	<notification name="YouHaveBeenLoggedOut">
+		Vous avez été déconnecté(e) de [SECOND_LIFE] :
+            [MESSAGE]
+Vous pouvez afficher vos messages instantanés et votre chat en cliquant sur Afficher IM et chat. Sinon, cliquez sur Quitter pour quitter immédiatement [APP_NAME].
+		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Afficher IM et chat"/>
+	</notification>
+	<notification name="OnlyOfficerCanBuyLand">
+		Impossible d&apos;acheter du terrain pour le groupe :
+Vous n&apos;avez pas le droit d&apos;acheter de terrain pour votre groupe.
+	</notification>
+	<notification label="Devenir amis" name="AddFriend">
+		Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu&apos;ils se connectent.
+
+Proposer à [NAME] de devenir votre ami(e) ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification label="Devenir amis" name="AddFriendWithMessage">
+		Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu&apos;ils se connectent.
+
+Proposer à [NAME] de devenir votre ami(e) ?
+		<form name="form">
+			<input name="message">
+				Voulez-vous être mon ami(e) ?
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="RemoveFromFriends">
+		Voulez-vous supprimer [FIRST_NAME] [LAST_NAME] de votre liste d&apos;amis ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="RemoveMultipleFromFriends">
+		Voulez-vous supprimer plusieurs résidents de votre liste d&apos;amis ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllScriptedPublicObjectsByUser">
+		Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains des autres résidents dans cette région ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllScriptedObjectsByUser">
+		Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllObjectsByUser">
+		Êtes-vous certain de vouloir supprimer tous les objets (scriptés ou pas) appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BlankClassifiedName">
+		Vous devez choisir un nom pour votre petite annonce.
+	</notification>
+	<notification name="MinClassifiedPrice">
+		Le coût de l&apos;annonce doit être de [MIN_PRICE] L$ minimum.
+
+Veuillez saisir un montant plus élevé.
+	</notification>
+	<notification name="ConfirmObjectDeleteLock">
+		Au moins un des objets que vous avez sélectionnés est verrouillé.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoCopy">
+		Au moins un des objets que vous avez sélectionnés n&apos;est pas copiable.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoOwn">
+		Au moins un des objets que vous avez sélectionnés ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoCopy">
+		Au moins un des objets est verrouillé.
+Au moins un des objets n&apos;est pas copiable.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoOwn">
+		Au moins un des objets est verrouillé.
+Au moins un des objets ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoCopyNoOwn">
+		Au moins un des objets n&apos;est pas copiable.
+Au moins un des objets ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
+		Au moins un des objets est verrouillé.
+Au moins un des objets n&apos;est pas copiable.
+Au moins un des objets ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeLock">
+		Au moins un des objets est verrouillé.
+
+Êtes-vous certain de vouloir prendre ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeNoOwn">
+		Vous n&apos;êtes pas le propriétaire de tous les objets que vous prenez.
+Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
+
+Êtes-vous certain de vouloir prendre ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeLockNoOwn">
+		Au moins un des objets est verrouillé.
+Vous n&apos;êtes pas le propriétaire de tous les objets que vous prenez.
+Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
+Par contre, vous pouvez prendre les objets sélectionnés.
+
+Êtes-vous certain de vouloir prendre ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="CantBuyLandAcrossMultipleRegions">
+		Impossible d&apos;acheter le terrain car la sélection couvre plusieurs régions.
+
+Veuillez sélectionner une zone plus petite et réessayer.
+	</notification>
+	<notification name="DeedLandToGroup">
+		Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
+Le prix de la vente du terrain n&apos;est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
+
+Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="DeedLandToGroupWithContribution">
+		Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
+La cession incluera une contribution de terrain simultanée au groupe de [FIRST_NAME] [LAST_NAME].
+Le prix de la vente du terrain n&apos;est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
+
+Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="DisplaySetToSafe">
+		Les paramètres d&apos;affichage sont au niveau le plus sûr, comme vous l&apos;aviez indiqué.
+	</notification>
+	<notification name="DisplaySetToRecommended">
+		Vos paramètres d&apos;affichage ont été réglés avec une marge de sécurité en fonction de votre configuration système.
+	</notification>
+	<notification name="ErrorMessage">
+		[ERROR_MESSAGE]
+	</notification>
+	<notification name="AvatarMovedDesired">
+		La destination que vous avez choisie n&apos;est pas disponible actuellement.
+Vous avez été téléporté vers une région voisine.
+	</notification>
+	<notification name="AvatarMovedLast">
+		Votre dernière destination n&apos;est pas disponible actuellement.
+Vous avez été téléporté vers une région voisine.
+	</notification>
+	<notification name="AvatarMovedHome">
+		La destination que vous avez choisie n&apos;est pas disponible actuellement.
+Vous avez été téléporté vers une région voisine.
+Nous vous conseillons de définir votre domicile ailleurs.
+	</notification>
+	<notification name="ClothingLoading">
+		Vos vêtements sont en cours de téléchargement.
+Vous pouvez utiliser [SECOND_LIFE] normalement, les autres résidents vous voient correctement.
+		<form name="form">
+			<ignore name="ignore" text="Vos habits prennent du temps à télécharger"/>
+		</form>
+	</notification>
+	<notification name="FirstRun">
+		L&apos;installation de [APP_NAME] est terminée.
+
+S&apos;il s&apos;agit de la première fois que vous utilisez [SECOND_LIFE], vous devrez créer un compte avant de pouvoir vous connecter.
+Retourner sur www.secondlife.com pour créer un nouveau compte ?
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Nouveau compte..."/>
+	</notification>
+	<notification name="LoginPacketNeverReceived">
+		Nous avons des difficultés à vous connecter. Il y a peut-être un problème avec votre connexion Internet ou la [SECOND_LIFE_GRID].
+
+Vérifiez votre connextion Internet et réessayez dans quelques minutes, cliquez sur Aide pour consulter la page [SUPPORT_SITE] ou bien sur Téléporter pour essayer d&apos;aller chez vous.
+		<url name="url">
+			http://secondlife.com/support/
+		</url>
+		<form name="form">
+			<button name="OK" text="OK"/>
+			<button name="Help" text="Aide"/>
+			<button name="Teleport" text="Téléporter"/>
+		</form>
+	</notification>
+	<notification name="WelcomeChooseSex">
+		Votre personnage va apparaître dans un moment.
+
+Pour marcher, utilisez les flèches de direction.
+Appuyez sur F1 pour obtenir de l&apos;aide ou en savoir plus sur [SECOND_LIFE].
+Choisissez un avatar homme ou femme.
+Vous pourrez revenir sur votre décision plus tard.
+		<usetemplate name="okcancelbuttons" notext="Femme" yestext="Homme"/>
+	</notification>
+	<notification name="NotEnoughCurrency">
+		[NAME] [PRICE] L$ Vous n&apos;avez pas suffisamment de L$ pour faire cela.
+	</notification>
+	<notification name="GrantedModifyRights">
+		[FIRST_NAME] [LAST_NAME] vous avez donné la permission de modifier ses objets.
+	</notification>
+	<notification name="RevokedModifyRights">
+		Vous n&apos;avez plus le droit de modifier les objets de [FIRST_NAME] [LAST_NAME].
+	</notification>
+	<notification name="FlushMapVisibilityCaches">
+		Cela videra le cache cartographique de cette région.
+Cela n&apos;est vraiment utile que pour faire du débugage.
+(En production, attendez 5 minutes. Les cartes seront mises à jour après reconnexion.)
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BuyOneObjectOnly">
+		Impossible d&apos;acheter plus d&apos;un objet à  la fois.  Veuillez ne sélectionner qu&apos;un seul objet.
+	</notification>
+	<notification name="OnlyCopyContentsOfSingleItem">
+		Impossible de copier les contenus de plus d&apos;un objet à la fois.
+Veuillez ne sélectionner qu&apos;un seul objet.
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="KickUsersFromRegion">
+		Téléporter tous les résidents de cette région chez eux ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="EstateObjectReturn">
+		Etes-vous certain de vouloir renvoyer les objets appartenant à [USER_NAME] ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="InvalidTerrainBitDepth">
+		Impossible de definir les textures de la région :
+La texture du terrain [TEXTURE_NUM] a une profondeur invalide ([TEXTURE_BIT_DEPTH]).
+
+Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
+	</notification>
+	<notification name="InvalidTerrainSize">
+		Impossible de definir les textures de la région :
+La texture du terrain [TEXTURE_NUM] est trop volumineuse ([TEXTURE_SIZE_X] X [TEXTURE_SIZE_Y]).
+
+Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
+	</notification>
+	<notification name="RawUploadStarted">
+		Le chargement a commencé. Cela va prendre une à deux minutes,
+suivant votre vitesse de connexion.
+	</notification>
+	<notification name="ConfirmBakeTerrain">
+		Etes-vous sûr(e) de vouloir figer le relief actuel, en faire le point central des limites d&apos;élévation/abaissement de relief et la valeur par défaut du bouton Annuler modification ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="MaxAllowedAgentOnRegion">
+		Vous ne pouvez pas autoriser plus de [MAX_AGENTS] résidents.
+	</notification>
+	<notification name="MaxBannedAgentsOnRegion">
+		Vous ne pouvez pas bannir plus de [MAX_BANNED] résidents.
+	</notification>
+	<notification name="MaxAgentOnRegionBatch">
+		Echec lors de la tentative d&apos;ajout de [NUM_ADDED] agents :
+Dépasse la limite fixée à [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS].
+	</notification>
+	<notification name="MaxAllowedGroupsOnRegion">
+		Vous ne pouvez pas avoir plus que [MAX_GROUPS] groupes autorisés.
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Figer"/>
+	</notification>
+	<notification name="MaxManagersOnRegion">
+		Vous ne pouvez avoir que [MAX_MANAGER] gérants de domaine.
+	</notification>
+	<notification name="OwnerCanNotBeDenied">
+		Impossible d&apos;ajouter le propriétaire du domaine à la liste des résidents bannis.
+	</notification>
+	<notification name="CanNotChangeAppearanceUntilLoaded">
+		Impossible de changer d&apos;apparence jusqu&apos;à ce que les habits et la silhouette soient chargés.
+	</notification>
+	<notification name="ClassifiedMustBeAlphanumeric">
+		Le nom de votre petite annonce doit commencer par un chiffre ou une lettre (A à Z). La ponctuation n&apos;est pas autorisée.
+	</notification>
+	<notification name="CantSetBuyObject">
+		Cet objet n&apos;est pas à vendre.
+Veuillez choisir un objet à vendre et réessayer.
+	</notification>
+	<notification name="FinishedRawDownload">
+		Chargement du fichier de terrain raw effectué vers :
+[DOWNLOAD_PATH].
+	</notification>
+	<notification name="DownloadWindowsMandatory">
+		Une nouvelle version de [APP_NAME] est disponible.
+[MESSAGE]
+Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
+		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadWindows">
+		Une mise à jour de [APP_NAME] est disponible.
+[MESSAGE]
+Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadWindowsReleaseForDownload">
+		Une mise à jour de [APP_NAME] est disponible.
+[MESSAGE]
+Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadLinuxMandatory">
+		Une nouvelle version de [APP_NAME] est disponible.
+[MESSAGE]
+Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
+		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadLinux">
+		Une mise à jour de [SECOND_LIFE] est disponible.
+[MESSAGE]
+Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadLinuxReleaseForDownload">
+		Une mise à jour de [SECOND_LIFE] est disponible.
+[MESSAGE]
+Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadMacMandatory">
+		Une nouvelle version de [APP_NAME] est disponible.
+[MESSAGE]
+Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
+
+Télécharger vers le dossier Applications ?
+		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadMac">
+		Une mise à jour de [APP_NAME] est disponible.
+[MESSAGE]
+Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
+
+Télécharger vers le dossier Applications ?
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadMacReleaseForDownload">
+		Une mise à jour de [APP_NAME] est disponible.
+[MESSAGE]
+Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
+
+Télécharger vers le dossier Applications ?
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+	</notification>
+	<notification name="DeedObjectToGroup">
+		Si vous cédez cet objet, le groupe :
+* recevra les L$ versés pour l&apos;objet ;
+		<usetemplate ignoretext="Confimer avant que je ne cède un objet à un groupe" name="okcancelignore" notext="Annuler" yestext="Céder"/>
+	</notification>
+	<notification name="WebLaunchExternalTarget">
+		Voulez-vous ouvrir votre navigateur web système pour afficher ce contenu ?
+		<usetemplate ignoretext="Ouvrir mon navigateur pour consulter une page web" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchJoinNow">
+		Aller sur secondlife.com pour gérer votre compte ?
+		<usetemplate ignoretext="Lancer mon navigateur pour gérer mon compte" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchSecurityIssues">
+		Pour apprendre à signaler un problème de sécurité, consultez le Wiki de [SECOND_LIFE].
+		<usetemplate ignoretext="Lancer mon navigateur pour apprendre comment signaler un problème de sécurité" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchQAWiki">
+		Consultez le Wiki sur l&apos;Assurance Qualité de [SECOND_LIFE].
+		<usetemplate ignoretext="Lancer mon navigateur web pour consulter la page Wiki sur l&apos;Assurance Qualité." name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchPublicIssue">
+		Pour signaler des bugs et autres problèmes, utilisez le JIRA de [SECOND_LIFE].
+		<usetemplate ignoretext="Lancer mon navigateur pour utiliser le Public Issue Tracker (JIRA)" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
+	</notification>
+	<notification name="WebLaunchSupportWiki">
+		Visitez le blog officiel des Lindens pour les dernières nouvelles et informations.
+		<usetemplate ignoretext="Lancer mon navigateur web pour consulter le blog" name="okcancelignore" notext="Annuler" yestext="Aller à la page"/>
+	</notification>
+	<notification name="WebLaunchLSLGuide">
+		Voulez-vous ouvrir le guide pour l&apos;écriture de scripts ?
+		<usetemplate ignoretext="Lancer mon navigateur web pour consulter le guide pour l&apos;écriture de scripts" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchLSLWiki">
+		Voulez-vous ouvrir le portail LSL pour l&apos;écriture de scripts ?
+		<usetemplate ignoretext="Lancer mon navigateur web pour consulter le portail LSL" name="okcancelignore" notext="Annuler" yestext="Aller à la page"/>
+	</notification>
+	<notification name="ReturnToOwner">
+		Êtes-vous certain de vouloir renvoyer les objets sélectionnés à leur propriétaire ? Les objets donnés transférables seront renvoyés à leur ancien propriétaire.
+
+*Avertissement* Les objets non transférables seront supprimés !
+		<usetemplate ignoretext="Confirmer avant de rendre les objets à leurs propriétaires" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="GroupLeaveConfirmMember">
+		Vous êtes actuellement membre du groupe [GROUP].
+Quitter le groupe ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmKick">
+		Souhaitez-vous vraiment éjecter tous les utilisateurs de la grille ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous"/>
+	</notification>
+	<notification name="MuteLinden">
+		Désolé, vous ne pouvez pas ignorer un Linden.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CannotStartAuctionAlreadyForSale">
+		Vous ne pouvez pas démarrer des enchères sur une parcelle déjà en vente.  Si vous êtes certain de vouloir démarrer des enchères, mettez fin à la vente.
+	</notification>
+	<notification label="Échec de la fonction Ignorer les objets par nom" name="MuteByNameFailed">
+		Vous ignorez déjà ce résident.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="RemoveItemWarn">
+		Si vous supprimez des contenus, vous risquez d&apos;endommager l&apos;objet. Souhaitez-vous supprimer cet objet ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="CantOfferCallingCard">
+		Impossible d&apos;offrir une carte de visite actuellement. Veuillez réessayer dans un moment.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CantOfferFriendship">
+		Impossible de proposer votre amitié actuellement. Veuillez réessayer dans un moment.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="BusyModeSet">
+		Le mode Occupé est sélectionné.
+Les chats et les messages instantanés ne s&apos;afficheront pas. Les messages instantanés génèreront la réponse en mode occupé que vous avez créée. Toutes les offres de téléportation seront refusées. Toutes les offres d&apos;inventaire iront dans la corbeille.
+		<usetemplate ignoretext="Je change mon statut en mode Occupé" name="okignore" yestext="OK"/>
+	</notification>
+	<notification name="JoinedTooManyGroupsMember">
+		Vous avez atteint le nombre de groupes maximum. Avant de pouvoir rejoindre ce groupe, vous devez en quitter un ou refuser cette offre.
+[NAME] vous invite à rejoindre un groupe.
+[INVITE]
+		<usetemplate name="okcancelbuttons" notext="Refuser" yestext="Rejoindre"/>
+	</notification>
+	<notification name="KickUser">
+		Éjecter cet utilisateur avec quel message ?
+		<form name="form">
+			<input name="message">
+				Un administrateur vous a déconnecté.
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="KickAllUsers">
+		Éjecter tous les résidents actuellement en ligne avec quel message ?
+		<form name="form">
+			<input name="message">
+				Un administrateur vous a déconnecté.
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="FreezeUser">
+		Geler cet utilisateur avec quel message ?
+		<form name="form">
+			<input name="message">
+				Vous avez été gelé. Vous ne pouvez ni bouger ni chatter. Un administrateur va vous envoyer un message instantané (IM).
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="UnFreezeUser">
+		Dégeler cet utilisateur avec quel message ?
+		<form name="form">
+			<input name="message">
+				Vous n&apos;êtes plus gelé.
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="OfferTeleport">
+		Proposez une téléportation avec le message suivant ?
+		<form name="form">
+			<input name="message">
+				On se rejoint à [REGION] ?
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="OfferTeleportFromGod">
+		Demander au résident de venir vous rejoindre ?
+		<form name="form">
+			<input name="message">
+				On se rejoint à [REGION] ?
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="TeleportFromLandmark">
+		Êtes-vous certain de vouloir être téléporté ?
+		<usetemplate ignoretext="Confirmer que je veux me téléporter à un repère" name="okcancelignore" notext="Annuler" yestext="Téléporter"/>
+	</notification>
+	<notification name="TeleportToPick">
+		Téléporter vers [PICK] ?
+		<usetemplate ignoretext="Confirmer que je veux me téléporter à un endroit dans mes Préférences" name="okcancelignore" notext="Annuler" yestext="Téléporter"/>
+	</notification>
+	<notification label="Envoyer un message à tout le monde dans votre domaine" name="MessageEstate">
+		Saisissez un message court qui sera envoyé à tous les résidents se trouvant actuellement sur votre domaine.
+		<form name="form">
+			<input name="message"/>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification label="Modifier un domaine Linden" name="ChangeLindenEstate">
+		Vous vous apprêtez à modifier un domaine appartenant aux Lindens (continent, zone réservée aux ados, orientation etc.).
+
+Cela est extrêmement délicat car l&apos;expérience des résidents est en jeu. Sur le continent, cela modifiera des milliers de régions et sera difficile à digérer pour le serveur.
+
+Continuer ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification label="Modifier l&apos;accès à un domaine Linden" name="ChangeLindenAccess">
+		Vous vous apprêtez à modifier la liste d&apos;accès à un domaine appartenant aux Linden (continent, zone réservée aux ados, orientation etc.).
+
+Cette action est délicate et ne doit être effectuée que pour appeler le hack autorisant des objets/L$ à être transférés à l&apos;intérieur/extérieur de la grille.
+Cette action modifiera des milliers de régions et sera difficile à digérer pour le serveur.
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateAllowedAgentAdd">
+		Ajouter à la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateAllowedAgentRemove">
+		Supprimer de la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateAllowedGroupAdd">
+		Ajouter à la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateAllowedGroupRemove">
+		Supprimer de la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateBannedAgentAdd">
+		Refuser l&apos;accès à ce domaine uniquement ou à [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateBannedAgentRemove">
+		Supprimer ce résident de la liste des résidents bannis pour ce domaine uniquement ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateManagerAdd">
+		Ajouter un gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateManagerRemove">
+		Supprimer le gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Confirmer" name="EstateKickUser">
+		Éjecter [EVIL_USER] de ce domaine ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="EstateChangeCovenant">
+		Êtes-vous certain de vouloir modifier le règlement du domaine ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked">
+		Votre catégorie d&apos;accès ne vous autorise pas à pénétrer dans cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
+
+Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked_KB">
+		Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
+
+Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
+		</url>
+		<usetemplate ignoretext="Je ne peux pas pénétrer dans cette région car je n&apos;ai pas accès à cette catégorie de contenu" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked_Notify">
+		Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
+	</notification>
+	<notification name="RegionEntryAccessBlocked_Change">
+		Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
+
+En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition &gt; Préférences... &gt; Général.
+		<form name="form">
+			<button name="OK" text="Modifier les Préférences"/>
+			<button default="true" name="Cancel" text="Fermer"/>
+			<ignore name="ignore" text="La catégorie de contenu que j&apos;ai choisie m&apos;empêche de pénétrer dans une région"/>
+		</form>
+	</notification>
+	<notification name="LandClaimAccessBlocked">
+		Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
+
+Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LandClaimAccessBlocked_KB">
+		Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région.
+
+Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
+		</url>
+		<usetemplate ignoretext="Je ne peux pas réclamer cette région car je n&apos;ai pas accès à cette catégorie de contenu" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
+	</notification>
+	<notification name="LandClaimAccessBlocked_Notify">
+		Votre catégorie d&apos;accès ne vous autorise pas à réclamer cette région.
+	</notification>
+	<notification name="LandClaimAccessBlocked_Change">
+		Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région.
+
+En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition &gt; Préférences... &gt; Général.
+		<usetemplate ignoretext="La catégorie de contenu que j&apos;ai choisie m&apos;empêche de réclamer un terrain" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked">
+		Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
+
+Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked_KB">
+		Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région.
+
+Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
+		</url>
+		<usetemplate ignoretext="Je ne peux pas acheter ce terrain car je n&apos;ai pas accès à cette catégorie de contenu" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked_Notify">
+		Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région.
+	</notification>
+	<notification name="LandBuyAccessBlocked_Change">
+		Votre catégorie d&apos;accès ne vous autorise pas à acheter cette région.
+
+En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition &gt; Préférences... &gt; Général.
+		<usetemplate ignoretext="La catégorie de contenu que j&apos;ai choisie m&apos;empêche d&apos;acheter un terrain" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/>
+	</notification>
+	<notification name="TooManyPrimsSelected">
+		&quot;Vous avez sélectionné trop de prims. Veuillez sélectionner au maximum [MAX_PRIM_COUNT] prims et réessayer.&quot;
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ProblemImportingEstateCovenant">
+		Problème lors de l&apos;importation du règlement du domaine.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ProblemAddingEstateManager">
+		Problèmes lors de l&apos;ajout d&apos;un nouveau gérant de domaine. Il est possible qu&apos;au moins un des domaines ait une liste de gérants complète.
+	</notification>
+	<notification name="ProblemAddingEstateGeneric">
+		Problème lors de l&apos;ajout à la liste de ce domaine. Il est possible qu&apos;au moins un des domaines ait une liste complète.
+	</notification>
+	<notification name="UnableToLoadNotecardAsset">
+		Impossible de charger les données de la note actuellement.
+	</notification>
+	<notification name="NotAllowedToViewNotecard">
+		Permissions pour afficher la note insuffisantes.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MissingNotecardAssetID">
+		Les références de la note ne se trouvent pas dans la base de données.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="PublishClassified">
+		Rappel : les frais pour passer des petites annonces ne sont pas remboursables.
+
+Publier cette petite annonce maintenant pour [AMOUNT] L$ ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="SetClassifiedMature">
+		Cette petite annonce contient-elle du contenu Mature ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="SetGroupMature">
+		Ce groupe contient-il du contenu Mature ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification label="Confirmer le redémarrage" name="ConfirmRestart">
+		Souhaitez-vous vraiment redémarrer cette région dans 2 minutes ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification label="Envoyer un message à la région" name="MessageRegion">
+		Saisissez une message qui sera envoyé à tous les résidents présents dans cette région.
+		<form name="form">
+			<input name="message"/>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification label="Catégorie de la région modifiée" name="RegionMaturityChange">
+		La catégorie d&apos;accès de cette région a été mise à jour.
+Ce changement n&apos;apparaîtra pas immédiatement sur la carte.
+	</notification>
+	<notification label="Versions de voix non compatibles" name="VoiceVersionMismatch">
+		Cette version de [APP_NAME] n&apos;est pas compatible avec la fonctionnalité de chat vocal dans cette région. Vous devez mettre à jour [APP_NAME] pour que le chat vocal fonctionne correctement.
+	</notification>
+	<notification label="Impossible d&apos;acheter des objets" name="BuyObjectOneOwner">
+		Impossible d&apos;acheter simultanément des objets de propriétaires différents.
+Veuillez ne sélectionner qu&apos;un seul objet.
+	</notification>
+	<notification label="Impossible d&apos;acheter des contenus" name="BuyContentsOneOnly">
+		Impossible d&apos;acheter les contenus de plus d&apos;un objet à la fois.
+Veuillez ne sélectionner qu&apos;un seul objet.
+	</notification>
+	<notification label="Impossible d&apos;acheter des contenus" name="BuyContentsOneOwner">
+		Impossible d&apos;acheter simultanément des objets de propriétaires différents.
+Veuillez ne sélectionner qu&apos;un seul objet.
+	</notification>
+	<notification name="BuyOriginal">
+		Acheter l&apos;objet original pour [PRICE] L$ à [PRICE] ?
+Vous deviendrez le propriétaire de cet objet.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BuyOriginalNoOwner">
+		Acheter l&apos;objet original pour [PRICE] L$ ?
+Vous deviendrez le propriétaire de cet objet.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BuyCopy">
+		Acheter une copie pour [PRICE] L$ à [OWNER] ?
+L&apos;objet sera copié dans votre inventaire.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BuyCopyNoOwner">
+		Acheter une copie pour [PRICE] L$ ?
+L&apos;objet sera copié dans votre inventaire.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BuyContents">
+		Acheter des contenus pour [PRICE] L$ à [OWNER] ?
+Ils seront copiés dans votre inventaire.
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BuyContentsNoOwner">
+		Acheter des contenus pour [PRICE] L$ ?
+Ils seront copiés dans votre inventaire.
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmPurchase">
+		Suite à cette transaction, vous allez :
+[ACTION]
+
+Êtes-vous certain de vouloir effectuer cette transaction ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmPurchasePassword">
+		Suite à cette transaction, vous allez :
+[ACTION]
+
+Êtes-vous certain de vouloir effectuer cette transaction ?
+Veuillez saisir à nouveau votre mot de passe et cliquer sur OK.
+		<form name="form">
+			<button name="ConfirmPurchase" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="SetPickLocation">
+		Remarque :
+vous avez mis à jour l&apos;emplacement de ce favori mais les autres détails resteront inchangés.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MoveInventoryFromObject">
+		Vous avez sélectionné des objets non copiables.
+Ces objets seront déplacés dans votre inventaire et non pas copiés.
+
+Déplacer les objets de l&apos;inventaire ?
+		<usetemplate ignoretext="M&apos;avertir avant que je ne déplace des objets pour lesquels la copie est interdite" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="MoveInventoryFromScriptedObject">
+		Vous avez sélectionné des objets de l&apos;inventaire qui ne peuvent pas être copiés. Ces objets seront déplacés vers votre inventaire, et non pas copiés.
+L&apos;objet les contenant est scripté, déplacer ces objets peut causer des problèmes au niveau du script.
+
+Déplacer les objets de l&apos;inventaire ?
+		<usetemplate ignoretext="M&apos;avertir avant que je ne déplace des objets pour lesquels la copie est interdite et qui pourraient casser des objets scriptés" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ClickActionNotPayable">
+		Avertissement : l&apos;action du clic Payer l&apos;objet a été définie mais ne fonctionnera que si un script est ajouté avec l&apos;event money().
+		<form name="form">
+			<ignore name="ignore" text="Je définis l&apos;action du clic Payer l&apos;objet  lorsque je construis un objet sans le script money()"/>
+		</form>
+	</notification>
+	<notification name="OpenObjectCannotCopy">
+		Vous n&apos;êtes autorisé à copier aucun élément dans cet objet.
+	</notification>
+	<notification name="WebLaunchAccountHistory">
+		Aller sur secondlife.com pour consulter l&apos;historique de votre compte ?
+		<usetemplate ignoretext="Lancer mon navigateur pour consulter l&apos;historique de mon compte" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
+	</notification>
+	<notification name="ConfirmQuit">
+		Êtes-vous certain de vouloir quitter ?
+		<usetemplate ignoretext="Confirmer avant de quitter" name="okcancelignore" notext="Ne pas quitter" yestext="Quitter"/>
+	</notification>
+	<notification name="HelpReportAbuseEmailLL">
+		Utilisez cet outil pour signaler des infractions aux Conditions d&apos;utilisation et aux Règles de la communauté. Voir :
+
+http://secondlife.com/corporate/tos.php
+http://secondlife.com/corporate/cs.php
+
+Lorsqu&apos;elles sont signalées, toutes les infractions aux Conditions d&apos;utilisation et aux Règles de la communauté font l&apos;objet d&apos;une enquête et sont résolues. Pour accéder aux détails de la résolution d&apos;un incident, allez sur :
+
+http://secondlife.com/support/incidentreport.php
+	</notification>
+	<notification name="HelpReportAbuseEmailEO">
+		Important : ce rapport ira au propriétaire de la région dans laquelle vous êtes et non à Linden Lab.
+
+Pour aider les résidents et les visiteurs, le propriétaire de la région dans laquelle vous êtes a choisi de recevoir et de s&apos;occuper de tous les rapports envoyés à partir de cette région. Linden Lab n&apos;enquêtera pas sur les rapports que vous envoyez à partir de cet endroit.
+
+Le propriétaire de la région traitera les rapports en fonction des règles de cette région, comme indiqué dans le réglement du domaine.
+(Les réglements sont visibles à partir du menu Monde &gt; À propos du terrain.)
+
+La résolution de ce rapport ne s&apos;applique qu&apos;à cette région ; L&apos;accès aux autres endroits de [SECOND_LIFE] ne sera pas affecté par les résultats de cette enquête. Seul Linden Lab peut interdire l&apos;accès à l&apos;ensemble de [SECOND_LIFE].
+	</notification>
+	<notification name="HelpReportAbuseSelectCategory">
+		Veuillez choisir une catégorie pour ce rapport d&apos;infraction.
+Le choix d&apos;une catégorie nous permet de traiter les rapports d&apos;infraction plus rapidement.
+	</notification>
+	<notification name="HelpReportAbuseAbuserNameEmpty">
+		Veuillez saisir le nom du contrevenant.
+Lorsque nous avons le nom du contrevenant, nous sommes en mesure de traiter les rapports plus rapidement.
+	</notification>
+	<notification name="HelpReportAbuseAbuserLocationEmpty">
+		Veuillez indiquer l&apos;endroit où l&apos;infraction a eu lieu.
+Les informations précises et exactes nous permettent de traiter les rapports plus rapidement.
+	</notification>
+	<notification name="HelpReportAbuseSummaryEmpty">
+		Veuillez saisir un récapitulatif de l&apos;infraction.
+Les récapitulatifs précis nous permettent de traiter les rapports plus rapidement.
+	</notification>
+	<notification name="HelpReportAbuseDetailsEmpty">
+		Veuillez saisir une description détaillée de l&apos;infraction.
+Soyez aussi précis que possible et essayez de fournir des noms ainsi que des détails sur l&apos;incident que vous signalez.
+Les descriptions précises nous permettent de traiter les rapports plus rapidement.
+	</notification>
+	<notification name="HelpReportAbuseContainsCopyright">
+		Cher résident,
+
+Il semble que vous souhaitiez reporter une infraction à des droits de propriété intellectuelle. Pour signaler correctement cette infraction :
+
+(1) Remplissez un rapport d&apos;infraction. Vous pouvez soumettre un rapport d&apos;infraction si vous pensez qu&apos;un résident exploite le système de droits de [SECOND_LIFE], par exemple en utilisant un CopyBot ou des outils similaires pour enfreindre des droits de propriété intellectuelle. Notre équipe chargée des infractions mènera une enquête et prendra les mesures nécessaires à l&apos;encontre du résident non respectueux des Conditions d&apos;utilisation ou des règles de la communauté. Sachez toutefois que l&apos;équipe chargée des infractions ne supprimera pas de contenu à l&apos;intérieur de [SECOND_LIFE].
+
+(2) Demandez à ce que du contenu à l&apos;intérieur de [SECOND_LIFE] soit supprimé. Pour demander à ce que du contenu soit supprimé de [SECOND_LIFE], vous devez soumettre un rapport d&apos;infraction valide, tel que fourni dans notre Règlement contre les violations des droit d&apos;auteurs (DMCA), à http://secondlife.com/corporate/dmca.php.
+
+Si vous souhaitez toujours reporter cette infraction, veuillez fermer cette fenêtre et soumettre votre rapport.  Vous devrez peut-être sélectionner la catégorie CopyBot ou exploitation abusive des droits.
+
+Merci,
+
+Linden Lab
+	</notification>
+	<notification name="FailedRequirementsCheck">
+		Les composantes requises suivantes ne se trouvent pas dans [FLOATER]:
+[COMPONENTS]
+	</notification>
+	<notification label="Remplacer la pièce-jointe existante" name="ReplaceAttachment">
+		Vous avez déjà un objet sur cette partie du corps.
+Voulez-vous le remplacer par l&apos;objet sélectionné ?
+		<form name="form">
+			<ignore name="ignore" save_option="true" text="Remplacer une pièce-jointe existante par l&apos;objet sélectionné"/>
+			<button ignore="Remplacer automatiquement" name="Yes" text="OK"/>
+			<button ignore="Ne jamais remplacer" name="No" text="Annuler"/>
+		</form>
+	</notification>
+	<notification label="Réponse si occupé(e)" name="BusyModePay">
+		Vous êtes en mode occupé et vous ne recevrez donc aucun objet en échange de ce paiement.
+
+Souhaitez-vous quitter le mode occupé avant de terminer cette transaction ?
+		<form name="form">
+			<ignore name="ignore" save_option="true" text="Je suis sur le point de payer une personne ou un objet mais suis en mode Occupé"/>
+			<button ignore="Toujours quitter le mode occupé" name="Yes" text="OK"/>
+			<button ignore="Ne jamais quitter le mode occupé" name="No" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="ConfirmEmptyTrash">
+		Êtes-vous certain de vouloir supprimer le contenu de votre corbeille de manière permanente ?
+		<usetemplate ignoretext="Confimer avant de vider la corbeille" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmClearBrowserCache">
+		Êtes-vous certain de vouloir supprimer l&apos;historique de vos visites et recherches ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
+	</notification>
+	<notification name="ConfirmClearCookies">
+		Êtes-vous certain de vouloir supprimer vos cookies ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
+	</notification>
+	<notification name="ConfirmClearMediaUrlList">
+		Êtes-vous certain de vouloir supprimer la liste des URL enregistrées ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
+	</notification>
+	<notification name="ConfirmEmptyLostAndFound">
+		Êtes-vous certain de vouloir supprimer le contenu de votre dossier Objets trouvés de manière permanente ?
+		<usetemplate ignoretext="Confimer avant de vider le dossier Objets trouvés" name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="CopySLURL">
+		La SLurl suivante a été copiée dans votre presse-papier :
+ [SLURL]
+
+Liez-la à partir d&apos;une page web pour permettre aux autres résidents d&apos;accéder facilement à cet endroit ou bien collez-la dans la barre d&apos;adresse de votre navigateur.
+		<form name="form">
+			<ignore name="ignore" text="La SLurl est copiée dans mon presse-papier"/>
+		</form>
+	</notification>
+	<notification name="WLSavePresetAlert">
+		Voulez-vous écraser l&apos;option précédemment enregistrée ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="WLDeletePresetAlert">
+		Voulez-vous supprimer [SKY] ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="WLNoEditDefault">
+		Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
+	</notification>
+	<notification name="WLMissingSky">
+		Une dossier semble manquer au Cycle du jour : [SKY].
+	</notification>
+	<notification name="PPSaveEffectAlert">
+		Certains effets post-traitement existent. Voulez-vous quand même écraser ce fichier ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="NewSkyPreset">
+		Nommez le nouveau ciel.
+		<form name="form">
+			<input name="message">
+				Nouveau préréglage
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="ExistsSkyPresetAlert">
+		Ce préréglage existe déjà !
+	</notification>
+	<notification name="NewWaterPreset">
+		Nommez ce nouveau préréglage d&apos;eau.
+		<form name="form">
+			<input name="message">
+				Nouveau préréglage
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="ExistsWaterPresetAlert">
+		Ce préréglage existe déjà !
+	</notification>
+	<notification name="WaterNoEditDefault">
+		Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
+	</notification>
+	<notification name="ChatterBoxSessionStartError">
+		Impossible de démarrer une nouvelle session de chat avec [RECIPIENT].
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ChatterBoxSessionEventError">
+		[EVENT]
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ForceCloseChatterBoxSession">
+		Vous devez terminer votre session de chat avec [NAME].
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="Cannot_Purchase_an_Attachment">
+		Vous ne pouvez pas acheter un objet s&apos;il fait partie d&apos;une pièce-jointe.
+	</notification>
+	<notification label="À propos des requêtes pour les autorisations de débit" name="DebitPermissionDetails">
+		Accepter cette requête donne au script l&apos;autorisation de prélever des dollars Linden (L$) sur votre compte de manière continue. Pour révoquer cette autorisation, le propriétaire de l&apos;objet doit supprimer l&apos;objet ou bien réinitialiser les scripts dans l&apos;objet.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="AutoWearNewClothing">
+		Voulez-vous automatiquement porter l&apos;habit que vous allez créer ?
+		<usetemplate ignoretext="Porter automatiquement tout en modifiant mon apparence" name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="NotAgeVerified">
+		Pour pouvoir pénétrer dans cette zone, vous devez avoir procédé à la vérification de votre âge.  Souhaitez-vous aller sur [SECOND_LIFE] et procéder à la vérification de votre âge ?
+
+[_URL]
+		<url name="url" option="0">
+			https://secondlife.com/account/verification.php?lang=fr
+		</url>
+		<usetemplate ignoretext="Je n&apos;ai pas procédé à la vérification de mon âge" name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="Cannot enter parcel: no payment info on file">
+		Pour pouvoir pénétrer dans cette zone, vous devez avoir enregistré vos informations de paiement.  Souhaitez-vous aller sur [SECOND_LIFE] et enregistrer vos informations de paiement ?
+
+[_URL]
+		<url name="url" option="0">
+			https://secondlife.com/account/index.php?lang=fr
+		</url>
+		<usetemplate ignoretext="Mes informations de paiement ne sont pas enregistrées" name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="MissingString">
+		The string [STRING_NAME] is missing from strings.xml
+	</notification>
+	<notification name="SystemMessageTip">
+		[MESSAGE]
+	</notification>
+	<notification name="Cancelled">
+		Annulé
+	</notification>
+	<notification name="CancelledSit">
+		Action annulée
+	</notification>
+	<notification name="CancelledAttach">
+		Attachement annulé
+	</notification>
+	<notification name="ReplacedMissingWearable">
+		Habits et parties du corps manquants remplacés par les éléments par défaut.
+	</notification>
+	<notification name="GroupNotice">
+		Sujet : [SUBJECT], Message : [MESSAGE]
+	</notification>
+	<notification name="FriendOnline">
+		[FIRST] [LAST] est connecté(e)
+	</notification>
+	<notification name="FriendOffline">
+		[FIRST] [LAST] est déconnecté(e)
+	</notification>
+	<notification name="AddSelfFriend">
+		Même si vous êtes extrêmement sympathique, vous ne pouvez pas devenir ami avec vous-même.
+	</notification>
+	<notification name="UploadingAuctionSnapshot">
+		Importation de photos SL et Web en cours...
+(prend environ 5 minutes.)
+	</notification>
+	<notification name="UploadPayment">
+		Le chargement a coûté [AMOUNT] L$.
+	</notification>
+	<notification name="UploadWebSnapshotDone">
+		Photo Web importée
+	</notification>
+	<notification name="UploadSnapshotDone">
+		Photo SL importée
+	</notification>
+	<notification name="TerrainDownloaded">
+		Fichier terrain.raw téléchargé
+	</notification>
+	<notification name="GestureMissing">
+		Geste [NAME] absent de la base de données.
+	</notification>
+	<notification name="UnableToLoadGesture">
+		Impossible de charger le geste [NAME].
+Merci de réessayer.
+	</notification>
+	<notification name="LandmarkMissing">
+		Repère absent de la base de données.
+	</notification>
+	<notification name="UnableToLoadLandmark">
+		Impossible de charger le repère. Merci de réessayer.
+	</notification>
+	<notification name="CapsKeyOn">
+		La touche Verr.maj est activée.
+Cela risque d&apos;impacter votre mot de passe.
+	</notification>
+	<notification name="NotecardMissing">
+		Note absente de la base de données.
+	</notification>
+	<notification name="NotecardNoPermissions">
+		Vous n&apos;avez pas le droit de consulter cette note.
+	</notification>
+	<notification name="RezItemNoPermissions">
+		Permissions insuffisantes pour rezzer l&apos;objet.
+	</notification>
+	<notification name="UnableToLoadNotecard">
+		Impossible de lire les données de la note actuellement.
+	</notification>
+	<notification name="ScriptMissing">
+		Script absent de la base de données.
+	</notification>
+	<notification name="ScriptNoPermissions">
+		Permissions insuffisantes pour voir le script.
+	</notification>
+	<notification name="UnableToLoadScript">
+		Impossible de charger le script. Merci de réessayer.
+	</notification>
+	<notification name="IncompleteInventory">
+		Tous les éléments que vous souhaitez transférer ne sont pas encore disponibles sur le serveur.
+Merci d&apos;essayer à nouveau dans une minute.
+	</notification>
+	<notification name="CannotModifyProtectedCategories">
+		Vous ne pouvez pas modifier de catégories protégées.
+	</notification>
+	<notification name="CannotRemoveProtectedCategories">
+		Vous ne pouvez pas supprimer de catégories protégées.
+	</notification>
+	<notification name="OfferedCard">
+		Vous avez offert votre carte de visite à [FIRST] [LAST]
+	</notification>
+	<notification name="UnableToBuyWhileDownloading">
+		Achat impossible durant le chargement de l&apos;objet.
+Merci de réessayer.
+	</notification>
+	<notification name="UnableToLinkWhileDownloading">
+		Impossible de lier durant le chargement de l&apos;objet.
+Merci de réessayer.
+	</notification>
+	<notification name="CannotBuyObjectsFromDifferentOwners">
+		Vous ne pouvez pas acheter simultanément des objets de propriétaires différents.
+Veuillez sélectionner un seul objet.
+	</notification>
+	<notification name="ObjectNotForSale">
+		Cet objet n&apos;est pas à vendre.
+	</notification>
+	<notification name="EnteringGodMode">
+		Activation du mode divin : niveau [LEVEL]
+	</notification>
+	<notification name="LeavingGodMode">
+		Désactivation du mode divin : niveau [LEVEL]
+	</notification>
+	<notification name="CopyFailed">
+		Vous n&apos;avez pas le droit de copier ceci.
+	</notification>
+	<notification name="InventoryAccepted">
+		[NAME] a accepté votre envoi.
+	</notification>
+	<notification name="InventoryDeclined">
+		[NAME] a refusé votre envoi.
+	</notification>
+	<notification name="ObjectMessage">
+		[NAME]: [MESSAGE]
+	</notification>
+	<notification name="CallingCardAccepted">
+		Votre carte de visite a été acceptée.
+	</notification>
+	<notification name="CallingCardDeclined">
+		Votre carte de visite a été refusée.
+	</notification>
+	<notification name="TeleportToLandmark">
+		A présent que vous êtes sur le continent, vous pouvez voyager par téléportation (vers [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l&apos;écran puis sélectionnez le dossier Repères (Landmarks).
+Choisissez un repère, double-cliquez dessus et cliquez sur Téléporter.
+	</notification>
+	<notification name="TeleportToPerson">
+		A présent que vous êtes sur le continent, vous pouvez contacter des résidents (tel [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l&apos;écran puis sélectionnez le dossier Cartes de visite (Calling Cards).
+Choisissez en une, double-cliquez dessus et cliquez sur Message Instantané.
+	</notification>
+	<notification name="CantSelectLandFromMultipleRegions">
+		Vous ne pouvez pas sélectionner de terrain en dehors des limites du serveur.
+Veuillez sélectionner un terrain plus petit.
+	</notification>
+	<notification name="SearchWordBanned">
+		Certains termes de votre recherche ont été exclus car ils ne correspondaient pas aux standards fixés dans les Règles communautaires.
+	</notification>
+	<notification name="NoContentToSearch">
+		Veuillez sélectionner au moins un type de contenu à rechercher (PG, Mature ou Adulte)
+	</notification>
+	<notification name="GroupVote">
+		[NAME] a proposé un vote pour :
+[MESSAGE]
+		<form name="form">
+			<button name="VoteNow" text="Voter"/>
+			<button name="Later" text="Plus tard"/>
+		</form>
+	</notification>
+	<notification name="SystemMessage">
+		[MESSAGE]
+	</notification>
+	<notification name="EventNotification">
+		Avis d&apos;événement :
+
+[NAME]
+[DATE]
+		<form name="form">
+			<button name="Teleport" text="Téléporter"/>
+			<button name="Description" text="Description"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="TransferObjectsHighlighted">
+		Tous les objets de cette parcelle qui seront transférés à l&apos;acheteur sont maintenant mis en surbrillance.
+
+* Les arbres et la pelouse qui seront transférés ne sont pas mis en surbrillance.
+		<form name="form">
+			<button name="Done" text="Transfert effectué"/>
+		</form>
+	</notification>
+	<notification name="DeactivatedGesturesTrigger">
+		Gestes désactivés ayant le même mot-clé :
+[NAMES]
+	</notification>
+	<notification name="NoQuickTime">
+		Le logiciel Apple QuickTime ne semble pas installé sur votre système.
+Pour voir les vidéos sur les terrains qui le permettent, allez sur le site de QuickTime (http://www.apple.com/fr/quicktime/download) et installez le lecteur QuickTime.
+	</notification>
+	<notification name="NoPlugin">
+		Aucun Media Plugin n&apos;a été trouvé pour prendre en charge &quot;[MIME_TYPE]&quot;.  Les médias de ce type ne sont pas disponibles.
+	</notification>
+	<notification name="MediaPluginFailed">
+		Le Media Plugin suivant a échoué :
+    [PLUGIN]
+
+Si le problème persiste, veuillez réinstaller le plugin ou contacter le vendeur.
+		<form name="form">
+			<ignore name="ignore" text="L&apos;éxécution d&apos;un Media Plugin a échoué"/>
+		</form>
+	</notification>
+	<notification name="OwnedObjectsReturned">
+		Les objets que vous possédez sur la parcelle de terrain sélectionnée ont été renvoyés dans votre inventaire.
+	</notification>
+	<notification name="OtherObjectsReturned">
+		Les objets que vous possédez sur la parcelle de terrain appartenant à [FIRST] [LAST] ont été renvoyés dans votre inventaire.
+	</notification>
+	<notification name="OtherObjectsReturned2">
+		Les objets sur la parcelle appartenant à « [NAME] » ont étés renvoyés à leur propriétaire.
+	</notification>
+	<notification name="GroupObjectsReturned">
+		Les objets sélectionnés sur la parcelle de terrain partagée avec le groupe [GROUPNAME] ont été renvoyés dans l&apos;inventaire de leur propriétaire.
+Les objets donnés transférables ont étés renvoyés à leur propriétaire.
+Les objets non transférables donnés au groupe ont étés supprimés.
+	</notification>
+	<notification name="UnOwnedObjectsReturned">
+		Les objets sélectionnés sur la parcelle et qui ne sont pas à vous ont été rendus à leurs propriétaires.
+	</notification>
+	<notification name="NotSafe">
+		Les dégâts sont autorisés sur ce terrain.
+Vous pouvez être blessé ici. Si vous décédez, vous serez téléporté à votre domicile.
+	</notification>
+	<notification name="NoFly">
+		Le vol est interdit dans cette zone.
+Vous ne pouvez pas voler ici.
+	</notification>
+	<notification name="PushRestricted">
+		Les bousculades sont interdites dans cette zone.
+Vous ne pouvez pas pousser les autres à moins que vous soyez propriétaire de ce terrain.
+	</notification>
+	<notification name="NoVoice">
+		Le chat vocal est interdit dans cette zone. Vous n&apos;entendrez personne parler.
+	</notification>
+	<notification name="NoBuild">
+		La construction est interdite dans cette zone. Vous ne pouvez pas construite ou rezzer d&apos;objets ici.
+	</notification>
+	<notification name="ScriptsStopped">
+		Un administrateur a temporairement stoppé les scripts dans cette région.
+	</notification>
+	<notification name="ScriptsNotRunning">
+		Aucun script ne fonctionne dans cette région.
+	</notification>
+	<notification name="NoOutsideScripts">
+		Les scripts externes sont désactivés sur ce terrain.
+
+Aucun script ne marche ici à part ceux du propriétaire du terrain.
+	</notification>
+	<notification name="ClaimPublicLand">
+		Vous ne pouvez réclamer qu&apos;un terrain public dans la région où vous vous trouvez actuellement.
+	</notification>
+	<notification name="RegionTPAccessBlocked">
+		Votre catégorie d&apos;accès ne vous autorise pas à pénétrer dans cette région. Vous devez sans doute procéder à la vérification de votre âge ou installer une version plus récente du client.
+
+Pour savoir comment accéder aux zones ayant un tel niveau d&apos;accès, veuillez consulter les pages d&apos;aide.
+	</notification>
+	<notification name="URBannedFromRegion">
+		Vous avez été banni de cette région.
+	</notification>
+	<notification name="NoTeenGridAccess">
+		Votre compte ne peut pas se connecter à cette région du Teen grid.
+	</notification>
+	<notification name="ImproperPaymentStatus">
+		Vous n&apos;avez pas le statut de paiement approprié pour pénétrer dans cette région.
+	</notification>
+	<notification name="MustGetAgeParcel">
+		Pour pouvoir pénétrer sur cette parcelle, vous devez avoir procédé à la vérification de votre âge.
+	</notification>
+	<notification name="NoDestRegion">
+		Région de destination introuvable.
+	</notification>
+	<notification name="NotAllowedInDest">
+		Vous n&apos;êtes pas autorisé dans cette région.
+	</notification>
+	<notification name="RegionParcelBan">
+		Impossible de traverser une parcelle bannie. Veuillez trouver une autre solution.
+	</notification>
+	<notification name="TelehubRedirect">
+		Vous avez été redirigé vers un téléhub.
+	</notification>
+	<notification name="CouldntTPCloser">
+		Il n&apos;a pas été possible de vous téléporter vers une destination plus proche.
+	</notification>
+	<notification name="TPCancelled">
+		Téléportation annulée.
+	</notification>
+	<notification name="FullRegionTryAgain">
+		La région dans laquelle vous essayez de pénétrer est pleine actuellement.
+Veuillez réessayer dans quelques minutes.
+	</notification>
+	<notification name="GeneralFailure">
+		Panne générale.
+	</notification>
+	<notification name="RoutedWrongRegion">
+		Dirigé vers la mauvaise région. Merci de réessayer.
+	</notification>
+	<notification name="NoValidAgentID">
+		ID agent non valide.
+	</notification>
+	<notification name="NoValidSession">
+		ID de session non valide.
+	</notification>
+	<notification name="NoValidCircuit">
+		Aucun code de circuit valide.
+	</notification>
+	<notification name="NoValidTimestamp">
+		Timestamp non valide.
+	</notification>
+	<notification name="NoPendingConnection">
+		Impossible de créer la connexion en attente.
+	</notification>
+	<notification name="InternalUsherError">
+		Erreur interne lors de la tentative de connexion.
+	</notification>
+	<notification name="NoGoodTPDestination">
+		Impossible de trouver un lieu de téléportation valide dans cette région.
+	</notification>
+	<notification name="InternalErrorRegionResolver">
+		Une erreur interne est survenue lors de la résolution des coodonnées de la région.
+	</notification>
+	<notification name="NoValidLanding">
+		Impossible de trouver un point d&apos;atterrissage valide.
+	</notification>
+	<notification name="NoValidParcel">
+		Aucune parcelle valide n&apos;a été trouvée.
+	</notification>
+	<notification name="ObjectGiveItem">
+		Un objet appelé [OBJECTFROMNAME] appartenant à [FIRST] [LAST] vous a donné : [OBJECTTYPE] appelé(e) [OBJECTNAME].
+		<form name="form">
+			<button name="Keep" text="Garder"/>
+			<button name="Discard" text="Jeter"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="ObjectGiveItemUnknownUser">
+		L&apos;objet [OBJECTFROMNAME] appartenant à un utilisateur inconnu vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
+		<form name="form">
+			<button name="Keep" text="Garder"/>
+			<button name="Discard" text="Jeter"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="UserGiveItem">
+		[NAME] vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
+		<form name="form">
+			<button name="Keep" text="Garder"/>
+			<button name="Discard" text="Jeter"/>
+		</form>
+	</notification>
+	<notification name="GodMessage">
+		[NAME]
+[MESSAGE]
+	</notification>
+	<notification name="JoinGroup">
+		[MESSAGE]
+		<form name="form">
+			<button name="Join" text="Rejoindre"/>
+			<button name="Decline" text="Refuser"/>
+			<button name="Info" text="Infos"/>
+		</form>
+	</notification>
+	<notification name="TeleportOffered">
+		[NAME] vous propose de le/la rejoindre par téléportation :
+
+[MESSAGE]
+		<form name="form">
+			<button name="Teleport" text="Téléporter"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="GotoURL">
+		[MESSAGE]
+[URL]
+		<form name="form">
+			<button name="Later" text="Plus tard"/>
+			<button name="GoNow..." text="Y aller maintenant..."/>
+		</form>
+	</notification>
+	<notification name="OfferFriendship">
+		[NAME] vous demande de devenir son ami(e).
+
+[MESSAGE]
+
+(Par défaut, vous pourrez voir lorsque vous êtes tous deux connectés.)
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+		</form>
+	</notification>
+	<notification name="OfferFriendshipNoMessage">
+		[NAME] vous demande de devenir son ami.
+
+(Par défaut, vous pourrez voir quand vous êtes tous deux connectés)
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+		</form>
+	</notification>
+	<notification name="FriendshipAccepted">
+		[NAME] a accepté votre amitié.
+	</notification>
+	<notification name="FriendshipDeclined">
+		[NAME] a refusé votre amitié.
+	</notification>
+	<notification name="OfferCallingCard">
+		[FIRST] [LAST] vous offre sa carte de visite.
+Cela ajoute un marque-page dans votre inventaire, ce qui vous permet d&apos;envoyer rapidement un IM à ce résident.
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+		</form>
+	</notification>
+	<notification name="RegionRestartMinutes">
+		La région va redémarrer dans [MINUTES] minutes.
+Si vous restez dans cette région, vous serez déconnecté(e).
+	</notification>
+	<notification name="RegionRestartSeconds">
+		La région va redémarrer dans [SECONDS] secondes.
+Si vous restez dans cette région, vous serez déconnecté(e).
+	</notification>
+	<notification name="LoadWebPage">
+		Charger cette page web [URL] ?
+
+[MESSAGE]
+
+Venant de l&apos;objet : [OBJECTNAME], appartenant à : [NAME]?
+		<form name="form">
+			<button name="Gotopage" text="Charger"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="FailedToFindWearableUnnamed">
+		La recherche du [TYPE] dans la base de données a échoué.
+	</notification>
+	<notification name="FailedToFindWearable">
+		La recherche du [TYPE] nommé(e) [DESC] dans la base de données a échoué.
+	</notification>
+	<notification name="InvalidWearable">
+		L&apos;objet que vous essayez de porter utilise une fonctionnalité que le client ne peut lire.  Pour porter cet objet, veuillez télécharger une mise à jour du client.
+	</notification>
+	<notification name="ScriptQuestion">
+		&apos;[OBJECTNAME]&apos;, un objet appartenant à &apos;[NAME]&apos;, aimerait :
+
+[QUESTIONS]
+Acceptez-vous ?
+		<form name="form">
+			<button name="Yes" text="Oui"/>
+			<button name="No" text="Non"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="ScriptQuestionCaution">
+		Un objet appelé « [OBJECTNAME] », appartenant à « [NAME] », aimerait :
+
+[QUESTIONS]
+Si vous n&apos;avez pas confiance en cet objet ni en son créateur, vous devriez refuser cette requête.
+
+Accepter cette requête ?
+		<form name="form">
+			<button name="Grant" text="Accepter"/>
+			<button name="Deny" text="Refuser"/>
+			<button name="Details" text="Détails..."/>
+		</form>
+	</notification>
+	<notification name="ScriptDialog">
+		&apos;[TITLE]&apos; de [FIRST] [LAST]
+[MESSAGE]
+		<form name="form">
+			<button name="Ignore" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="ScriptDialogGroup">
+		&apos;[TITLE]&apos; de [GROUPNAME]
+[MESSAGE]
+		<form name="form">
+			<button name="Ignore" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="FirstBalanceIncrease">
+		Vous venez de recevoir [AMOUNT] L$.
+Votre solde en L$ est affiché en haut à droite.
+	</notification>
+	<notification name="FirstBalanceDecrease">
+		Vous venez de payer [AMOUNT] L$.
+Votre solde en L$ est affiché en haut à droite.
+	</notification>
+	<notification name="FirstSit">
+		Vous êtes assis(e).
+Utilisez les touches de direction (ou AWSD) pour regarder autour de vous.
+Pour vous lever, cliquez sur le bouton Me lever.
+	</notification>
+	<notification name="FirstMap">
+		Cliquez et faîtes glisser pour faire défiler la carte.
+Double-cliquez pour vous téléporter.
+Utilisez les contrôles à droite pour trouver des choses et afficher différents arrière-plans.
+	</notification>
+	<notification name="FirstBuild">
+		Vous avez ouvert les outils de construction. Tous les objets autour de vous ont été créés avec ces outils.
+	</notification>
+	<notification name="FirstTeleport">
+		Vous ne pouvez vous téléporter que dans certaines zones de cette région. La flèche pointe vers votre destination. Cliquez sur la flèche pour la faire disparaître.
+	</notification>
+	<notification name="FirstOverrideKeys">
+		Vos mouvements sont maintenant pris en charge par un objet.
+Essayez les flèches de votre clavier ou AWSD pour voir à quoi elles servent.
+Certains objets (comme les armes) nécessitent l&apos;activation du mode Vue subjective pour être utilisés.
+Pour cela, appuyez sur la touche M.
+	</notification>
+	<notification name="FirstAppearance">
+		Vous êtes en train d&apos;éditer votre apparence.
+Utilisez les touches de direction pour regarder autour de vous.
+Une fois terminé, cliquer sur Tout enregistrer.
+	</notification>
+	<notification name="FirstInventory">
+		Il s&apos;agit de votre inventaire qui contient vos possessions.
+
+* Pour porter quelque chose, faites glisser l&apos;objet sur vous-même.
+* Pour rezzer un objet dans le monde, faites-le glisser sur le sol.
+* Pour lire une note, double-cliquez dessus.
+	</notification>
+	<notification name="FirstSandbox">
+		Cette région est un bac à sable et est utilisée par les résidents pour apprendre à construire.
+
+Les objets que vous construisez ici seront supprimés après votre départ. N&apos;oubliez donc pas de cliquer droit et de choisir Prendre pour sauvegarder votre création dans votre inventaire.
+	</notification>
+	<notification name="FirstFlexible">
+		Cet objet est flexible. Les objets flexibles ne peuvent pas avoir de propriétés physiques et doivent rester fantômes.
+	</notification>
+	<notification name="FirstDebugMenus">
+		Vous avez ouvert le menu Avancé.
+
+Pour activer/désactiver ce menu,
+  Windows : Ctrl-Alt-D
+  Mac : ⌘-Opt-D
+	</notification>
+	<notification name="FirstSculptedPrim">
+		Vous êtes en train d&apos;éditer un sculptie. Pour spécifier la forme d&apos;un sculptie, vous devez utiliser une texture spécifique.
+	</notification>
+	<notification name="MaxListSelectMessage">
+		Vous ne pouvez sélectionner que [MAX_SELECT] objets maximum dans cette liste.
+	</notification>
+	<notification name="VoiceInviteP2P">
+		[NAME] vous invite à un chat vocal.
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="AutoUnmuteByIM">
+		[FIRST] [LAST] a reçu un message instantané et n&apos;est donc plus ignoré.
+	</notification>
+	<notification name="AutoUnmuteByMoney">
+		[FIRST] [LAST] a reçu de l&apos;argent et n&apos;est donc plus ignoré.
+	</notification>
+	<notification name="AutoUnmuteByInventory">
+		[FIRST] [LAST] a reçu un inventaire et n&apos;est donc plus ignoré.
+	</notification>
+	<notification name="VoiceInviteGroup">
+		[NAME] a rejoint un chat vocal avec le groupe [GROUP].
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="VoiceInviteAdHoc">
+		[NAME] a rejoint un chat vocal avec conférence.
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="InviteAdHoc">
+		[NAME] vous invite à un chat conférence.
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="VoiceChannelFull">
+		L&apos;appel auquel vous essayez de participer, [VOICE_CHANNEL_NAME], a atteint le nombre maximum de participants. Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="ProximalVoiceChannelFull">
+		Nous sommes désolés. Le nombre maximum de conversations vocales a été atteint dans cette zone. Veuillez trouver un autre endroit pour discuter.
+	</notification>
+	<notification name="VoiceChannelDisconnected">
+		Vous avez été déconnecté(e) de [VOICE_CHANNEL_NAME]. Vous allez maintenant être reconnecté au chat vocal spatial.
+	</notification>
+	<notification name="VoiceChannelDisconnectedP2P">
+		[VOICE_CHANNEL_NAME] a mis fin à l&apos;appel. Vous allez maintenant être reconnecté au chat vocal spatial.
+	</notification>
+	<notification name="P2PCallDeclined">
+		[VOICE_CHANNEL_NAME] a refusé votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
+	</notification>
+	<notification name="P2PCallNoAnswer">
+		[VOICE_CHANNEL_NAME] ne peut pas prendre votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
+	</notification>
+	<notification name="VoiceChannelJoinFailed">
+		Echec de la connexion avec [VOICE_CHANNEL_NAME], veuillez réessayer ultérieurement. Vous allez maintenant être reconnecté au chat vocal spatial.
+	</notification>
+	<notification name="VoiceLoginRetry">
+		Nous sommes en train de créer un canal vocal pour vous. Veuillez patienter quelques instants.
+	</notification>
+	<notification name="Cannot enter parcel: not a group member">
+		Seuls les membres d&apos;un certain groupe peuvent visiter cette zone.
+	</notification>
+	<notification name="Cannot enter parcel: banned">
+		Vous ne pouvez pas pénétrer sur ce terrain car l&apos;accès vous y est interdit.
+	</notification>
+	<notification name="Cannot enter parcel: not on access list">
+		Vous ne pouvez pas pénétrer sur ce terrain car vous n&apos;avez pas les droits d&apos;accès requis.
+	</notification>
+	<notification name="VoiceNotAllowed">
+		Vous n&apos;êtes pas autorisé à vous connecter au chat vocal pour [VOICE_CHANNEL_NAME].
+	</notification>
+	<notification name="VoiceCallGenericError">
+		Une erreur est survenue pendant la connexion au chat vocal pour [VOICE_CHANNEL_NAME]. Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="ServerVersionChanged">
+		La région dans laquelle vous avez pénétré utilise une version de serveur différente, ce qui peut avoir un impact sur votre performance. Cliquez pour voir les notes de version.
+	</notification>
+	<notification name="UnsupportedCommandSLURL">
+		La SLurl que vous avez saisie n&apos;est pas prise en charge.
+	</notification>
+	<notification name="IMToast">
+		<form name="form">
+			<button name="respondbutton" text="Répondre"/>
+		</form>
+	</notification>
+	<notification name="AttachmentSaved">
+		L&apos;élément joint a été sauvegardé.
+	</notification>
+	<notification name="UnableToFindHelpTopic">
+		Impossible de trouver l&apos;aide.
+	</notification>
+	<global name="UnsupportedCPU">
+		- Votre processeur ne remplit pas les conditions minimum requises.
+	</global>
+	<global name="UnsupportedGLRequirements">
+		Vous semblez ne pas avoir le matériel requis pour utiliser [APP_NAME]. [APP_NAME] requiert une carte graphique OpenGL avec une prise en charge du multitexturing. Si vous avez une telle carte, assurez-vous que vous avez aussi les pilotes les plus récents pour la carte, ainsi que les service packs et les patchs pour votre système d&apos;exploitation.
+
+Si vous avez toujours des problèmes, veuillez consulter la page [SUPPORT_SITE].
+	</global>
+	<global name="UnsupportedCPUAmount">
+		796
+	</global>
+	<global name="UnsupportedRAMAmount">
+		510
+	</global>
+	<global name="UnsupportedGPU">
+		- Votre carte graphique ne remplit pas les conditions minimum requises.
+	</global>
+	<global name="UnsupportedRAM">
+		- Votre mémoire système ne remplit pas les conditions minimum requises.
+	</global>
+	<global name="PermYes">
+		Oui
+	</global>
+	<global name="PermNo">
+		Non
+	</global>
+	<global name="You can only set your &apos;Home Location&apos; on your land or at a mainland Infohub.">
+		Si vous possédez un terrain, vous pouvez le définir comme domicile. 
+Sinon, consultez la carte et trouvez les « infohubs ».
+	</global>
+</notifications>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
index 3a1585bce29..afadd109b1d 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
@@ -1,45 +1,38 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
-   <string name="CaptionTextAcctInfo">
-       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
-   </string>
-   <string name="AcctTypeResident"
-    value="Résident" />
-   <string name="AcctTypeTrial"
-    value="Essai" />
-   <string name="AcctTypeCharterMember"
-    value="Membre originaire" />
-   <string name="AcctTypeEmployee"
-    value="Employé(e) de Linden Lab" />
-   <string name="PaymentInfoUsed"
-    value="Infos de paiement utilisées" />
-   <string name="PaymentInfoOnFile"
-    value="Infos de paiement enregistrées" />
-   <string name="NoPaymentInfoOnFile"
-    value="Aucune info de paiement" />
-   <string name="AgeVerified"
-    value="Âge vérifié" />
-   <string name="NotAgeVerified"
-    value="Âge non vérifié" />
-   <string name="partner_edit_link_url">
-       http://www.secondlife.com/account/partners.php?lang=fr
-   </string>
-    <panel name="scroll_content_panel">
-    <panel name="data_panel" >
-     <panel name="lifes_images_panel">
-          <panel name="second_life_image_panel">
-              <text name="second_life_photo_title_text">
-			[SECOND_LIFE]:
-              </text>
-          </panel>
-      </panel>
-        <text name="title_partner_text" value="Partenaire :"/>
-        <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
-         </panel>
-      <text name="text_box3">
-	Réponse si occupé(e) :
-      </text>
-    </panel>
-    </panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profile Edit" name="edit_profile_panel">
+	<string name="CaptionTextAcctInfo">
+		[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+	</string>
+	<string name="AcctTypeResident" value="Résident"/>
+	<string name="AcctTypeTrial" value="Essai"/>
+	<string name="AcctTypeCharterMember" value="Membre originaire"/>
+	<string name="AcctTypeEmployee" value="Employé(e) de Linden Lab"/>
+	<string name="PaymentInfoUsed" value="Infos de paiement utilisées"/>
+	<string name="PaymentInfoOnFile" value="Infos de paiement enregistrées"/>
+	<string name="NoPaymentInfoOnFile" value="Aucune info de paiement"/>
+	<string name="AgeVerified" value="Âge vérifié"/>
+	<string name="NotAgeVerified" value="Âge non vérifié"/>
+	<string name="partner_edit_link_url">
+		http://www.secondlife.com/account/partners.php?lang=fr
+	</string>
+	<string name="no_partner_text" value="Aucun"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<panel name="data_panel">
+				<panel name="lifes_images_panel">
+					<icon label="" name="2nd_life_edit_icon" tool_tip="Cliquez pour sélectionner une image"/>
+				</panel>
+				<icon label="" name="real_world_edit_icon" tool_tip="Cliquez pour sélectionner une image"/>
+				<text name="title_homepage_text">
+					Page d&apos;accueil :
+				</text>
+				<check_box label="Afficher dans les résultats de recherche" name="show_in_search_checkbox"/>
+				<text name="title_acc_status_text" value="Statut du compte :"/>
+			</panel>
+		</panel>
+	</scroll_container>
+	<panel name="profile_me_buttons_panel">
+		<button label="Enregistrer les changements" name="save_btn"/>
+		<button label="Annuler" name="cancel_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_invite.xml b/indra/newview/skins/default/xui/fr/panel_group_invite.xml
index 4cb0b886726..ae01f05bfbf 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_invite.xml
@@ -1,26 +1,29 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Inviter un résident" name="invite_panel">
-	<text name="help_text">
-		Vous pouvez inviter plusieurs résidents
-à la fois. Cliquez d&apos;abord sur
-Choisir un résident.
-	</text>
-	<button label="Choisir un résident" name="add_button" tool_tip=""/>
-	<name_list name="invitee_list" tool_tip="Pour sélectionner plusieurs noms, maintenez la touche Ctrl enfoncée en cliquant sur le nom des résidents."/>
-	<button label="Supprimer de la liste" name="remove_button" tool_tip="Supprime les résidents sélectionnés de la liste des invités."/>
-	<text>
-		Assignez-leur un rôle :
-	</text>
-	<text name="role_text">
-		Assignez-leur un rôle :
-	</text>
-	<combo_box name="role_name" tool_tip="Choisissez des rôles à assigner aux membres dans la liste."/>
-	<button label="Envoyer les invitations" name="ok_button"/>
-	<button label="Annuler" name="cancel_button"/>
-	<string name="confirm_invite_owner_str">
-		Etes-vous certain de vouloir inviter un/de nouveau(x) propriétaire(s) ? Ce choix est permanent !
-	</string>
-	<string name="loading">
-		(en cours de chargement...)
-	</string>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Inviter un résident" name="invite_panel">
+	<panel.string name="confirm_invite_owner_str">
+		Etes-vous certain de vouloir inviter un/de nouveau(x) propriétaire(s) ? Ce choix est permanent !
+	</panel.string>
+	<panel.string name="loading">
+		(en cours de chargement...)
+	</panel.string>
+	<panel.string name="already_in_group">
+		Certains des avatars font déjà partie du groupe et n&apos;ont pas été invités.
+	</panel.string>
+	<text name="help_text">
+		Vous pouvez inviter plusieurs résidents
+à la fois. Cliquez d&apos;abord sur
+Choisir un résident.
+	</text>
+	<button label="Choisir un résident" name="add_button" tool_tip=""/>
+	<name_list name="invitee_list" tool_tip="Pour sélectionner plusieurs noms, maintenez la touche Ctrl enfoncée en cliquant sur le nom des résidents."/>
+	<button label="Supprimer de la liste" name="remove_button" tool_tip="Supprime les résidents sélectionnés de la liste des invités."/>
+	<text name="role_text">
+		Assignez-leur un rôle :
+	</text>
+	<combo_box name="role_name" tool_tip="Choisissez des rôles à assigner aux membres dans la liste."/>
+	<button label="Envoyer les invitations" name="ok_button"/>
+	<button label="Annuler" name="cancel_button"/>
+	<string name="GroupInvitation">
+		Invitations au groupe
+	</string>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
index 29259e2e42a..9a24b7a6871 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
@@ -1,86 +1,86 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Terrain et L$" name="land_money_tab">
-	<string name="help_text">
-		Les parcelles appartenant au groupe sont indiquées avec le détails des contributions. Un avertissement apparaît si la surface utilisée par le groupe est supérieure ou égale au total des contributions. Les onglets Planification, Détails et Ventes correspondent aux finances du groupe.
-	</string>
-	<button label="?" name="help_button"/>
-	<string name="cant_view_group_land_text">
-		Vous n&apos;avez pas la permission de voir quel terrain possède ce groupe.
-	</string>
-	<string name="cant_view_group_accounting_text">
-		Vous n&apos;avez pas la permission d&apos;accéder aux informations
-financières de ce groupe.
-	</string>
-	<string name="loading_txt">
-		Chargement...
-	</string>
-	<text name="group_land_heading">
-		Terrain du groupe
-	</text>
-	<scroll_list name="group_parcel_list">
-		<column label="Parcelle" name="name"/>
-		<column label="Région" name="location"/>
-		<column label="Type" name="type"/>
-		<column label="Surface" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="Voir sur la carte" label_selected="Voir sur la carte" name="map_button"/>
-	<text name="total_contributed_land_label">
-		Total des contributions :
-	</text>
-	<text name="total_contributed_land_value">
-		[AREA] m²
-	</text>
-	<text name="total_land_in_use_label">
-		Superficie déjà utilisée :
-	</text>
-	<text name="total_land_in_use_value">
-		[AREA] m²
-	</text>
-	<text name="land_available_label">
-		Superficie disponible :
-	</text>
-	<text name="land_available_value">
-		[AREA] m²
-	</text>
-	<text name="your_contribution_label">
-		Votre contribution :
-	</text>
-	<string name="land_contrib_error">
-		Impossible de définir votre don de terre.
-	</string>
-	<text name="your_contribution_units">
-		( m² )
-	</text>
-	<text name="your_contribution_max_value">
-		([AMOUNT] max.)
-	</text>
-	<text name="group_over_limit_text">
-		Une contribution supplémentaire du groupe est requise pour prendre en
-charge le terrain utilisé.
-	</text>
-	<text name="group_money_heading">
-		Finances
-	</text>
-	<tab_container name="group_money_tab_container">
-		<panel label="Planification" name="group_money_planning_tab">
-			<text_editor name="group_money_planning_text">
-				Calcul en cours...
-			</text_editor>
-		</panel>
-		<panel label="Détails" name="group_money_details_tab">
-			<text_editor name="group_money_details_text">
-				Calcul en cours...
-			</text_editor>
-			<button label="&lt; Plus tôt" label_selected="&lt; Plus tôt" name="earlier_details_button" tool_tip="Reculer dans le temps"/>
-			<button label="Plus tard &gt;" label_selected="Plus tard &gt;" name="later_details_button" tool_tip="Avancer dans le temps"/>
-		</panel>
-		<panel label="Ventes" name="group_money_sales_tab">
-			<text_editor name="group_money_sales_text">
-				Calcul en cours...
-			</text_editor>
-			<button label="&lt; Plus tôt" label_selected="&lt; Plus tôt" name="earlier_sales_button" tool_tip="Reculer dans le temps"/>
-			<button label="Plus tard &gt;" label_selected="Plus tard &gt;" name="later_sales_button" tool_tip="Avancer dans le temps"/>
-		</panel>
-	</tab_container>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Terrain et L$" name="land_money_tab">
+	<string name="help_text">
+		Les parcelles appartenant au groupe sont indiquées avec le détails des contributions. Un avertissement apparaît si la surface utilisée par le groupe est supérieure ou égale au total des contributions. Les onglets Planification, Détails et Ventes correspondent aux finances du groupe.
+	</string>
+	<button label="?" name="help_button"/>
+	<string name="cant_view_group_land_text">
+		Vous n&apos;avez pas la permission de voir quel terrain possède ce groupe.
+	</string>
+	<string name="cant_view_group_accounting_text">
+		Vous n&apos;avez pas la permission d&apos;accéder aux informations
+financières de ce groupe.
+	</string>
+	<string name="loading_txt">
+		Chargement...
+	</string>
+	<text name="group_land_heading">
+		Terrain du groupe
+	</text>
+	<scroll_list name="group_parcel_list">
+		<column label="Parcelle" name="name"/>
+		<column label="Région" name="location"/>
+		<column label="Type" name="type"/>
+		<column label="Surface" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="Carte" label_selected="Carte" name="map_button"/>
+	<text name="total_contributed_land_label">
+		Total des contributions :
+	</text>
+	<text name="total_contributed_land_value">
+		[AREA] m²
+	</text>
+	<text name="total_land_in_use_label">
+		Superficie déjà utilisée :
+	</text>
+	<text name="total_land_in_use_value">
+		[AREA] m²
+	</text>
+	<text name="land_available_label">
+		Superficie disponible :
+	</text>
+	<text name="land_available_value">
+		[AREA] m²
+	</text>
+	<text name="your_contribution_label">
+		Votre contribution :
+	</text>
+	<string name="land_contrib_error">
+		Impossible de définir votre don de terre.
+	</string>
+	<text name="your_contribution_units">
+		( m² )
+	</text>
+	<text name="your_contribution_max_value">
+		([AMOUNT] max.)
+	</text>
+	<text name="group_over_limit_text">
+		Une contribution supplémentaire du groupe est requise pour prendre en
+charge le terrain utilisé.
+	</text>
+	<text name="group_money_heading">
+		Finances
+	</text>
+	<tab_container name="group_money_tab_container">
+		<panel label="Planification" name="group_money_planning_tab">
+			<text_editor name="group_money_planning_text">
+				Calcul en cours...
+			</text_editor>
+		</panel>
+		<panel label="Détails" name="group_money_details_tab">
+			<text_editor name="group_money_details_text">
+				Calcul en cours...
+			</text_editor>
+			<button label="&lt; Plus tôt" label_selected="&lt; Plus tôt" name="earlier_details_button" tool_tip="Reculer dans le temps"/>
+			<button label="Plus tard &gt;" label_selected="Plus tard &gt;" name="later_details_button" tool_tip="Avancer dans le temps"/>
+		</panel>
+		<panel label="Ventes" name="group_money_sales_tab">
+			<text_editor name="group_money_sales_text">
+				Calcul en cours...
+			</text_editor>
+			<button label="&lt; Plus tôt" label_selected="&lt; Plus tôt" name="earlier_sales_button" tool_tip="Reculer dans le temps"/>
+			<button label="Plus tard &gt;" label_selected="Plus tard &gt;" name="later_sales_button" tool_tip="Avancer dans le temps"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_list_item.xml b/indra/newview/skins/default/xui/fr/panel_group_list_item.xml
new file mode 100644
index 00000000000..15d48c4eb4c
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_group_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="group_list_item">
+	<text name="group_name" value="Inconnu"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_notices.xml b/indra/newview/skins/default/xui/fr/panel_group_notices.xml
index 841ac5e7ee5..b719f1f07ff 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_notices.xml
@@ -1,67 +1,67 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Notices" name="notices_tab">
-	<text name="help_text">
-		Les notices vous permettent d&apos;envoyer des messages et pièces-jointes aux membres du groupe autorisés à les recevoir. Vous pouvez désactiver la réception des notices à l&apos;onglet Général.
-	</text>
-	<text name="no_notices_text">
-		Aucune notice
-	</text>
-	<button label="?" label_selected="?" name="help_button"/>
-	<text name="lbl">
-		Anciennes notices du groupe
-	</text>
-	<text name="lbl2">
-		Les notices sont conservées pendant 14 jours et chaque groupe a une limite quotidienne de 200 notices.
-	</text>
-	<scroll_list name="notice_list">
-		<column label="" name="icon"/>
-		<column label="Sujet" name="subject"/>
-		<column label="De" name="from"/>
-		<column label="Date" name="date"/>
-	</scroll_list>
-	<text name="notice_list_none_found">
-		Aucun résultat.
-	</text>
-	<button label="Créer une notice" label_selected="Créer une notice" name="create_new_notice"/>
-	<button label="Rafraîchir" label_selected="Rafraîchir la liste" name="refresh_notices"/>
-	<panel label="Créer une notice" name="panel_create_new_notice">
-		<text name="lbl">
-			Créer une notice
-		</text>
-		<text name="lbl2">
-			Pour joindre une pièce-jointe à cette notice, faites-la glisser depuis votre inventaire vers cette fenêtre. Les pièces-jointes doivent être copiables et transférables. Il n&apos;est pas possible d&apos;envoyer de dossiers.
-		</text>
-		<text bottom_delta="-79" name="lbl3" left="20">
-			Sujet :
-		</text>
-		<line_editor name="create_subject" width="331" left_delta="61"/>
-		<text name="lbl4" left="20">
-			Message :
-		</text>
-		<text_editor name="create_message" bottom_delta="-90" height="104" left_delta="61" width="330"/>
-		<text name="lbl5" width="68">
-			Pièce-jointe :
-		</text>
-		<line_editor name="create_inventory_name" width="190" left_delta="74"/>
-		<button label="Supprimer pièce-jointe" label_selected="Supprimer pièce-jointe" left="274" name="remove_attachment" width="140"/>
-		<button label="Envoyer" label_selected="Envoyer" left="274" name="send_notice" width="140"/>
-		<panel name="drop_target2" tool_tip="Pour joindre un objet de l&apos;inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l&apos;objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/>
-		<panel name="drop_target" tool_tip="Pour joindre un objet de l&apos;inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l&apos;objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/>
-	</panel>
-	<panel label="Voir ancienne notice" name="panel_view_past_notice">
-		<text name="lbl">
-			Détails
-		</text>
-		<text name="lbl2">
-			Pour envoyer une nouvelle notice, cliquez sur Créer une notice ci-dessus.
-		</text>
-		<text name="lbl3">
-			Sujet :
-		</text>
-		<text name="lbl4">
-			Message :
-		</text>
-		<button label="Ouvrir pièce-jointe" label_selected="Ouvrir pièce-jointe" name="open_attachment" width="118"/>
-		<line_editor left="128" name="view_inventory_name" width="256"/>
-	</panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Notices" name="notices_tab">
+	<text name="help_text">
+		Les notices vous permettent d&apos;envoyer des messages et pièces-jointes aux membres du groupe autorisés à les recevoir. Vous pouvez désactiver la réception des notices à l&apos;onglet Général.
+	</text>
+	<text name="no_notices_text">
+		Aucune notice
+	</text>
+	<button label="?" label_selected="?" name="help_button"/>
+	<text name="lbl">
+		Anciennes notices du groupe
+	</text>
+	<text name="lbl2">
+		Les notes sont conservées pendant 14 jours. La limite est de 200 notes quotidiennes par groupe.
+	</text>
+	<scroll_list name="notice_list">
+		<column label="" name="icon"/>
+		<column label="Sujet" name="subject"/>
+		<column label="De" name="from"/>
+		<column label="Date" name="date"/>
+	</scroll_list>
+	<text name="notice_list_none_found">
+		Aucun résultat.
+	</text>
+	<button label="Nouvelle note" label_selected="Créer une notice" name="create_new_notice"/>
+	<button label="Rafraîchir" label_selected="Rafraîchir la liste" name="refresh_notices"/>
+	<panel label="Créer une notice" name="panel_create_new_notice">
+		<text name="lbl">
+			Créer une notice
+		</text>
+		<text name="lbl2">
+			Vous pouvez ajouter un objet simple à la note en le faisant glisser de votre inventaire vers cette section. Les objets joints doivent pouvoir être copiés et transférés. Vous ne pouvez pas envoyer de dossier.
+		</text>
+		<text bottom_delta="-79" left="20" name="lbl3">
+			Sujet :
+		</text>
+		<line_editor left_delta="61" name="create_subject" width="331"/>
+		<text left="20" name="lbl4">
+			Message :
+		</text>
+		<text_editor bottom_delta="-90" height="104" left_delta="61" name="create_message" width="330"/>
+		<text name="lbl5" width="68">
+			Pièce-jointe :
+		</text>
+		<line_editor left_delta="74" name="create_inventory_name" width="190"/>
+		<button label="Supprimer pièce-jointe" label_selected="Supprimer pièce-jointe" left="274" name="remove_attachment" width="140"/>
+		<button label="Envoyer" label_selected="Envoyer" left="274" name="send_notice" width="140"/>
+		<panel name="drop_target2" tool_tip="Pour joindre un objet de l&apos;inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l&apos;objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/>
+		<panel name="drop_target" tool_tip="Pour joindre un objet de l&apos;inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l&apos;objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/>
+	</panel>
+	<panel label="Voir ancienne notice" name="panel_view_past_notice">
+		<text name="lbl">
+			Détails
+		</text>
+		<text name="lbl2">
+			Pour envoyer une nouvelle notice, cliquez sur Créer une notice ci-dessus.
+		</text>
+		<text name="lbl3">
+			Sujet :
+		</text>
+		<text name="lbl4">
+			Message :
+		</text>
+		<button label="Ouvrir pièce-jointe" label_selected="Ouvrir pièce-jointe" name="open_attachment" width="118"/>
+		<line_editor left="128" name="view_inventory_name" width="256"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_roles.xml b/indra/newview/skins/default/xui/fr/panel_group_roles.xml
index 008402db327..1b716babc65 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_roles.xml
@@ -1,160 +1,113 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Membres et rôles" name="roles_tab">
-	<text name="default_needs_apply_text">
-		Certains changements n&apos;ont pas été appliqués sur ce sous-onglet.
-	</text>
-	<text name="want_apply_text">
-		Voulez-vous enregistrer les modifications ?
-	</text>
-	<text name="cant_delete_role">
-		Les Rôles Tout le monde et Propriétaires sont spéciaux et ne peuvent être supprimés.
-	</text>
-	<button label="?" name="help_button"/>
-	<panel name="members_header">
-		<text name="static">
-			Membres
-		</text>
-		<text name="static2">
-			Les rôles de chaque membre peuvent être personnalisés, ce qui permet une
-meilleure organisation du groupe.
-		</text>
-	</panel>
-	<panel name="roles_header">
-		<text name="static">
-			Rôles
-		</text>
-		<text name="role_properties_modifiable">
-			Sélectionnez un rôle ci-dessous. Vous pouvez modifier le nom, la
-description et le titre du membre.
-		</text>
-		<text name="role_properties_not_modifiable">
-			Sélectionnez un rôle ci-dessous pour en connaître les propriétés, les
-membres et les pouvoirs.
-		</text>
-		<text bottom_delta="-28" name="role_actions_modifiable">
-			Vous pouvez aussi assigner des pouvoirs au rôle.
-		</text>
-		<text name="role_actions_not_modifiable">
-			Vous pouvez afficher mais non modifier les pouvoirs assignés.
-		</text>
-	</panel>
-	<panel name="actions_header">
-		<text name="static">
-			Pouvoirs
-		</text>
-		<text name="static2">
-			Vous pouvez afficher la description du pouvoir et voir à quels rôles ou à
-quels membres ces pouvoirs sont assignés.
-		</text>
-	</panel>
-	<tab_container height="164" name="roles_tab_container">
-		<panel height="148" label="Membres" name="members_sub_tab" tool_tip="Membres">
-			<line_editor bottom="127" name="search_text"/>
-			<button label="Rechercher" name="search_button" width="75"/>
-			<button label="Afficher tout" left_delta="80" name="show_all_button"/>
-			<name_list bottom_delta="-105" height="104" name="member_list">
-				<column label="Nom du membre" name="name"/>
-				<column label="Surface donnée" name="donated" width="116"/>
-				<column label="Dernière connexion" name="online" width="136"/>
-			</name_list>
-			<button label="Inviter un membre..." name="member_invite" width="165"/>
-			<button label="Expulser un membre" name="member_eject"/>
-			<text name="help_text">
-				Vous pouvez ajouter ou supprimer les rôles assignés aux membres.
-Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la touche Ctrl enfoncée.
-			</text>
-		</panel>
-		<panel height="148" label="Rôles" name="roles_sub_tab">
-			<line_editor bottom="127" name="search_text"/>
-			<button label="Rechercher" name="search_button" width="75"/>
-			<button label="Afficher tout" left_delta="80" name="show_all_button"/>
-			<scroll_list bottom_delta="-104" height="104" name="role_list">
-				<column label="Nom du rôle" name="name"/>
-				<column label="Titre" name="title"/>
-				<column label="Membres" name="members"/>
-			</scroll_list>
-			<button label="Créer un rôle..." name="role_create"/>
-			<button label="Supprimer le rôle" name="role_delete"/>
-			<text name="help_text">
-				Chaque rôle possède un titre et des pouvoirs. Un membre peut avoir plusieurs rôles mais il ne peut y avoir que 10 rôles dans un groupe, Visiteur et Propriétaire inclus.
-			</text>
-			<string name="cant_delete_role">
-				Les rôles Tous et Propriétaires sont spéciaux et ne peuvent pas être supprimés.
-			</string>
-		</panel>
-		<panel height="148" label="Pouvoirs" name="actions_sub_tab">
-			<line_editor bottom="127" name="search_text"/>
-			<button label="Rechercher" name="search_button" width="75"/>
-			<button label="Afficher tout" left_delta="80" name="show_all_button"/>
-			<scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Sélectionnez un pouvoir pour en afficher les détails.">
-				<column label="" name="icon"/>
-				<column label="" name="action"/>
-			</scroll_list>
-			<text name="help_text">
-				Les pouvoirs déterminent les facultés de chaque membre dans le groupe.
-			</text>
-		</panel>
-	</tab_container>
-	<panel name="members_footer">
-		<text name="static">
-			Rôles assignés
-		</text>
-		<text name="static2">
-			Pouvoirs attribués
-		</text>
-		<scroll_list name="member_assigned_roles">
-			<column label="" name="checkbox"/>
-			<column label="" name="role"/>
-		</scroll_list>
-		<scroll_list name="member_allowed_actions" tool_tip="Pour avoir des détails sur chacun des pouvoirs attribués, allez à l&apos;onglet Pouvoirs.">
-			<column label="" name="icon"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="roles_footer">
-		<text name="static">
-			Nom
-		</text>
-		<text name="static2">
-			Description
-		</text>
-		<line_editor name="role_name">
-			Employés
-		</line_editor>
-		<text name="static3">
-			Titre
-		</text>
-		<line_editor name="role_title">
-			(en attente)
-		</line_editor>
-		<text_editor name="role_description">
-			(en attente)
-		</text_editor>
-		<text name="static4">
-			Membres assignés
-		</text>
-		<text name="static5" tool_tip="Une liste des pouvoirs auquel le rôle sélectionné a accès.">
-			Pouvoirs attribués
-		</text>
-		<check_box label="Membres visibles" name="role_visible_in_list" tool_tip="Définit si les membres de ce rôle sont visibles à partir de l&apos;onglet Général aux personnes en dehors du groupe."/>
-		<scroll_list name="role_allowed_actions" tool_tip="Pour avoir des détails sur chacun des pouvoirs attribués, allez à l&apos;onglet Pouvoirs.">
-			<column label="" name="icon"/>
-			<column label="" name="checkbox"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="actions_footer">
-		<text name="static">
-			Description
-		</text>
-		<text_editor name="action_description">
-			Ce pouvoir permet d&apos;expulser des membres du groupe. Seul un propriétaire peut expulser un autre propriétaire.
-		</text_editor>
-		<text name="static2">
-			Rôles avec ce pouvoir
-		</text>
-		<text name="static3">
-			Membres avec ce pouvoir
-		</text>
-	</panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Membres et rôles" name="roles_tab">
+	<panel.string name="default_needs_apply_text">
+		Certains changements n&apos;ont pas été appliqués sur ce sous-onglet.
+	</panel.string>
+	<panel.string name="want_apply_text">
+		Voulez-vous enregistrer les modifications ?
+	</panel.string>
+	<tab_container height="164" name="roles_tab_container">
+		<panel height="148" label="Membres" name="members_sub_tab" tool_tip="Membres">
+			<panel.string name="help_text">
+				Vous pouvez ajouter ou supprimer les rôles assignés aux membres.
+Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la touche Ctrl enfoncée.
+			</panel.string>
+			<filter_editor label="Filtrer les membres" name="filter_input"/>
+			<name_list bottom_delta="-105" height="104" name="member_list">
+				<name_list.columns label="Membre" name="name"/>
+				<name_list.columns label="Donations" name="donated" width="116"/>
+				<name_list.columns label="En ligne" name="online" width="136"/>
+			</name_list>
+			<button label="Inviter" name="member_invite" width="165"/>
+			<button label="Expulser" name="member_eject"/>
+		</panel>
+		<panel height="148" label="Rôles" name="roles_sub_tab">
+			<panel.string name="help_text">
+				Chaque rôle possède un titre et des pouvoirs. Un membre peut avoir plusieurs rôles mais il ne peut y avoir que 10 rôles dans un groupe, Visiteur et Propriétaire inclus.
+			</panel.string>
+			<panel.string name="cant_delete_role">
+				Les rôles Tous et Propriétaires sont spéciaux et ne peuvent pas être supprimés.
+			</panel.string>
+			<filter_editor label="Filtrer les rôles" name="filter_input"/>
+			<scroll_list bottom_delta="-104" height="104" name="role_list">
+				<scroll_list.columns label="Rôle" name="name"/>
+				<scroll_list.columns label="Titre" name="title"/>
+				<scroll_list.columns label="Membres" name="members"/>
+			</scroll_list>
+			<button label="Ajouter un rôle" name="role_create"/>
+			<button label="Supprimer le rôle" name="role_delete"/>
+		</panel>
+		<panel height="148" label="Pouvoirs" name="actions_sub_tab" tool_tip="Vous pouvez afficher une description du pouvoir et voir quels membres et rôles peuvent s&apos;en servir.">
+			<panel.string name="help_text">
+				Les pouvoirs déterminent les facultés de chaque membre dans le groupe.
+			</panel.string>
+			<filter_editor label="Filtrer les pouvoirs" name="filter_input"/>
+			<scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Sélectionnez un pouvoir pour en afficher les détails.">
+				<scroll_list.columns label="" name="icon"/>
+				<scroll_list.columns label="" name="action"/>
+			</scroll_list>
+		</panel>
+	</tab_container>
+	<panel name="members_footer">
+		<text name="static">
+			Rôles assignés
+		</text>
+		<scroll_list name="member_assigned_roles">
+			<scroll_list.columns label="" name="checkbox"/>
+			<scroll_list.columns label="" name="role"/>
+		</scroll_list>
+		<text name="static2">
+			Pouvoirs attribués
+		</text>
+		<scroll_list name="member_allowed_actions" tool_tip="Pour avoir des détails sur chacun des pouvoirs attribués, allez à l&apos;onglet Pouvoirs.">
+			<scroll_list.columns label="" name="icon"/>
+			<scroll_list.columns label="" name="action"/>
+		</scroll_list>
+	</panel>
+	<panel name="roles_footer">
+		<text name="static">
+			Nom
+		</text>
+		<line_editor name="role_name">
+			Employés
+		</line_editor>
+		<text name="static3">
+			Titre
+		</text>
+		<line_editor name="role_title">
+			(en attente)
+		</line_editor>
+		<text name="static2">
+			Description
+		</text>
+		<text_editor name="role_description">
+			(en attente)
+		</text_editor>
+		<text name="static4">
+			Membres assignés
+		</text>
+		<check_box label="Membres visibles" name="role_visible_in_list" tool_tip="Définit si les membres de ce rôle sont visibles à partir de l&apos;onglet Général aux personnes en dehors du groupe."/>
+		<text name="static5" tool_tip="Une liste des pouvoirs auquel le rôle sélectionné a accès.">
+			Pouvoirs attribués
+		</text>
+		<scroll_list name="role_allowed_actions" tool_tip="Pour avoir des détails sur chacun des pouvoirs attribués, allez à l&apos;onglet Pouvoirs.">
+			<scroll_list.columns label="" name="icon"/>
+			<scroll_list.columns label="" name="checkbox"/>
+			<scroll_list.columns label="" name="action"/>
+		</scroll_list>
+	</panel>
+	<panel name="actions_footer">
+		<text name="static">
+			Description
+		</text>
+		<text_editor name="action_description">
+			Ce pouvoir permet d&apos;expulser des membres du groupe. Seul un propriétaire peut expulser un autre propriétaire.
+		</text_editor>
+		<text name="static2">
+			Rôles avec ce pouvoir
+		</text>
+		<text name="static3">
+			Membres avec ce pouvoir
+		</text>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml
new file mode 100644
index 00000000000..7f8f03f9aba
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<button label="Voir le profil" name="view_profile_btn"/>
+	<button label="Devenir amis" name="add_friend_btn"/>
+	<button label="Partager" name="share_btn"/>
+	<panel name="panel_call_buttons">
+		<button label="Appeler" name="call_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml
index eeef97454f5..3c174aa45bd 100644
--- a/indra/newview/skins/default/xui/fr/panel_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_login.xml
@@ -1,43 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_login">
-	<string name="forgot_password_url">
-		http://secondlife.com/account/request.php
-	</string>
-	<text name="first_name_text">
-		Prénom :
-	</text>
-	<text name="last_name_text">
-		Nom :
-	</text>
-	<text name="password_text">
-		Mot de passe :
-	</text>
-	<text name="start_location_text">
-		Lieu de départ :
-	</text>
-	<combo_box name="start_location_combo">
-		<combo_box.item name="MyHome" label="Domicile" />
-		<combo_box.item name="MyLastLocation" label="Dernier emplacement" />
-		<combo_box.item name="Typeregionname" label="&lt;Nom de la région&gt;" />
-	</combo_box>
-	<check_box label="Mémoriser" name="remember_check"/>
-	<text name="full_screen_text">
-		Le plein écran sera activé après identification.
-	</text>
-	<button label="Nouveau Compte..." label_selected="Nouveau Compte..." name="new_account_btn"/>
-	<button label="Me connecter" label_selected="Me connecter" name="connect_btn"/>
-	<button label="Préférences..." label_selected="Préférences..." name="preferences_btn"/>
-	<button label="Quitter" label_selected="Quitter" name="quit_btn"/>
-	<text name="version_text">
-		1.23.4 (5)
-	</text>
-	<text name="create_new_account_text">
-		Créer un compte
-	</text>
-	<text name="forgot_password_text">
-		Nom ou mot de passe oublié ?
-	</text>
-	<text name="channel_text">
-		[VERSION]
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+	<panel.string name="create_account_url">
+		http://secondlife.com/registration/
+	</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php
+	</panel.string>
+	<panel name="login_widgets">
+		<line_editor name="first_name_edit" tool_tip="Prénom sur [SECOND_LIFE]"/>
+		<line_editor name="last_name_edit" tool_tip="Nom sur [SECOND_LIFE]"/>
+		<text name="start_location_text">
+			Lieu de départ :
+		</text>
+		<text name="create_new_account_text">
+			Créer un compte
+		</text>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml
new file mode 100644
index 00000000000..7aa8f244049
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="chat_bar">
+	<line_editor label="Cliquer ici pour chatter." name="chat_box" tool_tip="Appuyer sur Entrée pour dire, Ctrl-Entrée pour crier"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_picks.xml b/indra/newview/skins/default/xui/fr/panel_picks.xml
new file mode 100644
index 00000000000..534af5ed3f2
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_picks.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Favoris" name="panel_picks">
+	<panel label="bottom_panel" name="edit_panel">
+		<button name="new_btn" tool_tip="Ajouter cet endroit à mes Favoris"/>
+	</panel>
+	<panel name="buttons_cucks">
+		<button label="Carte" name="show_on_map_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
index f616591c4e8..1f7c9a57dc8 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
@@ -1,59 +1,42 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Chat écrit" name="chat">
-	<text name="text_box">
-		Taille de la police 
-du chat :
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item name="radio" label="Petite" />
-		<radio_item name="radio2" label="Moyenne" />
-		<radio_item name="radio3" label="Grande" />
-	</radio_group>
-	<color_swatch label="Vous" name="user"/>
-	<text name="text_box1">
-		Vous
-	</text>
-	<color_swatch label="Avatars" name="agent"/>
-	<text name="text_box2">
-		Avatars
-	</text>
-	<color_swatch label="IM" name="im"/>
-	<text name="text_box3">
-		IM
-	</text>
-	<color_swatch label="Système" name="system"/>
-	<text name="text_box4">
-		Système
-	</text>
-	<color_swatch label="Erreurs de script" name="script_error"/>
-	<text name="text_box5">
-		Erreurs de script
-	</text>
-	<color_swatch label="Objets" name="objects"/>
-	<text name="text_box6">
-		Objets
-	</text>
-	<color_swatch label="Propriétaire" name="owner"/>
-	<text name="text_box7">
-		Propriétaire
-	</text>
-	<color_swatch label="Bulle" name="background"/>
-	<text name="text_box8">
-		Bulle
-	</text>
-	<color_swatch label="URL" name="links"/>
-	<text name="text_box9">
-		URL
-	</text>
-	<spinner label="Effacer le texte après" label_width="112" name="fade_chat_time" width="162"/>
-	<spinner left="335" name="max_chat_count"/>
-	<slider label="Opacité" name="console_opacity"/>
-	<check_box label="Utiliser la largeur de l&apos;écran (redémarrage requis)" name="chat_full_width_check"/>
-	<check_box label="Fermer le chat après avoir appuyé sur Entrée" name="close_chat_on_return_check"/>
-	<check_box label="Faire bouger l&apos;avatar avec les touches de direction" name="arrow_keys_move_avatar_check"/>
-	<check_box label="Afficher les heures dans le chat" name="show_timestamps_check"/>
-	<check_box label="Jouer l&apos;animation clavier quand vous écrivez" name="play_typing_animation"/>
-	<check_box label="Afficher les bulles de chat" name="bubble_text_chat"/>
-	<slider label="Opacité" name="bubble_chat_opacity"/>
-	<check_box label="Afficher les erreurs dans le chat" name="script_errors_as_chat"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Chat écrit" name="chat">
+	<radio_group name="chat_font_size">
+		<radio_item label="Petite" name="radio"/>
+		<radio_item label="Moyenne" name="radio2"/>
+		<radio_item label="Grande" name="radio3"/>
+	</radio_group>
+	<color_swatch label="Vous" name="user"/>
+	<text name="text_box1">
+		Moi
+	</text>
+	<color_swatch label="Avatars" name="agent"/>
+	<text name="text_box2">
+		Avatars
+	</text>
+	<color_swatch label="IM" name="im"/>
+	<text name="text_box3">
+		IM
+	</text>
+	<color_swatch label="Système" name="system"/>
+	<text name="text_box4">
+		Système
+	</text>
+	<color_swatch label="Erreurs de script" name="script_error"/>
+	<text name="text_box5">
+		Erreurs de script
+	</text>
+	<color_swatch label="Objets" name="objects"/>
+	<text name="text_box6">
+		Objets
+	</text>
+	<color_swatch label="Propriétaire" name="owner"/>
+	<text name="text_box7">
+		Propriétaire
+	</text>
+	<color_swatch label="URL" name="links"/>
+	<text name="text_box9">
+		URL
+	</text>
+	<check_box initial_value="true" label="Jouer l&apos;animation clavier quand vous écrivez" name="play_typing_animation"/>
+	<check_box label="M&apos;envoyer les IM par e-mail une fois déconnecté" name="send_im_to_email"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
index 726ebc78b0f..2afd7152cb7 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
@@ -1,163 +1,116 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Graphiques" name="Display panel">
-	<button label="?" name="GraphicsPreferencesHelpButton"/>
-	<text_editor bottom="-56" height="40" left="25" name="FullScreenInfo" width="460">
-		Décochez cette option pour passer en mode plein écran.
-	</text_editor>
-	<text name="WindowSizeLabel">
-		Taille de la fenêtre :
-	</text>
-	<combo_box name="windowsize combo">
-		<combo_box.item name="640x480" label="640 x 480" />
-		<combo_box.item name="800x600" label="800 x 600" />
-		<combo_box.item name="720x480" label="720 x 480 (NTSC)" />
-		<combo_box.item name="768x576" label="768 x 576 (PAL)" />
-		<combo_box.item name="1024x768" label="1024 x 768" />
-	</combo_box>
-	<text name="DisplayResLabel" width="165">
-		Résolution de l&apos;affichage :
-	</text>
-	<text name="AspectRatioLabel1" tool_tip="largeur/hauteur">
-		Rapport hauteur/largeur :
-	</text>
-	<combo_box name="aspect_ratio" tool_tip="largeur/hauteur">
-		<combo_box.item name="4:3(StandardCRT)" label="4:3 (Standard CRT)" />
-		<combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280 x 1024 LCD)" />
-		<combo_box.item name="8:5(Widescreen)" label="8:5 (écran large)" />
-		<combo_box.item name="16:9(Widescreen)" label="16:9 (plein écran)" />
-	</combo_box>
-	<text name="text">
-		Résolution d&apos;affichage :
-	</text>
-	<text name="Fullscreen Aspect Ratio:">
-		Format de plein écran :
-	</text>
-	<text name="(width / height)">
-		(largeur / hauteur)
-	</text>
-	<text name="UI Size:">
-		Taille de l&apos;IU :
-	</text>
-	<text name="(meters, lower is faster)">
-		(mètres, moins = plus rapide)
-	</text>
-	<text name="text2">
-		Options d&apos;affichage :
-	</text>
-	<check_box label="Lancer Second Life en mode fenêtré" name="windowed mode"/>
-	<check_box label="Auto-détection du ratio" left="350" name="aspect_auto_detect"/>
-	<check_box label="Utiliser échelle de résolution indépendante" name="ui_auto_scale"/>
-	<check_box label="Montrer l&apos;avatar en vue subjective" name="avfp"/>
-	<spinner label="Distance d&apos;affichage :" name="draw_distance"/>
-	<text name="HigherText">
-		Qualité et
-	</text>
-	<text name="QualityText">
-		Performance :
-	</text>
-	<text left="105" name="FasterText">
-		Plus rapide
-	</text>
-	<text name="ShadersPrefText">
-		Faible
-	</text>
-	<text name="ShadersPrefText2">
-		Moyen
-	</text>
-	<text name="ShadersPrefText3">
-		Élevé
-	</text>
-	<text name="ShadersPrefText4">
-		Ultra
-	</text>
-	<text bottom="-86" left="325" name="HigherText2">
-		Plus élevée
-	</text>
-	<text name="QualityText2" visible="false"/>
-	<check_box label="Personnaliser" left="395" name="CustomSettings"/>
-	<panel name="CustomGraphics Panel">
-	<text name="ShadersText">
-		Effets :
-	</text>
-	<check_box label="Placage de relief et brillance" name="BumpShiny"/>
-	<check_box label="Effets de base" name="BasicShaders" tool_tip="Désactiver cette option peut empêcher certains drivers de cartes graphiques de planter."/>
-	<check_box label="Effets atmosphériques" name="WindLightUseAtmosShaders"/>
-	<check_box label="Reflets de l&apos;eau" name="Reflections"/>
-	<text name="ReflectionDetailText">
-		Objets reflétés :
-	</text>
-	<radio_group name="ReflectionDetailRadio">
-		<radio_item name="0" label="Terrain et Arbres" />
-		<radio_item name="1" label="Objets statiques" />
-		<radio_item name="2" label="Objets et avatars" />
-		<radio_item name="3" label="Tout" />
-	</radio_group>
-	<text name="AvatarRenderingText">
-		Rendu de l&apos;avatar :
-	</text>
-	<check_box label="Avatars éloignés en 2D" name="AvatarImpostors"/>
-	<check_box label="Accélération du rendu" name="AvatarVertexProgram"/>
-	<check_box label="Mouvement des habits" name="AvatarCloth"/>
-	<text name="DrawDistanceMeterText1">
-		m
-	</text>
-	<text name="DrawDistanceMeterText2">
-		m
-	</text>
-	<slider label="Limite d&apos;affichage :" name="DrawDistance"/>
-	<slider label="Nombre de particules max. :" label_width="143" name="MaxParticleCount"/>
-	<slider label="Qualité post-traitement :" name="RenderPostProcess"/>
-	<text name="MeshDetailText">
-		Détails des rendus :
-	</text>
-	<slider label="  Objets :" name="ObjectMeshDetail"/>
-	<slider label="  Flexiprims :" name="FlexibleMeshDetail"/>
-	<slider label="  Arbres :" name="TreeMeshDetail"/>
-	<slider label="  Avatars :" name="AvatarMeshDetail"/>
-	<slider label="  Relief :" name="TerrainMeshDetail"/>
-	<slider label="  Ciel :" name="SkyMeshDetail"/>
-	<text name="PostProcessText">
-		Faible
-	</text>
-	<text name="ObjectMeshDetailText">
-		Faible
-	</text>
-	<text name="FlexibleMeshDetailText">
-		Faible
-	</text>
-	<text name="TreeMeshDetailText">
-		Faible
-	</text>
-	<text name="AvatarMeshDetailText">
-		Faible
-	</text>
-	<text name="TerrainMeshDetailText">
-		Faible
-	</text>
-	<text name="SkyMeshDetailText">
-		Faible
-	</text>
-	<text name="LightingDetailText">
-		Sources lumineuses :
-	</text>
-	<radio_group name="LightingDetailRadio">
-		<radio_item name="SunMoon" label="Soleil et lune uniquement" />
-		<radio_item name="LocalLights" label="Lumières à proximité" />
-	</radio_group>
-	<text left="380" name="TerrainDetailText">
-		Rendu du terrain :
-	</text>
-	<radio_group name="TerrainDetailRadio">
-		<radio_item name="0" label="Faible" />
-		<radio_item name="2" label="Élevé" />
-	</radio_group>
-	</panel>
-	<button label="Paramètres recommandés" name="Defaults"/>
-	<button label="Configuration du matériel" label_selected="Configuration du matériel" name="GraphicsHardwareButton"/>
-	<panel.string name="resolution_format">
-		[RES_X] x [RES_Y]
-	</panel.string>
-	<panel.string name="aspect_ratio_text">
-		[NUM]:[DEN]
-	</panel.string>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Graphiques" name="Display panel">
+	<text name="WindowSizeLabel">
+		Taille de la fenêtre :
+	</text>
+	<check_box label="Utiliser le plein écran" name="windowed mode"/>
+	<combo_box name="windowsize combo">
+		<combo_box.item label="640 x 480" name="640x480"/>
+		<combo_box.item label="800 x 600" name="800x600"/>
+		<combo_box.item label="720 x 480 (NTSC)" name="720x480"/>
+		<combo_box.item label="768 x 576 (PAL)" name="768x576"/>
+		<combo_box.item label="1024 x 768" name="1024x768"/>
+	</combo_box>
+	<text name="UI Size:">
+		Taille de l&apos;IU :
+	</text>
+	<text name="QualitySpeed">
+		Qualité et vitesse :
+	</text>
+	<text left="105" name="FasterText">
+		Plus rapide
+	</text>
+	<text name="BetterText">
+		Mieux
+	</text>
+	<text name="ShadersPrefText">
+		Faible
+	</text>
+	<text name="ShadersPrefText2">
+		Moyen
+	</text>
+	<text name="ShadersPrefText3">
+		Élevé
+	</text>
+	<text name="ShadersPrefText4">
+		Ultra
+	</text>
+	<panel label="CustomGraphics" name="CustomGraphics Panel">
+		<text name="ShadersText">
+			Effets :
+		</text>
+		<check_box initial_value="true" label="Placage de relief et brillance" name="BumpShiny"/>
+		<check_box initial_value="true" label="Effets de base" name="BasicShaders" tool_tip="Désactiver cette option peut empêcher certains drivers de cartes graphiques de planter."/>
+		<check_box initial_value="true" label="Effets atmosphériques" name="WindLightUseAtmosShaders"/>
+		<check_box initial_value="true" label="Reflets de l&apos;eau" name="Reflections"/>
+		<text name="ReflectionDetailText">
+			Objets reflétés :
+		</text>
+		<radio_group name="ReflectionDetailRadio">
+			<radio_item label="Terrain et Arbres" name="0"/>
+			<radio_item label="Objets statiques" name="1"/>
+			<radio_item label="Objets et avatars" name="2"/>
+			<radio_item label="Tout" name="3"/>
+		</radio_group>
+		<text name="AvatarRenderingText">
+			Rendu de l&apos;avatar :
+		</text>
+		<check_box initial_value="true" label="Avatars éloignés en 2D" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="Accélération du rendu" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="Mouvement des habits" name="AvatarCloth"/>
+		<slider label="Limite d&apos;affichage :" name="DrawDistance"/>
+		<text name="DrawDistanceMeterText2">
+			m
+		</text>
+		<slider label="Nombre de particules max. :" label_width="143" name="MaxParticleCount"/>
+		<slider label="Qualité post-traitement :" name="RenderPostProcess"/>
+		<text name="MeshDetailText">
+			Détails des rendus :
+		</text>
+		<slider label="  Objets :" name="ObjectMeshDetail"/>
+		<slider label="  Flexiprims :" name="FlexibleMeshDetail"/>
+		<slider label="  Arbres :" name="TreeMeshDetail"/>
+		<slider label="  Avatars :" name="AvatarMeshDetail"/>
+		<slider label="  Relief :" name="TerrainMeshDetail"/>
+		<slider label="  Ciel :" name="SkyMeshDetail"/>
+		<text name="PostProcessText">
+			Faible
+		</text>
+		<text name="ObjectMeshDetailText">
+			Faible
+		</text>
+		<text name="FlexibleMeshDetailText">
+			Faible
+		</text>
+		<text name="TreeMeshDetailText">
+			Faible
+		</text>
+		<text name="AvatarMeshDetailText">
+			Faible
+		</text>
+		<text name="TerrainMeshDetailText">
+			Faible
+		</text>
+		<text name="SkyMeshDetailText">
+			Faible
+		</text>
+		<text name="LightingDetailText">
+			Sources lumineuses :
+		</text>
+		<radio_group name="LightingDetailRadio">
+			<radio_item label="Soleil et lune uniquement" name="SunMoon"/>
+			<radio_item label="Lumières à proximité" name="LocalLights"/>
+		</radio_group>
+		<text left="380" name="TerrainDetailText">
+			Rendu du terrain :
+		</text>
+		<radio_group name="TerrainDetailRadio">
+			<radio_item label="Faible" name="0"/>
+			<radio_item label="Élevé" name="2"/>
+		</radio_group>
+	</panel>
+	<button label="Appliquer" label_selected="Appliquer" name="Apply"/>
+	<button label="Réinitialiser" name="Defaults"/>
+	<button label="Avancé" name="Advanced"/>
+	<button label="Matériel" label_selected="Matériel" name="GraphicsHardwareButton"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
index 527097b392f..c1a6d450891 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
@@ -1,32 +1,21 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Communication" name="im">
-	<text name="text_box">
-		Mon statut en ligne :
-	</text>
-	<check_box label="Seuls mes amis et groupes voient quand je suis connecté(e)" name="online_visibility"/>
-	<text name="log_in_to_change">
-		se connecter pour changer
-	</text>
-	<check_box label="Envoyer les IM à mon adresse e-mail ([EMAIL])" name="send_im_to_email"/>
-	<check_box label="Afficher les IM dans la console du chat" name="include_im_in_chat_console"/>
-	<check_box label="Afficher l&apos;heure dans les IM" name="show_timestamps_check"/>
-	<check_box label="Me prévenir quand des amis se connectent" name="friends_online_notify_checkbox"/>
-	<text name="text_box3">
-		Réponse si occupé(e) :
-	</text>
-	<text name="text_box4">
-		Enregistrements :
-	</text>
-	<check_box label="Enregistrer les IM sur mon ordinateur" name="log_instant_messages"/>
-	<check_box label="Inclure les heures" name="log_instant_messages_timestamp"/>
-	<check_box label="Enregistrer le chat local sur mon ordinateur" name="log_chat"/>
-	<check_box label="Inclure la fin de la dernière conversation IM" name="log_show_history"/>
-	<check_box label="Inclure les heures" name="log_chat_timestamp"/>
-	<check_box label="Inclure les IM reçus" name="log_chat_IM"/>
-	<check_box label="Inclure la date avec les heures" name="log_date_timestamp"/>
-	<button label="Changer d&apos;emplacement" label_selected="Changer d&apos;emplacement" name="log_path_button" width="150"/>
-	<line_editor left="308" name="log_path_string" right="-20"/>
-	<text name="text_box2">
-		IM :
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Communication" name="im">
+	<panel.string name="log_in_to_change">
+		se connecter pour changer
+	</panel.string>
+	<button label="Vider le cache" name="clear_cache"/>
+	<text name="cache_size_label_l">
+		(Endroits, images, web, historique des recherches)
+	</text>
+	<check_box label="Seuls mes amis et groupes voient quand je suis en ligne" name="online_visibility"/>
+	<check_box label="Seuls mes amis et groupes peuvent m&apos;appeler ou m&apos;envoyer un IM" name="voice_call_friends_only_check"/>
+	<check_box label="Fermer le micro à la fin d&apos;un appel" name="auto_disengage_mic_check"/>
+	<check_box label="Accepter les cookies" name="cookies_enabled"/>
+	<check_box label="Sauvegarder les journaux sur mon ordinateur" name="log_instant_messages"/>
+	<radio_group name="ChatIMLogs">
+		<radio_item label="Chat" name="radio1"/>
+		<radio_item label="IM" name="radio2"/>
+	</radio_group>
+	<line_editor left="308" name="log_path_string" right="-20"/>
+	<button label="Parcourir" label_selected="Parcourir" name="log_path_button" width="150"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
index b52ab672b00..7f6c7c57bd9 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
@@ -1,30 +1,46 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Contrôle et caméra" name="Input panel">
-	<text name=" Mouselook Options:">
-		Vue subjective :
-	</text>
-	<text name=" Mouse Sensitivity:">
-		Sensibilité de la souris :
-	</text>
-	<check_box label="Inverser la souris" name="invert_mouse"/>
-	<text name=" Auto Fly Options:">
-		Vol automatique :
-	</text>
-	<check_box label="Voler/atterrir en appuyant sur la flèche du haut/bas" name="automatic_fly"/>
-	<text name=" Camera Options:">
-		Options de la caméra :
-	</text>
-	<text name="camera_fov_label">
-		Angle de vision :
-	</text>
-	<text name="Camera Follow Distance:">
-		Distance :
-	</text>
-	<check_box label="Ajustement automatique en mode Édition" name="edit_camera_movement" tool_tip="Positionner automatiquement la caméra lors de l&apos;entrée ou de la sortie du mode Édition"/>
-	<check_box label="Ajustement automatique en mode Édition d&apos;apparence" name="appearance_camera_movement" tool_tip="Positionner automatiquement la caméra en mode Édition"/>
-	<text name="text2">
-		Affichage de l&apos;avatar :
-	</text>
-	<check_box label="Montrer l&apos;avatar en vue subjective" name="first_person_avatar_visible"/>
-	<button label="Configuration du joystick" name="joystick_setup_button" width="175"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Contrôle et caméra" name="Input panel">
+	<button label="Autres accessoires" name="joystick_setup_button" width="175"/>
+	<text name="Mouselook:">
+		Vue subjective :
+	</text>
+	<text name=" Mouse Sensitivity">
+		Sensibilité de la souris
+	</text>
+	<check_box label="Inverser" name="invert_mouse"/>
+	<text name="Network:">
+		Réseau :
+	</text>
+	<text name="Maximum bandwidth">
+		Bande passante maximale
+	</text>
+	<text name="text_box2">
+		kbps
+	</text>
+	<check_box label="Port de connexion personnalisé" name="connection_port_enabled"/>
+	<spinner label="Numéro de port :" name="web_proxy_port"/>
+	<text name="cache_size_label_l">
+		Taille de la mémoire
+	</text>
+	<text name="text_box5">
+		Mo
+	</text>
+	<button label="Parcourir" label_selected="Parcourir" name="set_cache"/>
+	<button label="Réinitialiser" label_selected="Choisir" name="reset_cache"/>
+	<text name="Cache location">
+		Emplacement du cache
+	</text>
+	<text name="Web:">
+		Web :
+	</text>
+	<radio_group name="use_external_browser">
+		<radio_item label="Utiliser le navigateur intégré" name="internal" tool_tip="Utilisez le navigateur intégré pour obtenir de l&apos;aide, ouvrir des liens etc. Ce navigateur s&apos;ouvre dans [APP_NAME]."/>
+		<radio_item label="Utiliser mon navigateur (IE, Firefox etc.)" name="external" tool_tip="Utiliser le navigateur web système par défaut pour l&apos;aide, les liens etc. Non recommandé en mode plein écran."/>
+	</radio_group>
+	<check_box initial_value="false" label="Proxy web" name="web_proxy_enabled"/>
+	<line_editor name="web_proxy_editor" tool_tip="Le nom ou adresse IP du proxy que vous souhaitez utiliser"/>
+	<button label="Parcourir" label_selected="Parcourir" name="set_proxy"/>
+	<text name="Proxy location">
+		Emplacement du proxy
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
index facd22988c7..c002c55c23e 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Audio et vidéo" name="Preference Media panel">
-	<slider label="Principal" name="System Volume"/>
-	<slider label="Son ambiant" name="Wind Volume"/>
-	<slider label="Sons" name="SFX Volume"/>
-	<slider label="Média" name="Media Volume"/>
-	<slider label="Interface" name="UI Volume"/>
-	<slider label="Musique" name="Music Volume"/>
-	<slider label="Voix" name="Voice Volume"/>
-	<text_editor name="voice_unavailable">
-		Le chat vocal n&apos;est pas disponible
-	</text_editor>
-	<check_box label="Activer la voix" name="enable_voice_check"/>
-	<radio_group name="ear_location">
-		<radio_item name="0" label="Écouter depuis la position de la caméra." />
-		<radio_item name="1" label="Écouter depuis la position de l&apos;avatar." />
-	</radio_group>
-	<button label="Paramètres du matériel" name="device_settings_btn"/>
-	<text name="muting_text">
-		Volume :
-	</text>
-	<panel name="Volume Panel" width="249"/>
-	<check_box label="Couper le son" name="disable audio"/>
-	<text bottom="-195" name="streaming_prefs_text" width="145">
-		Média :
-	</text>
-	<text name="audio_prefs_text">
-		Audio :
-	</text>
-	<panel label="Volume" name="Volume Panel"/>
-	<check_box label="Couper le son lorsque la fenêtre est minimisée" name="mute_when_minimized"/>
-	<check_box label="Jouer la musique disponible" name="streaming_music"/>
-	<check_box label="Jouer le média disponible" name="streaming_video"/>
-	<check_box label="Lire automatiquement le média" name="auto_streaming_video"/>
-	<slider label="Effet Doppler" label_width="115" name="Doppler Effect"/>
-	<slider label="Facteur d&apos;éloignement" label_width="115" name="Distance Factor"/>
-	<slider label="Facteur d&apos;atténuation" label_width="115" name="Rolloff Factor"/>
-	<spinner label="Alerte L$" name="L$ Change Threshold"/>
-	<spinner label="Alerte santé" name="Health Change Threshold"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Audio et vidéo" name="Preference Media panel">
+	<slider label="Volume principal" name="System Volume"/>
+	<slider label="Son ambiant" name="Wind Volume"/>
+	<slider label="Sons" name="SFX Volume"/>
+	<slider label="Média" name="Media Volume"/>
+	<slider label="Interface" name="UI Volume"/>
+	<slider label="Musique" name="Music Volume"/>
+	<slider label="Voix" name="Voice Volume"/>
+	<text_editor name="voice_unavailable">
+		Le chat vocal n&apos;est pas disponible
+	</text_editor>
+	<check_box label="Chat vocal" name="enable_voice_check"/>
+	<radio_group name="ear_location">
+		<radio_item label="Écouter depuis la position de la caméra" name="0"/>
+		<radio_item label="Écouter depuis la position de l&apos;avatar" name="1"/>
+	</radio_group>
+	<button label="Paramètres du matériel" name="device_settings_btn"/>
+	<text name="muting_text">
+		Volume :
+	</text>
+	<panel name="Volume Panel" width="249"/>
+	<check_box label="Couper le son" name="disable audio"/>
+	<text bottom="-195" name="streaming_prefs_text" width="145">
+		Média :
+	</text>
+	<text name="audio_prefs_text">
+		Audio :
+	</text>
+	<panel label="Volume" name="Volume Panel"/>
+	<check_box label="Couper le son quand minimisé" name="mute_when_minimized"/>
+	<check_box label="Jouer la musique disponible" name="streaming_music"/>
+	<check_box label="Jouer le média disponible" name="streaming_video"/>
+	<check_box label="Lire automatiquement le média" name="auto_streaming_video"/>
+	<slider label="Effet Doppler" label_width="115" name="Doppler Effect"/>
+	<slider label="Facteur d&apos;éloignement" label_width="115" name="Distance Factor"/>
+	<slider label="Facteur d&apos;atténuation" label_width="115" name="Rolloff Factor"/>
+	<spinner label="Alerte L$" name="L$ Change Threshold"/>
+	<spinner label="Alerte santé" name="Health Change Threshold"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml
new file mode 100644
index 00000000000..bd67605d9f2
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_profile.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profil" name="panel_profile">
+	<string name="CaptionTextAcctInfo">
+		[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+	</string>
+	<string name="payment_update_link_url">
+		http://www.secondlife.com/account/billing.php?lang=en
+	</string>
+	<string name="my_account_link_url" value="http://secondlife.com/account"/>
+	<string name="no_partner_text" value="Aucun"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<panel name="second_life_image_panel">
+				<text name="title_sl_descr_text" value="[SECOND_LIFE] :"/>
+			</panel>
+			<panel name="first_life_image_panel">
+				<text name="title_rw_descr_text" value="Monde physique :"/>
+			</panel>
+			<text name="me_homepage_text">
+				Page d&apos;accueil :
+			</text>
+			<text name="title_member_text" value="Membre depuis :"/>
+			<text name="title_acc_status_text" value="Statut du compte :"/>
+			<text name="title_partner_text" value="Partenaire :"/>
+			<panel name="partner_data_panel">
+				<text name="partner_text" value="[FIRST] [LAST]"/>
+			</panel>
+			<text name="title_groups_text" value="Groupes :"/>
+		</panel>
+	</scroll_container>
+	<panel name="profile_buttons_panel">
+		<button label="Devenir amis" name="add_friend"/>
+		<button label="IM" name="im"/>
+		<button label="Appeler" name="call"/>
+		<button label="Téléporter" name="teleport"/>
+	</panel>
+	<panel name="profile_me_buttons_panel">
+		<button label="Modifier le profil" name="edit_profile_btn"/>
+		<button label="Changer d&apos;apparence" name="edit_appearance_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_profile_view.xml b/indra/newview/skins/default/xui/fr/panel_profile_view.xml
new file mode 100644
index 00000000000..44539ddba47
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_profile_view.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_target_profile">
+	<string name="status_online">
+		En ligne
+	</string>
+	<string name="status_offline">
+		Hors ligne
+	</string>
+	<text name="user_name" value="(en cours de chargement...)"/>
+	<text name="status" value="En ligne"/>
+	<tab_container name="tabs">
+		<panel label="Profil" name="panel_profile"/>
+		<panel label="Favoris" name="panel_picks"/>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_script_ed.xml b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
new file mode 100644
index 00000000000..5790efe2f8f
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="script panel">
+	<panel.string name="loading">
+		Chargement…
+	</panel.string>
+	<panel.string name="can_not_view">
+		Ce scipt ne peut pas être copié, visualisé ou modifié.  Pour visualiser ou modifier un script à l&apos;intérieur d&apos;un objet, vous devez avoir les permissions requises.
+	</panel.string>
+	<panel.string name="public_objects_can_not_run">
+		Les objets publics ne peuvent pas exécuter de scripts
+	</panel.string>
+	<panel.string name="script_running">
+		Exécution en cours
+	</panel.string>
+	<panel.string name="Title">
+		Script : [NAME]
+	</panel.string>
+	<text_editor name="Script Editor">
+		Chargement…
+	</text_editor>
+	<button label="Enregistrer" label_selected="Enregistrer" name="Save_btn"/>
+	<combo_box label="Insérer..." name="Insert..."/>
+	<menu_bar name="script_menu">
+		<menu label="Fichier" name="File">
+			<menu_item_call label="Enregistrer" name="Save"/>
+			<menu_item_call label="Annuler tous les changements" name="Revert All Changes"/>
+		</menu>
+		<menu label="Éditer" name="Edit">
+			<menu_item_call label="Annuler" name="Undo"/>
+			<menu_item_call label="Refaire" name="Redo"/>
+			<menu_item_call label="Couper" name="Cut"/>
+			<menu_item_call label="Copier" name="Copy"/>
+			<menu_item_call label="Coller" name="Paste"/>
+			<menu_item_call label="Tout sélectionner" name="Select All"/>
+			<menu_item_call label="Désélectionner" name="Deselect"/>
+			<menu_item_call label="Rechercher / Remplacer..." name="Search / Replace..."/>
+		</menu>
+		<menu label="Aide" name="Help">
+			<menu_item_call label="Aide..." name="Help..."/>
+			<menu_item_call label="Aide par mots-clés..." name="Keyword Help..."/>
+		</menu>
+	</menu_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml
new file mode 100644
index 00000000000..9a2567c831a
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml-->
+<panel name="panel_stand_stop_flying">
+	<button label="Me lever" name="stand_btn" tool_tip="Cliquez ici pour vous lever."/>
+	<button label="Atterrir" name="stop_fly_btn" tool_tip="Atterrir"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_status_bar.xml b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
index 9545b251261..c963b4d8cba 100644
--- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
@@ -1,41 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="status">
-	<text name="ParcelNameText" tool_tip="Nom de la parcelle de terrain sur laquelle vous vous trouvez. Cliquez pour ouvrir la section À propos du terrain.">
-		Saisissez le nom de la parcelle ici
-	</text>
-	<text name="BalanceText" tool_tip="Solde du compte">
-		Chargement...
-	</text>
-	<button label="" label_selected="" name="buycurrency" tool_tip="Acheter des devises"/>
-	<text name="TimeText" tool_tip="Heure actuelle (Californie)">
-		midi
-	</text>
-	<string name="StatBarDaysOfWeek">
-		Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday
-	</string>
-	<string name="StatBarMonthsOfYear">
-		January:February:March:April:May:June:July:August:September:October:November:December
-	</string>
-	<button label="" label_selected="" name="scriptout" tool_tip="Alertes et erreurs de scripts"/>
-	<button label="" label_selected="" name="health" tool_tip="Santé"/>
-	<text name="HealthText" tool_tip="Santé">
-		100 %
-	</text>
-	<button label="" label_selected="" name="fly" tool_tip="Vol interdit"/>
-	<button label="" label_selected="" name="build" tool_tip="Construction interdite"/>
-	<button label="" label_selected="" name="scripts" tool_tip="Scripts interdits"/>
-	<button name="no_fly" tool_tip="Interdiction de voler"/>
-	<button name="no_build" tool_tip="Interdiction de construire/rezzer"/>
-	<button name="no_scripts" tool_tip="Interdiction d&apos;utiliser des scripts"/>
-	<button label="" label_selected="" name="restrictpush" tool_tip="Pas de bousculades"/>
-	<button name="status_no_voice" tool_tip="Voix non disponible ici"/>
-	<button label="" label_selected="" name="buyland" tool_tip="Acheter cette parcelle"/>
-	<line_editor label="Rechercher" name="search_editor" tool_tip="Rechercher dans [SECOND_LIFE]"/>
-	<button name="search_btn" tool_tip="Rechercher dans [SECOND_LIFE]"/>
-	<text name="packet_loss_tooltip">
-		Perte de paquets
-	</text>
-	<text name="bandwidth_tooltip">
-		Bande passante
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+	<panel.string name="StatBarDaysOfWeek">
+		Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday
+	</panel.string>
+	<panel.string name="StatBarMonthsOfYear">
+		January:February:March:April:May:June:July:August:September:October:November:December
+	</panel.string>
+	<panel.string name="packet_loss_tooltip">
+		Perte de paquets
+	</panel.string>
+	<panel.string name="bandwidth_tooltip">
+		Bande passante
+	</panel.string>
+	<panel.string name="buycurrencylabel">
+		[AMT] L$
+	</panel.string>
+	<button label="" label_selected="" name="buycurrency" tool_tip="Mon solde : Cliquez ici pour acheter plus de L$"/>
+	<text name="TimeText" tool_tip="Heure actuelle (Californie)">
+		midi
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_world_map.xml b/indra/newview/skins/default/xui/fr/panel_world_map.xml
index d00157a2973..2fb7baaf7ca 100644
--- a/indra/newview/skins/default/xui/fr/panel_world_map.xml
+++ b/indra/newview/skins/default/xui/fr/panel_world_map.xml
@@ -1,51 +1,57 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="world_map">
-	<panel.string name="world_map_north">
-		N
-	</panel.string>
-	<panel.string name="world_map_east">
-		E
-	</panel.string>
-	<panel.string name="world_map_west">
-		O
-	</panel.string>
-	<panel.string name="world_map_south">
-		S
-	</panel.string>
-	<panel.string name="world_map_southeast">
-		SE
-	</panel.string>
-	<panel.string name="world_map_northeast">
-		NE
-	</panel.string>
-	<panel.string name="world_map_southwest">
-		SO
-	</panel.string>
-	<panel.string name="world_map_northwest">
-		NO
-	</panel.string>
-	<text label="N" name="floater_map_north" text="N">
-		N
-	</text>
-	<text label="E" name="floater_map_east" text="E">
-		E
-	</text>
-	<text label="O" name="floater_map_west" text="O">
-		O
-	</text>
-	<text label="S" name="floater_map_south" text="S">
-		S
-	</text>
-	<text label="SE" name="floater_map_southeast" text="SE">
-		SE
-	</text>
-	<text label="NE" name="floater_map_northeast" text="NE">
-		NE
-	</text>
-	<text label="SO" name="floater_map_southwest" text="SO">
-		SO
-	</text>
-	<text label="NO" name="floater_map_northwest" text="NO">
-		NO
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+	<panel.string name="Loading">
+		Chargement…
+	</panel.string>
+	<panel.string name="InvalidLocation">
+		Lieu invalide...
+	</panel.string>
+	<panel.string name="world_map_north">
+		N
+	</panel.string>
+	<panel.string name="world_map_east">
+		E
+	</panel.string>
+	<panel.string name="world_map_west">
+		O
+	</panel.string>
+	<panel.string name="world_map_south">
+		S
+	</panel.string>
+	<panel.string name="world_map_southeast">
+		SE
+	</panel.string>
+	<panel.string name="world_map_northeast">
+		NE
+	</panel.string>
+	<panel.string name="world_map_southwest">
+		SO
+	</panel.string>
+	<panel.string name="world_map_northwest">
+		NO
+	</panel.string>
+	<text label="N" name="floater_map_north" text="N">
+		N
+	</text>
+	<text label="E" name="floater_map_east" text="E">
+		E
+	</text>
+	<text label="O" name="floater_map_west" text="O">
+		O
+	</text>
+	<text label="S" name="floater_map_south" text="S">
+		S
+	</text>
+	<text label="SE" name="floater_map_southeast" text="SE">
+		SE
+	</text>
+	<text label="NE" name="floater_map_northeast" text="NE">
+		NE
+	</text>
+	<text label="SO" name="floater_map_southwest" text="SO">
+		SO
+	</text>
+	<text label="NO" name="floater_map_northwest" text="NO">
+		NO
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 070d2cd1a5f..06cc7d4a791 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -1,655 +1,3149 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- This file contains strings that used to be hardcoded in the source.
-     It is only for those strings which do not belong in a floater.
-     For example, the strings used in avatar chat bubbles, and strings 
-     that are returned from one component and may appear in many places-->
-<strings>
-	<string name="LoginInProgress">
-		La connexion à [APP_NAME] apparaît peut-être comme étant gelée. Veuillez patienter.
-	</string>
-	<string name="LoginAuthenticating">
-		Authentification en cours
-	</string>
-	<string name="LoginMaintenance">
-		Maintenance du compte en cours…
-	</string>
-	<string name="LoginAttempt">
-		La tentative de connexion précédente a échoué. Connexion, esssai [NUMBER]
-	</string>
-	<string name="LoginPrecaching">
-		Monde en cours de chargement…
-	</string>
-	<string name="LoginInitializingBrowser">
-		Navigateur Web incorporé en cours d&apos;initialisation…
-	</string>
-	<string name="LoginInitializingMultimedia">
-		Multimédia en cours d&apos;initialisation…
-	</string>
-	<string name="LoginVerifyingCache">
-		Fichiers du cache en cours de vérification (peut prendre 60-90 s)...
-	</string>
-	<string name="LoginProcessingResponse">
-		Réponse en cours de traitement…
-	</string>
-	<string name="LoginInitializingWorld">
-		Monde en cours d&apos;initialisation…
-	</string>
-	<string name="LoginDecodingImages">
-		Décodage des images en cours...
-	</string>
-	<string name="LoginInitializingQuicktime">
-		Quicktime en cours d&apos;initialisation
-	</string>
-	<string name="LoginQuicktimeNotFound">
-		Quicktime introuvable, impossible de procéder à l&apos;initialisation.
-	</string>
-	<string name="LoginQuicktimeOK">
-		Initialisation de Quicktime réussie.
-	</string>
-	<string name="LoginWaitingForRegionHandshake">
-		Liaison avec la région en cours de création...
-	</string>
-	<string name="LoginConnectingToRegion">
-		Connexion avec la région en cours...
-	</string>
-	<string name="LoginDownloadingClothing">
-		Habits en cours de téléchargement...
-	</string>
-	<string name="AgentLostConnection">
-		Il y a peut-être des problèmes techniques dans cette region. Veuillez vérifier votre connexion Internet.
-	</string>
-	<string name="TooltipPerson">
-		Personne
-	</string>
-	<string name="TooltipNoName">
-		(pas de nom)
-	</string>
-	<string name="TooltipOwner">
-		Propriétaire :
-	</string>
-	<string name="TooltipPublic">
-		Public
-	</string>
-	<string name="TooltipIsGroup">
-		(Groupe)
-	</string>
-	<string name="TooltipFlagScript">
-		Script
-	</string>
-	<string name="TooltipFlagPhysics">
-		Propriétés physique
-	</string>
-	<string name="TooltipFlagTouch">
-		Toucher
-	</string>
-	<string name="TooltipFlagL$">
-		L$
-	</string>
-	<string name="TooltipFlagDropInventory">
-		Laisser tomber l&apos;inventaire
-	</string>
-	<string name="TooltipFlagPhantom">
-		Fantôme
-	</string>
-	<string name="TooltipFlagTemporary">
-		Temporaire
-	</string>
-	<string name="TooltipFlagRightClickMenu">
-		(cliquez-droit pour le menu)
-	</string>
-	<string name="TooltipFreeToCopy">
-		Copie autorisée
-	</string>
-	<string name="TooltipForSaleL$">
-		À vendre : [AMOUNT] L$
-	</string>
-	<string name="TooltipForSaleMsg">
-		À vendre : [MESSAGE]
-	</string>
-	<string name="TooltipFlagGroupBuild">
-		Contruction de groupe
-	</string>
-	<string name="TooltipFlagNoBuild">
-		Pas de construction
-	</string>
-	<string name="TooltipFlagNoEdit">
-		Contruction de groupe
-	</string>
-	<string name="TooltipFlagNotSafe">
-		Non sécurisé
-	</string>
-	<string name="TooltipFlagNoFly">
-		Interdiction de voler
-	</string>
-	<string name="TooltipFlagGroupScripts">
-		Scripts de groupe
-	</string>
-	<string name="TooltipFlagNoScripts">
-		Pas de scripts
-	</string>
-	<string name="TooltipLand">
-		Terrain :
-	</string>
-	<string name="TooltipMustSingleDrop">
-		Impossible de faire glisser plus d&apos;un objet ici
-	</string>
-	<string name="RetrievingData">
-		En cours d&apos;extraction...
-	</string>
-	<string name="ReleaseNotes">
-		Notes de version
-	</string>
-	<string name="LoadingData">
-		Chargement..
-	</string>
-	<string name="AvatarNameNobody">
-		(personne)
-	</string>
-	<string name="AvatarNameWaiting">
-		(en attente)
-	</string>
-	<string name="AvatarNameHippos">
-		(hippos)
-	</string>
-	<string name="GroupNameNone">
-		(aucun)
-	</string>
-	<string name="AssetErrorNone">
-		Aucune erreur
-	</string>
-	<string name="AssetErrorRequestFailed">
-		Requête de l&apos;actif : échec
-	</string>
-	<string name="AssetErrorNonexistentFile">
-		Requête de l&apos;actif : fichier inexistant
-	</string>
-	<string name="AssetErrorNotInDatabase">
-		Requête de l&apos;actif : actif introuvable dans la base de données
-	</string>
-	<string name="AssetErrorEOF">
-		Fin du ficher
-	</string>
-	<string name="AssetErrorCannotOpenFile">
-		Impossible d&apos;ouvrir le fichier
-	</string>
-	<string name="AssetErrorFileNotFound">
-		Fichier introuvable
-	</string>
-	<string name="AssetErrorTCPTimeout">
-		Délai d&apos;attente du transfert du fichier dépassé
-	</string>
-	<string name="AssetErrorCircuitGone">
-		Disparition du circuit
-	</string>
-	<string name="AssetErrorPriceMismatch">
-		Il y a une différence de prix entre le client et le serveur
-	</string>
-	<string name="AssetErrorUnknownStatus">
-		Statut inconnu
-	</string>
-	<string name="AvatarEditingApparance">
-		(Apparence en cours de modification)
-	</string>
-	<string name="AvatarAway">
-		Absent
-	</string>
-	<string name="AvatarBusy">
-		Occupé
-	</string>
-	<string name="AvatarMuted">
-		Ignoré
-	</string>
-	<string name="anim_express_afraid">
-		Effrayé
-	</string>
-	<string name="anim_express_anger">
-		En colère
-	</string>
-	<string name="anim_away">
-		Absent
-	</string>
-	<string name="anim_backflip">
-		Salto arrière
-	</string>
-	<string name="anim_express_laugh">
-		Rire en se tenant le ventre
-	</string>
-	<string name="anim_express_toothsmile">
-		Grand sourire
-	</string>
-	<string name="anim_blowkiss">
-		Envoyer un baiser
-	</string>
-	<string name="anim_express_bored">
-		Bailler d&apos;ennui
-	</string>
-	<string name="anim_bow">
-		S&apos;incliner
-	</string>
-	<string name="anim_clap">
-		Applaudir
-	</string>
-	<string name="anim_courtbow">
-		Révérence de cour
-	</string>
-	<string name="anim_express_cry">
-		Pleurer
-	</string>
-	<string name="anim_dance1">
-		Danse 1
-	</string>
-	<string name="anim_dance2">
-		Danse 2
-	</string>
-	<string name="anim_dance3">
-		Danse 3
-	</string>
-	<string name="anim_dance4">
-		Danse 4
-	</string>
-	<string name="anim_dance5">
-		Danse 5
-	</string>
-	<string name="anim_dance6">
-		Danse 6
-	</string>
-	<string name="anim_dance7">
-		Danse 7
-	</string>
-	<string name="anim_dance8">
-		Danse 8
-	</string>
-	<string name="anim_express_disdain">
-		Mépris
-	</string>
-	<string name="anim_drink">
-		Boire
-	</string>
-	<string name="anim_express_embarrased">
-		Gêne
-	</string>
-	<string name="anim_angry_fingerwag">
-		Désapprobation
-	</string>
-	<string name="anim_fist_pump">
-		Victoire
-	</string>
-	<string name="anim_yoga_float">
-		Yoga
-	</string>
-	<string name="anim_express_frown">
-		Froncer les sourcils
-	</string>
-	<string name="anim_impatient">
-		Impatient
-	</string>
-	<string name="anim_jumpforjoy">
-		Sauter de joie
-	</string>
-	<string name="anim_kissmybutt">
-		Va te faire voir !
-	</string>
-	<string name="anim_express_kiss">
-		Baiser
-	</string>
-	<string name="anim_laugh_short">
-		Rire
-	</string>
-	<string name="anim_musclebeach">
-		Montrer ses muscles
-	</string>
-	<string name="anim_no_unhappy">
-		Non (mécontent)
-	</string>
-	<string name="anim_no_head">
-		Non
-	</string>
-	<string name="anim_nyanya">
-		Na na na na nère
-	</string>
-	<string name="anim_punch_onetwo">
-		Gauche-droite
-	</string>
-	<string name="anim_express_open_mouth">
-		Bouche ouverte
-	</string>
-	<string name="anim_peace">
-		Paix
-	</string>
-	<string name="anim_point_you">
-		Montrer quelqu&apos;un du doigt
-	</string>
-	<string name="anim_point_me">
-		Se montrer du doigt
-	</string>
-	<string name="anim_punch_l">
-		Gauche
-	</string>
-	<string name="anim_punch_r">
-		Droite
-	</string>
-	<string name="anim_rps_countdown">
-		Compter (pierre-papier-ciseaux)
-	</string>
-	<string name="anim_rps_paper">
-		Papier (pierre-papier-ciseaux)
-	</string>
-	<string name="anim_rps_rock">
-		Pierre (pierre-papier-ciseaux)
-	</string>
-	<string name="anim_rps_scissors">
-		Ciseaux (pierre-papier-ciseaux)
-	</string>
-	<string name="anim_express_repulsed">
-		Dégoût
-	</string>
-	<string name="anim_kick_roundhouse_r">
-		Coup de pied circulaire
-	</string>
-	<string name="anim_express_sad">
-		Triste
-	</string>
-	<string name="anim_salute">
-		Salut
-	</string>
-	<string name="anim_shout">
-		Crier
-	</string>
-	<string name="anim_express_shrug">
-		Hausser les épaules
-	</string>
-	<string name="anim_express_smile">
-		Sourire
-	</string>
-	<string name="anim_smoke_idle">
-		Fumer, immobile
-	</string>
-	<string name="anim_smoke_inhale">
-		Fumer, prendre une bouffée
-	</string>
-	<string name="anim_smoke_throw_down">
-		Fumer, jeter son mégot
-	</string>
-	<string name="anim_express_surprise">
-		Surprise
-	</string>
-	<string name="anim_sword_strike_r">
-		Coup d&apos;épée
-	</string>
-	<string name="anim_angry_tantrum">
-		Caprice
-	</string>
-	<string name="anim_express_tongue_out">
-		Tirer la langue
-	</string>
-	<string name="anim_hello">
-		Faire signe
-	</string>
-	<string name="anim_whisper">
-		Chuchoter
-	</string>
-	<string name="anim_whistle">
-		Siffler
-	</string>
-	<string name="anim_express_wink">
-		Clin d&apos;Å“il
-	</string>
-	<string name="anim_wink_hollywood">
-		Clin d&apos;Å“il (Hollywood)
-	</string>
-	<string name="anim_express_worry">
-		Soucis
-	</string>
-	<string name="anim_yes_happy">
-		Oui (Joie)
-	</string>
-	<string name="anim_yes_head">
-		Oui
-	</string>
-	<string name="texture_loading">
-		Chargement...
-	</string>
-	<string name="worldmap_offline">
-		Hors ligne
-	</string>
-	<string name="whisper">
-		chuchote :
-	</string>
-	<string name="shout">
-		crie :
-	</string>
-	<string name="SIM_ACCESS_PG">
-		PG
-	</string>
-	<string name="SIM_ACCESS_MATURE">
-		Mature
-	</string>
-	<string name="SIM_ACCESS_ADULT">
-		Adult
-	</string>
-	<string name="SIM_ACCESS_DOWN">
-		Hors ligne
-	</string>
-	<string name="SIM_ACCESS_MIN">
-		Inconnu
-	</string>
-	<string name="land_type_unknown">
-		(inconnu)
-	</string>
-	<string name="covenant_never_modified">
-		Dernière modification : (jamais)
-	</string>
-	<string name="covenant_modified">
-		Dernière modification :
-	</string>
-	<string name="all_files">
-		Tous fichiers
-	</string>
-	<string name="sound_files">
-		Sons
-	</string>
-	<string name="animation_files">
-		Animations
-	</string>
-	<string name="image_files">
-		Images
-	</string>
-	<string name="save_file_verb">
-		Enregistrer
-	</string>
-	<string name="load_file_verb">
-		Charger
-	</string>
-	<string name="targa_image_files">
-		Images Targa
-	</string>
-	<string name="bitmap_image_files">
-		Images Bitmap
-	</string>
-	<string name="avi_movie_file">
-		Fichier de film AVI
-	</string>
-	<string name="xaf_animation_file">
-		Fichier d&apos;animation XAF
-	</string>
-	<string name="xml_file">
-		Fichier XML
-	</string>
-	<string name="dot_raw_file">
-		Fichier RAW
-	</string>
-	<string name="compressed_image_files">
-		Images compressées
-	</string>
-	<string name="load_files">
-		Charger des fichiers
-	</string>
-	<string name="choose_the_directory">
-		Choisir le répertoire
-	</string>
-	<string name="accel-mac-control">
-		&#8963;
-	</string>
-	<string name="accel-mac-command">
-		&#8984;
-	</string>
-	<string name="accel-mac-option">
-		&#8997;
-	</string>
-	<string name="accel-mac-shift">
-		&#8679;
-	</string>
-	<string name="accel-win-control">
-		Ctrl+
-	</string>
-	<string name="accel-win-alt">
-		Alt+
-	</string>
-	<string name="accel-win-shift">
-		Maj+
-	</string>
-	<string name="GraphicsQualityLow">
-		Faible
-	</string>
-	<string name="GraphicsQualityMid">
-		Moyen
-	</string>
-	<string name="GraphicsQualityHigh">
-		Élevé
-	</string>
-	
-	<!-- PARCEL_CATEGORY_UI_STRING -->
-	<string name="Linden Location">Appartenant aux Lindens</string>
-	<string name="Adult">Adult</string>
-	<string name="Arts&amp;Culture">Art et Culture</string>
-	<string name="Business">Affaires</string>
-	<string name="Educational">Éducation</string>
-	<string name="Gaming">Jeux</string>
-	<string name="Hangout">Favoris</string>
-	<string name="Newcomer Friendly">Accueil pour les nouveaux</string>
-	<string name="Parks&amp;Nature">Parcs et Nature</string>
-	<string name="Residential">Résidentiel</string>
-	<string name="Shopping">Shopping</string>
-	<string name="Other">Autre</string>
-	
-	<string name="ringing">
-		Connexion au chat vocal du Monde en cours…
-	</string>
-	<string name="connected">
-		Connecté(e)
-	</string>
-	<string name="unavailable">
-		Voix non disponible à l&apos;endroit où vous êtes
-	</string>
-	<string name="hang_up">
-		Déconnecté du chat vocal
-	</string>
-	<string name="ScriptQuestionCautionChatGranted">
-		&apos;[OBJECTNAME]&apos;, un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], a reçu le droit de : [PERMISSIONS].
-	</string>
-	<string name="ScriptQuestionCautionChatDenied">
-		&apos;[OBJECTNAME]&apos;, un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], n&apos;a pas reçu le droit de : [PERMISSIONS].
-	</string>
-	<string name="ScriptTakeMoney">
-		Débiter vos Linden dollars (L$)
-	</string>
-	<string name="ActOnControlInputs">
-		Utiliser vos touches de commandes
-	</string>
-	<string name="RemapControlInputs">
-		Reconfigurer vos touches de commandes
-	</string>
-	<string name="AnimateYourAvatar">
-		Animer votre avatar
-	</string>
-	<string name="AttachToYourAvatar">
-		Attacher à votre avatar
-	</string>
-	<string name="ReleaseOwnership">
-		Passer l&apos;objet dans le domaine public (sans propriétaire)
-	</string>
-	<string name="LinkAndDelink">
-		Lier et délier d&apos;autres objets
-	</string>
-	<string name="AddAndRemoveJoints">
-		Créer et supprimer des liens avec d&apos;autres objets
-	</string>
-	<string name="ChangePermissions">
-		Modifier ses droits
-	</string>
-	<string name="TrackYourCamera">
-		Suivre votre caméra
-	</string>
-	<string name="ControlYourCamera">
-		Contrôler votre caméra
-	</string>
-	<text name="only_user_message">
-		Vous êtes le seul participant à cette session.
-	</text>
-	<text name="offline_message">
-		[FIRST] [LAST] est déconnecté(e).
-	</text>
-	<string name="invite_message">
-		Pour accepter ce chat vocal/vous connecter, cliquez sur le bouton [BUTTON NAME].
-	</string>
-	<string name="generic_request_error">
-		Erreur lors de la requête, veuillez réessayer ultérieurement.
-	</string>
-	<string name="insufficient_perms_error">
-		Vous n&apos;avez pas les droits requis.
-	</string>
-	<string name="session_does_not_exist_error">
-		La session a expiré
-	</string>
-	<string name="no_ability_error">
-		Vous n&apos;avez pas ce pouvoir.
-	</string>
-	<string name="no_ability">
-		Vous n&apos;avez pas ce pouvoir.
-	</string>
-	<string name="not_a_mod_error">
-		Vous n&apos;êtes pas modérateur de session.
-	</string>
-	<string name="muted_error">
-		Un modérateur de groupe a désactivé votre chat écrit.
-	</string>
-	<string name="add_session_event">
-		Impossible d&apos;ajouter des participants à la session de chat avec [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Impossible d&apos;envoyer votre message à la session de chat avec [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Vous avez été supprimé du groupe.
-	</string>
-	<string name="close_on_no_ability">
-		Vous ne pouvez plus participer à la session de chat.
-	</string>
-			<string name="AcctTypeResident">
-				Résident
-			</string>
-			<string name="AcctTypeTrial">
-				Essai
-			</string>
-			<string name="AcctTypeCharterMember">
-				Membre originaire
-			</string>
-			<string name="AcctTypeEmployee">
-				Employé(e) de Linden Lab
-			</string>
-			<string name="PaymentInfoUsed">
-				Infos de paiement utilisées
-			</string>
-			<string name="PaymentInfoOnFile">
-				Infos de paiement enregistrées
-			</string>
-			<string name="NoPaymentInfoOnFile">
-				Aucune info de paiement
-			</string>
-			<string name="AgeVerified">
-				Âge vérifié
-			</string>
-			<string name="NotAgeVerified">
-				Âge non vérifié
-			</string>
-</strings>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- This file contains strings that used to be hardcoded in the source.
+     It is only for those strings which do not belong in a floater.
+     For example, the strings used in avatar chat bubbles, and strings 
+     that are returned from one component and may appear in many places-->
+<strings>
+	<string name="SECOND_LIFE">
+		Second Life
+	</string>
+	<string name="APP_NAME">
+		Second Life
+	</string>
+	<string name="SECOND_LIFE_GRID">
+		Grille de Second Life
+	</string>
+	<string name="SUPPORT_SITE">
+		Portail Assistance Second Life
+	</string>
+	<string name="StartupDetectingHardware">
+		Détection du matériel...
+	</string>
+	<string name="StartupLoading">
+		Chargement
+	</string>
+	<string name="Fullbright">
+		Fullbright (Legacy)
+	</string>
+	<string name="LoginInProgress">
+		La connexion à [APP_NAME] apparaît peut-être comme étant gelée. Veuillez patienter.
+	</string>
+	<string name="LoginInProgressNoFrozen">
+		Connexion...
+	</string>
+	<string name="LoginAuthenticating">
+		Authentification en cours
+	</string>
+	<string name="LoginMaintenance">
+		Maintenance du compte en cours…
+	</string>
+	<string name="LoginAttempt">
+		La tentative de connexion précédente a échoué. Connexion, esssai [NUMBER]
+	</string>
+	<string name="LoginPrecaching">
+		Monde en cours de chargement…
+	</string>
+	<string name="LoginInitializingBrowser">
+		Navigateur Web incorporé en cours d&apos;initialisation…
+	</string>
+	<string name="LoginInitializingMultimedia">
+		Multimédia en cours d&apos;initialisation…
+	</string>
+	<string name="LoginVerifyingCache">
+		Fichiers du cache en cours de vérification (peut prendre 60-90 s)...
+	</string>
+	<string name="LoginProcessingResponse">
+		Réponse en cours de traitement…
+	</string>
+	<string name="LoginInitializingWorld">
+		Monde en cours d&apos;initialisation…
+	</string>
+	<string name="LoginDecodingImages">
+		Décodage des images en cours...
+	</string>
+	<string name="LoginInitializingQuicktime">
+		Quicktime en cours d&apos;initialisation
+	</string>
+	<string name="LoginQuicktimeNotFound">
+		Quicktime introuvable, impossible de procéder à l&apos;initialisation.
+	</string>
+	<string name="LoginQuicktimeOK">
+		Initialisation de Quicktime réussie.
+	</string>
+	<string name="LoginWaitingForRegionHandshake">
+		Liaison avec la région en cours de création...
+	</string>
+	<string name="LoginConnectingToRegion">
+		Connexion avec la région en cours...
+	</string>
+	<string name="LoginDownloadingClothing">
+		Habits en cours de téléchargement...
+	</string>
+	<string name="AgentLostConnection">
+		Il y a peut-être des problèmes techniques dans cette region. Veuillez vérifier votre connexion Internet.
+	</string>
+	<string name="TooltipPerson">
+		Personne
+	</string>
+	<string name="TooltipNoName">
+		(pas de nom)
+	</string>
+	<string name="TooltipOwner">
+		Propriétaire :
+	</string>
+	<string name="TooltipPublic">
+		Public
+	</string>
+	<string name="TooltipIsGroup">
+		(Groupe)
+	</string>
+	<string name="TooltipForSaleL$">
+		À vendre : [AMOUNT] L$
+	</string>
+	<string name="TooltipFlagGroupBuild">
+		Contruction de groupe
+	</string>
+	<string name="TooltipFlagNoBuild">
+		Pas de construction
+	</string>
+	<string name="TooltipFlagNoEdit">
+		Contruction de groupe
+	</string>
+	<string name="TooltipFlagNotSafe">
+		Non sécurisé
+	</string>
+	<string name="TooltipFlagNoFly">
+		Interdiction de voler
+	</string>
+	<string name="TooltipFlagGroupScripts">
+		Scripts de groupe
+	</string>
+	<string name="TooltipFlagNoScripts">
+		Pas de scripts
+	</string>
+	<string name="TooltipLand">
+		Terrain :
+	</string>
+	<string name="TooltipMustSingleDrop">
+		Impossible de faire glisser plus d&apos;un objet ici
+	</string>
+	<string name="TooltipHttpUrl">
+		Cliquez pour afficher cette page web
+	</string>
+	<string name="TooltipSLURL">
+		Cliquez pour en savoir plus sur cet endroit
+	</string>
+	<string name="TooltipAgentUrl">
+		Cliquez pour afficher le profil de ce résident
+	</string>
+	<string name="TooltipGroupUrl">
+		Cliquez pour afficher la description de ce groupe
+	</string>
+	<string name="TooltipEventUrl">
+		Cliquez pour afficher la description de cet événement
+	</string>
+	<string name="TooltipClassifiedUrl">
+		Cliquez pour afficher cette petite annonce
+	</string>
+	<string name="TooltipParcelUrl">
+		Cliquez pour afficher la description de cette parcelle
+	</string>
+	<string name="TooltipTeleportUrl">
+		Cliquez pour vous téléporter à cet endroit
+	</string>
+	<string name="TooltipObjectIMUrl">
+		Cliquez pour afficher la description de cet objet
+	</string>
+	<string name="TooltipSLAPP">
+		Cliquez pour exécuter la commande secondlife:// command
+	</string>
+	<string name="BUTTON_CLOSE_DARWIN">
+		Fermer (⌘-W)
+	</string>
+	<string name="BUTTON_CLOSE_WIN">
+		Fermer (Ctrl+W)
+	</string>
+	<string name="BUTTON_RESTORE">
+		Restaurer
+	</string>
+	<string name="BUTTON_MINIMIZE">
+		Minimiser
+	</string>
+	<string name="BUTTON_TEAR_OFF">
+		Réduire
+	</string>
+	<string name="BUTTON_DOCK">
+		Attacher
+	</string>
+	<string name="BUTTON_UNDOCK">
+		Détacher
+	</string>
+	<string name="BUTTON_HELP">
+		Afficher l&apos;aide
+	</string>
+	<string name="RetrievingData">
+		En cours d&apos;extraction...
+	</string>
+	<string name="ReleaseNotes">
+		Notes de version
+	</string>
+	<string name="LoadingData">
+		Chargement..
+	</string>
+	<string name="AvatarNameNobody">
+		(personne)
+	</string>
+	<string name="AvatarNameWaiting">
+		(en attente)
+	</string>
+	<string name="AvatarNameHippos">
+		(hippos)
+	</string>
+	<string name="GroupNameNone">
+		(aucun)
+	</string>
+	<string name="AssetErrorNone">
+		Aucune erreur
+	</string>
+	<string name="AssetErrorRequestFailed">
+		Requête de l&apos;actif : échec
+	</string>
+	<string name="AssetErrorNonexistentFile">
+		Requête de l&apos;actif : fichier inexistant
+	</string>
+	<string name="AssetErrorNotInDatabase">
+		Requête de l&apos;actif : actif introuvable dans la base de données
+	</string>
+	<string name="AssetErrorEOF">
+		Fin du ficher
+	</string>
+	<string name="AssetErrorCannotOpenFile">
+		Impossible d&apos;ouvrir le fichier
+	</string>
+	<string name="AssetErrorFileNotFound">
+		Fichier introuvable
+	</string>
+	<string name="AssetErrorTCPTimeout">
+		Délai d&apos;attente du transfert du fichier dépassé
+	</string>
+	<string name="AssetErrorCircuitGone">
+		Disparition du circuit
+	</string>
+	<string name="AssetErrorPriceMismatch">
+		Il y a une différence de prix entre le client et le serveur
+	</string>
+	<string name="AssetErrorUnknownStatus">
+		Statut inconnu
+	</string>
+	<string name="texture">
+		texture
+	</string>
+	<string name="sound">
+		son
+	</string>
+	<string name="calling card">
+		carte de visite
+	</string>
+	<string name="landmark">
+		repère
+	</string>
+	<string name="legacy script">
+		script (ancienne version)
+	</string>
+	<string name="clothing">
+		habits
+	</string>
+	<string name="object">
+		objet
+	</string>
+	<string name="note card">
+		note
+	</string>
+	<string name="folder">
+		dossier
+	</string>
+	<string name="root">
+		racine
+	</string>
+	<string name="lsl2 script">
+		script lsl2
+	</string>
+	<string name="lsl bytecode">
+		bytecode lsl
+	</string>
+	<string name="tga texture">
+		texture tga
+	</string>
+	<string name="body part">
+		partie du corps
+	</string>
+	<string name="snapshot">
+		photo
+	</string>
+	<string name="lost and found">
+		objets trouvés
+	</string>
+	<string name="targa image">
+		image targa
+	</string>
+	<string name="trash">
+		poubelle
+	</string>
+	<string name="jpeg image">
+		image jpeg
+	</string>
+	<string name="animation">
+		animation
+	</string>
+	<string name="gesture">
+		geste
+	</string>
+	<string name="simstate">
+		simstate
+	</string>
+	<string name="favorite">
+		favori
+	</string>
+	<string name="symbolic link">
+		lien
+	</string>
+	<string name="AvatarAway">
+		Absent
+	</string>
+	<string name="AvatarBusy">
+		Occupé
+	</string>
+	<string name="AvatarMuted">
+		Ignoré
+	</string>
+	<string name="anim_express_afraid">
+		Effrayé
+	</string>
+	<string name="anim_express_anger">
+		En colère
+	</string>
+	<string name="anim_away">
+		Absent
+	</string>
+	<string name="anim_backflip">
+		Salto arrière
+	</string>
+	<string name="anim_express_laugh">
+		Rire en se tenant le ventre
+	</string>
+	<string name="anim_express_toothsmile">
+		Grand sourire
+	</string>
+	<string name="anim_blowkiss">
+		Envoyer un baiser
+	</string>
+	<string name="anim_express_bored">
+		Bailler d&apos;ennui
+	</string>
+	<string name="anim_bow">
+		S&apos;incliner
+	</string>
+	<string name="anim_clap">
+		Applaudir
+	</string>
+	<string name="anim_courtbow">
+		Révérence de cour
+	</string>
+	<string name="anim_express_cry">
+		Pleurer
+	</string>
+	<string name="anim_dance1">
+		Danse 1
+	</string>
+	<string name="anim_dance2">
+		Danse 2
+	</string>
+	<string name="anim_dance3">
+		Danse 3
+	</string>
+	<string name="anim_dance4">
+		Danse 4
+	</string>
+	<string name="anim_dance5">
+		Danse 5
+	</string>
+	<string name="anim_dance6">
+		Danse 6
+	</string>
+	<string name="anim_dance7">
+		Danse 7
+	</string>
+	<string name="anim_dance8">
+		Danse 8
+	</string>
+	<string name="anim_express_disdain">
+		Mépris
+	</string>
+	<string name="anim_drink">
+		Boire
+	</string>
+	<string name="anim_express_embarrased">
+		Gêne
+	</string>
+	<string name="anim_angry_fingerwag">
+		Désapprobation
+	</string>
+	<string name="anim_fist_pump">
+		Victoire
+	</string>
+	<string name="anim_yoga_float">
+		Yoga
+	</string>
+	<string name="anim_express_frown">
+		Froncer les sourcils
+	</string>
+	<string name="anim_impatient">
+		Impatient
+	</string>
+	<string name="anim_jumpforjoy">
+		Sauter de joie
+	</string>
+	<string name="anim_kissmybutt">
+		Va te faire voir !
+	</string>
+	<string name="anim_express_kiss">
+		Baiser
+	</string>
+	<string name="anim_laugh_short">
+		Rire
+	</string>
+	<string name="anim_musclebeach">
+		Montrer ses muscles
+	</string>
+	<string name="anim_no_unhappy">
+		Non (mécontent)
+	</string>
+	<string name="anim_no_head">
+		Non
+	</string>
+	<string name="anim_nyanya">
+		Na na na na nère
+	</string>
+	<string name="anim_punch_onetwo">
+		Gauche-droite
+	</string>
+	<string name="anim_express_open_mouth">
+		Bouche ouverte
+	</string>
+	<string name="anim_peace">
+		Paix
+	</string>
+	<string name="anim_point_you">
+		Montrer quelqu&apos;un du doigt
+	</string>
+	<string name="anim_point_me">
+		Se montrer du doigt
+	</string>
+	<string name="anim_punch_l">
+		Gauche
+	</string>
+	<string name="anim_punch_r">
+		Droite
+	</string>
+	<string name="anim_rps_countdown">
+		Compter (pierre-papier-ciseaux)
+	</string>
+	<string name="anim_rps_paper">
+		Papier (pierre-papier-ciseaux)
+	</string>
+	<string name="anim_rps_rock">
+		Pierre (pierre-papier-ciseaux)
+	</string>
+	<string name="anim_rps_scissors">
+		Ciseaux (pierre-papier-ciseaux)
+	</string>
+	<string name="anim_express_repulsed">
+		Dégoût
+	</string>
+	<string name="anim_kick_roundhouse_r">
+		Coup de pied circulaire
+	</string>
+	<string name="anim_express_sad">
+		Triste
+	</string>
+	<string name="anim_salute">
+		Salut
+	</string>
+	<string name="anim_shout">
+		Crier
+	</string>
+	<string name="anim_express_shrug">
+		Hausser les épaules
+	</string>
+	<string name="anim_express_smile">
+		Sourire
+	</string>
+	<string name="anim_smoke_idle">
+		Fumer, immobile
+	</string>
+	<string name="anim_smoke_inhale">
+		Fumer, prendre une bouffée
+	</string>
+	<string name="anim_smoke_throw_down">
+		Fumer, jeter son mégot
+	</string>
+	<string name="anim_express_surprise">
+		Surprise
+	</string>
+	<string name="anim_sword_strike_r">
+		Coup d&apos;épée
+	</string>
+	<string name="anim_angry_tantrum">
+		Caprice
+	</string>
+	<string name="anim_express_tongue_out">
+		Tirer la langue
+	</string>
+	<string name="anim_hello">
+		Faire signe
+	</string>
+	<string name="anim_whisper">
+		Chuchoter
+	</string>
+	<string name="anim_whistle">
+		Siffler
+	</string>
+	<string name="anim_express_wink">
+		Clin d&apos;Å“il
+	</string>
+	<string name="anim_wink_hollywood">
+		Clin d&apos;Å“il (Hollywood)
+	</string>
+	<string name="anim_express_worry">
+		Soucis
+	</string>
+	<string name="anim_yes_happy">
+		Oui (Joie)
+	</string>
+	<string name="anim_yes_head">
+		Oui
+	</string>
+	<string name="texture_loading">
+		Chargement...
+	</string>
+	<string name="worldmap_offline">
+		Hors ligne
+	</string>
+	<string name="Ok">
+		OK
+	</string>
+	<string name="Premature end of file">
+		Fichier incomplet
+	</string>
+	<string name="ST_NO_JOINT">
+		Impossible de trouver ROOT ou JOINT.
+	</string>
+	<string name="whisper">
+		chuchote :
+	</string>
+	<string name="shout">
+		crie :
+	</string>
+	<string name="ringing">
+		Connexion au chat vocal du Monde en cours…
+	</string>
+	<string name="connected">
+		Connecté(e)
+	</string>
+	<string name="unavailable">
+		Voix non disponible à l&apos;endroit où vous êtes
+	</string>
+	<string name="hang_up">
+		Déconnecté du chat vocal
+	</string>
+	<string name="ScriptQuestionCautionChatGranted">
+		&apos;[OBJECTNAME]&apos;, un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], a reçu le droit de : [PERMISSIONS].
+	</string>
+	<string name="ScriptQuestionCautionChatDenied">
+		&apos;[OBJECTNAME]&apos;, un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], n&apos;a pas reçu le droit de : [PERMISSIONS].
+	</string>
+	<string name="ScriptTakeMoney">
+		Débiter vos Linden dollars (L$)
+	</string>
+	<string name="ActOnControlInputs">
+		Utiliser vos touches de commandes
+	</string>
+	<string name="RemapControlInputs">
+		Reconfigurer vos touches de commandes
+	</string>
+	<string name="AnimateYourAvatar">
+		Animer votre avatar
+	</string>
+	<string name="AttachToYourAvatar">
+		Attacher à votre avatar
+	</string>
+	<string name="ReleaseOwnership">
+		Passer l&apos;objet dans le domaine public (sans propriétaire)
+	</string>
+	<string name="LinkAndDelink">
+		Lier et délier d&apos;autres objets
+	</string>
+	<string name="AddAndRemoveJoints">
+		Créer et supprimer des liens avec d&apos;autres objets
+	</string>
+	<string name="ChangePermissions">
+		Modifier ses droits
+	</string>
+	<string name="TrackYourCamera">
+		Suivre votre caméra
+	</string>
+	<string name="ControlYourCamera">
+		Contrôler votre caméra
+	</string>
+	<string name="SIM_ACCESS_PG">
+		PG
+	</string>
+	<string name="SIM_ACCESS_MATURE">
+		Mature
+	</string>
+	<string name="SIM_ACCESS_ADULT">
+		Adult
+	</string>
+	<string name="SIM_ACCESS_DOWN">
+		Hors ligne
+	</string>
+	<string name="SIM_ACCESS_MIN">
+		Inconnu
+	</string>
+	<string name="land_type_unknown">
+		(inconnu)
+	</string>
+	<string name="all_files">
+		Tous fichiers
+	</string>
+	<string name="sound_files">
+		Sons
+	</string>
+	<string name="animation_files">
+		Animations
+	</string>
+	<string name="image_files">
+		Images
+	</string>
+	<string name="save_file_verb">
+		Enregistrer
+	</string>
+	<string name="load_file_verb">
+		Charger
+	</string>
+	<string name="targa_image_files">
+		Images Targa
+	</string>
+	<string name="bitmap_image_files">
+		Images Bitmap
+	</string>
+	<string name="avi_movie_file">
+		Fichier de film AVI
+	</string>
+	<string name="xaf_animation_file">
+		Fichier d&apos;animation XAF
+	</string>
+	<string name="xml_file">
+		Fichier XML
+	</string>
+	<string name="dot_raw_file">
+		Fichier RAW
+	</string>
+	<string name="compressed_image_files">
+		Images compressées
+	</string>
+	<string name="load_files">
+		Charger des fichiers
+	</string>
+	<string name="choose_the_directory">
+		Choisir le répertoire
+	</string>
+	<string name="AvatarSetNotAway">
+		Ne plus me mettre en mode absent
+	</string>
+	<string name="AvatarSetAway">
+		Me mettre en mode absent
+	</string>
+	<string name="AvatarSetNotBusy">
+		Ne plus me mettre en mode occupé
+	</string>
+	<string name="AvatarSetBusy">
+		Me mettre en mode occupé
+	</string>
+	<string name="shape">
+		Silhouette
+	</string>
+	<string name="skin">
+		Peau
+	</string>
+	<string name="hair">
+		Cheveux
+	</string>
+	<string name="eyes">
+		Yeux
+	</string>
+	<string name="shirt">
+		Chemise
+	</string>
+	<string name="pants">
+		Pantalon
+	</string>
+	<string name="shoes">
+		Chaussures
+	</string>
+	<string name="socks">
+		Chaussettes
+	</string>
+	<string name="jacket">
+		Veste
+	</string>
+	<string name="gloves">
+		Gants
+	</string>
+	<string name="undershirt">
+		Sous-vêtements (homme)
+	</string>
+	<string name="underpants">
+		Sous-vêtements (femme)
+	</string>
+	<string name="skirt">
+		Jupe
+	</string>
+	<string name="invalid">
+		non valide
+	</string>
+	<string name="BodyPartsRightArm">
+		Bras droit
+	</string>
+	<string name="BodyPartsHead">
+		Tête
+	</string>
+	<string name="BodyPartsLeftArm">
+		Bras gauche
+	</string>
+	<string name="BodyPartsLeftLeg">
+		Jambe gauche
+	</string>
+	<string name="BodyPartsTorso">
+		Torse
+	</string>
+	<string name="BodyPartsRightLeg">
+		Jambe droite
+	</string>
+	<string name="GraphicsQualityLow">
+		Faible
+	</string>
+	<string name="GraphicsQualityMid">
+		Moyen
+	</string>
+	<string name="GraphicsQualityHigh">
+		Élevé
+	</string>
+	<string name="LeaveMouselook">
+		Appuyez sur ESC pour quitter la vue subjective
+	</string>
+	<string name="InventoryNoMatchingItems">
+		Aucun objet correspondant ne se trouve dans l&apos;inventaire.
+	</string>
+	<string name="InventoryNoTexture">
+		Vous n&apos;avez pas de copie de cette texture dans votre inventaire
+	</string>
+	<string name="LoadingContents">
+		chargement des contenus en cours...
+	</string>
+	<string name="NoContents">
+		Aucun contenu
+	</string>
+	<string name="InvFolder My Inventory">
+		Mon inventaire
+	</string>
+	<string name="InvFolder My Favorites">
+		Mes favoris
+	</string>
+	<string name="InvFolder Library">
+		Bibliothèque
+	</string>
+	<string name="InvFolder Textures">
+		Textures
+	</string>
+	<string name="InvFolder Sounds">
+		Sons
+	</string>
+	<string name="InvFolder Calling Cards">
+		Cartes de visite
+	</string>
+	<string name="InvFolder Landmarks">
+		Repères
+	</string>
+	<string name="InvFolder Scripts">
+		Scripts
+	</string>
+	<string name="InvFolder Clothing">
+		Habits
+	</string>
+	<string name="InvFolder Objects">
+		Objets
+	</string>
+	<string name="InvFolder Notecards">
+		Notes
+	</string>
+	<string name="InvFolder New Folder">
+		Nouveau dossier
+	</string>
+	<string name="InvFolder Inventory">
+		Inventaire
+	</string>
+	<string name="InvFolder Uncompressed Images">
+		Images non compressées
+	</string>
+	<string name="InvFolder Body Parts">
+		Parties du corps
+	</string>
+	<string name="InvFolder Trash">
+		Poubelle
+	</string>
+	<string name="InvFolder Photo Album">
+		Albums photo
+	</string>
+	<string name="InvFolder Lost And Found">
+		Objets trouvés
+	</string>
+	<string name="InvFolder Uncompressed Sounds">
+		Sons non compressés
+	</string>
+	<string name="InvFolder Animations">
+		Animations
+	</string>
+	<string name="InvFolder Gestures">
+		Gestes
+	</string>
+	<string name="InvFolder favorite">
+		Favoris
+	</string>
+	<string name="InvFolder Current Outfit">
+		Tenue actuelle
+	</string>
+	<string name="InvFolder My Outfits">
+		Mes tenues
+	</string>
+	<string name="InvFolder Friends">
+		Amis
+	</string>
+	<string name="InvFolder All">
+		Tout
+	</string>
+	<string name="Buy">
+		Acheter
+	</string>
+	<string name="BuyforL$">
+		Acheter des L$
+	</string>
+	<string name="Stone">
+		Pierre
+	</string>
+	<string name="Metal">
+		Métal
+	</string>
+	<string name="Glass">
+		Verre
+	</string>
+	<string name="Wood">
+		Bois
+	</string>
+	<string name="Flesh">
+		Chair
+	</string>
+	<string name="Plastic">
+		Plastique
+	</string>
+	<string name="Rubber">
+		Caoutchouc
+	</string>
+	<string name="Light">
+		Léger
+	</string>
+	<string name="KBShift">
+		Maj-
+	</string>
+	<string name="KBCtrl">
+		Ctrl
+	</string>
+	<string name="Chest">
+		Poitrine
+	</string>
+	<string name="Skull">
+		Crâne
+	</string>
+	<string name="Left Shoulder">
+		Épaule gauche
+	</string>
+	<string name="Right Shoulder">
+		Épaule droite
+	</string>
+	<string name="Left Hand">
+		Main gauche
+	</string>
+	<string name="Right Hand">
+		Main droite
+	</string>
+	<string name="Left Foot">
+		Pied gauche
+	</string>
+	<string name="Right Foot">
+		Pied droit
+	</string>
+	<string name="Spine">
+		Colonne
+	</string>
+	<string name="Pelvis">
+		Bassin
+	</string>
+	<string name="Mouth">
+		Bouche
+	</string>
+	<string name="Chin">
+		Menton
+	</string>
+	<string name="Left Ear">
+		Oreille gauche
+	</string>
+	<string name="Right Ear">
+		Oreille droite
+	</string>
+	<string name="Left Eyeball">
+		Globe oculaire gauche
+	</string>
+	<string name="Right Eyeball">
+		Globe oculaire droit
+	</string>
+	<string name="Nose">
+		Nez
+	</string>
+	<string name="R Upper Arm">
+		Bras D
+	</string>
+	<string name="R Forearm">
+		Avant-bras D
+	</string>
+	<string name="L Upper Arm">
+		Bras G
+	</string>
+	<string name="L Forearm">
+		Avant-bras G
+	</string>
+	<string name="Right Hip">
+		Hanche droite
+	</string>
+	<string name="R Upper Leg">
+		Cuisse D
+	</string>
+	<string name="R Lower Leg">
+		Jambe D
+	</string>
+	<string name="Left Hip">
+		Hanche gauche
+	</string>
+	<string name="L Upper Leg">
+		Cuisse G
+	</string>
+	<string name="L Lower Leg">
+		Jambe G
+	</string>
+	<string name="Stomach">
+		Estomac
+	</string>
+	<string name="Left Pec">
+		Pectoral gauche
+	</string>
+	<string name="Right Pec">
+		Pectoral droit
+	</string>
+	<string name="YearsMonthsOld">
+		[AGEYEARS] [AGEMONTHS]
+	</string>
+	<string name="YearsOld">
+		[AGEYEARS]
+	</string>
+	<string name="MonthsOld">
+		[AGEMONTHS]
+	</string>
+	<string name="WeeksOld">
+		[AGEWEEKS]
+	</string>
+	<string name="DaysOld">
+		[AGEDAYS]
+	</string>
+	<string name="TodayOld">
+		Inscrit aujourd&apos;hui
+	</string>
+	<string name="AgeYearsA">
+		[COUNT] an
+	</string>
+	<string name="AgeYearsB">
+		[COUNT] ans
+	</string>
+	<string name="AgeYearsC">
+		[COUNT] ans
+	</string>
+	<string name="AgeMonthsA">
+		[COUNT] mois
+	</string>
+	<string name="AgeMonthsB">
+		[COUNT] mois
+	</string>
+	<string name="AgeMonthsC">
+		[COUNT] mois
+	</string>
+	<string name="AgeWeeksA">
+		[COUNT] semaine
+	</string>
+	<string name="AgeWeeksB">
+		[COUNT] semaines
+	</string>
+	<string name="AgeWeeksC">
+		[COUNT] semaines
+	</string>
+	<string name="AgeDaysA">
+		[COUNT] jour
+	</string>
+	<string name="AgeDaysB">
+		[COUNT] jours
+	</string>
+	<string name="AgeDaysC">
+		[COUNT] jours
+	</string>
+	<string name="AcctTypeResident">
+		Résident
+	</string>
+	<string name="AcctTypeTrial">
+		Essai
+	</string>
+	<string name="AcctTypeCharterMember">
+		Membre originaire
+	</string>
+	<string name="AcctTypeEmployee">
+		Employé(e) de Linden Lab
+	</string>
+	<string name="PaymentInfoUsed">
+		Infos de paiement utilisées
+	</string>
+	<string name="PaymentInfoOnFile">
+		Infos de paiement enregistrées
+	</string>
+	<string name="NoPaymentInfoOnFile">
+		Aucune info de paiement
+	</string>
+	<string name="AgeVerified">
+		Âge vérifié
+	</string>
+	<string name="NotAgeVerified">
+		Âge non vérifié
+	</string>
+	<string name="Center 2">
+		Centrer 2
+	</string>
+	<string name="Top Right">
+		En haut à droite
+	</string>
+	<string name="Top">
+		En haut
+	</string>
+	<string name="Top Left">
+		En haut à gauche
+	</string>
+	<string name="Center">
+		Centrer
+	</string>
+	<string name="Bottom Left">
+		En bas à gauche
+	</string>
+	<string name="Bottom">
+		Bas
+	</string>
+	<string name="Bottom Right">
+		En bas à droite
+	</string>
+	<string name="CompileQueueDownloadedCompiling">
+		Téléchargé, compilation en cours
+	</string>
+	<string name="CompileQueueScriptNotFound">
+		Script introuvable sur le serveur.
+	</string>
+	<string name="CompileQueueProblemDownloading">
+		Problème lors du téléchargement
+	</string>
+	<string name="CompileQueueInsufficientPermDownload">
+		Permissions insuffisantes pour télécharger un script.
+	</string>
+	<string name="CompileQueueInsufficientPermFor">
+		Permissions insuffisantes pour
+	</string>
+	<string name="CompileQueueUnknownFailure">
+		Échec du téléchargement, erreur inconnue
+	</string>
+	<string name="CompileQueueTitle">
+		Recompilation - progrès
+	</string>
+	<string name="CompileQueueStart">
+		recompiler
+	</string>
+	<string name="ResetQueueTitle">
+		Réinitialiser les progrès
+	</string>
+	<string name="ResetQueueStart">
+		réinitialiser
+	</string>
+	<string name="RunQueueTitle">
+		Lancer
+	</string>
+	<string name="RunQueueStart">
+		lancer
+	</string>
+	<string name="NotRunQueueTitle">
+		Arrêter
+	</string>
+	<string name="NotRunQueueStart">
+		arrêter
+	</string>
+	<string name="CompileSuccessful">
+		Compilation réussie !
+	</string>
+	<string name="CompileSuccessfulSaving">
+		Compilation réussie, enregistrement en cours...
+	</string>
+	<string name="SaveComplete">
+		Enregistrement terminé.
+	</string>
+	<string name="ObjectOutOfRange">
+		Script (objet hors de portée)
+	</string>
+	<string name="GodToolsObjectOwnedBy">
+		Objet [OBJECT] possédé par [OWNER]
+	</string>
+	<string name="GroupsNone">
+		aucun
+	</string>
+	<string name="Unknown">
+		(Inconnu)
+	</string>
+	<string name="Balance">
+		Solde
+	</string>
+	<string name="Credits">
+		Remerciements
+	</string>
+	<string name="Debits">
+		Débits
+	</string>
+	<string name="Total">
+		Total
+	</string>
+	<string name="NoGroupDataFound">
+		Aucune donnée trouvée pour le groupe
+	</string>
+	<string name="IMParentEstate">
+		domaine parent
+	</string>
+	<string name="IMMainland">
+		continent
+	</string>
+	<string name="IMTeen">
+		teen
+	</string>
+	<string name="RegionInfoError">
+		erreur
+	</string>
+	<string name="RegionInfoAllEstatesOwnedBy">
+		tous les domaines possédés par [OWNER]
+	</string>
+	<string name="RegionInfoAllEstatesYouOwn">
+		tous les domaines que vous possédez
+	</string>
+	<string name="RegionInfoAllEstatesYouManage">
+		tous les domaines que vous gérez pour [owner]
+	</string>
+	<string name="RegionInfoAllowedResidents">
+		Résidents autorisés : ([ALLOWEDAGENTS], max [MAXACCESS])
+	</string>
+	<string name="RegionInfoAllowedGroups">
+		Groupes autorisés : ([ALLOWEDGROUPS], max [MAXACCESS])
+	</string>
+	<string name="CursorPos">
+		Ligne [LINE], Colonne [COLUMN]
+	</string>
+	<string name="PanelDirCountFound">
+		[COUNT] trouvé(s)
+	</string>
+	<string name="PanelContentsNewScript">
+		Nouveau script
+	</string>
+	<string name="MuteByName">
+		(par nom)
+	</string>
+	<string name="MuteAgent">
+		(résident)
+	</string>
+	<string name="MuteObject">
+		(objet)
+	</string>
+	<string name="MuteGroup">
+		(groupe)
+	</string>
+	<string name="RegionNoCovenant">
+		Il n&apos;y a aucun règlement pour ce domaine.
+	</string>
+	<string name="RegionNoCovenantOtherOwner">
+		Il n&apos;y a aucun règlement pour ce domaine. Le terrain sur ce domaine est vendu par le propriétaire, non par Linden Lab.  Pour en savoir plus, veuillez contacter le propriétaire.
+	</string>
+	<string name="covenant_last_modified">
+		Dernière modification :
+	</string>
+	<string name="GroupOwned">
+		Propriété du groupe
+	</string>
+	<string name="Public">
+		Public
+	</string>
+	<string name="ClassifiedClicksTxt">
+		Clics : [TELEPORT] téléporter, [MAP] carte, [PROFILE] profile
+	</string>
+	<string name="ClassifiedUpdateAfterPublish">
+		(mise à jour après la publication)
+	</string>
+	<string name="GroupVoteYes">
+		Oui
+	</string>
+	<string name="GroupVoteNo">
+		Non
+	</string>
+	<string name="GroupVoteNoActiveProposals">
+		Il n&apos;y a aucune proposition active actuellement
+	</string>
+	<string name="GroupVoteNoArchivedProposals">
+		Il n&apos;y a aucune proposition archivée actuellement
+	</string>
+	<string name="GroupVoteRetrievingArchivedProposals">
+		Extraction des propositions archivées
+	</string>
+	<string name="GroupVoteRetrievingActiveProposals">
+		Extraction des propositions actives
+	</string>
+	<string name="MultiPreviewTitle">
+		Prévisualiser
+	</string>
+	<string name="MultiPropertiesTitle">
+		Propriétés
+	</string>
+	<string name="InvOfferAnObjectNamed">
+		Un objet appelé
+	</string>
+	<string name="InvOfferOwnedByGroup">
+		possédé par le groupe
+	</string>
+	<string name="InvOfferOwnedByUnknownGroup">
+		possédé par un groupe inconnu
+	</string>
+	<string name="InvOfferOwnedBy">
+		possédé par
+	</string>
+	<string name="InvOfferOwnedByUnknownUser">
+		possédé par un résident inconnu
+	</string>
+	<string name="InvOfferGaveYou">
+		vous a donné
+	</string>
+	<string name="InvOfferYouDecline">
+		Vous avez refusé
+	</string>
+	<string name="InvOfferFrom">
+		de la part de
+	</string>
+	<string name="GroupMoneyTotal">
+		Total
+	</string>
+	<string name="GroupMoneyBought">
+		acheté
+	</string>
+	<string name="GroupMoneyPaidYou">
+		vous a payé
+	</string>
+	<string name="GroupMoneyPaidInto">
+		payé
+	</string>
+	<string name="GroupMoneyBoughtPassTo">
+		a acheté un pass à
+	</string>
+	<string name="GroupMoneyPaidFeeForEvent">
+		a payé des frais pour un événement
+	</string>
+	<string name="GroupMoneyPaidPrizeForEvent">
+		a payé un prix pour un événement
+	</string>
+	<string name="GroupMoneyBalance">
+		Solde
+	</string>
+	<string name="GroupMoneyCredits">
+		Remerciements
+	</string>
+	<string name="GroupMoneyDebits">
+		Débits
+	</string>
+	<string name="ViewerObjectContents">
+		Contenus
+	</string>
+	<string name="AcquiredItems">
+		Objets acquis
+	</string>
+	<string name="Cancel">
+		Annuler
+	</string>
+	<string name="UploadingCosts">
+		Chargement de %s coûts
+	</string>
+	<string name="UnknownFileExtension">
+		Extension de fichier inconnue. %s
+.wav, .tga, .bmp, .jpg, .jpeg, ou .bvh acceptés
+	</string>
+	<string name="AddLandmarkNavBarMenu">
+		Ajouter un repère...
+	</string>
+	<string name="EditLandmarkNavBarMenu">
+		Modifier le repère...
+	</string>
+	<string name="accel-mac-control">
+		⌃
+	</string>
+	<string name="accel-mac-command">
+		⌘
+	</string>
+	<string name="accel-mac-option">
+		⌥
+	</string>
+	<string name="accel-mac-shift">
+		⇧
+	</string>
+	<string name="accel-win-control">
+		Ctrl+
+	</string>
+	<string name="accel-win-alt">
+		Alt+
+	</string>
+	<string name="accel-win-shift">
+		Maj+
+	</string>
+	<string name="FileSaved">
+		Fichier enregistré
+	</string>
+	<string name="Receiving">
+		Réception
+	</string>
+	<string name="AM">
+		AM
+	</string>
+	<string name="PM">
+		PM
+	</string>
+	<string name="PST">
+		PST
+	</string>
+	<string name="PDT">
+		PDT
+	</string>
+	<string name="Forward">
+		Vers l&apos;avant
+	</string>
+	<string name="Left">
+		Gauche
+	</string>
+	<string name="Right">
+		Droite
+	</string>
+	<string name="Back">
+		Précédente
+	</string>
+	<string name="North">
+		Nord
+	</string>
+	<string name="South">
+		Sud
+	</string>
+	<string name="West">
+		Ouest
+	</string>
+	<string name="East">
+		Est
+	</string>
+	<string name="Up">
+		Vers le haut
+	</string>
+	<string name="Down">
+		Vers le bas
+	</string>
+	<string name="Any Category">
+		Toutes catégories
+	</string>
+	<string name="Shopping">
+		Shopping
+	</string>
+	<string name="Land Rental">
+		Terrains à louer
+	</string>
+	<string name="Property Rental">
+		Propriétés à louer
+	</string>
+	<string name="Special Attraction">
+		Divertissements
+	</string>
+	<string name="New Products">
+		Nouveaux produits
+	</string>
+	<string name="Employment">
+		Emplois
+	</string>
+	<string name="Wanted">
+		Offres
+	</string>
+	<string name="Service">
+		Services
+	</string>
+	<string name="Personal">
+		Divers
+	</string>
+	<string name="None">
+		Aucun
+	</string>
+	<string name="Linden Location">
+		Appartenant aux Lindens
+	</string>
+	<string name="Adult">
+		Adult
+	</string>
+	<string name="Arts&amp;Culture">
+		Art et Culture
+	</string>
+	<string name="Business">
+		Affaires
+	</string>
+	<string name="Educational">
+		Éducation
+	</string>
+	<string name="Gaming">
+		Jeux
+	</string>
+	<string name="Hangout">
+		Favoris
+	</string>
+	<string name="Newcomer Friendly">
+		Accueil pour les nouveaux
+	</string>
+	<string name="Parks&amp;Nature">
+		Parcs et Nature
+	</string>
+	<string name="Residential">
+		Résidentiel
+	</string>
+	<string name="Stage">
+		Phase
+	</string>
+	<string name="Other">
+		Autre
+	</string>
+	<string name="Any">
+		Aucun
+	</string>
+	<string name="You">
+		Vous
+	</string>
+	<string name=":">
+		:
+	</string>
+	<string name=",">
+		,
+	</string>
+	<string name="...">
+		...
+	</string>
+	<string name="***">
+		***
+	</string>
+	<string name="(">
+		(
+	</string>
+	<string name=")">
+		)
+	</string>
+	<string name=".">
+		.
+	</string>
+	<string name="&apos;">
+		&apos;
+	</string>
+	<string name="---">
+		---
+	</string>
+	<string name="MBCmdLineError">
+		Une erreur est survenue lors de la lecture de la ligne de commande.
+Merci de consulter : http://wiki.secondlife.com/wiki/Client_parameters
+Erreur :
+	</string>
+	<string name="MBCmdLineUsg">
+		[APP_NAME] Utilisation de la ligne de commande :
+	</string>
+	<string name="MBUnableToAccessFile">
+		[APP_NAME] ne peut accéder à un fichier requis.
+
+Cela vient du fait que quelqu&apos;un a ouvert plusieurs copies ou que votre système pense qu&apos;un fichier est ouvert.
+Si ce message persiste, veuillez redémarrer votre ordinateur.
+Si le problème persiste, vous devrez peut-être complètement désinstaller puis réinstaller [APP_NAME].
+	</string>
+	<string name="MBFatalError">
+		Erreur fatale
+	</string>
+	<string name="MBRequiresAltiVec">
+		[APP_NAME] nécessite un microprocesseur AltiVec (version G4 ou antérieure).
+	</string>
+	<string name="MBAlreadyRunning">
+		[APP_NAME] est déjà lancé.
+Vérifiez si une version minimisée du programme apparaît dans votre barre de tâches.
+Si ce message persiste, redémarrez votre ordinateur.
+	</string>
+	<string name="MBFrozenCrashed">
+		[APP_NAME] semble avoir crashé lors de l&apos;utilisation précédente.
+Voulez-vous envoyer un rapport de crash ?
+	</string>
+	<string name="MBAlert">
+		Alerte
+	</string>
+	<string name="MBNoDirectX">
+		[APP_NAME] ne peut détecter DirectX 9.0b ou une version supérieure.
+[APP_NAME] utilise DirectX pour détecter les matériels et/ou les pilotes qui ne sont pas à jour et peuvent causer des problèmes de stabilité, de performance, ou des plantages.  Bien que vous puissiez utiliser [APP_NAME] sans DirectX, nous vous recommandons de l&apos;utiliser avec DirectX 9.0b.
+
+Voulez-vous continuer ?
+	</string>
+	<string name="MBWarning">
+		Avertissement
+	</string>
+	<string name="MBNoAutoUpdate">
+		Les mises à jour automatiques n&apos;existent pas encore pour Linux.
+Veuillez télécharger la dernière version sur www.secondlife.com.
+	</string>
+	<string name="MBRegClassFailed">
+		RegisterClass a échoué
+	</string>
+	<string name="MBError">
+		Erreur
+	</string>
+	<string name="MBFullScreenErr">
+		Impossible d&apos;ouvrir le mode plein écran de [WIDTH] x [HEIGHT]
+Utilisation du mode fenêtré.
+	</string>
+	<string name="MBDestroyWinFailed">
+		Erreur de fermeture lors de la destruction de la fenêtre (DestroyWindow() failed))
+	</string>
+	<string name="MBShutdownErr">
+		Erreur de fermeture
+	</string>
+	<string name="MBDevContextErr">
+		Impossible de créer le contexte GL
+	</string>
+	<string name="MBPixelFmtErr">
+		Impossible de trouver le format pixel approprié
+	</string>
+	<string name="MBPixelFmtDescErr">
+		Impossible de trouver la description du format pixel
+	</string>
+	<string name="MBTrueColorWindow">
+		[APP_NAME] nécessite que True Color (32-bit) soit exécuté dans une fenêtre.
+Veuillez allez sous Panneau de configuration &gt; Affichage &gt; Paramètres et régler la couleur de l&apos;écran sur 32-bit.
+Sinon, lorsque vous choisissez le mode plein écran,  [APP_NAME] ajustera automatiquement l&apos;écran à chaque utilisation.
+	</string>
+	<string name="MBAlpha">
+		[APP_NAME] ne peut pas être lancé car il n&apos;y pas de channel 8 bit accessible.  En général, ceci vient de problèmes avec le pilote de la carte vidéo.
+Assurez-vous d&apos;avoir installé le pilote de carte vidéo le plus récent possible.
+ Assurez-vous aussi que votre écran est réglé sur True Clor (22-bit) sous Panneau de configuration &gt; Affichage &gt; Paramètres.
+Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
+	</string>
+	<string name="MBPixelFmtSetErr">
+		Impossible de trouver le format pixel approprié
+	</string>
+	<string name="MBGLContextErr">
+		Impossible de créer le contexte de rendu GL
+	</string>
+	<string name="MBGLContextActErr">
+		Impossible d&apos;activer le contexte de rendu GL
+	</string>
+	<string name="MBVideoDrvErr">
+		[APP_NAME] ne peut pas être exécuté car les pilotes de votre carte vidéo n&apos;ont pas été installés correctement, ne sont pas à jour, ou sont pour du matériel non pris en charge. Assurez-vous d&apos;avoir des pilotes de cartes vidéos récents, et même si vous avez les plus récents, réinstallez-les.
+
+Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
+	</string>
+	<string name="5 O&apos;Clock Shadow">
+		Barbe naissante
+	</string>
+	<string name="All White">
+		Tout blancs
+	</string>
+	<string name="Anime Eyes">
+		Grand yeux
+	</string>
+	<string name="Arced">
+		Arquées
+	</string>
+	<string name="Arm Length">
+		Longueur des bras
+	</string>
+	<string name="Attached">
+		Minces
+	</string>
+	<string name="Attached Earlobes">
+		Largeur des lobes
+	</string>
+	<string name="Back Bangs">
+		Mèches de derrière
+	</string>
+	<string name="Back Bangs Down">
+		Mèches de derrière Bas
+	</string>
+	<string name="Back Bangs Up">
+		Mèches de derrière haut
+	</string>
+	<string name="Back Fringe">
+		Mèches de derrière
+	</string>
+	<string name="Back Hair">
+		Cheveux de derrière
+	</string>
+	<string name="Back Hair Down">
+		Cheveux de derrière Bas
+	</string>
+	<string name="Back Hair Up">
+		Cheveux de derrière haut
+	</string>
+	<string name="Baggy">
+		Cernés
+	</string>
+	<string name="Bangs">
+		Frange
+	</string>
+	<string name="Bangs Down">
+		Frange Bas
+	</string>
+	<string name="Bangs Up">
+		Frange Haut
+	</string>
+	<string name="Beady Eyes">
+		Yeux perçants
+	</string>
+	<string name="Belly Size">
+		Taille du ventre
+	</string>
+	<string name="Big">
+		Gros
+	</string>
+	<string name="Big Butt">
+		Grosses fesses
+	</string>
+	<string name="Big Eyeball">
+		Gros globe oculaire
+	</string>
+	<string name="Big Hair Back">
+		Cheveux volumineux : Derrière
+	</string>
+	<string name="Big Hair Front">
+		Cheveux volumineux : Devant
+	</string>
+	<string name="Big Hair Top">
+		Cheveux volumineux : En haut
+	</string>
+	<string name="Big Head">
+		Grosse tête
+	</string>
+	<string name="Big Pectorals">
+		Gros pectoraux
+	</string>
+	<string name="Big Spikes">
+		Spikes
+	</string>
+	<string name="Black">
+		Noir
+	</string>
+	<string name="Blonde">
+		Blond
+	</string>
+	<string name="Blonde Hair">
+		Cheveux blonds
+	</string>
+	<string name="Blush">
+		Blush
+	</string>
+	<string name="Blush Color">
+		Couleur du blush
+	</string>
+	<string name="Blush Opacity">
+		Opacité du blush
+	</string>
+	<string name="Body Definition">
+		Contour du corps
+	</string>
+	<string name="Body Fat">
+		Graisse
+	</string>
+	<string name="Body Freckles">
+		Grains de beauté
+	</string>
+	<string name="Body Thick">
+		Corps épais
+	</string>
+	<string name="Body Thickness">
+		Épaisseur du corps
+	</string>
+	<string name="Body Thin">
+		Corps mince
+	</string>
+	<string name="Bow Legged">
+		Jambes arquées
+	</string>
+	<string name="Breast Buoyancy">
+		Hauteur des seins
+	</string>
+	<string name="Breast Cleavage">
+		Clivage
+	</string>
+	<string name="Breast Size">
+		Taille des seins
+	</string>
+	<string name="Bridge Width">
+		Arête du nez
+	</string>
+	<string name="Broad">
+		Large
+	</string>
+	<string name="Brow Size">
+		Taille des sourcils
+	</string>
+	<string name="Bug Eyes">
+		Yeux globuleux
+	</string>
+	<string name="Bugged Eyes">
+		Yeux globuleux
+	</string>
+	<string name="Bulbous">
+		En bulbe
+	</string>
+	<string name="Bulbous Nose">
+		Nez en bulbe
+	</string>
+	<string name="Bushy Eyebrows">
+		Sourcils touffus
+	</string>
+	<string name="Bushy Hair">
+		Cheveux touffus
+	</string>
+	<string name="Butt Size">
+		Taille des fesses
+	</string>
+	<string name="bustle skirt">
+		Jupe gonflante
+	</string>
+	<string name="no bustle">
+		Pas gonflante
+	</string>
+	<string name="more bustle">
+		Plus gonflante
+	</string>
+	<string name="Chaplin">
+		Chaplin
+	</string>
+	<string name="Cheek Bones">
+		Pommettes
+	</string>
+	<string name="Chest Size">
+		Taille de la poitrine
+	</string>
+	<string name="Chin Angle">
+		Angle du menton
+	</string>
+	<string name="Chin Cleft">
+		Fente labiale
+	</string>
+	<string name="Chin Curtains">
+		Favoris
+	</string>
+	<string name="Chin Depth">
+		Profondeur du menton
+	</string>
+	<string name="Chin Heavy">
+		Menton lourd
+	</string>
+	<string name="Chin In">
+		Menton rentré
+	</string>
+	<string name="Chin Out">
+		Menton sorti
+	</string>
+	<string name="Chin-Neck">
+		Menton-cou
+	</string>
+	<string name="Clear">
+		Effacer
+	</string>
+	<string name="Cleft">
+		Fente
+	</string>
+	<string name="Close Set Eyes">
+		Yeux rapprochés
+	</string>
+	<string name="Closed">
+		Fermé(s)
+	</string>
+	<string name="Closed Back">
+		Fermé à l&apos;arrière
+	</string>
+	<string name="Closed Front">
+		Fermé devant
+	</string>
+	<string name="Closed Left">
+		Fermé à gauche
+	</string>
+	<string name="Closed Right">
+		Fermé à droite
+	</string>
+	<string name="Coin Purse">
+		Bijoux de famille
+	</string>
+	<string name="Collar Back">
+		Col arrière
+	</string>
+	<string name="Collar Front">
+		Col devant
+	</string>
+	<string name="Corner Down">
+		Coin vers le bas
+	</string>
+	<string name="Corner Normal">
+		Coin normal
+	</string>
+	<string name="Corner Up">
+		Coin vers le haut
+	</string>
+	<string name="Creased">
+		Frippée
+	</string>
+	<string name="Crooked Nose">
+		Nez en bec d&apos;aigle
+	</string>
+	<string name="Cropped Hair">
+		Garçonne
+	</string>
+	<string name="Cuff Flare">
+		Jambe
+	</string>
+	<string name="Dark">
+		Sombre
+	</string>
+	<string name="Dark Green">
+		Vert foncé
+	</string>
+	<string name="Darker">
+		Plus foncé
+	</string>
+	<string name="Deep">
+		Profonde
+	</string>
+	<string name="Default Heels">
+		Talons par défaut
+	</string>
+	<string name="Default Toe">
+		Orteil par défaut
+	</string>
+	<string name="Dense">
+		Dense
+	</string>
+	<string name="Dense hair">
+		Cheveux denses
+	</string>
+	<string name="Double Chin">
+		Double menton
+	</string>
+	<string name="Downturned">
+		Pointant vers le bas
+	</string>
+	<string name="Duffle Bag">
+		Membre viril
+	</string>
+	<string name="Ear Angle">
+		Angle de l&apos;oreille
+	</string>
+	<string name="Ear Size">
+		Taille de l&apos;oreille
+	</string>
+	<string name="Ear Tips">
+		Pointes de l&apos;oreille
+	</string>
+	<string name="Egg Head">
+		Forme de la tête
+	</string>
+	<string name="Eye Bags">
+		Cernes
+	</string>
+	<string name="Eye Color">
+		Couleur des yeux
+	</string>
+	<string name="Eye Depth">
+		Profondeur des yeux
+	</string>
+	<string name="Eye Lightness">
+		Clarté des yeux
+	</string>
+	<string name="Eye Opening">
+		Ouverture des yeux
+	</string>
+	<string name="Eye Pop">
+		Œil proéminent
+	</string>
+	<string name="Eye Size">
+		Taille de l&apos;Å“il
+	</string>
+	<string name="Eye Spacing">
+		Espacement des yeux
+	</string>
+	<string name="Eyeball Size">
+		Taille du globe oculaire
+	</string>
+	<string name="Eyebrow Arc">
+		Arc des sourcils
+	</string>
+	<string name="Eyebrow Density">
+		Épaisseur des sourcils
+	</string>
+	<string name="Eyebrow Height">
+		Hauteur des sourcils
+	</string>
+	<string name="Eyebrow Points">
+		Direction des sourcils
+	</string>
+	<string name="Eyebrow Size">
+		Taille des sourcils
+	</string>
+	<string name="Eyelash Length">
+		Longueur des cils
+	</string>
+	<string name="Eyeliner">
+		Eyeliner
+	</string>
+	<string name="Eyeliner Color">
+		Couleur de l&apos;eyeliner
+	</string>
+	<string name="Eyes Back">
+		Yeux noirs
+	</string>
+	<string name="Eyes Bugged">
+		Yeux globuleux
+	</string>
+	<string name="Eyes Forward">
+		Yeux vers l&apos;avant
+	</string>
+	<string name="Eyes Long Head">
+		Yeux longue tête
+	</string>
+	<string name="Eyes Shear Left Up">
+		Å’il gauche vers le haut
+	</string>
+	<string name="Eyes Shear Right Up">
+		Å’il droit vers le haut
+	</string>
+	<string name="Eyes Short Head">
+		Yeux petite tête
+	</string>
+	<string name="Eyes Spread">
+		Espacement des yeux
+	</string>
+	<string name="Eyes Sunken">
+		Yeux enfoncés
+	</string>
+	<string name="Eyes Together">
+		Yeux rapprochés
+	</string>
+	<string name="Face Shear">
+		Visage
+	</string>
+	<string name="Facial Definition">
+		Définition du visage
+	</string>
+	<string name="Far Set Eyes">
+		Yeux écartés
+	</string>
+	<string name="Fat">
+		Grosse
+	</string>
+	<string name="Fat Head">
+		Grosse tête
+	</string>
+	<string name="Fat Lips">
+		Lèvres épaisses
+	</string>
+	<string name="Fat Lower">
+		Inférieure plus épaisse
+	</string>
+	<string name="Fat Lower Lip">
+		Lèvre inférieure épaisse
+	</string>
+	<string name="Fat Torso">
+		Torse épais
+	</string>
+	<string name="Fat Upper">
+		Supérieure plus épaisse
+	</string>
+	<string name="Fat Upper Lip">
+		Lèvre supérieure épaisse
+	</string>
+	<string name="Female">
+		Femme
+	</string>
+	<string name="Fingerless">
+		Sans doigts
+	</string>
+	<string name="Fingers">
+		Doigts
+	</string>
+	<string name="Flared Cuffs">
+		Jambes larges
+	</string>
+	<string name="Flat">
+		Plat
+	</string>
+	<string name="Flat Butt">
+		Fesses plates
+	</string>
+	<string name="Flat Head">
+		Tête plate
+	</string>
+	<string name="Flat Toe">
+		Orteil plat
+	</string>
+	<string name="Foot Size">
+		Pointure
+	</string>
+	<string name="Forehead Angle">
+		Angle du front
+	</string>
+	<string name="Forehead Heavy">
+		Front lourd
+	</string>
+	<string name="Freckles">
+		Tâches de rousseur
+	</string>
+	<string name="Front Bangs Down">
+		Mèches de devant longues
+	</string>
+	<string name="Front Bangs Up">
+		Mèches de devant courtes
+	</string>
+	<string name="Front Fringe">
+		Mèches de devant
+	</string>
+	<string name="Front Hair">
+		Cheveux devant
+	</string>
+	<string name="Front Hair Down">
+		Cheveux de devant longs
+	</string>
+	<string name="Front Hair Up">
+		Cheveux de devant courts
+	</string>
+	<string name="Full Back">
+		Arrière touffu
+	</string>
+	<string name="Full Eyeliner">
+		Eyeliner marqué
+	</string>
+	<string name="Full Front">
+		Devant touffu
+	</string>
+	<string name="Full Hair Sides">
+		Côtés touffus
+	</string>
+	<string name="Full Sides">
+		Côtés touffus
+	</string>
+	<string name="Glossy">
+		Brillant
+	</string>
+	<string name="Glove Fingers">
+		Doigts avec gants
+	</string>
+	<string name="Glove Length">
+		Longueur des gants
+	</string>
+	<string name="Hair">
+		Cheveux
+	</string>
+	<string name="Hair Back">
+		Cheveux : Derrière
+	</string>
+	<string name="Hair Front">
+		Cheveux : Devant
+	</string>
+	<string name="Hair Sides">
+		Cheveux : Côtés
+	</string>
+	<string name="Hair Sweep">
+		Sens de la coiffure
+	</string>
+	<string name="Hair Thickess">
+		Épaisseur des cheveux
+	</string>
+	<string name="Hair Thickness">
+		Épaisseur des cheveux
+	</string>
+	<string name="Hair Tilt">
+		Inclinaison des cheveux
+	</string>
+	<string name="Hair Tilted Left">
+		Vers la gauche
+	</string>
+	<string name="Hair Tilted Right">
+		Vers la droite
+	</string>
+	<string name="Hair Volume">
+		Cheveux : Volume
+	</string>
+	<string name="Hand Size">
+		Taille de la main
+	</string>
+	<string name="Handlebars">
+		Guidons
+	</string>
+	<string name="Head Length">
+		Longueur de la tête
+	</string>
+	<string name="Head Shape">
+		Forme de la tête
+	</string>
+	<string name="Head Size">
+		Taille de la tête
+	</string>
+	<string name="Head Stretch">
+		Allongement de la tête
+	</string>
+	<string name="Heel Height">
+		Hauteur des talons
+	</string>
+	<string name="Heel Shape">
+		Forme des talons
+	</string>
+	<string name="Height">
+		Taille
+	</string>
+	<string name="High">
+		Haut
+	</string>
+	<string name="High Heels">
+		Talons hauts
+	</string>
+	<string name="High Jaw">
+		Mâchoire haute
+	</string>
+	<string name="High Platforms">
+		Plateformes hautes
+	</string>
+	<string name="High and Tight">
+		Haut et serré
+	</string>
+	<string name="Higher">
+		Plus élevé
+	</string>
+	<string name="Hip Length">
+		Longueur hanche
+	</string>
+	<string name="Hip Width">
+		Largeur hanche
+	</string>
+	<string name="In">
+		In
+	</string>
+	<string name="In Shdw Color">
+		Couleur ombre interne
+	</string>
+	<string name="In Shdw Opacity">
+		Opacité ombre interne
+	</string>
+	<string name="Inner Eye Corner">
+		Coin de l&apos;Å“il interne
+	</string>
+	<string name="Inner Eye Shadow">
+		Ombre de l&apos;Å“il interne
+	</string>
+	<string name="Inner Shadow">
+		Ombre interne
+	</string>
+	<string name="Jacket Length">
+		Longueur de la veste
+	</string>
+	<string name="Jacket Wrinkles">
+		Plis de la veste
+	</string>
+	<string name="Jaw Angle">
+		Angle de la mâchoire
+	</string>
+	<string name="Jaw Jut">
+		saillie de la mâchoire
+	</string>
+	<string name="Jaw Shape">
+		Forme de la mâchoire
+	</string>
+	<string name="Join">
+		Rapprochés
+	</string>
+	<string name="Jowls">
+		Bajoues
+	</string>
+	<string name="Knee Angle">
+		Angle du genou
+	</string>
+	<string name="Knock Kneed">
+		Genoux rapprochés
+	</string>
+	<string name="Large">
+		Grande
+	</string>
+	<string name="Large Hands">
+		Grandes mains
+	</string>
+	<string name="Left Part">
+		Raie à gauche
+	</string>
+	<string name="Leg Length">
+		Longueur de la jambe
+	</string>
+	<string name="Leg Muscles">
+		Muscles de la jambe
+	</string>
+	<string name="Less">
+		Moins
+	</string>
+	<string name="Less Body Fat">
+		Moins de graisse
+	</string>
+	<string name="Less Curtains">
+		Moins
+	</string>
+	<string name="Less Freckles">
+		Moins
+	</string>
+	<string name="Less Full">
+		Moins
+	</string>
+	<string name="Less Gravity">
+		Moins
+	</string>
+	<string name="Less Love">
+		Moins
+	</string>
+	<string name="Less Muscles">
+		Moins
+	</string>
+	<string name="Less Muscular">
+		Moins
+	</string>
+	<string name="Less Rosy">
+		Moins
+	</string>
+	<string name="Less Round">
+		Moins
+	</string>
+	<string name="Less Saddle">
+		Moins
+	</string>
+	<string name="Less Square">
+		Moins
+	</string>
+	<string name="Less Volume">
+		Moins
+	</string>
+	<string name="Less soul">
+		Moins
+	</string>
+	<string name="Lighter">
+		Plus léger
+	</string>
+	<string name="Lip Cleft">
+		Fente labiale
+	</string>
+	<string name="Lip Cleft Depth">
+		Profondeur de la fente labiale
+	</string>
+	<string name="Lip Fullness">
+		Volume des lèvres
+	</string>
+	<string name="Lip Pinkness">
+		Rougeur des lèvres
+	</string>
+	<string name="Lip Ratio">
+		Proportion des lèvres
+	</string>
+	<string name="Lip Thickness">
+		Épaisseur des lèvres
+	</string>
+	<string name="Lip Width">
+		Largeur des lèvres
+	</string>
+	<string name="Lipgloss">
+		Brillant à lèvres
+	</string>
+	<string name="Lipstick">
+		Rouge à lèvres
+	</string>
+	<string name="Lipstick Color">
+		Couleur du rouge à lèvres
+	</string>
+	<string name="Long">
+		Long
+	</string>
+	<string name="Long Head">
+		Tête longue
+	</string>
+	<string name="Long Hips">
+		Hanches longues
+	</string>
+	<string name="Long Legs">
+		Jambes longues
+	</string>
+	<string name="Long Neck">
+		Long cou
+	</string>
+	<string name="Long Pigtails">
+		Longues couettes
+	</string>
+	<string name="Long Ponytail">
+		Longue queue de cheval
+	</string>
+	<string name="Long Torso">
+		Torse long
+	</string>
+	<string name="Long arms">
+		Longs bras
+	</string>
+	<string name="Longcuffs">
+		Manches longues
+	</string>
+	<string name="Loose Pants">
+		Pantalons amples
+	</string>
+	<string name="Loose Shirt">
+		Chemise ample
+	</string>
+	<string name="Loose Sleeves">
+		Manches amples
+	</string>
+	<string name="Love Handles">
+		Poignées d&apos;amour
+	</string>
+	<string name="Low">
+		Bas
+	</string>
+	<string name="Low Heels">
+		Talons bas
+	</string>
+	<string name="Low Jaw">
+		Mâchoire basse
+	</string>
+	<string name="Low Platforms">
+		Plateformes basses
+	</string>
+	<string name="Low and Loose">
+		Bas et ample
+	</string>
+	<string name="Lower">
+		Abaisser
+	</string>
+	<string name="Lower Bridge">
+		Arête plus basse
+	</string>
+	<string name="Lower Cheeks">
+		Joues plus basses
+	</string>
+	<string name="Male">
+		Homme
+	</string>
+	<string name="Middle Part">
+		Raie au milieu
+	</string>
+	<string name="More">
+		Plus
+	</string>
+	<string name="More Blush">
+		Plus
+	</string>
+	<string name="More Body Fat">
+		Plus
+	</string>
+	<string name="More Curtains">
+		Plus
+	</string>
+	<string name="More Eyeshadow">
+		Plus
+	</string>
+	<string name="More Freckles">
+		Plus
+	</string>
+	<string name="More Full">
+		Plus
+	</string>
+	<string name="More Gravity">
+		Plus
+	</string>
+	<string name="More Lipstick">
+		Plus
+	</string>
+	<string name="More Love">
+		Plus
+	</string>
+	<string name="More Lower Lip">
+		Plus
+	</string>
+	<string name="More Muscles">
+		Plus
+	</string>
+	<string name="More Muscular">
+		Plus
+	</string>
+	<string name="More Rosy">
+		Plus
+	</string>
+	<string name="More Round">
+		Plus
+	</string>
+	<string name="More Saddle">
+		Plus
+	</string>
+	<string name="More Sloped">
+		Plus
+	</string>
+	<string name="More Square">
+		Plus
+	</string>
+	<string name="More Upper Lip">
+		Plus
+	</string>
+	<string name="More Vertical">
+		Plus
+	</string>
+	<string name="More Volume">
+		Plus
+	</string>
+	<string name="More soul">
+		Plus
+	</string>
+	<string name="Moustache">
+		Moustache
+	</string>
+	<string name="Mouth Corner">
+		Coin de la bouche
+	</string>
+	<string name="Mouth Position">
+		Position de la bouche
+	</string>
+	<string name="Mowhawk">
+		Mowhawk
+	</string>
+	<string name="Muscular">
+		Musclé
+	</string>
+	<string name="Mutton Chops">
+		Rouflaquettes
+	</string>
+	<string name="Nail Polish">
+		Vernis à ongles
+	</string>
+	<string name="Nail Polish Color">
+		Couleur du vernis
+	</string>
+	<string name="Narrow">
+		Étroit
+	</string>
+	<string name="Narrow Back">
+		Arrière étroit
+	</string>
+	<string name="Narrow Front">
+		Devant étroit
+	</string>
+	<string name="Narrow Lips">
+		Lèvres étroites
+	</string>
+	<string name="Natural">
+		Naturel
+	</string>
+	<string name="Neck Length">
+		Longueur du cou
+	</string>
+	<string name="Neck Thickness">
+		Épaisseur du cou
+	</string>
+	<string name="No Blush">
+		Pas de blush
+	</string>
+	<string name="No Eyeliner">
+		Pas de eyeliner
+	</string>
+	<string name="No Eyeshadow">
+		Pas d&apos;ombre à paupières
+	</string>
+	<string name="No Heels">
+		Pas de talons
+	</string>
+	<string name="No Lipgloss">
+		Pas de brillant à lèvres
+	</string>
+	<string name="No Lipstick">
+		Pas de rouge à lèvres
+	</string>
+	<string name="No Part">
+		Pas de raie
+	</string>
+	<string name="No Polish">
+		Pas de vernis
+	</string>
+	<string name="No Red">
+		Pas de rouge
+	</string>
+	<string name="No Spikes">
+		Pas de spikes
+	</string>
+	<string name="No White">
+		Pas de blanc
+	</string>
+	<string name="No Wrinkles">
+		Pas de rides
+	</string>
+	<string name="Normal Lower">
+		Normal plus bas
+	</string>
+	<string name="Normal Upper">
+		Normal plus haut
+	</string>
+	<string name="Nose Left">
+		Nez à gauche
+	</string>
+	<string name="Nose Right">
+		Nez à droite
+	</string>
+	<string name="Nose Size">
+		Taille du nez
+	</string>
+	<string name="Nose Thickness">
+		Épaisseur du nez
+	</string>
+	<string name="Nose Tip Angle">
+		Angle du bout du nez
+	</string>
+	<string name="Nose Tip Shape">
+		Forme du bout du nez
+	</string>
+	<string name="Nose Width">
+		Largeur du nez
+	</string>
+	<string name="Nostril Division">
+		Division des narines
+	</string>
+	<string name="Nostril Width">
+		Largeur des narines
+	</string>
+	<string name="Old">
+		Vieux
+	</string>
+	<string name="Opaque">
+		Opaque
+	</string>
+	<string name="Open">
+		Ouvert
+	</string>
+	<string name="Open Back">
+		Derrière ouvert
+	</string>
+	<string name="Open Front">
+		Devant ouvert
+	</string>
+	<string name="Open Left">
+		Ouvert à gauche
+	</string>
+	<string name="Open Right">
+		Ouvert à droite
+	</string>
+	<string name="Orange">
+		Orange
+	</string>
+	<string name="Out">
+		Dehors
+	</string>
+	<string name="Out Shdw Color">
+		Couleur de l&apos;ombre externe
+	</string>
+	<string name="Out Shdw Opacity">
+		Opacité de l&apos;ombre externe
+	</string>
+	<string name="Outer Eye Corner">
+		Coin de l&apos;Å“il externe
+	</string>
+	<string name="Outer Eye Shadow">
+		Ombre de l&apos;Å“il externe
+	</string>
+	<string name="Outer Shadow">
+		Ombre externe
+	</string>
+	<string name="Overbite">
+		Chevauchement
+	</string>
+	<string name="Package">
+		Parties
+	</string>
+	<string name="Painted Nails">
+		Ongles vernis
+	</string>
+	<string name="Pale">
+		Pâle
+	</string>
+	<string name="Pants Crotch">
+		Entrejambe
+	</string>
+	<string name="Pants Fit">
+		Taille
+	</string>
+	<string name="Pants Length">
+		Longueur
+	</string>
+	<string name="Pants Waist">
+		Taille
+	</string>
+	<string name="Pants Wrinkles">
+		Plis
+	</string>
+	<string name="Part">
+		Raie
+	</string>
+	<string name="Part Bangs">
+		Séparation de la frange
+	</string>
+	<string name="Pectorals">
+		Pectoraux
+	</string>
+	<string name="Pigment">
+		Pigmentation
+	</string>
+	<string name="Pigtails">
+		Couettes
+	</string>
+	<string name="Pink">
+		Rose
+	</string>
+	<string name="Pinker">
+		Plus rose
+	</string>
+	<string name="Platform Height">
+		Hauteur de la plateforme
+	</string>
+	<string name="Platform Width">
+		Largeur de la plateforme
+	</string>
+	<string name="Pointy">
+		Pointu
+	</string>
+	<string name="Pointy Heels">
+		Talons pointus
+	</string>
+	<string name="Pointy Toe">
+		Orteil pointu
+	</string>
+	<string name="Ponytail">
+		Queue de cheval
+	</string>
+	<string name="Poofy Skirt">
+		Jupe bouffante
+	</string>
+	<string name="Pop Left Eye">
+		Å’il gauche saillant
+	</string>
+	<string name="Pop Right Eye">
+		Å’il droit saillant
+	</string>
+	<string name="Puffy">
+		Gonflé
+	</string>
+	<string name="Puffy Eyelids">
+		Paupières gonflées
+	</string>
+	<string name="Rainbow Color">
+		Couleur de l&apos;arc en ciel
+	</string>
+	<string name="Red Hair">
+		Cheveux roux
+	</string>
+	<string name="Red Skin">
+		Peau rouge
+	</string>
+	<string name="Regular">
+		Standard
+	</string>
+	<string name="Regular Muscles">
+		Muscles normaux
+	</string>
+	<string name="Right Part">
+		Raie à droite
+	</string>
+	<string name="Rosy Complexion">
+		Teint rosé
+	</string>
+	<string name="Round">
+		Rond
+	</string>
+	<string name="Round Forehead">
+		Front rond
+	</string>
+	<string name="Ruddiness">
+		Rougeur
+	</string>
+	<string name="Ruddy">
+		Rouge
+	</string>
+	<string name="Rumpled Hair">
+		Texture
+	</string>
+	<string name="Saddle Bags">
+		Culotte de cheval
+	</string>
+	<string name="Saddlebags">
+		Culotte de cheval
+	</string>
+	<string name="Scrawny">
+		Maigre
+	</string>
+	<string name="Scrawny Leg">
+		Jambes maigres
+	</string>
+	<string name="Separate">
+		Séparés
+	</string>
+	<string name="Shading">
+		Dégradé
+	</string>
+	<string name="Shadow hair">
+		Cheveux
+	</string>
+	<string name="Shallow">
+		Creux
+	</string>
+	<string name="Shear Back">
+		Coupe derrière
+	</string>
+	<string name="Shear Face">
+		Visage
+	</string>
+	<string name="Shear Front">
+		Devant dégagé
+	</string>
+	<string name="Shear Left">
+		Gauche dégagée
+	</string>
+	<string name="Shear Left Up">
+		Haut gauche dégagé
+	</string>
+	<string name="Shear Right">
+		Droite dégagée
+	</string>
+	<string name="Shear Right Up">
+		Haut droit dégagé
+	</string>
+	<string name="Sheared Back">
+		Dégagé derrière
+	</string>
+	<string name="Sheared Front">
+		Dégagé devant
+	</string>
+	<string name="Shift Left">
+		Déplacer vers la gauche
+	</string>
+	<string name="Shift Mouth">
+		Déplacer la bouche
+	</string>
+	<string name="Shift Right">
+		Déplacer vers la droite
+	</string>
+	<string name="Shirt Bottom">
+		Chemise
+	</string>
+	<string name="Shirt Fit">
+		Taille
+	</string>
+	<string name="Shirt Wrinkles">
+		Plis
+	</string>
+	<string name="Shoe Height">
+		Hauteur de la chaussure
+	</string>
+	<string name="Short">
+		Court
+	</string>
+	<string name="Short Arms">
+		Bras courts
+	</string>
+	<string name="Short Legs">
+		Jambes courtes
+	</string>
+	<string name="Short Neck">
+		Petit cou
+	</string>
+	<string name="Short Pigtails">
+		Couettes courtes
+	</string>
+	<string name="Short Ponytail">
+		Queue de cheval courte
+	</string>
+	<string name="Short Sideburns">
+		Favoris courts
+	</string>
+	<string name="Short Torso">
+		Torse court
+	</string>
+	<string name="Short hips">
+		Hanches courtes
+	</string>
+	<string name="Shoulders">
+		Épaules
+	</string>
+	<string name="Side Bangs">
+		Mèches sur le côté
+	</string>
+	<string name="Side Bangs Down">
+		Mèches sur le côté en bas
+	</string>
+	<string name="Side Bangs Up">
+		Mèches sur le côté en haut
+	</string>
+	<string name="Side Fringe">
+		Frange sur le côté
+	</string>
+	<string name="Sideburns">
+		Favoris
+	</string>
+	<string name="Sides Hair">
+		Cheveux sur le côté
+	</string>
+	<string name="Sides Hair Down">
+		Cheveux sur le côté en bas
+	</string>
+	<string name="Sides Hair Up">
+		Cheveux sur le côté en haut
+	</string>
+	<string name="Skinny">
+		Maigre
+	</string>
+	<string name="Skinny Neck">
+		Cou maigre
+	</string>
+	<string name="Skirt Fit">
+		Taille de la jupe
+	</string>
+	<string name="Skirt Length">
+		Longueur de la jupe
+	</string>
+	<string name="Slanted Forehead">
+		Front incliné
+	</string>
+	<string name="Sleeve Length">
+		Longueur de la manche
+	</string>
+	<string name="Sleeve Looseness">
+		Ampleur de la manche
+	</string>
+	<string name="Slit Back">
+		Fente : Derrière
+	</string>
+	<string name="Slit Front">
+		Fente : Devant
+	</string>
+	<string name="Slit Left">
+		Fente : Gauche
+	</string>
+	<string name="Slit Right">
+		Fente : Droite
+	</string>
+	<string name="Small">
+		Petite
+	</string>
+	<string name="Small Hands">
+		Petites mains
+	</string>
+	<string name="Small Head">
+		Petite tête
+	</string>
+	<string name="Smooth">
+		Lisse
+	</string>
+	<string name="Smooth Hair">
+		Cheveux lisses
+	</string>
+	<string name="Socks Length">
+		Longueur des chaussettes
+	</string>
+	<string name="Some">
+		Quelques un(e)s
+	</string>
+	<string name="Soulpatch">
+		Soulpatch
+	</string>
+	<string name="Sparse">
+		Rares
+	</string>
+	<string name="Spiked Hair">
+		Mèches en pointe
+	</string>
+	<string name="Square">
+		Carré
+	</string>
+	<string name="Square Toe">
+		Orteil carré
+	</string>
+	<string name="Squash Head">
+		Écraser la tête
+	</string>
+	<string name="Squash/Stretch Head">
+		Allonger/écraser la tête
+	</string>
+	<string name="Stretch Head">
+		Allonger la tête
+	</string>
+	<string name="Sunken">
+		Enfoncées
+	</string>
+	<string name="Sunken Chest">
+		Poitrine enfoncée
+	</string>
+	<string name="Sunken Eyes">
+		Yeux enfoncés
+	</string>
+	<string name="Sweep Back">
+		En arrière
+	</string>
+	<string name="Sweep Forward">
+		Vers l&apos;avant
+	</string>
+	<string name="Swept Back">
+		En arrière
+	</string>
+	<string name="Swept Back Hair">
+		Cheveux en arrière
+	</string>
+	<string name="Swept Forward">
+		Vers l&apos;avant
+	</string>
+	<string name="Swept Forward Hair">
+		Cheveux vers l&apos;&apos;avant
+	</string>
+	<string name="Tall">
+		Grand
+	</string>
+	<string name="Taper Back">
+		Biseauter à l&apos;arrière
+	</string>
+	<string name="Taper Front">
+		Biseauter à l&apos;avant
+	</string>
+	<string name="Thick Heels">
+		Talons épais
+	</string>
+	<string name="Thick Neck">
+		Cou épais
+	</string>
+	<string name="Thick Toe">
+		Orteil épais
+	</string>
+	<string name="Thickness">
+		Épaisseur
+	</string>
+	<string name="Thin">
+		Fins
+	</string>
+	<string name="Thin Eyebrows">
+		Sourcils fins
+	</string>
+	<string name="Thin Lips">
+		Lèvres fines
+	</string>
+	<string name="Thin Nose">
+		Nez fin
+	</string>
+	<string name="Tight Chin">
+		Menton fin
+	</string>
+	<string name="Tight Cuffs">
+		Jambes serrées
+	</string>
+	<string name="Tight Pants">
+		Pantalons serrés
+	</string>
+	<string name="Tight Shirt">
+		Chemise serrée
+	</string>
+	<string name="Tight Skirt">
+		Jupe serrée
+	</string>
+	<string name="Tight Sleeves">
+		Manches serrées
+	</string>
+	<string name="Tilt Left">
+		Pencher sur la gauche
+	</string>
+	<string name="Tilt Right">
+		Pencher sur la droite
+	</string>
+	<string name="Toe Shape">
+		Forme de l&apos;orteil
+	</string>
+	<string name="Toe Thickness">
+		Épaisseur de l&apos;orteil
+	</string>
+	<string name="Torso Length">
+		Longueur du torse
+	</string>
+	<string name="Torso Muscles">
+		Muscles du torse
+	</string>
+	<string name="Torso Scrawny">
+		Torse maigre
+	</string>
+	<string name="Unattached">
+		Séparés
+	</string>
+	<string name="Uncreased">
+		Lisse
+	</string>
+	<string name="Underbite">
+		Rentré
+	</string>
+	<string name="Unnatural">
+		Artificiel
+	</string>
+	<string name="Upper Bridge">
+		Arête supérieure
+	</string>
+	<string name="Upper Cheeks">
+		Pommettes
+	</string>
+	<string name="Upper Chin Cleft">
+		Fente du menton supérieure
+	</string>
+	<string name="Upper Eyelid Fold">
+		Paupière supérieure
+	</string>
+	<string name="Upturned">
+		En trompette
+	</string>
+	<string name="Very Red">
+		Très rouge
+	</string>
+	<string name="Waist Height">
+		Hauteur de la taille
+	</string>
+	<string name="Well-Fed">
+		Bien nourri
+	</string>
+	<string name="White Hair">
+		Cheveux blancs
+	</string>
+	<string name="Wide">
+		Large
+	</string>
+	<string name="Wide Back">
+		Dos large
+	</string>
+	<string name="Wide Front">
+		Devant large
+	</string>
+	<string name="Wide Lips">
+		Lèvres larges
+	</string>
+	<string name="Wild">
+		Revêche
+	</string>
+	<string name="Wrinkles">
+		Rides
+	</string>
+	<string name="LocationCtrlAddLandmarkTooltip">
+		Ajouter à mes repères
+	</string>
+	<string name="LocationCtrlEditLandmarkTooltip">
+		Modifier mes repères
+	</string>
+	<string name="UpdaterWindowTitle">
+		[APP_NAME] Mettre à jour
+	</string>
+	<string name="UpdaterNowUpdating">
+		En train de charger [APP_NAME]...
+	</string>
+	<string name="UpdaterNowInstalling">
+		En train d&apos;installer [APP_NAME]...
+	</string>
+	<string name="UpdaterUpdatingDescriptive">
+		Le client [APP_NAME] est en train d&apos;être mis à jour.  Cela peut prendre un certain temps, merci de votre patience.
+	</string>
+	<string name="UpdaterProgressBarTextWithEllipses">
+		Mise à jour en cours...
+	</string>
+	<string name="UpdaterProgressBarText">
+		Mise à jour en cours
+	</string>
+	<string name="UpdaterFailDownloadTitle">
+		Le téléchargement de la mise à jour a échoué
+	</string>
+	<string name="UpdaterFailUpdateDescriptive">
+		Une erreur est survenue lors de la mise à jour de [APP_NAME]. Veuillez télécharger la dernière version sur www.secondlife.com.
+	</string>
+	<string name="UpdaterFailInstallTitle">
+		L&apos;installation de la mise à jour a échoué
+	</string>
+	<string name="UpdaterFailStartTitle">
+		Impossible de lancer le client
+	</string>
+	<string name="only_user_message">
+		Vous êtes le seul participant à cette session.
+	</string>
+	<string name="offline_message">
+		[FIRST] [LAST] est déconnecté(e).
+	</string>
+	<string name="invite_message">
+		Pour accepter ce chat vocal/vous connecter, cliquez sur le bouton [BUTTON NAME].
+	</string>
+	<string name="generic_request_error">
+		Erreur lors de la requête, veuillez réessayer ultérieurement.
+	</string>
+	<string name="insufficient_perms_error">
+		Vous n&apos;avez pas les droits requis.
+	</string>
+	<string name="session_does_not_exist_error">
+		La session a expiré
+	</string>
+	<string name="no_ability_error">
+		Vous n&apos;avez pas ce pouvoir.
+	</string>
+	<string name="no_ability">
+		Vous n&apos;avez pas ce pouvoir.
+	</string>
+	<string name="not_a_mod_error">
+		Vous n&apos;êtes pas modérateur de session.
+	</string>
+	<string name="muted_error">
+		Un modérateur de groupe a désactivé votre chat écrit.
+	</string>
+	<string name="add_session_event">
+		Impossible d&apos;ajouter des participants à la session de chat avec [RECIPIENT].
+	</string>
+	<string name="message_session_event">
+		Impossible d&apos;envoyer votre message à la session de chat avec [RECIPIENT].
+	</string>
+	<string name="removed_from_group">
+		Vous avez été supprimé du groupe.
+	</string>
+	<string name="close_on_no_ability">
+		Vous ne pouvez plus participer à la session de chat.
+	</string>
+</strings>
diff --git a/indra/newview/skins/default/xui/fr/teleport_strings.xml b/indra/newview/skins/default/xui/fr/teleport_strings.xml
index 810a32f64ec..1315a4b1004 100644
--- a/indra/newview/skins/default/xui/fr/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/fr/teleport_strings.xml
@@ -1,77 +1,77 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<teleport_messages name="">
-	<message_set name="errors">
-		<message name="invalid_tport">
-			Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à la page suivante :
-www.secondlife.com/support
-		</message>
-		<message name="invalid_region_handoff">
-			Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à la page suivante :
-www.secondlife.com/support
-		</message>
-		<message name="blocked_tport">
-			Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
-Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
-		</message>
-		<message name="nolandmark_tport">
-			Désolé, le système n&apos;a pas réussi à localiser la destination de votre repère.
-		</message>
-		<message name="timeout_tport">
-			Désolé, la connexion vers votre lieu de téléportation n&apos;a pas abouti.
-Veuillez réessayer dans un moment.
-		</message>
-		<message name="noaccess_tport">
-			Désolé, vous n&apos;avez pas accès à cette destination.
-		</message>
-		<message name="missing_attach_tport">
-			Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d&apos;essayer de vous téléporter.
-		</message>
-		<message name="too_many_uploads_tport">
-			Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
-		</message>
-		<message name="expired_tport">
-			Désolé, votre demande de téléportation n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
-		</message>
-		<message name="expired_region_handoff">
-			Désolé, votre demande pour passer dans une autre région n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
-		</message>
-		<message name="no_host">
-			Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu&apos;elle n&apos;existe plus. Veuillez réessayer dans quelques minutes.
-		</message>
-		<message name="no_inventory_host">
-			L&apos;inventaire est temporairement indisponible.
-		</message>
-	</message_set>
-	<message_set name="progress">
-		<message name="sending_dest">
-			Envoi vers la destination en cours.
-		</message>
-		<message name="redirecting">
-			Redirection vers un emplacement différent en cours.
-		</message>
-		<message name="relaying">
-			Relai vers la destination en cours.
-		</message>
-		<message name="sending_home">
-			Requête de la demande d&apos;envoi vers votre domicile en cours.
-		</message>
-		<message name="sending_landmark">
-			Requête de la demande d&apos;envoi vers le repère en cours.
-		</message>
-		<message name="completing">
-			Téléportation sur le point d&apos;aboutir.
-		</message>
-		<message name="resolving">
-			Destination en cours de résolution.
-		</message>
-		<message name="contacting">
-			Contact avec la nouvelle région en cours.
-		</message>
-		<message name="arriving">
-			Vous arrivez...
-		</message>
-		<message name="requesting">
-			Demande de téléportation en cours...
-		</message>
-	</message_set>
-</teleport_messages>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<teleport_messages name="">
+	<message_set name="errors">
+		<message name="invalid_tport">
+			Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir vous téléporter.
+Si ce message persiste, veuillez consulter la page [SUPPORT_SITE].
+		</message>
+		<message name="invalid_region_handoff">
+			Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir traverser des régions.
+Si ce message persiste, veuillez consulter la page [SUPPORT_SITE].
+		</message>
+		<message name="blocked_tport">
+			Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
+Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
+		</message>
+		<message name="nolandmark_tport">
+			Désolé, le système n&apos;a pas réussi à localiser la destination de votre repère.
+		</message>
+		<message name="timeout_tport">
+			Désolé, la connexion vers votre lieu de téléportation n&apos;a pas abouti.
+Veuillez réessayer dans un moment.
+		</message>
+		<message name="noaccess_tport">
+			Désolé, vous n&apos;avez pas accès à cette destination.
+		</message>
+		<message name="missing_attach_tport">
+			Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d&apos;essayer de vous téléporter.
+		</message>
+		<message name="too_many_uploads_tport">
+			Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
+		</message>
+		<message name="expired_tport">
+			Désolé, votre demande de téléportation n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+		</message>
+		<message name="expired_region_handoff">
+			Désolé, votre demande pour passer dans une autre région n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+		</message>
+		<message name="no_host">
+			Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu&apos;elle n&apos;existe plus. Veuillez réessayer dans quelques minutes.
+		</message>
+		<message name="no_inventory_host">
+			L&apos;inventaire est temporairement indisponible.
+		</message>
+	</message_set>
+	<message_set name="progress">
+		<message name="sending_dest">
+			Envoi vers la destination en cours.
+		</message>
+		<message name="redirecting">
+			Redirection vers un emplacement différent en cours.
+		</message>
+		<message name="relaying">
+			Relai vers la destination en cours.
+		</message>
+		<message name="sending_home">
+			Requête de la demande d&apos;envoi vers votre domicile en cours.
+		</message>
+		<message name="sending_landmark">
+			Requête de la demande d&apos;envoi vers le repère en cours.
+		</message>
+		<message name="completing">
+			Téléportation sur le point d&apos;aboutir.
+		</message>
+		<message name="resolving">
+			Destination en cours de résolution.
+		</message>
+		<message name="contacting">
+			Contact avec la nouvelle région en cours.
+		</message>
+		<message name="arriving">
+			Vous arrivez...
+		</message>
+		<message name="requesting">
+			Demande de téléportation en cours...
+		</message>
+	</message_set>
+</teleport_messages>
diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml
index 834d49e169b..07911c68b1f 100644
--- a/indra/newview/skins/default/xui/ja/floater_about.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about.xml
@@ -1,43 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="[APP_NAME]について">
-<tab_container name="about_tab">
-	<panel name="credits_panel">
-	<text_editor name="credits_editor">
-		Second Lifeは、 Philip、Tessa、Andrew、Cory、James、Ben、Char、Charlie、Colin、Dan、Daniel、Doug、Eric、Hamlet、Haney、Eve、Hunter、Ian、Jeff、Jennifer、Jim、John、Lee、Mark、Peter、Phoenix、Richard、Robin、Xenon、Steve、Tanya、Eddie、Avi、Frank、Bruce、Aaron、Alice、Bob、Debra、Eileen、Helen、Janet、Louie、Leviathania、Stefan、Ray、Kevin、Tom、Mikeb、MikeT、Burgess、Elena、Tracy、Bill、Todd、Ryan、Zach、Sarah、Nova、Tim、Stephanie、Michael、Evan、Nicolas、Catherine、Rachelle、Dave、Holly、Bub、Kelly、Magellan、Ramzi、Don、Sabin、Jill、Rheya、Jeska、Torley、Kona、Callum、Charity、Ventrella、Jack、Vektor、Iris、Chris、Nicole、Mick、Reuben、Blue、Babbage、Yedwab、Deana、Lauren、Brent、Pathfinder、Chadrick、Altruima、Jesse、Teeny、Monroe、Icculus、David、Tess、Lizzie、Patsy、Isaac、Lawrence、Cyn、Bo、Gia、Annette、Marius、Tbone、Jonathan、Karen、Ginsu、Satoko、Yuko、Makiko、Thomas、Harry、Seth、Alexei、Brian、Guy、Runitai、Ethan、Data、Cornelius、Kenny、Swiss、Zero、Natria、Wendy、Stephen、Teeple、Thumper、Lucy、Dee、Mia、Liana、Warren、Branka、Aura、beez、Milo、Hermia、Red、Thrax、Joe、Sally、Magenta、Mogura、Paul、Jose、Rejean、Henrik、Lexie、Amber、Logan、Xan、Nora、Morpheus、Donovan、Leyla、MichaelFrancis、Beast、Cube、Bucky、Joshua、Stryfe、Harmony、Teresa、Claudia、Walker、Glenn、Fritz、Fordak、June、Cleopetra、Jean、Ivy、Betsy、Roosevelt、Spike、Ken、Which、Tofu、Chiyo、Rob、Zee、dustin、George、Del、Matthew、Cat、Jacqui、Lightfoot、Adrian、Viola、Alfred、Noel、Irfan、Sunil、Yool、Rika、Jane、Xtreme、Frontier、a2、Neo、Siobhan、Yoz、Justin、Elle、Qarl、Benjamin、Isabel、Gulliver、Everett、Christopher、Izzy、Stephany、Garry、Sejong、Sean、Tobin、Iridium、Meta、Anthony、Jeremy、JP、Jake、Maurice、Madhavi、Leopard、Kyle、Joon、Kari、Bert、Belinda、Jon、Kristi、Bridie、Pramod、KJ、Socrates、Maria、Ivan、Aric、Yamasaki、Adreanne、Jay、MitchK、Ceren、Coco、Durl、Jenny、Periapse、Kartic、Storrs、Lotte、Sandy、Rohn、Colossus、Zen、BigPapi、Brad、Pastrami、Kurz、Mani、Neuro、Jaime、MJ、Rowan、Sgt、Elvis、Gecko、Samuel、Sardonyx、Leo、Bryan、Niko、Soft、Poppy、Rachel、Aki、Angelo、Banzai、Alexa、Sue、CeeLo、Bender、CG、Gillian、Pelle、Nick、Echo、Zara、Christine、Shamiran、Emma、Blake、Keiko、Plexus、Joppa、Sidewinder、Erica、Ashlei、Twilight、Kristen、Brett、Q、Enus、Simon、Bevis、Kraft、Kip、Chandler、Ron、LauraP、Ram、KyleJM、Scouse、Prospero、Melissa、Marty、Nat、Hamilton、Kend、Lordan、Jimmy、Kosmo、Seraph、Green、Ekim、Wiggo、JT、Rome、Doris、Miz、Benoc、Whump、Trinity、Patch、Kate、TJ、Bao、Joohwan、Christy、Sofia、Matias、Cogsworth、Johan、Oreh、Cheah、Angela、Brandy、Mango、Lan、Aleks、Gloria、Heidy、Mitchell、Space、Colton、Bambers、Einstein、Maggie、Malbers、Rose、Winnie、Stella、Milton、Rothman、Niall、Marin、Allison、Katie、Dawn、Katt、Dusty、Kalpana、Judy、Andrea、Ambroff、Infinity、Gail、Rico、Raymond、Yi、William、Christa、M、Teagan、Scout、Molly、Dante、Corr、Dynamike、Usi、Kaylee、Vidtuts、Lil、Danica、Sascha、Kelv、Jacob、Nya、Rodney、Brandon、Elsie、Blondin、Grant、Katrin、Nyx、Gabriel、Locklainn、Claire、Devin、Minerva、Monty、Austin、Bradford、Si、Keira、H、Caitlin、Dita、Makai、Jenn、Ann、Meredith、Clare、Joy、Praveen、Cody、Edmund、Ruthe、Sirena、Gayathri、Spider、FJ、Davidoff、Tian、Jennie、Louise、Oskar、Landon、Noelle、Jarv、Ingrid、Al、Sommer、Doc、Aria、Huin、Gray、Lili、Vir、DJ、Yang、T、Simone、Maestro、Scott、Charlene、Quixote、Amanda、Susan、Zed、Anne、Enkidu、Esbee、Joroan、Katelin、Roxie、Tay、Scarlet、Kevin、Johnny、Wolfgang、Andren、Bob、Howard、Merov、Rand、Ray、Michon、Newell、Galen、Dessie、Les、Michon、Jenelle、Geo、Siz、Shapiro、Pete、Calyle、Selene、Allen、Phoebe、Goldin、Kimmora、Dakota、Slaton、Lindquist、Zoey、Hari、Othello、Rohit、Sheldon、Petra、Viale、Gordon、Kaye、Pink、Ferny、Emerson、Davy、Bri、Chan、Juan、Robert、Terrence、Nathan、Carlと、その他多数の人達によって作成されました。
-
-  このバージョンをこれまでで最高のものになるようご協力をいただいた以下の住人の皆様に深く感謝いたします。 able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
-
-
-
-  ビジネスで成功するには、勇気を持って、誰よりも先に、人と違ったことをすることだ。 --Henry Marchant
-	</text_editor>
-	</panel>
-	<panel name="licenses_panel">
-	<text_editor name="credits_editor">
-  3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
-  APR Copyright (C) 2000-2004 The Apache Software Foundation
-  cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
-  expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
-  FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
-  GL Copyright (C) 1999-2004 Brian Paul.
-  Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
-  jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
-  jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
-  ogg/vorbis Copyright (C) 2001, Xiphophorus
-  OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
-  SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
-  SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
-  xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-  zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
-  google-perftools Copyright (c) 2005, Google Inc.
-  
-  無断転写、複製、転載を禁じます。  詳細はlicenses.txtを参照してください。
-
-  Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
-	</text_editor>
-	</panel>
-</tab_container>
-	<text name="you_are_at">
-		[POSITION]
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="[APP_NAME]について">
+	<tab_container name="about_tab">
+		<panel label="クレジット" name="credits_panel">
+			<text_editor name="credits_editor">
+				Second Lifeは、 Philip、Tessa、Andrew、Cory、James、Ben、Char、Charlie、Colin、Dan、Daniel、Doug、Eric、Hamlet、Haney、Eve、Hunter、Ian、Jeff、Jennifer、Jim、John、Lee、Mark、Peter、Phoenix、Richard、Robin、Xenon、Steve、Tanya、Eddie、Avi、Frank、Bruce、Aaron、Alice、Bob、Debra、Eileen、Helen、Janet、Louie、Leviathania、Stefan、Ray、Kevin、Tom、Mikeb、MikeT、Burgess、Elena、Tracy、Bill、Todd、Ryan、Zach、Sarah、Nova、Tim、Stephanie、Michael、Evan、Nicolas、Catherine、Rachelle、Dave、Holly、Bub、Kelly、Magellan、Ramzi、Don、Sabin、Jill、Rheya、Jeska、Torley、Kona、Callum、Charity、Ventrella、Jack、Vektor、Iris、Chris、Nicole、Mick、Reuben、Blue、Babbage、Yedwab、Deana、Lauren、Brent、Pathfinder、Chadrick、Altruima、Jesse、Teeny、Monroe、Icculus、David、Tess、Lizzie、Patsy、Isaac、Lawrence、Cyn、Bo、Gia、Annette、Marius、Tbone、Jonathan、Karen、Ginsu、Satoko、Yuko、Makiko、Thomas、Harry、Seth、Alexei、Brian、Guy、Runitai、Ethan、Data、Cornelius、Kenny、Swiss、Zero、Natria、Wendy、Stephen、Teeple、Thumper、Lucy、Dee、Mia、Liana、Warren、Branka、Aura、beez、Milo、Hermia、Red、Thrax、Joe、Sally、Magenta、Mogura、Paul、Jose、Rejean、Henrik、Lexie、Amber、Logan、Xan、Nora、Morpheus、Donovan、Leyla、MichaelFrancis、Beast、Cube、Bucky、Joshua、Stryfe、Harmony、Teresa、Claudia、Walker、Glenn、Fritz、Fordak、June、Cleopetra、Jean、Ivy、Betsy、Roosevelt、Spike、Ken、Which、Tofu、Chiyo、Rob、Zee、dustin、George、Del、Matthew、Cat、Jacqui、Lightfoot、Adrian、Viola、Alfred、Noel、Irfan、Sunil、Yool、Rika、Jane、Xtreme、Frontier、a2、Neo、Siobhan、Yoz、Justin、Elle、Qarl、Benjamin、Isabel、Gulliver、Everett、Christopher、Izzy、Stephany、Garry、Sejong、Sean、Tobin、Iridium、Meta、Anthony、Jeremy、JP、Jake、Maurice、Madhavi、Leopard、Kyle、Joon、Kari、Bert、Belinda、Jon、Kristi、Bridie、Pramod、KJ、Socrates、Maria、Ivan、Aric、Yamasaki、Adreanne、Jay、MitchK、Ceren、Coco、Durl、Jenny、Periapse、Kartic、Storrs、Lotte、Sandy、Rohn、Colossus、Zen、BigPapi、Brad、Pastrami、Kurz、Mani、Neuro、Jaime、MJ、Rowan、Sgt、Elvis、Gecko、Samuel、Sardonyx、Leo、Bryan、Niko、Soft、Poppy、Rachel、Aki、Angelo、Banzai、Alexa、Sue、CeeLo、Bender、CG、Gillian、Pelle、Nick、Echo、Zara、Christine、Shamiran、Emma、Blake、Keiko、Plexus、Joppa、Sidewinder、Erica、Ashlei、Twilight、Kristen、Brett、Q、Enus、Simon、Bevis、Kraft、Kip、Chandler、Ron、LauraP、Ram、KyleJM、Scouse、Prospero、Melissa、Marty、Nat、Hamilton、Kend、Lordan、Jimmy、Kosmo、Seraph、Green、Ekim、Wiggo、JT、Rome、Doris、Miz、Benoc、Whump、Trinity、Patch、Kate、TJ、Bao、Joohwan、Christy、Sofia、Matias、Cogsworth、Johan、Oreh、Cheah、Angela、Brandy、Mango、Lan、Aleks、Gloria、Heidy、Mitchell、Space、Colton、Bambers、Einstein、Maggie、Malbers、Rose、Winnie、Stella、Milton、Rothman、Niall、Marin、Allison、Katie、Dawn、Katt、Dusty、Kalpana、Judy、Andrea、Ambroff、Infinity、Gail、Rico、Raymond、Yi、William、Christa、M、Teagan、Scout、Molly、Dante、Corr、Dynamike、Usi、Kaylee、Vidtuts、Lil、Danica、Sascha、Kelv、Jacob、Nya、Rodney、Brandon、Elsie、Blondin、Grant、Katrin、Nyx、Gabriel、Locklainn、Claire、Devin、Minerva、Monty、Austin、Bradford、Si、Keira、H、Caitlin、Dita、Makai、Jenn、Ann、Meredith、Clare、Joy、Praveen、Cody、Edmund、Ruthe、Sirena、Gayathri、Spider、FJ、Davidoff、Tian、Jennie、Louise、Oskar、Landon、Noelle、Jarv、Ingrid、Al、Sommer、Doc、Aria、Huin、Gray、Lili、Vir、DJ、Yang、T、Simone、Maestro、Scott、Charlene、Quixote、Amanda、Susan、Zed、Anne、Enkidu、Esbee、Joroan、Katelin、Roxie、Tay、Scarlet、Kevin、Johnny、Wolfgang、Andren、Bob、Howard、Merov、Rand、Ray、Michon、Newell、Galen、Dessie、Les、Michon、Jenelle、Geo、Siz、Shapiro、Pete、Calyle、Selene、Allen、Phoebe、Goldin、Kimmora、Dakota、Slaton、Lindquist、Zoey、Hari、Othello、Rohit、Sheldon、Petra、Viale、Gordon、Kaye、Pink、Ferny、Emerson、Davy、Bri、Chan、Juan、Robert、Terrence、Nathan、Carlと、その他多数の人達によって作成されました。
+
+  このバージョンをこれまでで最高のものになるようご協力をいただいた以下の住人の皆様に深く感謝いたします。 able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
+
+
+
+  ビジネスで成功するには、勇気を持って、誰よりも先に、人と違ったことをすることだ。 --Henry Marchant
+			</text_editor>
+		</panel>
+		<panel label="ライセンス" name="licenses_panel">
+			<text_editor name="credits_editor">
+				3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
+  APR Copyright (C) 2000-2004 The Apache Software Foundation
+  cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+  expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+  FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+  GL Copyright (C) 1999-2004 Brian Paul.
+  Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
+  jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
+  jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
+  ogg/vorbis Copyright (C) 2001, Xiphophorus
+  OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
+  SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
+  SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+  xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
+  zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
+  google-perftools Copyright (c) 2005, Google Inc.
+  
+  無断転写、複製、転載を禁じます。  詳細はlicenses.txtを参照してください。
+
+  Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+			</text_editor>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml
index fb7136d7ced..bb9dcac83bb 100644
--- a/indra/newview/skins/default/xui/ja/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml
@@ -1,495 +1,475 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="土地情報">
-	<tab_container name="landtab">
-		<panel label="一般" name="land_general_panel">
-			<text name="Name:">
-				名前:
-			</text>
-			<line_editor name="Name"/>
-			<text name="Description:">
-				説明:
-			</text>
-			<text name="LandType">
-				種類:
-			</text>
-			<text name="LandTypeText">
-				メインランド/ホームステッド
-			</text>
-			<text name="ContentRating">
-				区分:
-			</text>
-			<text name="ContentRatingText">
-				Adult
-			</text>
-			<text name="Owner:">
-				オーナー:
-			</text>
-			<text name="OwnerText">
-				Leyla Linden
-			</text>
-			<button label="プロフィール..." label_selected="プロフィール..." name="Profile..."/>
-			<text name="Group:">
-				グループ:
-			</text>
-			<button label="設定..." label_selected="設定..." name="Set..."/>
-			<check_box label="グループへの譲渡を許可" name="check deed" tool_tip="グループ・オフィサーは、この土地をグループに譲渡し、グループの土地配分に委ねることができます。"/>
-			<button label="譲渡..." label_selected="譲渡..." name="Deed..." tool_tip="選択されたグループのオフィサーであるときのみ、土地を譲渡できます。"/>
-			<check_box label="オーナーが譲渡と共に寄付" name="check contrib" tool_tip="土地がグループに譲渡されるとき、前の所有者は譲渡が成立するよう、十分な土地を寄付します。"/>
-			<text name="For Sale:">
-				販売の有無:
-			</text>
-			<text name="Not for sale.">
-				販売対象外
-			</text>
-			<text name="For Sale: Price L$[PRICE].">
-				価格: L$[PRICE] (L$[PRICE_PER_SQM]/平方メートル)
-			</text>
-			<button label="土地を販売..." label_selected="土地を販売..." name="Sell Land..."/>
-			<text name="For sale to">
-				販売先:[BUYER]
-			</text>
-			<text name="Sell with landowners objects in parcel.">
-				オブジェクトも販売価格に含まれます
-			</text>
-			<text name="Selling with no objects in parcel.">
-				オブジェクトは販売対象外です
-			</text>
-			<button label="土地販売の取り消し" label_selected="土地販売の取り消し" name="Cancel Land Sale"/>
-			<text name="Claimed:">
-				取得日時:
-			</text>
-			<text name="DateClaimText">
-				2006年8月15日火曜日13:47:25
-			</text>
-			<text name="PriceLabel">
-				面積:
-			</text>
-			<text name="PriceText">
-				4048平方メートル
-			</text>
-			<text name="Traffic:">
-				交通量:
-			</text>
-			<text name="DwellText">
-				誤
-			</text>
-			<button label="土地を購入..." label_selected="土地を購入..." left="130" name="Buy Land..." width="125"/>
-			<button label="グループ用に購入..." label_selected="グループ用に購入..." name="Buy For Group..."/>
-			<button label="入場許可を購入..." label_selected="入場許可を購入..." left="130" name="Buy Pass..." tool_tip="この土地への一時的なアクセスを許可します。" width="125"/>
-			<button label="土地を放棄..." label_selected="土地を放棄..." name="Abandon Land..."/>
-			<button label="土地の返還を要求..." label_selected="土地の返還を要求..." name="Reclaim Land..."/>
-			<button label="Lindenセール..." label_selected="Lindenセール..." name="Linden Sale..." tool_tip="土地が所有されており、コンテンツが設定されている必要があります。オークションの対象になっていないことも必要条件です。"/>
-			<panel.string name="new users only">
-				新規ユーザーのみ
-			</panel.string>
-			<panel.string name="anyone">
-				誰でも
-			</panel.string>
-			<panel.string name="area_text">
-				面積:
-			</panel.string>
-			<panel.string name="area_size_text">
-				[AREA]平方メートル
-			</panel.string>
-			<panel.string name="auction_id_text">
-				オークションID: [ID]
-			</panel.string>
-			<panel.string name="need_tier_to_modify">
-				この土地を修正変更するには、購入を承認する必要があります。
-			</panel.string>
-			<panel.string name="group_owned_text">
-				(グループ所有)
-			</panel.string>
-			<panel.string name="profile_text">
-				プロフィール...
-			</panel.string>
-			<panel.string name="info_text">
-				情報...
-			</panel.string>
-			<panel.string name="public_text">
-				(公共)
-			</panel.string>
-			<panel.string name="none_text">
-				(なし)
-			</panel.string>
-			<panel.string name="sale_pending_text">
-				(購入審査中)
-			</panel.string>
-			<panel.string name="no_selection_text">
-				区画が選定されていません。
-「世界」メニュー>「土地情報」に進むか、別の区画を選択して、詳細を表示します。
-			</panel.string>
-		</panel>
-		<panel label="約款" name="land_covenant_panel">
-			<text font="SansSerifLarge" name="estate_section_lbl">
-				不動産:
-			</text>
-			<text name="estate_name_lbl">
-				名前:
-			</text>
-			<text name="estate_name_text">
-				メインランド
-			</text>
-			<text name="estate_owner_lbl">
-				オーナー:
-			</text>
-			<text name="estate_owner_text">
-				(なし)
-			</text>
-			<text_editor name="covenant_editor">
-				この不動産には約款がありません。
-			</text_editor>
-			<text name="covenant_timestamp_text">
-				最後の更新1969年12月31日水曜日16:00:00
-			</text>
-			<text font="SansSerifLarge" name="region_section_lbl">
-				地域:
-			</text>
-			<text name="region_name_lbl">
-				名前:
-			</text>
-			<text name="region_name_text">
-				Leyla
-			</text>
-			<text name="region_landtype_lbl">
-				種類:
-			</text>
-			<text name="region_landtype_text">
-				メインランド/ホームステッド
-			</text>
-			<text name="region_maturity_lbl">
-				区分:
-			</text>
-			<text name="region_maturity_text">
-				Adult
-			</text>
-			<text name="resellable_lbl">
-				再販:
-			</text>
-			<text name="resellable_clause">
-				この地域(リージョン)にある土地は再販できません。
-			</text>
-			<text name="changeable_lbl">
-				再分割:
-			</text>
-			<text name="changeable_clause">
-				この地域(リージョン)にある土地は統合または分割ができ
-ません。
-			</text>
-			<panel.string name="can_resell">
-				この地域で購入した土地は、再販できます。
-			</panel.string>
-			<panel.string name="can_not_resell">
-				この地域で購入した土地は、再販できないことがあります。
-			</panel.string>
-			<panel.string name="can_change">
-				この地域で購入した土地は、統合または再分割できます。
-			</panel.string>
-			<panel.string name="can_not_change">
-				この地域で購入した土地は、統合/再分割できないことが
-あります。
-			</panel.string>
-		</panel>
-		<panel label="オブジェクト" name="land_objects_panel">
-			<text name="parcel_object_bonus">
-				地域オブジェクトボーナス要因: [BONUS]
-			</text>
-			<text name="Simulator primitive usage:" width="500">
-				地域全体のプリム使用状況:
-			</text>
-			<text left="200" name="objects_available">
-				[MAX]の内[COUNT]([AVAILABLE]利用可能)
-			</text>
-			<panel.string left="200" name="objects_available_text">
-				[MAX]の内[COUNT]([AVAILABLE]利用可能)
-			</panel.string>
-			<panel.string left="200" name="objects_deleted_text">
-				[MAX]の内[COUNT]([DELETED]を削除)
-			</panel.string>
-			<text name="Primitives parcel supports:" width="200">
-				区画でサポートされるプリム数:
-			</text>
-			<text left="200" name="object_contrib_text">
-				[COUNT]
-			</text>
-			<text name="Primitives on parcel:">
-				区画上のプリム数:
-			</text>
-			<text left="200" name="total_objects_text">
-				[COUNT]
-			</text>
-			<text name="Owned by parcel owner:" width="300">
-				区画オーナーによる所有:
-			</text>
-			<text left="200" name="owner_objects_text">
-				[COUNT]
-			</text>
-			<button label="表示" label_selected="表示" name="ShowOwner" right="-145"/>
-			<button label="返却..." label_selected="返却..." name="ReturnOwner..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
-			<text name="Set to group:">
-				グループに設定:
-			</text>
-			<text left="200" name="group_objects_text">
-				[COUNT]
-			</text>
-			<button label="表示" label_selected="表示" name="ShowGroup" right="-145"/>
-			<button label="返却..." label_selected="返却..." name="ReturnGroup..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
-			<text name="Owned by others:">
-				他人による所有:
-			</text>
-			<text left="200" name="other_objects_text">
-				[COUNT]
-			</text>
-			<button label="表示" label_selected="表示" name="ShowOther" right="-145"/>
-			<button label="返却..." label_selected="返却..." name="ReturnOther..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
-			<text name="Selected / sat upon:">
-				選択済み/決定済み:
-			</text>
-			<text left="200" name="selected_objects_text">
-				[COUNT]
-			</text>
-			<text name="Autoreturn" width="500">
-				他の住人のオブジェクトの自動返却(分、0で自動返却なし)
-			</text>
-			<line_editor left_delta="5" name="clean other time" right="-80"/>
-			<text name="Object Owners:" width="150">
-				オブジェクトのオーナー:
-			</text>
-			<button label="リスト更新" label_selected="リスト更新" left="146" name="Refresh List"/>
-			<button label="オブジェクトの返却..." label_selected="オブジェクトの返却..." left="256" name="Return objects..."/>
-			<name_list label="カウント" name="owner list">
-				<column label="タイプ" name="type"/>
-				<column name="online_status"/>
-				<column label="名前" name="name"/>
-				<column label="カウント" name="count"/>
-				<column label="最新" name="mostrecent"/>
-			</name_list>
-		</panel>
-		<panel label="オプション" name="land_options_panel">
-			<text name="allow_label">
-				他の住人に以下を許可:
-			</text>
-			<check_box label="地形を編集" name="edit land check" tool_tip="チェックを入れると、他人があなたの土地の地形編集を行うことが可能となります。このオプションのチェックを外しておくことをおすすめします。外した状態であなたの土地の地形編集が可能です。"/>
-			<check_box label="ランドマーク作成" name="check landmark"/>
-			<check_box label="飛行" name="check fly" tool_tip="チェックを入れるとこの土地での飛行が可能となります。チェックを外すと土地に入る際と通り過ぎるときのみ飛行可能となります。"/>
-			<text left="138" name="allow_label2" width="144">
-				オブジェクトの作成:
-			</text>
-			<check_box label="すべての住人" left="280" name="edit objects check"/>
-			<check_box label="グループ" left="380" name="edit group objects check"/>
-			<text left="138" name="allow_label3" width="144">
-				オブジェクトの進入:
-			</text>
-			<check_box label="すべての住人" left="280" name="all object entry check"/>
-			<check_box label="グループ" left="380" name="group object entry check"/>
-			<text left="138" name="allow_label4" width="144">
-				スクリプトの実行:
-			</text>
-			<check_box label="すべての住人" left="280" name="check other scripts"/>
-			<check_box label="グループ" left="380" name="check group scripts"/>
-			<text name="land_options_label">
-				土地オプション:
-			</text>
-			<check_box label="安全(ダメージなし)" name="check safe" tool_tip="チェックを入れるとこの土地でのダメージコンバットが無効になり、「安全」に設定されます。 チェックを外すとダメージコンバットが有効になります。"/>
-			<check_box label="プッシングを制限" name="PushRestrictCheck" tool_tip="スクリプトによるプッシングを制限します。 このオプションを選択することにより、あなたの土地での破壊的行動を妨げることができます。"/>
-			<check_box label="検索に表示>(週L$30)以下の場所" name="ShowDirectoryCheck" tool_tip="検索結果でこの区画を表示させる"/>
-			<panel.string name="search_enabled_tooltip">
-				この区画を検索結果に表示する
-			</panel.string>
-			<panel.string name="search_disabled_small_tooltip">
-				区画面積が128平方メートルかそれ以下のため、このオプションは無効です。
-大きな区画のみ検索に表示させることが可能です。
-			</panel.string>
-			<panel.string name="search_disabled_permissions_tooltip">
-				あなたはこの区画の設定編集ができないため、このオプションは無効です。
-			</panel.string>
-			<combo_box name="land category with adult">
-				<combo_box.item name="item0" label="全カテゴリ"
-				/>
-				<combo_box.item name="item1" label="Linden所在地"
-				/>
-				<combo_box.item name="item2" label="Adult"
-				/>
-				<combo_box.item name="item3" label="アートとカルチャー"
-				/>
-				<combo_box.item name="item4" label="ビジネス"
-				/>
-				<combo_box.item name="item5" label="教育的"
-				/>
-				<combo_box.item name="item6" label="ゲーム"
-				/>
-				<combo_box.item name="item7" label="たまり場"
-				/>
-				<combo_box.item name="item8" label="新住人に好意的"
-				/>
-				<combo_box.item name="item9" label="公園と自然"
-				/>
-				<combo_box.item name="item10" label="住宅用"
-				/>
-				<combo_box.item name="item11" label="ショッピング"
-				/>
-				<combo_box.item name="item12" label="その他"
-				/>
-			</combo_box>
-			<combo_box name="land category">
-				<combo_box.item name="item0" label="全カテゴリー"
-				/>
-				<combo_box.item name="item1" label="Linden所在地"
-				/>
-				<combo_box.item name="item3" label="アート&amp;カルチャー"
-				/>
-				<combo_box.item name="item4" label="ビジネス"
-				/>
-				<combo_box.item name="item5" label="教育的"
-				/>
-				<combo_box.item name="item6" label="ゲーム"
-				/>
-				<combo_box.item name="item7" label="たまり場"
-				/>
-				<combo_box.item name="item8" label="新住人に好意的"
-				/>
-				<combo_box.item name="item9" label="公園と自然"
-				/>
-				<combo_box.item name="item10" label="住宅用"
-				/>
-				<combo_box.item name="item11" label="ショッピング"
-				/>
-				<combo_box.item name="item12" label="その他"
-				/>
-			</combo_box>
-			<button label="?" label_selected="?" name="?"/>
-			<check_box label="Matureコンテンツ" name="MatureCheck" tool_tip=""/>
-			<panel.string name="mature_check_mature">
-				Matureコンテンツ
-			</panel.string>
-			<panel.string name="mature_check_adult">
-				Adultコンテンツ
-			</panel.string>
-			<panel.string name="mature_check_mature_tooltip">
-				あなたの区画情報及びコンテンツはMatureとされています。
-			</panel.string>
-			<panel.string name="mature_check_adult_tooltip">
-				あなたの区画情報及びコンテンツはAdultとされています。
-			</panel.string>
-			<text name="Snapshot:">
-				スナップショット:
-			</text>
-			<texture_picker label="" left="116" name="snapshot_ctrl" tool_tip="写真をクリックして選択"/>
-			<text name="landing_point">
-				着地点: [LANDING]
-			</text>
-			<panel.string name="landing_point_none">
-				(なし)
-			</panel.string>
-			<button label="設定" label_selected="設定" name="Set" tool_tip="訪問者の着地点の設定を行います。この区画内に立って行ってください。"/>
-			<button label="クリア" label_selected="クリア" name="Clear" tool_tip="着地点をクリアしてください。"/>
-			<text name="Teleport Routing: ">
-				テレポート制限:
-			</text>
-			<combo_box name="landing type" tool_tip="Teleport Routing -- select how to handle teleports onto your land.">
-				<combo_box.item name="Blocked" label="不可"
-				/>
-				<combo_box.item name="LandingPoint" label="着地点"
-				/>
-				<combo_box.item name="Anywhere" label="どこでも"
-				/>
-			</combo_box>
-			<panel.string name="push_restrict_text">
-				プッシングを制限
-			</panel.string>
-			<panel.string name="push_restrict_region_text">
-				プッシングを制限 (地域優先)
-			</panel.string>
-		</panel>
-		<panel label="メディア" name="land_media_panel">
-			<text name="with media:">
-				タイプ:
-			</text>
-			<combo_box name="media type" tool_tip="URL が動画、ウェブ・ページ、その他のメディアの場合に指定します"/>
-			<text name="at URL:">
-				URL:
-			</text>
-			<button label="設定..." label_selected="設定..." name="set_media_url"/>
-			<text name="Description:">
-				説明:
-			</text>
-			<line_editor name="url_description" tool_tip="[再生]/[ロード]ボタンの隣に表示されるテキスト"/>
-			<text name="Media texture:">
-				テクスチ
-ャ取替:
-			</text>
-			<texture_picker label="" name="media texture" tool_tip="写真をクリックして選択"/>
-			<text name="replace_texture_help" width="290">
-				「再生」矢印をクリックすると、このテクスチャーを
- 使用するオブジェクトに動画またはウェブ・ページ
- が表示されます。
-			</text>
-			<text name="Options:">
-				メディア
-オプション:
-			</text>
-			<check_box label="スケールを自動設定" name="media_auto_scale" tool_tip="このオプションをチェックすると、この区画のコンテンツのスケールが自動的に設定されます。 動作速度と画質が少し低下することがありますが、他のテクスチャーのスケーリングや整列が必要になることはありません。"/>
-			<check_box label="メディアのループ" name="media_loop" tool_tip="メディアをループ再生します。  メディアの再生が終わったら、最初から再生し直します。"/>
-			<check_box label="メディア URL を隠す" name="hide_media_url" tool_tip="このオプションをオンにすると、許可なしでこの区画情報にアクセスしているユーザーにはメディア URL が表示されません。 これは HTML タイプには使用できませんのでご注意ください。"/>
-			<check_box label="音楽のURLを隠す" name="hide_music_url" tool_tip="このオプションをオンにすると、許可なしでこの区画情報にアクセスしているユーザーには音楽の URL が表示されません。"/>
-			<text name="media_size" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。">
-				サイズ:
-			</text>
-			<spinner name="media_size_width" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"/>
-			<spinner name="media_size_height" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"/>
-			<text name="pixels">
-				ピクセル
-			</text>
-			<text name="MusicURL:">
-				音楽のURL:
-			</text>
-			<text name="Sound:">
-				サウンド:
-			</text>
-			<check_box label="ジェスチャーとオブジェクトの音をこの区画だけに限定" name="check sound local"/>
-			<button label="?" label_selected="?" left="408" name="?"/>
-			<text name="Voice settings:">
-				ボイス:
-			</text>
-			<check_box label="ボイスを有効にする" name="parcel_enable_voice_channel"/>
-			<check_box label="ボイスを有効にする(不動産設定)" name="parcel_enable_voice_channel_is_estate_disabled"/>
-			<check_box label="この区画でのボイス使用を制限する" name="parcel_enable_voice_channel_parcel"/>
-		</panel>
-		<panel label="アクセス" name="land_access_panel">
-			<text name="Limit access to this parcel to:">
-				この区画にアクセス
-			</text>
-			<check_box label="パブリック・アクセスを許可" name="public_access"/>
-			<text name="Only Allow">
-				次の住人のアクセスをブロック:
-			</text>
-			<check_box label="Linden Labに支払い情報を登録していない住人" name="limit_payment" tool_tip="支払い情報未確認の住人を排除する"/>
-			<check_box label="年齢確認を済ませていない成人の住人" name="limit_age_verified" tool_tip="年齢確認を済ませていない住人を排除する詳細については、support.secondlife.comを参照してください。"/>
-			<panel.string name="estate_override">
-				1つ以上のオプションが、不動産レベルで設定されています。
-			</panel.string>
-			<check_box label="グループ・アクセスを許可:[GROUP]" name="GroupCheck" tool_tip="[一般]タブで、グループを選択してください。"/>
-			<check_box label="入場許可を販売:" name="PassCheck" tool_tip="この区画への一時的なアクセスを許可"/>
-			<combo_box name="pass_combo">
-				<combo_box.item name="Anyone" label="誰でも"
-				/>
-				<combo_box.item name="Group" label="グループ"
-				/>
-			</combo_box>
-			<spinner label="価格(L$):" name="PriceSpin"/>
-			<spinner label="アクセス時間:" name="HoursSpin"/>
-			<text label="常に許可" name="AllowedText">
-				許可された住人
-			</text>
-			<name_list name="AccessList" tool_tip="([LISTED]リスト入り、[MAX]最大)"/>
-			<button label="追加..." label_selected="追加..." name="add_allowed"/>
-			<button label="削除" label_selected="削除" name="remove_allowed"/>
-			<text label="禁止" name="BanCheck">
-				禁止された住人
-			</text>
-			<name_list name="BannedList" tool_tip="([LISTED]リスト入り、[MAX]最大)"/>
-			<button label="追加..." label_selected="追加..." name="add_banned"/>
-			<button label="削除" label_selected="削除" name="remove_banned"/>
-		</panel>
-	</tab_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterland" title="土地情報">
+	<floater.string name="Minutes">
+		[MINUTES] 分
+	</floater.string>
+	<floater.string name="Minute">
+		分
+	</floater.string>
+	<floater.string name="Seconds">
+		[SECONDS] 秒
+	</floater.string>
+	<tab_container name="landtab">
+		<panel label="一般" name="land_general_panel">
+			<panel.string name="new users only">
+				新規ユーザーのみ
+			</panel.string>
+			<panel.string name="anyone">
+				誰でも
+			</panel.string>
+			<panel.string name="area_text">
+				面積:
+			</panel.string>
+			<panel.string name="area_size_text">
+				[AREA]平方メートル
+			</panel.string>
+			<panel.string name="auction_id_text">
+				オークションID: [ID]
+			</panel.string>
+			<panel.string name="need_tier_to_modify">
+				この土地を修正変更するには、購入を承認する必要があります。
+			</panel.string>
+			<panel.string name="group_owned_text">
+				(グループ所有)
+			</panel.string>
+			<panel.string name="profile_text">
+				プロフィール...
+			</panel.string>
+			<panel.string name="info_text">
+				情報...
+			</panel.string>
+			<panel.string name="public_text">
+				(公共)
+			</panel.string>
+			<panel.string name="none_text">
+				(なし)
+			</panel.string>
+			<panel.string name="sale_pending_text">
+				(購入審査中)
+			</panel.string>
+			<panel.string name="no_selection_text">
+				区画が選定されていません。
+「世界」メニュー>「土地情報」に進むか、別の区画を選択して、詳細を表示します。
+			</panel.string>
+			<text name="Name:">
+				名前:
+			</text>
+			<line_editor name="Name"/>
+			<text name="Description:">
+				説明:
+			</text>
+			<text name="LandType">
+				種類:
+			</text>
+			<text name="LandTypeText">
+				メインランド/ホームステッド
+			</text>
+			<text name="ContentRating">
+				区分:
+			</text>
+			<text name="ContentRatingText">
+				Adult
+			</text>
+			<text name="Owner:">
+				オーナー:
+			</text>
+			<text name="OwnerText">
+				Leyla Linden
+			</text>
+			<button label="プロフィール..." label_selected="プロフィール..." name="Profile..."/>
+			<text name="Group:">
+				グループ:
+			</text>
+			<button label="設定..." label_selected="設定..." name="Set..."/>
+			<check_box label="グループへの譲渡を許可" name="check deed" tool_tip="グループ・オフィサーは、この土地をグループに譲渡し、グループの土地配分に委ねることができます。"/>
+			<button label="譲渡..." label_selected="譲渡..." name="Deed..." tool_tip="選択されたグループのオフィサーであるときのみ、土地を譲渡できます。"/>
+			<check_box label="オーナーが譲渡と共に寄付" name="check contrib" tool_tip="土地がグループに譲渡されるとき、前の所有者は譲渡が成立するよう、十分な土地を寄付します。"/>
+			<text name="For Sale:">
+				販売の有無:
+			</text>
+			<text name="Not for sale.">
+				販売対象外
+			</text>
+			<text name="For Sale: Price L$[PRICE].">
+				価格: L$[PRICE] (L$[PRICE_PER_SQM]/平方メートル)
+			</text>
+			<button label="土地を販売..." label_selected="土地を販売..." name="Sell Land..."/>
+			<text name="For sale to">
+				販売先:[BUYER]
+			</text>
+			<text name="Sell with landowners objects in parcel.">
+				オブジェクトも販売価格に含まれます
+			</text>
+			<text name="Selling with no objects in parcel.">
+				オブジェクトは販売対象外です
+			</text>
+			<button label="土地販売の取り消し" label_selected="土地販売の取り消し" name="Cancel Land Sale"/>
+			<text name="Claimed:">
+				取得日時:
+			</text>
+			<text name="DateClaimText">
+				2006年8月15日火曜日13:47:25
+			</text>
+			<text name="PriceLabel">
+				面積:
+			</text>
+			<text name="PriceText">
+				4048平方メートル
+			</text>
+			<text name="Traffic:">
+				交通量:
+			</text>
+			<text name="DwellText">
+				誤
+			</text>
+			<button label="土地を購入..." label_selected="土地を購入..." left="130" name="Buy Land..." width="125"/>
+			<button label="グループ用に購入..." label_selected="グループ用に購入..." name="Buy For Group..."/>
+			<button label="入場許可を購入..." label_selected="入場許可を購入..." left="130" name="Buy Pass..." tool_tip="この土地への一時的なアクセスを許可します。" width="125"/>
+			<button label="土地を放棄..." label_selected="土地を放棄..." name="Abandon Land..."/>
+			<button label="土地の返還を要求..." label_selected="土地の返還を要求..." name="Reclaim Land..."/>
+			<button label="Lindenセール..." label_selected="Lindenセール..." name="Linden Sale..." tool_tip="土地が所有されており、コンテンツが設定されている必要があります。オークションの対象になっていないことも必要条件です。"/>
+		</panel>
+		<panel label="約款" name="land_covenant_panel">
+			<panel.string name="can_resell">
+				この地域で購入した土地は、再販できます。
+			</panel.string>
+			<panel.string name="can_not_resell">
+				この地域で購入した土地は、再販できないことがあります。
+			</panel.string>
+			<panel.string name="can_change">
+				この地域で購入した土地は、統合または再分割できます。
+			</panel.string>
+			<panel.string name="can_not_change">
+				この地域で購入した土地は、統合/再分割できないことが
+あります。
+			</panel.string>
+			<text font="SansSerifLarge" name="estate_section_lbl">
+				不動産:
+			</text>
+			<text name="estate_name_lbl">
+				名前:
+			</text>
+			<text name="estate_name_text">
+				メインランド
+			</text>
+			<text name="estate_owner_lbl">
+				オーナー:
+			</text>
+			<text name="estate_owner_text">
+				(なし)
+			</text>
+			<text_editor name="covenant_editor">
+				この不動産には約款がありません。
+			</text_editor>
+			<text name="covenant_timestamp_text">
+				最後の更新1969年12月31日水曜日16:00:00
+			</text>
+			<text font="SansSerifLarge" name="region_section_lbl">
+				地域:
+			</text>
+			<text name="region_name_lbl">
+				名前:
+			</text>
+			<text name="region_name_text">
+				Leyla
+			</text>
+			<text name="region_landtype_lbl">
+				種類:
+			</text>
+			<text name="region_landtype_text">
+				メインランド/ホームステッド
+			</text>
+			<text name="region_maturity_lbl">
+				区分:
+			</text>
+			<text name="region_maturity_text">
+				Adult
+			</text>
+			<text name="resellable_lbl">
+				再販:
+			</text>
+			<text name="resellable_clause">
+				この地域(リージョン)にある土地は再販できません。
+			</text>
+			<text name="changeable_lbl">
+				再分割:
+			</text>
+			<text name="changeable_clause">
+				この地域(リージョン)にある土地は統合または分割ができ
+ません。
+			</text>
+		</panel>
+		<panel label="オブジェクト" name="land_objects_panel">
+			<panel.string left="200" name="objects_available_text">
+				[MAX]の内[COUNT]([AVAILABLE]利用可能)
+			</panel.string>
+			<panel.string left="200" name="objects_deleted_text">
+				[MAX]の内[COUNT]([DELETED]を削除)
+			</panel.string>
+			<text name="parcel_object_bonus">
+				地域オブジェクトボーナス要因: [BONUS]
+			</text>
+			<text name="Simulator primitive usage:" width="500">
+				地域全体のプリム使用状況:
+			</text>
+			<text left="200" name="objects_available">
+				[MAX]の内[COUNT]([AVAILABLE]利用可能)
+			</text>
+			<text name="Primitives parcel supports:" width="200">
+				区画でサポートされるプリム数:
+			</text>
+			<text left="200" name="object_contrib_text">
+				[COUNT]
+			</text>
+			<text name="Primitives on parcel:">
+				区画上のプリム数:
+			</text>
+			<text left="200" name="total_objects_text">
+				[COUNT]
+			</text>
+			<text name="Owned by parcel owner:" width="300">
+				区画オーナーによる所有:
+			</text>
+			<text left="200" name="owner_objects_text">
+				[COUNT]
+			</text>
+			<button label="表示" label_selected="表示" name="ShowOwner" right="-145"/>
+			<button label="返却..." label_selected="返却..." name="ReturnOwner..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
+			<text name="Set to group:">
+				グループに設定:
+			</text>
+			<text left="200" name="group_objects_text">
+				[COUNT]
+			</text>
+			<button label="表示" label_selected="表示" name="ShowGroup" right="-145"/>
+			<button label="返却..." label_selected="返却..." name="ReturnGroup..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
+			<text name="Owned by others:">
+				他人による所有:
+			</text>
+			<text left="200" name="other_objects_text">
+				[COUNT]
+			</text>
+			<button label="表示" label_selected="表示" name="ShowOther" right="-145"/>
+			<button label="返却..." label_selected="返却..." name="ReturnOther..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
+			<text name="Selected / sat upon:">
+				選択済み/決定済み:
+			</text>
+			<text left="200" name="selected_objects_text">
+				[COUNT]
+			</text>
+			<text name="Autoreturn" width="500">
+				他の住人のオブジェクトの自動返却(分、0で自動返却なし)
+			</text>
+			<line_editor left_delta="5" name="clean other time" right="-80"/>
+			<text name="Object Owners:" width="150">
+				オブジェクトのオーナー:
+			</text>
+			<button label="リスト更新" label_selected="リスト更新" left="146" name="Refresh List"/>
+			<button label="オブジェクトの返却..." label_selected="オブジェクトの返却..." left="256" name="Return objects..."/>
+			<name_list label="カウント" name="owner list">
+				<name_list.columns label="タイプ" name="type"/>
+				<name_list.columns name="online_status"/>
+				<name_list.columns label="名前" name="name"/>
+				<name_list.columns label="カウント" name="count"/>
+				<name_list.columns label="最新" name="mostrecent"/>
+			</name_list>
+		</panel>
+		<panel label="オプション" name="land_options_panel">
+			<panel.string name="search_enabled_tooltip">
+				この区画を検索結果に表示する
+			</panel.string>
+			<panel.string name="search_disabled_small_tooltip">
+				区画面積が128平方メートルかそれ以下のため、このオプションは無効です。
+大きな区画のみ検索に表示させることが可能です。
+			</panel.string>
+			<panel.string name="search_disabled_permissions_tooltip">
+				あなたはこの区画の設定編集ができないため、このオプションは無効です。
+			</panel.string>
+			<panel.string name="mature_check_mature">
+				Matureコンテンツ
+			</panel.string>
+			<panel.string name="mature_check_adult">
+				Adultコンテンツ
+			</panel.string>
+			<panel.string name="mature_check_mature_tooltip">
+				あなたの区画情報及びコンテンツはMatureとされています。
+			</panel.string>
+			<panel.string name="mature_check_adult_tooltip">
+				あなたの区画情報及びコンテンツはAdultとされています。
+			</panel.string>
+			<panel.string name="landing_point_none">
+				(なし)
+			</panel.string>
+			<panel.string name="push_restrict_text">
+				プッシングを制限
+			</panel.string>
+			<panel.string name="push_restrict_region_text">
+				プッシングを制限 (地域優先)
+			</panel.string>
+			<text name="allow_label">
+				他の住人に以下を許可:
+			</text>
+			<check_box label="地形を編集" name="edit land check" tool_tip="チェックを入れると、他人があなたの土地の地形編集を行うことが可能となります。このオプションのチェックを外しておくことをおすすめします。外した状態であなたの土地の地形編集が可能です。"/>
+			<check_box label="飛行" name="check fly" tool_tip="チェックを入れるとこの土地での飛行が可能となります。チェックを外すと土地に入る際と通り過ぎるときのみ飛行可能となります。"/>
+			<text left="138" name="allow_label2" width="144">
+				オブジェクトの作成:
+			</text>
+			<check_box label="すべての住人" left="280" name="edit objects check"/>
+			<check_box label="グループ" left="380" name="edit group objects check"/>
+			<text left="138" name="allow_label3" width="144">
+				オブジェクトの進入:
+			</text>
+			<check_box label="すべての住人" left="280" name="all object entry check"/>
+			<check_box label="グループ" left="380" name="group object entry check"/>
+			<text left="138" name="allow_label4" width="144">
+				スクリプトの実行:
+			</text>
+			<check_box label="すべての住人" left="280" name="check other scripts"/>
+			<check_box label="グループ" left="380" name="check group scripts"/>
+			<text name="land_options_label">
+				土地オプション:
+			</text>
+			<check_box label="安全(ダメージなし)" name="check safe" tool_tip="チェックを入れるとこの土地でのダメージコンバットが無効になり、「安全」に設定されます。 チェックを外すとダメージコンバットが有効になります。"/>
+			<check_box label="プッシングを制限" name="PushRestrictCheck" tool_tip="スクリプトによるプッシングを制限します。 このオプションを選択することにより、あなたの土地での破壊的行動を妨げることができます。"/>
+			<check_box label="検索に表示>(週L$30)以下の場所" name="ShowDirectoryCheck" tool_tip="検索結果でこの区画を表示させる"/>
+			<combo_box name="land category with adult">
+				<combo_box.item label="全カテゴリ" name="item0"/>
+				<combo_box.item label="Linden所在地" name="item1"/>
+				<combo_box.item label="Adult" name="item2"/>
+				<combo_box.item label="アートとカルチャー" name="item3"/>
+				<combo_box.item label="ビジネス" name="item4"/>
+				<combo_box.item label="教育的" name="item5"/>
+				<combo_box.item label="ゲーム" name="item6"/>
+				<combo_box.item label="たまり場" name="item7"/>
+				<combo_box.item label="新住人に好意的" name="item8"/>
+				<combo_box.item label="公園と自然" name="item9"/>
+				<combo_box.item label="住宅用" name="item10"/>
+				<combo_box.item label="ショッピング" name="item11"/>
+				<combo_box.item label="その他" name="item12"/>
+			</combo_box>
+			<combo_box name="land category">
+				<combo_box.item label="全カテゴリー" name="item0"/>
+				<combo_box.item label="Linden所在地" name="item1"/>
+				<combo_box.item label="アート&amp;カルチャー" name="item3"/>
+				<combo_box.item label="ビジネス" name="item4"/>
+				<combo_box.item label="教育的" name="item5"/>
+				<combo_box.item label="ゲーム" name="item6"/>
+				<combo_box.item label="たまり場" name="item7"/>
+				<combo_box.item label="新住人に好意的" name="item8"/>
+				<combo_box.item label="公園と自然" name="item9"/>
+				<combo_box.item label="住宅用" name="item10"/>
+				<combo_box.item label="ショッピング" name="item11"/>
+				<combo_box.item label="その他" name="item12"/>
+			</combo_box>
+			<check_box label="Matureコンテンツ" name="MatureCheck" tool_tip=""/>
+			<text name="Snapshot:">
+				スナップショット:
+			</text>
+			<texture_picker label="" left="116" name="snapshot_ctrl" tool_tip="写真をクリックして選択"/>
+			<text name="landing_point">
+				着地点: [LANDING]
+			</text>
+			<button label="設定" label_selected="設定" name="Set" tool_tip="訪問者の着地点の設定を行います。この区画内に立って行ってください。"/>
+			<button label="クリア" label_selected="クリア" name="Clear" tool_tip="着地点をクリアしてください。"/>
+			<text name="Teleport Routing: ">
+				テレポート制限:
+			</text>
+			<combo_box name="landing type" tool_tip="Teleport Routing -- select how to handle teleports onto your land.">
+				<combo_box.item label="不可" name="Blocked"/>
+				<combo_box.item label="着地点" name="LandingPoint"/>
+				<combo_box.item label="どこでも" name="Anywhere"/>
+			</combo_box>
+		</panel>
+		<panel label="メディア" name="land_media_panel">
+			<text name="with media:">
+				種類:
+			</text>
+			<combo_box name="media type" tool_tip="URL が動画、ウェブ・ページ、その他のメディアの場合に指定します"/>
+			<text name="at URL:">
+				ホーム URL:
+			</text>
+			<button label="設定..." label_selected="設定..." name="set_media_url"/>
+			<text name="CurrentURL:">
+				現在の URL:
+			</text>
+			<button label="リセット..." label_selected="リセット..." name="reset_media_url"/>
+			<check_box label="URL を非表示" name="hide_media_url" tool_tip="このオプションをオンにすると、許可なしでこの区画情報にアクセスしているユーザーにはメディア URL が表示されません。 これは HTML タイプには使用できませんのでご注意ください。"/>
+			<text name="Description:">
+				説明:
+			</text>
+			<line_editor name="url_description" tool_tip="[再生]/[ロード]ボタンの隣に表示されるテキスト"/>
+			<text name="Media texture:">
+				テクスチ
+ャ取替:
+			</text>
+			<texture_picker label="" name="media texture" tool_tip="写真をクリックして選択"/>
+			<text name="replace_texture_help" width="290">
+				このテクスチャを使用するオブジェクトのプレイをクリックすると、ムービーや Web ページを表示します。
+
+テクスチャを変更するにはサムネイルを選択してください。
+			</text>
+			<check_box label="スケールを自動設定" name="media_auto_scale" tool_tip="このオプションをチェックすると、この区画のコンテンツのスケールが自動的に設定されます。 動作速度と画質が少し低下することがありますが、他のテクスチャーのスケーリングや整列が必要になることはありません。"/>
+			<text name="media_size" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。">
+				サイズ:
+			</text>
+			<spinner name="media_size_width" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"/>
+			<spinner name="media_size_height" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"/>
+			<text name="pixels">
+				ピクセル
+			</text>
+			<text name="Options:">
+				オプション:
+			</text>
+			<check_box label="ループ" name="media_loop" tool_tip="メディアをループ再生します。  メディアの再生が終わったら、最初から再生し直します。"/>
+		</panel>
+		<panel label="オーディオ" name="land_audio_panel">
+			<text name="MusicURL:">
+				音楽 URL:
+			</text>
+			<text name="Sound:">
+				サウンド:
+			</text>
+			<check_box label="ジェスチャーとオブジェクトの音をこの区画だけに限定" name="check sound local"/>
+			<text name="Voice settings:">
+				ボイス:
+			</text>
+			<check_box label="ボイスを有効にする" name="parcel_enable_voice_channel"/>
+			<check_box label="ボイスを有効にする(不動産設定)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+			<check_box label="この区画でのボイス使用を制限する" name="parcel_enable_voice_channel_parcel"/>
+		</panel>
+		<panel label="アクセス" name="land_access_panel">
+			<panel.string name="estate_override">
+				1つ以上のオプションが、不動産レベルで設定されています。
+			</panel.string>
+			<text name="Limit access to this parcel to:">
+				この区画にアクセス
+			</text>
+			<check_box label="パブリック・アクセスを許可" name="public_access"/>
+			<text name="Only Allow">
+				次の住人のアクセスをブロック:
+			</text>
+			<check_box label="Linden Labに支払い情報を登録していない住人" name="limit_payment" tool_tip="支払い情報未確認の住人を排除する"/>
+			<check_box label="年齢確認を済ませていない成人の住人" name="limit_age_verified" tool_tip="年齢確認を済ませていない住人を禁止します。 詳しい情報は [SUPPORT_SITE] をご覧下さい。"/>
+			<check_box label="グループ・アクセスを許可:[GROUP]" name="GroupCheck" tool_tip="[一般]タブで、グループを選択してください。"/>
+			<check_box label="入場許可を販売:" name="PassCheck" tool_tip="この区画への一時的なアクセスを許可"/>
+			<combo_box name="pass_combo">
+				<combo_box.item label="誰でも" name="Anyone"/>
+				<combo_box.item label="グループ" name="Group"/>
+			</combo_box>
+			<spinner label="価格(L$):" name="PriceSpin"/>
+			<spinner label="アクセス時間:" name="HoursSpin"/>
+			<text label="常に許可" name="AllowedText">
+				許可された住人
+			</text>
+			<name_list name="AccessList" tool_tip="([LISTED]リスト入り、[MAX]最大)"/>
+			<button label="追加..." label_selected="追加..." name="add_allowed"/>
+			<button label="削除" label_selected="削除" name="remove_allowed"/>
+			<text label="禁止" name="BanCheck">
+				禁止された住人
+			</text>
+			<name_list name="BannedList" tool_tip="([LISTED]リスト入り、[MAX]最大)"/>
+			<button label="追加..." label_selected="追加..." name="add_banned"/>
+			<button label="削除" label_selected="削除" name="remove_banned"/>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_animation_preview.xml b/indra/newview/skins/default/xui/ja/floater_animation_preview.xml
index b61007d86e6..1bc12b839ce 100644
--- a/indra/newview/skins/default/xui/ja/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_animation_preview.xml
@@ -1,101 +1,183 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Animation Preview" title="">
-	<text name="name_label">
-		名前:
-	</text>
-	<text name="description_label">
-		説明:
-	</text>
-	<spinner label="優先順位" name="priority"
-	     tool_tip="このアニメーションで上書き可能な他のアニメーションを制御します。" />
-	<text name="preview_label">
-		同時進行行動
-	</text>
-	<combo_box label="" name="preview_base_anim"
-	     tool_tip="アバターが普通の行動をするときのアニメーションの動きをテストするためにこれを使います。">
-		<combo_box.item name="Standing" label="立つ" />
-		<combo_box.item name="Walking" label="歩く" />
-		<combo_box.item name="Sitting" label="座る" />
-		<combo_box.item name="Flying" label="飛行" />
-	</combo_box>
-	<pad height="7" />
-	<check_box label="ループ" name="loop_check"
-	     tool_tip="このアニメーションをループ再生します。" />
-	<spinner label="イン(%)" name="loop_in_point"
-	     tool_tip="アニメーションのループ復帰点を設定します。" label_width="45" left="70" width="100" />
-	<spinner label="アウト(%)" name="loop_out_point"
-	     tool_tip="アニメーションのループ終了点を設定します。" label_width="60" left="170" width="100" />
-	<text name="hand_label">
-		手の動き
-	</text>
-	<combo_box label="" name="hand_pose_combo"
-	     tool_tip="アニメーションの手の動きをコントロールします。">
-		<combo_box.item name="Spread" label="広がる" />
-		<combo_box.item name="Relaxed" label="リラックス" />
-		<combo_box.item name="PointBoth" label="両方を指す" />
-		<combo_box.item name="Fist" label="拳" />
-		<combo_box.item name="RelaxedLeft" label="リラックス左" />
-		<combo_box.item name="PointLeft" label="左を指す" />
-		<combo_box.item name="FistLeft" label="拳左" />
-		<combo_box.item name="RelaxedRight" label="リラックス右" />
-		<combo_box.item name="PointRight" label="右を指す" />
-		<combo_box.item name="FistRight" label="拳右" />
-		<combo_box.item name="SaluteRight" label="敬礼右" />
-		<combo_box.item name="Typing" label="入力する" />
-		<combo_box.item name="PeaceRight" label="ピース・サイン右" />
-	</combo_box>
-	<text name="emote_label">
-		表現
-	</text>
-	<combo_box label="" name="emote_combo"
-	     tool_tip="アニメーションの顔を表情をコントロールします。">
-		<combo_box.item name="[None]" label="None]" />
-		<combo_box.item name="Aaaaah" label="アーーーーー" />
-		<combo_box.item name="Afraid" label="怖れ" />
-		<combo_box.item name="Angry" label="怒り" />
-		<combo_box.item name="BigSmile" label="満面の笑み" />
-		<combo_box.item name="Bored" label="退屈" />
-		<combo_box.item name="Cry" label="泣く" />
-		<combo_box.item name="Disdain" label="侮蔑" />
-		<combo_box.item name="Embarrassed" label="困惑" />
-		<combo_box.item name="Frown" label="しかめっ面" />
-		<combo_box.item name="Kiss" label="キス" />
-		<combo_box.item name="Laugh" label="笑う" />
-		<combo_box.item name="Plllppt" label="Plllppt" />
-		<combo_box.item name="Repulsed" label="嫌悪感" />
-		<combo_box.item name="Sad" label="悲しい" />
-		<combo_box.item name="Shrug" label="肩をすくめる" />
-		<combo_box.item name="Smile" label="笑み" />
-		<combo_box.item name="Surprise" label="驚き" />
-		<combo_box.item name="Wink" label="ウィンク" />
-		<combo_box.item name="Worry" label="心配" />
-	</combo_box>
-	<spinner label="フェーズイン(秒)" name="ease_in_time"
-	     tool_tip="アニメーションのブレンド・イン時間(秒)" />
-	<spinner label="フェーズアウト(秒)" name="ease_out_time"
-	     tool_tip="アニメーションのブレンド・アウト時間(秒)" />
-	<button label="" name="play_btn"
-	     tool_tip="アニメーションの再生/一時停止" />
-	<button label="" name="stop_btn" tool_tip="アニメーションの再生を停止" />
-	<slider label="" name="playback_slider" />
-	<text name="bad_animation_text">
-		アニメーション・ファイルを読み込めません。
- 
- Poser 4からエクスポートされたBVHファイルを推奨します。
-	</text>
-	<button label="取り消し" name="cancel_btn" />
-	<button label="アップロードL$[AMOUNT]" name="ok_btn" />
-	<text name="failed_to_initialize">
-		モーションを初期化できませんでした
-	</text>
-	<text name="anim_too_long">
-		アニメーションファイルの長さは[LENGTH]秒です。
-
-アニメーションの最大の長さは[MAX_LENGTH]秒です。
-	</text>
-	<text name="failed_file_read">
-		アニメーションファイルを読み取れません。
-
-[STATUS]
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview" title="">
+	<floater.string name="failed_to_initialize">
+		モーションを初期化できませんでした
+	</floater.string>
+	<floater.string name="anim_too_long">
+		アニメーションファイルの長さは[LENGTH]秒です。
+
+アニメーションの最大の長さは[MAX_LENGTH]秒です。
+	</floater.string>
+	<floater.string name="failed_file_read">
+		アニメーションファイルを読み取れません。
+
+[STATUS]
+	</floater.string>
+	<floater.string name="E_ST_OK">
+		Ok
+	</floater.string>
+	<floater.string name="E_ST_EOF">
+		不完全なファイル。
+	</floater.string>
+	<floater.string name="E_ST_NO_CONSTRAINT">
+		制約定義を読みとれません。
+	</floater.string>
+	<floater.string name="E_ST_NO_FILE">
+		BVH ファイルを開けません。
+	</floater.string>
+	<floater.string name="E_ST_NO_HIER">
+		無効な HIERARCHY ヘッダーです。.
+	</floater.string>
+	<floater.string name="E_ST_NO_JOINT">
+		ROOT または JOINT が見つかりません。
+	</floater.string>
+	<floater.string name="E_ST_NO_NAME">
+		JOINT ネームを取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_OFFSET">
+		OFFSET が見つかりません。
+	</floater.string>
+	<floater.string name="E_ST_NO_CHANNELS">
+		CHANNELS が見つかりません。
+	</floater.string>
+	<floater.string name="E_ST_NO_ROTATION">
+		回転順序を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_AXIS">
+		回転軸を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_MOTION">
+		MOTION が見つかりません。
+	</floater.string>
+	<floater.string name="E_ST_NO_FRAMES">
+		フレーム数を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_FRAME_TIME">
+		フレームタイムを取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_POS">
+		ポジション値を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_ROT">
+		回転値を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_FILE">
+		Cannot open translation file.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_HEADER">
+		Cannot read translation header.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_NAME">
+		Cannot read translation names.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_IGNORE">
+		Cannot read translation ignore value.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_RELATIVE">
+		Cannot read translation relative value.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_OUTNAME">
+		Cannot read translation outname value.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MATRIX">
+		Cannot read translation matrix.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MERGECHILD">
+		Mergechild 名を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MERGEPARENT">
+		Mergeparent 名を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_PRIORITY">
+		プロパティ値を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_LOOP">
+		ループ値を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EASEIN">
+		Cannot get easeIn values.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EASEOUT">
+		easeOut 値を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_HAND">
+		Hand morph 値を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EMOTE">
+		エモート名を読みとれません。
+	</floater.string>
+	<text name="name_label">
+		名前:
+	</text>
+	<text name="description_label">
+		説明:
+	</text>
+	<spinner label="優先順位" name="priority" tool_tip="このアニメーションで上書き可能な他のアニメーションを制御します。"/>
+	<check_box label="ループ" name="loop_check" tool_tip="このアニメーションをループ再生します。"/>
+	<spinner label="イン(%)" label_width="45" left="70" name="loop_in_point" tool_tip="アニメーションのループ復帰点を設定します。" width="100"/>
+	<spinner label="アウト(%)" label_width="60" left="170" name="loop_out_point" tool_tip="アニメーションのループ終了点を設定します。" width="100"/>
+	<text name="hand_label">
+		手の動き
+	</text>
+	<combo_box label="" name="hand_pose_combo" tool_tip="アニメーションの手の動きをコントロールします。">
+		<combo_box.item label="広がる" name="Spread"/>
+		<combo_box.item label="リラックス" name="Relaxed"/>
+		<combo_box.item label="両方を指す" name="PointBoth"/>
+		<combo_box.item label="拳" name="Fist"/>
+		<combo_box.item label="リラックス左" name="RelaxedLeft"/>
+		<combo_box.item label="左を指す" name="PointLeft"/>
+		<combo_box.item label="拳左" name="FistLeft"/>
+		<combo_box.item label="リラックス右" name="RelaxedRight"/>
+		<combo_box.item label="右を指す" name="PointRight"/>
+		<combo_box.item label="拳右" name="FistRight"/>
+		<combo_box.item label="敬礼右" name="SaluteRight"/>
+		<combo_box.item label="入力する" name="Typing"/>
+		<combo_box.item label="ピース・サイン右" name="PeaceRight"/>
+	</combo_box>
+	<text name="emote_label">
+		表現
+	</text>
+	<combo_box label="" name="emote_combo" tool_tip="アニメーションの顔を表情をコントロールします。">
+		<combo_box.item label="None]" name="[None]"/>
+		<combo_box.item label="アーーーーー" name="Aaaaah"/>
+		<combo_box.item label="怖れ" name="Afraid"/>
+		<combo_box.item label="怒り" name="Angry"/>
+		<combo_box.item label="満面の笑み" name="BigSmile"/>
+		<combo_box.item label="退屈" name="Bored"/>
+		<combo_box.item label="泣く" name="Cry"/>
+		<combo_box.item label="侮蔑" name="Disdain"/>
+		<combo_box.item label="困惑" name="Embarrassed"/>
+		<combo_box.item label="しかめっ面" name="Frown"/>
+		<combo_box.item label="キス" name="Kiss"/>
+		<combo_box.item label="笑う" name="Laugh"/>
+		<combo_box.item label="Plllppt" name="Plllppt"/>
+		<combo_box.item label="嫌悪感" name="Repulsed"/>
+		<combo_box.item label="悲しい" name="Sad"/>
+		<combo_box.item label="肩をすくめる" name="Shrug"/>
+		<combo_box.item label="笑み" name="Smile"/>
+		<combo_box.item label="驚き" name="Surprise"/>
+		<combo_box.item label="ウィンク" name="Wink"/>
+		<combo_box.item label="心配" name="Worry"/>
+	</combo_box>
+	<text name="preview_label">
+		同時進行行動
+	</text>
+	<combo_box label="" name="preview_base_anim" tool_tip="アバターが普通の行動をするときのアニメーションの動きをテストするためにこれを使います。">
+		<combo_box.item label="立つ" name="Standing"/>
+		<combo_box.item label="歩く" name="Walking"/>
+		<combo_box.item label="座る" name="Sitting"/>
+		<combo_box.item label="飛行" name="Flying"/>
+	</combo_box>
+	<spinner label="フェーズイン(秒)" name="ease_in_time" tool_tip="アニメーションのブレンド・イン時間(秒)"/>
+	<spinner label="フェーズアウト(秒)" name="ease_out_time" tool_tip="アニメーションのブレンド・アウト時間(秒)"/>
+	<button label="" name="play_btn" tool_tip="アニメーションの再生/一時停止"/>
+	<button label="" name="stop_btn" tool_tip="アニメーションの再生を停止"/>
+	<slider label="" name="playback_slider"/>
+	<text name="bad_animation_text">
+		アニメーション・ファイルを読み込めません。
+ 
+ Poser 4からエクスポートされたBVHファイルを推奨します。
+	</text>
+	<button label="取り消し" name="cancel_btn"/>
+	<button label="アップロードL$[AMOUNT]" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml b/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml
index ea076846529..eebc7eb88e6 100644
--- a/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="住人を選択" min_width="275" width="275">
-	<tab_container name="ResidentChooserTabs" width="265">
-		<panel label="検索" name="SearchPanel" width="145">
-			<text name="InstructSearchResidentName">
-				住人の名前の一部を入力:
-			</text>
-			<button label="検索" label_selected="検索" name="Find"/>
-		</panel>
-		<panel label="コーリングカード" name="CallingCardsPanel" width="145">
-			<text name="InstructSelectCallingCard">
-				コーリングカードを選択:
-			</text>
-		</panel>
-		<panel label="自分の近く" name="NearMePanel" width="145">
-			<text name="InstructSelectResident">
-				近くの住人を選択:
-			</text>
-			<button label="リスト更新" label_selected="リスト更新" name="Refresh"/>
-			<slider label="範囲" name="near_me_range"/>
-			<text name="meters" width="50">
-				メートル
-			</text>
-		</panel>
-	</tab_container>
-	<button label="選択" label_selected="選択" name="Select"/>
-	<button label="取り消し" label_selected="取り消し" name="Cancel"/>
-	<string name="not_found">
-		「[TEXT]」は見つかりませんでした
-	</string>
-	<string name="no_one_near">
-		近くに誰もいません
-	</string>
-	<string name="no_results">
-		検索結果:ゼロ
-	</string>
-	<string name="searching">
-		検索中...
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater min_width="275" name="avatarpicker" title="住人を選択" width="275">
+	<tab_container name="ResidentChooserTabs" width="265">
+		<panel label="検索" name="SearchPanel" width="145">
+			<text name="InstructSearchResidentName">
+				名前の一部を入力:
+			</text>
+			<button label="検索" label_selected="検索" name="Find"/>
+		</panel>
+		<panel label="コーリングカード" name="CallingCardsPanel" width="145">
+			<text name="InstructSelectCallingCard">
+				コーリングカードを選択:
+			</text>
+		</panel>
+		<panel label="自分の近く" name="NearMePanel" width="145">
+			<text name="InstructSelectResident">
+				近くの人を選択:
+			</text>
+			<button label="リスト更新" label_selected="リスト更新" name="Refresh"/>
+			<slider label="範囲" name="near_me_range"/>
+			<text name="meters" width="50">
+				メートル
+			</text>
+		</panel>
+	</tab_container>
+	<button label="OK" label_selected="OK" name="Select"/>
+	<button label="取り消し" label_selected="取り消し" name="Cancel"/>
+	<string name="not_found">
+		「[TEXT]」は見つかりませんでした
+	</string>
+	<string name="no_one_near">
+		近くに誰もいません
+	</string>
+	<string name="no_results">
+		検索結果:ゼロ
+	</string>
+	<string name="searching">
+		検索中...
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_beacons.xml b/indra/newview/skins/default/xui/ja/floater_beacons.xml
index 2065656732f..4e89e11d0d2 100644
--- a/indra/newview/skins/default/xui/ja/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/ja/floater_beacons.xml
@@ -1,15 +1,21 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="ビーコン(標識)">
-	<panel name="beacons_panel">
-		<check_box label="タッチオンリーのスクリプトを含むオブジェクト" name="touch_only"/>
-		<check_box label="スクリプト・オブジェクト" name="scripted"/>
-		<check_box label="物理的オブジェクト" name="physical"/>
-		<check_box label="音源" name="sounds"/>
-		<check_box label="パーティクル源" name="particles"/>
-		<check_box label="ハイライトのレンダリング" name="highlights"/>
-		<check_box label="ビーコン(標識)のレンダリング" name="beacons"/>
-		<text name="beacon_width_label">
-			ビーコン(標識)の幅
-		</text>
-	</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="beacons" title="ビーコン(標識)">
+	<panel name="beacons_panel">
+		<text name="label_show">
+			表示:
+		</text>
+		<check_box label="ビーコン(標識)" name="beacons"/>
+		<check_box label="ハイライト" name="highlights"/>
+		<text name="beacon_width_label" tool_tip="ビーコン(標識)の幅">
+			幅:
+		</text>
+		<text name="label_objects">
+			対象オブジェクト:
+		</text>
+		<check_box label="物理的" name="physical"/>
+		<check_box label="スクリプト" name="scripted"/>
+		<check_box label="触れる" name="touch_only"/>
+		<check_box label="音源" name="sounds"/>
+		<check_box label="パーティクル源" name="particles"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_build_options.xml b/indra/newview/skins/default/xui/ja/floater_build_options.xml
index 49348aaa105..8b5e88fa7f4 100644
--- a/indra/newview/skins/default/xui/ja/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/ja/floater_build_options.xml
@@ -1,8 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="build options floater" title="グリッドのオプション">
-	<spinner label="グリッド単位(メートル)" name="GridResolution" />
-	<spinner label="グリッド範囲(メートル)" name="GridDrawSize" />
-	<check_box label="サブユニット・スナッピングを有効化" name="GridSubUnit" />
-	<check_box label="断面を表示" name="GridCrossSection" />
-	<slider label="グリッドの不透明度" name="GridOpacity" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="build options floater" title="グリッドのオプション">
+	<spinner label="グリッドユニット(メートル)" name="GridResolution"/>
+	<spinner label="グリッド範囲(メートル)" name="GridDrawSize"/>
+	<check_box label="サブユニットにスナップ" name="GridSubUnit"/>
+	<check_box label="横断面を表示" name="GridCrossSection"/>
+	<text name="grid_opacity_label" tool_tip="グリッドの透明度">
+		透明度:
+	</text>
+	<slider label="グリッドの不透明度" name="GridOpacity"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
index 6ee90038fb7..b86a3647fe3 100644
--- a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
@@ -1,44 +1,53 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="コンテンツ権限の一括変更">
-	<text name="applyto">
-		コンテンツの種類
-	</text>
-	<check_box label="アニメーション" name="check_animation"/>
-	<check_box label="身体部位" name="check_bodypart"/>
-	<check_box label="服" name="check_clothing"/>
-	<check_box label="ジェスチャー" name="check_gesture"/>
-	<check_box label="ランドマーク" name="check_landmark"/>
-	<check_box label="ノートカード" name="check_notecard"/>
-	<check_box label="オブジェクト" name="check_object"/>
-	<check_box label="スクリプト" name="check_script"/>
-	<check_box label="サウンド" name="check_sound"/>
-	<check_box label="テクスチャー" name="check_texture"/>
-	<button label="全て選択" label_selected="全て" name="check_all"/>
-	<button label="全て解除" label_selected="なし" name="check_none"/>
-	<text name="newperms">
-		新しい権限
-	</text>
-	<check_box label="グループで共同管理" name="share_with_group"/>
-	<check_box label="誰に対してもコピーを許可" name="everyone_copy"/>
-	<text name="NextOwnerLabel">
-		次のオーナーができる操作:
-	</text>
-	<check_box label="修正" name="next_owner_modify"/>
-	<check_box label="コピー" name="next_owner_copy"/>
-	<check_box label="再販/プレゼント" name="next_owner_transfer"/>
-	<button label="ヘルプ" name="help"/>
-	<button label="適用" name="apply"/>
-	<button label="閉じる" name="close"/>
-	<string name="nothing_to_modify_text">
-		選択した中に編集できないコンテンツが含まれています
-	</string>
-	<string name="status_text">
-		[NAME]に権限を設定中です。
-	</string>
-	<string name="start_text">
-		権限変更リクエストをしています
-	</string>
-	<string name="done_text">
-		権限変更リクエストが完了しました
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterbulkperms" title="コンテンツ権限を編集">
+	<floater.string name="nothing_to_modify_text">
+		選択した中に編集できないコンテンツが含まれています
+	</floater.string>
+	<floater.string name="status_text">
+		[NAME]に権限を設定中です。
+	</floater.string>
+	<floater.string name="start_text">
+		権限変更リクエストをしています
+	</floater.string>
+	<floater.string name="done_text">
+		権限変更リクエストが完了しました
+	</floater.string>
+	<check_box label="アニメーション" name="check_animation"/>
+	<icon name="icon_animation" tool_tip="アニメーション"/>
+	<check_box label="身体部位" name="check_bodypart"/>
+	<icon name="icon_bodypart" tool_tip="身体部位"/>
+	<check_box label="服" name="check_clothing"/>
+	<icon name="icon_clothing" tool_tip="衣類"/>
+	<check_box label="ジェスチャー" name="check_gesture"/>
+	<icon name="icon_gesture" tool_tip="ジェスチャー"/>
+	<check_box label="ノートカード" name="check_notecard"/>
+	<icon name="icon_notecard" tool_tip="ノートカード"/>
+	<check_box label="オブジェクト" name="check_object"/>
+	<icon name="icon_object" tool_tip="オブジェクト"/>
+	<check_box label="スクリプト" name="check_script"/>
+	<icon name="icon_script" tool_tip="スクリプト"/>
+	<check_box label="サウンド" name="check_sound"/>
+	<icon name="icon_sound" tool_tip="サウンド"/>
+	<check_box label="テクスチャー" name="check_texture"/>
+	<button label="√ すべて" label_selected="全て" name="check_all"/>
+	<button label="クリア" label_selected="なし" name="check_none"/>
+	<text name="newperms">
+		新しいコンテンツ権限
+	</text>
+	<text name="GroupLabel">
+		グループ:
+	</text>
+	<check_box label="共有" name="share_with_group"/>
+	<text name="AnyoneLabel">
+		すべての人:
+	</text>
+	<check_box label="コピー" name="everyone_copy"/>
+	<text name="NextOwnerLabel">
+		次の所有者:
+	</text>
+	<check_box label="修正" name="next_owner_modify"/>
+	<check_box label="コピー" name="next_owner_copy"/>
+	<check_box initial_value="true" label="再販/プレゼント" name="next_owner_transfer" tool_tip="次の所有者はこのオブジェクトを他人にあげたり再販することができます"/>
+	<button label="OK" name="apply"/>
+	<button label="キャンセル" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_object.xml b/indra/newview/skins/default/xui/ja/floater_buy_object.xml
index 1b5dd8b9794..fc0418f8088 100644
--- a/indra/newview/skins/default/xui/ja/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/ja/floater_buy_object.xml
@@ -1,26 +1,26 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="contents" title="オブジェクトのコピーを購入">
-	<text name="contents_text">
-		およびそのコンテンツ:
-	</text>
-	<text name="buy_text">
-		[NAME]からL$[AMOUNT]で購入しますか?
-	</text>
-	<button label="取消" label_selected="取消" name="cancel_btn" />
-	<button label="購入" label_selected="購入" name="buy_btn" />
-	<text name="title_buy_text">
-		購入
-	</text>
-	<string name="title_buy_copy_text">
-		次のものを買う
-	</string>
-	<text name="no_copy_text">
-		(コピーなし)
-	</text>
-	<text name="no_modify_text">
-		(修正なし)
-	</text>
-	<text name="no_transfer_text">
-		(転送なし)
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="contents" title="オブジェクトのコピーを購入">
+	<text name="contents_text">
+		内容:
+	</text>
+	<text name="buy_text">
+		[NAME]からL$[AMOUNT]で購入しますか?
+	</text>
+	<button label="取消" label_selected="取消" name="cancel_btn"/>
+	<button label="購入" label_selected="購入" name="buy_btn"/>
+	<text name="title_buy_text">
+		購入
+	</text>
+	<string name="title_buy_copy_text">
+		次のものを買う
+	</string>
+	<text name="no_copy_text">
+		(コピーなし)
+	</text>
+	<text name="no_modify_text">
+		(修正なし)
+	</text>
+	<text name="no_transfer_text">
+		(転送なし)
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_camera.xml b/indra/newview/skins/default/xui/ja/floater_camera.xml
index bb87b194a47..06e42a29d9b 100644
--- a/indra/newview/skins/default/xui/ja/floater_camera.xml
+++ b/indra/newview/skins/default/xui/ja/floater_camera.xml
@@ -1,16 +1,23 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="camera_floater">
-	<floater.string name="rotate_tooltip">
-		フォーカスを中心にカメラを回転
-	</floater.string>
-	<floater.string name="zoom_tooltip">
-		フォーカスに向けてカメラをズーム
-	</floater.string>
-	<floater.string name="move_tooltip">
-		カメラを上下左右に移動
-	</floater.string>
-	<panel name="controls">
-		<joystick_track name="cam_track_stick" tool_tip="カメラを上下左右に移動"/>
-		<joystick_zoom name="zoom" tool_tip="フォーカスに向けてカメラをズーム"/>
-	</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater">
+	<floater.string name="rotate_tooltip">
+		フォーカスを中心にカメラを回転
+	</floater.string>
+	<floater.string name="zoom_tooltip">
+		フォーカスに向けてカメラをズーム
+	</floater.string>
+	<floater.string name="move_tooltip">
+		カメラを上下左右に移動
+	</floater.string>
+	<panel name="controls">
+		<joystick_track name="cam_track_stick" tool_tip="カメラを上下左右に移動"/>
+		<joystick_zoom name="zoom" tool_tip="向いてる方法にカメラをズーム"/>
+		<joystick_rotate name="cam_rotate_stick" tool_tip="自分を軸にカメラを回す"/>
+	</panel>
+	<panel name="buttons">
+		<button label="" name="orbit_btn" tool_tip="カメラを旋回"/>
+		<button label="" name="pan_btn" tool_tip="カメラを水平・垂直移動"/>
+		<button label="" name="avatarview_btn" tool_tip="アバター視点"/>
+		<button label="" name="freecamera_btn" tool_tip="オブジェクトを見る"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_color_picker.xml b/indra/newview/skins/default/xui/ja/floater_color_picker.xml
index 8047e49b756..cd871f72143 100644
--- a/indra/newview/skins/default/xui/ja/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/ja/floater_color_picker.xml
@@ -1,31 +1,31 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="ColorPicker" title="カラー・ピッカー">
-	<text name="r_val_text">
-		赤:
-	</text>
-	<text name="g_val_text">
-		緑:
-	</text>
-	<text name="b_val_text">
-		青:
-	</text>
-	<text name="h_val_text">
-		色相:
-	</text>
-	<text name="s_val_text">
-		色調:
-	</text>
-	<text name="l_val_text">
-		輝度:
-	</text>
-	<check_box label="ただちに適用" name="apply_immediate" />
-	<button label="" label_selected="" name="color_pipette" />
-	<button label="取り消し" label_selected="取り消し" name="cancel_btn" />
-	<button label="選択" label_selected="選択" name="select_btn" />
-	<text name="Current color:">
-		現在の色:
-	</text>
-	<text name="(Drag below to save.)">
-		ドラッグして保存
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ColorPicker" title="カラー・ピッカー">
+	<text name="r_val_text">
+		赤:
+	</text>
+	<text name="g_val_text">
+		緑:
+	</text>
+	<text name="b_val_text">
+		青:
+	</text>
+	<text name="h_val_text">
+		色相:
+	</text>
+	<text name="s_val_text">
+		色調:
+	</text>
+	<text name="l_val_text">
+		輝度:
+	</text>
+	<check_box label="今すぐ適用" name="apply_immediate"/>
+	<button label="" label_selected="" name="color_pipette"/>
+	<button label="取り消し" label_selected="取り消し" name="cancel_btn"/>
+	<button label="OK" label_selected="選択" name="select_btn"/>
+	<text name="Current color:">
+		現在の色:
+	</text>
+	<text name="(Drag below to save.)">
+		ドラッグして保存
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_god_tools.xml b/indra/newview/skins/default/xui/ja/floater_god_tools.xml
index 8fe41a823a9..e21b06988c3 100644
--- a/indra/newview/skins/default/xui/ja/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_god_tools.xml
@@ -1,144 +1,97 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="godtools floater" title="ゴッド・ツール">
-	<tab_container name="GodTools Tabs">
-		<panel label="グリッド" name="grid">
-			<button label="すべてのユーザーを追い出す"
-			     label_selected="すべてのユーザーを追い出す"
-			     name="Kick all users" />
-			<button label="この地域の地図の表示キャッシュを消去"
-			     label_selected="この地域の地図の表示キャッシュを消去"
-			     name="Flush This Region&apos;s Map Visibility Caches" />
-		</panel>
-		<panel label="地域" name="region">
-			<text name="Sim Name:">
-				シム名:
-			</text>
-			<check_box label="準備" name="check prelude"
-			     tool_tip="この設定により、この地域の準備をします。" />
-			<check_box label="太陽固定" name="check fixed sun"
-			     tool_tip="太陽位置を固定([地域/不動産]>[地形]の場合と同様)" />
-			<check_box label="テレポートのホームをリセット" name="check reset home"
-			     tool_tip="住人がテレポートで去ったとき、彼らのホームを目的地にリセットする。" />
-			<check_box label="可視" name="check visible"
-			     tool_tip="この設定により、この地域をゴッド・モード以外でも可視にします。" />
-			<check_box label="ダメージ" name="check damage"
-			     tool_tip="この設定により、この地域内でダメージを有効化します。" />
-			<check_box label="トラフィック・トラッキングをブロック"
-			     name="block dwell"
-			     tool_tip="この設定により、この地域内のトラフィック計算をオフにします。" />
-			<check_box label="土地整備をブロック" name="block terraform"
-			     tool_tip="この設定により、この地域内での土地整備を禁止" />
-			<check_box label="サンドボックス" name="is sandbox"
-			     tool_tip="これがサンドボックス地域でも切り替え" />
-			<button label="地形を構築する" label_selected="地形を構築する"
-			     name="Bake Terrain"
-			     tool_tip="現在の地形をデフォルトとして保存します。" />
-			<button label="地形を元に戻す" label_selected="地形を元に戻す"
-			     name="Revert Terrain"
-			     tool_tip="現在の地形をデフォルトに置換します。" />
-			<button label="地形を交換" label_selected="地形を交換" name="Swap Terrain"
-			     tool_tip="現在の地形をデフォルトと入れ替えます。" />
-			<text name="estate id">
-				不動産ID:
-			</text>
-			<text name="parent id">
-				親ID:
-			</text>
-			<line_editor name="parentestate" tool_tip="これは、この地域の親不動産です。" />
-			<text name="Grid Pos: ">
-				グリッド位置:
-			</text>
-			<line_editor name="gridposx"
-			     tool_tip="これは、この地域のグリッドxの位置です。" />
-			<line_editor name="gridposy"
-			     tool_tip="これは、この地域のグリッドyの位置です。" />
-			<text name="Redirect to Grid: ">
-				グリッドにリダイレクト:
-			</text>
-			<text name="billable factor text">
-				請求率:
-			</text>
-			<text name="land cost text">
-				平方メートル当たりL$:
-			</text>
-			<button label="æ›´æ–°" label_selected="æ›´æ–°" name="Refresh"
-			     tool_tip="上記の情報を更新するには、ここをクリックします。" />
-			<button label="適用" label_selected="適用" name="Apply"
-			     tool_tip="上記の変更を適用するには、ここをクリックします。" />
-			<button label="地域を選択" label_selected="地域を選択" name="Select Region"
-			     tool_tip="土地ツールで地域全体を選択してください。" />
-			<button label="ただちに自動保存する"
-			     label_selected="ただちに自動保存する" name="Autosave now"
-			     tool_tip="Gzip状態を自動保存ディレクトリに保存します。" />
-		</panel>
-		<panel label="オブジェクト" name="objects">
-			<text name="Sim Name:">
-				シム名:
-			</text>
-			<text name="region name">
-				ウェルシュ
-			</text>
-			<check_box label="スクリプトを無効化" name="disable scripts"
-			     tool_tip="この設定により、この地域内のスクリプトをすべて無効化" />
-			<check_box label="衝突を無効化" name="disable collisions"
-			     tool_tip="この設定により、この地域内の非エージェント衝突を無効化" />
-			<check_box label="物理作用を無効化" name="disable physics"
-			     tool_tip="この設定により、この地域内の物理的作用をすべて無効化" />
-			<button label="適用" label_selected="適用" name="Apply"
-			     tool_tip="上記の変更を適用するには、ここをクリックします。" />
-			<button label="対象の設定" label_selected="対象の設定" name="Set Target"
-			     tool_tip="オブジェクト削除の対象となるアバターを設定してください。" />
-			<text name="target_avatar_name">
-				(対象なし)
-			</text>
-			<button
-			     label="他の土地における対象のスクリプト・オブジェクトを削除"
-			     label_selected="他の土地における対象のスクリプト・オブジェクトを削除"
-			     name="Delete Target&apos;s Scripted Objects On Others Land"
-			     tool_tip="この地域において対象が所有していないスクリプト・オブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。" />
-			<button
-			     label="「すべての」土地における対象のスクリプト・オブジェクトを削除"
-			     label_selected="「すべての」土地における対象のスクリプト・オブジェクトを削除"
-			     name="Delete Target&apos;s Scripted Objects On *Any* Land"
-			     tool_tip="この地域において対象が所有しているスクリプト・オブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。" />
-			<button label="対象のオブジェクトを「すべて」削除"
-			     label_selected="対象のオブジェクトを「すべて」削除"
-			     name="Delete *ALL* Of Target&apos;s Objects"
-			     tool_tip="この地域において対象が所有しているオブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。" />
-			<button label="トップ・コライダーを取得"
-			     label_selected="トップ・コライダーを取得"
-			     name="Get Top Colliders"
-			     tool_tip="最も段階の狭いコールバックが発生したオブジェクトのリストを取得します。" />
-			<button label="トップ・スクリプトを取得"
-			     label_selected="トップ・スクリプトを取得"
-			     name="Get Top Scripts"
-			     tool_tip="スクリプトの起動に最も時間を費やしているオブジェクトのリストを取得します。" />
-			<button label="スクリプト・ダイジェスト"
-			     label_selected="スクリプト・ダイジェスト" name="Scripts digest"
-			     tool_tip="すべてのスクリプトとそれらの使用回数のリストを取得します。" />
-		</panel>
-		<panel label="要求" name="request">
-			<text name="Destination:">
-				目的地:
-			</text>
-			<combo_box name="destination">
-				<combo_box.item name="item1" label="選択"/>
-				<combo_box.item name="item2" label="エージェント地域"/>
-			</combo_box>
-			<text name="Request:">
-				要求:
-			</text>
-			<combo_box name="request">
-				<combo_box.item name="item1" label="コライダー<ステップ>"/>
-				<combo_box.item name="item2" label="スクリプト<回数>、<オプション・パターン>"/>
-				<combo_box.item name="item3" label="オブジェクト<パターン>"/>
-				<combo_box.item name="item4" label="rez <asset_id>"/>
-			</combo_box>
-			<text name="Parameter:">
-				パラメーター:
-			</text>
-			<button label="リクエストする" label_selected="リクエストする"
-			     name="Make Request" />
-		</panel>
-	</tab_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="godtools floater" title="ゴッド・ツール">
+	<tab_container name="GodTools Tabs">
+		<panel label="グリッド" name="grid">
+			<button label="すべてのユーザーを追い出す" label_selected="すべてのユーザーを追い出す" name="Kick all users"/>
+			<button label="この地域の地図の表示キャッシュを消去" label_selected="この地域の地図の表示キャッシュを消去" name="Flush This Region&apos;s Map Visibility Caches"/>
+		</panel>
+		<panel label="地域" name="region">
+			<text name="Sim Name:">
+				シム名:
+			</text>
+			<check_box label="準備" name="check prelude" tool_tip="この設定により、この地域の準備をします。"/>
+			<check_box label="太陽固定" name="check fixed sun" tool_tip="太陽位置を固定([地域/不動産]>[地形]の場合と同様)"/>
+			<check_box label="テレポートのホームをリセット" name="check reset home" tool_tip="住人がテレポートで去ったとき、彼らのホームを目的地にリセットする。"/>
+			<check_box label="可視" name="check visible" tool_tip="この設定により、この地域をゴッド・モード以外でも可視にします。"/>
+			<check_box label="ダメージ" name="check damage" tool_tip="この設定により、この地域内でダメージを有効化します。"/>
+			<check_box label="トラフィック・トラッキングをブロック" name="block dwell" tool_tip="この設定により、この地域内のトラフィック計算をオフにします。"/>
+			<check_box label="土地整備をブロック" name="block terraform" tool_tip="この設定により、この地域内での土地整備を禁止"/>
+			<check_box label="サンドボックス" name="is sandbox" tool_tip="これがサンドボックス地域でも切り替え"/>
+			<button label="地形を構築する" label_selected="地形を構築する" name="Bake Terrain" tool_tip="現在の地形をデフォルトとして保存します。"/>
+			<button label="地形を元に戻す" label_selected="地形を元に戻す" name="Revert Terrain" tool_tip="現在の地形をデフォルトに置換します。"/>
+			<button label="地形を交換" label_selected="地形を交換" name="Swap Terrain" tool_tip="現在の地形をデフォルトと入れ替えます。"/>
+			<text name="estate id">
+				不動産ID:
+			</text>
+			<text name="parent id">
+				親ID:
+			</text>
+			<line_editor name="parentestate" tool_tip="これは、この地域の親不動産です。"/>
+			<text name="Grid Pos: ">
+				グリッド位置:
+			</text>
+			<line_editor name="gridposx" tool_tip="これは、この地域のグリッドxの位置です。"/>
+			<line_editor name="gridposy" tool_tip="これは、この地域のグリッドyの位置です。"/>
+			<text name="Redirect to Grid: ">
+				グリッドにリダイレクト:
+			</text>
+			<text name="billable factor text">
+				請求率:
+			</text>
+			<text name="land cost text">
+				平方メートル当たりL$:
+			</text>
+			<button label="更新" label_selected="更新" name="Refresh" tool_tip="上記の情報を更新するには、ここをクリックします。"/>
+			<button label="適用" label_selected="適用" name="Apply" tool_tip="上記の変更を適用するには、ここをクリックします。"/>
+			<button label="地域を選択" label_selected="地域を選択" name="Select Region" tool_tip="土地ツールで地域全体を選択してください。"/>
+			<button label="ただちに自動保存する" label_selected="ただちに自動保存する" name="Autosave now" tool_tip="Gzip状態を自動保存ディレクトリに保存します。"/>
+		</panel>
+		<panel label="オブジェクト" name="objects">
+			<panel.string name="no_target">
+				(ターゲットなし)
+			</panel.string>
+			<text name="Sim Name:">
+				シム名:
+			</text>
+			<text name="region name">
+				ウェルシュ
+			</text>
+			<check_box label="スクリプトを無効化" name="disable scripts" tool_tip="この設定により、この地域内のスクリプトをすべて無効化"/>
+			<check_box label="衝突を無効化" name="disable collisions" tool_tip="この設定により、この地域内の非エージェント衝突を無効化"/>
+			<check_box label="物理作用を無効化" name="disable physics" tool_tip="この設定により、この地域内の物理的作用をすべて無効化"/>
+			<button label="適用" label_selected="適用" name="Apply" tool_tip="上記の変更を適用するには、ここをクリックします。"/>
+			<button label="対象の設定" label_selected="対象の設定" name="Set Target" tool_tip="オブジェクト削除の対象となるアバターを設定してください。"/>
+			<text name="target_avatar_name">
+				(対象なし)
+			</text>
+			<button label="他の土地における対象のスクリプト・オブジェクトを削除" label_selected="他の土地における対象のスクリプト・オブジェクトを削除" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="この地域において対象が所有していないスクリプト・オブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。"/>
+			<button label="「すべての」土地における対象のスクリプト・オブジェクトを削除" label_selected="「すべての」土地における対象のスクリプト・オブジェクトを削除" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="この地域において対象が所有しているスクリプト・オブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。"/>
+			<button label="対象のオブジェクトを「すべて」削除" label_selected="対象のオブジェクトを「すべて」削除" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="この地域において対象が所有しているオブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。"/>
+			<button label="トップ・コライダーを取得" label_selected="トップ・コライダーを取得" name="Get Top Colliders" tool_tip="最も段階の狭いコールバックが発生したオブジェクトのリストを取得します。"/>
+			<button label="トップ・スクリプトを取得" label_selected="トップ・スクリプトを取得" name="Get Top Scripts" tool_tip="スクリプトの起動に最も時間を費やしているオブジェクトのリストを取得します。"/>
+			<button label="スクリプト・ダイジェスト" label_selected="スクリプト・ダイジェスト" name="Scripts digest" tool_tip="すべてのスクリプトとそれらの使用回数のリストを取得します。"/>
+		</panel>
+		<panel label="要求" name="request">
+			<text name="Destination:">
+				目的地:
+			</text>
+			<combo_box name="destination">
+				<combo_box.item label="選択" name="item1"/>
+				<combo_box.item label="エージェント地域" name="item2"/>
+			</combo_box>
+			<text name="Request:">
+				要求:
+			</text>
+			<combo_box name="request">
+				<combo_box.item label="コライダー<ステップ>" name="item1"/>
+				<combo_box.item label="スクリプト<回数>、<オプション・パターン>" name="item2"/>
+				<combo_box.item label="オブジェクト<パターン>" name="item3"/>
+				<combo_box.item label="rez <asset_id>" name="item4"/>
+			</combo_box>
+			<text name="Parameter:">
+				パラメーター:
+			</text>
+			<button label="リクエストする" label_selected="リクエストする" name="Make Request"/>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml b/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml
index 67d105c2a44..309a35a2a28 100644
--- a/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml
@@ -1,32 +1,28 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Hardware Settings Floater" title="ハードウェア設定">
-	<text name="Filtering:">
-		フィルタリング:
-	</text>
-	<check_box
-	     label="異方的フィルタリング(有効にすると速度が低下します)"
-	     name="ani" />
-	<text name="Antialiasing:">
-		アンチエイリアシング:
-	</text>
-	<combo_box label="アンチエイリアシング" name="fsaa">
-		<combo_box.item name="FSAADisabled" label="無効" />
-		<combo_box.item name="2x" label="2x" />
-		<combo_box.item name="4x" label="4x" />
-		<combo_box.item name="8x" label="8x" />
-		<combo_box.item name="16x" label="16x" />
-	</combo_box>
-	<spinner label="ガンマ:" name="gamma" />
-	<text name="(brightness, lower is brighter)">
-		(輝度:低い=高輝度、0=デフォルト値)
-	</text>
-	<text name="Enable VBO:">
-		VBO を有効化:
-	</text>
-	<check_box label="OpenGL Vertex Buffer Objectsを有効化" name="vbo"
-	     tool_tip="最新のハードウェアでこの設定を有効にすると、パフォーマンスが向上します。  しかし、旧型のハードウェアでは VBO の実装が貧弱な場合が多く、この設定を有効にすることでクラッシュにつながるおそれがあります。" />
-	<slider label="テクスチャメモリ(MB):" name="GrapicsCardTextureMemory"
-	     tool_tip="テクスチャーに割り当てるメモリの合計。 ビデオ・カード・メモリをデフォルトにします。 この数値を減らすと、パフォーマンスが改善されますが、テクスチャーがぼやけた感じになる場合があります。" />
-	<spinner label="フォグの距離比率:" name="fog" />
-	<button label="OK" label_selected="OK" name="OK" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Hardware Settings Floater" title="ハードウェア設定">
+	<text name="Filtering:">
+		フィルタリング:
+	</text>
+	<check_box label="異方的フィルタリング(有効にすると速度が低下します)" name="ani"/>
+	<text name="Antialiasing:">
+		アンチエイリアシング:
+	</text>
+	<combo_box label="アンチエイリアシング" name="fsaa">
+		<combo_box.item label="無効" name="FSAADisabled"/>
+		<combo_box.item label="2x" name="2x"/>
+		<combo_box.item label="4x" name="4x"/>
+		<combo_box.item label="8x" name="8x"/>
+		<combo_box.item label="16x" name="16x"/>
+	</combo_box>
+	<spinner label="ガンマ:" name="gamma"/>
+	<text name="(brightness, lower is brighter)">
+		(0 でデフォルト、低いほど明るい)
+	</text>
+	<text name="Enable VBO:">
+		VBO を有効化:
+	</text>
+	<check_box label="OpenGL Vertex Buffer Objectsを有効化" name="vbo" tool_tip="最新のハードウェアでこの設定を有効にすると、パフォーマンスが向上します。  しかし、旧型のハードウェアでは VBO の実装が貧弱な場合が多く、この設定を有効にすることでクラッシュにつながるおそれがあります。"/>
+	<slider label="テクスチャメモリ(MB):" name="GrapicsCardTextureMemory" tool_tip="テクスチャーに割り当てるメモリの合計。 ビデオ・カード・メモリをデフォルトにします。 この数値を減らすと、パフォーマンスが改善されますが、テクスチャーがぼやけた感じになる場合があります。"/>
+	<spinner label="フォグの距離比率:" name="fog"/>
+	<button label="OK" label_selected="OK" name="OK"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_image_preview.xml b/indra/newview/skins/default/xui/ja/floater_image_preview.xml
index fae9c87da48..42a4a2fd7f8 100644
--- a/indra/newview/skins/default/xui/ja/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_image_preview.xml
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Image Preview" title="">
-	<text name="name_label">
-		名前:
-	</text>
-	<text name="description_label">
-		説明:
-	</text>
-	<text name="preview_label">
-		イメージのプレビュー:
-	</text>
-	<combo_box label="服の種類" name="clothing_type_combo">
-		<combo_box.item name="Image" label="画像" />
-		<combo_box.item name="Hair" label="髪" />
-		<combo_box.item name="FemaleHead" label="女性の頭" />
-		<combo_box.item name="FemaleUpperBody" label="女性の上半身" />
-		<combo_box.item name="FemaleLowerBody" label="女性の下半身" />
-		<combo_box.item name="MaleHead" label="男性の頭" />
-		<combo_box.item name="MaleUpperBody" label="男性の上半身" />
-		<combo_box.item name="MaleLowerBody" label="男性の下半身" />
-		<combo_box.item name="Skirt" label="スカート" />
-		<combo_box.item name="SculptedPrim" label="変形されたプリム" />
-	</combo_box>
-	<text name="bad_image_text">
-		イメージを読み取れません。
-
-24bitTarga(.tga)でイメージを保存してください。
-	</text>
-	<check_box label="ロスのない圧縮を使用" name="lossless_check" />
-	<button label="取り消し" name="cancel_btn" />
-	<button label="アップロードL$[AMOUNT]" name="ok_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Image Preview" title="">
+	<text name="name_label">
+		名前:
+	</text>
+	<text name="description_label">
+		説明:
+	</text>
+	<text name="preview_label">
+		イメージのプレビュー:
+	</text>
+	<combo_box label="服の種類" name="clothing_type_combo">
+		<combo_box.item label="画像" name="Image"/>
+		<combo_box.item label="髪" name="Hair"/>
+		<combo_box.item label="女性の頭" name="FemaleHead"/>
+		<combo_box.item label="女性の上半身" name="FemaleUpperBody"/>
+		<combo_box.item label="女性の下半身" name="FemaleLowerBody"/>
+		<combo_box.item label="男性の頭" name="MaleHead"/>
+		<combo_box.item label="男性の上半身" name="MaleUpperBody"/>
+		<combo_box.item label="男性の下半身" name="MaleLowerBody"/>
+		<combo_box.item label="スカート" name="Skirt"/>
+		<combo_box.item label="スカルプトプリム" name="SculptedPrim"/>
+	</combo_box>
+	<text name="bad_image_text">
+		イメージを読み取れません。
+
+24bitTarga(.tga)でイメージを保存してください。
+	</text>
+	<check_box label="ロスのない圧縮を使用" name="lossless_check"/>
+	<button label="取り消し" name="cancel_btn"/>
+	<button label="アップロードL$[AMOUNT]" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml
index 8588ee1a966..bc34878fde0 100644
--- a/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml
@@ -1,81 +1,67 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="item properties" title="持ち物アイテムのプロパティ">
-	<text name="LabelItemNameTitle">
-		名前:
-	</text>
-	<text name="LabelItemDescTitle">
-		説明:
-	</text>
-	<text name="LabelCreatorTitle">
-		クリエーター
-	</text>
-	<text name="LabelCreatorName">
-		Nicole Linden
-	</text>
-	<button label="情報" label_selected="" name="BtnCreator" />
-	<text name="LabelOwnerTitle">
-		オーナー:
-	</text>
-	<text name="LabelOwnerName">
-		Thrax Linden
-	</text>
-	<button label="情報" label_selected="" name="BtnOwner" />
-	<text name="LabelAcquiredTitle">
-		入手日時:
-	</text>
-	<text name="LabelAcquiredDate">
-		2006年5月24日水曜日12:50:46
-	</text>
-	<text name="OwnerLabel">
-		できること:
-	</text>
-	<check_box label="修正" name="CheckOwnerModify" />
-	<check_box label="コピー" name="CheckOwnerCopy" />
-	<check_box label="再販/プレゼント" name="CheckOwnerTransfer" />
-	<text name="BaseMaskDebug">
-		B:
-	</text>
-	<text name="OwnerMaskDebug">
-		O:
-	</text>
-	<text name="GroupMaskDebug">
-		G:
-	</text>
-	<text name="EveryoneMaskDebug">
-		E:
-	</text>
-	<text name="NextMaskDebug">
-		N:
-	</text>
-	<check_box label="グループ分担" name="CheckShareWithGroup" />
-	<check_box label="誰に対してもコピーを許可" name="CheckEveryoneCopy" />
-	<text name="NextOwnerLabel" width="158">
-		次のオーナーができること:
-	</text>
-	<check_box label="修正" name="CheckNextOwnerModify" />
-	<check_box label="コピー" name="CheckNextOwnerCopy" />
-	<check_box label="再販/プレゼント" name="CheckNextOwnerTransfer" />
-	<text name="SaleLabel">
-		アイテムにマーク:
-	</text>
-	<check_box label="売り出し中" name="CheckPurchase" />
-	<radio_group name="RadioSaleType">
-		<radio_item name="radio" label="オリジナル" />
-		<radio_item name="radio2" label="コピー" />
-	</radio_group>
-	<text name="TextPrice">
-		料金:L$
-	</text>
-	<text name="unknown">
-		(不明)
-	</text>
-	<text name="public">
-		(公共)
-	</text>
-	<text name="you_can">
-		できること:
-	</text>
-	<text name="owner_can">
-		オーナーは次のことができます:
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="item properties" title="持ち物アイテムのプロパティ">
+	<floater.string name="unknown">
+		(不明)
+	</floater.string>
+	<floater.string name="public">
+		(公共)
+	</floater.string>
+	<floater.string name="you_can">
+		できること:
+	</floater.string>
+	<floater.string name="owner_can">
+		オーナーは次のことができます:
+	</floater.string>
+	<text name="LabelItemNameTitle">
+		名前:
+	</text>
+	<text name="LabelItemDescTitle">
+		説明:
+	</text>
+	<text name="LabelCreatorTitle">
+		クリエーター
+	</text>
+	<text name="LabelCreatorName">
+		Nicole Linden
+	</text>
+	<button label="情報" label_selected="" name="BtnCreator"/>
+	<text name="LabelOwnerTitle">
+		オーナー:
+	</text>
+	<text name="LabelOwnerName">
+		Thrax Linden
+	</text>
+	<button label="情報" label_selected="" name="BtnOwner"/>
+	<text name="LabelAcquiredTitle">
+		入手日時:
+	</text>
+	<text name="LabelAcquiredDate">
+		2006年5月24日水曜日12:50:46
+	</text>
+	<text name="OwnerLabel">
+		あなた:
+	</text>
+	<check_box label="編集" name="CheckOwnerModify"/>
+	<check_box label="コピー" name="CheckOwnerCopy"/>
+	<check_box label="再販・プレゼント" name="CheckOwnerTransfer"/>
+	<text name="AnyoneLabel">
+		全員:
+	</text>
+	<check_box label="コピー" name="CheckEveryoneCopy"/>
+	<text name="GroupLabel">
+		グループ:
+	</text>
+	<check_box label="共有" name="CheckShareWithGroup"/>
+	<text name="NextOwnerLabel" width="158">
+		次の所有者:
+	</text>
+	<check_box label="編集" name="CheckNextOwnerModify"/>
+	<check_box label="コピー" name="CheckNextOwnerCopy"/>
+	<check_box label="再販・プレゼント" name="CheckNextOwnerTransfer"/>
+	<check_box label="売り出し中" name="CheckPurchase"/>
+	<combo_box name="combobox sale copy">
+		<combo_box.item label="コピー" name="Copy"/>
+		<combo_box.item label="オリジナル" name="Original"/>
+	</combo_box>
+	<spinner label="価格: L$" name="Edit Cost"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_land_holdings.xml b/indra/newview/skins/default/xui/ja/floater_land_holdings.xml
index cb87dafb49f..49a42a71658 100644
--- a/indra/newview/skins/default/xui/ja/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/ja/floater_land_holdings.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="自分の土地">
-	<scroll_list name="parcel list">
-		<column label="区画名" name="name"/>
-		<column label="地域(リージョン)" name="location"/>
-		<column label="種類" name="type"/>
-		<column label="面積" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="テレポート" label_selected="テレポート" name="Teleport" tool_tip="この土地の中心にテレポート"/>
-	<button label="地図上に表示" label_selected="地図上に表示" name="Show on Map" tool_tip="この土地を世界地図に表示します。"/>
-	<text name="contrib_label">
-		あなたのグループへの貢献:
-	</text>
-	<scroll_list name="grant list">
-		<column label="グループ名" name="group"/>
-		<column label="面積" name="area"/>
-	</scroll_list>
-	<text name="allowed_label">
-		現在の支払いプランでの許可された保有地:
-	</text>
-	<text name="allowed_text">
-		[AREA]平方メートル
-	</text>
-	<text name="current_label">
-		現在の保有地:
-	</text>
-	<text name="current_text">
-		[AREA]平方メートル
-	</text>
-	<text name="available_label">
-		土地購入可:
-	</text>
-	<text name="available_text">
-		[AREA]平方メートル
-	</text>
-	<string name="area_string">
-		[AREA]平方メートル
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="land holdings floater" title="自分の土地">
+	<scroll_list name="parcel list">
+		<column label="区画" name="name"/>
+		<column label="地域(リージョン)" name="location"/>
+		<column label="種類" name="type"/>
+		<column label="面積" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="テレポート" label_selected="テレポート" name="Teleport" tool_tip="この土地の中心にテレポート"/>
+	<button label="地図" label_selected="地図" name="Show on Map" tool_tip="この土地を世界地図に表示します。"/>
+	<text name="contrib_label">
+		あなたのグループへの貢献:
+	</text>
+	<scroll_list name="grant list">
+		<column label="グループ名" name="group"/>
+		<column label="面積" name="area"/>
+	</scroll_list>
+	<text name="allowed_label">
+		現在の支払いプランでの許可された保有地:
+	</text>
+	<text name="allowed_text">
+		[AREA]平方メートル
+	</text>
+	<text name="current_label">
+		現在の保有地:
+	</text>
+	<text name="current_text">
+		[AREA]平方メートル
+	</text>
+	<text name="available_label">
+		土地購入可:
+	</text>
+	<text name="available_text">
+		[AREA]平方メートル
+	</text>
+	<string name="area_string">
+		[AREA]平方メートル
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml
index 79942738ea3..b108a3e70ca 100644
--- a/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml
@@ -1,12 +1,15 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="スクリプト:新しいスクリプト">
-	<button label="リセット" label_selected="リセット" name="Reset" />
-	<check_box label="実行中" name="running" />
-	<check_box label="Mono" name="mono" />
-	<text name="not_allowed">
-		あなたはこのスクリプトを見ることができません。
-	</text>
-	<string name="script_running">
-		実行中
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script ed float" title="スクリプト:新しいスクリプト">
+	<floater.string name="not_allowed">
+		このスクリプトは「コピー不可」のため、表示または編集することができません。 オブジェクト内のスクリプトの表示または編集には、全権限が必要です。
+	</floater.string>
+	<floater.string name="script_running">
+		実行中
+	</floater.string>
+	<floater.string name="Title">
+		スクリプト: [NAME]
+	</floater.string>
+	<button label="リセット" label_selected="リセット" name="Reset"/>
+	<check_box initial_value="true" label="実行中" name="running"/>
+	<check_box initial_value="true" label="Mono" name="mono"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_map.xml b/indra/newview/skins/default/xui/ja/floater_map.xml
index 3356d4948ac..aefe24ae48d 100644
--- a/indra/newview/skins/default/xui/ja/floater_map.xml
+++ b/indra/newview/skins/default/xui/ja/floater_map.xml
@@ -1,51 +1,54 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map">
-	<floater.string name="mini_map_north">
-		北
-	</floater.string>
-	<floater.string name="mini_map_east">
-		東
-	</floater.string>
-	<floater.string name="mini_map_west">
-		西
-	</floater.string>
-	<floater.string name="mini_map_south">
-		南
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		南東
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		北東
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		南西
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		北西
-	</floater.string>
-	<text label="北" name="floater_map_north" text="北">
-		北
-	</text>
-	<text label="東" name="floater_map_east" text="東">
-		東
-	</text>
-	<text label="西" name="floater_map_west" text="西">
-		西
-	</text>
-	<text label="南" name="floater_map_south" text="南">
-		南
-	</text>
-	<text label="南東" name="floater_map_southeast" text="南東">
-		南東
-	</text>
-	<text label="北東" name="floater_map_northeast" text="北東">
-		北東
-	</text>
-	<text label="南西" name="floater_map_southwest" text="南西">
-		南西
-	</text>
-	<text label="北西" name="floater_map_northwest" text="北西">
-		北西
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+	<floater.string name="mini_map_north">
+		北
+	</floater.string>
+	<floater.string name="mini_map_east">
+		東
+	</floater.string>
+	<floater.string name="mini_map_west">
+		西
+	</floater.string>
+	<floater.string name="mini_map_south">
+		南
+	</floater.string>
+	<floater.string name="mini_map_southeast">
+		南東
+	</floater.string>
+	<floater.string name="mini_map_northeast">
+		北東
+	</floater.string>
+	<floater.string name="mini_map_southwest">
+		南西
+	</floater.string>
+	<floater.string name="mini_map_northwest">
+		北西
+	</floater.string>
+	<floater.string name="ToolTipMsg">
+		[AGENT][REGION] (ダブルクリックで地図を開く)
+	</floater.string>
+	<text label="北" name="floater_map_north" text="北">
+		北
+	</text>
+	<text label="東" name="floater_map_east" text="東">
+		東
+	</text>
+	<text label="西" name="floater_map_west" text="西">
+		西
+	</text>
+	<text label="南" name="floater_map_south" text="南">
+		南
+	</text>
+	<text label="南東" name="floater_map_southeast" text="南東">
+		南東
+	</text>
+	<text label="北東" name="floater_map_northeast" text="北東">
+		北東
+	</text>
+	<text label="南西" name="floater_map_southwest" text="南西">
+		南西
+	</text>
+	<text label="北西" name="floater_map_northwest" text="北西">
+		北西
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_media_browser.xml b/indra/newview/skins/default/xui/ja/floater_media_browser.xml
index 6877cc7f532..5e60b9f1a2e 100644
--- a/indra/newview/skins/default/xui/ja/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/ja/floater_media_browser.xml
@@ -1,19 +1,30 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="メディア・ブラウザ">
-	<layout_stack name="stack1">
-		<layout_panel name="nav_controls">
-			<button label="戻る" name="back" />
-			<button label="進む" name="forward" />
-			<button label="æ›´æ–°" name="reload" />
-			<button label="閲覧" name="go" />
-		</layout_panel>
-		<layout_panel name="parcel_owner_controls">
-			<button label="現在の URL を区画に送信" name="assign" />
-		</layout_panel>
-		<layout_panel name="external_controls">
-			<button label="外部ウェブ・ブラウザで開く" name="open_browser" />
-			<check_box label="常に外部のウェブ・ブラウザで開く" name="open_always" />
-			<button label="閉じる" name="close" />
-		</layout_panel>
-	</layout_stack>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="メディア・ブラウザ">
+	<floater.string name="home_page_url">
+		http://jp.secondlife.com
+	</floater.string>
+	<floater.string name="support_page_url">
+		http://jp.secondlife.com/support
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button label="戻る" name="back"/>
+			<button label="進む" name="forward"/>
+			<button label="æ›´æ–°" name="reload"/>
+			<button label="閲覧" name="go"/>
+		</layout_panel>
+		<layout_panel name="time_controls">
+			<button label="巻き戻し" name="rewind"/>
+			<button label="停止" name="stop"/>
+			<button label="早送り" name="seek"/>
+		</layout_panel>
+		<layout_panel name="parcel_owner_controls">
+			<button label="現在の URL を区画に送信" name="assign"/>
+		</layout_panel>
+		<layout_panel name="external_controls">
+			<button label="外部ウェブ・ブラウザで開く" name="open_browser"/>
+			<check_box label="常に外部のウェブ・ブラウザで開く" name="open_always"/>
+			<button label="閉じる" name="close"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml b/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml
index 4d6b6ca70a7..1f7fcb94950 100644
--- a/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml
@@ -1,19 +1,18 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="メモリ・リーク・シミュレーション">
-	<spinner label="リークスピード(1フレームごとのバイト数):"
-	     name="leak_speed"  label_width="244" />
-	<spinner label="リークした最大メモリ数(MB):" name="max_leak"  label_width="244" />
-	<text name="total_leaked_label">
-		現在のリークメモリサイズ: [SIZE] KB
-	</text>
-	<text name="note_label_1">
-		[NOTE1]
-	</text>
-	<text name="note_label_2">
-		[NOTE2]
-	</text>
-	<button label="開始" name="start_btn" />
-	<button label="停止" name="stop_btn" />
-	<button label="解放" name="release_btn" />
-	<button label="閉じる" name="close_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="MemLeak" title="メモリリークのシミュレート">
+	<spinner label="リークスピード(1フレームごとのバイト数):" label_width="244" name="leak_speed"/>
+	<spinner label="リークした最大メモリ数(MB):" label_width="244" name="max_leak"/>
+	<text name="total_leaked_label">
+		現在のリークメモリサイズ: [SIZE] KB
+	</text>
+	<text name="note_label_1">
+		[NOTE1]
+	</text>
+	<text name="note_label_2">
+		[NOTE2]
+	</text>
+	<button label="開始" name="start_btn"/>
+	<button label="停止" name="stop_btn"/>
+	<button label="解放" name="release_btn"/>
+	<button label="閉じる" name="close_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_moveview.xml b/indra/newview/skins/default/xui/ja/floater_moveview.xml
index df6ae7bb61b..e6aeccc5175 100644
--- a/indra/newview/skins/default/xui/ja/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_moveview.xml
@@ -1,17 +1,35 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="move_floater">
-<panel name="panel_actions">
-	<button label="" label_selected="" name="turn left btn" tool_tip="左に曲がる" />
-	<button label="" label_selected="" name="turn right btn" tool_tip="右に曲がる" />
-	<button label="" label_selected="" name="move up btn"
-	     tool_tip="ジャンプまたは上昇" />
-	<button label="" label_selected="" name="move down btn"
-	     tool_tip="しゃがむまたは下降" />
-	<button label="飛行" label_selected="飛行" name="fly btn"
-	     tool_tip="飛行を開始または停止" />
-	<joystick_slide name="slide left btn" tool_tip="左に移動" />
-	<joystick_slide name="slide right btn" tool_tip="右に移動" />
-	<joystick_turn name="forward btn" tool_tip="前に移動" />
-	<joystick_turn name="backward btn" tool_tip="後ろに移動" />
-</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="move_floater">
+	<string name="walk_forward_tooltip">
+		前に進む(上矢印か W を押す)
+	</string>
+	<string name="walk_back_tooltip">
+		後ろに歩く(下矢印か S を押す)
+	</string>
+	<string name="run_forward_tooltip">
+		前に走る(上矢印か W を押す)
+	</string>
+	<string name="run_back_tooltip">
+		後ろに走る(下矢印か S を押す)
+	</string>
+	<string name="fly_forward_tooltip">
+		前に飛ぶ(上矢印か W を押す)
+	</string>
+	<string name="fly_back_tooltip">
+		後ろに飛ぶ(下矢印か S を押す)
+	</string>
+	<panel name="panel_actions">
+		<button label="" label_selected="" name="turn left btn" tool_tip="左を向く(左矢印か A を押す)"/>
+		<button label="" label_selected="" name="turn right btn" tool_tip="右を向く(右矢印か D を押す)"/>
+		<button label="" label_selected="" name="move up btn" tool_tip="飛ぶ・E を押す"/>
+		<button label="" label_selected="" name="move down btn" tool_tip="着地・C を押す"/>
+		<joystick_turn name="forward btn" tool_tip="前に進む(上矢印か W を押す)"/>
+		<joystick_turn name="backward btn" tool_tip="後ろに歩く(下矢印か S を押す)"/>
+	</panel>
+	<panel name="panel_modes">
+		<button label="" name="mode_walk_btn" tool_tip="歩行モード"/>
+		<button label="" name="mode_run_btn" tool_tip="走行モード"/>
+		<button label="" name="mode_fly_btn" tool_tip="飛行モード"/>
+		<button label="飛行停止" name="stop_fly_btn" tool_tip="飛行停止"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_pay.xml b/indra/newview/skins/default/xui/ja/floater_pay.xml
index 8702ab1e74f..d175009ef31 100644
--- a/indra/newview/skins/default/xui/ja/floater_pay.xml
+++ b/indra/newview/skins/default/xui/ja/floater_pay.xml
@@ -1,21 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Give Money" title="">
-	<button label="L$1" label_selected="L$1" name="fastpay 1" />
-	<button label="L$5" label_selected="L$5" name="fastpay 5" />
-	<button label="L$10" label_selected="L$10" name="fastpay 10" />
-	<button label="L$20" label_selected="L$20" name="fastpay 20" />
-	<button label="支払い" label_selected="支払い" name="pay btn" />
-	<button label="取り消し" label_selected="取り消し" name="cancel btn" />
-	<text name="payee_label">
-		支払い先:
-	</text>
-	<text name="payee_name">
-		[FIRST] [LAST]
-	</text>
-	<text name="fastpay text">
-		一括払い:
-	</text>
-	<text name="amount text">
-		金額:
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+	<text name="payee_label">
+		支払い:
+	</text>
+	<icon name="icon_person" tool_tip="住人"/>
+	<text name="payee_name">
+		[FIRST] [LAST]
+	</text>
+	<button label="L$1" label_selected="L$1" name="fastpay 1"/>
+	<button label="L$5" label_selected="L$5" name="fastpay 5"/>
+	<button label="L$10" label_selected="L$10" name="fastpay 10"/>
+	<button label="L$20" label_selected="L$20" name="fastpay 20"/>
+	<text name="amount text">
+		金額の指定:
+	</text>
+	<button label="支払い" label_selected="支払い" name="pay btn"/>
+	<button label="取り消し" label_selected="取り消し" name="cancel btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_pay_object.xml b/indra/newview/skins/default/xui/ja/floater_pay_object.xml
index 5f280ca5fae..5a3edb29086 100644
--- a/indra/newview/skins/default/xui/ja/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/ja/floater_pay_object.xml
@@ -1,30 +1,29 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Give Money" title="">
-	<text name="payee_group">
-		グループへの支払い:
-	</text>
-	<text name="payee_resident">
-		住人への支払い:
-	</text>
-	<text name="payee_name">
-		[FIRST] [LAST]
-	</text>
-	<text name="object_name_label">
-		オブジェクトを介して:
-	</text>
-	<text name="object_name_text">
-		...
-	</text>
-	<text name="fastpay text">
-		一括払い:
-	</text>
-	<text name="amount text">
-		金額:
-	</text>
-	<button label="L$1" label_selected="L$1" name="fastpay 1" />
-	<button label="L$5" label_selected="L$5" name="fastpay 5" />
-	<button label="L$10" label_selected="L$10" name="fastpay 10" />
-	<button label="L$20" label_selected="L$20" name="fastpay 20" />
-	<button label="支払い" label_selected="支払い" name="pay btn" />
-	<button label="取り消し" label_selected="取り消し" name="cancel btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+	<string name="payee_group">
+		グループへの支払い:
+	</string>
+	<string name="payee_resident">
+		住人への支払い:
+	</string>
+	<icon name="icon_person" tool_tip="住人"/>
+	<text name="payee_name">
+		[FIRST] [LAST]
+	</text>
+	<text name="object_name_label">
+		オブジェクトを介して:
+	</text>
+	<icon name="icon_object" tool_tip="オブジェクト"/>
+	<text name="object_name_text">
+		...
+	</text>
+	<button label="L$1" label_selected="L$1" name="fastpay 1"/>
+	<button label="L$5" label_selected="L$5" name="fastpay 5"/>
+	<button label="L$10" label_selected="L$10" name="fastpay 10"/>
+	<button label="L$20" label_selected="L$20" name="fastpay 20"/>
+	<text name="amount text">
+		金額を指定:
+	</text>
+	<button label="支払い" label_selected="支払い" name="pay btn"/>
+	<button label="取り消し" label_selected="取り消し" name="cancel btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml
index 653674129cf..95cffd33f2c 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml
@@ -1,10 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_anim">
-	<text name="desc txt">
-		説明:
-	</text>
-	<button label="世界で再生" label_selected="停止" name="Anim play btn"
-	     tool_tip="このアニメーションを他の人も見ることができるように再生します。" />
-	<button label="ローカルに再生" label_selected="停止" name="Anim audition btn"
-	     tool_tip="このアニメーションを自分専用に再生します。" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_anim">
+	<floater.string name="Title">
+		アニメーション: [NAME]
+	</floater.string>
+	<text name="desc txt">
+		説明:
+	</text>
+	<button label="世界で再生" label_selected="停止" name="Anim play btn" tool_tip="このアニメーションを他の人も見ることができるように再生します。"/>
+	<button label="ローカルに再生" label_selected="停止" name="Anim audition btn" tool_tip="このアニメーションを自分専用に再生します。"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml b/indra/newview/skins/default/xui/ja/floater_preview_classified.xml
index f0770b2ed5d..48a64e28a6e 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_classified.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="クラシファイド広告情報" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="classified_preview" title="クラシファイド広告情報">
+	<floater.string name="Title">
+		クラシファイド広告: [NAME]
+	</floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_event.xml b/indra/newview/skins/default/xui/ja/floater_preview_event.xml
index 9ecabfabb0d..61c17e2d3c9 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_event.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="イベント情報" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="event_preview" title="イベント情報">
+	<floater.string name="Title">
+		イベント: [NAME]
+	</floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml
new file mode 100644
index 00000000000..c996ed8591c
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="ジェスチャーのショートカット"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml
new file mode 100644
index 00000000000..c996ed8591c
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="ジェスチャーのショートカット"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
index e7dd4d2c098..ba272bdffd0 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
@@ -1,16 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview notecard" title="メモ:">
-	<button label="保存" label_selected="保存" name="Save" />
-	<text name="desc txt">
-		説明:
-	</text>
-	<text_editor name="Notecard Editor">
-		ローディング...
-	</text_editor>
-	<text name="no_object">
-		このノートを含んだオブジェクトが見つかりません。
-	</text>
-	<text name="not_allowed">
-		あなたはこのノートを見ることができません。
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview notecard" title="メモ:">
+	<floater.string name="no_object">
+		このノートを含んだオブジェクトが見つかりません。
+	</floater.string>
+	<floater.string name="not_allowed">
+		このノートを見る権限がありません。
+	</floater.string>
+	<floater.string name="Title">
+		ノートカード: [NAME]
+	</floater.string>
+	<floater.string label="保存" label_selected="保存" name="Save">
+		保存
+	</floater.string>
+	<text name="desc txt">
+		説明:
+	</text>
+	<text_editor name="Notecard Editor">
+		ローディング...
+	</text_editor>
+	<button label="保存" label_selected="保存" name="Save"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml
index 244ef13d139..e52a3a4e924 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_sound">
-	<text name="desc txt">
-		説明:
-	</text>
-	<button label="世界で再生" label_selected="世界で再生" name="Sound play btn"
-	     tool_tip="このサウンドを他の人も聞くことができるように再生します。" />
-	<button label="ローカルに再生" label_selected="ローカルに再生"
-	     name="Sound audition btn"
-	     tool_tip="このサウンドを自分専用に再生します。" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_sound">
+	<floater.string name="Title">
+		サウンド: [NAME]
+	</floater.string>
+	<text name="desc txt">
+		説明:
+	</text>
+	<button label="世界で再生" label_selected="世界で再生" name="Sound play btn" tool_tip="このサウンドを他の人も聞くことができるように再生します。"/>
+	<button label="ローカルに再生" label_selected="ローカルに再生" name="Sound audition btn" tool_tip="このサウンドを自分専用に再生します。"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_texture.xml b/indra/newview/skins/default/xui/ja/floater_preview_texture.xml
index ffd9e3bfbef..c83130f3bb0 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_texture.xml
@@ -1,9 +1,17 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_texture">
-	<text name="desc txt">
-		説明:
-	</text>
-	<text name="dimensions">
-		寸法:[HEIGHT]x[WIDTH]
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_texture">
+	<floater.string name="Title">
+		テクスチャ: [NAME]
+	</floater.string>
+	<floater.string name="Copy">
+		持ち物にコピー
+	</floater.string>
+	<text name="desc txt">
+		説明:
+	</text>
+	<button label="保存" name="Keep"/>
+	<button label="削除" name="Discard"/>
+	<text name="dimensions">
+		[WIDTH]px x [HEIGHT]px
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
index 6eae7613b34..2b07deb1032 100644
--- a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
@@ -1,143 +1,103 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="嫌がらせの報告">
-	<texture_picker label="" name="screenshot"/>
-	<check_box label="スクリーンショットを含める" name="screen_check"/>
-	<text name="reporter_title">
-		報告者:
-	</text>
-	<text name="reporter_field">
-		Loremipsum Dolorsitamut
-	</text>
-	<text name="sim_title">
-		地域:
-	</text>
-	<text name="sim_field">
-		地域名
-	</text>
-	<text name="pos_title">
-		位置:
-	</text>
-	<text name="pos_field">
-		{128.1, 128.1, 15.4}
-	</text>
-	<text name="select_object_label">
-		ボタンを使ってオブジェクトを選択:
-	</text>
-	<button label="" label_selected="" name="pick_btn" tool_tip="オブジェクト・ピッカー - この報告の主題となるオブジェクトを特定"/>
-	<text name="object_name_label">
-		名前:
-	</text>
-	<text name="object_name">
-		Consetetur Sadipscing
-	</text>
-	<text name="owner_name_label">
-		オーナー:
-	</text>
-	<text name="owner_name">
-		Hendrerit Vulputate
-	</text>
-	<combo_box name="category_combo" tool_tip="カテゴリー -- この報告に最も適したカテゴリーを選択してください">
-		<combo_box.item name="Select_category" label="カテゴリーを選択"
-		/>
-		<combo_box.item name="Age__Age_play" label="年齢>年齢偽証"
-		/>
-		<combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="年齢>成人の住人がTeen Second Life上にいる"
-		/>
-		<combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="年齢>未成年な住人がTeen Second Lifeの外にいる"
-		/>
-		<combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="攻撃>コンバット・サンドボックス/危険なエリア"
-		/>
-		<combo_box.item name="Assault__Safe_area" label="攻撃>安全なエリア"
-		/>
-		<combo_box.item name="Assault__Weapons_testing_sandbox" label="攻撃>武器テスト用サンドボックス"
-		/>
-		<combo_box.item name="Commerce__Failure_to_deliver_product_or_service" label="商取引>製品またはサービスの提供が行われない"
-		/>
-		<combo_box.item name="Disclosure__Real_world_information" label="開示>リアルワールドの情報"
-		/>
-		<combo_box.item name="Disclosure__Remotely_monitoring chat" label="開示>離れたところからチャットをモニターしている"
-		/>
-		<combo_box.item name="Disclosure__Second_Life_information_chat_IMs" label="開示>Second Lifeの情報/チャット/IM"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Unfair_use_of_region_resources" label="平穏を乱す行為>地域リソースの使用が不公平"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Excessive_scripted_objects" label="平穏を乱す行為>スクリプト・オブジェクトの乱用"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Object_littering" label="平穏を乱す行為>オブジェクトの捨て置き"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Repetitive_spam" label="平穏を乱す行為>繰り返しスパム"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Unwanted_advert_spam" label="平穏を乱す行為>不要な広告スパム"
-		/>
-		<combo_box.item name="Fraud__L$" label="詐欺> L$"
-		/>
-		<combo_box.item name="Fraud__Land" label="詐欺>土地"
-		/>
-		<combo_box.item name="Fraud__Pyramid_scheme_or_chain_letter" label="詐欺>マルチ商法またはチェーン・メール"
-		/>
-		<combo_box.item name="Fraud__US$" label="詐欺> US$"
-		/>
-		<combo_box.item name="Harassment__Advert_farms___visual_spam" label="嫌がらせ>広告委託/視覚的なスパム"
-		/>
-		<combo_box.item name="Harassment__Defaming_individuals_or_groups" label="嫌がらせ>個人またはグループの中傷"
-		/>
-		<combo_box.item name="Harassment__Impeding_movement" label="嫌がらせ>移動の妨害"
-		/>
-		<combo_box.item name="Harassment__Sexual_harassment" label="嫌がらせ>性的な嫌がらせ"
-		/>
-		<combo_box.item name="Harassment__Solicting_inciting_others_to_violate_ToS" label="嫌がらせ>利用規約(ToS)に違反する行為を行うよう他者を勧誘/扇動"
-		/>
-		<combo_box.item name="Harassment__Verbal_abuse" label="嫌がらせ>暴言"
-		/>
-		<combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="わいせつ>著しく不快であると見なされるコンテンツまたは行為"
-		/>
-		<combo_box.item name="Indecency__Inappropriate_avatar_name" label="わいせつ>不適切なアバター名"
-		/>
-		<combo_box.item name="Indecency__Mature_content_in_PG_region" label="わいせつ>PG地域での不適切なコンテンツまたは行為"
-		/>
-		<combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="わいせつ>Mature地域での不適切なコンテンツまたは行為"
-		/>
-		<combo_box.item name="Intellectual_property_infringement_Content_Removal" label="知的財産の侵害>コンテンツの撤去"
-		/>
-		<combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="知的財産の侵害>コピーBot及び権限の悪用"
-		/>
-		<combo_box.item name="Intolerance" label="不寛容"
-		/>
-		<combo_box.item name="Land__Abuse_of_sandbox_resources" label="土地>サンドボックス・リソースの乱用"
-		/>
-		<combo_box.item name="Land__Encroachment__Objects_textures" label="土地>不法侵入>オブジェクト/テクスチャー"
-		/>
-		<combo_box.item name="Land__Encroachment__Particles" label="土地>不法侵入>パーティクル"
-		/>
-		<combo_box.item name="Land__Encroachment__Trees_plants" label="土地>不法侵入>樹木/植物"
-		/>
-		<combo_box.item name="Wagering_gambling" label="賭け/ギャンブル"
-		/>
-		<combo_box.item name="Other" label="その他"
-		/>
-	</combo_box>
-	<text name="abuser_name_title">
-		迷惑ユーザーの名前:
-	</text>
-	<button label="住人を選択" label_selected="" name="select_abuser" tool_tip="嫌がらせをした人の名前をリストから選択してください。"/>
-	<check_box label="嫌がらせをした人の名前が不明" name="omit_abuser_name" tool_tip="嫌がらせをした人の名前を提供できないかについて、これを確認"/>
-	<text name="abuser_name_title2">
-		嫌がらせの起きた場所:
-	</text>
-	<text name="sum_title">
-		概要:
-	</text>
-	<text name="dscr_title">
-		詳細:
-	</text>
-	<text name="bug_aviso">
-		日付、場所、嫌がらせの特徴、関連する会話/IMテキス
-トに関し明確に記入し、可能であればオブジェクトを選
-択してください。
-	</text>
-	<text name="incomplete_title">
-		注意:不完全なレポートは調査されません。
-	</text>
-	<button label="取り消し" label_selected="取り消し" name="cancel_btn"/>
-	<button label="嫌がらせの報告" label_selected="嫌がらせの報告" name="send_btn"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_report_abuse" title="嫌がらせの報告">
+	<floater.string name="Screenshot">
+		スクリーンショット
+	</floater.string>
+	<check_box label="このスクリーンショットを使用" name="screen_check"/>
+	<text name="reporter_title">
+		報告者:
+	</text>
+	<text name="reporter_field">
+		Loremipsum Dolorsitamut
+	</text>
+	<text name="sim_title">
+		地域:
+	</text>
+	<text name="sim_field">
+		地域名
+	</text>
+	<text name="pos_title">
+		位置:
+	</text>
+	<text name="pos_field">
+		{128.1, 128.1, 15.4}
+	</text>
+	<text name="select_object_label">
+		ボタンをクリック。悪意のあるオブジェクト:
+	</text>
+	<button label="" label_selected="" name="pick_btn" tool_tip="オブジェクト・ピッカー - この報告の主題となるオブジェクトを特定"/>
+	<text name="object_name_label">
+		オブジェクト:
+	</text>
+	<text name="object_name">
+		Consetetur Sadipscing
+	</text>
+	<text name="owner_name_label">
+		オーナー:
+	</text>
+	<text name="owner_name">
+		Hendrerit Vulputate
+	</text>
+	<combo_box name="category_combo" tool_tip="カテゴリー -- この報告に最も適したカテゴリーを選択してください">
+		<combo_box.item label="カテゴリーを選択" name="Select_category"/>
+		<combo_box.item label="年齢>年齢偽証" name="Age__Age_play"/>
+		<combo_box.item label="年齢>成人の住人がTeen Second Life上にいる" name="Age__Adult_resident_on_Teen_Second_Life"/>
+		<combo_box.item label="年齢>未成年な住人がTeen Second Lifeの外にいる" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
+		<combo_box.item label="攻撃>コンバット・サンドボックス/危険なエリア" name="Assault__Combat_sandbox___unsafe_area"/>
+		<combo_box.item label="攻撃>安全なエリア" name="Assault__Safe_area"/>
+		<combo_box.item label="攻撃>武器テスト用サンドボックス" name="Assault__Weapons_testing_sandbox"/>
+		<combo_box.item label="商取引>製品またはサービスの提供が行われない" name="Commerce__Failure_to_deliver_product_or_service"/>
+		<combo_box.item label="開示>リアルワールドの情報" name="Disclosure__Real_world_information"/>
+		<combo_box.item label="開示>離れたところからチャットをモニターしている" name="Disclosure__Remotely_monitoring chat"/>
+		<combo_box.item label="開示>Second Lifeの情報/チャット/IM" name="Disclosure__Second_Life_information_chat_IMs"/>
+		<combo_box.item label="平穏を乱す行為>地域リソースの使用が不公平" name="Disturbing_the_peace__Unfair_use_of_region_resources"/>
+		<combo_box.item label="平穏を乱す行為>スクリプト・オブジェクトの乱用" name="Disturbing_the_peace__Excessive_scripted_objects"/>
+		<combo_box.item label="平穏を乱す行為>オブジェクトの捨て置き" name="Disturbing_the_peace__Object_littering"/>
+		<combo_box.item label="平穏を乱す行為>繰り返しスパム" name="Disturbing_the_peace__Repetitive_spam"/>
+		<combo_box.item label="平穏を乱す行為>不要な広告スパム" name="Disturbing_the_peace__Unwanted_advert_spam"/>
+		<combo_box.item label="詐欺> L$" name="Fraud__L$"/>
+		<combo_box.item label="詐欺>土地" name="Fraud__Land"/>
+		<combo_box.item label="詐欺>マルチ商法またはチェーン・メール" name="Fraud__Pyramid_scheme_or_chain_letter"/>
+		<combo_box.item label="詐欺> US$" name="Fraud__US$"/>
+		<combo_box.item label="嫌がらせ>広告委託/視覚的なスパム" name="Harassment__Advert_farms___visual_spam"/>
+		<combo_box.item label="嫌がらせ>個人またはグループの中傷" name="Harassment__Defaming_individuals_or_groups"/>
+		<combo_box.item label="嫌がらせ>移動の妨害" name="Harassment__Impeding_movement"/>
+		<combo_box.item label="嫌がらせ>性的な嫌がらせ" name="Harassment__Sexual_harassment"/>
+		<combo_box.item label="嫌がらせ>利用規約(ToS)に違反する行為を行うよう他者を勧誘/扇動" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+		<combo_box.item label="嫌がらせ>暴言" name="Harassment__Verbal_abuse"/>
+		<combo_box.item label="わいせつ>著しく不快であると見なされるコンテンツまたは行為" name="Indecency__Broadly_offensive_content_or_conduct"/>
+		<combo_box.item label="わいせつ>不適切なアバター名" name="Indecency__Inappropriate_avatar_name"/>
+		<combo_box.item label="わいせつ>PG地域での不適切なコンテンツまたは行為" name="Indecency__Mature_content_in_PG_region"/>
+		<combo_box.item label="わいせつ>Mature地域での不適切なコンテンツまたは行為" name="Indecency__Inappropriate_content_in_Mature_region"/>
+		<combo_box.item label="知的財産の侵害>コンテンツの撤去" name="Intellectual_property_infringement_Content_Removal"/>
+		<combo_box.item label="知的財産の侵害>コピーBot及び権限の悪用" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
+		<combo_box.item label="不寛容" name="Intolerance"/>
+		<combo_box.item label="土地>サンドボックス・リソースの乱用" name="Land__Abuse_of_sandbox_resources"/>
+		<combo_box.item label="土地>不法侵入>オブジェクト/テクスチャー" name="Land__Encroachment__Objects_textures"/>
+		<combo_box.item label="土地>不法侵入>パーティクル" name="Land__Encroachment__Particles"/>
+		<combo_box.item label="土地>不法侵入>樹木/植物" name="Land__Encroachment__Trees_plants"/>
+		<combo_box.item label="賭け/ギャンブル" name="Wagering_gambling"/>
+		<combo_box.item label="その他" name="Other"/>
+	</combo_box>
+	<text name="abuser_name_title">
+		迷惑ユーザーの名前:
+	</text>
+	<button label="選択" label_selected="" name="select_abuser" tool_tip="嫌がらせをした人の名前をリストから選択してください。"/>
+	<text name="abuser_name_title2">
+		嫌がらせの起きた場所:
+	</text>
+	<text name="sum_title">
+		概要:
+	</text>
+	<text name="dscr_title">
+		詳細:
+	</text>
+	<text name="bug_aviso">
+		できるだけ具体的にお願いします。
+	</text>
+	<text name="incomplete_title">
+		注意:不完全なレポートは調査されません。
+	</text>
+	<button label="嫌がらせの報告" label_selected="嫌がらせの報告" name="send_btn"/>
+	<button label="取り消し" label_selected="取り消し" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml
new file mode 100644
index 00000000000..fc805e879b8
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script" short_title="[All scripts]" title="[All scripts]"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_script_preview.xml b/indra/newview/skins/default/xui/ja/floater_script_preview.xml
index ef729e0f6fd..583a2f8b91a 100644
--- a/indra/newview/skins/default/xui/ja/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_script_preview.xml
@@ -1,6 +1,9 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="スクリプト:回転スクリプト">
-	<text name="desc txt">
-		説明:
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview lsl text" title="スクリプト:回転スクリプト">
+	<floater.string name="Title">
+		スクリプト: [NAME]
+	</floater.string>
+	<text name="desc txt">
+		説明:
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_script_queue.xml b/indra/newview/skins/default/xui/ja/floater_script_queue.xml
index 7c4979a0336..5e059b91caa 100644
--- a/indra/newview/skins/default/xui/ja/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/ja/floater_script_queue.xml
@@ -1,4 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="queue" title="進捗のリセット">
-	<button label="閉じる" label_selected="閉じる" name="close" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="queue" title="進捗のリセット">
+	<floater.string name="Starting">
+		[COUNT] アイテムの [START] を開始します。
+	</floater.string>
+	<floater.string name="Done">
+		完了。
+	</floater.string>
+	<floater.string name="Resetting">
+		リセット中
+	</floater.string>
+	<floater.string name="Running">
+		実行中
+	</floater.string>
+	<floater.string name="NotRunning">
+		実行されていません
+	</floater.string>
+	<button label="閉じる" label_selected="閉じる" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_sell_land.xml b/indra/newview/skins/default/xui/ja/floater_sell_land.xml
index 5193e5bba18..f373a7215e0 100644
--- a/indra/newview/skins/default/xui/ja/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_sell_land.xml
@@ -1,70 +1,70 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="sell land" title="土地を販売" height="496" min_height="496" >
-    <scroll_container name="profile_scroll">
-    <panel name="scroll_content_panel">
-	<text name="info_parcel_label">
-		区画:
-	</text>
-	<text name="info_parcel">
-		区画名
-	</text>
-	<text name="info_size_label">
-		サイズ:
-	</text>
-	<text name="info_size">
-		[AREA]平方メートル
-	</text>
-	<text name="info_action" bottom_delta="-57">
-		この区画を販売す
-るには:
-	</text>
-	<icon bottom_delta="-86" name="step_price" />
-	<text name="price_label">
-		価格を設定:
-	</text>
-	<text name="price_text">
-		この土地に対する適切な価格を選択してください
-	</text>
-	<text name="price_ld">
-		L$
-	</text>
-	<text name="price_per_m" width="230" left_delta="106">
-		(1平方メートル当たりL$ [PER_METER])
-	</text>
-	<text name="sell_to_label">
-		土地の販売先:
-	</text>
-	<text name="sell_to_text" right="-6">
-		誰にでも販売するか、特定の人にのみ販売するかを選択してください
-	</text>
-	<combo_box name="sell_to">
-		<combo_box.item name="--selectone--" label="1つ選択--" />
-		<combo_box.item name="Anyone" label="誰でも" />
-		<combo_box.item name="Specificuser:" label="特定ユーザー:" />
-	</combo_box>
-	<button label="選択..." name="sell_to_select_agent" />
-	<text name="sell_objects_label">
-		土地と共にオブジェクトを販売しますか?
-	</text>
-	<text name="sell_objects_text">
-		区画上にある譲渡可能なオブジェクトは所有権が変更されます
-	</text>
-	<radio_group name="sell_objects" height="72" bottom_delta="-76">
-		<radio_item name="no">
-			いいえ、オブジェクト所有権
-を保持します
-		</radio_item>
-		<radio_item name="yes" bottom="-56">
-			はい、土地と一緒にオブジェ
-クトを売ります
-		</radio_item>
-	</radio_group>
-	<button label="オブジェクトを表示" name="show_objects" width="138"/>
-	<text name="nag_message_label">
-		注意:返品や交換はできません
-	</text>
-	<button label="販売を決定" name="sell_btn" bottom="-489"/>
-	<button label="取り消し" name="cancel_btn" />
-    </panel>
-    </scroll_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater height="496" min_height="496" name="sell land" title="土地を販売">
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<text name="info_parcel_label">
+				区画:
+			</text>
+			<text name="info_parcel">
+				区画名
+			</text>
+			<text name="info_size_label">
+				サイズ:
+			</text>
+			<text name="info_size">
+				[AREA]平方メートル
+			</text>
+			<text bottom_delta="-57" name="info_action">
+				この区画を販売す
+るには:
+			</text>
+			<icon bottom_delta="-86" name="step_price"/>
+			<text name="price_label">
+				価格を設定:
+			</text>
+			<text name="price_text">
+				適正価格を選んでください。
+			</text>
+			<text name="price_ld">
+				L$
+			</text>
+			<text left_delta="106" name="price_per_m" width="230">
+				(1平方メートル当たりL$ [PER_METER])
+			</text>
+			<text name="sell_to_label">
+				土地の販売先:
+			</text>
+			<text name="sell_to_text" right="-6">
+				誰にでも販売するか、特定の人にのみ販売するかを選択してください
+			</text>
+			<combo_box name="sell_to">
+				<combo_box.item label="1つ選択--" name="--selectone--"/>
+				<combo_box.item label="誰でも" name="Anyone"/>
+				<combo_box.item label="特定の人:" name="Specificuser:"/>
+			</combo_box>
+			<button label="選択..." name="sell_to_select_agent"/>
+			<text name="sell_objects_label">
+				土地と共にオブジェクトを販売しますか?
+			</text>
+			<text name="sell_objects_text">
+				区画上にある譲渡可能なオブジェクトは所有権が変更されます
+			</text>
+			<radio_group bottom_delta="-76" height="72" name="sell_objects">
+				<radio_item name="no">
+					いいえ、オブジェクト所有権
+を保持します
+				</radio_item>
+				<radio_item bottom="-56" name="yes">
+					はい、土地と一緒にオブジェ
+クトを売ります
+				</radio_item>
+			</radio_group>
+			<button label="オブジェクトを表示" name="show_objects" width="138"/>
+			<text name="nag_message_label">
+				注意:返品や交換はできません
+			</text>
+			<button bottom="-489" label="販売を決定" name="sell_btn"/>
+			<button label="取り消し" name="cancel_btn"/>
+		</panel>
+	</scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_settings_debug.xml b/indra/newview/skins/default/xui/ja/floater_settings_debug.xml
index 133a8ce2cd3..6ad4976b1c3 100644
--- a/indra/newview/skins/default/xui/ja/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/ja/floater_settings_debug.xml
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="settings_debug" title="デバッグ設定">
-	<combo_box name="boolean_combo">
-		<combo_box.item name="TRUE" label="æ­£" />
-		<combo_box.item name="FALSE" label="誤" />
-	</combo_box>
-	<color_swatch label="色" name="color_swatch" />
-	<spinner label="x" name="val_spinner_1" />
-	<spinner label="x" name="val_spinner_2" />
-	<spinner label="x" name="val_spinner_3" />
-	<spinner label="x" name="val_spinner_4" />
-	<button label="デフォルトにリセット" name="default_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="settings_debug" title="デバッグ設定">
+	<combo_box name="boolean_combo">
+		<combo_box.item label="TRUE" name="TRUE"/>
+		<combo_box.item label="FALSE" name="FALSE"/>
+	</combo_box>
+	<color_swatch label="色" name="val_color_swatch"/>
+	<spinner label="x" name="val_spinner_1"/>
+	<spinner label="x" name="val_spinner_2"/>
+	<spinner label="x" name="val_spinner_3"/>
+	<spinner label="x" name="val_spinner_4"/>
+	<button label="デフォルトにリセット" name="default_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_stats.xml b/indra/newview/skins/default/xui/ja/floater_stats.xml
new file mode 100644
index 00000000000..698beccb071
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_stats.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Statistics" title="統計バー">
+	<scroll_container name="statistics_scroll">
+		<container_view name="statistics_view">
+			<stat_view label="ベーシック" name="basic">
+				<stat_bar label="FPS" name="fps"/>
+				<stat_bar label="帯域幅" name="bandwidth"/>
+				<stat_bar label="パケットロス" name="packet_loss"/>
+				<stat_bar label="シムの Ping" name="ping"/>
+			</stat_view>
+			<stat_view label="詳細" name="advanced">
+				<stat_view label="レンダリング" name="render">
+					<stat_bar label="KTris の描画" name="ktrisframe"/>
+					<stat_bar label="KTris の描画" name="ktrissec"/>
+					<stat_bar label="オブジェクト合計" name="objs"/>
+					<stat_bar label="新しいオブジェクト" name="newobjs"/>
+				</stat_view>
+				<stat_view label="テクスチャ" name="texture">
+					<stat_bar label="カウント" name="numimagesstat"/>
+					<stat_bar label="未処理のカウント" name="numrawimagesstat"/>
+					<stat_bar label="GL メモリ" name="gltexmemstat"/>
+					<stat_bar label="フォーマット済メモリ" name="formattedmemstat"/>
+					<stat_bar label="未処理のメモリ" name="rawmemstat"/>
+					<stat_bar label="統合メモリ" name="glboundmemstat"/>
+				</stat_view>
+				<stat_view label="ネットワーク" name="network">
+					<stat_bar label="パケットイン" name="packetsinstat"/>
+					<stat_bar label="パケットアウト" name="packetsoutstat"/>
+					<stat_bar label="オブジェクト" name="objectkbitstat"/>
+					<stat_bar label="テクスチャ" name="texturekbitstat"/>
+					<stat_bar label="アセット" name="assetkbitstat"/>
+					<stat_bar label="レイヤー" name="layerskbitstat"/>
+					<stat_bar label="実際の受信" name="actualinkbitstat"/>
+					<stat_bar label="実際の送信" name="actualoutkbitstat"/>
+					<stat_bar label="VFS 保留中の操作" name="vfspendingoperations"/>
+				</stat_view>
+			</stat_view>
+			<stat_view label="シミュレーター" name="sim">
+				<stat_bar label="時間の遅れ" name="simtimedilation"/>
+				<stat_bar label="シム FPS" name="simfps"/>
+				<stat_bar label="物理的作用 FPS" name="simphysicsfps"/>
+				<stat_view label="物理的作用の詳細" name="physicsdetail">
+					<stat_bar label="ピン留めオブジェクト" name="physicspinnedtasks"/>
+					<stat_bar label="低 LOD オブジェクト" name="physicslodtasks"/>
+					<stat_bar label="メモリ配分" name="physicsmemoryallocated"/>
+					<stat_bar label="エージェントの更新/秒" name="simagentups"/>
+					<stat_bar label="メインエージェント" name="simmainagents"/>
+					<stat_bar label="チャイルドエージェント" name="simchildagents"/>
+					<stat_bar label="オブジェクト" name="simobjects"/>
+					<stat_bar label="アクティブなオブジェクト" name="simactiveobjects"/>
+					<stat_bar label="アクティブなスクリプト" name="simactivescripts"/>
+					<stat_bar label="スクリプトイベント" name="simscripteps"/>
+					<stat_bar label="パケットイン" name="siminpps"/>
+					<stat_bar label="パケットアウト" name="simoutpps"/>
+					<stat_bar label="保留中のダウンロード" name="simpendingdownloads"/>
+					<stat_bar label="保留中のアップロード" name="simpendinguploads"/>
+					<stat_bar label="未送信バイト合計" name="simtotalunackedbytes"/>
+				</stat_view>
+				<stat_view label="時間(ms)" name="simperf">
+					<stat_bar label="フレーム時間合計" name="simframemsec"/>
+					<stat_bar label="総時間数" name="simnetmsec"/>
+					<stat_bar label="物理的作用時間" name="simsimphysicsmsec"/>
+					<stat_bar label="シミュレーション時間" name="simsimothermsec"/>
+					<stat_bar label="エージェント時間" name="simagentmsec"/>
+					<stat_bar label="イメージ時間" name="simimagesmsec"/>
+					<stat_bar label="スクリプト時間" name="simscriptmsec"/>
+				</stat_view>
+			</stat_view>
+		</container_view>
+	</scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
index 5840773dbdd..880f42840cf 100644
--- a/indra/newview/skins/default/xui/ja/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tools.xml
@@ -1,511 +1,477 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="制作">
-	<button label="" label_selected="" name="button focus" tool_tip="フォーカス"/>
-	<button label="" label_selected="" name="button move" tool_tip="動かす"/>
-	<button label="" label_selected="" name="button edit" tool_tip="編集"/>
-	<button label="" label_selected="" name="button create" tool_tip="作成"/>
-	<button label="" label_selected="" name="button land" tool_tip="土地"/>
-	<radio_group name="focus_radio_group">
-		<radio_item label="ズーム" name="radio zoom"/>
-		<radio_item label="軌跡(Ctrl)" name="radio orbit"/>
-		<radio_item label="パン(Ctrl+Shift)" name="radio pan"/>
-	</radio_group>
-	<radio_group name="move_radio_group">
-		<radio_item label="移動" name="radio move"/>
-		<radio_item label="持ち上げる(Ctrl)" name="radio lift"/>
-		<radio_item label="スピン(Ctrl+Shift)" name="radio spin"/>
-	</radio_group>
-	<radio_group name="edit_radio_group">
-		<radio_item label="位置" name="radio position"/>
-		<radio_item label="回転(Ctrl)" name="radio rotate"/>
-		<radio_item label="引伸ばす(Ctrl+Shift)" name="radio stretch"/>
-		<radio_item label="テクスチャーを選択" name="radio select face"/>
-	</radio_group>
-	<check_box label="リンク部位を編集" name="checkbox edit linked parts"/>
-	<text name="text ruler mode" width="88">
-		ルーラー:
-	</text>
-	<combo_box left_delta="60" name="combobox grid mode" width="76">
-		<combo_box.item name="World" label="世界"/>
-		<combo_box.item name="Local" label="ローカル"/>
-		<combo_box.item name="Reference" label="リファレンス"/>
-	</combo_box>
-	<check_box label="両側を引伸ばす" left="116" name="checkbox uniform"/>
-	<check_box label="テクスチャーを引伸ばす" name="checkbox stretch textures"/>
-	<check_box label="グリッド使用" left_delta="27" name="checkbox snap to grid"/>
-	<button label="オプション" label_selected="オプション" name="Options..."/>
-	<text name="text status">
-		移動するにはドラッグ、コピーするにはShiftキーを押しながらドラッグ
-	</text>
-	<button label="" label_selected="" name="ToolCube" tool_tip="キューブ"/>
-	<button label="" label_selected="" name="ToolPrism" tool_tip="プリズム"/>
-	<button label="" label_selected="" name="ToolPyramid" tool_tip="ピラミッド"/>
-	<button label="" label_selected="" name="ToolTetrahedron" tool_tip="4面体"/>
-	<button label="" label_selected="" name="ToolCylinder" tool_tip="シリンダー"/>
-	<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="半円柱"/>
-	<button label="" label_selected="" name="ToolCone" tool_tip="円錐"/>
-	<button label="" label_selected="" name="ToolHemiCone" tool_tip="半円錐"/>
-	<button label="" label_selected="" name="ToolSphere" tool_tip="球形"/>
-	<button label="" label_selected="" name="ToolHemiSphere" tool_tip="半球"/>
-	<button label="" label_selected="" name="ToolTorus" tool_tip="トーラス"/>
-	<button label="" label_selected="" name="ToolTube" tool_tip="チューブ"/>
-	<button label="" label_selected="" name="ToolRing" tool_tip="リング"/>
-	<button label="" label_selected="" name="ToolTree" tool_tip="樹木"/>
-	<button label="" label_selected="" name="ToolGrass" tool_tip="草地"/>
-	<check_box label="選択したものを保持" name="checkbox sticky"/>
-	<check_box label="選択したものをコピー" name="checkbox copy selection"/>
-	<check_box label="中央に位置" name="checkbox copy centers"/>
-	<check_box label="回転" name="checkbox copy rotates"/>
-	<radio_group name="land_radio_group">
-		<radio_item label="土地を選択" name="radio select land"/>
-		<radio_item label="ならす" name="radio flatten"/>
-		<radio_item label="隆起" name="radio raise"/>
-		<radio_item label="低くする" name="radio lower"/>
-		<radio_item label="滑らかにする" name="radio smooth"/>
-		<radio_item label="凸凹にする" name="radio noise"/>
-		<radio_item label="元に戻す" name="radio revert"/>
-	</radio_group>
-	<button label="適用" label_selected="適用" name="button apply to selection" tool_tip="選択した土地を修正"/>
-	<text name="Bulldozer:">
-		ブルドーザー:
-	</text>
-	<text name="Dozer Size:">
-		サイズ
-	</text>
-	<text name="Strength:">
-		強度
-	</text>
-	<text name="obj_count">
-		選択済オブジェクト:[COUNT]
-	</text>
-	<text name="prim_count">
-		プリム:[COUNT]
-	</text>
-	<tab_container name="Object Info Tabs" tab_max_width="150" tab_min_width="30">
-		<panel label="一般" name="General">
-			<text name="Name:">
-				名前:
-			</text>
-			<text name="Description:">
-				説明:
-			</text>
-			<text name="Creator:">
-				クリエーター
-			</text>
-			<text name="Creator Name">
-				Thrax Linden
-			</text>
-			<button label="情報..." label_selected="情報..." name="button creator profile"/>
-			<text name="Owner:">
-				オーナー:
-			</text>
-			<text name="Owner Name">
-				Thrax Linden
-			</text>
-			<button label="情報..." label_selected="情報..." name="button owner profile"/>
-			<text name="Group:">
-				グループ:
-			</text>
-			<text name="Group Name Proxy">
-				Linden家
-			</text>
-			<button label="設定..." label_selected="設定..." name="button set group"/>
-			<text name="Permissions:">
-				権限
-			</text>
-
-			<check_box label="グループで共同管理" name="checkbox share with group" tool_tip="設定したグループに属するすべてのメンバーとこのオブジェクトの権限を共有します。 役割制限を有効にするには、譲渡する必要があります。"/>
-			<string name="text deed continued">
-				譲渡...
-			</string>
-			<string name="text deed">
-				譲渡
-			</string>
-			<button label="譲渡..." label_selected="譲渡..." name="button deed" tool_tip="グループ共有のオブジェクトは、グループ・オフィサーにより譲渡可能です。"/>
-			<check_box label="誰に対しても移動を許可" name="checkbox allow everyone move"/>
-			<check_box label="誰に対してもコピーを許可" name="checkbox allow everyone copy"/>
-			<check_box label="検索に表示" name="search_check" tool_tip="検索結果で、このオブジェクトを人に見せる"/>
-			<check_box label="売り出し中" name="checkbox for sale"/>
-			<text name="Cost">
-				価格:  L$
-			</text>
-			<combo_box name="sale type">
-				<combo_box.item label="コピー"  name="Copy"/>
-				<combo_box.item label="コンテンツ" name="Contents"/>
-				<combo_box.item label="オリジナル" name="Original"/>
-			</combo_box>
-
-			<text name="label click action">
-				左クリックすると:
-			</text>
-			<combo_box name="clickaction">
-				<combo_box.item name="Touch/grab(default)" label="触る/つかむ (デフォルト)"/>
-				<combo_box.item name="Sitonobject" label="オブジェクトに座る"/>
-				<combo_box.item name="Buyobject" label="オブジェクトを購入"/>
-				<combo_box.item name="Payobject" label="オブジェクトへの支払い"/>
-				<combo_box.item name="Open" label="開く"/>
-				<combo_box.item name="Play" label="区画メディアを再生"/>
-				<combo_box.item name="Opemmedia" label="区画メディアを開く"/>
-			</combo_box>
-		<panel name="perms_build">
-			<text name="perm_modify">
-				このオブジェクトは修正できます。
-			</text>
-			<text name="B:">
-				B:
-			</text>
-			<text name="O:">
-				O:
-			</text>
-			<text name="G:">
-				G:
-			</text>
-			<text name="E:">
-				E:
-			</text>
-			<text name="N:">
-				N:
-			</text>
-			<text name="F:">
-				F:
-			</text>
-			<text name="Next owner can:">
-				次のオーナーが実行できる操作:
-			</text>
-			<check_box label="修正" name="checkbox next owner can modify"/>
-			<check_box label="コピー" name="checkbox next owner can copy"/>
-			<check_box name="checkbox next owner can transfer"/>
-		</panel>
-			<string name="text modify info 1">
-				このオブジェクトは修正できます。
-			</string>
-			<string name="text modify info 2">
-				これらのオブジェクトは修正できます。
-			</string>
-			<string name="text modify info 3">
-				このオブジェクトは修正できません。
-			</string>
-			<string name="text modify info 4">
-				これらのオブジェクトは修正できません。
-			</string>
-			<string name="text modify warning">
-				権限を設定するには、オブジェクト全体を選択する必要があります。
-			</string>
-			<string name="Cost Default">
-				価格: L$
-			</string>
-			<string name="Cost Total">
-				合計価格: L$
-			</string>
-			<string name="Cost Per Unit">
-				単価: L$
-			</string>
-			<string name="Cost Mixed">
-				混合価格
-			</string>
-			<string name="Sale Mixed">
-				混合販売
-			</string>
-		</panel>
-		<panel label="形状" name="Object">
-			<text name="select_single">
-				プリムを1つだけ選択して編集してください
-			</text>
-			<text name="edit_object">
-				オブジェクトのパラメーターを編集:
-			</text>
-			<check_box label="ロック済み" name="checkbox locked" tool_tip="オブジェクトの移動と削除を禁止します。 この機能を使うと、構築中に意図しない編集を防ぐことができます。"/>
-			<check_box label="物理" name="Physical Checkbox Ctrl" tool_tip="オブジェクトに対する重力の作用と影響を有効にする"/>
-			<check_box label="臨時" name="Temporary Checkbox Ctrl" tool_tip="作成1分後にオブジェクトを削除"/>
-			<check_box label="ファントム" name="Phantom Checkbox Ctrl" tool_tip="オブジェクト同士の衝突またはオブジェクトとアバターの衝突を回避"/>
-			<text name="label position">
-				位置(メートル)
-			</text>
-			<spinner label="X" name="Pos X"/>
-			<spinner label="Y" name="Pos Y"/>
-			<spinner label="Z" name="Pos Z"/>
-			<text name="label size">
-				サイズ(メートル)
-			</text>
-			<spinner label="X" name="Scale X"/>
-			<spinner label="Y" name="Scale Y"/>
-			<spinner label="Z" name="Scale Z"/>
-			<text name="label rotation">
-				回転(度)
-			</text>
-			<spinner label="X" name="Rot X"/>
-			<spinner label="Y" name="Rot Y"/>
-			<spinner label="Z" name="Rot Z"/>
-			<text name="label material">
-				素材
-			</text>
-			<combo_box name="material">
-				<combo_box.item name="Stone" label="石材"/>
-				<combo_box.item name="Metal" label="金属"/>
-				<combo_box.item name="Glass" label="ガラス"/>
-				<combo_box.item name="Wood" label="木材"/>
-				<combo_box.item name="Flesh" label="肌"/>
-				<combo_box.item name="Plastic" label="プラスチック"/>
-				<combo_box.item name="Rubber" label="ゴム"/>
-			</combo_box>
-			<text name="label basetype">
-				建造物ブロック・タイプ
-			</text>
-			<combo_box name="comboBaseType">
-				<combo_box.item name="Box" label="ボックス"/>
-				<combo_box.item name="Cylinder" label="シリンダー"/>
-				<combo_box.item name="Prism" label="プリズム"/>
-				<combo_box.item name="Sphere" label="球形"/>
-				<combo_box.item name="Torus" label="トーラス"/>
-				<combo_box.item name="Tube" label="チューブ"/>
-				<combo_box.item name="Ring" label="リング"/>
-				<combo_box.item name="Sculpted" label="スカルプト"/>
-			</combo_box>
-			<text name="text cut">
-				パス・カットの始点と終点
-			</text>
-			<spinner label="B" name="cut begin"/>
-			<spinner label="E" name="cut end"/>
-			<text name="text hollow">
-				中空(空洞)
-			</text>
-			<text name="text skew">
-				傾斜
-			</text>
-			<text name="Hollow Shape">
-				中空(空洞)の形
-			</text>
-			<combo_box name="hole">
-				<combo_box.item name="Default" label="デフォルト"/>
-				<combo_box.item name="Circle" label="サークル"/>
-				<combo_box.item name="Square" label="正方形"/>
-				<combo_box.item name="Triangle" label="三角形"/>
-			</combo_box>
-			<text name="text twist">
-				ひねりの始まりと終わり
-			</text>
-			<spinner label="B" name="Twist Begin"/>
-			<spinner label="E" name="Twist End"/>
-			<text name="scale_taper">
-				テーパー
-			</text>
-			<text name="scale_hole">
-				穴寸法
-			</text>
-			<spinner label="X" name="Taper Scale X"/>
-			<spinner label="Y" name="Taper Scale Y"/>
-			<text name="text topshear">
-				上部層
-			</text>
-			<spinner label="X" name="Shear X"/>
-			<spinner label="Y" name="Shear Y"/>
-			<text name="advanced_cut">
-				プロフィール・カットの始点と終点
-			</text>
-			<text name="advanced_dimple">
-				くぼみの始点と終点
-			</text>
-			<text name="advanced_slice">
-				切り取りの始点と終点
-			</text>
-			<spinner label="B" name="Path Limit Begin"/>
-			<spinner label="E" name="Path Limit End"/>
-			<text name="text taper2">
-				テーパー
-			</text>
-			<spinner label="X" name="Taper X"/>
-			<spinner label="Y" name="Taper Y"/>
-			<text name="text radius delta">
-				半径
-			</text>
-			<text name="text revolutions">
-				回転体
-			</text>
-			<texture_picker label="スカルプトテクスチャー" name="sculpt texture control" tool_tip="クリックして写真を選択してください。"/>
-			<check_box label="ミラー" name="sculpt mirror control" tool_tip="スカルプトされたプリムをX軸上で反転"/>
-			<check_box label="裏返し" name="sculpt invert control" tool_tip="スカルプトされたプリムのノーマルを逆転させ、裏返しに表示"/>
-			<text name="label sculpt type">
-				縫い目のタイプ
-			</text>
-			<combo_box name="sculpt type control">
-				<combo_box.item name="None" label="(なし)"/>
-				<combo_box.item name="Sphere" label="球形"/>
-				<combo_box.item name="Torus" label="トーラス"/>
-				<combo_box.item name="Plane" label="平面"/>
-				<combo_box.item name="Cylinder" label="シリンダー"/>
-			</combo_box>
-		</panel>
-		<panel label="特徴" name="Features">
-			<text name="select_single">
-				プリムを1つだけ選択して編集してください
-			</text>
-			<text name="edit_object">
-				オブジェクトの特徴を編集:
-			</text>
-			<check_box label="フレキシブル・パス" name="Flexible1D Checkbox Ctrl" tool_tip="Z軸を中心とするオブジェクトの折れ曲がりを有効にする (クライアント側のみ)"/>
-			<spinner label="柔軟性" name="FlexNumSections" width="135" label_width="72"/>
-			<spinner label="重力" name="FlexGravity" width="135" label_width="72"/>
-			<spinner label="ドラッグ" name="FlexFriction" width="135" label_width="72"/>
-			<spinner label="風" name="FlexWind" width="135" label_width="72"/>
-			<spinner label="ç·Šå¼µ" name="FlexTension" width="135" label_width="72"/>
-			<spinner label="X軸方向の力" name="FlexForceX" width="135" label_width="72"/>
-			<spinner label="Y軸方向の力" name="FlexForceY" width="135" label_width="72"/>
-			<spinner label="Z軸方向の力" name="FlexForceZ" width="135" label_width="72"/>
-			<check_box label="光" name="Light Checkbox Ctrl" tool_tip="オブジェクトが発光"/>
-			<text name="label color">
-				色
-			</text>
-			<color_swatch label="" name="colorswatch" tool_tip="カラー・ピッカーをクリックして開く" left_delta="74"/>
-			<spinner label="輝度" name="Light Intensity" width="135" label_width="72"/>
-			<spinner label="半径" name="Light Radius" width="135" label_width="72"/>
-			<spinner label="弱まる" name="Light Falloff" width="135" label_width="72"/>
-		</panel>
-		<panel label="材質" name="Texture">
-			<texture_picker label="テクスチャー" name="texture control" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色" name="colorswatch" tool_tip="カラー・ピッカーをクリックして開く"/>
-			<text name="color trans">
-				透過度 %
-			</text>
-			<text name="glow label">
-				グロー
-			</text>
-			<check_box label="明るさ全開" name="checkbox fullbright"/>
-			<text name="tex gen">
-				マッピング
-			</text>
-			<combo_box name="combobox texgen">
-				<combo_box.item name="Default" label="デフォルト"/>
-				<combo_box.item name="Planar" label="平面"/>
-			</combo_box>
-			<text name="label shininess">
-				輝き
-			</text>
-			<combo_box name="combobox shininess">
-				<combo_box.item name="None" label="なし"/>
-				<combo_box.item name="Low" label="低"/>
-				<combo_box.item name="Medium" label="中"/>
-				<combo_box.item name="High" label="高"/>
-			</combo_box>
-			<text name="label bumpiness">
-				凹凸
-			</text>
-			<combo_box name="combobox bumpiness">
-				<combo_box.item name="None" label="なし"/>
-				<combo_box.item name="Brightness" label="明るさ"/>
-				<combo_box.item name="Darkness" label="暗さ"/>
-				<combo_box.item name="woodgrain" label="木目調"/>
-				<combo_box.item name="bark" label="木の皮"/>
-				<combo_box.item name="bricks" label="レンガ"/>
-				<combo_box.item name="checker" label="チェッカー"/>
-				<combo_box.item name="concrete" label="コンクリート"/>
-				<combo_box.item name="crustytile" label="クラスティ・タイル"/>
-				<combo_box.item name="cutstone" label="カットストーン"/>
-				<combo_box.item name="discs" label="ディスク"/>
-				<combo_box.item name="gravel" label="砂利"/>
-				<combo_box.item name="petridish" label="ペトリ"/>
-				<combo_box.item name="siding" label="羽目板"/>
-				<combo_box.item name="stonetile" label="ストーン・タイル"/>
-				<combo_box.item name="stucco" label="しっくい"/>
-				<combo_box.item name="suction" label="吸い込み"/>
-				<combo_box.item name="weave" label="織目"/>
-			</combo_box>
-			<text name="tex scale">
-				面ごとに繰り返す
-			</text>
-			<spinner label="水平(U)" name="TexScaleU"/>
-			<check_box label="反転" name="checkbox flip s"/>
-			<spinner label="垂直(V)" name="TexScaleV"/>
-			<check_box label="反転" name="checkbox flip t"/>
-			<text name="tex rotate">
-				回転(度)
-			</text>
-			<string name="string repeats per meter">
-				メートルごとに繰返す
-			</string>
-			<string name="string repeats per face">
-				面ごとに繰り返す
-			</string>
-			<text name="rpt">
-				メートルごとに繰返す
-			</text>
-			<button label="適用" label_selected="適用" name="button apply"/>
-			<text name="tex offset">
-				ずれ
-			</text>
-			<spinner label="水平(U)" name="TexOffsetU"/>
-			<spinner label="垂直(V)" name="TexOffsetV"/>
-			<text name="textbox autofix" width="190">
-				メディア・テクスチャーを揃える
-(最初にロードすること)
-			</text>
-			<button bottom="-365" label="揃える" label_selected="揃える" left="155" name="button align"/>
-		</panel>
-		<panel label="中身" name="Contents">
-			<button label="新しいスクリプト" label_selected="新しいスクリプト" name="button new script" width="120"/>
-			<button label="権限" name="button permissions" left_delta="130" width="80"/>
-		</panel>
-	</tab_container>
-	<panel name="land info panel">
-		<text name="label_parcel_info">
-			区画情報
-		</text>
-		<text name="label_area_price" width="200">
-			価格:[AREA]平方メートルあたりL$[PRICE]
-		</text>
-		<text name="label_area" width="200">
-			面積:[AREA]平方メートル
-		</text>
-		<button label="土地情報..." label_selected="土地情報..." name="button about land"/>
-		<check_box label="オーナーを表示" name="checkbox show owners" tool_tip="所有権別に区画を色分けします: &#10;&#10;緑 = あなたの土地 &#10;アクア = あなたのグループ所有地 &#10;赤 = 他人が所有する土地 &#10;黄色 = 売り出し中 &#10;紫 = オークション &#10;グレー = パブリック"/>
-		<button label="?" label_selected="?" name="button show owners help" left_delta="114"/>
-		<text name="label_parcel_modify">
-			区画の編集
-		</text>
-		<button label="再分割" label_selected="再分割" name="button subdivide land"/>
-		<button label="統合する" label_selected="統合する" name="button join land"/>
-		<text name="label_parcel_trans">
-			土地取引
-		</text>
-		<button label="土地を購入" label_selected="土地を購入" name="button buy land"/>
-		<button label="土地を放棄" label_selected="土地を放棄" name="button abandon land"/>
-	</panel>
-	<floater.string name="status_rotate">
-		色の付いたバンドをドラッグしてオブジェクトを回転
-	</floater.string>
-	<floater.string name="status_scale">
-		選択した側をクリックし、ドラッグして引き伸ばす
-	</floater.string>
-	<floater.string name="status_move">
-		移動:ドラッグ、コピー:Shiftを押しながらドラッグ
-	</floater.string>
-	<floater.string name="status_modifyland">
-		土地をクリックし、ボタンを押したまま入力して修正変更
-	</floater.string>
-	<floater.string name="status_camera">
-		クリックしドラッグして視界を調整
-	</floater.string>
-	<floater.string name="status_grab">
-		移動:ドラッグ、持ち上げ:Ctrl、回転:Ctrl+Shift
-	</floater.string>
-	<floater.string name="status_place">
-		インワールドでクリックして作成
-	</floater.string>
-	<floater.string name="status_selectland">
-		土地をクリックし、ドラッグして選択
-	</floater.string>
-	<floater.string name="grid_screen_text">
-		画面
-	</floater.string>
-	<floater.string name="grid_local_text">
-		ローカル
-	</floater.string>
-	<floater.string name="grid_world_text">
-		世界
-	</floater.string>
-	<floater.string name="grid_reference_text">
-		参照
-	</floater.string>
-	<floater.string name="grid_attachment_text">
-		アタッチメント
-	</floater.string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="toolbox floater" short_title="制作ツール" title="">
+	<floater.string name="status_rotate">
+		色の付いたバンドをドラッグしてオブジェクトを回転
+	</floater.string>
+	<floater.string name="status_scale">
+		選択した側をクリックし、ドラッグして引き伸ばす
+	</floater.string>
+	<floater.string name="status_move">
+		移動:ドラッグ、コピー:Shiftを押しながらドラッグ
+	</floater.string>
+	<floater.string name="status_modifyland">
+		土地をクリックし、ボタンを押したまま入力して修正変更
+	</floater.string>
+	<floater.string name="status_camera">
+		クリック・ドラッグで視界を移動
+	</floater.string>
+	<floater.string name="status_grab">
+		移動:ドラッグ、持ち上げ:Ctrl、回転:Ctrl+Shift
+	</floater.string>
+	<floater.string name="status_place">
+		インワールドでクリックして作成
+	</floater.string>
+	<floater.string name="status_selectland">
+		土地をクリックし、ドラッグして選択
+	</floater.string>
+	<floater.string name="grid_screen_text">
+		画面
+	</floater.string>
+	<floater.string name="grid_local_text">
+		ローカル
+	</floater.string>
+	<floater.string name="grid_world_text">
+		世界
+	</floater.string>
+	<floater.string name="grid_reference_text">
+		参照
+	</floater.string>
+	<floater.string name="grid_attachment_text">
+		アタッチメント
+	</floater.string>
+	<button label="" label_selected="" name="button focus" tool_tip="フォーカス"/>
+	<button label="" label_selected="" name="button move" tool_tip="動かす"/>
+	<button label="" label_selected="" name="button edit" tool_tip="編集"/>
+	<button label="" label_selected="" name="button create" tool_tip="作成"/>
+	<button label="" label_selected="" name="button land" tool_tip="土地"/>
+	<text name="text status">
+		移動するにはドラッグ、コピーするにはShiftキーを押しながらドラッグ
+	</text>
+	<radio_group name="focus_radio_group">
+		<radio_item label="ズーム" name="radio zoom"/>
+		<radio_item label="軌跡(Ctrl)" name="radio orbit"/>
+		<radio_item label="パン(Ctrl+Shift)" name="radio pan"/>
+	</radio_group>
+	<radio_group name="move_radio_group">
+		<radio_item label="移動" name="radio move"/>
+		<radio_item label="持ち上げる(Ctrl)" name="radio lift"/>
+		<radio_item label="スピン(Ctrl+Shift)" name="radio spin"/>
+	</radio_group>
+	<radio_group name="edit_radio_group">
+		<radio_item label="移動" name="radio position"/>
+		<radio_item label="回転(Ctrl)" name="radio rotate"/>
+		<radio_item label="引伸ばす(Ctrl+Shift)" name="radio stretch"/>
+		<radio_item label="テクスチャーを選択" name="radio select face"/>
+	</radio_group>
+	<check_box label="リンク部分を編集" name="checkbox edit linked parts"/>
+	<check_box label="両側を引伸ばす" left="116" name="checkbox uniform"/>
+	<check_box initial_value="true" label="テクスチャーを引伸ばす" name="checkbox stretch textures"/>
+	<check_box initial_value="true" label="グリッドポイントにスナップ" left_delta="27" name="checkbox snap to grid"/>
+	<combo_box left_delta="60" name="combobox grid mode" width="76">
+		<combo_box.item label="ワールドルーラ" name="World"/>
+		<combo_box.item label="ローカルルーラ" name="Local"/>
+		<combo_box.item label="レファレンスルーラ" name="Reference"/>
+	</combo_box>
+	<button label="オプション" label_selected="オプション" name="Options..." tool_tip="グリッドオプションを設定"/>
+	<button label="" label_selected="" name="ToolCube" tool_tip="キューブ"/>
+	<button label="" label_selected="" name="ToolPrism" tool_tip="プリズム"/>
+	<button label="" label_selected="" name="ToolPyramid" tool_tip="ピラミッド"/>
+	<button label="" label_selected="" name="ToolTetrahedron" tool_tip="4面体"/>
+	<button label="" label_selected="" name="ToolCylinder" tool_tip="シリンダー"/>
+	<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="半円柱"/>
+	<button label="" label_selected="" name="ToolCone" tool_tip="円錐"/>
+	<button label="" label_selected="" name="ToolHemiCone" tool_tip="半円錐"/>
+	<button label="" label_selected="" name="ToolSphere" tool_tip="球形"/>
+	<button label="" label_selected="" name="ToolHemiSphere" tool_tip="半球"/>
+	<button label="" label_selected="" name="ToolTorus" tool_tip="トーラス"/>
+	<button label="" label_selected="" name="ToolTube" tool_tip="チューブ"/>
+	<button label="" label_selected="" name="ToolRing" tool_tip="リング"/>
+	<button label="" label_selected="" name="ToolTree" tool_tip="樹木"/>
+	<button label="" label_selected="" name="ToolGrass" tool_tip="草地"/>
+	<check_box label="選択したものを保持" name="checkbox sticky"/>
+	<check_box label="選択したものをコピー" name="checkbox copy selection"/>
+	<check_box initial_value="true" label="中央にコピー" name="checkbox copy centers"/>
+	<check_box label="回転させてコピー" name="checkbox copy rotates"/>
+	<radio_group name="land_radio_group">
+		<radio_item label="土地を選択" name="radio select land"/>
+		<radio_item label="ならす" name="radio flatten"/>
+		<radio_item label="隆起" name="radio raise"/>
+		<radio_item label="低くする" name="radio lower"/>
+		<radio_item label="滑らかにする" name="radio smooth"/>
+		<radio_item label="凸凹にする" name="radio noise"/>
+		<radio_item label="元に戻す" name="radio revert"/>
+	</radio_group>
+	<text name="Bulldozer:">
+		ブルドーザー:
+	</text>
+	<text name="Dozer Size:">
+		サイズ
+	</text>
+	<text name="Strength:">
+		強度
+	</text>
+	<button label="適用" label_selected="適用" name="button apply to selection" tool_tip="選択した土地を修正"/>
+	<text name="obj_count">
+		オブジェクト: [COUNT]
+	</text>
+	<text name="prim_count">
+		プリム: [COUNT]
+	</text>
+	<tab_container name="Object Info Tabs" tab_max_width="150" tab_min_width="30">
+		<panel label="一般" name="General">
+			<panel.string name="text deed continued">
+				譲渡
+			</panel.string>
+			<panel.string name="text deed">
+				譲渡
+			</panel.string>
+			<panel.string name="text modify info 1">
+				このオブジェクトは修正できます。
+			</panel.string>
+			<panel.string name="text modify info 2">
+				これらのオブジェクトは修正できます。
+			</panel.string>
+			<panel.string name="text modify info 3">
+				このオブジェクトは修正できません。
+			</panel.string>
+			<panel.string name="text modify info 4">
+				これらのオブジェクトは修正できません。
+			</panel.string>
+			<panel.string name="text modify warning">
+				オブジェクト全体を選択して権限の設定を行ってください。
+			</panel.string>
+			<panel.string name="Cost Default">
+				価格: L$
+			</panel.string>
+			<panel.string name="Cost Total">
+				合計価格: L$
+			</panel.string>
+			<panel.string name="Cost Per Unit">
+				単価: L$
+			</panel.string>
+			<panel.string name="Cost Mixed">
+				混合価格
+			</panel.string>
+			<panel.string name="Sale Mixed">
+				混合販売
+			</panel.string>
+			<text name="Name:">
+				名前:
+			</text>
+			<text name="Description:">
+				説明:
+			</text>
+			<text name="Creator:">
+				クリエーター
+			</text>
+			<text name="Creator Name">
+				Thrax Linden
+			</text>
+			<text name="Owner:">
+				オーナー:
+			</text>
+			<text name="Owner Name">
+				Thrax Linden
+			</text>
+			<text name="Group:">
+				グループ:
+			</text>
+			<button label="設定..." label_selected="設定..." name="button set group" tool_tip="このオブジェクト権限を共有するグループを選択"/>
+			<name_box initial_value="ローディング..." name="Group Name Proxy"/>
+			<button label="譲渡" label_selected="譲渡" name="button deed" tool_tip="このアイテムを譲渡すると次の所有者の権限が適用されます。 グループ共有オブジェクトは、グループのオフィサーが譲渡できます。"/>
+			<check_box label="共有" name="checkbox share with group" tool_tip="設定したグループのメンバー全員にこのオブジェクトの修正権限を与えます。 役割制限を有効にするには、譲渡する必要があります。"/>
+			<text name="label click action">
+				クリックで:
+			</text>
+			<combo_box name="clickaction">
+				<combo_box.item label="触れる(デフォルト)" name="Touch/grab(default)"/>
+				<combo_box.item label="オブジェクトに座る" name="Sitonobject"/>
+				<combo_box.item label="オブジェクトを購入" name="Buyobject"/>
+				<combo_box.item label="オブジェクトへの支払い" name="Payobject"/>
+				<combo_box.item label="開く" name="Open"/>
+			</combo_box>
+			<check_box label="販売中:" name="checkbox for sale"/>
+			<combo_box name="sale type">
+				<combo_box.item label="コピー" name="Copy"/>
+				<combo_box.item label="コンテンツ" name="Contents"/>
+				<combo_box.item label="オリジナル" name="Original"/>
+			</combo_box>
+			<spinner label="価格: L$" name="Edit Cost"/>
+			<check_box label="検索に表示" name="search_check" tool_tip="検索結果で、このオブジェクトを人に見せる"/>
+			<panel name="perms_build">
+				<text name="perm_modify">
+					このオブジェクトを修正できます
+				</text>
+				<text name="Anyone can:">
+					全員:
+				</text>
+				<check_box label="コピー" name="checkbox allow everyone copy"/>
+				<text name="Next owner can:">
+					次の所有者:
+				</text>
+				<check_box label="修正" name="checkbox next owner can modify"/>
+				<check_box label="コピー" name="checkbox next owner can copy"/>
+				<check_box label="再販・プレゼント" name="checkbox next owner can transfer" tool_tip="次の所有者はこのオブジェクトを他人にあげたり再販することができます"/>
+				<text name="B:">
+					B:
+				</text>
+				<text name="O:">
+					O:
+				</text>
+				<text name="G:">
+					G:
+				</text>
+				<text name="E:">
+					E:
+				</text>
+				<text name="N:">
+					N:
+				</text>
+				<text name="F:">
+					F:
+				</text>
+			</panel>
+		</panel>
+		<panel label="形状" name="Object">
+			<check_box label="ロック済み" name="checkbox locked" tool_tip="オブジェクトの移動と削除を禁止します。 この機能を使うと、構築中に意図しない編集を防ぐことができます。"/>
+			<check_box label="物理" name="Physical Checkbox Ctrl" tool_tip="オブジェクトに対する重力の作用と影響を有効にする"/>
+			<check_box label="臨時" name="Temporary Checkbox Ctrl" tool_tip="作成1分後にオブジェクトを削除"/>
+			<check_box label="ファントム" name="Phantom Checkbox Ctrl" tool_tip="オブジェクト同士の衝突またはオブジェクトとアバターの衝突を回避"/>
+			<text name="label position">
+				位置(メートル)
+			</text>
+			<spinner label="X" name="Pos X"/>
+			<spinner label="Y" name="Pos Y"/>
+			<spinner label="Z" name="Pos Z"/>
+			<text name="label size">
+				サイズ(メートル)
+			</text>
+			<spinner label="X" name="Scale X"/>
+			<spinner label="Y" name="Scale Y"/>
+			<spinner label="Z" name="Scale Z"/>
+			<text name="label rotation">
+				回転(度)
+			</text>
+			<spinner label="X" name="Rot X"/>
+			<spinner label="Y" name="Rot Y"/>
+			<spinner label="Z" name="Rot Z"/>
+			<combo_box name="comboBaseType">
+				<combo_box.item label="ボックス" name="Box"/>
+				<combo_box.item label="シリンダー" name="Cylinder"/>
+				<combo_box.item label="プリズム" name="Prism"/>
+				<combo_box.item label="球形" name="Sphere"/>
+				<combo_box.item label="トーラス" name="Torus"/>
+				<combo_box.item label="チューブ" name="Tube"/>
+				<combo_box.item label="リング" name="Ring"/>
+				<combo_box.item label="スカルプト" name="Sculpted"/>
+			</combo_box>
+			<combo_box name="material">
+				<combo_box.item label="石材" name="Stone"/>
+				<combo_box.item label="金属" name="Metal"/>
+				<combo_box.item label="ガラス" name="Glass"/>
+				<combo_box.item label="木材" name="Wood"/>
+				<combo_box.item label="肌" name="Flesh"/>
+				<combo_box.item label="プラスチック" name="Plastic"/>
+				<combo_box.item label="ゴム" name="Rubber"/>
+			</combo_box>
+			<text name="text cut">
+				パスカット(始点/終点)
+			</text>
+			<spinner label="B" name="cut begin"/>
+			<spinner label="E" name="cut end"/>
+			<text name="text hollow">
+				中空(空洞)
+			</text>
+			<text name="text skew">
+				傾斜
+			</text>
+			<text name="Hollow Shape">
+				中空(空洞)の形
+			</text>
+			<combo_box name="hole">
+				<combo_box.item label="デフォルト" name="Default"/>
+				<combo_box.item label="サークル" name="Circle"/>
+				<combo_box.item label="正方形" name="Square"/>
+				<combo_box.item label="三角形" name="Triangle"/>
+			</combo_box>
+			<text name="text twist">
+				ひねり(始点/終点)
+			</text>
+			<spinner label="B" name="Twist Begin"/>
+			<spinner label="E" name="Twist End"/>
+			<text name="scale_taper">
+				テーパー
+			</text>
+			<text name="scale_hole">
+				穴寸法
+			</text>
+			<spinner label="X" name="Taper Scale X"/>
+			<spinner label="Y" name="Taper Scale Y"/>
+			<text name="text topshear">
+				上部層
+			</text>
+			<spinner label="X" name="Shear X"/>
+			<spinner label="Y" name="Shear Y"/>
+			<text name="advanced_cut">
+				プロフィール・カット(始点/終点)
+			</text>
+			<text name="advanced_dimple">
+				くぼみ(始点/終点)
+			</text>
+			<text name="advanced_slice">
+				切り取り(始点/終点)
+			</text>
+			<spinner label="B" name="Path Limit Begin"/>
+			<spinner label="E" name="Path Limit End"/>
+			<text name="text taper2">
+				テーパー
+			</text>
+			<spinner label="X" name="Taper X"/>
+			<spinner label="Y" name="Taper Y"/>
+			<text name="text radius delta">
+				半径
+			</text>
+			<text name="text revolutions">
+				回転体
+			</text>
+			<texture_picker label="スカルプトテクスチャー" name="sculpt texture control" tool_tip="クリックして写真を選択してください。"/>
+			<check_box label="ミラー" name="sculpt mirror control" tool_tip="スカルプトされたプリムをX軸上で反転"/>
+			<check_box label="裏返し" name="sculpt invert control" tool_tip="スカルプトされたプリムのノーマルを逆転させ、裏返しに表示"/>
+			<text name="label sculpt type">
+				縫い目のタイプ
+			</text>
+			<combo_box name="sculpt type control">
+				<combo_box.item label="(なし)" name="None"/>
+				<combo_box.item label="球形" name="Sphere"/>
+				<combo_box.item label="トーラス" name="Torus"/>
+				<combo_box.item label="平面" name="Plane"/>
+				<combo_box.item label="シリンダー" name="Cylinder"/>
+			</combo_box>
+		</panel>
+		<panel label="特徴" name="Features">
+			<text name="select_single">
+				プリムを1つだけ選択して編集してください
+			</text>
+			<text name="edit_object">
+				オブジェクトの特徴を編集:
+			</text>
+			<check_box label="フレキシブル・パス" name="Flexible1D Checkbox Ctrl" tool_tip="Z軸を中心とするオブジェクトの折れ曲がりを有効にする (クライアント側のみ)"/>
+			<spinner label="柔軟性" label_width="72" name="FlexNumSections" width="135"/>
+			<spinner label="重力" label_width="72" name="FlexGravity" width="135"/>
+			<spinner label="ドラッグ" label_width="72" name="FlexFriction" width="135"/>
+			<spinner label="風" label_width="72" name="FlexWind" width="135"/>
+			<spinner label="ç·Šå¼µ" label_width="72" name="FlexTension" width="135"/>
+			<spinner label="X軸方向の力" label_width="72" name="FlexForceX" width="135"/>
+			<spinner label="Y軸方向の力" label_width="72" name="FlexForceY" width="135"/>
+			<spinner label="Z軸方向の力" label_width="72" name="FlexForceZ" width="135"/>
+			<check_box label="光" name="Light Checkbox Ctrl" tool_tip="オブジェクトが発光"/>
+			<color_swatch label="" left_delta="74" name="colorswatch" tool_tip="カラー・ピッカーをクリックして開く"/>
+			<spinner label="輝度" label_width="72" name="Light Intensity" width="135"/>
+			<spinner label="半径" label_width="72" name="Light Radius" width="135"/>
+			<spinner label="弱まる" label_width="72" name="Light Falloff" width="135"/>
+		</panel>
+		<panel label="材質" name="Texture">
+			<panel.string name="string repeats per meter">
+				メートルごとに繰返す
+			</panel.string>
+			<panel.string name="string repeats per face">
+				面ごとに繰り返す
+			</panel.string>
+			<texture_picker label="テクスチャー" name="texture control" tool_tip="写真をクリックして選択"/>
+			<color_swatch label="色" name="colorswatch" tool_tip="カラー・ピッカーをクリックして開く"/>
+			<text name="color trans">
+				透過度 %
+			</text>
+			<text name="glow label">
+				グロー
+			</text>
+			<check_box label="明るさ全開" name="checkbox fullbright"/>
+			<text name="tex gen">
+				マッピング
+			</text>
+			<combo_box name="combobox texgen">
+				<combo_box.item label="デフォルト" name="Default"/>
+				<combo_box.item label="平面" name="Planar"/>
+			</combo_box>
+			<text name="label shininess">
+				輝き
+			</text>
+			<combo_box name="combobox shininess">
+				<combo_box.item label="なし" name="None"/>
+				<combo_box.item label="低" name="Low"/>
+				<combo_box.item label="中" name="Medium"/>
+				<combo_box.item label="高" name="High"/>
+			</combo_box>
+			<text name="label bumpiness">
+				凹凸
+			</text>
+			<combo_box name="combobox bumpiness">
+				<combo_box.item label="なし" name="None"/>
+				<combo_box.item label="明るさ" name="Brightness"/>
+				<combo_box.item label="暗さ" name="Darkness"/>
+				<combo_box.item label="木目調" name="woodgrain"/>
+				<combo_box.item label="木の皮" name="bark"/>
+				<combo_box.item label="レンガ" name="bricks"/>
+				<combo_box.item label="チェッカー" name="checker"/>
+				<combo_box.item label="コンクリート" name="concrete"/>
+				<combo_box.item label="クラスティ・タイル" name="crustytile"/>
+				<combo_box.item label="カットストーン" name="cutstone"/>
+				<combo_box.item label="ディスク" name="discs"/>
+				<combo_box.item label="砂利" name="gravel"/>
+				<combo_box.item label="ペトリ" name="petridish"/>
+				<combo_box.item label="羽目板" name="siding"/>
+				<combo_box.item label="ストーン・タイル" name="stonetile"/>
+				<combo_box.item label="しっくい" name="stucco"/>
+				<combo_box.item label="吸い込み" name="suction"/>
+				<combo_box.item label="織目" name="weave"/>
+			</combo_box>
+			<text name="tex scale">
+				面ごとに繰り返す
+			</text>
+			<spinner label="水平(U)" name="TexScaleU"/>
+			<check_box label="反転" name="checkbox flip s"/>
+			<spinner label="垂直(V)" name="TexScaleV"/>
+			<check_box label="反転" name="checkbox flip t"/>
+			<button label="適用" label_selected="適用" name="button apply"/>
+			<text name="tex offset">
+				Texture Offset
+			</text>
+			<spinner label="水平(U)" name="TexOffsetU"/>
+			<spinner label="垂直(V)" name="TexOffsetV"/>
+		</panel>
+		<panel label="中身" name="Contents">
+			<button label="新しいスクリプト" label_selected="新しいスクリプト" name="button new script" width="120"/>
+			<button label="権限" left_delta="130" name="button permissions" width="80"/>
+		</panel>
+	</tab_container>
+	<panel name="land info panel">
+		<text name="label_parcel_info">
+			区画情報
+		</text>
+		<text name="label_area_price" width="200">
+			価格:[AREA]平方メートルあたりL$[PRICE]
+		</text>
+		<text name="label_area" width="200">
+			面積:[AREA]平方メートル
+		</text>
+		<button label="土地情報..." label_selected="土地情報..." name="button about land"/>
+		<check_box label="オーナーを表示" name="checkbox show owners" tool_tip="所有権別に区画を色分けします: 
+
+緑 = あなたの土地 
+アクア = あなたのグループ所有地 
+赤 = 他人が所有する土地 
+黄色 = 売り出し中 
+紫 = オークション 
+グレー = パブリック"/>
+		<text name="label_parcel_modify">
+			区画の編集
+		</text>
+		<button label="再分割" label_selected="再分割" name="button subdivide land"/>
+		<button label="統合する" label_selected="統合する" name="button join land"/>
+		<text name="label_parcel_trans">
+			土地取引
+		</text>
+		<button label="土地を購入" label_selected="土地を購入" name="button buy land"/>
+		<button label="土地を放棄" label_selected="土地を放棄" name="button abandon land"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/inspect_avatar.xml b/indra/newview/skins/default/xui/ja/inspect_avatar.xml
new file mode 100644
index 00000000000..c7d2cbee043
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/inspect_avatar.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_avatar">
+	<string name="Subtitle">
+		[AGE]
+	</string>
+	<string name="Details">
+		[ACCTTYPE]、[PAYMENTINFO]
+プロフィール: [SL_PROFILE]
+	</string>
+	<slider name="volume_slider" tool_tip="ボイス音量" value="0.5"/>
+	<button label="フレンドを追加" name="add_friend_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml
new file mode 100644
index 00000000000..b3287a1a351
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+	<menu_item_call label="プロフィールを表示..." name="Show Profile"/>
+	<menu_item_call label="IMを送信..." name="Send IM"/>
+	<menu_item_call label="フレンドを追加..." name="Add Friend"/>
+	<menu_item_call label="フレンドを削除..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_favorites.xml b/indra/newview/skins/default/xui/ja/menu_favorites.xml
new file mode 100644
index 00000000000..fbaa33035fc
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_favorites.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="テレポート" name="Teleport To Landmark"/>
+	<menu_item_call label="ランドマークを表示・編集" name="Landmark Open"/>
+	<menu_item_call label="SLurl をコピー" name="Copy slurl"/>
+	<menu_item_call label="地図に表示" name="Show On Map"/>
+	<menu_item_call label="コピー" name="Landmark Copy"/>
+	<menu_item_call label="貼り付け" name="Landmark Paste"/>
+	<menu_item_call label="削除" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_group_plus.xml b/indra/newview/skins/default/xui/ja/menu_group_plus.xml
new file mode 100644
index 00000000000..762f9f616d9
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_group_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="グループに参加..." name="item_join"/>
+	<menu_item_call label="新しいグループ..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml
index 37c52f173cf..e3420c0c155 100644
--- a/indra/newview/skins/default/xui/ja/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml
@@ -1,66 +1,76 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Popup">
-	<menu_item_call label="購入" name="Task Buy"/>
-	<menu_item_call label="開く" name="Task Open"/>
-	<menu_item_call label="再生" name="Task Play"/>
-	<menu_item_call label="プロパティ" name="Task Properties"/>
-	<menu_item_call label="名前の変更" name="Task Rename"/>
-	<menu_item_call label="削除" name="Task Remove"/>
-	<menu_item_call label="ゴミ箱を空にする" name="Empty Trash"/>
-	<menu_item_call label="遺失物フォルダを空にする" name="Empty Lost And Found"/>
-	<menu_item_call label="新しいフォルダ" name="New Folder"/>
-	<menu_item_call label="新しいスクリプト" name="New Script"/>
-	<menu_item_call label="新しいノート" name="New Note"/>
-	<menu_item_call label="新しいジェスチャー" name="New Gesture"/>
-	<menu name="New Clothes">
-		<menu_item_call label="新しいシャツ" name="New Shirt"/>
-		<menu_item_call label="新しいズボン" name="New Pants"/>
-		<menu_item_call label="新しい靴" name="New Shoes"/>
-		<menu_item_call label="新しい靴下" name="New Socks"/>
-		<menu_item_call label="新しいジャケット" name="New Jacket"/>
-		<menu_item_call label="新しいスカート" name="New Skirt"/>
-		<menu_item_call label="新しい手袋" name="New Gloves"/>
-		<menu_item_call label="新しい下着" name="New Undershirt"/>
-		<menu_item_call label="新しいパンツ" name="New Underpants"/>
-	</menu>
-	<menu name="New Body Parts">
-		<menu_item_call label="新しいシェイプ(体型)" name="New Shape"/>
-		<menu_item_call label="新しいスキン" name="New Skin"/>
-		<menu_item_call label="新しい髪" name="New Hair"/>
-		<menu_item_call label="新しい眼" name="New Eyes"/>
-	</menu>
-	<menu_item_call label="テレポート" name="Landmark Open"/>
-	<menu_item_call label="開く" name="Animation Open"/>
-	<menu_item_call label="開く" name="Sound Open"/>
-	<menu_item_call label="アイテムを除外" name="Purge Item"/>
-	<menu_item_call label="アイテムを復元" name="Restore Item"/>
-	<menu_item_call label="開く" name="Open"/>
-	<menu_item_call label="プロパティ" name="Properties"/>
-	<menu_item_call label="名前の変更" name="Rename"/>
-	<menu_item_call label="UUIDをコピー" name="Copy Asset UUID"/>
-	<menu_item_call label="コピー" name="Copy"/>
-	<menu_item_call label="貼り付け" name="Paste"/>
-	<menu_item_call label="削除" name="Delete"/>
-	<menu_item_call label="アイテムを取り外す" name="Take Off Items"/>
-	<menu_item_call label="服装に追加" name="Add To Outfit"/>
-	<menu_item_call label="服装を置換" name="Replace Outfit"/>
-	<menu_item_call label="会議チャット開始" name="Conference Chat Folder"/>
-	<menu_item_call label="再生" name="Sound Play"/>
-	<menu_item_call label="ランドマーク情報" name="Teleport To Landmark"/>
-	<menu_item_call label="世界で再生" name="Animation Play"/>
-	<menu_item_call label="ローカルに再生" name="Animation Audition"/>
-	<menu_item_call label="インスタント・メッセージを送信" name="Send Instant Message"/>
-	<menu_item_call label="テレポートを贈る..." name="Offer Teleport..."/>
-	<menu_item_call label="会議チャット開始" name="Conference Chat"/>
-	<menu_item_call label="アクティブ" name="Activate"/>
-	<menu_item_call label="非アクティブ" name="Deactivate"/>
-	<menu_item_call label="自分から取り外す" name="Detach From Yourself"/>
-	<menu_item_call label="前回あった位置に戻す" name="Restore to Last Position"/>
-	<menu_item_call label="装着" name="Object Wear"/>
-	<menu label="装着先" name="Attach To"/>
-	<menu label="HUD装着先" name="Attach To HUD"/>
-	<menu_item_call label="編集" name="Wearable Edit"/>
-	<menu_item_call label="装着" name="Wearable Wear"/>
-	<menu_item_call label="取り外す" name="Take Off"/>
-	<menu_item_call label="--オプションなし--" name="--no options--"/>
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="購入" name="Task Buy"/>
+	<menu_item_call label="開く" name="Task Open"/>
+	<menu_item_call label="再生" name="Task Play"/>
+	<menu_item_call label="プロパティ" name="Task Properties"/>
+	<menu_item_call label="名前の変更" name="Task Rename"/>
+	<menu_item_call label="削除" name="Task Remove"/>
+	<menu_item_call label="ゴミ箱を空にする" name="Empty Trash"/>
+	<menu_item_call label="遺失物フォルダを空にする" name="Empty Lost And Found"/>
+	<menu_item_call label="新しいフォルダ" name="New Folder"/>
+	<menu_item_call label="新しいスクリプト" name="New Script"/>
+	<menu_item_call label="新しいノート" name="New Note"/>
+	<menu_item_call label="新しいジェスチャー" name="New Gesture"/>
+	<menu label="新規衣類" name="New Clothes">
+		<menu_item_call label="新しいシャツ" name="New Shirt"/>
+		<menu_item_call label="新しいズボン" name="New Pants"/>
+		<menu_item_call label="新しい靴" name="New Shoes"/>
+		<menu_item_call label="新しい靴下" name="New Socks"/>
+		<menu_item_call label="新しいジャケット" name="New Jacket"/>
+		<menu_item_call label="新しいスカート" name="New Skirt"/>
+		<menu_item_call label="新しい手袋" name="New Gloves"/>
+		<menu_item_call label="新しい下着" name="New Undershirt"/>
+		<menu_item_call label="新しいパンツ" name="New Underpants"/>
+	</menu>
+	<menu label="新規身体部位" name="New Body Parts">
+		<menu_item_call label="新しいシェイプ(体型)" name="New Shape"/>
+		<menu_item_call label="新しいスキン" name="New Skin"/>
+		<menu_item_call label="新しい髪" name="New Hair"/>
+		<menu_item_call label="新しい眼" name="New Eyes"/>
+	</menu>
+	<menu label="種類を変更" name="Change Type">
+		<menu_item_call label="デフォルト" name="Default"/>
+		<menu_item_call label="手袋" name="Gloves"/>
+		<menu_item_call label="ジャケット" name="Jacket"/>
+		<menu_item_call label="パンツ" name="Pants"/>
+		<menu_item_call label="シェイプ" name="Shape"/>
+		<menu_item_call label="靴" name="Shoes"/>
+		<menu_item_call label="シャツ" name="Shirt"/>
+		<menu_item_call label="スカート" name="Skirt"/>
+		<menu_item_call label="下着パンツ" name="Underpants"/>
+		<menu_item_call label="下着シャツ" name="Undershirt"/>
+	</menu>
+	<menu_item_call label="テレポート" name="Landmark Open"/>
+	<menu_item_call label="開く" name="Animation Open"/>
+	<menu_item_call label="開く" name="Sound Open"/>
+	<menu_item_call label="アイテムを除外" name="Purge Item"/>
+	<menu_item_call label="アイテムを復元" name="Restore Item"/>
+	<menu_item_call label="開く" name="Open"/>
+	<menu_item_call label="プロパティ" name="Properties"/>
+	<menu_item_call label="名前の変更" name="Rename"/>
+	<menu_item_call label="UUIDをコピー" name="Copy Asset UUID"/>
+	<menu_item_call label="コピー" name="Copy"/>
+	<menu_item_call label="貼り付け" name="Paste"/>
+	<menu_item_call label="削除" name="Delete"/>
+	<menu_item_call label="アイテムを取り外す" name="Take Off Items"/>
+	<menu_item_call label="服装に追加" name="Add To Outfit"/>
+	<menu_item_call label="服装を置換" name="Replace Outfit"/>
+	<menu_item_call label="会議チャット開始" name="Conference Chat Folder"/>
+	<menu_item_call label="再生" name="Sound Play"/>
+	<menu_item_call label="世界で再生" name="Animation Play"/>
+	<menu_item_call label="ローカルに再生" name="Animation Audition"/>
+	<menu_item_call label="インスタント・メッセージを送信" name="Send Instant Message"/>
+	<menu_item_call label="テレポートを贈る..." name="Offer Teleport..."/>
+	<menu_item_call label="会議チャット開始" name="Conference Chat"/>
+	<menu_item_call label="アクティブ" name="Activate"/>
+	<menu_item_call label="非アクティブ" name="Deactivate"/>
+	<menu_item_call label="自分から取り外す" name="Detach From Yourself"/>
+	<menu_item_call label="装着" name="Object Wear"/>
+	<menu label="装着先" name="Attach To"/>
+	<menu label="HUD装着先" name="Attach To HUD"/>
+	<menu_item_call label="編集" name="Wearable Edit"/>
+	<menu_item_call label="装着" name="Wearable Wear"/>
+	<menu_item_call label="取り外す" name="Take Off"/>
+	<menu_item_call label="--オプションなし--" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_landmark.xml b/indra/newview/skins/default/xui/ja/menu_landmark.xml
new file mode 100644
index 00000000000..778eb72e701
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_landmark.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+	<menu_item_call label="SLurl をコピー" name="copy"/>
+	<menu_item_call label="削除" name="delete"/>
+	<menu_item_call label="ピックを作成" name="pick"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_mini_map.xml b/indra/newview/skins/default/xui/ja/menu_mini_map.xml
index c8828a50bef..f080647be27 100644
--- a/indra/newview/skins/default/xui/ja/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/ja/menu_mini_map.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
-	<menu_item_call label="ズーム(近)" name="Zoom Close"/>
-	<menu_item_call label="ズーム(中)" name="Zoom Medium"/>
-	<menu_item_call label="ズーム(遠)" name="Zoom Far"/>
-	<menu_item_call label="追跡をやめる" name="Stop Tracking"/>
-	<menu_item_call label="プロフィール..." name="Profile"/>
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="popup">
+	<menu_item_call label="ズーム(近)" name="Zoom Close"/>
+	<menu_item_call label="ズーム(中)" name="Zoom Medium"/>
+	<menu_item_call label="ズーム(遠)" name="Zoom Far"/>
+	<menu_item_call label="追跡をやめる" name="Stop Tracking"/>
+	<menu_item_call label="世界地図" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_navbar.xml b/indra/newview/skins/default/xui/ja/menu_navbar.xml
new file mode 100644
index 00000000000..e10c436208d
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_navbar.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+	<menu_item_check label="座標を表示" name="Show Coordinates"/>
+	<menu_item_call label="ランドマーク" name="Landmark"/>
+	<menu_item_call label="切り取り" name="Cut"/>
+	<menu_item_call label="コピー" name="Copy"/>
+	<menu_item_call label="貼り付け" name="Paste"/>
+	<menu_item_call label="削除" name="Delete"/>
+	<menu_item_call label="すべて選択" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_picks.xml b/indra/newview/skins/default/xui/ja/menu_picks.xml
new file mode 100644
index 00000000000..a0880bd555a
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_picks.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+	<menu_item_call label="情報" name="pick_info"/>
+	<menu_item_call label="編集" name="pick_edit"/>
+	<menu_item_call label="テレポート" name="pick_teleport"/>
+	<menu_item_call label="地図" name="pick_map"/>
+	<menu_item_call label="削除" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_place.xml b/indra/newview/skins/default/xui/ja/menu_place.xml
new file mode 100644
index 00000000000..01095387b4c
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_place.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+	<menu_item_call label="ランドマークを作成" name="landmark"/>
+	<menu_item_call label="ピックを作成" name="pick"/>
+	<menu_item_call label="入場許可を購入" name="pass"/>
+	<menu_item_call label="編集" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_slurl.xml b/indra/newview/skins/default/xui/ja/menu_slurl.xml
index 6d155633826..1be2954f3fe 100644
--- a/indra/newview/skins/default/xui/ja/menu_slurl.xml
+++ b/indra/newview/skins/default/xui/ja/menu_slurl.xml
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu name="Popup">
-	<menu_item_call label="URLについて" name="about_url" />
-	<menu_item_call label="URLへテレポートする" name="teleport_to_url" />
-	<menu_item_call label="地図上に表示" name="show_on_map" />
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="URLについて" name="about_url"/>
+	<menu_item_call label="URLへテレポートする" name="teleport_to_url"/>
+	<menu_item_call label="地図" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_agent.xml b/indra/newview/skins/default/xui/ja/menu_url_agent.xml
new file mode 100644
index 00000000000..57e7931ce60
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_agent.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="住人のプロフィールを表示" name="show_agent"/>
+	<menu_item_call label="名前をクリップボードにコピー" name="url_copy_label"/>
+	<menu_item_call label="SLurlをクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_group.xml b/indra/newview/skins/default/xui/ja/menu_url_group.xml
new file mode 100644
index 00000000000..2970256cfe1
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="グループ情報を表示" name="show_group"/>
+	<menu_item_call label="グループをクリップボードにコピー" name="url_copy_label"/>
+	<menu_item_call label="SLurlをクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_http.xml b/indra/newview/skins/default/xui/ja/menu_url_http.xml
new file mode 100644
index 00000000000..8abb5cead66
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_http.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Web ページを開く" name="url_open"/>
+	<menu_item_call label="インターネットブラウザで開く" name="url_open_internal"/>
+	<menu_item_call label="外部ブラウザで開く" name="url_open_external"/>
+	<menu_item_call label="URLをクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml
new file mode 100644
index 00000000000..1746e163b6b
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="オブジェクトの情報を表示" name="show_object"/>
+	<menu_item_call label="オブジェクトの場所にテレポート" name="teleport_to_object"/>
+	<menu_item_call label="オブジェクト名をクリップボードにコピー" name="url_copy_label"/>
+	<menu_item_call label="SLurlをクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_parcel.xml b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml
new file mode 100644
index 00000000000..05639f086e8
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="区画情報を表示" name="show_parcel"/>
+	<menu_item_call label="SLurl をクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_slurl.xml b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml
new file mode 100644
index 00000000000..e66da8e9b93
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="場所の情報を表示" name="show_place"/>
+	<menu_item_call label="現地にテレポート" name="teleport_to_location"/>
+	<menu_item_call label="SLurl をクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_teleport.xml b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml
new file mode 100644
index 00000000000..0239e0e0e67
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="この場所にテレポート" name="teleport"/>
+	<menu_item_call label="SLurl をクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 4d067d28230..ce50a33f1cd 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -1,3264 +1,2685 @@
-<?xml version="1.0" encoding="utf-8"?>
-<notifications>
-	<global name="skipnexttime">
-		今後は表示しない
-	</global>
-	<global name="alwayschoose">
-		常にこのオプションを選択
-	</global>
-	<global name="implicitclosebutton">
-		閉じる
-	</global>
-  <template name="okbutton">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-    </form>
-  </template>
-
-  <template name="okignore">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <ignore text="$ignoretext"/>
-    </form>
-  </template>
-
-  <template name="okcancelbuttons">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Cancel"
-       text="$notext"/>
-    </form>
-  </template>
-
-  <template name="okcancelignore">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Cancel"
-       text="$notext"/>
-      <ignore text="$ignoretext"/>
-    </form>
-  </template>
-
-  <template name="okhelpbuttons">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Help"
-       text="$helptext"/>
-    </form>
-  </template>
-
-  <template name="yesnocancelbuttons">
-    <form>
-      <button
-       name="Yes"
-       text="$yestext"/>
-      <button
-       name="No"
-       text="$notext"/>
-      <button
-       name="Cancel"
-       text="$canceltext"/>
-    </form>
-  </template>
-	<notification functor="GenericAcknowledge" label="不明な警告メッセージ" name="MissingAlert">
-		あなたの [APP_NAME] のバージョンでは、
-今受け取った警告メッセージを表示することができません。
-
-エラー詳細: 「[_NAME]」という警告は notifications.xml にありませんでした。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="FloaterNotFound">
-		フロータ・エラー:下記のコントロールが見つかりませんでした:
-[CONTROLS]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="TutorialNotFound">
-		現在利用可能なチュートリアルはありません。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GenericAlert">
-		[MESSAGE]
-	</notification>
-	<notification name="GenericAlertYesCancel">
-		[MESSAGE]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="はい"/>
-	</notification>
-	<notification name="BadInstallation">
-		[APP_NAME] をアップデート中にエラーが発生しました。 secondlife.com から最新バージョンをダウンロードしてください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LoginFailedNoNetwork">
-		ネットワークエラー: 接続が確立できませんでした。 
-「[DIAGNOSTIC]」
-ネットワーク接続を確認してください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MessageTemplateNotFound">
-		メッセージテンプレート [PATH] がありませんでした。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="WearableSave">
-		現在の衣服/ボディーパーツの変更を保存しますか?
-		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="保存しない" yestext="保存"/>
-	</notification>
-	<notification name="CompileQueueSaveText">
-		次の理由で、スクリプト用テキストのアップロード時に問題が起こりました。 [REASON] 後でもう一度試してください。
-	</notification>
-	<notification name="CompileQueueSaveBytecode">
-		次の理由で、コンパイルしたスクリプトのアップロード時に問題が起こりました。 [REASON]後でもう一度試してください。
-	</notification>
-	<notification name="WriteAnimationFail">
-		アニメーションデータの書き込みに問題があります。後でもう一度お試しください。
-	</notification>
-	<notification name="UploadAuctionSnapshotFail">
-		次の理由で、オークションのスナップショットのアップロード時に問題が起こりました。 [REASON]
-	</notification>
-	<notification name="UnableToViewContentsMoreThanOne">
-		一度に複数のアイテムのコンテンツは表示できません。
-選択するアイテムを1つだけにして、もう一度試してください。
-	</notification>
-	<notification name="SaveClothingBodyChanges">
-		衣服/身体部位に対する変更をすべて保存しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="保存しない" yestext="すべて保存"/>
-	</notification>
-	<notification name="GrantModifyRights">
-		他の住人に変更権限を与えると、その人はあなたが所有している
-すべてのオブジェクトを変更、削除、または取得することができるようになります。この許可を与えるときは細心の注意を払ってください。
-[FIRST_NAME] [LAST_NAME]に対して変更権限を与えますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="GrantModifyRightsMultiple">
-		変更権限を与えると、その人はあなたが作成した全てのオブジェクトを変更することができます。
-この許可を与えるときには細心の注意を払ってください。
-選択した住人に変更権限を与えますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="RevokeModifyRights">
-		[FIRST_NAME] [LAST_NAME]に対して変更権限を取り消しますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="RevokeModifyRightsMultiple">
-		選択した住人から変更権限を取り下げますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="UnableToCreateGroup">
-		グループを作成できません。
-[MESSAGE]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="PanelGroupApply">
-		[NEEDS_APPLY_MESSAGE]
-[WANT_APPLY_MESSAGE]
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="変更を無視" yestext="変更を適用"/>
-	</notification>
-	<notification name="MustSpecifyGroupNoticeSubject">
-		グループ通知の送信には、件名の記入が必要です。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="AddGroupOwnerWarning">
-		あなたは [ROLE_NAME]の役割にメンバーを与えようとしています。
-任命されたメンバーが自ら退任しない限り、
-彼らを役柄から削除できません。
-操作を続行しますか?
-		<usetemplate ignoretext="オーナーの役割にグループ・メンバーを加えるとき" name="okcancelignore" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="AssignDangerousActionWarning">
-		あなたは[ROLE_NAME]に [ACTION_NAME]の能力を
-与えようとしています。
-
- *警告*
-この能力を持つ役割のメンバーは、
-自分と他のメンバーに現在より強力な権限を割り当て、
-自分をオーナーとほぼ同様の立場に
-任命することもできるようになります。 この行為の意味をよく理解してから
-実行してください。
-
-この能力を[ROLE_NAME]に割り当てますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="AssignDangerousAbilityWarning">
-		あなたは[ROLE_NAME]に [ACTION_NAME]の能力を
-与えようとしています。
-
- *警告*
-この能力をもつ役割のメンバーは、
-自分と他のメンバーにすべての能力を割り当て、
-自分をオーナーとほぼ同様の立場に任命できます。
-
-この能力を[ROLE_NAME]に割り当てますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="ClickPublishHelpLand">
-		「検索で公開」を選択
-このボックスにチェックすると表示:
-- 検索結果におけるこの区画
-- この区画のパブリック・オブジェクト
-- ウェブ検索におけるこの区画
-	</notification>
-	<notification name="ClickSoundHelpLand">
-		メディアと音楽はこの区画内でのみお楽しみいただけます。 サウンドとボイスは区画内限定か、各自のレーティング区分によっては区画外でも聞くことができます。 ナレッジベースを開いて設定の仕方を学びますか?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/区画上のメディア_(KB)
-		</url>
-		<usetemplate name="okcancelbuttons" notext="閉じる" yestext="ナレッジベースを開く"/>
-	</notification>
-	<notification name="ClickSearchHelpAll">
-		検索結果は今見ているタブ、あなたのレーティング区分、選択したカテゴリその他を元に編成されています。 詳細はナレッジベースをご覧ください。
-		<url name="url">
-			http://wiki.secondlife.com/wiki/検索に関するよくある質問集_(KB)
-		</url>
-		<usetemplate name="okcancelbuttons" notext="閉じる" yestext="ナレッジベースを開く"/>
-	</notification>
-	<notification name="ClickPublishHelpLandDisabled">
-		この区画は検索を禁ずる地域にあるため、
-この区画を検索に表示することはできません。
-	</notification>
-	<notification name="ClickPublishHelpAvatar">
-		「検索に表示」を選択すると表示:
-- 検索結果における自分のプロフィール
-- 公開グループ・ページにおける自分のプロフィールへのリンク
-	</notification>
-	<notification name="ClickPartnerHelpAvatar">
-		[SECOND_LIFE]のウェブ・サイトから、
-他の住人へのプロポーズ、パートナー解消手続きができます。
-
-ウェブ・サイトに行って パートナーに関する情報を取得しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="ページに移動"/>
-	</notification>
-	<notification name="ClickUploadHelpPermissions">
-		あなたの持つデフォルトの権限は古い地域では使えません。
-	</notification>
-	<notification name="ClickWebProfileHelpAvatar">
-		この住人がウェブ・プロフィールURLを設定している場合は、以下のことが可能です。
- * 「ロード」をクリックし、このウェブ・タブ内でページを表示
- * 「ロード」>「外部ブラウザ」 をクリックし、ディフォルトのウェブ・ブラウザでページを表示
- * 「ロード」>「ホームURL」 をクリックし、他のページからこの住人のウェブ・プロフィールに戻る
-
-自分のプロフィールに任意のURLを入力しOKをクリックして、ウェブ・プロフィールとして設定することができます。
-それを見た他の住人がそのサイトを訪れることができます。
-	</notification>
-	<notification name="JoinGroupCanAfford">
-		このグループに参加するには、L$[COST]かかります。
-続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="参加"/>
-	</notification>
-	<notification name="JoinGroupCannotAfford">
-		このグループに加入するには、L$[COST]必要です。
-L$が不足しているのでこのグループに参加することができません。
-	</notification>
-	<notification name="LandBuyPass">
-		L$[COST]で [TIME]時間この土地[PARCEL_NAME]に入ることができます。
-入場許可を購入しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="SalePriceRestriction">
-		不特定の人に売却する場合には、
-売却価格はL$0以上に設定する必要があります。
-売却価格をL$0に設定する場合は、
-売却する個人を選択してください。
-	</notification>
-	<notification name="ConfirmLandSaleChange">
-		選択された[LAND_SIZE]平方メートルの土地は、売り出し中に設定されています。
-売却価格L$[SALE_PRICE]で、[NAME]に売却を認可します。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmLandSaleToAnyoneChange">
-		注:「誰にでも売却する」をクリックすると、
-あなたの土地は[SECOND_LIFE] のコミュニティのどこからでも
-(この地域にないコミュニティを含む)購入できるようになります。
-
-選択された[LAND_SIZE]平方メートルの土地は、
-売り出し中に設定されています。
-売却価格L$[SALE_PRICE]で、[NAME]に売却を認可します。
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsDeededToGroup">
-		この区画のグループ[NAME]共有のすべてのオブジェクトを、以前のオーナーの持ち物に戻そうとしています。
-操作を続行しますか?
-
-*警告* これにより、
-グループに譲渡された譲渡不可能なオブジェクトは削除されます!
-オブジェクト: [N]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsOwnedByUser">
-		この区画で、
-住人[NAME]が所有する全てのオブジェクトを
-彼らの持ち物に本当に返却してもよいですか?
-
-オブジェクト: [N]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsOwnedBySelf">
-		この土地区画内にある、あなたが所有するすべてのオブジェクトを、
-あなたの持ち物に戻そうとしています。操作を続行しますか?
-
-オブジェクト: [N]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedBySelf">
-		この土地区画内にある、あなた以外が所有するすべてのオブジェクトを、
-それぞれのオーナーの持ち物に戻そうとしています。
-操作を続行しますか?
-グループに譲渡された譲渡可能オブジェクトは、以前のオーナーに返却されます。
-
-*警告* これにより、
-グループに譲渡された譲渡不可能なオブジェクトは削除されます!
-オブジェクト: [N]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedByUser">
-		この土地区画内にある、
-[NAME]以外による所有のオブジェクトをすべてそれぞれのオーナーの持ち物に返却しようとしています。
-操作を続行しますか?グループに譲渡された譲渡可能オブジェクトは、以前のオーナーに返却されます。
-
-*警告* これにより、
-グループに譲渡された譲渡不可能なオブジェクトは削除されます!
-オブジェクト: [N]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ReturnAllTopObjects">
-		全てのリストされたオブジェクトを所有者に本当に返却しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="DisableAllTopObjects">
-		この地域内のすべてのオブジェクトを無効にしようとしています。操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedByGroup">
-		この土地の区画上のオブジェクトのうち、グループ[NAME]
-との間で共有していないオブジェクトをオーナーに返却しますか?
-
-オブジェクト: [N]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="UnableToDisableOutsideScripts">
-		スクリプトを無効にできません。
-この地域全体が「ダメージ有効」に設定されています。
-武器を使用するにはスクリプトの実行を許可する必要があります。
-	</notification>
-	<notification name="MustBeInParcel">
-		着地点を設定するには、この区画の内側に
-立ってください。
-	</notification>
-	<notification name="PromptRecipientEmail">
-		受信者の有効なEメールアドレスを入力してください。
-	</notification>
-	<notification name="PromptSelfEmail">
-		あなたのEメール・アドレスを入力してください。
-	</notification>
-	<notification name="PromptMissingSubjMsg">
-		デフォルトの件名またはメッセージを付けて、スナップショットを送信しますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ErrorProcessingSnapshot">
-		スナップショット・データの処理エラー
-	</notification>
-	<notification name="ErrorEncodingSnapshot">
-		スナップショットのエンコード化でエラーが出ました!
-	</notification>
-	<notification name="ErrorUploadingPostcard">
-		次の理由で、スナップショットの送信時に問題が起こりました: [REASON]
-	</notification>
-	<notification name="ErrorUploadingReportScreenshot">
-		次の理由で、レポートのスクリーンショットのアップロード時に問題が起こりました。 [REASON]
-	</notification>
-	<notification name="MustAgreeToLogIn">
-		[SECOND_LIFE] へのログインを続けるには、利用規約に同意してください。
-	</notification>
-	<notification name="CouldNotPutOnOutfit">
-		服装を装着できません。
-服装フォルダに衣服、身体部位、付属品がありません。
-	</notification>
-	<notification name="CannotWearTrash">
-		ゴミ箱にある服やボディーパーツの着用はできません。
-	</notification>
-	<notification name="CannotWearInfoNotComplete">
-		まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。
-	</notification>
-	<notification name="MustHaveAccountToLogIn">
-		おっと! 記入漏れがありますよ。
-アバターのファーストネームとラストネームの両方を入力する必要があります。
-
-[SECOND_LIFE]に入るには、アカウントが必要です。 アカウントを作成しますか?
-		<usetemplate name="okcancelbuttons" notext="もう一度試す" yestext="新しいアカウントを作成"/>
-	</notification>
-	<notification name="AddClassified">
-		検索ディレクトリの「クラシファイド」セクションに、
-クラシファイド広告が1週間掲載されます。
-広告を記入後、「公開」をクリックし、ディレクトリに
-追加します。
-「公開」をクリックすると、支払金額を尋ねられます。
-多く払うほど、広告がクラシファイド・リストとキーワード検索
-の上位に表示されます。
-		<usetemplate ignoretext="新しいクラシファイド広告を加えるとき" name="okcancelignore" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="DeleteClassified">
-		クラシファイド広告[NAME]の削除をしますか?
-支払い済みの料金は返金されません。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ClassifiedSave">
-		クラシファイド広告[NAME]への変更を保存しますか?
-		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="保存しない" yestext="保存"/>
-	</notification>
-	<notification name="DeleteAvatarPick">
-		ピック[PICK]を削除しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="PromptGoToEventsPage">
-		[SECOND_LIFE]イベント・ウェブ・ページに移動しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="SelectProposalToView">
-		表示する提案を選択してください。
-	</notification>
-	<notification name="SelectHistoryItemToView">
-		表示する履歴アイテムを選択してください。
-	</notification>
-	<notification name="ResetShowNextTimeDialogs">
-		これらのポップアップ全てを再度有効化しますか?(以前「今後は表示しない」と指定しています)
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="SkipShowNextTimeDialogs">
-		スキップ可能なポップアップ全てを無効化しますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="CacheWillClear">
-		[APP_NAME]の再起動後にキャッシュがクリアされます。
-	</notification>
-	<notification name="CacheWillBeMoved">
-		[APP_NAME]の再起動後にキャッシュが移動されます。
-注意:これによりキャッシュがクリアされます。
-	</notification>
-	<notification name="ChangeConnectionPort">
-		ポートの設定は、[APP_NAME]の再起動後に有効になります。
-	</notification>
-	<notification name="ChangeSkin">
-		新しいスキンは[APP_NAME]を再起動すると現れます
-	</notification>
-	<notification name="GoToAuctionPage">
-		[SECOND_LIFE]ウェブ・ページに移動し、 入札あるいはオークションの詳細を確認しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="SaveChanges">
-		変更を保存しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="保存しない" yestext="保存"/>
-	</notification>
-	<notification name="GestureSaveFailedTooManySteps">
-		ジェスチャーの保存に失敗しました。
-ステップが多すぎます。
-ステップをいくつか削除してから再保存してください
-	</notification>
-	<notification name="GestureSaveFailedTryAgain">
-		ジェスチャーの保存に失敗しました。少し待ってからもう一度試してください。
-	</notification>
-	<notification name="GestureSaveFailedObjectNotFound">
-		ジェスチャーの保存に失敗しました。オブジェクト、または関連するオブジェクト持ち物が見つかりません。
-オブジェクトが範囲内に存在しないか、または削除された可能性があります。
-	</notification>
-	<notification name="GestureSaveFailedReason">
-		次の理由で、ジェスチャーの保存時に問題が起こりました。 [REASON]。  後でもう一度試してください。
-	</notification>
-	<notification name="SaveNotecardFailObjectNotFound">
-		ノートカードの保存に失敗しました。オブジェクト、または関連するオブジェクト持ち物が見つかりません。
-オブジェクトが範囲内に存在しないか、または削除された可能性があります。
-	</notification>
-	<notification name="SaveNotecardFailReason">
-		次の理由で、ノートカードの保存時に問題が起こりました。 [REASON]。  後でもう一度試してください。
-	</notification>
-	<notification name="ScriptCannotUndo">
-		あなたのスクリプトのバージョンでは、変更を元に戻すことはできませんでした。
-サーバーの最新保存バージョンをロードしますか?
-(**警告**:この操作後元に戻すことはできません)
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="SaveScriptFailReason">
-		次の理由で、スクリプトの保存に問題が起こりました。 [REASON]。  後でもう一度試してください。
-	</notification>
-	<notification name="SaveScriptFailObjectNotFound">
-		スクリプトの保存に失敗しました。スクリプトが入ったオブジェクトが見つかりません。
-オブジェクトは範囲外か、または削除されているかもしれません。
-	</notification>
-	<notification name="SaveBytecodeFailReason">
-		次の理由で、コンパイルしたスクリプトの保存時に問題が起こりました。 [REASON]。  後でもう一度試してください。
-	</notification>
-	<notification name="CouldNotStartStopScript">
-		スクリプトの起動または停止に失敗しました。スクリプトが格納されているオブジェクトが見つかりません。
-オブジェクトが範囲内に存在しないか、または削除された可能性があります。
-	</notification>
-	<notification name="CannotDownloadFile">
-		ファイルをダウンロードできません。
-	</notification>
-	<notification name="CannotWriteFile">
-		ファイル[[FILE]]を書き込めません。
-	</notification>
-	<notification name="UnsupportedHardware">
-		警告: あなたのシステムは [APP_NAME] を使用するために必要な必須動作環境の条件を満たしていません。
-[APP_NAME] をこのままご使用になると、不十分なパフォーマンスしか得られないおそれがあります。
-また、サポート外のシステム構成でご使用の場合、テクニカルサポートをご利用いただくことができません。
-
- 必須動作環境の条件
-[_URL] にアクセスして、さらに詳しい情報をご覧になりますか?
-		<url name="url" option="0">
-			http://secondlife.com/support/sysreqs.php?lang=ja
-		</url>
-		<usetemplate ignoretext="サポート外のハードウェアの検出時" name="okcancelignore" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="UnknownGPU">
-		お使いのシステムには、現時点では不明なグラフィック・カードが搭載されています。
-これは、当社による動作テストが行われていない新しいハードウェアが使用されている場合がほとんどです。
-[APP_NAME] はほぼ間違いなく正常に動作しますが、
-必要に応じたグラフィック設定の調整が必要になる場合があります。
-(「編集」>「環境設定」>「表示」)
-		<form name="form">
-			<ignore name="ignore" text="不明なグラフィック・カードの検出時"/>
-		</form>
-	</notification>
-	<notification name="DisplaySettingsNoShaders">
-		[APP_NAME] は、
-グラフィック・ドライバの初期化中にクラッシュしました。
-一般的なドライバ・エラーを回避するため、「品質およびパフォーマンス」は「低」に設定されます。
-これにより、いくつかのグラフィックス機能は無効になります。
-グラフィックカード・ドライバのアップデートをお勧めします。
-「グラフィックの品質」は「環境設定」>「表示」から上げることができます。
-	</notification>
-	<notification name="RegionNoTerraforming">
-		この地域[REGION] は、テラフォーミングができません。
-	</notification>
-	<notification name="CannotCopyWarning">
-		あなたはこのアイテムのコピーを
-許されていないので、人にあげると
-持ち物から失われます。 本当に
-これをあげたいですか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="CannotGiveItem">
-		持ち物のアイテムを渡せません。
-	</notification>
-	<notification name="TransactionCancelled">
-		取引がキャンセルされました。
-	</notification>
-	<notification name="TooManyItems">
-		一度のインベントリ交換で、42以上のアイテムは送れません。
-	</notification>
-	<notification name="NoItems">
-		選択したアイテムを譲渡できる権限がありません。
-	</notification>
-	<notification name="CannotCopyCountItems">
-		あなたは選択したアイテムの[COUNT]のコピーを
-許されていません。
-これらのアイテムはあなたの持ち物から失われます。
-本当にアイテムをあげたいですか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="CannotGiveCategory">
-		選択したフォルダを譲渡できる権限がありません
-	</notification>
-	<notification name="FreezeAvatar">
-		このアバターをフリーズしますか?
-アバターは一時的に動けなくなり、
-チャットなど、この世界に対する関わりを持つことができなくなります。
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="解凍" yestext="フリーズ"/>
-	</notification>
-	<notification name="FreezeAvatarFullname">
-		[AVATAR_NAME]をフリーズしますか?
-フリーズされた人は一時的に動けなくなり、チャットなど、この世界に対する関わりを持つことができなくなります。
-		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="解凍" yestext="フリーズ"/>
-	</notification>
-	<notification name="EjectAvatarFullname">
-		あなたの土地から[AVATAR_NAME]を追放しますか?
-		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="追放と禁止" yestext="追放"/>
-	</notification>
-	<notification name="EjectAvatarNoBan">
-		このアバターをあなたの土地から追放しますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="追放"/>
-	</notification>
-	<notification name="EjectAvatarFullnameNoBan">
-		[AVATAR_NAME] をあなたの土地から追放しますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="追放"/>
-	</notification>
-	<notification name="AcquireErrorTooManyObjects">
-		取得エラー:選択したオブジェクトの数が多すぎます。
-	</notification>
-	<notification name="AcquireErrorObjectSpan">
-		取得エラー:
-オブジェクトが複数の地域にまたがって存在しています。
-取得するオブジェクトは、
-すべて同じ地域内に移動させてください。
-	</notification>
-	<notification name="PromptGoToCurrencyPage">
-		[EXTRA]
-
-[_URL]に移動して貨幣購入に関する情報を確認しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="UnableToLinkObjects">
-		これらの[COUNT]オブジェクトをリンクできません。
-最大[MAX]オブジェクトをリンクすることができます。
-	</notification>
-	<notification name="CannotLinkIncompleteSet">
-		セットとして揃っているオブジェクトのみリンクできます。複数の
-オブジェクトを選択してください。
-	</notification>
-	<notification name="CannotLinkModify">
-		すべてのオブジェクトに対する修正許可があなたにないため、
-リンクできません。
-
-オブジェクトがすべてロックされておらず、あなたのものであることを確認してください。
-	</notification>
-	<notification name="CannotLinkDifferentOwners">
-		所有者が異なるため、すべてのオブジェクトを
-リンクできません。
-
-自分が所有しているオブジェクトだけを選択してください。
-	</notification>
-	<notification name="NoFileExtension">
-		ファイル「[FILE]」の拡張子が無効です。
-
-このファイルの拡張子が正しいかどうかを確認してください。
-	</notification>
-	<notification name="InvalidFileExtension">
-		ファイル拡張子[EXTENSION]は無効です
-正しい拡張子:[VALIDS]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CannotUploadSoundFile">
-		読み込みのためにアップロードされたサウンドファイルを開けません:
-[FILE]
-	</notification>
-	<notification name="SoundFileNotRIFF">
-		ファイルがRIFF WAVEファイルとして認識されません:
-[FILE]
-	</notification>
-	<notification name="SoundFileNotPCM">
-		ファイルがPCM WAVEオーディオ・ファイルとして認識されません:
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidChannelCount">
-		ファイルのチャンネル数が無効です(モノラルまたはステレオを使用する必要があります):
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidSampleRate">
-		ファイルのサンプル・レートがサポート外です(44.1kを指定する必要があります):
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidWordSize">
-		ファイルのワード・サイズがサポート外です(8または16ビットを指定する必要があります):
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidHeader">
-		WAVヘッダーにデータ・チャンクが見つかりません:
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidTooLong">
-		オーディオ・ファイルが長すぎます。(最大10秒):
-[FILE]
-	</notification>
-	<notification name="ProblemWithFile">
-		ファイル[FILE]にエラーがあります。
-
-[ERROR]
-	</notification>
-	<notification name="CannotOpenTemporarySoundFile">
-		書き込み用の一時圧縮サウンド・ファイルを開くことができません:[FILE]
-	</notification>
-	<notification name="UnknownVorbisEncodeFailure">
-		未知のVorbis 暗号化に失敗: [FILE]
-	</notification>
-	<notification name="CannotEncodeFile">
-		次のファイルのエンコードができません: [FILE]
-	</notification>
-	<notification name="CorruptResourceFile">
-		破損したリソースファイル: [FILE]
-	</notification>
-	<notification name="UnknownResourceFileVersion">
-		未知のlindenリソースファイルのバージョン: [FILE]
-	</notification>
-	<notification name="UnableToCreateOutputFile">
-		服装ファイルを作成できません: [FILE]
-	</notification>
-	<notification name="DoNotSupportBulkAnimationUpload">
-		アニメーションファイルのバルクアップロードは現在サポートされていません。
-	</notification>
-	<notification name="CannotUploadReason">
-		次の理由で、[FILE] をアップロードできません: [REASON]
-あとでもう一度試してください。
-	</notification>
-	<notification name="CannotCreateLandmarkNotOwner">
-		土地の所有者が許可していないため、
-ランドマークを作成することはできません。
-	</notification>
-	<notification name="CannotRecompileSelectObjectsNoScripts">
-		再編集は不可能です。
-スクリプト化されたオブジェクトを選択してください。
-	</notification>
-	<notification name="CannotRecompileSelectObjectsNoPermission">
-		「再編集」は不可能です。
-
-変更修正権限のある
-スクリプト化されたオブジェクトを選択してください。
-	</notification>
-	<notification name="CannotResetSelectObjectsNoScripts">
-		「再設定」を行うことができません。
-
-スクリプト化されたオブジェクトを選択してください。
-	</notification>
-	<notification name="CannotResetSelectObjectsNoPermission">
-		「再設定」を行うことができません。
-
-変更修正権限のある
-スクリプト化されたオブジェクトを選択してください。
-	</notification>
-	<notification name="CannotSetRunningSelectObjectsNoScripts">
-		スクリプトの「実行」の設定ができません。
-
-スクリプト化されたオブジェクトを選択してください。
-	</notification>
-	<notification name="CannotSetRunningNotSelectObjectsNoScripts">
-		スクリプトを「実行しない」に設定できません。
-
-スクリプト化されたオブジェクトを選択してください。
-	</notification>
-	<notification name="NoFrontmostFloater">
-		保存すべきfrontmostフロータがありません。
-	</notification>
-	<notification name="SeachFilteredOnShortWords">
-		指定した検索クエリは変更され、短すぎる語句は取り除かれています。
-
-検索語句: [FINALQUERY]
-	</notification>
-	<notification name="SeachFilteredOnShortWordsEmpty">
-		指定した検索語句が短すぎたため、検索は行われませんでした。
-	</notification>
-	<notification name="CouldNotTeleportReason">
-		テレポートに失敗しました。
-[REASON]
-	</notification>
-	<notification name="invalid_tport">
-		テレポート・リクエストの処理中に問題が発生しました。テレポートするには、再度ログインする必要があります。
-このメッセージが引き続き表示される場合は、技術サポートFAQ(www.secondlife.com/support)を参照してください。
-	</notification>
-	<notification name="invalid_region_handoff">
-		地域間の移動の処理中に問題が発生しました。地域間を移動するには、再度ログインする必要があります。
-このメッセージが引き続き表示される場合は、技術サポートFAQ(www.secondlife.com/support)を参照してください。
-	</notification>
-	<notification name="blocked_tport">
-		申し訳ございません。テレポートは現在、ブロックされています。もう少し後でやり直してください。
-やり直してもテレポートできない場合は、いったんログアウトし、再度ログインして問題を解決してください。
-	</notification>
-	<notification name="nolandmark_tport">
-		残念ながら、システムはランドマーク目的地を探せませんでした。
-	</notification>
-	<notification name="timeout_tport">
-		申し訳ございません。システムはテレポート接続を完了できませんでした。
-もう少し後でやり直してください。
-	</notification>
-	<notification name="noaccess_tport">
-		残念ながら、そのテレポート目的地へのアクセスがありません。
-	</notification>
-	<notification name="missing_attach_tport">
-		添付物は、まだ到着していません。あと数秒間お待ちいただくか、いったんログアウトし、再度ログインしてからテレポートをやり直してださい。
-	</notification>
-	<notification name="too_many_uploads_tport">
-		この地域の資産キューが現在込み合っているため、テレポート・リクエストを時間通りに処理することが難しい状況です。
-数分後にやり直すか、または混雑していない他の地域をお試しください。
-	</notification>
-	<notification name="expired_tport">
-		申し訳ございません。システムはテレポート・リクエストを時間どおりに完了できませんでした。数分後にやり直してください。
-	</notification>
-	<notification name="expired_region_handoff">
-		申し訳ございません。システムは地域間の移動を時間どおりに完了できませんでした。
-数分後にやり直してください。
-	</notification>
-	<notification name="no_host">
-		テレポート目的地を見つけられません。目的地が一時的に利用できない状態か、またはすでに消滅している可能性があります。数分後にやり直してください。
-	</notification>
-	<notification name="no_inventory_host">
-		持ち物システムは現在利用できません。
-	</notification>
-	<notification name="CannotSetLandOwnerNothingSelected">
-		土地所有者設定ができません:
-区画が選定されていません。
-	</notification>
-	<notification name="CannotSetLandOwnerMultipleRegions">
-		複数の地域が選択されたため、
-土地の所有権を取得できません。
-選択する面積を小さくして、もう一度試してください。
-	</notification>
-	<notification name="ForceOwnerAuctionWarning">
-		この区画はオークションに出品されています。
-区画の所有権を取得するとオークションが無効になり、
-入札が開始していたら不満に思う住人が出てくるかもしれません。
-所有権を取得しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="CannotContentifyNothingSelected">
-		コンテンツ化は不可能です:
-区画が選定されていません。
-	</notification>
-	<notification name="CannotContentifyNoRegion">
-		コンテンツ化は不可能です:
-土地が選択されていません。
-	</notification>
-	<notification name="CannotReleaseLandNothingSelected">
-		土地を破棄することができません:
-区画が選定されていません。
-	</notification>
-	<notification name="CannotReleaseLandNoRegion">
-		土地を破棄できません:
-地域が見つかりません。
-	</notification>
-	<notification name="CannotBuyLandNothingSelected">
-		土地を購入できません:
-区画が選定されていません。
-	</notification>
-	<notification name="CannotBuyLandNoRegion">
-		土地を購入できません:
-この土地がある地域を見つけることができません
-	</notification>
-	<notification name="CannotCloseFloaterBuyLand">
-		[APP_NAME]による、
-この取引の見積りが完了するまで「土地を購入」ウィンドウを閉じることはできません。
-	</notification>
-	<notification name="CannotDeedLandNothingSelected">
-		土地を譲渡できません:
-区画が選定されていません。
-	</notification>
-	<notification name="CannotDeedLandNoGroup">
-		土地を譲渡できません:
-グループが選択されていません。
-	</notification>
-	<notification name="CannotDeedLandNoRegion">
-		土地を譲渡できません:
-この土地がある地域が見つかりません。
-	</notification>
-	<notification name="CannotDeedLandMultipleSelected">
-		土地を譲渡できません:
-複数の区画が選択されています。
-
-これより1つの区画を選択してください。
-	</notification>
-	<notification name="ParcelCanPlayMedia">
-		ここではストリーミング・メディア再生が可能です。
-メディアのストリーミングには、高速なインターネット接続環境が必要です。
-
-利用可能になったら再生しますか?
-(このオプションは、「環境設定」>「音声とビデオ」で後からでも変更できます)
-		<usetemplate name="okcancelbuttons" notext="無効化" yestext="メディアを再生"/>
-	</notification>
-	<notification name="CannotDeedLandWaitingForServer">
-		土地を譲渡できません:
-サーバーからの所有権情報を待っています。
-
-再度、試みてください。
-	</notification>
-	<notification name="CannotDeedLandNoTransfer">
-		土地を譲渡できません:
-この地域 [REGION] では土地の譲渡が許されていません。
-	</notification>
-	<notification name="CannotReleaseLandWatingForServer">
-		土地を破棄できません:
-サーバーが区画情報を更新するのを待っています。
-
-もう少し後でやり直してください。
-	</notification>
-	<notification name="CannotReleaseLandSelected">
-		土地を破棄できません:
-あなたは、選択したすべての区画を所有していません。
-
-1つの区画を選択してください。
-	</notification>
-	<notification name="CannotReleaseLandDontOwn">
-		土地を破棄できません:
-あなたはこの土地を手放すことを許可されていません。
-あなたの区画は緑色で表示されています。
-	</notification>
-	<notification name="CannotReleaseLandRegionNotFound">
-		土地を破棄できません:
-この土地がある地域が見つかりません。
-	</notification>
-	<notification name="CannotReleaseLandNoTransfer">
-		土地を破棄できません:
-この [REGION] では土地の譲渡が許されていません。
-	</notification>
-	<notification name="CannotReleaseLandPartialSelection">
-		土地を破棄できません:
-区画全体を選択して破棄する必要があります。
-
-区画全体を選択するか、または、まず最初に区画を分割してください。
-	</notification>
-	<notification name="ReleaseLandWarning">
-		あなたは、[AREA]平方メートルの土地を破棄しようとしています。
-この区画を破棄するとあなたの土地ではなくなりますが、
-L$は返金されません。
-
-土地を破棄しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="CannotDivideLandNothingSelected">
-		土地を分割できません:
-
-区画が選定されていません。
-	</notification>
-	<notification name="CannotDivideLandPartialSelection">
-		土地を分割できません:
-
-区画全体が選択されています。
-区画の一部を選択してください。
-	</notification>
-	<notification name="LandDivideWarning">
-		この土地を分割すると、2つの区画に別れます。
-区画ごとの設定が可能になります。 この操作を行うと、一部の設定がデフォルトにリセットされます。
-
-土地の分割操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="CannotDivideLandNoRegion">
-		土地を分割できません:
-この土地がある地域が見つかりません。
-	</notification>
-	<notification name="CannotJoinLandNoRegion">
-		土地を統合できません:
-この土地がある地域が見つかりません。
-	</notification>
-	<notification name="CannotJoinLandNothingSelected">
-		土地を統合できませんでした:
-区画が選定されていません。
-	</notification>
-	<notification name="CannotJoinLandEntireParcelSelected">
-		土地を統合できません:
-1つの区画しか選択されていません。
-
-両方の区画をまたいで土地を選択してください。
-	</notification>
-	<notification name="CannotJoinLandSelection">
-		土地を統合できません:
-1つ以上の区画を選択する必要があります。
-
-両方の区画をまたいで土地を選択してください。
-	</notification>
-	<notification name="JoinLandWarning">
-		この土地を統合すると、選択された長方形に交差する
-全ての区画を基にして1つの大きな区画が作成されます。
-新しい区画の名前とオプションを再設定する必要があります。
-
-土地を統合しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ShowOwnersHelp">
-		オーナーを表示:
-区画に色を付けてオーナーの種類を表示
-
-緑 = あなたの土地
-アクア = あなたのグループ所有地
-赤 = 他人が所有する土地
-黄色 = 売り出し中
-紫 = オークション
-グレー = パブリック
-	</notification>
-	<notification name="ConfirmNotecardSave">
-		このアイテムをコピー、表示する前に、ノートカードの保存が必要です。 保存しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmItemCopy">
-		このアイテムをあなたの持ち物にコピーしますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="コピー"/>
-	</notification>
-	<notification name="ResolutionSwitchFail">
-		解像度を [RESX]x[RESY]に切り替えることができませんでした。
-	</notification>
-	<notification name="ErrorUndefinedGrasses">
-		エラー:未定義の植物:[SPECIES]
-	</notification>
-	<notification name="ErrorUndefinedTrees">
-		エラー:未定義の樹木:[SPECIES]
-	</notification>
-	<notification name="CannotSaveWearableOutOfSpace">
-		「[NAME]」を服のファイルに保存できません。  コンピューターの
-ディスクスペースを少し増やしてから、もう一度
-保存してみてください。
-	</notification>
-	<notification name="CannotSaveToAssetStore">
-		[NAME]を中央資産格納庫に保存できません。
-これは一時的な不具合です。
-服飾品などをカスタマイズし、数分後にもう一度保存してください。
-	</notification>
-	<notification name="YouHaveBeenLoggedOut">
-		あなたは[SECOND_LIFE]からログアウトされました。
-            [MESSAGE]
-「IMとチャットを表示」をクリックすると、
-現在あるIMとチャットを確認できます。
-確認しない場合は「終了」をクリックし、
-すぐに[APP_NAME]を終了してください。
-		<usetemplate name="okcancelbuttons" notext="終了" yestext="IMとチャットを表示"/>
-	</notification>
-	<notification name="OnlyOfficerCanBuyLand">
-		グループ用の土地の購入ができません:
-あなたにはアクティブなグループのために土地を購入する権限がありません。
-	</notification>
-	<notification label="フレンドを追加" name="AddFriend">
-		フレンドとして追加すると、お互いの現在地の地図への表示許可、オンラインステータス表示の設定をすることができます。
-
-[NAME] にフレンドシップを送りますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification label="フレンドを追加" name="AddFriendWithMessage">
-		フレンドとして追加すると、お互いの現在地の地図への表示許可、オンラインステータス表示の設定をすることができます。
-
-[NAME] にフレンドシップのオファーをしますか?
-		<form name="form">
-			<input name="message">
-				フレンドとして登録してくれますか?
-			</input>
-			<button name="Offer" text="OK"/>
-			<button name="Cancel" text="キャンセル"/>
-		</form>
-	</notification>
-	<notification name="RemoveFromFriends">
-		[FIRST_NAME] [LAST_NAME]をフレンドリストから削除しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="RemoveMultipleFromFriends">
-		フレンドリストから複数のフレンドを削除しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllScriptedPublicObjectsByUser">
-		**[AVATAR_NAME]**
-所有のすべてのスクリプト・オブジェクトをこのシム内の他のすべての土地から削除しようとしています。操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllScriptedObjectsByUser">
-		**[AVATAR_NAME]**
-所有のすべてのスクリプト・オブジェクトをこのシム内のすべての土地から削除しようとしています。操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllObjectsByUser">
-		**[AVATAR_NAME]**
-所有のすべてのオブジェクト(スクリプト・オブジェクトと非スクリプト・オブジェクト)を
-このシム内のすべての土地から削除しようとしています。操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BlankClassifiedName">
-		クラシファイドに名前を指定してください。
-	</notification>
-	<notification name="MinClassifiedPrice">
-		広告料の支払い金額は、Lと[MIN_PRICE]が下限です。
-
-金額を増やしてください。
-	</notification>
-	<notification name="ConfirmObjectDeleteLock">
-		選択したアイテムの1つ以上がロックされています。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoCopy">
-		選択したアイテムの1つ以上がコピーできません。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoOwn">
-		選択したアイテムの1つ以上を、あなたは所有していません。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoCopy">
-		一つ以上のオブジェクトがロックされています。
-一つ以上のオブジェクトがコピーできません。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoOwn">
-		一つ以上のオブジェクトがロックされています。
-1つ以上のオブジェクトを、あなたは所有していません。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoCopyNoOwn">
-		一つ以上のオブジェクトがコピーできません。
-1つ以上のオブジェクトを、あなたは所有していません。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
-		一つ以上のオブジェクトがロックされています。
-一つ以上のオブジェクトがコピーできません。
-1つ以上のオブジェクトを、あなたは所有していません。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeLock">
-		一つ以上のオブジェクトがロックされています。
-
-これらのアイテムの取得を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeNoOwn">
-		取得しようとしているオブジェクトには、あなたの所有物でないオブジェクトが含まれています。
-あなたの所有物ではないオブジェクトを取得すると、次のオーナーの権限がそのオブジェクトに適用されます。
-そのため、将来、変更やコピーの能力が制限される可能性があります。
-
-これらのアイテムの取得を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeLockNoOwn">
-		1つ以上のオブジェクトがロックされています。
-取得しようとしているオブジェクトには、あなたの所有物でないオブジェクトが含まれています。
-あなたの所有物ではないオブジェクトを取得すると、次のオーナーの権限がそのオブジェクトに適用されます。
-そのため、将来、変更やコピーの能力が制限される可能性があります。
-この選択内容のままで続行することは可能ですが、
-
-これらのアイテムの取得を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="CantBuyLandAcrossMultipleRegions">
-		複数の地域が選択されたため、土地を購入できません。
-
-選択する面積を小さくしてもう一度試してください。
-	</notification>
-	<notification name="DeedLandToGroup">
-		この区画の譲渡に際しては、
-このグループが十分な土地クレジットを保有および維持していることが必要です。
-土地の購入価格は、オーナーに返金されません。譲渡された区画が売れると、販売価格はグループ・メンバーに均等に分配されます。
-
-この[AREA]平方メートルの土地を、グループ
-「[GROUP_NAME]」に譲渡しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="DeedLandToGroupWithContribution">
-		この区画の譲渡に際しては、このグループが
-十分な土地クレジットを保有および維持していることが必要です。
-この譲渡により、
-「[FIRST_NAME] [LAST_NAME]」から
-グループに対して土地が同時に提供されます。
-土地の購入価格は、オーナーに返金されません。
-譲渡された区画が売れると、販売料金はグループ・メンバーに均等に分配されます。
-
-この[AREA]平方メートルの土地を、グループ「[GROUP_NAME]」に譲渡しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="DisplaySetToSafe">
-		-safeオプションを指定したので、
-表示設定はセーフ・レベルに設定されています。
-	</notification>
-	<notification name="DisplaySetToRecommended">
-		表示設定は、あなたのシステム構成に
-基づいて推奨されたレベルに設定されています。
-	</notification>
-	<notification name="ErrorMessage">
-		[ERROR_MESSAGE]
-	</notification>
-	<notification name="AvatarMoved">
-		あなたが訪れたい[TYPE]のロケーションは現在ご利用できません。 [HELP]
-近くの地域に移動しました。
-	</notification>
-	<notification name="ClothingLoading">
-		あなたの服をダウンロード中です。
-通常どおりに[SECOND_LIFE]を使え、
-他のユーザーもあなたを正常に見ることができます。
-		<form name="form">
-			<ignore name="ignore" text="服のダウンロードに長い時間がかかる場合"/>
-		</form>
-	</notification>
-	<notification name="FirstRun">
-		[APP_NAME]のインストールが完了しました。
-
-[SECOND_LIFE] の使用が初めての方は、
-ログイン前にアカウントの作成が必要です。
-www.secondlife.comに移動し、新規アカウントの作成を行いますか?
-		<usetemplate name="okcancelbuttons" notext="続行" yestext="新規アカウント..."/>
-	</notification>
-	<notification name="LoginPacketNeverReceived">
-		接続に問題が生じています。 あなたのインターネット接続、または[SECOND_LIFE] サーバーに問題がある可能性があります。
-
-インターネット接続を確認して数分後にもう一度試みるか、「ヘルプ」をクリックして当社のサポートサイトに接続してください。または、「テレポート」をクリックしてホームにテレポートしてみてください。
-		<form name="form">
-			<button name="OK" text="OK"/>
-			<button name="Help" text="ヘルプ"/>
-			<button name="Teleport" text="テレポート"/>
-		</form>
-	</notification>
-	<notification name="WelcomeChooseSex">
-		まもなくあなたのアバターが表示されます。
-
-矢印キーを使用して歩きます。
-ヘルプが必要なときや[SECOND_LIFE]について知りたいときは、
-F1キーを押してください。
-男性あるいは女性のアバターを選択してください。
-あなたの決定は後で変更できます。
-		<usetemplate name="okcancelbuttons" notext="女性" yestext="男性"/>
-	</notification>
-	<notification name="NotEnoughCurrency">
-		[NAME] L$[PRICE] 残高不足のため実行不可です。
-	</notification>
-	<notification name="GrantedModifyRights">
-		あなたには、
-[FIRST_NAME] [LAST_NAME]
-のオブジェクトを修正する権限が与えられています。
-	</notification>
-	<notification name="RevokedModifyRights">
-		[FIRST_NAME] [LAST_NAME]
-のオブジェクトを修正する権限が取り消されました。
-	</notification>
-	<notification name="FlushMapVisibilityCaches">
-		この手順は、この地域の地図のキャッシュを消去します。
-これが便利なのはデバッグ時のみです。
-(作成中は5分間経つと、全員の地図が再度ログイン後に
-更新されます)
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BuyOneObjectOnly">
-		一度に一つ以上のオブジェクトをと買うことはできません。  オブジェクトを一つだけ選んでもう一度お試しください。
-	</notification>
-	<notification name="OnlyCopyContentsOfSingleItem">
-		一度に複数のアイテムのコンテンツはコピーできません。
-選択するオブジェクトを1つだけにして、もう一度試してください。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="KickUsersFromRegion">
-		この地域の全ての住人をホームにテレポートしますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="EstateObjectReturn">
-		[USER_NAME]が所有しているオブジェクトを返却しますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="InvalidTerrainBitDepth">
-		地域テクスチャを設定できませんでした:
-地形テクスチャ[TEXTURE_NUM]は、無効のビット深度[TEXTURE_BIT_DEPTH]です。
-
-テクスチャ[TEXTURE_NUM]を24ビット512x512かそれ以下のイメージと交換し、「適用」を再度クリックしてください。
-	</notification>
-	<notification name="InvalidTerrainSize">
-		地域テクスチャを設定できませんでした:
-地形テクスチャ[TEXTURE_NUM]は、[TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]では大きすぎます。
-
-テクスチャ[TEXTURE_NUM]を24ビット512x512かそれ以下のイメージと交換し、「適用」を再度クリックしてください。
-	</notification>
-	<notification name="RawUploadStarted">
-		アップロード開始。 接続速度によっては、
-最大2分間かかります。
-	</notification>
-	<notification name="ConfirmBakeTerrain">
-		現在の地形を構築しようとしています。
-この操作を行うと、現在の地形が上昇/下降の制限範囲の中心になり、「復帰」ツールのデフォルトになります。
-操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="MaxAllowedAgentOnRegion">
-		許可住人は [MAX_AGENTS] 人までです。
-	</notification>
-	<notification name="MaxBannedAgentsOnRegion">
-		禁止住人は[MAX_BANNED]人までです。
-	</notification>
-	<notification name="MaxAgentOnRegionBatch">
-		[NUM_ADDED] 個のエージェントを追加しようとして失敗しました: [MAX_AGENTS] [LIST_TYPE] 制限を [NUM_EXCESS] 個超過しています。
-	</notification>
-	<notification name="MaxAllowedGroupsOnRegion">
-		許可グループは[MAX_GROUPS]グループまでです。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="構築する"/>
-	</notification>
-	<notification name="MaxManagersOnRegion">
-		不動産マネージャーは[MAX_MANAGER]人までです。
-	</notification>
-	<notification name="OwnerCanNotBeDenied">
-		不動産オーナーを不動産「禁止住人」リストに追加できません。
-	</notification>
-	<notification name="CanNotChangeAppearanceUntilLoaded">
-		服および形がロードされるまで、容姿の変更はできません。
-	</notification>
-	<notification name="ClassifiedMustBeAlphanumeric">
-		クラシファイド広告の名前は、アルファベットか
-数字で始めます。  句読点では始められません。
-	</notification>
-	<notification name="CantSetBuyObject">
-		オブジェクトが販売対象ではないため、オブジェクトの購入が設定できません。
-販売対象のオブジェクトを設定し、もう一度試してください。
-	</notification>
-	<notification name="FinishedRawDownload">
-		未加工の地形ファイルを次へとダウンロードしました:
-[DOWNLOAD_PATH]。
-	</notification>
-	<notification name="DownloadWindowsMandatory">
-		[APP_NAME]の新しいバージョンが利用可能です。
-[MESSAGE]
-[APP_NAME]を使用するためには、
-このアップデートをダウンロードする必要があります。
-		<usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンロード"/>
-	</notification>
-	<notification name="DownloadWindows">
-		[APP_NAME]のアップデート・バージョンが利用可能です。
-[MESSAGE]
-このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
-		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
-	</notification>
-	<notification name="DownloadWindowsReleaseForDownload">
-		[APP_NAME]のアップデート・バージョンが利用可能です。
-[MESSAGE]
-このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
-		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
-	</notification>
-	<notification name="DownloadMacMandatory">
-		[APP_NAME]の新しいバージョンが利用可能です。
-[MESSAGE]
-[APP_NAME]を使用するために、
-このアップデートをダウンロードする必要があります。
-
-アプリケーションがあるフォルダにダウンロードしますか?
-		<usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンロード"/>
-	</notification>
-	<notification name="DownloadMac">
-		[APP_NAME]のアップデート・バージョンが利用可能です。
-[MESSAGE]
-このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
-
-アプリケーションがあるフォルダにダウンロードしますか?
-		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
-	</notification>
-	<notification name="DownloadMacReleaseForDownload">
-		[APP_NAME]のアップデート・バージョンが利用可能です。
-[MESSAGE]
-このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
-
-アプリケーションがあるフォルダにダウンロードしますか?
-		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
-	</notification>
-	<notification name="DeedObjectToGroup">
-		このオブジェクトを譲渡するとグループは以下のことが可能です:
-* オブジェクトに支払われたL$を受領します。
-		<usetemplate ignoretext="オブジェクトをグループに譲渡するとき" name="okcancelignore" notext="取り消し" yestext="譲渡"/>
-	</notification>
-	<notification name="WebLaunchExternalTarget">
-		お使いのシステムのウェブ・ブラウザを開いて、この内容を表示しますか?
-		<usetemplate ignoretext="お使いのシステムのブラウザを開いてウェブ・ページを表示しようとしたとき" name="okcancelignore" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchJoinNow">
-		www.secondlife.comに移動してアカウントを管理しますか?
-		<usetemplate ignoretext="アカウントを管理するため、ウェブ・ブラウザを起動するとき" name="okcancelignore" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchSecurityIssues">
-		[SECOND_LIFE] Wikiで、
-セキュリティ問題を報告する方法をご覧ください。
-		<usetemplate ignoretext="セキュリティ問題Wikiを閲覧するためにウェブ・ブラウザを起動するにあたって" name="okcancelignore" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchQAWiki">
-		[SECOND_LIFE] 品質保証関連Wikiをご覧ください。
-		<usetemplate ignoretext="品質保証関連Wikiを閲覧するためにウェブ・ブラウザを起動するにあたって" name="okcancelignore" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchPublicIssue">
-		[SECOND_LIFE]のパブリック問題トラッカーで、
-バグやその他の問題を報告できます。
-		<usetemplate ignoretext="パブリック問題トラッカーを閲覧するためにウェブ・ブラウザを起動するにあたって" name="okcancelignore" notext="キャンセル" yestext="ページへ行く"/>
-	</notification>
-	<notification name="WebLaunchPublicIssueHelp">
-		[SECOND_LIFE] Wikiで、
-パブリック問題トラッカーの使用方法をご覧ください。
-		<usetemplate ignoretext="パブリック問題トラッカーWikiを閲覧するためにウェブ・ブラウザを起動するにあたって" name="okcancelignore" notext="キャンセル" yestext="ページへ行く"/>
-	</notification>
-	<notification name="WebLaunchSupportWiki">
-		Linden公式ブログで、最新のニュースや情報を入手してください。
-		<usetemplate ignoretext="ブログを表示するため、ウェブ・ブラウザを起動するとき" name="okcancelignore" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchLSLGuide">
-		スクリプトガイドを開いて、スクリプトのヘルプを参照しますか?
-		<usetemplate ignoretext="LSLガイドを表示するため、ウェブ・ブラウザを起動するとき" name="okcancelignore" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchLSLWiki">
-		LSLポータルを開いてスクリプトのヘルプを参照しますか?
-		<usetemplate ignoretext="LSLポータルを表示するために、ウェブ・ブラウザを起動するとき" name="okcancelignore" notext="取り消し" yestext="ページに移動"/>
-	</notification>
-	<notification name="ReturnToOwner">
-		選択したオブジェクトを、所有者に返却しますか?
-譲渡可能なオブジェクトは
-以前の所有者に返却されます。
-
-*警告* 移転が不可能の譲渡されたオブジェクトは削除されます!
-		<usetemplate ignoretext="オブジェクトを持ち主に返却するとき" name="okcancelignore" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="GroupLeaveConfirmMember">
-		現在あなたは [GROUP]のメンバーです。
-ここから抜けますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmKick">
-		すべてのユーザーをグリッド外にキックしようとしています。操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="全てのユーザを追い出す"/>
-	</notification>
-	<notification name="MuteLinden">
-		残念ながらLindenを無視設定に入れることはできません。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CannotStartAuctionAlreadyForSale">
-		既に売り出し中の区画なのでオークションにかけることはできません。  オークションにかけたい場合は売り出し設定を解除してから行ってください。
-	</notification>
-	<notification label="オブジェクトを名前でミュートできませんでした" name="MuteByNameFailed">
-		あなたはすでにこの名前をミュートしています。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="RemoveItemWarn">
-		コンテンツを削除すると、許可があっても、オブジェクトにダメージを与えることがあります。
-そのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="CantOfferCallingCard">
-		現在コーリングカードを送れません。数分後にもう一度試してください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CantOfferFriendship">
-		現在フレンドシップを送れません。数分後に試してください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="BusyModeSet">
-		取り込み中に設定されました。
-チャットとインスタント・メッセージ(IM)が隠れます。
-相手は「取り込み中応答メッセージ」をIMで受け取ります。
-テレポートのオファーは全て拒否され、持ち物のオファーは全てゴミ箱に送られます。
-		<usetemplate ignoretext="取り込み中の設定をするとき" name="okignore" yestext="OK"/>
-	</notification>
-	<notification name="JoinedTooManyGroupsMember">
-		あなたは現在メンバーになっているグループが多すぎるため、
-他のグループに参加できません。少なくとも1つのグループを脱退してからこのグループに参加するか、この招待を断ってください。
-グループを抜けるには、編集メニューから「グループ...」オプションをを選択します。
-[NAME]は、あなたをメンバーとしてグループに招待しています。
-[INVITE]
-		<usetemplate name="okcancelbuttons" notext="辞退" yestext="参加"/>
-	</notification>
-	<notification name="KickUser">
-		どんなメッセージを表示して、このユーザーを追い出しますか?
-		<form name="form">
-			<input name="message">
-				あなたは管理者によりログオフされました。
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="KickAllUsers">
-		どんなメッセージを表示して、グリッドにいる全員を追い出しますか?
-		<form name="form">
-			<input name="message">
-				あなたは管理者によりログオフされました。
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="FreezeUser">
-		どんなメッセージを表示して、このユーザーをフリーズしますか?
-		<form name="form">
-			<input name="message">
-				あなたはフリーズされています。 動くこともチャットすることもできません。 管理者がIMを通じてあなたに連絡します。
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="UnFreezeUser">
-		どんなメッセージを表示して、このユーザーのフリーズを解除しますか?
-		<form name="form">
-			<input name="message">
-				もうフリーズされていません。
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="OfferTeleport">
-		次のメッセージを添えてあなたが今いる場所へのテレポートを送りますか?
-		<form name="form">
-			<input name="message">
-				[REGION]に来ませんか?
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="OfferTeleportFromGod">
-		ユーザーをゴッド・コールで呼び寄せますか?
-		<form name="form">
-			<input name="message">
-				[REGION]に来ませんか?
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="TeleportFromLandmark">
-		本当にテレポートしますか?
-		<usetemplate ignoretext="持ち物のランドマークからテレポートする時" name="okcancelignore" notext="キャンセル" yestext="テレポート"/>
-	</notification>
-	<notification label="あなたの不動産内の全員にメッセージを送信" name="MessageEstate">
-		今あなたの不動産にいる人全員に送る
-短いメッセージを入力してください。
-		<form name="form">
-			<input name="message"/>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification label="Lindenの不動産を変更" name="ChangeLindenEstate">
-		あなたはLinden所有の不動産(メインランド、ティーングリッド、オリエンテーションなど)を変更しようとしています。
-
-これはユーザーの経験を根本から揺るがしかねない「非常に危険な行為」です。これにより、メインランドで多数の地域が変更され、スペースサーバーに悪影響が生じます。
-
-操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification label="Lindenの不動産へのアクセスを変更" name="ChangeLindenAccess">
-		あなたはLinden所有の不動産(メインランド、ティーングリッド、オリエンテーションなど)へのアクセスリストを変更しようとしています。
-
-この行為は「危険」であり、グリッドからオブジェクトやお金の転送をもたらすハッキングを引き起こす可能性があるため、完全にそれを意図した場合のみ行うべきものです。
-これにより多数の地域が変更され、スペースサーバーに悪影響が生じます。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateAllowedAgentAdd">
-		この不動産の許可リストだけに追加しますか? それとも[ALL_ESTATES]のすべての許可リストに追加しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateAllowedAgentRemove">
-		許可リストからの削除をこの不動産についてのみ行いますか? それとも、[ALL_ESTATES]について行いますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateAllowedGroupAdd">
-		この不動産のグループ許可リストだけに追加しますか? それとも[ALL_ESTATES]のグループ許可リストに追加しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateAllowedGroupRemove">
-		許可リストからの削除をこの不動産についてのみ行いますか? それとも、[ALL_ESTATES]について行いますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateBannedAgentAdd">
-		この不動産についてのみアクセスを拒否しますか? それとも[ALL_ESTATE]へのアクセスを拒否しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateBannedAgentRemove">
-		この住人を、この不動産のみ、または[ALL_ESTATES]へとアクセスできるように、禁止リストから削除しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateManagerAdd">
-		この不動産のみ、または[ALL_ESTATES]に対して、不動産マネージャーを追加しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateManagerRemove">
-		不動産マネージャーを、この不動産のみ、または[ALL_ESTATES]から、削除しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="キックを確認" name="EstateKickUser">
-		この不動産から[EVIL_USER]を追い出しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="EstateChangeCovenant">
-		不動産約款を変更しようとしています。操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked">
-		あなたのレーティング区分により、その地域(リージョン)へは入ることができません。 年齢を確認する際の情報に不足があったためと考えられます。
-
-最新ビューワがインストールされているかをご確認ください。このレーティング区分でのアクセスに関する詳細はナレッジベースをご覧ください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked_KB">
-		あなたのレーティング区分により、その地域(リージョン)へは入ることができません。
-
-ナレッジベースを開きレーティング区分について学びますか?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/レーティング区分概要_(KB)
-		</url>
-		<usetemplate ignoretext="レーティング区分によって地域(リージョン)に入れないとき" name="okcancelignore" notext="閉じる" yestext="ナレッジベースを開く"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked_Notify">
-		あなたのレーティング区分により、その地域(リージョン)へは入ることができません。
-	</notification>
-	<notification name="RegionEntryAccessBlocked_Change">
-		あなたのレーティング区分設定により、その地域(リージョン)へは入ることができません。
-
-「設定を変更」をクリックするとあなたのレーティング区分が上がり、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。
-あとで設定を元に戻したい場合は、「編集」>「環境設定」>「一般」をご覧ください。
-	<form name="form">
-      <button
-       name="OK"
-       text="設定の変更"/>
-      <button
-       default="true"
-       name="Cancel"
-       text="閉じる"/>
-       <ignore name="ignore" text="レーティング区分設定によって地域(リージョン)に入れないとき"/>
-    </form>
-	</notification>
-	<notification name="LandClaimAccessBlocked">
-		あなたのレーティング区分により、この土地を取得することはできません。 年齢を確認する際の情報に不足があったためと考えられます。
-
-最新ビューワがインストールされているかをご確認ください。このレーティング区分でのアクセスに関する詳細はナレッジベースをご覧ください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LandClaimAccessBlocked_KB">
-		あなたのレーティング区分により、この土地を取得することはできません。
-
-ナレッジベースを開きレーティング区分について学びますか?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/レーティング区分概要_(KB)
-		</url>
-		<usetemplate ignoretext="レーティング区分によって土地を取得できないとき" name="okcancelignore" notext="閉じる" yestext="ナレッジベースを開く"/>
-	</notification>
-	<notification name="LandClaimAccessBlocked_Notify">
-		あなたのレーティング区分により、この土地を取得することはできません。
-	</notification>
-	<notification name="LandClaimAccessBlocked_Change">
-		あなたのレーティング区分設定により、この土地を取得することはできません。
-
-「設定を変更」をクリックするとあなたのレーティング区分が上がり、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。
-あとで設定を元に戻したい場合は、「編集」>「環境設定」>「一般」をご覧ください。
-		<usetemplate ignoretext="レーティング区分設定によって土地を取得できないとき" name="okcancelignore" notext="閉じる" yestext="設定の変更"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked">
-		あなたのレーティング区分により、この土地を購入することはできません。 年齢を確認する際の情報に不足があったためと考えられます。
-
-最新ビューワがインストールされているかをご確認ください。このレーティング区分でのアクセスに関する詳細はナレッジベースをご覧ください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked_KB">
-		あなたのレーティング区分により、この土地を購入することはできません。
-
-ナレッジベースを開きレーティング区分について学びますか?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/レーティング区分概要_(KB)
-		</url>
-		<usetemplate ignoretext="レーティング区分によって土地を購入できないとき" name="okcancelignore" notext="閉じる" yestext="ナレッジベースを開く"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked_Notify">
-		あなたのレーティング区分により、この土地を購入することはできません。
-	</notification>
-	<notification name="LandBuyAccessBlocked_Change">
-		あなたのレーティング区分設定により、この土地を購入することができません。
-
-「設定を変更」をクリックするとあなたのレーティング区分が上がり、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。
-あとで設定を元に戻したい場合は、「編集」>「環境設定」>「一般」をご覧ください。
-		<usetemplate ignoretext="レーティング区分設定によって土地を購入できないとき" name="okcancelignore" notext="閉じる" yestext="設定の変更"/>
-	</notification>
-	<notification name="TooManyPrimsSelected">
-		選択したプリムが多すぎます。
-[MAX_PRIM_COUNT] を選択するか、
-プリム数を減らしてもう一度お試しください。
-	</notification>
-	<notification name="ProblemImportingEstateCovenant">
-		不動産約款のインポート時に問題発生。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ProblemAddingEstateManager">
-		新しい不動産マネージャーの追加に関する問題:
-1つ以上の不動産で、マネージャーリストが満杯になっています。
-	</notification>
-	<notification name="ProblemAddingEstateGeneric">
-		不動産リストの追加に関する問題:
-1つ以上の不動産で、リストが満杯になっています。
-	</notification>
-	<notification name="UnableToLoadNotecardAsset">
-		現在ノートカードの資産IDを読み込むことができません。
-	</notification>
-	<notification name="NotAllowedToViewNotecard">
-		要求された資産IDに関するノートカードを閲覧するには権限が不十分です。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MissingNotecardAssetID">
-		ノートカード用資産IDがデータベースに登録されていません。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="PublishClassified">
-		注意:クラシファイド広告の料金は払い戻しされません。
-
-L$[AMOUNT]で、このクラシファイド広告を今すぐ公開しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="SetClassifiedMature">
-		この広告にMatureコンテンツは含まれていますか?
-		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="SetGroupMature">
-		この広告にMatureコンテンツは含まれていますか?
-		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification label="再起動を確認" name="ConfirmRestart">
-		この地域を2分後に再起動しようとしています。
-操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification label="この地域内の全員にメッセージを送信" name="MessageRegion">
-		この地域にいる人全員に送る
-短いメッセージを入力してください。
-		<form name="form">
-			<input name="message"/>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification label="土地整備をブロック" name="HelpRegionBlockTerraform">
-		このボックスがチェックされている場合、
-区画ごとの「領域を編集」の設定にかかわらず、土地オーナーは土地整備ができません。
-
-デフォルト:オフ
-	</notification>
-	<notification label="飛行をブロック" name="HelpRegionBlockFly">
-		このボックスをチェックすると、区画ごとの「飛行」設定に関わらず飛行ができなくなります。
-
-デフォルト:オフ
-	</notification>
-	<notification label="コンテンツ権限の一括変更" name="HelpBulkPermission">
-		権限の一括変更ツールでは、選択した複数のアイテムの権限を素早く変更することが可能です。
-しかし選択したオブジェクトのコンテンツの中身の権限設定をするだけで、オブジェクトそのものではないことにご注意ください。  
-
-また、権限は中にあるアイテムのその中身には適用されないこともご注意ください。  1段階層のアイテムのみへのリクエストとなります。
-
-「コンテンツの種類」にあるチェックリストを使って、修正するアイテムの種類を選択します。 テクスチャーを選択すると、スナップショットも含まれます。
-
-* このツールの使用は、
-あなたが変更することのできるアイテムにのみ有効です。
-* 次のオーナーの権限があなたにない場合は、適用されません。
-* 次のオーナーの権限は単にリクエストにすぎません。 どれか一つのアイテムでも新しい権限の設定を受け付けない場合、すべての権限の設定はそのまま維持されます。
-
-一括変更の準備ができたら、「適用」をクリックして結果が表示されるのをお待ちください。
-
-権限変更中に権限の一括変更ウィンドウを閉じた場合、処理は停止されます。
-	</notification>
-	<notification label="ダメージ許可" name="HelpRegionAllowDamage">
-		このボックスをチェックすると、
-各区画の個別の設定にかかわらず、全ての区画におけるヘルスシステムを有効にします。
-このボックスがチェックされていない場合でも、
-個別の区画のオーナーは、自分の区画に対するヘルスシステムを有効にできます。
-
-デフォルト: オフ
-	</notification>
-	<notification label="人物の制限" name="HelpRegionAgentLimit">
-		この地域に許可されるアバターの最大数を設定します。
-1つの地域にアバターが多いとパフォーマンスが
-低下する原因になるので注意してください。
-
-デフォルト: 40
-	</notification>
-	<notification label="物体ボーナス" name="HelpRegionObjectBonus">
-		オブジェクトボーナスは、区画において許可されているプリムの倍率数を意味します。
-認可されている範囲は1から10です。
-したがって、「1」に設定すると、512 m²の土地には、117のオブジェクトが許可されます。
-「2」に設定すると、同じ512 m²の土地には、1のときの2倍にあたる234のオブジェクトが許可され、3以降も同様に増えていきます。
-全地域の最高オブジェクト数は、オブジェクトボーナスの値に影響されず、
-15,000のまま変わりません。
-いったん決定した後でオブジェクトボーナスの値を下げると、オブジェクトが返却または削除される可能性がありますのでご注意ください。
-ディフォルト: 1.0
-	</notification>
-	<notification label="レーティング区分" name="HelpRegionMaturity">
-		住人のビューワ上部のメニューバーに表示される、地域(リージョン)のレーティング区分を設定します。
-世界地図上でカーソルをこの地域に乗せるとツールチップに表示されます。
-この設定はこの地域全体と検索結果に反映されます。
-他の住人は環境設定で選択したレーティング区分に合った地域に入ることができ、検索結果を見ることができます。
-
-地図にこの変更が反映するには数分かかることがあります。
-	</notification>
-	<notification label="プッシュを制限" name="HelpRegionRestrictPushObject">
-		このチェックボックスは、制限されたプッシュ権限を全地域に適用します。
-有効になっている場合、住人は自分自身でのプッシュ、
-あるいは区画の所有者によるプッシュだけに制限できます。
-(プッシュは、LSLの llPushObject() 機能を参照します。)
-
-デフォルト: オフ
-	</notification>
-	<notification label="区画統合/再分割" name="HelpParcelChanges">
-		このチェックボックスは、不動産オーナーが所有していない区画を統合または再分割できるかどうかを設定します。
-本オプションが無効な場合:
-*不動産オーナー、または管理者のみが、統合/再分割を行うことができます。
-*オーナー、または、適切な権限を持つグループに属する区画のみを
-統合/再分割することができます。
-本オプションが有効な場合:
-*全ての区画オーナーは、所有する区画の統合/再分割ができます。
-*グループ所有の区画は、適切な権限を持つグループに属する区画を統合/再分割することができます。
-
-デフォルト:チェックあり
-	</notification>
-	<notification label="検索で表示しない" name="HelpRegionSearch">
-		このボックスをチェックすると、区画のオーナーは、自分の区画が検索結果にリストされることを阻止できます。
-デフォルト:オフ
-	</notification>
-	<notification label="地域のレーティング区分指定変更済み" name="RegionMaturityChange">
-		この地域のレーティング区分指定がアップデートされました。
-この変更が地図に反映されるまでにはしばらく時間がかかります。
-	</notification>
-	<notification label="土地の再販" name="HelpRegionLandResell">
-		不動産のオーナーと管理者は、不動産オーナーの土地を販売することができます。
-このオプションをチェックしない場合、購入者が本地域における土地を再販することはできなくなります。
-このオプションをチェックした場合、購入者は本地域における土地を再販することができます。
-
-デフォルト:許可しない
-	</notification>
-	<notification label="スクリプトを無効化" name="HelpRegionDisableScripts">
-		スクリプトが原因でシムの状況が悪くなる場合があります。
-統計グラフをだして(Ctrl+Shift+1)、
-シミュレーターフィジックスFPSを見てください。
-45より数が低ければ、一番下に位置しているタイムパネルを開いてください。
-スクリプト時間が25ms以上であれば、
-「トップスクリプトを取得」ボタンをクリックします。
-悪影響を及ぼしているスクリプトの名前と位置が現れます。
-
-「スクリプトを無効にする」をチェックし「適用」をクリックすると、地域内の全てのスクリプトが一時的に無効になります。
-トップスクリプトで検索したスクリプトの位置まで到達するには、
-このステップが必要になる場合もあります。
-スクリプト位置に到着後、スクリプトを見て悪影響を与えているか調査してください。
-スクリプトの所有者に連絡するか、あるいはオブジェクトの削除または返却も考えられます。
-「スクリプトを無効にする」のチェックを外し、「適用」をクリックして地域全体のスクリプトを有効に戻してください。
-
-デフォルト:オフ
-	</notification>
-	<notification label="衝突を無効化" name="HelpRegionDisableCollisions">
-		物理的オブジェクトが原因で、
-シムの処理が重くなることがあります。
-統計グラフを開いて(Ctrl+Shift+1)、
-シミュレーターフィジックスFPSを見てください。
-数値が45より低ければ、統計バーの下に位置しているタイムパネルを開いてください。
-もしシムタイム(物理的作用)が20 msより長い場合は、
-「トップ・コライダーを取得」をクリックしてください。
-悪影響を及ぼしている可能性がある物理オブジェクトの名前と位置が現れます。
-
-「衝突を無効にする」をチェックし「適用」をクリックすると、
-オブジェクト同士の衝突が一時的に無効になります。
-当該のトップ・コライダーの位置まで到達するには
-上記のステップが必要になる場合もあります。
-到着後、オブジェクトを見て常時他のオブジェクトと衝突しているか調査してください。
-オブジェクトの所有者に連絡するか、あるいはオブジェクトの削除または返却を考慮すべきかもしれません。
-「衝突を無効にする」のチェックを外し、「適用」をクリックして
-地域全体の衝突を有効に戻してください。
-
-デフォルト:オフ
-	</notification>
-	<notification label="物理作用を無効化" name="HelpRegionDisablePhysics">
-		物理的作用を無効にすることは、物理的シミュレーション全ての無効を除いて、衝突を無効にすることと似ています。
-これは、オブジェクトの衝突を止めるのみならず、アバターの移動ができなくなることを意味します。
-
-この機能は、物理的な問題なのか、またはトップ・コライダーなのかを調査するにあたり、衝突の無効が地域に対して十分なパフォーマンスを発揮しない場合にのみ使用してください。
-
-終了する時には、物理的作用を再度可能に設定してください。
-そのままだと、アバターはずっと動けません。
-
-デフォルト:オフ
-	</notification>
-	<notification label="トップ・コライダー" name="HelpRegionTopColliders">
-		オブジェクト同士の衝突が最も多い可能性のある
-オブジェクトのリストを表示します。これらのオブジェクトは、
-パフォーマンスを低下させる可能性があります。
-ビューから統計バーを選択し、
-シミュレータ>時間>シム時間 (物理的作用) で、
-物理的作用に20 ms以上を費しているかを確認してください。
-	</notification>
-	<notification label="トップ・スクリプト" name="HelpRegionTopScripts">
-		LSLスクリプトの実行に一番時間を費やしているオブジェクトのリストを入手します。
-これらのオブジェクトは、パフォーマンスを低下させる可能性があります。
-ビューから統計バーを選択し、
-ミュレータ>時間>スクリプト時間で、
-スクリプトに25 ms以上を費しているかを確認してください。
-	</notification>
-	<notification label="地域を再起動" name="HelpRegionRestart">
-		2分後にサーバーが再起動されるという警告メッセージの後に、
-この地域のサーバープロセスを再起動します。
-この地域のすべての住人の接続が切断されます。
-地域のデータは保存され、90秒以内に回復します。
-
-この地域を再起動しても、ほとんどのパフォーマンスの問題に変化はありません。
-指示された時だけ利用してください。
-	</notification>
-	<notification label="水面の高さ" name="HelpRegionWaterHeight">
-		これは、水が現れる高さ(単位:メートル)です。
-この設定が20以外で、水が世界の
-端や、「空の」水に近ければ、
-溝が見えるでしょう。
-
-デフォルト: 20
-	</notification>
-	<notification label="地形の上昇" name="HelpRegionTerrainRaise">
-		この数値は、「ベーク」地形のデフォルトの高さ以上に、
-区画所有者が土地を上げることのできるメートル値です。
-
-デフォルト: 4
-	</notification>
-	<notification label="地形の下降" name="HelpRegionTerrainLower">
-		この数値は、「ベーク」地形のデフォルトの高さ以下に、
-区画所有者が土地を下げられるメートル値です。
-
-デフォルト: -4
-	</notification>
-	<notification label="RAW地形をアップロード" name="HelpRegionUploadRaw">
-		このボタンを使って、.RAW ファイルを
-現在あなたが居る地域にアップロードします。
-ファイルが必ず正しいサイズの256x256、RGB、
-また、チャンネル数が13であることを確認してください。
-地形(Terrain) ファイルを作成する最良の方法は、
-既存のRAWファイルをダウンロードすることです。
-まず最初のチャンネル(土地の高さ)を変更し、
-アップロードすることから始められます。
-
-アップロードには45秒ほどかかることがあります。
-ここで注意することは、地形ファイルのアップロードによって、土地に配置されているオブジェクトは「動かない」ということです。
-影響があるのは、地形自体と、土地に関係する許可のみです。
-よって、オブジェクトが地下に埋まってしまうことがあるのでご注意ください。
-
-地形設定編集の情報と詳細については、F1ヘルプをご覧ください。
-	</notification>
-	<notification label="RAW地形をダウンロード" name="HelpRegionDownloadRaw">
-		このボタンを押すと、標高フィールドデータ、
-区画寸法、売り出し区画ステータス、この地域における許可を
-含むファイルをダウンロードします。フォトショップのようなプログラムでこのファイルを開くには、
-以下のようなドキュメントのサイズを指定する必要があります:
-RGB、256x256で、チャンネル数が13
-この地形ファイルは、他の方法では開くことはできません。
-
-地形における標高フィールドの編集に関する詳細については、F1ヘルプをご覧ください。
-	</notification>
-	<notification label="不動産の太陽を使用" name="HelpRegionUseEstateSun">
-		このボックスがチェックされていると、この地域の太陽は
-不動産の他の場所における太陽と位置が同じになります。
-
-デフォルト: オン
-	</notification>
-	<notification label="太陽固定" name="HelpRegionFixedSun">
-		このボックスをチェックすると、太陽の位置は段階スライダー内に
-設定され、動かなくなります。
-デフォルト: オフ
-	</notification>
-	<notification label="地形を構築する" name="HelpRegionBakeTerrain">
-		このボタンにより、現在の地形の形状を新たなデフォルトとして保存します。
-一度ベークされると、あなたや他の人が地形編集の「復帰」オプション/ツールを使用した際に、保存された形状に回復できます。
-ベークされた地形は、地形上昇および下降境界の中間点でもあります。
-	</notification>
-	<notification label="不動産マネージャー" name="HelpEstateEstateManager">
-		不動産マネージャーとは、地域コントロールと
-不動産設定が委任された住人をさします。不動産マネージャーは、
-アップロード、ダウンロード、および地形構築を除いたパネル内の
-設定を変更できます。特筆すべきは、
-住人のアクセス許可または禁止の設定ができることです。
-
-不動産マネージャーの追加と削除は、不動産オーナーのみが行うことができ、マネージャー同士では不可能です。
-信頼できる住人のみ不動産マネージャーに任命してください。
-彼らの行動の全責任は、最終的にはあなたにあります。
-	</notification>
-	<notification label="グローバル・タイムを使用" name="HelpEstateUseGlobalTime">
-		このボックスがチェックされていると、
-あなたの所有地の太陽はLinden社所有のメインランドの不動産での太陽の位置に準じます。
-
-デフォルト: オン
-	</notification>
-	<notification label="太陽固定" name="HelpEstateFixedSun">
-		このボックスがチェックされていると、
-太陽の位置は段階スライダー内に設定され、動かなくなります。
-	</notification>
-	<notification label="パブリック・アクセス" name="HelpEstateExternallyVisible">
-		このチェックボックスは、
-他の不動産にいる住人が、アクセスリストに登録されていなくてもこの不動産に立ち入ることができるかどうかを設定します。
-
-デフォルト: オン
-	</notification>
-	<notification label="直接テレポートを許可" name="HelpEstateAllowDirectTeleport">
-		チェックされていると、不動産のどこにでも直接テレポートが
-可能になります。チェックされていないと、最も近いテレハブに
-テレポートします。
-
-デフォルト: オフ
-	</notification>
-	<notification label="アクセスを許可" name="HelpEstateAllowResident">
-		この不動産へのアクセスは、ここに登録されている住人と
-下記で特別に登録されたグループのみに許可されます。
-この設定は「パブリック・アクセス」がオフになってるときのみ使用可能です。
-	</notification>
-	<notification label="グループ・アクセスを許可" name="HelpEstateAllowGroup">
-		この不動産へのアクセスは、ここに登録されているグループと
-下記で特別に登録された住人のみに許可されます。
-この設定は「パブリック・アクセス」がオフになってるときのみ使用可能です。
-	</notification>
-	<notification label="嫌がらせに関するメール先" name="HelpEstateAbuseEmailAddress">
-		これを有効なメールアドレスに設定すると、そのアドレスにこの不動産において行われた
-嫌がらせの報告が送信されるようになります。
-設定を行わない場合(空白)、嫌がらせ報告は Linden Lab にのみ
-送信されます。
-	</notification>
-	<notification label="アクセス拒否" name="HelpEstateBanResident">
-		このリストの住人は、他の設定にかかわらず、あなたの不動産への
-アクセスが禁止されています。
-	</notification>
-	<notification label="ボイスチャットを許可" name="HelpEstateVoiceChat">
-		この不動産の区画は、住人が近所の人と対話できる
-独自のボイスチャンネルを持つことができます。
-
-デフォルト: オフ
-	</notification>
-	<notification label="ボイスバージョンの不一致" name="VoiceVersionMismatch">
-		このバージョンの [APP_NAME] は、
-この地域のボイスチャット機能に対応していません。
-ボイスチャットを正しく使用するには、
-[APP_NAME] のアップデートが必要です。
-	</notification>
-	<notification label="不動産約款" name="HelpEstateCovenant">
-		不動産約款を定めると、自分の不動産内の区画を販売できるようになります。
-約款を定めていないと土地は売れません。
-土地に関する規則を適用したくなかったり、購入前に土地に関する情報を購入者に知らせたくない場合、あなたの約款のノートカードは白紙でかまいません。
-
-約款は購入を考えている人に、規則、ガイドライン、文化的情報や
-単にあなたが期待することを伝えるためにも使えます。
-ここには、区画規制、建造物規制、支払いオプション、それから購入者が事前に目を通して同意しておくべきだとあなたが思う重要な情報をすべて入れることができます。
-
-購入者がボックスをチェックして約款に同意しないかぎり、購入の手続きは完了しません。
-不動産約款が定められている区画であれば、「土地情報」から約款をいつでも閲覧できます。
-	</notification>
-	<notification label="オブジェクトを購入できません" name="BuyObjectOneOwner">
-		複数のオーナーから同時にオブジェクトを購入することはできません。
-単一のオブジェクトを選択し、もう一度試してください。
-	</notification>
-	<notification label="コンテンツを購入できません" name="BuyContentsOneOnly">
-		一度に複数のオブジェクトのコンテンツは購入できません。
-選択するオブジェクトを1つだけにして、もう一度試してください。
-	</notification>
-	<notification label="コンテンツを購入できません" name="BuyContentsOneOwner">
-		複数のオーナーから同時にオブジェクトを購入することはできません。
-単一のオブジェクトを選択し、もう一度試してください。
-	</notification>
-	<notification name="BuyOriginal">
-		オリジナルのオブジェクトを[OWNER]からL$[PRICE]で購入しますか?
-これにより、あなたがオブジェクトのオーナーになります。
-可能な操作は、
-変更:[MODIFYPERM]、コピー:[COPYPERM]、
-再販/プレゼント[RESELLPERM]です。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BuyOriginalNoOwner">
-		L$[PRICE]でオリジナルのオブジェクトを購入しますか?
-これにより、あなたがオブジェクトのオーナーになります。
-可能な操作は、
-変更:[MODIFYPERM]、コピー:[COPYPERM]、
-再販/プレゼント[RESELLPERM]です。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BuyCopy">
-		コピーを[OWNER]からL$[PRICE]で購入しますか?
-購入したオブジェクトは、あなたの持ち物にコピーされます。
-可能な操作は、変更:[MODIFYPERM]、コピー:[COPYPERM]、
-再販/プレゼント[RESELLPERM]です。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BuyCopyNoOwner">
-		L$[PRICE]でコピーを購入しますか?
-購入したオブジェクトは、あなたの持ち物にコピーされます。
-可能な操作は、変更:[MODIFYPERM]、コピー:[COPYPERM]、
-再販/プレゼント[RESELLPERM]です。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BuyContents">
-		コンテンツを[OWNER]からL$[PRICE]で購入しますか?
-購入したコンテンツは、あなたの持ち物にコピーされます。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BuyContentsNoOwner">
-		L$[PRICE]でコンテンツを購入しますか?
-購入したコンテンツは、あなたの持ち物にコピーされます。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmPurchase">
-		この取引は以下のとおり行われます:
-[ACTION]
-
-この購入を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmPurchasePassword">
-		この取引は以下のとおり行われます:
-[ACTION]
-
-この購入を続行しますか?
-パスワードを再入力し、「OK」をクリックしてください。
-		<form name="form">
-			<input name="message"/>
-			<button name="ConfirmPurchase" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="SetPickLocation">
-		メモ:
-本ピックのロケーションを更新しましたが、
-他の詳細は元の値のままになります。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MoveInventoryFromObject">
-		「コピー禁止」の持ち物アイテムが選択されました。
-これらのアイテムはコピーされないまま、あなたの持ち物に移動されます。
-
-
-アイテムを動かしますか?
-		<usetemplate ignoretext="コピー禁止の持ち物をオブジェクトから移動させるとき" name="okcancelignore" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="MoveInventoryFromScriptedObject">
-		「コピー禁止」の持ち物アイテムが選択されました。
-これらのアイテムはコピーされるのではなく、あなたの持ち物に移動されます。
-このオブジェクトはスクリプト付きなので、持ち物に移動させると
-スクリプトに誤動作が起きる可能性があります。
-
-持ち物アイテムを移動しますか?
-		<usetemplate ignoretext="コピー禁止の持ち物をスクリプト付きオブジェクトから移動させるとき" name="okcancelignore" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ClickActionNotPayable">
-		警告:「クリックでオブジェクトに支払い」の設定がされました。
-ただし、これはスクリプトが金銭money() イベントに追加された場合にのみ作動します。
-		<form name="form">
-			<ignore name="ignore" text="money()イベントなしに「オブジェクトに支払う」を設定するとき"/>
-		</form>
-	</notification>
-	<notification name="OpenObjectCannotCopy">
-		このオブジェクトには、あなたがコピーできるアイテムはありません。
-	</notification>
-	<notification name="WebLaunchAccountHistory">
-		[SECOND_LIFE] ウェブ・ページを開いて
-アカウント履歴を確認しますか?
-		<usetemplate ignoretext="アカウント履歴のウェブ・ページをロードするとき" name="okcancelignore" notext="取り消し" yestext="ページに移動"/>
-	</notification>
-	<notification name="ClickOpenF1Help">
-		[SECOND_LIFE] のサポートウェブサイトを利用しますか?
-		<usetemplate ignoretext="[SECOND_LIFE] のサポートウェブサイトを閲覧するにあたって。" name="okcancelignore" notext="キャンセル" yestext="行く"/>
-	</notification>
-	<notification name="ConfirmQuit">
-		終了しようとしています。操作を続行しますか?
-		<usetemplate ignoretext="[APP_NAME] の終了にあたって。" name="okcancelignore" notext="継続" yestext="終了"/>
-	</notification>
-	<notification name="HelpReportAbuseEmailLL">
-		利用規約違反とコミュニティースタンダード違反の報告にこのツールをご使用ください。 参照:
-
-http://secondlife.com/corporate/tos.php
-http://secondlife.com/corporate/cs.php
-
-利用規約違反とコミュニティースタンダード違反に関する全てのレポートは、調査され、解決されます。
-以下のリンク先の被害報告にてその確認をすることができます。
-
-http://secondlife.com/support/incidentreport.php
-	</notification>
-	<notification name="HelpReportAbuseEmailEO">
-		重要: このレポートはLinden Lab 社ではなく、
-あなたが現在いる地域のオーナーに送られます。
--
-あなたが今いる地域のオーナーは、
-住人と訪問者へのサービスの一環として、この地域からのレポートをすべて受け付け、解決することに同意しています。
-よってLinden Lab 社が、
-あなたがここから提出するレポートを調査することはありません。
-地域のオーナーは、不動産約款で指定している地元の規則を基に、報告された問題を解決します。
-(「世界」のメニューから「土地情報」を選ぶと、約款を閲覧できます)
--
-このレポートに関する解決策は、この地域にだけ当てはまります。
-住人が[SECOND_LIFE] の他の地域へアクセスする際、
-このレポートの結果に影響されることはありません。
-Linden Lab 社だけが[SECOND_LIFE] 全域における
-アクセス制限権を持っています。
-	</notification>
-	<notification name="HelpReportAbuseSelectCategory">
-		嫌がらせ報告のカテゴリを選択してください。
-カテゴリを選択することにより、嫌がらせ報告の処理や保管に大変役立ちます。
-	</notification>
-	<notification name="HelpReportAbuseAbuserNameEmpty">
-		嫌がらせ行為をした人の名前を入力してください。
-正確な情報の入力により、嫌がらせ報告の処理や保管に大変役立ちます。
-	</notification>
-	<notification name="HelpReportAbuseAbuserLocationEmpty">
-		嫌がらせがあった場所を入力してください。
-正確な情報の入力により、嫌がらせ報告の処理や保管に大変役立ちます。
-	</notification>
-	<notification name="HelpReportAbuseSummaryEmpty">
-		嫌がらせの概要を入力してください。
-正確な概要の入力により、
-嫌がらせ報告の処理や保管に大変役立ちます。
-	</notification>
-	<notification name="HelpReportAbuseDetailsEmpty">
-		嫌がらせの詳細な説明を入力してください。
-名前や嫌がらせの詳細を、できるだけ具体的に入力してください。
-
-正確な説明の入力により、
-嫌がらせ報告の処理や保管に大変役立ちます。
-	</notification>
-	<notification name="HelpReportAbuseContainsCopyright">
-		住人の皆様へ、
-
-知的財産の侵害に関する報告を行う際には、以下の点に注意してください。
-
-(1) 嫌がらせの報告のプロセス
-[SECOND_LIFE] の権限システムを悪用している住人を見つけたら、
-嫌がらせの報告を行ってください。
-例えばコピーBotの使用、それに似たツールの使用による知的財産権の侵害があります。
-アビューズチームは調査に基づき、
-[SECOND_LIFE] のコミュニティースタンダードや
-利用規約に違反する行為と判断された場合には適切な処置を行っています。
-ただし、コンテンツを[SECOND_LIFE] から撤去してほしい、
-といった要望にはアビューズチームは応えることができません。
-
-(2) DMCA(デジタルミレニアム著作権法)及びコンテンツ撤去プロセス
-[SECOND_LIFE] からのコンテンツの撤去をリクエストするには、
-著作権侵害通知の提出を行う必要があります。
-参照: http://secondlife.com/corporate/dmca.php
-
-この件に関する嫌がらせの報告を続ける際は、このウィンドウを閉じてください。選択すべきカテゴリは「知的財産の侵害>コピーBot及び権限の悪用」のほうが適しているかもしれませんのでご確認ください。
-
-よろしくお願いします。
-
-Linden Lab
-	</notification>
-	<notification name="FailedRequirementsCheck">
-		以下の必要なコンポーネントが、[FLOATER]から抜け落ちています
-[COMPONENTS]
-	</notification>
-	<notification label="既存の付属品を置換" name="ReplaceAttachment">
-		体のこの部位にはオブジェクトが装着されています。
-選択されたオブジェクトと置き換えますか?
-		<form name="form">
-			<ignore name="ignore" save_option="true" text="現在、装着しているものを置換するとき"/>
-			<button ignore="自動的に交換" name="Yes" text="OK"/>
-			<button ignore="交換しない" name="No" text="キャンセル"/>
-		</form>
-	</notification>
-	<notification label="取り込み中の警告" name="BusyModePay">
-		現在、取り込み中のため、この支払いと
-引き換えのアイテムを受け取ることが
-できません。
-
-この取引を完了する前に、取り込み中の設定を解除しますか?
-		<form name="form">
-			<ignore name="ignore" save_option="true" text="取り込み中の人またはオブジェクトに支払うとき"/>
-			<button ignore="常に取り込み中の設定" name="Yes" text="OK"/>
-			<button ignore="取り込み中の設定にしない" name="No" text="キャンセル"/>
-		</form>
-	</notification>
-	<notification name="ConfirmEmptyTrash">
-		ゴミ箱フォルダの中身を完全に削除しようとしています。操作を続行しますか?
-		<usetemplate ignoretext="持ち物内の「ごみ箱」フォルダを空にするとき" name="okcancelignore" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmClearBrowserCache">
-		本当にブラウザのキャッシュをクリアしますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
-	</notification>
-	<notification name="ConfirmClearCookies">
-		本当にクッキーをクリアしますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
-	</notification>
-	<notification name="ConfirmClearMediaUrlList">
-		保存された URL のリストを消去します。よろしいですか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
-	</notification>
-	<notification name="ConfirmEmptyLostAndFound">
-		遺失物フォルダの中身を完全に削除しようとしています。操作を続行しますか?
-		<usetemplate ignoretext="持ち物内の「遺失物」フォルダを空にするとき" name="okcancelignore" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="CopySLURL">
-		以下のSLurlがクリップボードにコピーされました。
- [SLURL]
-
-他の人がアクセスしやすいようにウェブ・ページに載せたり、
-ブラウザのアドレス・バーに貼り付けて、自分でアクセスしてみましょう。
-		<form name="form">
-			<ignore name="ignore" text="SLurlをクリップボードにコピーするとき"/>
-		</form>
-	</notification>
-	<notification name="GraphicsPreferencesHelp">
-		このパネルでは、ウィンドウのサイズと解像度、およびクライアントのグラフィックの品質を設定することができます。「環境設定」>「表示」のインタフェースでは、低、中、高、超高の4つの中からグラフィック・レベルを選択できます。また、「カスタム」チェックボックスをクリックし、以下のグラフィックスの設定をカスタマイズすることもできます。
-
-シェーダー:ピクセル・シェーダーのさまざまな種類を有効または無効にします。
-
-反射詳細:水が反射するオブジェクトの種類を設定します。
-
-アバター・レンダリング:クライアントによるアバターのレンダリング方法に影響するオプションを設定します。
-
-描画距離:あなたの視点から視界のどのくらいの距離まで、オブジェクトがレンダリングされるかに影響します。
-
-最大パーティクル数:画面に一度に見ることができるパーティクルの最大数を設定します。
-
-ポストプロセス品質:グロー効果(輝き)がレンダリングされる際の解像度を設定します。
-
-メッシュ詳細: 特定のオブジェクトのレンダリング時の細部表現、または三角形の数を設定します。 値を大きくするほどレンダリングに時間がかかりますが、オブジェクトがより詳細に表示されます。
-
-ライティング詳細:レンダリングする光源の種類を選択します。
-
-地形詳細: 地形テクスチャの細部表現を設定します。
-	</notification>
-	<notification name="WLSavePresetAlert">
-		保存された事前設定を上書きしますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="WLDeletePresetAlert">
-		[SKY] を削除しますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="WLNoEditDefault">
-		デフォルトの設定を編集したり削除したりすることはできません。
-	</notification>
-	<notification name="WLMissingSky">
-		このデイ・サイクルのファイルは次の存在しない「空」ファイルを参照しています: [SKY]。
-	</notification>
-	<notification name="PPSaveEffectAlert">
-		ポストプロセス効果が存在します。 上書きしますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="HelpEditSky">
-		ウィンドライトの各種スライダーを編集して空を作成および保存します。
-	</notification>
-	<notification name="HelpEditDayCycle">
-		1 日を通して変化する空の様子を設定します。
-	</notification>
-	<notification name="EnvSettingsHelpButton">
-		次の各設定はコンピュータ上でインワールドの環境がどのように表示されるかを調整します。  設定のすべてにアクセスするにはお使いのグラフィック・カードが周囲(大気)シェーダー (atmospheric shaders) をサポートしている必要があります。
-
-「時間帯」スライダーを調整することによりビューワで実際に使用する時間帯を変更できます。
-
-「雲の量」スライダーを調整することにより空をおおう雲の量を制御できます。
-
-「水の色」カラー・ピッカーで色を選択することにより水の色を変更できます。
-
-「水中のフォグ効果」スライダーを調整することにより水の透明度を制御できます。
-
-「不動産の時刻を使用」をクリックすることにより時刻はリセットされ地域の現在時刻に連動させることができます。
-
-「空の高度な設定」をクリックすることにより空のより高度な設定を行うための編集プログラムを起動できます。
-
-「水の高度な設定」をクリックすることにより水のより高度な設定を行うための編集プログラムを起動できます。
-	</notification>
-	<notification name="HelpDayCycle">
-		「デイ・サイクル編集」では、
-[SECOND_LIFE] での昼と夜の空の変化を制御できます。
-これは「基本環境編集」の「時間帯」スライダーで使用されるサイクルです。
-
-「デイ・サイクル編集」はキーフレームを設定することで機能します。
-各キーフレームにはプリセットされた空の設定が関連付けられています。(時間グラフに灰色の節として表示されます)
-ウィンドライト( WindLight )はキーフレーム間をデータ補間し、
-時間の経過とともに空の自然なアニメーションを作り出します。
-
-時間グラフの上に表示される黄色の矢印は、時刻をもとにした現在の眺めを表しています。
-黄色の矢印をクリック&ドラッグすることで、
-1 日の移り変わりを見ることができます。
-「キーの追加」ボタンまたは「キーの削除」ボタンを押して、
-時間グラフの右側にキーフレームを追加あるいは削除することができます。
-
-キーフレームの時刻を指定するには、
-時間グラフに沿ってドラッグするか「キーフレームの設定」のフレーム内で値を直接入力します。
-「キーフレームの設定」のフレーム内ではキーフレームにウィンドライト( WindLight )の事前設定を関連付けることができます。
-
-「サイクルの長さ」では1 日全体の時間を指定できます。
-この値を低く設定すると(例えば2分)、24 時間の時間グラフは
-実時間の 2 分間に相当することを意味します。
-時間グラフとキーフレーム・サイクルの設定が完了したら、
-「再生」ボタンと「停止」ボタンを使用して結果をプレビューしてみましょう。
-また、時間グラフ上の黄色い時刻表示矢印を移動することによってもサイクルの変化をインタラクティブに確認することができます。 「不動産の時刻を使用」ボタンを使用することで日の長さと時刻が不動産のデイ・サイクルに同期されます。
-
-デイ・サイクルの設定が完了したら、「デイ・テストを保存」ボタンおよび「デイ・テストをロード」ボタンを使用してデイ・サイクルを保存およびロードします。
-尚、現在の仕様ではデイ・サイクルで指定できるのは
-1 日分だけです。
-	</notification>
-	<notification name="HelpBlueHorizon">
-		空の色を調整するには 「R」 (赤)、「G」 (緑)、「B」 (青) の各スライダーを使用します。  「I」 スライダーを使用すると、3 つの RGB スライダーを一斉に動かすことができます。
-	</notification>
-	<notification name="HelpHazeHorizon">
-		「空と遠景の露光」は風景の露光量全体を調整する上で最も便利なパラメーターの 1 つです。  太陽光によるホワイトアウト現象や暗く絞り込んだ設定など、さまざまな露出設定をシミュレーションできます。
-	</notification>
-	<notification name="HelpBlueDensity">
-		「空の配色と濃度」は空と霧の彩度全体に影響します。 「I」 スライダーを右に移動すると色は明るくくっきりとなります。
-このスライダーを左端に移動すると、色は彩りを失い、白黒に退色します。 空の色を微調整する場合は、
-「R」 (赤)、 「G」 (緑)、 「B」 (青)
-の各スライダーを使用して彩度を個別に制御できます。
-	</notification>
-	<notification name="HelpHazeDensity">
-		「大気の不透明度」は大気中のどんよりとした空の雰囲気、グレーがかった霧のレベルを制御します。  濃い煙や大気汚染など
-を表現するのに適しています。  霧やもやなどの表現手段としても効果的です。
-	</notification>
-	<notification name="HelpDensityMult">
-		「大気の不透明度の増幅」は空気の濃度全体を制御するために使用できます。 この値を低く設定すると「大気の薄い状態」を演出し、高い数値に設定するととてもどんよりとしたスモッグのかかった雰囲気を表現できます。
-	</notification>
-	<notification name="HelpDistanceMult">
-		ウィンドライトの視覚的距離を調整します。  値としてゼロを設定すると、地形およびオブジェクトに対する
-ウィンドライトの影響を効果的に取り消すことができます。  1 より大きな値を設定する場合、値が大きくなるにつれて
-大気が次第に濃くなるような効果が得られます。
-	</notification>
-	<notification name="HelpMaxAltitude">
-		「最大高度」では大気中の光の量を算出するときに
-ウィンドライトが算出した高度を調整します。
-1日の終わりに夕焼けの度合いを調整するときに役立ちます。
-	</notification>
-	<notification name="HelpSunlightColor">
-		風景の中で直射日光の色や強さを調整します。
-	</notification>
-	<notification name="HelpSunAmbient">
-		風景の中で周囲をとりまく大気中のアンビエント光の色や強さを調整します。
-	</notification>
-	<notification name="HelpSunGlow">
-		「サイズ」スライダーは太陽の大きさを制御します。
-「フォーカス」スライダーは空を背にした太陽のかすみ具合を制御します。
-	</notification>
-	<notification name="HelpSceneGamma">
-		風景の中で明暗の配分を調整します。
-	</notification>
-	<notification name="HelpStarBrightness">
-		空の星の輝きを調整します。
-	</notification>
-	<notification name="HelpTimeOfDay">
-		空の太陽の場所を調整します。
-標高に似ています。
-	</notification>
-	<notification name="HelpEastAngle">
-		空の太陽の場所を調整します。
-方位角に似ています。
-	</notification>
-	<notification name="HelpCloudColor">
-		雲の色を編集します。  通常は白っぽい色をお勧めしますが、もちろん
-お好みの色を設定してください。
-	</notification>
-	<notification name="HelpCloudDetail">
-		主要な雲のイメージの上にレイヤーされた詳細なイメージを制御します。  X と Y でその位置を制御します。
-「D」(濃度)は真綿のような様子や、
-雲の割れ目の様子など雲の外観を制御します。
-	</notification>
-	<notification name="HelpCloudDensity">
-		「X」 と 「Y」 のスライダーで雲の位置を、
-「D」のスライダーでその密度を制御できます。
-	</notification>
-	<notification name="HelpCloudCoverage">
-		空を覆う雲の量を制御します。
-	</notification>
-	<notification name="HelpCloudScale">
-		空に浮かぶ雲のイメージの縮尺を制御します。
-	</notification>
-	<notification name="HelpCloudScrollX">
-		「X」 の方向に雲が移動する際の速度を制御します。
-	</notification>
-	<notification name="HelpCloudScrollY">
-		「Y」 の方向に雲が移動する際の速度を制御します。
-	</notification>
-	<notification name="HelpClassicClouds">
-		このボックスを有効にすると、WindLight の雲に加えて、[SECOND_LIFE] の従来の雲もレンダリングできるようになります。
-	</notification>
-	<notification name="HelpWaterFogColor">
-		水中のフォグ効果に色をつけます。
-	</notification>
-	<notification name="HelpWaterFogDensity">
-		水中のフォグ効果の強弱、水中でどのくらいの距離まで見渡せるかを制御します。
-	</notification>
-	<notification name="HelpUnderWaterFogMod">
-		「水中のフォグ濃度指数」の効果を加減して、あなたのアバターが水中にいるとき、どのくらい遠くまで見ることができるかを制御します。
-	</notification>
-	<notification name="HelpWaterGlow">
-		水面の輝きの度合いを制御します。
-	</notification>
-	<notification name="HelpWaterNormalScale">
-		水面を表現する 3 種類のさざ波の縮尺を制御します。
-	</notification>
-	<notification name="HelpWaterFresnelScale">
-		さまざまな角度で、反射する光の量を制御します。
-	</notification>
-	<notification name="HelpWaterFresnelOffset">
-		反射する光度の量を制御します。
-	</notification>
-	<notification name="HelpWaterScaleAbove">
-		上から水中を見たときの光の屈折具合を制御します。
-	</notification>
-	<notification name="HelpWaterScaleBelow">
-		水中から見たときの光の屈折具合を制御します。
-	</notification>
-	<notification name="HelpWaterBlurMultiplier">
-		波と反射の混ざり具合を制御します。
-	</notification>
-	<notification name="HelpWaterNormalMap">
-		反射や屈折を決定するために水に重ねられるノーマル・マップを制御します。
-	</notification>
-	<notification name="HelpWaterWave1">
-		拡大されたノーマル・マップが移動する方向(X 軸と Y 軸で表現)と速度を制御します。
-	</notification>
-	<notification name="HelpWaterWave2">
-		縮小されたノーマル・マップが移動する方向(X 軸と Y 軸で表現)と速度を制御します。
-	</notification>
-	<notification name="NewSkyPreset">
-		新しい空の名前を指定してください。
-		<form name="form">
-			<input name="message">
-				新しい事前設定
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="キャンセル"/>
-		</form>
-	</notification>
-	<notification name="ExistsSkyPresetAlert">
-		事前設定がすでに存在します!
-	</notification>
-	<notification name="NewWaterPreset">
-		新しい水の事前設定の名前を指定してください。
-		<form name="form">
-			<input name="message">
-				新しい事前設定
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="キャンセル"/>
-		</form>
-	</notification>
-	<notification name="ExistsWaterPresetAlert">
-		事前設定がすでに存在します!
-	</notification>
-	<notification name="WaterNoEditDefault">
-		デフォルトの設定を編集したり削除したりすることはできません。
-	</notification>
-	<notification name="ChatterBoxSessionStartError">
-		[RECIPIENT]との新しいチャットを開始することができません
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ChatterBoxSessionEventError">
-		[EVENT]
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ForceCloseChatterBoxSession">
-		[NAME]とのチャットセッションを閉じます。
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="Cannot_Purchase_an_Attachment">
-		アイテムが添付物の一部である間は、
-アイテムを購入できません。
-	</notification>
-	<notification label="デビット許可のリクエストについて" name="DebitPermissionDetails">
-		この要求を許可すると、スクリプトからあなたのアカウントにリンデンドルを課金できるようになります。
-この許可を取り消すには、オブジェクトのオーナーはオブジェクトを削除するか、オブジェクトのスクリプトをリセットしなければなりません。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="AutoWearNewClothing">
-		あなたが作成した服アイテムを自動的に装着しますか?
-		<usetemplate ignoretext="新しい服を自動的に装着する" name="okcancelignore" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="NotAgeVerified">
-		この区画にアクセスするためには、
-年齢確認を行う必要があります。
-[SECOND_LIFE] のウェブサイトにアクセスし、
-年齢確認を行いますか?
-
-[_URL]
-		<url name="url" option="0">
-			https://secondlife.com/account/verification.php?lang=ja
-		</url>
-		<usetemplate ignoretext="年齢の未確認について警告する" name="okcancelignore" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="Cannot enter parcel: no payment info on file">
-		この区画にアクセスするには、支払い情報が事前に登録されている必要があります。
-[SECOND_LIFE] のウェブサイトにアクセスして、設定しますか?
-
-[_URL]
-		<url name="url" option="0">
-			https://secondlife.com/account/index.php?lang=ja
-		</url>
-		<usetemplate ignoretext="支払い情報の未登録について警告する" name="okcancelignore" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="MissingString">
-		文字列[STRING_NAME]がstrings.xmlに含まれていません
-	</notification>
-	<notification name="SystemMessageTip">
-		[MESSAGE]
-	</notification>
-	<notification name="Cancelled">
-		取り消されました
-	</notification>
-	<notification name="CancelledSit">
-		座るのを取り消されました
-	</notification>
-	<notification name="CancelledAttach">
-		添付は取り消されました
-	</notification>
-	<notification name="ReplacedMissingWearable">
-		欠落している服/身体部位をデフォルトに置換します。
-	</notification>
-	<notification name="GroupNotice">
-		件名: [SUBJECT], メッセージ: [MESSAGE]
-	</notification>
-	<notification name="FriendOnline">
-		[FIRST] [LAST] はオンラインです。
-	</notification>
-	<notification name="FriendOffline">
-		[FIRST] [LAST] はオフラインです。
-	</notification>
-	<notification name="AddSelfFriend">
-		自分自身をフレンドにはできません。
-	</notification>
-	<notification name="UploadingAuctionSnapshot">
-		インワールドとウェブ・サイトのスナップショットをアップロード中です...
-(所要時間:約5分)
-	</notification>
-	<notification name="UploadPayment">
-		アップロードに L$[AMOUNT] 支払いました。
-	</notification>
-	<notification name="UploadWebSnapshotDone">
-		Webサイトのスナップショットがアップロードされました。
-	</notification>
-	<notification name="UploadSnapshotDone">
-		インワールドでのスナップショットのアップロードが完了しました。
-	</notification>
-	<notification name="TerrainDownloaded">
-		raw地形がダウンロードされました
-	</notification>
-	<notification name="GestureMissing">
-		ジェスチャー[NAME] がデータベースにありません。
-	</notification>
-	<notification name="UnableToLoadGesture">
-		ジェスチャー[NAME] を読み込むことができません。
-再度、試みてください。
-	</notification>
-	<notification name="LandmarkMissing">
-		データベースにランドマークがありません。
-	</notification>
-	<notification name="UnableToLoadLandmark">
-		ランドマークをロードできません。  もう一度試してください。
-	</notification>
-	<notification name="CapsKeyOn">
-		コンピューターの Caps Lockキーが
-有効になっています。パスワード入力に
-影響するので解除しましょう。
-	</notification>
-	<notification name="NotecardMissing">
-		ノートカードがデータベースにありません。
-	</notification>
-	<notification name="NotecardNoPermissions">
-		ノートカードを閲覧するには権限が不十分です
-	</notification>
-	<notification name="RezItemNoPermissions">
-		オブジェクトをrezするにはパーミッション(承認)が不足してます。
-	</notification>
-	<notification name="UnableToLoadNotecard">
-		現在ノートカードの資産をロードできません。
-	</notification>
-	<notification name="ScriptMissing">
-		データベースにスクリプトがありません。
-	</notification>
-	<notification name="ScriptNoPermissions">
-		スクリプトを閲覧するには権限が不十分です。
-	</notification>
-	<notification name="UnableToLoadScript">
-		スクリプトをロードできません。  もう一度試してください。
-	</notification>
-	<notification name="IncompleteInventory">
-		あなたの提供するコンテンツは、この場所ではまだ全部揃いません。
-少ししてからもう一度試してください。
-	</notification>
-	<notification name="CannotModifyProtectedCategories">
-		保護されたカテゴリーは修正できません。
-	</notification>
-	<notification name="CannotRemoveProtectedCategories">
-		保護されたカテゴリーは削除できません。
-	</notification>
-	<notification name="OfferedCard">
-		あなたは[FIRST] [LAST] に
-コーリング・カードを送りました。
-	</notification>
-	<notification name="UnableToBuyWhileDownloading">
-		オブジェクトデータのダウンロード中は購入できません。
-もう一度試してください。
-	</notification>
-	<notification name="UnableToLinkWhileDownloading">
-		オブジェクトデータのウンロード中はリンクできません。
-もう一度試してください。
-	</notification>
-	<notification name="CannotBuyObjectsFromDifferentOwners">
-		複数のオーナーから同時にオブジェクトを購入することはできません。
-単一のオブジェクトを選択してください。
-	</notification>
-	<notification name="ObjectNotForSale">
-		オブジェクトは販売対象ではありません。
-	</notification>
-	<notification name="EnteringGodMode">
-		レベル[LEVEL]のゴッド・モードに入ります
-	</notification>
-	<notification name="LeavingGodMode">
-		レベル[LEVEL]のゴッド・モードを解除
-	</notification>
-	<notification name="CopyFailed">
-		コピー権限がないため、コピーに失敗しました
-	</notification>
-	<notification name="InventoryAccepted">
-		[NAME]は、持ち物の提供を受け入れました。
-	</notification>
-	<notification name="InventoryDeclined">
-		[NAME]は、持ち物の提供を断りました。
-	</notification>
-	<notification name="ObjectMessage">
-		[NAME]: [MESSAGE]
-	</notification>
-	<notification name="CallingCardAccepted">
-		コーリング・カードが受理されました。
-	</notification>
-	<notification name="CallingCardDeclined">
-		コーリング・カードが拒否されました。
-	</notification>
-	<notification name="TeleportToLandmark">
-		本土に到達しました。
-[NAME]などの場所にテレポートするには、画面右下にある「持ち物」ボタンをクリックし、ランドマーク(Landmarks)フォルダを選択してください。
-ランドマークをダブルクリックした後「テレポート」をクリックするとその場所へ移動します。
-	</notification>
-	<notification name="TeleportToPerson">
-		本土に到達しました。
-住人の[NAME]と接触するには、画面右下にある「持ち物」ボタンをクリックし、コーリングカード(Calling Cards)フォルダを選択してください。
-カードをダブルクリックし、「IMを送る」をクリックし、メッセージを送信してください。
-	</notification>
-	<notification name="CantSelectLandFromMultipleRegions">
-		サーバーの境界を越えて土地を選択することできません。
-もっと小さな土地を選択してください。
-	</notification>
-	<notification name="SearchWordBanned">
-		コミュニティスタンダードに明記されているコンテンツ制限により、あなたの検索語の一部が除外されました。
-	</notification>
-	<notification name="NoContentToSearch">
-		少なくともどれか一つコンテンツの種類を選択して検索を行ってください。(PG, Mature, Adult)
-	</notification>
-	<notification name="GroupVote">
-		[NAME] は投票の申請をしています:
-[MESSAGE]
-		<form name="form">
-			<button name="VoteNow" text="今すぐ投票する"/>
-			<button name="Later" text="あとで"/>
-		</form>
-	</notification>
-	<notification name="SystemMessage">
-		[MESSAGE]
-	</notification>
-	<notification name="EventNotification">
-		イベント通知:
-
-[NAME]
-[DATE]
-		<form name="form">
-			<button name="Teleport" text="テレポート"/>
-			<button name="Description" text="説明"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="TransferObjectsHighlighted">
-		この区画上に存在するオブジェクトのうち、この区画の購入者に譲渡されるオブジェクトがすべて強調表示されます。
-
-
-*譲渡される樹木や植物は、強調表示されません。
-		<form name="form">
-			<button name="Done" text="完了"/>
-		</form>
-	</notification>
-	<notification name="DeactivatedGesturesTrigger">
-		同じトリガーでアクティブにしないジェスチャー:
-[NAMES]
-	</notification>
-	<notification name="NoQuickTime">
-		Apple社のQuickTimeがシステムにインストールされていないと思われます。
-ストリーミング・メディアの再生を行いたい場合は、QuickTimeのサイト(http://www.apple.com/quicktime)にアクセスして、QuickTime Player をインストールしてください。
-	</notification>
-	<notification name="OwnedObjectsReturned">
-		選択した土地の区画上にあったあなたのオブジェクトは、あなたの持ち物に返却されました。
-	</notification>
-	<notification name="OtherObjectsReturned">
-		選択されている土地の区画上にあった
- [FIRST] [LAST]
- が所有するオブジェクトは、オーナーの持ち物に返却されました。
-	</notification>
-	<notification name="OtherObjectsReturned2">
-		選択された土地の区画上にあり、
-住人の[NAME]の所有だったオブジェクトはオーナーに返却されました。
-	</notification>
-	<notification name="GroupObjectsReturned">
-		選択されている区画上にあり、[GROUPNAME] というグループと共有だったオブジェクトは、オーナーの持ち物に返却されました。
-譲渡されていた譲渡可能なオブジェクトは、前のオーナーに返却されました。
-グループに譲渡されていた譲渡不可能なオブジェクトは、削除されました。
-	</notification>
-	<notification name="UnOwnedObjectsReturned">
-		選択された土地の区画上にあり、あなたの所有で「なかった」オブジェクトは、本来のオーナーに返却されました。
-	</notification>
-	<notification name="NotSafe">
-		この土地はダメージが有効(「安全ではない」)に設定されています。
-ケガをするかもしれません。 命を落とした場合は、ホームにテレポートされます。
-	</notification>
-	<notification name="NoFly">
-		この土地は飛行が無効(「飛行禁止」)に設定されています。
-ここで飛ぶことはできません。
-	</notification>
-	<notification name="PushRestricted">
-		この土地では「プッシング禁止」です。
-土地所有者以外はここで他人をプッシュすることはできません。
-	</notification>
-	<notification name="NoVoice">
-		この土地はボイスが無効に設定されています。
-	</notification>
-	<notification name="NoBuild">
-		この土地はオブジェクトの作成禁止に設定されています。
-ここでオブジェクトを作ることはできません。
-	</notification>
-	<notification name="ScriptsStopped">
-		管理者がこの地域内のスクリプトを一時停止させました。
-	</notification>
-	<notification name="ScriptsNotRunning">
-		この地域ではスクリプトの使用が禁止されています
-	</notification>
-	<notification name="NoOutsideScripts">
-		この土地では外部スクリプトが無効に設定されています。
-(「外部スクリプト禁止」)
-土地所有者以外のスクリプトは起動できません
-	</notification>
-	<notification name="ClaimPublicLand">
-		自分がいる地域でのみ公共の土地を獲得できます。
-	</notification>
-	<notification name="RegionTPAccessBlocked">
-		あなたのレーティング区分によりその地域(リージョン)へは入ることができません。 年齢確認を行うか、最新ビューワをインストールしてください。
-
-現在のレーティング区分でアクセス可能なエリアに関する詳細はナレッジベースを参照してください。
-	</notification>
-	<notification name="URBannedFromRegion">
-		あなたは地域(リージョン)への立入が禁止されています。
-	</notification>
-	<notification name="NoTeenGridAccess">
-		あなたのアカウントではティーングリッドに接続できません。
-	</notification>
-	<notification name="NoHelpIslandTP">
-		Help Islandには戻ることができません。
-「Help Island Public」に行き、
-再度チュートリアルを行ってください。
-	</notification>
-	<notification name="ImproperPaymentStatus">
-		この地域(リージョン)に入るために適した支払いステータスがありません。
-	</notification>
-	<notification name="MustGetAgeRegion">
-		この地域(リージョン)に入るには年齢確認済みである必要があります。
-	</notification>
-	<notification name="MustGetAgeParcel">
-		この区画に入るには年齢確認済みである必要があります。
-	</notification>
-	<notification name="NoDestRegion">
-		目的地の地域(リージョン)が見つかりませんでした。
-	</notification>
-	<notification name="NotAllowedInDest">
-		目的地に入る許可がありません。
-	</notification>
-	<notification name="RegionParcelBan">
-		立入禁止された区画を横断することはできません。 別の方法をお試しください。
-	</notification>
-	<notification name="TelehubRedirect">
-		テレハブに転送されました。
-	</notification>
-	<notification name="CouldntTPCloser">
-		これ以上目的地に近い場所にテレポートができませんでした。
-	</notification>
-	<notification name="TPCancelled">
-		テレポートがキャンセルされました。
-	</notification>
-	<notification name="FullRegionTryAgain">
-		入ろうとしている地域(リージョン)は現在満員です。
-しばらくしてから再度お試しください。
-	</notification>
-	<notification name="GeneralFailure">
-		よくある失敗
-	</notification>
-	<notification name="RoutedWrongRegion">
-		異なる地域(リージョン)に迂回されました。 もう一度お試しください。
-	</notification>
-	<notification name="NoValidAgentID">
-		エージェントIDが無効です。
-	</notification>
-	<notification name="NoValidSession">
-		セッションIDが無効です。
-	</notification>
-	<notification name="NoValidCircuit">
-		回路コードが無効です。
-	</notification>
-	<notification name="NoValidTimestamp">
-		タイムスタンプが無効です。
-	</notification>
-	<notification name="NoPendingConnection">
-		接続を生成できません。
-	</notification>
-	<notification name="InternalUsherError">
-		内部エラーが発生しました。
-	</notification>
-	<notification name="NoGoodTPDestination">
-		この地域(リージョン)では適切なテレポート目的地が見つかりませんでした。
-	</notification>
-	<notification name="InternalErrorRegionResolver">
-		内部エラーが発生しました。
-	</notification>
-	<notification name="NoValidLanding">
-		有効な着地点が見つかりませんでした。
-	</notification>
-	<notification name="NoValidParcel">
-		有効な区画が見つかりませんでした。
-	</notification>
-	<notification name="ObjectGiveItem">
-		[FIRST] [LAST]所有の、
-[OBJECTFROMNAME]から、
-[OBJECTNAME]という[OBJECTTYPE]が送られてきました。
-		<form name="form">
-			<button name="Keep" text="受け取る"/>
-			<button name="Discard" text="破棄"/>
-			<button name="Mute" text="無視リストへ"/>
-		</form>
-	</notification>
-	<notification name="ObjectGiveItemUnknownUser">
-		(未知のユーザー) 所有の[OBJECTFROMNAME]から、
-あなたに[OBJECTNAME]という[OBJECTTYPE]が送られてきました。
-		<form name="form">
-			<button name="Keep" text="受け取る"/>
-			<button name="Discard" text="破棄"/>
-			<button name="Mute" text="無視リストへ"/>
-		</form>
-	</notification>
-	<notification name="UserGiveItem">
-		[NAME]は、あなたに[OBJECTNAME]という名前の[OBJECTTYPE]を渡しました。
-		<form name="form">
-			<button name="Keep" text="受け取る"/>
-			<button name="Discard" text="破棄"/>
-			<button name="Mute" text="無視リストへ"/>
-		</form>
-	</notification>
-	<notification name="GodMessage">
-		[NAME]
-[MESSAGE]
-	</notification>
-	<notification name="JoinGroup">
-		[MESSAGE]
-		<form name="form">
-			<button name="Join" text="参加"/>
-			<button name="Decline" text="辞退"/>
-			<button name="Info" text="情報"/>
-		</form>
-	</notification>
-	<notification name="TeleportOffered">
-		[NAME]はあなたをテレポートで呼び寄せようとしています:
-
-[MESSAGE]
-		<form name="form">
-			<button name="Teleport" text="テレポート"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="GotoURL">
-		[MESSAGE]
-[URL]
-		<form name="form">
-			<button name="Later" text="あとで"/>
-			<button name="GoNow..." text="今すぐ行く"/>
-		</form>
-	</notification>
-	<notification name="OfferFriendship">
-		[NAME]は、
-フレンド登録を申し込んでいます。
-
-[MESSAGE]
-
-(デフォルトでお互いのオンライン・ステータスを見ることができるようになります。)
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="辞退"/>
-		</form>
-	</notification>
-	<notification name="OfferFriendshipNoMessage">
-		[NAME]は、
-フレンド登録を申し込んでいます。
-
-(デフォルトでお互いのオンライン・ステータスを見ることができるようになります。)
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="拒否"/>
-		</form>
-	</notification>
-	<notification name="FriendshipAccepted">
-		[NAME]は、フレンド 登録を受け入れました。
-	</notification>
-	<notification name="FriendshipDeclined">
-		[NAME]は、フレンド 登録を断りました。
-	</notification>
-	<notification name="OfferCallingCard">
-		[FIRST] [LAST]が
-あなたにコーリングカードを送ってきました。
-これにより、あなたの持ち物にブックマークが追加され、この住人にすばやくIMすることができます。
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="辞退"/>
-		</form>
-	</notification>
-	<notification name="RegionRestartMinutes">
-		この地域は[MINUTES]分後に再起動されます。
-強制ログアウトとなりますので、この地域の外に出てください。
-	</notification>
-	<notification name="RegionRestartSeconds">
-		この地域は[SECONDS]秒後に再起動されます。
-強制ログアウトとなりますので、この地域の外に出てください。
-	</notification>
-	<notification name="LoadWebPage">
-		ウェブ・ページ[URL]をロードしますか?
-
-[MESSAGE]
-
-ロード元のオブジェクト:[OBJECTNAME]、オーナー:[NAME]?
-		<form name="form">
-			<button name="Gotopage" text="移動"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="FailedToFindWearableUnnamed">
-		データベースに[TYPE]が見つかりませんでした
-	</notification>
-	<notification name="FailedToFindWearable">
-		データベースに[DESC]という名前の[TYPE]が見つかりませんでした。
-	</notification>
-	<notification name="InvalidWearable">
-		着用しようとしているアイテムはあなたのビューワでは読み込むことができません。 [APP_NAME]ビューワを最新のものにアップグレードしてからこのアイテムを着用してください。
-	</notification>
-	<notification name="ScriptQuestion">
-		「[NAME]」が所有するオブジェクト「[OBJECTNAME]」を:
-
-[QUESTIONS]
-よろしいですか?
-		<form name="form">
-			<button name="Yes" text="はい"/>
-			<button name="No" text="いいえ"/>
-			<button name="Mute" text="無視リストに追加"/>
-		</form>
-	</notification>
-	<notification name="ScriptQuestionCaution">
-		「[OBJECTNAME]」が所有するオブジェクト「[NAME]」は、次のことを求めています:
-
-[QUESTIONS]
-このオブジェクトと制作者が信用できない場合は、リクエストを拒否してください。追加情報は、詳細ボタンをクリックしてください。
-
-このリクエストを許可しますか?
-		<form name="form">
-			<button name="Grant" text="許可"/>
-			<button name="Deny" text="拒否"/>
-			<button name="Details" text="詳細..."/>
-		</form>
-	</notification>
-	<notification name="ScriptDialog">
-		[FIRST] [LAST]の「[TITLE]」
-[MESSAGE]
-		<form name="form">
-			<button name="Ignore" text="無視する"/>
-		</form>
-	</notification>
-	<notification name="ScriptDialogGroup">
-		[GROUPNAME]の「[TITLE]」
-[MESSAGE]
-		<form name="form">
-			<button name="Ignore" text="無視する"/>
-		</form>
-	</notification>
-	<notification name="FirstBalanceIncrease">
-		L$[AMOUNT]を受け取りました。
-オブジェクトおよび他のユーザーがあなたにお金を支払ったようです。
-あなたの残高は画面の右上に表示されて います。
-	</notification>
-	<notification name="FirstBalanceDecrease">
-		L$[AMOUNT]を支払いました。
-あなたの残高は画面の右上に表示されて います。
-	</notification>
-	<notification name="FirstSit">
-		あなたは座っています。
-矢印(または AWSD)のキーを使って
-視点を変えます。
-立ち上がるには「立ち上がる」をクリックします。
-	</notification>
-	<notification name="FirstMap">
-		地図をスクロールするには、クリックしてドラッグします。
-テレポートするには、ダブルクリックします。
-右側のコントロールを使用すると、物を見つけたり、別の背景を表示することができます。
-	</notification>
-	<notification name="FirstBuild">
-		[SECOND_LIFE] には、
-新しいオブジェクトを作ることができる地域があります。
-作成には画面上部左のツールが使え、
-CtrlキーやAltキーを押したままにすれば
-素早くツールを切り替えられます。
-Escキーを押すと、作成は終了します。
-	</notification>
-	<notification name="FirstLeftClickNoHit">
-		左クリックで特別なオブジェクトを操作できます。
-マウス・ポインタが手のマークに変わると、ポイントしているオブジェクトを操作できます。
-右クリックで実行可能な操作のメニューが表示されます。
-	</notification>
-	<notification name="FirstTeleport">
-		この地域では、ポイント間のテレポートが認められていませんので、最も近いテレハブ周辺に移動しました。
-あなたの目的地は、大きな標識(ビーコン)で表示されています。赤い矢印に向かって進むと標識(ビーコン)へ辿り着きます。
-矢印をクリックすると標識(ビーコン)を消せます
-	</notification>
-	<notification name="FirstOverrideKeys">
-		あなたの移動キーをオブジェクトが操作しています。
-矢印かAWSDのキーで動作を確認してください。
-銃などのオブジェクトだと、一人称視点(マウスルック)に変更する必要があります。
-Mキーを押して変更します。
-	</notification>
-	<notification name="FirstAppearance">
-		あなたは容姿を編集中です。
-回転、ズームするには矢印キーを使います。
-編集が終わったら「すべて保存」をクリックして容姿を保存し、終了します。
-容姿の編集は何度でも行えます。
-	</notification>
-	<notification name="FirstInventory">
-		これは、オブジェクト、ノートカード、服、その他あなたの所有物がすべて入った「持ち物」です。
-*マウスでアバターにオブジェクトや服装フォルダをドラッグして装着します。
-*オブジェクトを地面の上にドラッグすると、周囲の世界に表示させます。(Rez)
-*ノートカードを読むには、ダブルクリックします。
-	</notification>
-	<notification name="FirstSandbox">
-		ここはサンドボックスです。
-あなたがここで作ったオブジェクトはあなたが立ち去った後、削除されるかもしれません。サンドボックスは定期的に清掃されます。詳細については、画面上部、地域名の隣の情報を参照してください。
-
-サンドボックスは特別なエリアで、目印のサインがついています。
-	</notification>
-	<notification name="FirstFlexible">
-		このオブジェクトは フレキシブルです。
-フレキシブル・チェックボックスのチェックが外されるまでは、オブジェクトは物理的でなくファントムでなければなりません。
-	</notification>
-	<notification name="FirstDebugMenus">
-		高度な設定を有効にしました。
-このメニューには、
-[SECOND_LIFE] をデバッグするデベロッパーにとって
-有用な機能があります。
-このメニューを切り替えるには、
-WindowsではCtrl+Alt+Dを押します。
-Macの場合は、&#8997;&#8984;Dを押してください。
-	</notification>
-	<notification name="FirstSculptedPrim">
-		スカルプトプリムを編集しています。
-スカルプトプリムは、形状を指定するための特別なテクスチャーが必要です。
-持ち物ライブラリで、スカルプトテクスチャーのサンプルを参照できます。
-	</notification>
-	<notification name="FirstMedia">
-		メディアの再生を開始しました。
-オーディオ/ビデオの環境設定で、自動的にメディアを再生するように設定することができます。
-注: この設定により、信頼しないメディア・サイトに接続されるセキュリティ・リスクが伴います。
-	</notification>
-	<notification name="MaxListSelectMessage">
-		このリストから[MAX_SELECT]個までのアイテムを選択できます。
-	</notification>
-	<notification name="VoiceInviteP2P">
-		[NAME]が、あなたをボイスチャットコールに招待しています。
-コールに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。このコールをしている人をミュートにする場合は「ミュート」をクリックしてください。
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="拒否"/>
-			<button name="Mute" text="ミュート"/>
-		</form>
-	</notification>
-	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST]に
-インスタント・メッセージが送信され、無視設定は自動的に解除されました。
-	</notification>
-	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST]にお金を渡したため、 無視設定が自動的に解除されました。
-	</notification>
-	<notification name="AutoUnmuteByInventory">
-		[FIRST] [LAST]に持ち物を渡したため、 無視設定が自動的に解除されました。
-	</notification>
-	<notification name="VoiceInviteGroup">
-		[NAME]が、 グループ[GROUP]とのボイスチャットコールに参加しました。
-コールに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。このコールをしている人をミュートにする場合は「ミュート」をクリックしてください。
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="拒否"/>
-			<button name="Mute" text="ミュート"/>
-		</form>
-	</notification>
-	<notification name="VoiceInviteAdHoc">
-		[NAME]が、 会議チャットでボイスチャットコールに参加しました。
-コールに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。 このユーザーをミュート(消声)する場合は「ミュート」をクリックしてください。
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="拒否"/>
-			<button name="Mute" text="ミュート"/>
-		</form>
-	</notification>
-	<notification name="InviteAdHoc">
-		[NAME]が、 あなたを会議チャットに招待しています。
-チャットに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。このユーザーをミュート(消声)する場合は「ミュート」をクリックしてください。
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="拒否"/>
-			<button name="Mute" text="ミュート"/>
-		</form>
-	</notification>
-	<notification name="VoiceChannelFull">
-		あなたが参加しようとしているボイスコール[VOICE_CHANNEL_NAME]は、参加者が最大限に達しました。後でもう一度お試しください。
-	</notification>
-	<notification name="ProximalVoiceChannelFull">
-		このエリアのボイスチャットは、混雑のため容量を超えてしまっています。申し訳ありませんが、他のエリアでボイスチャットをお試しください。
-	</notification>
-	<notification name="VoiceChannelDisconnected">
-		[VOICE_CHANNEL_NAME]への接続が切断されました。空間ボイスチャットに再接続されます。
-	</notification>
-	<notification name="VoiceChannelDisconnectedP2P">
-		[VOICE_CHANNEL_NAME]は、コールを終了しました。空間ボイスチャットに再接続されます。
-	</notification>
-	<notification name="P2PCallDeclined">
-		[VOICE_CHANNEL_NAME]は、あなたのコールを拒否しました。空間ボイスチャットに再接続されます。
-	</notification>
-	<notification name="P2PCallNoAnswer">
-		[VOICE_CHANNEL_NAME]は、あなたのコールを受け取れません。空間ボイスチャットに再接続されます。
-	</notification>
-	<notification name="VoiceChannelJoinFailed">
-		[VOICE_CHANNEL_NAME]への接続に失敗しました。時間をおいて、再度、試みてください。空間ボイスチャットに再接続されます。
-	</notification>
-	<notification name="VoiceLoginRetry">
-		あなた用のボイスチャンネルを作成しています。1分ほどかかります。
-	</notification>
-	<notification name="Cannot enter parcel: not a group member">
-		適切なグループのメンバーではないため、区画に入ることができません。
-	</notification>
-	<notification name="Cannot enter parcel: banned">
-		立入禁止されているため、区画に入ることができません。
-	</notification>
-	<notification name="Cannot enter parcel: not on access list">
-		アクセス・リストに含まれていないため、区画に入ることができません。
-	</notification>
-	<notification name="VoiceNotAllowed">
-		あなたには[VOICE_CHANNEL_NAME]のボイス・チャットに接続する権限がありません。
-	</notification>
-	<notification name="VoiceCallGenericError">
-		[VOICE_CHANNEL_NAME]のボイス・チャットに接続中に、エラーが発生しました。後でもう一度お試しください。
-	</notification>
-	<notification name="ServerVersionChanged">
-		到着した地域は異なるシミュレーターのバージョンで実行されています。 詳細についてはこのメッセージをクリックしてください。
-	</notification>
-	<notification name="UnableToOpenCommandURL">
-		クリックしたURLはこのウェブブラウザでは開けません
-	</notification>
-	<global name="UnsupportedCPU">
-		- あなたの CPU の速度は必須動作環境の条件を満たしていません。
-	</global>
-	<global name="UnsupportedGLRequirements">
-		[APP_NAME] の使用に必要なハードウェアの環境が満たされていないようです。 [APP_NAME] ではマルチテクスチャーに対応したOpenGLグラフィック・カードが必要です。 この場合、グラフィック・カードの最新ドライバがインストールされていること、およびオペレーティング・システムにサービス・パックと修正プログラムが適用されていることをご確認ください。
-
-問題が解決されない場合には、次のサイトにアクセスしてください。 http://www.secondlife.com/support
-	</global>
-	<global name="UnsupportedCPUAmount">
-		796
-	</global>
-	<global name="UnsupportedRAMAmount">
-		510
-	</global>
-	<global name="UnsupportedGPU">
-		- あなたのグラフィック・カードは必須動作環境の条件を満たしていません。
-	</global>
-	<global name="UnsupportedRAM">
-		- あなたのシステム・メモリは必須動作環境の条件を満たしていません。
-	</global>
-	<global name="PermYes">
-		はい
-	</global>
-	<global name="PermNo">
-		いいえ
-	</global>
-</notifications>
+<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+	<global name="skipnexttime">
+		今後は表示しない
+	</global>
+	<global name="alwayschoose">
+		常にこのオプションを選択
+	</global>
+	<global name="implicitclosebutton">
+		閉じる
+	</global>
+	<template name="okbutton">
+		<form>
+			<button name="OK" text="$yestext"/>
+		</form>
+	</template>
+	<template name="okignore"/>
+	<template name="okcancelbuttons">
+		<form>
+			<button name="Cancel" text="$notext"/>
+		</form>
+	</template>
+	<template name="okcancelignore"/>
+	<template name="okhelpbuttons">
+		<form>
+			<button name="Help" text="$helptext"/>
+		</form>
+	</template>
+	<template name="yesnocancelbuttons">
+		<form>
+			<button name="Yes" text="$yestext"/>
+			<button name="No" text="$notext"/>
+		</form>
+	</template>
+	<notification functor="GenericAcknowledge" label="不明な警告メッセージ" name="MissingAlert">
+		あなたの [APP_NAME] のバージョンでは今受け取った警告メッセージを表示することができません。  最新ビューワがインストールされているかご確認ください。
+
+エラー詳細: 「[_NAME]」という警告は notifications.xml にありませんでした。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="FloaterNotFound">
+		フロータ・エラー:下記のコントロールが見つかりませんでした:
+[CONTROLS]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="TutorialNotFound">
+		現在利用可能なチュートリアルはありません。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="GenericAlert">
+		[MESSAGE]
+	</notification>
+	<notification name="GenericAlertYesCancel">
+		[MESSAGE]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="はい"/>
+	</notification>
+	<notification name="BadInstallation">
+		[APP_NAME] をアップデート中にエラーが発生しました。  最新バージョンをダウンロードしてください。 http://get.secondlife.com
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LoginFailedNoNetwork">
+		[SECOND_LIFE_GRID] に接続できませんでした。
+「[DIAGNOSTIC]」
+インターネット接続が正常かご確認ください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MessageTemplateNotFound">
+		メッセージテンプレート [PATH] がありませんでした。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="WearableSave">
+		現在の衣服/ボディーパーツの変更を保存しますか?
+		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="保存しない" yestext="保存"/>
+	</notification>
+	<notification name="CompileQueueSaveText">
+		次の理由で、スクリプト用テキストのアップロード時に問題が起こりました。 [REASON] 後でもう一度試してください。
+	</notification>
+	<notification name="CompileQueueSaveBytecode">
+		次の理由で、コンパイルしたスクリプトのアップロード時に問題が起こりました。 [REASON]後でもう一度試してください。
+	</notification>
+	<notification name="WriteAnimationFail">
+		アニメーションデータの書き込みに問題があります。後でもう一度お試しください。
+	</notification>
+	<notification name="UploadAuctionSnapshotFail">
+		次の理由で、オークションのスナップショットのアップロード時に問題が起こりました。 [REASON]
+	</notification>
+	<notification name="UnableToViewContentsMoreThanOne">
+		一度に複数のアイテムのコンテンツは表示できません。
+選択するアイテムを1つだけにして、もう一度試してください。
+	</notification>
+	<notification name="SaveClothingBodyChanges">
+		衣服/身体部位に対する変更をすべて保存しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="保存しない" yestext="すべて保存"/>
+	</notification>
+	<notification name="GrantModifyRights">
+		他の住人に変更権限を与えると、その人はあなたが所有している
+すべてのオブジェクトを変更、削除、または取得することができるようになります。この許可を与えるときは細心の注意を払ってください。
+[FIRST_NAME] [LAST_NAME]に対して変更権限を与えますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="GrantModifyRightsMultiple">
+		変更権限を与えると、その人はあなたが作成した全てのオブジェクトを変更することができます。
+この許可を与えるときには細心の注意を払ってください。
+選択した住人に変更権限を与えますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="RevokeModifyRights">
+		[FIRST_NAME] [LAST_NAME]に対して変更権限を取り消しますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="RevokeModifyRightsMultiple">
+		選択した住人から変更権限を取り下げますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="UnableToCreateGroup">
+		グループを作成できません。
+[MESSAGE]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="PanelGroupApply">
+		[NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="変更を無視" yestext="変更を適用"/>
+	</notification>
+	<notification name="MustSpecifyGroupNoticeSubject">
+		グループ通知の送信には、件名の記入が必要です。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="AddGroupOwnerWarning">
+		あなたは [ROLE_NAME]の役割にメンバーを与えようとしています。
+任命されたメンバーが自ら退任しない限り、
+彼らを役柄から削除できません。
+操作を続行しますか?
+		<usetemplate ignoretext="グループオーナーを新しく追加する前に確認" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="AssignDangerousActionWarning">
+		あなたは[ROLE_NAME]に [ACTION_NAME]の能力を
+与えようとしています。
+
+ *警告*
+この能力を持つ役割のメンバーは、
+自分と他のメンバーに現在より強力な権限を割り当て、
+自分をオーナーとほぼ同様の立場に
+任命することもできるようになります。 この行為の意味をよく理解してから
+実行してください。
+
+この能力を[ROLE_NAME]に割り当てますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="AssignDangerousAbilityWarning">
+		あなたは[ROLE_NAME]に [ACTION_NAME]の能力を
+与えようとしています。
+
+ *警告*
+この能力をもつ役割のメンバーは、
+自分と他のメンバーにすべての能力を割り当て、
+自分をオーナーとほぼ同様の立場に任命できます。
+
+この能力を[ROLE_NAME]に割り当てますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="JoinGroupCanAfford">
+		このグループに参加するには、L$[COST]かかります。
+続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="参加"/>
+	</notification>
+	<notification name="JoinGroupCannotAfford">
+		このグループに加入するには、L$[COST]必要です。
+L$が不足しているのでこのグループに参加することができません。
+	</notification>
+	<notification name="CreateGroupCost">
+		このグループを作るには L$100 かかります。
+一人ではグループにならないので、永久に削除されてしまいます。
+48時間以内にメンバーを勧誘し入会してもらってください。
+		<usetemplate canceltext="キャンセル" name="okcancelbuttons" notext="キャンセル" yestext="L$100 でグループを作成"/>
+	</notification>
+	<notification name="LandBuyPass">
+		L$[COST]で [TIME]時間この土地[PARCEL_NAME]に入ることができます。
+入場許可を購入しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="SalePriceRestriction">
+		不特定の人に売却する場合には、
+売却価格はL$0以上に設定する必要があります。
+売却価格をL$0に設定する場合は、
+売却する個人を選択してください。
+	</notification>
+	<notification name="ConfirmLandSaleChange">
+		選択された[LAND_SIZE]平方メートルの土地は、売り出し中に設定されています。
+売却価格L$[SALE_PRICE]で、[NAME]に売却を認可します。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmLandSaleToAnyoneChange">
+		注:「誰にでも売却する」をクリックすると、
+あなたの土地は[SECOND_LIFE] のコミュニティのどこからでも
+(この地域にないコミュニティを含む)購入できるようになります。
+
+選択された[LAND_SIZE]平方メートルの土地は、
+売り出し中に設定されています。
+売却価格L$[SALE_PRICE]で、[NAME]に売却を認可します。
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsDeededToGroup">
+		この区画のグループ[NAME]共有のすべてのオブジェクトを、以前のオーナーの持ち物に戻そうとしています。
+操作を続行しますか?
+
+*警告* これにより、
+グループに譲渡された譲渡不可能なオブジェクトは削除されます!
+オブジェクト: [N]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsOwnedByUser">
+		この区画で、
+住人[NAME]が所有する全てのオブジェクトを
+彼らの持ち物に本当に返却してもよいですか?
+
+オブジェクト: [N]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsOwnedBySelf">
+		この土地区画内にある、あなたが所有するすべてのオブジェクトを、
+あなたの持ち物に戻そうとしています。操作を続行しますか?
+
+オブジェクト: [N]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedBySelf">
+		この土地区画内にある、あなた以外が所有するすべてのオブジェクトを、
+それぞれのオーナーの持ち物に戻そうとしています。
+操作を続行しますか?
+グループに譲渡された譲渡可能オブジェクトは、以前のオーナーに返却されます。
+
+*警告* これにより、
+グループに譲渡された譲渡不可能なオブジェクトは削除されます!
+オブジェクト: [N]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedByUser">
+		この土地区画内にある、
+[NAME]以外による所有のオブジェクトをすべてそれぞれのオーナーの持ち物に返却しようとしています。
+操作を続行しますか?グループに譲渡された譲渡可能オブジェクトは、以前のオーナーに返却されます。
+
+*警告* これにより、
+グループに譲渡された譲渡不可能なオブジェクトは削除されます!
+オブジェクト: [N]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ReturnAllTopObjects">
+		全てのリストされたオブジェクトを所有者に本当に返却しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="DisableAllTopObjects">
+		この地域内のすべてのオブジェクトを無効にしようとしています。操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedByGroup">
+		この土地の区画上のオブジェクトのうち、グループ[NAME]
+との間で共有していないオブジェクトをオーナーに返却しますか?
+
+オブジェクト: [N]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="UnableToDisableOutsideScripts">
+		スクリプトを無効にできません。
+この地域全体が「ダメージ有効」に設定されています。
+武器を使用するにはスクリプトの実行を許可する必要があります。
+	</notification>
+	<notification name="MustBeInParcel">
+		着地点を設定するには、この区画の内側に
+立ってください。
+	</notification>
+	<notification name="PromptRecipientEmail">
+		受信者の有効なEメールアドレスを入力してください。
+	</notification>
+	<notification name="PromptSelfEmail">
+		あなたのEメール・アドレスを入力してください。
+	</notification>
+	<notification name="PromptMissingSubjMsg">
+		デフォルトの件名またはメッセージを付けて、スナップショットを送信しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ErrorProcessingSnapshot">
+		スナップショット・データの処理エラー
+	</notification>
+	<notification name="ErrorEncodingSnapshot">
+		スナップショットのエンコード化でエラーが出ました!
+	</notification>
+	<notification name="ErrorUploadingPostcard">
+		次の理由で、スナップショットの送信時に問題が起こりました: [REASON]
+	</notification>
+	<notification name="ErrorUploadingReportScreenshot">
+		次の理由で、レポートのスクリーンショットのアップロード時に問題が起こりました。 [REASON]
+	</notification>
+	<notification name="MustAgreeToLogIn">
+		[SECOND_LIFE] へのログインを続けるには、利用規約に同意してください。
+	</notification>
+	<notification name="CouldNotPutOnOutfit">
+		服装を装着できません。
+服装フォルダに衣服、身体部位、付属品がありません。
+	</notification>
+	<notification name="CannotWearTrash">
+		ゴミ箱にある服やボディーパーツの着用はできません。
+	</notification>
+	<notification name="CannotWearInfoNotComplete">
+		まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。
+	</notification>
+	<notification name="MustHaveAccountToLogIn">
+		おっと! 記入漏れがありますよ。
+アバターのファーストネームとラストネームの両方を入力する必要があります。
+
+[SECOND_LIFE]に入るには、アカウントが必要です。 アカウントを作成しますか?
+		<url name="url">
+			https://join.secondlife.com/index.php?lang=ja-JP
+		</url>
+		<usetemplate name="okcancelbuttons" notext="もう一度試す" yestext="新しいアカウントを作成"/>
+	</notification>
+	<notification name="AddClassified">
+		検索ディレクトリの「クラシファイド」セクションに、
+クラシファイド広告が1週間掲載されます。
+広告を記入後、「公開」をクリックし、ディレクトリに
+追加します。
+「公開」をクリックすると、支払金額を尋ねられます。
+多く払うほど、広告がクラシファイド・リストとキーワード検索
+の上位に表示されます。
+		<usetemplate ignoretext="新規クラシファイド広告作成方法" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="DeleteClassified">
+		クラシファイド広告[NAME]の削除をしますか?
+支払い済みの料金は返金されません。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ClassifiedSave">
+		クラシファイド広告[NAME]への変更を保存しますか?
+		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="保存しない" yestext="保存"/>
+	</notification>
+	<notification name="DeleteAvatarPick">
+		ピック[PICK]を削除しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="PromptGoToEventsPage">
+		[SECOND_LIFE]イベント・ウェブ・ページに移動しますか?
+		<url name="url">
+			http://jp.secondlife.com/events/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="SelectProposalToView">
+		表示する提案を選択してください。
+	</notification>
+	<notification name="SelectHistoryItemToView">
+		表示する履歴アイテムを選択してください。
+	</notification>
+	<notification name="ResetShowNextTimeDialogs">
+		これらのポップアップ全てを再度有効化しますか?(以前「今後は表示しない」と指定しています)
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="SkipShowNextTimeDialogs">
+		スキップ可能なポップアップ全てを無効化しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="CacheWillClear">
+		[APP_NAME]の再起動後にキャッシュがクリアされます。
+	</notification>
+	<notification name="CacheWillBeMoved">
+		[APP_NAME]の再起動後にキャッシュが移動されます。
+注意:これによりキャッシュがクリアされます。
+	</notification>
+	<notification name="ChangeConnectionPort">
+		ポートの設定は、[APP_NAME]の再起動後に有効になります。
+	</notification>
+	<notification name="ChangeSkin">
+		新しいスキンは[APP_NAME]を再起動すると現れます
+	</notification>
+	<notification name="GoToAuctionPage">
+		[SECOND_LIFE]ウェブ・ページに移動し、 入札あるいはオークションの詳細を確認しますか?
+		<url name="url">
+			http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]
+		</url>
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="SaveChanges">
+		変更を保存しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="保存しない" yestext="保存"/>
+	</notification>
+	<notification name="GestureSaveFailedTooManySteps">
+		ジェスチャーの保存に失敗しました。
+ステップが多すぎます。
+ステップをいくつか削除してから再保存してください
+	</notification>
+	<notification name="GestureSaveFailedTryAgain">
+		ジェスチャーの保存に失敗しました。少し待ってからもう一度試してください。
+	</notification>
+	<notification name="GestureSaveFailedObjectNotFound">
+		ジェスチャーの保存に失敗しました。オブジェクト、または関連するオブジェクト持ち物が見つかりません。
+オブジェクトが範囲内に存在しないか、または削除された可能性があります。
+	</notification>
+	<notification name="GestureSaveFailedReason">
+		次の理由で、ジェスチャーの保存時に問題が起こりました。 [REASON]。  後でもう一度試してください。
+	</notification>
+	<notification name="SaveNotecardFailObjectNotFound">
+		ノートカードの保存に失敗しました。オブジェクト、または関連するオブジェクト持ち物が見つかりません。
+オブジェクトが範囲内に存在しないか、または削除された可能性があります。
+	</notification>
+	<notification name="SaveNotecardFailReason">
+		次の理由で、ノートカードの保存時に問題が起こりました。 [REASON]。  後でもう一度試してください。
+	</notification>
+	<notification name="ScriptCannotUndo">
+		あなたのスクリプトのバージョンでは、変更を元に戻すことはできませんでした。
+サーバーの最新保存バージョンをロードしますか?
+(**警告**:この操作後元に戻すことはできません)
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="SaveScriptFailReason">
+		次の理由で、スクリプトの保存に問題が起こりました。 [REASON]。  後でもう一度試してください。
+	</notification>
+	<notification name="SaveScriptFailObjectNotFound">
+		スクリプトの保存に失敗しました。スクリプトが入ったオブジェクトが見つかりません。
+オブジェクトは範囲外か、または削除されているかもしれません。
+	</notification>
+	<notification name="SaveBytecodeFailReason">
+		次の理由で、コンパイルしたスクリプトの保存時に問題が起こりました。 [REASON]。  後でもう一度試してください。
+	</notification>
+	<notification name="StartRegionEmpty">
+		ログイン位置が不明です。 
+ログイン位置の欄にリージョン名を入力するか、「最後にログアウトした場所」か「自宅(ホーム)」を選択してください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CouldNotStartStopScript">
+		スクリプトの起動または停止に失敗しました。スクリプトが格納されているオブジェクトが見つかりません。
+オブジェクトが範囲内に存在しないか、または削除された可能性があります。
+	</notification>
+	<notification name="CannotDownloadFile">
+		ファイルをダウンロードできません。
+	</notification>
+	<notification name="CannotWriteFile">
+		ファイル[[FILE]]を書き込めません。
+	</notification>
+	<notification name="UnsupportedHardware">
+		警告: お使いのシステムは [APP_NAME] の必要最低限の動作環境を満たしていません。 このまま [APP_NAME] を使用すると、パフォーマンスの低下を感じるかもしれません。 恐れ入りますが [SUPPORT_SITE] ではサポート対象外のシステムに関する技術的サポートは行っておりません。
+
+最低動作環境
+[_URL] で詳しい情報を確認しますか?
+		<url name="url" option="0">
+			http://secondlife.com/support/sysreqs.php?lang=ja
+		</url>
+		<usetemplate ignoretext="使用しているコンピューターのハードウェアがサポートされていません" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="UnknownGPU">
+		お使いのシステムには、現在 [APP_NAME] が認識できないグラフィックカードが搭載されています。
+[APP_NAME] でまだテストされていない最新ハードウェアのためだと考えられます。  [APP_NAME] は正常に実行される可能性が高いですが、表示設定を調整する必要があるかもしれません。
+(環境設定 &gt; 表示)
+		<form name="form">
+			<ignore name="ignore" text="使用中のグラフックカードが認識されませんでした"/>
+		</form>
+	</notification>
+	<notification name="DisplaySettingsNoShaders">
+		[APP_NAME] は、
+グラフィック・ドライバの初期化中にクラッシュしました。
+一般的なドライバ・エラーを回避するため、「品質およびパフォーマンス」は「低」に設定されます。
+これにより、いくつかのグラフィックス機能は無効になります。
+グラフィックカード・ドライバのアップデートをお勧めします。
+「グラフィックの品質」は「環境設定」>「表示」から上げることができます。
+	</notification>
+	<notification name="RegionNoTerraforming">
+		この地域[REGION] は、テラフォーミングができません。
+	</notification>
+	<notification name="CannotCopyWarning">
+		あなたはこのアイテムのコピーを
+許されていないので、人にあげると
+持ち物から失われます。 本当に
+これをあげたいですか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="CannotGiveItem">
+		持ち物のアイテムを渡せません。
+	</notification>
+	<notification name="TransactionCancelled">
+		取引がキャンセルされました。
+	</notification>
+	<notification name="TooManyItems">
+		一度のインベントリ交換で、42以上のアイテムは送れません。
+	</notification>
+	<notification name="NoItems">
+		選択したアイテムを譲渡できる権限がありません。
+	</notification>
+	<notification name="CannotCopyCountItems">
+		あなたは選択したアイテムの[COUNT]のコピーを
+許されていません。
+これらのアイテムはあなたの持ち物から失われます。
+本当にアイテムをあげたいですか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="CannotGiveCategory">
+		選択したフォルダを譲渡できる権限がありません
+	</notification>
+	<notification name="FreezeAvatar">
+		このアバターをフリーズしますか?
+アバターは一時的に動けなくなり、
+チャットなど、この世界に対する関わりを持つことができなくなります。
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="解凍" yestext="フリーズ"/>
+	</notification>
+	<notification name="FreezeAvatarFullname">
+		[AVATAR_NAME]をフリーズしますか?
+フリーズされた人は一時的に動けなくなり、チャットなど、この世界に対する関わりを持つことができなくなります。
+		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="解凍" yestext="フリーズ"/>
+	</notification>
+	<notification name="EjectAvatarFullname">
+		あなたの土地から[AVATAR_NAME]を追放しますか?
+		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="追放と禁止" yestext="追放"/>
+	</notification>
+	<notification name="EjectAvatarNoBan">
+		このアバターをあなたの土地から追放しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="追放"/>
+	</notification>
+	<notification name="EjectAvatarFullnameNoBan">
+		[AVATAR_NAME] をあなたの土地から追放しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="追放"/>
+	</notification>
+	<notification name="AcquireErrorTooManyObjects">
+		取得エラー:選択したオブジェクトの数が多すぎます。
+	</notification>
+	<notification name="AcquireErrorObjectSpan">
+		取得エラー:
+オブジェクトが複数の地域にまたがって存在しています。
+取得するオブジェクトは、
+すべて同じ地域内に移動させてください。
+	</notification>
+	<notification name="PromptGoToCurrencyPage">
+		[EXTRA]
+
+[_URL] でリンデンドル購入に関する情報を確認しますか?
+		<url name="url">
+			http://jp.secondlife.com/currency/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="UnableToLinkObjects">
+		これらの[COUNT]オブジェクトをリンクできません。
+最大[MAX]オブジェクトをリンクすることができます。
+	</notification>
+	<notification name="CannotLinkIncompleteSet">
+		セットとして揃っているオブジェクトのみリンクできます。複数の
+オブジェクトを選択してください。
+	</notification>
+	<notification name="CannotLinkModify">
+		すべてのオブジェクトに対する修正許可があなたにないため、
+リンクできません。
+
+オブジェクトがすべてロックされておらず、あなたのものであることを確認してください。
+	</notification>
+	<notification name="CannotLinkDifferentOwners">
+		所有者が異なるため、すべてのオブジェクトを
+リンクできません。
+
+自分が所有しているオブジェクトだけを選択してください。
+	</notification>
+	<notification name="NoFileExtension">
+		ファイル「[FILE]」の拡張子が無効です。
+
+このファイルの拡張子が正しいかどうかを確認してください。
+	</notification>
+	<notification name="InvalidFileExtension">
+		ファイル拡張子[EXTENSION]は無効です
+正しい拡張子:[VALIDS]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CannotUploadSoundFile">
+		読み込みのためにアップロードされたサウンドファイルを開けません:
+[FILE]
+	</notification>
+	<notification name="SoundFileNotRIFF">
+		ファイルがRIFF WAVEファイルとして認識されません:
+[FILE]
+	</notification>
+	<notification name="SoundFileNotPCM">
+		ファイルがPCM WAVEオーディオ・ファイルとして認識されません:
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidChannelCount">
+		ファイルのチャンネル数が無効です(モノラルまたはステレオを使用する必要があります):
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidSampleRate">
+		ファイルのサンプル・レートがサポート外です(44.1kを指定する必要があります):
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidWordSize">
+		ファイルのワード・サイズがサポート外です(8または16ビットを指定する必要があります):
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidHeader">
+		WAVヘッダーにデータ・チャンクが見つかりません:
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidTooLong">
+		オーディオ・ファイルが長すぎます。(最大10秒):
+[FILE]
+	</notification>
+	<notification name="ProblemWithFile">
+		ファイル[FILE]にエラーがあります。
+
+[ERROR]
+	</notification>
+	<notification name="CannotOpenTemporarySoundFile">
+		書き込み用の一時圧縮サウンド・ファイルを開くことができません:[FILE]
+	</notification>
+	<notification name="UnknownVorbisEncodeFailure">
+		未知のVorbis 暗号化に失敗: [FILE]
+	</notification>
+	<notification name="CannotEncodeFile">
+		次のファイルのエンコードができません: [FILE]
+	</notification>
+	<notification name="CorruptResourceFile">
+		破損したリソースファイル: [FILE]
+	</notification>
+	<notification name="UnknownResourceFileVersion">
+		未知のlindenリソースファイルのバージョン: [FILE]
+	</notification>
+	<notification name="UnableToCreateOutputFile">
+		服装ファイルを作成できません: [FILE]
+	</notification>
+	<notification name="DoNotSupportBulkAnimationUpload">
+		現在 [APP_NAME] では、アニメーションの一括アップロードはサポートされていません。
+	</notification>
+	<notification name="CannotUploadReason">
+		次の理由で、[FILE] をアップロードできません: [REASON]
+あとでもう一度試してください。
+	</notification>
+	<notification name="LandmarkCreated">
+		「 [LANDMARK_NAME] 」を「 [FOLDER_NAME] 」フォルダに追加しました。
+	</notification>
+	<notification name="CannotCreateLandmarkNotOwner">
+		土地の所有者が許可していないため、
+ランドマークを作成することはできません。
+	</notification>
+	<notification name="CannotRecompileSelectObjectsNoScripts">
+		再編集は不可能です。
+スクリプト化されたオブジェクトを選択してください。
+	</notification>
+	<notification name="CannotRecompileSelectObjectsNoPermission">
+		「再編集」は不可能です。
+
+変更修正権限のある
+スクリプト化されたオブジェクトを選択してください。
+	</notification>
+	<notification name="CannotResetSelectObjectsNoScripts">
+		「再設定」を行うことができません。
+
+スクリプト化されたオブジェクトを選択してください。
+	</notification>
+	<notification name="CannotResetSelectObjectsNoPermission">
+		「再設定」を行うことができません。
+
+変更修正権限のある
+スクリプト化されたオブジェクトを選択してください。
+	</notification>
+	<notification name="CannotSetRunningSelectObjectsNoScripts">
+		スクリプトの「実行」の設定ができません。
+
+スクリプト化されたオブジェクトを選択してください。
+	</notification>
+	<notification name="CannotSetRunningNotSelectObjectsNoScripts">
+		スクリプトを「実行しない」に設定できません。
+
+スクリプト化されたオブジェクトを選択してください。
+	</notification>
+	<notification name="NoFrontmostFloater">
+		保存すべきfrontmostフロータがありません。
+	</notification>
+	<notification name="SeachFilteredOnShortWords">
+		指定した検索クエリは変更され、短すぎる語句は取り除かれています。
+
+検索語句: [FINALQUERY]
+	</notification>
+	<notification name="SeachFilteredOnShortWordsEmpty">
+		指定した検索語句が短すぎたため、検索は行われませんでした。
+	</notification>
+	<notification name="CouldNotTeleportReason">
+		テレポートに失敗しました。
+[REASON]
+	</notification>
+	<notification name="invalid_tport">
+		テレポート処理中に問題が発生しました。 ログインし直す必要があるかもしれません。
+このメッセージが何度も出る場合は、[SUPPORT_SITE] へご連絡ください。
+	</notification>
+	<notification name="invalid_region_handoff">
+		リージョン間の移動中に問題が発生しました。 ログインし直す必要があるかもしれません。
+このメッセージが何度も出る場合は、[SUPPORT_SITE] へご連絡ください。
+	</notification>
+	<notification name="blocked_tport">
+		申し訳ございません。テレポートは現在、ブロックされています。もう少し後でやり直してください。
+やり直してもテレポートできない場合は、いったんログアウトし、再度ログインして問題を解決してください。
+	</notification>
+	<notification name="nolandmark_tport">
+		残念ながら、システムはランドマーク目的地を探せませんでした。
+	</notification>
+	<notification name="timeout_tport">
+		申し訳ございません。システムはテレポート接続を完了できませんでした。
+もう少し後でやり直してください。
+	</notification>
+	<notification name="noaccess_tport">
+		残念ながら、そのテレポート目的地へのアクセスがありません。
+	</notification>
+	<notification name="missing_attach_tport">
+		添付物は、まだ到着していません。あと数秒間お待ちいただくか、いったんログアウトし、再度ログインしてからテレポートをやり直してださい。
+	</notification>
+	<notification name="too_many_uploads_tport">
+		この地域の資産キューが現在込み合っているため、テレポート・リクエストを時間通りに処理することが難しい状況です。
+数分後にやり直すか、または混雑していない他の地域をお試しください。
+	</notification>
+	<notification name="expired_tport">
+		申し訳ございません。システムはテレポート・リクエストを時間どおりに完了できませんでした。数分後にやり直してください。
+	</notification>
+	<notification name="expired_region_handoff">
+		申し訳ございません。システムは地域間の移動を時間どおりに完了できませんでした。
+数分後にやり直してください。
+	</notification>
+	<notification name="no_host">
+		テレポート目的地を見つけられません。目的地が一時的に利用できない状態か、またはすでに消滅している可能性があります。数分後にやり直してください。
+	</notification>
+	<notification name="no_inventory_host">
+		持ち物システムは現在利用できません。
+	</notification>
+	<notification name="CannotSetLandOwnerNothingSelected">
+		土地所有者設定ができません:
+区画が選定されていません。
+	</notification>
+	<notification name="CannotSetLandOwnerMultipleRegions">
+		複数の地域が選択されたため、
+土地の所有権を取得できません。
+選択する面積を小さくして、もう一度試してください。
+	</notification>
+	<notification name="ForceOwnerAuctionWarning">
+		この区画はオークションに出品されています。
+区画の所有権を取得するとオークションが無効になり、
+入札が開始していたら不満に思う住人が出てくるかもしれません。
+所有権を取得しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="CannotContentifyNothingSelected">
+		コンテンツ化は不可能です:
+区画が選定されていません。
+	</notification>
+	<notification name="CannotContentifyNoRegion">
+		コンテンツ化は不可能です:
+土地が選択されていません。
+	</notification>
+	<notification name="CannotReleaseLandNothingSelected">
+		土地を破棄することができません:
+区画が選定されていません。
+	</notification>
+	<notification name="CannotReleaseLandNoRegion">
+		土地を破棄できません:
+地域が見つかりません。
+	</notification>
+	<notification name="CannotBuyLandNothingSelected">
+		土地を購入できません:
+区画が選定されていません。
+	</notification>
+	<notification name="CannotBuyLandNoRegion">
+		土地を購入できません:
+この土地がある地域を見つけることができません
+	</notification>
+	<notification name="CannotCloseFloaterBuyLand">
+		[APP_NAME]による、
+この取引の見積りが完了するまで「土地を購入」ウィンドウを閉じることはできません。
+	</notification>
+	<notification name="CannotDeedLandNothingSelected">
+		土地を譲渡できません:
+区画が選定されていません。
+	</notification>
+	<notification name="CannotDeedLandNoGroup">
+		土地を譲渡できません:
+グループが選択されていません。
+	</notification>
+	<notification name="CannotDeedLandNoRegion">
+		土地を譲渡できません:
+この土地がある地域が見つかりません。
+	</notification>
+	<notification name="CannotDeedLandMultipleSelected">
+		土地を譲渡できません:
+複数の区画が選択されています。
+
+これより1つの区画を選択してください。
+	</notification>
+	<notification name="ParcelCanPlayMedia">
+		ここではストリーミング・メディア再生が可能です。
+メディアのストリーミングには、高速なインターネット接続環境が必要です。
+
+利用可能になったら再生しますか?
+(このオプションは、「環境設定」>「音声とビデオ」で後からでも変更できます)
+		<usetemplate name="okcancelbuttons" notext="無効化" yestext="メディアを再生"/>
+	</notification>
+	<notification name="CannotDeedLandWaitingForServer">
+		土地を譲渡できません:
+サーバーからの所有権情報を待っています。
+
+再度、試みてください。
+	</notification>
+	<notification name="CannotDeedLandNoTransfer">
+		土地を譲渡できません:
+この地域 [REGION] では土地の譲渡が許されていません。
+	</notification>
+	<notification name="CannotReleaseLandWatingForServer">
+		土地を破棄できません:
+サーバーが区画情報を更新するのを待っています。
+
+もう少し後でやり直してください。
+	</notification>
+	<notification name="CannotReleaseLandSelected">
+		土地を破棄できません:
+あなたは、選択したすべての区画を所有していません。
+
+1つの区画を選択してください。
+	</notification>
+	<notification name="CannotReleaseLandDontOwn">
+		土地を破棄できません:
+あなたはこの土地を手放すことを許可されていません。
+あなたの区画は緑色で表示されています。
+	</notification>
+	<notification name="CannotReleaseLandRegionNotFound">
+		土地を破棄できません:
+この土地がある地域が見つかりません。
+	</notification>
+	<notification name="CannotReleaseLandNoTransfer">
+		土地を破棄できません:
+この [REGION] では土地の譲渡が許されていません。
+	</notification>
+	<notification name="CannotReleaseLandPartialSelection">
+		土地を破棄できません:
+区画全体を選択して破棄する必要があります。
+
+区画全体を選択するか、または、まず最初に区画を分割してください。
+	</notification>
+	<notification name="ReleaseLandWarning">
+		あなたは、[AREA]平方メートルの土地を破棄しようとしています。
+この区画を破棄するとあなたの土地ではなくなりますが、
+L$は返金されません。
+
+土地を破棄しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="CannotDivideLandNothingSelected">
+		土地を分割できません:
+
+区画が選定されていません。
+	</notification>
+	<notification name="CannotDivideLandPartialSelection">
+		土地を分割できません:
+
+区画全体が選択されています。
+区画の一部を選択してください。
+	</notification>
+	<notification name="LandDivideWarning">
+		この土地を分割すると、2つの区画に別れます。
+区画ごとの設定が可能になります。 この操作を行うと、一部の設定がデフォルトにリセットされます。
+
+土地の分割操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="CannotDivideLandNoRegion">
+		土地を分割できません:
+この土地がある地域が見つかりません。
+	</notification>
+	<notification name="CannotJoinLandNoRegion">
+		土地を統合できません:
+この土地がある地域が見つかりません。
+	</notification>
+	<notification name="CannotJoinLandNothingSelected">
+		土地を統合できませんでした:
+区画が選定されていません。
+	</notification>
+	<notification name="CannotJoinLandEntireParcelSelected">
+		土地を統合できません:
+1つの区画しか選択されていません。
+
+両方の区画をまたいで土地を選択してください。
+	</notification>
+	<notification name="CannotJoinLandSelection">
+		土地を統合できません:
+1つ以上の区画を選択する必要があります。
+
+両方の区画をまたいで土地を選択してください。
+	</notification>
+	<notification name="JoinLandWarning">
+		この土地を統合すると、選択された長方形に交差する
+全ての区画を基にして1つの大きな区画が作成されます。
+新しい区画の名前とオプションを再設定する必要があります。
+
+土地を統合しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmNotecardSave">
+		このアイテムをコピー、表示する前に、ノートカードの保存が必要です。 保存しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmItemCopy">
+		このアイテムをあなたの持ち物にコピーしますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="コピー"/>
+	</notification>
+	<notification name="ResolutionSwitchFail">
+		解像度を [RESX]x[RESY]に切り替えることができませんでした。
+	</notification>
+	<notification name="ErrorUndefinedGrasses">
+		エラー:未定義の植物:[SPECIES]
+	</notification>
+	<notification name="ErrorUndefinedTrees">
+		エラー:未定義の樹木:[SPECIES]
+	</notification>
+	<notification name="CannotSaveWearableOutOfSpace">
+		「[NAME]」を服のファイルに保存できません。  コンピューターの
+ディスクスペースを少し増やしてから、もう一度
+保存してみてください。
+	</notification>
+	<notification name="CannotSaveToAssetStore">
+		[NAME]を中央資産格納庫に保存できません。
+これは一時的な不具合です。
+服飾品などをカスタマイズし、数分後にもう一度保存してください。
+	</notification>
+	<notification name="YouHaveBeenLoggedOut">
+		あなたは[SECOND_LIFE]からログアウトされました。
+            [MESSAGE]
+「IMとチャットを表示」をクリックすると、
+現在あるIMとチャットを確認できます。
+確認しない場合は「終了」をクリックし、
+すぐに[APP_NAME]を終了してください。
+		<usetemplate name="okcancelbuttons" notext="終了" yestext="IMとチャットを表示"/>
+	</notification>
+	<notification name="OnlyOfficerCanBuyLand">
+		グループ用の土地の購入ができません:
+あなたにはアクティブなグループのために土地を購入する権限がありません。
+	</notification>
+	<notification label="フレンドを追加" name="AddFriend">
+		フレンドとして追加すると、お互いの現在地の地図への表示許可、オンラインステータス表示の設定をすることができます。
+
+[NAME] にフレンドシップを送りますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification label="フレンドを追加" name="AddFriendWithMessage">
+		フレンドとして追加すると、お互いの現在地の地図への表示許可、オンラインステータス表示の設定をすることができます。
+
+[NAME] にフレンドシップのオファーをしますか?
+		<form name="form">
+			<input name="message">
+				フレンドとして登録してくれますか?
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="キャンセル"/>
+		</form>
+	</notification>
+	<notification name="RemoveFromFriends">
+		[FIRST_NAME] [LAST_NAME]をフレンドリストから削除しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="RemoveMultipleFromFriends">
+		フレンドリストから複数のフレンドを削除しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllScriptedPublicObjectsByUser">
+		**[AVATAR_NAME]**
+所有のすべてのスクリプト・オブジェクトをこのシム内の他のすべての土地から削除しようとしています。操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllScriptedObjectsByUser">
+		**[AVATAR_NAME]**
+所有のすべてのスクリプト・オブジェクトをこのシム内のすべての土地から削除しようとしています。操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllObjectsByUser">
+		**[AVATAR_NAME]**
+所有のすべてのオブジェクト(スクリプト・オブジェクトと非スクリプト・オブジェクト)を
+このシム内のすべての土地から削除しようとしています。操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BlankClassifiedName">
+		クラシファイドに名前を指定してください。
+	</notification>
+	<notification name="MinClassifiedPrice">
+		広告料の支払い金額は、Lと[MIN_PRICE]が下限です。
+
+金額を増やしてください。
+	</notification>
+	<notification name="ConfirmObjectDeleteLock">
+		選択したアイテムの1つ以上がロックされています。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoCopy">
+		選択したアイテムの1つ以上がコピーできません。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoOwn">
+		選択したアイテムの1つ以上を、あなたは所有していません。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoCopy">
+		一つ以上のオブジェクトがロックされています。
+一つ以上のオブジェクトがコピーできません。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoOwn">
+		一つ以上のオブジェクトがロックされています。
+1つ以上のオブジェクトを、あなたは所有していません。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoCopyNoOwn">
+		一つ以上のオブジェクトがコピーできません。
+1つ以上のオブジェクトを、あなたは所有していません。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
+		一つ以上のオブジェクトがロックされています。
+一つ以上のオブジェクトがコピーできません。
+1つ以上のオブジェクトを、あなたは所有していません。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeLock">
+		一つ以上のオブジェクトがロックされています。
+
+これらのアイテムの取得を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeNoOwn">
+		取得しようとしているオブジェクトには、あなたの所有物でないオブジェクトが含まれています。
+あなたの所有物ではないオブジェクトを取得すると、次のオーナーの権限がそのオブジェクトに適用されます。
+そのため、将来、変更やコピーの能力が制限される可能性があります。
+
+これらのアイテムの取得を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeLockNoOwn">
+		1つ以上のオブジェクトがロックされています。
+取得しようとしているオブジェクトには、あなたの所有物でないオブジェクトが含まれています。
+あなたの所有物ではないオブジェクトを取得すると、次のオーナーの権限がそのオブジェクトに適用されます。
+そのため、将来、変更やコピーの能力が制限される可能性があります。
+この選択内容のままで続行することは可能ですが、
+
+これらのアイテムの取得を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="CantBuyLandAcrossMultipleRegions">
+		複数の地域が選択されたため、土地を購入できません。
+
+選択する面積を小さくしてもう一度試してください。
+	</notification>
+	<notification name="DeedLandToGroup">
+		この区画の譲渡に際しては、
+このグループが十分な土地クレジットを保有および維持していることが必要です。
+土地の購入価格は、オーナーに返金されません。譲渡された区画が売れると、販売価格はグループ・メンバーに均等に分配されます。
+
+この[AREA]平方メートルの土地を、グループ
+「[GROUP_NAME]」に譲渡しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="DeedLandToGroupWithContribution">
+		この区画の譲渡に際しては、このグループが
+十分な土地クレジットを保有および維持していることが必要です。
+この譲渡により、
+「[FIRST_NAME] [LAST_NAME]」から
+グループに対して土地が同時に提供されます。
+土地の購入価格は、オーナーに返金されません。
+譲渡された区画が売れると、販売料金はグループ・メンバーに均等に分配されます。
+
+この[AREA]平方メートルの土地を、グループ「[GROUP_NAME]」に譲渡しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="DisplaySetToSafe">
+		-safeオプションを指定したので、
+表示設定はセーフ・レベルに設定されています。
+	</notification>
+	<notification name="DisplaySetToRecommended">
+		表示設定は、あなたのシステム構成に
+基づいて推奨されたレベルに設定されています。
+	</notification>
+	<notification name="ErrorMessage">
+		[ERROR_MESSAGE]
+	</notification>
+	<notification name="AvatarMovedDesired">
+		目的地は現在ご利用いただけません。
+近くのリージョンに移動しました。
+	</notification>
+	<notification name="AvatarMovedLast">
+		前回いた場所は現在ご利用いただけません。
+近くのリージョンに移動しました。
+	</notification>
+	<notification name="AvatarMovedHome">
+		ホームロケーションは現在ご利用いただけません。
+近くのリージョンに移動しました。
+新たにホームを設定しなおすといいかもしれません。
+	</notification>
+	<notification name="ClothingLoading">
+		現在衣類をダウンロード中です。
+このまま [SECOND_LIFE] を通常通りご使用いただけます。他人からはあなたは正しく表示されます。
+		<form name="form">
+			<ignore name="ignore" text="衣類がダウンロードされるまで時間がかかっています"/>
+		</form>
+	</notification>
+	<notification name="FirstRun">
+		[APP_NAME]のインストールが完了しました。
+
+[SECOND_LIFE] の使用が初めての方は、
+ログイン前にアカウントの作成が必要です。
+www.secondlife.comに移動し、新規アカウントの作成を行いますか?
+		<usetemplate name="okcancelbuttons" notext="続行" yestext="新規アカウント..."/>
+	</notification>
+	<notification name="LoginPacketNeverReceived">
+		接続がなかなかできません。 お使いのインターネット接続か、[SECOND_LIFE_GRID] の問題と考えられます。
+
+インターネット接続を確認してから数分後に再接続するか、ヘルプをクリックして [SUPPORT_SITE] をご覧になるか、テレポートをクリックしてホームに移動してみてください。
+		<url name="url">
+			http://jp.secondlife.com/support/
+		</url>
+		<form name="form">
+			<button name="OK" text="OK"/>
+			<button name="Help" text="ヘルプ"/>
+			<button name="Teleport" text="テレポート"/>
+		</form>
+	</notification>
+	<notification name="WelcomeChooseSex">
+		まもなくあなたのアバターが表示されます。
+
+矢印キーを使用して歩きます。
+ヘルプが必要なときや[SECOND_LIFE]について知りたいときは、
+F1キーを押してください。
+男性あるいは女性のアバターを選択してください。
+あなたの決定は後で変更できます。
+		<usetemplate name="okcancelbuttons" notext="女性" yestext="男性"/>
+	</notification>
+	<notification name="NotEnoughCurrency">
+		[NAME] L$[PRICE] 残高不足のため実行不可です。
+	</notification>
+	<notification name="GrantedModifyRights">
+		[FIRST_NAME] [LAST_NAME] のオブジェクトの編集権限を得ました。
+	</notification>
+	<notification name="RevokedModifyRights">
+		[FIRST_NAME] [LAST_NAME]
+のオブジェクトを修正する権限が取り消されました。
+	</notification>
+	<notification name="FlushMapVisibilityCaches">
+		この手順は、この地域の地図のキャッシュを消去します。
+これが便利なのはデバッグ時のみです。
+(作成中は5分間経つと、全員の地図が再度ログイン後に
+更新されます)
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BuyOneObjectOnly">
+		一度に一つ以上のオブジェクトをと買うことはできません。  オブジェクトを一つだけ選んでもう一度お試しください。
+	</notification>
+	<notification name="OnlyCopyContentsOfSingleItem">
+		一度に複数のアイテムのコンテンツはコピーできません。
+選択するオブジェクトを1つだけにして、もう一度試してください。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="KickUsersFromRegion">
+		この地域の全ての住人をホームにテレポートしますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="EstateObjectReturn">
+		[USER_NAME]が所有しているオブジェクトを返却しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="InvalidTerrainBitDepth">
+		地域テクスチャを設定できませんでした:
+地形テクスチャ[TEXTURE_NUM]は、無効のビット深度[TEXTURE_BIT_DEPTH]です。
+
+テクスチャ[TEXTURE_NUM]を24ビット512x512かそれ以下のイメージと交換し、「適用」を再度クリックしてください。
+	</notification>
+	<notification name="InvalidTerrainSize">
+		地域テクスチャを設定できませんでした:
+地形テクスチャ[TEXTURE_NUM]は、[TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]では大きすぎます。
+
+テクスチャ[TEXTURE_NUM]を24ビット512x512かそれ以下のイメージと交換し、「適用」を再度クリックしてください。
+	</notification>
+	<notification name="RawUploadStarted">
+		アップロード開始。 接続速度によっては、
+最大2分間かかります。
+	</notification>
+	<notification name="ConfirmBakeTerrain">
+		現在の地形を構築しようとしています。
+この操作を行うと、現在の地形が上昇/下降の制限範囲の中心になり、「復帰」ツールのデフォルトになります。
+操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="MaxAllowedAgentOnRegion">
+		許可住人は [MAX_AGENTS] 人までです。
+	</notification>
+	<notification name="MaxBannedAgentsOnRegion">
+		禁止住人は[MAX_BANNED]人までです。
+	</notification>
+	<notification name="MaxAgentOnRegionBatch">
+		[NUM_ADDED] 個のエージェントを追加しようとして失敗しました: [MAX_AGENTS] [LIST_TYPE] 制限を [NUM_EXCESS] 個超過しています。
+	</notification>
+	<notification name="MaxAllowedGroupsOnRegion">
+		許可グループは[MAX_GROUPS]グループまでです。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="構築する"/>
+	</notification>
+	<notification name="MaxManagersOnRegion">
+		不動産マネージャーは[MAX_MANAGER]人までです。
+	</notification>
+	<notification name="OwnerCanNotBeDenied">
+		不動産オーナーを不動産「禁止住人」リストに追加できません。
+	</notification>
+	<notification name="CanNotChangeAppearanceUntilLoaded">
+		服および形がロードされるまで、容姿の変更はできません。
+	</notification>
+	<notification name="ClassifiedMustBeAlphanumeric">
+		クラシファイド広告の名前は、アルファベットか
+数字で始めます。  句読点では始められません。
+	</notification>
+	<notification name="CantSetBuyObject">
+		オブジェクトが販売対象ではないため、オブジェクトの購入が設定できません。
+販売対象のオブジェクトを設定し、もう一度試してください。
+	</notification>
+	<notification name="FinishedRawDownload">
+		未加工の地形ファイルを次へとダウンロードしました:
+[DOWNLOAD_PATH]。
+	</notification>
+	<notification name="DownloadWindowsMandatory">
+		[APP_NAME]の新しいバージョンが利用可能です。
+[MESSAGE]
+[APP_NAME]を使用するためには、
+このアップデートをダウンロードする必要があります。
+		<usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadWindows">
+		[APP_NAME]のアップデート・バージョンが利用可能です。
+[MESSAGE]
+このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
+		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadWindowsReleaseForDownload">
+		[APP_NAME]のアップデート・バージョンが利用可能です。
+[MESSAGE]
+このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
+		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadLinuxMandatory">
+		[APP_NAME] の最新バージョンがご利用可能です。
+[MESSAGE]
+[APP_NAME] をご利用になるにはこのアップデートは必須です。
+		<usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadLinux">
+		[APP_NAME] のアップデートバージョンがご利用可能です。
+[MESSAGE]
+このアップデートは必須ではありませんが、パフォーマンス向上のためにインストールをおすすめします。
+		<usetemplate name="okcancelbuttons" notext="続ける" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadLinuxReleaseForDownload">
+		[APP_NAME] のアップデートバージョンがご利用可能です。
+[MESSAGE]
+このアップデートは必須ではありませんが、パフォーマンス向上のためにインストールをおすすめします。
+		<usetemplate name="okcancelbuttons" notext="続ける" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadMacMandatory">
+		[APP_NAME]の新しいバージョンが利用可能です。
+[MESSAGE]
+[APP_NAME]を使用するために、
+このアップデートをダウンロードする必要があります。
+
+アプリケーションがあるフォルダにダウンロードしますか?
+		<usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadMac">
+		[APP_NAME]のアップデート・バージョンが利用可能です。
+[MESSAGE]
+このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
+
+アプリケーションがあるフォルダにダウンロードしますか?
+		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadMacReleaseForDownload">
+		[APP_NAME]のアップデート・バージョンが利用可能です。
+[MESSAGE]
+このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
+
+アプリケーションがあるフォルダにダウンロードしますか?
+		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DeedObjectToGroup">
+		このオブジェクトを譲渡するとグループは以下のことが可能です:
+* オブジェクトに支払われたL$を受領します。
+		<usetemplate ignoretext="オブジェクトをグループに譲渡する前に確認する" name="okcancelignore" notext="取り消し" yestext="譲渡"/>
+	</notification>
+	<notification name="WebLaunchExternalTarget">
+		Web ブラウザを開いてこのコンテンツを表示しますか?
+		<usetemplate ignoretext="ブラウザを起動して Web ページを見る" name="okcancelignore" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchJoinNow">
+		secondlife.com でアカウントの管理をしますか?
+		<usetemplate ignoretext="ブラウザを起動してアカウントを管理する" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchSecurityIssues">
+		[SECOND_LIFE] Wikiで、
+セキュリティ問題を報告する方法をご覧ください。
+		<usetemplate ignoretext="ブラウザを起動してセキュリティ問題の報告の仕方を確認する" name="okcancelignore" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchQAWiki">
+		[SECOND_LIFE] 品質保証関連Wikiをご覧ください。
+		<usetemplate ignoretext="ブラウザを起動して QA Wiki を見る" name="okcancelignore" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchPublicIssue">
+		[SECOND_LIFE]のパブリック問題トラッカーで、
+バグやその他の問題を報告できます。
+		<usetemplate ignoretext="ブラウザを確認してパブリック問題トラッカーを使用する" name="okcancelignore" notext="キャンセル" yestext="ページへ行く"/>
+	</notification>
+	<notification name="WebLaunchSupportWiki">
+		Linden公式ブログで、最新のニュースや情報を入手してください。
+		<usetemplate ignoretext="ブラウザを起動して公式ブログを見る" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchLSLGuide">
+		スクリプトガイドを開きますか?
+		<usetemplate ignoretext="ブラウザを起動してスクリプトガイドを見る" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchLSLWiki">
+		LSL ポータルでスクリプトに関する情報を確認しますか?
+		<usetemplate ignoretext="ブラウザを起動して LSL ポータルを見る" name="okcancelignore" notext="取り消し" yestext="ページに移動"/>
+	</notification>
+	<notification name="ReturnToOwner">
+		選択したオブジェクトを、所有者に返却しますか?
+譲渡可能なオブジェクトは
+以前の所有者に返却されます。
+
+*警告* 移転が不可能の譲渡されたオブジェクトは削除されます!
+		<usetemplate ignoretext="オブジェクトを所有者に返却する前に確認する" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="GroupLeaveConfirmMember">
+		現在あなたは [GROUP]のメンバーです。
+ここから抜けますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmKick">
+		すべてのユーザーをグリッド外にキックしようとしています。操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="全てのユーザを追い出す"/>
+	</notification>
+	<notification name="MuteLinden">
+		残念ながらLindenを無視設定に入れることはできません。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CannotStartAuctionAlreadyForSale">
+		既に売り出し中の区画なのでオークションにかけることはできません。  オークションにかけたい場合は売り出し設定を解除してから行ってください。
+	</notification>
+	<notification label="オブジェクトを名前でミュートできませんでした" name="MuteByNameFailed">
+		あなたはすでにこの名前をミュートしています。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="RemoveItemWarn">
+		コンテンツを削除すると、許可があっても、オブジェクトにダメージを与えることがあります。
+そのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="CantOfferCallingCard">
+		現在コーリングカードを送れません。数分後にもう一度試してください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CantOfferFriendship">
+		現在フレンドシップを送れません。数分後に試してください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="BusyModeSet">
+		取り込み中モードになりました。
+チャットとインスタントメッセージは表示されません。 受信するインスタントメッセージには取り込み中返答メッセージが表示されます。 テレポートのオファーは受け取り拒否となります。 アイテムのオファーはすべてゴミ箱に入ります。
+		<usetemplate ignoretext="ログイン状態を取り込み中モードに変更する" name="okignore" yestext="OK"/>
+	</notification>
+	<notification name="JoinedTooManyGroupsMember">
+		加入できるグループの最大限に達しました。 このグループに加入するために他のグループを脱退するか、この申し入れを断ってください。
+[NAME] があなたをグループのメンバーとして勧誘しています。
+[INVITE]
+		<usetemplate name="okcancelbuttons" notext="辞退" yestext="参加"/>
+	</notification>
+	<notification name="KickUser">
+		どんなメッセージを表示して、このユーザーを追い出しますか?
+		<form name="form">
+			<input name="message">
+				あなたは管理者によりログオフされました。
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="KickAllUsers">
+		どんなメッセージを表示して、グリッドにいる全員を追い出しますか?
+		<form name="form">
+			<input name="message">
+				あなたは管理者によりログオフされました。
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="FreezeUser">
+		どんなメッセージを表示して、このユーザーをフリーズしますか?
+		<form name="form">
+			<input name="message">
+				あなたはフリーズされています。 動くこともチャットすることもできません。 管理者がIMを通じてあなたに連絡します。
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="UnFreezeUser">
+		どんなメッセージを表示して、このユーザーのフリーズを解除しますか?
+		<form name="form">
+			<input name="message">
+				もうフリーズされていません。
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="OfferTeleport">
+		次のメッセージを添えてあなたが今いる場所へのテレポートを送りますか?
+		<form name="form">
+			<input name="message">
+				[REGION]に来ませんか?
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="OfferTeleportFromGod">
+		ユーザーをゴッド・コールで呼び寄せますか?
+		<form name="form">
+			<input name="message">
+				[REGION]に来ませんか?
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="TeleportFromLandmark">
+		本当にテレポートしますか?
+		<usetemplate ignoretext="ランドマークにテレポートしたいか確認する" name="okcancelignore" notext="キャンセル" yestext="テレポート"/>
+	</notification>
+	<notification name="TeleportToPick">
+		[PICK] にテレポートしますか?
+		<usetemplate ignoretext="ピックの場所にテレポートしたいか確認する" name="okcancelignore" notext="キャンセル" yestext="テレポート"/>
+	</notification>
+	<notification label="あなたの不動産内の全員にメッセージを送信" name="MessageEstate">
+		今あなたの不動産にいる人全員に送る
+短いメッセージを入力してください。
+		<form name="form">
+			<input name="message"/>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification label="Lindenの不動産を変更" name="ChangeLindenEstate">
+		あなたはLinden所有の不動産(メインランド、ティーングリッド、オリエンテーションなど)を変更しようとしています。
+
+これはユーザーの経験を根本から揺るがしかねない「非常に危険な行為」です。これにより、メインランドで多数の地域が変更され、スペースサーバーに悪影響が生じます。
+
+操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification label="Lindenの不動産へのアクセスを変更" name="ChangeLindenAccess">
+		あなたはLinden所有の不動産(メインランド、ティーングリッド、オリエンテーションなど)へのアクセスリストを変更しようとしています。
+
+この行為は「危険」であり、グリッドからオブジェクトやお金の転送をもたらすハッキングを引き起こす可能性があるため、完全にそれを意図した場合のみ行うべきものです。
+これにより多数の地域が変更され、スペースサーバーに悪影響が生じます。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateAllowedAgentAdd">
+		この不動産の許可リストだけに追加しますか? それとも[ALL_ESTATES]のすべての許可リストに追加しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateAllowedAgentRemove">
+		許可リストからの削除をこの不動産についてのみ行いますか? それとも、[ALL_ESTATES]について行いますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateAllowedGroupAdd">
+		この不動産のグループ許可リストだけに追加しますか? それとも[ALL_ESTATES]のグループ許可リストに追加しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateAllowedGroupRemove">
+		許可リストからの削除をこの不動産についてのみ行いますか? それとも、[ALL_ESTATES]について行いますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateBannedAgentAdd">
+		この不動産についてのみアクセスを拒否しますか? それとも[ALL_ESTATE]へのアクセスを拒否しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateBannedAgentRemove">
+		この住人を、この不動産のみ、または[ALL_ESTATES]へとアクセスできるように、禁止リストから削除しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateManagerAdd">
+		この不動産のみ、または[ALL_ESTATES]に対して、不動産マネージャーを追加しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateManagerRemove">
+		不動産マネージャーを、この不動産のみ、または[ALL_ESTATES]から、削除しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="キックを確認" name="EstateKickUser">
+		この不動産から[EVIL_USER]を追い出しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="EstateChangeCovenant">
+		不動産約款を変更しようとしています。操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked">
+		あなたのレーティング区分により、その地域(リージョン)へは入ることができません。 年齢を確認する際の情報に不足があったためと考えられます。
+
+最新ビューワがインストールされているかをご確認ください。このレーティング区分でのアクセスに関する詳細はナレッジベースをご覧ください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked_KB">
+		あなたのレーティング区分により、その地域(リージョン)へは入ることができません。
+
+ナレッジベースを開きレーティング区分について学びますか?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/レーティング区分概要_(KB)
+		</url>
+		<usetemplate ignoretext="レーティング区分の制限のため、このリージョンに入ることができません" name="okcancelignore" notext="閉じる" yestext="ナレッジベースを開く"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked_Notify">
+		あなたのレーティング区分により、その地域(リージョン)へは入ることができません。
+	</notification>
+	<notification name="RegionEntryAccessBlocked_Change">
+		あなたのレーティング区分設定により、その地域(リージョン)へは入ることができません。
+
+「設定を変更」をクリックするとあなたのレーティング区分が上がり、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。
+あとで設定を元に戻したい場合は、「編集」>「環境設定」>「一般」をご覧ください。
+		<form name="form">
+			<button name="OK" text="設定の変更"/>
+			<button default="true" name="Cancel" text="閉じる"/>
+			<ignore name="ignore" text="選択したレーティング区分が原因で、リージョンに入ることができません"/>
+		</form>
+	</notification>
+	<notification name="LandClaimAccessBlocked">
+		あなたのレーティング区分により、この土地を取得することはできません。 年齢を確認する際の情報に不足があったためと考えられます。
+
+最新ビューワがインストールされているかをご確認ください。このレーティング区分でのアクセスに関する詳細はナレッジベースをご覧ください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LandClaimAccessBlocked_KB">
+		あなたのレーティング区分により、この土地を取得することはできません。
+
+ナレッジベースを開きレーティング区分について学びますか?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/レーティング区分概要_(KB)
+		</url>
+		<usetemplate ignoretext="レーティング区分の制限のため、この土地を取得できません" name="okcancelignore" notext="閉じる" yestext="ナレッジベースを開く"/>
+	</notification>
+	<notification name="LandClaimAccessBlocked_Notify">
+		あなたのレーティング区分により、この土地を取得することはできません。
+	</notification>
+	<notification name="LandClaimAccessBlocked_Change">
+		あなたのレーティング区分設定により、この土地を取得することはできません。
+
+「設定を変更」をクリックするとあなたのレーティング区分が上がり、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。
+あとで設定を元に戻したい場合は、「編集」>「環境設定」>「一般」をご覧ください。
+		<usetemplate ignoretext="選択したレーティング区分が原因で、土地を取得できません" name="okcancelignore" notext="閉じる" yestext="設定の変更"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked">
+		あなたのレーティング区分により、この土地を購入することはできません。 年齢を確認する際の情報に不足があったためと考えられます。
+
+最新ビューワがインストールされているかをご確認ください。このレーティング区分でのアクセスに関する詳細はナレッジベースをご覧ください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked_KB">
+		あなたのレーティング区分により、この土地を購入することはできません。
+
+ナレッジベースを開きレーティング区分について学びますか?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/レーティング区分概要_(KB)
+		</url>
+		<usetemplate ignoretext="レーティング区分の制限のため、この土地を購入できません" name="okcancelignore" notext="閉じる" yestext="ナレッジベースを開く"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked_Notify">
+		あなたのレーティング区分により、この土地を購入することはできません。
+	</notification>
+	<notification name="LandBuyAccessBlocked_Change">
+		あなたのレーティング区分設定により、この土地を購入することができません。
+
+「設定を変更」をクリックするとあなたのレーティング区分が上がり、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。
+あとで設定を元に戻したい場合は、「編集」>「環境設定」>「一般」をご覧ください。
+		<usetemplate ignoretext="選択したレーティング区分が原因で、土地を購入できません" name="okcancelignore" notext="閉じる" yestext="設定の変更"/>
+	</notification>
+	<notification name="TooManyPrimsSelected">
+		選択したプリムが多すぎます。
+[MAX_PRIM_COUNT] を選択するか、
+プリム数を減らしてもう一度お試しください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ProblemImportingEstateCovenant">
+		不動産約款のインポート時に問題発生。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ProblemAddingEstateManager">
+		新しい不動産マネージャーの追加に関する問題:
+1つ以上の不動産で、マネージャーリストが満杯になっています。
+	</notification>
+	<notification name="ProblemAddingEstateGeneric">
+		不動産リストの追加に関する問題:
+1つ以上の不動産で、リストが満杯になっています。
+	</notification>
+	<notification name="UnableToLoadNotecardAsset">
+		現在ノートカードの資産IDを読み込むことができません。
+	</notification>
+	<notification name="NotAllowedToViewNotecard">
+		要求された資産IDに関するノートカードを閲覧するには権限が不十分です。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MissingNotecardAssetID">
+		ノートカード用資産IDがデータベースに登録されていません。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="PublishClassified">
+		注意:クラシファイド広告の料金は払い戻しされません。
+
+L$[AMOUNT]で、このクラシファイド広告を今すぐ公開しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="SetClassifiedMature">
+		この広告にMatureコンテンツは含まれていますか?
+		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="SetGroupMature">
+		この広告にMatureコンテンツは含まれていますか?
+		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification label="再起動を確認" name="ConfirmRestart">
+		この地域を2分後に再起動しようとしています。
+操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification label="この地域内の全員にメッセージを送信" name="MessageRegion">
+		この地域にいる人全員に送る
+短いメッセージを入力してください。
+		<form name="form">
+			<input name="message"/>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification label="地域のレーティング区分指定変更済み" name="RegionMaturityChange">
+		この地域のレーティング区分指定がアップデートされました。
+この変更が地図に反映されるまでにはしばらく時間がかかります。
+	</notification>
+	<notification label="ボイスバージョンの不一致" name="VoiceVersionMismatch">
+		このバージョンの [APP_NAME] は、
+この地域のボイスチャット機能に対応していません。
+ボイスチャットを正しく使用するには、
+[APP_NAME] のアップデートが必要です。
+	</notification>
+	<notification label="オブジェクトを購入できません" name="BuyObjectOneOwner">
+		複数のオーナーから同時にオブジェクトを購入することはできません。
+単一のオブジェクトを選択し、もう一度試してください。
+	</notification>
+	<notification label="コンテンツを購入できません" name="BuyContentsOneOnly">
+		一度に複数のオブジェクトのコンテンツは購入できません。
+選択するオブジェクトを1つだけにして、もう一度試してください。
+	</notification>
+	<notification label="コンテンツを購入できません" name="BuyContentsOneOwner">
+		複数のオーナーから同時にオブジェクトを購入することはできません。
+単一のオブジェクトを選択し、もう一度試してください。
+	</notification>
+	<notification name="BuyOriginal">
+		オリジナルのオブジェクトを[OWNER]からL$[PRICE]で購入しますか?
+これにより、あなたがオブジェクトのオーナーになります。
+可能な操作は、
+変更:[MODIFYPERM]、コピー:[COPYPERM]、
+再販/プレゼント[RESELLPERM]です。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BuyOriginalNoOwner">
+		L$[PRICE]でオリジナルのオブジェクトを購入しますか?
+これにより、あなたがオブジェクトのオーナーになります。
+可能な操作は、
+変更:[MODIFYPERM]、コピー:[COPYPERM]、
+再販/プレゼント[RESELLPERM]です。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BuyCopy">
+		コピーを[OWNER]からL$[PRICE]で購入しますか?
+購入したオブジェクトは、あなたの持ち物にコピーされます。
+可能な操作は、変更:[MODIFYPERM]、コピー:[COPYPERM]、
+再販/プレゼント[RESELLPERM]です。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BuyCopyNoOwner">
+		L$[PRICE]でコピーを購入しますか?
+購入したオブジェクトは、あなたの持ち物にコピーされます。
+可能な操作は、変更:[MODIFYPERM]、コピー:[COPYPERM]、
+再販/プレゼント[RESELLPERM]です。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BuyContents">
+		コンテンツを[OWNER]からL$[PRICE]で購入しますか?
+購入したコンテンツは、あなたの持ち物にコピーされます。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BuyContentsNoOwner">
+		L$[PRICE]でコンテンツを購入しますか?
+購入したコンテンツは、あなたの持ち物にコピーされます。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmPurchase">
+		この取引は以下のとおり行われます:
+[ACTION]
+
+この購入を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmPurchasePassword">
+		この取引は以下のとおり行われます:
+[ACTION]
+
+この購入を続行しますか?
+パスワードを再入力し、「OK」をクリックしてください。
+		<form name="form">
+			<input name="message"/>
+			<button name="ConfirmPurchase" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="SetPickLocation">
+		メモ:
+本ピックのロケーションを更新しましたが、
+他の詳細は元の値のままになります。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MoveInventoryFromObject">
+		「コピー禁止」の持ち物アイテムが選択されました。
+これらのアイテムはコピーされないまま、あなたの持ち物に移動されます。
+
+
+アイテムを動かしますか?
+		<usetemplate ignoretext="「コピー不可」のアイテムをオブジェクトから動かす前に警告する" name="okcancelignore" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="MoveInventoryFromScriptedObject">
+		「コピー禁止」の持ち物アイテムが選択されました。
+これらのアイテムはコピーされるのではなく、あなたの持ち物に移動されます。
+このオブジェクトはスクリプト付きなので、持ち物に移動させると
+スクリプトに誤動作が起きる可能性があります。
+
+持ち物アイテムを移動しますか?
+		<usetemplate ignoretext="スクリプト入りのオブジェクトを壊す恐れのある「コピー不可」のアイテムを動かす前に警告する" name="okcancelignore" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ClickActionNotPayable">
+		警告: クリックで「オブジェクトに支払う」設定をしました。スクリプトに money()イベントが追加されると動作します。
+		<form name="form">
+			<ignore name="ignore" text="money() スクリプトを入れずにオブジェクトを制作中に、「オブジェクトに支払う」アクションを設定"/>
+		</form>
+	</notification>
+	<notification name="OpenObjectCannotCopy">
+		このオブジェクトには、あなたがコピーできるアイテムはありません。
+	</notification>
+	<notification name="WebLaunchAccountHistory">
+		secondlife.com でアカウント履歴を確認しますか?
+		<usetemplate ignoretext="ブラウザを起動してアカウント履歴を見る" name="okcancelignore" notext="取り消し" yestext="ページに移動"/>
+	</notification>
+	<notification name="ConfirmQuit">
+		終了しようとしています。操作を続行しますか?
+		<usetemplate ignoretext="終了時に確認する" name="okcancelignore" notext="終了しない" yestext="終了"/>
+	</notification>
+	<notification name="HelpReportAbuseEmailLL">
+		利用規約違反とコミュニティースタンダード違反の報告にこのツールをご使用ください。 参照:
+
+http://secondlife.com/corporate/tos.php
+http://secondlife.com/corporate/cs.php
+
+利用規約違反とコミュニティースタンダード違反に関する全てのレポートは、調査され、解決されます。
+以下のリンク先の被害報告にてその確認をすることができます。
+
+http://secondlife.com/support/incidentreport.php
+	</notification>
+	<notification name="HelpReportAbuseEmailEO">
+		重要: このレポートはLinden Lab 社ではなく、
+あなたが現在いる地域のオーナーに送られます。
+-
+あなたが今いる地域のオーナーは、
+住人と訪問者へのサービスの一環として、この地域からのレポートをすべて受け付け、解決することに同意しています。
+よってLinden Lab 社が、
+あなたがここから提出するレポートを調査することはありません。
+地域のオーナーは、不動産約款で指定している地元の規則を基に、報告された問題を解決します。
+(「世界」のメニューから「土地情報」を選ぶと、約款を閲覧できます)
+-
+このレポートに関する解決策は、この地域にだけ当てはまります。
+住人が[SECOND_LIFE] の他の地域へアクセスする際、
+このレポートの結果に影響されることはありません。
+Linden Lab 社だけが[SECOND_LIFE] 全域における
+アクセス制限権を持っています。
+	</notification>
+	<notification name="HelpReportAbuseSelectCategory">
+		嫌がらせ報告のカテゴリを選択してください。
+カテゴリを選択することにより、嫌がらせ報告の処理や保管に大変役立ちます。
+	</notification>
+	<notification name="HelpReportAbuseAbuserNameEmpty">
+		嫌がらせ行為をした人の名前を入力してください。
+正確な情報の入力により、嫌がらせ報告の処理や保管に大変役立ちます。
+	</notification>
+	<notification name="HelpReportAbuseAbuserLocationEmpty">
+		嫌がらせがあった場所を入力してください。
+正確な情報の入力により、嫌がらせ報告の処理や保管に大変役立ちます。
+	</notification>
+	<notification name="HelpReportAbuseSummaryEmpty">
+		嫌がらせの概要を入力してください。
+正確な概要の入力により、
+嫌がらせ報告の処理や保管に大変役立ちます。
+	</notification>
+	<notification name="HelpReportAbuseDetailsEmpty">
+		嫌がらせの詳細な説明を入力してください。
+名前や嫌がらせの詳細を、できるだけ具体的に入力してください。
+
+正確な説明の入力により、
+嫌がらせ報告の処理や保管に大変役立ちます。
+	</notification>
+	<notification name="HelpReportAbuseContainsCopyright">
+		住人の皆様へ、
+
+知的財産の侵害に関する報告を行う際には、以下の点に注意してください。
+
+(1) 嫌がらせの報告のプロセス
+[SECOND_LIFE] の権限システムを悪用している住人を見つけたら、
+嫌がらせの報告を行ってください。
+例えばコピーBotの使用、それに似たツールの使用による知的財産権の侵害があります。
+アビューズチームは調査に基づき、
+[SECOND_LIFE] のコミュニティースタンダードや
+利用規約に違反する行為と判断された場合には適切な処置を行っています。
+ただし、コンテンツを[SECOND_LIFE] から撤去してほしい、
+といった要望にはアビューズチームは応えることができません。
+
+(2) DMCA(デジタルミレニアム著作権法)及びコンテンツ撤去プロセス
+[SECOND_LIFE] からのコンテンツの撤去をリクエストするには、
+著作権侵害通知の提出を行う必要があります。
+参照: http://secondlife.com/corporate/dmca.php
+
+この件に関する嫌がらせの報告を続ける際は、このウィンドウを閉じてください。選択すべきカテゴリは「知的財産の侵害>コピーBot及び権限の悪用」のほうが適しているかもしれませんのでご確認ください。
+
+よろしくお願いします。
+
+Linden Lab
+	</notification>
+	<notification name="FailedRequirementsCheck">
+		以下の必要なコンポーネントが、[FLOATER]から抜け落ちています
+[COMPONENTS]
+	</notification>
+	<notification label="既存の付属品を置換" name="ReplaceAttachment">
+		体のこの部位にはオブジェクトが装着されています。
+選択されたオブジェクトと置き換えますか?
+		<form name="form">
+			<ignore name="ignore" save_option="true" text="装着しているアイテムと選択したアイテムを入れ替える"/>
+			<button ignore="自動的に交換" name="Yes" text="OK"/>
+			<button ignore="交換しない" name="No" text="キャンセル"/>
+		</form>
+	</notification>
+	<notification label="取り込み中の警告" name="BusyModePay">
+		現在、取り込み中のため、この支払いと
+引き換えのアイテムを受け取ることが
+できません。
+
+この取引を完了する前に、取り込み中の設定を解除しますか?
+		<form name="form">
+			<ignore name="ignore" save_option="true" text="取り込み中モードの時に支払をする"/>
+			<button ignore="常に取り込み中の設定" name="Yes" text="OK"/>
+			<button ignore="取り込み中の設定にしない" name="No" text="キャンセル"/>
+		</form>
+	</notification>
+	<notification name="ConfirmEmptyTrash">
+		ゴミ箱の項目をすべて削除しますか?
+		<usetemplate ignoretext="持ち物のゴミ箱フォルダを空にする前に確認する" name="okcancelignore" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmClearBrowserCache">
+		トラベル、Web、検索の履歴をすべて削除しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
+	</notification>
+	<notification name="ConfirmClearCookies">
+		本当にクッキーをクリアしますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
+	</notification>
+	<notification name="ConfirmClearMediaUrlList">
+		保存された URL のリストを消去します。よろしいですか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
+	</notification>
+	<notification name="ConfirmEmptyLostAndFound">
+		紛失物の項目をすべて削除しますか?
+		<usetemplate ignoretext="紛失物フォルダを空にする前に確認する" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="CopySLURL">
+		次の SLurl がクリップボードにコピーされました:
+ [SLURL]
+
+Webページにこれをリンクすると、他人がこの場所に簡単にアクセスできます。Webブラウザのアドレスバーに貼り付けて試してみてください。
+		<form name="form">
+			<ignore name="ignore" text="クリップボードに SLurl がコピーされる"/>
+		</form>
+	</notification>
+	<notification name="WLSavePresetAlert">
+		保存された事前設定を上書きしますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="WLDeletePresetAlert">
+		[SKY] を削除しますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="WLNoEditDefault">
+		デフォルトの設定を編集したり削除したりすることはできません。
+	</notification>
+	<notification name="WLMissingSky">
+		このデイ・サイクルのファイルは次の存在しない「空」ファイルを参照しています: [SKY]。
+	</notification>
+	<notification name="PPSaveEffectAlert">
+		ポストプロセス効果が存在します。 上書きしますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="NewSkyPreset">
+		新しい空の名前を指定してください。
+		<form name="form">
+			<input name="message">
+				新しい事前設定
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="キャンセル"/>
+		</form>
+	</notification>
+	<notification name="ExistsSkyPresetAlert">
+		事前設定がすでに存在します!
+	</notification>
+	<notification name="NewWaterPreset">
+		新しい水の事前設定の名前を指定してください。
+		<form name="form">
+			<input name="message">
+				新しい事前設定
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="キャンセル"/>
+		</form>
+	</notification>
+	<notification name="ExistsWaterPresetAlert">
+		事前設定がすでに存在します!
+	</notification>
+	<notification name="WaterNoEditDefault">
+		デフォルトの設定を編集したり削除したりすることはできません。
+	</notification>
+	<notification name="ChatterBoxSessionStartError">
+		[RECIPIENT]との新しいチャットを開始することができません
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ChatterBoxSessionEventError">
+		[EVENT]
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ForceCloseChatterBoxSession">
+		[NAME]とのチャットセッションを閉じます。
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="Cannot_Purchase_an_Attachment">
+		オブジェクトが取り付けられているときは購入することができません。
+	</notification>
+	<notification label="デビット許可のリクエストについて" name="DebitPermissionDetails">
+		この要求を許可すると、スクリプトからあなたのアカウントにリンデンドルを課金できるようになります。
+この許可を取り消すには、オブジェクトのオーナーはオブジェクトを削除するか、オブジェクトのスクリプトをリセットしなければなりません。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="AutoWearNewClothing">
+		作成しようとしている衣類を自動的に装着しますか?
+		<usetemplate ignoretext="容姿編集画面で作成する衣類を装着する" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="NotAgeVerified">
+		年齢確認を済ませていないとこの区画を訪れることができません。  [SECOND_LIFE] サイトで年齢の確認を行いますか?
+
+[_URL]
+		<url name="url" option="0">
+			https://secondlife.com/account/verification.php?lang=ja
+		</url>
+		<usetemplate ignoretext="年齢の確認を済ませていません" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="Cannot enter parcel: no payment info on file">
+		支払情報が登録されていないとこのエリアを訪れることができません。  [SECOND_LIFE] サイトで登録を行いますか?
+
+[_URL]
+		<url name="url" option="0">
+			https://secondlife.com/account/index.php?lang=ja
+		</url>
+		<usetemplate ignoretext="支払情報が登録されていません" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="MissingString">
+		文字列[STRING_NAME]がstrings.xmlに含まれていません
+	</notification>
+	<notification name="SystemMessageTip">
+		[MESSAGE]
+	</notification>
+	<notification name="Cancelled">
+		取り消されました
+	</notification>
+	<notification name="CancelledSit">
+		座るのを取り消されました
+	</notification>
+	<notification name="CancelledAttach">
+		添付は取り消されました
+	</notification>
+	<notification name="ReplacedMissingWearable">
+		欠落している服/身体部位をデフォルトに置換します。
+	</notification>
+	<notification name="GroupNotice">
+		件名: [SUBJECT], メッセージ: [MESSAGE]
+	</notification>
+	<notification name="FriendOnline">
+		[FIRST] [LAST] はオンラインです。
+	</notification>
+	<notification name="FriendOffline">
+		[FIRST] [LAST] はオフラインです。
+	</notification>
+	<notification name="AddSelfFriend">
+		残念ながら自分自身をフレンドに追加することはできません。
+	</notification>
+	<notification name="UploadingAuctionSnapshot">
+		インワールドとウェブ・サイトのスナップショットをアップロード中です...
+(所要時間:約5分)
+	</notification>
+	<notification name="UploadPayment">
+		アップロードに L$[AMOUNT] 支払いました。
+	</notification>
+	<notification name="UploadWebSnapshotDone">
+		Webサイトのスナップショットがアップロードされました。
+	</notification>
+	<notification name="UploadSnapshotDone">
+		インワールドでのスナップショットのアップロードが完了しました。
+	</notification>
+	<notification name="TerrainDownloaded">
+		raw地形がダウンロードされました
+	</notification>
+	<notification name="GestureMissing">
+		ジェスチャー[NAME] がデータベースにありません。
+	</notification>
+	<notification name="UnableToLoadGesture">
+		ジェスチャー[NAME] を読み込むことができません。
+再度、試みてください。
+	</notification>
+	<notification name="LandmarkMissing">
+		データベースにランドマークがありません。
+	</notification>
+	<notification name="UnableToLoadLandmark">
+		ランドマークをロードできません。  もう一度試してください。
+	</notification>
+	<notification name="CapsKeyOn">
+		CapsLock キーが有効になっています。
+パスワードに影響があるかもしれません。
+	</notification>
+	<notification name="NotecardMissing">
+		ノートカードがデータベースにありません。
+	</notification>
+	<notification name="NotecardNoPermissions">
+		このノートカードを見る権限がありません。
+	</notification>
+	<notification name="RezItemNoPermissions">
+		オブジェクトをrezするにはパーミッション(承認)が不足してます。
+	</notification>
+	<notification name="UnableToLoadNotecard">
+		現在ノートカードの資産をロードできません。
+	</notification>
+	<notification name="ScriptMissing">
+		データベースにスクリプトがありません。
+	</notification>
+	<notification name="ScriptNoPermissions">
+		スクリプトを閲覧するには権限が不十分です。
+	</notification>
+	<notification name="UnableToLoadScript">
+		スクリプトをロードできません。  もう一度試してください。
+	</notification>
+	<notification name="IncompleteInventory">
+		あなたの提供するコンテンツは、この場所ではまだ全部揃いません。
+少ししてからもう一度試してください。
+	</notification>
+	<notification name="CannotModifyProtectedCategories">
+		保護されたカテゴリーは修正できません。
+	</notification>
+	<notification name="CannotRemoveProtectedCategories">
+		保護されたカテゴリーは削除できません。
+	</notification>
+	<notification name="OfferedCard">
+		あなたは[FIRST] [LAST] に
+コーリング・カードを送りました。
+	</notification>
+	<notification name="UnableToBuyWhileDownloading">
+		オブジェクトデータのダウンロード中は購入できません。
+もう一度試してください。
+	</notification>
+	<notification name="UnableToLinkWhileDownloading">
+		オブジェクトデータのウンロード中はリンクできません。
+もう一度試してください。
+	</notification>
+	<notification name="CannotBuyObjectsFromDifferentOwners">
+		オブジェクトは一度につき一人の所有者から購入できます。
+オブジェクトを 1 つだけ選んでください。
+	</notification>
+	<notification name="ObjectNotForSale">
+		このオブジェクトは販売対象ではありません。
+	</notification>
+	<notification name="EnteringGodMode">
+		レベル[LEVEL]のゴッド・モードに入ります
+	</notification>
+	<notification name="LeavingGodMode">
+		レベル [LEVEL] のゴッドモードを解除します
+	</notification>
+	<notification name="CopyFailed">
+		これをコピーする権限がありません。
+	</notification>
+	<notification name="InventoryAccepted">
+		[NAME]は、持ち物の提供を受け入れました。
+	</notification>
+	<notification name="InventoryDeclined">
+		[NAME]は、持ち物の提供を断りました。
+	</notification>
+	<notification name="ObjectMessage">
+		[NAME]: [MESSAGE]
+	</notification>
+	<notification name="CallingCardAccepted">
+		コーリング・カードが受理されました。
+	</notification>
+	<notification name="CallingCardDeclined">
+		コーリング・カードが拒否されました。
+	</notification>
+	<notification name="TeleportToLandmark">
+		本土に到達しました。
+[NAME]などの場所にテレポートするには、画面右下にある「持ち物」ボタンをクリックし、ランドマーク(Landmarks)フォルダを選択してください。
+ランドマークをダブルクリックした後「テレポート」をクリックするとその場所へ移動します。
+	</notification>
+	<notification name="TeleportToPerson">
+		本土に到達しました。
+住人の[NAME]と接触するには、画面右下にある「持ち物」ボタンをクリックし、コーリングカード(Calling Cards)フォルダを選択してください。
+カードをダブルクリックし、「IMを送る」をクリックし、メッセージを送信してください。
+	</notification>
+	<notification name="CantSelectLandFromMultipleRegions">
+		サーバーの境界を越えて土地を選択することできません。
+もっと小さな土地を選択してください。
+	</notification>
+	<notification name="SearchWordBanned">
+		コミュニティスタンダードに明記されているコンテンツ制限により、あなたの検索語の一部が除外されました。
+	</notification>
+	<notification name="NoContentToSearch">
+		少なくともどれか一つコンテンツの種類を選択して検索を行ってください。(PG, Mature, Adult)
+	</notification>
+	<notification name="GroupVote">
+		[NAME] は投票の申請をしています:
+[MESSAGE]
+		<form name="form">
+			<button name="VoteNow" text="今すぐ投票する"/>
+			<button name="Later" text="あとで"/>
+		</form>
+	</notification>
+	<notification name="SystemMessage">
+		[MESSAGE]
+	</notification>
+	<notification name="EventNotification">
+		イベント通知:
+
+[NAME]
+[DATE]
+		<form name="form">
+			<button name="Teleport" text="テレポート"/>
+			<button name="Description" text="説明"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="TransferObjectsHighlighted">
+		この区画上に存在するオブジェクトのうち、この区画の購入者に譲渡されるオブジェクトがすべて強調表示されます。
+
+
+*譲渡される樹木や植物は、強調表示されません。
+		<form name="form">
+			<button name="Done" text="完了"/>
+		</form>
+	</notification>
+	<notification name="DeactivatedGesturesTrigger">
+		同じトリガーでアクティブにしないジェスチャー:
+[NAMES]
+	</notification>
+	<notification name="NoQuickTime">
+		Apple社のQuickTimeがシステムにインストールされていないと思われます。
+ストリーミング・メディアの再生を行いたい場合は、QuickTimeのサイト(http://www.apple.com/quicktime)にアクセスして、QuickTime Player をインストールしてください。
+	</notification>
+	<notification name="NoPlugin">
+		「 [MIME_TYPE] 」の MIME タイプを扱うメディアプラグインが見つかりませんでした。  このタイプのメディアはご利用いただけません。
+	</notification>
+	<notification name="MediaPluginFailed">
+		次のメディアプラグインが実行できませんでした:
+    [PLUGIN]
+
+プラグインをインストールしなおすか、問題が解決しない場合はメーカーにお問い合わせください。
+		<form name="form">
+			<ignore name="ignore" text="メディアプラグインの実行に失敗"/>
+		</form>
+	</notification>
+	<notification name="OwnedObjectsReturned">
+		選択した土地の区画上にあったあなたのオブジェクトは、あなたの持ち物に返却されました。
+	</notification>
+	<notification name="OtherObjectsReturned">
+		選択されている土地の区画上にあった
+ [FIRST] [LAST]
+ が所有するオブジェクトは、オーナーの持ち物に返却されました。
+	</notification>
+	<notification name="OtherObjectsReturned2">
+		選択された土地の区画上にあり、
+住人の[NAME]の所有だったオブジェクトはオーナーに返却されました。
+	</notification>
+	<notification name="GroupObjectsReturned">
+		選択されている区画上にあり、[GROUPNAME] というグループと共有だったオブジェクトは、オーナーの持ち物に返却されました。
+譲渡されていた譲渡可能なオブジェクトは、前のオーナーに返却されました。
+グループに譲渡されていた譲渡不可能なオブジェクトは、削除されました。
+	</notification>
+	<notification name="UnOwnedObjectsReturned">
+		選択された土地の区画上にあり、あなたの所有で「なかった」オブジェクトは、本来のオーナーに返却されました。
+	</notification>
+	<notification name="NotSafe">
+		この土地ではダメージが有効です。
+ケガをするかもしれません。 死んでしまった場合はホームにテレポートされます。
+	</notification>
+	<notification name="NoFly">
+		このエリアでは飛行が禁止されています。
+ここでは飛べません。
+	</notification>
+	<notification name="PushRestricted">
+		このエリアではプッシュが制限されています。
+土地所有者以外は他人をプッシュすることはできません。
+	</notification>
+	<notification name="NoVoice">
+		このエリアではボイスチャットが無効です。 誰かが話しているのを聞くことはできません。
+	</notification>
+	<notification name="NoBuild">
+		このエリアでは制作が禁止されています。 オブジェクトを制作したり Rez することはできません。
+	</notification>
+	<notification name="ScriptsStopped">
+		管理者がこの地域内のスクリプトを一時停止させました。
+	</notification>
+	<notification name="ScriptsNotRunning">
+		この地域ではスクリプトの使用が禁止されています
+	</notification>
+	<notification name="NoOutsideScripts">
+		この土地では、外部のスクリプトが禁止されています。
+
+土地所有者のもの以外はスクリプトは実行されません。
+	</notification>
+	<notification name="ClaimPublicLand">
+		そのリージョンにいないと公共の土地を取得することはできません。
+	</notification>
+	<notification name="RegionTPAccessBlocked">
+		あなたのレーティング区分によりその地域(リージョン)へは入ることができません。 年齢確認を行うか、最新ビューワをインストールしてください。
+
+現在のレーティング区分でアクセス可能なエリアに関する詳細はナレッジベースを参照してください。
+	</notification>
+	<notification name="URBannedFromRegion">
+		あなたは地域(リージョン)への立入が禁止されています。
+	</notification>
+	<notification name="NoTeenGridAccess">
+		あなたのアカウントではティーングリッドに接続できません。
+	</notification>
+	<notification name="ImproperPaymentStatus">
+		この地域(リージョン)に入るために適した支払いステータスがありません。
+	</notification>
+	<notification name="MustGetAgeParcel">
+		この区画に入るには年齢確認済みである必要があります。
+	</notification>
+	<notification name="NoDestRegion">
+		目的地の地域(リージョン)が見つかりませんでした。
+	</notification>
+	<notification name="NotAllowedInDest">
+		目的地に入る許可がありません。
+	</notification>
+	<notification name="RegionParcelBan">
+		立入禁止された区画を横断することはできません。 別の方法をお試しください。
+	</notification>
+	<notification name="TelehubRedirect">
+		テレハブに転送されました。
+	</notification>
+	<notification name="CouldntTPCloser">
+		これ以上目的地に近い場所にテレポートができませんでした。
+	</notification>
+	<notification name="TPCancelled">
+		テレポートがキャンセルされました。
+	</notification>
+	<notification name="FullRegionTryAgain">
+		入ろうとしている地域(リージョン)は現在満員です。
+しばらくしてから再度お試しください。
+	</notification>
+	<notification name="GeneralFailure">
+		よくある失敗
+	</notification>
+	<notification name="RoutedWrongRegion">
+		異なる地域(リージョン)に迂回されました。 もう一度お試しください。
+	</notification>
+	<notification name="NoValidAgentID">
+		エージェントIDが無効です。
+	</notification>
+	<notification name="NoValidSession">
+		セッションIDが無効です。
+	</notification>
+	<notification name="NoValidCircuit">
+		回路コードが無効です。
+	</notification>
+	<notification name="NoValidTimestamp">
+		タイムスタンプが無効です。
+	</notification>
+	<notification name="NoPendingConnection">
+		接続を生成できません。
+	</notification>
+	<notification name="InternalUsherError">
+		内部エラーが発生しました。
+	</notification>
+	<notification name="NoGoodTPDestination">
+		この地域(リージョン)では適切なテレポート目的地が見つかりませんでした。
+	</notification>
+	<notification name="InternalErrorRegionResolver">
+		内部エラーが発生しました。
+	</notification>
+	<notification name="NoValidLanding">
+		有効な着地点が見つかりませんでした。
+	</notification>
+	<notification name="NoValidParcel">
+		有効な区画が見つかりませんでした。
+	</notification>
+	<notification name="ObjectGiveItem">
+		[FIRST] [LAST]所有の、
+[OBJECTFROMNAME]から、
+[OBJECTNAME]という[OBJECTTYPE]が送られてきました。
+		<form name="form">
+			<button name="Keep" text="受け取る"/>
+			<button name="Discard" text="破棄"/>
+			<button name="Mute" text="無視リストへ"/>
+		</form>
+	</notification>
+	<notification name="ObjectGiveItemUnknownUser">
+		(未知のユーザー) 所有の[OBJECTFROMNAME]から、
+あなたに[OBJECTNAME]という[OBJECTTYPE]が送られてきました。
+		<form name="form">
+			<button name="Keep" text="受け取る"/>
+			<button name="Discard" text="破棄"/>
+			<button name="Mute" text="無視リストへ"/>
+		</form>
+	</notification>
+	<notification name="UserGiveItem">
+		[NAME]は、あなたに[OBJECTNAME]という名前の[OBJECTTYPE]を渡しました。
+		<form name="form">
+			<button name="Keep" text="受け取る"/>
+			<button name="Discard" text="破棄"/>
+		</form>
+	</notification>
+	<notification name="GodMessage">
+		[NAME]
+[MESSAGE]
+	</notification>
+	<notification name="JoinGroup">
+		[MESSAGE]
+		<form name="form">
+			<button name="Join" text="参加"/>
+			<button name="Decline" text="辞退"/>
+			<button name="Info" text="情報"/>
+		</form>
+	</notification>
+	<notification name="TeleportOffered">
+		[NAME]はあなたをテレポートで呼び寄せようとしています:
+
+[MESSAGE]
+		<form name="form">
+			<button name="Teleport" text="テレポート"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="GotoURL">
+		[MESSAGE]
+[URL]
+		<form name="form">
+			<button name="Later" text="あとで"/>
+			<button name="GoNow..." text="今すぐ行く"/>
+		</form>
+	</notification>
+	<notification name="OfferFriendship">
+		[NAME]は、
+フレンド登録を申し込んでいます。
+
+[MESSAGE]
+
+(デフォルトでお互いのオンライン・ステータスを見ることができるようになります。)
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="辞退"/>
+		</form>
+	</notification>
+	<notification name="OfferFriendshipNoMessage">
+		[NAME]は、
+フレンド登録を申し込んでいます。
+
+(デフォルトでお互いのオンライン・ステータスを見ることができるようになります。)
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="拒否"/>
+		</form>
+	</notification>
+	<notification name="FriendshipAccepted">
+		[NAME]は、フレンド 登録を受け入れました。
+	</notification>
+	<notification name="FriendshipDeclined">
+		[NAME]は、フレンド 登録を断りました。
+	</notification>
+	<notification name="OfferCallingCard">
+		[FIRST] [LAST]が
+あなたにコーリングカードを送ってきました。
+これにより、あなたの持ち物にブックマークが追加され、この住人にすばやくIMすることができます。
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="辞退"/>
+		</form>
+	</notification>
+	<notification name="RegionRestartMinutes">
+		この地域は[MINUTES]分後に再起動されます。
+強制ログアウトとなりますので、この地域の外に出てください。
+	</notification>
+	<notification name="RegionRestartSeconds">
+		このリージョンは [SECONDS] 秒後に再起動されます。.
+このままここにいるとログアウトされます。
+	</notification>
+	<notification name="LoadWebPage">
+		ウェブ・ページ[URL]をロードしますか?
+
+[MESSAGE]
+
+ロード元のオブジェクト:[OBJECTNAME]、オーナー:[NAME]?
+		<form name="form">
+			<button name="Gotopage" text="移動"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="FailedToFindWearableUnnamed">
+		データベースに[TYPE]が見つかりませんでした
+	</notification>
+	<notification name="FailedToFindWearable">
+		データベースに[DESC]という名前の[TYPE]が見つかりませんでした。
+	</notification>
+	<notification name="InvalidWearable">
+		着用しようとしているアイテムはあなたのビューワでは読み込むことができません。 [APP_NAME]ビューワを最新のものにアップグレードしてからこのアイテムを着用してください。
+	</notification>
+	<notification name="ScriptQuestion">
+		「[NAME]」が所有するオブジェクト「[OBJECTNAME]」を:
+
+[QUESTIONS]
+よろしいですか?
+		<form name="form">
+			<button name="Yes" text="はい"/>
+			<button name="No" text="いいえ"/>
+			<button name="Mute" text="無視リストに追加"/>
+		</form>
+	</notification>
+	<notification name="ScriptQuestionCaution">
+		[NAME] 所有の「 [OBJECTNAME] 」 というオブジェクトが次のことをしようとしています:
+
+[QUESTIONS]
+このオブジェクトや制作者を信用できない場合は、このリクエストを拒否してください。
+
+リクエストを受けますか?
+		<form name="form">
+			<button name="Grant" text="許可"/>
+			<button name="Deny" text="拒否"/>
+			<button name="Details" text="詳細..."/>
+		</form>
+	</notification>
+	<notification name="ScriptDialog">
+		[FIRST] [LAST]の「[TITLE]」
+[MESSAGE]
+		<form name="form">
+			<button name="Ignore" text="無視する"/>
+		</form>
+	</notification>
+	<notification name="ScriptDialogGroup">
+		[GROUPNAME]の「[TITLE]」
+[MESSAGE]
+		<form name="form">
+			<button name="Ignore" text="無視する"/>
+		</form>
+	</notification>
+	<notification name="FirstBalanceIncrease">
+		L$[AMOUNT] を受け取りました。
+あなたの L$ 残高は画面右上に表示されています。
+	</notification>
+	<notification name="FirstBalanceDecrease">
+		L$[AMOUNT] を支払いました。
+あなたの L$ 残高は画面右上に表示されています。
+	</notification>
+	<notification name="FirstSit">
+		着席中です。
+周囲を見るには矢印キーか AWSD キーを使ってください。
+立つときには「立ち上がる」ボタンをクリックしてください。
+	</notification>
+	<notification name="FirstMap">
+		地図をクリック・ドラッグして周囲を見てください。
+ダブルクリックするとテレポートします。
+右側のコントロールで場所を探したり背景を変更してください。
+	</notification>
+	<notification name="FirstBuild">
+		制作ツールを開きました。 見るものすべてがこのツールで作成されたものです。
+	</notification>
+	<notification name="FirstTeleport">
+		このリージョンでは特定のエリアにのみテレポートできます。 矢印が目的地を指しています。 矢印をクリックすると消えます。
+	</notification>
+	<notification name="FirstOverrideKeys">
+		あなたの移動キーをオブジェクトが操作しています。
+矢印かAWSDのキーで動作を確認してください。
+銃などのオブジェクトだと、一人称視点(マウスルック)に変更する必要があります。
+Mキーを押して変更します。
+	</notification>
+	<notification name="FirstAppearance">
+		容姿を編集中です。
+周囲を見るには矢印キーを使ってください。
+終わったら「すべて保存」を押してください。
+	</notification>
+	<notification name="FirstInventory">
+		これはあなたの持ち物です。所有しているアイテムが入っています。
+
+* アイテムを自分にドラッグして装着してください。
+* アイテムを地面にドラッグして Rez してください。
+* ノートカードをダブルクリックして開いてください。
+	</notification>
+	<notification name="FirstSandbox">
+		ここはサンドボックスエリアです。住人が制作を学ぶことができます。
+
+ここで制作されたものは時間が経つと削除されます。制作したアイテムを右クリックして「取る」を選び、持ち物に入れてお持ち帰りするのをお忘れなく。
+	</notification>
+	<notification name="FirstFlexible">
+		このオブジェクトはフレキシブルです。 フレキシブルオブジェクトは、「物理」ではなく「ファントム」でなければなりません。
+	</notification>
+	<notification name="FirstDebugMenus">
+		アドバンスメニューを開きました。
+
+このメニューの有効・無効設定:
+  Windows: Ctrl+Alt+D
+  Mac: ⌘-Opt+D
+	</notification>
+	<notification name="FirstSculptedPrim">
+		スカルプトプリムを編集中です。 スカルプトプリムには形状の輪郭を指定するための特別なテクスチャが必要です。
+	</notification>
+	<notification name="MaxListSelectMessage">
+		このリストから[MAX_SELECT]個までのアイテムを選択できます。
+	</notification>
+	<notification name="VoiceInviteP2P">
+		[NAME]が、あなたをボイスチャットコールに招待しています。
+コールに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。このコールをしている人をミュートにする場合は「ミュート」をクリックしてください。
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="拒否"/>
+			<button name="Mute" text="ミュート"/>
+		</form>
+	</notification>
+	<notification name="AutoUnmuteByIM">
+		[FIRST] [LAST]に
+インスタント・メッセージが送信され、無視設定は自動的に解除されました。
+	</notification>
+	<notification name="AutoUnmuteByMoney">
+		[FIRST] [LAST]にお金を渡したため、 無視設定が自動的に解除されました。
+	</notification>
+	<notification name="AutoUnmuteByInventory">
+		[FIRST] [LAST]に持ち物を渡したため、 無視設定が自動的に解除されました。
+	</notification>
+	<notification name="VoiceInviteGroup">
+		[NAME]が、 グループ[GROUP]とのボイスチャットコールに参加しました。
+コールに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。このコールをしている人をミュートにする場合は「ミュート」をクリックしてください。
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="拒否"/>
+			<button name="Mute" text="ミュート"/>
+		</form>
+	</notification>
+	<notification name="VoiceInviteAdHoc">
+		[NAME]が、 会議チャットでボイスチャットコールに参加しました。
+コールに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。 このユーザーをミュート(消声)する場合は「ミュート」をクリックしてください。
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="拒否"/>
+			<button name="Mute" text="ミュート"/>
+		</form>
+	</notification>
+	<notification name="InviteAdHoc">
+		[NAME]が、 あなたを会議チャットに招待しています。
+チャットに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。このユーザーをミュート(消声)する場合は「ミュート」をクリックしてください。
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="拒否"/>
+			<button name="Mute" text="ミュート"/>
+		</form>
+	</notification>
+	<notification name="VoiceChannelFull">
+		あなたが参加しようとしているボイスコール[VOICE_CHANNEL_NAME]は、参加者が最大限に達しました。後でもう一度お試しください。
+	</notification>
+	<notification name="ProximalVoiceChannelFull">
+		このエリアのボイスチャットは、混雑のため容量を超えてしまっています。申し訳ありませんが、他のエリアでボイスチャットをお試しください。
+	</notification>
+	<notification name="VoiceChannelDisconnected">
+		[VOICE_CHANNEL_NAME]への接続が切断されました。空間ボイスチャットに再接続されます。
+	</notification>
+	<notification name="VoiceChannelDisconnectedP2P">
+		[VOICE_CHANNEL_NAME]は、コールを終了しました。空間ボイスチャットに再接続されます。
+	</notification>
+	<notification name="P2PCallDeclined">
+		[VOICE_CHANNEL_NAME]は、あなたのコールを拒否しました。空間ボイスチャットに再接続されます。
+	</notification>
+	<notification name="P2PCallNoAnswer">
+		[VOICE_CHANNEL_NAME]は、あなたのコールを受け取れません。空間ボイスチャットに再接続されます。
+	</notification>
+	<notification name="VoiceChannelJoinFailed">
+		[VOICE_CHANNEL_NAME]への接続に失敗しました。時間をおいて、再度、試みてください。空間ボイスチャットに再接続されます。
+	</notification>
+	<notification name="VoiceLoginRetry">
+		あなた用のボイスチャンネルを作成しています。1分ほどかかります。
+	</notification>
+	<notification name="Cannot enter parcel: not a group member">
+		特定のグループメンバーのみこのエリアを訪問することができます。
+	</notification>
+	<notification name="Cannot enter parcel: banned">
+		立入禁止されているため、区画に入ることができません。
+	</notification>
+	<notification name="Cannot enter parcel: not on access list">
+		アクセス・リストに含まれていないため、区画に入ることができません。
+	</notification>
+	<notification name="VoiceNotAllowed">
+		あなたには[VOICE_CHANNEL_NAME]のボイス・チャットに接続する権限がありません。
+	</notification>
+	<notification name="VoiceCallGenericError">
+		[VOICE_CHANNEL_NAME]のボイス・チャットに接続中に、エラーが発生しました。後でもう一度お試しください。
+	</notification>
+	<notification name="ServerVersionChanged">
+		異なるサーバーバージョンのリージョンに来ました。パフォーマンスに影響があるかもしれません。 クリックしてリリースノートを確認してみてください。
+	</notification>
+	<notification name="UnsupportedCommandSLURL">
+		クリックした SLurl はサポートされていません。
+	</notification>
+	<notification name="IMToast">
+		<form name="form">
+			<button name="respondbutton" text="返答"/>
+		</form>
+	</notification>
+	<notification name="AttachmentSaved">
+		付属物(アタッチメント)が保存されました。
+	</notification>
+	<notification name="UnableToFindHelpTopic">
+		ヘルプトピックが見つかりませんでした。
+	</notification>
+	<global name="UnsupportedCPU">
+		- あなたの CPU の速度は必須動作環境の条件を満たしていません。
+	</global>
+	<global name="UnsupportedGLRequirements">
+		[APP_NAME] に必要なハードウェアがないようです。 [APP_NAME] にはマルチテクスチャをサポートする OpenGL グラフィックカードが必要です。 お使いのグラフィックカードの最新ドライバがインストールされているかどうか、オペレーティングシステムのサービスパックとパッチが入っているかをご確認ください。
+
+この問題が何度も起きる場合は、[SUPPORT_SITE] へご連絡ください。
+	</global>
+	<global name="UnsupportedCPUAmount">
+		796
+	</global>
+	<global name="UnsupportedRAMAmount">
+		510
+	</global>
+	<global name="UnsupportedGPU">
+		- あなたのグラフィック・カードは必須動作環境の条件を満たしていません。
+	</global>
+	<global name="UnsupportedRAM">
+		- あなたのシステム・メモリは必須動作環境の条件を満たしていません。
+	</global>
+	<global name="PermYes">
+		はい
+	</global>
+	<global name="PermNo">
+		いいえ
+	</global>
+	<global name="You can only set your &apos;Home Location&apos; on your land or at a mainland Infohub.">
+		自分の土地をお持ちの場合、ホームロケーションに設定できます。 
+お持ちでない場合は、地図で「インフォハブ」を探してください。
+	</global>
+</notifications>
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
index 2cf8456187f..75bf6ac7b67 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
@@ -1,45 +1,38 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
-   <string name="CaptionTextAcctInfo">
-       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
-   </string>
-   <string name="AcctTypeResident"
-    value="住人" />
-   <string name="AcctTypeTrial"
-    value="トライアル" />
-   <string name="AcctTypeCharterMember"
-    value="特権メンバー" />
-   <string name="AcctTypeEmployee"
-    value="Linden Lab従業員" />
-   <string name="PaymentInfoUsed"
-    value="支払い情報登録済" />
-   <string name="PaymentInfoOnFile"
-    value="支払い情報登録済み" />
-   <string name="NoPaymentInfoOnFile"
-    value="支払い情報未登録" />
-   <string name="AgeVerified"
-    value="年齢確認済み" />
-   <string name="NotAgeVerified"
-    value="年齢未確認" />
-   <string name="partner_edit_link_url">
-       http://www.secondlife.com/account/partners.php?lang=ja
-   </string>
-    <panel name="scroll_content_panel">
-    <panel name="data_panel" >
-     <panel name="lifes_images_panel">
-          <panel name="second_life_image_panel">
-              <text name="second_life_photo_title_text">
-			[SECOND_LIFE]:
-              </text>
-          </panel>
-      </panel>
-        <text name="title_partner_text" value="パートナー:"/>
-        <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
-         </panel>
-      <text name="text_box3">
-	取り込み中応答メッセージ:
-      </text>
-    </panel>
-    </panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profile Edit" name="edit_profile_panel">
+	<string name="CaptionTextAcctInfo">
+		[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+	</string>
+	<string name="AcctTypeResident" value="住人"/>
+	<string name="AcctTypeTrial" value="トライアル"/>
+	<string name="AcctTypeCharterMember" value="特権メンバー"/>
+	<string name="AcctTypeEmployee" value="Linden Lab従業員"/>
+	<string name="PaymentInfoUsed" value="支払い情報登録済"/>
+	<string name="PaymentInfoOnFile" value="支払い情報登録済み"/>
+	<string name="NoPaymentInfoOnFile" value="支払い情報未登録"/>
+	<string name="AgeVerified" value="年齢確認済み"/>
+	<string name="NotAgeVerified" value="年齢未確認"/>
+	<string name="partner_edit_link_url">
+		http://www.secondlife.com/account/partners.php?lang=ja
+	</string>
+	<string name="no_partner_text" value="なし"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<panel name="data_panel">
+				<panel name="lifes_images_panel">
+					<icon label="" name="2nd_life_edit_icon" tool_tip="クリックして画像を選択"/>
+				</panel>
+				<icon label="" name="real_world_edit_icon" tool_tip="クリックして画像を選択"/>
+				<text name="title_homepage_text">
+					Web サイト:
+				</text>
+				<check_box label="検索結果に表示" name="show_in_search_checkbox"/>
+				<text name="title_acc_status_text" value="アカウントの状態:"/>
+			</panel>
+		</panel>
+	</scroll_container>
+	<panel name="profile_me_buttons_panel">
+		<button label="変更を保存" name="save_btn"/>
+		<button label="キャンセル" name="cancel_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_invite.xml b/indra/newview/skins/default/xui/ja/panel_group_invite.xml
index 14009f29722..586eb4e6cca 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_invite.xml
@@ -1,30 +1,30 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="メンバーを招待" name="invite_panel">
-	<text name="help_text" font="SansSerifSmall" height="72" bottom_delta="-96">
-		あなたのグループに一度に複数の
-住人を招待することができます。
-「リストから住人を選択」
-をクリックしてください。
-	</text>
-	<button bottom_delta="-10" label="リストから住人を選択" name="add_button" tool_tip=""/>
-	<name_list name="invitee_list" height="156" bottom_delta="-160"
-	     tool_tip="複数の住人を選択するには、Ctrlキーを押しながら住人名をクリックします。" />
-	<button label="リストから選択したものを削除" name="remove_button"
-	     tool_tip="上で選択した居住者を招待リストから削除します。" />
-	<text>
-		割り当て先の役割を選択:
-	</text>
-	<text name="role_text">
-		割り当て先の役割を選択:
-	</text>
-	<combo_box name="role_name"
-	     tool_tip="メンバーに割り当て可能な役割をリストから選択。" />
-	<button label="招待を送信" name="ok_button" />
-	<button label="取り消し" name="cancel_button" />
-	<string name="confirm_invite_owner_str">
-		本当に新しい所有者を招待しますか?この操作は取り消しできません。
-	</string>
-	<text name="loading">
-		(ローディング...)
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="メンバーを招待" name="invite_panel">
+	<panel.string name="confirm_invite_owner_str">
+		本当に新しい所有者を招待しますか?この操作は取り消しできません。
+	</panel.string>
+	<panel.string name="loading">
+		(ローディング...)
+	</panel.string>
+	<panel.string name="already_in_group">
+		何人かのアバターは既にグループに入っているため招待されませんでした。
+	</panel.string>
+	<text bottom_delta="-96" font="SansSerifSmall" height="72" name="help_text">
+		あなたのグループに一度に複数の
+住人を招待することができます。
+「リストから住人を選択」
+をクリックしてください。
+	</text>
+	<button bottom_delta="-10" label="リストから住人を選択" name="add_button" tool_tip=""/>
+	<name_list bottom_delta="-160" height="156" name="invitee_list" tool_tip="複数の住人を選択するには、Ctrlキーを押しながら住人名をクリックします。"/>
+	<button label="リストから選択したものを削除" name="remove_button" tool_tip="上で選択した居住者を招待リストから削除します。"/>
+	<text name="role_text">
+		割り当て先の役割を選択:
+	</text>
+	<combo_box name="role_name" tool_tip="メンバーに割り当て可能な役割をリストから選択。"/>
+	<button label="招待を送信" name="ok_button"/>
+	<button label="取り消し" name="cancel_button"/>
+	<string name="GroupInvitation">
+		グループへの招待
+	</string>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
index 595d315cf9c..66662ec87a4 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
@@ -1,85 +1,85 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="土地とL$" name="land_money_tab">
-	<string name="help_text">
-		グループ所有地一覧は、寄付に関する詳細と一緒に表示されています。 「土地利用の合計」が「寄付総額」以下、または同じになるまで警告が表示されます。 「計画」、「詳細」、「販売」タブにはグループの資金に関する情報が掲載されています。
-	</string>
-	<button label="?" name="help_button"/>
-	<string name="cant_view_group_land_text">
-		あなたはグループ所有の土地表示を許されていません。
-	</string>
-	<string name="cant_view_group_accounting_text">
-		あなたはグループの会計情報の表示を許されていません。
-	</string>
-	<string name="loading_txt">
-		ロード中...
-	</string>
-	<text name="group_land_heading">
-		グループの保有地
-	</text>
-	<scroll_list name="group_parcel_list">
-		<column label="区画名" name="name"/>
-		<column label="地域(リージョン)" name="location"/>
-		<column label="種類" name="type"/>
-		<column label="面積" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="地図上に表示" label_selected="地図上に表示" name="map_button"/>
-	<text name="total_contributed_land_label">
-		寄付総額:
-	</text>
-	<text name="total_contributed_land_value" width="150">
-		[AREA]平方メートル
-	</text>
-	<text name="total_land_in_use_label">
-		土地利用の合計:
-	</text>
-	<text name="total_land_in_use_value" width="150">
-		[AREA]平方メートル
-	</text>
-	<text name="land_available_label">
-		利用可の土地:
-	</text>
-	<text name="land_available_value" width="150">
-		[AREA]平方メートル
-	</text>
-	<text name="your_contribution_label">
-		あなたの貢献:
-	</text>
-	<string name="land_contrib_error">
-		土地の出資設定を行うことができませんでした。
-	</string>
-	<text name="your_contribution_units">
-		(平方メートル)
-	</text>
-	<text name="your_contribution_max_value">
-		([AMOUNT]最大)
-	</text>
-	<text name="group_over_limit_text">
-		使用中の土地をサポートするには、グループ・メンバーがさらに多
-くの土地クレジットを提供する必要があります。
-	</text>
-	<text name="group_money_heading">
-		グループL$
-	</text>
-	<tab_container name="group_money_tab_container">
-		<panel label="計画" name="group_money_planning_tab">
-			<text_editor name="group_money_planning_text">
-				計算中...
-			</text_editor>
-		</panel>
-		<panel label="詳細" name="group_money_details_tab">
-			<text_editor name="group_money_details_text">
-				計算中…
-			</text_editor>
-			<button label="前の週" label_selected="前の週" name="earlier_details_button" tool_tip="前の週の履歴"/>
-			<button label="次の週" label_selected="次の週" name="later_details_button" tool_tip="次の週の履歴"/>
-		</panel>
-		<panel label="販売" name="group_money_sales_tab">
-			<text_editor name="group_money_sales_text">
-				計算中…
-			</text_editor>
-			<button label="前の週" label_selected="前の週" name="earlier_sales_button" tool_tip="前の週の履歴"/>
-			<button label="次の週" label_selected="次の週" name="later_sales_button" tool_tip="次の週の履歴"/>
-		</panel>
-	</tab_container>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="土地とL$" name="land_money_tab">
+	<string name="help_text">
+		グループ所有地一覧は、寄付に関する詳細と一緒に表示されています。 「土地利用の合計」が「寄付総額」以下、または同じになるまで警告が表示されます。 「計画」、「詳細」、「販売」タブにはグループの資金に関する情報が掲載されています。
+	</string>
+	<button label="?" name="help_button"/>
+	<string name="cant_view_group_land_text">
+		あなたはグループ所有の土地表示を許されていません。
+	</string>
+	<string name="cant_view_group_accounting_text">
+		あなたはグループの会計情報の表示を許されていません。
+	</string>
+	<string name="loading_txt">
+		ロード中...
+	</string>
+	<text name="group_land_heading">
+		グループの保有地
+	</text>
+	<scroll_list name="group_parcel_list">
+		<column label="区画" name="name"/>
+		<column label="地域(リージョン)" name="location"/>
+		<column label="種類" name="type"/>
+		<column label="面積" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="地図" label_selected="地図" name="map_button"/>
+	<text name="total_contributed_land_label">
+		寄付総額:
+	</text>
+	<text name="total_contributed_land_value" width="150">
+		[AREA]平方メートル
+	</text>
+	<text name="total_land_in_use_label">
+		土地利用の合計:
+	</text>
+	<text name="total_land_in_use_value" width="150">
+		[AREA]平方メートル
+	</text>
+	<text name="land_available_label">
+		利用可の土地:
+	</text>
+	<text name="land_available_value" width="150">
+		[AREA]平方メートル
+	</text>
+	<text name="your_contribution_label">
+		あなたの貢献:
+	</text>
+	<string name="land_contrib_error">
+		土地の出資設定を行うことができませんでした。
+	</string>
+	<text name="your_contribution_units">
+		(平方メートル)
+	</text>
+	<text name="your_contribution_max_value">
+		([AMOUNT]最大)
+	</text>
+	<text name="group_over_limit_text">
+		使用中の土地をサポートするには、グループ・メンバーがさらに多
+くの土地クレジットを提供する必要があります。
+	</text>
+	<text name="group_money_heading">
+		グループL$
+	</text>
+	<tab_container name="group_money_tab_container">
+		<panel label="計画" name="group_money_planning_tab">
+			<text_editor name="group_money_planning_text">
+				計算中...
+			</text_editor>
+		</panel>
+		<panel label="詳細" name="group_money_details_tab">
+			<text_editor name="group_money_details_text">
+				計算中…
+			</text_editor>
+			<button label="前の週" label_selected="前の週" name="earlier_details_button" tool_tip="前の週の履歴"/>
+			<button label="次の週" label_selected="次の週" name="later_details_button" tool_tip="次の週の履歴"/>
+		</panel>
+		<panel label="販売" name="group_money_sales_tab">
+			<text_editor name="group_money_sales_text">
+				計算中…
+			</text_editor>
+			<button label="前の週" label_selected="前の週" name="earlier_sales_button" tool_tip="前の週の履歴"/>
+			<button label="次の週" label_selected="次の週" name="later_sales_button" tool_tip="次の週の履歴"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_list_item.xml b/indra/newview/skins/default/xui/ja/panel_group_list_item.xml
new file mode 100644
index 00000000000..02ada7e6e58
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_group_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="group_list_item">
+	<text name="group_name" value="不明"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_notices.xml b/indra/newview/skins/default/xui/ja/panel_group_notices.xml
index afca4c4dfd2..382fd02d5fd 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_notices.xml
@@ -1,66 +1,66 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="通知" name="notices_tab">
-	<string name="help_text">
-		通知機能を使うと、グループ内ですばやく情報を伝達できます。
-複数のあて先にメッセージを送信できるほか、
-必要に応じてアイテムをメッセージに添付することもできます。 
-通知は、受信アビリティがある役割のグループ・メンバーにのみ配信されます。
-通知をオフにするには、一般タブを使います。
-	</string>
-	<string name="no_notices_text">
-		過去の通知はありません。
-	</string>
-	<button label="?" label_selected="?" name="help_button"/>
-	<text name="lbl">
-		グループ通知アーカイブ
-	</text>
-	<text name="lbl2">
-		通知は14日間保存されます。ただし、各グループの通知リストは1日あたり200通に制限されます。
-	</text>
-	<scroll_list name="notice_list">
-		<column label="" name="icon"/>
-		<column label="件名" name="subject"/>
-		<column label="送り主" name="from"/>
-		<column label="日付" name="date"/>
-	</scroll_list>
-	<text name="notice_list_none_found">
-		何も見つかりませんでした。
-	</text>
-	<button label="新しい通知を作成" label_selected="新しい通知を作成" name="create_new_notice"/>
-	<button label="更新" label_selected="リスト更新" name="refresh_notices"/>
-	<panel label="新しい通知を作成" name="panel_create_new_notice">
-		<text name="lbl">
-			通知を作成
-		</text>
-		<text name="lbl2">
-			持ち物のアイテムを1つこのパネルにドラッグして、通知に添付することができます。 添付できるのはコピー、譲渡が可能なアイテムで、フォルダを送ることはできません。
-		</text>
-		<text name="lbl3">
-			件名:
-		</text>
-		<text name="lbl4">
-			メッセージ:
-		</text>
-		<text name="lbl5">
-			添付:
-		</text>
-		<button label="添付物を削除" label_selected="添付物を削除" name="remove_attachment"/>
-		<button label="通知を送信" label_selected="通知を送信" name="send_notice"/>
-		<panel name="drop_target" tool_tip="持ち物からアイテムをメッセージ欄にドラッグしてください。通知と一緒に送信されます。送信するにはコピー、譲渡が可能なオブジェクトである必要があります。"/>
-	</panel>
-	<panel label="過去の通知を表示" name="panel_view_past_notice">
-		<text name="lbl">
-			アーカイブ通知
-		</text>
-		<text name="lbl2">
-			新しい通知の送信は、上の[新しい通知を作成する]をクリックしてください。
-		</text>
-		<text name="lbl3">
-			件名:
-		</text>
-		<text name="lbl4">
-			メッセージ:
-		</text>
-		<button label="添付物を開く" label_selected="添付物を開く" name="open_attachment"/>
-	</panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="通知" name="notices_tab">
+	<string name="help_text">
+		通知機能を使うと、グループ内ですばやく情報を伝達できます。
+複数のあて先にメッセージを送信できるほか、
+必要に応じてアイテムをメッセージに添付することもできます。 
+通知は、受信アビリティがある役割のグループ・メンバーにのみ配信されます。
+通知をオフにするには、一般タブを使います。
+	</string>
+	<string name="no_notices_text">
+		過去の通知はありません。
+	</string>
+	<button label="?" label_selected="?" name="help_button"/>
+	<text name="lbl">
+		グループ通知アーカイブ
+	</text>
+	<text name="lbl2">
+		通知は 14 日間保存されます。 通知リストは 1 つのグループにつき、1 日最大 200件 に制限されます。
+	</text>
+	<scroll_list name="notice_list">
+		<column label="" name="icon"/>
+		<column label="件名" name="subject"/>
+		<column label="送り主" name="from"/>
+		<column label="日付" name="date"/>
+	</scroll_list>
+	<text name="notice_list_none_found">
+		何も見つかりませんでした。
+	</text>
+	<button label="新しい通知" label_selected="新しい通知を作成" name="create_new_notice"/>
+	<button label="更新" label_selected="リスト更新" name="refresh_notices"/>
+	<panel label="新しい通知を作成" name="panel_create_new_notice">
+		<text name="lbl">
+			通知を作成
+		</text>
+		<text name="lbl2">
+			持ち物からこのパネルにアイテムを 1 つドラッグして添付できます。 添付するアイテムはコピーと再販・プレゼントが可能でなければなりません。また、フォルダは送れません。
+		</text>
+		<text name="lbl3">
+			件名:
+		</text>
+		<text name="lbl4">
+			メッセージ:
+		</text>
+		<text name="lbl5">
+			添付:
+		</text>
+		<button label="添付物を削除" label_selected="添付物を削除" name="remove_attachment"/>
+		<button label="送信" label_selected="通知を送信" name="send_notice"/>
+		<panel name="drop_target" tool_tip="持ち物からアイテムをメッセージ欄にドラッグしてください。通知と一緒に送信されます。送信するにはコピー、譲渡が可能なオブジェクトである必要があります。"/>
+	</panel>
+	<panel label="過去の通知を表示" name="panel_view_past_notice">
+		<text name="lbl">
+			アーカイブ通知
+		</text>
+		<text name="lbl2">
+			新しい通知の送信は、上の[新しい通知を作成する]をクリックしてください。
+		</text>
+		<text name="lbl3">
+			件名:
+		</text>
+		<text name="lbl4">
+			メッセージ:
+		</text>
+		<button label="添付物を開く" label_selected="添付物を開く" name="open_attachment"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_roles.xml b/indra/newview/skins/default/xui/ja/panel_group_roles.xml
index 2d39938b530..c7e62635e46 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_roles.xml
@@ -1,157 +1,118 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="メンバーと役割" name="roles_tab">
-	<string name="default_needs_apply_text">
-		現在のサブタブに、未適用の変更があります。
-	</string>
-	<string name="want_apply_text">
-		これらの変更を適用しますか?
-	</string>
-	<button label="?" name="help_button"/>
-	<panel name="members_header">
-		<text name="static">
-			メンバーと役割
-		</text>
-		<text name="static2">
-			グループ・メンバーには、役割と能力が割り当てられます。 この設定は、
-組織の規模に応じて柔軟かつ容易にカスタマイズできます。
-		</text>
-	</panel>
-	<panel name="roles_header">
-		<text name="static">
-			役割
-		</text>
-		<text name="role_properties_modifiable">
-			下にある役割を選択してください。  役割の名前、説明、メンバー・タイトルを修正することができます。
-		</text>
-		<text name="role_properties_not_modifiable">
-			役割名を選択すると、説明、メンバー、能力を確認することができます。
-		</text>
-		<text name="role_actions_modifiable">
-			あなたは役割に能力を割り当てることもできます。
-		</text>
-		<text name="role_actions_not_modifiable">
-			能力の表示はできますが、修正や割り当てなどはできません。
-		</text>
-	</panel>
-	<panel name="actions_header">
-		<text name="static">
-			能力
-		</text>
-		<text name="static2">
-			能力の説明、どの役割とメンバーがその能力を実行できるかを
-表示できます。
-		</text>
-	</panel>
-	<tab_container name="roles_tab_container">
-		<panel label="メンバー" name="members_sub_tab" tool_tip="メンバー">
-			<button label="検索" name="search_button"/>
-			<button label="全てを表示" name="show_all_button"/>
-			<name_list name="member_list">
-				<column label="メンバー名" name="name"/>
-				<column label="寄付されたTier" name="donated"/>
-				<column label="最終ログイン" name="online"/>
-			</name_list>
-			<button label="新しいメンバーを招待" name="member_invite"/>
-			<button label="グループから追放" name="member_eject"/>
-			<string name="help_text">
-				あなたはメンバーに割り当てられた役割を付加、削除できます。
-Ctrl キーを押しながらメンバー名をクリックすると
-複数の人を選択できます。
-			</string>
-		</panel>
-		<panel label="役割" name="roles_sub_tab">
-			<button label="検索" name="search_button"/>
-			<button label="すべてを表示" name="show_all_button"/>
-			<scroll_list name="role_list">
-				<column label="役割名" name="name"/>
-				<column label="肩書き" name="title"/>
-				<column label="メンバー" name="members"/>
-			</scroll_list>
-			<button label="新しい役割を作成..." name="role_create"/>
-			<button label="役割を削除" name="role_delete"/>
-			<string name="help_text">
-				役割にはタイトルがあり、メンバーが行使可能な
-能力のリストが定義されます。 メンバーは、
-1つまたは複数の役割に属することができます。 1つのグループに対し、
-「全員」と「オーナー」の役割を含めて最高で10の役割を持たせることができます。
-			</string>
-			<string name="cant_delete_role">
-				「全員」と「オーナー」は特別な役割なので、削除できません。
-			</string>
-		</panel>
-		<panel label="能力" name="actions_sub_tab">
-			<button label="検索" name="search_button"/>
-			<button label="すべてを表示" name="show_all_button"/>
-			<scroll_list name="action_list" tool_tip="能力を選択して詳細を表示します。">
-				<column label="" name="icon"/>
-				<column label="" name="action"/>
-			</scroll_list>
-			<string name="help_text">
-				このグループ内で役割を与えられているメンバーが実行できる操作は、
-能力によって決まります。 さまざまな能力が用意されています。
-			</string>
-		</panel>
-	</tab_container>
-	<panel name="members_footer">
-		<text name="static">
-			割当られた役割
-		</text>
-		<text name="static2">
-			許可された能力
-		</text>
-		<scroll_list name="member_assigned_roles">
-			<column label="" name="checkbox"/>
-			<column label="" name="role"/>
-		</scroll_list>
-		<scroll_list name="member_allowed_actions" tool_tip="許可された能力の詳細は「能力」タブをご覧ください。">
-			<column label="" name="icon"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="roles_footer">
-		<text name="static">
-			名前
-		</text>
-		<text name="static2">
-			説明
-		</text>
-		<line_editor name="role_name">
-			従業員
-		</line_editor>
-		<text name="static3">
-			肩書き
-		</text>
-		<line_editor name="role_title">
-			(待機中)
-		</line_editor>
-		<text_editor name="role_description">
-			(待機中)
-		</text_editor>
-		<text name="static4">
-			割当られたメンバー
-		</text>
-		<text name="static5" tool_tip="現在選択されている役割で実行できる能力のリスト">
-			許可された能力
-		</text>
-		<check_box label="メンバーが公開状態" name="role_visible_in_list" tool_tip="この役割のメンバーをグループ外の人の一般タブに表示するかどうかを設定します。"/>
-		<scroll_list name="role_allowed_actions" tool_tip="許可された能力の詳細は「能力」タブをご覧ください。">
-			<column label="" name="icon"/>
-			<column label="" name="checkbox"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="actions_footer">
-		<text name="static">
-			説明
-		</text>
-		<text_editor name="action_description">
-			これは「グループからメンバーを追放する」能力です。 オーナーを追放できるのは、別のオーナーだけです。
-		</text_editor>
-		<text name="static2">
-			役割と能力
-		</text>
-		<text name="static3">
-			能力のあるメンバー
-		</text>
-	</panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="メンバーと役割" name="roles_tab">
+	<panel.string name="default_needs_apply_text">
+		現在のサブタブに、未適用の変更があります。
+	</panel.string>
+	<panel.string name="want_apply_text">
+		これらの変更を適用しますか?
+	</panel.string>
+	<tab_container name="roles_tab_container">
+		<panel label="メンバー" name="members_sub_tab" tool_tip="メンバー">
+			<panel.string name="help_text">
+				あなたはメンバーに割り当てられた役割を付加、削除できます。
+Ctrl キーを押しながらメンバー名をクリックすると
+複数の人を選択できます。
+			</panel.string>
+			<filter_editor label="メンバーを選別" name="filter_input"/>
+			<name_list name="member_list">
+				<name_list.columns label="メンバー" name="name"/>
+				<name_list.columns label="寄付" name="donated"/>
+				<name_list.columns label="オンライン" name="online"/>
+			</name_list>
+			<button label="招待" name="member_invite"/>
+			<button label="追放" name="member_eject"/>
+		</panel>
+		<panel label="役割" name="roles_sub_tab">
+			<panel.string name="help_text">
+				役割にはタイトルがあり、メンバーが行使可能な
+能力のリストが定義されます。 メンバーは、
+1つまたは複数の役割に属することができます。 1つのグループに対し、
+「全員」と「オーナー」の役割を含めて最高で10の役割を持たせることができます。
+			</panel.string>
+			<panel.string name="cant_delete_role">
+				「全員」と「オーナー」は特別な役割なので、削除できません。
+			</panel.string>
+			<filter_editor label="役割を選別" name="filter_input"/>
+			<scroll_list name="role_list">
+				<scroll_list.columns label="役割" name="name"/>
+				<scroll_list.columns label="肩書き" name="title"/>
+				<scroll_list.columns label="メンバー" name="members"/>
+			</scroll_list>
+			<button label="役割を追加" name="role_create"/>
+			<button label="役割を削除" name="role_delete"/>
+		</panel>
+		<panel label="能力" name="actions_sub_tab" tool_tip="能力の説明文には、どの役割・メンバーがその能力を持つかが書かれています。">
+			<panel.string name="help_text">
+				このグループ内で役割を与えられているメンバーが実行できる操作は、
+能力によって決まります。 さまざまな能力が用意されています。
+			</panel.string>
+			<filter_editor label="能力を選別" name="filter_input"/>
+			<scroll_list name="action_list" tool_tip="能力を選択して詳細を表示します。">
+				<scroll_list.columns label="" name="icon"/>
+				<scroll_list.columns label="" name="action"/>
+			</scroll_list>
+		</panel>
+	</tab_container>
+	<panel name="members_footer">
+		<text name="static">
+			割当られた役割
+		</text>
+		<scroll_list name="member_assigned_roles">
+			<scroll_list.columns label="" name="checkbox"/>
+			<scroll_list.columns label="" name="role"/>
+		</scroll_list>
+		<text name="static2">
+			許可された能力
+		</text>
+		<scroll_list name="member_allowed_actions" tool_tip="許可された能力の詳細は「能力」タブをご覧ください。">
+			<scroll_list.columns label="" name="icon"/>
+			<scroll_list.columns label="" name="action"/>
+		</scroll_list>
+	</panel>
+	<panel name="roles_footer">
+		<text name="static">
+			名前
+		</text>
+		<line_editor name="role_name">
+			従業員
+		</line_editor>
+		<text name="static3">
+			肩書き
+		</text>
+		<line_editor name="role_title">
+			(待機中)
+		</line_editor>
+		<text name="static2">
+			説明
+		</text>
+		<text_editor name="role_description">
+			(待機中)
+		</text_editor>
+		<text name="static4">
+			割当られたメンバー
+		</text>
+		<check_box label="メンバーが公開状態" name="role_visible_in_list" tool_tip="この役割のメンバーをグループ外の人の一般タブに表示するかどうかを設定します。"/>
+		<text name="static5" tool_tip="現在選択されている役割で実行できる能力のリスト">
+			許可された能力
+		</text>
+		<scroll_list name="role_allowed_actions" tool_tip="許可された能力の詳細は「能力」タブをご覧ください。">
+			<scroll_list.columns label="" name="icon"/>
+			<scroll_list.columns label="" name="checkbox"/>
+			<scroll_list.columns label="" name="action"/>
+		</scroll_list>
+	</panel>
+	<panel name="actions_footer">
+		<text name="static">
+			説明
+		</text>
+		<text_editor name="action_description">
+			これは「グループからメンバーを追放する」能力です。 オーナーを追放できるのは、別のオーナーだけです。
+		</text_editor>
+		<text name="static2">
+			役割と能力
+		</text>
+		<text name="static3">
+			能力のあるメンバー
+		</text>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml
new file mode 100644
index 00000000000..4182ca506fb
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<button label="プロフィールの表示" name="view_profile_btn"/>
+	<button label="フレンドを追加" name="add_friend_btn"/>
+	<button label="共有" name="share_btn"/>
+	<panel name="panel_call_buttons">
+		<button label="コール" name="call_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml
index 0f270beb2c5..d55a78297c8 100644
--- a/indra/newview/skins/default/xui/ja/panel_login.xml
+++ b/indra/newview/skins/default/xui/ja/panel_login.xml
@@ -1,45 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="panel_login">
-	<text name="first_name_text" left="20">
-		ファーストネーム:
-	</text>
-	<line_editor left="20" name="first_name_edit" width="126" />
-	<text name="last_name_text" left="158">
-		ラストネーム:
-	</text>
-	<line_editor left="158" name="last_name_edit" width="126" />
-	<text name="password_text">
-		パスワード:
-	</text>
-	<text name="start_location_text" left="20" >
-		ログイン位置:
-	</text>
-	<combo_box name="start_location_combo" left_delta="92" width="172">
-		<combo_box.item name="MyHome" label="自宅(ホーム)" />
-		<combo_box.item name="MyLastLocation" label="最後にログアウトした場所" />
-		<combo_box.item name="Typeregionname" label="&lt; 地域の名前入力 &gt;" />
-	</combo_box>
-	<check_box label="パスワードを記憶" name="remember_check" left_delta="180"/>
-	<text name="full_screen_text">
-		ログイン時にはフルスクリーン表示になります
-	</text>
-	<button label="新規アカウント..." label_selected="新規アカウント..." name="new_account_btn"/>
-	<button label="環境設定..." label_selected="環境設定..." name="preferences_btn"/>
-	<button label="ログイン" label_selected="ログイン" name="connect_btn"/>
-	<button label="終了" label_selected="終了" name="quit_btn"/>
-	<text name="version_text">
-		1.23.4 (5)
-	</text>
-	<text name="create_new_account_text">
-		アカウントを申し込む
-	</text>
-	<text name="channel_text">
-		[VERSION]
-	</text>
-	<text name="forgot_password_text" left="-230" width="220">
-		名前またはパスワードをお忘れですか?
-	</text>
-	<text name="forgot_password_url">
-		http://secondlife.com/account/request.php
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+	<panel.string name="create_account_url">
+		http://jp.secondlife.com/registration/
+	</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php
+	</panel.string>
+	<panel name="login_widgets">
+		<line_editor name="first_name_edit" tool_tip="[SECOND_LIFE] ファーストネーム"/>
+		<line_editor name="last_name_edit" tool_tip="[SECOND_LIFE] ラストネーム"/>
+		<text name="start_location_text">
+			開始位置:
+		</text>
+		<text name="create_new_account_text">
+			新規アカウントを作成
+		</text>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml
new file mode 100644
index 00000000000..159a63cd408
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="chat_bar">
+	<line_editor label="ここをクリックしてチャットを開始します。" name="chat_box" tool_tip="エンターを押して発言、Ctrl+エンターで叫ぶ。"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_pick_info.xml b/indra/newview/skins/default/xui/ja/panel_pick_info.xml
new file mode 100644
index 00000000000..711a4cf47a3
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_pick_info.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_pick_info">
+	<text name="title" value="ピックの情報"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<text name="pick_name" value="[name]"/>
+			<text name="pick_location" value="[loading...]"/>
+			<text name="pick_desc" value="[description]"/>
+		</panel>
+	</scroll_container>
+	<panel name="buttons">
+		<button label="テレポート" name="teleport_btn"/>
+		<button label="地図" name="show_on_map_btn"/>
+		<button label="編集" name="edit_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_picks.xml b/indra/newview/skins/default/xui/ja/panel_picks.xml
new file mode 100644
index 00000000000..6a391957e99
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_picks.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="ピック" name="panel_picks">
+	<panel label="bottom_panel" name="edit_panel">
+		<button name="new_btn" tool_tip="現在地を新規ピックに追加"/>
+	</panel>
+	<panel name="buttons_cucks">
+		<button label="地図" name="show_on_map_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
index 3bf303eaa30..88e10aa832e 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
@@ -1,57 +1,42 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="チャット" name="chat">
-	<text name="text_box">
-		チャットのフォント:
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item name="radio" label="小" />
-		<radio_item name="radio2" label="中" />
-		<radio_item name="radio3" label="大" />
-	</radio_group>
-	<color_swatch label="自分" name="user"/>
-	<text name="text_box1">
-		自分
-	</text>
-	<color_swatch label="その他" name="agent"/>
-	<text name="text_box2">
-		その他
-	</text>
-	<color_swatch label="IM" name="im"/>
-	<text name="text_box3">
-		IM
-	</text>
-	<color_swatch label="システム" name="system"/>
-	<text name="text_box4">
-		システム
-	</text>
-	<color_swatch label="エラー" name="script_error"/>
-	<text name="text_box5">
-		エラー
-	</text>
-	<color_swatch label="オブジェクト" name="objects"/>
-	<text name="text_box6">
-		オブジェクト
-	</text>
-	<color_swatch label="所有者" name="owner"/>
-	<text name="text_box7">
-		所有者
-	</text>
-	<color_swatch label="吹出し" name="background"/>
-	<text name="text_box8">
-		吹出し
-	</text>
-	<color_swatch label="URL" name="links"/>
-	<text name="text_box9">
-		URL
-	</text>
-	<spinner label="フェード" name="fade_chat_time"/>
-	<slider label="不透明度" name="console_opacity"/>
-	<check_box label="全画面幅を使用 (再起動が必要)" name="chat_full_width_check"/>
-	<check_box label="Enterキーを押した後チャット バーを閉じる" name="close_chat_on_return_check"/>
-	<check_box label="チャット中は、いつでも矢印キーでアバターを移動可能" name="arrow_keys_move_avatar_check"/>
-	<check_box label="ローカルチャットにタイムスタンプを表示" name="show_timestamps_check"/>
-	<check_box label="チャット中はタイピング動作のアニメーションを再生" name="play_typing_animation"/>
-	<check_box label="チャットの吹き出しを表示" name="bubble_text_chat"/>
-	<slider label="不透明度" name="bubble_chat_opacity"/>
-	<check_box label="スクリプト・エラーと警告をチャット同様に表示" name="script_errors_as_chat"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="チャット" name="chat">
+	<radio_group name="chat_font_size">
+		<radio_item label="小" name="radio"/>
+		<radio_item label="中" name="radio2"/>
+		<radio_item label="大" name="radio3"/>
+	</radio_group>
+	<color_swatch label="自分" name="user"/>
+	<text name="text_box1">
+		ミー
+	</text>
+	<color_swatch label="その他" name="agent"/>
+	<text name="text_box2">
+		その他
+	</text>
+	<color_swatch label="IM" name="im"/>
+	<text name="text_box3">
+		IM
+	</text>
+	<color_swatch label="システム" name="system"/>
+	<text name="text_box4">
+		システム
+	</text>
+	<color_swatch label="エラー" name="script_error"/>
+	<text name="text_box5">
+		エラー
+	</text>
+	<color_swatch label="オブジェクト" name="objects"/>
+	<text name="text_box6">
+		オブジェクト
+	</text>
+	<color_swatch label="所有者" name="owner"/>
+	<text name="text_box7">
+		所有者
+	</text>
+	<color_swatch label="URL" name="links"/>
+	<text name="text_box9">
+		URL
+	</text>
+	<check_box initial_value="true" label="チャット中はタイピング動作のアニメーションを再生" name="play_typing_animation"/>
+	<check_box label="オフライン時に受け取った IM をメールで送信" name="send_im_to_email"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
index 636c137b4b6..7c02baedc0a 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
@@ -1,171 +1,116 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="表示" name="Display panel">
-	<text name="text">
-		表示解像度:
-	</text>
-	<button label="?" name="GraphicsPreferencesHelpButton" />
-	<check_box label="ウィンドウ内で Second Life を起動" name="windowed mode" />
-	<text_editor name="voice_chat_description">
-		チェック無しの場合は、ログイン時にフルスクリーン表示
-	</text_editor>
-	<text name="Fullscreen Aspect Ratio:">
-		全画面の縦横比:
-	</text>
-	<text name="(width / height)">
-		(幅/高さ)
-	</text>
-	<text_editor bottom="-56" height="40" name="FullScreenInfo" width="480">
-		チェックされていない場合は、ログインするとビューワがフルスクリーンで表示されます。
-	</text_editor>
-	<text name="WindowSizeLabel">
-		ウィンドウ・サイズ:
-	</text>
-	<combo_box name="windowsize combo">
-		<combo_box.item name="640x480" label="640x480" />
-		<combo_box.item name="800x600" label="800x600" />
-		<combo_box.item name="720x480" label="720x480 (NTSC)" />
-		<combo_box.item name="768x576" label="768x576 (PAL)" />
-		<combo_box.item name="1024x768" label="1024x768" />
-	</combo_box>
-	<text name="DisplayResLabel">
-		表示解像度:
-	</text>
-	<text name="AspectRatioLabel1" tool_tip="(幅/高さ)">
-		縦横比:
-	</text>
-	<combo_box name="aspect_ratio" tool_tip="(幅/高さ)">
-		<combo_box.item name="4:3(StandardCRT)" label="4:3(標準CRT)" />
-		<combo_box.item name="5:4(1280x1024LCD)" label="5:4(1280x1024 LCD)" />
-		<combo_box.item name="8:5(Widescreen)" label="8:5(ワイドスクリ-ン)" />
-		<combo_box.item name="16:9(Widescreen)" label="16:9(ワイドスクリ-ン)" />
-	</combo_box>
-	<check_box label="自動検出率" name="aspect_auto_detect" />
-	<text name="UI Size:">
-		UIサイズ:
-	</text>
-	<text name="(meters, lower is faster)">
-		(メートル、低いほど速い)
-	</text>
-	<text name="text2">
-		表示オプション:
-	</text>
-	<check_box label="解像度単独スケールを使用" name="ui_auto_scale" />
-	<spinner label="描画距離:" name="draw_distance" />
-	<check_box label="アバターを一人称視点(マウスルック)で表示" name="avfp" />
-	<text name="HigherText">
-		品質および
-	</text>
-	<text name="QualityText">
-		パフォーマンス:
-	</text>
-	<text name="FasterText">
-		速い
-	</text>
-	<text name="ShadersPrefText">
-		低
-	</text>
-	<text name="ShadersPrefText2">
-		中
-	</text>
-	<text name="ShadersPrefText3">
-		高
-	</text>
-	<text name="ShadersPrefText4">
-		超高
-	</text>
-	<text name="HigherText2">
-		高い
-	</text>
-	<text name="QualityText2">
-		品質
-	</text>
-	<check_box label="カスタム" name="CustomSettings" />
-	<panel name="CustomGraphics Panel">
-	<text name="ShadersText">
-		シェーダー:
-	</text>
-	<check_box label="バンプ・マッピングと光沢" name="BumpShiny" />
-	<check_box label="基本シェーダー" name="BasicShaders"
-	     tool_tip="このオプションを無効にするとグラフィック・カード・ドライバの種類によってはクラッシュ防止になります。" />
-	<check_box label="周囲(大気)シェーダー" name="WindLightUseAtmosShaders" />
-	<check_box label="水の反射" name="Reflections" />
-	<text name="ReflectionDetailText">
-		反射詳細:
-	</text>
-	<radio_group name="ReflectionDetailRadio">
-		<radio_item name="0" label="地形と樹木" />
-		<radio_item name="1" label="すべての静的オブジェクト" />
-		<radio_item name="2" label="すべてのアバターとオブジェクト" />
-		<radio_item name="3" label="すべて" />
-	</radio_group>
-	<text name="AvatarRenderingText">
-		アバター表示:
-	</text>
-	<check_box label="アバターの精度を下げる" name="AvatarImpostors" />
-	<check_box label="ハードウェア・スキニング" name="AvatarVertexProgram" />
-	<check_box label="アバターの服" name="AvatarCloth" />
-	<text name="DrawDistanceMeterText1">
-		m
-	</text>
-	<text name="DrawDistanceMeterText2">
-		m
-	</text>
-	<slider label="描画距離:" name="DrawDistance" />
-	<slider label="最大パーティクル数:" name="MaxParticleCount" />
-	<slider label="ポストプロセス品質:" name="RenderPostProcess" />
-	<text name="MeshDetailText">
-		メッシュ詳細:
-	</text>
-	<slider label="  オブジェクト:" name="ObjectMeshDetail" />
-	<slider label="  フレキシプリム:" name="FlexibleMeshDetail" />
-	<slider label="  樹木:" name="TreeMeshDetail" />
-	<slider label="  アバター:" name="AvatarMeshDetail" />
-	<slider label="  地形:" name="TerrainMeshDetail" />
-	<slider label="  空:" name="SkyMeshDetail" />
-	<text name="PostProcessText">
-		低
-	</text>
-	<text name="ObjectMeshDetailText">
-		低
-	</text>
-	<text name="FlexibleMeshDetailText">
-		低
-	</text>
-	<text name="TreeMeshDetailText">
-		低
-	</text>
-	<text name="AvatarMeshDetailText">
-		低
-	</text>
-	<text name="TerrainMeshDetailText">
-		低
-	</text>
-	<text name="SkyMeshDetailText">
-		低
-	</text>
-	<text name="LightingDetailText">
-		ライティング詳細:
-	</text>
-	<radio_group name="LightingDetailRadio">
-		<radio_item name="SunMoon" label="太陽と月のみ" />
-		<radio_item name="LocalLights" label="近隣のローカル・ライト" />
-	</radio_group>
-	<text name="TerrainDetailText">
-		地形詳細:
-	</text>
-	<radio_group name="TerrainDetailRadio">
-		<radio_item name="0" label="低" />
-		<radio_item name="2" label="高" />
-	</radio_group>
-	</panel>
-	<button label="推奨された設定" name="Defaults" />
-	<button label="ハードウェア・オプション"
-	     label_selected="ハードウェア・オプション"
-	     name="GraphicsHardwareButton" />
-	<panel.string name="resolution_format">
-		[RES_X] x [RES_Y]
-	</panel.string>
-	<panel.string name="aspect_ratio_text">
-		[NUM]:[DEN]
-	</panel.string>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="表示" name="Display panel">
+	<text name="WindowSizeLabel">
+		ウィンドウ・サイズ:
+	</text>
+	<check_box label="全画面" name="windowed mode"/>
+	<combo_box name="windowsize combo">
+		<combo_box.item label="640x480" name="640x480"/>
+		<combo_box.item label="800x600" name="800x600"/>
+		<combo_box.item label="720x480 (NTSC)" name="720x480"/>
+		<combo_box.item label="768x576 (PAL)" name="768x576"/>
+		<combo_box.item label="1024x768" name="1024x768"/>
+	</combo_box>
+	<text name="UI Size:">
+		UIサイズ:
+	</text>
+	<text name="QualitySpeed">
+		クオリティとスピード:
+	</text>
+	<text name="FasterText">
+		速い
+	</text>
+	<text name="BetterText">
+		速
+	</text>
+	<text name="ShadersPrefText">
+		低
+	</text>
+	<text name="ShadersPrefText2">
+		中
+	</text>
+	<text name="ShadersPrefText3">
+		高
+	</text>
+	<text name="ShadersPrefText4">
+		超高
+	</text>
+	<panel label="CustomGraphics" name="CustomGraphics Panel">
+		<text name="ShadersText">
+			シェーダー:
+		</text>
+		<check_box initial_value="true" label="バンプ・マッピングと光沢" name="BumpShiny"/>
+		<check_box initial_value="true" label="基本シェーダー" name="BasicShaders" tool_tip="このオプションを無効にするとグラフィック・カード・ドライバの種類によってはクラッシュ防止になります。"/>
+		<check_box initial_value="true" label="周囲(大気)シェーダー" name="WindLightUseAtmosShaders"/>
+		<check_box initial_value="true" label="水の反射" name="Reflections"/>
+		<text name="ReflectionDetailText">
+			反射詳細:
+		</text>
+		<radio_group name="ReflectionDetailRadio">
+			<radio_item label="地形と樹木" name="0"/>
+			<radio_item label="すべての静的オブジェクト" name="1"/>
+			<radio_item label="すべてのアバターとオブジェクト" name="2"/>
+			<radio_item label="すべて" name="3"/>
+		</radio_group>
+		<text name="AvatarRenderingText">
+			アバター表示:
+		</text>
+		<check_box initial_value="true" label="アバターの精度を下げる" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="ハードウェア・スキニング" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="アバターの服" name="AvatarCloth"/>
+		<slider label="描画距離:" name="DrawDistance"/>
+		<text name="DrawDistanceMeterText2">
+			m
+		</text>
+		<slider label="最大パーティクル数:" name="MaxParticleCount"/>
+		<slider label="ポストプロセス品質:" name="RenderPostProcess"/>
+		<text name="MeshDetailText">
+			メッシュ詳細:
+		</text>
+		<slider label="  オブジェクト:" name="ObjectMeshDetail"/>
+		<slider label="  フレキシプリム:" name="FlexibleMeshDetail"/>
+		<slider label="  樹木:" name="TreeMeshDetail"/>
+		<slider label="  アバター:" name="AvatarMeshDetail"/>
+		<slider label="  地形:" name="TerrainMeshDetail"/>
+		<slider label="  空:" name="SkyMeshDetail"/>
+		<text name="PostProcessText">
+			低
+		</text>
+		<text name="ObjectMeshDetailText">
+			低
+		</text>
+		<text name="FlexibleMeshDetailText">
+			低
+		</text>
+		<text name="TreeMeshDetailText">
+			低
+		</text>
+		<text name="AvatarMeshDetailText">
+			低
+		</text>
+		<text name="TerrainMeshDetailText">
+			低
+		</text>
+		<text name="SkyMeshDetailText">
+			低
+		</text>
+		<text name="LightingDetailText">
+			ライティング詳細:
+		</text>
+		<radio_group name="LightingDetailRadio">
+			<radio_item label="太陽と月のみ" name="SunMoon"/>
+			<radio_item label="近隣のローカル・ライト" name="LocalLights"/>
+		</radio_group>
+		<text name="TerrainDetailText">
+			地形詳細:
+		</text>
+		<radio_group name="TerrainDetailRadio">
+			<radio_item label="低" name="0"/>
+			<radio_item label="高" name="2"/>
+		</radio_group>
+	</panel>
+	<button label="適用" label_selected="適用" name="Apply"/>
+	<button label="リセット" name="Defaults"/>
+	<button label="詳しい設定" name="Advanced"/>
+	<button label="ハードウェア" label_selected="ハードウェア" name="GraphicsHardwareButton"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
index 20299542fb1..f7b727de6c8 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
@@ -1,32 +1,20 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="チャット設定" name="im">
-	<text name="text_box">
-		オンライン通知:
-	</text>
-	<check_box label="フレンドとグループのみ自分のオンラインを確認可能に" name="online_visibility"/>
-	<text name="text_box2">
-		IMオプション:
-	</text>
-	<text name="log_in_to_change">
-		ログインして変更してください
-	</text>
-	<check_box label="IMを電子メール([EMAIL])へ送信" name="send_im_to_email"/>
-	<check_box label="チャットコンソールにIMを表示する" name="include_im_in_chat_console"/>
-	<check_box label="IMにタイムスタンプを表示" name="show_timestamps_check"/>
-	<check_box label="オンライン・フレンド通知を表示" name="friends_online_notify_checkbox"/>
-	<text name="text_box4">
-		記録オプション:
-	</text>
-	<check_box label="IMログを自分のコンピュータに保存" name="log_instant_messages"/>
-	<check_box label="IMログにタイムスタンプを表示" name="log_instant_messages_timestamp"/>
-	<check_box label="ローカルチャットのログを自分のコンピュータに保存" name="log_chat"/>
-	<check_box label="最後のIMチャットの末尾を表示" name="log_show_history"/>
-	<check_box label="ローカルチャットのログにタイムスタンプを表示" name="log_chat_timestamp"/>
-	<check_box label="ローカルチャットのログに受信IMを表示" name="log_chat_IM"/>
-	<check_box label="タイムスタンプに日付を加える" name="log_date_timestamp"/>
-	<button label="パス変更" label_selected="パス変更" name="log_path_button"/>
-	<text name="text_box3">
-		取り込み中
-応答メッセージ:
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="チャット設定" name="im">
+	<panel.string name="log_in_to_change">
+		ログインして変更してください
+	</panel.string>
+	<button label="履歴の消去" name="clear_cache"/>
+	<text name="cache_size_label_l">
+		(位置、画像、web、検索履歴)
+	</text>
+	<check_box label="フレンドとグループのみオンライン状況の確認可能" name="online_visibility"/>
+	<check_box label="フレンドとグループのみコールとIMの受信可能" name="voice_call_friends_only_check"/>
+	<check_box label="コールが終了したらマイクのスイッチを切る" name="auto_disengage_mic_check"/>
+	<check_box label="Cookieを受け入れる" name="cookies_enabled"/>
+	<check_box label="コンピューターにログを保存" name="log_instant_messages"/>
+	<radio_group name="ChatIMLogs">
+		<radio_item label="チャット" name="radio1"/>
+		<radio_item label="IM" name="radio2"/>
+	</radio_group>
+	<button label="ブラウズ" label_selected="ブラウズ" name="log_path_button"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
index ded6f9df38e..59357a366e1 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
@@ -1,31 +1,46 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="操作とカメラ" name="Input panel">
-	<text name=" Mouselook Options:">
-		一人称視点
-(マウスルック):
-	</text>
-	<text name=" Mouse Sensitivity:">
-		感度:
-	</text>
-	<check_box label="上下を反転" name="invert_mouse"/>
-	<text name=" Auto Fly Options:">
-		自動飛行オプション:
-	</text>
-	<check_box label="上下矢印キーの長押しで飛行/着地" name="automatic_fly"/>
-	<text name=" Camera Options:">
-		カメラ・オプション:
-	</text>
-	<text name="camera_fov_label">
-		カメラ視野角:
-	</text>
-	<text name="Camera Follow Distance:">
-		カメラ追従距離:
-	</text>
-	<check_box label="編集カメラの自動移動" name="edit_camera_movement" tool_tip="編集モードの開始、終了時はカメラ自動位置調整を使用"/>
-	<check_box label="容姿カメラの自動移動" name="appearance_camera_movement" tool_tip="編集モードでは、カメラ自動位置調整を使用"/>
-	<text name="text2">
-		アバター表示:
-	</text>
-	<check_box label="アバターを一人称視点(マウスルック)で表示" name="first_person_avatar_visible"/>
-	<button label="ジョイスティック設定" name="joystick_setup_button"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="操作とカメラ" name="Input panel">
+	<button label="その他のディバイス" name="joystick_setup_button"/>
+	<text name="Mouselook:">
+		一人称視点:
+	</text>
+	<text name=" Mouse Sensitivity">
+		マウスの精度
+	</text>
+	<check_box label="切り替え" name="invert_mouse"/>
+	<text name="Network:">
+		ネットワーク:
+	</text>
+	<text name="Maximum bandwidth">
+		最大帯域幅
+	</text>
+	<text name="text_box2">
+		kbps
+	</text>
+	<check_box label="カスタムポート" name="connection_port_enabled"/>
+	<spinner label="ポート番号:" name="web_proxy_port"/>
+	<text name="cache_size_label_l">
+		キャッシュサイズ
+	</text>
+	<text name="text_box5">
+		MB
+	</text>
+	<button label="ブラウズ" label_selected="ブラウズ" name="set_cache"/>
+	<button label="リセット" label_selected="設定" name="reset_cache"/>
+	<text name="Cache location">
+		キャッシュの場所
+	</text>
+	<text name="Web:">
+		Web:
+	</text>
+	<radio_group name="use_external_browser">
+		<radio_item label="内蔵ブラウザを使用" name="internal" tool_tip="内蔵ブラウザでヘルプやWebリンクなどを見ます。[APP_NAME] 内に新しいウィンドウでこのブラウザが開きます。"/>
+		<radio_item label="外部ブラウザ(IEやFirefox)を使用" name="external" tool_tip="デフォルトのシステムWebブラウザでヘルプやWebリンク先などを見ます。全画面で起動中にはおすすめしません。"/>
+	</radio_group>
+	<check_box initial_value="false" label="Webプロキシ" name="web_proxy_enabled"/>
+	<line_editor name="web_proxy_editor" tool_tip="使用するプロキシ名またはIPアドレス"/>
+	<button label="ブラウズ" label_selected="ブラウズ" name="set_proxy"/>
+	<text name="Proxy location">
+		プロキシ
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
index d8763193ae0..c4bd21a5baf 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
@@ -1,77 +1,72 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="音声とビデオ" name="Preference Media panel">
-	<slider label="マスター" name="System Volume"/>
-	<slider label="風の音量" name="Wind Volume"/>
-	<slider label="サウンド" name="SFX Volume"/>
-	<slider label="メディア" name="Media Volume"/>
-	<slider label="UI" name="UI Volume"/>
-	<slider label="ミュージック" name="Music Volume"/>
-	<slider label="ボイス" name="Voice Volume"/>
-	<text_editor name="voice_unavailable">
-		ボイスチャットを利用できません
-	</text_editor>
-	<check_box label="ボイスチャットを有効にする" name="enable_voice_check"/>
-	<radio_group name="ear_location">
-		<radio_item name="0" label="カメラの位置からボイスチャットを聞く。" />
-		<radio_item name="1" label="アバターの位置からボイスチャットを聞く。" />
-	</radio_group>
-	<button label="機器の設定" name="device_settings_btn"/>
-	<text name="muting_text">
-		ボリューム:
-	</text>
-	<check_box label="オーディオをミュート" name="disable audio" />
-	<text name="streaming_prefs_text">
-		ストリーム環境設定:
-	</text>
-	<text name="audio_prefs_text">
-		オーディオ環境設定:
-	</text>
-	<panel label="ボリューム" name="Volume Panel" />
-	<check_box label="メディアを自動再生" name="auto_streaming_video" />
-	<check_box
-	     label="ウィンドウが最小化されたときにオーディオをミュート"
-	     name="mute_when_minimized" />
-	<text name="streaming_text">
-		ストリーミング:
-	</text>
-	<check_box label="音楽がある場合再生する"
-	     name="streaming_music" />
-	<check_box
-	     label="ストリーミング・メディア使用可時に再生"
-	     name="streaming_video" />
-	<text name="system_volume_text">
-		サウンド効果:
-	</text>
-	<text name="wind_volume_text">
-		風の音量:
-	</text>
-	<text name="footsteps_volume_text">
-		足音:
-	</text>
-	<text name="ui_volume_text">
-		UI音量:
-	</text>
-	<slider label="ドップラー効果" name="Doppler Effect" />
-	<slider label="遠隔要因" name="Distance Factor" />
-	<slider label="ロールオフ係数" name="Rolloff Factor" />
-	<spinner label="L$変更基準点" name="L$ Change Threshold" />
-	<spinner label="ヘルス変化基準点" name="Health Change Threshold" />
-	<text name="doppler_effect_text">
-		オーディオ環境設定:
-	</text>
-	<text name="distance_factor_text">
-		距離係数:
-	</text>
-	<text name="rolloff_factor_text">
-		ロールオフ:
-	</text>
-	<text name="default_upload_bitrate_text">
-		デフォルトUL速度:
-	</text>
-	<radio_group name="bitrate">
-		<radio_item name="32kbps" label="32kbps" />
-		<radio_item name="64kbps" label="64kbps" />
-		<radio_item name="96kbps" label="96kbps" />
-		<radio_item name="128kbps" label="128kbps" />
-	</radio_group>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="音声とビデオ" name="Preference Media panel">
+	<slider label="音量" name="System Volume"/>
+	<slider label="風の音量" name="Wind Volume"/>
+	<slider label="サウンド" name="SFX Volume"/>
+	<slider label="メディア" name="Media Volume"/>
+	<slider label="UI" name="UI Volume"/>
+	<slider label="ミュージック" name="Music Volume"/>
+	<slider label="ボイス" name="Voice Volume"/>
+	<text_editor name="voice_unavailable">
+		ボイスチャットを利用できません
+	</text_editor>
+	<check_box label="ボイスチャット" name="enable_voice_check"/>
+	<radio_group name="ear_location">
+		<radio_item label="カメラの位置から聞く" name="0"/>
+		<radio_item label="アバターの位置から聞く" name="1"/>
+	</radio_group>
+	<button label="機器の設定" name="device_settings_btn"/>
+	<text name="muting_text">
+		ボリューム:
+	</text>
+	<check_box label="オーディオをミュート" name="disable audio"/>
+	<text name="streaming_prefs_text">
+		ストリーム環境設定:
+	</text>
+	<text name="audio_prefs_text">
+		オーディオ環境設定:
+	</text>
+	<panel label="ボリューム" name="Volume Panel"/>
+	<check_box label="メディアを自動再生" name="auto_streaming_video"/>
+	<check_box label="最小化でミュート" name="mute_when_minimized"/>
+	<text name="streaming_text">
+		ストリーミング:
+	</text>
+	<check_box label="音楽がある場合再生する" name="streaming_music"/>
+	<check_box label="ストリーミング・メディア使用可時に再生" name="streaming_video"/>
+	<text name="system_volume_text">
+		サウンド効果:
+	</text>
+	<text name="wind_volume_text">
+		風の音量:
+	</text>
+	<text name="footsteps_volume_text">
+		足音:
+	</text>
+	<text name="ui_volume_text">
+		UI音量:
+	</text>
+	<slider label="ドップラー効果" name="Doppler Effect"/>
+	<slider label="遠隔要因" name="Distance Factor"/>
+	<slider label="ロールオフ係数" name="Rolloff Factor"/>
+	<spinner label="L$変更基準点" name="L$ Change Threshold"/>
+	<spinner label="ヘルス変化基準点" name="Health Change Threshold"/>
+	<text name="doppler_effect_text">
+		オーディオ環境設定:
+	</text>
+	<text name="distance_factor_text">
+		距離係数:
+	</text>
+	<text name="rolloff_factor_text">
+		ロールオフ:
+	</text>
+	<text name="default_upload_bitrate_text">
+		デフォルトUL速度:
+	</text>
+	<radio_group name="bitrate">
+		<radio_item label="32kbps" name="32kbps"/>
+		<radio_item label="64kbps" name="64kbps"/>
+		<radio_item label="96kbps" name="96kbps"/>
+		<radio_item label="128kbps" name="128kbps"/>
+	</radio_group>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_profile.xml b/indra/newview/skins/default/xui/ja/panel_profile.xml
new file mode 100644
index 00000000000..ff82043a0d9
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_profile.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="プロフィール" name="panel_profile">
+	<string name="CaptionTextAcctInfo">
+		[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+	</string>
+	<string name="payment_update_link_url">
+		http://www.secondlife.com/account/billing.php?lang=ja
+	</string>
+	<string name="my_account_link_url" value="http://secondlife.com/account"/>
+	<string name="no_partner_text" value="なし"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<panel name="second_life_image_panel">
+				<text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+			</panel>
+			<panel name="first_life_image_panel">
+				<text name="title_rw_descr_text" value="現実世界:"/>
+			</panel>
+			<text name="me_homepage_text">
+				Webサイト:
+			</text>
+			<text name="title_member_text" value="メンバー登録:"/>
+			<text name="title_acc_status_text" value="アカウントの状態:"/>
+			<text name="title_partner_text" value="パートナー:"/>
+			<panel name="partner_data_panel">
+				<text name="partner_text" value="[FIRST] [LAST]"/>
+			</panel>
+			<text name="title_groups_text" value="グループ:"/>
+		</panel>
+	</scroll_container>
+	<panel name="profile_buttons_panel">
+		<button label="フレンド登録" name="add_friend"/>
+		<button label="IM" name="im"/>
+		<button label="コール" name="call"/>
+		<button label="テレポート" name="teleport"/>
+	</panel>
+	<panel name="profile_me_buttons_panel">
+		<button label="プロフィールの編集" name="edit_profile_btn"/>
+		<button label="容姿の編集" name="edit_appearance_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_profile_view.xml b/indra/newview/skins/default/xui/ja/panel_profile_view.xml
new file mode 100644
index 00000000000..7663851f61a
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_profile_view.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_target_profile">
+	<string name="status_online">
+		オンライン
+	</string>
+	<string name="status_offline">
+		オフライン
+	</string>
+	<text name="user_name" value="(ローディング...)"/>
+	<text name="status" value="オンライン"/>
+	<tab_container name="tabs">
+		<panel label="プロフィール" name="panel_profile"/>
+		<panel label="ピック" name="panel_picks"/>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_script_ed.xml b/indra/newview/skins/default/xui/ja/panel_script_ed.xml
new file mode 100644
index 00000000000..596d59b5777
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_script_ed.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="script panel">
+	<panel.string name="loading">
+		ローディング...
+	</panel.string>
+	<panel.string name="can_not_view">
+		このスクリプトは「コピー不可」のため、表示・編集することができません。 オブジェクト内のスクリプトの表示・編集には、全権限が必要です。
+	</panel.string>
+	<panel.string name="public_objects_can_not_run">
+		公共のオブジェクトではスクリプトを実行できません
+	</panel.string>
+	<panel.string name="script_running">
+		実行中
+	</panel.string>
+	<panel.string name="Title">
+		スクリプト: [NAME]
+	</panel.string>
+	<text_editor name="Script Editor">
+		ローディング...
+	</text_editor>
+	<button label="保存" label_selected="保存" name="Save_btn"/>
+	<combo_box label="挿入..." name="Insert..."/>
+	<menu_bar name="script_menu">
+		<menu label="ファイル" name="File">
+			<menu_item_call label="保存" name="Save"/>
+			<menu_item_call label="変更を元に戻す" name="Revert All Changes"/>
+		</menu>
+		<menu label="編集" name="Edit">
+			<menu_item_call label="元に戻す" name="Undo"/>
+			<menu_item_call label="やり直し" name="Redo"/>
+			<menu_item_call label="切り取り" name="Cut"/>
+			<menu_item_call label="コピー" name="Copy"/>
+			<menu_item_call label="貼り付け" name="Paste"/>
+			<menu_item_call label="すべて選択" name="Select All"/>
+			<menu_item_call label="選択解除" name="Deselect"/>
+			<menu_item_call label="検索 / 再配置..." name="Search / Replace..."/>
+		</menu>
+		<menu label="ヘルプ" name="Help">
+			<menu_item_call label="ヘルプ..." name="Help..."/>
+			<menu_item_call label="キーワードヘルプ..." name="Keyword Help..."/>
+		</menu>
+	</menu_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml
new file mode 100644
index 00000000000..aea057657eb
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml-->
+<panel name="panel_stand_stop_flying">
+	<button label="立ち上がる" name="stand_btn" tool_tip="ここをクリックして立ち上がります。"/>
+	<button label="飛行停止" name="stop_fly_btn" tool_tip="飛行停止"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_status_bar.xml b/indra/newview/skins/default/xui/ja/panel_status_bar.xml
index 9c5fe981b8d..05f29b75908 100644
--- a/indra/newview/skins/default/xui/ja/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/ja/panel_status_bar.xml
@@ -1,42 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="status">
-	<text name="ParcelNameText" tool_tip="あなたが立っている土地区画の名 前。クリックすると「土地情報」が開きます。">
-		区画名はここです
-	</text>
-	<text name="BalanceText" tool_tip="口座残高">
-		ローディング...
-	</text>
-	<button label="" label_selected="" name="buycurrency" tool_tip="貨幣の購入"/>
-	<text name="TimeText" tool_tip="現在時刻(太平洋時)">
-		12:00 AM
-	</text>
-	<text name="StatBarDaysOfWeek">
-		日曜日:月曜日:火曜日:水曜日:木曜日:金曜日:土曜日
-	</text>
-	<text name="StatBarMonthsOfYear">
-		1月:2月:3月:4月:5月:6月:7月:8月:9月:10月:11月:12月
-	</text>
-	<button label="" label_selected="" name="scriptout" tool_tip="スクリプト警告およびエラー"/>
-	<button label="" label_selected="" name="health" tool_tip="健康状態"/>
-	<text name="HealthText" tool_tip="健康状態">
-		100%
-	</text>
-	<button label="" label_selected="" name="fly" tool_tip="飛行禁止"/>
-	<button label="" label_selected="" name="build" tool_tip="作成禁止"/>
-	<button label="" label_selected="" name="scripts" tool_tip="スクリプトなし"/>
-	<button name="no_fly" tool_tip="飛行禁止"/>
-	<button name="no_build" tool_tip="制作/Rez禁止"/>
-	<button name="no_scripts" tool_tip="スクリプト禁止"/>
-	<button label="" label_selected="" name="restrictpush" tool_tip="プッシングを制限"/>
-	<button name="status_voice" tool_tip="ボイス有効"/>
-	<button name="status_no_voice" tool_tip="ここではボイスを使用できません。"/>
-	<button label="" label_selected="" name="buyland" tool_tip="この区画を購入"/>
-	<text name="packet_loss_tooltip">
-		パケット損失
-	</text>
-	<text name="bandwidth_tooltip">
-		帯域幅
-	</text>
-	<line_editor label="検索" name="search_editor" tool_tip="[SECOND_LIFE]を検索"/>
-	<button name="search_btn" tool_tip="[SECOND_LIFE]を検索"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+	<panel.string name="StatBarDaysOfWeek">
+		日曜日:月曜日:火曜日:水曜日:木曜日:金曜日:土曜日
+	</panel.string>
+	<panel.string name="StatBarMonthsOfYear">
+		1月:2月:3月:4月:5月:6月:7月:8月:9月:10月:11月:12月
+	</panel.string>
+	<panel.string name="packet_loss_tooltip">
+		パケット損失
+	</panel.string>
+	<panel.string name="bandwidth_tooltip">
+		帯域幅
+	</panel.string>
+	<panel.string name="buycurrencylabel">
+		L$ [AMT]
+	</panel.string>
+	<button label="" label_selected="" name="buycurrency" tool_tip="私の残高: ここをクリックして L$ を購入"/>
+	<text name="TimeText" tool_tip="現在時刻(太平洋時)">
+		12:00 AM
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_world_map.xml b/indra/newview/skins/default/xui/ja/panel_world_map.xml
index 391379b0720..6cf008c5149 100644
--- a/indra/newview/skins/default/xui/ja/panel_world_map.xml
+++ b/indra/newview/skins/default/xui/ja/panel_world_map.xml
@@ -1,51 +1,57 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="world_map">
-	<panel.string name="world_map_north">
-		北
-	</panel.string>
-	<panel.string name="world_map_east">
-		東
-	</panel.string>
-	<panel.string name="world_map_west">
-		西
-	</panel.string>
-	<panel.string name="world_map_south">
-		南
-	</panel.string>
-	<panel.string name="world_map_southeast">
-		南東
-	</panel.string>
-	<panel.string name="world_map_northeast">
-		北東
-	</panel.string>
-	<panel.string name="world_map_southwest">
-		南西
-	</panel.string>
-	<panel.string name="world_map_northwest">
-		北西
-	</panel.string>
-	<text label="北" name="floater_map_north" text="北">
-		北
-	</text>
-	<text label="東" name="floater_map_east" text="東">
-		東
-	</text>
-	<text label="西" name="floater_map_west" text="西">
-		西
-	</text>
-	<text label="南" name="floater_map_south" text="南">
-		南
-	</text>
-	<text label="南東" name="floater_map_southeast" text="南東">
-		南東
-	</text>
-	<text label="北東" name="floater_map_northeast" text="北東">
-		北東
-	</text>
-	<text label="南西" name="floater_map_southwest" text="南西">
-		南西
-	</text>
-	<text label="北西" name="floater_map_northwest" text="北西">
-		北西
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+	<panel.string name="Loading">
+		ローディング...
+	</panel.string>
+	<panel.string name="InvalidLocation">
+		無効な位置
+	</panel.string>
+	<panel.string name="world_map_north">
+		北
+	</panel.string>
+	<panel.string name="world_map_east">
+		東
+	</panel.string>
+	<panel.string name="world_map_west">
+		西
+	</panel.string>
+	<panel.string name="world_map_south">
+		南
+	</panel.string>
+	<panel.string name="world_map_southeast">
+		南東
+	</panel.string>
+	<panel.string name="world_map_northeast">
+		北東
+	</panel.string>
+	<panel.string name="world_map_southwest">
+		南西
+	</panel.string>
+	<panel.string name="world_map_northwest">
+		北西
+	</panel.string>
+	<text label="北" name="floater_map_north" text="北">
+		北
+	</text>
+	<text label="東" name="floater_map_east" text="東">
+		東
+	</text>
+	<text label="西" name="floater_map_west" text="西">
+		西
+	</text>
+	<text label="南" name="floater_map_south" text="南">
+		南
+	</text>
+	<text label="南東" name="floater_map_southeast" text="南東">
+		南東
+	</text>
+	<text label="北東" name="floater_map_northeast" text="北東">
+		北東
+	</text>
+	<text label="南西" name="floater_map_southwest" text="南西">
+		南西
+	</text>
+	<text label="北西" name="floater_map_northwest" text="北西">
+		北西
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 0eb26754cfe..ad630ab5dcd 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -1,654 +1,3149 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- This file contains strings that used to be hardcoded in the source.
-     It is only for those strings which do not belong in a floater.
-     For example, the strings used in avatar chat bubbles, and strings 
-     that are returned from one component and may appear in many places-->
-<strings>
-	<string name="LoginInProgress">
-		ログイン中です。[APP_NAME]の表示がフリーズする場合があります。  しばらくお待ちください。
-	</string>
-	<string name="LoginAuthenticating">
-		認証しています...
-	</string>
-	<string name="LoginMaintenance">
-		アカウント・メンテナンスを実行しています...
-	</string>
-	<string name="LoginAttempt">
-		前回のログインに失敗しました。 ログイン中です([NUMBER]回目)
-	</string>
-	<string name="LoginPrecaching">
-		ワールドをロードしています...
-	</string>
-	<string name="LoginInitializingBrowser">
-		埋め込みWebブラウザを初期化しています...
-	</string>
-	<string name="LoginInitializingMultimedia">
-		マルチメディアを初期化しています...
-	</string>
-	<string name="LoginVerifyingCache">
-		キャッシュ・ファイルを検証しています(所要時間は60~90秒)...
-	</string>
-	<string name="LoginProcessingResponse">
-		応答を処理しています...
-	</string>
-	<string name="LoginInitializingWorld">
-		ワールドを初期化しています...
-	</string>
-	<string name="LoginDecodingImages">
-		画像をデコードしています...
-	</string>
-	<string name="LoginInitializingQuicktime">
-		QuickTimeを初期化しています...
-	</string>
-	<string name="LoginQuicktimeNotFound">
-		QuickTimeが見つかりません。初期化に失敗しました。
-	</string>
-	<string name="LoginQuicktimeOK">
-		QuickTimeが正常に初期化されました。
-	</string>
-	<string name="LoginWaitingForRegionHandshake">
-		地域のハンドシェイクを待っています...
-	</string>
-	<string name="LoginConnectingToRegion">
-		地域に接続しています...
-	</string>
-	<string name="LoginDownloadingClothing">
-		服をダウンロードしています...
-	</string>
-	<string name="AgentLostConnection">
-		この地域には、問題が発生している可能性があります。  インターネット接続を確認してください。
-	</string>
-	<string name="TooltipPerson">
-		人
-	</string>
-	<string name="TooltipNoName">
-		(名前なし)
-	</string>
-	<string name="TooltipOwner">
-		オーナー:
-	</string>
-	<string name="TooltipPublic">
-		公共
-	</string>
-	<string name="TooltipIsGroup">
-		(グループ)
-	</string>
-	<string name="TooltipFlagScript">
-		スクリプト
-	</string>
-	<string name="TooltipFlagPhysics">
-		物理作用
-	</string>
-	<string name="TooltipFlagTouch">
-		触る
-	</string>
-	<string name="TooltipFlagL$">
-		L$
-	</string>
-	<string name="TooltipFlagDropInventory">
-		持ち物をドロップする
-	</string>
-	<string name="TooltipFlagPhantom">
-		ファントム
-	</string>
-	<string name="TooltipFlagTemporary">
-		一時的
-	</string>
-	<string name="TooltipFlagRightClickMenu">
-		(右クリックでメニューを表示)
-	</string>
-	<string name="TooltipFreeToCopy">
-		コピー可能
-	</string>
-	<string name="TooltipForSaleL$">
-		売り出し中:L$[AMOUNT]
-	</string>
-	<string name="TooltipForSaleMsg">
-		売り出し中: [MESSAGE]
-	</string>
-	<string name="TooltipFlagGroupBuild">
-		グループ作成
-	</string>
-	<string name="TooltipFlagNoBuild">
-		作成禁止
-	</string>
-	<string name="TooltipFlagNoEdit">
-		グループ作成
-	</string>
-	<string name="TooltipFlagNotSafe">
-		危険
-	</string>
-	<string name="TooltipFlagNoFly">
-		飛行禁止
-	</string>
-	<string name="TooltipFlagGroupScripts">
-		グループ・スクリプト
-	</string>
-	<string name="TooltipFlagNoScripts">
-		スクリプトなし
-	</string>
-	<string name="TooltipLand">
-		土地:
-	</string>
-	<string name="TooltipMustSingleDrop">
-		1つのアイテムのみをここにドラッグできます
-	</string>
-	<string name="RetrievingData">
-		検索中...
-	</string>
-	<string name="ReleaseNotes">
-		リリースノート
-	</string>
-	<string name="LoadingData">
-		ロード中...
-	</string>
-	<string name="AvatarNameNobody">
-		(無人)
-	</string>
-	<string name="AvatarNameWaiting">
-		(待機中)
-	</string>
-	<string name="AvatarNameHippos">
-		(カバ)
-	</string>
-	<string name="GroupNameNone">
-		(なし)
-	</string>
-	<string name="AssetErrorNone">
-		エラーなし
-	</string>
-	<string name="AssetErrorRequestFailed">
-		資産の要求: 失敗
-	</string>
-	<string name="AssetErrorNonexistentFile">
-		資産の要求: 存在しないファイル
-	</string>
-	<string name="AssetErrorNotInDatabase">
-		資産の要求: データベースでは見つからない資産
-	</string>
-	<string name="AssetErrorEOF">
-		ファイルの終わり
-	</string>
-	<string name="AssetErrorCannotOpenFile">
-		ファイルを開くことができません
-	</string>
-	<string name="AssetErrorFileNotFound">
-		ファイルが見つかりません
-	</string>
-	<string name="AssetErrorTCPTimeout">
-		ファイル転送タイムアウトです
-	</string>
-	<string name="AssetErrorCircuitGone">
-		接続が解除されました
-	</string>
-	<string name="AssetErrorPriceMismatch">
-		ビューワとサーバーの価格が一致していません
-	</string>
-	<string name="AssetErrorUnknownStatus">
-		ステータスが不明です
-	</string>
-	<string name="AvatarEditingApparance">
-		(容姿の編集)
-	</string>
-	<string name="AvatarAway">
-		退席中
-	</string>
-	<string name="AvatarBusy">
-		取り込み中
-	</string>
-	<string name="AvatarMuted">
-		ミュート
-	</string>
-	<string name="anim_express_afraid">
-		怖れ
-	</string>
-	<string name="anim_express_anger">
-		怒り
-	</string>
-	<string name="anim_away">
-		退席中
-	</string>
-	<string name="anim_backflip">
-		後ろ宙返り
-	</string>
-	<string name="anim_express_laugh">
-		大笑い
-	</string>
-	<string name="anim_express_toothsmile">
-		満面の笑顔
-	</string>
-	<string name="anim_blowkiss">
-		投げキッス
-	</string>
-	<string name="anim_express_bored">
-		退屈
-	</string>
-	<string name="anim_bow">
-		おじぎ
-	</string>
-	<string name="anim_clap">
-		拍手
-	</string>
-	<string name="anim_courtbow">
-		深いおじぎ
-	</string>
-	<string name="anim_express_cry">
-		泣く
-	</string>
-	<string name="anim_dance1">
-		ダンス1
-	</string>
-	<string name="anim_dance2">
-		ダンス2
-	</string>
-	<string name="anim_dance3">
-		ダンス3
-	</string>
-	<string name="anim_dance4">
-		ダンス4
-	</string>
-	<string name="anim_dance5">
-		ダンス5
-	</string>
-	<string name="anim_dance6">
-		ダンス6
-	</string>
-	<string name="anim_dance7">
-		ダンス7
-	</string>
-	<string name="anim_dance8">
-		ダンス8
-	</string>
-	<string name="anim_express_disdain">
-		侮蔑
-	</string>
-	<string name="anim_drink">
-		酔っぱらう
-	</string>
-	<string name="anim_express_embarrased">
-		困惑
-	</string>
-	<string name="anim_angry_fingerwag">
-		指を振る
-	</string>
-	<string name="anim_fist_pump">
-		ガッツポーズ
-	</string>
-	<string name="anim_yoga_float">
-		ヨガ浮遊
-	</string>
-	<string name="anim_express_frown">
-		しかめっ面
-	</string>
-	<string name="anim_impatient">
-		いらいらする
-	</string>
-	<string name="anim_jumpforjoy">
-		飛び上がって喜ぶ
-	</string>
-	<string name="anim_kissmybutt">
-		挑発ポーズ
-	</string>
-	<string name="anim_express_kiss">
-		キス
-	</string>
-	<string name="anim_laugh_short">
-		笑う
-	</string>
-	<string name="anim_musclebeach">
-		力こぶを見せる
-	</string>
-	<string name="anim_no_unhappy">
-		不満げに否定する
-	</string>
-	<string name="anim_no_head">
-		否定する
-	</string>
-	<string name="anim_nyanya">
-		冷やかす
-	</string>
-	<string name="anim_punch_onetwo">
-		ワンツー・パンチ
-	</string>
-	<string name="anim_express_open_mouth">
-		口を開けて驚く
-	</string>
-	<string name="anim_peace">
-		ピース・サイン
-	</string>
-	<string name="anim_point_you">
-		他人を指差す
-	</string>
-	<string name="anim_point_me">
-		自分を指差す
-	</string>
-	<string name="anim_punch_l">
-		左パンチ
-	</string>
-	<string name="anim_punch_r">
-		右パンチ
-	</string>
-	<string name="anim_rps_countdown">
-		じゃんけんポーズ
-	</string>
-	<string name="anim_rps_paper">
-		パー
-	</string>
-	<string name="anim_rps_rock">
-		グー
-	</string>
-	<string name="anim_rps_scissors">
-		チョキ
-	</string>
-	<string name="anim_express_repulsed">
-		嫌悪感
-	</string>
-	<string name="anim_kick_roundhouse_r">
-		まわし蹴り
-	</string>
-	<string name="anim_express_sad">
-		悲しむ
-	</string>
-	<string name="anim_salute">
-		敬礼する
-	</string>
-	<string name="anim_shout">
-		叫ぶ
-	</string>
-	<string name="anim_express_shrug">
-		肩をすくめる
-	</string>
-	<string name="anim_express_smile">
-		微笑む
-	</string>
-	<string name="anim_smoke_idle">
-		たばこをくゆらす
-	</string>
-	<string name="anim_smoke_inhale">
-		たばこを吸う
-	</string>
-	<string name="anim_smoke_throw_down">
-		たばこを捨てる
-	</string>
-	<string name="anim_express_surprise">
-		驚く
-	</string>
-	<string name="anim_sword_strike_r">
-		剣で斬りつける
-	</string>
-	<string name="anim_angry_tantrum">
-		じだんだを踏む
-	</string>
-	<string name="anim_express_tongue_out">
-		舌を出す
-	</string>
-	<string name="anim_hello">
-		手を振る
-	</string>
-	<string name="anim_whisper">
-		小声で話す
-	</string>
-	<string name="anim_whistle">
-		口笛を吹く
-	</string>
-	<string name="anim_express_wink">
-		ウィンク
-	</string>
-	<string name="anim_wink_hollywood">
-		ウィンク(ハリウッド)
-	</string>
-	<string name="anim_express_worry">
-		心配する
-	</string>
-	<string name="anim_yes_happy">
-		笑顔で頷く
-	</string>
-	<string name="anim_yes_head">
-		頷く
-	</string>
-	<string name="texture_loading">
-		ロード中...
-	</string>
-	<string name="worldmap_offline">
-		オフライン
-	</string>
-	<string name="whisper">
-		のささやき:
-	</string>
-	<string name="shout">
-		の叫び:
-	</string>
-	<string name="SIM_ACCESS_PG">
-		PG
-	</string>
-	<string name="SIM_ACCESS_MATURE">
-		Mature
-	</string>
-	<string name="SIM_ACCESS_ADULT">
-		Adult
-	</string>
-	<string name="SIM_ACCESS_DOWN">
-		オフライン
-	</string>
-	<string name="SIM_ACCESS_MIN">
-		不明
-	</string>
-	<string name="land_type_unknown">
-		(不明)
-	</string>
-	<string name="covenant_never_modified">
-		最終修正: (無)
-	</string>
-	<string name="covenant_modified">
-		最終修正:
-	</string>
-	<string name="all_files">
-		全てのファイル
-	</string>
-	<string name="sound_files">
-		サウンド
-	</string>
-	<string name="animation_files">
-		アニメーション
-	</string>
-	<string name="image_files">
-		画像
-	</string>
-	<string name="save_file_verb">
-		保存
-	</string>
-	<string name="load_file_verb">
-		ロード
-	</string>
-	<string name="targa_image_files">
-		Targa画像
-	</string>
-	<string name="bitmap_image_files">
-		ビットマップ画像
-	</string>
-	<string name="avi_movie_file">
-		AVIムービーファイル
-	</string>
-	<string name="xaf_animation_file">
-		XAFアニメーションファイル
-	</string>
-	<string name="xml_file">
-		XMLファイル
-	</string>
-	<string name="dot_raw_file">
-		RAWファイル
-	</string>
-	<string name="compressed_image_files">
-		圧縮画像
-	</string>
-	<string name="load_files">
-		ファイルのロード
-	</string>
-	<string name="choose_the_directory">
-		参照
-	</string>
-	<string name="accel-mac-control">
-		&#8963;
-	</string>
-	<string name="accel-mac-command">
-		&#8984;
-	</string>
-	<string name="accel-mac-option">
-		&#8997;
-	</string>
-	<string name="accel-mac-shift">
-		&#8679;
-	</string>
-	<string name="accel-win-control">
-		Ctrl+
-	</string>
-	<string name="accel-win-alt">
-		Alt+
-	</string>
-	<string name="accel-win-shift">
-		Shift+
-	</string>
-	<string name="GraphicsQualityLow">
-		低
-	</string>
-	<string name="GraphicsQualityMid">
-		中
-	</string>
-	<string name="GraphicsQualityHigh">
-		高
-	</string>
-	
-	<!-- PARCEL_CATEGORY_UI_STRING -->
-	<string name="Linden Location">Linden所在地</string>
-	<string name="Adult">Adult</string>
-	<string name="Arts&amp;Culture">アートとカルチャー</string>
-	<string name="Business">ビジネス</string>
-	<string name="Educational">教育的</string>
-	<string name="Gaming">ゲーム</string>
-	<string name="Hangout">たまり場</string>
-	<string name="Newcomer Friendly">新住人に好意的</string>
-	<string name="Parks&amp;Nature">公園と自然</string>
-	<string name="Residential">住宅用</string>
-	<string name="Shopping">ショッピング</string>
-	<string name="Other">その他</string>
-	<string name="ringing">
-		インワールドボイスチャットに接続中...
-	</string>
-	<string name="connected">
-		接続しました
-	</string>
-	<string name="unavailable">
-		あなたの現在のロケーションでは、ボイスを利用できません。
-	</string>
-	<string name="hang_up">
-		インワールドボイスチャットの通話が切断されました
-	</string>
-	<string name="ScriptQuestionCautionChatGranted">
-		[REGIONNAME]の[REGIONPOS]という場所にある「[OWNERNAME]」所有の「[OBJECTNAME]」というオブジェクトは、次の権限を許可しました: [PERMISSIONS]
-	</string>
-	<string name="ScriptQuestionCautionChatDenied">
-		[REGIONNAME]の[REGIONPOS]という場所にある「[OWNERNAME]」所有の「[OBJECTNAME]」というオブジェクトは、次の権限を拒否しました: [PERMISSIONS]
-	</string>
-	<string name="ScriptTakeMoney">
-		リンデンドル(L$)を支払う
-	</string>
-	<string name="ActOnControlInputs">
-		制御入力に基づいて行動
-	</string>
-	<string name="RemapControlInputs">
-		制御入力のリマップ
-	</string>
-	<string name="AnimateYourAvatar">
-		アバターへのアニメーション動作
-	</string>
-	<string name="AttachToYourAvatar">
-		アバターに装着
-	</string>
-	<string name="ReleaseOwnership">
-		所有権を解放し公のものとする
-	</string>
-	<string name="LinkAndDelink">
-		他のオブジェクトのリンクとリンク解除
-	</string>
-	<string name="AddAndRemoveJoints">
-		他のオブジェクトとのジョイントの追加と削除
-	</string>
-	<string name="ChangePermissions">
-		権限の変更
-	</string>
-	<string name="TrackYourCamera">
-		カメラ追従
-	</string>
-	<string name="ControlYourCamera">
-		カメラのコントロール
-	</string>
-	<string name="only_user_message">
-		このセッションにいるユーザーはあなただけです。
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST]はオフラインです。
-	</string>
-	<string name="invite_message">
-		このボイスチャットに応答/接続する場合は、[BUTTON NAME]をクリックしてください。
-	</string>
-	<string name="generic_request_error">
-		要求中にエラーが発生しました。後でもう一度試してください。
-	</string>
-	<string name="insufficient_perms_error">
-		あなたには充分な権限がありません。
-	</string>
-	<string name="session_does_not_exist_error">
-		このセッションは既に切断されています。
-	</string>
-	<string name="no_ability_error">
-		あなたにはその能力がありません。
-	</string>
-	<string name="no_ability">
-		あなたにはその能力がありません。
-	</string>
-	<string name="not_a_mod_error">
-		あなたはセッション・モデレータではありません。
-	</string>
-	<string name="muted_error">
-		グループモデレータがあなたのテキストチャットを無効化しました
-	</string>
-	<string name="add_session_event">
-		[RECIPIENT] とのチャット・セッションにユーザーを追加することができません
-	</string>
-	<string name="message_session_event">
-		[RECIPIENT] とのチャット・セッションにメッセージを送ることができません
-	</string>
-	<string name="removed_from_group">
-		あなたはグループから削除されました。
-	</string>
-	<string name="close_on_no_ability">
-		このチャット・セッションを継続することはできません
-	</string>
-			<string name="AcctTypeResident">
-				住人
-			</string>
-			<string name="AcctTypeTrial">
-				トライアル
-			</string>
-			<string name="AcctTypeCharterMember">
-				特権メンバー
-			</string>
-			<string name="AcctTypeEmployee">
-				Linden Lab従業員
-			</string>
-			<string name="PaymentInfoUsed">
-				支払い情報登録済
-			</string>
-			<string name="PaymentInfoOnFile">
-				支払い情報登録済み
-			</string>
-			<string name="NoPaymentInfoOnFile">
-				支払い情報未登録
-			</string>
-			<string name="AgeVerified">
-				年齢確認済み
-			</string>
-			<string name="NotAgeVerified">
-				年齢未確認
-			</string>
-</strings>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- This file contains strings that used to be hardcoded in the source.
+     It is only for those strings which do not belong in a floater.
+     For example, the strings used in avatar chat bubbles, and strings 
+     that are returned from one component and may appear in many places-->
+<strings>
+	<string name="SECOND_LIFE">
+		Second Life
+	</string>
+	<string name="APP_NAME">
+		Second Life
+	</string>
+	<string name="SECOND_LIFE_GRID">
+		Second Life Grid
+	</string>
+	<string name="SUPPORT_SITE">
+		Second Lifeサポートポータル
+	</string>
+	<string name="StartupDetectingHardware">
+		ハードウェアの検出中です...
+	</string>
+	<string name="StartupLoading">
+		ローディング
+	</string>
+	<string name="Fullbright">
+		明るさ全開(レガシー)
+	</string>
+	<string name="LoginInProgress">
+		ログイン中です。[APP_NAME]の表示がフリーズする場合があります。  しばらくお待ちください。
+	</string>
+	<string name="LoginInProgressNoFrozen">
+		ログイン中です...
+	</string>
+	<string name="LoginAuthenticating">
+		認証しています...
+	</string>
+	<string name="LoginMaintenance">
+		アカウント・メンテナンスを実行しています...
+	</string>
+	<string name="LoginAttempt">
+		前回のログインに失敗しました。 ログイン中です([NUMBER]回目)
+	</string>
+	<string name="LoginPrecaching">
+		ワールドをロードしています...
+	</string>
+	<string name="LoginInitializingBrowser">
+		埋め込みWebブラウザを初期化しています...
+	</string>
+	<string name="LoginInitializingMultimedia">
+		マルチメディアを初期化しています...
+	</string>
+	<string name="LoginVerifyingCache">
+		キャッシュ・ファイルを検証しています(所要時間は60~90秒)...
+	</string>
+	<string name="LoginProcessingResponse">
+		応答を処理しています...
+	</string>
+	<string name="LoginInitializingWorld">
+		ワールドを初期化しています...
+	</string>
+	<string name="LoginDecodingImages">
+		画像をデコードしています...
+	</string>
+	<string name="LoginInitializingQuicktime">
+		QuickTimeを初期化しています...
+	</string>
+	<string name="LoginQuicktimeNotFound">
+		QuickTimeが見つかりません。初期化に失敗しました。
+	</string>
+	<string name="LoginQuicktimeOK">
+		QuickTimeが正常に初期化されました。
+	</string>
+	<string name="LoginWaitingForRegionHandshake">
+		地域のハンドシェイクを待っています...
+	</string>
+	<string name="LoginConnectingToRegion">
+		地域に接続しています...
+	</string>
+	<string name="LoginDownloadingClothing">
+		服をダウンロードしています...
+	</string>
+	<string name="AgentLostConnection">
+		この地域には、問題が発生している可能性があります。  インターネット接続を確認してください。
+	</string>
+	<string name="TooltipPerson">
+		人
+	</string>
+	<string name="TooltipNoName">
+		(名前なし)
+	</string>
+	<string name="TooltipOwner">
+		オーナー:
+	</string>
+	<string name="TooltipPublic">
+		公共
+	</string>
+	<string name="TooltipIsGroup">
+		(グループ)
+	</string>
+	<string name="TooltipForSaleL$">
+		売り出し中:L$[AMOUNT]
+	</string>
+	<string name="TooltipFlagGroupBuild">
+		グループ作成
+	</string>
+	<string name="TooltipFlagNoBuild">
+		作成禁止
+	</string>
+	<string name="TooltipFlagNoEdit">
+		グループ作成
+	</string>
+	<string name="TooltipFlagNotSafe">
+		危険
+	</string>
+	<string name="TooltipFlagNoFly">
+		飛行禁止
+	</string>
+	<string name="TooltipFlagGroupScripts">
+		グループ・スクリプト
+	</string>
+	<string name="TooltipFlagNoScripts">
+		スクリプトなし
+	</string>
+	<string name="TooltipLand">
+		土地:
+	</string>
+	<string name="TooltipMustSingleDrop">
+		1つのアイテムのみをここにドラッグできます
+	</string>
+	<string name="TooltipHttpUrl">
+		クリックしてこのWebページを見る
+	</string>
+	<string name="TooltipSLURL">
+		クリックしてこの場所の情報を見る
+	</string>
+	<string name="TooltipAgentUrl">
+		クリックしてこの住人のプロフィールを見る
+	</string>
+	<string name="TooltipGroupUrl">
+		クリックしてこのグループの説明文を見る
+	</string>
+	<string name="TooltipEventUrl">
+		クリックしてこのグループの説明文を見る
+	</string>
+	<string name="TooltipClassifiedUrl">
+		クリックしてこのクラシファイド広告を見る
+	</string>
+	<string name="TooltipParcelUrl">
+		クリックしてこの区画の説明文を見る
+	</string>
+	<string name="TooltipTeleportUrl">
+		クリックしてこの場所にテレポートする
+	</string>
+	<string name="TooltipObjectIMUrl">
+		クリックしてこのオブジェクトの説明文を見る
+	</string>
+	<string name="TooltipSLAPP">
+		クリックして secondlife:// コマンドを出す
+	</string>
+	<string name="BUTTON_CLOSE_DARWIN">
+		閉じる (⌘-W)
+	</string>
+	<string name="BUTTON_CLOSE_WIN">
+		閉じる (Ctrl+W)
+	</string>
+	<string name="BUTTON_RESTORE">
+		復元
+	</string>
+	<string name="BUTTON_MINIMIZE">
+		元に戻す(縮小)
+	</string>
+	<string name="BUTTON_TEAR_OFF">
+		別ウィンドウで開く
+	</string>
+	<string name="BUTTON_DOCK">
+		ドッキング
+	</string>
+	<string name="BUTTON_UNDOCK">
+		切り離す
+	</string>
+	<string name="BUTTON_HELP">
+		ヘルプを表示
+	</string>
+	<string name="RetrievingData">
+		検索中...
+	</string>
+	<string name="ReleaseNotes">
+		リリースノート
+	</string>
+	<string name="LoadingData">
+		ロード中...
+	</string>
+	<string name="AvatarNameNobody">
+		(無人)
+	</string>
+	<string name="AvatarNameWaiting">
+		(待機中)
+	</string>
+	<string name="AvatarNameHippos">
+		(カバ)
+	</string>
+	<string name="GroupNameNone">
+		(なし)
+	</string>
+	<string name="AssetErrorNone">
+		エラーなし
+	</string>
+	<string name="AssetErrorRequestFailed">
+		資産の要求: 失敗
+	</string>
+	<string name="AssetErrorNonexistentFile">
+		資産の要求: 存在しないファイル
+	</string>
+	<string name="AssetErrorNotInDatabase">
+		資産の要求: データベースでは見つからない資産
+	</string>
+	<string name="AssetErrorEOF">
+		ファイルの終わり
+	</string>
+	<string name="AssetErrorCannotOpenFile">
+		ファイルを開くことができません
+	</string>
+	<string name="AssetErrorFileNotFound">
+		ファイルが見つかりません
+	</string>
+	<string name="AssetErrorTCPTimeout">
+		ファイル転送タイムアウトです
+	</string>
+	<string name="AssetErrorCircuitGone">
+		接続が解除されました
+	</string>
+	<string name="AssetErrorPriceMismatch">
+		ビューワとサーバーの価格が一致していません
+	</string>
+	<string name="AssetErrorUnknownStatus">
+		ステータスが不明です
+	</string>
+	<string name="texture">
+		テクスチャ
+	</string>
+	<string name="sound">
+		サウンド
+	</string>
+	<string name="calling card">
+		コーリングカード
+	</string>
+	<string name="landmark">
+		ランドマーク
+	</string>
+	<string name="legacy script">
+		レガシースクリプト
+	</string>
+	<string name="clothing">
+		衣類
+	</string>
+	<string name="object">
+		オブジェクト
+	</string>
+	<string name="note card">
+		ノートカード
+	</string>
+	<string name="folder">
+		フォルダ
+	</string>
+	<string name="root">
+		ルート
+	</string>
+	<string name="lsl2 script">
+		lsl2 スクリプト
+	</string>
+	<string name="lsl bytecode">
+		LSL バイトコード
+	</string>
+	<string name="tga texture">
+		tga テクスチャ
+	</string>
+	<string name="body part">
+		身体部位
+	</string>
+	<string name="snapshot">
+		スナップショット
+	</string>
+	<string name="lost and found">
+		紛失物
+	</string>
+	<string name="targa image">
+		targa 画像
+	</string>
+	<string name="trash">
+		ゴミ箱
+	</string>
+	<string name="jpeg image">
+		jpeg 画像
+	</string>
+	<string name="animation">
+		アニメーション
+	</string>
+	<string name="gesture">
+		ジェスチャー
+	</string>
+	<string name="simstate">
+		統計
+	</string>
+	<string name="favorite">
+		お気に入り
+	</string>
+	<string name="symbolic link">
+		リンク
+	</string>
+	<string name="AvatarAway">
+		退席中
+	</string>
+	<string name="AvatarBusy">
+		取り込み中
+	</string>
+	<string name="AvatarMuted">
+		ミュート
+	</string>
+	<string name="anim_express_afraid">
+		怖れ
+	</string>
+	<string name="anim_express_anger">
+		怒り
+	</string>
+	<string name="anim_away">
+		退席中
+	</string>
+	<string name="anim_backflip">
+		後ろ宙返り
+	</string>
+	<string name="anim_express_laugh">
+		大笑い
+	</string>
+	<string name="anim_express_toothsmile">
+		満面の笑顔
+	</string>
+	<string name="anim_blowkiss">
+		投げキッス
+	</string>
+	<string name="anim_express_bored">
+		退屈
+	</string>
+	<string name="anim_bow">
+		おじぎ
+	</string>
+	<string name="anim_clap">
+		拍手
+	</string>
+	<string name="anim_courtbow">
+		深いおじぎ
+	</string>
+	<string name="anim_express_cry">
+		泣く
+	</string>
+	<string name="anim_dance1">
+		ダンス1
+	</string>
+	<string name="anim_dance2">
+		ダンス2
+	</string>
+	<string name="anim_dance3">
+		ダンス3
+	</string>
+	<string name="anim_dance4">
+		ダンス4
+	</string>
+	<string name="anim_dance5">
+		ダンス5
+	</string>
+	<string name="anim_dance6">
+		ダンス6
+	</string>
+	<string name="anim_dance7">
+		ダンス7
+	</string>
+	<string name="anim_dance8">
+		ダンス8
+	</string>
+	<string name="anim_express_disdain">
+		侮蔑
+	</string>
+	<string name="anim_drink">
+		酔っぱらう
+	</string>
+	<string name="anim_express_embarrased">
+		困惑
+	</string>
+	<string name="anim_angry_fingerwag">
+		指を振る
+	</string>
+	<string name="anim_fist_pump">
+		ガッツポーズ
+	</string>
+	<string name="anim_yoga_float">
+		ヨガ浮遊
+	</string>
+	<string name="anim_express_frown">
+		しかめっ面
+	</string>
+	<string name="anim_impatient">
+		いらいらする
+	</string>
+	<string name="anim_jumpforjoy">
+		飛び上がって喜ぶ
+	</string>
+	<string name="anim_kissmybutt">
+		挑発ポーズ
+	</string>
+	<string name="anim_express_kiss">
+		キス
+	</string>
+	<string name="anim_laugh_short">
+		笑う
+	</string>
+	<string name="anim_musclebeach">
+		力こぶを見せる
+	</string>
+	<string name="anim_no_unhappy">
+		不満げに否定する
+	</string>
+	<string name="anim_no_head">
+		否定する
+	</string>
+	<string name="anim_nyanya">
+		冷やかす
+	</string>
+	<string name="anim_punch_onetwo">
+		ワンツー・パンチ
+	</string>
+	<string name="anim_express_open_mouth">
+		口を開けて驚く
+	</string>
+	<string name="anim_peace">
+		ピース・サイン
+	</string>
+	<string name="anim_point_you">
+		他人を指差す
+	</string>
+	<string name="anim_point_me">
+		自分を指差す
+	</string>
+	<string name="anim_punch_l">
+		左パンチ
+	</string>
+	<string name="anim_punch_r">
+		右パンチ
+	</string>
+	<string name="anim_rps_countdown">
+		じゃんけんポーズ
+	</string>
+	<string name="anim_rps_paper">
+		パー
+	</string>
+	<string name="anim_rps_rock">
+		グー
+	</string>
+	<string name="anim_rps_scissors">
+		チョキ
+	</string>
+	<string name="anim_express_repulsed">
+		嫌悪感
+	</string>
+	<string name="anim_kick_roundhouse_r">
+		まわし蹴り
+	</string>
+	<string name="anim_express_sad">
+		悲しむ
+	</string>
+	<string name="anim_salute">
+		敬礼する
+	</string>
+	<string name="anim_shout">
+		叫ぶ
+	</string>
+	<string name="anim_express_shrug">
+		肩をすくめる
+	</string>
+	<string name="anim_express_smile">
+		微笑む
+	</string>
+	<string name="anim_smoke_idle">
+		たばこをくゆらす
+	</string>
+	<string name="anim_smoke_inhale">
+		たばこを吸う
+	</string>
+	<string name="anim_smoke_throw_down">
+		たばこを捨てる
+	</string>
+	<string name="anim_express_surprise">
+		驚く
+	</string>
+	<string name="anim_sword_strike_r">
+		剣で斬りつける
+	</string>
+	<string name="anim_angry_tantrum">
+		じだんだを踏む
+	</string>
+	<string name="anim_express_tongue_out">
+		舌を出す
+	</string>
+	<string name="anim_hello">
+		手を振る
+	</string>
+	<string name="anim_whisper">
+		小声で話す
+	</string>
+	<string name="anim_whistle">
+		口笛を吹く
+	</string>
+	<string name="anim_express_wink">
+		ウィンク
+	</string>
+	<string name="anim_wink_hollywood">
+		ウィンク(ハリウッド)
+	</string>
+	<string name="anim_express_worry">
+		心配する
+	</string>
+	<string name="anim_yes_happy">
+		笑顔で頷く
+	</string>
+	<string name="anim_yes_head">
+		頷く
+	</string>
+	<string name="texture_loading">
+		ロード中...
+	</string>
+	<string name="worldmap_offline">
+		オフライン
+	</string>
+	<string name="Ok">
+		OK
+	</string>
+	<string name="Premature end of file">
+		不完全なファイル
+	</string>
+	<string name="ST_NO_JOINT">
+		ROOT または JOINT が見つかりません
+	</string>
+	<string name="whisper">
+		のささやき:
+	</string>
+	<string name="shout">
+		の叫び:
+	</string>
+	<string name="ringing">
+		インワールドボイスチャットに接続中...
+	</string>
+	<string name="connected">
+		接続しました
+	</string>
+	<string name="unavailable">
+		あなたの現在のロケーションでは、ボイスを利用できません。
+	</string>
+	<string name="hang_up">
+		インワールドボイスチャットの通話が切断されました
+	</string>
+	<string name="ScriptQuestionCautionChatGranted">
+		[REGIONNAME]の[REGIONPOS]という場所にある「[OWNERNAME]」所有の「[OBJECTNAME]」というオブジェクトは、次の権限を許可しました: [PERMISSIONS]
+	</string>
+	<string name="ScriptQuestionCautionChatDenied">
+		[REGIONNAME]の[REGIONPOS]という場所にある「[OWNERNAME]」所有の「[OBJECTNAME]」というオブジェクトは、次の権限を拒否しました: [PERMISSIONS]
+	</string>
+	<string name="ScriptTakeMoney">
+		リンデンドル(L$)を支払う
+	</string>
+	<string name="ActOnControlInputs">
+		制御入力に基づいて行動
+	</string>
+	<string name="RemapControlInputs">
+		制御入力のリマップ
+	</string>
+	<string name="AnimateYourAvatar">
+		アバターへのアニメーション動作
+	</string>
+	<string name="AttachToYourAvatar">
+		アバターに装着
+	</string>
+	<string name="ReleaseOwnership">
+		所有権を解放し公のものとする
+	</string>
+	<string name="LinkAndDelink">
+		他のオブジェクトのリンクとリンク解除
+	</string>
+	<string name="AddAndRemoveJoints">
+		他のオブジェクトとのジョイントの追加と削除
+	</string>
+	<string name="ChangePermissions">
+		権限の変更
+	</string>
+	<string name="TrackYourCamera">
+		カメラ追従
+	</string>
+	<string name="ControlYourCamera">
+		カメラのコントロール
+	</string>
+	<string name="SIM_ACCESS_PG">
+		PG
+	</string>
+	<string name="SIM_ACCESS_MATURE">
+		Mature
+	</string>
+	<string name="SIM_ACCESS_ADULT">
+		Adult
+	</string>
+	<string name="SIM_ACCESS_DOWN">
+		オフライン
+	</string>
+	<string name="SIM_ACCESS_MIN">
+		不明
+	</string>
+	<string name="land_type_unknown">
+		(不明)
+	</string>
+	<string name="all_files">
+		全てのファイル
+	</string>
+	<string name="sound_files">
+		サウンド
+	</string>
+	<string name="animation_files">
+		アニメーション
+	</string>
+	<string name="image_files">
+		画像
+	</string>
+	<string name="save_file_verb">
+		保存
+	</string>
+	<string name="load_file_verb">
+		ロード
+	</string>
+	<string name="targa_image_files">
+		Targa画像
+	</string>
+	<string name="bitmap_image_files">
+		ビットマップ画像
+	</string>
+	<string name="avi_movie_file">
+		AVIムービーファイル
+	</string>
+	<string name="xaf_animation_file">
+		XAFアニメーションファイル
+	</string>
+	<string name="xml_file">
+		XMLファイル
+	</string>
+	<string name="dot_raw_file">
+		RAWファイル
+	</string>
+	<string name="compressed_image_files">
+		圧縮画像
+	</string>
+	<string name="load_files">
+		ファイルのロード
+	</string>
+	<string name="choose_the_directory">
+		参照
+	</string>
+	<string name="AvatarSetNotAway">
+		一時退席中を解除
+	</string>
+	<string name="AvatarSetAway">
+		一時退席中
+	</string>
+	<string name="AvatarSetNotBusy">
+		取り込み中を解除
+	</string>
+	<string name="AvatarSetBusy">
+		取り込み中
+	</string>
+	<string name="shape">
+		シェイプ
+	</string>
+	<string name="skin">
+		スキン
+	</string>
+	<string name="hair">
+		髪型
+	</string>
+	<string name="eyes">
+		ç›®
+	</string>
+	<string name="shirt">
+		シャツ
+	</string>
+	<string name="pants">
+		ズボン
+	</string>
+	<string name="shoes">
+		靴
+	</string>
+	<string name="socks">
+		靴下
+	</string>
+	<string name="jacket">
+		上着
+	</string>
+	<string name="gloves">
+		手袋
+	</string>
+	<string name="undershirt">
+		下着シャツ
+	</string>
+	<string name="underpants">
+		下着パンツ
+	</string>
+	<string name="skirt">
+		スカート
+	</string>
+	<string name="invalid">
+		無効
+	</string>
+	<string name="BodyPartsRightArm">
+		右腕
+	</string>
+	<string name="BodyPartsHead">
+		é ­
+	</string>
+	<string name="BodyPartsLeftArm">
+		左腕
+	</string>
+	<string name="BodyPartsLeftLeg">
+		左脚
+	</string>
+	<string name="BodyPartsTorso">
+		é ­
+	</string>
+	<string name="BodyPartsRightLeg">
+		右脚
+	</string>
+	<string name="GraphicsQualityLow">
+		低
+	</string>
+	<string name="GraphicsQualityMid">
+		中
+	</string>
+	<string name="GraphicsQualityHigh">
+		高
+	</string>
+	<string name="LeaveMouselook">
+		ESC キーを押してワールドビューに戻る
+	</string>
+	<string name="InventoryNoMatchingItems">
+		一致するアイテムが持ち物にありませんでした
+	</string>
+	<string name="InventoryNoTexture">
+		持ち物内にこのテクスチャのコピーがありません
+	</string>
+	<string name="LoadingContents">
+		コンテンツをロード中です...
+	</string>
+	<string name="NoContents">
+		コンテンツなし
+	</string>
+	<string name="InvFolder My Inventory">
+		私の持ち物
+	</string>
+	<string name="InvFolder My Favorites">
+		お気に入り
+	</string>
+	<string name="InvFolder Library">
+		ライブラリ
+	</string>
+	<string name="InvFolder Textures">
+		テクスチャ
+	</string>
+	<string name="InvFolder Sounds">
+		サウンド
+	</string>
+	<string name="InvFolder Calling Cards">
+		コーリングカード
+	</string>
+	<string name="InvFolder Landmarks">
+		ランドマーク
+	</string>
+	<string name="InvFolder Scripts">
+		スクリプト
+	</string>
+	<string name="InvFolder Clothing">
+		衣類
+	</string>
+	<string name="InvFolder Objects">
+		オブジェクト
+	</string>
+	<string name="InvFolder Notecards">
+		ノートカード
+	</string>
+	<string name="InvFolder New Folder">
+		新規フォルダ
+	</string>
+	<string name="InvFolder Inventory">
+		持ち物
+	</string>
+	<string name="InvFolder Uncompressed Images">
+		圧縮されていない画像
+	</string>
+	<string name="InvFolder Body Parts">
+		身体部位
+	</string>
+	<string name="InvFolder Trash">
+		ゴミ箱
+	</string>
+	<string name="InvFolder Photo Album">
+		フォトアルバム
+	</string>
+	<string name="InvFolder Lost And Found">
+		紛失物
+	</string>
+	<string name="InvFolder Uncompressed Sounds">
+		圧縮されていないサウンド
+	</string>
+	<string name="InvFolder Animations">
+		アニメーション
+	</string>
+	<string name="InvFolder Gestures">
+		ジェスチャー
+	</string>
+	<string name="InvFolder favorite">
+		お気に入り
+	</string>
+	<string name="InvFolder Current Outfit">
+		着用中のアウトフィット
+	</string>
+	<string name="InvFolder My Outfits">
+		私のアウトフィット
+	</string>
+	<string name="InvFolder Friends">
+		フレンド
+	</string>
+	<string name="InvFolder All">
+		全員
+	</string>
+	<string name="Buy">
+		買う
+	</string>
+	<string name="BuyforL$">
+		Buy for L$
+	</string>
+	<string name="Stone">
+		石
+	</string>
+	<string name="Metal">
+		金属
+	</string>
+	<string name="Glass">
+		ガラス
+	</string>
+	<string name="Wood">
+		木
+	</string>
+	<string name="Flesh">
+		肌
+	</string>
+	<string name="Plastic">
+		プラスチック
+	</string>
+	<string name="Rubber">
+		ゴム
+	</string>
+	<string name="Light">
+		ライト
+	</string>
+	<string name="KBShift">
+		Shift
+	</string>
+	<string name="KBCtrl">
+		Ctrl
+	</string>
+	<string name="Chest">
+		胸部
+	</string>
+	<string name="Skull">
+		é ­è“‹
+	</string>
+	<string name="Left Shoulder">
+		左肩
+	</string>
+	<string name="Right Shoulder">
+		右肩
+	</string>
+	<string name="Left Hand">
+		左手
+	</string>
+	<string name="Right Hand">
+		右手
+	</string>
+	<string name="Left Foot">
+		左足
+	</string>
+	<string name="Right Foot">
+		右足
+	</string>
+	<string name="Spine">
+		背骨
+	</string>
+	<string name="Pelvis">
+		骨盤
+	</string>
+	<string name="Mouth">
+		口
+	</string>
+	<string name="Chin">
+		あご
+	</string>
+	<string name="Left Ear">
+		左耳
+	</string>
+	<string name="Right Ear">
+		右耳
+	</string>
+	<string name="Left Eyeball">
+		左目眼球
+	</string>
+	<string name="Right Eyeball">
+		右目眼球
+	</string>
+	<string name="Nose">
+		é¼»
+	</string>
+	<string name="R Upper Arm">
+		右上腕
+	</string>
+	<string name="R Forearm">
+		右前腕
+	</string>
+	<string name="L Upper Arm">
+		左上腕
+	</string>
+	<string name="L Forearm">
+		左前腕
+	</string>
+	<string name="Right Hip">
+		右腰
+	</string>
+	<string name="R Upper Leg">
+		右上脚
+	</string>
+	<string name="R Lower Leg">
+		右下脚
+	</string>
+	<string name="Left Hip">
+		左腰
+	</string>
+	<string name="L Upper Leg">
+		左上脚
+	</string>
+	<string name="L Lower Leg">
+		左下脚
+	</string>
+	<string name="Stomach">
+		è…¹
+	</string>
+	<string name="Left Pec">
+		左胸筋
+	</string>
+	<string name="Right Pec">
+		右胸筋
+	</string>
+	<string name="YearsMonthsOld">
+		[AGEYEARS] [AGEMONTHS]
+	</string>
+	<string name="YearsOld">
+		[AGEYEARS]
+	</string>
+	<string name="MonthsOld">
+		[AGEMONTHS]
+	</string>
+	<string name="WeeksOld">
+		[AGEWEEKS]
+	</string>
+	<string name="DaysOld">
+		[AGEDAYS]
+	</string>
+	<string name="TodayOld">
+		今日参加
+	</string>
+	<string name="AgeYearsA">
+		[COUNT] å¹´
+	</string>
+	<string name="AgeYearsB">
+		[COUNT] å¹´
+	</string>
+	<string name="AgeYearsC">
+		[COUNT] å¹´
+	</string>
+	<string name="AgeMonthsA">
+		[COUNT] ヶ月
+	</string>
+	<string name="AgeMonthsB">
+		[COUNT] ヶ月
+	</string>
+	<string name="AgeMonthsC">
+		[COUNT] ヶ月
+	</string>
+	<string name="AgeWeeksA">
+		[COUNT] 週間
+	</string>
+	<string name="AgeWeeksB">
+		[COUNT] 週間
+	</string>
+	<string name="AgeWeeksC">
+		[COUNT] 週間
+	</string>
+	<string name="AgeDaysA">
+		[COUNT] 日間
+	</string>
+	<string name="AgeDaysB">
+		[COUNT] 日間
+	</string>
+	<string name="AgeDaysC">
+		[COUNT] 日間
+	</string>
+	<string name="AcctTypeResident">
+		住人
+	</string>
+	<string name="AcctTypeTrial">
+		トライアル
+	</string>
+	<string name="AcctTypeCharterMember">
+		特権メンバー
+	</string>
+	<string name="AcctTypeEmployee">
+		Linden Lab従業員
+	</string>
+	<string name="PaymentInfoUsed">
+		支払い情報登録済
+	</string>
+	<string name="PaymentInfoOnFile">
+		支払い情報登録済み
+	</string>
+	<string name="NoPaymentInfoOnFile">
+		支払い情報未登録
+	</string>
+	<string name="AgeVerified">
+		年齢確認済み
+	</string>
+	<string name="NotAgeVerified">
+		年齢未確認
+	</string>
+	<string name="Center 2">
+		中心 2
+	</string>
+	<string name="Top Right">
+		右上
+	</string>
+	<string name="Top">
+		上部
+	</string>
+	<string name="Top Left">
+		左上
+	</string>
+	<string name="Center">
+		中心
+	</string>
+	<string name="Bottom Left">
+		Bottom Left
+	</string>
+	<string name="Bottom">
+		Bottom
+	</string>
+	<string name="Bottom Right">
+		Bottom Right
+	</string>
+	<string name="CompileQueueDownloadedCompiling">
+		ダウンロード完了、コンパイル中
+	</string>
+	<string name="CompileQueueScriptNotFound">
+		サーバー上にスクリプトが見つかりません。
+	</string>
+	<string name="CompileQueueProblemDownloading">
+		ダウンロードに問題があります
+	</string>
+	<string name="CompileQueueInsufficientPermDownload">
+		権限不足のためスクリプトをダウンロードできません。
+	</string>
+	<string name="CompileQueueInsufficientPermFor">
+		権限不足:
+	</string>
+	<string name="CompileQueueUnknownFailure">
+		原因不明の失敗によりダウンロードができません
+	</string>
+	<string name="CompileQueueTitle">
+		リコンパイル進行
+	</string>
+	<string name="CompileQueueStart">
+		リコンパイル
+	</string>
+	<string name="ResetQueueTitle">
+		進行をリセット
+	</string>
+	<string name="ResetQueueStart">
+		リセット
+	</string>
+	<string name="RunQueueTitle">
+		実行を続けるよう設定
+	</string>
+	<string name="RunQueueStart">
+		実行中に設定
+	</string>
+	<string name="NotRunQueueTitle">
+		実行を停止するよう設定
+	</string>
+	<string name="NotRunQueueStart">
+		実行停止に設定
+	</string>
+	<string name="CompileSuccessful">
+		コンパイルが完了しました!
+	</string>
+	<string name="CompileSuccessfulSaving">
+		コンパイル完了、保存中です...
+	</string>
+	<string name="SaveComplete">
+		保存完了。
+	</string>
+	<string name="ObjectOutOfRange">
+		スクリプト(オブジェクトが範囲外にあります)
+	</string>
+	<string name="GodToolsObjectOwnedBy">
+		[OWNER] 所有のオブジェクト「[OBJECT]」
+	</string>
+	<string name="GroupsNone">
+		なし
+	</string>
+	<string name="Unknown">
+		(不明)
+	</string>
+	<string name="Balance">
+		残高
+	</string>
+	<string name="Credits">
+		収入
+	</string>
+	<string name="Debits">
+		支出
+	</string>
+	<string name="Total">
+		合計
+	</string>
+	<string name="NoGroupDataFound">
+		グループのデータが見つかりませんでした
+	</string>
+	<string name="IMParentEstate">
+		parent estate
+	</string>
+	<string name="IMMainland">
+		メインランド
+	</string>
+	<string name="IMTeen">
+		ティーン
+	</string>
+	<string name="RegionInfoError">
+		エラー
+	</string>
+	<string name="RegionInfoAllEstatesOwnedBy">
+		[OWNER] が所有するすべての不動産
+	</string>
+	<string name="RegionInfoAllEstatesYouOwn">
+		あなたが所有するすべての不動産
+	</string>
+	<string name="RegionInfoAllEstatesYouManage">
+		あなたが [OWNER] のために管理するすべての不動産
+	</string>
+	<string name="RegionInfoAllowedResidents">
+		許可された住人: ([ALLOWEDAGENTS] 人、最大 [MAXACCESS] 人)
+	</string>
+	<string name="RegionInfoAllowedGroups">
+		許可されたグループ: ([ALLOWEDGROUPS]、最大 [MAXACCESS] グループ)
+	</string>
+	<string name="CursorPos">
+		[LINE] 行目、[COLUMN] 列目
+	</string>
+	<string name="PanelDirCountFound">
+		[COUNT] 件見つかりました
+	</string>
+	<string name="PanelContentsNewScript">
+		新規スクリプト
+	</string>
+	<string name="MuteByName">
+		(名称別)
+	</string>
+	<string name="MuteAgent">
+		(住人)
+	</string>
+	<string name="MuteObject">
+		(オブジェクト)
+	</string>
+	<string name="MuteGroup">
+		(グループ)
+	</string>
+	<string name="RegionNoCovenant">
+		この不動産には約款がありません。
+	</string>
+	<string name="RegionNoCovenantOtherOwner">
+		この不動産には約款がありません。 この不動産上の土地は不動産所有者により販売され、Linden Lab では販売していません。  販売に関するお問い合わせは、不動産所有者までお願い致します。
+	</string>
+	<string name="covenant_last_modified">
+		最終修正日:
+	</string>
+	<string name="GroupOwned">
+		グループ所有
+	</string>
+	<string name="Public">
+		パブリック
+	</string>
+	<string name="ClassifiedClicksTxt">
+		クリック数: [TELEPORT] テレポート、 [MAP] 地図、 [PROFILE] プロフィール
+	</string>
+	<string name="ClassifiedUpdateAfterPublish">
+		(掲載後更新)
+	</string>
+	<string name="GroupVoteYes">
+		はい
+	</string>
+	<string name="GroupVoteNo">
+		いいえ
+	</string>
+	<string name="GroupVoteNoActiveProposals">
+		継続中の提案は現在ありません
+	</string>
+	<string name="GroupVoteNoArchivedProposals">
+		提案のアーカイブは現在ありません
+	</string>
+	<string name="GroupVoteRetrievingArchivedProposals">
+		提案のアーカイブを取得中です
+	</string>
+	<string name="GroupVoteRetrievingActiveProposals">
+		継続中の提案を取得中です
+	</string>
+	<string name="MultiPreviewTitle">
+		プレビュー
+	</string>
+	<string name="MultiPropertiesTitle">
+		Properties
+	</string>
+	<string name="InvOfferAnObjectNamed">
+		オブジェクト名
+	</string>
+	<string name="InvOfferOwnedByGroup">
+		所有グループ
+	</string>
+	<string name="InvOfferOwnedByUnknownGroup">
+		不明なグループ所有
+	</string>
+	<string name="InvOfferOwnedBy">
+		所有者
+	</string>
+	<string name="InvOfferOwnedByUnknownUser">
+		不明なユーザー所有
+	</string>
+	<string name="InvOfferGaveYou">
+		gave you
+	</string>
+	<string name="InvOfferYouDecline">
+		You decline
+	</string>
+	<string name="InvOfferFrom">
+		from
+	</string>
+	<string name="GroupMoneyTotal">
+		合計
+	</string>
+	<string name="GroupMoneyBought">
+		bought
+	</string>
+	<string name="GroupMoneyPaidYou">
+		paid you
+	</string>
+	<string name="GroupMoneyPaidInto">
+		paid into
+	</string>
+	<string name="GroupMoneyBoughtPassTo">
+		bought pass to
+	</string>
+	<string name="GroupMoneyPaidFeeForEvent">
+		paid fee for event
+	</string>
+	<string name="GroupMoneyPaidPrizeForEvent">
+		paid prize for event
+	</string>
+	<string name="GroupMoneyBalance">
+		残高
+	</string>
+	<string name="GroupMoneyCredits">
+		収入
+	</string>
+	<string name="GroupMoneyDebits">
+		支出
+	</string>
+	<string name="ViewerObjectContents">
+		中身
+	</string>
+	<string name="AcquiredItems">
+		取得アイテム
+	</string>
+	<string name="Cancel">
+		キャンセル
+	</string>
+	<string name="UploadingCosts">
+		%s のアップロード代金:
+	</string>
+	<string name="UnknownFileExtension">
+		不明の拡張子: %s
+使用可能な拡張子: .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
+	</string>
+	<string name="AddLandmarkNavBarMenu">
+		ランドマークを追加...
+	</string>
+	<string name="EditLandmarkNavBarMenu">
+		ランドマークを編集...
+	</string>
+	<string name="accel-mac-control">
+		⌃
+	</string>
+	<string name="accel-mac-command">
+		⌘
+	</string>
+	<string name="accel-mac-option">
+		⌥
+	</string>
+	<string name="accel-mac-shift">
+		⇧
+	</string>
+	<string name="accel-win-control">
+		Ctrl+
+	</string>
+	<string name="accel-win-alt">
+		Alt+
+	</string>
+	<string name="accel-win-shift">
+		Shift+
+	</string>
+	<string name="FileSaved">
+		ファイルが保存されました
+	</string>
+	<string name="Receiving">
+		取得中
+	</string>
+	<string name="AM">
+		AM
+	</string>
+	<string name="PM">
+		PM
+	</string>
+	<string name="PST">
+		米国西部標準時
+	</string>
+	<string name="PDT">
+		米国西部夏時間
+	</string>
+	<string name="Forward">
+		前
+	</string>
+	<string name="Left">
+		å·¦
+	</string>
+	<string name="Right">
+		右
+	</string>
+	<string name="Back">
+		後ろ
+	</string>
+	<string name="North">
+		北
+	</string>
+	<string name="South">
+		南
+	</string>
+	<string name="West">
+		西
+	</string>
+	<string name="East">
+		東
+	</string>
+	<string name="Up">
+		上
+	</string>
+	<string name="Down">
+		下
+	</string>
+	<string name="Any Category">
+		全カテゴリ
+	</string>
+	<string name="Shopping">
+		ショッピング
+	</string>
+	<string name="Land Rental">
+		土地のレンタル
+	</string>
+	<string name="Property Rental">
+		建物のレンタル
+	</string>
+	<string name="Special Attraction">
+		特別アトラクション
+	</string>
+	<string name="New Products">
+		新製品
+	</string>
+	<string name="Employment">
+		雇用
+	</string>
+	<string name="Wanted">
+		求む
+	</string>
+	<string name="Service">
+		サービス
+	</string>
+	<string name="Personal">
+		パーソナル
+	</string>
+	<string name="None">
+		なし
+	</string>
+	<string name="Linden Location">
+		Linden所在地
+	</string>
+	<string name="Adult">
+		Adult
+	</string>
+	<string name="Arts&amp;Culture">
+		アートとカルチャー
+	</string>
+	<string name="Business">
+		ビジネス
+	</string>
+	<string name="Educational">
+		教育的
+	</string>
+	<string name="Gaming">
+		ゲーム
+	</string>
+	<string name="Hangout">
+		たまり場
+	</string>
+	<string name="Newcomer Friendly">
+		新住人に好意的
+	</string>
+	<string name="Parks&amp;Nature">
+		公園と自然
+	</string>
+	<string name="Residential">
+		住宅用
+	</string>
+	<string name="Stage">
+		ステージ
+	</string>
+	<string name="Other">
+		その他
+	</string>
+	<string name="Any">
+		全員
+	</string>
+	<string name="You">
+		あなた
+	</string>
+	<string name=":">
+		:
+	</string>
+	<string name=",">
+		,
+	</string>
+	<string name="...">
+		...
+	</string>
+	<string name="***">
+		***
+	</string>
+	<string name="(">
+		(
+	</string>
+	<string name=")">
+		)
+	</string>
+	<string name=".">
+		.
+	</string>
+	<string name="&apos;">
+		&apos;
+	</string>
+	<string name="---">
+		---
+	</string>
+	<string name="MBCmdLineError">
+		コマンドラインにエラーが見つかりました。
+リンク先を参照してください: http://wiki.secondlife.com/wiki/Client_parameters
+エラー:
+	</string>
+	<string name="MBCmdLineUsg">
+		[APP_NAME] コマンドライン使用:
+	</string>
+	<string name="MBUnableToAccessFile">
+		[APP_NAME] は必要なファイルにアクセスできません。
+
+複数のコピーを実行中か、ファイルが既に開いているとあなたのシステムが誤認識している可能性があります。
+このメッセージが何度も出る場合は、コンピューターを再起動してもう一度お試しください。
+それでも問題が続く場合、[APP_NAME] を完全にアンインストールして、再インストールをしてください。
+	</string>
+	<string name="MBFatalError">
+		致命的なエラー
+	</string>
+	<string name="MBRequiresAltiVec">
+		[APP_NAME] は、AltiVec搭載のプロセッサが必要です。(G4 以降)
+	</string>
+	<string name="MBAlreadyRunning">
+		[APP_NAME] はすでに実行中です。
+最小化されたプログラムのコピーをタスクバーで確認してください。
+このメッセージが何度も出る場合はコンピューターを再起動してください。
+	</string>
+	<string name="MBFrozenCrashed">
+		[APP_NAME] は前回の実行時にフリーズしています。
+クラッシュ報告を送信しますか?
+	</string>
+	<string name="MBAlert">
+		警告
+	</string>
+	<string name="MBNoDirectX">
+		[APP_NAME] は DirectX 9.0b 及びそれ以降のバージョンを検出することができませんでした。
+[APP_NAME] は DirectX を使用して安定性の問題、低パフォーマンス、クラッシュ等悪影響を与えるハードウェアや古いドライバを検出します。  DirectX 9.0b がなくても [APP_NAME] を実行できますが、DirectX 9.0bとのご使用を強く推奨します。
+
+続けますか?
+	</string>
+	<string name="MBWarning">
+		警告
+	</string>
+	<string name="MBNoAutoUpdate">
+		自動更新は現在 Linux には対応していません。
+www.secondlife.com から最新バージョンをダウンロードしてください。
+	</string>
+	<string name="MBRegClassFailed">
+		RegisterClass 失敗
+	</string>
+	<string name="MBError">
+		エラー
+	</string>
+	<string name="MBFullScreenErr">
+		[WIDTH] x [HEIGHT] では全画面で実行することができません。
+ウィンドウモードで実行中です。
+	</string>
+	<string name="MBDestroyWinFailed">
+		シャットダウンエラー(DestroyWindow() 失敗)
+	</string>
+	<string name="MBShutdownErr">
+		シャットダウンエラー
+	</string>
+	<string name="MBDevContextErr">
+		GL ディバイスコンテキストが作れません
+	</string>
+	<string name="MBPixelFmtErr">
+		適切なピクセル形式が見つかりません
+	</string>
+	<string name="MBPixelFmtDescErr">
+		ピクセル形式情報が見つかりません
+	</string>
+	<string name="MBTrueColorWindow">
+		[APP_NAME] をウィンドウで実行するには、True Color(32ビット)が必要です。
+「コントロールパネル」>「画面」>「設定」に行き、「最高 (32 ビット)」に設定してください。
+全画面を選択した場合、実行時に [APP_NAME] は自動的にスクリーンを調整します。
+	</string>
+	<string name="MBAlpha">
+		[APP_NAME] は 8 ビットのアルファチャンネルを取得できないため実行できません。  通常ビデオカードのドライバの問題で起こります。
+お使いのコンピューターに最新のビデオカードドライバがインストールされているかご確認ください。
+また、「コントロールパネル」>「画面」>「設定」内で、モニターが「最高 (32ビット)」に設定されていることもご確認ください。
+このメッセージが何度も出る場合は、[SUPPORT_SITE] へご連絡ください。
+	</string>
+	<string name="MBPixelFmtSetErr">
+		ピクセル形式が設定できません
+	</string>
+	<string name="MBGLContextErr">
+		GL レンダーコンテキストが作れません
+	</string>
+	<string name="MBGLContextActErr">
+		GL レンダーコンテキストをアクティベートできません
+	</string>
+	<string name="MBVideoDrvErr">
+		お使いのコンピューターのビデオカードドライバが正常にインストールできなかった、または古いかサポート対象外のため、[APP_NAME] は実行できません。 最新のビデオカードドライバがインストールされているのを確認し、されている場合は再インストールをお試しください。
+
+このメッセージが何度も出る場合は、[SUPPORT_SITE] へご連絡ください。
+	</string>
+	<string name="5 O&apos;Clock Shadow">
+		うっすらとしたヒゲ
+	</string>
+	<string name="All White">
+		真っ白
+	</string>
+	<string name="Anime Eyes">
+		アニメ風の目
+	</string>
+	<string name="Arced">
+		アーチ
+	</string>
+	<string name="Arm Length">
+		腕の長さ
+	</string>
+	<string name="Attached">
+		小
+	</string>
+	<string name="Attached Earlobes">
+		耳たぶ
+	</string>
+	<string name="Back Bangs">
+		後ろにかき上げた前髪
+	</string>
+	<string name="Back Bangs Down">
+		後ろにかき上げて下ろした前髪
+	</string>
+	<string name="Back Bangs Up">
+		後ろにかき上げて持ち上げた前髪
+	</string>
+	<string name="Back Fringe">
+		後ろ髪の毛先
+	</string>
+	<string name="Back Hair">
+		後ろ髪
+	</string>
+	<string name="Back Hair Down">
+		下ろした後ろ髪
+	</string>
+	<string name="Back Hair Up">
+		アップにした後ろ髪
+	</string>
+	<string name="Baggy">
+		たるんでいる
+	</string>
+	<string name="Bangs">
+		前髪
+	</string>
+	<string name="Bangs Down">
+		下ろした前髪
+	</string>
+	<string name="Bangs Up">
+		持ち上げた前髪
+	</string>
+	<string name="Beady Eyes">
+		ビーズのような目
+	</string>
+	<string name="Belly Size">
+		お腹の大きさ
+	</string>
+	<string name="Big">
+		大
+	</string>
+	<string name="Big Butt">
+		大
+	</string>
+	<string name="Big Eyeball">
+		大きい眼球
+	</string>
+	<string name="Big Hair Back">
+		髪の大部分: 後ろ
+	</string>
+	<string name="Big Hair Front">
+		髪の大部分: 前
+	</string>
+	<string name="Big Hair Top">
+		髪の大部分: 上部
+	</string>
+	<string name="Big Head">
+		大
+	</string>
+	<string name="Big Pectorals">
+		大
+	</string>
+	<string name="Big Spikes">
+		とげあり
+	</string>
+	<string name="Black">
+		é»’
+	</string>
+	<string name="Blonde">
+		ブロンド
+	</string>
+	<string name="Blonde Hair">
+		ブロンドの髪
+	</string>
+	<string name="Blush">
+		チーク
+	</string>
+	<string name="Blush Color">
+		チークカラー
+	</string>
+	<string name="Blush Opacity">
+		チークの濃さ
+	</string>
+	<string name="Body Definition">
+		体の精細度
+	</string>
+	<string name="Body Fat">
+		体脂肪
+	</string>
+	<string name="Body Freckles">
+		体のしみ・そばかす
+	</string>
+	<string name="Body Thick">
+		骨太
+	</string>
+	<string name="Body Thickness">
+		体の厚み
+	</string>
+	<string name="Body Thin">
+		細め
+	</string>
+	<string name="Bow Legged">
+		外股
+	</string>
+	<string name="Breast Buoyancy">
+		胸の重力
+	</string>
+	<string name="Breast Cleavage">
+		胸の谷間
+	</string>
+	<string name="Breast Size">
+		胸の大きさ
+	</string>
+	<string name="Bridge Width">
+		両目の間の幅
+	</string>
+	<string name="Broad">
+		広
+	</string>
+	<string name="Brow Size">
+		眉毛の大きさ
+	</string>
+	<string name="Bug Eyes">
+		Bug Eyes
+	</string>
+	<string name="Bugged Eyes">
+		突き出た目
+	</string>
+	<string name="Bulbous">
+		だんご
+	</string>
+	<string name="Bulbous Nose">
+		だんご鼻
+	</string>
+	<string name="Bushy Eyebrows">
+		太
+	</string>
+	<string name="Bushy Hair">
+		ぼさぼさヘア
+	</string>
+	<string name="Butt Size">
+		お尻の大きさ
+	</string>
+	<string name="bustle skirt">
+		後ろの膨らみ
+	</string>
+	<string name="no bustle">
+		膨らみなし
+	</string>
+	<string name="more bustle">
+		膨らみ大
+	</string>
+	<string name="Chaplin">
+		Chaplin
+	</string>
+	<string name="Cheek Bones">
+		ほお骨
+	</string>
+	<string name="Chest Size">
+		胸部の大きさ
+	</string>
+	<string name="Chin Angle">
+		あごの角度
+	</string>
+	<string name="Chin Cleft">
+		あごの先の割れ具合
+	</string>
+	<string name="Chin Curtains">
+		あごに沿ったひげ
+	</string>
+	<string name="Chin Depth">
+		あごの長さ
+	</string>
+	<string name="Chin Heavy">
+		あごに重点
+	</string>
+	<string name="Chin In">
+		ひいたあご
+	</string>
+	<string name="Chin Out">
+		突き出たあご
+	</string>
+	<string name="Chin-Neck">
+		あごと首
+	</string>
+	<string name="Clear">
+		クリア
+	</string>
+	<string name="Cleft">
+		割れた
+	</string>
+	<string name="Close Set Eyes">
+		顔の中心寄りの目
+	</string>
+	<string name="Closed">
+		クローズ
+	</string>
+	<string name="Closed Back">
+		後ろとじ
+	</string>
+	<string name="Closed Front">
+		前とじ
+	</string>
+	<string name="Closed Left">
+		左とじ
+	</string>
+	<string name="Closed Right">
+		右とじ
+	</string>
+	<string name="Coin Purse">
+		コイン入れ
+	</string>
+	<string name="Collar Back">
+		後ろえり
+	</string>
+	<string name="Collar Front">
+		前えり
+	</string>
+	<string name="Corner Down">
+		ダウン
+	</string>
+	<string name="Corner Normal">
+		ノーマル
+	</string>
+	<string name="Corner Up">
+		アップ
+	</string>
+	<string name="Creased">
+		重いまぶた
+	</string>
+	<string name="Crooked Nose">
+		曲がった鼻
+	</string>
+	<string name="Cropped Hair">
+		短く刈り込んだ髪
+	</string>
+	<string name="Cuff Flare">
+		袖口のフレア
+	</string>
+	<string name="Dark">
+		ダーク
+	</string>
+	<string name="Dark Green">
+		ダークグリーン
+	</string>
+	<string name="Darker">
+		ダーク
+	</string>
+	<string name="Deep">
+		尖った
+	</string>
+	<string name="Default Heels">
+		デフォルトのかかと
+	</string>
+	<string name="Default Toe">
+		デフォルトのつま先
+	</string>
+	<string name="Dense">
+		濃
+	</string>
+	<string name="Dense hair">
+		密度の多い髪
+	</string>
+	<string name="Double Chin">
+		二重あご
+	</string>
+	<string name="Downturned">
+		下向き
+	</string>
+	<string name="Duffle Bag">
+		ダッフルバッグ
+	</string>
+	<string name="Ear Angle">
+		耳の角度
+	</string>
+	<string name="Ear Size">
+		耳の大きさ
+	</string>
+	<string name="Ear Tips">
+		耳の先
+	</string>
+	<string name="Egg Head">
+		たまご頭
+	</string>
+	<string name="Eye Bags">
+		下まぶた
+	</string>
+	<string name="Eye Color">
+		瞳の色
+	</string>
+	<string name="Eye Depth">
+		目のくぼみ
+	</string>
+	<string name="Eye Lightness">
+		瞳の明るさ
+	</string>
+	<string name="Eye Opening">
+		見開き具合
+	</string>
+	<string name="Eye Pop">
+		両目の大きさの対称
+	</string>
+	<string name="Eye Size">
+		目の大きさ
+	</string>
+	<string name="Eye Spacing">
+		目と目のあいだの幅
+	</string>
+	<string name="Eyeball Size">
+		眼球の大きさ
+	</string>
+	<string name="Eyebrow Arc">
+		眉毛のアーチ
+	</string>
+	<string name="Eyebrow Density">
+		眉毛の密集度
+	</string>
+	<string name="Eyebrow Height">
+		眉毛の高さ
+	</string>
+	<string name="Eyebrow Points">
+		眉毛の角
+	</string>
+	<string name="Eyebrow Size">
+		眉毛の大きさ
+	</string>
+	<string name="Eyelash Length">
+		まつげの長さ
+	</string>
+	<string name="Eyeliner">
+		アイライナー
+	</string>
+	<string name="Eyeliner Color">
+		アイライナーの色
+	</string>
+	<string name="Eyes Back">
+		目・戻る
+	</string>
+	<string name="Eyes Bugged">
+		下まぶたがたるんだ目
+	</string>
+	<string name="Eyes Forward">
+		目・次へ
+	</string>
+	<string name="Eyes Long Head">
+		Eyes Long Head
+	</string>
+	<string name="Eyes Shear Left Up">
+		Eyes Shear Left Up
+	</string>
+	<string name="Eyes Shear Right Up">
+		Eyes Shear Right Up
+	</string>
+	<string name="Eyes Short Head">
+		Eyes Short Head
+	</string>
+	<string name="Eyes Spread">
+		離れた目
+	</string>
+	<string name="Eyes Sunken">
+		くぼんだ目
+	</string>
+	<string name="Eyes Together">
+		Eyes Together
+	</string>
+	<string name="Face Shear">
+		顔のゆがみ
+	</string>
+	<string name="Facial Definition">
+		顔の精細度
+	</string>
+	<string name="Far Set Eyes">
+		離れた目
+	</string>
+	<string name="Fat">
+		太った
+	</string>
+	<string name="Fat Head">
+		太めの頭
+	</string>
+	<string name="Fat Lips">
+		大
+	</string>
+	<string name="Fat Lower">
+		Fat Lower
+	</string>
+	<string name="Fat Lower Lip">
+		厚めの下唇
+	</string>
+	<string name="Fat Torso">
+		太めの頭部
+	</string>
+	<string name="Fat Upper">
+		Fat Upper
+	</string>
+	<string name="Fat Upper Lip">
+		厚めの上唇
+	</string>
+	<string name="Female">
+		女性
+	</string>
+	<string name="Fingerless">
+		指なし
+	</string>
+	<string name="Fingers">
+		指あり
+	</string>
+	<string name="Flared Cuffs">
+		広がった袖口
+	</string>
+	<string name="Flat">
+		平ら
+	</string>
+	<string name="Flat Butt">
+		小
+	</string>
+	<string name="Flat Head">
+		絶壁頭
+	</string>
+	<string name="Flat Toe">
+		フラット
+	</string>
+	<string name="Foot Size">
+		足の大きさ
+	</string>
+	<string name="Forehead Angle">
+		ひたいの角度
+	</string>
+	<string name="Forehead Heavy">
+		ひたいに重点
+	</string>
+	<string name="Freckles">
+		しみ・そばかす
+	</string>
+	<string name="Front Bangs Down">
+		下ろした前髪
+	</string>
+	<string name="Front Bangs Up">
+		上げた前髪
+	</string>
+	<string name="Front Fringe">
+		前髪の毛先
+	</string>
+	<string name="Front Hair">
+		前髪
+	</string>
+	<string name="Front Hair Down">
+		下ろした前髪
+	</string>
+	<string name="Front Hair Up">
+		アップにした前髪
+	</string>
+	<string name="Full Back">
+		刈られていない髪
+	</string>
+	<string name="Full Eyeliner">
+		あり
+	</string>
+	<string name="Full Front">
+		刈られていない髪
+	</string>
+	<string name="Full Hair Sides">
+		サイドの髪
+	</string>
+	<string name="Full Sides">
+		生え揃ったサイド
+	</string>
+	<string name="Glossy">
+		あり
+	</string>
+	<string name="Glove Fingers">
+		手袋の指
+	</string>
+	<string name="Glove Length">
+		手袋の長さ
+	</string>
+	<string name="Hair">
+		髪
+	</string>
+	<string name="Hair Back">
+		髪: 後ろ
+	</string>
+	<string name="Hair Front">
+		髪: 前
+	</string>
+	<string name="Hair Sides">
+		髪: サイド
+	</string>
+	<string name="Hair Sweep">
+		流す
+	</string>
+	<string name="Hair Thickess">
+		髪の量
+	</string>
+	<string name="Hair Thickness">
+		髪の量
+	</string>
+	<string name="Hair Tilt">
+		髪の向き
+	</string>
+	<string name="Hair Tilted Left">
+		左向き
+	</string>
+	<string name="Hair Tilted Right">
+		右向き
+	</string>
+	<string name="Hair Volume">
+		髪: ボリューム
+	</string>
+	<string name="Hand Size">
+		手の大きさ
+	</string>
+	<string name="Handlebars">
+		ハンドルバー
+	</string>
+	<string name="Head Length">
+		頭の長さ
+	</string>
+	<string name="Head Shape">
+		頭の形
+	</string>
+	<string name="Head Size">
+		頭の大きさ
+	</string>
+	<string name="Head Stretch">
+		頭の伸び具合
+	</string>
+	<string name="Heel Height">
+		ヒールの高さ
+	</string>
+	<string name="Heel Shape">
+		ヒールの形
+	</string>
+	<string name="Height">
+		身長
+	</string>
+	<string name="High">
+		高
+	</string>
+	<string name="High Heels">
+		ハイヒール
+	</string>
+	<string name="High Jaw">
+		高
+	</string>
+	<string name="High Platforms">
+		厚底
+	</string>
+	<string name="High and Tight">
+		高めでタイト
+	</string>
+	<string name="Higher">
+		高
+	</string>
+	<string name="Hip Length">
+		腰の長さ
+	</string>
+	<string name="Hip Width">
+		腰の幅
+	</string>
+	<string name="In">
+		内向き
+	</string>
+	<string name="In Shdw Color">
+		内側のシャドウカラー
+	</string>
+	<string name="In Shdw Opacity">
+		内側のシャドウの濃さ
+	</string>
+	<string name="Inner Eye Corner">
+		目頭
+	</string>
+	<string name="Inner Eye Shadow">
+		内側のアイシャドウ
+	</string>
+	<string name="Inner Shadow">
+		内側のシャドウ
+	</string>
+	<string name="Jacket Length">
+		ジャケット丈
+	</string>
+	<string name="Jacket Wrinkles">
+		ジャケットのしわ
+	</string>
+	<string name="Jaw Angle">
+		あごの角度
+	</string>
+	<string name="Jaw Jut">
+		あごの突出
+	</string>
+	<string name="Jaw Shape">
+		あごの形
+	</string>
+	<string name="Join">
+		寄せた
+	</string>
+	<string name="Jowls">
+		えら
+	</string>
+	<string name="Knee Angle">
+		膝の角度
+	</string>
+	<string name="Knock Kneed">
+		内股
+	</string>
+	<string name="Large">
+		大
+	</string>
+	<string name="Large Hands">
+		大
+	</string>
+	<string name="Left Part">
+		左分け
+	</string>
+	<string name="Leg Length">
+		脚の長さ
+	</string>
+	<string name="Leg Muscles">
+		脚の筋肉
+	</string>
+	<string name="Less">
+		小
+	</string>
+	<string name="Less Body Fat">
+		少なめ
+	</string>
+	<string name="Less Curtains">
+		少なめ
+	</string>
+	<string name="Less Freckles">
+		少なめ
+	</string>
+	<string name="Less Full">
+		薄い
+	</string>
+	<string name="Less Gravity">
+		å°‘
+	</string>
+	<string name="Less Love">
+		å°‘
+	</string>
+	<string name="Less Muscles">
+		少なめ
+	</string>
+	<string name="Less Muscular">
+		少なめ
+	</string>
+	<string name="Less Rosy">
+		少な目
+	</string>
+	<string name="Less Round">
+		丸み少な目
+	</string>
+	<string name="Less Saddle">
+		小
+	</string>
+	<string name="Less Square">
+		小
+	</string>
+	<string name="Less Volume">
+		ボリューム少な目
+	</string>
+	<string name="Less soul">
+		小
+	</string>
+	<string name="Lighter">
+		ライト
+	</string>
+	<string name="Lip Cleft">
+		唇の山
+	</string>
+	<string name="Lip Cleft Depth">
+		唇の山の高さ
+	</string>
+	<string name="Lip Fullness">
+		唇の厚み
+	</string>
+	<string name="Lip Pinkness">
+		唇の赤み
+	</string>
+	<string name="Lip Ratio">
+		上下唇の大きさ
+	</string>
+	<string name="Lip Thickness">
+		唇の前後幅
+	</string>
+	<string name="Lip Width">
+		口の大きさ
+	</string>
+	<string name="Lipgloss">
+		リップグロス
+	</string>
+	<string name="Lipstick">
+		口紅
+	</string>
+	<string name="Lipstick Color">
+		口紅の色
+	</string>
+	<string name="Long">
+		é•·
+	</string>
+	<string name="Long Head">
+		前後幅が広い頭
+	</string>
+	<string name="Long Hips">
+		é•·
+	</string>
+	<string name="Long Legs">
+		é•·
+	</string>
+	<string name="Long Neck">
+		é•·
+	</string>
+	<string name="Long Pigtails">
+		é•·
+	</string>
+	<string name="Long Ponytail">
+		é•·
+	</string>
+	<string name="Long Torso">
+		é•·
+	</string>
+	<string name="Long arms">
+		é•·
+	</string>
+	<string name="Longcuffs">
+		ロングカフス
+	</string>
+	<string name="Loose Pants">
+		ゆったり
+	</string>
+	<string name="Loose Shirt">
+		ゆるめ
+	</string>
+	<string name="Loose Sleeves">
+		ゆるめ
+	</string>
+	<string name="Love Handles">
+		ウエスト周り
+	</string>
+	<string name="Low">
+		低
+	</string>
+	<string name="Low Heels">
+		ローヒール
+	</string>
+	<string name="Low Jaw">
+		低
+	</string>
+	<string name="Low Platforms">
+		低め
+	</string>
+	<string name="Low and Loose">
+		低めでゆったり
+	</string>
+	<string name="Lower">
+		低
+	</string>
+	<string name="Lower Bridge">
+		鼻筋
+	</string>
+	<string name="Lower Cheeks">
+		ほおの下部
+	</string>
+	<string name="Male">
+		男性
+	</string>
+	<string name="Middle Part">
+		真ん中分け
+	</string>
+	<string name="More">
+		大
+	</string>
+	<string name="More Blush">
+		きつめ
+	</string>
+	<string name="More Body Fat">
+		多め
+	</string>
+	<string name="More Curtains">
+		多め
+	</string>
+	<string name="More Eyeshadow">
+		あり
+	</string>
+	<string name="More Freckles">
+		多め
+	</string>
+	<string name="More Full">
+		厚い
+	</string>
+	<string name="More Gravity">
+		大
+	</string>
+	<string name="More Lipstick">
+		あり
+	</string>
+	<string name="More Love">
+		大
+	</string>
+	<string name="More Lower Lip">
+		大
+	</string>
+	<string name="More Muscles">
+		多め
+	</string>
+	<string name="More Muscular">
+		筋骨隆々
+	</string>
+	<string name="More Rosy">
+		多め
+	</string>
+	<string name="More Round">
+		まる
+	</string>
+	<string name="More Saddle">
+		大
+	</string>
+	<string name="More Sloped">
+		なだらか
+	</string>
+	<string name="More Square">
+		四角
+	</string>
+	<string name="More Upper Lip">
+		大
+	</string>
+	<string name="More Vertical">
+		åž‚ç›´
+	</string>
+	<string name="More Volume">
+		大
+	</string>
+	<string name="More soul">
+		大
+	</string>
+	<string name="Moustache">
+		口ひげ
+	</string>
+	<string name="Mouth Corner">
+		口角
+	</string>
+	<string name="Mouth Position">
+		口の位置
+	</string>
+	<string name="Mowhawk">
+		モヒカン
+	</string>
+	<string name="Muscular">
+		筋骨たくましい
+	</string>
+	<string name="Mutton Chops">
+		マトンチョップス
+	</string>
+	<string name="Nail Polish">
+		マニキュア
+	</string>
+	<string name="Nail Polish Color">
+		マニキュアの色
+	</string>
+	<string name="Narrow">
+		ç‹­
+	</string>
+	<string name="Narrow Back">
+		ç‹­
+	</string>
+	<string name="Narrow Front">
+		ç‹­
+	</string>
+	<string name="Narrow Lips">
+		おちょぼ口
+	</string>
+	<string name="Natural">
+		ナチュラル
+	</string>
+	<string name="Neck Length">
+		首の長さ
+	</string>
+	<string name="Neck Thickness">
+		首の太さ
+	</string>
+	<string name="No Blush">
+		なし
+	</string>
+	<string name="No Eyeliner">
+		なし
+	</string>
+	<string name="No Eyeshadow">
+		なし
+	</string>
+	<string name="No Heels">
+		なし
+	</string>
+	<string name="No Lipgloss">
+		なし
+	</string>
+	<string name="No Lipstick">
+		なし
+	</string>
+	<string name="No Part">
+		なし
+	</string>
+	<string name="No Polish">
+		なし
+	</string>
+	<string name="No Red">
+		なし
+	</string>
+	<string name="No Spikes">
+		なし
+	</string>
+	<string name="No White">
+		なし
+	</string>
+	<string name="No Wrinkles">
+		なし
+	</string>
+	<string name="Normal Lower">
+		Normal Lower
+	</string>
+	<string name="Normal Upper">
+		Normal Upper
+	</string>
+	<string name="Nose Left">
+		左曲がり
+	</string>
+	<string name="Nose Right">
+		右曲がり
+	</string>
+	<string name="Nose Size">
+		鼻の大きさ
+	</string>
+	<string name="Nose Thickness">
+		鼻の厚み
+	</string>
+	<string name="Nose Tip Angle">
+		鼻先の角度
+	</string>
+	<string name="Nose Tip Shape">
+		鼻先の形
+	</string>
+	<string name="Nose Width">
+		鼻の幅
+	</string>
+	<string name="Nostril Division">
+		鼻の穴の高さ
+	</string>
+	<string name="Nostril Width">
+		鼻の穴の幅
+	</string>
+	<string name="Old">
+		Old
+	</string>
+	<string name="Opaque">
+		濃いめ
+	</string>
+	<string name="Open">
+		オープン
+	</string>
+	<string name="Open Back">
+		後ろあき
+	</string>
+	<string name="Open Front">
+		前あき
+	</string>
+	<string name="Open Left">
+		左あき
+	</string>
+	<string name="Open Right">
+		右あき
+	</string>
+	<string name="Orange">
+		オレンジ
+	</string>
+	<string name="Out">
+		外向き
+	</string>
+	<string name="Out Shdw Color">
+		外側のシャドウカラー
+	</string>
+	<string name="Out Shdw Opacity">
+		外側のシャドウの濃さ
+	</string>
+	<string name="Outer Eye Corner">
+		目尻
+	</string>
+	<string name="Outer Eye Shadow">
+		外側のアイシャドウ
+	</string>
+	<string name="Outer Shadow">
+		外側のシャドウ
+	</string>
+	<string name="Overbite">
+		出っ歯
+	</string>
+	<string name="Package">
+		パッケージ
+	</string>
+	<string name="Painted Nails">
+		あり
+	</string>
+	<string name="Pale">
+		悪い
+	</string>
+	<string name="Pants Crotch">
+		パンツの股
+	</string>
+	<string name="Pants Fit">
+		パンツのフィット感
+	</string>
+	<string name="Pants Length">
+		パンツ丈
+	</string>
+	<string name="Pants Waist">
+		ウエスト
+	</string>
+	<string name="Pants Wrinkles">
+		パンツのしわ
+	</string>
+	<string name="Part">
+		あり
+	</string>
+	<string name="Part Bangs">
+		分けた前髪
+	</string>
+	<string name="Pectorals">
+		胸筋
+	</string>
+	<string name="Pigment">
+		色素
+	</string>
+	<string name="Pigtails">
+		下げ髪
+	</string>
+	<string name="Pink">
+		ピンク
+	</string>
+	<string name="Pinker">
+		ピンク
+	</string>
+	<string name="Platform Height">
+		靴底の高さ
+	</string>
+	<string name="Platform Width">
+		靴底の幅
+	</string>
+	<string name="Pointy">
+		尖った
+	</string>
+	<string name="Pointy Heels">
+		å¹…ç‹­
+	</string>
+	<string name="Pointy Toe">
+		先の細いつま先
+	</string>
+	<string name="Ponytail">
+		ポニーテール
+	</string>
+	<string name="Poofy Skirt">
+		ふんわり
+	</string>
+	<string name="Pop Left Eye">
+		左目を大きく
+	</string>
+	<string name="Pop Right Eye">
+		右目を大きく
+	</string>
+	<string name="Puffy">
+		ふっくら
+	</string>
+	<string name="Puffy Eyelids">
+		目の周りの膨らみ
+	</string>
+	<string name="Rainbow Color">
+		虹色
+	</string>
+	<string name="Red Hair">
+		赤毛
+	</string>
+	<string name="Red Skin">
+		赤い肌
+	</string>
+	<string name="Regular">
+		均整のとれた
+	</string>
+	<string name="Regular Muscles">
+		均整のとれた筋肉
+	</string>
+	<string name="Right Part">
+		右分け
+	</string>
+	<string name="Rosy Complexion">
+		ほおの赤らみ
+	</string>
+	<string name="Round">
+		まるっこい
+	</string>
+	<string name="Round Forehead">
+		丸みを帯びた額
+	</string>
+	<string name="Ruddiness">
+		血色
+	</string>
+	<string name="Ruddy">
+		良い
+	</string>
+	<string name="Rumpled Hair">
+		くしゃくしゃヘア
+	</string>
+	<string name="Saddle Bags">
+		腰回りの肉付き
+	</string>
+	<string name="Saddlebags">
+		腰回りの肉付き
+	</string>
+	<string name="Scrawny">
+		骨張った
+	</string>
+	<string name="Scrawny Leg">
+		骨張った脚
+	</string>
+	<string name="Separate">
+		離れた
+	</string>
+	<string name="Shading">
+		Shading
+	</string>
+	<string name="Shadow hair">
+		Shadow hair
+	</string>
+	<string name="Shallow">
+		なだらか
+	</string>
+	<string name="Shear Back">
+		後方を刈る
+	</string>
+	<string name="Shear Face">
+		顔のゆがみ
+	</string>
+	<string name="Shear Front">
+		前方を刈る
+	</string>
+	<string name="Shear Left">
+		左側
+	</string>
+	<string name="Shear Left Up">
+		左半分を上に
+	</string>
+	<string name="Shear Right">
+		右側
+	</string>
+	<string name="Shear Right Up">
+		右半分を上に
+	</string>
+	<string name="Sheared Back">
+		後ろを刈られた髪
+	</string>
+	<string name="Sheared Front">
+		前を刈られた髪
+	</string>
+	<string name="Shift Left">
+		左向き
+	</string>
+	<string name="Shift Mouth">
+		口の向き
+	</string>
+	<string name="Shift Right">
+		右向き
+	</string>
+	<string name="Shirt Bottom">
+		シャツの裾
+	</string>
+	<string name="Shirt Fit">
+		シャツのフィット感
+	</string>
+	<string name="Shirt Wrinkles">
+		シャツのしわ
+	</string>
+	<string name="Shoe Height">
+		靴の長さ
+	</string>
+	<string name="Short">
+		短
+	</string>
+	<string name="Short Arms">
+		短
+	</string>
+	<string name="Short Legs">
+		短
+	</string>
+	<string name="Short Neck">
+		短
+	</string>
+	<string name="Short Pigtails">
+		短
+	</string>
+	<string name="Short Ponytail">
+		短
+	</string>
+	<string name="Short Sideburns">
+		短め
+	</string>
+	<string name="Short Torso">
+		短
+	</string>
+	<string name="Short hips">
+		短
+	</string>
+	<string name="Shoulders">
+		è‚©
+	</string>
+	<string name="Side Bangs">
+		サイドに流した前髪
+	</string>
+	<string name="Side Bangs Down">
+		ダウン
+	</string>
+	<string name="Side Bangs Up">
+		アップ
+	</string>
+	<string name="Side Fringe">
+		サイドの毛先
+	</string>
+	<string name="Sideburns">
+		もみあげ
+	</string>
+	<string name="Sides Hair">
+		サイドの髪
+	</string>
+	<string name="Sides Hair Down">
+		ダウン
+	</string>
+	<string name="Sides Hair Up">
+		アップ
+	</string>
+	<string name="Skinny">
+		細身
+	</string>
+	<string name="Skinny Neck">
+		ç´°
+	</string>
+	<string name="Skirt Fit">
+		スカートのフィット感
+	</string>
+	<string name="Skirt Length">
+		スカート丈
+	</string>
+	<string name="Slanted Forehead">
+		傾斜した額
+	</string>
+	<string name="Sleeve Length">
+		袖丈
+	</string>
+	<string name="Sleeve Looseness">
+		袖のフィット感
+	</string>
+	<string name="Slit Back">
+		スリット: 後ろ
+	</string>
+	<string name="Slit Front">
+		スリット: 前
+	</string>
+	<string name="Slit Left">
+		スリット: 左
+	</string>
+	<string name="Slit Right">
+		スリット: 右
+	</string>
+	<string name="Small">
+		小
+	</string>
+	<string name="Small Hands">
+		小
+	</string>
+	<string name="Small Head">
+		小
+	</string>
+	<string name="Smooth">
+		滑らか
+	</string>
+	<string name="Smooth Hair">
+		スムーズ
+	</string>
+	<string name="Socks Length">
+		靴下丈
+	</string>
+	<string name="Some">
+		Some
+	</string>
+	<string name="Soulpatch">
+		ソウルパッチ
+	</string>
+	<string name="Sparse">
+		è–„
+	</string>
+	<string name="Spiked Hair">
+		とげとげヘア
+	</string>
+	<string name="Square">
+		角張った
+	</string>
+	<string name="Square Toe">
+		スクエアトゥ
+	</string>
+	<string name="Squash Head">
+		カボチャ型
+	</string>
+	<string name="Squash/Stretch Head">
+		カボチャ/縦長頭
+	</string>
+	<string name="Stretch Head">
+		縦長
+	</string>
+	<string name="Sunken">
+		こけた
+	</string>
+	<string name="Sunken Chest">
+		小
+	</string>
+	<string name="Sunken Eyes">
+		くぼんだ目
+	</string>
+	<string name="Sweep Back">
+		後ろへ
+	</string>
+	<string name="Sweep Forward">
+		前へ
+	</string>
+	<string name="Swept Back">
+		オールバック
+	</string>
+	<string name="Swept Back Hair">
+		オールバックヘア
+	</string>
+	<string name="Swept Forward">
+		前へ
+	</string>
+	<string name="Swept Forward Hair">
+		後ろへ
+	</string>
+	<string name="Tall">
+		高
+	</string>
+	<string name="Taper Back">
+		後ろに先細
+	</string>
+	<string name="Taper Front">
+		前に先細
+	</string>
+	<string name="Thick Heels">
+		幅広
+	</string>
+	<string name="Thick Neck">
+		太
+	</string>
+	<string name="Thick Toe">
+		厚め
+	</string>
+	<string name="Thickness">
+		厚み
+	</string>
+	<string name="Thin">
+		薄い
+	</string>
+	<string name="Thin Eyebrows">
+		ç´°
+	</string>
+	<string name="Thin Lips">
+		小
+	</string>
+	<string name="Thin Nose">
+		細い鼻
+	</string>
+	<string name="Tight Chin">
+		ひきしまったあご
+	</string>
+	<string name="Tight Cuffs">
+		タイト
+	</string>
+	<string name="Tight Pants">
+		タイト
+	</string>
+	<string name="Tight Shirt">
+		タイト
+	</string>
+	<string name="Tight Skirt">
+		タイト
+	</string>
+	<string name="Tight Sleeves">
+		タイト
+	</string>
+	<string name="Tilt Left">
+		左に傾斜
+	</string>
+	<string name="Tilt Right">
+		右に傾斜
+	</string>
+	<string name="Toe Shape">
+		つま先の形
+	</string>
+	<string name="Toe Thickness">
+		つま先の厚み
+	</string>
+	<string name="Torso Length">
+		上半身の長さ
+	</string>
+	<string name="Torso Muscles">
+		上半身の筋肉
+	</string>
+	<string name="Torso Scrawny">
+		上半身の骨張り
+	</string>
+	<string name="Unattached">
+		大
+	</string>
+	<string name="Uncreased">
+		軽いまぶた
+	</string>
+	<string name="Underbite">
+		受け口
+	</string>
+	<string name="Unnatural">
+		ユニーク
+	</string>
+	<string name="Upper Bridge">
+		両目のあいだ
+	</string>
+	<string name="Upper Cheeks">
+		ほおの上部
+	</string>
+	<string name="Upper Chin Cleft">
+		あご上部の割れ具合
+	</string>
+	<string name="Upper Eyelid Fold">
+		二重の幅
+	</string>
+	<string name="Upturned">
+		上向き
+	</string>
+	<string name="Very Red">
+		真っ赤
+	</string>
+	<string name="Waist Height">
+		ウエストの高さ
+	</string>
+	<string name="Well-Fed">
+		つまった
+	</string>
+	<string name="White Hair">
+		白髪
+	</string>
+	<string name="Wide">
+		広
+	</string>
+	<string name="Wide Back">
+		広
+	</string>
+	<string name="Wide Front">
+		広
+	</string>
+	<string name="Wide Lips">
+		大きい口
+	</string>
+	<string name="Wild">
+		ワイルド
+	</string>
+	<string name="Wrinkles">
+		しわあり
+	</string>
+	<string name="LocationCtrlAddLandmarkTooltip">
+		マイ ランドマークに追加
+	</string>
+	<string name="LocationCtrlEditLandmarkTooltip">
+		マイ ランドマークを編集
+	</string>
+	<string name="UpdaterWindowTitle">
+		[APP_NAME] アップデート
+	</string>
+	<string name="UpdaterNowUpdating">
+		只今 [APP_NAME] をアップデート中です...
+	</string>
+	<string name="UpdaterNowInstalling">
+		[APP_NAME] をインストール中です...
+	</string>
+	<string name="UpdaterUpdatingDescriptive">
+		お使いの [APP_NAME] ビューワが最新バージョンにアップデートされています。  数分かかることがありますのでしばらくお待ちください。
+	</string>
+	<string name="UpdaterProgressBarTextWithEllipses">
+		アップデートをダウンロード中です...
+	</string>
+	<string name="UpdaterProgressBarText">
+		アップデートをダウンロード中
+	</string>
+	<string name="UpdaterFailDownloadTitle">
+		アップデートのダウンロードに失敗しました
+	</string>
+	<string name="UpdaterFailUpdateDescriptive">
+		[APP_NAME] をアップデート中にエラーが発生しました。 www.secondlife.com から最新バージョンをダウンロードしてください。
+	</string>
+	<string name="UpdaterFailInstallTitle">
+		アップデートのインストールに失敗しました
+	</string>
+	<string name="UpdaterFailStartTitle">
+		ビューワの起動に失敗しました
+	</string>
+	<string name="only_user_message">
+		このセッションにいるユーザーはあなただけです。
+	</string>
+	<string name="offline_message">
+		[FIRST] [LAST]はオフラインです。
+	</string>
+	<string name="invite_message">
+		このボイスチャットに応答/接続する場合は、[BUTTON NAME]をクリックしてください。
+	</string>
+	<string name="generic_request_error">
+		要求中にエラーが発生しました。後でもう一度試してください。
+	</string>
+	<string name="insufficient_perms_error">
+		あなたには充分な権限がありません。
+	</string>
+	<string name="session_does_not_exist_error">
+		このセッションは既に切断されています。
+	</string>
+	<string name="no_ability_error">
+		あなたにはその能力がありません。
+	</string>
+	<string name="no_ability">
+		あなたにはその能力がありません。
+	</string>
+	<string name="not_a_mod_error">
+		あなたはセッション・モデレータではありません。
+	</string>
+	<string name="muted_error">
+		グループモデレータがあなたのテキストチャットを無効化しました
+	</string>
+	<string name="add_session_event">
+		[RECIPIENT] とのチャット・セッションにユーザーを追加することができません
+	</string>
+	<string name="message_session_event">
+		[RECIPIENT] とのチャット・セッションにメッセージを送ることができません
+	</string>
+	<string name="removed_from_group">
+		あなたはグループから削除されました。
+	</string>
+	<string name="close_on_no_ability">
+		このチャット・セッションを継続することはできません
+	</string>
+</strings>
diff --git a/indra/newview/skins/default/xui/ja/teleport_strings.xml b/indra/newview/skins/default/xui/ja/teleport_strings.xml
index 7e99d2562ee..ef7571cac49 100644
--- a/indra/newview/skins/default/xui/ja/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/ja/teleport_strings.xml
@@ -1,79 +1,79 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<teleport_messages name="">
-	<message_set name="errors">
-		<message name="invalid_tport">
-			テレポート・リクエストの処理中に問題が発生しました。テレポートするには、再度ログインする必要があります。
-このメッセージが引き続き表示される場合は、技術サポートFAQ(www.secondlife.com/support)を参照してください。
-		</message>
-		<message name="invalid_region_handoff">
-			地域間の移動の処理中に問題が発生しました。地域間を移動するには、再度ログインする必要があります。
-このメッセージが引き続き表示される場合は、技術サポートFAQ(www.secondlife.com/support)を参照してください。
-		</message>
-		<message name="blocked_tport">
-			申し訳ございません。テレポートは現在、ブロックされています。もう少し後でやり直してください。
-やり直してもテレポートできない場合は、いったんログアウトし、再度ログインして問題を解決してください。
-		</message>
-		<message name="nolandmark_tport">
-			残念ながら、システムはランドマーク目的地を探せませんでした。
-		</message>
-		<message name="timeout_tport">
-			申し訳ございません。システムはテレポート接続を完了できませんでした。
-もう少し後でやり直してください。
-		</message>
-		<message name="noaccess_tport">
-			残念ながら、そのテレポート目的地へのアクセスがありません。
-		</message>
-		<message name="missing_attach_tport">
-			添付物は、まだ到着していません。あと数秒間お待ちいただくか、いったんログアウトし、再度ログインしてからテレポートをやり直してださい。
-		</message>
-		<message name="too_many_uploads_tport">
-			この地域の資産キューが現在込み合っているため、テレポート・リクエストを時間通りに処理することが難しい状況です。
-数分後にやり直すか、または混雑していない他の地域をお試しください。
-		</message>
-		<message name="expired_tport">
-			申し訳ございません。システムはテレポート・リクエストを時間どおりに完了できませんでした。数分後にやり直してください。
-		</message>
-		<message name="expired_region_handoff">
-			申し訳ございません。システムは地域間の移動を時間どおりに完了できませんでした。
-数分後にやり直してください。
-		</message>
-		<message name="no_host">
-			テレポート目的地を見つけられません。目的地が一時的に利用できない状態か、またはすでに消滅している可能性があります。数分後にやり直してください。
-		</message>
-		<message name="no_inventory_host">
-			持ち物システムは現在利用できません。
-		</message>
-	</message_set>
-	<message_set name="progress">
-		<message name="sending_dest">
-			目的地に送信しています。
-		</message>
-		<message name="redirecting">
-			別の目的地に再案内しています。
-		</message>
-		<message name="relaying">
-			目的地に中継しています。
-		</message>
-		<message name="sending_home">
-			ホーム位置リクエストを送信しています。
-		</message>
-		<message name="sending_landmark">
-			ランドマーク位置リクエストを送信しています。
-		</message>
-		<message name="completing">
-			テレポートを完了しています。
-		</message>
-		<message name="resolving">
-			目的地を解決しています。
-		</message>
-		<message name="contacting">
-			新しい地域にコンタクトしています。
-		</message>
-		<message name="arriving">
-			到着...
-		</message>
-		<message name="requesting">
-			テレポートをリクエスト...
-		</message>
-	</message_set>
-</teleport_messages>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<teleport_messages name="">
+	<message_set name="errors">
+		<message name="invalid_tport">
+			テレポート処理中に問題が発生しました。 ログインし直す必要があるかもしれません。
+このメッセージが何度も出る場合は、[SUPPORT_SITE] へご連絡ください。
+		</message>
+		<message name="invalid_region_handoff">
+			リージョン間の移動中に問題が発生しました。 ログインし直す必要があるかもしれません。
+このメッセージが何度も出る場合は、[SUPPORT_SITE] へご連絡ください。
+		</message>
+		<message name="blocked_tport">
+			申し訳ございません。テレポートは現在、ブロックされています。もう少し後でやり直してください。
+やり直してもテレポートできない場合は、いったんログアウトし、再度ログインして問題を解決してください。
+		</message>
+		<message name="nolandmark_tport">
+			残念ながら、システムはランドマーク目的地を探せませんでした。
+		</message>
+		<message name="timeout_tport">
+			申し訳ございません。システムはテレポート接続を完了できませんでした。
+もう少し後でやり直してください。
+		</message>
+		<message name="noaccess_tport">
+			残念ながら、そのテレポート目的地へのアクセスがありません。
+		</message>
+		<message name="missing_attach_tport">
+			添付物は、まだ到着していません。あと数秒間お待ちいただくか、いったんログアウトし、再度ログインしてからテレポートをやり直してださい。
+		</message>
+		<message name="too_many_uploads_tport">
+			この地域の資産キューが現在込み合っているため、テレポート・リクエストを時間通りに処理することが難しい状況です。
+数分後にやり直すか、または混雑していない他の地域をお試しください。
+		</message>
+		<message name="expired_tport">
+			申し訳ございません。システムはテレポート・リクエストを時間どおりに完了できませんでした。数分後にやり直してください。
+		</message>
+		<message name="expired_region_handoff">
+			申し訳ございません。システムは地域間の移動を時間どおりに完了できませんでした。
+数分後にやり直してください。
+		</message>
+		<message name="no_host">
+			テレポート目的地を見つけられません。目的地が一時的に利用できない状態か、またはすでに消滅している可能性があります。数分後にやり直してください。
+		</message>
+		<message name="no_inventory_host">
+			持ち物システムは現在利用できません。
+		</message>
+	</message_set>
+	<message_set name="progress">
+		<message name="sending_dest">
+			目的地に送信しています。
+		</message>
+		<message name="redirecting">
+			別の目的地に再案内しています。
+		</message>
+		<message name="relaying">
+			目的地に中継しています。
+		</message>
+		<message name="sending_home">
+			ホーム位置リクエストを送信しています。
+		</message>
+		<message name="sending_landmark">
+			ランドマーク位置リクエストを送信しています。
+		</message>
+		<message name="completing">
+			テレポートを完了しています。
+		</message>
+		<message name="resolving">
+			目的地を解決しています。
+		</message>
+		<message name="contacting">
+			新しい地域にコンタクトしています。
+		</message>
+		<message name="arriving">
+			到着...
+		</message>
+		<message name="requesting">
+			テレポートをリクエスト...
+		</message>
+	</message_set>
+</teleport_messages>
-- 
GitLab


From def4a6aeea35fbced77894fb6577ad2889c877b3 Mon Sep 17 00:00:00 2001
From: "Justin C. Rounds (Chuck)" <chuck@lindenlab.com>
Date: Tue, 10 Nov 2009 13:17:49 -0500
Subject: [PATCH 302/306] Changed value of "Unused?" to modify highlight color.
 http://jira.secondlife.com/browse/EXT-2312

---
 indra/newview/skins/default/colors.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 572a4cf9e95..7e19a80c109 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -70,7 +70,7 @@
 	 value="1 1 0 1" />
 	<color
 	 name="Unused?"
-	 value="1 0 1 1" />
+	 value="1 0.5 0 1" />
 	<color
 	 name="Transparent"
 	 value="0 0 0 0" />
-- 
GitLab


From f8f8b0502e3a94933109778c0fe9917700ad1119 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Tue, 10 Nov 2009 11:30:17 -0800
Subject: [PATCH 303/306] Added an explicit copy constructor to
 LLPluginMessage.

---
 indra/llplugin/llpluginmessage.cpp | 5 +++++
 indra/llplugin/llpluginmessage.h   | 1 +
 2 files changed, 6 insertions(+)

diff --git a/indra/llplugin/llpluginmessage.cpp b/indra/llplugin/llpluginmessage.cpp
index e7412a1d8f8..32601b47dbb 100644
--- a/indra/llplugin/llpluginmessage.cpp
+++ b/indra/llplugin/llpluginmessage.cpp
@@ -39,6 +39,11 @@ LLPluginMessage::LLPluginMessage()
 {
 }
 
+LLPluginMessage::LLPluginMessage(const LLPluginMessage &p)
+{
+	mMessage = p.mMessage;
+}
+
 LLPluginMessage::LLPluginMessage(const std::string &message_class, const std::string &message_name)
 {
 	setMessage(message_class, message_name);
diff --git a/indra/llplugin/llpluginmessage.h b/indra/llplugin/llpluginmessage.h
index f1a0e7c6243..5e93d8b7a1c 100644
--- a/indra/llplugin/llpluginmessage.h
+++ b/indra/llplugin/llpluginmessage.h
@@ -40,6 +40,7 @@ class LLPluginMessage
 	LOG_CLASS(LLPluginMessage);
 public:
 	LLPluginMessage();
+	LLPluginMessage(const LLPluginMessage &p);
 	LLPluginMessage(const std::string &message_class, const std::string &message_name);
 	~LLPluginMessage();
 	
-- 
GitLab


From ecf8f5c5beda9f5fa743c4666717c4378f204023 Mon Sep 17 00:00:00 2001
From: Lis Pardi <lis@lindenlab.com>
Date: Tue, 10 Nov 2009 15:01:29 -0500
Subject: [PATCH 304/306] EXT-1503 Cosmetic and Polish issues with Viewer 2.0
 Internal Alphan -- Notifications with long headlines are overlapping with
 text

---
 indra/newview/skins/default/xui/en/panel_group_notify.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml
index bd98996ae13..ef3120174e8 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml
@@ -25,7 +25,7 @@
      name="subject"
      text_color="GroupNotifyTextColor"
      font="SansSerifBig"
-     top="60"
+     top="40"
      use_ellipses="true"
      value="subject"
      width="300"
-- 
GitLab


From caa468a5f184a1c2dd2cd1f2c4a7aafc5acf05d0 Mon Sep 17 00:00:00 2001
From: Rick Pasetto <rick@lindenlab.com>
Date: Tue, 10 Nov 2009 12:58:10 -0800
Subject: [PATCH 305/306] fix for gcc

---
 indra/llui/lluictrlfactory.cpp | 6 ++++++
 indra/llui/lluictrlfactory.h   | 7 ++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index c3c0daed0f4..8ab015f2bb8 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -449,3 +449,9 @@ const std::string* LLUICtrlFactory::getWidgetTag(const std::type_info* widget_ty
 {
 	return LLWidgetNameRegistry::instance().getValue(widget_type);
 }
+
+// static
+void LLUICtrlFactory::connect(LLView* parent, LLView* child)
+{
+	parent->addChild(child);
+}
\ No newline at end of file
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index 0ccd3047f6c..8a9c9e23c1d 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -188,10 +188,15 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
 		T* widget = new T(params);
 		widget->initFromParams(params);
 		if (parent)
-			parent->addChild(widget);
+		{
+			connect(parent, widget);
+		}
 		return widget;
 	}
 
+	// fix for gcc template instantiation annoyance
+	static void connect(LLView* parent, LLView* child);
+	
 	LLView* createFromXML(LLXMLNodePtr node, LLView* parent, const std::string& filename, const widget_registry_t&, LLXMLNodePtr output_node );
 
 	template<typename T>
-- 
GitLab


From 25d8cf689aa04a1bd4ebb336714730d29040d05c Mon Sep 17 00:00:00 2001
From: Rick Pasetto <rick@lindenlab.com>
Date: Tue, 10 Nov 2009 13:03:16 -0800
Subject: [PATCH 306/306] further fixes in gcc land

---
 indra/llui/lllayoutstack.cpp | 2 +-
 indra/llui/lllayoutstack.h   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index 5999e1a29e0..9399ace1f79 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -792,7 +792,7 @@ void LLLayoutStack::calcMinExtents()
 //static 
 void LLLayoutStack::updateClass()
 {
-	for (LLInstanceTracker::instance_iter it = beginInstances(); it != endInstances(); ++it)
+	for (LLInstanceTracker<LLLayoutStack>::instance_iter it = beginInstances(); it != endInstances(); ++it)
 	{
 		(*it)->updateLayout();
 	}
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index 8475079f5eb..3a073fa1b28 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -38,7 +38,7 @@
 
 class LLPanel;
 
-class LLLayoutStack : public LLView, LLInstanceTracker<LLLayoutStack>
+class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
 {
 public:
 	struct Params : public LLInitParam::Block<Params, LLView::Params>
-- 
GitLab