diff --git a/indra/llmessage/llclassifiedflags.h b/indra/llmessage/llclassifiedflags.h
index dafd0ceb62560feba8d65bd2fa9df18c5f5d2d55..9c6c268b397e76d5e9d51a8494e22b5d827e2cf2 100644
--- a/indra/llmessage/llclassifiedflags.h
+++ b/indra/llmessage/llclassifiedflags.h
@@ -47,7 +47,6 @@ const U8 CLASSIFIED_QUERY_INC_ADULT         = 1 << 6;
 const U8 CLASSIFIED_QUERY_INC_NEW_VIEWER    = (CLASSIFIED_QUERY_INC_PG | CLASSIFIED_QUERY_INC_MATURE | CLASSIFIED_QUERY_INC_ADULT);
 
 const S32 MAX_CLASSIFIEDS = 100;
-const S32 MINIMUM_PRICE_FOR_LISTING = 50;  // L$
 
 // This function is used in AO viewers to pack old query flags into the request
 // so that they can talk to old dataservers properly. When the AO servers are deployed on agni
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 5c42f9145d751aba95a179edd989902518f14830..f3aa40b0c0286e4bc93510ba84da236c05d9e265 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -113,6 +113,7 @@ set(viewer_SOURCE_FILES
     bdfloaterposer.cpp
     bdfloaterposecreator.cpp
     bdposingmotion.cpp
+    fsfloatersearch.cpp
     fslslpreproc.cpp
     fslslpreprocviewer.cpp
     gltfscenemanager.cpp
@@ -129,7 +130,6 @@ set(viewer_SOURCE_FILES
     llagentbenefits.cpp
     llagentcamera.cpp
     llagentdata.cpp
-    llagenthandler.cpp
     llagentlanguage.cpp
     llagentlistener.cpp
     llagentpicksinfo.cpp
@@ -167,7 +167,6 @@ set(viewer_SOURCE_FILES
     llchiclet.cpp
     llchicletbar.cpp
     llclassifiedinfo.cpp
-    llclassifieditem.cpp
     llcofwearables.cpp
     llcolorswatch.cpp
     llcommanddispatcherlistener.cpp
@@ -264,7 +263,6 @@ set(viewer_SOURCE_FILES
     llfloatercreatelandmark.cpp
     llfloaterdeleteprefpreset.cpp
     llfloaterdestinations.cpp
-    llfloaterdirectory.cpp
     llfloaterdisplayname.cpp
     llfloatereditenvironmentbase.cpp
     llfloatereditextdaycycle.cpp
@@ -331,14 +329,12 @@ set(viewer_SOURCE_FILES
     llfloaterperformance.cpp
     llfloaterperms.cpp
     llfloaterprofile.cpp
-    llfloaterprofilelegacy.cpp
     llfloaterpreference.cpp
     llfloaterpreferencesgraphicsadvanced.cpp
     llfloaterpreferenceviewadvanced.cpp
     llfloaterpreviewtrash.cpp
     llfloaterprofiletexture.cpp
     llfloaterprogressview.cpp
-    llfloaterpublishclassified.cpp
     llfloaterregiondebugconsole.cpp
     llfloaterregioninfo.cpp
     llfloaterreporter.cpp
@@ -370,7 +366,6 @@ set(viewer_SOURCE_FILES
     llfloatervoiceeffect.cpp
     llfloatervoicevolume.cpp
     llfloaterwebcontent.cpp
-    llfloaterwebprofile.cpp
     llfloaterwhitelistentry.cpp
     llfloaterwindowsize.cpp
     llfloaterworldmap.cpp
@@ -489,7 +484,6 @@ set(viewer_SOURCE_FILES
     lloutputmonitorctrl.cpp
     llpanelappearancetab.cpp
     llpanelavatar.cpp
-    llpanelavatarlegacy.cpp
     llpanelavatartag.cpp
     llpanelblockedlist.cpp
     llpanelclassified.cpp
@@ -499,7 +493,6 @@ set(viewer_SOURCE_FILES
     llpaneleditwearable.cpp
     llpanelemojicomplete.cpp
     llpanelenvironment.cpp
-    llpaneleventinfo.cpp
     llpanelexperiencelisteditor.cpp
     llpanelexperiencelog.cpp
     llpanelexperiencepicker.cpp
@@ -539,7 +532,6 @@ set(viewer_SOURCE_FILES
     llpanelpeople.cpp
     llpanelpeoplemenus.cpp
     llpanelpermissions.cpp
-    llpanelpick.cpp
     llpanelplaceinfo.cpp
     llpanelplaceprofile.cpp
     llpanelplaces.cpp
@@ -548,17 +540,8 @@ set(viewer_SOURCE_FILES
     llpanelpresetspulldown.cpp
     llpanelprimmediacontrols.cpp
     llpanelprofile.cpp
-    llpanelprofilelegacy.cpp
     llpanelprofileclassifieds.cpp
     llpanelprofilepicks.cpp
-    llpanelsearchbase.cpp
-    llpanelsearchclassifieds.cpp
-    llpanelsearchevents.cpp
-    llpanelsearchgroups.cpp
-    llpanelsearchlandsales.cpp
-    llpanelsearchpeople.cpp
-    llpanelsearchplaces.cpp
-    llpanelsearchweb.cpp
     llpanelsnapshot.cpp
     llpanelsnapshotinventory.cpp
     llpanelsnapshotlocal.cpp
@@ -591,7 +574,6 @@ set(viewer_SOURCE_FILES
     llpersistentnotificationstorage.cpp
     llphysicsmotion.cpp
     llphysicsshapebuilderutil.cpp
-    llpickitem.cpp
     llpipelinelistener.cpp
     llplacesinventorybridge.cpp
     llplacesinventorypanel.cpp
@@ -608,7 +590,6 @@ set(viewer_SOURCE_FILES
     llpreviewtexture.cpp
     llproductinforequest.cpp
     llprogressview.cpp
-    llprofileimagepicker.cpp
     llrecentpeople.cpp
     llreflectionmap.cpp
     llreflectionmapmanager.cpp
@@ -859,6 +840,7 @@ set(viewer_HEADER_FILES
     bdfloaterposer.h
     bdfloaterposecreator.h
     bdposingmotion.h
+    fsfloatersearch.h
     fslslpreproc.h
     fslslpreprocviewer.h
     gltfscenemanager.h
@@ -914,7 +896,6 @@ set(viewer_HEADER_FILES
     llchiclet.h
     llchicletbar.h
     llclassifiedinfo.h
-    llclassifieditem.h
     llcofwearables.h
     llcolorswatch.h
     llcommanddispatcherlistener.h
@@ -1011,7 +992,6 @@ set(viewer_HEADER_FILES
     llfloatercreatelandmark.h
     llfloaterdeleteprefpreset.h
     llfloaterdestinations.h
-    llfloaterdirectory.h
     llfloaterdisplayname.h
     llfloatereditenvironmentbase.h
     llfloatereditextdaycycle.h
@@ -1081,14 +1061,12 @@ set(viewer_HEADER_FILES
     llfloaterperformance.h
     llfloaterperms.h
     llfloaterprofile.h
-    llfloaterprofilelegacy.h
     llfloaterpreference.h
     llfloaterpreferencesgraphicsadvanced.h
     llfloaterpreferenceviewadvanced.h
     llfloaterpreviewtrash.h
     llfloaterprofiletexture.h
     llfloaterprogressview.h
-    llfloaterpublishclassified.h
     llfloaterregiondebugconsole.h
     llfloaterregioninfo.h
     llfloaterreporter.h
@@ -1120,7 +1098,6 @@ set(viewer_HEADER_FILES
     llfloatervoiceeffect.h
     llfloatervoicevolume.h
     llfloaterwebcontent.h
-    llfloaterwebprofile.h
     llfloaterwhitelistentry.h
     llfloaterwindowsize.h
     llfloaterworldmap.h
@@ -1228,7 +1205,6 @@ set(viewer_HEADER_FILES
     lloutputmonitorctrl.h
     llpanelappearancetab.h
     llpanelavatar.h
-    llpanelavatarlegacy.h
     llpanelavatartag.h
     llpanelblockedlist.h
     llpanelclassified.h
@@ -1238,7 +1214,6 @@ set(viewer_HEADER_FILES
     llpaneleditwearable.h
     llpanelemojicomplete.h
     llpanelenvironment.h
-    llpaneleventinfo.h
     llpanelexperiencelisteditor.h
     llpanelexperiencelog.h
     llpanelexperiencepicker.h
@@ -1279,7 +1254,6 @@ set(viewer_HEADER_FILES
     llpanelpeople.h
     llpanelpeoplemenus.h
     llpanelpermissions.h
-    llpanelpick.h
     llpanelplaceinfo.h
     llpanelplaceprofile.h
     llpanelplaces.h
@@ -1288,17 +1262,8 @@ set(viewer_HEADER_FILES
     llpanelpresetspulldown.h
     llpanelprimmediacontrols.h
     llpanelprofile.h
-    llpanelprofilelegacy.h
     llpanelprofileclassifieds.h
     llpanelprofilepicks.h
-    llpanelsearchbase.h
-    llpanelsearchclassifieds.h
-    llpanelsearchevents.h
-    llpanelsearchgroups.h
-    llpanelsearchlandsales.h
-    llpanelsearchpeople.h
-    llpanelsearchplaces.h
-    llpanelsearchweb.h
     llpanelsnapshot.h
     llpanelteleporthistory.h
     llpaneltiptoast.h
@@ -1326,7 +1291,6 @@ set(viewer_HEADER_FILES
     llpersistentnotificationstorage.h
     llphysicsmotion.h
     llphysicsshapebuilderutil.h
-    llpickitem.h
     llpipelinelistener.h
     llplacesinventorybridge.h
     llplacesinventorypanel.h
@@ -1342,7 +1306,6 @@ set(viewer_HEADER_FILES
     llpreviewsound.h
     llpreviewtexture.h
     llproductinforequest.h
-    llprofileimagepicker.h
     llprogressview.h
     llrecentpeople.h
     llreflectionmap.h
diff --git a/indra/newview/alavataractions.cpp b/indra/newview/alavataractions.cpp
index 7668577325aeea6de6fa34ebca902993d5e70b9c..b9bdbc2b13799bb4b0ed5020cfef95a9253d0a4c 100644
--- a/indra/newview/alavataractions.cpp
+++ b/indra/newview/alavataractions.cpp
@@ -36,11 +36,8 @@
 #include "roles_constants.h"
 
 #include "llagent.h"
-#include "llavataractions.h"
-#include "llfloaterreg.h"
 #include "llfloaterregioninfo.h"
 #include "llfloaterreporter.h"
-#include "llfloaterwebcontent.h"
 #include "llslurl.h"
 #include "llviewercontrol.h"
 #include "llviewermenu.h"
@@ -856,21 +853,3 @@ bool ALAvatarActions::handleGodKick(const LLSD& notification, const LLSD& respon
     }
     return false;
 }
-
-// Webprofile junk... for posterity!
-
-static void on_avatar_name_show_profile(const LLUUID& agent_id, const LLAvatarName& av_name)
-{
-    LLFloaterWebContent::Params p;
-    p.url(getProfileURL(av_name.getAccountName())).id(agent_id.asString());
-    LLFloaterReg::showInstance("webprofile", p);
-}
-
-// static
-void ALAvatarActions::showWebProfile(const LLUUID& id)
-{
-    if (id.notNull())
-    {
-        LLAvatarNameCache::get(id, boost::bind(&on_avatar_name_show_profile, _1, _2));
-    }
-}
diff --git a/indra/newview/alavataractions.h b/indra/newview/alavataractions.h
index 03dfe49e516ae470696a6b66fa54376e743c5a44..d6bb2f1792f574399b15a5751e95e94876b9da42 100644
--- a/indra/newview/alavataractions.h
+++ b/indra/newview/alavataractions.h
@@ -94,9 +94,6 @@ class ALAvatarActions
     static void godFreeze(const LLUUID& id);
     static void godUnfreeze(const LLUUID& id);
 
-    // Webprofile
-    static void showWebProfile(const LLUUID& id);
-
 private:
     static bool handleParcelFreeze(const LLSD& notification, const LLSD& response);
     static bool handleParcelEject(const LLSD& notification, const LLSD& response);
diff --git a/indra/newview/alviewermenu.cpp b/indra/newview/alviewermenu.cpp
index ed8a1d223a4a0113fcaab13545a81637e1709cf0..72a9b9a11044672600ff640a62e13b5559b59710 100644
--- a/indra/newview/alviewermenu.cpp
+++ b/indra/newview/alviewermenu.cpp
@@ -410,20 +410,20 @@ namespace
 
     class ALToggleLocationBar : public view_listener_t
     {
-	    bool handleEvent(const LLSD& userdata) override
-	    {
-		    const U32 val = userdata.asInteger();
-		    gSavedSettings.setU32("NavigationBarStyle", val);
-		    return true;
-	    }
+        bool handleEvent(const LLSD& userdata) override
+        {
+            const U32 val = userdata.asInteger();
+            gSavedSettings.setU32("NavigationBarStyle", val);
+            return true;
+        }
     };
 
     class ALCheckLocationBar : public view_listener_t
     {
-	    bool handleEvent(const LLSD& userdata) override
-	    {
-		    return userdata.asInteger() == (S32)gSavedSettings.getU32("NavigationBarStyle");
-	    }
+        bool handleEvent(const LLSD& userdata) override
+        {
+            return userdata.asInteger() == (S32)gSavedSettings.getU32("NavigationBarStyle");
+        }
     };
 }
 
@@ -461,5 +461,5 @@ void ALViewerMenu::initialize_menus()
     commit.add("View.ToggleCinematicMode", [](LLUICtrl* ctrl, const LLSD& param) { toggle_cinematic_mode(); });
 
     view_listener_t::addMenu(new ALToggleLocationBar(), "ToggleLocationBar");
-	view_listener_t::addMenu(new ALCheckLocationBar(), "CheckLocationBar");
+    view_listener_t::addMenu(new ALCheckLocationBar(), "CheckLocationBar");
 }
diff --git a/indra/newview/app_settings/settings_alchemy.xml b/indra/newview/app_settings/settings_alchemy.xml
index acf2676b9667a71ad30da0941adc7347c7f93e10..0fbf3b24a641cbcdab7bf9816bbc942aa4ddaf83 100644
--- a/indra/newview/app_settings/settings_alchemy.xml
+++ b/indra/newview/app_settings/settings_alchemy.xml
@@ -1,1091 +1,11 @@
-<?xml version="1.0" ?>
+<?xml version="1.0"?>
 <llsd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:noNamespaceSchemaLocation="llsd.xsd">
-	<map>
-		<key>AlchemyAppearanceShowHints</key>
-		<map>
-			<key>Comment</key>
-			<string>Show visual param hints in appearance editors.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyLinuxVoiceVariant</key>
-		<map>
-			<key>Comment</key>
-			<string>0 - native, 1 - 32bit wine voice, 2 - 64bit wine voice</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>U32</string>
-			<key>Value</key>
-			<integer>2</integer>
-		</map>
-		<key>AlchemyDisableClickToSit</key>
-		<map>
-			<key>Comment</key>
-			<string>Disable automatic sit upon click for sit click action targets</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyCameraExpanded</key>
-		<map>
-			<key>Comment</key>
-			<string>Expanded camera floater</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyCameraNoZoomLimit</key>
-		<map>
-			<key>Comment</key>
-			<string>Disables the minimum zoom distance, allowing more camera freedom</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyChatCommandAnimationOverride</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to control ao</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/ao</string>
-		</map>
-		<key>AlchemyChatCommandCalc</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to calculate expressions</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/calc</string>
-		</map>
-		<key>AlchemyChatCommandClearNearby</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to set clear nearby chat history for this session.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/clr</string>
-		</map>
-		<key>AlchemyChatCommandDrawDistance</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to set draw distance</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/dd</string>
-		</map>
-		<key>AlchemyChatCommandEnable</key>
-		<map>
-			<key>Comment</key>
-			<string>Enable chat bar command line</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyChatCommandGround</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to teleport to ground</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/flr</string>
-		</map>
-		<key>AlchemyChatCommandHeight</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to teleport to specified height</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/gth</string>
-		</map>
-		<key>AlchemyChatCommandHoverHeight</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to hover your height or something</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/hover</string>
-		</map>
-		<key>AlchemyChatCommandHome</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to send avatar home</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/home</string>
-		</map>
-		<key>AlchemyChatCommandMapto</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to teleport to another region</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/mapto</string>
-		</map>
-		<key>AlchemyChatCommandPos</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to teleport to position</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/pos</string>
-		</map>
-		<key>AlchemyChatCommandSetChatChannel</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to set nearby chat channel</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/setchannel</string>
-		</map>
-		<key>AlchemyChatCommandRegionMessage</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to send a region message</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/regionmsg</string>
-		</map>
-		<key>AlchemyChatCommandResyncAnim</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to stop/start in order to resync animations</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/resync</string>
-		</map>
-		<key>AlchemyChatCommandRezPlat</key>
-		<map>
-			<key>Comment</key>
-			<string>Rez a platform</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/plat</string>
-		</map>
-		<key>AlchemyChatCommandRezPlatSize</key>
-		<map>
-			<key>Comment</key>
-			<string>Default size of platform to rez</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<string>20</string>
-		</map>
-		<key>AlchemyChatCommandSetHome</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to set the avatar home</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/sethome</string>
-		</map>
-		<key>AlchemyChatCommandTeleportToCam</key>
-		<map>
-			<key>Comment</key>
-			<string>Command to teleport to cam</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>/tp2cam</string>
-		</map>
-		<key>AlchemyChatMarkUnnamedObjects</key>
-		<map>
-			<key>Comment</key>
-			<string>Marks unnamed objects in chat and IMs.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyCinematicModeHideHoverText</key>
-		<map>
-			<key>Comment</key>
-			<string>Hide Hover Text in cinematic mode.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyDisableCameraCollision</key>
-		<map>
-			<key>Comment</key>
-			<string>Disable collision of camera with objects and ground plane</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyDisableEffectSpiral</key>
-		<map>
-			<key>Comment</key>
-			<string>Disable spiral effects</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyDisableMouseSteering</key>
-		<map>
-			<key>Comment</key>
-			<string>Disable mouse steering. Doing so will stop your camera from resetting, and your avatar from rotating when you click yourself (escape key-like behaviour).</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyEditRootAxis</key>
-		<map>
-			<key>Comment</key>
-			<string>Always use root object as edit pivot point</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyForceFly</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSELETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyGameModeEnable</key>
-		<map>
-			<key>Comment</key>
-			<string>Enables GameMode (Linux Only) for better performance.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyGlobalLightScale</key>
-		<map>
-			<key>Comment</key>
-			<string>Curve White Point</string>
-			<key>Persist</key>
-			<integer>0</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>1.0</real>
-		</map>
-		<key>AlchemyHudTextFadeDistance</key>
-		<map>
-			<key>Comment</key>
-			<string>Distance at which hover text starts fading.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>4.0</real>
-		</map>
-		<key>AlchemyHudTextFadeRange</key>
-		<map>
-			<key>Comment</key>
-			<string>Distance over which hover text will fade out.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>8.0</real>
-		</map>
-		<key>AlchemyIgnoreSimCameraConstraint</key>
-		<map>
-			<key>Comment</key>
-			<string>Ignore simulator collision plane for camera constraints</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyImageDecodeThreads</key>
-		<map>
-			<key>Comment</key>
-			<string>Amount of threads to use for image decoding. 0 = autodetect, 1 = 0ff, >1 number of threads. Needs restart</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>U32</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyInventoryScriptsMono</key>
-		<map>
-			<key>Comment</key>
-			<string>Control whether new scripts in inventory are mono(true) or lsl(false)</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyMoonWalk</key>
-		<map>
-			<key>Comment</key>
-			<string>Walking backwards when moving backwards</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyKeepSettingsOnGPUChange</key>
-		<map>
-			<key>Comment</key>
-			<string>Keep graphical preferences when GPU changes</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyLastDirectoryTab</key>
-		<map>
-			<key>Comment</key>
-			<string>Last active tab in directory floater</string>
-			<key>HideFromEditor</key>
-			<integer>1</integer>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>S32</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyLookAtClampEnabled</key>
-		<map>
-			<key>Comment</key>
-			<string>If true, own look at distance will be clamped to a determined distance</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyLookAtClampDistance</key>
-		<map>
-			<key>Comment</key>
-			<string>Distance at which to clamp own avatar look at</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>1.0</real>
-		</map>
-		<key>AlchemyLookAtPrivate</key>
-		<map>
-			<key>Comment</key>
-			<string>Disable broadcast of own look at to other users.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyMapShowAgentCount</key>
-		<map>
-			<key>Comment</key>
-			<string>Show count of users in region on world map</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyMinimapChatRings</key>
-		<map>
-			<key>Comment</key>
-			<string>Draw rings to denote chat range</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyMinimapGuideLine</key>
-		<map>
-			<key>Comment</key>
-			<string>Render a red line in the center of the camera view frustrum</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyMinimapObjectUpdateInterval</key>
-		<map>
-			<key>Comment</key>
-			<string>Render a red line in the center of the camera view frustrum</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.1</real>
-		</map>
-		<key>AlchemyMinimapParcelBoundries</key>
-		<map>
-			<key>Comment</key>
-			<string>Draw parcel boundry lines</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyMiniMapForSaleParcels</key>
-		<map>
-			<key>Comment</key>
-			<string>Draw for sale parcels</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyMiniMapCollisionParcels</key>
-		<map>
-			<key>Comment</key>
-			<string>Draw collision parcels</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyMinimapRenderObjects</key>
-		<map>
-			<key>Comment</key>
-			<string>>Render objects on minimap</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyMinimapTile</key>
-		<map>
-			<key>Comment</key>
-			<string>Use the world map tile as the minimap background</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyMotionResetsCamera</key>
-		<map>
-			<key>Comment</key>
-			<string>Allow camera to reset when moving.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyMouselookIFF</key>
-		<map>
-			<key>Comment</key>
-			<string>Display user that is currently focused upon by crosshair in mouselook</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyMouselookIFFMarkers</key>
-		<map>
-			<key>Comment</key>
-			<string>Display target markers for offscreen avatars in mouselook</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyMouselookIFFRange</key>
-		<map>
-			<key>Comment</key>
-			<string>Range of IFF display</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>380.0</real>
-		</map>
-		<key>AlchemyMouseLookZoomTime</key>
-		<map>
-			<key>Comment</key>
-			<string>Scalar for smooth mouselook zoom time</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>6.66</real>
-		</map>
-		<key>AlchemyMouseLookZoomTimeout</key>
-		<map>
-			<key>Comment</key>
-			<string>Cuttoff to force zoom to target fov</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.15</real>
-		</map>
-		<key>AlchemyNearbyChatChannel</key>
-		<map>
-			<key>Comment</key>
-			<string>Chat channel used for sending nearby chat from the viewer</string>
-			<key>Persist</key>
-			<integer>0</integer>
-			<key>Type</key>
-			<string>S32</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyNearbyChatInput</key>
-		<map>
-			<key>Comment</key>
-			<string>Nearby chat input 0 - Conversations, 1 - Chatbar</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyNearbyColorize</key>
-		<map>
-			<key>Comment</key>
-			<string>Sync nearby list name colors to minimap</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyNearbyPeopleClickAction</key>
-		<map>
-			<key>Comment</key>
-			<string>0 - IM, 1 - Profile, 2 - Zoom In, 3 - Teleport To</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>U32</string>
-			<key>Value</key>
-			<integer>2</integer>
-		</map>
-		<key>AlchemyNearbyTypingIndicators</key>
-		<map>
-			<key>Comment</key>
-			<string>Show nearby chat typing indicator in nametags</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyNimble</key>
-		<map>
-			<key>Comment</key>
-			<string>If true, disables prejump animation flags</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyNotifyIncomingMessage</key>
-		<map>
-			<key>Comment</key>
-			<string>Notify of incoming messages by looking for typing indicator</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyLSLPreprocessor</key>
-		<map>
-			<key>Comment</key>
-			<string>LSL Preprocessor</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyOnlineOfflineToChat</key>
-		<map>
-			<key>Comment</key>
-			<string>Log online and offline notifications to local chat</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyPreProcLSLOptimizer</key>
-		<map>
-			<key>Comment</key>
-			<string>LSL Optimizer</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyPreProcLSLTextCompress</key>
-		<map>
-			<key>Comment</key>
-			<string>LSL Text Compress</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyPreProcLSLLazyLists</key>
-		<map>
-			<key>Comment</key>
-			<string>LSL Lazy Lists</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyPreProcLSLSwitch</key>
-		<map>
-			<key>Comment</key>
-			<string>LSL Switch Statements</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyPreProcEnableHDDInclude</key>
-		<map>
-			<key>Comment</key>
-			<string>Enable #include from local disk</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyPreProcHDDIncludeLocation</key>
-		<map>
-			<key>Comment</key>
-			<string>Path for local disk includes</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string/>
-		</map>
-		<key>AlchemyPointAtPrivate</key>
-		<map>
-			<key>Comment</key>
-			<string>Disable setting current point at target</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyPowerfulWizard</key>
-		<map>
-			<key>Comment</key>
-			<string>It's a surprise.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyRainbowEffects</key>
-		<map>
-			<key>Comment</key>
-			<string>Makes agent effects rainbows!</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyRadarAlerts</key>
-		<map>
-			<key>Comment</key>
-			<string>Display notification upon avatar entry or departure of current region</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyRadarAlertsToChat</key>
-		<map>
-			<key>Comment</key>
-			<string>Log radar alerts to local chat</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyRealisticMouselook</key>
-		<map>
-			<key>Comment</key>
-			<string>Make the camera follow avatar body movements and animations while in mouselook</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyRecentPeopleMaxAge</key>
-		<map>
-			<key>Comment</key>
-			<string>Maximum age to keep recent people around</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>S32</string>
-			<key>Value</key>
-			<integer>30</integer>
-		</map>
-		<key>AlchemyRenderSMAA</key>
-		<map>
-			<key>Comment</key>
-			<string>Use Enhanced Subpixel Morphological Antialiasing in Deferred</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyRevokeObjectPerms</key>
-		<map>
-			<key>Comment</key>
-			<string>Revoke permissions on object on sit(1), stand(2) or both(3)</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>U32</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyRezUnderLandGroup</key>
-		<map>
-			<key>Comment</key>
-			<string>Allows the agent to rez objects under the target locations land group. Must be a member of the land group.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>ChatAlerts</key>
-		<map>
-			<key>Comment</key>
-			<string>Enable chat keyword alerts for nearby chat and instant messages</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>ChatTimestampSeconds</key>
-		<map>
-			<key>Comment</key>
-			<string>Display seconds in chat log timestamp</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>CloseChatBarOnReturn</key>
-		<map>
-			<key>Comment</key>
-			<string>Close chat after hitting return</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>DoubleClickAttachmentAdd</key>
-		<map>
-			<key>Comment</key>
-			<string>Double-clicking an attachment in inventory will add wear it rather than replace wear it</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>DoubleClickWearableAdd</key>
-		<map>
-			<key>Comment</key>
-			<string>Double-clicking a clothing wearable in inventory will add wear it rather than replace wear it</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>EnableAutoCloseOOC</key>
-		<map>
-			<key>Comment</key>
-			<string>Auto-close ((OOC)) parentheses</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>EnableMUPoseChat</key>
-		<map>
-			<key>Comment</key>
-			<string>: as a synonym for /me</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>GroupSnoozeTime</key>
-		<map>
-			<key>Comment</key>
-			<string>Amount of time (in seconds) group chat will be snoozed for</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>S32</string>
-			<key>Value</key>
-			<integer>900</integer>
-		</map>
-		<key>LastSelectedGrass</key>
-		<map>
-			<key>Comment</key>
-			<string>The last selected grass option from the build tools</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string />
-		</map>
-		<key>LastSelectedTree</key>
-		<map>
-			<key>Comment</key>
-			<string>The last selected tree option from the build tools</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string />
-		</map>
-		<key>LocalInventoryEnabled</key>
-		<map>
-			<key>Comment</key>
-			<string>This enables the local inventory system. (Requires restart.)</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>OpenSimSearchURL</key>
-		<map>
-			<key>Comment</key>
-			<string>OpenSim fallback search url</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>http://search.metaverseink.com/opensim/results.jsp?query=[QUERY]&amp;submit=[CATEGORY]</string>
-		</map>
-		<key>RenderAutoMaskAlphaUseRMSE</key>
-		<map>
-			<key>Comment</key>
-			<string>Use alternative method of detecing suitable textures for alphamasking. Less prone to excluding textures than standard method.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>RenderAutoMaskAlphaMaxRMSE</key>
-		<map>
-			<key>Comment</key>
-			<string>Sets the maximum random mean square error cutoff used when detecting suitable textures for alphamasking. (RenderAutoMaskAlphaUseRMSE must be TRUE for this to have any effect)</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.18</real>
-		</map>
-		<key>RenderAutoMaskAlphaMaxMid</key>
-		<map>
-			<key>Comment</key>
-			<string>Sets the maximum percent of mid-range alpha pixels textures for alphamasking. (RenderAutoMaskAlphaUseRMSE must be TRUE for this to have any effect)</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.275</real>
-		</map>
-        <key>RenderColorGrade</key>
+    xsi:noNamespaceSchemaLocation="llsd.xsd">
+    <map>
+        <key>AlchemyAppearanceShowHints</key>
         <map>
             <key>Comment</key>
-            <string>Enable color grading</string>
+            <string>Show visual param hints in appearance editors.</string>
             <key>Persist</key>
             <integer>1</integer>
             <key>Type</key>
@@ -1093,972 +13,10 @@
             <key>Value</key>
             <integer>0</integer>
         </map>
-		<key>RenderColorGradeLUT</key>
-		<map>
-			<key>Comment</key>
-			<string>Name of image file for color grading LUT(TGA, PNG, or WebP)</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string></string>
-		</map>
-		<key>RenderFocusPointLocked</key>
-		<map>
-			<key>Comment</key>
-			<string>Whether the focus point used for DoF is currently Locked in place</string>
-			<key>Persist</key>
-			<integer>0</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>RenderFocusPointFollowsPointer</key>
-		<map>
-			<key>Comment</key>
-			<string>Allows the Depth of Field focus to actively follow the mouse point</string>
-			<key>Persist</key>
-			<integer>0</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>RenderSharpenMethod</key>
-		<map>
-			<key>Comment</key>
-			<string>Sharpening Method - 0 (None), 1 (Contrast Adaptive Sharpening), 2 (DLS)</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>U32</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>RenderSharpenCASSharpness</key>
-		<map>
-			<key>Comment</key>
-			<string>Sharpening level for CAS 0 to 1 range.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.6</real>
-		</map>
-		<key>RenderSharpenDLSSharpness</key>
-		<map>
-			<key>Comment</key>
-			<string>Sharpening level for DLS 0 to 1 range.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.6</real>
-		</map>
-		<key>RenderSharpenDLSDenoise</key>
-		<map>
-			<key>Comment</key>
-			<string>Denoise level for DLS 0 to 1 range.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.17</real>
-		</map>
-		<key>RenderToneMapType</key>
-		<map>
-			<key>Comment</key>
-			<string>Tonemapping type 0 - HDR Debug, 1 - ACES, 2 - Uchimura, 3 - AMD, 4 - Uncharted</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>U32</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>RenderAlwaysSoftenShadows</key>
-		<map>
-			<key>Comment</key>
-			<string>Always soften shadows when shadows are enabled</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyToneMapAMDHDRMax</key>
-		<map>
-			<key>Comment</key>
-			<string>Maximum input value.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>256.0</real>
-		</map>
-		<key>AlchemyToneMapAMDExposure</key>
-		<map>
-			<key>Comment</key>
-			<string>Number of stops between 'hdrMax' and 18% mid-level on input.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>8.0</real>
-		</map>
-		<key>AlchemyToneMapAMDContrast</key>
-		<map>
-			<key>Comment</key>
-			<string>Input range 0.0 (no extra contrast) to 1.0 (maximum contrast)</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.25</real>
-		</map>
-		<key>AlchemyToneMapAMDCrosstalkR</key>
-		<map>
-			<key>Comment</key>
-			<string>One channel must be 1.0, the rest can be greater than or equal to 1.0 but not zero.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.5</real>
-		</map>
-		<key>AlchemyToneMapAMDCrosstalkG</key>
-		<map>
-			<key>Comment</key>
-			<string>One channel must be 1.0, the rest can be greater than or equal to 1.0 but not zero.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>1.0</real>
-		</map>
-		<key>AlchemyToneMapAMDCrosstalkB</key>
-		<map>
-			<key>Comment</key>
-			<string> One channel must be 1.0, the rest can be greater than or equal to 1.0 but not zero.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.03125</real>
-		</map>
-		<key>AlchemyToneMapAMDSaturationR</key>
-		<map>
-			<key>Comment</key>
-			<string>A per channel adjustment, use less than 0 decrease, 0=no change, greater 0 increase.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.0</real>
-		</map>
-		<key>AlchemyToneMapAMDSaturationG</key>
-		<map>
-			<key>Comment</key>
-			<string>A per channel adjustment, use less than 0 decrease, 0=no change, greater 0 increase.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.0</real>
-		</map>
-		<key>AlchemyToneMapAMDSaturationB</key>
-		<map>
-			<key>Comment</key>
-			<string>A per channel adjustment, use less than 0 decrease, 0=no change, greater 0 increase.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.0</real>
-		</map>
-		<key>AlchemyToneMapAMDShoulderContrast</key>
-		<map>
-			<key>Comment</key>
-			<string>Use optional extra shoulderContrast tuning (set to false if shoulderContrast is 1.0).</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyToneMapAMDShoulderContrastRange</key>
-		<map>
-			<key>Comment</key>
-			<string>Shoulder shaping, 1.0 = no change (fast path)</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>1.0</real>
-		</map>
-		<key>AlchemyToneMapUchimuraMaxBrightness</key>
-		<map>
-			<key>Comment</key>
-			<string>Maximum Possible Display Brightness</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>1.0</real>
-		</map>
-		<key>AlchemyToneMapUchimuraContrast</key>
-		<map>
-			<key>Comment</key>
-			<string>Contrast Adjustment</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>1.0</real>
-		</map>
-		<key>AlchemyToneMapUchimuraLinearStart</key>
-		<map>
-			<key>Comment</key>
-			<string>Curve Linear Section Start</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.22</real>
-		</map>
-		<key>AlchemyToneMapUchimuraLinearLength</key>
-		<map>
-			<key>Comment</key>
-			<string>Length of linear section in tonemapping curve</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.44</real>
-		</map>
-		<key>AlchemyToneMapUchimuraBlackLevel</key>
-		<map>
-			<key>Comment</key>
-			<string>Adjust black range of curve</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>1.33</real>
-		</map>
-		<key>AlchemyToneMapFilmicToeStr</key>
-		<map>
-			<key>Comment</key>
-			<string>Toe Strength</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.22</real>
-		</map>
-		<key>AlchemyToneMapFilmicToeLen</key>
-		<map>
-			<key>Comment</key>
-			<string>Toe Length</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.30</real>
-		</map>
-		<key>AlchemyToneMapFilmicShoulderStr</key>
-		<map>
-			<key>Comment</key>
-			<string>Shoulder Strength</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.22</real>
-		</map>
-		<key>AlchemyToneMapFilmicShoulderLen</key>
-		<map>
-			<key>Comment</key>
-			<string>Shoulder Length</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.20</real>
-		</map>
-		<key>AlchemyToneMapFilmicShoulderAngle</key>
-		<map>
-			<key>Comment</key>
-			<string>Shoulder Angle</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.01</real>
-		</map>
-		<key>AlchemyToneMapFilmicGamma</key>
-		<map>
-			<key>Comment</key>
-			<string>Curve Gamma</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>0.3</real>
-		</map>
-		<key>AlchemyToneMapFilmicWhitePoint</key>
-		<map>
-			<key>Comment</key>
-			<string>Curve White Point</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>8.0</real>
-		</map>
-		<key>ResetUserColorsOnLogout</key>
-		<map>
-			<key>Comment</key>
-			<string>Saves an empty color file on login to start fresh on next launch</string>
-			<key>Persist</key>
-			<integer>0</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>ShowGroupFloaters</key>
-		<map>
-			<key>Comment</key>
-			<string>Show group profiles in floaters rather than the sidebar</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>ShowStatusBarBalance</key>
-		<map>
-			<key>Comment</key>
-			<string>Show L$ Balance in Status Bar</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>ShowStatusBarFPS</key>
-		<map>
-			<key>Comment</key>
-			<string>Show FPS in Status Bar</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>ShowStatusBarTime</key>
-		<map>
-			<key>Comment</key>
-			<string>Show Time in Status Bar</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>ShowStatusBarSeconds</key>
-		<map>
-			<key>Comment</key>
-			<string>Show seconds in the statusbar Time</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>ShowStreamInfo</key>
-		<map>
-			<key>Comment</key>
-			<string>Show audio stream info in toasts</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>ShowStreamInfoToChat</key>
-		<map>
-			<key>Comment</key>
-			<string>Show audio stream info in nearby chat</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>SnapshotDetection</key>
-		<map>
-			<key>Comment</key>
-			<string>Detect snapshot animation being played</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>StreamList</key>
-		<map>
-			<key>Comment</key>
-			<string>Saved list of parcel audio streams</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>LLSD</string>
-			<key>Value</key>
-			<string />
-		</map>
-		<key>VoiceMultiInstance</key>
-		<map>
-			<key>Comment</key>
-			<string>Enables using voice in multiple simultaneous viewer instances</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>ALInspectColumnConfig</key>
-		<map>
-			<key>Comment</key>
-			<string>Stores the column visibility of the inspect window</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>U32</string>
-			<key>Value</key>
-			<integer>1023</integer>
-		</map>
-		<key>AlchemyLookAtShow</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyLookAtLines</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyLookAtNames</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>U32</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyLookAtHideSelf</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>RenderToneMapExposure</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<real>1.0</real>
-		</map>
-		<key>RenderToneMapLottesA</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Vector3</string>
-			<key>Value</key>
-			<array>
-				<real>1.4</real>
-				<real>1.0</real>
-				<real>16.0</real>
-			</array>
-		</map>
-		<key>RenderToneMapLottesB</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Vector3</string>
-			<key>Value</key>
-			<array>
-				<real>0.18</real>
-				<real>0.18</real>
-				<real>0.0</real>
-			</array>
-		</map>
-		<key>RenderToneMapUchimuraA</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Vector3</string>
-			<key>Value</key>
-			<array>
-				<real>1.0</real>
-				<real>1.0</real>
-				<real>0.22</real>
-			</array>
-		</map>
-		<key>RenderToneMapUchimuraB</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Vector3</string>
-			<key>Value</key>
-			<array>
-				<real>0.4</real>
-				<real>1.13</real>
-				<real>0.0</real>
-			</array>
-		</map>
-		<key>RenderToneMapUnchartedA</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Vector3</string>
-			<key>Value</key>
-			<array>
-				<real>0.22</real>
-				<real>0.30</real>
-				<real>0.10</real>
-			</array>
-		</map>
-		<key>RenderToneMapUnchartedB</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Vector3</string>
-			<key>Value</key>
-			<array>
-				<real>0.20</real>
-				<real>0.01</real>
-				<real>0.30</real>
-			</array>
-		</map>
-		<key>RenderToneMapUnchartedC</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Vector3</string>
-			<key>Value</key>
-			<array>
-				<real>6.5</real>
-				<real>2.0</real>
-				<real>0.0</real>
-			</array>
-		</map>
-		<key>RenderSharpenCASParams</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Vector3</string>
-			<key>Value</key>
-			<array>
-				<real>1.0</real>
-				<real>0.6</real>
-				<real>0.0</real>
-			</array>
-		</map>
-		<key>RenderSharpenDLSParams</key>
-		<map>
-			<key>Comment</key>
-			<string>[OBSOLETE]</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Vector3</string>
-			<key>Value</key>
-			<array>
-				<real>0.6</real>
-				<real>0.17</real>
-				<real>0.0</real>
-			</array>
-		</map>
-		<key>ClickingAvatarKeepsCamera</key>
-		<map>
-			<key>Comment</key>
-			<string>This option allows you to orbit your camera without your avatar rotating when clicking on it or your nametag.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>RenderDepthOfFieldNearBlur</key>
-		<map>
-			<key>Comment</key>
-			<string>Whether to blur near camera in depth of field</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyMouselookInstructions</key>
-		<map>
-			<key>Comment</key>
-			<string>Draw instructional overlay for mouselook - Press esc to leave</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AlchemyMouselookPosition</key>
-		<map>
-			<key>Comment</key>
-			<string>Draw position and health in mouselook</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>AllowNoCopyRezRestoreToWorld</key>
-		<map>
-			<key>Comment</key>
-			<string>Allow Restore to World of no-copy items</string>
-			<key>Persist</key>
-			<integer>0</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyFancyChatDivider</key>
-		<map>
-			<key>Comment</key>
-			<string>Divider style for fancy chat</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string> │ </string>
-		</map>
-		<key>AlchemyFancyChatNameWidth</key>
-		<map>
-			<key>Comment</key>
-			<string>Width of name field in fancy chat</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>S32</string>
-			<key>Value</key>
-			<integer>18</integer>
-		</map>
-		<key>AlchemyPlainChatNameBold</key>
-		<map>
-			<key>Comment</key>
-			<string>If true, names will be bold in plain text chat</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>AlchemyChatHistoryStyle</key>
-		<map>
-			<key>Comment</key>
-			<string>0 - Expanded 1 - Plain 2 - Fancy Plain</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>S32</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>ChatFontName</key>
-		<map>
-			<key>Comment</key>
-			<string>Name of font for Chat Editors and Messages</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>SansSerif</string>
-		</map>
-		<key>NotecardFontName</key>
-		<map>
-			<key>Comment</key>
-			<string>Name of font for Notecard Editors</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>SansSerif</string>
-		</map>
-		<key>NotecardFontSize</key>
-		<map>
-			<key>Comment</key>
-			<string>Size of font for Notecard Editors</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>Medium</string>
-		</map>
-		<key>ScriptFontName</key>
-		<map>
-			<key>Comment</key>
-			<string>Name of font for Script Editors</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>Monospace</string>
-		</map>
-		<key>ScriptFontSize</key>
-		<map>
-			<key>Comment</key>
-			<string>Size of font for Script Editors</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>Monospace</string>
-		</map>
-		<key>FontOverrideMain</key>
-		<map>
-			<key>Comment</key>
-			<string>Global override xml for main font</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string></string>
-		</map>
-		<key>FontOverrideMonospace</key>
-		<map>
-			<key>Comment</key>
-			<string>Global override xml for monospace font</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string></string>
-		</map>
-		<key>ChatOOCPrefix</key>
-		<map>
-			<key>Comment</key>
-			<string>OOC chat prefix characters</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>((</string>
-		</map>
-		<key>ChatOOCPostfix</key>
-		<map>
-			<key>Comment</key>
-			<string>OOC chat postfix characters</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>String</string>
-			<key>Value</key>
-			<string>))</string>
-		</map>
-		<key>RenderReflectionProbeShowTransparent</key>
-		<map>
-			<key>Comment</key>
-			<string>Show reflection probes in the transparency debug view</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>NameTagShowDistance</key>
-		<map>
-			<key>Comment</key>
-			<string>Show the distance of other residents from yourself in the name tags</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-		<key>NameTagShowDistanceColors</key>
-		<map>
-			<key>Comment</key>
-			<string>Change the color of the name tag based on the distance of other avatars</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>ColorSettingsHideDefault</key>
-		<map>
-			<key>Comment</key>
-			<string>Show non-default settings only in Color Settings list</string>
-			<key>Persist</key>
-			<integer>0</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		</map>
-		<key>NameTagHPad</key>
-		<map>
-			<key>Comment</key>
-			<string>Name tag horizontal padding</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<string>16.0</string>
-		</map>
-		<key>NameTagVPad</key>
-		<map>
-			<key>Comment</key>
-			<string>Name tag vertical padding</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<string>8.0</string>
-		</map>
-		<key>NameTagLinePad</key>
-		<map>
-			<key>Comment</key>
-			<string>Name tag line padding</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>F32</string>
-			<key>Value</key>
-			<string>1.0</string>
-		</map>
-		<key>MediaAutoPlayHuds</key>
-		<map>
-			<key>Comment</key>
-			<string>Auto play hud attached media.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>1</integer>
-		</map>
-        <key>NavigationBarStyle</key>
+        <key>AlchemyLinuxVoiceVariant</key>
         <map>
             <key>Comment</key>
-            <string>
-                0 - none, 1 = mini, 2 = navigation
-            </string>
+            <string>0 - native, 1 - 32bit wine voice, 2 - 64bit wine voice</string>
             <key>Persist</key>
             <integer>1</integer>
             <key>Type</key>
@@ -2066,10 +24,363 @@
             <key>Value</key>
             <integer>2</integer>
         </map>
-        <key>BlackDragonControls</key>
+        <key>AlchemyDisableClickToSit</key>
         <map>
             <key>Comment</key>
-            <string>Use BlackDragon style joystick controls</string>
+            <string>Disable automatic sit upon click for sit click action targets</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyCameraExpanded</key>
+        <map>
+            <key>Comment</key>
+            <string>Expanded camera floater</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyCameraNoZoomLimit</key>
+        <map>
+            <key>Comment</key>
+            <string>Disables the minimum zoom distance, allowing more camera freedom</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyChatCommandAnimationOverride</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to control ao</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/ao</string>
+        </map>
+        <key>AlchemyChatCommandCalc</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to calculate expressions</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/calc</string>
+        </map>
+        <key>AlchemyChatCommandClearNearby</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to set clear nearby chat history for this session.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/clr</string>
+        </map>
+        <key>AlchemyChatCommandDrawDistance</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to set draw distance</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/dd</string>
+        </map>
+        <key>AlchemyChatCommandEnable</key>
+        <map>
+            <key>Comment</key>
+            <string>Enable chat bar command line</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyChatCommandGround</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to teleport to ground</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/flr</string>
+        </map>
+        <key>AlchemyChatCommandHeight</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to teleport to specified height</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/gth</string>
+        </map>
+        <key>AlchemyChatCommandHoverHeight</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to hover your height or something</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/hover</string>
+        </map>
+        <key>AlchemyChatCommandHome</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to send avatar home</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/home</string>
+        </map>
+        <key>AlchemyChatCommandMapto</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to teleport to another region</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/mapto</string>
+        </map>
+        <key>AlchemyChatCommandPos</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to teleport to position</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/pos</string>
+        </map>
+        <key>AlchemyChatCommandSetChatChannel</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to set nearby chat channel</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/setchannel</string>
+        </map>
+        <key>AlchemyChatCommandRegionMessage</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to send a region message</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/regionmsg</string>
+        </map>
+        <key>AlchemyChatCommandResyncAnim</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to stop/start in order to resync animations</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/resync</string>
+        </map>
+        <key>AlchemyChatCommandRezPlat</key>
+        <map>
+            <key>Comment</key>
+            <string>Rez a platform</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/plat</string>
+        </map>
+        <key>AlchemyChatCommandRezPlatSize</key>
+        <map>
+            <key>Comment</key>
+            <string>Default size of platform to rez</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <string>20</string>
+        </map>
+        <key>AlchemyChatCommandSetHome</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to set the avatar home</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/sethome</string>
+        </map>
+        <key>AlchemyChatCommandTeleportToCam</key>
+        <map>
+            <key>Comment</key>
+            <string>Command to teleport to cam</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>/tp2cam</string>
+        </map>
+        <key>AlchemyChatMarkUnnamedObjects</key>
+        <map>
+            <key>Comment</key>
+            <string>Marks unnamed objects in chat and IMs.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyCinematicModeHideHoverText</key>
+        <map>
+            <key>Comment</key>
+            <string>Hide Hover Text in cinematic mode.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyDisableCameraCollision</key>
+        <map>
+            <key>Comment</key>
+            <string>Disable collision of camera with objects and ground plane</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyDisableEffectSpiral</key>
+        <map>
+            <key>Comment</key>
+            <string>Disable spiral effects</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyDisableMouseSteering</key>
+        <map>
+            <key>Comment</key>
+            <string>Disable mouse steering. Doing so will stop your camera from resetting, and your
+                avatar from rotating when you click yourself (escape key-like behaviour).</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyEditRootAxis</key>
+        <map>
+            <key>Comment</key>
+            <string>Always use root object as edit pivot point</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyForceFly</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSELETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyGameModeEnable</key>
+        <map>
+            <key>Comment</key>
+            <string>Enables GameMode (Linux Only) for better performance.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyGlobalLightScale</key>
+        <map>
+            <key>Comment</key>
+            <string>Curve White Point</string>
+            <key>Persist</key>
+            <integer>0</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>1.0</real>
+        </map>
+        <key>AlchemyHudTextFadeDistance</key>
+        <map>
+            <key>Comment</key>
+            <string>Distance at which hover text starts fading.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>4.0</real>
+        </map>
+        <key>AlchemyHudTextFadeRange</key>
+        <map>
+            <key>Comment</key>
+            <string>Distance over which hover text will fade out.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>8.0</real>
+        </map>
+        <key>AlchemyIgnoreSimCameraConstraint</key>
+        <map>
+            <key>Comment</key>
+            <string>Ignore simulator collision plane for camera constraints</string>
             <key>Persist</key>
             <integer>1</integer>
             <key>Type</key>
@@ -2077,148 +388,2107 @@
             <key>Value</key>
             <integer>0</integer>
         </map>
-		<key>JoystickButtonFlycam</key>
-		<map>
-		  <key>Comment</key>
-		  <string>Test</string>
-		  <key>Persist</key>
-		  <integer>1</integer>
-		  <key>Type</key>
-		  <string>S32</string>
-		  <key>Value</key>
-		  <integer>7</integer>
-		</map>
-		<key>JoystickButtonJump</key>
-		<map>
-		  <key>Comment</key>
-		  <string>Test</string>
-		  <key>Persist</key>
-		  <integer>1</integer>
-		  <key>Type</key>
-		  <string>S32</string>
-		  <key>Value</key>
-		  <integer>0</integer>
-		</map>
-		<key>JoystickButtonFly</key>
-		<map>
-		  <key>Comment</key>
-		  <string>Test</string>
-		  <key>Persist</key>
-		  <integer>1</integer>
-		  <key>Type</key>
-		  <string>S32</string>
-		  <key>Value</key>
-		  <integer>2</integer>
-		</map>
-		<key>JoystickButtonCrouch</key>
-		<map>
-		  <key>Comment</key>
-		  <string>Test</string>
-		  <key>Persist</key>
-		  <integer>1</integer>
-		  <key>Type</key>
-		  <string>S32</string>
-		  <key>Value</key>
-		  <integer>1</integer>
-		</map>
-		<key>JoystickButtonRunToggle</key>
-		<map>
-		  <key>Comment</key>
-		  <string>Test</string>
-		  <key>Persist</key>
-		  <integer>1</integer>
-		  <key>Type</key>
-		  <string>S32</string>
-		  <key>Value</key>
-		  <integer>8</integer>
-		</map>
-		<key>JoystickButtonMouselook</key>
-		<map>
-		  <key>Comment</key>
-		  <string>Test</string>
-		  <key>Persist</key>
-		  <integer>1</integer>
-		  <key>Type</key>
-		  <string>S32</string>
-		  <key>Value</key>
-		  <integer>9</integer>
-		</map>
-		<key>JoystickButtonZoomIn</key>
-		<map>
-		  <key>Comment</key>
-		  <string>Test</string>
-		  <key>Persist</key>
-		  <integer>1</integer>
-		  <key>Type</key>
-		  <string>S32</string>
-		  <key>Value</key>
-		  <integer>4</integer>
-		</map>
-		<key>JoystickButtonZoomOut</key>
-		<map>
-		  <key>Comment</key>
-		  <string>Test</string>
-		  <key>Persist</key>
-		  <integer>1</integer>
-		  <key>Type</key>
-		  <string>S32</string>
-		  <key>Value</key>
-		  <integer>5</integer>
-		</map>
-		<key>JoystickButtonZoomDefault</key>
-		<map>
-		  <key>Comment</key>
-		  <string>Test</string>
-		  <key>Persist</key>
-		  <integer>1</integer>
-		  <key>Type</key>
-		  <string>S32</string>
-		  <key>Value</key>
-		  <integer>6</integer>
-		</map>
-		<key>JoystickButtonRollLeft</key>
-		<map>
-		  <key>Comment</key>
-		  <string>Test</string>
-		  <key>Persist</key>
-		  <integer>1</integer>
-		  <key>Type</key>
-		  <string>S32</string>
-		  <key>Value</key>
-		  <integer>-1</integer>
-		</map>
-		<key>JoystickButtonRollRight</key>
-		<map>
-		  <key>Comment</key>
-		  <string>Test</string>
-		  <key>Persist</key>
-		  <integer>1</integer>
-		  <key>Type</key>
-		  <string>S32</string>
-		  <key>Value</key>
-		  <integer>-1</integer>
-		</map>
-		<key>JoystickButtonRollDefault</key>
-		<map>
-		  <key>Comment</key>
-		  <string>Test</string>
-		  <key>Persist</key>
-		  <integer>1</integer>
-		  <key>Type</key>
-		  <string>S32</string>
-		  <key>Value</key>
-		  <integer>-1</integer>
-		</map>
-		<key>JoystickInvertPitch</key>
-		  <map>
-			<key>Comment</key>
-			<string>Invert pitch axis in all joystick modes.</string>
-			<key>Persist</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<integer>0</integer>
-		  </map>
-	</map>
-</llsd>
+        <key>AlchemyImageDecodeThreads</key>
+        <map>
+            <key>Comment</key>
+            <string>Amount of threads to use for image decoding. 0 = autodetect, 1 = 0ff, >1 number
+                of threads. Needs restart</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>U32</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyInventoryScriptsMono</key>
+        <map>
+            <key>Comment</key>
+            <string>Control whether new scripts in inventory are mono(true) or lsl(false)</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyMoonWalk</key>
+        <map>
+            <key>Comment</key>
+            <string>Walking backwards when moving backwards</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyKeepSettingsOnGPUChange</key>
+        <map>
+            <key>Comment</key>
+            <string>Keep graphical preferences when GPU changes</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyLastDirectoryTab</key>
+        <map>
+            <key>Comment</key>
+            <string>Last active tab in directory floater</string>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyLookAtClampEnabled</key>
+        <map>
+            <key>Comment</key>
+            <string>If true, own look at distance will be clamped to a determined distance</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyLookAtClampDistance</key>
+        <map>
+            <key>Comment</key>
+            <string>Distance at which to clamp own avatar look at</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>1.0</real>
+        </map>
+        <key>AlchemyLookAtPrivate</key>
+        <map>
+            <key>Comment</key>
+            <string>Disable broadcast of own look at to other users.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyMapShowAgentCount</key>
+        <map>
+            <key>Comment</key>
+            <string>Show count of users in region on world map</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyMinimapChatRings</key>
+        <map>
+            <key>Comment</key>
+            <string>Draw rings to denote chat range</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyMinimapGuideLine</key>
+        <map>
+            <key>Comment</key>
+            <string>Render a red line in the center of the camera view frustrum</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyMinimapObjectUpdateInterval</key>
+        <map>
+            <key>Comment</key>
+            <string>Render a red line in the center of the camera view frustrum</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.1</real>
+        </map>
+        <key>AlchemyMinimapParcelBoundries</key>
+        <map>
+            <key>Comment</key>
+            <string>Draw parcel boundry lines</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyMiniMapForSaleParcels</key>
+        <map>
+            <key>Comment</key>
+            <string>Draw for sale parcels</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyMiniMapCollisionParcels</key>
+        <map>
+            <key>Comment</key>
+            <string>Draw collision parcels</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyMinimapRenderObjects</key>
+        <map>
+            <key>Comment</key>
+            <string>>Render objects on minimap</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyMinimapTile</key>
+        <map>
+            <key>Comment</key>
+            <string>Use the world map tile as the minimap background</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyMotionResetsCamera</key>
+        <map>
+            <key>Comment</key>
+            <string>Allow camera to reset when moving.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyMouselookIFF</key>
+        <map>
+            <key>Comment</key>
+            <string>Display user that is currently focused upon by crosshair in mouselook</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyMouselookIFFMarkers</key>
+        <map>
+            <key>Comment</key>
+            <string>Display target markers for offscreen avatars in mouselook</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyMouselookIFFRange</key>
+        <map>
+            <key>Comment</key>
+            <string>Range of IFF display</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>380.0</real>
+        </map>
+        <key>AlchemyMouseLookZoomTime</key>
+        <map>
+            <key>Comment</key>
+            <string>Scalar for smooth mouselook zoom time</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>6.66</real>
+        </map>
+        <key>AlchemyMouseLookZoomTimeout</key>
+        <map>
+            <key>Comment</key>
+            <string>Cuttoff to force zoom to target fov</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.15</real>
+        </map>
+        <key>AlchemyNearbyChatChannel</key>
+        <map>
+            <key>Comment</key>
+            <string>Chat channel used for sending nearby chat from the viewer</string>
+            <key>Persist</key>
+            <integer>0</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyNearbyChatInput</key>
+        <map>
+            <key>Comment</key>
+            <string>Nearby chat input 0 - Conversations, 1 - Chatbar</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyNearbyColorize</key>
+        <map>
+            <key>Comment</key>
+            <string>Sync nearby list name colors to minimap</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyNearbyPeopleClickAction</key>
+        <map>
+            <key>Comment</key>
+            <string>0 - IM, 1 - Profile, 2 - Zoom In, 3 - Teleport To</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>U32</string>
+            <key>Value</key>
+            <integer>2</integer>
+        </map>
+        <key>AlchemyNearbyTypingIndicators</key>
+        <map>
+            <key>Comment</key>
+            <string>Show nearby chat typing indicator in nametags</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyNimble</key>
+        <map>
+            <key>Comment</key>
+            <string>If true, disables prejump animation flags</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyNotifyIncomingMessage</key>
+        <map>
+            <key>Comment</key>
+            <string>Notify of incoming messages by looking for typing indicator</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyLSLPreprocessor</key>
+        <map>
+            <key>Comment</key>
+            <string>LSL Preprocessor</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyOnlineOfflineToChat</key>
+        <map>
+            <key>Comment</key>
+            <string>Log online and offline notifications to local chat</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyPreProcLSLOptimizer</key>
+        <map>
+            <key>Comment</key>
+            <string>LSL Optimizer</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyPreProcLSLTextCompress</key>
+        <map>
+            <key>Comment</key>
+            <string>LSL Text Compress</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyPreProcLSLLazyLists</key>
+        <map>
+            <key>Comment</key>
+            <string>LSL Lazy Lists</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyPreProcLSLSwitch</key>
+        <map>
+            <key>Comment</key>
+            <string>LSL Switch Statements</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyPreProcEnableHDDInclude</key>
+        <map>
+            <key>Comment</key>
+            <string>Enable #include from local disk</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyPreProcHDDIncludeLocation</key>
+        <map>
+            <key>Comment</key>
+            <string>Path for local disk includes</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string />
+        </map>
+        <key>AlchemyPointAtPrivate</key>
+        <map>
+            <key>Comment</key>
+            <string>Disable setting current point at target</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyPowerfulWizard</key>
+        <map>
+            <key>Comment</key>
+            <string>It's a surprise.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyRainbowEffects</key>
+        <map>
+            <key>Comment</key>
+            <string>Makes agent effects rainbows!</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyRadarAlerts</key>
+        <map>
+            <key>Comment</key>
+            <string>Display notification upon avatar entry or departure of current region</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyRadarAlertsToChat</key>
+        <map>
+            <key>Comment</key>
+            <string>Log radar alerts to local chat</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyRealisticMouselook</key>
+        <map>
+            <key>Comment</key>
+            <string>Make the camera follow avatar body movements and animations while in mouselook</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyRecentPeopleMaxAge</key>
+        <map>
+            <key>Comment</key>
+            <string>Maximum age to keep recent people around</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>30</integer>
+        </map>
+        <key>AlchemyRenderSMAA</key>
+        <map>
+            <key>Comment</key>
+            <string>Use Enhanced Subpixel Morphological Antialiasing in Deferred</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyRevokeObjectPerms</key>
+        <map>
+            <key>Comment</key>
+            <string>Revoke permissions on object on sit(1), stand(2) or both(3)</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>U32</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyRezUnderLandGroup</key>
+        <map>
+            <key>Comment</key>
+            <string>Allows the agent to rez objects under the target locations land group. Must be a
+                member of the land group.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ChatAlerts</key>
+        <map>
+            <key>Comment</key>
+            <string>Enable chat keyword alerts for nearby chat and instant messages</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>ChatTimestampSeconds</key>
+        <map>
+            <key>Comment</key>
+            <string>Display seconds in chat log timestamp</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>CloseChatBarOnReturn</key>
+        <map>
+            <key>Comment</key>
+            <string>Close chat after hitting return</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>DoubleClickAttachmentAdd</key>
+        <map>
+            <key>Comment</key>
+            <string>Double-clicking an attachment in inventory will add wear it rather than replace
+                wear it</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>DoubleClickWearableAdd</key>
+        <map>
+            <key>Comment</key>
+            <string>Double-clicking a clothing wearable in inventory will add wear it rather than
+                replace wear it</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>EnableAutoCloseOOC</key>
+        <map>
+            <key>Comment</key>
+            <string>Auto-close ((OOC)) parentheses</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>EnableMUPoseChat</key>
+        <map>
+            <key>Comment</key>
+            <string>: as a synonym for /me</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>GroupSnoozeTime</key>
+        <map>
+            <key>Comment</key>
+            <string>Amount of time (in seconds) group chat will be snoozed for</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>900</integer>
+        </map>
+        <key>LastSelectedGrass</key>
+        <map>
+            <key>Comment</key>
+            <string>The last selected grass option from the build tools</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string />
+        </map>
+        <key>LastSelectedTree</key>
+        <map>
+            <key>Comment</key>
+            <string>The last selected tree option from the build tools</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string />
+        </map>
+        <key>LocalInventoryEnabled</key>
+        <map>
+            <key>Comment</key>
+            <string>This enables the local inventory system. (Requires restart.)</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>OpenSimSearchURL</key>
+        <map>
+            <key>Comment</key>
+            <string>OpenSim fallback search url</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>
+                http://search.metaverseink.com/opensim/results.jsp?query=[QUERY]&amp;submit=[CATEGORY]</string>
+        </map>
+        <key>RenderAutoMaskAlphaUseRMSE</key>
+        <map>
+            <key>Comment</key>
+            <string>Use alternative method of detecing suitable textures for alphamasking. Less
+                prone to excluding textures than standard method.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>RenderAutoMaskAlphaMaxRMSE</key>
+        <map>
+            <key>Comment</key>
+            <string>Sets the maximum random mean square error cutoff used when detecting suitable
+                textures for alphamasking. (RenderAutoMaskAlphaUseRMSE must be TRUE for this to have
+                any effect)</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.18</real>
+        </map>
+        <key>RenderAutoMaskAlphaMaxMid</key>
+        <map>
+            <key>Comment</key>
+            <string>Sets the maximum percent of mid-range alpha pixels textures for alphamasking.
+                (RenderAutoMaskAlphaUseRMSE must be TRUE for this to have any effect)</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.275</real>
+        </map>
+        <key>RenderColorGrade</key>
+        <map>
+            <key>Comment</key>
+            <string>Enable color grading</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>RenderColorGradeLUT</key>
+        <map>
+            <key>Comment</key>
+            <string>Name of image file for color grading LUT(TGA, PNG, or WebP)</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string></string>
+        </map>
+        <key>RenderFocusPointLocked</key>
+        <map>
+            <key>Comment</key>
+            <string>Whether the focus point used for DoF is currently Locked in place</string>
+            <key>Persist</key>
+            <integer>0</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>RenderFocusPointFollowsPointer</key>
+        <map>
+            <key>Comment</key>
+            <string>Allows the Depth of Field focus to actively follow the mouse point</string>
+            <key>Persist</key>
+            <integer>0</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>RenderSharpenMethod</key>
+        <map>
+            <key>Comment</key>
+            <string>Sharpening Method - 0 (None), 1 (Contrast Adaptive Sharpening), 2 (DLS)</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>U32</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>RenderSharpenCASSharpness</key>
+        <map>
+            <key>Comment</key>
+            <string>Sharpening level for CAS 0 to 1 range.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.6</real>
+        </map>
+        <key>RenderSharpenDLSSharpness</key>
+        <map>
+            <key>Comment</key>
+            <string>Sharpening level for DLS 0 to 1 range.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.6</real>
+        </map>
+        <key>RenderSharpenDLSDenoise</key>
+        <map>
+            <key>Comment</key>
+            <string>Denoise level for DLS 0 to 1 range.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.17</real>
+        </map>
+        <key>RenderToneMapType</key>
+        <map>
+            <key>Comment</key>
+            <string>Tonemapping type 0 - HDR Debug, 1 - ACES, 2 - Uchimura, 3 - AMD, 4 - Uncharted</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>U32</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>RenderAlwaysSoftenShadows</key>
+        <map>
+            <key>Comment</key>
+            <string>Always soften shadows when shadows are enabled</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyToneMapAMDHDRMax</key>
+        <map>
+            <key>Comment</key>
+            <string>Maximum input value.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>256.0</real>
+        </map>
+        <key>AlchemyToneMapAMDExposure</key>
+        <map>
+            <key>Comment</key>
+            <string>Number of stops between 'hdrMax' and 18% mid-level on input.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>8.0</real>
+        </map>
+        <key>AlchemyToneMapAMDContrast</key>
+        <map>
+            <key>Comment</key>
+            <string>Input range 0.0 (no extra contrast) to 1.0 (maximum contrast)</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.25</real>
+        </map>
+        <key>AlchemyToneMapAMDCrosstalkR</key>
+        <map>
+            <key>Comment</key>
+            <string>One channel must be 1.0, the rest can be greater than or equal to 1.0 but not
+                zero.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.5</real>
+        </map>
+        <key>AlchemyToneMapAMDCrosstalkG</key>
+        <map>
+            <key>Comment</key>
+            <string>One channel must be 1.0, the rest can be greater than or equal to 1.0 but not
+                zero.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>1.0</real>
+        </map>
+        <key>AlchemyToneMapAMDCrosstalkB</key>
+        <map>
+            <key>Comment</key>
+            <string> One channel must be 1.0, the rest can be greater than or equal to 1.0 but not
+                zero.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.03125</real>
+        </map>
+        <key>AlchemyToneMapAMDSaturationR</key>
+        <map>
+            <key>Comment</key>
+            <string>A per channel adjustment, use less than 0 decrease, 0=no change, greater 0
+                increase.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.0</real>
+        </map>
+        <key>AlchemyToneMapAMDSaturationG</key>
+        <map>
+            <key>Comment</key>
+            <string>A per channel adjustment, use less than 0 decrease, 0=no change, greater 0
+                increase.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.0</real>
+        </map>
+        <key>AlchemyToneMapAMDSaturationB</key>
+        <map>
+            <key>Comment</key>
+            <string>A per channel adjustment, use less than 0 decrease, 0=no change, greater 0
+                increase.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.0</real>
+        </map>
+        <key>AlchemyToneMapAMDShoulderContrast</key>
+        <map>
+            <key>Comment</key>
+            <string>Use optional extra shoulderContrast tuning (set to false if shoulderContrast is
+                1.0).</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyToneMapAMDShoulderContrastRange</key>
+        <map>
+            <key>Comment</key>
+            <string>Shoulder shaping, 1.0 = no change (fast path)</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>1.0</real>
+        </map>
+        <key>AlchemyToneMapUchimuraMaxBrightness</key>
+        <map>
+            <key>Comment</key>
+            <string>Maximum Possible Display Brightness</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>1.0</real>
+        </map>
+        <key>AlchemyToneMapUchimuraContrast</key>
+        <map>
+            <key>Comment</key>
+            <string>Contrast Adjustment</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>1.0</real>
+        </map>
+        <key>AlchemyToneMapUchimuraLinearStart</key>
+        <map>
+            <key>Comment</key>
+            <string>Curve Linear Section Start</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.22</real>
+        </map>
+        <key>AlchemyToneMapUchimuraLinearLength</key>
+        <map>
+            <key>Comment</key>
+            <string>Length of linear section in tonemapping curve</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.44</real>
+        </map>
+        <key>AlchemyToneMapUchimuraBlackLevel</key>
+        <map>
+            <key>Comment</key>
+            <string>Adjust black range of curve</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>1.33</real>
+        </map>
+        <key>AlchemyToneMapFilmicToeStr</key>
+        <map>
+            <key>Comment</key>
+            <string>Toe Strength</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.22</real>
+        </map>
+        <key>AlchemyToneMapFilmicToeLen</key>
+        <map>
+            <key>Comment</key>
+            <string>Toe Length</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.30</real>
+        </map>
+        <key>AlchemyToneMapFilmicShoulderStr</key>
+        <map>
+            <key>Comment</key>
+            <string>Shoulder Strength</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.22</real>
+        </map>
+        <key>AlchemyToneMapFilmicShoulderLen</key>
+        <map>
+            <key>Comment</key>
+            <string>Shoulder Length</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.20</real>
+        </map>
+        <key>AlchemyToneMapFilmicShoulderAngle</key>
+        <map>
+            <key>Comment</key>
+            <string>Shoulder Angle</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.01</real>
+        </map>
+        <key>AlchemyToneMapFilmicGamma</key>
+        <map>
+            <key>Comment</key>
+            <string>Curve Gamma</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>0.3</real>
+        </map>
+        <key>AlchemyToneMapFilmicWhitePoint</key>
+        <map>
+            <key>Comment</key>
+            <string>Curve White Point</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>8.0</real>
+        </map>
+        <key>ResetUserColorsOnLogout</key>
+        <map>
+            <key>Comment</key>
+            <string>Saves an empty color file on login to start fresh on next launch</string>
+            <key>Persist</key>
+            <integer>0</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>ShowGroupFloaters</key>
+        <map>
+            <key>Comment</key>
+            <string>Show group profiles in floaters rather than the sidebar</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowStatusBarBalance</key>
+        <map>
+            <key>Comment</key>
+            <string>Show L$ Balance in Status Bar</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowStatusBarFPS</key>
+        <map>
+            <key>Comment</key>
+            <string>Show FPS in Status Bar</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowStatusBarTime</key>
+        <map>
+            <key>Comment</key>
+            <string>Show Time in Status Bar</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowStatusBarSeconds</key>
+        <map>
+            <key>Comment</key>
+            <string>Show seconds in the statusbar Time</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>ShowStreamInfo</key>
+        <map>
+            <key>Comment</key>
+            <string>Show audio stream info in toasts</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowStreamInfoToChat</key>
+        <map>
+            <key>Comment</key>
+            <string>Show audio stream info in nearby chat</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>SnapshotDetection</key>
+        <map>
+            <key>Comment</key>
+            <string>Detect snapshot animation being played</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>StreamList</key>
+        <map>
+            <key>Comment</key>
+            <string>Saved list of parcel audio streams</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>LLSD</string>
+            <key>Value</key>
+            <string />
+        </map>
+        <key>VoiceMultiInstance</key>
+        <map>
+            <key>Comment</key>
+            <string>Enables using voice in multiple simultaneous viewer instances</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ALInspectColumnConfig</key>
+        <map>
+            <key>Comment</key>
+            <string>Stores the column visibility of the inspect window</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>U32</string>
+            <key>Value</key>
+            <integer>1023</integer>
+        </map>
+        <key>AlchemyLookAtShow</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyLookAtLines</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyLookAtNames</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>U32</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyLookAtHideSelf</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>RenderToneMapExposure</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <real>1.0</real>
+        </map>
+        <key>RenderToneMapLottesA</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Vector3</string>
+            <key>Value</key>
+            <array>
+                <real>1.4</real>
+                <real>1.0</real>
+                <real>16.0</real>
+            </array>
+        </map>
+        <key>RenderToneMapLottesB</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Vector3</string>
+            <key>Value</key>
+            <array>
+                <real>0.18</real>
+                <real>0.18</real>
+                <real>0.0</real>
+            </array>
+        </map>
+        <key>RenderToneMapUchimuraA</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Vector3</string>
+            <key>Value</key>
+            <array>
+                <real>1.0</real>
+                <real>1.0</real>
+                <real>0.22</real>
+            </array>
+        </map>
+        <key>RenderToneMapUchimuraB</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Vector3</string>
+            <key>Value</key>
+            <array>
+                <real>0.4</real>
+                <real>1.13</real>
+                <real>0.0</real>
+            </array>
+        </map>
+        <key>RenderToneMapUnchartedA</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Vector3</string>
+            <key>Value</key>
+            <array>
+                <real>0.22</real>
+                <real>0.30</real>
+                <real>0.10</real>
+            </array>
+        </map>
+        <key>RenderToneMapUnchartedB</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Vector3</string>
+            <key>Value</key>
+            <array>
+                <real>0.20</real>
+                <real>0.01</real>
+                <real>0.30</real>
+            </array>
+        </map>
+        <key>RenderToneMapUnchartedC</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Vector3</string>
+            <key>Value</key>
+            <array>
+                <real>6.5</real>
+                <real>2.0</real>
+                <real>0.0</real>
+            </array>
+        </map>
+        <key>RenderSharpenCASParams</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Vector3</string>
+            <key>Value</key>
+            <array>
+                <real>1.0</real>
+                <real>0.6</real>
+                <real>0.0</real>
+            </array>
+        </map>
+        <key>RenderSharpenDLSParams</key>
+        <map>
+            <key>Comment</key>
+            <string>[OBSOLETE]</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Vector3</string>
+            <key>Value</key>
+            <array>
+                <real>0.6</real>
+                <real>0.17</real>
+                <real>0.0</real>
+            </array>
+        </map>
+        <key>ClickingAvatarKeepsCamera</key>
+        <map>
+            <key>Comment</key>
+            <string>This option allows you to orbit your camera without your avatar rotating when
+                clicking on it or your nametag.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>RenderDepthOfFieldNearBlur</key>
+        <map>
+            <key>Comment</key>
+            <string>Whether to blur near camera in depth of field</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyMouselookInstructions</key>
+        <map>
+            <key>Comment</key>
+            <string>Draw instructional overlay for mouselook - Press esc to leave</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AlchemyMouselookPosition</key>
+        <map>
+            <key>Comment</key>
+            <string>Draw position and health in mouselook</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>AllowNoCopyRezRestoreToWorld</key>
+        <map>
+            <key>Comment</key>
+            <string>Allow Restore to World of no-copy items</string>
+            <key>Persist</key>
+            <integer>0</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyFancyChatDivider</key>
+        <map>
+            <key>Comment</key>
+            <string>Divider style for fancy chat</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string> │ </string>
+        </map>
+        <key>AlchemyFancyChatNameWidth</key>
+        <map>
+            <key>Comment</key>
+            <string>Width of name field in fancy chat</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>18</integer>
+        </map>
+        <key>AlchemyPlainChatNameBold</key>
+        <map>
+            <key>Comment</key>
+            <string>If true, names will be bold in plain text chat</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>AlchemyChatHistoryStyle</key>
+        <map>
+            <key>Comment</key>
+            <string>0 - Expanded 1 - Plain 2 - Fancy Plain</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>ChatFontName</key>
+        <map>
+            <key>Comment</key>
+            <string>Name of font for Chat Editors and Messages</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>SansSerif</string>
+        </map>
+        <key>NotecardFontName</key>
+        <map>
+            <key>Comment</key>
+            <string>Name of font for Notecard Editors</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>SansSerif</string>
+        </map>
+        <key>NotecardFontSize</key>
+        <map>
+            <key>Comment</key>
+            <string>Size of font for Notecard Editors</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>Medium</string>
+        </map>
+        <key>ScriptFontName</key>
+        <map>
+            <key>Comment</key>
+            <string>Name of font for Script Editors</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>Monospace</string>
+        </map>
+        <key>ScriptFontSize</key>
+        <map>
+            <key>Comment</key>
+            <string>Size of font for Script Editors</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>Monospace</string>
+        </map>
+        <key>FontOverrideMain</key>
+        <map>
+            <key>Comment</key>
+            <string>Global override xml for main font</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string></string>
+        </map>
+        <key>FontOverrideMonospace</key>
+        <map>
+            <key>Comment</key>
+            <string>Global override xml for monospace font</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string></string>
+        </map>
+        <key>ChatOOCPrefix</key>
+        <map>
+            <key>Comment</key>
+            <string>OOC chat prefix characters</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>((</string>
+        </map>
+        <key>ChatOOCPostfix</key>
+        <map>
+            <key>Comment</key>
+            <string>OOC chat postfix characters</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>))</string>
+        </map>
+        <key>RenderReflectionProbeShowTransparent</key>
+        <map>
+            <key>Comment</key>
+            <string>Show reflection probes in the transparency debug view</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>NameTagShowDistance</key>
+        <map>
+            <key>Comment</key>
+            <string>Show the distance of other residents from yourself in the name tags</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>NameTagShowDistanceColors</key>
+        <map>
+            <key>Comment</key>
+            <string>Change the color of the name tag based on the distance of other avatars</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>ColorSettingsHideDefault</key>
+        <map>
+            <key>Comment</key>
+            <string>Show non-default settings only in Color Settings list</string>
+            <key>Persist</key>
+            <integer>0</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>NameTagHPad</key>
+        <map>
+            <key>Comment</key>
+            <string>Name tag horizontal padding</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <string>16.0</string>
+        </map>
+        <key>NameTagVPad</key>
+        <map>
+            <key>Comment</key>
+            <string>Name tag vertical padding</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <string>8.0</string>
+        </map>
+        <key>NameTagLinePad</key>
+        <map>
+            <key>Comment</key>
+            <string>Name tag line padding</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>F32</string>
+            <key>Value</key>
+            <string>1.0</string>
+        </map>
+        <key>MediaAutoPlayHuds</key>
+        <map>
+            <key>Comment</key>
+            <string>Auto play hud attached media.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>NavigationBarStyle</key>
+        <map>
+            <key>Comment</key>
+            <string>
+                0 - none, 1 = mini, 2 = navigation
+            </string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>U32</string>
+            <key>Value</key>
+            <integer>2</integer>
+        </map>
+        <key>BlackDragonControls</key>
+        <map>
+            <key>Comment</key>
+            <string>Use BlackDragon style joystick controls</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>JoystickButtonFlycam</key>
+        <map>
+            <key>Comment</key>
+            <string>Test</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>7</integer>
+        </map>
+        <key>JoystickButtonJump</key>
+        <map>
+            <key>Comment</key>
+            <string>Test</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>JoystickButtonFly</key>
+        <map>
+            <key>Comment</key>
+            <string>Test</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>2</integer>
+        </map>
+        <key>JoystickButtonCrouch</key>
+        <map>
+            <key>Comment</key>
+            <string>Test</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>JoystickButtonRunToggle</key>
+        <map>
+            <key>Comment</key>
+            <string>Test</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>8</integer>
+        </map>
+        <key>JoystickButtonMouselook</key>
+        <map>
+            <key>Comment</key>
+            <string>Test</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>9</integer>
+        </map>
+        <key>JoystickButtonZoomIn</key>
+        <map>
+            <key>Comment</key>
+            <string>Test</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>4</integer>
+        </map>
+        <key>JoystickButtonZoomOut</key>
+        <map>
+            <key>Comment</key>
+            <string>Test</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>5</integer>
+        </map>
+        <key>JoystickButtonZoomDefault</key>
+        <map>
+            <key>Comment</key>
+            <string>Test</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>6</integer>
+        </map>
+        <key>JoystickButtonRollLeft</key>
+        <map>
+            <key>Comment</key>
+            <string>Test</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>-1</integer>
+        </map>
+        <key>JoystickButtonRollRight</key>
+        <map>
+            <key>Comment</key>
+            <string>Test</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>-1</integer>
+        </map>
+        <key>JoystickButtonRollDefault</key>
+        <map>
+            <key>Comment</key>
+            <string>Test</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>-1</integer>
+        </map>
+        <key>JoystickInvertPitch</key>
+        <map>
+            <key>Comment</key>
+            <string>Invert pitch axis in all joystick modes.</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>FSLastSearchTab</key>
+        <map>
+            <key>Comment</key>
+            <string>Last selected tab in search window</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>S32</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>FSLegacySearchActionOnTeleport</key>
+        <map>
+            <key>Comment</key>
+            <string>Controls what action Legacy Search should take when teleporting: 0 = No effect,
+                1 = Close floater, 2 Minimise floater</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>U32</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowPGGroups</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find groups that are flagged as general</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowMatureGroups</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find groups that are flagged as moderate</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowAdultGroups</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find groups that are flagged as adult</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>ShowPGClassifieds</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find classifieds that are flagged as general</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowMatureClassifieds</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find classifieds that are flagged as moderate</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowAdultClassifieds</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find classifieds that are flagged as adult</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>ShowPGEvents</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find events that are flagged as general</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowMatureEvents</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find events that are flagged as moderate</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowAdultEvents</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find events that are flagged as adult</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>ShowPGLand</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find land sales that are flagged as general</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowMatureLand</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find land sales that are flagged as moderate</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowAdultLand</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find land sales that are flagged as adult</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>ShowPGSims</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find places or find popular that are in general sims</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowMatureSims</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find places or find popular that are in moderate sims</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>ShowAdultSims</key>
+        <map>
+            <key>Comment</key>
+            <string>Display results of find places or find popular that are in adult sims</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>HideFromEditor</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>FindLandArea</key>
+        <map>
+            <key>Comment</key>
+            <string>Enables filtering of land search results by area</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>0</integer>
+        </map>
+        <key>FindLandPrice</key>
+        <map>
+            <key>Comment</key>
+            <string>Enables filtering of land search results by price</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>Boolean</string>
+            <key>Value</key>
+            <integer>1</integer>
+        </map>
+        <key>FindLandType</key>
+        <map>
+            <key>Comment</key>
+            <string>Controls which type of land you are searching for in Find Land interface ("All",
+                "Auction", "For Sale")</string>
+            <key>Persist</key>
+            <integer>1</integer>
+            <key>Type</key>
+            <string>String</string>
+            <key>Value</key>
+            <string>All</string>
+        </map>
+    </map>
+</llsd>
\ No newline at end of file
diff --git a/indra/newview/fsfloatersearch.cpp b/indra/newview/fsfloatersearch.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..286bcdf2fe82261df17563aaeb6178dfe7ec444d
--- /dev/null
+++ b/indra/newview/fsfloatersearch.cpp
@@ -0,0 +1,3155 @@
+/**
+ * @file fsfloatersearch.cpp
+ * @brief Firestorm Search Floater
+ *
+ * $LicenseInfo:firstyear=2012&license=fsviewerlgpl$
+ * Phoenix Firestorm Viewer Source Code
+ * Copyright (C) 2012, Cinder Roxley <cinder.roxley@phoenixviewer.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
+ * http://www.firestormviewer.org
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "fsfloatersearch.h"
+
+#include "lldispatcher.h"
+#include "llagent.h"
+#include "llavataractions.h"
+#include "llavatarname.h"
+#include "llavatarnamecache.h"
+#include "llavatarpropertiesprocessor.h"
+#include "llclassifiedflags.h"
+#include "llclassifiedinfo.h"
+#include "llcombobox.h"
+#include "lldateutil.h"
+#include "lleventflags.h"
+#include "lleventnotifier.h"
+#include "llfloaterreg.h"
+#include "llfloaterworldmap.h"
+#include "llgroupactions.h"
+#include "llgroupmgr.h"
+#include "llloadingindicator.h"
+#include "lllogininstance.h"
+#include "llnotificationsutil.h"
+#include "llpanelprofile.h"
+#include "llpanelprofileclassifieds.h"
+#include "llparcel.h"
+#include "llproductinforequest.h"
+#include "llqueryflags.h"
+#include "llregionhandle.h"
+#include "llremoteparcelrequest.h"
+#include "lltimer.h"
+#include "lltrans.h"
+#include "llviewercontrol.h"
+#include "llviewergenericmessage.h"
+#include "llviewernetwork.h"
+#include "llviewerregion.h"
+#include "llworldmapmessage.h"
+#include "message.h"
+#include <boost/tokenizer.hpp>
+#include <boost/algorithm/string.hpp>
+#include <string>
+
+static const S32 MIN_SEARCH_STRING_SIZE = 2;
+static const S32 RESULT_PAGE_SIZE = 100;
+
+std::string filterShortWords(std::string query_string);
+void fillSearchComboBox(LLSearchComboBox* search_combo);
+
+////////////////////////////////////////
+//          Observer Classes          //
+////////////////////////////////////////
+
+class FSSearchRemoteParcelInfoObserver : public LLRemoteParcelInfoObserver
+{
+public:
+    FSSearchRemoteParcelInfoObserver(FSFloaterSearch* floater, bool for_events) : LLRemoteParcelInfoObserver(),
+        mParent(floater),
+        mForEvents(for_events)
+    {}
+
+    ~FSSearchRemoteParcelInfoObserver()
+    {
+        // remove any in-flight observers
+        std::set<LLUUID>::iterator it;
+        for (it = mParcelIDs.begin(); it != mParcelIDs.end(); ++it)
+        {
+            const LLUUID &id = *it;
+            LLRemoteParcelInfoProcessor::getInstance()->removeObserver(id, this);
+        }
+        mParcelIDs.clear();
+    }
+
+    /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data)
+    {
+        if (mParent)
+        {
+            if (mForEvents)
+            {
+                mParent->displayEventParcelImage(parcel_data);
+            }
+            else
+            {
+                mParent->displayParcelDetails(parcel_data);
+            }
+        }
+        mParcelIDs.erase(parcel_data.parcel_id);
+        LLRemoteParcelInfoProcessor::getInstance()->removeObserver(parcel_data.parcel_id, this);
+    }
+
+    /*virtual*/ void setParcelID(const LLUUID& parcel_id)
+    {
+        if (!parcel_id.isNull())
+        {
+            mParcelIDs.insert(parcel_id);
+            LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this);
+            LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id);
+        }
+    }
+
+    /*virtual*/ void setErrorStatus(S32 status, const std::string& reason)
+    {
+        LL_WARNS("Search") << "Can't complete remote parcel request. Http Status: " << status << ". Reason : " << reason << LL_ENDL;
+    }
+private:
+    std::set<LLUUID>    mParcelIDs;
+    FSFloaterSearch*    mParent;
+    bool                mForEvents;
+};
+
+///// Avatar Properties Observer /////
+
+class FSSearchAvatarPropertiesObserver : public LLAvatarPropertiesObserver
+{
+public:
+    FSSearchAvatarPropertiesObserver(FSFloaterSearch* floater) : LLAvatarPropertiesObserver(),
+    mParent(floater)
+    {}
+
+    ~FSSearchAvatarPropertiesObserver()
+    {
+        // remove any in-flight observers
+        std::set<LLUUID>::iterator it;
+        for (it = mAvatarIDs.begin(); it != mAvatarIDs.end(); ++it)
+        {
+            const LLUUID &id = *it;
+            LLAvatarPropertiesProcessor::getInstance()->removeObserver(id, this);
+        }
+        mAvatarIDs.clear();
+    }
+
+    void processProperties(void* data, EAvatarProcessorType type)
+    {
+        if (!data)
+            return;
+
+        if (APT_PROPERTIES == type)
+        {
+            LLAvatarData* avatar_data = static_cast<LLAvatarData*>(data);
+            if (avatar_data)
+            {
+                mParent->displayAvatarDetails(avatar_data);
+                LLAvatarPropertiesProcessor::getInstance()->removeObserver(avatar_data->avatar_id, this);
+            }
+        }
+        else if (APT_PROPERTIES_LEGACY == type)
+        {
+            LLAvatarData avatar_data(*static_cast<LLAvatarLegacyData*>(data));
+            mParent->displayAvatarDetails(&avatar_data);
+            LLAvatarPropertiesProcessor::getInstance()->removeObserver(avatar_data.avatar_id, this);
+        }
+        if (APT_CLASSIFIED_INFO == type)
+        {
+            LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data);
+            if (c_info)
+            {
+                mParent->displayClassifiedDetails(c_info);
+                LLAvatarPropertiesProcessor::getInstance()->removeObserver(c_info->classified_id, this);
+                std::string url = gAgent.getRegionCapability("SearchStatRequest");
+                if (!url.empty())
+                {
+                    LL_INFOS("Search") << "Classified stat request via capability" << LL_ENDL;
+                    LLSD body;
+                    body["classified_id"] = c_info->classified_id;
+                    LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(url, body, boost::bind(&LLPanelProfileClassified::handleSearchStatResponse, c_info->classified_id, _1));
+                }
+            }
+        }
+    }
+private:
+    std::set<LLUUID>    mAvatarIDs;
+    FSFloaterSearch*    mParent;
+};
+
+///// Group Info Observer /////
+
+class FSSearchGroupInfoObserver : public LLGroupMgrObserver
+{
+public:
+    FSSearchGroupInfoObserver(const LLUUID& group_id, FSFloaterSearch* parent) :
+    LLGroupMgrObserver(group_id),
+    mParent(parent)
+    {
+        LLGroupMgr* groupmgr = LLGroupMgr::getInstance();
+        if (!group_id.isNull() && groupmgr)
+        {
+            groupmgr->addObserver(this);
+            mID = group_id;
+            groupmgr->sendGroupPropertiesRequest(group_id);
+        }
+    }
+
+    ~FSSearchGroupInfoObserver()
+    {
+        LLGroupMgr::getInstance()->removeObserver(this);
+    }
+
+    void changed(LLGroupChange gc)
+    {
+        if (gc == GC_PROPERTIES)
+        {
+            LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(mID);
+            mParent->displayGroupDetails(group_data);
+            LLGroupMgr::getInstance()->removeObserver(this);
+        }
+    }
+private:
+    FSFloaterSearch*    mParent;
+    LLUUID              mID;
+};
+
+///// Silly Classified Clickthrough Class /////
+class FSDispatchClassifiedClickThrough : public LLDispatchHandler
+{
+public:
+    virtual bool operator()(
+        const LLDispatcher* dispatcher,
+        const std::string& key,
+        const LLUUID& invoice,
+        const sparam_t& strings)
+    {
+        if (strings.size() != 4) return false;
+        LLUUID classified_id(strings[0]);
+        S32 teleport_clicks = atoi(strings[1].c_str());
+        S32 map_clicks = atoi(strings[2].c_str());
+        S32 profile_clicks = atoi(strings[3].c_str());
+
+        LLPanelProfileClassified::setClickThrough(
+            classified_id, teleport_clicks, map_clicks, profile_clicks, false);
+
+        return true;
+    }
+};
+static FSDispatchClassifiedClickThrough sClassifiedClickThrough;
+
+SearchQuery::SearchQuery()
+: category("category", "")
+, query("query")
+{}
+
+////////////////////////////////////////
+//         The floater itself         //
+////////////////////////////////////////
+
+FSFloaterSearch::FSFloaterSearch(const Params& key)
+:   LLFloater(key)
+{
+    mRemoteParcelObserver = new FSSearchRemoteParcelInfoObserver(this, false);
+    mRemoteParcelEventLocationObserver = new FSSearchRemoteParcelInfoObserver(this, true);
+    mAvatarPropertiesObserver = new FSSearchAvatarPropertiesObserver(this);
+    mEventNotifierConnection = gEventNotifier.setNewEventCallback(boost::bind(&FSFloaterSearch::displayEventDetails, this, boost::placeholders::_1));
+}
+
+FSFloaterSearch::~FSFloaterSearch()
+{
+    mEventNotifierConnection.disconnect();
+    delete mRemoteParcelObserver;
+    delete mRemoteParcelEventLocationObserver;
+    delete mAvatarPropertiesObserver;
+    gGenericDispatcher.addHandler("classifiedclickthrough", nullptr);
+}
+
+// virtual
+void FSFloaterSearch::onOpen(const LLSD& key)
+{
+    Params p(key);
+    mPanelWeb->loadURL(p.search);
+    if (key.has("query"))
+    {
+        mTabContainer->selectTabPanel(mPanelWeb);
+    }
+    else if (key.has("tab") && key["tab"].asString() == "groups")
+    {
+        mTabContainer->selectTabPanel(mPanelGroups);
+    }
+
+    FSSearchPanelBase* current_panel = dynamic_cast<FSSearchPanelBase*>(mTabContainer->getCurrentPanel());
+    if (current_panel)
+    {
+        current_panel->focusDefaultElement();
+    }
+}
+
+//virtual
+void FSFloaterSearch::onClose(bool app_quitting)
+{
+    if (mTabContainer)
+    {
+        gSavedSettings.setS32("FSLastSearchTab", mTabContainer->getCurrentPanelIndex());
+    }
+}
+
+BOOL FSFloaterSearch::postBuild()
+{
+    childSetAction("people_profile_btn", boost::bind(&FSFloaterSearch::onBtnPeopleProfile, this));
+    childSetAction("people_message_btn", boost::bind(&FSFloaterSearch::onBtnPeopleIM, this));
+    childSetAction("people_friend_btn", boost::bind(&FSFloaterSearch::onBtnPeopleFriend, this));
+    childSetAction("group_profile_btn", boost::bind(&FSFloaterSearch::onBtnGroupProfile, this));
+    childSetAction("group_message_btn", boost::bind(&FSFloaterSearch::onBtnGroupChat, this));
+    childSetAction("group_join_btn", boost::bind(&FSFloaterSearch::onBtnGroupJoin, this));
+    childSetAction("event_reminder_btn", boost::bind(&FSFloaterSearch::onBtnEventReminder, this));
+    childSetAction("teleport_btn", boost::bind(&FSFloaterSearch::onBtnTeleport, this));
+    childSetAction("map_btn", boost::bind(&FSFloaterSearch::onBtnMap, this));
+    resetVerbs();
+
+    mPanelPeople        = findChild<FSPanelSearchPeople>("panel_ls_people");
+    mPanelGroups        = findChild<FSPanelSearchGroups>("panel_ls_groups");
+    mPanelPlaces        = findChild<FSPanelSearchPlaces>("panel_ls_places");
+    mPanelEvents        = findChild<FSPanelSearchEvents>("panel_ls_events");
+    mPanelLand          = findChild<FSPanelSearchLand>("panel_ls_land");
+    mPanelClassifieds   = findChild<FSPanelSearchClassifieds>("panel_ls_classifieds");
+    mPanelWeb           = findChild<FSPanelSearchWeb>("panel_ls_web");
+
+    mDetailsPanel =     getChild<LLPanel>("panel_ls_details");
+    mDetailTitle =      getChild<LLTextEditor>("title");
+    mDetailDesc =       getChild<LLTextEditor>("desc");
+    mDetailAux1 =       getChild<LLTextEditor>("aux1");
+    mDetailAux2 =       getChild<LLTextEditor>("aux2");
+    mDetailLocation =   getChild<LLTextEditor>("location");
+    mDetailSnapshot =   getChild<LLTextureCtrl>("snapshot");
+    mDetailSnapshotParcel = getChild<LLTextureCtrl>("snapshot_parcel");
+    mDetailMaturity =   getChild<LLIconCtrl>("maturity_icon");
+    mTabContainer =     getChild<LLTabContainer>("ls_tabs");
+
+    mTabContainer->setCommitCallback(boost::bind(&FSFloaterSearch::onTabChange, this));
+
+    flushDetails();
+
+    mDetailsPanel->setVisible(false);
+
+    mHasSelection = false;
+
+    if (!mTabContainer->selectTab(gSavedSettings.getS32("FSLastSearchTab")))
+    {
+        mTabContainer->selectFirstTab();
+    }
+
+    return TRUE;
+}
+
+void FSFloaterSearch::onTabChange()
+{
+    LLPanel* active_panel = mTabContainer->getCurrentPanel();
+
+    if (active_panel == mPanelWeb)
+    {
+        mDetailsPanel->setVisible(false);
+        mPanelWeb->resetFocusOnLoad();
+    }
+    else if (active_panel == mPanelPeople)
+    {
+        mDetailsPanel->setVisible(mHasSelection);
+    }
+
+    if (active_panel == mPanelPeople || active_panel == mPanelGroups)
+    {
+        mDetailSnapshotParcel->setVisible(FALSE);
+        mDetailSnapshot->setVisible(TRUE);
+    }
+    else if (active_panel == mPanelPlaces || active_panel == mPanelLand ||
+        active_panel == mPanelEvents || active_panel == mPanelClassifieds)
+    {
+        mDetailSnapshot->setVisible(FALSE);
+        mDetailSnapshotParcel->setVisible(TRUE);
+    }
+}
+
+//static
+template <class T>
+T* FSFloaterSearch::getSearchPanel(const std::string& panel_name)
+{
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance && search_instance->mTabContainer)
+    {
+        return dynamic_cast<T*>(search_instance->mTabContainer->getPanelByName(panel_name));
+    }
+    else
+    {
+        return nullptr;
+    }
+}
+
+void FSFloaterSearch::onSelectedItem(const LLUUID& selected_item, ESearchCategory type)
+{
+    if (!selected_item.isNull())
+    {
+        mSelectedID = selected_item;
+        resetVerbs();
+        flushDetails();
+        switch (type)
+        {
+            case SC_AVATAR:
+            {
+                LLAvatarPropertiesProcessor::getInstance()->addObserver(selected_item, mAvatarPropertiesObserver);
+                LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(selected_item);
+            }
+                break;
+            case SC_GROUP:
+                mGroupPropertiesRequest = new FSSearchGroupInfoObserver(selected_item, this);
+                break;
+            case SC_PLACE:
+                mRemoteParcelObserver->setParcelID(selected_item);
+                break;
+            case SC_CLASSIFIED:
+                LLAvatarPropertiesProcessor::getInstance()->addObserver(selected_item, mAvatarPropertiesObserver);
+                LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(selected_item);
+                gGenericDispatcher.addHandler("classifiedclickthrough", &sClassifiedClickThrough);
+                break;
+        }
+        setLoadingProgress(true);
+    }
+}
+
+void FSFloaterSearch::onSelectedEvent(const S32 selected_event)
+{
+    resetVerbs();
+    flushDetails();
+
+    gMessageSystem->newMessageFast(_PREHASH_EventInfoRequest);
+    gMessageSystem->nextBlockFast(_PREHASH_AgentData);
+    gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgentID);
+    gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgentSessionID);
+    gMessageSystem->nextBlockFast(_PREHASH_EventData);
+    gMessageSystem->addU32Fast(_PREHASH_EventID, selected_event);
+    gAgent.sendReliableMessage();
+}
+
+void FSFloaterSearch::displayParcelDetails(const LLParcelData& parcel_data)
+{
+    S32 region_x;
+    S32 region_y;
+    S32 region_z;
+    region_x = ll_round(parcel_data.global_x) % REGION_WIDTH_UNITS;
+    region_y = ll_round(parcel_data.global_y) % REGION_WIDTH_UNITS;
+    region_z = ll_round(parcel_data.global_z);
+    // HACK: Flag 0x2 == adult region,
+    // Flag 0x1 == mature region, otherwise assume PG
+    if (parcel_data.flags & 0x2)
+    {
+        mDetailMaturity->setValue("Parcel_R_Dark");
+    }
+    else if (parcel_data.flags & 0x1)
+    {
+        mDetailMaturity->setValue("Parcel_M_Dark");
+    }
+    else
+    {
+        mDetailMaturity->setValue("Parcel_PG_Dark");
+    }
+
+    LLStringUtil::format_map_t map;
+    map["DWELL"] = llformat("%.0f", (F64)parcel_data.dwell);
+    map["AREA"] = llformat("%d m²", parcel_data.actual_area);
+    map["LOCATION"] = llformat("%s (%d, %d, %d)", parcel_data.sim_name.c_str(), region_x, region_y, region_z);
+
+    mParcelGlobal = LLVector3d(parcel_data.global_x, parcel_data.global_y, parcel_data.global_z);
+    mDetailsPanel->setVisible(mTabContainer->getCurrentPanel()->getName() == "panel_ls_places" || mTabContainer->getCurrentPanel()->getName() == "panel_ls_land");
+    mHasSelection = true;
+    mDetailMaturity->setVisible(true);
+    mDetailTitle->setValue(parcel_data.name);
+    mDetailDesc->setValue(parcel_data.desc);
+    mDetailAux1->setValue(getString("string.traffic", map));
+    mDetailAux2->setValue(getString("string.area", map));
+    mDetailLocation->setValue(getString("string.location", map));
+    mDetailSnapshotParcel->setValue(parcel_data.snapshot_id);
+    childSetVisible("teleport_btn", true);
+    childSetVisible("map_btn", true);
+    setLoadingProgress(false);
+}
+
+void FSFloaterSearch::displayAvatarDetails(LLAvatarData* avatar_data)
+{
+    if (avatar_data)
+    {
+        LLStringUtil::format_map_t map;
+        map["AGE"] = LLDateUtil::ageFromDate(avatar_data->born_on, LLDate::now());
+        if (avatar_data->partner_id.notNull())
+        {
+            map["PARTNER"] = LLSLURL("agent", avatar_data->partner_id, "inspect").getSLURLString();
+            mDetailAux2->setValue(getString("string.partner", map));
+        }
+
+        mDetailsPanel->setVisible(mTabContainer->getCurrentPanel()->getName() == "panel_ls_people");
+        mHasSelection = true;
+        mDetailTitle->setValue(LLTrans::getString("LoadingData"));
+        mDetailDesc->setValue(avatar_data->about_text);
+        mDetailSnapshot->setValue(avatar_data->image_id);
+        mDetailAux1->setValue(avatar_data->hide_age ? "" : getString("string.age", map));
+        LLAvatarNameCache::get(avatar_data->avatar_id, boost::bind(&FSFloaterSearch::avatarNameUpdatedCallback,this, _1, _2));
+        childSetVisible("people_profile_btn", true);
+        childSetVisible("people_message_btn", true);
+        childSetVisible("people_friend_btn", true);
+        getChildView("people_friend_btn")->setEnabled(!LLAvatarActions::isFriend(avatar_data->avatar_id));
+    }
+}
+
+void FSFloaterSearch::displayGroupDetails(LLGroupMgrGroupData*& group_data)
+{
+    if (group_data)
+    {
+        LLStringUtil::format_map_t map;
+        map["MEMBER_COUNT"] = llformat("%d",group_data->mMemberCount);
+        map["FOUNDER"] = LLSLURL("agent", group_data->mFounderID, "inspect").getSLURLString();
+
+        mDetailsPanel->setVisible(mTabContainer->getCurrentPanel()->getName() == "panel_ls_groups");
+        mHasSelection = true;
+        mDetailTitle->setValue(LLTrans::getString("LoadingData"));
+        mDetailDesc->setValue(group_data->mCharter);
+        mDetailSnapshot->setValue(group_data->mInsigniaID);
+        mDetailAux1->setValue(getString("string.members", map));
+        mDetailAux2->setValue(getString("string.founder", map));
+        LLGroupData agent_gdatap;
+        bool is_member = gAgent.getGroupData(getSelectedID(),agent_gdatap) || gAgent.isGodlike();
+        bool join_btn_enabled = !is_member && group_data->mOpenEnrollment;
+        childSetVisible("group_profile_btn", true);
+        childSetVisible("group_message_btn", true);
+        childSetVisible("group_join_btn", true);
+        getChildView("group_join_btn")->setEnabled(join_btn_enabled);
+        getChildView("group_message_btn")->setEnabled(is_member);
+        gCacheName->getGroup(getSelectedID(), boost::bind(&FSFloaterSearch::groupNameUpdatedCallback, this, _1, _2, _3));
+    }
+}
+
+void FSFloaterSearch::displayClassifiedDetails(LLAvatarClassifiedInfo*& c_info)
+{
+    if (c_info)
+    {
+        if (c_info->flags & CLASSIFIED_FLAG_MATURE)
+        {
+            mDetailMaturity->setValue("Parcel_M_Dark");
+        }
+        else
+        {
+            mDetailMaturity->setValue("Parcel_PG_Dark");
+        }
+
+        LLStringUtil::format_map_t map;
+        map["LISTING_PRICE"] = llformat("L$%d", c_info->price_for_listing);
+        map["SLURL"] = LLSLURL("parcel", c_info->parcel_id, "about").getSLURLString();
+
+        mDetailsPanel->setVisible(mTabContainer->getCurrentPanel()->getName() == "panel_ls_classifieds");
+        mHasSelection = true;
+        mDetailMaturity->setVisible(true);
+        mParcelGlobal = c_info->pos_global;
+        mDetailTitle->setValue(c_info->name);
+        mDetailDesc->setValue(c_info->description);
+        mDetailSnapshotParcel->setValue(c_info->snapshot_id);
+        mDetailAux1->setValue(getString("string.listing_price", map));
+        mDetailLocation->setValue(getString("string.slurl", map));
+        childSetVisible("teleport_btn", true);
+        childSetVisible("map_btn", true);
+        setLoadingProgress(false);
+    }
+}
+
+bool FSFloaterSearch::displayEventDetails(LLEventStruct event)
+{
+    if (event.flags == EVENT_FLAG_ADULT)
+    {
+        mDetailMaturity->setValue("Parcel_R_Dark");
+    }
+    else if (event.flags == EVENT_FLAG_MATURE)
+    {
+        mDetailMaturity->setValue("Parcel_M_Dark");
+    }
+    else
+    {
+        mDetailMaturity->setValue("Parcel_PG_Dark");
+    }
+
+    S32 region_x;
+    S32 region_y;
+    S32 region_z;
+    region_x = (S64)ll_round(event.globalPos.mdV[VX]) % REGION_WIDTH_UNITS;
+    region_y = (S64)ll_round(event.globalPos.mdV[VY]) % REGION_WIDTH_UNITS;
+    region_z = (S32)ll_round(event.globalPos.mdV[VZ]);
+    LLStringUtil::format_map_t map;
+    map["DURATION"] = llformat("%d:%.2d", event.duration / 60, event.duration % 60);
+    map["LOCATION"] = llformat("%s (%d, %d, %d)", event.simName.c_str(), region_x, region_y, region_z);
+    if (event.cover > 0)
+    {
+        map["COVERCHARGE"] = llformat("L$%d", event.cover);
+        mDetailAux2->setValue(getString("string.covercharge", map));
+    }
+
+    mParcelGlobal = event.globalPos;
+    mEventID = event.eventId;
+    mDetailsPanel->setVisible(mTabContainer->getCurrentPanel()->getName() == "panel_ls_events");
+    mHasSelection = true;
+    mDetailMaturity->setVisible(true);
+    mDetailTitle->setValue(event.eventName);
+    mDetailDesc->setValue(event.desc);
+    mDetailAux1->setValue(getString("string.duration", map));
+    mDetailLocation->setValue(getString("string.location", map));
+    mDetailSnapshotParcel->setValue(LLUUID::null);
+    childSetVisible("teleport_btn", true);
+    childSetVisible("map_btn", true);
+    childSetVisible("event_reminder_btn", true);
+
+    LLWorldMapMessage::getInstance()->sendNamedRegionRequest(event.simName, boost::bind(&FSFloaterSearch::regionHandleCallback, this, _1, event.globalPos), "", false);
+    return true;
+}
+
+void FSFloaterSearch::regionHandleCallback(U64 region_handle, LLVector3d pos_global)
+{
+    std::string url = gAgent.getRegionCapability("RemoteParcelRequest");
+    if (!url.empty())
+    {
+        auto region_origin = from_region_handle(region_handle);
+        LLVector3 pos_region(LLVector3(pos_global - region_origin));
+
+        LLRemoteParcelInfoProcessor::getInstance()->requestRegionParcelInfo(url,
+            LLUUID::null, pos_region, pos_global, mRemoteParcelEventLocationObserver->getObserverHandle());
+    }
+    else
+    {
+        setLoadingProgress(false);
+    }
+}
+
+void FSFloaterSearch::displayEventParcelImage(const LLParcelData& parcel_data)
+{
+    mDetailSnapshotParcel->setValue(parcel_data.snapshot_id);
+    setLoadingProgress(false);
+}
+
+void FSFloaterSearch::avatarNameUpdatedCallback(const LLUUID& id, const LLAvatarName& av_name)
+{
+    if (id == getSelectedID())
+    {
+        mDetailTitle->setValue(av_name.getCompleteName());
+        setLoadingProgress(false);
+    }
+    // Otherwise possibly a request for an older selection, ignore it.
+}
+
+void FSFloaterSearch::groupNameUpdatedCallback(const LLUUID& id, const std::string& name, bool is_group)
+{
+    if (id == getSelectedID())
+    {
+        mDetailTitle->setValue( LLSD(name) );
+        setLoadingProgress(false);
+    }
+    // Otherwise possibly a request for an older selection, ignore it.
+}
+
+void FSFloaterSearch::setLoadingProgress(bool started)
+{
+    LLLoadingIndicator* indicator = getChild<LLLoadingIndicator>("loading");
+
+    indicator->setVisible(started);
+
+    if (started)
+    {
+        indicator->start();
+    }
+    else
+    {
+        indicator->stop();
+    }
+}
+
+void FSFloaterSearch::resetVerbs()
+{
+    childSetVisible("people_profile_btn", false);
+    childSetVisible("people_message_btn", false);
+    childSetVisible("people_friend_btn", false);
+    childSetVisible("group_profile_btn", false);
+    childSetVisible("group_message_btn", false);
+    childSetVisible("group_join_btn", false);
+    childSetVisible("event_reminder_btn", false);
+    childSetVisible("teleport_btn", false);
+    childSetVisible("map_btn", false);
+}
+
+void FSFloaterSearch::flushDetails()
+{
+    mDetailTitle->setValue("");
+    mDetailDesc->setValue("");
+    mDetailAux1->setValue("");
+    mDetailAux2->setValue("");
+    mDetailLocation->setValue("");
+    mDetailSnapshot->setValue(LLSD());
+    mDetailMaturity->setVisible(false);
+    mParcelGlobal.setZero();
+}
+
+void FSFloaterSearch::onBtnPeopleProfile()
+{
+    LLAvatarActions::showProfile(getSelectedID());
+}
+
+void FSFloaterSearch::onBtnPeopleIM()
+{
+    LLAvatarActions::startIM(getSelectedID());
+}
+
+void FSFloaterSearch::onBtnPeopleFriend()
+{
+    LLAvatarActions::requestFriendshipDialog(getSelectedID());
+}
+
+void FSFloaterSearch::onBtnGroupProfile()
+{
+    LLGroupActions::show(getSelectedID());
+}
+
+void FSFloaterSearch::onBtnGroupChat()
+{
+    LLGroupActions::startIM(getSelectedID());
+}
+
+void FSFloaterSearch::onBtnGroupJoin()
+{
+    LLGroupActions::join(getSelectedID());
+}
+
+void FSFloaterSearch::onBtnTeleport()
+{
+    if (!mParcelGlobal.isExactlyZero())
+    {
+        gAgent.teleportViaLocation(mParcelGlobal);
+        LLFloaterWorldMap::getInstance()->trackLocation(mParcelGlobal);
+        /// <FS:CR> What should we do when when we teleport? The default (1) is to close the floater,
+        /// the user may elect to minimize the floater (2), or to do nothing (any other setting)
+        static LLCachedControl<U32> teleport_action(gSavedSettings, "FSLegacySearchActionOnTeleport");
+        if (teleport_action == 1)
+        {
+            closeFloater();
+        }
+        else if (teleport_action == 2)
+        {
+            setMinimized(TRUE);
+        }
+    }
+}
+
+void FSFloaterSearch::onBtnMap()
+{
+    if (!mParcelGlobal.isExactlyZero())
+    {
+        LLFloaterWorldMap::getInstance()->trackLocation(mParcelGlobal);
+        LLFloaterReg::showInstance("world_map", "center");
+    }
+}
+
+void FSFloaterSearch::onBtnEventReminder()
+{
+    gEventNotifier.add(mEventID);
+}
+
+////////////////////////////////////////
+//         People Search Panel        //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchPeople> t_panel_fs_search_people("panel_ls_people");
+
+FSPanelSearchPeople::FSPanelSearchPeople() : FSSearchPanelBase()
+, mQueryID(nullptr)
+, mStartSearch(0)
+, mResultsReceived(0)
+, mResultsContent()
+, mAvatarNameCallbackConnection()
+{
+}
+
+FSPanelSearchPeople::~FSPanelSearchPeople()
+{
+    if (mAvatarNameCallbackConnection.connected())
+    {
+        mAvatarNameCallbackConnection.disconnect();
+    }
+}
+
+BOOL FSPanelSearchPeople::postBuild()
+{
+    mSearchComboBox =   findChild<LLSearchComboBox>("people_edit");
+    mSearchResults =    findChild<LLScrollListCtrl>("search_results_people");
+    if (mSearchComboBox)
+    {
+        mSearchComboBox->setCommitCallback(boost::bind(&FSPanelSearchPeople::onBtnFind, this));
+        fillSearchComboBox(mSearchComboBox);
+    }
+    if (mSearchResults)
+    {
+        mSearchResults->setCommitCallback(boost::bind(&FSPanelSearchPeople::onSelectItem, this));
+        mSearchResults->setEnabled(FALSE);
+        mSearchResults->setCommentText(LLTrans::getString("no_results"));
+        mSearchResults->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
+    }
+
+    childSetAction("people_next", boost::bind(&FSPanelSearchPeople::onBtnNext, this));
+    childSetAction("people_back", boost::bind(&FSPanelSearchPeople::onBtnBack, this));
+    getChildView("people_next")->setEnabled(FALSE);
+    getChildView("people_back")->setEnabled(FALSE);
+
+    return TRUE;
+}
+
+void FSPanelSearchPeople::focusDefaultElement()
+{
+    mSearchComboBox->focusTextEntry();
+}
+
+void FSPanelSearchPeople::find()
+{
+    std::string text = mSearchComboBox->getSimple();
+    boost::trim(text);
+    if (text.size() <= MIN_SEARCH_STRING_SIZE)
+    {
+        mSearchResults->setCommentText(LLTrans::getString("search_short"));
+        return;
+    }
+
+    if (LLUUID::validate(text))
+    {
+        LLUUID id(text);
+
+        mSearchResults->deleteAllItems();
+        mSearchResults->setCommentText(LLTrans::getString("searching"));
+        mResultsReceived = 0;
+        mNumResultsReturned = 0;
+
+        if (mAvatarNameCallbackConnection.connected())
+        {
+            mAvatarNameCallbackConnection.disconnect();
+        }
+        mAvatarNameCallbackConnection = LLAvatarNameCache::get(id, boost::bind(&FSPanelSearchPeople::onAvatarNameCallback, this, _1, _2));
+
+        return;
+    }
+
+    LLStringUtil::replaceChar(text, '.', ' ');
+
+    mResultsReceived = 0;
+    if (mQueryID.notNull())
+    {
+        mQueryID.setNull();
+    }
+    mQueryID.generate();
+
+    if (mStartSearch < 0)
+    {
+        mStartSearch = 0;
+    }
+
+    gMessageSystem->newMessage("DirFindQuery");
+    gMessageSystem->nextBlock("AgentData");
+    gMessageSystem->addUUID("AgentID", gAgentID);
+    gMessageSystem->addUUID("SessionID", gAgentSessionID);
+    gMessageSystem->nextBlock("QueryData");
+    gMessageSystem->addUUID("QueryID", getQueryID());
+    gMessageSystem->addString("QueryText", text);
+    gMessageSystem->addU32("QueryFlags", DFQ_PEOPLE);
+    gMessageSystem->addS32("QueryStart", mStartSearch);
+    gAgent.sendReliableMessage();
+    LL_DEBUGS("Search") << "Firing off search request: " << getQueryID() << LL_ENDL;
+
+    mSearchResults->deleteAllItems();
+    mSearchResults->setCommentText(LLTrans::getString("searching"));
+    mNumResultsReturned = 0;
+}
+
+void FSPanelSearchPeople::onBtnFind()
+{
+    std::string text = mSearchComboBox->getSimple();
+    if (!text.empty())
+    {
+        LLSearchHistory::getInstance()->addEntry(text);
+    }
+
+    resetSearch();
+
+    find();
+}
+
+void FSPanelSearchPeople::onBtnNext()
+{
+    mStartSearch += RESULT_PAGE_SIZE;
+    getChildView("people_back")->setEnabled(TRUE);
+
+    find();
+}
+
+void FSPanelSearchPeople::onBtnBack()
+{
+    mStartSearch -= RESULT_PAGE_SIZE;
+    getChildView("people_back")->setEnabled(mStartSearch > 0);
+
+    find();
+}
+
+void FSPanelSearchPeople::resetSearch()
+{
+    mStartSearch = 0;
+    getChildView("people_back")->setEnabled(FALSE);
+    getChildView("people_next")->setEnabled(FALSE);
+}
+
+S32 FSPanelSearchPeople::showNextButton(S32 rows)
+{
+    bool show_next_button = (mResultsReceived > RESULT_PAGE_SIZE);
+    getChildView("people_next")->setEnabled(show_next_button);
+    if (show_next_button)
+    {
+        rows -= (mResultsReceived - RESULT_PAGE_SIZE);
+    }
+    return rows;
+}
+
+void FSPanelSearchPeople::onSelectItem()
+{
+    if (!mSearchResults)
+    {
+        return;
+    }
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance)
+    {
+        search_instance->FSFloaterSearch::onSelectedItem(mSearchResults->getSelectedValue(), FSFloaterSearch::SC_AVATAR);
+    }
+}
+
+// static
+void FSPanelSearchPeople::processSearchReply(LLMessageSystem* msg, void**)
+{
+    LLUUID query_id;
+    std::string first_name;
+    std::string last_name;
+    LLUUID agent_id;
+
+    msg->getUUIDFast(_PREHASH_QueryData,    _PREHASH_QueryID,   query_id);
+    msg->getUUIDFast(_PREHASH_AgentData,    _PREHASH_AgentID,   agent_id);
+
+    // This result is not for us.
+    if (agent_id != gAgentID)
+    {
+        return;
+    }
+    LL_DEBUGS("Search") << "received search results - QueryID: " << query_id << " AgentID: " << agent_id << LL_ENDL;
+
+    FSPanelSearchPeople* self = FSFloaterSearch::getSearchPanel<FSPanelSearchPeople>("panel_ls_people");
+
+    // floater is closed or these are not results from our last request
+    if (!self || query_id != self->getQueryID())
+    {
+        return;
+    }
+
+    LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("search_results_people");
+
+    if (self->mNumResultsReturned++ == 0)
+    {
+        search_results->deleteAllItems();
+    }
+
+    // Check for status messages
+    if (msg->getNumberOfBlocks("StatusData"))
+    {
+        U32 status;
+        msg->getU32("StatusData", "Status", status);
+        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
+        {
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("people_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_SHORTSTRING)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_short"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_banned"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_disabled"));
+            return;
+        }
+    }
+
+    bool found_one = false;
+    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
+    if (num_new_rows == 0 && self->mResultsReceived == 0)
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = self->getChild<LLUICtrl>("people_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+
+    self->mResultsReceived += num_new_rows;
+    num_new_rows = self->showNextButton(num_new_rows);
+
+    for (S32 i = 0; i < num_new_rows; i++)
+    {
+        msg->getStringFast( _PREHASH_QueryReplies,  _PREHASH_FirstName, first_name, i);
+        msg->getStringFast( _PREHASH_QueryReplies,  _PREHASH_LastName,  last_name, i);
+        msg->getUUIDFast(   _PREHASH_QueryReplies,  _PREHASH_AgentID,   agent_id, i);
+        //msg->getU8Fast(   _PREHASH_QueryReplies,  _PREHASH_Online,    online, i);
+
+        if (agent_id.isNull())
+        {
+            LL_INFOS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("people_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+        }
+        else
+        {
+            LL_DEBUGS("Search") << "Got: " << first_name << " " << last_name << " AgentID: " << agent_id << LL_ENDL;
+            search_results->setEnabled(TRUE);
+            found_one = true;
+
+            std::string avatar_name;
+            avatar_name = LLCacheName::buildFullName(first_name, last_name);
+
+            LLSD content;
+            LLSD element;
+
+            element["id"] = agent_id;
+
+            element["columns"][0]["column"] = "icon";
+            element["columns"][0]["type"]   = "icon";
+            element["columns"][0]["value"]  = "icon_avatar_offline.tga";
+
+            element["columns"][1]["column"] = "username";
+            element["columns"][1]["value"]  = avatar_name;
+
+            content["name"] = avatar_name;
+
+            search_results->addElement(element, ADD_BOTTOM);
+            self->mResultsContent[agent_id.asString()] = content;
+        }
+    }
+    if (found_one)
+    {
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        self->onSelectItem();
+    }
+}
+
+void FSPanelSearchPeople::onAvatarNameCallback(const LLUUID& id, const LLAvatarName& av_name)
+{
+    if (mAvatarNameCallbackConnection.connected())
+    {
+        mAvatarNameCallbackConnection.disconnect();
+    }
+
+    LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>("search_results_people");
+
+    if (av_name.getAccountName() != "(?\?\?).(?\?\?)")
+    {
+        LLSD content;
+        LLSD data;
+        data["id"] = id;
+
+        data["columns"][0]["column"] = "icon";
+        data["columns"][0]["type"] = "icon";
+        data["columns"][0]["value"] = "icon_avatar_offline.tga";
+
+        data["columns"][1]["name"] = "username";
+        data["columns"][1]["value"] = av_name.getUserName();
+
+        content["name"] = av_name.getUserName();
+
+        search_results->addElement(data);
+
+        mResultsContent[id.asString()] = content;
+        mResultsReceived = 1;
+        mNumResultsReturned = 1;
+
+        search_results->setEnabled(TRUE);
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        onSelectItem();
+    }
+    else
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = getChild<LLUICtrl>("people_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+}
+
+////////////////////////////////////////
+//         Groups Search Panel        //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchGroups> t_panel_fs_search_groups("panel_ls_groups");
+
+FSPanelSearchGroups::FSPanelSearchGroups() : FSSearchPanelBase()
+, mQueryID(nullptr)
+, mStartSearch(0)
+, mResultsReceived(0)
+, mResultsContent()
+{
+}
+
+FSPanelSearchGroups::~FSPanelSearchGroups()
+{
+}
+
+BOOL FSPanelSearchGroups::postBuild()
+{
+    mSearchComboBox =   findChild<LLSearchComboBox>("groups_edit");
+    mSearchResults =    findChild<LLScrollListCtrl>("search_results_groups");
+    if (mSearchComboBox)
+    {
+        mSearchComboBox->setCommitCallback(boost::bind(&FSPanelSearchGroups::onBtnFind, this));
+        fillSearchComboBox(mSearchComboBox);
+    }
+    if (mSearchResults)
+    {
+        mSearchResults->setCommitCallback(boost::bind(&FSPanelSearchGroups::onSelectItem, this));
+        mSearchResults->setEnabled(FALSE);
+        mSearchResults->setCommentText(LLTrans::getString("no_results"));
+    }
+
+    childSetAction("groups_next", boost::bind(&FSPanelSearchGroups::onBtnNext, this));
+    childSetAction("groups_back", boost::bind(&FSPanelSearchGroups::onBtnBack, this));
+    getChildView("groups_next")->setEnabled(FALSE);
+    getChildView("groups_back")->setEnabled(FALSE);
+
+    return TRUE;
+}
+
+void FSPanelSearchGroups::focusDefaultElement()
+{
+    mSearchComboBox->focusTextEntry();
+}
+
+void FSPanelSearchGroups::find()
+{
+    std::string text = filterShortWords(mSearchComboBox->getSimple());
+    if (text.size() == 0)
+    {
+        mSearchResults->setCommentText(LLTrans::getString("search_short"));
+        return;
+    }
+
+    static LLUICachedControl<bool> inc_pg("ShowPGSims", 1);
+    static LLUICachedControl<bool> inc_mature("ShowMatureSims", 0);
+    static LLUICachedControl<bool> inc_adult("ShowAdultSims", 0);
+    if (!(inc_pg || inc_mature || inc_adult))
+    {
+        LLNotificationsUtil::add("NoContentToSearch");
+        return;
+    }
+    U32 scope = 0;
+    if (gAgent.wantsPGOnly())
+    {
+        scope |= DFQ_PG_SIMS_ONLY;
+    }
+    bool adult_enabled = gAgent.canAccessAdult();
+    bool mature_enabled = gAgent.canAccessMature();
+    if (inc_pg)
+    {
+        scope |= DFQ_INC_PG;
+    }
+    if (inc_mature && mature_enabled)
+    {
+        scope |= DFQ_INC_MATURE;
+    }
+    if (inc_adult && adult_enabled)
+    {
+        scope |= DFQ_INC_ADULT;
+    }
+    scope |= DFQ_GROUPS;
+
+    mResultsReceived = 0;
+    if (mQueryID.notNull())
+    {
+        mQueryID.setNull();
+    }
+    mQueryID.generate();
+
+    if (mStartSearch < 0)
+    {
+        mStartSearch = 0;
+    }
+
+    gMessageSystem->newMessage("DirFindQuery");
+    gMessageSystem->nextBlock("AgentData");
+    gMessageSystem->addUUID("AgentID", gAgentID);
+    gMessageSystem->addUUID("SessionID", gAgentSessionID);
+    gMessageSystem->nextBlock("QueryData");
+    gMessageSystem->addUUID("QueryID", getQueryID());
+    gMessageSystem->addString("QueryText", text);
+    gMessageSystem->addU32("QueryFlags", scope);
+    gMessageSystem->addS32("QueryStart", mStartSearch);
+    gAgent.sendReliableMessage();
+    LL_DEBUGS("Search") << "Firing off search request: " << getQueryID() << LL_ENDL;
+
+    mSearchResults->deleteAllItems();
+    mSearchResults->setCommentText(LLTrans::getString("searching"));
+    mNumResultsReturned = 0;
+}
+
+void FSPanelSearchGroups::onBtnFind()
+{
+    std::string text = mSearchComboBox->getSimple();
+    if (!text.empty())
+    {
+        LLSearchHistory::getInstance()->addEntry(text);
+    }
+
+    resetSearch();
+
+    find();
+}
+
+void FSPanelSearchGroups::onBtnNext()
+{
+    mStartSearch += RESULT_PAGE_SIZE;
+    getChildView("groups_back")->setEnabled(TRUE);
+
+    find();
+}
+
+void FSPanelSearchGroups::onBtnBack()
+{
+    mStartSearch -= RESULT_PAGE_SIZE;
+    getChildView("groups_back")->setEnabled(mStartSearch > 0);
+
+    find();
+}
+
+void FSPanelSearchGroups::resetSearch()
+{
+    mStartSearch = 0;
+    getChildView("groups_back")->setEnabled(FALSE);
+    getChildView("groups_next")->setEnabled(FALSE);
+}
+
+S32 FSPanelSearchGroups::showNextButton(S32 rows)
+{
+    bool show_next_button = (mResultsReceived > RESULT_PAGE_SIZE);
+    getChildView("groups_next")->setEnabled(show_next_button);
+    if (show_next_button)
+    {
+        rows -= (mResultsReceived - RESULT_PAGE_SIZE);
+    }
+    return rows;
+}
+
+void FSPanelSearchGroups::onSelectItem()
+{
+    if (!mSearchResults)
+    {
+        return;
+    }
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance)
+    {
+        search_instance->FSFloaterSearch::onSelectedItem(mSearchResults->getSelectedValue(), FSFloaterSearch::SC_GROUP);
+    }
+}
+
+// static
+void FSPanelSearchGroups::processSearchReply(LLMessageSystem* msg, void**)
+{
+    LLUUID query_id;
+    LLUUID group_id;
+    LLUUID agent_id;
+    std::string group_name;
+    S32 members;
+    F32 search_order;
+
+    msg->getUUIDFast(   _PREHASH_QueryData, _PREHASH_QueryID,   query_id);
+    msg->getUUIDFast(   _PREHASH_AgentData, _PREHASH_AgentID,   agent_id);
+
+    // Not for us
+    if (agent_id != gAgentID)
+    {
+        return;
+    }
+    LL_DEBUGS("Search") << "received directory request - QueryID: " << query_id << " AgentID: " << agent_id << LL_ENDL;
+
+    FSPanelSearchGroups* self = FSFloaterSearch::getSearchPanel<FSPanelSearchGroups>("panel_ls_groups");
+
+    // floater is closed or these are not results from our last request
+    if (!self || query_id != self->mQueryID)
+    {
+        return;
+    }
+
+    LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("search_results_groups");
+
+    // Clear "Searching" label on first results
+    if (self->mNumResultsReturned++ == 0)
+    {
+        search_results->deleteAllItems();
+    }
+
+    // Check for status messages
+    if (msg->getNumberOfBlocks("StatusData"))
+    {
+        U32 status;
+        msg->getU32("StatusData", "Status", status);
+        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
+        {
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("groups_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+            return;
+        }
+        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_short"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_banned"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_disabled"));
+            return;
+        }
+    }
+
+    bool found_one = false;
+    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
+    if (num_new_rows == 0 && self->mResultsReceived == 0)
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = self->getChild<LLUICtrl>("groups_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+
+    self->mResultsReceived += num_new_rows;
+    num_new_rows = self->showNextButton(num_new_rows);
+
+    for (S32 i = 0; i < num_new_rows; i++)
+    {
+        msg->getUUIDFast(   _PREHASH_QueryReplies,  _PREHASH_GroupID,       group_id,   i);
+        msg->getStringFast( _PREHASH_QueryReplies,  _PREHASH_GroupName,     group_name, i);
+        msg->getS32Fast(    _PREHASH_QueryReplies,  _PREHASH_Members,       members,    i);
+        msg->getF32Fast(    _PREHASH_QueryReplies,  _PREHASH_SearchOrder,   search_order,i);
+        if (group_id.isNull())
+        {
+            LL_DEBUGS("Search") << "No results returned for QueryID: " << query_id << LL_ENDL;
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("groups_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+        }
+        else
+        {
+            LL_DEBUGS("Search") << "Got: " << group_name << " GroupID: " << group_id << LL_ENDL;
+            search_results->setEnabled(TRUE);
+            found_one = true;
+
+            LLSD content;
+            LLSD element;
+
+            element["id"] = group_id;
+
+            element["columns"][0]["column"] = "icon";
+            element["columns"][0]["type"]   = "icon";
+            element["columns"][0]["value"]  = "Icon_Group";
+
+            element["columns"][1]["column"] = "group_name";
+            element["columns"][1]["value"]  = group_name;
+
+            element["columns"][2]["column"] = "members";
+            element["columns"][2]["value"]  = members;
+
+            element["columns"][3]["column"] = "score";
+            element["columns"][3]["value"]  = search_order;
+
+            content["name"] = group_name;
+
+            search_results->addElement(element, ADD_BOTTOM);
+            self->mResultsContent[group_id.asString()] = content;
+        }
+    }
+    if (found_one)
+    {
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        self->onSelectItem();
+    }
+}
+
+////////////////////////////////////////
+//         Places Search Panel        //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchPlaces> t_panel_fs_search_places("panel_ls_places");
+
+FSPanelSearchPlaces::FSPanelSearchPlaces() : FSSearchPanelBase()
+, mQueryID(nullptr)
+, mStartSearch(0)
+, mResultsReceived(0)
+, mResultsContent()
+{
+    mCommitCallbackRegistrar.add("CommitSearch", boost::bind(&FSPanelSearchPlaces::find, this));
+}
+
+FSPanelSearchPlaces::~FSPanelSearchPlaces()
+{
+}
+
+BOOL FSPanelSearchPlaces::postBuild()
+{
+    mSearchComboBox =   findChild<LLSearchComboBox>("places_edit");
+    mSearchResults =    findChild<LLScrollListCtrl>("search_results_places");
+    mPlacesCategory =   findChild<LLComboBox>("places_category");
+    if (mSearchComboBox)
+    {
+        mSearchComboBox->setCommitCallback(boost::bind(&FSPanelSearchPlaces::onBtnFind, this));
+        fillSearchComboBox(mSearchComboBox);
+    }
+    if (mSearchResults)
+    {
+        mSearchResults->setCommitCallback(boost::bind(&FSPanelSearchPlaces::onSelectItem, this));
+        mSearchResults->setEnabled(FALSE);
+        mSearchResults->setCommentText(LLTrans::getString("no_results"));
+    }
+    if (mPlacesCategory)
+    {
+        mPlacesCategory->add(LLTrans::getString("all_categories"), LLSD("any"));
+        mPlacesCategory->addSeparator();
+        for (int category = LLParcel::C_LINDEN; category < LLParcel::C_COUNT; category++)
+        {
+            LLParcel::ECategory eCategory = (LLParcel::ECategory)category;
+            mPlacesCategory->add(LLTrans::getString(LLParcel::getCategoryUIString(eCategory)), LLParcel::getCategoryString(eCategory));
+        }
+    }
+    childSetAction("places_next", boost::bind(&FSPanelSearchPlaces::onBtnNext, this));
+    childSetAction("places_back", boost::bind(&FSPanelSearchPlaces::onBtnBack, this));
+    getChildView("places_next")->setEnabled(FALSE);
+    getChildView("places_back")->setEnabled(FALSE);
+
+    return TRUE;
+}
+
+void FSPanelSearchPlaces::focusDefaultElement()
+{
+    mSearchComboBox->focusTextEntry();
+}
+
+void FSPanelSearchPlaces::find()
+{
+    std::string text = filterShortWords(mSearchComboBox->getSimple());
+    if (text.empty())
+    {
+        mSearchResults->setCommentText(LLTrans::getString("search_short"));
+        return;
+    }
+
+    static LLUICachedControl<bool> inc_pg("ShowPGSims", 1);
+    static LLUICachedControl<bool> inc_mature("ShowMatureSims", 0);
+    static LLUICachedControl<bool> inc_adult("ShowAdultSims", 0);
+    if (!(inc_pg || inc_mature || inc_adult))
+    {
+        LLNotificationsUtil::add("NoContentToSearch");
+        return;
+    }
+    S8 category;
+    std::string category_string = mPlacesCategory->getSelectedValue();
+    if (category_string == "any")
+    {
+        category = LLParcel::C_ANY;
+    }
+    else
+    {
+        category = LLParcel::getCategoryFromString(category_string);
+    }
+    U32 scope = 0;
+    if (gAgent.wantsPGOnly())
+    {
+        scope |= DFQ_PG_SIMS_ONLY;
+    }
+    bool adult_enabled = gAgent.canAccessAdult();
+    bool mature_enabled = gAgent.canAccessMature();
+    if (inc_pg)
+    {
+        scope |= DFQ_INC_PG;
+    }
+    if (inc_mature && mature_enabled)
+    {
+        scope |= DFQ_INC_MATURE;
+    }
+    if (inc_adult && adult_enabled)
+    {
+        scope |= DFQ_INC_ADULT;
+    }
+    scope |= DFQ_DWELL_SORT;
+
+    mResultsReceived = 0;
+    if (mQueryID.notNull())
+    {
+        mQueryID.setNull();
+    }
+    mQueryID.generate();
+
+    if (mStartSearch < 0)
+    {
+        mStartSearch = 0;
+    }
+
+    gMessageSystem->newMessage("DirPlacesQuery");
+    gMessageSystem->nextBlock("AgentData");
+    gMessageSystem->addUUID("AgentID", gAgentID);
+    gMessageSystem->addUUID("SessionID", gAgentSessionID);
+    gMessageSystem->nextBlock("QueryData");
+    gMessageSystem->addUUID("QueryID", getQueryID());
+    gMessageSystem->addString("QueryText", text);
+    gMessageSystem->addU32("QueryFlags", scope);
+    gMessageSystem->addS8("Category", category);
+    // TODO: Search filter by region name.
+    gMessageSystem->addString("SimName", "");
+    gMessageSystem->addS32("QueryStart", mStartSearch);
+    gAgent.sendReliableMessage();
+    LL_DEBUGS("Search") << "Firing off places search request: " << getQueryID() << LL_ENDL;
+
+    mSearchResults->deleteAllItems();
+    mSearchResults->setCommentText(LLTrans::getString("searching"));
+    mNumResultsReturned = 0;
+}
+
+void FSPanelSearchPlaces::onBtnFind()
+{
+    std::string text = mSearchComboBox->getSimple();
+    if (!text.empty())
+    {
+        LLSearchHistory::getInstance()->addEntry(text);
+    }
+
+    resetSearch();
+
+    find();
+}
+
+void FSPanelSearchPlaces::onBtnNext()
+{
+    mStartSearch += RESULT_PAGE_SIZE;
+    getChildView("places_back")->setEnabled(TRUE);
+
+    find();
+}
+
+void FSPanelSearchPlaces::onBtnBack()
+{
+    mStartSearch -= RESULT_PAGE_SIZE;
+    getChildView("places_back")->setEnabled(mStartSearch > 0);
+
+    find();
+}
+
+void FSPanelSearchPlaces::resetSearch()
+{
+    mStartSearch = 0;
+    getChildView("places_back")->setEnabled(FALSE);
+    getChildView("places_next")->setEnabled(FALSE);
+}
+
+S32 FSPanelSearchPlaces::showNextButton(S32 rows)
+{
+    bool show_next_button = (mResultsReceived > RESULT_PAGE_SIZE);
+    getChildView("places_next")->setEnabled(show_next_button);
+    if (show_next_button)
+    {
+        rows -= (mResultsReceived - RESULT_PAGE_SIZE);
+    }
+    return rows;
+}
+
+void FSPanelSearchPlaces::onSelectItem()
+{
+    if (!mSearchResults)
+    {
+        return;
+    }
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance)
+    {
+        search_instance->FSFloaterSearch::onSelectedItem(mSearchResults->getSelectedValue(), FSFloaterSearch::SC_PLACE);
+    }
+}
+
+// static
+void FSPanelSearchPlaces::processSearchReply(LLMessageSystem* msg, void**)
+{
+    LLUUID      agent_id;
+    LLUUID      query_id;
+    LLUUID      parcel_id;
+    std::string name;
+    BOOL        for_sale;
+    BOOL        auction;
+    F32         dwell;
+
+    msg->getUUID("AgentData", "AgentID", agent_id);
+    msg->getUUID("QueryData", "QueryID", query_id);
+
+    // Not for us
+    if (agent_id != gAgentID)
+    {
+        return;
+    }
+    LL_DEBUGS("Search") << "received directory request - QueryID: " << query_id << " AgentID: " << agent_id << LL_ENDL;
+
+    FSPanelSearchPlaces* self = FSFloaterSearch::getSearchPanel<FSPanelSearchPlaces>("panel_ls_places");
+
+    // floater is closed or these are not results from our last request
+    if (!self || query_id != self->getQueryID())
+    {
+        return;
+    }
+
+    LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("search_results_places");
+
+    // Clear "Searching" label on first results
+    if (self->mNumResultsReturned++ == 0)
+    {
+        search_results->deleteAllItems();
+    }
+
+    // Check for status messages
+    if (msg->getNumberOfBlocks("StatusData"))
+    {
+        U32 status;
+        msg->getU32("StatusData", "Status", status);
+        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
+        {
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("places_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+            return;
+        }
+        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_short"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_banned"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_disabled"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_ESTATEEMPTY)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_disabled"));
+            return;
+        }
+    }
+
+    bool found_one = false;
+    S32 num_new_rows = msg->getNumberOfBlocks("QueryReplies");
+    if (num_new_rows == 0 && self->mResultsReceived == 0)
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = self->getChild<LLUICtrl>("places_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+
+    self->mResultsReceived += num_new_rows;
+    num_new_rows = self->showNextButton(num_new_rows);
+
+    for (S32 i = 0; i < num_new_rows; i++)
+    {
+        msg->getUUID(   "QueryReplies", "ParcelID", parcel_id,  i);
+        msg->getString( "QueryReplies", "Name",     name,       i);
+        msg->getBOOL(   "QueryReplies", "ForSale",  for_sale,i);
+        msg->getBOOL(   "QueryReplies", "Auction",  auction,    i);
+        msg->getF32(    "QueryReplies", "Dwell",    dwell,      i);
+        if (parcel_id.isNull())
+        {
+            LL_DEBUGS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("places_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+        }
+        else
+        {
+            LL_DEBUGS("Search") << "Got: " << name << " ParcelID: " << parcel_id << LL_ENDL;
+            search_results->setEnabled(TRUE);
+            found_one = true;
+
+            LLSD content;
+            LLSD element;
+
+            element["id"] = parcel_id;
+
+            if (auction)
+            {
+                element["columns"][0]["column"] = "icon";
+                element["columns"][0]["type"]   = "icon";
+                element["columns"][0]["value"]  = "Icon_Auction";
+            }
+            else if (for_sale)
+            {
+                element["columns"][0]["column"] = "icon";
+                element["columns"][0]["type"]   = "icon";
+                element["columns"][0]["value"]  = "Icon_For_Sale";
+            }
+            else
+            {
+                element["columns"][0]["column"] = "icon";
+                element["columns"][0]["type"]   = "icon";
+                element["columns"][0]["value"]  = "Icon_Place";
+            }
+
+            element["columns"][1]["column"] = "place_name";
+            element["columns"][1]["value"]  = name;
+
+            content["name"] = name;
+
+            std::string buffer = llformat("%.0f", (F64)dwell);
+            element["columns"][2]["column"] = "dwell";
+            element["columns"][2]["value"]  = buffer;
+
+            search_results->addElement(element, ADD_BOTTOM);
+            self->mResultsContent[parcel_id.asString()] = content;
+        }
+    }
+    if (found_one)
+    {
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        self->onSelectItem();
+    }
+}
+
+////////////////////////////////////////
+//          Land Search Panel         //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchLand> t_panel_fs_search_land("panel_ls_land");
+
+FSPanelSearchLand::FSPanelSearchLand() : FSSearchPanelBase()
+, mQueryID(nullptr)
+, mStartSearch(0)
+, mResultsReceived(0)
+, mResultsContent()
+{
+    mCommitCallbackRegistrar.add("CommitSearch", boost::bind(&FSPanelSearchLand::find, this));
+}
+
+FSPanelSearchLand::~FSPanelSearchLand()
+{
+}
+
+BOOL FSPanelSearchLand::postBuild()
+{
+    mSearchResults  = getChild<LLScrollListCtrl>("search_results_land");
+    mPriceEditor    = findChild<LLLineEditor>("price_edit");
+    mAreaEditor     = findChild<LLLineEditor>("area_edit");
+    if (mSearchResults)
+    {
+        mSearchResults->setCommitCallback(boost::bind(&FSPanelSearchLand::onSelectItem, this));
+        mSearchResults->setEnabled(FALSE);
+        mSearchResults->setCommentText(LLTrans::getString("no_results"));
+    }
+    if (mPriceEditor)
+    {
+        mPriceEditor->setCommitOnFocusLost(false);
+        mPriceEditor->setCommitCallback(boost::bind(&FSPanelSearchLand::onBtnFind, this));
+    }
+    if (mAreaEditor)
+    {
+        mAreaEditor->setCommitOnFocusLost(false);
+        mAreaEditor->setCommitCallback(boost::bind(&FSPanelSearchLand::find, this));
+    }
+    childSetAction("land_find", boost::bind(&FSPanelSearchLand::onBtnFind, this));
+    childSetAction("land_next", boost::bind(&FSPanelSearchLand::onBtnNext, this));
+    childSetAction("land_back", boost::bind(&FSPanelSearchLand::onBtnBack, this));
+
+    getChildView("land_next")->setEnabled(FALSE);
+    getChildView("land_back")->setEnabled(FALSE);
+
+    return TRUE;
+}
+
+void FSPanelSearchLand::find()
+{
+    static LLUICachedControl<bool> inc_pg("ShowPGLand", 1);
+    static LLUICachedControl<bool> inc_mature("ShowMatureLand", 0);
+    static LLUICachedControl<bool> inc_adult("ShowAdultLand", 0);
+    static LLUICachedControl<bool> limit_price("FindLandPrice", 1);
+    static LLUICachedControl<bool> limit_area("FindLandArea", 1);
+    if (!(inc_pg || inc_mature || inc_adult))
+    {
+        LLNotificationsUtil::add("NoContentToSearch");
+        return;
+    }
+
+    U32 category = ST_ALL;
+    const std::string& selection = findChild<LLComboBox>("land_category")->getSelectedValue().asString();
+    if (!selection.empty())
+    {
+        if (selection == "Auction")
+        {
+            category = ST_AUCTION;
+        }
+        else if (selection == "Mainland")
+        {
+            category = ST_MAINLAND;
+        }
+        else if (selection == "Estate")
+        {
+            category = ST_ESTATE;
+        }
+    }
+
+    U32 scope = 0;
+    if (gAgent.wantsPGOnly())
+    {
+        scope |= DFQ_PG_SIMS_ONLY;
+    }
+    bool mature_enabled = gAgent.canAccessMature();
+    bool adult_enabled = gAgent.canAccessAdult();
+    if (inc_pg)
+    {
+        scope |= DFQ_INC_PG;
+    }
+    if (inc_mature && mature_enabled)
+    {
+        scope |= DFQ_INC_MATURE;
+    }
+    if (inc_adult && adult_enabled)
+    {
+        scope |= DFQ_INC_ADULT;
+    }
+    const std::string& sort = findChild<LLComboBox>("land_sort_combo")->getSelectedValue().asString();
+    if (!sort.empty())
+    {
+        if (sort == "Name")
+        {
+            scope |= DFQ_NAME_SORT;
+        }
+        else if (sort == "Price")
+        {
+            scope |= DFQ_PRICE_SORT;
+        }
+        else if (sort == "PPM")
+        {
+            scope |= DFQ_PER_METER_SORT;
+        }
+        else if (sort == "Area")
+        {
+            scope |= DFQ_AREA_SORT;
+        }
+    }
+    else
+    {
+        scope |= DFQ_PRICE_SORT;
+    }
+    if (childGetValue("ascending_check").asBoolean())
+    {
+        scope |= DFQ_SORT_ASC;
+    }
+    if (limit_price)
+    {
+        scope |= DFQ_LIMIT_BY_PRICE;
+    }
+    if (limit_area)
+    {
+        scope |= DFQ_LIMIT_BY_AREA;
+    }
+    S32 price = childGetValue("edit_price").asInteger();
+    S32 area = childGetValue("edit_area").asInteger();
+
+    mResultsReceived = 0;
+    if (mQueryID.notNull())
+    {
+        mQueryID.setNull();
+    }
+    mQueryID.generate();
+
+    if (mStartSearch < 0)
+    {
+        mStartSearch = 0;
+    }
+
+    gMessageSystem->newMessage("DirLandQuery");
+    gMessageSystem->nextBlock("AgentData");
+    gMessageSystem->addUUID("AgentID", gAgentID);
+    gMessageSystem->addUUID("SessionID", gAgentSessionID);
+    gMessageSystem->nextBlock("QueryData");
+    gMessageSystem->addUUID("QueryID", getQueryID());
+    gMessageSystem->addU32("QueryFlags", scope);
+    gMessageSystem->addU32("SearchType", category);
+    gMessageSystem->addS32("Price", price);
+    gMessageSystem->addS32("Area", area);
+    gMessageSystem->addS32("QueryStart", mStartSearch);
+    gAgent.sendReliableMessage();
+    LL_DEBUGS("Search") << "Firing off places search request: " << getQueryID() << category << LL_ENDL;
+
+    mSearchResults->deleteAllItems();
+    mSearchResults->setCommentText(LLTrans::getString("searching"));
+    mNumResultsReturned = 0;
+}
+
+void FSPanelSearchLand::onBtnFind()
+{
+    resetSearch();
+
+    find();
+}
+
+void FSPanelSearchLand::onBtnNext()
+{
+    mStartSearch += RESULT_PAGE_SIZE;
+    getChildView("land_back")->setEnabled(TRUE);
+
+    find();
+}
+
+void FSPanelSearchLand::onBtnBack()
+{
+    mStartSearch -= RESULT_PAGE_SIZE;
+    getChildView("land_back")->setEnabled(mStartSearch > 0);
+
+    find();
+}
+
+void FSPanelSearchLand::resetSearch()
+{
+    mStartSearch = 0;
+    getChildView("land_back")->setEnabled(FALSE);
+    getChildView("land_next")->setEnabled(FALSE);
+}
+
+S32 FSPanelSearchLand::showNextButton(S32 rows)
+{
+    bool show_next_button = (mResultsReceived > RESULT_PAGE_SIZE);
+    getChildView("land_next")->setEnabled(show_next_button);
+    if (show_next_button)
+    {
+        rows -= (mResultsReceived - RESULT_PAGE_SIZE);
+    }
+    return rows;
+}
+
+void FSPanelSearchLand::onSelectItem()
+{
+    if (!mSearchResults)
+    {
+        return;
+    }
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance)
+    {
+        search_instance->FSFloaterSearch::onSelectedItem(mSearchResults->getSelectedValue(), FSFloaterSearch::SC_PLACE);
+    }
+}
+
+// static
+void FSPanelSearchLand::processSearchReply(LLMessageSystem* msg, void**)
+{
+    LLUUID      agent_id;
+    LLUUID      query_id;
+    LLUUID      parcel_id;
+    std::string name;
+    std::string land_sku;
+    std::string land_type;
+    BOOL        auction;
+    BOOL        for_sale;
+    S32         price;
+    S32         area;
+
+    msg->getUUID("AgentData", "AgentID", agent_id);
+    msg->getUUID("QueryData", "QueryID", query_id);
+
+    // Not for us
+    if (agent_id != gAgentID)
+    {
+        return;
+    }
+    LL_DEBUGS("Search") << "received directory request - QueryID: " << query_id << " AgentID: " << agent_id << LL_ENDL;
+
+    FSPanelSearchLand* self = FSFloaterSearch::getSearchPanel<FSPanelSearchLand>("panel_ls_land");
+
+    // floater is closed or these are not results from our last request
+    if (!self || query_id != self->mQueryID)
+    {
+        return;
+    }
+
+    LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("search_results_land");
+    // clear "Searching" label on first results
+    if (self->mNumResultsReturned++ == 0)
+    {
+        search_results->deleteAllItems();
+    }
+
+    static LLUICachedControl<bool> use_price("FindLandPrice", 1);
+    static LLUICachedControl<bool> use_area("FindLandArea", 1);
+    S32 limit_price = self->childGetValue("edit_price").asInteger();
+    S32 limit_area = self->childGetValue("edit_area").asInteger();
+
+    bool found_one = false;
+    S32 num_new_rows = msg->getNumberOfBlocks("QueryReplies");
+    if (num_new_rows == 0 && self->mResultsReceived == 0)
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = self->getChild<LLUICtrl>("events_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+    self->mResultsReceived += num_new_rows;
+
+    S32 not_auction = 0;
+    for (S32 i = 0; i < num_new_rows; i++)
+    {
+        msg->getUUID(   "QueryReplies", "ParcelID",     parcel_id,  i);
+        msg->getString( "QueryReplies", "Name",         name,       i);
+        msg->getBOOL(   "QueryReplies", "Auction",      auction,    i);
+        msg->getBOOL(   "QueryReplies", "ForSale",      for_sale,   i);
+        msg->getS32(    "QueryReplies", "SalePrice",    price,      i);
+        msg->getS32(    "QueryReplies", "ActualArea",   area,       i);
+        if (parcel_id.isNull())
+        {
+            LL_DEBUGS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("no_results"));
+        }
+        else
+        {
+            LL_DEBUGS("Search") << "Got: " << name << " ClassifiedID: " << parcel_id << LL_ENDL;
+            search_results->setEnabled(TRUE);
+            found_one = true;
+            if (msg->getSizeFast(_PREHASH_QueryReplies, i, _PREHASH_ProductSKU) > 0)
+            {
+                msg->getStringFast( _PREHASH_QueryReplies, _PREHASH_ProductSKU, land_sku, i);
+                land_type = LLProductInfoRequestManager::instance().getDescriptionForSku(land_sku);
+            }
+            else
+            {
+                land_sku.clear();
+                land_type = LLTrans::getString("land_type_unknown");
+            }
+            if (parcel_id.isNull())
+            {
+                continue;
+            }
+            if (use_price && (price > limit_price))
+            {
+                continue;
+            }
+            if (use_area && (area < limit_area))
+            {
+                continue;
+            }
+
+            LLSD content;
+            LLSD element;
+
+            element["id"] = parcel_id;
+            if (auction)
+            {
+                element["columns"][0]["column"] = "icon";
+                element["columns"][0]["type"]   = "icon";
+                element["columns"][0]["value"]  = "Icon_Auction";
+            }
+            else if (for_sale)
+            {
+                element["columns"][0]["column"] = "icon";
+                element["columns"][0]["type"]   = "icon";
+                element["columns"][0]["value"]  = "Icon_For_Sale";
+            }
+            else
+            {
+                element["columns"][0]["column"] = "icon";
+                element["columns"][0]["type"]   = "icon";
+                element["columns"][0]["value"]  = "Icon_Place";
+            }
+
+            element["columns"][1]["column"] = "land_name";
+            element["columns"][1]["value"]  = name;
+
+            content["place_name"] = name;
+
+            std::string buffer = "Auction";
+            if (!auction)
+            {
+                buffer = llformat("%d", price);
+                not_auction++;
+            }
+            element["columns"][2]["column"] = "price";
+            element["columns"][2]["value"]  = price;
+
+            element["columns"][3]["column"] = "area";
+            element["columns"][3]["value"]  = area;
+            if (!auction)
+            {
+                F32 ppm;
+                if (area > 0)
+                {
+                    ppm = (F32)price / (F32)area;
+                }
+                else
+                {
+                    ppm = 0.f;
+                }
+                std::string ppm_buffer = llformat("%.1f", ppm);
+                element["columns"][4]["column"] = "ppm";
+                element["columns"][4]["value"] = ppm_buffer;
+            }
+            else
+            {
+                element["columns"][4]["column"] = "ppm";
+                element["columns"][4]["value"]  = "1.0";
+            }
+
+            element["columns"][5]["column"] = "land_type";
+            element["columns"][5]["value"]  = land_type;
+
+            search_results->addElement(element, ADD_BOTTOM);
+            self->mResultsContent[parcel_id.asString()] = content;
+        }
+        // We test against non-auction properties because they don't count towards the page limit.
+        self->showNextButton(not_auction);
+    }
+    if (found_one)
+    {
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        self->onSelectItem();
+    }
+}
+
+////////////////////////////////////////
+//      Classifieds Search Panel      //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchClassifieds> t_panel_fs_search_classifieds("panel_ls_classifieds");
+
+FSPanelSearchClassifieds::FSPanelSearchClassifieds() : FSSearchPanelBase()
+, mQueryID(nullptr)
+, mStartSearch(0)
+, mResultsReceived(0)
+, mResultsContent()
+{
+    mCommitCallbackRegistrar.add("CommitSearch", boost::bind(&FSPanelSearchClassifieds::find, this));
+}
+
+FSPanelSearchClassifieds::~FSPanelSearchClassifieds()
+{
+}
+
+BOOL FSPanelSearchClassifieds::postBuild()
+{
+    mSearchComboBox = findChild<LLSearchComboBox>("classifieds_edit");
+    mSearchResults = getChild<LLScrollListCtrl>("search_results_classifieds");
+    if (mSearchComboBox)
+    {
+        mSearchComboBox->setCommitCallback(boost::bind(&FSPanelSearchClassifieds::onBtnFind, this));
+        fillSearchComboBox(mSearchComboBox);
+    }
+    if (mSearchResults)
+    {
+        mSearchResults->setCommitCallback(boost::bind(&FSPanelSearchClassifieds::onSelectItem, this));
+        mSearchResults->setEnabled(FALSE);
+        mSearchResults->setCommentText(LLTrans::getString("no_results"));
+    }
+
+    mClassifiedsCategory = getChild<LLComboBox>("classifieds_category");
+    if (mClassifiedsCategory)
+    {
+        LLClassifiedInfo::cat_map::iterator iter;
+        mClassifiedsCategory->add(LLTrans::getString("all_categories"), LLSD(0));
+        mClassifiedsCategory->addSeparator();
+        for (iter = LLClassifiedInfo::sCategories.begin();
+             iter != LLClassifiedInfo::sCategories.end();
+             iter++)
+        {
+            mClassifiedsCategory->add(LLTrans::getString(iter->second), LLSD((S32)iter->first));
+        }
+    }
+    childSetAction("classifieds_next", boost::bind(&FSPanelSearchClassifieds::onBtnNext, this));
+    childSetAction("classifieds_back", boost::bind(&FSPanelSearchClassifieds::onBtnBack, this));
+
+    getChildView("classifieds_next")->setEnabled(FALSE);
+    getChildView("classifieds_back")->setEnabled(FALSE);
+
+    return TRUE;
+}
+
+void FSPanelSearchClassifieds::focusDefaultElement()
+{
+    mSearchComboBox->focusTextEntry();
+}
+
+void FSPanelSearchClassifieds::find()
+{
+    std::string text = filterShortWords(mSearchComboBox->getSimple());
+    if (text.size() == 0)
+    {
+        mSearchResults->setCommentText(LLTrans::getString("search_short"));
+        return;
+    }
+
+    static LLUICachedControl<bool> inc_pg("ShowPGClassifieds", 1);
+    static LLUICachedControl<bool> inc_mature("ShowMatureClassifieds", 0);
+    static LLUICachedControl<bool> inc_adult("ShowAdultClassifieds", 0);
+    if (!(inc_pg || inc_mature || inc_adult))
+    {
+        LLNotificationsUtil::add("NoContentToSearch");
+        return;
+    }
+    U32 category = mClassifiedsCategory->getValue().asInteger();
+    BOOL auto_renew = FALSE;
+    U32 flags = pack_classified_flags_request(auto_renew, inc_pg, inc_mature, inc_adult);
+
+    mResultsReceived = 0;
+    if (mQueryID.notNull())
+    {
+        mQueryID.setNull();
+    }
+    mQueryID.generate();
+
+    if (mStartSearch < 0)
+    {
+        mStartSearch = 0;
+    }
+
+    gMessageSystem->newMessageFast(_PREHASH_DirClassifiedQuery);
+    gMessageSystem->nextBlockFast(_PREHASH_AgentData);
+    gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgentID);
+    gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgentSessionID);
+    gMessageSystem->nextBlockFast(_PREHASH_QueryData);
+    gMessageSystem->addUUIDFast(_PREHASH_QueryID, getQueryID());
+    gMessageSystem->addStringFast(_PREHASH_QueryText, text);
+    gMessageSystem->addU32Fast(_PREHASH_QueryFlags, flags);
+    gMessageSystem->addU32Fast(_PREHASH_Category, category);
+    gMessageSystem->addS32Fast(_PREHASH_QueryStart, mStartSearch);
+    gAgent.sendReliableMessage();
+    LL_DEBUGS("Search") << "Firing off classified ad search request: " << getQueryID() << LL_ENDL;
+
+    mSearchResults->deleteAllItems();
+    mSearchResults->setCommentText(LLTrans::getString("searching"));
+    mNumResultsReturned = 0;
+}
+
+void FSPanelSearchClassifieds::onBtnFind()
+{
+    std::string text = mSearchComboBox->getSimple();
+    if (!text.empty())
+    {
+        LLSearchHistory::getInstance()->addEntry(text);
+    }
+
+    resetSearch();
+
+    find();
+}
+
+void FSPanelSearchClassifieds::onBtnNext()
+{
+    mStartSearch += RESULT_PAGE_SIZE;
+    getChildView("classifieds_back")->setEnabled(TRUE);
+
+    find();
+}
+
+void FSPanelSearchClassifieds::onBtnBack()
+{
+    mStartSearch -= RESULT_PAGE_SIZE;
+    getChildView("classifieds_back")->setEnabled(mStartSearch > 0);
+
+    find();
+}
+
+void FSPanelSearchClassifieds::resetSearch()
+{
+    mStartSearch = 0;
+    getChildView("classifieds_back")->setEnabled(FALSE);
+    getChildView("classifieds_next")->setEnabled(FALSE);
+}
+
+S32 FSPanelSearchClassifieds::showNextButton(S32 rows)
+{
+    bool show_next_button = (mResultsReceived > RESULT_PAGE_SIZE);
+    getChildView("classifieds_next")->setEnabled(show_next_button);
+    if (show_next_button)
+    {
+        rows -= (mResultsReceived - RESULT_PAGE_SIZE);
+    }
+    return rows;
+}
+
+void FSPanelSearchClassifieds::onSelectItem()
+{
+    if (!mSearchResults)
+    {
+        return;
+    }
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance)
+    {
+        search_instance->FSFloaterSearch::onSelectedItem(mSearchResults->getSelectedValue(), FSFloaterSearch::SC_CLASSIFIED);
+    }
+}
+
+// static
+void FSPanelSearchClassifieds::processSearchReply(LLMessageSystem* msg, void**)
+{
+    LLUUID      agent_id;
+    LLUUID      query_id;
+    LLUUID      classified_id;
+    std::string name;
+    U32         creation_date;
+    U32         expiration_date;
+    S32         price_for_listing;
+
+    msg->getUUID("AgentData", "AgentID", agent_id);
+    msg->getUUID("QueryData", "QueryID", query_id);
+
+    // Not for us
+    if (agent_id != gAgentID)
+    {
+        return;
+    }
+    LL_DEBUGS("Search") << "received directory request - QueryID: " << query_id << " AgentID: " << agent_id << LL_ENDL;
+
+    FSPanelSearchClassifieds* self = FSFloaterSearch::getSearchPanel<FSPanelSearchClassifieds>("panel_ls_classifieds");
+
+    if (msg->getNumberOfBlocks("StatusData"))
+    {
+        U32 status;
+        msg->getU32("StatusData", "Status", status);
+        if (status & STATUS_SEARCH_CLASSIFIEDS_BANNEDWORD)
+        {
+            LLNotificationsUtil::add("SearchWordBanned");
+        }
+    }
+
+    // floater is closed or these are not results from our last request
+    if (!self || query_id != self->mQueryID)
+    {
+        return;
+    }
+
+    LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("search_results_classifieds");
+
+    // Clear "Searching" label on first results
+    if (self->mNumResultsReturned++ == 0)
+    {
+        search_results->deleteAllItems();
+    }
+
+    // Check for status messages
+    if (msg->getNumberOfBlocks("StatusData"))
+    {
+        U32 status;
+        msg->getU32("StatusData", "Status", status);
+        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
+        {
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("classifieds_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+            return;
+        }
+        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_short"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_CLASSIFIEDS_BANNEDWORD)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_banned"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_disabled"));
+            return;
+        }
+    }
+
+    bool found_one = false;
+    S32 num_new_rows = msg->getNumberOfBlocks("QueryReplies");
+    if (num_new_rows == 0 && self->mResultsReceived == 0)
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = self->getChild<LLUICtrl>("classifieds_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+    self->mResultsReceived += num_new_rows;
+    num_new_rows = self->showNextButton(num_new_rows);
+
+    for (S32 i = 0; i < num_new_rows; i++)
+    {
+        msg->getUUID(   "QueryReplies", "ClassifiedID",     classified_id,  i);
+        msg->getString( "QueryReplies", "Name",             name,           i);
+        msg->getU32(    "QueryReplies", "CreationDate",     creation_date,  i);
+        msg->getU32(    "QueryReplies", "ExpirationDate",   expiration_date,i);
+        msg->getS32(    "QueryReplies", "PriceForListing",  price_for_listing,i);
+        if (classified_id.isNull())
+        {
+            LL_DEBUGS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("classifieds_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+        }
+        else
+        {
+            LL_DEBUGS("Search") << "Got: " << name << " ClassifiedID: " << classified_id << LL_ENDL;
+            search_results->setEnabled(TRUE);
+            found_one = true;
+
+            LLSD content;
+            LLSD element;
+
+            element["id"] = classified_id;
+
+            element["columns"][0]["column"] = "icon";
+            element["columns"][0]["type"]   = "icon";
+            element["columns"][0]["value"]  = "icon_top_pick.tga";
+
+            element["columns"][1]["column"] = "classified_name";
+            element["columns"][1]["value"]  = name;
+
+            element["columns"][2]["column"] = "price";
+            element["columns"][2]["value"]  = price_for_listing;
+
+            content["name"] = name;
+
+            search_results->addElement(element, ADD_BOTTOM);
+            self->mResultsContent[classified_id.asString()] = content;
+        }
+    }
+    if (found_one)
+    {
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        self->onSelectItem();
+    }
+}
+
+////////////////////////////////////////
+//        Events Search Panel         //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchEvents> t_panel_fs_search_events("panel_ls_events");
+
+FSPanelSearchEvents::FSPanelSearchEvents() : FSSearchPanelBase()
+, mQueryID(nullptr)
+, mResultsReceived(0)
+, mStartSearch(0)
+, mDay(0)
+, mResultsContent()
+{
+    mCommitCallbackRegistrar.add("CommitSearch", boost::bind(&FSPanelSearchEvents::find, this));
+}
+
+FSPanelSearchEvents::~FSPanelSearchEvents()
+{
+}
+
+BOOL FSPanelSearchEvents::postBuild()
+{
+    mSearchComboBox = findChild<LLSearchComboBox>("events_edit");
+    mSearchResults = getChild<LLScrollListCtrl>("search_results_events");
+    mEventsMode = findChild<LLRadioGroup>("events_search_mode");
+    if (mSearchComboBox)
+    {
+        mSearchComboBox->setCommitCallback(boost::bind(&FSPanelSearchEvents::onBtnFind, this));
+        fillSearchComboBox(mSearchComboBox);
+    }
+    if (mSearchResults)
+    {
+        mSearchResults->setCommitCallback(boost::bind(&FSPanelSearchEvents::onSelectItem, this));
+        mSearchResults->setEnabled(FALSE);
+        mSearchResults->setCommentText(LLTrans::getString("no_results"));
+    }
+    if (mEventsMode)
+    {
+        mEventsMode->setCommitCallback(boost::bind(&FSPanelSearchEvents::onSearchModeChanged, this));
+        mEventsMode->selectFirstItem();
+    }
+
+    childSetAction("events_next", boost::bind(&FSPanelSearchEvents::onBtnNext, this));
+    childSetAction("events_back", boost::bind(&FSPanelSearchEvents::onBtnBack, this));
+    childSetAction("events_tomorrow", boost::bind(&FSPanelSearchEvents::onBtnTomorrow, this));
+    childSetAction("events_yesterday", boost::bind(&FSPanelSearchEvents::onBtnYesterday, this));
+    childSetAction("events_today", boost::bind(&FSPanelSearchEvents::onBtnToday, this));
+
+    getChildView("events_next")->setEnabled(FALSE);
+    getChildView("events_back")->setEnabled(FALSE);
+    getChildView("events_tomorrow")->setEnabled(FALSE);
+    getChildView("events_yesterday")->setEnabled(FALSE);
+    getChildView("events_today")->setEnabled(FALSE);
+    setDay(0);
+
+    return TRUE;
+}
+
+void FSPanelSearchEvents::focusDefaultElement()
+{
+    mSearchComboBox->focusTextEntry();
+}
+
+void FSPanelSearchEvents::find()
+{
+    std::string text = filterShortWords(mSearchComboBox->getSimple());
+
+    static LLUICachedControl<bool> inc_pg("ShowPGEvents", 1);
+    static LLUICachedControl<bool> inc_mature("ShowMatureEvents", 0);
+    static LLUICachedControl<bool> inc_adult("ShowAdultEvents", 0);
+    if (!(inc_pg || inc_mature || inc_adult))
+    {
+        LLNotificationsUtil::add("NoContentToSearch");
+        return;
+    }
+
+    U32 category = findChild<LLComboBox>("events_category")->getSelectedValue().asInteger();
+    U32 scope = DFQ_DATE_EVENTS;
+    if (gAgent.wantsPGOnly())
+    {
+        scope |= DFQ_PG_SIMS_ONLY;
+    }
+    bool mature_enabled = gAgent.canAccessMature();
+    bool adult_enabled = gAgent.canAccessAdult();
+    if (inc_pg)
+    {
+        scope |= DFQ_INC_PG;
+    }
+    if (inc_mature && mature_enabled)
+    {
+        scope |= DFQ_INC_MATURE;
+    }
+    if (inc_adult && adult_enabled)
+    {
+        scope |= DFQ_INC_ADULT;
+    }
+
+    std::ostringstream string;
+
+    if ("current" == childGetValue("events_search_mode").asString())
+    {
+        string << "u|";
+    }
+    else
+    {
+        string << mDay << "|";
+    }
+    string << category << "|";
+    string << text;
+
+    mResultsReceived = 0;
+    if (mQueryID.notNull())
+    {
+        mQueryID.setNull();
+    }
+    mQueryID.generate();
+
+    if (mStartSearch < 0)
+    {
+        mStartSearch = 0;
+    }
+
+    gMessageSystem->newMessage("DirFindQuery");
+    gMessageSystem->nextBlock("AgentData");
+    gMessageSystem->addUUID("AgentID", gAgentID);
+    gMessageSystem->addUUID("SessionID", gAgentSessionID);
+    gMessageSystem->nextBlock("QueryData");
+    gMessageSystem->addUUID("QueryID", getQueryID());
+    gMessageSystem->addString("QueryText", string.str());
+    gMessageSystem->addU32("QueryFlags", scope);
+    gMessageSystem->addS32("QueryStart", mStartSearch);
+    gAgent.sendReliableMessage();
+    LL_DEBUGS("Search") << "Firing off search request: " << getQueryID() << " Search Text: " << string.str() << LL_ENDL;
+
+    mSearchResults->deleteAllItems();
+    mSearchResults->setCommentText(LLTrans::getString("searching"));
+    mNumResultsReturned = 0;
+}
+
+void FSPanelSearchEvents::onBtnFind()
+{
+    std::string text = mSearchComboBox->getSimple();
+    if (!text.empty())
+    {
+        LLSearchHistory::getInstance()->addEntry(text);
+    }
+
+    resetSearch();
+
+    find();
+}
+
+void FSPanelSearchEvents::onBtnNext()
+{
+    mStartSearch += RESULT_PAGE_SIZE;
+    getChildView("events_back")->setEnabled(TRUE);
+
+    find();
+}
+
+void FSPanelSearchEvents::onBtnBack()
+{
+    mStartSearch -= RESULT_PAGE_SIZE;
+    getChildView("events_back")->setEnabled(mStartSearch > 0);
+
+    find();
+}
+
+void FSPanelSearchEvents::onBtnTomorrow()
+{
+    resetSearch();
+    setDay(mDay + 1);
+
+    find();
+}
+
+void FSPanelSearchEvents::onBtnYesterday()
+{
+    resetSearch();
+    setDay(mDay - 1);
+
+    find();
+}
+
+void FSPanelSearchEvents::onBtnToday()
+{
+    resetSearch();
+    setDay(0);
+
+    find();
+}
+
+void FSPanelSearchEvents::resetSearch()
+{
+    mStartSearch = 0;
+    getChildView("events_back")->setEnabled(FALSE);
+    getChildView("events_next")->setEnabled(FALSE);
+}
+
+void FSPanelSearchEvents::onSearchModeChanged()
+{
+    if (mEventsMode->getValue().asString() == "current")
+    {
+        getChildView("events_yesterday")->setEnabled(FALSE);
+        getChildView("events_tomorrow")->setEnabled(FALSE);
+        getChildView("events_today")->setEnabled(FALSE);
+    }
+    else
+    {
+        getChildView("events_yesterday")->setEnabled(TRUE);
+        getChildView("events_tomorrow")->setEnabled(TRUE);
+        getChildView("events_today")->setEnabled(TRUE);
+    }
+}
+
+void FSPanelSearchEvents::setDay(S32 day)
+{
+    mDay = day;
+    struct tm* internal_time;
+
+    time_t utc = time_corrected();
+    utc += day * 24 * 60 * 60;
+    internal_time = utc_to_pacific_time(utc, is_daylight_savings());
+    std::string buffer = llformat("%d/%d", 1 + internal_time->tm_mon, internal_time->tm_mday);
+    childSetValue("events_date", buffer);
+}
+
+S32 FSPanelSearchEvents::showNextButton(S32 rows)
+{
+    bool show_next_button = (mResultsReceived > RESULT_PAGE_SIZE);
+    getChildView("events_next")->setEnabled(show_next_button);
+    if (show_next_button)
+    {
+        rows -= (mResultsReceived - RESULT_PAGE_SIZE);
+    }
+    return rows;
+}
+
+void FSPanelSearchEvents::onSelectItem()
+{
+    if (!mSearchResults)
+    {
+        return;
+    }
+    S32 event_id = mSearchResults->getSelectedValue();
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance)
+    {
+        search_instance->FSFloaterSearch::onSelectedEvent(event_id);
+    }
+}
+
+// static
+void FSPanelSearchEvents::processSearchReply(LLMessageSystem* msg, void**)
+{
+    LLUUID      agent_id;
+    LLUUID      query_id;
+    LLUUID      owner_id;
+    std::string name;
+    std::string date;
+
+    msg->getUUID("AgentData", "AgentID", agent_id);
+    msg->getUUID("QueryData", "QueryID", query_id);
+
+    // Not for us
+    if (agent_id != gAgentID)
+    {
+        return;
+    }
+    LL_DEBUGS("Search") << "received directory request - QueryID: " << query_id << " AgentID: " << agent_id << LL_ENDL;
+
+    FSPanelSearchEvents* self = FSFloaterSearch::getSearchPanel<FSPanelSearchEvents>("panel_ls_events");
+
+    // floater is closed or these are not results from our last request
+    if (!self || query_id != self->mQueryID)
+    {
+        return;
+    }
+
+    LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("search_results_events");
+
+    // Clear "Searching" label on first results
+    if (self->mNumResultsReturned++ == 0)
+    {
+        search_results->deleteAllItems();
+    }
+    // Check for status messages
+    if (msg->getNumberOfBlocks("StatusData"))
+    {
+        U32 status;
+        msg->getU32("StatusData", "Status", status);
+        if (status & STATUS_SEARCH_EVENTS_FOUNDNONE)
+        {
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("events_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+            return;
+        }
+        else if(status & STATUS_SEARCH_EVENTS_SHORTSTRING)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_short"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_EVENTS_BANNEDWORD)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_banned"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_EVENTS_SEARCHDISABLED)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_disabled"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_EVENTS_NODATEOFFSET)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_no_date_offset"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_EVENTS_NOCATEGORY)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_no_events_category"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_EVENTS_NOQUERY)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_no_query"));
+            return;
+        }
+    }
+
+    S32 num_new_rows = msg->getNumberOfBlocks("QueryReplies");
+    if (num_new_rows == 0 && self->mResultsReceived == 0)
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = self->getChild<LLUICtrl>("events_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+
+    self->mResultsReceived += num_new_rows;
+    num_new_rows = self->showNextButton(num_new_rows);
+    static LLUICachedControl<bool> inc_pg("ShowPGEvents", 1);
+    static LLUICachedControl<bool> inc_mature("ShowMatureEvents", 0);
+    static LLUICachedControl<bool> inc_adult("ShowAdultEvents", 0);
+    bool found_one = false;
+
+    for (S32 i = 0; i < num_new_rows; i++)
+    {
+        U32 event_id;
+        U32 unix_time;
+        U32 event_flags;
+
+        msg->getUUID(   "QueryReplies", "OwnerID",      owner_id,   i);
+        msg->getString( "QueryReplies", "Name",         name,       i);
+        msg->getU32(    "QueryReplies", "EventID",      event_id,   i);
+        msg->getString( "QueryReplies", "Date",         date,       i);
+        msg->getU32(    "QueryReplies", "UnixTime",     unix_time,  i);
+        msg->getU32(    "QueryReplies", "EventFlags",   event_flags,i);
+
+        // Skip empty events...
+        if (owner_id.isNull())
+        {
+            LL_INFOS("Search") << "Skipped " << event_id << " because of a nullptr owner result" << LL_ENDL;
+            continue;
+        }
+        // Skips events that don't match our scope...
+        if (((event_flags & (EVENT_FLAG_ADULT | EVENT_FLAG_MATURE)) == EVENT_FLAG_NONE) && !inc_pg)
+        {
+            LL_INFOS("Search") << "Skipped " << event_id << " because it was out of scope" << LL_ENDL;
+            continue;
+        }
+        if ((event_flags & EVENT_FLAG_MATURE) && !inc_mature)
+        {
+            LL_INFOS("Search") << "Skipped " << event_id << " because it was out of scope" << LL_ENDL;
+            continue;
+        }
+        if ((event_flags & EVENT_FLAG_ADULT) && !inc_adult)
+        {
+            LL_INFOS("Search") << "Skipped " << event_id << " because it was out of scope" << LL_ENDL;
+            continue;
+        }
+        search_results->setEnabled(TRUE);
+        found_one = true;
+
+        LLSD content;
+        LLSD element;
+
+        element["id"] = llformat("%u", event_id);
+
+        if (event_flags == EVENT_FLAG_ADULT)
+        {
+            element["columns"][0]["column"] = "icon";
+            element["columns"][0]["type"] = "icon";
+            element["columns"][0]["value"] = "Icon_Legacy_Event_Adult";
+        }
+        else if (event_flags == EVENT_FLAG_MATURE)
+        {
+            element["columns"][0]["column"] = "icon";
+            element["columns"][0]["type"] = "icon";
+            element["columns"][0]["value"] = "Icon_Legacy_Event_Mature";
+        }
+        else
+        {
+            element["columns"][0]["column"] = "icon";
+            element["columns"][0]["type"] = "icon";
+            element["columns"][0]["value"] = "Icon_Legacy_Event_PG";
+        }
+        element["columns"][1]["column"] = "name";
+        element["columns"][1]["value"] = name;
+
+        element["columns"][2]["column"] = "date";
+        element["columns"][2]["value"] = date;
+
+        element["columns"][3]["column"] = "time";
+        element["columns"][3]["value"] = llformat("%u", unix_time);
+
+        content["name"] = name;
+        content["event_id"] = (S32)event_id;
+
+        search_results->addElement(element, ADD_BOTTOM);
+        std::string event = llformat("%u", event_id);
+        self->mResultsContent[event] = content;
+    }
+    if (found_one)
+    {
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        self->onSelectItem();
+    }
+}
+
+////////////////////////////////////////
+//          WebSearch Panel           //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchWeb> t_panel_fs_search_web("panel_ls_web");
+
+FSPanelSearchWeb::FSPanelSearchWeb() : FSSearchPanelBase()
+, mWebBrowser(nullptr)
+, mResetFocusOnLoad(false)
+{
+    // Second Life grids use a different URL format now
+    mCategoryPaths = LLSD::emptyMap();
+    if (LLGridManager::getInstance()->isInSecondlife())
+    {
+        // declare a map that transforms a category name into
+        // the parameter list that is used to search that category
+        mCategoryPaths["people"]       = "collection_chosen=people";
+        mCategoryPaths["places"]       = "collection_chosen=places";
+        mCategoryPaths["events"]       = "collection_chosen=events";
+        mCategoryPaths["groups"]       = "collection_chosen=groups";
+        mCategoryPaths["destinations"] = "collection_chosen=destinations";
+
+        mCategoryPaths["classifieds"]  = "search_type=classified";
+        mCategoryPaths["wiki"]         = "search/wiki";                     // not sure if this is still a thing in the new search
+
+        mCategoryPaths["all"]          = mCategoryPaths["people"].asString() + "&" +
+                                        mCategoryPaths["places"].asString() + "&" +
+                                        mCategoryPaths["events"].asString() + "&" +
+                                        mCategoryPaths["groups"].asString() + "&" +
+                                        mCategoryPaths["destinations"].asString();
+    }
+    // OpenSim currently still uses the old URL format
+    else
+    {
+        // declare a map that transforms a category name into
+        // the URL suffix that is used to search that category
+        mCategoryPaths["all"]          = "search";
+        mCategoryPaths["people"]       = "search/people";
+        mCategoryPaths["places"]       = "search/places";
+        mCategoryPaths["events"]       = "search/events";
+        mCategoryPaths["groups"]       = "search/groups";
+        mCategoryPaths["wiki"]         = "search/wiki";
+        mCategoryPaths["destinations"] = "destinations";
+        mCategoryPaths["classifieds"]  = "classifieds";
+    }
+}
+
+BOOL FSPanelSearchWeb::postBuild()
+{
+    mWebBrowser = getChild<LLMediaCtrl>("search_browser");
+    return TRUE;
+}
+
+void FSPanelSearchWeb::loadURL(const SearchQuery &p)
+{
+    if (!mWebBrowser || !p.validateBlock())
+    {
+        return;
+    }
+
+    // CATEGORY is no longer used as part of the path on Second Life grids
+    LLSD subs = LLSD().with("CATEGORY", "");
+
+    // on OpenSim grids it probably is currently still being used, so keep the old behavior
+    if (!LLGridManager::getInstance()->isInSecondlife())
+    {
+        // work out the subdir to use based on the requested category
+        LLSD subs = LLSD().with("CATEGORY", (mCategoryPaths.has(p.category.getValue()) ? mCategoryPaths[p.category.getValue()].asString() : mCategoryPaths["all"].asString()));
+    }
+
+    // add the search query string
+    subs["QUERY"] = LLURI::escape(p.query.getValue());
+
+    // add the permissions token that login.cgi gave us
+    // We use "search_token", and fallback to "auth_token" if not present.
+    LLSD search_token = LLLoginInstance::getInstance()->getResponse("search_token");
+    if (search_token.asString().empty())
+    {
+        search_token = LLLoginInstance::getInstance()->getResponse("auth_token");
+    }
+    subs["AUTH_TOKEN"] = search_token.asString();
+
+    // add the user's preferred maturity (can be changed via prefs)
+    std::string maturity;
+
+    // on Second Life grids, the maturity level is now a "&maturity" parameter that's not in the provided search URL
+    if (LLGridManager::getInstance()->isInSecondlife())
+    {
+        if (gAgent.prefersAdult())
+        {
+            maturity = "gma";  // PG,Mature,Adult
+        }
+        else if (gAgent.prefersMature())
+        {
+            maturity = "gm";  // PG,Mature
+        }
+        else
+        {
+            maturity = "g";  // PG
+        }
+
+        // not used on the SL search anymore, so clear out the respective parameter
+        subs["MATURITY"] = "";
+    }
+    // OpenSim probably still uses the old maturity variant, so keep the old behavior here
+    else
+    {
+        if (gAgent.prefersAdult())
+        {
+            maturity = "42";  // PG,Mature,Adult
+        }
+        else if (gAgent.prefersMature())
+        {
+            maturity = "21";  // PG,Mature
+        }
+        else
+        {
+            maturity = "13";  // PG
+        }
+        subs["MATURITY"] = maturity;
+    }
+
+    // add the user's god status
+    subs["GODLIKE"] = gAgent.isGodlike() ? "1" : "0";
+
+    // Get the search URL and expand all of the substitutions
+    // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
+
+    // add the maturity and category variables to the new Second Life search URL
+    std::string url = gAgent.getRegion() != nullptr ? gAgent.getRegion()->getSearchServerURL()
+        : gSavedSettings.getString(LLGridManager::getInstance()->isInOpenSim() ? "OpenSimSearchURL" : "SearchURL");
+    if (LLGridManager::getInstance()->isInSecondlife())
+    {
+        url.append("&maturity=" + maturity + "&" + mCategoryPaths[p.category.getValue()].asString());
+    }
+
+    url = LLWeb::expandURLSubstitutions(url, subs);
+
+    // Finally, load the URL in the webpanel
+    mWebBrowser->navigateTo(url, HTTP_CONTENT_TEXT_HTML);
+}
+
+void FSPanelSearchWeb::focusDefaultElement()
+{
+    mWebBrowser->setFocus(TRUE);
+}
+
+void FSPanelSearchWeb::draw()
+{
+    if (mResetFocusOnLoad)
+    {
+        focusDefaultElement();
+        mResetFocusOnLoad = false;
+    }
+
+    FSSearchPanelBase::draw();
+}
+
+////////////////////////////////////////
+//           Local functions          //
+////////////////////////////////////////
+
+std::string filterShortWords(std::string query_string)
+{
+    if (query_string.length() < 1)
+    {
+        return "";
+    }
+
+    std::string final_query;
+    bool filtered = false;
+    boost::char_separator<char> sep(" ");
+    boost::tokenizer<boost::char_separator<char> > tokens(query_string, sep);
+    boost::tokenizer<boost::char_separator<char> >::iterator iter = tokens.begin();
+    boost::tokenizer<boost::char_separator<char> >::iterator last = tokens.end();
+    boost::tokenizer<boost::char_separator<char> >::iterator temp;
+    for (; iter != last; ++iter)
+    {
+        if ((*iter).length() > MIN_SEARCH_STRING_SIZE)
+        {
+            final_query.append((*iter));
+            temp = iter; ++temp;
+            if (temp != last)
+            {
+                final_query.append(" ");
+            }
+        }
+        else
+        {
+            filtered = true;
+        }
+    }
+
+    if (filtered)
+    {
+        LLSD args = LLSD().with("FINALQUERY", final_query);
+        LLNotificationsUtil::add("SeachFilteredOnShortWords", args);
+    }
+
+    return final_query;
+}
+
+void fillSearchComboBox(LLSearchComboBox* search_combo)
+{
+    if (search_combo == nullptr)
+    {
+        return;
+    }
+
+    LLSearchHistory::getInstance()->load();
+
+    LLSearchHistory::search_history_list_t search_list =
+    LLSearchHistory::getInstance()->getSearchHistoryList();
+    LLSearchHistory::search_history_list_t::const_iterator it = search_list.begin();
+    for ( ; search_list.end() != it; ++it)
+    {
+        LLSearchHistory::LLSearchHistoryItem item = *it;
+        search_combo->add(item.search_query);
+    }
+}
diff --git a/indra/newview/fsfloatersearch.h b/indra/newview/fsfloatersearch.h
new file mode 100644
index 0000000000000000000000000000000000000000..61cef8bab9847d5edb1db338e6e6cee776f6f732
--- /dev/null
+++ b/indra/newview/fsfloatersearch.h
@@ -0,0 +1,404 @@
+/**
+ * @file fsfloatersearch.h
+ * @brief Firestorm search definitions
+ *
+ * $LicenseInfo:firstyear=2012&license=fsviewerlgpl$
+ * Phoenix Firestorm Viewer Source Code
+ * Copyright (C) 2012, Cinder Roxley <cinder.roxley@phoenixviewer.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
+ * http://www.firestormviewer.org
+ * $/LicenseInfo$
+ */
+
+#ifndef FS_FLOATERSEARCH_H
+#define FS_FLOATERSEARCH_H
+
+#include "llfloater.h"
+#include "lliconctrl.h"
+#include "lltexteditor.h"
+#include "lltexturectrl.h"
+#include "llremoteparcelrequest.h"
+#include "llavatarpropertiesprocessor.h"
+#include "llgroupmgr.h"
+#include "llavatarnamecache.h"
+#include "llmediactrl.h"
+#include "llradiogroup.h"
+#include "llsearchcombobox.h"
+#include "llscrolllistctrl.h"
+#include "lltabcontainer.h"
+#include "lleventnotifier.h"
+
+class FSSearchRemoteParcelInfoObserver;
+class LLAvatarPropertiesObserver;
+class LLGroupMgrObserver;
+class LLSearchEditor;
+class LLSearchComboBox;
+class FSFloaterSearch;
+class LLPanelProfile;
+class FSScrollListCtrl;
+
+struct SearchQuery : public LLInitParam::Block<SearchQuery>
+{
+    Optional<std::string> category;
+    Optional<std::string> query;
+
+    SearchQuery();
+};
+
+///////////////////////////////
+//       Search Panels       //
+///////////////////////////////
+
+class FSSearchPanelBase : public LLPanel
+{
+public:
+    FSSearchPanelBase() : LLPanel() { }
+    virtual ~FSSearchPanelBase() = default;
+    virtual void focusDefaultElement() { }
+};
+
+class FSPanelSearchPeople : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchPeople();
+    static void processSearchReply(LLMessageSystem* msg, void**);
+
+    /*virtual*/ void focusDefaultElement();
+
+protected:
+    const S32& getNumResultsReturned() const { return mNumResultsReturned; };
+    const S32& getNumResultsReceived() const { return mResultsReceived; };
+
+private:
+    /*virtual*/ BOOL postBuild();
+    virtual ~FSPanelSearchPeople();
+
+    void onBtnFind();
+    void onSelectItem();
+    void onBtnNext();
+    void onBtnBack();
+
+    void find();
+    void resetSearch();
+    S32  showNextButton(S32);
+
+    const LLUUID& getQueryID() const { return mQueryID; }
+
+    void onAvatarNameCallback(const LLUUID& id, const LLAvatarName& av_name);
+
+    typedef boost::signals2::connection avatar_name_callback_connection_t;
+    avatar_name_callback_connection_t mAvatarNameCallbackConnection;
+
+    S32         mNumResultsReturned;
+    S32         mStartSearch;
+    S32         mResultsReceived;
+    LLSD        mResultsContent;
+    LLUUID      mQueryID;
+
+    LLSearchComboBox*       mSearchComboBox;
+    LLScrollListCtrl*       mSearchResults;
+};
+
+class FSPanelSearchGroups : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchGroups();
+    static void processSearchReply(LLMessageSystem* msg, void**);
+
+    /*virtual*/ void focusDefaultElement();
+
+private:
+    /*virtual*/ BOOL postBuild();
+    virtual ~FSPanelSearchGroups();
+
+    void onBtnFind();
+    void onSelectItem();
+    void onBtnNext();
+    void onBtnBack();
+
+    void find();
+    void resetSearch();
+    S32  showNextButton(S32);
+
+    const LLUUID& getQueryID() const { return mQueryID; }
+
+    S32         mNumResultsReturned;
+    S32         mStartSearch;
+    S32         mResultsReceived;
+    LLSD        mResultsContent;
+    LLUUID      mQueryID;
+
+    LLSearchComboBox*   mSearchComboBox;
+    LLScrollListCtrl*   mSearchResults;
+};
+
+class FSPanelSearchPlaces : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchPlaces();
+    static void processSearchReply(LLMessageSystem* msg, void**);
+
+    /*virtual*/ void focusDefaultElement();
+
+private:
+    /*virtual*/ BOOL postBuild();
+    virtual ~FSPanelSearchPlaces();
+
+    void onBtnFind();
+    void onSelectItem();
+    void onBtnNext();
+    void onBtnBack();
+
+    void find();
+    void resetSearch();
+    S32  showNextButton(S32);
+
+    const LLUUID& getQueryID() const { return mQueryID; }
+
+    S32         mNumResultsReturned;
+    S32         mStartSearch;
+    S32         mResultsReceived;
+    LLSD        mResultsContent;
+    LLUUID      mQueryID;
+
+    LLSearchComboBox*   mSearchComboBox;
+    LLScrollListCtrl*   mSearchResults;
+    LLComboBox*         mPlacesCategory;
+};
+
+class FSPanelSearchLand : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchLand();
+    static void processSearchReply(LLMessageSystem* msg, void**);
+
+private:
+    /*virtual*/ BOOL postBuild();
+    virtual ~FSPanelSearchLand();
+
+    void onBtnFind();
+    void onSelectItem();
+    void onBtnNext();
+    void onBtnBack();
+
+    void find();
+    void resetSearch();
+    S32  showNextButton(S32);
+
+    const LLUUID& getQueryID() const { return mQueryID; }
+
+    S32         mNumResultsReturned;
+    S32         mStartSearch;
+    S32         mResultsReceived;
+    LLSD        mResultsContent;
+    LLUUID      mQueryID;
+
+    LLLineEditor*       mPriceEditor;
+    LLLineEditor*       mAreaEditor;
+    LLScrollListCtrl*   mSearchResults;
+};
+
+class FSPanelSearchClassifieds : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchClassifieds();
+    static void processSearchReply(LLMessageSystem* msg, void**);
+
+    /*virtual*/ void focusDefaultElement();
+
+private:
+    /*virtual*/ BOOL postBuild();
+    virtual ~FSPanelSearchClassifieds();
+
+    void onBtnFind();
+    void onSelectItem();
+    void onBtnNext();
+    void onBtnBack();
+
+    void find();
+    void resetSearch();
+    S32  showNextButton(S32);
+
+    const LLUUID& getQueryID() const { return mQueryID; }
+
+    S32         mNumResultsReturned;
+    S32         mStartSearch;
+    S32         mResultsReceived;
+    LLSD        mResultsContent;
+    LLUUID      mQueryID;
+
+    LLSearchComboBox*   mSearchComboBox;
+    LLScrollListCtrl*   mSearchResults;
+    LLComboBox*         mClassifiedsCategory;
+};
+
+class FSPanelSearchEvents : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchEvents();
+    static void processSearchReply(LLMessageSystem* msg, void**);
+
+    /*virtual*/ void focusDefaultElement();
+
+private:
+    /*virtual*/ BOOL postBuild();
+    virtual ~FSPanelSearchEvents();
+
+    void onBtnFind();
+    void onSelectItem();
+    void onBtnNext();
+    void onBtnBack();
+    void onBtnTomorrow();
+    void onBtnYesterday();
+    void onBtnToday();
+
+    void find();
+    void setDay(S32 day);
+    void onSearchModeChanged();
+    void resetSearch();
+    S32  showNextButton(S32);
+
+    const LLUUID& getQueryID() const { return mQueryID; }
+
+    S32         mNumResultsReturned;
+    S32         mResultsReceived;
+    S32         mStartSearch;
+    S32         mDay;
+    LLSD        mResultsContent;
+    LLUUID      mQueryID;
+
+    LLSearchComboBox*   mSearchComboBox;
+    LLScrollListCtrl*   mSearchResults;
+    LLRadioGroup*       mEventsMode;
+};
+
+class FSPanelSearchWeb : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchWeb();
+    /*virtual*/ BOOL postBuild();
+    void loadURL(const SearchQuery &query);
+    /*virtual*/ void focusDefaultElement();
+    /*virtual*/ void draw();
+    void resetFocusOnLoad() { mResetFocusOnLoad = true; }
+
+private:
+    virtual ~FSPanelSearchWeb() {};
+
+    LLMediaCtrl*    mWebBrowser;
+    LLSD            mCategoryPaths;
+
+    bool            mResetFocusOnLoad;
+};
+
+class FSFloaterSearch : public LLFloater
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    typedef enum e_search_category
+    {
+        SC_AVATAR,
+        SC_GROUP,
+        SC_PLACE,
+        SC_CLASSIFIED
+    }   ESearchCategory;
+
+    struct _Params : public LLInitParam::Block<_Params, LLFloater::Params>
+    {
+        Optional<SearchQuery> search;
+    };
+
+    typedef LLSDParamAdapter<_Params> Params;
+
+    FSFloaterSearch(const Params& key);
+    ~FSFloaterSearch();
+    void onOpen(const LLSD& key);
+    BOOL postBuild();
+
+    void avatarNameUpdatedCallback(const LLUUID& id, const LLAvatarName& av_name);
+    void groupNameUpdatedCallback(const LLUUID& id, const std::string& name, bool is_group);
+    void onSelectedItem(const LLUUID& selected_item, ESearchCategory type);
+    void onSelectedEvent(const S32 selected_event);
+    void displayParcelDetails(const LLParcelData& parcel_data);
+    void displayClassifiedDetails(LLAvatarClassifiedInfo*& c_info);
+    void displayAvatarDetails(LLAvatarData* avatar_data);
+    void displayGroupDetails(LLGroupMgrGroupData*& group_data);
+    bool displayEventDetails(LLEventStruct event);
+    void displayEventParcelImage(const LLParcelData& parcel_data);
+    void setLoadingProgress(bool started);
+
+    template <class T>
+    static T* getSearchPanel(const std::string& panel_name);
+
+private:
+    virtual void onClose(bool app_quitting);
+    const LLUUID& getSelectedID() { return mSelectedID; }
+    LLVector3d  mParcelGlobal;
+    LLUUID      mSelectedID;
+    U32         mEventID;
+    bool        mHasSelection;
+
+    void resetVerbs();
+    void flushDetails();
+    void onTabChange();
+    void onBtnPeopleProfile();
+    void onBtnPeopleIM();
+    void onBtnPeopleFriend();
+    void onBtnGroupProfile();
+    void onBtnGroupChat();
+    void onBtnGroupJoin();
+    void onBtnEventReminder();
+    void onBtnTeleport();
+    void onBtnMap();
+
+    void regionHandleCallback(U64 region_handle, LLVector3d pos_global);
+
+    FSSearchRemoteParcelInfoObserver* mRemoteParcelObserver;
+    FSSearchRemoteParcelInfoObserver* mRemoteParcelEventLocationObserver;
+    LLAvatarPropertiesObserver* mAvatarPropertiesObserver;
+    LLGroupMgrObserver* mGroupPropertiesRequest;
+    boost::signals2::connection mEventNotifierConnection;
+
+    FSPanelSearchPeople*    mPanelPeople;
+    FSPanelSearchGroups*    mPanelGroups;
+    FSPanelSearchPlaces*    mPanelPlaces;
+    FSPanelSearchEvents*    mPanelEvents;
+    FSPanelSearchLand*      mPanelLand;
+    FSPanelSearchClassifieds* mPanelClassifieds;
+    FSPanelSearchWeb*       mPanelWeb;
+
+    LLPanel*        mDetailsPanel;
+    LLTextEditor*   mDetailTitle;
+    LLTextEditor*   mDetailDesc;
+    LLTextEditor*   mDetailAux1;
+    LLTextEditor*   mDetailAux2;
+    LLTextEditor*   mDetailLocation;
+    LLTextureCtrl*  mDetailSnapshot;
+    LLTextureCtrl*  mDetailSnapshotParcel;
+    LLIconCtrl*     mDetailMaturity;
+    LLTabContainer* mTabContainer;
+};
+
+#endif // FS_FLOATERSEARCH_H
diff --git a/indra/newview/llagenthandler.cpp b/indra/newview/llagenthandler.cpp
deleted file mode 100644
index 688aa2b6aee172bc3932488941ea929e79ea1464..0000000000000000000000000000000000000000
--- a/indra/newview/llagenthandler.cpp
+++ /dev/null
@@ -1,188 +0,0 @@
-/**
- * @file llagenthandler.cpp
- * @brief Command handler involving agent requests
- *
- * $LicenseInfo:firstyear=2005&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llavataractions.h"
-#include "llcommandhandler.h"
-#include "llfloaterreg.h"
-#include "llfloaterreporter.h"
-#include "llmutelist.h"
-#include "llnotificationsutil.h"
-//#include "llpanelblockedlist.h"
-#include "llfloaterblocked.h"
-
-class LLAgentHandler : public LLCommandHandler
-{
-public:
-    // requires trusted browser to trigger
-    LLAgentHandler() : LLCommandHandler("agent", UNTRUSTED_THROTTLE) { }
-
-    virtual bool canHandleUntrusted(
-        const LLSD& params,
-        const LLSD& query_map,
-        LLMediaCtrl* web,
-        const std::string& nav_type)
-    {
-        if (params.size() < 2)
-        {
-            return true; // don't block, will fail later
-        }
-
-        if (nav_type == NAV_TYPE_CLICKED
-            || nav_type == NAV_TYPE_EXTERNAL)
-        {
-            return true;
-        }
-
-        const std::string verb = params[1].asString();
-        if (verb == "about" || verb == "inspect" || verb == "reportAbuse")
-        {
-            return true;
-        }
-        return false;
-    }
-
-    bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid,
-        LLMediaCtrl* web)
-    {
-        if (params.size() < 2) return false;
-        LLUUID avatar_id;
-        if (!avatar_id.set(params[0].asStringRef(), FALSE))
-        {
-            return false;
-        }
-
-        const std::string verb = params[1].asString();
-        if (verb == "about")
-        {
-            LLAvatarActions::showProfile(avatar_id);
-            return true;
-        }
-
-        if (verb == "inspect")
-        {
-            LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", avatar_id));
-            return true;
-        }
-
-        if (verb == "im")
-        {
-            LLAvatarActions::startIM(avatar_id);
-            return true;
-        }
-
-        if (verb == "pay")
-        {
-            if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableAvatarPay"))
-            {
-                LLNotificationsUtil::add("NoAvatarPay", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
-                return true;
-            }
-
-            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 == "removefriend")
-        {
-            LLAvatarActions::removeFriendDialog(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;
-        }
-
-        if (verb == "block")
-        {
-            if (params.size() > 2)
-            {
-                const std::string object_name = LLURI::unescape(params[2].asString());
-                LLMute mute(avatar_id, object_name, LLMute::OBJECT);
-                LLMuteList::getInstance()->add(mute);
-                LLFloaterBlocked::showMuteAndSelect(mute.mID);
-                //LLPanelBlockedList::showPanelAndSelect(mute.mID);
-            }
-            return true;
-        }
-
-        if (verb == "unblock")
-        {
-            if (params.size() > 2)
-            {
-                const std::string object_name = params[2].asString();
-                LLMute mute(avatar_id, object_name, LLMute::OBJECT);
-                LLMuteList::getInstance()->remove(mute);
-            }
-            return true;
-        }
-
-        // reportAbuse is here due to convoluted avatar handling
-        // in LLScrollListCtrl and LLTextBase
-        if (verb == "reportAbuse" && web == NULL)
-        {
-            LLAvatarName av_name;
-            if (LLAvatarNameCache::get(avatar_id, &av_name))
-            {
-                LLFloaterReporter::showFromAvatar(avatar_id, av_name.getCompleteName());
-            }
-            else
-            {
-                LLFloaterReporter::showFromAvatar(avatar_id, "not avaliable");
-            }
-            return true;
-        }
-        return false;
-    }
-};
-LLAgentHandler gAgentHandler;
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 15d364e33b781be0580062dbcad0c472dfb0701a..c6dede334e03f5380caefc7ee43a8b5df0263023 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -50,7 +50,6 @@
 #include "llfloaterreg.h"
 #include "llfloaterpay.h"
 #include "llfloaterprofile.h"
-#include "llfloaterprofilelegacy.h"
 #include "llfloatersidepanelcontainer.h"
 #include "llfloaterwebcontent.h"
 #include "llfloaterworldmap.h"
@@ -65,7 +64,6 @@
 #include "llnotificationsutil.h"    // for LLNotificationsUtil
 #include "llpaneloutfitedit.h"
 #include "llpanelprofile.h"
-#include "llpanelprofilelegacy.h"
 #include "llparcel.h"
 #include "llrecentpeople.h"
 #include "lltrans.h"
@@ -386,15 +384,7 @@ void LLAvatarActions::showProfile(const LLUUID& avatar_id)
 {
     if (avatar_id.notNull())
     {
-        if (gSkinSettings.getBool("LegacyProfile"))
-        {
-            LLFloaterReg::showTypedInstance<LLFloaterProfileLegacy>(
-                "legacy_profile", LLSD().with("avatar_id", avatar_id), TAKE_FOCUS_YES);
-        }
-        else
-        {
-            LLFloaterReg::showInstance("profile", LLSD().with("id", avatar_id));
-        }
+        LLFloaterReg::showInstance("profile", LLSD().with("id", avatar_id));
     }
 }
 
@@ -403,21 +393,10 @@ void LLAvatarActions::showPicks(const LLUUID& avatar_id)
 {
     if (avatar_id.notNull())
     {
-        if (gSkinSettings.getBool("LegacyProfile"))
-        {
-            const LLFloaterProfileLegacy* profile = LLFloaterReg::showTypedInstance<LLFloaterProfileLegacy>(
-                "legacy_profile", LLSD().with("avatar_id", avatar_id), TAKE_FOCUS_YES);
-            LLPanel* tab = profile->expandTab("avatar_picks_tab");
-            tab->getChild<LLAccordionCtrl>("accordion")->expandTab("tab_picks");
-        }
-        else
+        LLFloaterProfile* profilefloater = dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", avatar_id)));
+        if (profilefloater)
         {
-            LLFloaterProfile* profile = LLFloaterReg::showTypedInstance<LLFloaterProfile>(
-                "profile", LLSD().with("id", avatar_id));
-            if (profile)
-            {
-                profile->showPick();
-            }
+            profilefloater->showPick();
         }
     }
 }
@@ -427,20 +406,10 @@ void LLAvatarActions::showPick(const LLUUID& avatar_id, const LLUUID& pick_id)
 {
     if (avatar_id.notNull())
     {
-        if (gSkinSettings.getBool("LegacyProfile"))
-        {
-            const LLFloaterProfileLegacy* profile = LLFloaterReg::showTypedInstance<LLFloaterProfileLegacy>(
-                "legacy_profile", LLSD().with("avatar_id", avatar_id), TAKE_FOCUS_YES);
-            /*auto* tab = */dynamic_cast<LLPanelProfileLegacy::LLPanelProfilePicks*>(profile->expandTab("avatar_picks_tab"));
-            // *TODO: Finish
-        }
-        else
+        LLFloaterProfile* profilefloater = dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", avatar_id)));
+        if (profilefloater)
         {
-            LLFloaterProfile* profile = LLFloaterReg::showTypedInstance<LLFloaterProfile>("profile", LLSD().with("id", avatar_id));
-            if (profile)
-            {
-                profile->showPick(pick_id);
-            }
+            profilefloater->showPick(pick_id);
         }
     }
 }
@@ -448,9 +417,9 @@ void LLAvatarActions::showPick(const LLUUID& avatar_id, const LLUUID& pick_id)
 // static
 void LLAvatarActions::createPick()
 {
-
+    LLFloaterProfile* profilefloater = dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", gAgent.getID())));
     LLViewerRegion* region = gAgent.getRegion();
-    if (region)
+    if (profilefloater && region)
     {
         LLPickData data;
         data.pos_global = gAgent.getPositionGlobal();
@@ -468,7 +437,8 @@ void LLAvatarActions::createPick()
         {
             data.name = region->getName();
         }
-        createPick(data);
+
+        profilefloater->createPick(data);
     }
 }
 
@@ -477,21 +447,10 @@ bool LLAvatarActions::isPickTabSelected(const LLUUID& avatar_id)
 {
     if (avatar_id.notNull())
     {
-        static LLCachedControl<bool> legacy_profile(gSkinSettings, "LegacyProfile");
-        if (legacy_profile)
-        {
-            const LLFloaterProfileLegacy* profile = LLFloaterReg::findTypedInstance<LLFloaterProfileLegacy>(
-                "legacy_profile", LLSD().with("avatar_id", avatar_id));
-            if (profile == nullptr) { return false; }
-            return dynamic_cast<LLPanelProfileLegacy::LLPanelProfilePicks*>(profile->getExpandedTab()) != nullptr;
-        }
-        else
+        LLFloaterProfile* profilefloater = LLFloaterReg::findTypedInstance<LLFloaterProfile>("profile", LLSD().with("id", avatar_id));
+        if (profilefloater)
         {
-            LLFloaterProfile* profilefloater = LLFloaterReg::findTypedInstance<LLFloaterProfile>("profile", LLSD().with("id", avatar_id));
-            if (profilefloater)
-            {
-                return profilefloater->isPickTabSelected();
-            }
+            return profilefloater->isPickTabSelected();
         }
     }
     return false;
@@ -502,21 +461,10 @@ void LLAvatarActions::showClassifieds(const LLUUID& avatar_id)
 {
     if (avatar_id.notNull())
     {
-        if (gSkinSettings.getBool("LegacyProfile"))
-        {
-            const LLFloaterProfileLegacy* profile = LLFloaterReg::showTypedInstance<LLFloaterProfileLegacy>(
-                "legacy_profile", LLSD().with("avatar_id", avatar_id), TAKE_FOCUS_YES);
-            LLPanel* tab = profile->expandTab("avatar_picks_tab");
-            tab->getChild<LLAccordionCtrl>("accordion")->expandTab("tab_classifieds");
-        }
-        else
+        LLFloaterProfile* profilefloater = dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", avatar_id)));
+        if (profilefloater)
         {
-            LLFloaterProfile* profilefloater = LLFloaterReg::showTypedInstance<LLFloaterProfile>(
-                "profile", LLSD().with("id", avatar_id));
-            if (profilefloater)
-            {
-                profilefloater->showClassified();
-            }
+            profilefloater->showClassified();
         }
     }
 }
@@ -526,22 +474,10 @@ void LLAvatarActions::showClassified(const LLUUID& avatar_id, const LLUUID& clas
 {
     if (avatar_id.notNull())
     {
-        if (gSkinSettings.getBool("LegacyProfile"))
-        {
-            const LLFloaterProfileLegacy* profile = LLFloaterReg::showTypedInstance<LLFloaterProfileLegacy>(
-                "legacy_profile", LLSD().with("avatar_id", avatar_id), TAKE_FOCUS_YES);
-            LLPanel* tab = profile->expandTab("avatar_picks_tab");
-            tab->getChild<LLAccordionCtrl>("accordion")->expandTab("tab_classifieds");
-            // *TODO: Finish
-        }
-        else
+        LLFloaterProfile* profilefloater = dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", avatar_id)));
+        if (profilefloater)
         {
-            LLFloaterProfile* profilefloater =
-                dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", avatar_id)));
-            if (profilefloater)
-            {
-                profilefloater->showClassified(classified_id, edit);
-            }
+            profilefloater->showClassified(classified_id, edit);
         }
     }
 }
@@ -549,68 +485,35 @@ void LLAvatarActions::showClassified(const LLUUID& avatar_id, const LLUUID& clas
 // static
 void LLAvatarActions::createClassified()
 {
-    if (gSkinSettings.getBool("LegacyProfile"))
+    LLFloaterProfile* profilefloater = dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", gAgent.getID())));
+    if (profilefloater)
     {
-        const LLFloaterProfileLegacy* profile = LLFloaterReg::showTypedInstance<LLFloaterProfileLegacy>(
-            "legacy_profile", LLSD().with("avatar_id", gAgent.getID()));
-        auto* tab = dynamic_cast<LLPanelProfileLegacy::LLPanelProfilePicks*>(profile->expandTab("avatar_picks_tab"));
-        tab->createNewClassified();
-
-    }
-    else
-    {
-        LLFloaterProfile* profilefloater =
-            dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", gAgent.getID())));
-        if (profilefloater)
-        {
-            profilefloater->createClassified();
-        }
+        profilefloater->createClassified();
     }
 }
 
 //static
 bool LLAvatarActions::profileVisible(const LLUUID& avatar_id)
 {
-    LLFloater* floater = findProfileFloater(avatar_id);
+    LLSD sd;
+    sd["id"] = avatar_id;
+    LLFloater* floater = getProfileFloater(avatar_id);
     return floater && floater->isShown();
 }
 
 //static
-LLFloater* LLAvatarActions::findProfileFloater(const LLUUID& avatar_id)
+LLFloater* LLAvatarActions::getProfileFloater(const LLUUID& avatar_id)
 {
-    LLFloater* profile = nullptr;
-    static LLCachedControl<bool> legacy_profile(gSkinSettings, "LegacyProfile");
-    if (legacy_profile)
-        profile = LLFloaterReg::findTypedInstance<LLFloaterProfileLegacy>("legacy_profile", LLSD().with("avatar_id", avatar_id));
-    else
-        profile = LLFloaterReg::findTypedInstance<LLFloaterProfile>("profile", LLSD().with("id", avatar_id));
-    return profile;
-}
-
-void LLAvatarActions::createPick(const LLPickData& data)
-{
-    if (gSkinSettings.getBool("LegacyProfile"))
-    {
-        const LLFloaterProfileLegacy* profile = LLFloaterReg::showTypedInstance<LLFloaterProfileLegacy>(
-            "legacy_profile", LLSD().with("avatar_id", gAgent.getID()));
-        auto* tab = dynamic_cast<LLPanelProfileLegacy::LLPanelProfilePicks*>(profile->expandTab("avatar_picks_tab"));
-        tab->createNewPick();
-    }
-    else
-    {
-        LLFloaterProfile* floater =
-            dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", gAgent.getID())));
-        if (floater)
-        {
-            floater->createPick(data);
-        }
-    }
+    LLFloaterProfile* floater = LLFloaterReg::findTypedInstance<LLFloaterProfile>("profile", LLSD().with("id", avatar_id));
+    return floater;
 }
 
 //static
 void LLAvatarActions::hideProfile(const LLUUID& avatar_id)
 {
-    LLFloater* floater = findProfileFloater(avatar_id);
+    LLSD sd;
+    sd["id"] = avatar_id;
+    LLFloater* floater = getProfileFloater(avatar_id);
     if (floater)
     {
         floater->closeFloater();
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index f69954bfe43b595fedcf8799dde076854ed15bf6..2493ec2b5030f90658b0ca32c57c7d3a681454bd 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -107,9 +107,7 @@ class LLAvatarActions
     static void hideProfile(const LLUUID& avatar_id);
     static bool profileVisible(const LLUUID& avatar_id);
     static bool isPickTabSelected(const LLUUID& avatar_id);
-    static LLFloater* findProfileFloater(const LLUUID& avatar_id);
-
-    static void createPick(const LLPickData& data);
+    static LLFloater* getProfileFloater(const LLUUID& avatar_id);
 
     /**
      * Show avatar on world map.
diff --git a/indra/newview/llclassifieditem.cpp b/indra/newview/llclassifieditem.cpp
deleted file mode 100644
index 0f0f6924e0bec78c0befbca2f2b7d728aa03fb41..0000000000000000000000000000000000000000
--- a/indra/newview/llclassifieditem.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-/**
-* @file llclassifieditem.cpp
-* @brief Widget
-*
-* $LicenseInfo:firstyear=2009&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2010, Linden Research, Inc.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-*
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
-
-#include "llviewerprecompiledheaders.h"
-#include "llclassifieditem.h"
-
-#include "llpanelclassified.h"
-
-LLClassifiedItem::LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classified_id)
-    : LLPanel()
-    , mAvatarId(avatar_id)
-    , mClassifiedId(classified_id)
-{
-    buildFromFile("panel_classifieds_list_item.xml");
-
-    LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
-    LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId());
-}
-
-LLClassifiedItem::~LLClassifiedItem()
-{
-    LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
-}
-
-void LLClassifiedItem::processProperties(void* data, EAvatarProcessorType type)
-{
-    if (APT_CLASSIFIED_INFO != type)
-    {
-        return;
-    }
-
-    LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data);
-    if (!c_info || c_info->classified_id != getClassifiedId())
-    {
-        return;
-    }
-
-    setClassifiedName(c_info->name);
-    setDescription(c_info->description);
-    setSnapshotId(c_info->snapshot_id);
-    setPosGlobal(c_info->pos_global);
-
-    LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
-}
-
-BOOL LLClassifiedItem::postBuild()
-{
-    setMouseEnterCallback(std::bind(&set_child_visible, this, "hovered_icon", true));
-    setMouseLeaveCallback(std::bind(&set_child_visible, this, "hovered_icon", false));
-    return TRUE;
-}
-
-void LLClassifiedItem::setValue(const LLSD& value)
-{
-    if (!value.isMap()) return;;
-    if (!value.has("selected")) return;
-    getChildView("selected_icon")->setVisible(value["selected"]);
-}
-
-void LLClassifiedItem::fillIn(LLPanelClassifiedEdit* panel)
-{
-    if (!panel)
-    {
-        return;
-    }
-
-    setClassifiedName(panel->getClassifiedName());
-    setDescription(panel->getDescription());
-    setSnapshotId(panel->getSnapshotId());
-    setCategory(panel->getCategory());
-    setContentType(panel->getContentType());
-    setAutoRenew(panel->getAutoRenew());
-    setPriceForListing(panel->getPriceForListing());
-    setPosGlobal(panel->getPosGlobal());
-    setLocationText(panel->getClassifiedLocation());
-}
-
-void LLClassifiedItem::setClassifiedName(const std::string& name)
-{
-    getChild<LLUICtrl>("name")->setValue(name);
-}
-
-void LLClassifiedItem::setDescription(const std::string& desc)
-{
-    getChild<LLUICtrl>("description")->setValue(desc);
-}
-
-void LLClassifiedItem::setSnapshotId(const LLUUID& snapshot_id)
-{
-    getChild<LLUICtrl>("picture")->setValue(snapshot_id);
-}
-
-LLUUID LLClassifiedItem::getSnapshotId() const
-{
-    return getChild<LLUICtrl>("picture")->getValue();
-}
diff --git a/indra/newview/llclassifieditem.h b/indra/newview/llclassifieditem.h
deleted file mode 100644
index 212a53ee0c693055e52ad60aecce0c99f95d5bc3..0000000000000000000000000000000000000000
--- a/indra/newview/llclassifieditem.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
-* @file llclassifieditem.h
-* @brief Widget
-*
-* $LicenseInfo:firstyear=2009&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2010, Linden Research, Inc.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-*
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
-
-#ifndef LL_CLASSIFIEDITEM_H
-#define LL_CLASSIFIEDITEM_H
-
-#include "llavatarpropertiesprocessor.h"
-#include "llpanel.h"
-
-class LLPanelClassifiedEdit;
-
-static const std::string CLASSIFIED_ID("classified_id");
-static const std::string CLASSIFIED_NAME("classified_name");
-
-class LLClassifiedItem final : public LLPanel, public LLAvatarPropertiesObserver
-{
-public:
-
-    LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classified_id);
-    virtual ~LLClassifiedItem();
-
-    void processProperties(void* data, EAvatarProcessorType type) override;
-    BOOL postBuild() override;
-    void setValue(const LLSD& value) override;
-    void fillIn(LLPanelClassifiedEdit* panel);
-    LLUUID getAvatarId() const { return mAvatarId; }
-    void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; }
-    LLUUID getClassifiedId() const { return mClassifiedId; }
-    void setClassifiedId(const LLUUID& classified_id) { mClassifiedId = classified_id; }
-    void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
-    const LLVector3d getPosGlobal() const { return mPosGlobal; }
-    void setLocationText(const std::string location) { mLocationText = std::move(location); }
-    std::string getLocationText() const { return mLocationText; }
-    void setClassifiedName(const std::string& name);
-    std::string getClassifiedName() const { return getChild<LLUICtrl>("name")->getValue().asString(); }
-    void setDescription(const std::string& desc);
-    std::string getDescription() const { return getChild<LLUICtrl>("description")->getValue().asString(); }
-    void setSnapshotId(const LLUUID& snapshot_id);
-    LLUUID getSnapshotId() const;
-    void setCategory(U32 cat) { mCategory = cat; }
-    U32 getCategory() const { return mCategory; }
-    void setContentType(U32 ct) { mContentType = ct; }
-    U32 getContentType() const { return mContentType; }
-    void setAutoRenew(U32 renew) { mAutoRenew = renew; }
-    bool getAutoRenew() const { return mAutoRenew; }
-    void setPriceForListing(S32 price) { mPriceForListing = price; }
-    S32 getPriceForListing() const { return mPriceForListing; }
-
-private:
-    LLUUID mAvatarId;
-    LLUUID mClassifiedId;
-    LLVector3d mPosGlobal;
-    std::string mLocationText;
-    U32 mCategory;
-    U32 mContentType;
-    bool mAutoRenew;
-    S32 mPriceForListing;
-};
-
-#endif // LL_CLASSIFIEDITEM_H
diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp
index 4bc481b21ec2415fee09a4e9cbfd283b70b81759..04aad5aa0f41176cabe0a61dd6e98c4157a636ad 100644
--- a/indra/newview/lleventnotifier.cpp
+++ b/indra/newview/lleventnotifier.cpp
@@ -168,8 +168,7 @@ bool LLEventNotifier::handleResponse(U32 eventId, const LLSD& notification, cons
 
 bool LLEventNotifier::add(const LLEventStruct& event)
 {
-    if (mNewEventSignal(event)) { return false; }
-
+    if (mNewEventSignal(event)) return false;
     LLEventNotification *new_enp = new LLEventNotification(event.eventId, event.eventEpoch, event.eventDateStr, event.eventName);
 
     LL_INFOS() << "Add event " << event.eventName << " id " << event.eventId << " date " << event.eventDateStr << LL_ENDL;
@@ -208,21 +207,21 @@ void LLEventNotifier::processEventInfoReply(LLMessageSystem *msg, void **)
     U32 event_time_utc;
 
     msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
-    msg->getU32Fast(_PREHASH_EventData, _PREHASH_EventID, event_id);
-    msg->getStringFast(_PREHASH_EventData, _PREHASH_Name, event_name);
-    msg->getStringFast(_PREHASH_EventData, _PREHASH_Date, eventd_date);
-    msg->getU32Fast(_PREHASH_EventData, _PREHASH_DateUTC, event_time_utc);
+    msg->getU32("EventData", "EventID", event_id);
+    msg->getString("EventData", "Name", event_name);
+    msg->getString("EventData", "Date", eventd_date);
+    msg->getU32("EventData", "DateUTC", event_time_utc);
 
     LLEventStruct event(event_id, (F64)event_time_utc, eventd_date, event_name);
-    msg->getString(_PREHASH_EventData, _PREHASH_Creator, event.creator);
-    msg->getString(_PREHASH_EventData, _PREHASH_Category, event.category);
-    msg->getString(_PREHASH_EventData, _PREHASH_Desc, event.desc);
-    msg->getU32(_PREHASH_EventData, _PREHASH_Duration, event.duration);
-    msg->getU32(_PREHASH_EventData, _PREHASH_Cover, event.cover);
-    msg->getU32(_PREHASH_EventData, _PREHASH_Amount, event.amount);
-    msg->getString(_PREHASH_EventData, _PREHASH_SimName, event.simName);
-    msg->getVector3d(_PREHASH_EventData, _PREHASH_GlobalPos, event.globalPos);
-    msg->getU32(_PREHASH_EventData, _PREHASH_EventFlags, event.flags);
+    msg->getString("EventData", "Creator", event.creator);
+    msg->getString("EventData", "Category", event.category);
+    msg->getString("EventData", "Desc", event.desc);
+    msg->getU32("EventData", "Duration", event.duration);
+    msg->getU32("EventData", "Cover", event.cover);
+    msg->getU32("EventData", "Amount", event.amount);
+    msg->getString("EventData", "SimName", event.simName);
+    msg->getVector3d("EventData", "GlobalPos", event.globalPos);
+    msg->getU32("EventData", "EventFlags", event.flags);
 
     gEventNotifier.add(event);
 }
@@ -247,22 +246,29 @@ void LLEventNotifier::load(const LLSD& event_options)
             is_iso8601_date = true;
         }
 
-        std::string dateStr = response["event_date"].asString();
-
         if (is_iso8601_date)
         {
-            std::string iso8601date =
-                "[" + LLTrans::getString("LTimeYear") + "]-[" + LLTrans::getString("LTimeMthNum") + "]-["
-                    + LLTrans::getString("LTimeDay") + "] [" + LLTrans::getString("LTimeHour") + "]:["
-                    + LLTrans::getString("LTimeMin") + "]:[" + LLTrans::getString("LTimeSec") + "]";
+            std::string dateStr;
+
+            dateStr = "[" + LLTrans::getString("LTimeYear") + "]-["
+                + LLTrans::getString("LTimeMthNum") + "]-["
+                + LLTrans::getString("LTimeDay") + "] ["
+                + LLTrans::getString("LTimeHour") + "]:["
+                + LLTrans::getString("LTimeMin") + "]:["
+                + LLTrans::getString("LTimeSec") + "]";
 
             LLSD substitution;
             substitution["datetime"] = date;
-            LLStringUtil::format(iso8601date, substitution);
-            dateStr = iso8601date;
-        }
+            LLStringUtil::format(dateStr, substitution);
 
-        add(LLEventStruct(response["event_id"].asInteger(), response["event_date_ut"], dateStr, response["event_name"].asString()));
+            LLEventStruct event(response["event_id"].asInteger(), response["event_date_ut"], dateStr, response["event_name"].asString());
+            add(event);
+        }
+        else
+        {
+            LLEventStruct event(response["event_id"].asInteger(), response["event_date_ut"], response["event_date"].asString(), response["event_name"].asString());
+            add(event);
+        }
     }
 }
 
@@ -305,11 +311,11 @@ void LLEventNotifier::serverPushRequest(U32 event_id, bool add)
 }
 
 
-LLEventNotification::LLEventNotification(U32 eventId, F64 eventEpoch, const std::string& eventDateStr, const std::string &eventName) :
+LLEventNotification::LLEventNotification(U32 eventId, F64 eventEpoch, std::string eventDateStr, std::string eventName) :
     mEventID(eventId),
-    mEventName(eventName),
+    mEventName(std::move(eventName)),
     mEventDateEpoch(eventEpoch),
-    mEventDateStr(eventDateStr)
+    mEventDateStr(std::move(eventDateStr))
 {
 
 }
diff --git a/indra/newview/lleventnotifier.h b/indra/newview/lleventnotifier.h
index 14ced4908d8fe417ac18d6cf1f760fe2dedc6e6d..f30039f51b0fc5fcd16ade19d0980d99b58be5c9 100644
--- a/indra/newview/lleventnotifier.h
+++ b/indra/newview/lleventnotifier.h
@@ -27,6 +27,7 @@
 #ifndef LL_LLEVENTNOTIFIER_H
 #define LL_LLEVENTNOTIFIER_H
 
+#include <utility>
 #include "llframetimer.h"
 #include "v3dmath.h"
 
@@ -47,9 +48,9 @@ typedef struct event_st{
     std::string simName;
     LLVector3d globalPos;
     U32 flags = 0;
-    event_st(U32 id, F64 epoch, const std::string& date_str, const std::string& name)
-        : eventId(id), eventEpoch(epoch), eventDateStr(date_str), eventName(name){}
-    event_st(){}
+    event_st(U32 id, F64 epoch, std::string date_str, std::string name)
+        : eventId(id), eventEpoch(epoch), eventDateStr(std::move(date_str)), eventName(std::move(name)){}
+    event_st() = default;
 } LLEventStruct;
 
 class LLEventNotifier
@@ -90,12 +91,12 @@ class LLEventNotifier
 class LLEventNotification
 {
 public:
-    LLEventNotification(U32 eventId, F64 eventEpoch, const std::string& eventDateStr, const std::string &eventName);
+    LLEventNotification(U32 eventId, F64 eventEpoch, std::string eventDateStr, std::string eventName);
 
 
     U32                 getEventID() const              { return mEventID; }
     const std::string   &getEventName() const           { return mEventName; }
-    bool                isValid() const                 { return mEventID > 0 && mEventDateEpoch != 0 && mEventName.size() > 0; }
+    bool                isValid() const                 { return mEventID > 0 && mEventDateEpoch != 0 && !mEventName.empty(); }
     const F64           &getEventDateEpoch() const      { return mEventDateEpoch; }
     const std::string   &getEventDateStr() const        { return mEventDateStr; }
 
diff --git a/indra/newview/llfloaterdirectory.cpp b/indra/newview/llfloaterdirectory.cpp
deleted file mode 100644
index 1df46a66fdbeb6d7ce81e9a480eaccf6f2aff56c..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterdirectory.cpp
+++ /dev/null
@@ -1,1219 +0,0 @@
-/*
- * @file llfloaterdirectory.cpp
- * @brief Legacy search facility
- *
- * Copyright (c) 2014-2022, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llfloaterdirectory.h"
-
-// llmessage
-#include "lleventflags.h"
-#include "llqueryflags.h"
-#include "message.h"
-
-// llui
-#include "llfloaterreg.h"
-#include "lllayoutstack.h"
-#include "llpanel.h"
-#include "llresmgr.h"
-#include "llscrolllistctrl.h"
-#include "lltabcontainer.h"
-#include "lltextbase.h"
-#include "lltrans.h"
-
-// newview
-#include "llagent.h"
-#include "llpanelsearchbase.h"
-#include "llpanelsearchweb.h"
-#include "llproductinforequest.h"
-#include "llviewercontrol.h"
-
-SearchQuery::SearchQuery()
-:   category("category", ""),
-    collection("collection", ""),
-    query("query")
-{}
-
-static const std::array<std::string, 6> sSearchPanels{ {"panel_search_people", "panel_search_groups", "panel_search_places", "panel_search_classifieds", "panel_search_events", "panel_search_landsales"} };
-static const std::array<std::string, 5> sDetailPanels{ {"detail_avatar", "detail_group", "detail_place", "detail_classified", "detail_event"} };
-
-LLFloaterDirectory::LLFloaterDirectory(const Params& key)
-    : LLFloater(key)
-    , mCurrentResultType(SE_UNDEFINED)
-    , mCurrentQuery()
-    , mResultStart(0)
-    , mNumResultsReceived(0)
-    , mQueryID()
-    , mTabContainer(nullptr)
-    , mPanelWeb(nullptr)
-    , mResultList(nullptr)
-    , mResultsStatus(nullptr)
-{
-}
-
-LLFloaterDirectory::~LLFloaterDirectory()
-{
-}
-
-BOOL LLFloaterDirectory::postBuild()
-{
-    mResultList = findChild<LLScrollListCtrl>("results");
-    mResultList->setCommitCallback(boost::bind(&LLFloaterDirectory::onCommitSelection, this));
-    for (std::string panel_name: sSearchPanels)
-    {
-        LLPanelSearch* panel = static_cast<LLPanelSearch*>(findChild<LLUICtrl>(panel_name));
-        if (panel)
-            panel->setSearchFloater(this);
-    }
-    mPanelWeb = findChild<LLPanelSearchWeb>("panel_search_web");
-    mTabContainer = findChild<LLTabContainer>("search_tabs");
-    mTabContainer->setCommitCallback(boost::bind(&LLFloaterDirectory::onTabChanged, this));
-    setProgress(false);
-    mResultsStatus = findChild<LLTextBase>("results_status");
-    getChild<LLButton>("PageUp")->setCommitCallback(boost::bind(&LLFloaterDirectory::choosePage, this, _1));
-    getChild<LLButton>("PageDn")->setCommitCallback(boost::bind(&LLFloaterDirectory::choosePage, this, _1));
-    showDetailPanel(LLStringUtil::null); // hide all the panels
-    paginate();
-
-    if (!mTabContainer->selectTab(gSavedSettings.getS32("AlchemyLastDirectoryTab")))
-    {
-        mTabContainer->selectFirstTab();
-    }
-
-    return LLFloater::postBuild();
-}
-
-void LLFloaterDirectory::onOpen(const LLSD& key)
-{
-    Params p(key);
-    mPanelWeb->loadUrl(p.search);
-    if (key.has("query"))
-    {
-        mTabContainer->selectTabPanel(mPanelWeb);
-    }
-    onTabChanged();
-}
-
-void LLFloaterDirectory::onClose(bool app_quitting)
-{
-    if (mTabContainer)
-    {
-        gSavedSettings.setS32("AlchemyLastDirectoryTab", mTabContainer->getCurrentPanelIndex());
-    }
-}
-
-void LLFloaterDirectory::setProgress(bool working)
-{
-    getChild<LLUICtrl>("loading")->setVisible(working);
-}
-
-void LLFloaterDirectory::setResultsComment(const std::string& message)
-{
-    mResultList->setCommentText(message);
-}
-
-void LLFloaterDirectory::onTabChanged()
-{
-    LLPanel* active_panel = mTabContainer->getCurrentPanel();
-    bool show_detail = active_panel != mPanelWeb;
-    findChild<LLLayoutStack>("results_stack")->setVisible(show_detail);
-    findChild<LLButton>("PageUp")->setVisible(show_detail);
-    findChild<LLButton>("PageDn")->setVisible(show_detail);
-    mResultsStatus->setVisible(show_detail);
-}
-
-void LLFloaterDirectory::onCommitSelection()
-{
-    switch (mCurrentResultType)
-    {
-        case SE_PEOPLE:
-        {
-            LLSD params;
-            params["avatar_id"] = mResultList->getSelectedValue().asUUID();
-            getChild<LLPanel>("detail_avatar")->onOpen(params);
-            showDetailPanel("detail_avatar");
-            break;
-        }
-        case SE_GROUPS:
-        {
-            LLSD params;
-            params["group_id"] = mResultList->getSelectedValue().asUUID();
-            getChild<LLPanel>("detail_group")->onOpen(params);
-            showDetailPanel("detail_group");
-            break;
-        }
-        case SE_LANDSALES:
-        case SE_PLACES:
-        {
-            LLSD params;
-            params["type"] = "remote_place";
-            params["id"] = mResultList->getSelectedValue().asUUID();
-            getChild<LLPanel>("detail_place")->onOpen(params);
-            showDetailPanel("detail_place");
-            break;
-        }
-        case SE_CLASSIFIEDS:
-        {
-            LLSD params;
-            params["classified_id"] = mResultList->getSelectedValue().asUUID();
-            getChild<LLPanel>("detail_classified")->onOpen(params);
-            showDetailPanel("detail_classified");
-            break;
-        }
-        case SE_EVENTS:
-        {
-            getChild<LLPanel>("detail_event")->onOpen(mResultList->getSelectedValue().asInteger());
-            showDetailPanel("detail_event");
-            break;
-        }
-        case SE_UNDEFINED:
-        default:
-            LL_WARNS("Search") << "Unhandled search mode: " << mCurrentResultType << LL_ENDL;
-            break;
-    }
-}
-
-void LLFloaterDirectory::paginate()
-{
-    if (mNumResultsReceived)
-    {
-        LLStringUtil::format_map_t args;
-        std::string total_str;
-        LLResMgr::getInstance()->getIntegerString(total_str, mResultStart + mNumResultsReceived - 1);
-        args["TOTAL"] = total_str;
-        args["VISIBLE_END"] = total_str;
-        total_str = LLStringUtil::null;
-        LLResMgr::getInstance()->getIntegerString(total_str, mResultStart + 1);
-        args["VISIBLE_BEGIN"] = total_str;
-        mResultsStatus->setText(getString((mNumResultsReceived > mCurrentQuery.results_per_page)
-                                          ? "result_spillover" : "result_count",
-                                          args));
-    }
-    else
-        mResultsStatus->setText(getString("no_results"));
-    childSetEnabled("PageUp", mNumResultsReceived > mCurrentQuery.results_per_page);
-    childSetEnabled("PageDn", mResultStart > 0);
-}
-
-void LLFloaterDirectory::choosePage(LLUICtrl* ctrl)
-{
-    if (ctrl->getName() == "PageUp")
-        mResultStart += mCurrentQuery.results_per_page;
-    else if (ctrl->getName() == "PageDn")
-        mResultStart -= mCurrentQuery.results_per_page;
-    else
-    {
-        LL_WARNS("Search") << "Unknown control: " << ctrl->getName() << LL_ENDL;
-        return; // Fuck you, you lose.
-    }
-    queryDirectory(mCurrentQuery, false);
-}
-
-void LLFloaterDirectory::showDetailPanel(const std::string& panel_name)
-{
-    for (const std::string& panel_itr: sDetailPanels)
-    {
-        getChild<LLPanel>(panel_itr)->setVisible(panel_itr == panel_name);
-    }
-}
-
-void LLFloaterDirectory::rebuildResultList()
-{
-    mResultList->clearColumns();
-    switch (mCurrentResultType)
-    {
-        case SE_PEOPLE:
-        {
-            LLScrollListColumn::Params icon;
-            icon.name = "icon";
-            icon.width.pixel_width = 20;
-            mResultList->addColumn(icon);
-
-            LLScrollListColumn::Params name;
-            name.name = "name";
-            name.header.label = "Name";
-            name.width.relative_width = 1.f;
-            mResultList->addColumn(name);
-            break;
-        }
-        case SE_GROUPS:
-        {
-            LLScrollListColumn::Params icon;
-            icon.name = "icon";
-            icon.width.pixel_width = 20;
-            mResultList->addColumn(icon);
-
-            LLScrollListColumn::Params name;
-            name.name = "name";
-            name.header.label = "Name";
-            name.width.relative_width = 0.72f;
-            mResultList->addColumn(name);
-
-            LLScrollListColumn::Params members;
-            members.name = "members";
-            members.header.label = "Members";
-            members.width.relative_width = 0.25f;
-            mResultList->addColumn(members);
-
-            LLScrollListColumn::Params score;
-            score.name = "score";
-            score.header.label = "Score";
-            score.width.relative_width = 0.03f;
-            mResultList->addColumn(score);
-            break;
-        }
-        case SE_PLACES:
-        {
-            LLScrollListColumn::Params icon;
-            icon.name = "icon";
-            icon.width.pixel_width = 20;
-            mResultList->addColumn(icon);
-
-            LLScrollListColumn::Params name;
-            name.name = "name";
-            name.header.label = "Name";
-            name.width.relative_width = 0.81f;
-            mResultList->addColumn(name);
-
-            LLScrollListColumn::Params dwell;
-            dwell.name = "dwell";
-            dwell.header.label = "Traffic";
-            dwell.width.relative_width = 0.19f;
-            mResultList->addColumn(dwell);
-            break;
-        }
-        case SE_LANDSALES:
-        {
-            LLScrollListColumn::Params icon;
-            icon.name = "icon";
-            icon.width.pixel_width = 20;
-            mResultList->addColumn(icon);
-
-            LLScrollListColumn::Params name;
-            name.name = "name";
-            name.header.label = "Name";
-            name.width.relative_width = 0.45f;
-            mResultList->addColumn(name);
-
-            LLScrollListColumn::Params price;
-            price.name="price";
-            price.header.label="Price";
-            price.width.relative_width = 0.1f;
-            mResultList->addColumn(price);
-
-            LLScrollListColumn::Params area;
-            area.name="area";
-            area.header.label="Area";
-            area.width.relative_width = 0.1f;
-            mResultList->addColumn(area);
-
-            LLScrollListColumn::Params ppm;
-            ppm.name="ppm";
-            ppm.header.label="L$/m";
-            ppm.width.relative_width = 0.1f;
-            mResultList->addColumn(ppm);
-
-            LLScrollListColumn::Params type;
-            type.name="type";
-            type.header.label="Type";
-            type.width.relative_width = 0.2f;
-            mResultList->addColumn(type);
-            break;
-        }
-        case SE_CLASSIFIEDS:
-        {
-            LLScrollListColumn::Params icon;
-            icon.name = "icon";
-            icon.width.pixel_width = 20;
-            mResultList->addColumn(icon);
-
-            LLScrollListColumn::Params name;
-            name.name = "name";
-            name.header.label = "Name";
-            name.width.relative_width = 0.7f;
-            mResultList->addColumn(name);
-
-            LLScrollListColumn::Params price;
-            price.name="price";
-            price.header.label="Price";
-            price.width.relative_width = 0.3f;
-            mResultList->addColumn(price);
-            break;
-        }
-        case SE_EVENTS:
-        {
-            LLScrollListColumn::Params icon;
-            icon.name = "icon";
-            icon.width.pixel_width = 20;
-            mResultList->addColumn(icon);
-
-            LLScrollListColumn::Params name;
-            name.name = "name";
-            name.header.label = "Name";
-            name.width.relative_width = 0.65f;
-            mResultList->addColumn(name);
-
-            //LLScrollListColumn::Params time;
-            //time.name="time";
-            //time.header.label="Time";
-            //time.width.relative_width = 0.2f;
-            //mResultList->addColumn(time);
-
-            LLScrollListColumn::Params date;
-            date.name="date";
-            date.header.label="Date";
-            date.width.relative_width = 0.3f;
-            mResultList->addColumn(date);
-            break;
-        }
-        case SE_UNDEFINED:
-        default:
-            LL_WARNS("Search") << "Unhandled search mode: " << mCurrentResultType << LL_ENDL;
-            break;
-
-    }
-}
-
-void LLFloaterDirectory::queryDirectory(const LLDirQuery& query, bool new_search)
-{
-    if (mCurrentResultType != query.type)
-    {
-        mCurrentResultType = query.type;
-        rebuildResultList();
-    }
-    mResultList->clearRows();
-
-    if (new_search)
-    {
-        mResultStart = 0;
-    }
-
-    mCurrentQuery = query;
-    mNumResultsReceived = 0;
-    mQueryID.generate();
-
-    switch (mCurrentResultType)
-    {
-        case SE_PEOPLE:
-        {
-            gMessageSystem->newMessageFast(_PREHASH_DirFindQuery);
-            gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-            gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-            gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-            gMessageSystem->nextBlockFast(_PREHASH_QueryData);
-            gMessageSystem->addUUIDFast(_PREHASH_QueryID, mQueryID);
-            gMessageSystem->addStringFast(_PREHASH_QueryText, query.text);
-            gMessageSystem->addU32Fast(_PREHASH_QueryFlags, DFQ_PEOPLE);
-            gMessageSystem->addS32Fast(_PREHASH_QueryStart, mResultStart);
-            gAgent.sendReliableMessage();
-            LL_DEBUGS("Search") << "Firing off search request: " << mQueryID << LL_ENDL;
-            break;
-        }
-        case SE_GROUPS:
-        {
-            gMessageSystem->newMessageFast(_PREHASH_DirFindQuery);
-            gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-            gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-            gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-            gMessageSystem->nextBlockFast(_PREHASH_QueryData);
-            gMessageSystem->addUUIDFast(_PREHASH_QueryID, mQueryID);
-            gMessageSystem->addStringFast(_PREHASH_QueryText, query.text);
-            gMessageSystem->addU32Fast(_PREHASH_QueryFlags, query.scope);
-            gMessageSystem->addS32Fast(_PREHASH_QueryStart, mResultStart);
-            gAgent.sendReliableMessage();
-            LL_DEBUGS("Search") << "Firing off search request: " << mQueryID << LL_ENDL;
-            break;
-        }
-        case SE_EVENTS:
-        {
-            gMessageSystem->newMessageFast(_PREHASH_DirFindQuery);
-            gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-            gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-            gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-            gMessageSystem->nextBlockFast(_PREHASH_QueryData);
-            gMessageSystem->addUUIDFast(_PREHASH_QueryID, mQueryID);
-            gMessageSystem->addStringFast(_PREHASH_QueryText, query.text);
-            gMessageSystem->addU32Fast(_PREHASH_QueryFlags, query.scope);
-            gMessageSystem->addS32Fast(_PREHASH_QueryStart, mResultStart);
-            gAgent.sendReliableMessage();
-            LL_DEBUGS("Search") << "Firing off search request: " << mQueryID << " Search Text: " << query.text << LL_ENDL;
-            break;
-        }
-        case SE_PLACES:
-        {
-            gMessageSystem->newMessageFast(_PREHASH_DirPlacesQuery);
-            gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-            gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-            gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-            gMessageSystem->nextBlockFast(_PREHASH_QueryData);
-            gMessageSystem->addUUIDFast(_PREHASH_QueryID, mQueryID);
-            gMessageSystem->addStringFast(_PREHASH_QueryText, query.text);
-            gMessageSystem->addU32Fast(_PREHASH_QueryFlags, query.scope);
-            gMessageSystem->addS8Fast(_PREHASH_Category, query.category_char);
-            // TODO: Search filter by region name.
-            gMessageSystem->addStringFast(_PREHASH_SimName, "");
-            gMessageSystem->addS32Fast(_PREHASH_QueryStart, mResultStart);
-            gAgent.sendReliableMessage();
-            LL_DEBUGS("Search") << "Firing off search request: " << mQueryID << LL_ENDL;
-            break;
-        }
-        case SE_LANDSALES:
-        {
-            gMessageSystem->newMessageFast(_PREHASH_DirLandQuery);
-            gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-            gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-            gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-            gMessageSystem->nextBlockFast(_PREHASH_QueryData);
-            gMessageSystem->addUUIDFast(_PREHASH_QueryID, mQueryID);
-            gMessageSystem->addU32Fast(_PREHASH_QueryFlags, query.scope);
-            gMessageSystem->addU32Fast(_PREHASH_SearchType, query.category_int);
-            gMessageSystem->addS32Fast(_PREHASH_Price, query.price);
-            gMessageSystem->addS32Fast(_PREHASH_Area, query.area);
-            gMessageSystem->addS32Fast(_PREHASH_QueryStart, mResultStart);
-            gAgent.sendReliableMessage();
-            LL_DEBUGS("Search") << "Firing off search request: " << mQueryID << query.category_int << LL_ENDL;
-            break;
-        }
-        case SE_CLASSIFIEDS:
-        {
-            gMessageSystem->newMessageFast(_PREHASH_DirClassifiedQuery);
-            gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-            gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-            gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-            gMessageSystem->nextBlockFast(_PREHASH_QueryData);
-            gMessageSystem->addUUIDFast(_PREHASH_QueryID, mQueryID);
-            gMessageSystem->addStringFast(_PREHASH_QueryText, query.text);
-            gMessageSystem->addU32Fast(_PREHASH_QueryFlags, query.scope);
-            gMessageSystem->addU32Fast(_PREHASH_Category, query.category_int);
-            gMessageSystem->addS32Fast(_PREHASH_QueryStart, mResultStart);
-            gAgent.sendReliableMessage();
-            LL_DEBUGS("Search") << "Firing off search request: " << mQueryID << LL_ENDL;
-            break;
-        }
-        case SE_UNDEFINED:
-        default:
-            break;
-    }
-    mResultList->setCommentText(getString("searching"));
-    setProgress(true);
-}
-
-//static
-void LLFloaterDirectory::processSearchPeopleReply(LLMessageSystem* msg, void**)
-{
-    LLUUID query_id;
-    std::string first_name;
-    std::string last_name;
-    LLUUID agent_id;
-    U8 online;
-    //S32 reputation;
-
-    msg->getUUIDFast(_PREHASH_QueryData, _PREHASH_QueryID, query_id);
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-
-    if (agent_id != gAgent.getID()) return; // not for us
-    LL_DEBUGS("Search") << "Received results for query id: " << query_id << LL_ENDL;
-
-    // *TODO: Get rid of this so we can have multiple search windows
-    LLFloaterDirectory* self = LLFloaterReg::findTypedInstance<LLFloaterDirectory>("search");
-    if (self == nullptr || query_id != self->mQueryID) return; // not the result we're waiting for
-    self->setProgress(false);
-
-    LLScrollListCtrl* pResults = self->mResultList;
-
-    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
-    if (num_new_rows == 0)
-    {
-        LLStringUtil::format_map_t map;
-        map["[TEXT]"] = self->mCurrentQuery.text;
-        pResults->setCommentText(self->getString("not_found", map));
-    }
-
-    self->mNumResultsReceived += num_new_rows;
-
-    for (S32 i = 0; i < num_new_rows; ++i)
-    {
-        msg->getStringFast( _PREHASH_QueryReplies,  _PREHASH_FirstName, first_name, i);
-        msg->getStringFast( _PREHASH_QueryReplies,  _PREHASH_LastName,  last_name, i);
-        msg->getUUIDFast(   _PREHASH_QueryReplies,  _PREHASH_AgentID,   agent_id, i);
-        //msg->getS32Fast(  _PREHASH_QueryReplies,  _PREHASH_Reputation, reputation, i);
-        msg->getU8Fast(     _PREHASH_QueryReplies,  _PREHASH_Online,    online, i);
-
-        if (agent_id.isNull())
-        {
-            LL_INFOS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-            pResults->setCommentText(self->getString("not_found", map));
-        }
-        else
-        {
-            LL_DEBUGS("Search") << "Got: " << first_name << " " << last_name << " AgentID: " << agent_id << LL_ENDL;
-            pResults->setEnabled(TRUE);
-
-            std::string avatar_name = LLCacheName::buildFullName(first_name, last_name);
-
-            LLSD element;
-            element["id"] = agent_id;
-
-            element["columns"][0]["column"] = "icon";
-            element["columns"][0]["type"]   = "icon";
-            element["columns"][0]["value"]  = online ? "icon_avatar_online.tga" : "icon_avatar_offline.tga";
-
-            element["columns"][1]["column"] = "name";
-            element["columns"][1]["value"]  = avatar_name;
-
-            pResults->addElement(element, ADD_BOTTOM);
-        }
-    }
-    self->paginate();
-}
-
-//static
-void LLFloaterDirectory::processSearchGroupsReply(LLMessageSystem* msg, void**)
-{
-    LLUUID query_id;
-    LLUUID group_id;
-    LLUUID agent_id;
-    std::string group_name;
-    S32 members;
-    F32 search_order;
-
-    msg->getUUIDFast(_PREHASH_QueryData, _PREHASH_QueryID, query_id);
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-
-    if (agent_id != gAgent.getID()) return; // not for us
-    LL_DEBUGS("Search") << "Received results for query id: " << query_id << LL_ENDL;
-
-    LLFloaterDirectory* self = LLFloaterReg::findTypedInstance<LLFloaterDirectory>("search");
-    if (self == nullptr || query_id != self->mQueryID) return; // not the result we're waiting for
-
-    self->setProgress(false);
-    LLScrollListCtrl* pResults = self->mResultList;
-
-    // Check for status messages
-    if (msg->getNumberOfBlocks("StatusData"))
-    {
-        U32 status;
-        msg->getU32("StatusData", "Status", status);
-        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
-        {
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->getChild<LLUICtrl>("groups_edit")->getValue().asString();
-            pResults->setCommentText(self->getString("not_found", map));
-            return;
-        }
-        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
-        {
-            pResults->setCommentText(self->getString("search_short"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
-        {
-            pResults->setCommentText(self->getString("search_banned"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
-        {
-            pResults->setCommentText(self->getString("search_disabled"));
-            return;
-        }
-    }
-
-    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
-    if (num_new_rows == 0)
-    {
-        LLStringUtil::format_map_t map;
-        map["[TEXT]"] = self->mCurrentQuery.text;
-        pResults->setCommentText(self->getString("not_found", map));
-    }
-
-    self->mNumResultsReceived += num_new_rows;
-    for (S32 i = 0; i < num_new_rows; ++i)
-    {
-        msg->getUUIDFast(   _PREHASH_QueryReplies,  _PREHASH_GroupID,       group_id,   i);
-        msg->getStringFast( _PREHASH_QueryReplies,  _PREHASH_GroupName,     group_name, i);
-        msg->getS32Fast(    _PREHASH_QueryReplies,  _PREHASH_Members,       members,    i);
-        msg->getF32Fast(    _PREHASH_QueryReplies,  _PREHASH_SearchOrder,   search_order,i);
-        if (group_id.isNull())
-        {
-            LL_DEBUGS("Search") << "No results returned for QueryID: " << query_id << LL_ENDL;
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-            pResults->setCommentText(self->getString("not_found", map));
-        }
-        else
-        {
-            LL_DEBUGS("Search") << "Got: " << group_name << " GroupID: " << group_id << LL_ENDL;
-            pResults->setEnabled(TRUE);
-
-            LLSD element;
-
-            element["id"] = group_id;
-
-            element["columns"][0]["column"] = "icon";
-            element["columns"][0]["type"]   = "icon";
-            element["columns"][0]["value"]  = "Icon_Group";
-
-            element["columns"][1]["column"] = "name";
-            element["columns"][1]["value"]  = group_name;
-
-            element["columns"][2]["column"] = "members";
-            element["columns"][2]["value"]  = members;
-
-            element["columns"][3]["column"] = "score";
-            element["columns"][3]["value"]  = search_order;
-
-            pResults->addElement(element, ADD_BOTTOM);
-        }
-    }
-    self->paginate();
-}
-
-//static
-void LLFloaterDirectory::processSearchPlacesReply(LLMessageSystem* msg, void**)
-{
-    LLUUID  agent_id;
-    LLUUID  query_id;
-    LLUUID  parcel_id;
-    std::string name;
-    BOOL    for_sale;
-    BOOL    auction;
-    F32     dwell;
-
-    msg->getUUIDFast(_PREHASH_QueryData, _PREHASH_QueryID, query_id);
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-
-    if (agent_id != gAgent.getID()) return; // not for us
-    LL_DEBUGS("Search") << "Received results for query id: " << query_id << LL_ENDL;
-
-    LLFloaterDirectory* self = LLFloaterReg::findTypedInstance<LLFloaterDirectory>("search");
-    if (self == nullptr || query_id != self->mQueryID) return; // not the result we're waiting for
-
-    self->setProgress(false);
-    LLScrollListCtrl* pResults = self->mResultList;
-
-    // Check for status messages
-    if (msg->getNumberOfBlocks("StatusData"))
-    {
-        U32 status;
-        msg->getU32("StatusData", "Status", status);
-        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
-        {
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-            pResults->setCommentText(self->getString("not_found", map));
-            return;
-        }
-        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
-        {
-            pResults->setCommentText(self->getString("search_short"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
-        {
-            pResults->setCommentText(self->getString("search_banned"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
-        {
-            pResults->setCommentText(self->getString("search_disabled"));
-            return;
-        }
-    }
-
-    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
-    if (num_new_rows == 0)
-    {
-        LLStringUtil::format_map_t map;
-        map["[TEXT]"] = self->mCurrentQuery.text;
-                pResults->setCommentText(self->getString("not_found", map));
-    }
-
-    self->mNumResultsReceived += num_new_rows;
-    for (S32 i = 0; i < num_new_rows; ++i)
-    {
-        msg->getUUID(   "QueryReplies", "ParcelID", parcel_id,  i);
-        msg->getString( "QueryReplies", "Name",     name,       i);
-        msg->getBOOL(   "QueryReplies", "ForSale",  for_sale,   i);
-        msg->getBOOL(   "QueryReplies", "Auction",  auction,    i);
-        msg->getF32(    "QueryReplies", "Dwell",    dwell,      i);
-        if (parcel_id.isNull())
-        {
-            LL_DEBUGS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-                        pResults->setCommentText(self->getString("not_found", map));
-        }
-        else
-        {
-            LL_DEBUGS("Search") << "Got: " << name << " ParcelID: " << parcel_id << LL_ENDL;
-            pResults->setEnabled(TRUE);
-
-            LLSD element;
-
-            element["id"] = parcel_id;
-
-            if (auction)
-            {
-                element["columns"][0]["column"] = "icon";
-                element["columns"][0]["type"]   = "icon";
-                element["columns"][0]["value"]  = "Icon_Auction";
-            }
-            else if (for_sale)
-            {
-                element["columns"][0]["column"] = "icon";
-                element["columns"][0]["type"]   = "icon";
-                element["columns"][0]["value"]  = "Icon_For_Sale";
-            }
-            else
-            {
-                element["columns"][0]["column"] = "icon";
-                element["columns"][0]["type"]   = "icon";
-                element["columns"][0]["value"]  = "Icon_Place";
-            }
-
-            element["columns"][1]["column"] = "name";
-            element["columns"][1]["value"]  = name;
-
-            std::string buffer = llformat("%.0f", dwell);
-            element["columns"][2]["column"] = "dwell";
-            element["columns"][2]["value"]  = buffer;
-
-            pResults->addElement(element, ADD_BOTTOM);
-        }
-    }
-    self->paginate();
-}
-
-//static
-void LLFloaterDirectory::processSearchClassifiedsReply(LLMessageSystem* msg, void**)
-{
-    LLUUID  agent_id;
-    LLUUID  query_id;
-    LLUUID  classified_id;
-    std::string name;
-    U32     creation_date;
-    U32     expiration_date;
-    S32     price_for_listing;
-
-    msg->getUUIDFast(_PREHASH_QueryData, _PREHASH_QueryID, query_id);
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-
-    if (agent_id != gAgent.getID()) return; // not for us
-    LL_DEBUGS("Search") << "Received results for query id: " << query_id << LL_ENDL;
-
-    LLFloaterDirectory* self = LLFloaterReg::findTypedInstance<LLFloaterDirectory>("search");
-    if (self == nullptr || query_id != self->mQueryID) return; // not the result we're waiting for
-
-    self->setProgress(false);
-    LLScrollListCtrl* pResults = self->mResultList;
-
-    // Check for status messages
-    if (msg->getNumberOfBlocks("StatusData"))
-    {
-        U32 status;
-        msg->getU32("StatusData", "Status", status);
-        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
-        {
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-            pResults->setCommentText(self->getString("not_found", map));
-            return;
-        }
-        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
-        {
-            pResults->setCommentText(self->getString("search_short"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
-        {
-            pResults->setCommentText(self->getString("search_banned"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
-        {
-            pResults->setCommentText(self->getString("search_disabled"));
-            return;
-        }
-    }
-
-    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
-    if (num_new_rows == 0)
-    {
-        LLStringUtil::format_map_t map;
-        map["[TEXT]"] = self->mCurrentQuery.text;
-        pResults->setCommentText(self->getString("not_found", map));
-    }
-
-    self->mNumResultsReceived += num_new_rows;
-    for (S32 i = 0; i < num_new_rows; ++i)
-    {
-        msg->getUUID(   "QueryReplies", "ClassifiedID",     classified_id,  i);
-        msg->getString( "QueryReplies", "Name",             name,           i);
-        msg->getU32(    "QueryReplies", "CreationDate",     creation_date,  i);
-        msg->getU32(    "QueryReplies", "ExpirationDate",   expiration_date,i);
-        msg->getS32(    "QueryReplies", "PriceForListing",  price_for_listing,i);
-        if (classified_id.isNull())
-        {
-            LL_DEBUGS("Search") << "No results returned for QueryID: " << query_id << LL_ENDL;
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-                        pResults->setCommentText(self->getString("not_found", map));
-        }
-        else
-        {
-            LL_DEBUGS("Search") << "Got: " << name << " ClassifiedID: " << classified_id << LL_ENDL;
-            pResults->setEnabled(TRUE);
-
-            LLSD element;
-
-            element["id"] = classified_id;
-
-            element["columns"][0]["column"] = "icon";
-            element["columns"][0]["type"]   = "icon";
-            element["columns"][0]["value"]  = "icon_top_pick.tga";
-
-            element["columns"][1]["column"] = "name";
-            element["columns"][1]["value"]  = name;
-
-            element["columns"][2]["column"] = "price";
-            element["columns"][2]["value"]  = price_for_listing;
-
-            pResults->addElement(element, ADD_BOTTOM);
-        }
-    }
-    self->paginate();
-}
-
-// static
-void LLFloaterDirectory::processSearchLandReply(LLMessageSystem* msg, void**)
-{
-    LLUUID  agent_id;
-    LLUUID  query_id;
-    LLUUID  parcel_id;
-    std::string name;
-    std::string land_sku;
-    std::string land_type;
-    BOOL    auction;
-    BOOL    for_sale;
-    S32     price;
-    S32     area;
-
-    msg->getUUIDFast(_PREHASH_QueryData, _PREHASH_QueryID, query_id);
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-
-    if (agent_id != gAgent.getID()) return; // not for us
-    LL_DEBUGS("Search") << "Received results for query id: " << query_id << LL_ENDL;
-
-    LLFloaterDirectory* self = LLFloaterReg::findTypedInstance<LLFloaterDirectory>("search");
-    if (self == nullptr || query_id != self->mQueryID) return; // not the result we're waiting for
-
-    self->setProgress(false);
-    LLScrollListCtrl* pResults = self->mResultList;
-
-    // Check for status messages
-    if (msg->getNumberOfBlocks("StatusData"))
-    {
-        U32 status;
-        msg->getU32("StatusData", "Status", status);
-        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
-        {
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-            pResults->setCommentText(self->getString("not_found", map));
-            return;
-        }
-        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
-        {
-            pResults->setCommentText(self->getString("search_short"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
-        {
-            pResults->setCommentText(self->getString("search_banned"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
-        {
-            pResults->setCommentText(self->getString("search_disabled"));
-            return;
-        }
-    }
-
-    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
-    if (num_new_rows == 0)
-    {
-        LLStringUtil::format_map_t map;
-        map["[TEXT]"] = self->mCurrentQuery.text;
-                pResults->setCommentText(self->getString("not_found", map));
-    }
-
-    self->mNumResultsReceived += num_new_rows;
-    for (S32 i = 0; i < num_new_rows; ++i)
-    {
-        msg->getUUID(   "QueryReplies", "ParcelID",     parcel_id,  i);
-        msg->getString( "QueryReplies", "Name",         name,       i);
-        msg->getBOOL(   "QueryReplies", "Auction",      auction,    i);
-        msg->getBOOL(   "QueryReplies", "ForSale",      for_sale,   i);
-        msg->getS32(    "QueryReplies", "SalePrice",    price,      i);
-        msg->getS32(    "QueryReplies", "ActualArea",   area,       i);
-        if (parcel_id.isNull())
-        {
-            LL_DEBUGS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
-            pResults->setCommentText(self->getString("no_results"));
-        }
-        else
-        {
-            LL_DEBUGS("Search") << "Got: " << name << " ClassifiedID: " << parcel_id << LL_ENDL;
-            pResults->setEnabled(TRUE);
-            if ( msg->getSizeFast(_PREHASH_QueryReplies, i, _PREHASH_ProductSKU) > 0 )
-            {
-                msg->getStringFast( _PREHASH_QueryReplies, _PREHASH_ProductSKU, land_sku, i);
-                land_type = LLProductInfoRequestManager::instance().getDescriptionForSku(land_sku);
-            }
-            else
-            {
-                land_sku.clear();
-                land_type = LLTrans::getString("land_type_unknown");
-            }
-            if (parcel_id.isNull())
-                continue;
-
-            LLSD element;
-
-            element["id"] = parcel_id;
-            if (auction)
-            {
-                element["columns"][0]["column"] = "icon";
-                element["columns"][0]["type"]   = "icon";
-                element["columns"][0]["value"]  = "Icon_Auction";
-            }
-            else if (for_sale)
-            {
-                element["columns"][0]["column"] = "icon";
-                element["columns"][0]["type"]   = "icon";
-                element["columns"][0]["value"]  = "Icon_For_Sale";
-            }
-            else
-            {
-                element["columns"][0]["column"] = "icon";
-                element["columns"][0]["type"]   = "icon";
-                element["columns"][0]["value"]  = "Icon_Place";
-            }
-
-            element["columns"][1]["column"] = "name";
-            element["columns"][1]["value"]  = name;
-
-            std::string buffer = "Auction";
-            if (!auction)
-            {
-                buffer = llformat("%d", price);
-            }
-            element["columns"][2]["column"] = "price";
-            element["columns"][2]["value"]  = price;
-
-            element["columns"][3]["column"] = "area";
-            element["columns"][3]["value"]  = area;
-            if (!auction)
-            {
-                F32 ppm;
-                if (area > 0)
-                    ppm = (F32)price / (F32)area;
-                else
-                    ppm = 0.f;
-                std::string buffer = llformat("%.1f", ppm);
-                element["columns"][4]["column"] = "ppm";
-                element["columns"][4]["value"]  = buffer;
-            }
-            else
-            {
-                element["columns"][4]["column"] = "ppm";
-                element["columns"][4]["value"]  = "1.0";
-            }
-
-            element["columns"][5]["column"] = "type";
-            element["columns"][5]["value"]  = land_type;
-
-            pResults->addElement(element, ADD_BOTTOM);
-        }
-    }
-    self->paginate();
-}
-
-// static
-void LLFloaterDirectory::processSearchEventsReply(LLMessageSystem* msg, void**)
-{
-    LLUUID  agent_id;
-    LLUUID  query_id;
-    LLUUID  owner_id;
-    std::string name;
-    std::string date;
-
-    msg->getUUIDFast(_PREHASH_QueryData, _PREHASH_QueryID, query_id);
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-
-    if (agent_id != gAgent.getID()) return; // not for us
-    LL_DEBUGS("Search") << "Received results for query id: " << query_id << LL_ENDL;
-
-    LLFloaterDirectory* self = LLFloaterReg::findTypedInstance<LLFloaterDirectory>("search");
-    if (self == nullptr || query_id != self->mQueryID) return; // not the result we're waiting for
-
-    self->setProgress(false);
-    LLScrollListCtrl* pResults = self->mResultList;
-
-    // Check for status messages
-    if (msg->getNumberOfBlocks("StatusData"))
-    {
-        U32 status;
-        msg->getU32("StatusData", "Status", status);
-        if (status & STATUS_SEARCH_EVENTS_FOUNDNONE)
-        {
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-            pResults->setCommentText(self->getString("not_found", map));
-            return;
-        }
-        else if(status & STATUS_SEARCH_EVENTS_SHORTSTRING)
-        {
-            pResults->setCommentText(self->getString("search_short"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_EVENTS_BANNEDWORD)
-        {
-            pResults->setCommentText(self->getString("search_banned"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_EVENTS_SEARCHDISABLED)
-        {
-            pResults->setCommentText(self->getString("search_disabled"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_EVENTS_NODATEOFFSET)
-        {
-            pResults->setCommentText(self->getString("search_no_date_offset"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_EVENTS_NOCATEGORY)
-        {
-            pResults->setCommentText(self->getString("search_no_events_category"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_EVENTS_NOQUERY)
-        {
-            pResults->setCommentText(self->getString("search_no_query"));
-            return;
-        }
-    }
-
-    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
-    if (num_new_rows == 0)
-    {
-        LLStringUtil::format_map_t map;
-        map["[TEXT]"] = self->mCurrentQuery.text;
-                pResults->setCommentText(self->getString("not_found", map));
-    }
-
-    self->mNumResultsReceived += num_new_rows;
-    for (S32 i = 0; i < num_new_rows; ++i)
-    {
-        U32 event_id;
-        //U32 unix_time;
-        U32 event_flags;
-
-        msg->getUUID(   "QueryReplies", "OwnerID",      owner_id,   i);
-        msg->getString( "QueryReplies", "Name",         name,       i);
-        msg->getU32(    "QueryReplies", "EventID",      event_id,   i);
-        msg->getString( "QueryReplies", "Date",         date,       i);
-        //msg->getU32(  "QueryReplies", "UnixTime",     unix_time,  i);
-        msg->getU32(    "QueryReplies", "EventFlags",   event_flags,i);
-
-        static LLUICachedControl<bool> inc_pg("ShowPGEvents", true);
-        static LLUICachedControl<bool> inc_mature("ShowMatureEvents", false);
-        static LLUICachedControl<bool> inc_adult("ShowAdultEvents", false);
-
-        // Skip empty events...
-        if (owner_id.isNull())
-        {
-            LL_INFOS("Search") << "Skipped " << event_id << " because of a NULL owner result" << LL_ENDL;
-            continue;
-        }
-        // Skips events that don't match our scope...
-        if (((event_flags & (EVENT_FLAG_ADULT | EVENT_FLAG_MATURE)) == EVENT_FLAG_NONE) && !inc_pg)
-        {
-            LL_INFOS("Search") << "Skipped " << event_id << " because it was out of scope" << LL_ENDL;
-            continue;
-        }
-        if ((event_flags & EVENT_FLAG_MATURE) && !inc_mature)
-        {
-            LL_INFOS("Search") << "Skipped " << event_id << " because it was out of scope" << LL_ENDL;
-            continue;
-        }
-        if ((event_flags & EVENT_FLAG_ADULT) && !inc_adult)
-        {
-            LL_INFOS("Search") << "Skipped " << event_id << " because it was out of scope" << LL_ENDL;
-            continue;
-        }
-        pResults->setEnabled(TRUE);
-
-        LLSD element;
-
-        element["id"] = llformat("%u", event_id);
-
-        if (event_flags == EVENT_FLAG_ADULT)
-        {
-            element["columns"][0]["column"] = "icon";
-            element["columns"][0]["type"] = "icon";
-            element["columns"][0]["value"] = "Parcel_R_Dark";
-        }
-        else if (event_flags == EVENT_FLAG_MATURE)
-        {
-            element["columns"][0]["column"] = "icon";
-            element["columns"][0]["type"] = "icon";
-            element["columns"][0]["value"] = "Parcel_M_Dark";
-        }
-        else
-        {
-            element["columns"][0]["column"] = "icon";
-            element["columns"][0]["type"] = "icon";
-            element["columns"][0]["value"] = "Parcel_PG_Dark";
-        }
-
-        element["columns"][1]["column"] = "name";
-        element["columns"][1]["value"] = name;
-
-        element["columns"][2]["column"] = "date";
-        element["columns"][2]["value"] = date;
-
-        //element["columns"][3]["column"] = "time";
-        //element["columns"][3]["value"] = llformat("%u", unix_time);
-
-        pResults->addElement(element, ADD_BOTTOM);
-    }
-    self->paginate();
-}
diff --git a/indra/newview/llfloaterdirectory.h b/indra/newview/llfloaterdirectory.h
deleted file mode 100644
index 0817f223ab432cc88409a3bda40df146d6d8075f..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterdirectory.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * @file llfloaterdirectory.h
- * @brief Legacy search facility definitions
- *
- * Copyright (c) 2014-2022, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_FLOATERDIRECTORY_H
-#define LL_FLOATERDIRECTORY_H
-
-#include "llfloater.h"
-#include "llsdparam.h"
-
-class LLUICtrl;
-class LLPanel;
-class LLPanelSearchWeb;
-class LLScrollListCtrl;
-class LLTabContainer;
-class LLTextBase;
-
-static const size_t MIN_SEARCH_STRING_SIZE = 3;
-
-typedef enum {
-    SE_UNDEFINED = 0,
-    SE_PEOPLE,
-    SE_GROUPS,
-    SE_PLACES,
-    SE_LANDSALES,
-    SE_EVENTS,
-    SE_CLASSIFIEDS
-} ESearch;
-
-struct SearchQuery : public LLInitParam::Block<SearchQuery>
-{
-    Optional<std::string> category;
-    Optional<std::string> collection;
-    Optional<std::string> query;
-
-    SearchQuery();
-};
-
-typedef struct dir_query
-{
-    dir_query()
-        : type(SE_UNDEFINED), text(LLStringUtil::null), scope(0),
-        category_int(0), category_char(0x0), price(0), area(0), results_per_page(100) {}
-    ESearch type;
-    std::string text;
-    U32 scope;
-    U32 category_int;
-    S8 category_char;
-    S32 price;
-    S32 area;
-    U32 results_per_page;
-} LLDirQuery;
-
-class LLFloaterDirectory : public LLFloater
-{
-    friend class LLPanelSearchClassifieds;
-    friend class LLPanelSearchEvents;
-    friend class LLPanelSearchGroups;
-    friend class LLPanelSearchLandSales;
-    friend class LLPanelSearchPeople;
-    friend class LLPanelSearchPlaces;
-
-public:
-    struct _Params : LLInitParam::Block<_Params, LLFloater::Params>
-    {
-        Optional<SearchQuery> search;
-    };
-    typedef LLSDParamAdapter<_Params> Params;
-
-    LLFloaterDirectory(const Params& key);
-    BOOL postBuild() override;
-    void onOpen(const LLSD& key) override;
-    void onClose(bool app_quitting) override;
-
-    static void processSearchPeopleReply(LLMessageSystem* msg, void**);
-    static void processSearchGroupsReply(LLMessageSystem* msg, void**);
-    static void processSearchPlacesReply(LLMessageSystem* msg, void**);
-    static void processSearchClassifiedsReply(LLMessageSystem* msg, void**);
-    static void processSearchLandReply(LLMessageSystem* msg, void**);
-    static void processSearchEventsReply(LLMessageSystem* msg, void**);
-
-protected:
-    void setProgress(bool working);
-    void queryDirectory(const LLDirQuery& query, bool new_search = false);
-    void setResultsComment(const std::string& message);
-
-private:
-    ~LLFloaterDirectory();
-    void onCommitSelection();
-    void choosePage(LLUICtrl* ctrl);
-    void onTabChanged();
-    void paginate();
-    void showDetailPanel(const std::string& panel_name);
-    void rebuildResultList();
-
-    ESearch mCurrentResultType;
-    LLDirQuery mCurrentQuery;
-    S32 mResultStart;
-    S32 mNumResultsReceived;
-    LLUUID mQueryID;
-
-    LLTabContainer* mTabContainer;
-    LLPanelSearchWeb* mPanelWeb;
-    LLScrollListCtrl* mResultList;
-    LLTextBase* mResultsStatus;
-};
-
-#endif // LL_FLOATERDIRECTORY_H
diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp
index 92d762fa9cb37bcfe3abca4e7d4bbc33cb013ee4..b07f2963b270439d8b2c59e12be7d8169f6368e0 100644
--- a/indra/newview/llfloaterevent.cpp
+++ b/indra/newview/llfloaterevent.cpp
@@ -3,9 +3,8 @@
  * @brief Display for events in the finder
  *
  * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Alchemy Viewer Source Code
+ * Second Life Viewer Source Code
  * Copyright (C) 2010, Linden Research, Inc.
- * Copyright (C) 2014, Cinder Roxley @ Second Life
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -28,20 +27,93 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llfloaterevent.h"
-#include "llpaneleventinfo.h"
+
+#include "message.h"
+#include "llnotificationsutil.h"
+#include "llui.h"
+
+#include "llagent.h"
+#include "llviewerwindow.h"
+#include "llbutton.h"
+#include "llcachename.h"
+#include "llcommandhandler.h"   // secondlife:///app/chat/ support
+#include "lleventflags.h"
+#include "llmediactrl.h"
+#include "llexpandabletextbox.h"
+#include "llfloater.h"
+#include "llfloaterreg.h"
+#include "llmediactrl.h"
+#include "llfloaterworldmap.h"
+#include "llinventorymodel.h"
+#include "llslurl.h"
+#include "lltextbox.h"
+#include "lltexteditor.h"
+#include "lluiconstants.h"
+#include "llviewercontrol.h"
+#include "llweb.h"
+#include "llworldmap.h"
+#include "llworldmapmessage.h"
+#include "lluictrlfactory.h"
+#include "lltrans.h"
 
 
 LLFloaterEvent::LLFloaterEvent(const LLSD& key)
-:   LLFloater(key)
-,   mEventId(0)
+    : LLFloater(key),
+      LLViewerMediaObserver(),
+      mBrowser(NULL),
+      mEventID(0)
+{
+}
+
+
+LLFloaterEvent::~LLFloaterEvent()
+{
+}
+
+
+BOOL LLFloaterEvent::postBuild()
 {
+    mBrowser = getChild<LLMediaCtrl>("browser");
+    if (mBrowser)
+    {
+        mBrowser->addObserver(this);
+    }
 
+    return TRUE;
+}
+
+void LLFloaterEvent::handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event)
+{
+    switch (event)
+    {
+        case MEDIA_EVENT_NAVIGATE_BEGIN:
+            getChild<LLUICtrl>("status_text")->setValue(getString("loading_text"));
+            break;
+
+        case MEDIA_EVENT_NAVIGATE_COMPLETE:
+            getChild<LLUICtrl>("status_text")->setValue(getString("done_text"));
+            break;
+
+        default:
+            break;
+    }
 }
 
 void LLFloaterEvent::setEventID(const U32 event_id)
 {
-    mEventId = event_id;
-    if (event_id == 0) closeFloater();
+    mEventID = event_id;
+
+    if (event_id != 0)
+    {
+        LLSD subs;
+        subs["EVENT_ID"] = (S32)event_id;
+        // get the search URL and expand all of the substitutions
+        // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
+
+        std::string expanded_url = LLWeb::expandURLSubstitutions(gSavedSettings.getString("EventURL"), subs);
+
+        // and load the URL in the web view
+        mBrowser->navigateTo(expanded_url);
 
-    getChild<LLPanel>("event_panel")->onOpen(mEventId);
+    }
 }
diff --git a/indra/newview/llfloaterevent.h b/indra/newview/llfloaterevent.h
index 50eb86e07cbf7c0bb9193cd935d103c1ca2c09d5..169ce246ecb5c1ba902a1f8de0e6096ddfa97c0e 100644
--- a/indra/newview/llfloaterevent.h
+++ b/indra/newview/llfloaterevent.h
@@ -3,9 +3,8 @@
  * @brief Display for events in the finder
  *
  * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Alchemy Viewer Source Code
+ * Second Life Viewer Source Code
  * Copyright (C) 2010, Linden Research, Inc.
- * Copyright (C) 2014, Cinder Roxley @ Second Life
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -29,17 +28,35 @@
 #define LL_LLFLOATEREVENT_H
 
 #include "llfloater.h"
+#include "llviewermediaobserver.h"
 
-class LLFloaterEvent final : public LLFloater
+
+class LLMediaCtrl;
+class LLButton;
+
+class LLFloaterEvent final : public LLFloater,
+                       public LLViewerMediaObserver
 
 {
 public:
     LLFloaterEvent(const LLSD& key);
-    /*virtual*/ ~LLFloaterEvent() = default;
+    /*virtual*/ ~LLFloaterEvent();
+
+    /*virtual*/ BOOL postBuild();
+
     void setEventID(const U32 event_id);
 
-private:
-    S32 mEventId;
+    U32 getEventID() { return mEventID; }
+
+
+
+protected:
+    /*virtual*/ void handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event);
+
+    U32             mEventID;
+
+    LLMediaCtrl*    mBrowser;
+
 };
 
 #endif // LL_LLFLOATEREVENT_H
diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp
index 03e587e38eea87ca46551b3a7c45cfb20c7708c9..c3bc8e2f2b3703e11a4b907caa151f8f27c29598 100644
--- a/indra/newview/llfloaterjoystick.cpp
+++ b/indra/newview/llfloaterjoystick.cpp
@@ -134,15 +134,15 @@ void LLFloaterJoystick::draw()
         }
     }
 
-	for (U32 i = 0; i < 16; i++)
-	{
+    for (U32 i = 0; i < 16; i++)
+    {
         U32 value = joystick->getJoystickButton(i);
-		if (!mAxisButton[i]->getEnabled() && value)
-		{
-			mAxisButton[i]->setEnabled(TRUE);
-		}
-		mAxisButton[i]->setToggleState(value);
-	}
+        if (!mAxisButton[i]->getEnabled() && value)
+        {
+            mAxisButton[i]->setEnabled(TRUE);
+        }
+        mAxisButton[i]->setToggleState(value);
+    }
     LLFloater::draw();
 }
 
@@ -163,11 +163,11 @@ BOOL LLFloaterJoystick::postBuild()
         }
     }
 
-	for (U32 i = 0; i < 16; i++)
-	{
-		std::string btn_name = llformat("btn%d", i);
-		mAxisButton[i] = getChild<LLButton>(btn_name);
-	}
+    for (U32 i = 0; i < 16; i++)
+    {
+        std::string btn_name = llformat("btn%d", i);
+        mAxisButton[i] = getChild<LLButton>(btn_name);
+    }
 
     mJoysticksCombo = getChild<LLComboBox>("joystick_combo");
     childSetCommitCallback("joystick_combo",onCommitJoystickEnabled,this);
diff --git a/indra/newview/llfloaterjoystick.h b/indra/newview/llfloaterjoystick.h
index 5aa0dbd0104d957ff1f9e98531b4a095dde2872b..ebc1a26190cec024421a637ab7749b83f11e25f3 100644
--- a/indra/newview/llfloaterjoystick.h
+++ b/indra/newview/llfloaterjoystick.h
@@ -101,7 +101,7 @@ class LLFloaterJoystick final : public LLFloater
     // stats view
     LLStatBar* mAxisStatsBar[6];
 
-	LLButton* mAxisButton[16];
+    LLButton* mAxisButton[16];
 };
 
 #endif
diff --git a/indra/newview/llfloaterprofilelegacy.cpp b/indra/newview/llfloaterprofilelegacy.cpp
deleted file mode 100644
index 78df15de899971f367e5c2dff917f83d16f1e3a1..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterprofilelegacy.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * @file llfloaterprofilelegacy.cpp
- * @brief Floater that holds panel don't bitch about it, Dog; Merging is easy.
- *
- * Copyright (c) 2017-2022, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llfloaterprofilelegacy.h"
-
-#include "llavatarname.h"
-#include "llavatarnamecache.h"
-#include "llpanelprofilelegacy.h"
-
-LLFloaterProfileLegacy::LLFloaterProfileLegacy(LLSD const& key)
-:   LLFloater(key)
-{
-
-}
-
-LLFloaterProfileLegacy::~LLFloaterProfileLegacy()
-{
-    if (mAvatarNameCacheConnection.connected())
-        mAvatarNameCacheConnection.disconnect();
-}
-
-BOOL LLFloaterProfileLegacy::postBuild()
-{
-    mPanel = dynamic_cast<LLPanelProfileLegacy*>(getChild<LLPanel>("panel_profile_legacy_sidetray"));
-    return TRUE;
-}
-
-void LLFloaterProfileLegacy::onOpen(const LLSD& key)
-{
-    if (!key.has("avatar_id")) return;
-    const LLUUID av_id = key["avatar_id"].asUUID();
-
-    mAvatarNameCacheConnection = LLAvatarNameCache::get(av_id,
-        boost::bind(&LLFloaterProfileLegacy::onAvatarNameCache, this, _1, _2));
-
-    if (mPanel) { mPanel->onOpen(key); }
-}
-
-void LLFloaterProfileLegacy::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
-{
-    setTitle(av_name.getCompleteName());
-    mAvatarNameCacheConnection.disconnect();
-}
-
-LLPanel* LLFloaterProfileLegacy::expandTab(const std::string& name) const
-{
-    return mPanel != nullptr ? mPanel->expandTab(name) : nullptr;
-}
-
-LLPanel* LLFloaterProfileLegacy::getExpandedTab() const
-{
-    return mPanel != nullptr ? mPanel->getExpandedTab() : nullptr;
-}
diff --git a/indra/newview/llfloaterprofilelegacy.h b/indra/newview/llfloaterprofilelegacy.h
deleted file mode 100644
index 59c9381fd8640ba8bc56931e383b92220cdf4d79..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterprofilelegacy.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-* @file llfloaterlegacyprofile.h
-* @brief Floater that holds panel
-*
-* Copyright (c) 2017-2022, Cinder Roxley <cinder@sdf.org>
-*
-* Permission is hereby granted, free of charge, to any person or organization
-* obtaining a copy of the software and accompanying documentation covered by
-* this license (the "Software") to use, reproduce, display, distribute,
-* execute, and transmit the Software, and to prepare derivative works of the
-* Software, and to permit third-parties to whom the Software is furnished to
-* do so, all subject to the following:
-*
-* The copyright notices in the Software and this entire statement, including
-* the above license grant, this restriction and the following disclaimer,
-* must be included in all copies of the Software, in whole or in part, and
-* all derivative works of the Software, unless such copies or derivative
-* works are solely in the form of machine-executable object code generated by
-* a source language processor.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*/
-
-#ifndef LL_FLOATERLEGACYPROFILE_H
-#define LL_FLOATERLEGACYPROFILE_H
-
-#include "llfloater.h"
-
-class LLAvatarName;
-class LLPanelProfileLegacy;
-class LLPanelProfileLegacyTab;
-
-class LLFloaterProfileLegacy final : public LLFloater
-{
-public:
-    LLFloaterProfileLegacy(LLSD const& key);
-    BOOL postBuild() override;
-    void onOpen(const LLSD& key) override;
-
-    LLPanel* expandTab(const std::string& name) const;
-    LLPanel* getExpandedTab() const;
-
-private:
-    ~LLFloaterProfileLegacy() override;
-    void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
-
-    LLPanelProfileLegacy* mPanel;
-    boost::signals2::connection mAvatarNameCacheConnection;
-};
-
-#endif // LL_FLOATERLEGACYPROFILE_H
diff --git a/indra/newview/llfloaterpublishclassified.cpp b/indra/newview/llfloaterpublishclassified.cpp
deleted file mode 100644
index b19cc8f97e2f33d3549a67054591561219116a49..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterpublishclassified.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * @file llfloaterpublishclassified.cpp
- * @brief Publish classified floater
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llfloaterpublishclassified.h"
-
-LLFloaterPublishClassified::LLFloaterPublishClassified(const LLSD& key)
-    : LLFloater(key)
-{
-}
-
-BOOL LLFloaterPublishClassified::postBuild()
-{
-    LLFloater::postBuild();
-
-    childSetAction("publish_btn", boost::bind(&LLFloater::closeFloater, this, false));
-    childSetAction("cancel_btn", boost::bind(&LLFloater::closeFloater, this, false));
-
-    return TRUE;
-}
-
-void LLFloaterPublishClassified::setPrice(S32 price)
-{
-    getChild<LLUICtrl>("price_for_listing")->setValue(price);
-}
-
-S32 LLFloaterPublishClassified::getPrice()
-{
-    return getChild<LLUICtrl>("price_for_listing")->getValue().asInteger();
-}
-
-void LLFloaterPublishClassified::setPublishClickedCallback(const commit_signal_t::slot_type& cb)
-{
-    getChild<LLButton>("publish_btn")->setClickedCallback(cb);
-}
-
-void LLFloaterPublishClassified::setCancelClickedCallback(const commit_signal_t::slot_type& cb)
-{
-    getChild<LLButton>("cancel_btn")->setClickedCallback(cb);
-}
diff --git a/indra/newview/llfloaterpublishclassified.h b/indra/newview/llfloaterpublishclassified.h
deleted file mode 100644
index f5d79656119eb3c212d9fa0f5369f91188a2ff9b..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterpublishclassified.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * @file llfloaterpublishclassified.h
- * @brief Publish classified floater
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-
-#ifndef LL_PUBLISHCLASSIFIEDFLOATER_H
-#define LL_PUBLISHCLASSIFIEDFLOATER_H
-
-#include "llfloater.h"
-
-class LLFloaterPublishClassified final : public LLFloater
-{
-public:
-    LLFloaterPublishClassified(const LLSD& key);
-    ~LLFloaterPublishClassified() override = default;
-
-    BOOL postBuild() override;
-
-    void setPrice(S32 price);
-    S32 getPrice();
-
-    void setPublishClickedCallback(const commit_signal_t::slot_type& cb);
-    void setCancelClickedCallback(const commit_signal_t::slot_type& cb);
-};
-
-#endif // LL_PUBLISHCLASSIFIEDFLOATER_H
diff --git a/indra/newview/llfloaterwebprofile.cpp b/indra/newview/llfloaterwebprofile.cpp
deleted file mode 100644
index 05ec0028548ba3ba2c5c91034f428f46af3d6fa8..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterwebprofile.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * @file llfloaterwebprofile.cpp
- * @brief Web profile floater.
- *
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llfloaterwebprofile.h"
-
-#include "llviewercontrol.h"
-
-LLFloaterWebProfile::LLFloaterWebProfile(const Params& key) :
-    LLFloaterWebContent(key)
-{
-}
-
-void LLFloaterWebProfile::onOpen(const LLSD& key)
-{
-    Params p(key);
-    p.show_chrome(true);
-    p.window_class("web_content");
-    p.allow_address_entry(false);
-    p.trusted_content(true);
-    LLFloaterWebContent::onOpen(p);
-    applyPreferredRect();
-}
-
-// virtual
-void LLFloaterWebProfile::handleReshape(const LLRect& new_rect, bool by_user)
-{
-    LL_DEBUGS() << "handleReshape: " << new_rect << LL_ENDL;
-
-    if (by_user && !isMinimized())
-    {
-        LL_DEBUGS() << "Storing new rect" << LL_ENDL;
-        gSavedSettings.setRect("WebProfileFloaterRect", new_rect);
-    }
-
-    LLFloaterWebContent::handleReshape(new_rect, by_user);
-}
-
-LLFloater* LLFloaterWebProfile::create(const LLSD& key)
-{
-    LLFloaterWebContent::Params p(key);
-    preCreate(p);
-    return new LLFloaterWebProfile(p);
-}
-
-void LLFloaterWebProfile::applyPreferredRect()
-{
-    const LLRect preferred_rect = gSavedSettings.getRect("WebProfileFloaterRect");
-    LL_DEBUGS() << "Applying preferred rect: " << preferred_rect << LL_ENDL;
-
-    // Don't override position that may have been set by floater stacking code.
-    LLRect new_rect = getRect();
-    new_rect.setLeftTopAndSize(
-        new_rect.mLeft, new_rect.mTop,
-        preferred_rect.getWidth(), preferred_rect.getHeight());
-    setShape(new_rect);
-}
diff --git a/indra/newview/llfloaterwebprofile.h b/indra/newview/llfloaterwebprofile.h
deleted file mode 100644
index df9ebc892850144353c0c85da8849a664433da4e..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterwebprofile.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * @file llfloaterwebprofile.h
- * @brief Web profile floater.
- *
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLFLOATERWEBPROFILE_H
-#define LL_LLFLOATERWEBPROFILE_H
-
-#include "llfloaterwebcontent.h"
-#include "llviewermediaobserver.h"
-
-class LLMediaCtrl;
-
-/**
- * Displays avatar profile web page.
- */
-class LLFloaterWebProfile final
-:   public LLFloaterWebContent
-{
-    LOG_CLASS(LLFloaterWebProfile);
-public:
-    typedef LLFloaterWebContent::Params Params;
-
-    LLFloaterWebProfile(const Params& key);
-
-    /*virtual*/ void onOpen(const LLSD& key) override;
-    /*virtual*/ void handleReshape(const LLRect& new_rect, bool by_user = false) override;
-
-    static LLFloater* create(const LLSD& key);
-
-private:
-    void applyPreferredRect();
-};
-
-#endif  // LL_LLFLOATERWEBPROFILE_H
diff --git a/indra/newview/llhudeffectresetskeleton.cpp b/indra/newview/llhudeffectresetskeleton.cpp
index 8afa231fc53093f1490c7e6849c2e97e40caefa2..b7178349bdb7e11b3ac5d66277c6d434174c055a 100644
--- a/indra/newview/llhudeffectresetskeleton.cpp
+++ b/indra/newview/llhudeffectresetskeleton.cpp
@@ -1,25 +1,25 @@
-/** 
+/**
  * @file llhudeffectresetskeleton.cpp
  * @brief LLHUDEffectResetSkeleton class implementation
  *
  * $LicenseInfo:firstyear=2024&license=viewerlgpl$
  * Second Life Viewer Source Code
  * Copyright (C) 2024, Linden Research, Inc.
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation;
  * version 2.1 of the License only.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
+ *
  * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
@@ -41,8 +41,8 @@ const S32 PKT_SIZE = 17;
 //-----------------------------------------------------------------------------
 // LLHUDEffectResetSkeleton()
 //-----------------------------------------------------------------------------
-LLHUDEffectResetSkeleton::LLHUDEffectResetSkeleton(const U8 type) : 
-	LLHUDEffect(type)
+LLHUDEffectResetSkeleton::LLHUDEffectResetSkeleton(const U8 type) :
+    LLHUDEffect(type)
 {
 }
 
@@ -58,28 +58,28 @@ LLHUDEffectResetSkeleton::~LLHUDEffectResetSkeleton()
 //-----------------------------------------------------------------------------
 void LLHUDEffectResetSkeleton::packData(LLMessageSystem *mesgsys)
 {
-	// Pack the default data
-	LLHUDEffect::packData(mesgsys);
-
-	// Pack the type-specific data.  Uses a fun packed binary format.  Whee!
-	U8 packed_data[PKT_SIZE];
-	memset(packed_data, 0, PKT_SIZE);
-
-	// pack both target object and position
-	// position interpreted as offset if target object is non-null
-	if (mTargetObject)
-	{
-		htolememcpy(&(packed_data[TARGET_OBJECT]), mTargetObject->mID.mData, MVT_LLUUID, 16);
-	}
-	else
-	{
-		htolememcpy(&(packed_data[TARGET_OBJECT]), LLUUID::null.mData, MVT_LLUUID, 16);
-	}
-	
-	U8 resetAnimations = (U8)mResetAnimations;
-	htolememcpy(&(packed_data[RESET_ANIMATIONS]), &resetAnimations, MVT_U8, 1);
-
-	mesgsys->addBinaryDataFast(_PREHASH_TypeData, packed_data, PKT_SIZE);
+    // Pack the default data
+    LLHUDEffect::packData(mesgsys);
+
+    // Pack the type-specific data.  Uses a fun packed binary format.  Whee!
+    U8 packed_data[PKT_SIZE];
+    memset(packed_data, 0, PKT_SIZE);
+
+    // pack both target object and position
+    // position interpreted as offset if target object is non-null
+    if (mTargetObject)
+    {
+        htolememcpy(&(packed_data[TARGET_OBJECT]), mTargetObject->mID.mData, MVT_LLUUID, 16);
+    }
+    else
+    {
+        htolememcpy(&(packed_data[TARGET_OBJECT]), LLUUID::null.mData, MVT_LLUUID, 16);
+    }
+
+    U8 resetAnimations = (U8)mResetAnimations;
+    htolememcpy(&(packed_data[RESET_ANIMATIONS]), &resetAnimations, MVT_U8, 1);
+
+    mesgsys->addBinaryDataFast(_PREHASH_TypeData, packed_data, PKT_SIZE);
 }
 
 //-----------------------------------------------------------------------------
@@ -87,58 +87,58 @@ void LLHUDEffectResetSkeleton::packData(LLMessageSystem *mesgsys)
 //-----------------------------------------------------------------------------
 void LLHUDEffectResetSkeleton::unpackData(LLMessageSystem *mesgsys, S32 blocknum)
 {
-	LLVector3d new_target;
-	U8 packed_data[PKT_SIZE];
-
-	
-	LLHUDEffect::unpackData(mesgsys, blocknum);
-	
-	LLUUID source_id;
-	mesgsys->getUUIDFast(_PREHASH_Effect, _PREHASH_AgentID, source_id, blocknum);
-	
-	LLViewerObject *objp = gObjectList.findObject(source_id);
-	if (objp && objp->isAvatar())
-	{
-		setSourceObject(objp);
-	}
-	else
-	{
-		//LL_WARNS() << "Could not find source avatar for ResetSkeleton effect" << LL_ENDL;
-		return;
-	}
-	
-	S32 size = mesgsys->getSizeFast(_PREHASH_Effect, blocknum, _PREHASH_TypeData);
-	if (size != PKT_SIZE)
-	{
-		LL_WARNS() << "ResetSkeleton effect with bad size " << size << LL_ENDL;
-		return;
-	}
-	
-	mesgsys->getBinaryDataFast(_PREHASH_Effect, _PREHASH_TypeData, packed_data, PKT_SIZE, blocknum);
-	
-	LLUUID target_id;
-	htolememcpy(target_id.mData, &(packed_data[TARGET_OBJECT]), MVT_LLUUID, 16);
-
-	if (target_id.isNull())
-	{
-		target_id = source_id;
-	}
-	
-	objp = gObjectList.findObject(target_id);
-
-	if (objp)
-	{
-		setTargetObject(objp);
-	}
-	
-	U8 resetAnimations = 0;
-	htolememcpy(&resetAnimations, &(packed_data[RESET_ANIMATIONS]), MVT_U8, 1);
-	
-	// Pre-emptively assume this is going to be flags in the future.
-	// It isn't needed now, but this will assure that only bit 1 is set
-	mResetAnimations = resetAnimations & 1;
-	
-	update();
+    LLVector3d new_target;
+    U8 packed_data[PKT_SIZE];
+
+
+    LLHUDEffect::unpackData(mesgsys, blocknum);
+
+    LLUUID source_id;
+    mesgsys->getUUIDFast(_PREHASH_Effect, _PREHASH_AgentID, source_id, blocknum);
+
+    LLViewerObject *objp = gObjectList.findObject(source_id);
+    if (objp && objp->isAvatar())
+    {
+        setSourceObject(objp);
+    }
+    else
+    {
+        //LL_WARNS() << "Could not find source avatar for ResetSkeleton effect" << LL_ENDL;
+        return;
+    }
+
+    S32 size = mesgsys->getSizeFast(_PREHASH_Effect, blocknum, _PREHASH_TypeData);
+    if (size != PKT_SIZE)
+    {
+        LL_WARNS() << "ResetSkeleton effect with bad size " << size << LL_ENDL;
+        return;
+    }
+
+    mesgsys->getBinaryDataFast(_PREHASH_Effect, _PREHASH_TypeData, packed_data, PKT_SIZE, blocknum);
+
+    LLUUID target_id;
+    htolememcpy(target_id.mData, &(packed_data[TARGET_OBJECT]), MVT_LLUUID, 16);
+
+    if (target_id.isNull())
+    {
+        target_id = source_id;
+    }
+
+    objp = gObjectList.findObject(target_id);
+
+    if (objp)
+    {
+        setTargetObject(objp);
+    }
+
+    U8 resetAnimations = 0;
+    htolememcpy(&resetAnimations, &(packed_data[RESET_ANIMATIONS]), MVT_U8, 1);
+
+    // Pre-emptively assume this is going to be flags in the future.
+    // It isn't needed now, but this will assure that only bit 1 is set
+    mResetAnimations = resetAnimations & 1;
+
+    update();
 }
 
 //-----------------------------------------------------------------------------
@@ -146,7 +146,7 @@ void LLHUDEffectResetSkeleton::unpackData(LLMessageSystem *mesgsys, S32 blocknum
 //-----------------------------------------------------------------------------
 void LLHUDEffectResetSkeleton::setTargetObject(LLViewerObject *objp)
 {
-	mTargetObject = objp;
+    mTargetObject = objp;
 }
 
 
@@ -155,16 +155,16 @@ void LLHUDEffectResetSkeleton::setTargetObject(LLViewerObject *objp)
 //-----------------------------------------------------------------------------
 void LLHUDEffectResetSkeleton::markDead()
 {
-	LLHUDEffect::markDead();
+    LLHUDEffect::markDead();
 }
 
 void LLHUDEffectResetSkeleton::setSourceObject(LLViewerObject* objectp)
 {
-	// restrict source objects to avatars
-	if (objectp && objectp->isAvatar())
-	{
-		LLHUDEffect::setSourceObject(objectp);
-	}
+    // restrict source objects to avatars
+    if (objectp && objectp->isAvatar())
+    {
+        LLHUDEffect::setSourceObject(objectp);
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -172,36 +172,36 @@ void LLHUDEffectResetSkeleton::setSourceObject(LLViewerObject* objectp)
 //-----------------------------------------------------------------------------
 void LLHUDEffectResetSkeleton::update()
 {
-	// If the target object is dead, set the target object to NULL
-	if (mTargetObject.isNull() || mTargetObject->isDead())
-	{
-		markDead();
-		return;
-	}
-
-	if (mSourceObject.isNull() || mSourceObject->isDead())
-	{
-		markDead();
-		return;
-	}
-	
-	bool owned = false;
-	if(mTargetObject->isAnimatedObject())
-	{
-		owned = mTargetObject->mOwnerID == mSourceObject->getID();
-	}
-	else
-	{
-		owned = mTargetObject->getID() == mSourceObject->getID();
-	}
-
-	if (owned)
-	{
-		if (mTargetObject->isAvatar() || mTargetObject->isAnimatedObject())
-		{
-			((LLVOAvatar*)(LLViewerObject*)mTargetObject)->resetSkeleton(mResetAnimations);
-		}
-	}
-	
-	markDead();
+    // If the target object is dead, set the target object to NULL
+    if (mTargetObject.isNull() || mTargetObject->isDead())
+    {
+        markDead();
+        return;
+    }
+
+    if (mSourceObject.isNull() || mSourceObject->isDead())
+    {
+        markDead();
+        return;
+    }
+
+    bool owned = false;
+    if(mTargetObject->isAnimatedObject())
+    {
+        owned = mTargetObject->mOwnerID == mSourceObject->getID();
+    }
+    else
+    {
+        owned = mTargetObject->getID() == mSourceObject->getID();
+    }
+
+    if (owned)
+    {
+        if (mTargetObject->isAvatar() || mTargetObject->isAnimatedObject())
+        {
+            ((LLVOAvatar*)(LLViewerObject*)mTargetObject)->resetSkeleton(mResetAnimations);
+        }
+    }
+
+    markDead();
 }
diff --git a/indra/newview/llhudeffectresetskeleton.h b/indra/newview/llhudeffectresetskeleton.h
index ddac84165f39ec24521b1f8dc17e09920c24cd9e..39a613705481319a639700c194faafe8b5a750ee 100644
--- a/indra/newview/llhudeffectresetskeleton.h
+++ b/indra/newview/llhudeffectresetskeleton.h
@@ -1,25 +1,25 @@
-/** 
+/**
  * @file llhudeffectresetskeleton.h
  * @brief LLHUDEffectResetSkeleton class definition
  *
  * $LicenseInfo:firstyear=2024&license=viewerlgpl$
  * Second Life Viewer Source Code
  * Copyright (C) 2024, Linden Research, Inc.
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation;
  * version 2.1 of the License only.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
+ *
  * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
@@ -36,24 +36,24 @@ class LLVOAvatar;
 class LLHUDEffectResetSkeleton final : public LLHUDEffect
 {
 public:
-	friend class LLHUDObject;
+    friend class LLHUDObject;
 
-	/*virtual*/ void markDead();
-	/*virtual*/ void setSourceObject(LLViewerObject* objectp);
+    /*virtual*/ void markDead();
+    /*virtual*/ void setSourceObject(LLViewerObject* objectp);
 
-	void setTargetObject(LLViewerObject *objp);
-	void setResetAnimations(bool enable){ mResetAnimations = enable; };
+    void setTargetObject(LLViewerObject *objp);
+    void setResetAnimations(bool enable){ mResetAnimations = enable; };
 
 protected:
-	LLHUDEffectResetSkeleton(const U8 type);
-	~LLHUDEffectResetSkeleton();
+    LLHUDEffectResetSkeleton(const U8 type);
+    ~LLHUDEffectResetSkeleton();
 
-	/*virtual*/ void packData(LLMessageSystem *mesgsys);
-	/*virtual*/ void unpackData(LLMessageSystem *mesgsys, S32 blocknum);
+    /*virtual*/ void packData(LLMessageSystem *mesgsys);
+    /*virtual*/ void unpackData(LLMessageSystem *mesgsys, S32 blocknum);
 
-	void update();
+    void update();
 private:
-	bool						mResetAnimations;
+    bool                        mResetAnimations;
 };
 
 #endif // LL_LLHUDEFFECTRESETSKELETON_H
diff --git a/indra/newview/llpanelavatarlegacy.cpp b/indra/newview/llpanelavatarlegacy.cpp
deleted file mode 100644
index c0a943b6757998982ebb0869f80cc034782aa329..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelavatarlegacy.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * @file llpanelavatarlegacy.cpp
- * @brief LLPanelAvatar and related class implementations
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelavatarlegacy.h"
-
-#include "llagent.h"
-#include "llavataractions.h"
-#include "llcallingcard.h"
-
-#include "llscrollcontainer.h"
-#include "llavatariconctrl.h"
-#include "lltextbox.h"
-
-LLPanelProfileLegacyTab::LLPanelProfileLegacyTab()
-: LLPanel()
-, mAvatarId(LLUUID::null)
-{
-}
-
-LLPanelProfileLegacyTab::~LLPanelProfileLegacyTab()
-{
-    if(getAvatarId().notNull())
-    {
-        LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
-    }
-}
-
-void LLPanelProfileLegacyTab::setAvatarId(const LLUUID& id)
-{
-    if(id.notNull())
-    {
-        if(getAvatarId().notNull())
-        {
-            LLAvatarPropertiesProcessor::getInstance()->removeObserver(mAvatarId,this);
-        }
-        mAvatarId = id;
-        LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(),this);
-    }
-}
-
-void LLPanelProfileLegacyTab::onOpen(const LLSD& key)
-{
-    // Don't reset panel if we are opening it for same avatar.
-    if(getAvatarId() != key.asUUID())
-    {
-        resetControls();
-        resetData();
-
-        scrollToTop();
-    }
-
-    // Update data even if we are viewing same avatar profile as some data might been changed.
-    setAvatarId(key.asUUID());
-    updateData();
-    updateButtons();
-}
-
-void LLPanelProfileLegacyTab::scrollToTop() const
-{
-    LLScrollContainer* scrollContainer = findChild<LLScrollContainer>("profile_scroll");
-    if (scrollContainer)
-        scrollContainer->goToTop();
-}
-
-void LLPanelProfileLegacyTab::onMapButtonClick()
-{
-    LLAvatarActions::showOnMap(getAvatarId());
-}
-
-void LLPanelProfileLegacyTab::updateButtons()
-{
-    bool is_buddy_online = LLAvatarTracker::instance().isBuddyOnline(getAvatarId());
-
-    if(LLAvatarActions::isFriend(getAvatarId()))
-    {
-        getChildView("teleport")->setEnabled(is_buddy_online);
-    }
-    else
-    {
-        getChildView("teleport")->setEnabled(true);
-    }
-
-    bool enable_map_btn = (is_buddy_online && LLAvatarActions::isAgentMappable(getAvatarId())) || gAgent.isGodlike();
-    getChildView("show_on_map_btn")->setEnabled(enable_map_btn);
-}
diff --git a/indra/newview/llpanelavatarlegacy.h b/indra/newview/llpanelavatarlegacy.h
deleted file mode 100644
index ef442b16bc55eb98eaa4569d48bee9ff00d79830..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelavatarlegacy.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * @file llpanelavatarlegacy.h
- * @brief LLPanelAvatar and related class definitions
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLPANELAVATARLEGACY_H
-#define LL_LLPANELAVATARLEGACY_H
-
-#include "llpanel.h"
-#include "llavatarpropertiesprocessor.h"
-
-class LLComboBox;
-class LLLineEditor;
-
-/**
-* Base class for any Profile View.
-*/
-class LLPanelProfileLegacyTab
-    : public LLPanel
-    , public LLAvatarPropertiesObserver
-{
-public:
-
-    /**
-     * Sets avatar ID, sets panel as observer of avatar related info replies from server.
-     */
-    virtual void setAvatarId(const LLUUID& id);
-
-    /**
-     * Returns avatar ID.
-     */
-    virtual const LLUUID& getAvatarId() { return mAvatarId; }
-
-    /**
-     * Sends update data request to server.
-     */
-    virtual void updateData() = 0;
-
-    /**
-     * Clears panel data if viewing avatar info for first time and sends update data request.
-     */
-    void onOpen(const LLSD& key) override;
-
-    /**
-     * Profile tabs should close any opened panels here.
-     *
-     * Called from LLPanelProfile::onOpen() before opening new profile.
-     * See LLPanelPicks::onClosePanel for example. LLPanelPicks closes picture info panel
-     * before new profile is displayed, otherwise new profile will
-     * be hidden behind picture info panel.
-     */
-    virtual void onClosePanel() {}
-
-    /**
-     * Resets controls visibility, state, etc.
-     */
-    virtual void resetControls(){};
-
-    /**
-     * Clears all data received from server.
-     */
-    virtual void resetData(){};
-
-    ~LLPanelProfileLegacyTab() override;
-
-protected:
-
-    LLPanelProfileLegacyTab();
-
-    /**
-     * Scrolls panel to top when viewing avatar info for first time.
-     */
-    void scrollToTop() const;
-
-    virtual void onMapButtonClick();
-
-    virtual void updateButtons();
-
-private:
-
-    LLUUID mAvatarId;
-};
-
-#endif // LL_LLPANELAVATARLEGACY_H
diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
index b8b95fc711a8e3692df07413770a14e96d4958e0..11d12394592d427b73b3ff85c0432f98446ddee7 100644
--- a/indra/newview/llpanelclassified.cpp
+++ b/indra/newview/llpanelclassified.cpp
@@ -34,32 +34,21 @@
 
 #include "lldispatcher.h"
 #include "llfloaterreg.h"
-#include "llnotifications.h"
-#include "llnotificationsutil.h"
 #include "llparcel.h"
 
 #include "llagent.h"
 #include "llclassifiedflags.h"
-#include "llclassifiedinfo.h"
 #include "lliconctrl.h"
-#include "lllineeditor.h"
-#include "llcombobox.h"
-#include "lllogininstance.h"
 #include "lltexturectrl.h"
-#include "lltexteditor.h"
-#include "llviewerparcelmgr.h"
 #include "llfloaterworldmap.h"
 #include "llviewergenericmessage.h" // send_generic_message
 #include "llviewerregion.h"
-#include "llviewertexture.h"
-#include "lltrans.h"
 #include "llscrollcontainer.h"
-#include "llstatusbar.h"
 #include "llcorehttputil.h"
 
 //static
 LLPanelClassifiedInfo::panel_list_t LLPanelClassifiedInfo::sAllPanels;
-static LLPanelInjector<LLPanelClassifiedInfo> t_panel_classified_info("panel_classified_info");
+static LLPanelInjector<LLPanelClassifiedInfo> t_panel_panel_classified_info("panel_classified_info");
 
 // "classifiedclickthrough"
 // strings[0] = classified_id
@@ -93,8 +82,6 @@ static LLDispatchClassifiedClickThrough sClassifiedClickThrough;
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 
-static LLPanelInjector<LLPanelClassifiedInfo> t_classified_info("panel_classified_info");
-
 LLPanelClassifiedInfo::LLPanelClassifiedInfo()
  : LLPanel()
  , mInfoLoaded(false)
@@ -116,10 +103,6 @@ LLPanelClassifiedInfo::LLPanelClassifiedInfo()
 
 LLPanelClassifiedInfo::~LLPanelClassifiedInfo()
 {
-    if (getAvatarId().notNull())
-    {
-        LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
-    }
     sAllPanels.remove(this);
 
     if (getAvatarId().notNull())
@@ -128,17 +111,8 @@ LLPanelClassifiedInfo::~LLPanelClassifiedInfo()
     }
 }
 
-// static
-LLPanelClassifiedInfo* LLPanelClassifiedInfo::create()
-{
-    LLPanelClassifiedInfo* panel = new LLPanelClassifiedInfo();
-    panel->buildFromFile("panel_classified_info.xml");
-    return panel;
-}
-
 BOOL LLPanelClassifiedInfo::postBuild()
 {
-    childSetAction("back_btn", boost::bind(&LLPanelClassifiedInfo::onExit, this));
     childSetAction("show_on_map_btn", boost::bind(&LLPanelClassifiedInfo::onMapClick, this));
     childSetAction("teleport_btn", boost::bind(&LLPanelClassifiedInfo::onTeleportClick, this));
 
@@ -154,16 +128,6 @@ BOOL LLPanelClassifiedInfo::postBuild()
     return TRUE;
 }
 
-void LLPanelClassifiedInfo::setExitCallback(const commit_callback_t& cb)
-{
-    getChild<LLButton>("back_btn")->setClickedCallback(cb);
-}
-
-void LLPanelClassifiedInfo::setEditClassifiedCallback(const commit_callback_t& cb)
-{
-    getChild<LLButton>("edit_btn")->setClickedCallback(cb);
-}
-
 void LLPanelClassifiedInfo::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */)
 {
     LLPanel::reshape(width, height, called_from_parent);
@@ -192,7 +156,7 @@ void LLPanelClassifiedInfo::onOpen(const LLSD& key)
     LLUUID avatar_id = key["classified_creator_id"];
     if(avatar_id.isNull())
     {
-        //return;
+        return;
     }
 
     if(getAvatarId().notNull())
@@ -216,7 +180,6 @@ void LLPanelClassifiedInfo::onOpen(const LLSD& key)
 
     LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
     LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId());
-
     gGenericDispatcher.addHandler("classifiedclickthrough", &sClassifiedClickThrough);
 
     if (gAgent.getRegion())
@@ -296,11 +259,9 @@ void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType t
             LLStringUtil::format(date_str, LLSD().with("datetime", (S32) c_info->creation_date));
             getChild<LLUICtrl>("creation_date")->setValue(date_str);
 
-            date_str = date_fmt;
-            LLStringUtil::format(date_str, LLSD().with("datetime", (S32) c_info->expiration_date));
-            getChild<LLUICtrl>("expiration_date")->setValue(date_str);
-
             setInfoLoaded(true);
+
+            LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
         }
     }
 }
@@ -411,8 +372,9 @@ void LLPanelClassifiedInfo::setClickThrough(
             << teleport << ", " << map << ", " << profile << "] ("
             << (from_new_table ? "new" : "old") << ")" << LL_ENDL;
 
-    for (auto self : sAllPanels)
+    for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
     {
+        LLPanelClassifiedInfo* self = *iter;
         if (self->getClassifiedId() != classified_id)
         {
             continue;
@@ -604,551 +566,4 @@ void LLPanelClassifiedInfo::onTeleportClick()
     }
 }
 
-void LLPanelClassifiedInfo::onExit()
-{
-    LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
-    gGenericDispatcher.addHandler("classifiedclickthrough", nullptr); // deregister our handler
-}
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-
-static const S32 CB_ITEM_MATURE = 0;
-static const S32 CB_ITEM_PG    = 1;
-
-LLPanelClassifiedEdit::LLPanelClassifiedEdit()
- : LLPanelClassifiedInfo()
- , mIsNew(false)
- , mIsNewWithErrors(false)
- , mCanClose(false)
- , mPublishFloater(nullptr)
-{
-}
-
-LLPanelClassifiedEdit::~LLPanelClassifiedEdit()
-{
-}
-
-//static
-LLPanelClassifiedEdit* LLPanelClassifiedEdit::create()
-{
-    LLPanelClassifiedEdit* panel = new LLPanelClassifiedEdit();
-    panel->buildFromFile("panel_edit_classified.xml");
-    return panel;
-}
-
-BOOL LLPanelClassifiedEdit::postBuild()
-{
-    LLPanelClassifiedInfo::postBuild();
-
-    LLUICtrl* edit_icon = getChild<LLUICtrl>("edit_icon");
-    mSnapshotCtrl->setMouseEnterCallback(boost::bind(&LLPanelClassifiedEdit::onTexturePickerMouseEnter, this, edit_icon));
-    mSnapshotCtrl->setMouseLeaveCallback(boost::bind(&LLPanelClassifiedEdit::onTexturePickerMouseLeave, this, edit_icon));
-    edit_icon->setVisible(false);
-
-    LLLineEditor* line_edit = getChild<LLLineEditor>("classified_name");
-    line_edit->setKeystrokeCallback(boost::bind(&LLPanelClassifiedEdit::onChange, this), nullptr);
-
-    LLTextEditor* text_edit = getChild<LLTextEditor>("classified_desc");
-    text_edit->setKeystrokeCallback(boost::bind(&LLPanelClassifiedEdit::onChange, this));
-
-    LLComboBox* combobox = getChild<LLComboBox>( "category");
-    LLClassifiedInfo::cat_map::iterator iter;
-    for (iter = LLClassifiedInfo::sCategories.begin();
-        iter != LLClassifiedInfo::sCategories.end();
-        iter++)
-    {
-        combobox->add(LLTrans::getString(iter->second));
-    }
-
-    combobox->setCommitCallback(boost::bind(&LLPanelClassifiedEdit::onChange, this));
-
-    childSetCommitCallback("content_type", boost::bind(&LLPanelClassifiedEdit::onChange, this), nullptr);
-    childSetCommitCallback("price_for_listing", boost::bind(&LLPanelClassifiedEdit::onChange, this), nullptr);
-    childSetCommitCallback("auto_renew", boost::bind(&LLPanelClassifiedEdit::onChange, this), nullptr);
-
-    childSetAction("save_changes_btn", boost::bind(&LLPanelClassifiedEdit::onSaveClick, this));
-    childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelClassifiedEdit::onSetLocationClick, this));
-
-    mSnapshotCtrl->setOnSelectCallback(boost::bind(&LLPanelClassifiedEdit::onTextureSelected, this));
-
-    return TRUE;
-}
-
-void LLPanelClassifiedEdit::fillIn(const LLSD& key)
-{
-    setAvatarId(gAgent.getID());
-
-    if(key.isUndefined())
-    {
-        setPosGlobal(gAgent.getPositionGlobal());
-
-        LLUUID snapshot_id = LLUUID::null;
-        std::string desc;
-        LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
-
-        if(parcel)
-        {
-            desc = parcel->getDesc();
-            snapshot_id = parcel->getSnapshotID();
-        }
-
-        std::string region_name = LLTrans::getString("ClassifiedUpdateAfterPublish");
-        LLViewerRegion* region = gAgent.getRegion();
-        if (region)
-        {
-            region_name = region->getName();
-        }
-
-        getChild<LLUICtrl>("classified_name")->setValue(makeClassifiedName());
-        getChild<LLUICtrl>("classified_desc")->setValue(desc);
-        setSnapshotId(snapshot_id);
-        setClassifiedLocation(createLocationText(getLocationNotice(), region_name, getPosGlobal()));
-        // server will set valid parcel id
-        setParcelId(LLUUID::null);
-    }
-    else
-    {
-        setClassifiedId(key["classified_id"]);
-        setClassifiedName(key["name"]);
-        setDescription(key["desc"]);
-        setSnapshotId(key["snapshot_id"]);
-        setCategory((U32)key["category"].asInteger());
-        setContentType((U32)key["content_type"].asInteger());
-        setClassifiedLocation(key["location_text"]);
-        getChild<LLUICtrl>("auto_renew")->setValue(key["auto_renew"]);
-        getChild<LLUICtrl>("price_for_listing")->setValue(key["price_for_listing"].asInteger());
-    }
-}
-
-void LLPanelClassifiedEdit::onOpen(const LLSD& key)
-{
-    mIsNew = key.isUndefined();
-
-    scrollToTop();
-
-    // classified is not created yet
-    bool is_new = isNew() || isNewWithErrors();
-
-    if(is_new)
-    {
-        resetData();
-        resetControls();
-
-        fillIn(key);
-
-        if(isNew())
-        {
-            LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
-        }
-    }
-    else
-    {
-        LLPanelClassifiedInfo::onOpen(key);
-    }
-
-    std::string save_btn_label = is_new ? getString("publish_label") : getString("save_label");
-    getChild<LLUICtrl>("save_changes_btn")->setLabelArg("[LABEL]", save_btn_label);
-
-    enableVerbs(is_new);
-    enableEditing(is_new);
-    showEditing(!is_new);
-    resetDirty();
-    setInfoLoaded(false);
-}
-
-void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType type)
-{
-    if(APT_CLASSIFIED_INFO == type)
-    {
-        LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data);
-        if(c_info && getClassifiedId() == c_info->classified_id)
-        {
-            // see LLPanelClassifiedEdit::sendUpdate() for notes
-            mIsNewWithErrors = false;
-            // for just created classified - panel will probably be closed when we get here.
-            if(!getVisible())
-            {
-                return;
-            }
-
-            enableEditing(true);
-
-            setClassifiedName(c_info->name);
-            setDescription(c_info->description);
-            setSnapshotId(c_info->snapshot_id);
-            setParcelId(c_info->parcel_id);
-            setPosGlobal(c_info->pos_global);
-
-            setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global));
-            // *HACK see LLPanelClassifiedEdit::sendUpdate()
-            setCategory(c_info->category - 1);
-
-            bool mature = is_cf_mature(c_info->flags);
-            bool auto_renew = is_cf_auto_renew(c_info->flags);
-
-            setContentType(mature ? CB_ITEM_MATURE : CB_ITEM_PG);
-            getChild<LLUICtrl>("auto_renew")->setValue(auto_renew);
-            getChild<LLUICtrl>("price_for_listing")->setValue(c_info->price_for_listing);
-            getChildView("price_for_listing")->setEnabled(isNew());
-
-            resetDirty();
-            setInfoLoaded(true);
-            enableVerbs(false);
-
-            // for just created classified - in case user opened edit panel before processProperties() callback
-            getChild<LLUICtrl>("save_changes_btn")->setLabelArg("[LABEL]", getString("save_label"));
-        }
-    }
-}
-
-BOOL LLPanelClassifiedEdit::isDirty() const
-{
-    if(mIsNew)
-    {
-        return TRUE;
-    }
-
-    BOOL dirty = false;
-
-    dirty |= LLPanelClassifiedInfo::isDirty();
-    dirty |= getChild<LLUICtrl>("classified_snapshot")->isDirty();
-    dirty |= getChild<LLUICtrl>("classified_name")->isDirty();
-    dirty |= getChild<LLUICtrl>("classified_desc")->isDirty();
-    dirty |= getChild<LLUICtrl>("category")->isDirty();
-    dirty |= getChild<LLUICtrl>("content_type")->isDirty();
-    dirty |= getChild<LLUICtrl>("auto_renew")->isDirty();
-    dirty |= getChild<LLUICtrl>("price_for_listing")->isDirty();
-
-    return dirty;
-}
-
-void LLPanelClassifiedEdit::resetDirty()
-{
-    LLPanelClassifiedInfo::resetDirty();
-    getChild<LLUICtrl>("classified_snapshot")->resetDirty();
-    getChild<LLUICtrl>("classified_name")->resetDirty();
-
-    LLTextEditor* desc = getChild<LLTextEditor>("classified_desc");
-    // call blockUndo() to really reset dirty(and make isDirty work as intended)
-    desc->blockUndo();
-    desc->resetDirty();
-
-    getChild<LLUICtrl>("category")->resetDirty();
-    getChild<LLUICtrl>("content_type")->resetDirty();
-    getChild<LLUICtrl>("auto_renew")->resetDirty();
-    getChild<LLUICtrl>("price_for_listing")->resetDirty();
-}
-
-void LLPanelClassifiedEdit::setSaveCallback(const commit_signal_t::slot_type& cb)
-{
-    mSaveButtonClickedSignal.connect(cb);
-}
-
-void LLPanelClassifiedEdit::setCancelCallback(const commit_signal_t::slot_type& cb)
-{
-    getChild<LLButton>("cancel_btn")->setClickedCallback(cb);
-}
-
-void LLPanelClassifiedEdit::resetControls()
-{
-    LLPanelClassifiedInfo::resetControls();
-
-    getChild<LLComboBox>("category")->setCurrentByIndex(0);
-    getChild<LLComboBox>("content_type")->setCurrentByIndex(0);
-    getChild<LLUICtrl>("auto_renew")->setValue(false);
-    if (LLLoginInstance::getInstance()->hasResponse("classified_fee"))
-    {
-        getChild<LLUICtrl>("price_for_listing")->setValue(LLLoginInstance::getInstance()->
-                                                          getResponse("classified_fee").asInteger());
-    }
-    else
-    {
-        getChild<LLUICtrl>("price_for_listing")->setValue(MINIMUM_PRICE_FOR_LISTING);
-    }
-    getChildView("price_for_listing")->setEnabled(TRUE);
-}
-
-bool LLPanelClassifiedEdit::canClose()
-{
-    return mCanClose;
-}
-
-void LLPanelClassifiedEdit::draw()
-{
-    LLPanel::draw();
-
-    // Need to re-stretch on every draw because LLTextureCtrl::onSelectCallback
-    // does not trigger callbacks when user navigates through images.
-    stretchSnapshot();
-}
-
-void LLPanelClassifiedEdit::stretchSnapshot()
-{
-    LLPanelClassifiedInfo::stretchSnapshot();
-
-    getChild<LLUICtrl>("edit_icon")->setShape(mSnapshotCtrl->getRect());
-}
-
-U32 LLPanelClassifiedEdit::getContentType()
-{
-    LLComboBox* ct_cb = getChild<LLComboBox>("content_type");
-    return ct_cb->getCurrentIndex();
-}
-
-void LLPanelClassifiedEdit::setContentType(U32 content_type)
-{
-    LLComboBox* ct_cb = getChild<LLComboBox>("content_type");
-    ct_cb->setCurrentByIndex(content_type);
-    ct_cb->resetDirty();
-}
-
-bool LLPanelClassifiedEdit::getAutoRenew()
-{
-    return getChild<LLUICtrl>("auto_renew")->getValue().asBoolean();
-}
-
-void LLPanelClassifiedEdit::sendUpdate()
-{
-    LLAvatarClassifiedInfo c_data;
-
-    if(getClassifiedId().isNull())
-    {
-        setClassifiedId(LLUUID::generateNewID());
-    }
-
-    c_data.agent_id = gAgent.getID();
-    c_data.classified_id = getClassifiedId();
-    // *HACK
-    // Categories on server start with 1 while combo-box index starts with 0
-    c_data.category = getCategory() + 1;
-    c_data.name = getClassifiedName();
-    c_data.description = getDescription();
-    c_data.parcel_id = getParcelId();
-    c_data.snapshot_id = getSnapshotId();
-    c_data.pos_global = getPosGlobal();
-    c_data.flags = getFlags();
-    c_data.price_for_listing = getPriceForListing();
-
-    LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoUpdate(&c_data);
-
-    if(isNew())
-    {
-        // Lets assume there will be some error.
-        // Successful sendClassifiedInfoUpdate will trigger processProperties and
-        // let us know there was no error.
-        mIsNewWithErrors = true;
-    }
-}
-
-U32 LLPanelClassifiedEdit::getCategory()
-{
-    LLComboBox* cat_cb = getChild<LLComboBox>("category");
-    return cat_cb->getCurrentIndex();
-}
-
-void LLPanelClassifiedEdit::setCategory(U32 category)
-{
-    LLComboBox* cat_cb = getChild<LLComboBox>("category");
-    cat_cb->setCurrentByIndex(category);
-    cat_cb->resetDirty();
-}
-
-U8 LLPanelClassifiedEdit::getFlags()
-{
-    bool auto_renew = getChild<LLUICtrl>("auto_renew")->getValue().asBoolean();
-
-    LLComboBox* content_cb = getChild<LLComboBox>("content_type");
-    bool mature = content_cb->getCurrentIndex() == CB_ITEM_MATURE;
-
-    return pack_classified_flags_request(auto_renew, false, mature, false);
-}
-
-void LLPanelClassifiedEdit::enableVerbs(bool enable)
-{
-    getChildView("save_changes_btn")->setEnabled(enable);
-}
-
-void LLPanelClassifiedEdit::enableEditing(bool enable)
-{
-    getChildView("classified_snapshot")->setEnabled(enable);
-    getChildView("classified_name")->setEnabled(enable);
-    getChildView("classified_desc")->setEnabled(enable);
-    getChildView("set_to_curr_location_btn")->setEnabled(enable);
-    getChildView("category")->setEnabled(enable);
-    getChildView("content_type")->setEnabled(enable);
-    getChildView("price_for_listing")->setEnabled(enable);
-    getChildView("auto_renew")->setEnabled(enable);
-}
-
-void LLPanelClassifiedEdit::showEditing(bool show)
-{
-    getChildView("price_for_listing_label")->setVisible( show);
-    getChildView("price_for_listing")->setVisible( show);
-}
-
-std::string LLPanelClassifiedEdit::makeClassifiedName()
-{
-    std::string name;
-
-    LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
-    if(parcel)
-    {
-        name = parcel->getName();
-    }
-
-    if(!name.empty())
-    {
-        return name;
-    }
-
-    LLViewerRegion* region = gAgent.getRegion();
-    if(region)
-    {
-        name = region->getName();
-    }
-
-    return name;
-}
-
-S32 LLPanelClassifiedEdit::getPriceForListing()
-{
-    return getChild<LLUICtrl>("price_for_listing")->getValue().asInteger();
-}
-
-void LLPanelClassifiedEdit::setPriceForListing(S32 price)
-{
-    getChild<LLUICtrl>("price_for_listing")->setValue(price);
-}
-
-void LLPanelClassifiedEdit::onSetLocationClick()
-{
-    setPosGlobal(gAgent.getPositionGlobal());
-    setParcelId(LLUUID::null);
-
-    std::string region_name = LLTrans::getString("ClassifiedUpdateAfterPublish");
-    LLViewerRegion* region = gAgent.getRegion();
-    if (region)
-    {
-        region_name = region->getName();
-    }
-
-    setClassifiedLocation(createLocationText(getLocationNotice(), region_name, getPosGlobal()));
-
-    // mark classified as dirty
-    setValue(LLSD());
-
-    onChange();
-}
-
-void LLPanelClassifiedEdit::onChange()
-{
-    enableVerbs(isDirty());
-}
-
-void LLPanelClassifiedEdit::onSaveClick()
-{
-    mCanClose = false;
-
-    if(!isValidName())
-    {
-        notifyInvalidName();
-        return;
-    }
-    if(isNew() || isNewWithErrors())
-    {
-        if(gStatusBar->getBalance() < getPriceForListing())
-        {
-            LLNotificationsUtil::add("ClassifiedInsufficientFunds");
-            return;
-        }
-
-        mPublishFloater = LLFloaterReg::findTypedInstance<LLFloaterPublishClassified>(
-            "publish_classified", LLSD());
-
-        if(!mPublishFloater)
-        {
-            mPublishFloater = LLFloaterReg::getTypedInstance<LLFloaterPublishClassified>(
-                "publish_classified", LLSD());
-
-            mPublishFloater->setPublishClickedCallback(boost::bind
-                (&LLPanelClassifiedEdit::onPublishFloaterPublishClicked, this));
-        }
-
-        // set spinner value before it has focus or value wont be set
-        mPublishFloater->setPrice(getPriceForListing());
-        mPublishFloater->openFloater(mPublishFloater->getKey());
-        mPublishFloater->center();
-    }
-    else
-    {
-        doSave();
-    }
-}
-
-void LLPanelClassifiedEdit::doSave()
-{
-    mCanClose = true;
-    sendUpdate();
-    resetDirty();
-
-    mSaveButtonClickedSignal(this, LLSD());
-}
-
-void LLPanelClassifiedEdit::onPublishFloaterPublishClicked()
-{
-    setPriceForListing(mPublishFloater->getPrice());
-
-    doSave();
-}
-
-std::string LLPanelClassifiedEdit::getLocationNotice()
-{
-    static std::string location_notice = getString("location_notice");
-    return location_notice;
-}
-
-bool LLPanelClassifiedEdit::isValidName()
-{
-    std::string name = getClassifiedName();
-    if (name.empty())
-    {
-        return false;
-    }
-    if (!isalnum(name[0]))
-    {
-        return false;
-    }
-
-    return true;
-}
-
-void LLPanelClassifiedEdit::notifyInvalidName()
-{
-    std::string name = getClassifiedName();
-    if (name.empty())
-    {
-        LLNotificationsUtil::add("BlankClassifiedName");
-    }
-    else if (!isalnum(name[0]))
-    {
-        LLNotificationsUtil::add("ClassifiedMustBeAlphanumeric");
-    }
-}
-
-void LLPanelClassifiedEdit::onTexturePickerMouseEnter(LLUICtrl* ctrl)
-{
-    ctrl->setVisible(TRUE);
-}
-
-void LLPanelClassifiedEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
-{
-    ctrl->setVisible(FALSE);
-}
-
-void LLPanelClassifiedEdit::onTextureSelected()
-{
-    setSnapshotId(mSnapshotCtrl->getValue().asUUID());
-    onChange();
-}
+//EOF
diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h
index e742328df25ebabe47957dd76cb5e5f1b5c104bf..88346df6c332825e89cf8c907f48fa5014c47495 100644
--- a/indra/newview/llpanelclassified.h
+++ b/indra/newview/llpanelclassified.h
@@ -1,10 +1,10 @@
 /**
  * @file llpanelclassified.h
- * @brief LLPanelClassified class definition
+ * @brief LLPanelClassifiedInfo class definition
  *
- * $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * $LicenseInfo:firstyear=2021&license=viewerlgpl$
  * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2021, Linden Research, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -27,34 +27,31 @@
 // Display of a classified used both for the global view in the
 // Find directory, and also for each individual user's classified in their
 // profile.
-
 #ifndef LL_LLPANELCLASSIFIED_H
 #define LL_LLPANELCLASSIFIED_H
 
 #include "llavatarpropertiesprocessor.h"
-#include "llfloaterpublishclassified.h"
+#include "llclassifiedinfo.h"
+#include "llfloater.h"
 #include "llpanel.h"
 #include "llrect.h"
 
 class LLScrollContainer;
 class LLTextureCtrl;
-class LLUICtrl;
 
 class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
 {
     LOG_CLASS(LLPanelClassifiedInfo);
 public:
 
-    static LLPanelClassifiedInfo* create();
-
     LLPanelClassifiedInfo();
     virtual ~LLPanelClassifiedInfo();
 
-    /*virtual*/ void onOpen(const LLSD& key) override;
+    /*virtual*/ void onOpen(const LLSD& key);
 
-    /*virtual*/ BOOL postBuild() override;
+    /*virtual*/ BOOL postBuild();
 
-    /*virtual*/ void processProperties(void* data, EAvatarProcessorType type) override;
+    /*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
 
     void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; }
 
@@ -115,13 +112,9 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
             const LLVector3d& global_pos,
             const std::string& sim_name);
 
-    void setExitCallback(const commit_callback_t& cb);
-
-    void setEditClassifiedCallback(const commit_callback_t& cb);
-
-    /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE) override;
+    /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
 
-    /*virtual*/ void draw() override;
+    /*virtual*/ void draw();
 
 protected:
 
@@ -143,7 +136,6 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
 
     void onMapClick();
     void onTeleportClick();
-    void onExit();
 
     bool mSnapshotStreched;
     LLRect mSnapshotRect;
@@ -180,100 +172,4 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
     static panel_list_t sAllPanels;
 };
 
-class LLPanelClassifiedEdit : public LLPanelClassifiedInfo
-{
-    LOG_CLASS(LLPanelClassifiedEdit);
-public:
-
-    static LLPanelClassifiedEdit* create();
-
-    virtual ~LLPanelClassifiedEdit();
-
-    /*virtual*/ BOOL postBuild() override;
-
-    void fillIn(const LLSD& key);
-
-    /*virtual*/ void onOpen(const LLSD& key) override;
-
-    /*virtual*/ void processProperties(void* data, EAvatarProcessorType type) override;
-
-    /*virtual*/ BOOL isDirty() const override;
-
-    /*virtual*/ void resetDirty() override;
-
-    void setSaveCallback(const commit_signal_t::slot_type& cb);
-
-    void setCancelCallback(const commit_signal_t::slot_type& cb);
-
-    /*virtual*/ void resetControls() override;
-
-    bool isNew() { return mIsNew; }
-
-    bool isNewWithErrors() { return mIsNewWithErrors; }
-
-    bool canClose();
-
-    void draw() override;
-
-    void stretchSnapshot();
-
-    U32 getCategory();
-
-    void setCategory(U32 category);
-
-    U32 getContentType();
-
-    void setContentType(U32 content_type);
-
-    bool getAutoRenew();
-
-    S32 getPriceForListing();
-
-protected:
-
-    LLPanelClassifiedEdit();
-
-    void sendUpdate();
-
-    void enableVerbs(bool enable);
-
-    void enableEditing(bool enable);
-
-    void showEditing(bool show);
-
-    std::string makeClassifiedName();
-
-    void setPriceForListing(S32 price);
-
-    U8 getFlags();
-
-    std::string getLocationNotice();
-
-    bool isValidName();
-
-    void notifyInvalidName();
-
-    void onSetLocationClick();
-    void onChange();
-    void onSaveClick();
-
-    void doSave();
-
-    void onPublishFloaterPublishClicked();
-
-    void onTexturePickerMouseEnter(LLUICtrl* ctrl);
-    void onTexturePickerMouseLeave(LLUICtrl* ctrl);
-
-    void onTextureSelected();
-
-private:
-    bool mIsNew;
-    bool mIsNewWithErrors;
-    bool mCanClose;
-
-    LLFloaterPublishClassified* mPublishFloater;
-
-    commit_signal_t mSaveButtonClickedSignal;
-};
-
 #endif // LL_LLPANELCLASSIFIED_H
diff --git a/indra/newview/llpaneleventinfo.cpp b/indra/newview/llpaneleventinfo.cpp
deleted file mode 100644
index d9ffc02e42d418449d411fa0f762fc939f710d74..0000000000000000000000000000000000000000
--- a/indra/newview/llpaneleventinfo.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * @file llpaneleventinfo.cpp
- * @brief Event info panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpaneleventinfo.h"
-
-#include "llbutton.h"
-#include "lleventflags.h"
-#include "lliconctrl.h"
-#include "llfloaterreg.h"
-#include "llresmgr.h"
-#include "llslurl.h"
-#include "lltrans.h"
-
-#include "llagent.h"
-#include "llfloaterworldmap.h"
-#include "llviewercontrol.h"
-
-static LLPanelInjector<LLPanelEventInfo> t_event_info("panel_event_info");
-
-LLPanelEventInfo::LLPanelEventInfo()
-:   LLPanel()
-,   mEvent()
-,   mEventID(0)
-{
-    mEventNotifierConnection = gEventNotifier.setNewEventCallback(boost::bind(&LLPanelEventInfo::processEventReply, this, _1));
-}
-
-LLPanelEventInfo::~LLPanelEventInfo()
-{
-    if (mEventNotifierConnection.connected())
-    {
-        mEventNotifierConnection.disconnect();
-    }
-}
-
-BOOL LLPanelEventInfo::postBuild()
-{
-    childSetAction("teleport_btn", boost::bind(&LLPanelEventInfo::onBtnTeleport, this));
-    childSetAction("show_on_map_btn", boost::bind(&LLPanelEventInfo::onBtnMap, this));
-    childSetAction("remind_btn", boost::bind(&LLPanelEventInfo::onBtnRemind, this));
-    return TRUE;
-}
-
-void LLPanelEventInfo::onOpen(const LLSD& key)
-{
-    U32 id(key.asInteger());
-    setEventID(id);
-
-    gEventNotifier.add(getEventID());
-}
-
-// *TODO: localize this bitch.
-std::string LLPanelEventInfo::formatFromMinutes(U32 time)
-{
-    U32 hours = time / 60;
-    U32 minutes = time % 60;
-
-    std::ostringstream output;
-    if (hours)
-        output << hours << " " << getString("hours") << " ";
-    if (minutes)
-        output << minutes << " " << getString("minutes");
-    return output.str();
-}
-
-bool LLPanelEventInfo::processEventReply(const LLEventStruct& event)
-{
-    if (event.eventId != getEventID()) return false; // no
-    mEvent = event;
-    getChild<LLUICtrl>("name")->setValue(mEvent.eventName);
-    getChild<LLUICtrl>("desc")->setValue(mEvent.desc);
-    getChild<LLUICtrl>("duration")->setValue(formatFromMinutes(mEvent.duration));
-    getChild<LLUICtrl>("host")->setValue(LLSLURL("agent", LLUUID(mEvent.creator), "inspect").getSLURLString());
-    getChild<LLUICtrl>("time")->setValue(mEvent.eventDateStr);
-    // *TODO: Prettier
-    //std::string time;
-    //LLStringUtil::formatDatetime(time, "%a %d %b %Y %H:%M", "slt", mEvent.eventEpoch);
-    //getChild<LLUICtrl>("time")->setValue(time);
-
-    // *TODO: Add translation strings
-    //getChild<LLUICtrl>("category")->setValue(LLTrans::getString(mEvent.category));
-    getChild<LLUICtrl>("category")->setValue(mEvent.category);
-    getChild<LLUICtrl>("cover")->setValue(mEvent.cover
-                                          ? LLResMgr::getInstance()->getMonetaryString(mEvent.amount)
-                                          : getString("free"));
-    bool mature = (mEvent.flags & EVENT_FLAG_MATURE);
-    getChild<LLUICtrl>("content_type")->setValue(getString(mature ? "type_mature" : "type_pg"));
-    getChild<LLIconCtrl>("content_type_moderate")->setVisible(mature);
-    getChild<LLIconCtrl>("content_type_general")->setVisible(!mature);
-    getChild<LLUICtrl>("location")->setValue(LLSLURL(mEvent.simName, mEvent.globalPos).getSLURLString());
-    getChild<LLButton>("remind_btn")->setLabel(getString(gEventNotifier.hasNotification(mEvent.eventId)
-                                                         ? "no_reminder"
-                                                         : "reminder"));
-    return true;
-}
-
-void LLPanelEventInfo::onBtnTeleport()
-{
-    if (!mEvent.globalPos.isExactlyZero())
-    {
-        gAgent.teleportViaLocation(mEvent.globalPos);
-        LLFloaterWorldMap* worldmap = LLFloaterWorldMap::getInstance();
-        if (worldmap)
-            worldmap->trackLocation(mEvent.globalPos);
-    }
-}
-
-void LLPanelEventInfo::onBtnMap()
-{
-    LLFloaterWorldMap* worldmap = LLFloaterWorldMap::getInstance();
-    if (!mEvent.globalPos.isExactlyZero() && worldmap)
-    {
-        worldmap->trackLocation(mEvent.globalPos);
-        LLFloaterReg::showInstance("world_map", "center");
-    }
-}
-
-void LLPanelEventInfo::onBtnRemind()
-{
-    if (gEventNotifier.hasNotification(mEvent.eventId))
-    {
-        gEventNotifier.remove(mEvent.eventId);
-        getChild<LLButton>("remind_btn")->setLabel(getString("reminder"));
-    }
-    else
-    {
-        gEventNotifier.add(mEvent.eventId);
-        getChild<LLButton>("remind_btn")->setLabel(getString("no_reminder"));
-    }
-}
diff --git a/indra/newview/llpaneleventinfo.h b/indra/newview/llpaneleventinfo.h
deleted file mode 100644
index 3852dba91ed9248bead9ce789839f1bca11d9860..0000000000000000000000000000000000000000
--- a/indra/newview/llpaneleventinfo.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * @file llpaneleventinfo.cpp
- * @brief Event info panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELEVENTINFO_H
-#define LL_PANELEVENTINFO_H
-
-#include "llpanel.h"
-#include "lleventnotifier.h"
-
-class LLPanelEventInfo : public LLPanel
-{
-public:
-    LLPanelEventInfo();
-    /*virtual*/ BOOL postBuild() override;
-    /*virtual*/ void onOpen(const LLSD& key) override;
-
-private:
-    ~LLPanelEventInfo();
-    bool processEventReply(const LLEventStruct& event);
-    std::string formatFromMinutes(U32 time);
-    void setEventID(U32 id) { mEventID = id; }
-    U32 getEventID() const { return mEventID; }
-    void onBtnTeleport();
-    void onBtnMap();
-    void onBtnRemind();
-
-    LLEventStruct mEvent;
-    U32 mEventID;
-    boost::signals2::connection mEventNotifierConnection;
-};
-
-#endif // LL_PANELEVENTINFO_H
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 95bc7896f44f7b90d6d837d9657c62b5af649d15..f05f92706713dd734736df804a5c119efef7ae9a 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -1104,7 +1104,11 @@ void LLLandmarksPanel::doProcessParcelInfo(LLLandmark* landmark,
     data.snapshot_id = parcel_data.snapshot_id;
     data.parcel_id = parcel_data.parcel_id;
 
-    LLAvatarActions::createPick(data);
+    LLFloaterProfile* profile_floater = dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", gAgentID)));
+    if (profile_floater)
+    {
+        profile_floater->createPick(data);
+    }
 }
 
 void LLLandmarksPanel::doCreatePick(LLLandmark* landmark, const LLUUID &item_id)
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
deleted file mode 100644
index 113f9b0b9e418015289578820242b9e114ca8c76..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelpick.cpp
+++ /dev/null
@@ -1,612 +0,0 @@
-/**
- * @file llpanelpick.cpp
- * @brief LLPanelPick class implementation
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-// Display of a "Top Pick" used both for the global top picks in the
-// Find directory, and also for each individual user's picks in their
-// profile.
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llpanelpick.h"
-
-#include "message.h"
-
-#include "llparcel.h"
-
-#include "llbutton.h"
-#include "llfloaterreg.h"
-#include "lliconctrl.h"
-#include "lllineeditor.h"
-#include "llpanel.h"
-#include "llscrollcontainer.h"
-#include "lltexteditor.h"
-
-#include "llagent.h"
-#include "llagentpicksinfo.h"
-#include "llavatarpropertiesprocessor.h"
-#include "llfloaterworldmap.h"
-#include "lltexturectrl.h"
-#include "llviewerparcelmgr.h"
-#include "llviewerregion.h"
-
-static const std::string XML_PANEL_EDIT_PICK("panel_edit_pick.xml");
-static const std::string XML_PANEL_PICK_INFO("panel_pick_info.xml");
-
-static const std::string XML_NAME("pick_name");
-static const std::string XML_DESC("pick_desc");
-static const std::string XML_SNAPSHOT("pick_snapshot");
-static const std::string XML_LOCATION("pick_location");
-
-static const std::string XML_BTN_ON_TXTR("edit_icon");
-static const std::string XML_BTN_SAVE("save_changes_btn");
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-
-//static
-LLPanelPickInfo* LLPanelPickInfo::create()
-{
-    LLPanelPickInfo* panel = new LLPanelPickInfo();
-    panel->buildFromFile(XML_PANEL_PICK_INFO);
-    return panel;
-}
-
-LLPanelPickInfo::LLPanelPickInfo()
- : LLPanel()
- , LLAvatarPropertiesObserver()
- , LLRemoteParcelInfoObserver()
- , mScrollingPanelMinHeight(0)
- , mScrollingPanelWidth(0)
- , mScrollContainer(nullptr)
- , mScrollingPanel(nullptr)
- , mSnapshotCtrl(nullptr)
- , mAvatarId(LLUUID::null)
- , mParcelId(LLUUID::null)
- , mPickId(LLUUID::null)
- , mRequestedId(LLUUID::null)
-{
-}
-
-LLPanelPickInfo::~LLPanelPickInfo()
-{
-    LLAvatarPropertiesProcessor::getInstance()->removeObserver(LLPanelPickInfo::getAvatarId(), this);
-
-    if (mParcelId.notNull())
-    {
-        LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this);
-    }
-}
-
-void LLPanelPickInfo::onOpen(const LLSD& key)
-{
-    LLUUID avatar_id = key["avatar_id"];
-    if(avatar_id.isNull())
-    {
-        return;
-    }
-
-    if(getAvatarId().notNull())
-    {
-        LLAvatarPropertiesProcessor::getInstance()->removeObserver(
-            getAvatarId(), this);
-    }
-
-    setAvatarId(avatar_id);
-
-    resetData();
-    resetControls();
-
-    setPickId(key["pick_id"]);
-    setPickName(key["pick_name"]);
-    setPickDesc(key["pick_desc"]);
-    setSnapshotId(key["snapshot_id"]);
-
-    LLAvatarPropertiesProcessor::getInstance()->addObserver(
-        getAvatarId(), this);
-    LLAvatarPropertiesProcessor::getInstance()->sendPickInfoRequest(
-        getAvatarId(), getPickId());
-}
-
-BOOL LLPanelPickInfo::postBuild()
-{
-    mSnapshotCtrl = getChild<LLTextureCtrl>(XML_SNAPSHOT);
-
-    childSetAction("teleport_btn", boost::bind(&LLPanelPickInfo::onClickTeleport, this));
-    childSetAction("show_on_map_btn", boost::bind(&LLPanelPickInfo::onClickMap, this));
-    childSetAction("back_btn", boost::bind(&LLPanelPickInfo::onClickBack, this));
-
-    mScrollingPanel = getChild<LLPanel>("scroll_content_panel");
-    mScrollContainer = getChild<LLScrollContainer>("profile_scroll");
-
-    mScrollingPanelMinHeight = mScrollContainer->getScrolledViewRect().getHeight();
-    mScrollingPanelWidth = mScrollingPanel->getRect().getWidth();
-
-    LLTextEditor* text_desc = getChild<LLTextEditor>(XML_DESC);
-    text_desc->setContentTrusted(false);
-
-    return TRUE;
-}
-
-void LLPanelPickInfo::reshape(S32 width, S32 height, BOOL called_from_parent)
-{
-    LLPanel::reshape(width, height, called_from_parent);
-
-    if (!mScrollContainer || !mScrollingPanel)
-        return;
-
-    static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
-
-    S32 scroll_height = mScrollContainer->getRect().getHeight();
-    if (mScrollingPanelMinHeight >= scroll_height)
-    {
-        mScrollingPanel->reshape(mScrollingPanelWidth, mScrollingPanelMinHeight);
-    }
-    else
-    {
-        mScrollingPanel->reshape(mScrollingPanelWidth + scrollbar_size, scroll_height);
-    }
-}
-
-void LLPanelPickInfo::processProperties(void* data, EAvatarProcessorType type)
-{
-    if(APT_PICK_INFO != type)
-    {
-        return;
-    }
-    LLPickData* pick_info = static_cast<LLPickData*>(data);
-    if(!pick_info
-        || pick_info->creator_id != getAvatarId()
-        || pick_info->pick_id != getPickId())
-    {
-        return;
-    }
-
-    mParcelId = pick_info->parcel_id;
-    setSnapshotId(pick_info->snapshot_id);
-    setPickName(pick_info->name);
-    setPickDesc(pick_info->desc);
-    setPosGlobal(pick_info->pos_global);
-
-    // Send remote parcel info request to get parcel name and sim (region) name.
-    sendParcelInfoRequest();
-
-    // *NOTE dzaporozhan
-    // We want to keep listening to APT_PICK_INFO because user may
-    // edit the Pick and we have to update Pick info panel.
-    // revomeObserver is called from onClickBack
-}
-
-void LLPanelPickInfo::sendParcelInfoRequest()
-{
-    if (mParcelId != mRequestedId)
-    {
-        LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelId, this);
-        LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelId);
-
-        mRequestedId = mParcelId;
-    }
-}
-
-void LLPanelPickInfo::setExitCallback(const commit_callback_t& cb)
-{
-    getChild<LLButton>("back_btn")->setClickedCallback(cb);
-}
-
-void LLPanelPickInfo::processParcelInfo(const LLParcelData& parcel_data)
-{
-    setPickLocation(createLocationText(LLStringUtil::null, parcel_data.name,
-        parcel_data.sim_name, getPosGlobal()));
-
-    // We have received parcel info for the requested ID so clear it now.
-    mRequestedId.setNull();
-
-    if (mParcelId.notNull())
-    {
-        LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this);
-    }
-}
-
-void LLPanelPickInfo::setEditPickCallback(const commit_callback_t& cb)
-{
-    getChild<LLButton>("edit_btn")->setClickedCallback(cb);
-}
-
-// PROTECTED AREA
-
-void LLPanelPickInfo::resetControls()
-{
-    if(getAvatarId() == gAgent.getID())
-    {
-        getChildView("edit_btn")->setEnabled(TRUE);
-        getChildView("edit_btn")->setVisible( TRUE);
-    }
-    else
-    {
-        getChildView("edit_btn")->setEnabled(FALSE);
-        getChildView("edit_btn")->setVisible( FALSE);
-    }
-}
-
-void LLPanelPickInfo::resetData()
-{
-    setPickName(LLStringUtil::null);
-    setPickDesc(LLStringUtil::null);
-    setPickLocation(LLStringUtil::null);
-    setPickId(LLUUID::null);
-    setSnapshotId(LLUUID::null);
-    mPosGlobal.clearVec();
-    mParcelId.setNull();
-    mRequestedId.setNull();
-}
-
-// static
-std::string LLPanelPickInfo::createLocationText(const std::string& owner_name, const std::string& original_name, const std::string& sim_name, const LLVector3d& pos_global)
-{
-    std::string location_text;
-    location_text.append(owner_name);
-    if (!original_name.empty())
-    {
-        if (!location_text.empty()) location_text.append(", ");
-        location_text.append(original_name);
-
-    }
-    if (!sim_name.empty())
-    {
-        if (!location_text.empty()) location_text.append(", ");
-        location_text.append(sim_name);
-    }
-
-    if (!location_text.empty()) location_text.append(" ");
-
-    if (!pos_global.isNull())
-    {
-        S32 region_x = ll_round((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS;
-        S32 region_y = ll_round((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS;
-        S32 region_z = ll_round((F32)pos_global.mdV[VZ]);
-        location_text.append(llformat(" (%d, %d, %d)", region_x, region_y, region_z));
-    }
-    return location_text;
-}
-
-void LLPanelPickInfo::setSnapshotId(const LLUUID& id)
-{
-    mSnapshotCtrl->setImageAssetID(id);
-    mSnapshotCtrl->setValid(TRUE);
-}
-
-void LLPanelPickInfo::setPickName(const std::string& name)
-{
-    getChild<LLUICtrl>(XML_NAME)->setValue(name);
-}
-
-void LLPanelPickInfo::setPickDesc(const std::string& desc)
-{
-    getChild<LLUICtrl>(XML_DESC)->setValue(desc);
-}
-
-void LLPanelPickInfo::setPickLocation(const std::string& location)
-{
-    getChild<LLUICtrl>(XML_LOCATION)->setValue(location);
-}
-
-void LLPanelPickInfo::onClickMap()
-{
-    LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal());
-    LLFloaterReg::showInstance("world_map", "center");
-}
-
-void LLPanelPickInfo::onClickTeleport()
-{
-    if (!getPosGlobal().isExactlyZero())
-    {
-        gAgent.teleportViaLocation(getPosGlobal());
-        LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal());
-    }
-}
-
-void LLPanelPickInfo::onClickBack()
-{
-    LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
-}
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-
-//static
-LLPanelPickEdit* LLPanelPickEdit::create()
-{
-    LLPanelPickEdit* panel = new LLPanelPickEdit();
-    panel->buildFromFile(XML_PANEL_EDIT_PICK);
-    return panel;
-}
-
-LLPanelPickEdit::LLPanelPickEdit()
- : LLPanelPickInfo()
- , mLocationChanged(false)
- , mNeedData(true)
- , mNewPick(false)
- , text_icon(nullptr)
-{
-}
-
-void LLPanelPickEdit::onOpen(const LLSD& key)
-{
-    LLUUID pick_id = key["pick_id"];
-    mNeedData = true;
-
-    // creating new Pick
-    if(pick_id.isNull())
-    {
-        mNewPick = true;
-
-        setAvatarId(gAgent.getID());
-
-        resetData();
-        resetControls();
-
-        setPosGlobal(gAgent.getPositionGlobal());
-
-        LLUUID parcel_id = LLUUID::null, snapshot_id = LLUUID::null;
-        std::string pick_name, pick_desc, region_name;
-
-        LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
-        if(parcel)
-        {
-            parcel_id = parcel->getID();
-            pick_name = parcel->getName();
-            pick_desc = parcel->getDesc();
-            snapshot_id = parcel->getSnapshotID();
-        }
-
-        LLViewerRegion* region = gAgent.getRegion();
-        if(region)
-        {
-            region_name = region->getName();
-        }
-
-        setParcelID(parcel_id);
-        getChild<LLUICtrl>("pick_name")->setValue(pick_name.empty() ? region_name : pick_name);
-        getChild<LLUICtrl>("pick_desc")->setValue(pick_desc);
-        setSnapshotId(snapshot_id);
-        setPickLocation(createLocationText(getLocationNotice(), pick_name, region_name, getPosGlobal()));
-
-        enableSaveButton(true);
-    }
-    // editing existing pick
-    else
-    {
-        mNewPick = false;
-        LLPanelPickInfo::onOpen(key);
-
-        enableSaveButton(false);
-    }
-
-    resetDirty();
-}
-
-void LLPanelPickEdit::setPickData(const LLPickData* pick_data)
-{
-    if(!pick_data)
-    {
-        return;
-    }
-
-    mNeedData = false;
-
-    setParcelID(pick_data->parcel_id);
-    getChild<LLUICtrl>("pick_name")->setValue(pick_data->name);
-    getChild<LLUICtrl>("pick_desc")->setValue(pick_data->desc);
-    setSnapshotId(pick_data->snapshot_id);
-    setPosGlobal(pick_data->pos_global);
-    setPickLocation(createLocationText(LLStringUtil::null, pick_data->name,
-            pick_data->sim_name, pick_data->pos_global));
-}
-
-BOOL LLPanelPickEdit::postBuild()
-{
-    LLPanelPickInfo::postBuild();
-
-    mSnapshotCtrl->setCommitCallback(boost::bind(&LLPanelPickEdit::onSnapshotChanged, this));
-
-    LLLineEditor* line_edit = getChild<LLLineEditor>("pick_name");
-    line_edit->setKeystrokeCallback(boost::bind(&LLPanelPickEdit::onPickChanged, this, _1), nullptr);
-
-    LLTextEditor* text_edit = getChild<LLTextEditor>("pick_desc");
-    text_edit->setKeystrokeCallback(boost::bind(&LLPanelPickEdit::onPickChanged, this, _1));
-
-    childSetAction(XML_BTN_SAVE, boost::bind(&LLPanelPickEdit::onClickSave, this));
-    childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelPickEdit::onClickSetLocation, this));
-
-    initTexturePickerMouseEvents();
-
-    return TRUE;
-}
-
-void LLPanelPickEdit::setSaveCallback(const commit_callback_t& cb)
-{
-    getChild<LLButton>("save_changes_btn")->setClickedCallback(cb);
-}
-
-void LLPanelPickEdit::setCancelCallback(const commit_callback_t& cb)
-{
-    getChild<LLButton>("cancel_btn")->setClickedCallback(cb);
-}
-
-void LLPanelPickEdit::resetDirty()
-{
-    LLPanelPickInfo::resetDirty();
-
-    getChild<LLLineEditor>("pick_name")->resetDirty();
-    getChild<LLTextEditor>("pick_desc")->resetDirty();
-    mSnapshotCtrl->resetDirty();
-    mLocationChanged = false;
-}
-
-BOOL LLPanelPickEdit::isDirty() const
-{
-    if( mNewPick
-        || LLPanelPickInfo::isDirty()
-        || mLocationChanged
-        || mSnapshotCtrl->isDirty()
-        || getChild<LLLineEditor>("pick_name")->isDirty()
-        || getChild<LLTextEditor>("pick_desc")->isDirty())
-    {
-        return TRUE;
-    }
-    return FALSE;
-}
-
-void LLPanelPickEdit::sendUpdate()
-{
-    LLPickData pick_data;
-
-    // If we don't have a pick id yet, we'll need to generate one,
-    // otherwise we'll keep overwriting pick_id 00000 in the database.
-    if (getPickId().isNull())
-    {
-        getPickId().generate();
-    }
-
-    pick_data.agent_id = gAgent.getID();
-    pick_data.session_id = gAgent.getSessionID();
-    pick_data.pick_id = getPickId();
-    pick_data.creator_id = gAgent.getID();;
-
-    //legacy var  need to be deleted
-    pick_data.top_pick = FALSE;
-    pick_data.parcel_id = mParcelId;
-    pick_data.name = getChild<LLUICtrl>(XML_NAME)->getValue().asString();
-    pick_data.desc = getChild<LLUICtrl>(XML_DESC)->getValue().asString();
-    pick_data.snapshot_id = mSnapshotCtrl->getImageAssetID();
-    pick_data.pos_global = getPosGlobal();
-    pick_data.sort_order = 0;
-    pick_data.enabled = TRUE;
-
-    LLAvatarPropertiesProcessor::instance().sendPickInfoUpdate(&pick_data);
-
-    if(mNewPick)
-    {
-        // Assume a successful create pick operation, make new number of picks
-        // available immediately. Actual number of picks will be requested in
-        // LLAvatarPropertiesProcessor::sendPickInfoUpdate and updated upon server respond.
-        LLAgentPicksInfo::getInstance()->incrementNumberOfPicks();
-    }
-}
-
-void LLPanelPickEdit::onSnapshotChanged()
-{
-    enableSaveButton(true);
-}
-
-void LLPanelPickEdit::onPickChanged(LLUICtrl* ctrl)
-{
-    enableSaveButton(isDirty());
-}
-
-void LLPanelPickEdit::resetData()
-{
-    LLPanelPickInfo::resetData();
-    mLocationChanged = false;
-}
-
-void LLPanelPickEdit::enableSaveButton(bool enable)
-{
-    getChildView(XML_BTN_SAVE)->setEnabled(enable);
-}
-
-void LLPanelPickEdit::onClickSetLocation()
-{
-    // Save location for later use.
-    setPosGlobal(gAgent.getPositionGlobal());
-
-    std::string parcel_name, region_name;
-
-    LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
-    if (parcel)
-    {
-        mParcelId = parcel->getID();
-        parcel_name = parcel->getName();
-    }
-
-    LLViewerRegion* region = gAgent.getRegion();
-    if(region)
-    {
-        region_name = region->getName();
-    }
-
-    setPickLocation(createLocationText(getLocationNotice(), parcel_name, region_name, getPosGlobal()));
-
-    mLocationChanged = true;
-    enableSaveButton(TRUE);
-}
-
-void LLPanelPickEdit::onClickSave()
-{
-    sendUpdate();
-
-    mLocationChanged = false;
-
-    LLSD params;
-    params["action"] = "save_new_pick";
-    notifyParent(params);
-}
-
-std::string LLPanelPickEdit::getLocationNotice()
-{
-    static std::string notice = getString("location_notice");
-    return notice;
-}
-
-void LLPanelPickEdit::processProperties(void* data, EAvatarProcessorType type)
-{
-    if(mNeedData)
-    {
-        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
deleted file mode 100644
index 21f2b7d702447d5bae55143fe0173c59334b08e8..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelpick.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/**
- * @file llpanelpick.h
- * @brief LLPanelPick class definition
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-// Display of a "Top Pick" used both for the global top picks in the
-// Find directory, and also for each individual user's picks in their
-// profile.
-
-#ifndef LL_LLPANELPICK_H
-#define LL_LLPANELPICK_H
-
-#include "llpanel.h"
-#include "llremoteparcelrequest.h"
-#include "llavatarpropertiesprocessor.h"
-
-class LLIconCtrl;
-class LLTextureCtrl;
-class LLScrollContainer;
-class LLMessageSystem;
-class LLAvatarPropertiesObserver;
-
-/**
- * Panel for displaying Pick Information - snapshot, name, description, etc.
- */
-class LLPanelPickInfo : public LLPanel, public LLAvatarPropertiesObserver, LLRemoteParcelInfoObserver
-{
-    LOG_CLASS(LLPanelPickInfo);
-public:
-
-    // Creates new panel
-    static LLPanelPickInfo* create();
-
-    virtual ~LLPanelPickInfo();
-
-    /**
-     * Initializes panel properties
-     *
-     * By default Pick will be created for current Agent location.
-     * Use setPickData to change Pick properties.
-     */
-    /*virtual*/ void onOpen(const LLSD& key) override;
-
-    /*virtual*/ BOOL postBuild() override;
-
-    /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE) override;
-
-    /*virtual*/ void processProperties(void* data, EAvatarProcessorType type) override;
-
-    /**
-     * Sends remote parcel info request to resolve parcel name from its ID.
-     */
-    void sendParcelInfoRequest();
-
-    /**
-     * Sets "Back" button click callback
-     */
-    virtual void setExitCallback(const commit_callback_t& cb);
-
-    /**
-     * Sets "Edit" button click callback
-     */
-    virtual void setEditPickCallback(const commit_callback_t& cb);
-
-    //This stuff we got from LLRemoteParcelObserver, in the last one we intentionally do nothing
-    /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data) override;
-    /*virtual*/ void setParcelID(const LLUUID& parcel_id) override { mParcelId = parcel_id; }
-    /*virtual*/ void setErrorStatus(S32 status, const std::string& reason) override {};
-
-protected:
-
-    LLPanelPickInfo();
-
-    /**
-     * Resets Pick information
-     */
-    virtual void resetData();
-
-    /**
-     * Resets UI controls (visibility, values)
-     */
-    virtual void resetControls();
-
-    /**
-    * "Location text" is actually the owner name, the original
-    * name that owner gave the parcel, and the location.
-    */
-    static std::string createLocationText(
-        const std::string& owner_name,
-        const std::string& original_name,
-        const std::string& sim_name,
-        const LLVector3d& pos_global);
-
-    virtual void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; }
-    virtual LLUUID& getAvatarId() { return mAvatarId; }
-
-    /**
-     * Sets snapshot id.
-     *
-     * Will mark snapshot control as valid if id is not null.
-     * Will mark snapshot control as invalid if id is null. If null id is a valid value,
-     * you have to manually mark snapshot is valid.
-     */
-    virtual void setSnapshotId(const LLUUID& id);
-
-    virtual void setPickId(const LLUUID& id) { mPickId = id; }
-    virtual LLUUID& getPickId() { return mPickId; }
-
-    virtual void setPickName(const std::string& name);
-
-    virtual void setPickDesc(const std::string& desc);
-
-    virtual void setPickLocation(const std::string& location);
-
-    virtual void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
-    virtual LLVector3d& getPosGlobal() { return mPosGlobal; }
-
-    /**
-     * Callback for "Map" button, opens Map
-     */
-    void onClickMap();
-
-    /**
-     * Callback for "Teleport" button, teleports user to Pick location.
-     */
-    void onClickTeleport();
-
-    void onClickBack();
-
-    S32                     mScrollingPanelMinHeight;
-    S32                     mScrollingPanelWidth;
-    LLScrollContainer*      mScrollContainer;
-    LLPanel*                mScrollingPanel;
-    LLTextureCtrl*          mSnapshotCtrl;
-
-    LLUUID mAvatarId;
-    LLVector3d mPosGlobal;
-    LLUUID mParcelId;
-    LLUUID mPickId;
-    LLUUID mRequestedId;
-};
-
-/**
- * Panel for creating/editing Pick.
- */
-class LLPanelPickEdit final : public LLPanelPickInfo
-{
-    LOG_CLASS(LLPanelPickEdit);
-public:
-
-    /**
-     * Creates new panel
-     */
-    static LLPanelPickEdit* create();
-
-    ~LLPanelPickEdit() = default;
-    void onOpen(const LLSD& key) override;
-    virtual void setPickData(const LLPickData* pick_data);
-    BOOL postBuild() override;
-
-    /**
-     * Sets "Save" button click callback
-     */
-    virtual void setSaveCallback(const commit_callback_t& cb);
-
-    /**
-     * Sets "Cancel" button click callback
-     */
-    virtual void setCancelCallback(const commit_callback_t& cb);
-
-    /**
-     * Resets panel and all cantrols to unedited state
-     */
-    void resetDirty() override;
-
-    /**
-     * Returns true if any of Pick properties was changed by user.
-     */
-    BOOL isDirty() const override;
-
-    void processProperties(void* data, EAvatarProcessorType type) override;
-
-    /**
-    * Sends Pick properties to server.
-    */
-    void sendUpdate();
-
-protected:
-
-    LLPanelPickEdit();
-
-    /**
-     * Called when snapshot image changes.
-     */
-    void onSnapshotChanged();
-
-    /**
-     * Callback for Pick snapshot, name and description changed event.
-     */
-    void onPickChanged(LLUICtrl* ctrl);
-
-    /*virtual*/ void resetData() override;
-
-    /**
-     * Enables/disables "Save" button
-     */
-    void enableSaveButton(bool enable);
-
-    /**
-     * Callback for "Set Location" button click
-     */
-    void onClickSetLocation();
-
-    /**
-     * Callback for "Save" button click
-     */
-    void onClickSave();
-
-    std::string getLocationNotice();
-
-    bool mLocationChanged;
-    bool mNeedData;
-    bool mNewPick;
-
-private:
-
-    void initTexturePickerMouseEvents();
-        void onTexturePickerMouseEnter(LLUICtrl* ctrl);
-    void onTexturePickerMouseLeave(LLUICtrl* ctrl);
-
-    LLIconCtrl* text_icon;
-};
-
-#endif // LL_LLPANELPICK_H
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index f1445ad4386d74b7afca8b458e140ca59eadd160..3f12deb36ad99bea57d9f8d99597b50bb8f13e86 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -321,7 +321,11 @@ void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global)
     data.snapshot_id = mSnapshotCtrl->getImageAssetID();
     data.parcel_id = mParcelID;
 
-    LLAvatarActions::createPick(data);
+    LLFloaterProfile* profile_floater = dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", gAgentID)));
+    if (profile_floater)
+    {
+        profile_floater->createPick(data);
+    }
 }
 
 // static
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index f5088e007b6b9fa8b59825a687ef9e033d4364c7..8a5a341f1240ae3ed856c2c1c8fb690a26a95e13 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -62,7 +62,8 @@
 #include "llcommandhandler.h"
 #include "llfloaterprofiletexture.h"
 #include "llfloaterreg.h"
-#include "lltexturectrl.h"
+#include "llfloaterblocked.h"
+#include "llfloaterreporter.h"
 #include "llfilepicker.h"
 #include "llfirstuse.h"
 #include "llgroupactions.h"
@@ -103,14 +104,167 @@ static const std::string PROFILE_IMAGE_UPLOAD_CAP = "UploadAgentProfileImage";
 
 //////////////////////////////////////////////////////////////////////////
 
+LLUUID post_profile_image(std::string cap_url, const LLSD &first_data, std::string path_to_image, LLHandle<LLPanel> *handle)
+{
+    LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
+    LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t
+        httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("post_profile_image_coro", httpPolicy));
+    LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
+    LLCore::HttpHeaders::ptr_t httpHeaders;
+
+    LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
+    httpOpts->setFollowRedirects(true);
+
+    LLSD result = httpAdapter->postAndSuspend(httpRequest, cap_url, first_data, httpOpts, httpHeaders);
+
+    LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
+    LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
+
+    if (!status)
+    {
+        // todo: notification?
+        LL_WARNS("AvatarProperties") << "Failed to get uploader cap " << status.toString() << LL_ENDL;
+        return LLUUID::null;
+    }
+    if (!result.has("uploader"))
+    {
+        // todo: notification?
+        LL_WARNS("AvatarProperties") << "Failed to get uploader cap, response contains no data." << LL_ENDL;
+        return LLUUID::null;
+    }
+    std::string uploader_cap = result["uploader"].asString();
+    if (uploader_cap.empty())
+    {
+        LL_WARNS("AvatarProperties") << "Failed to get uploader cap, cap invalid." << LL_ENDL;
+        return LLUUID::null;
+    }
+
+    // Upload the image
+    LLCore::HttpRequest::ptr_t uploaderhttpRequest(new LLCore::HttpRequest);
+    LLCore::HttpHeaders::ptr_t uploaderhttpHeaders(new LLCore::HttpHeaders);
+    LLCore::HttpOptions::ptr_t uploaderhttpOpts(new LLCore::HttpOptions);
+    S64 length;
+
+    {
+        llifstream instream(path_to_image.c_str(), std::iostream::binary | std::iostream::ate);
+        if (!instream.is_open())
+        {
+            LL_WARNS("AvatarProperties") << "Failed to open file " << path_to_image << LL_ENDL;
+            return LLUUID::null;
+        }
+        length = instream.tellg();
+    }
+
+    uploaderhttpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, "application/jp2"); // optional
+    uploaderhttpHeaders->append(HTTP_OUT_HEADER_CONTENT_LENGTH, llformat("%d", length)); // required!
+    uploaderhttpOpts->setFollowRedirects(true);
+
+    result = httpAdapter->postFileAndSuspend(uploaderhttpRequest, uploader_cap, path_to_image, uploaderhttpOpts, uploaderhttpHeaders);
+
+    httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
+    status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
+
+    LL_DEBUGS("AvatarProperties") << result << LL_ENDL;
+
+    if (!status)
+    {
+        LL_WARNS("AvatarProperties") << "Failed to upload image " << status.toString() << LL_ENDL;
+        return LLUUID::null;
+    }
+
+    if (result["state"].asString() != "complete")
+    {
+        if (result.has("message"))
+        {
+            LL_WARNS("AvatarProperties") << "Failed to upload image, state " << result["state"] << " message: " << result["message"] << LL_ENDL;
+        }
+        else
+        {
+            LL_WARNS("AvatarProperties") << "Failed to upload image " << result << LL_ENDL;
+        }
+        return LLUUID::null;
+    }
+
+    return result["new_asset"].asUUID();
+}
+
+enum EProfileImageType
+{
+    PROFILE_IMAGE_SL,
+    PROFILE_IMAGE_FL,
+};
+
+void post_profile_image_coro(std::string cap_url, EProfileImageType type, std::string path_to_image, LLHandle<LLPanel> *handle)
+{
+    LLSD data;
+    switch (type)
+    {
+    case PROFILE_IMAGE_SL:
+        data["profile-image-asset"] = "sl_image_id";
+        break;
+    case PROFILE_IMAGE_FL:
+        data["profile-image-asset"] = "fl_image_id";
+        break;
+    }
+
+    LLUUID result = post_profile_image(cap_url, data, path_to_image, handle);
+
+    // reset loading indicator
+    if (!handle->isDead())
+    {
+        switch (type)
+        {
+        case PROFILE_IMAGE_SL:
+            {
+                LLPanelProfileSecondLife* panel = static_cast<LLPanelProfileSecondLife*>(handle->get());
+                if (result.notNull())
+                {
+                    panel->setProfileImageUploaded(result);
+                }
+                else
+                {
+                    // failure, just stop progress indicator
+                    panel->setProfileImageUploading(false);
+                }
+                break;
+            }
+        case PROFILE_IMAGE_FL:
+            {
+                LLPanelProfileFirstLife* panel = static_cast<LLPanelProfileFirstLife*>(handle->get());
+                if (result.notNull())
+                {
+                    panel->setProfileImageUploaded(result);
+                }
+                else
+                {
+                    // failure, just stop progress indicator
+                    panel->setProfileImageUploading(false);
+                }
+                break;
+            }
+        }
+    }
+
+    if (type == PROFILE_IMAGE_SL && result.notNull())
+    {
+        LLAvatarIconIDCache::getInstance()->add(gAgentID, result);
+        // Should trigger callbacks in icon controls
+        LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(gAgentID);
+    }
+
+    // Cleanup
+    LLFile::remove(path_to_image);
+    delete handle;
+}
+
 //////////////////////////////////////////////////////////////////////////
-// LLWebProfileHandler
+// LLProfileHandler
 
-class LLWebProfileHandler : public LLCommandHandler
+class LLProfileHandler : public LLCommandHandler
 {
 public:
     // requires trusted browser to trigger
-    LLWebProfileHandler() : LLCommandHandler("profile", UNTRUSTED_THROTTLE) { }
+    LLProfileHandler() : LLCommandHandler("profile", UNTRUSTED_THROTTLE) { }
 
     bool handle(const LLSD& params,
                 const LLSD& query_map,
@@ -126,8 +280,6 @@ class LLWebProfileHandler : public LLCommandHandler
         return true;
     }
 };
-LLWebProfileHandler gWebProfileHandler;
-#if 0 // ALCHMERGE
 LLProfileHandler gProfileHandler;
 
 
@@ -172,7 +324,7 @@ class LLAgentHandler : public LLCommandHandler
     {
         if (params.size() < 2) return false;
         LLUUID avatar_id;
-        if (!avatar_id.set(params[0], FALSE))
+        if (!avatar_id.set(params[0].asString(), FALSE))
         {
             return false;
         }
@@ -251,7 +403,8 @@ class LLAgentHandler : public LLCommandHandler
                 const std::string object_name = LLURI::unescape(params[2].asString());
                 LLMute mute(avatar_id, object_name, LLMute::OBJECT);
                 LLMuteList::getInstance()->add(mute);
-                LLPanelBlockedList::showPanelAndSelect(mute.mID);
+                LLFloaterBlocked::showMuteAndSelect(mute.mID);
+                //LLPanelBlockedList::showPanelAndSelect(mute.mID);
             }
             return true;
         }
@@ -286,7 +439,7 @@ class LLAgentHandler : public LLCommandHandler
     }
 };
 LLAgentHandler gAgentHandler;
-#endif
+
 
 ///----------------------------------------------------------------------------
 /// LLFloaterProfilePermissions
@@ -1118,12 +1271,93 @@ void LLPanelProfileSecondLife::setLoaded()
     }
 }
 
+
+class LLProfileImagePicker : public LLFilePickerThread
+{
+public:
+    LLProfileImagePicker(EProfileImageType type, LLHandle<LLPanel> *handle);
+    ~LLProfileImagePicker();
+    void notify(const std::vector<std::string>& filenames) override;
+
+private:
+    LLHandle<LLPanel> *mHandle;
+    EProfileImageType mType;
+};
+
+LLProfileImagePicker::LLProfileImagePicker(EProfileImageType type, LLHandle<LLPanel> *handle)
+    : LLFilePickerThread(LLFilePicker::FFLOAD_IMAGE),
+    mHandle(handle),
+    mType(type)
+{
+}
+
+LLProfileImagePicker::~LLProfileImagePicker()
+{
+    delete mHandle;
+}
+
+void LLProfileImagePicker::notify(const std::vector<std::string>& filenames)
+{
+    if (mHandle->isDead())
+    {
+        return;
+    }
+    if (filenames.empty())
+    {
+        return;
+    }
+    std::string file_path = filenames[0];
+    if (file_path.empty())
+    {
+        return;
+    }
+
+    // generate a temp texture file for coroutine
+    std::string temp_file = gDirUtilp->getTempFilename();
+    U32 codec = LLImageBase::getCodecFromExtension(gDirUtilp->getExtension(file_path));
+    const S32 MAX_DIM = 256;
+    if (!LLViewerTextureList::createUploadFile(file_path, temp_file, codec, MAX_DIM))
+    {
+        //todo: image not supported notification
+        LL_WARNS("AvatarProperties") << "Failed to upload profile image of type " << (S32)PROFILE_IMAGE_SL << ", failed to open image" << LL_ENDL;
+        return;
+    }
+
+    std::string cap_url = gAgent.getRegionCapability(PROFILE_IMAGE_UPLOAD_CAP);
+    if (cap_url.empty())
+    {
+        LL_WARNS("AvatarProperties") << "Failed to upload profile image of type " << (S32)PROFILE_IMAGE_SL << ", no cap found" << LL_ENDL;
+        return;
+    }
+
+    switch (mType)
+    {
+    case PROFILE_IMAGE_SL:
+        {
+            LLPanelProfileSecondLife* panel = static_cast<LLPanelProfileSecondLife*>(mHandle->get());
+            panel->setProfileImageUploading(true);
+        }
+        break;
+    case PROFILE_IMAGE_FL:
+        {
+            LLPanelProfileFirstLife* panel = static_cast<LLPanelProfileFirstLife*>(mHandle->get());
+            panel->setProfileImageUploading(true);
+        }
+        break;
+    }
+
+    LLCoros::instance().launch("postAgentUserImageCoro",
+        boost::bind(post_profile_image_coro, cap_url, mType, temp_file, mHandle));
+
+    mHandle = nullptr; // transferred to post_profile_image_coro
+}
+
 void LLPanelProfileSecondLife::onCommitMenu(const LLSD& userdata)
 {
     const std::string item_name = userdata.asString();
     const LLUUID agent_id = getAvatarId();
     // todo: consider moving this into LLAvatarActions::onCommit(name, id)
-    // and making all other floaters, like people menu, do the same
+    // and making all other flaoters, like people menu do the same
     if (item_name == "im")
     {
         LLAvatarActions::startIM(agent_id);
@@ -1226,8 +1460,7 @@ void LLPanelProfileSecondLife::onCommitMenu(const LLSD& userdata)
     }
     else if (item_name == "upload_photo")
     {
-        (new LLProfileImagePicker(PROFILE_IMAGE_SL, new LLHandle<LLPanel>(LLPanel::getHandle()),
-                                  [this] (LLUUID const& id) { setProfileImageUploaded(id); }))->getFile();
+        (new LLProfileImagePicker(PROFILE_IMAGE_SL, new LLHandle<LLPanel>(LLPanel::getHandle())))->getFile();
 
         LLFloater* floaterp = mFloaterTexturePickerHandle.get();
         if (floaterp)
@@ -1777,8 +2010,7 @@ void LLPanelProfileFirstLife::commitUnsavedChanges()
 
 void LLPanelProfileFirstLife::onUploadPhoto()
 {
-    (new LLProfileImagePicker(PROFILE_IMAGE_FL, new LLHandle<LLPanel>(LLPanel::getHandle()),
-                              [this](LLUUID const& id) { setProfileImageUploaded(id); }))->getFile();
+    (new LLProfileImagePicker(PROFILE_IMAGE_FL, new LLHandle<LLPanel>(LLPanel::getHandle())))->getFile();
 
     LLFloater* floaterp = mFloaterTexturePickerHandle.get();
     if (floaterp)
diff --git a/indra/newview/llpanelprofile.h b/indra/newview/llpanelprofile.h
index 248fefb4fdd6e3e9e2f53ef1cf890007b7f87ea9..fb9dd348333460dc8c8389dc7d9b9656a9b32b96 100644
--- a/indra/newview/llpanelprofile.h
+++ b/indra/newview/llpanelprofile.h
@@ -33,7 +33,6 @@
 #include "llpanel.h"
 #include "llpanelavatar.h"
 #include "llmediactrl.h"
-#include "llprofileimagepicker.h"
 #include "llvoiceclient.h"
 
 // class LLPanelProfileClassifieds;
diff --git a/indra/newview/llpanelprofileclassifieds.cpp b/indra/newview/llpanelprofileclassifieds.cpp
index e2768ff807491c6821318d3c83496feca725aa91..23266a2279f78b2e8b5f7c5302bcb51e14487885 100644
--- a/indra/newview/llpanelprofileclassifieds.cpp
+++ b/indra/newview/llpanelprofileclassifieds.cpp
@@ -32,14 +32,13 @@
 #include "llavataractions.h"
 #include "llavatarpropertiesprocessor.h"
 #include "llclassifiedflags.h"
-#include "llclassifiedinfo.h"
 #include "llcombobox.h"
 #include "llcommandhandler.h" // for classified HTML detail page click tracking
 #include "llcorehttputil.h"
 #include "lldispatcher.h"
 #include "llfloaterclassified.h"
 #include "llfloaterreg.h"
-#include "llfloaterpublishclassified.h"
+#include "llfloatersidepanelcontainer.h"
 #include "llfloaterworldmap.h"
 #include "lliconctrl.h"
 #include "lllineeditor.h"
@@ -47,6 +46,7 @@
 #include "llnotificationsutil.h"
 #include "llpanelavatar.h"
 #include "llparcel.h"
+#include "llregistry.h"
 #include "llscrollcontainer.h"
 #include "llstartup.h"
 #include "llstatusbar.h"
@@ -57,6 +57,8 @@
 #include "llviewergenericmessage.h" // send_generic_message
 #include "llviewerparcelmgr.h"
 #include "llviewerregion.h"
+#include "llviewertexture.h"
+#include "llviewertexture.h"
 #include "rlvactions.h"
 #include "rlvhandler.h"
 
@@ -64,6 +66,7 @@
 //*TODO: verify this limit
 const S32 MAX_AVATAR_CLASSIFIEDS = 100;
 
+const S32 MINIMUM_PRICE_FOR_LISTING = 50; // L$
 const S32 DEFAULT_EDIT_CLASSIFIED_SCROLL_HEIGHT = 530;
 
 //static
@@ -134,7 +137,7 @@ class LLClassifiedHandler : public LLCommandHandler, public LLAvatarPropertiesOb
 
         // get the ID for the classified
         LLUUID classified_id;
-        if (!classified_id.set(params[0].asStringRef(), FALSE))
+        if (!classified_id.set(params[0].asString(), FALSE))
         {
             return false;
         }
@@ -978,12 +981,12 @@ void LLPanelProfileClassified::onSaveClick()
             return;
         }
 
-        mPublishFloater = LLFloaterReg::findTypedInstance<LLFloaterPublishClassified>(
+        mPublishFloater = LLFloaterReg::findTypedInstance<LLPublishClassifiedFloater>(
             "publish_classified", LLSD());
 
         if(!mPublishFloater)
         {
-            mPublishFloater = LLFloaterReg::getTypedInstance<LLFloaterPublishClassified>(
+            mPublishFloater = LLFloaterReg::getTypedInstance<LLPublishClassifiedFloater>(
                 "publish_classified", LLSD());
 
             mPublishFloater->setPublishClickedCallback(boost::bind
@@ -1523,3 +1526,47 @@ void LLPanelProfileClassified::updateTabLabel(const std::string& title)
         parent->setCurrentTabName(title);
     }
 }
+
+
+//-----------------------------------------------------------------------------
+// LLPublishClassifiedFloater
+//-----------------------------------------------------------------------------
+
+LLPublishClassifiedFloater::LLPublishClassifiedFloater(const LLSD& key)
+ : LLFloater(key)
+{
+}
+
+LLPublishClassifiedFloater::~LLPublishClassifiedFloater()
+{
+}
+
+BOOL LLPublishClassifiedFloater::postBuild()
+{
+    LLFloater::postBuild();
+
+    childSetAction("publish_btn", boost::bind(&LLFloater::closeFloater, this, false));
+    childSetAction("cancel_btn", boost::bind(&LLFloater::closeFloater, this, false));
+
+    return TRUE;
+}
+
+void LLPublishClassifiedFloater::setPrice(S32 price)
+{
+    getChild<LLUICtrl>("price_for_listing")->setValue(price);
+}
+
+S32 LLPublishClassifiedFloater::getPrice()
+{
+    return getChild<LLUICtrl>("price_for_listing")->getValue().asInteger();
+}
+
+void LLPublishClassifiedFloater::setPublishClickedCallback(const commit_signal_t::slot_type& cb)
+{
+    getChild<LLButton>("publish_btn")->setClickedCallback(cb);
+}
+
+void LLPublishClassifiedFloater::setCancelClickedCallback(const commit_signal_t::slot_type& cb)
+{
+    getChild<LLButton>("cancel_btn")->setClickedCallback(cb);
+}
diff --git a/indra/newview/llpanelprofileclassifieds.h b/indra/newview/llpanelprofileclassifieds.h
index e6aa761ff023c65fcda00198ad4a0abbe3b0466b..5f029b22f4a1ba4c7dc0ab5d7aed71db58688b46 100644
--- a/indra/newview/llpanelprofileclassifieds.h
+++ b/indra/newview/llpanelprofileclassifieds.h
@@ -28,11 +28,14 @@
 #define LL_PANELPROFILECLASSIFIEDS_H
 
 #include "llavatarpropertiesprocessor.h"
-#include "llfloaterpublishclassified.h"
+#include "llclassifiedinfo.h"
+#include "llfloater.h"
 #include "llpanel.h"
 #include "llpanelavatar.h"
+#include "llrect.h"
 #include "lluuid.h"
 #include "v3dmath.h"
+#include "llcoros.h"
 #include "lleventcoro.h"
 
 class LLCheckBoxCtrl;
@@ -44,6 +47,23 @@ class LLTextEditor;
 class LLTextureCtrl;
 class LLUICtrl;
 
+
+class LLPublishClassifiedFloater final : public LLFloater
+{
+public:
+    LLPublishClassifiedFloater(const LLSD& key);
+    virtual ~LLPublishClassifiedFloater();
+
+    BOOL postBuild() override;
+
+    void setPrice(S32 price);
+    S32 getPrice();
+
+    void setPublishClickedCallback(const commit_signal_t::slot_type& cb);
+    void setCancelClickedCallback(const commit_signal_t::slot_type& cb);
+};
+
+
 /**
 * Panel for displaying Avatar's picks.
 */
@@ -305,8 +325,11 @@ class LLPanelProfileClassified
 
     S32 mPriceForListing;
 
+public:
     static void handleSearchStatResponse(LLUUID classifiedId, LLSD result);
 
+private:
+
     typedef std::list<LLPanelProfileClassified*> panel_list_t;
     static panel_list_t sAllPanels;
 
@@ -316,7 +339,7 @@ class LLPanelProfileClassified
     bool mCanClose;
     bool mEditOnLoad;
 
-    LLFloaterPublishClassified* mPublishFloater;
+    LLPublishClassifiedFloater* mPublishFloater;
 };
 
 #endif // LL_PANELPROFILECLASSIFIEDS_H
diff --git a/indra/newview/llpanelprofilelegacy.cpp b/indra/newview/llpanelprofilelegacy.cpp
deleted file mode 100644
index de6167984017908e9b8af14a5766c9fea5ec6b1d..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelprofilelegacy.cpp
+++ /dev/null
@@ -1,1668 +0,0 @@
-/*
- * @file llpanelprofilelegacy.cpp
- * @brief Legacy protocol avatar profile panel
- *
- * Copyright (c) 2014-2022, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelprofilelegacy.h"
-
-// libraries
-#include "llaccordionctrl.h"
-#include "llaccordionctrltab.h"
-#include "llavatarnamecache.h"
-#include "llcheckboxctrl.h"
-#include "llflatlistview.h"
-#include "llfloaterreg.h"
-#include "lllineeditor.h"
-#include "llloadingindicator.h"
-#include "llnotificationsutil.h"
-#include "lltexteditor.h"
-#include "lltexturectrl.h"
-#include "lltoggleablemenu.h"
-#include "lltrans.h"
-
-// newview
-#include "alavataractions.h"
-#include "llagent.h"
-#include "llagentdata.h"
-#include "llagentpicksinfo.h"
-#include "llavataractions.h"
-#include "llcallingcard.h" // for LLAvatarTracker
-#include "llclassifieditem.h"
-#include "lldateutil.h"
-#include "lldroptarget.h"
-#include "llfloaterreporter.h"
-#include "llfloaterworldmap.h"
-#include "llgroupactions.h"
-#include "llpanelclassified.h"
-#include "llpanelpick.h"
-#include "llpickitem.h"
-#include "llmutelist.h"
-#include "llsidetraypanelcontainer.h"
-#include "llslurl.h"
-#include "llviewerdisplayname.h"
-#include "llviewermenu.h" // gMenuHolder
-
-static constexpr std::string_view AGENT_PROFILE_CAP("AgentProfile");
-//static constexpr std::string_view UPLOAD_AGENT_PROFILE_CAP("UploadAgentProfileImage");
-
-// These are order-senstitive so don't fk with 'em!
-static const std::array<std::string, 8> sWantCheckboxes{{"wanna_build", "wanna_explore", "wanna_yiff", "wanna_work", "wanna_group", "wanna_buy", "wanna_sell", "wanna_hire"}};
-static const std::array<std::string, 6> sSkillsCheckboxes{{"can_texture", "can_architect", "can_model", "can_event", "can_script", "can_characters"}};
-
-static LLPanelInjector<LLPanelProfileLegacy> t_panel_lprofile("panel_profile_legacy_sidetray");
-static LLPanelInjector<LLPanelProfileLegacy::LLPanelProfileGroups> t_panel_group("panel_profile_legacy_groups");
-static LLPanelInjector<LLPanelProfileLegacy::LLPanelProfilePicks> t_panel_picks("panel_profile_legacy_picks");
-
-LLPanelProfileLegacy::LLPanelProfileLegacy()
-:   LLPanelProfileLegacyTab()
-,   mPanelPicks(nullptr)
-,   mPanelGroups(nullptr)
-{
-    mChildStack.setParent(this);
-    //mCommitCallbackRegistrar.add("Profile.CommitInterest", boost::bind(&LLPanelProfileLegacy::onCommitInterest, this));
-    mCommitCallbackRegistrar.add("Profile.CommitProperties", boost::bind(&LLPanelProfileLegacy::onCommitAvatarProperties, this));
-    mCommitCallbackRegistrar.add("Profile.CommitRights", boost::bind(&LLPanelProfileLegacy::onCommitRights, this));
-    mCommitCallbackRegistrar.add("Profile.CommitModifyObjectRights", boost::bind(&LLPanelProfileLegacy::onCommitModifyObjectsRights, this, _1));
-    mCommitCallbackRegistrar.add("Profile.Action", boost::bind(&LLPanelProfileLegacy::onCommitAction, this, _2));
-    mEnableCallbackRegistrar.add("Profile.Enable", boost::bind(&LLPanelProfileLegacy::isActionEnabled, this, _2));
-}
-
-LLPanelProfileLegacy::~LLPanelProfileLegacy()
-{
-    if (LLAvatarPropertiesProcessor::instanceExists() && LLPanelProfileLegacyTab::getAvatarId().notNull())
-        LLAvatarPropertiesProcessor::getInstance()->removeObserver(LLPanelProfileLegacyTab::getAvatarId(), this);
-    if (mAvatarNameCacheConnection.connected())
-        mAvatarNameCacheConnection.disconnect();
-    if (mNameChangedConnection.connected())
-        mNameChangedConnection.disconnect();
-}
-
-// virtual
-BOOL LLPanelProfileLegacy::postBuild()
-{
-    mPanelGroups = static_cast<LLPanelProfileGroups*>(getChild<LLUICtrl>("avatar_groups_tab_panel"));
-    mPanelPicks = static_cast<LLPanelProfilePicks*>(getChild<LLUICtrl>("avatar_picks_tab_panel"));
-    mPanelPicks->setProfilePanel(this);
-
-    if (dynamic_cast<LLSideTrayPanelContainer*>(getParent()) != nullptr)
-        getChild<LLUICtrl>("back")->setCommitCallback(boost::bind(&LLPanelProfileLegacy::onBackBtnClick, this));
-    else if (dynamic_cast<LLFloater*>(getParent()) != nullptr)
-        getChild<LLUICtrl>("back")->setCommitCallback(boost::bind(&LLPanelProfileLegacy::closeParentFloater, this));
-    else
-        getChild<LLUICtrl>("back")->setEnabled(FALSE);
-    getChild<LLTextEditor>("sl_about")->setCommitCallback(boost::bind(&LLPanelProfileLegacy::onCommitAvatarProperties, this));
-    getChild<LLTextEditor>("fl_about")->setCommitCallback(boost::bind(&LLPanelProfileLegacy::onCommitAvatarProperties, this));
-    getChild<LLTextureCtrl>("sl_profile_pic")->setCommitCallback(boost::bind(&LLPanelProfileLegacy::onCommitAvatarProperties, this));
-    getChild<LLTextureCtrl>("fl_profile_pic")->setCommitCallback(boost::bind(&LLPanelProfileLegacy::onCommitAvatarProperties, this));
-    getChild<LLTextEditor>("notes")->setCommitCallback(boost::bind(&LLPanelProfileLegacy::onCommitNotes, this, _1));
-    getChild<LLTextEditor>("avatar_name")->setDoubleClickCallback(boost::bind(&LLPanelProfileLegacy::onDoubleClickName, this));
-    return TRUE;
-}
-
-// virtual
-void LLPanelProfileLegacy::reshape(S32 width, S32 height, BOOL called_from_parent)
-{
-    // Temporarily add saved children back and reshape them.
-    mChildStack.preParentReshape();
-    LLPanel::reshape(width, height, called_from_parent);
-    mChildStack.postParentReshape();
-}
-
-// virtual
-void LLPanelProfileLegacy::onOpen(const LLSD& key)
-{
-    if (!key.has("avatar_id")) return;
-    const LLUUID av_id = key["avatar_id"].asUUID();
-
-    if (key.has("action"))
-    {
-        // *TODO: Actions, if any
-        return;
-    }
-
-    if (mNameChangedConnection.connected())
-    {
-        mNameChangedConnection.disconnect();
-    }
-
-    setAvatarId(av_id);
-
-    mPanelGroups->onOpen(LLSD(av_id));
-    mPanelPicks->onOpen(LLSD(av_id));
-    // Oh joy!
-    bool is_self = (getAvatarId() == gAgentID);
-    getChild<LLView>("sl_profile_pic")->setEnabled(is_self);
-    getChild<LLView>("fl_profile_pic")->setEnabled(is_self);
-    getChild<LLView>("sl_about")->setEnabled(is_self);
-    getChild<LLView>("fl_about")->setEnabled(is_self);
-    getChild<LLView>("www")->setVisible(!is_self);
-    getChild<LLView>("www_edit")->setVisible(is_self);
-    getChild<LLView>("allow_publish")->setVisible(is_self);
-    //childSetEnabled("wanna_something", is_self);
-    //childSetEnabled("can_something", is_self);
-    //childSetEnabled("languages", is_self);
-    for (const std::string& checkbox: sWantCheckboxes)
-        childSetEnabled(checkbox, is_self);
-    for (const std::string& checkbox: sSkillsCheckboxes)
-        childSetEnabled(checkbox, is_self);
-    childSetEnabled("drop_target", !is_self);
-    getChild<LLLayoutPanel>("avatar_in_search", is_self);
-    getChild<LLDropTarget>("drop_target")->setAgentID(av_id);
-    //resetInterestsControlValues();
-
-    updateData();
-    resetControls();
-
-    getChild<LLAccordionCtrl>("avatar_accordion")->expandDefaultTab();
-}
-
-void LLPanelProfileLegacy::resetControls()
-{
-    LLButton* button = getChild<LLButton>("btn_chat");
-    button->setEnabled(getAvatarId() != gAgentID);
-    button = getChild<LLButton>("btn_friend");
-    button->setEnabled(getAvatarId() != gAgentID);
-    button->setLabel(getString((LLAvatarTracker::instance().getBuddyInfo(getAvatarId()) == nullptr)
-                               ? "add_friend" : "remove_friend"));
-    button = getChild<LLButton>("btn_block");
-    button->setEnabled(getAvatarId() != gAgentID);
-    button->setLabel(LLTrans::getString(LLMuteList::getInstance()->isMuted(getAvatarId())
-                                        ? "UnmuteAvatar"
-                                        : "MuteAvatar"));
-}
-
-//void LLPanelProfileLegacy::resetInterestsControlValues()
-//{
-//    for (U32 i = 0; i < sWantCheckboxes.size(); ++i)
-//    {
-//        getChild<LLCheckBoxCtrl>(sWantCheckboxes.at(i))->setValue(FALSE);
-//    }
-//
-//    for (U32 i = 0; i < sSkillsCheckboxes.size(); ++i)
-//    {
-//        getChild<LLCheckBoxCtrl>(sSkillsCheckboxes.at(i))->setValue(FALSE);
-//    }
-//    getChild<LLLineEditor>("wanna_something")->setText(LLStringUtil::null);
-//    getChild<LLLineEditor>("can_something")->setText(LLStringUtil::null);
-//    getChild<LLLineEditor>("languages")->setText(LLStringUtil::null);
-//}
-
-void LLPanelProfileLegacy::updateData()
-{
-    setProgress(true);
-
-    const std::string cap_url = gAgent.getRegionCapability(AGENT_PROFILE_CAP);
-    if (!cap_url.empty())
-    {
-        const auto& agent_id = getAvatarId();
-        auto handle = getHandle();
-        LLCoros::instance().launch("requestAvatarProfileCoro", [cap_url, agent_id, handle]() {
-            LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
-            LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t
-                httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("request_avatar_properties_coro", httpPolicy));
-            LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
-            LLCore::HttpHeaders::ptr_t httpHeaders;
-
-            LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
-            httpOpts->setFollowRedirects(true);
-
-            std::string finalUrl = cap_url + "/" + agent_id.asString();
-
-            LLSD result = httpAdapter->getAndSuspend(httpRequest, finalUrl, httpOpts, httpHeaders);
-
-            LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
-            LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
-
-            LL_DEBUGS("AvatarProperties") << "Agent id: " << agent_id << " Result: " << httpResults << LL_ENDL;
-
-            if (!status
-                || !result.has("id")
-                || agent_id != result["id"].asUUID())
-            {
-                LL_WARNS("AvatarProperties") << "Failed to get agent information for id " << agent_id << LL_ENDL;
-                return;
-            }
-
-            if (handle.isDead())
-            {
-                // panel is dead
-                return;
-            }
-
-            LLPanelProfileLegacy* legacy_sidetray = (LLPanelProfileLegacy*)handle.get();
-            if (!legacy_sidetray)
-            {
-                return;
-            }
-
-            // AgentProfile dumps all results into a big ol' map. Let's build some structs and make a bunch of calls
-            // to processProperties()
-            LLAvatarData avatar_data;
-
-            avatar_data.agent_id = agent_id;
-            avatar_data.avatar_id = agent_id;
-            avatar_data.image_id = result["sl_image_id"].asUUID();
-            avatar_data.fl_image_id = result["fl_image_id"].asUUID();
-            avatar_data.partner_id = result["partner_id"].asUUID();
-            avatar_data.about_text = result["sl_about_text"].asString();
-            avatar_data.fl_about_text = result["fl_about_text"].asString();
-            avatar_data.born_on = result["member_since"].asDate();
-            avatar_data.profile_url = result.has("home_page")
-                ? result["home_page"].asString() : getProfileURL(agent_id.asString());
-
-            avatar_data.flags = 0;
-            if (result["online"].asBoolean())
-            {
-                avatar_data.flags |= AVATAR_ONLINE;
-            }
-            if (result["allow_publish"].asBoolean())
-            {
-                avatar_data.flags |= AVATAR_ALLOW_PUBLISH;
-            }
-            if (result["identified"].asBoolean())
-            {
-                avatar_data.flags |= AVATAR_IDENTIFIED;
-            }
-            if (result["transacted"].asBoolean())
-            {
-                avatar_data.flags |= AVATAR_TRANSACTED;
-            }
-
-            avatar_data.caption_index = 0;
-            if (result.has("charter_member"))  // won't be present if "caption" is set
-            {
-                avatar_data.caption_index = result["charter_member"].asInteger();
-            }
-            else if (result.has("caption"))
-            {
-                avatar_data.caption_text = result["caption"].asString();
-            }
-            legacy_sidetray->processProperties(&avatar_data, APT_PROPERTIES);
-
-            LLSD groups_array = result["groups"];
-            LLAvatarGroups avatar_groups;
-            avatar_groups.agent_id = agent_id;
-            avatar_groups.avatar_id = agent_id;
-
-            for (LLSD::array_const_iterator it = groups_array.beginArray();
-                it != groups_array.endArray(); ++it)
-            {
-                const LLSD& group_info = *it;
-                LLAvatarGroups::LLGroupData group_data;
-                group_data.group_powers = 0;
-                group_data.group_title = group_info["name"].asString();
-                group_data.group_id = group_info["id"].asUUID();
-                group_data.group_name = group_info["name"].asString();
-                group_data.group_insignia_id = group_info["image_id"].asUUID();
-
-                avatar_groups.group_list.push_back(group_data);
-            }
-
-            auto* groups_panel = static_cast<LLPanelProfileGroups*>(legacy_sidetray->getChild<LLUICtrl>("avatar_groups_tab_panel"));
-
-            groups_panel->processProperties(&avatar_groups, APT_GROUPS);
-            legacy_sidetray->processProperties(&avatar_groups, APT_GROUPS);
-
-            LLAvatarNotes avatar_notes;
-            avatar_notes.agent_id = agent_id;
-            avatar_notes.target_id = agent_id;
-            avatar_notes.notes = result["notes"].asString();
-
-            legacy_sidetray->processProperties(&avatar_notes, APT_NOTES);
-
-            LLSD picks_array = result["picks"];
-            LLAvatarPicks avatar_picks;
-            avatar_picks.agent_id = agent_id;
-            avatar_picks.target_id = agent_id;
-            for (LLSD::array_const_iterator it = picks_array.beginArray();
-                it != picks_array.endArray(); ++it)
-            {
-                const LLSD& pick_data = *it;
-                avatar_picks.picks_list.emplace_back(pick_data["id"].asUUID(), pick_data["name"].asString());
-            }
-
-            legacy_sidetray->processProperties(&avatar_picks, APT_PICKS);
-
-            // bonus time...
-            if (result.has("customer_type"))
-            {
-                LLUICtrl* internal_icon = legacy_sidetray->getChild<LLUICtrl>("account_type_internal");
-                LLUICtrl* premium_icon = legacy_sidetray->getChild<LLUICtrl>("account_type_premium");
-                LLUICtrl* plus_icon = legacy_sidetray->getChild<LLUICtrl>("account_type_plus");
-                const std::string& type = result["customer_type"].asStringRef();
-
-                if (type == "Internal")
-                {
-                    internal_icon->setVisible(true);
-                    premium_icon->setVisible(false);
-                    plus_icon->setVisible(false);
-                }
-                else if (type == "Monthly" || type == "Quarterly" || type == "Annual")
-                {
-                    internal_icon->setVisible(false);
-                    premium_icon->setVisible(true);
-                    plus_icon->setVisible(false);
-                }
-                else if (type.substr(0, 12) == "Premium_Plus")
-                {
-                    internal_icon->setVisible(false);
-                    premium_icon->setVisible(false);
-                    plus_icon->setVisible(true);
-                }
-                else /* if (type == "Base") */
-                {
-                    internal_icon->setVisible(false);
-                    premium_icon->setVisible(false);
-                    plus_icon->setVisible(false);
-                }
-            }
-
-            });
-    }
-
-    mAvatarNameCacheConnection = LLAvatarNameCache::get(getAvatarId(),
-        boost::bind(&LLPanelProfileLegacy::onAvatarNameCache, this, _1, _2));
-
-    const LLRelationship* relation = LLAvatarTracker::instance().getBuddyInfo(getAvatarId());
-    bool is_other = (relation && getAvatarId() != gAgentID);
-    getChild<LLLayoutPanel>("avatar_perm")->setVisible(is_other);
-    if (is_other)
-    {
-        S32 rights = relation->getRightsGrantedTo();
-        getChild<LLCheckBoxCtrl>("allow_show_online")->setValue(rights & LLRelationship::GRANT_ONLINE_STATUS ? TRUE : FALSE);
-        getChild<LLCheckBoxCtrl>("allow_mapping")->setValue(rights & LLRelationship::GRANT_MAP_LOCATION ? TRUE : FALSE);
-        getChild<LLCheckBoxCtrl>("allow_object_perms")->setValue(rights & LLRelationship::GRANT_MODIFY_OBJECTS ? TRUE : FALSE);
-    }
-}
-
-void LLPanelProfileLegacy::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
-{
-    getChild<LLTextEditor>("avatar_name")->setText(av_name.getCompleteName());
-}
-
-void LLPanelProfileLegacy::sendAvatarProfileCoro(std::string url, LLSD payload)
-{
-    LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
-    LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t
-        httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("send_avatar_profile_coro", httpPolicy));
-    LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
-    LLCore::HttpHeaders::ptr_t httpHeaders;
-
-    LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
-    httpOpts->setFollowRedirects(true);
-
-    std::string full_url = url + "/" + getAvatarId().asString();
-
-    LLSD result = httpAdapter->putAndSuspend(httpRequest, full_url, payload, httpOpts, httpHeaders);
-
-    LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
-    LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
-
-    if (!status)
-    {
-        LL_WARNS("LegacyProfiles") << "Failed to put agent information " << payload << " for id " << getAvatarId() << LL_ENDL;
-        return;
-    }
-
-    LL_DEBUGS("LegacyProfiles") << "Agent id: " << getAvatarId() << " Payload: " << payload << " Result: " << httpResults << LL_ENDL;
-}
-
-void LLPanelProfileLegacy::processProperties(void* data, EAvatarProcessorType type)
-{
-    if (!data) return;
-    switch(type)
-    {
-        case APT_PROPERTIES:
-        {
-            const LLAvatarData* pData = static_cast<const LLAvatarData*>(data);
-            if (!pData || pData->avatar_id != getAvatarId()) return;
-            getChild<LLTextureCtrl>("sl_profile_pic")->setValue(pData->image_id);
-            getChild<LLTextureCtrl>("fl_profile_pic")->setValue(pData->fl_image_id);
-            if (pData->partner_id.notNull())
-            {
-                getChild<LLTextBase>("partner_info")->setText(LLSLURL("agent", pData->partner_id, "inspect").getSLURLString());
-                getChild<LLTextBase>("partner_label")->setVisible(TRUE);
-                getChild<LLTextBase>("partner_info")->setVisible(TRUE);
-            }
-            else
-            {
-                getChild<LLTextBase>("partner_label")->setVisible(FALSE);
-                getChild<LLTextBase>("partner_info")->setVisible(FALSE);
-            }
-            getChild<LLTextEditor>("sl_about")->setText(pData->about_text);
-            getChild<LLTextEditor>("fl_about")->setText(pData->fl_about_text);
-            getChild<LLTextBase>("www")->setText(pData->profile_url);
-            getChild<LLLineEditor>("www_edit")->setText(pData->profile_url);
-
-            LLStringUtil::format_map_t args;
-            std::string birth_date = LLTrans::getString("AvatarBirthDateFormatFull");
-            LLStringUtil::format(birth_date, LLSD().with("datetime", static_cast<S32>(pData->born_on.secondsSinceEpoch())));
-            args["[AGE]"] = LLDateUtil::ageFromDate(pData->born_on, LLDate::now());
-            args["[REZDAY]"] = birth_date;
-            args["[ACCOUNT_TYPE]"] = LLAvatarPropertiesProcessor::accountType(pData);
-            args["[PAYMENT_INFO]"] = LLAvatarPropertiesProcessor::paymentInfo(pData);
-            args["[AGE_VERIFIED]"] = pData->flags & AVATAR_AGEVERIFIED ? getString("age_verified") : LLStringUtil::null;
-            LLSD formatted_info(getString("account_info_fmt", args));
-            getChild<LLTextBase>("account_info")->setValue(formatted_info);
-            formatted_info = LLSD(getString("rezday_fmt", args));
-            getChild<LLTextBase>("rezday")->setValue(formatted_info);
-            getChild<LLView>("cake")->setVisible(pData->born_on.toHTTPDateString(LLStringExplicit("%d %b")) ==
-                            LLDate::now().toHTTPDateString(LLStringExplicit("%d %b")));
-            getChild<LLCheckBoxCtrl>("allow_publish")->setValue(static_cast<bool>(pData->flags & AVATAR_ALLOW_PUBLISH));
-            getChild<LLUICtrl>("online")->setVisible(static_cast<BOOL>(pData->flags & AVATAR_ONLINE ||
-                                                                       pData->avatar_id == gAgentID));
-            break;
-        }
-        case APT_NOTES:
-        {
-            const LLAvatarNotes* pData = static_cast<const LLAvatarNotes*>(data);
-            if (!pData || pData->target_id != getAvatarId()) return;
-            getChild<LLTextEditor>("notes")->setValue(pData->notes);
-            break;
-        }
-        //case APT_INTERESTS:
-        //{
-        //    const LLAvatarInterests* pData = static_cast<const LLAvatarInterests*>(data);
-        //    if (!pData || pData->avatar_id != getAvatarId()) return;
-
-        //    for (U32 i = 0; i < sWantCheckboxes.size(); ++i)
-        //    {
-        //        getChild<LLCheckBoxCtrl>(sWantCheckboxes.at(i))->setValue(pData->want_to_mask & (1<<i) ? TRUE : FALSE);
-        //    }
-
-        //    for (U32 i = 0; i < sSkillsCheckboxes.size(); ++i)
-        //    {
-        //        getChild<LLCheckBoxCtrl>(sSkillsCheckboxes.at(i))->setValue(pData->skills_mask & (1<<i) ? TRUE : FALSE);
-        //    }
-        //    getChild<LLLineEditor>("wanna_something")->setText(pData->want_to_text);
-        //    getChild<LLLineEditor>("can_something")->setText(pData->skills_text);
-        //    getChild<LLLineEditor>("languages")->setText(pData->languages_text);
-        //    break;
-        //}
-        case APT_GROUPS:
-        {
-            const LLAvatarGroups* pData = static_cast<LLAvatarGroups*>(data);
-            if(!pData || getAvatarId() != pData->avatar_id) return;
-
-            showTab("avatar_groups_tab", !pData->group_list.empty());
-            break;
-        }
-        // These are handled by their respective panels
-        case APT_PICKS:
-        case APT_CLASSIFIEDS:
-        case APT_PICK_INFO:
-        case APT_CLASSIFIED_INFO:
-        // Used by LLAgent not profiles. ;)
-        case APT_TEXTURES:
-        default:
-            break;
-    }
-    setProgress(false);
-}
-
-void LLPanelProfileLegacy::setProgress(bool started)
-{
-    LLLoadingIndicator* indicator = getChild<LLLoadingIndicator>("progress_indicator");
-    indicator->setVisible(started);
-    if (started)
-        indicator->start();
-    else
-        indicator->stop();
-}
-
-void LLPanelProfileLegacy::showTab(std::string_view name, bool show) const
-{
-    getChild<LLAccordionCtrlTab>(name)->setVisible(show);
-    getChild<LLAccordionCtrl>("avatar_accordion")->arrange();
-}
-
-LLPanel* LLPanelProfileLegacy::expandTab(const std::string& name) const
-{
-    getChild<LLAccordionCtrl>("avatar_accordion")->expandTab(name);
-    return getChild<LLAccordionCtrlTab>(name)->getChild<LLPanel>(name + "_panel");
-}
-
-LLPanel* LLPanelProfileLegacy::getExpandedTab() const
-{
-    const LLAccordionCtrlTab* tab = getChild<LLAccordionCtrl>("avatar_accordion")->getExpandedTab();
-    return tab ? tab->getChild<LLPanel>(tab->getName() + "_panel") : nullptr;
-}
-
-void LLPanelProfileLegacy::onCommitAction(const LLSD& userdata)
-{
-    const std::string action = userdata.asString();
-    if (action == "friend")
-    {
-        if (LLAvatarTracker::instance().getBuddyInfo(getAvatarId()) == nullptr)
-            LLAvatarActions::requestFriendshipDialog(getAvatarId());
-        else
-            LLAvatarActions::removeFriendDialog(getAvatarId());
-        resetControls();
-    }
-    else if (action == "block")
-    {
-        LLAvatarActions::toggleBlock(getAvatarId());
-        resetControls();
-    }
-    else if (action == "chat")
-        LLAvatarActions::startIM(getAvatarId());
-    else if (action == "call")
-        LLAvatarActions::startCall(getAvatarId());
-    else if (action == "share")
-        LLAvatarActions::share(getAvatarId());
-    else if (action == "teleport")
-        LLAvatarActions::offerTeleport(getAvatarId());
-    else if (action == "req_teleport")
-        LLAvatarActions::teleportRequest(getAvatarId());
-    else if (action == "map")
-        LLAvatarActions::showOnMap(getAvatarId());
-    else if (action == "pay")
-        LLAvatarActions::pay(getAvatarId());
-    else if (action == "report_abuse")
-        LLFloaterReporter::showFromObject(getAvatarId());
-    else if (action == "upload_sl")
-    {
-        // *TODO:
-    }
-    else if (action == "upload_fl")
-    {
-        // *TODO:
-    }
-    else if (action == "webprofile")
-        ALAvatarActions::showWebProfile(getAvatarId());
-    else
-        LL_WARNS("LegacyProfiles") << "Unhandled action: " << action << LL_ENDL;
-}
-
-bool LLPanelProfileLegacy::isActionEnabled(const LLSD& userdata)
-{
-    bool action_enabled = false;
-    const std::string check = userdata.asString();
-    if (check == "can_has_telefono")
-        action_enabled = (LLAvatarActions::canCall() && getAvatarId() != gAgentID);
-    else if (check == "can_has_teleport")
-        action_enabled = (LLAvatarActions::canOfferTeleport(getAvatarId()) && getAvatarId() != gAgentID);
-    else if (check == "can_has_map")
-    {
-        action_enabled = (LLAvatarTracker::instance().isBuddyOnline(getAvatarId())
-                          && LLAvatarActions::isAgentMappable(getAvatarId()))
-        || gAgent.isGodlike();
-    }
-    else if (check == "can_has_pay")
-        action_enabled = (getAvatarId() != gAgentID);
-    else if (check == "can_share")
-        action_enabled = (getAvatarId() != gAgentID);
-    else if (check == "can_drama")
-        action_enabled = (getAvatarId() != gAgentID);
-    else if (check == "can_upload_pic")
-    {
-        action_enabled = getAvatarId() == gAgentID
-            && !gAgent.getRegionCapability("UploadAgentProfileImage").empty();
-    }
-    else
-        LL_INFOS("LegacyProfiles") << "Unhandled check " << check << LL_ENDL;
-    return action_enabled;
-}
-
-void LLPanelProfileLegacy::onCommitAvatarProperties()
-{
-    if (getAvatarId() != gAgentID) return;
-
-
-    std::string cap = gAgent.getRegionCapability(AGENT_PROFILE_CAP);
-    if (!cap.empty())
-    {
-        LLSD data;
-        data["sl_about_text"] = getChild<LLTextEditor>("sl_about")->getText();
-        data["fl_about_text"] = getChild<LLTextEditor>("fl_about")->getText();
-        data["profile_url"]   = getChild<LLLineEditor>("www_edit")->getText();
-        data["allow_publish"] = getChild<LLCheckBoxCtrl>("allow_publish")->getValue().asBoolean();
-
-        LLCoros::instance().launch(
-            "sendAvatarProfileCoro",
-            boost::bind(&LLPanelProfileLegacy::sendAvatarProfileCoro, this, cap, data));
-    }
-}
-
-void LLPanelProfileLegacy::onCommitNotes(LLUICtrl* ctrl)
-{
-    std::string cap = gAgent.getRegionCapability(AGENT_PROFILE_CAP);
-    if (!cap.empty())
-    {
-        LLCoros::instance().launch("sendAvatarProfileCoro",
-            boost::bind(&LLPanelProfileLegacy::sendAvatarProfileCoro, this, cap,
-            LLSD().with("notes", ctrl->getValue().asString())));
-    }
-}
-
-void LLPanelProfileLegacy::onDoubleClickName()
-{
-    if (getAvatarId() == gAgentID)
-    {
-        LLFloaterReg::showInstance("display_name");
-        mNameChangedConnection = LLViewerDisplayName::addNameChangedCallback(boost::bind(&LLPanelProfileLegacy::onNameChanged, this));
-    }
-}
-
-void LLPanelProfileLegacy::onNameChanged()
-{
-    mAvatarNameCacheConnection = LLAvatarNameCache::get(getAvatarId(),
-                                                        boost::bind(&LLPanelProfileLegacy::onAvatarNameCache, this, _1, _2));
-}
-
-void LLPanelProfileLegacy::onBackBtnClick()
-{
-    LLSideTrayPanelContainer* parent = dynamic_cast<LLSideTrayPanelContainer*>(getParent());
-    if(parent)
-    {
-        parent->openPreviousPanel();
-    }
-}
-
-void LLPanelProfileLegacy::onCommitModifyObjectsRights(LLUICtrl* ctrl)
-{
-    if (ctrl->getValue().asBoolean()) // We want to confirm that the user really wants to grant object rights
-    {
-        LLNotificationsUtil::add("GrantModifyRights",
-                                 LLSD().with("NAME", LLSLURL("agent", getAvatarId(), "inspect").getSLURLString()),
-                                 LLSD(),
-                                 boost::bind(&LLPanelProfileLegacy::handleConfirmModifyRightsCallback, this, _1, _2));
-    }
-    else // No confirmation needed on removing rights
-    {
-        onCommitRights();
-    }
-}
-
-bool LLPanelProfileLegacy::handleConfirmModifyRightsCallback(const LLSD& notification, const LLSD& response)
-{
-    S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-    if (option == 0)
-    {
-        onCommitRights();
-        return true;
-    }
-    // Make sure to flip the checkbox back off
-    findChild<LLCheckBoxCtrl>("allow_object_perms")->setValue(false);
-    return false;
-}
-
-void LLPanelProfileLegacy::closeParentFloater()
-{
-    LLFloater* floater = dynamic_cast<LLFloater*>(getParent());
-    if (floater) floater->closeFloater();
-}
-
-void LLPanelProfileLegacy::onCommitRights()
-{
-    if (!LLAvatarActions::isFriend(getAvatarId())) return;
-    S32 flags = 0;
-    if (getChild<LLCheckBoxCtrl>("allow_show_online")->getValue().asBoolean())
-        flags |= LLRelationship::GRANT_ONLINE_STATUS;
-    if (getChild<LLCheckBoxCtrl>("allow_mapping")->getValue().asBoolean())
-        flags |= LLRelationship::GRANT_MAP_LOCATION;
-    if (getChild<LLCheckBoxCtrl>("allow_object_perms")->getValue().asBoolean())
-        flags |= LLRelationship::GRANT_MODIFY_OBJECTS;
-
-    LLAvatarPropertiesProcessor::getInstance()->sendFriendRights(getAvatarId(), flags);
-}
-
-void LLPanelProfileLegacy::openPanel(LLPanel* panel, const LLSD& params)
-{
-    // Hide currently visible panel.
-    mChildStack.push();
-
-    // Add the panel or bring it to front.
-    if (panel->getParent() != this)
-    {
-        addChild(panel);
-    }
-    else
-    {
-        sendChildToFront(panel);
-    }
-
-    panel->setVisible(TRUE);
-    panel->setFocus(TRUE); // prevent losing focus by the floater
-    panel->onOpen(params);
-
-    LLRect new_rect = getRect();
-    panel->reshape(new_rect.getWidth(), new_rect.getHeight());
-    new_rect.setLeftTopAndSize(0, new_rect.getHeight(), new_rect.getWidth(), new_rect.getHeight());
-    panel->setRect(new_rect);
-}
-
-void LLPanelProfileLegacy::closePanel(LLPanel* panel)
-{
-    panel->setVisible(FALSE);
-
-    if (panel->getParent() == this)
-    {
-        removeChild(panel);
-
-        // Make the underlying panel visible.
-        mChildStack.pop();
-
-        // Prevent losing focus by the floater
-        const child_list_t* child_list = getChildList();
-        if (!child_list->empty())
-        {
-            child_list->front()->setFocus(TRUE);
-        }
-        else
-        {
-            LL_WARNS() << "No underlying panel to focus." << LL_ENDL;
-        }
-    }
-}
-
-// LLPanelProfilePicks //
-LLPanelProfileLegacy::LLPanelProfilePicks::LLPanelProfilePicks()
-:   LLPanelProfileLegacyTab()
-,   mProfilePanel(nullptr)
-,   mClassifiedsList(nullptr)
-,   mPicksList(nullptr)
-,   mPanelPickEdit(nullptr)
-,   mPanelPickInfo(nullptr)
-,   mPanelClassifiedInfo(nullptr)
-,   mPopupMenuHandle()
-,   mPlusMenuHandle()
-{
-}
-
-LLPanelProfileLegacy::LLPanelProfilePicks::~LLPanelProfilePicks()
-{
-    auto popup_menu = static_cast<LLMenuGL*>(mPopupMenuHandle.get());
-    auto plus_menu = mPlusMenuHandle.get();
-    if (popup_menu)
-    {
-        popup_menu->die();
-        mPopupMenuHandle.markDead();
-    }
-
-    if (plus_menu)
-    {
-        plus_menu->die();
-        mPlusMenuHandle.markDead();
-    }
-}
-
-BOOL LLPanelProfileLegacy::LLPanelProfilePicks::postBuild()
-{
-    mPicksList = getChild<LLFlatListView>("picks_list");
-    mClassifiedsList = getChild<LLFlatListView>("classifieds_list");
-    childSetAction("add_btn", boost::bind(&LLPanelProfilePicks::onClickPlusBtn, this));
-    childSetAction("teleport_btn", boost::bind(&LLPanelProfilePicks::onClickTeleport, this));
-    childSetAction("show_on_map_btn", boost::bind(&LLPanelProfilePicks::onClickShowOnMap, this));
-    childSetAction("info_btn", boost::bind(&LLPanelProfilePicks::onClickInfo, this));
-
-    // setup menu
-    CommitCallbackRegistry::ScopedRegistrar registar;
-    registar.add("Pick.Info", boost::bind(&LLPanelProfilePicks::onClickInfo, this));
-    registar.add("Pick.Edit", boost::bind(&LLPanelProfilePicks::onPanelEdit, this));
-    registar.add("Pick.Teleport", boost::bind(&LLPanelProfilePicks::onClickTeleport, this));
-    registar.add("Pick.Map", boost::bind(&LLPanelProfilePicks::onClickShowOnMap, this));
-    registar.add("Pick.Delete", boost::bind(&LLPanelProfilePicks::onClickDelete, this));
-    //EnableCallbackRegistry::ScopedRegistrar enable_registar;
-    //enable_registar.add("Pick.Enable", boost::bind(&LLPanelProfilePicks::onEnableMenuItem, this, _2));
-
-    auto popup_menu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_picks.xml", gMenuHolder, child_registry_t::instance());
-    if (popup_menu)
-        mPopupMenuHandle = popup_menu->getHandle();
-
-    CommitCallbackRegistry::ScopedRegistrar plus_registar;
-    plus_registar.add("Picks.Plus.Action", boost::bind(&LLPanelProfilePicks::onPlusMenuItemClicked, this, _2));
-    mEnableCallbackRegistrar.add("Picks.Plus.Enable", boost::bind(&LLPanelProfilePicks::isActionEnabled, this, _2));
-    auto plus_menu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_picks_plus.xml", gMenuHolder, child_registry_t::instance());
-    if (plus_menu)
-        mPlusMenuHandle = plus_menu->getHandle();
-
-    updateButtons();
-    return TRUE;
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onOpen(const LLSD& key)
-{
-    const LLUUID id(key.asUUID());
-    BOOL self = (gAgent.getID() == id);
-
-    setAvatarId(id);
-    updateData();
-
-    getChild<LLView>("add_btn_lp")->setVisible(self);
-    auto menu = static_cast<LLMenuGL*>(mPopupMenuHandle.get());
-    if (menu)
-    {
-        menu->setItemVisible("pick_delete", self);
-        menu->setItemVisible("pick_edit", self);
-        menu->setItemVisible("pick_separator", self);
-    }
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::updateData()
-{
-    mPicksList->clear();
-    mClassifiedsList->clear();
-    LLAvatarPropertiesProcessor::getInstance()->sendAvatarClassifiedsRequest(getAvatarId());
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::processProperties(void* data, EAvatarProcessorType type)
-{
-    if (APT_PICKS == type)
-    {
-        mPicksList->clear();
-        LLAvatarPicks* avatar_picks = static_cast<LLAvatarPicks*>(data);
-        if (!avatar_picks || getAvatarId() != avatar_picks->target_id) return;
-        for (const LLAvatarPicks::pick_data_t& pick: avatar_picks->picks_list)
-        {
-            const LLUUID pick_id = pick.first;
-            const std::string pick_name = pick.second;
-
-            LLPickItem* picture = LLPickItem::create();
-            picture->childSetAction("info_chevron", boost::bind(&LLPanelProfilePicks::onClickInfo, this));
-            picture->setPickName(pick_name);
-            picture->setPickId(pick_id);
-            picture->setCreatorId(getAvatarId());
-
-            LLAvatarPropertiesProcessor::instance().addObserver(getAvatarId(), picture);
-            picture->update();
-
-            LLSD pick_value = LLSD();
-            pick_value.insert(PICK_ID, pick_id);
-            pick_value.insert(PICK_NAME, pick_name);
-            pick_value.insert(PICK_CREATOR_ID, getAvatarId());
-
-            mPicksList->addItem(picture, pick_value);
-            picture->setMouseUpCallback(boost::bind(&LLPanelProfilePicks::updateButtons, this));
-            picture->setRightMouseUpCallback(boost::bind(&LLPanelProfilePicks::onRightMouseUpItem, this, _1, _2, _3, _4));
-        }
-        showAccordion("tab_picks", mPicksList->size());
-    }
-    else if (APT_CLASSIFIEDS == type)
-    {
-        mClassifiedsList->clear();
-        LLAvatarClassifieds* c_info = static_cast<LLAvatarClassifieds*>(data);
-        if (!c_info || getAvatarId() != c_info->target_id) return;
-        for (const LLAvatarClassifieds::classified_data& c_data: c_info->classifieds_list)
-        {
-            LLClassifiedItem* c_item = new LLClassifiedItem(getAvatarId(), c_data.classified_id);
-            c_item->childSetAction("info_chevron", boost::bind(&LLPanelProfilePicks::onClickInfo, this));
-            c_item->setClassifiedName(c_data.name);
-
-            LLSD pick_value = LLSD();
-            pick_value.insert(CLASSIFIED_ID, c_data.classified_id);
-            pick_value.insert(CLASSIFIED_NAME, c_data.name);
-
-            if (!findClassifiedById(c_data.classified_id))
-            {
-                mClassifiedsList->addItem(c_item, pick_value);
-            }
-            c_item->setMouseUpCallback(boost::bind(&LLPanelProfilePicks::updateButtons, this));
-            c_item->setRightMouseUpCallback(boost::bind(&LLPanelProfilePicks::onRightMouseUpItem, this, _1, _2, _3, _4));
-        }
-        showAccordion("tab_classifieds", mClassifiedsList->size());
-    }
-    updateButtons();
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::showAccordion(const std::string& name, bool show)
-{
-    getChild<LLAccordionCtrlTab>(name)->setVisible(show);
-    LLAccordionCtrl* acc = getChild<LLAccordionCtrl>("accordion");
-    acc->arrange();
-}
-
-LLClassifiedItem *LLPanelProfileLegacy::LLPanelProfilePicks::findClassifiedById(const LLUUID& classified_id) const
-{
-    // HACK - find item by classified id.  Should be a better way.
-    std::vector<LLPanel*> items;
-    mClassifiedsList->getItems(items);
-    LLClassifiedItem* c_item = nullptr;
-    for(LLPanel* it: items)
-    {
-        LLClassifiedItem *test_item = dynamic_cast<LLClassifiedItem*>(it);
-        if (test_item && test_item->getClassifiedId() == classified_id)
-        {
-            c_item = test_item;
-            break;
-        }
-    }
-    return c_item;
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::updateButtons()
-{
-    bool has_selected = (mPicksList->numSelected() > 0||
-                         mClassifiedsList->numSelected() > 0);
-
-    getChildView("info_btn")->setEnabled(has_selected);
-    getChildView("teleport_btn")->setEnabled(has_selected);
-    getChildView("show_on_map_btn")->setEnabled(has_selected);
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onClickInfo()
-{
-    if(mClassifiedsList->numSelected() > 0)
-        openClassifiedInfo();
-    else if(mPicksList->numSelected() > 0)
-        openPickInfo();
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onClickPlusBtn()
-{
-    auto menu = mPlusMenuHandle.get();
-    if (menu)
-    {
-        LLRect rect(getChildView("add_btn")->getRect());
-        menu->setButtonRect(rect, this);
-        LLMenuGL::showPopup(this, menu, rect.mLeft, rect.mTop);
-    }
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onClickTeleport()
-{
-    LLPickItem* pick_item = static_cast<LLPickItem*>(mPicksList->getSelectedItem());
-    LLClassifiedItem* c_item = getSelectedClassifiedItem();
-
-    LLVector3d pos;
-    if (pick_item)
-    {
-        pos = pick_item->getPosGlobal();
-    }
-    else if (c_item)
-    {
-        pos = c_item->getPosGlobal();
-        LLPanelClassifiedInfo::sendClickMessage("teleport", false,
-                                                c_item->getClassifiedId(), LLUUID::null, pos, LLStringUtil::null);
-    }
-
-    if (!pos.isExactlyZero())
-    {
-        gAgent.teleportViaLocation(pos);
-        LLFloaterWorldMap::getInstance()->trackLocation(pos);
-    }
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onClickShowOnMap()
-{
-    LLPickItem* pick_item = static_cast<LLPickItem*>(mPicksList->getSelectedItem());
-    LLClassifiedItem* c_item = getSelectedClassifiedItem();
-
-    LLVector3d pos;
-    if (pick_item)
-    {
-        pos = pick_item->getPosGlobal();
-    }
-    else if (c_item)
-    {
-        LLPanelClassifiedInfo::sendClickMessage("map", false,
-                                                c_item->getClassifiedId(), LLUUID::null, pos, LLStringUtil::null);
-        pos = c_item->getPosGlobal();
-    }
-
-    LLFloaterWorldMap::getInstance()->trackLocation(pos);
-    LLFloaterReg::showInstance("world_map", "center");
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onClickDelete()
-{
-    LLSD value = mPicksList->getSelectedValue();
-    if (value.isDefined())
-    {
-        LLSD args;
-        args["PICK"] = value[PICK_NAME];
-        LLNotificationsUtil::add("ProfileDeletePick", args, LLSD(),
-            boost::bind(&LLPanelProfilePicks::callbackDeletePick, this, _1, _2));
-        return;
-    }
-    value = mClassifiedsList->getSelectedValue();
-    if (value.isDefined())
-    {
-        LLSD args;
-        args["CLASSIFIED"] = value[CLASSIFIED_NAME];
-        LLNotificationsUtil::add("ProfileDeleteClassified", args, LLSD(),
-            boost::bind(&LLPanelProfilePicks::callbackDeleteClassified, this, _1, _2));
-        return;
-    }
-}
-
-bool LLPanelProfileLegacy::LLPanelProfilePicks::callbackDeletePick(const LLSD& notification, const LLSD& response)
-{
-    S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-    LLSD pick_value = mPicksList->getSelectedValue();
-
-    if (0 == option)
-    {
-        LLAvatarPropertiesProcessor::instance().sendPickDelete(pick_value[PICK_ID]);
-        mPicksList->removeItemByValue(pick_value);
-    }
-    updateButtons();
-    return false;
-}
-
-bool LLPanelProfileLegacy::LLPanelProfilePicks::callbackDeleteClassified(const LLSD& notification, const LLSD& response)
-{
-    S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-    LLSD value = mClassifiedsList->getSelectedValue();
-
-    if (0 == option)
-    {
-        LLAvatarPropertiesProcessor::instance().sendClassifiedDelete(value[CLASSIFIED_ID]);
-        mClassifiedsList->removeItemByValue(value);
-    }
-    updateButtons();
-    return false;
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::openPickInfo()
-{
-    LLSD selected_value = mPicksList->getSelectedValue();
-    if (selected_value.isUndefined()) return;
-
-    LLPickItem* pick = dynamic_cast<LLPickItem*>(mPicksList->getSelectedItem());
-
-    if (!mPanelPickInfo)
-    {
-        mPanelPickInfo = LLPanelPickInfo::create();
-        mPanelPickInfo->setExitCallback(boost::bind(&LLPanelProfilePicks::onPanelPickClose, this, mPanelPickInfo));
-        mPanelPickInfo->setEditPickCallback(boost::bind(&LLPanelProfilePicks::onPanelPickEdit, this));
-        mPanelPickInfo->setVisible(FALSE);
-    }
-
-    LLSD params;
-    params["pick_id"] = pick->getPickId();
-    params["avatar_id"] = pick->getCreatorId();
-    params["snapshot_id"] = pick->getSnapshotId();
-    params["pick_name"] = pick->getPickName();
-    params["pick_desc"] = pick->getPickDesc();
-
-    getProfilePanel()->openPanel(mPanelPickInfo, params);
-}
-
-// virtual
-void LLPanelProfileLegacy::LLPanelProfilePicks::onRightMouseUpItem(LLUICtrl* item, S32 x, S32 y, MASK mask)
-{
-    updateButtons();
-
-    auto menu = static_cast<LLContextMenu*>(mPopupMenuHandle.get());
-    if (menu)
-    {
-        menu->buildDrawLabels();
-        menu->show(x, y);
-        LLMenuGL::showPopup(item, menu, x, y);
-    }
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::openClassifiedInfo()
-{
-    LLSD selected_value = mClassifiedsList->getSelectedValue();
-    if (selected_value.isUndefined()) return;
-
-    LLClassifiedItem* c_item = getSelectedClassifiedItem();
-
-    if (!mPanelClassifiedInfo)
-    {
-        mPanelClassifiedInfo = LLPanelClassifiedInfo::create();
-        mPanelClassifiedInfo->setExitCallback(boost::bind(&LLPanelProfilePicks::onPanelClassifiedClose, this, mPanelClassifiedInfo));
-        mPanelClassifiedInfo->setEditClassifiedCallback(boost::bind(&LLPanelProfilePicks::onPanelClassifiedEdit, this));
-        mPanelClassifiedInfo->setVisible(FALSE);
-    }
-
-    LLSD params;
-    params["classified_id"] = c_item->getClassifiedId();
-    params["classified_creator_id"] = c_item->getAvatarId();
-    params["classified_snapshot_id"] = c_item->getSnapshotId();
-    params["classified_name"] = c_item->getClassifiedName();
-    params["classified_desc"] = c_item->getDescription();
-    params["from_search"] = false;
-
-    getProfilePanel()->openPanel(mPanelClassifiedInfo, params);
-}
-
-LLClassifiedItem* LLPanelProfileLegacy::LLPanelProfilePicks::getSelectedClassifiedItem() const
-{
-    LLPanel* selected_item = mClassifiedsList->getSelectedItem();
-    if (!selected_item) return nullptr;
-
-    return dynamic_cast<LLClassifiedItem*>(selected_item);
-}
-
-LLPickItem* LLPanelProfileLegacy::LLPanelProfilePicks::getSelectedPickItem() const
-{
-    LLPanel* selected_item = mPicksList->getSelectedItem();
-    if (!selected_item) return nullptr;
-
-    return dynamic_cast<LLPickItem*>(selected_item);
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onPanelClassifiedSave(LLPanelClassifiedEdit* panel)
-{
-    if (!panel->canClose())
-    {
-        return;
-    }
-
-    if (panel->isNew())
-    {
-        mEditClassifiedPanels[panel->getClassifiedId()] = panel;
-
-        LLClassifiedItem* c_item = new LLClassifiedItem(getAvatarId(), panel->getClassifiedId());
-        c_item->fillIn(panel);
-
-        LLSD c_value;
-        c_value.insert(CLASSIFIED_ID, c_item->getClassifiedId());
-        c_value.insert(CLASSIFIED_NAME, c_item->getClassifiedName());
-        mClassifiedsList->addItem(c_item, c_value, ADD_TOP);
-
-        //c_item->setDoubleClickCallback(boost::bind(&LLPanelProfilePicks::onDoubleClickClassifiedItem, this, _1));
-        c_item->setRightMouseUpCallback(boost::bind(&LLPanelProfilePicks::onRightMouseUpItem, this, _1, _2, _3, _4));
-        c_item->setMouseUpCallback(boost::bind(&LLPanelProfilePicks::updateButtons, this));
-        c_item->childSetAction("info_chevron", boost::bind(&LLPanelProfilePicks::onClickInfo, this));
-
-        // order does matter, showTab will invoke arrange for accordions.
-        //mClassifiedsAccTab->changeOpenClose(false);
-        //showTab("tab_classifieds", true);
-    }
-    else if (panel->isNewWithErrors())
-    {
-        LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem());
-        llassert(c_item);
-        if (c_item)
-        {
-            c_item->fillIn(panel);
-        }
-    }
-    else
-    {
-        onPanelClassifiedClose(panel);
-        return;
-    }
-
-    onPanelPickClose(panel);
-    updateButtons();
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onPanelClassifiedClose(LLPanelClassifiedInfo* panel)
-{
-    if(panel->getInfoLoaded() && !panel->isDirty())
-    {
-        std::vector<LLSD> values;
-        mClassifiedsList->getValues(values);
-        for (auto& value : values)
-        {
-            LLUUID c_id = value[CLASSIFIED_ID].asUUID();
-            if(panel->getClassifiedId() == c_id)
-            {
-                LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getItemByValue(value));
-                llassert(c_item);
-                if (c_item)
-                {
-                    c_item->setClassifiedName(panel->getClassifiedName());
-                    c_item->setDescription(panel->getDescription());
-                    c_item->setSnapshotId(panel->getSnapshotId());
-                }
-            }
-        }
-    }
-
-    onPanelPickClose(panel);
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onDoubleClickClassifiedItem(LLUICtrl* item)
-{
-    LLSD value = mClassifiedsList->getSelectedValue();
-    if (value.isUndefined()) return;
-
-    LLSD args;
-    args["CLASSIFIED"] = value[CLASSIFIED_NAME];
-    LLNotificationsUtil::add("TeleportToClassified", args, LLSD(),
-        boost::bind(&LLPanelProfilePicks::callbackTeleport, this, _1, _2));
-}
-
-bool LLPanelProfileLegacy::LLPanelProfilePicks::callbackTeleport(const LLSD& notification, const LLSD& response)
-{
-    S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-
-    if (0 == option)
-    {
-        onClickTeleport();
-    }
-    return false;
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onPanelPickClose(LLPanel* panel)
-{
-    getProfilePanel()->closePanel(panel);
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onPanelPickSave(LLPanel* panel)
-{
-    getProfilePanel()->closePanel(panel);
-    updateButtons();
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onPanelPickEditSave(LLPanelPickEdit* panel)
-{
-    panel->sendUpdate();
-    getProfilePanel()->closePanel(panel);
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onPanelEdit()
-{
-    if (getSelectedPickItem())
-    {
-        onPanelPickEdit();
-    }
-    else if (getSelectedClassifiedItem())
-    {
-        onPanelClassifiedEdit();
-    }
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onPanelClassifiedEdit()
-{
-    LLSD selected_value = mClassifiedsList->getSelectedValue();
-    if (selected_value.isUndefined()) return;
-
-    LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem());
-    llassert(c_item);
-    if (!c_item) return;
-    editClassified(c_item->getClassifiedId());
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::editClassified(const LLUUID& classified_id)
-{
-    LLClassifiedItem* c_item = findClassifiedById(classified_id);
-    if (!c_item)
-    {
-        LL_WARNS() << "item not found for classified_id " << classified_id << LL_ENDL;
-        return;
-    }
-
-    LLSD params;
-    params["classified_id"] = c_item->getClassifiedId();
-    params["classified_creator_id"] = c_item->getAvatarId();
-    params["snapshot_id"] = c_item->getSnapshotId();
-    params["name"] = c_item->getClassifiedName();
-    params["desc"] = c_item->getDescription();
-    params["category"] = (S32)c_item->getCategory();
-    params["content_type"] = (S32)c_item->getContentType();
-    params["auto_renew"] = c_item->getAutoRenew();
-    params["price_for_listing"] = c_item->getPriceForListing();
-    params["location_text"] = c_item->getLocationText();
-
-    LLPanelClassifiedEdit* panel = mEditClassifiedPanels[c_item->getClassifiedId()];
-    if (!panel)
-    {
-        createClassifiedEditPanel(&panel);
-        mEditClassifiedPanels[c_item->getClassifiedId()] = panel;
-    }
-    getProfilePanel()->openPanel(panel, params);
-    panel->setPosGlobal(c_item->getPosGlobal());
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onPanelPickEdit()
-{
-    LLSD selected_value = mPicksList->getSelectedValue();
-    if (selected_value.isUndefined()) return;
-
-    LLPickItem* pick = dynamic_cast<LLPickItem*>(mPicksList->getSelectedItem());
-
-    LLSD params;
-    params["pick_id"] = pick->getPickId();
-    params["avatar_id"] = pick->getCreatorId();
-    params["snapshot_id"] = pick->getSnapshotId();
-    params["pick_name"] = pick->getPickName();
-    params["pick_desc"] = pick->getPickDesc();
-
-    mPanelPickEdit = LLPanelPickEdit::create();
-    mPanelPickEdit->setExitCallback(boost::bind(&LLPanelProfilePicks::onPanelPickClose, this, mPanelPickEdit));
-    mPanelPickEdit->setCancelCallback(boost::bind(&LLPanelProfilePicks::onPanelPickClose, this, mPanelPickEdit));
-    mPanelPickEdit->setSaveCallback(boost::bind(&LLPanelProfilePicks::onPanelPickEditSave, this, mPanelPickEdit));
-    getProfilePanel()->openPanel(mPanelPickEdit, params);
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::onPlusMenuItemClicked(const LLSD& param)
-{
-    std::string value = param.asString();
-
-    if ("new_pick" == value)
-    {
-        createNewPick();
-    }
-    else if ("new_classified" == value)
-    {
-        createNewClassified();
-    }
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::createNewPick()
-{
-    createPickEditPanel();
-
-    getProfilePanel()->openPanel(mPanelPickEdit, LLSD());
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::createNewClassified()
-{
-    LLPanelClassifiedEdit* panel = nullptr;
-    createClassifiedEditPanel(&panel);
-
-    getProfilePanel()->openPanel(panel, LLSD());
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::createPickEditPanel()
-{
-    mPanelPickEdit = LLPanelPickEdit::create();
-    mPanelPickEdit->setExitCallback(boost::bind(&LLPanelProfilePicks::onPanelPickClose, this, mPanelPickEdit));
-    mPanelPickEdit->setSaveCallback(boost::bind(&LLPanelProfilePicks::onPanelPickSave, this, mPanelPickEdit));
-    mPanelPickEdit->setCancelCallback(boost::bind(&LLPanelProfilePicks::onPanelPickClose, this, mPanelPickEdit));
-    mPanelPickEdit->setVisible(FALSE);
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::createClassifiedEditPanel(LLPanelClassifiedEdit** panel)
-{
-
-    if (panel)
-    {
-        LLPanelClassifiedEdit* new_panel = LLPanelClassifiedEdit::create();
-        new_panel->setExitCallback(boost::bind(&LLPanelProfilePicks::onPanelClassifiedClose, this, new_panel));
-        new_panel->setSaveCallback(boost::bind(&LLPanelProfilePicks::onPanelClassifiedSave, this, new_panel));
-        new_panel->setCancelCallback(boost::bind(&LLPanelProfilePicks::onPanelClassifiedClose, this, new_panel));
-        new_panel->setVisible(FALSE);
-        *panel = new_panel;
-    }
-}
-
-bool LLPanelProfileLegacy::LLPanelProfilePicks::isActionEnabled(const LLSD& userdata) const
-{
-    return (!(userdata.asString() == LLStringExplicit("new_pick") && LLAgentPicksInfo::getInstance()->isPickLimitReached()));
-}
-
-void LLPanelProfileLegacy::LLPanelProfilePicks::setProfilePanel(LLPanelProfileLegacy* profile_panel)
-{
-    mProfilePanel = profile_panel;
-}
-
-inline LLPanelProfileLegacy* LLPanelProfileLegacy::LLPanelProfilePicks::getProfilePanel() const
-{
-    llassert_always(mProfilePanel != nullptr);
-    return mProfilePanel;
-}
-
-// LLPanelProfileGroups //
-
-LLPanelProfileLegacy::LLPanelProfileGroups::LLPanelProfileGroups()
-:   LLPanelProfileLegacyTab()
-,   mGroupsText(nullptr)
-,   mGroupsList(nullptr)
-{
-
-}
-
-BOOL LLPanelProfileLegacy::LLPanelProfileGroups::postBuild()
-{
-    mGroupsList = getChild<LLFlatListView>("groups_detail_list");
-    mGroupsText = getChild<LLTextBase>("groups_panel_text");
-    return TRUE;
-}
-
-void LLPanelProfileLegacy::LLPanelProfileGroups::onOpen(const LLSD& key)
-{
-    const LLUUID id(key.asUUID());
-    setAvatarId(id);
-
-    updateData();
-}
-
-void LLPanelProfileLegacy::LLPanelProfileGroups::updateData()
-{
-    mGroupsText->setVisible(TRUE);
-    mGroupsList->clear();
-}
-
-void LLPanelProfileLegacy::LLPanelProfileGroups::processProperties(void* data, EAvatarProcessorType type)
-{
-    if (APT_GROUPS != type) return;
-    const LLAvatarGroups* avatar_groups = static_cast<LLAvatarGroups*>(data);
-    if(!avatar_groups || getAvatarId() != avatar_groups->avatar_id) return;
-
-    for (auto const& gdata: avatar_groups->group_list)
-    {
-        LLProfileGroupItem* item = LLProfileGroupItem::create();
-        item->childSetAction("info_chevron", boost::bind(&LLPanelProfileGroups::showGroup, this, gdata.group_id));
-        item->init(gdata);
-
-        LLSD item_value = LLSD();
-        item_value.insert("group_id", gdata.group_id);
-        item_value.insert("group_name", gdata.group_name);
-        item_value.insert("group_icon", gdata.group_insignia_id);
-        item_value.insert("group_desc", LLStringUtil::null);
-
-        if (!mGroupsList->valueExists(item_value))
-        {
-            mGroupsList->addItem(item, item_value);
-        }
-    }
-}
-
-void LLPanelProfileLegacy::LLPanelProfileGroups::showGroup(const LLUUID& id)
-{
-    LLGroupActions::show(id);
-}
-
-// LLProfileGroupItem //
-
-LLPanelProfileLegacy::LLProfileGroupItem::LLProfileGroupItem()
-:   LLPanel()
-,   mInsignia(LLUUID::null)
-,   mGroupName(LLStringUtil::null)
-,   mCharter(LLStringUtil::null)
-{
-    buildFromFile("panel_profile_legacy_group_list_item.xml");
-}
-
-LLPanelProfileLegacy::LLProfileGroupItem::~LLProfileGroupItem()
-{
-    LLGroupMgr::getInstance()->removeObserver(this);
-}
-
-//static
-LLPanelProfileLegacy::LLProfileGroupItem* LLPanelProfileLegacy::LLProfileGroupItem::create()
-{
-    return new LLProfileGroupItem();
-}
-
-void LLPanelProfileLegacy::LLProfileGroupItem::init(const LLAvatarGroups::LLGroupData& data)
-{
-    setId(data.group_id);
-    setGroupName(data.group_name);
-    setInsignia(data.group_insignia_id);
-    LLGroupMgr::getInstance()->addObserver(this);
-    LLGroupMgr::getInstance()->sendGroupPropertiesRequest(data.group_id);
-
-    LLTextureCtrl* picture = getChild<LLTextureCtrl>("picture");
-    picture->setImageAssetID(data.group_insignia_id);
-}
-
-BOOL LLPanelProfileLegacy::LLProfileGroupItem::postBuild()
-{
-    setMouseEnterCallback(boost::bind(&set_child_visible, this, "hovered_icon", true));
-    setMouseLeaveCallback(boost::bind(&set_child_visible, this, "hovered_icon", false));
-    return TRUE;
-}
-
-void LLPanelProfileLegacy::LLProfileGroupItem::setValue(const LLSD& value)
-{
-    if (!value.isMap()) return;;
-    if (!value.has("selected")) return;
-    getChildView("selected_icon")->setVisible( value["selected"]);
-}
-
-void LLPanelProfileLegacy::LLProfileGroupItem::setId(const LLUUID& id)
-{
-    mID = id;
-}
-
-void LLPanelProfileLegacy::LLProfileGroupItem::setInsignia(const LLUUID& id)
-{
-    mInsignia = id;
-    getChild<LLTextureCtrl>("picture")->setImageAssetID(id);
-}
-
-void LLPanelProfileLegacy::LLProfileGroupItem::setGroupName(const std::string& name)
-{
-    mGroupName = name;
-    getChild<LLUICtrl>("name")->setValue(name);
-}
-
-void LLPanelProfileLegacy::LLProfileGroupItem::setCharter(const std::string& charter)
-{
-    mCharter = charter;
-    getChild<LLUICtrl>("description")->setValue(charter);
-}
-
-void LLPanelProfileLegacy::LLProfileGroupItem::changed(LLGroupChange gc)
-{
-    if (gc != GC_PROPERTIES) return;
-    LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(mID);
-    if (group_data)
-    {
-        setCharter(group_data->mCharter);
-    }
-    LLGroupMgr::getInstance()->removeObserver(this);
-}
-
-// ChildStack //
-
-LLPanelProfileLegacy::ChildStack::ChildStack()
-:   mParent(nullptr)
-{
-}
-
-LLPanelProfileLegacy::ChildStack::~ChildStack()
-{
-    while (!mStack.empty())
-    {
-        view_list_t& top = mStack.back();
-        for (auto viewp : top)
-        {
-            if (viewp)
-            {
-                viewp->die();
-            }
-        }
-        mStack.pop_back();
-    }
-}
-
-void LLPanelProfileLegacy::ChildStack::setParent(LLPanel* parent)
-{
-    llassert_always(parent != nullptr);
-    mParent = parent;
-}
-
-/// Save current parent's child views and remove them from the child list.
-bool LLPanelProfileLegacy::ChildStack::push()
-{
-    view_list_t vlist = *mParent->getChildList();
-
-    for (auto viewp : vlist)
-    {
-        mParent->removeChild(viewp);
-    }
-
-    mStack.push_back(vlist);
-    dump();
-    return true;
-}
-
-/// Restore saved children (adding them back to the child list).
-bool LLPanelProfileLegacy::ChildStack::pop()
-{
-    if (mStack.empty())
-    {
-        LL_WARNS() << "Empty stack" << LL_ENDL;
-        llassert(mStack.size() == 0);
-        return false;
-    }
-
-    view_list_t& top = mStack.back();
-    for (auto viewp : top)
-    {
-        mParent->addChild(viewp);
-    }
-
-    mStack.pop_back();
-    dump();
-    return true;
-}
-
-/// Temporarily add all saved children back.
-void LLPanelProfileLegacy::ChildStack::preParentReshape()
-{
-    mSavedStack = mStack;
-    while(!mStack.empty())
-    {
-        pop();
-    }
-}
-
-/// Add the temporarily saved children back.
-void LLPanelProfileLegacy::ChildStack::postParentReshape()
-{
-    mStack = mSavedStack;
-    mSavedStack = stack_t();
-
-    for (const auto& vlist : mStack)
-    {
-        for (auto viewp : vlist)
-        {
-            LL_DEBUGS() << "removing " << viewp->getName() << LL_ENDL;
-            mParent->removeChild(viewp);
-        }
-    }
-}
-
-void LLPanelProfileLegacy::ChildStack::dump()
-{
-    unsigned lvl = 0;
-    LL_DEBUGS() << "child stack dump:" << LL_ENDL;
-    for (const auto& vlist : mStack)
-    {
-        ++lvl;
-        std::ostringstream dbg_line;
-        dbg_line << "lvl #" << lvl << ":";
-        for (const auto& list_it : vlist)
-        {
-            dbg_line << " " << list_it->getName();
-        }
-        LL_DEBUGS() << dbg_line.str() << LL_ENDL;
-    }
-}
diff --git a/indra/newview/llpanelprofilelegacy.h b/indra/newview/llpanelprofilelegacy.h
deleted file mode 100644
index 9c30519ab5c49af4e66117e632c30fce82f73a80..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelprofilelegacy.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * @file llpanelprofilelegacy.h
- * @brief Legacy protocol avatar profile panel
- *
- * Copyright (c) 2014-2022, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELPROFILELEGACY_H
-#define LL_PANELPROFILELEGACY_H
-
-#include "llgroupmgr.h"
-#include "llpanelavatarlegacy.h"
-
-class LLAvatarName;
-class LLClassifiedItem;
-class LLFlatListView;
-class LLPanel;
-class LLPanelPickEdit;
-class LLPanelPickInfo;
-class LLPanelClassifiedInfo;
-class LLPanelClassifiedEdit;
-class LLPickItem;
-class LLTextBase;
-class LLToggleableMenu;
-
-class LLPanelProfileLegacy final : public LLPanelProfileLegacyTab
-{
-public:
-    LLPanelProfileLegacy();
-    BOOL postBuild() override;
-    void onOpen(const LLSD& key) override;
-    void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE) override;
-    void showTab(std::string_view name, bool show) const;
-    LLPanel* expandTab(const std::string& name) const;
-    LLPanel* getExpandedTab() const;
-
-protected:
-    void openPanel(LLPanel* panel, const LLSD& params);
-    void closePanel(LLPanel* panel);
-
-private:
-    ~LLPanelProfileLegacy() override;
-    void updateData() override;
-    void processProperties(void* data, EAvatarProcessorType type) override;
-    void resetControls() override;
-    void resetInterestsControlValues();
-    void setProgress(bool started);
-    void sendAvatarProfileCoro(std::string url, LLSD payload);
-    void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
-    void onCommitAvatarProperties();
-    void onCommitInterest();
-    void onCommitNotes(LLUICtrl* ctrl);
-    void onDoubleClickName();
-    void onCommitRights();
-    void onBackBtnClick();
-    void onCommitModifyObjectsRights(LLUICtrl* ctrl);
-    void onCommitAction(const LLSD& userdata);
-    void onNameChanged();
-    bool isActionEnabled(const LLSD& userdata);
-    bool handleConfirmModifyRightsCallback(const LLSD& notification, const LLSD& response);
-    void closeParentFloater();
-
-    boost::signals2::connection mAvatarNameCacheConnection;
-    boost::signals2::connection mNameChangedConnection;
-
-    class ChildStack
-    {
-    public:
-        ChildStack();
-        ~ChildStack();
-        void setParent(LLPanel* parent);
-
-        bool push();
-        bool pop();
-        void preParentReshape();
-        void postParentReshape();
-
-    private:
-        void dump();
-
-        typedef LLView::child_list_t view_list_t;
-        typedef std::list<view_list_t> stack_t;
-
-        stack_t     mStack;
-        stack_t     mSavedStack;
-        LLPanel*    mParent;
-    };
-    ChildStack      mChildStack;
-
-public:
-    class LLPanelProfilePicks final : public LLPanelProfileLegacyTab
-    {
-        friend class LLPanelProfileLegacy;
-    public:
-        LLPanelProfilePicks();
-        ~LLPanelProfilePicks() override;
-        BOOL postBuild() override;
-
-        void createNewPick();
-        void createNewClassified();
-
-    protected:
-        void onOpen(const LLSD& key) override;
-
-    private:
-        void updateData() override;
-        void processProperties(void* data, EAvatarProcessorType type) override;
-        void resetControls() override {};
-        void showAccordion(const std::string& name, bool show);
-        void setProfilePanel(LLPanelProfileLegacy* profile_panel);
-        LLPanelProfileLegacy* getProfilePanel() const;
-        void onPanelPickClose(LLPanel* panel);
-        void onPanelPickSave(LLPanel* panel);
-        void onPanelPickEditSave(LLPanelPickEdit* panel);
-        void onPanelEdit();
-        void onPanelClassifiedEdit();
-        void onPanelPickEdit();
-        void onPlusMenuItemClicked(const LLSD& param);
-        void editClassified(const LLUUID& classified_id);
-        void updateButtons() override;
-        void onClickPlusBtn();
-        void onClickInfo();
-        void onClickTeleport();
-        void onClickShowOnMap();
-        void onClickDelete();
-        void openPickInfo();
-        void openClassifiedInfo();
-        void onPanelClassifiedSave(LLPanelClassifiedEdit* panel);
-        void onPanelClassifiedClose(LLPanelClassifiedInfo* panel);
-        void onDoubleClickClassifiedItem(LLUICtrl* item);
-        LLClassifiedItem* findClassifiedById(const LLUUID& classified_id) const;
-        LLClassifiedItem* getSelectedClassifiedItem() const;
-        LLPickItem* getSelectedPickItem() const;
-
-        void createPickEditPanel();
-        void createClassifiedEditPanel(LLPanelClassifiedEdit** panel);
-
-        bool isActionEnabled(const LLSD& userdata) const;
-        bool callbackDeletePick(const LLSD& notification, const LLSD& response);
-        bool callbackDeleteClassified(const LLSD& notification, const LLSD& response);
-        bool callbackTeleport(const LLSD& notification, const LLSD& response);
-        virtual void onRightMouseUpItem(LLUICtrl* item, S32 x, S32 y, MASK mask);
-
-        LLPanelProfileLegacy* mProfilePanel;
-        LLFlatListView* mClassifiedsList;
-        LLFlatListView* mPicksList;
-        LLPanelPickEdit* mPanelPickEdit;
-        LLPanelPickInfo* mPanelPickInfo;
-        LLPanelClassifiedInfo* mPanelClassifiedInfo;
-        LLHandle<LLView> mPopupMenuHandle;
-        LLHandle<LLToggleableMenu> mPlusMenuHandle;
-
-        // This map is needed for newly created classifieds. The purpose of panel is to
-        // sit in this map and listen to LLPanelClassifiedEdit::processProperties callback.
-        std::map<LLUUID, LLPanelClassifiedEdit*> mEditClassifiedPanels;
-    };
-
-    class LLPanelProfileGroups final : public LLPanelProfileLegacyTab
-    {
-        friend class LLPanelProfileLegacy;
-    public:
-        LLPanelProfileGroups();
-        BOOL postBuild() override;
-
-    protected:
-        void onOpen(const LLSD& key) override;
-
-    private:
-        void updateData() override;
-        void processProperties(void* data, EAvatarProcessorType type) override;
-        void resetControls() override {};
-        void showGroup(const LLUUID& id);
-
-        LLTextBase* mGroupsText;
-        LLFlatListView* mGroupsList;
-    };
-
-    class LLProfileGroupItem final : public LLPanel, public LLGroupMgrObserver
-    {
-      public:
-        LLProfileGroupItem();
-        ~LLProfileGroupItem() override;
-        static LLProfileGroupItem* create();
-        void                       init(const LLAvatarGroups::LLGroupData& data);
-        BOOL                       postBuild() override;
-
-        void setValue(const LLSD& value) override;
-        void setId(const LLUUID& id);
-        void setInsignia(const LLUUID& id);
-        void setGroupName(const std::string& name);
-        void setCharter(const std::string& charter);
-
-      protected:
-        void changed(LLGroupChange gc) override;
-
-      private:
-        LLUUID      mInsignia;
-        std::string mGroupName;
-        std::string mCharter;
-    };
-
-private:
-    LLPanelProfilePicks* mPanelPicks;
-    LLPanelProfileGroups* mPanelGroups;
-};
-
-#endif //LL_PANELPROFILELEGACY_H
diff --git a/indra/newview/llpanelsearchbase.cpp b/indra/newview/llpanelsearchbase.cpp
deleted file mode 100644
index ba11c8a009633eb35b3934992f10d3b599ff794c..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchbase.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * @file llpanelsearchbase.cpp
- * @brief Search panel base class
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchbase.h"
-#include "llfloaterdirectory.h"
-
-LLPanelSearch::LLPanelSearch()
-:   LLPanel()
-,   mFloater(nullptr)
-{
-}
-
-void LLPanelSearch::setSearchFloater(LLFloaterDirectory* floater)
-{
-    mFloater = floater;
-}
diff --git a/indra/newview/llpanelsearchbase.h b/indra/newview/llpanelsearchbase.h
deleted file mode 100644
index 3e54edce0eecb15c3211c92fe04658a8b60e51e5..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchbase.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * @file llpanelsearchbase.h
- * @brief Search panel base class
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHBASE_H
-#define LL_PANELSEARCHBASE_H
-
-#include "llpanel.h"
-
-class LLUICtrl;
-class LLFloaterDirectory;
-
-class LLPanelSearch : public LLPanel
-{
-public:
-    LLPanelSearch();
-    BOOL postBuild() override { return FALSE; }
-    void setSearchFloater(LLFloaterDirectory* floater);
-
-protected:
-    virtual ~LLPanelSearch() = default;;
-    LLFloaterDirectory* mFloater;
-
-private:
-    virtual void onCommitSearch(LLUICtrl* ctrl) {}
-    virtual void search() {}
-};
-
-#endif // LL_PANELSEARCHBASE_H
diff --git a/indra/newview/llpanelsearchclassifieds.cpp b/indra/newview/llpanelsearchclassifieds.cpp
deleted file mode 100644
index 4834c63adf11334ab8123ab1cdfeaea90fafb8b5..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchclassifieds.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * @file llpanelsearchclassifieds.cpp
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchclassifieds.h"
-#include "llfloaterdirectory.h"
-
-#include "llfloaterreg.h"
-#include "llqueryflags.h"
-#include "lltrans.h"
-
-#include "llagent.h"
-#include "llclassifiedflags.h"
-#include "llclassifiedinfo.h"
-#include "llcombobox.h"
-#include "llnotificationsutil.h"
-#include "llparcel.h"
-#include "llsearcheditor.h"
-#include "llsearchhistory.h"
-
-static LLPanelInjector<LLPanelSearchClassifieds> t_panel_search_classifieds("panel_search_classifieds");
-
-LLPanelSearchClassifieds::LLPanelSearchClassifieds()
-    : LLPanelSearch()
-    , mSearchEditor(nullptr)
-    , mClassifiedsCategory(nullptr)
-{
-    mCommitCallbackRegistrar.add("Search.query", boost::bind(&LLPanelSearchClassifieds::onCommitSearch, this, _1));
-}
-
-BOOL LLPanelSearchClassifieds::postBuild()
-{
-    mClassifiedsCategory = getChild<LLComboBox>("classifieds_category");
-    mClassifiedsCategory->add("All categories", LLSD("any"));
-    mClassifiedsCategory->addSeparator();
-    for (auto iter = LLClassifiedInfo::sCategories.cbegin();
-         iter != LLClassifiedInfo::sCategories.cend();
-         ++iter)
-    {
-        mClassifiedsCategory->add(LLTrans::getString(iter->second));
-    }
-
-    mSearchEditor = getChild<LLSearchEditor>("search_bar");
-    //mSearchEditor->setKeystrokeCallback(boost::bind(&LLPanelSearchClassifieds::onCommitSearch, this, _1));
-
-    return TRUE;
-}
-
-void LLPanelSearchClassifieds::onCommitSearch(LLUICtrl* ctrl)
-{
-    LLSearchEditor* pSearchEditor = dynamic_cast<LLSearchEditor*>(ctrl);
-    if (pSearchEditor)
-    {
-        std::string text = pSearchEditor->getText();
-        LLStringUtil::trim(text);
-        if (text.length() <= MIN_SEARCH_STRING_SIZE)
-            LLSearchHistory::getInstance()->addEntry(text);
-    }
-    search();
-}
-
-void LLPanelSearchClassifieds::search()
-{
-    LLDirQuery query;
-    query.type = SE_CLASSIFIEDS;
-    query.results_per_page = 100;
-    query.text = mSearchEditor->getText();
-    LLStringUtil::trim(query.text);
-
-    query.category_int = mClassifiedsCategory->getValue().asInteger();
-
-    static LLUICachedControl<bool> inc_pg("ShowPGClassifieds", true);
-    static LLUICachedControl<bool> inc_mature("ShowMatureClassifieds", false);
-    static LLUICachedControl<bool> inc_adult("ShowAdultClassifieds", false);
-    if (!(inc_pg || inc_mature || inc_adult))
-    {
-        LLNotificationsUtil::add("NoContentToSearch");
-        return;
-    }
-    query.scope = pack_classified_flags_request(/*auto_renew*/ FALSE, inc_pg, inc_mature, inc_adult);
-
-    mFloater->queryDirectory(query, true);
-}
diff --git a/indra/newview/llpanelsearchclassifieds.h b/indra/newview/llpanelsearchclassifieds.h
deleted file mode 100644
index 64992be6bb9b2c2592fb914aec7a174c1189bbed..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchclassifieds.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * @file llpanelsearchclassifieds.h
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHCLASSIFIEDS_H
-#define LL_PANELSEARCHCLASSIFIEDS_H
-
-#include "llpanelsearchbase.h"
-
-class LLComboBox;
-class LLSearchEditor;
-
-class LLPanelSearchClassifieds : public LLPanelSearch
-{
-public:
-    LLPanelSearchClassifieds();
-    /*virtual*/ BOOL postBuild() override;
-
-private:
-    /*virtual*/ void onCommitSearch(LLUICtrl* ctrl) override;
-    /*virtual*/ void search() override;
-
-    LLSearchEditor* mSearchEditor;
-    LLComboBox* mClassifiedsCategory;
-};
-
-#endif // LL_PANELSEARCHCLASSIFIEDS_H
diff --git a/indra/newview/llpanelsearchevents.cpp b/indra/newview/llpanelsearchevents.cpp
deleted file mode 100644
index 425d5a157bc15fb22657c6bf65b448adf77be190..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchevents.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * @file llpanelsearchevents.cpp
- * @brief Events search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchevents.h"
-#include "llfloaterdirectory.h"
-
-#include "llfloaterreg.h"
-#include "llqueryflags.h"
-
-#include "llagent.h"
-#include "llcombobox.h"
-#include "llnotificationsutil.h"
-#include "llparcel.h"
-#include "llsearcheditor.h"
-#include "llsearchhistory.h"
-
-static LLPanelInjector<LLPanelSearchEvents> t_panel_search_events("panel_search_events");
-
-LLPanelSearchEvents::LLPanelSearchEvents()
-:   LLPanelSearch()
-,   mDate(0)
-{
-    mCommitCallbackRegistrar.add("Search.query", boost::bind(&LLPanelSearchEvents::onCommitSearch, this, _1));
-    mCommitCallbackRegistrar.add("Search.AddDay", boost::bind(&LLPanelSearchEvents::addDay, this));
-    mCommitCallbackRegistrar.add("Search.MinusDay", boost::bind(&LLPanelSearchEvents::minusDay, this));
-}
-
-BOOL LLPanelSearchEvents::postBuild()
-{
-    mSearchEditor = getChild<LLSearchEditor>("search_bar");
-    //mSearchEditor->setKeystrokeCallback(boost::bind(&LLPanelSearchEvents::onCommitSearch, this, _1));
-    setDate(0);
-
-    return TRUE;
-}
-
-void LLPanelSearchEvents::onCommitSearch(LLUICtrl* ctrl)
-{
-    LLSearchEditor* pSearchEditor = dynamic_cast<LLSearchEditor*>(ctrl);
-    if (pSearchEditor)
-    {
-        std::string text = pSearchEditor->getText();
-        LLStringUtil::trim(text);
-        if (text.length() <= MIN_SEARCH_STRING_SIZE)
-            LLSearchHistory::getInstance()->addEntry(text);
-    }
-    search();
-}
-
-void LLPanelSearchEvents::search()
-{
-    LLDirQuery query;
-    query.type = SE_EVENTS;
-    query.results_per_page = 200;
-    std::string text = mSearchEditor->getText();
-    LLStringUtil::trim(text);
-
-    static LLUICachedControl<bool> inc_pg("ShowPGEvents", true);
-    static LLUICachedControl<bool> inc_mature("ShowMatureEvents", false);
-    static LLUICachedControl<bool> inc_adult("ShowAdultEvents", false);
-    if (!(inc_pg || inc_mature || inc_adult))
-    {
-        LLNotificationsUtil::add("NoContentToSearch");
-        return;
-    }
-
-    query.scope = DFQ_DATE_EVENTS;
-    if (inc_pg)
-        query.scope |= DFQ_INC_PG;
-    if (inc_mature && gAgent.canAccessMature())
-        query.scope |= DFQ_INC_MATURE;
-    if (inc_adult && gAgent.canAccessAdult())
-        query.scope |= DFQ_INC_ADULT;
-
-    std::ostringstream string;
-    string << (childGetValue("events_search_mode").asString() == "current" ? "u" : llformat("%d",mDate)) << "|"
-           << getChild<LLComboBox>("events_category")->getSelectedValue().asInteger() << "|"
-           << text;
-    query.text = string.str();
-
-    mFloater->queryDirectory(query, true);
-}
-
-void LLPanelSearchEvents::setDate(S32 day)
-{
-    mDate = day;
-
-    time_t utc = time_corrected();
-    utc += day * 24 * 60 * 60;
-    struct tm * internal_time = utc_to_pacific_time(utc, is_daylight_savings());
-    const std::string date = llformat("%d/%d", 1 + internal_time->tm_mon, internal_time->tm_mday);
-    childSetValue("events_date", date);
-}
-
-void LLPanelSearchEvents::addDay()
-{
-    setDate(++mDate);
-    if (childGetValue("events_search_mode").asString() == "date")
-        search();
-}
-
-void LLPanelSearchEvents::minusDay()
-{
-    setDate(--mDate);
-    if (childGetValue("events_search_mode").asString() == "date")
-        search();
-}
diff --git a/indra/newview/llpanelsearchevents.h b/indra/newview/llpanelsearchevents.h
deleted file mode 100644
index 1f2af30622f89a218e48f4f8dade34e7d512cac8..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchevents.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * @file llpanelsearchevents.h
- * @brief Events search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHEVENTS_H
-#define LL_PANELSEARCHEVENTS_H
-
-#include "llpanelsearchbase.h"
-
-class LLComboBox;
-class LLSearchEditor;
-
-class LLPanelSearchEvents : public LLPanelSearch
-{
-public:
-    LLPanelSearchEvents();
-    /*virtual*/ BOOL postBuild() override;
-
-private:
-    /*virtual*/ void onCommitSearch(LLUICtrl* ctrl) override;
-    /*virtual*/ void search() override;
-    void setDate(S32 day);
-    void addDay();
-    void minusDay();
-
-    S32 mDate;
-    LLSearchEditor* mSearchEditor;
-};
-
-#endif // LL_PANELSEARCHEVENTS_H
diff --git a/indra/newview/llpanelsearchgroups.cpp b/indra/newview/llpanelsearchgroups.cpp
deleted file mode 100644
index b4fbea45d86941e09238b746430d9f298a4f814b..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchgroups.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * @file llpanelsearchgroups.cpp
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchgroups.h"
-#include "llfloaterdirectory.h"
-
-#include "llfloaterreg.h"
-#include "llqueryflags.h"
-
-#include "llagent.h"
-#include "llnotificationsutil.h"
-#include "llsearcheditor.h"
-#include "llsearchhistory.h"
-
-static LLPanelInjector<LLPanelSearchGroups> t_panel_search_groups("panel_search_groups");
-
-LLPanelSearchGroups::LLPanelSearchGroups()
-    : LLPanelSearch()
-    , mSearchEditor(nullptr)
-{
-    mCommitCallbackRegistrar.add("Search.query", boost::bind(&LLPanelSearchGroups::onCommitSearch, this, _1));
-}
-
-BOOL LLPanelSearchGroups::postBuild()
-{
-    mSearchEditor = getChild<LLSearchEditor>("search_bar");
-    //mSearchEditor->setKeystrokeCallback(boost::bind(&LLPanelSearchGroups::onCommitSearch, this, _1));
-
-    return TRUE;
-}
-
-void LLPanelSearchGroups::onCommitSearch(LLUICtrl* ctrl)
-{
-    LLSearchEditor* pSearchEditor = dynamic_cast<LLSearchEditor*>(ctrl);
-    if (pSearchEditor)
-    {
-        std::string text = pSearchEditor->getText();
-        LLStringUtil::trim(text);
-        if (text.length() <= MIN_SEARCH_STRING_SIZE)
-            LLSearchHistory::getInstance()->addEntry(text);
-    }
-    search();
-}
-
-void LLPanelSearchGroups::search()
-{
-    LLDirQuery query;
-    query.type = SE_GROUPS;
-    query.results_per_page = 100;
-    query.text = mSearchEditor->getText();
-    LLStringUtil::trim(query.text);
-
-    static LLUICachedControl<bool> inc_pg("ShowPGGroups", true);
-    static LLUICachedControl<bool> inc_mature("ShowMatureGroups", false);
-    static LLUICachedControl<bool> inc_adult("ShowAdultGroups", false);
-    if (!(inc_pg || inc_mature || inc_adult))
-    {
-        LLNotificationsUtil::add("NoContentToSearch");
-        return;
-    }
-
-    if (inc_pg)
-        query.scope |= DFQ_INC_PG;
-    if (inc_mature && gAgent.canAccessMature())
-        query.scope |= DFQ_INC_MATURE;
-    if (inc_adult && gAgent.canAccessAdult())
-        query.scope |= DFQ_INC_ADULT;
-    query.scope |= DFQ_GROUPS;
-
-    mFloater->queryDirectory(query, true);
-}
diff --git a/indra/newview/llpanelsearchgroups.h b/indra/newview/llpanelsearchgroups.h
deleted file mode 100644
index f3e80c6b17199e4100d3027c3eaf51fea6d76211..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchgroups.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * @file llpanelsearchgroups.h
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHGROUPS_H
-#define LL_PANELSEARCHGROUPS_H
-
-#include "llpanelsearchbase.h"
-
-class LLSearchEditor;
-
-class LLPanelSearchGroups : public LLPanelSearch
-{
-public:
-    LLPanelSearchGroups();
-    /*virtual*/ BOOL postBuild() override;
-
-private:
-    /*virtual*/ void onCommitSearch(LLUICtrl* ctrl) override;
-    /*virtual*/ void search() override;
-
-    LLSearchEditor* mSearchEditor;
-};
-
-#endif // LL_PANELSEARCHGROUPS_H
diff --git a/indra/newview/llpanelsearchlandsales.cpp b/indra/newview/llpanelsearchlandsales.cpp
deleted file mode 100644
index a2def0f36a6c16948d3eded04e9183eec5fb2fd7..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchlandsales.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * @file llpanelsearchlandsales.cpp
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchlandsales.h"
-#include "llfloaterdirectory.h"
-
-#include "llfloaterreg.h"
-#include "llqueryflags.h"
-
-#include "llagent.h"
-#include "llnotificationsutil.h"
-#include "llsearcheditor.h"
-#include "llsearchhistory.h"
-#include "llviewercontrol.h"
-
-static LLPanelInjector<LLPanelSearchLandSales> t_panel_search_land_sales("panel_search_landsales");
-
-LLPanelSearchLandSales::LLPanelSearchLandSales()
-:   LLPanelSearch()
-{
-    mCommitCallbackRegistrar.add("Search.query", boost::bind(&LLPanelSearchLandSales::onCommitSearch, this, _1));
-}
-
-BOOL LLPanelSearchLandSales::postBuild()
-{
-    return TRUE;
-}
-
-void LLPanelSearchLandSales::onCommitSearch(LLUICtrl* ctrl)
-{
-    search();
-}
-
-void LLPanelSearchLandSales::search()
-{
-    LLDirQuery query;
-    query.type = SE_LANDSALES;
-    query.results_per_page = 100;
-
-    static LLUICachedControl<bool> inc_pg("ShowPGLand", true);
-    static LLUICachedControl<bool> inc_mature("ShowMatureLand", false);
-    static LLUICachedControl<bool> inc_adult("ShowAdultLand", false);
-    static LLUICachedControl<bool> limit_price("FindLandPrice", true);
-    static LLUICachedControl<bool> limit_area("FindLandArea", true);
-    if (!(inc_pg || inc_mature || inc_adult))
-    {
-        LLNotificationsUtil::add("NoContentToSearch");
-        return;
-    }
-
-    const std::string& type = gSavedSettings.getString("FindLandType");
-    if (type == "All")
-        query.category_int = ST_ALL;
-    else if (type == "Auction")
-        query.category_int = ST_AUCTION;
-    else if (type == "Mainland")
-        query.category_int = ST_MAINLAND;
-    else if (type == "Estate")
-        query.category_int = ST_ESTATE;
-
-    if (gAgent.wantsPGOnly())
-        query.scope |= DFQ_PG_SIMS_ONLY;
-    if (inc_pg)
-        query.scope |= DFQ_INC_PG;
-    if (inc_mature && gAgent.canAccessMature())
-        query.scope |= DFQ_INC_MATURE;
-    if (inc_adult && gAgent.canAccessAdult())
-        query.scope |= DFQ_INC_ADULT;
-
-    const std::string& sort = gSavedSettings.getString("FindLandSort");
-    if (sort == "Name")
-        query.scope |= DFQ_NAME_SORT;
-    else if (sort == "Price")
-        query.scope |= DFQ_PRICE_SORT;
-    else if (sort == "PPM")
-        query.scope |= DFQ_PER_METER_SORT;
-    else if (sort == "Area")
-        query.scope |= DFQ_AREA_SORT;
-
-    if (gSavedSettings.getBOOL("FindLandSortAscending"))
-        query.scope |= DFQ_SORT_ASC;
-    if (limit_price)
-        query.scope |= DFQ_LIMIT_BY_PRICE;
-    if (limit_area)
-        query.scope |= DFQ_LIMIT_BY_AREA;
-    query.price = childGetValue("edit_price").asInteger();
-    query.area = childGetValue("edit_area").asInteger();
-
-    mFloater->queryDirectory(query, true);
-}
diff --git a/indra/newview/llpanelsearchlandsales.h b/indra/newview/llpanelsearchlandsales.h
deleted file mode 100644
index f0f27407719333b67bef0b86b3aa344a2a81eb78..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchlandsales.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * @file llpanelsearchlandsales.h
- * @brief Land sale search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHLANDSALES_H
-#define LL_PANELSEARCHLANDSALES_H
-
-#include "llpanelsearchbase.h"
-
-class LLPanelSearchLandSales : public LLPanelSearch
-{
-public:
-    LLPanelSearchLandSales();
-    /*virtual*/ BOOL postBuild() override;
-
-private:
-    /*virtual*/ void search() override;
-    /*virtual*/ void onCommitSearch(LLUICtrl* ctrl) override;
-};
-
-#endif // LL_PANELSEARCHLANDSALES_H
diff --git a/indra/newview/llpanelsearchpeople.cpp b/indra/newview/llpanelsearchpeople.cpp
deleted file mode 100644
index 69b2c3fc5c4adee9059322d7f1918538187cef5b..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchpeople.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * @file llpanelsearchpeople.cpp
- * @brief People search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchpeople.h"
-#include "llfloaterdirectory.h"
-
-#include "llfloaterreg.h"
-
-#include "llagent.h"
-#include "llsearcheditor.h"
-#include "llsearchhistory.h"
-
-static LLPanelInjector<LLPanelSearchPeople> t_panel_search_people("panel_search_people");
-
-LLPanelSearchPeople::LLPanelSearchPeople()
-:   LLPanelSearch()
-{
-    mCommitCallbackRegistrar.add("Search.query", boost::bind(&LLPanelSearchPeople::onCommitSearch, this, _1));
-}
-
-BOOL LLPanelSearchPeople::postBuild()
-{
-    mSearchEditor = getChild<LLSearchEditor>("search_bar");
-    //mSearchEditor->setKeystrokeCallback(boost::bind(&LLPanelSearchPeople::onCommitSearch, this, _1));
-
-    return TRUE;
-}
-
-void LLPanelSearchPeople::onCommitSearch(LLUICtrl* ctrl)
-{
-    LLSearchEditor* pSearchEditor = dynamic_cast<LLSearchEditor*>(ctrl);
-    if (pSearchEditor)
-    {
-        std::string text = pSearchEditor->getText();
-        LLStringUtil::trim(text);
-        if (text.length() <= MIN_SEARCH_STRING_SIZE)
-            LLSearchHistory::getInstance()->addEntry(text);
-    }
-    search();
-}
-
-bool isNotAlphaNum(char c)
-{
-    return !std::isalnum(c);
-}
-
-void LLPanelSearchPeople::search()
-{
-    LLDirQuery query;
-    query.type = SE_PEOPLE;
-    query.results_per_page = 100;
-    query.text = mSearchEditor->getText();
-    std::replace_if(query.text.begin(), query.text.end(), isNotAlphaNum, ' ');
-    LLStringUtil::trim(query.text);
-
-    mFloater->queryDirectory(query, true);
-    if (query.text.length() < MIN_SEARCH_STRING_SIZE)
-        mFloater->setResultsComment(getString("SeachFilteredOnShortWordsEmpty"));
-}
diff --git a/indra/newview/llpanelsearchpeople.h b/indra/newview/llpanelsearchpeople.h
deleted file mode 100644
index e55645f7f626ae438f99d23aeecc6a6231ba3ba2..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchpeople.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * @file llpanelsearchpeople.h
- * @brief People search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHPEOPLE_H
-#define LL_PANELSEARCHPEOPLE_H
-
-#include "llpanelsearchbase.h"
-
-class LLSearchEditor;
-
-class LLPanelSearchPeople : public LLPanelSearch
-{
-public:
-    LLPanelSearchPeople();
-    /*virtual*/ BOOL postBuild() override;
-
-private:
-    /*virtual*/ void onCommitSearch(LLUICtrl* ctrl) override;
-    /*virtual*/ void search() override;
-
-    LLSearchEditor* mSearchEditor;
-};
-
-#endif // LL_PANELSEARCHPEOPLE_H
diff --git a/indra/newview/llpanelsearchplaces.cpp b/indra/newview/llpanelsearchplaces.cpp
deleted file mode 100644
index 97b758dea427417cf47cc10236ba509af28f1630..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchplaces.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * @file llpanelsearchplaces.cpp
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchplaces.h"
-#include "llfloaterdirectory.h"
-
-#include "llfloaterreg.h"
-#include "llqueryflags.h"
-
-#include "llagent.h"
-#include "llcombobox.h"
-#include "llnotificationsutil.h"
-#include "llparcel.h"
-#include "llsearcheditor.h"
-#include "llsearchhistory.h"
-
-static LLPanelInjector<LLPanelSearchPlaces> t_panel_search_places("panel_search_places");
-
-LLPanelSearchPlaces::LLPanelSearchPlaces()
-:   LLPanelSearch()
-{
-    mCommitCallbackRegistrar.add("Search.query", boost::bind(&LLPanelSearchPlaces::onCommitSearch, this, _1));
-}
-
-BOOL LLPanelSearchPlaces::postBuild()
-{
-    mPlacesCategory = getChild<LLComboBox>("places_category");
-    mPlacesCategory->add("All categories", LLSD("any"));
-    mPlacesCategory->addSeparator();
-    for (size_t category = LLParcel::C_LINDEN; category < LLParcel::C_COUNT; ++category)
-    {
-        LLParcel::ECategory eCategory = static_cast<LLParcel::ECategory>(category);
-        mPlacesCategory->add(LLParcel::getCategoryUIString(eCategory), LLParcel::getCategoryString(eCategory));
-    }
-
-    mSearchEditor = getChild<LLSearchEditor>("search_bar");
-    //mSearchEditor->setKeystrokeCallback(boost::bind(&LLPanelSearchPlaces::onCommitSearch, this, _1));
-
-    return TRUE;
-}
-
-void LLPanelSearchPlaces::onCommitSearch(LLUICtrl* ctrl)
-{
-    LLSearchEditor* pSearchEditor = dynamic_cast<LLSearchEditor*>(ctrl);
-    if (pSearchEditor)
-    {
-        std::string text = pSearchEditor->getText();
-        LLStringUtil::trim(text);
-        if (text.length() <= MIN_SEARCH_STRING_SIZE)
-            LLSearchHistory::getInstance()->addEntry(text);
-    }
-    search();
-}
-
-void LLPanelSearchPlaces::search()
-{
-    LLDirQuery query;
-    query.type = SE_PLACES;
-    query.results_per_page = 100;
-    query.text = mSearchEditor->getText();
-    LLStringUtil::trim(query.text);
-
-    const std::string& category_string = mPlacesCategory->getSelectedValue();
-    query.category_char = category_string == "any" ? LLParcel::C_ANY : LLParcel::getCategoryFromString(category_string);
-
-    static LLUICachedControl<bool> inc_pg("ShowPGSims", true);
-    static LLUICachedControl<bool> inc_mature("ShowMatureSims", false);
-    static LLUICachedControl<bool> inc_adult("ShowAdultSims", false);
-    if (!(inc_pg || inc_mature || inc_adult))
-    {
-        LLNotificationsUtil::add("NoContentToSearch");
-        return;
-    }
-    if (gAgent.wantsPGOnly())
-        query.scope |= DFQ_PG_SIMS_ONLY;
-    if (inc_pg)
-        query.scope |= DFQ_INC_PG;
-    if (inc_mature && gAgent.canAccessMature())
-        query.scope |= DFQ_INC_MATURE;
-    if (inc_adult && gAgent.canAccessAdult())
-        query.scope |= DFQ_INC_ADULT;
-    query.scope |= DFQ_DWELL_SORT;
-
-    mFloater->queryDirectory(query, true);
-}
diff --git a/indra/newview/llpanelsearchplaces.h b/indra/newview/llpanelsearchplaces.h
deleted file mode 100644
index 42e69dd117da94b2a3a9c876d4073563d2dca396..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchplaces.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * @file llpanelsearchplaces.h
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHPLACES_H
-#define LL_PANELSEARCHPLACES_H
-
-#include "llpanelsearchbase.h"
-
-class LLComboBox;
-class LLSearchEditor;
-
-class LLPanelSearchPlaces : public LLPanelSearch
-{
-public:
-    LLPanelSearchPlaces();
-    /*virtual*/ BOOL postBuild() override;
-
-private:
-    /*virtual*/ void onCommitSearch(LLUICtrl* ctrl) override;
-    /*virtual*/ void search() override;
-
-    LLSearchEditor* mSearchEditor;
-    LLComboBox* mPlacesCategory;
-};
-
-#endif // LL_PANELSEARCHPLACES_H
diff --git a/indra/newview/llpanelsearchweb.cpp b/indra/newview/llpanelsearchweb.cpp
deleted file mode 100644
index dfd9fedc3efe90eb78d412ddfe9e9463383df564..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchweb.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * @file llpanelsearchweb.cpp
- * @brief Web search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchweb.h"
-
-#include "llagent.h"
-#include "llfloaterdirectory.h"
-#include "lllogininstance.h"
-#include "llmediactrl.h"
-#include "llprogressbar.h"
-#include "lltextbox.h"
-#include "llviewercontrol.h"
-#include "llviewernetwork.h"
-#include "llviewerregion.h"
-#include "llweb.h"
-
-static LLPanelInjector<LLPanelSearchWeb> t_panel_search_web("panel_search_web");
-
-LLPanelSearchWeb::LLPanelSearchWeb()
-:   LLPanel()
-,   mStatusBarText(nullptr)
-,   mStatusBarProgress(nullptr)
-,   mBtnBack(nullptr)
-,   mBtnForward(nullptr)
-,   mBtnReload(nullptr)
-,   mBtnStop(nullptr)
-,   mWebBrowser(nullptr)
-{
-    mSearchType.insert("standard");
-    mSearchType.insert("land");
-    mSearchType.insert("classified");
-
-    mCollectionType.insert("events");
-    mCollectionType.insert("destinations");
-    mCollectionType.insert("places");
-    mCollectionType.insert("groups");
-    mCollectionType.insert("people");
-
-    mCategoryPaths = LLSD::emptyMap();
-    mCategoryPaths["all"] = "search";
-    mCategoryPaths["people"] = "search/people";
-    mCategoryPaths["places"] = "search/places";
-    mCategoryPaths["events"] = "search/events";
-    mCategoryPaths["groups"] = "search/groups";
-    mCategoryPaths["wiki"] = "search/wiki";
-    mCategoryPaths["destinations"] = "destinations";
-
-    mCommitCallbackRegistrar.add("WebContent.Back", boost::bind(&LLPanelSearchWeb::onClickBack, this));
-    mCommitCallbackRegistrar.add("WebContent.Forward", boost::bind(&LLPanelSearchWeb::onClickForward, this));
-    mCommitCallbackRegistrar.add("WebContent.Reload", boost::bind(&LLPanelSearchWeb::onClickReload, this));
-    mCommitCallbackRegistrar.add("WebContent.Stop", boost::bind(&LLPanelSearchWeb::onClickStop, this));
-}
-
-BOOL LLPanelSearchWeb::postBuild()
-{
-    mWebBrowser = getChild<LLMediaCtrl>("webbrowser");
-    if (mWebBrowser) mWebBrowser->addObserver(this);
-
-    mWebBrowser        = getChild<LLMediaCtrl>("webbrowser");
-    mStatusBarProgress = getChild<LLProgressBar>("statusbarprogress");
-    mStatusBarText     = getChild<LLTextBox>("statusbartext");
-
-    mBtnBack           = getChild<LLButton>("back");
-    mBtnForward        = getChild<LLButton>("forward");
-    mBtnReload         = getChild<LLButton>("reload");
-    mBtnStop           = getChild<LLButton>("stop");
-
-    return TRUE;
-}
-
-void LLPanelSearchWeb::loadUrl(const SearchQuery& p)
-{
-    if (!mWebBrowser || !p.validateBlock()) return;
-
-    mWebBrowser->setTrustedContent(true);
-
-    // work out the subdir to use based on the requested category
-    LLSD subs;
-    if (LLGridManager::instance().isInSecondlife())
-    {
-        if (mSearchType.find(p.category.getValue()) != mSearchType.end())
-        {
-            subs["TYPE"] = p.category.getValue();
-        }
-        else
-        {
-            subs["TYPE"] = "standard";
-        }
-
-        subs["COLLECTION"] = "";
-        if (subs["TYPE"] == "standard")
-        {
-            if (mCollectionType.find(p.collection) != mCollectionType.end())
-            {
-                subs["COLLECTION"] = "&collection_chosen=" + std::string(p.collection);
-            }
-            else
-            {
-                std::string collection_args("");
-                for (std::set<std::string>::iterator it = mCollectionType.begin(); it != mCollectionType.end(); ++it)
-                {
-                    collection_args += "&collection_chosen=" + std::string(*it);
-                }
-                subs["COLLECTION"] = collection_args;
-            }
-        }
-    }
-    else
-    {
-        subs["CATEGORY"] = (mCategoryPaths.has(p.category.getValue())
-            ? mCategoryPaths[p.category.getValue()].asString()
-            : mCategoryPaths["all"].asString());
-    }
-
-    // add the search query string
-    subs["QUERY"] = LLURI::escape(p.query());
-
-    // add the user's preferred maturity (can be changed via prefs)
-    std::string maturity;
-    if (LLGridManager::instance().isInSecondlife())
-    {
-        if (gAgent.prefersAdult())
-        {
-            maturity = "gma";  // PG,Mature,Adult
-        }
-        else if (gAgent.prefersMature())
-        {
-            maturity = "gm";  // PG,Mature
-        }
-        else
-        {
-            maturity = "g";  // PG
-        }
-    }
-    else
-    {
-        if (gAgent.prefersAdult())
-        {
-            maturity = "42";  // PG,Mature,Adult
-        }
-        else if (gAgent.prefersMature())
-        {
-            maturity = "21";  // PG,Mature
-        }
-        else
-        {
-            maturity = "13";  // PG
-        }
-    }
-    subs["MATURITY"] = maturity;
-
-    // add the user's god status
-    subs["GODLIKE"] = gAgent.isGodlike() ? "1" : "0";
-
-    // Get the search URL and expand all of the substitutions
-    // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
-    LLViewerRegion* regionp = gAgent.getRegion();
-    std::string url = regionp != nullptr ? regionp->getSearchServerURL()
-        : gSavedSettings.getString(LLGridManager::getInstance()->isInOpenSim() ? "OpenSimSearchURL" : "SearchURL");
-    url = LLWeb::expandURLSubstitutions(url, subs);
-    // Finally, load the URL in the webpanel
-    mWebBrowser->navigateTo(url, "text/html");
-}
-
-// virtual
-void LLPanelSearchWeb::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
-{
-    if(event == MEDIA_EVENT_LOCATION_CHANGED)
-    {
-        const std::string url = self->getLocation();
-
-        if ( url.length() )
-            mStatusBarText->setText( url );
-    }
-    else if(event == MEDIA_EVENT_NAVIGATE_BEGIN)
-    {
-        // flags are sent with this event
-        mBtnBack->setEnabled( self->getHistoryBackAvailable() );
-        mBtnForward->setEnabled( self->getHistoryForwardAvailable() );
-
-        // toggle visibility of these buttons based on browser state
-        mBtnReload->setVisible( false );
-        mBtnStop->setVisible( true );
-
-        // turn "on" progress bar now we're about to start loading
-        mStatusBarProgress->setVisible( true );
-    }
-    else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)
-    {
-        // flags are sent with this event
-        mBtnBack->setEnabled( self->getHistoryBackAvailable() );
-        mBtnForward->setEnabled( self->getHistoryForwardAvailable() );
-
-        // toggle visibility of these buttons based on browser state
-        mBtnReload->setVisible( true );
-        mBtnStop->setVisible( false );
-
-        // turn "off" progress bar now we're loaded
-        mStatusBarProgress->setVisible( false );
-
-        // we populate the status bar with URLs as they change so clear it now we're done
-        const LLStringExplicit end_str("");
-        mStatusBarText->setText( end_str );
-    }
-    else if(event == MEDIA_EVENT_STATUS_TEXT_CHANGED )
-    {
-        const std::string text = self->getStatusText();
-        if ( text.length() )
-            mStatusBarText->setText( text );
-    }
-    else if(event == MEDIA_EVENT_PROGRESS_UPDATED )
-    {
-        int percent = (int)self->getProgressPercent();
-        mStatusBarProgress->setValue( percent );
-    }
-    else if(event == MEDIA_EVENT_LINK_HOVERED )
-    {
-        const std::string link = self->getHoverLink();
-        mStatusBarText->setText( link );
-    }
-}
-
-void LLPanelSearchWeb::onClickForward() const
-{
-    mWebBrowser->navigateForward();
-}
-
-void LLPanelSearchWeb::onClickBack() const
-{
-    mWebBrowser->navigateBack();
-}
-
-void LLPanelSearchWeb::onClickReload() const
-{
-
-    if( mWebBrowser->getMediaPlugin() )
-    {
-        bool ignore_cache = true;
-        mWebBrowser->getMediaPlugin()->browse_reload( ignore_cache );
-    }
-}
-
-void LLPanelSearchWeb::onClickStop()
-{
-    if( mWebBrowser->getMediaPlugin() )
-        mWebBrowser->getMediaPlugin()->browse_stop();
-
-    // still should happen when we catch the navigate complete event
-    // but sometimes (don't know why) that event isn't sent from Qt
-    // and we ghetto a point where the stop button stays active.
-    mBtnReload->setVisible( true );
-    mBtnStop->setVisible( false );
-}
diff --git a/indra/newview/llpanelsearchweb.h b/indra/newview/llpanelsearchweb.h
deleted file mode 100644
index 4877db8bf962381301582b9606d8740674e26647..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelsearchweb.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * @file llpanelsearchweb.h
- * @brief Web search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHWEB_H
-#define LL_PANELSEARCHWEB_H
-
-#include "llpanel.h"
-#include "llviewermediaobserver.h"
-
-class LLMediaCtrl;
-class LLProgressBar;
-class LLTextBox;
-struct SearchQuery;
-
-class LLPanelSearchWeb : public LLPanel, public LLViewerMediaObserver
-{
-public:
-    LLPanelSearchWeb();
-    BOOL postBuild() override;
-    void loadUrl(const SearchQuery& query);
-
-private:
-    void             onClickBack() const;
-    void             onClickForward() const;
-    void             onClickReload() const;
-    void             onClickStop();
-    /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) override;
-
-    LLTextBox* mStatusBarText;
-    LLProgressBar* mStatusBarProgress;
-    LLButton* mBtnBack;
-    LLButton* mBtnForward;
-    LLButton* mBtnReload;
-    LLButton* mBtnStop;
-
-    std::set<std::string> mSearchType;
-    std::set<std::string> mCollectionType;
-    LLSD mCategoryPaths;
-    //U8 mSearchGodLevel;
-    LLMediaCtrl* mWebBrowser;
-};
-
-#endif // LL_PANELSEARCHWEB_H
diff --git a/indra/newview/llpickitem.cpp b/indra/newview/llpickitem.cpp
deleted file mode 100644
index 55e59d125511a65783fd9d62e3c044931af89a26..0000000000000000000000000000000000000000
--- a/indra/newview/llpickitem.cpp
+++ /dev/null
@@ -1,155 +0,0 @@
-/**
-* @file llpickitem.cpp
-* @brief Widget
-*
-* $LicenseInfo:firstyear=2009&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2010, Linden Research, Inc.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-*
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
-
-#include "llviewerprecompiledheaders.h"
-#include "llpickitem.h"
-
-#include "lltexturectrl.h"
-
-LLPickItem::LLPickItem()
-    : LLPanel()
-    , mPickID(LLUUID::null)
-    , mCreatorID(LLUUID::null)
-    , mParcelID(LLUUID::null)
-    , mSnapshotID(LLUUID::null)
-    , mNeedData(true)
-{
-    buildFromFile("panel_pick_list_item.xml");
-}
-
-LLPickItem::~LLPickItem()
-{
-    if (mCreatorID.notNull())
-    {
-        LLAvatarPropertiesProcessor::instance().removeObserver(mCreatorID, this);
-    }
-
-}
-
-LLPickItem* LLPickItem::create()
-{
-    return new LLPickItem();
-}
-
-void LLPickItem::init(LLPickData* pick_data)
-{
-    setPickDesc(pick_data->desc);
-    setSnapshotId(pick_data->snapshot_id);
-    mPosGlobal = pick_data->pos_global;
-    mSimName = pick_data->sim_name;
-    mPickDescription = pick_data->desc;
-    mUserName = pick_data->user_name;
-    mOriginalName = pick_data->original_name;
-
-    LLTextureCtrl* picture = getChild<LLTextureCtrl>("picture");
-    picture->setImageAssetID(pick_data->snapshot_id);
-}
-
-void LLPickItem::setPickName(const std::string& name)
-{
-    mPickName = name;
-    getChild<LLUICtrl>("picture_name")->setValue(name);
-
-}
-
-const std::string& LLPickItem::getPickName() const
-{
-    return mPickName;
-}
-
-const LLUUID& LLPickItem::getCreatorId() const
-{
-    return mCreatorID;
-}
-
-const LLUUID& LLPickItem::getSnapshotId() const
-{
-    return mSnapshotID;
-}
-
-void LLPickItem::setPickDesc(const std::string& descr)
-{
-    getChild<LLUICtrl>("picture_descr")->setValue(descr);
-}
-
-void LLPickItem::setPickId(const LLUUID& id)
-{
-    mPickID = id;
-}
-
-const LLUUID& LLPickItem::getPickId() const
-{
-    return mPickID;
-}
-
-const LLVector3d& LLPickItem::getPosGlobal() const
-{
-    return mPosGlobal;
-}
-
-const std::string LLPickItem::getDescription() const
-{
-    return getChild<LLUICtrl>("picture_descr")->getValue().asString();
-}
-
-void LLPickItem::update()
-{
-    setNeedData(true);
-    LLAvatarPropertiesProcessor::instance().sendPickInfoRequest(mCreatorID, mPickID);
-}
-
-void LLPickItem::processProperties(void *data, EAvatarProcessorType type)
-{
-    if (APT_PICK_INFO != type)
-    {
-        return;
-    }
-
-    LLPickData* pick_data = static_cast<LLPickData *>(data);
-    if (!pick_data || mPickID != pick_data->pick_id)
-    {
-        return;
-    }
-
-    init(pick_data);
-    setNeedData(false);
-    LLAvatarPropertiesProcessor::instance().removeObserver(mCreatorID, this);
-}
-
-BOOL LLPickItem::postBuild()
-{
-    setMouseEnterCallback(std::bind(&set_child_visible, this, "hovered_icon", true));
-    setMouseLeaveCallback(std::bind(&set_child_visible, this, "hovered_icon", false));
-    return TRUE;
-}
-
-void LLPickItem::setValue(const LLSD& value)
-{
-    if (!value.isMap()) return;;
-    if (!value.has("selected")) return;
-    getChildView("selected_icon")->setVisible(value["selected"]);
-}
-
diff --git a/indra/newview/llpickitem.h b/indra/newview/llpickitem.h
deleted file mode 100644
index 0ddcbd4bf86490c4e1d176e3ddae09e92c768a62..0000000000000000000000000000000000000000
--- a/indra/newview/llpickitem.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
-* @file llpickitem.h
-* @brief Widget
-*
-* $LicenseInfo:firstyear=2009&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2010, Linden Research, Inc.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-*
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
-
-#ifndef LL_PICKITEM_H
-#define LL_PICKITEM_H
-
-#include "llavatarpropertiesprocessor.h"
-#include "llpanel.h"
-
-struct LLPickData;
-
-static const std::string PICK_ID("pick_id");
-static const std::string PICK_CREATOR_ID("pick_creator_id");
-static const std::string PICK_NAME("pick_name");
-
-class LLPickItem final : public LLPanel, public LLAvatarPropertiesObserver
-{
-public:
-    LLPickItem();
-    ~LLPickItem();
-    BOOL postBuild() override;
-
-    static LLPickItem* create();
-    void init(LLPickData* pick_data);
-    void setPickName(const std::string& name);
-    void setPickDesc(const std::string& descr);
-    void setPickId(const LLUUID& id);
-    void setCreatorId(const LLUUID& id) { mCreatorID = id; };
-    void setSnapshotId(const LLUUID& id) { mSnapshotID = id; };
-    void setNeedData(bool need) { mNeedData = need; };
-    const LLUUID& getPickId() const;
-    const std::string& getPickName() const;
-    const LLUUID& getCreatorId() const;
-    const LLUUID& getSnapshotId() const;
-    const LLVector3d& getPosGlobal() const;
-    const std::string getDescription() const;
-    const std::string& getSimName() const { return mSimName; }
-    const std::string& getUserName() const { return mUserName; }
-    const std::string& getOriginalName() const { return mOriginalName; }
-    const std::string& getPickDesc() const { return mPickDescription; }
-    void processProperties(void* data, EAvatarProcessorType type) override;
-    void update();
-
-    /** setting on/off background icon to indicate selected state */
-    void setValue(const LLSD& value) override;
-
-protected:
-    LLUUID mPickID;
-    LLUUID mCreatorID;
-    LLUUID mParcelID;
-    LLUUID mSnapshotID;
-    LLVector3d mPosGlobal;
-    bool mNeedData;
-
-    std::string mPickName;
-    std::string mUserName;
-    std::string mOriginalName;
-    std::string mPickDescription;
-    std::string mSimName;
-};
-
-#endif // LL_PICKITEM_H
diff --git a/indra/newview/llprofileimagepicker.cpp b/indra/newview/llprofileimagepicker.cpp
deleted file mode 100644
index 9930b6eea7818ef444207f8cac038dd888bcf372..0000000000000000000000000000000000000000
--- a/indra/newview/llprofileimagepicker.cpp
+++ /dev/null
@@ -1,233 +0,0 @@
-/**
-* @file llprofileimagepicker.cpp
-* @brief Specialized profile image filepicker
-*
-* $LicenseInfo:firstyear=2022&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2022, Linden Research, Inc.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-*
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
-
-#include "llviewerprecompiledheaders.h"
-#include "llprofileimagepicker.h"
-
-#include "llavatariconctrl.h"
-#include "llagent.h"
-#include "llloadingindicator.h"
-#include "llnotificationsutil.h"
-#include "llpanel.h"
-#include "llviewertexturelist.h"
-
-static constexpr std::string_view PROFILE_IMAGE_UPLOAD_CAP("UploadAgentProfileImage");
-
-static void post_profile_image_coro(std::string cap_url, EProfileImageType type, std::string path_to_image,
-    LLProfileImagePicker::ugly_picker_cb_t cb);
-static LLUUID post_profile_image(std::string cap_url, const LLSD& first_data, std::string path_to_image);
-static void setImageUploading(LLPanel* panel, bool loading);
-
-
-LLProfileImagePicker::LLProfileImagePicker(EProfileImageType type, LLHandle<LLPanel>* handle, ugly_picker_cb_t const& cb)
-:   LLFilePickerThread(LLFilePicker::FFLOAD_IMAGE)
-,   mHandle(handle)
-,   mType(type),
-    mCallback(cb)
-{ }
-
-LLProfileImagePicker::~LLProfileImagePicker()
-{
-    delete mHandle;
-}
-
-void LLProfileImagePicker::notify(const std::vector<std::string>& filenames)
-{
-    if (mHandle->isDead())
-    {
-        return;
-    }
-    if (filenames.empty())
-    {
-        return;
-    }
-    const std::string& file_path = filenames.at(0);
-    if (file_path.empty())
-    {
-        return;
-    }
-
-    // generate a temp texture file for coroutine
-    std::string const& temp_file = gDirUtilp->getTempFilename();
-    U32 codec = LLImageBase::getCodecFromExtension(gDirUtilp->getExtension(file_path));
-    const S32 MAX_DIM = 256;
-    if (!LLViewerTextureList::createUploadFile(file_path, temp_file, codec, MAX_DIM))
-    {
-        LLSD notif_args;
-        notif_args["REASON"] = LLImage::getLastThreadError().c_str();
-        LLNotificationsUtil::add("CannotUploadTexture", notif_args);
-        LL_WARNS("AvatarProperties") << "Failed to upload profile image of type " << (S32)PROFILE_IMAGE_SL << ", failed to open image" << LL_ENDL;
-        return;
-    }
-
-    std::string cap_url = gAgent.getRegionCapability(PROFILE_IMAGE_UPLOAD_CAP);
-    if (cap_url.empty())
-    {
-        LLSD args;
-        args["CAPABILITY"] = std::string(PROFILE_IMAGE_UPLOAD_CAP);
-        LLNotificationsUtil::add("RegionCapabilityRequestError", args);
-        LL_WARNS("AvatarProperties") << "Failed to upload profile image of type " << (S32)PROFILE_IMAGE_SL << ", no cap found" << LL_ENDL;
-        return;
-    }
-
-    setImageUploading(mHandle->get(), true);
-    LLCoros::instance().launch("postAgentUserImageCoro",
-                               [cap_url, this, temp_file]
-                               {
-                                   return post_profile_image_coro(cap_url, mType, temp_file, mCallback);
-                               });
-}
-
-LLUUID post_profile_image(std::string cap_url, const LLSD& first_data, std::string path_to_image)
-{
-    LLCore::HttpRequest::policy_t               httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
-    LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(
-        new LLCoreHttpUtil::HttpCoroutineAdapter("post_profile_image_coro", httpPolicy));
-    LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
-    LLCore::HttpHeaders::ptr_t httpHeaders;
-
-    LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
-    httpOpts->setFollowRedirects(true);
-
-    LLSD result = httpAdapter->postAndSuspend(httpRequest, cap_url, first_data, httpOpts, httpHeaders);
-
-    LLSD               httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
-    LLCore::HttpStatus status      = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
-
-    if (!status)
-    {
-    // todo: notification?
-    LL_WARNS("AvatarProperties") << "Failed to get uploader cap " << status.toString() << LL_ENDL;
-    return LLUUID::null;
-    }
-    if (!result.has("uploader"))
-    {
-    // todo: notification?
-    LL_WARNS("AvatarProperties") << "Failed to get uploader cap, response contains no data." << LL_ENDL;
-    return LLUUID::null;
-    }
-    std::string uploader_cap = result["uploader"].asString();
-    if (uploader_cap.empty())
-    {
-    LL_WARNS("AvatarProperties") << "Failed to get uploader cap, cap invalid." << LL_ENDL;
-    return LLUUID::null;
-    }
-
-    // Upload the image
-
-    LLCore::HttpRequest::ptr_t uploaderhttpRequest(new LLCore::HttpRequest);
-    LLCore::HttpHeaders::ptr_t uploaderhttpHeaders(new LLCore::HttpHeaders);
-    LLCore::HttpOptions::ptr_t uploaderhttpOpts(new LLCore::HttpOptions);
-    S64                        length;
-
-    {
-    llifstream instream(path_to_image.c_str(), std::iostream::binary | std::iostream::ate);
-    if (!instream.is_open())
-    {
-        LL_WARNS("AvatarProperties") << "Failed to open file " << path_to_image << LL_ENDL;
-        return LLUUID::null;
-    }
-    length = instream.tellg();
-    }
-
-    uploaderhttpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, "application/jp2");         // optional
-    uploaderhttpHeaders->append(HTTP_OUT_HEADER_CONTENT_LENGTH, llformat("%d", length));  // required!
-    uploaderhttpOpts->setFollowRedirects(true);
-
-    result = httpAdapter->postFileAndSuspend(uploaderhttpRequest, uploader_cap, path_to_image, uploaderhttpOpts, uploaderhttpHeaders);
-
-    httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
-    status      = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
-
-    LL_WARNS("AvatarProperties") << result << LL_ENDL;
-
-    if (!status)
-    {
-    LL_WARNS("AvatarProperties") << "Failed to upload image " << status.toString() << LL_ENDL;
-    return LLUUID::null;
-    }
-
-    if (result["state"].asString() != "complete")
-    {
-    if (result.has("message"))
-    {
-        LL_WARNS("AvatarProperties") << "Failed to upload image, state " << result["state"] << " message: " << result["message"] << LL_ENDL;
-    }
-    else
-    {
-        LL_WARNS("AvatarProperties") << "Failed to upload image " << result << LL_ENDL;
-    }
-    return LLUUID::null;
-    }
-
-    return result["new_asset"].asUUID();
-}
-
-void post_profile_image_coro(std::string cap_url, EProfileImageType type, std::string path_to_image,
-                             LLProfileImagePicker::ugly_picker_cb_t cb)
-{
-    LLSD data;
-    switch (type)
-    {
-    case PROFILE_IMAGE_SL:
-        data["profile-image-asset"] = "sl_image_id";
-        break;
-    case PROFILE_IMAGE_FL:
-        data["profile-image-asset"] = "fl_image_id";
-        break;
-    }
-
-    LLUUID result = post_profile_image(cap_url, data, path_to_image);
-
-    cb(result);
-
-    if (type == PROFILE_IMAGE_SL && result.notNull())
-    {
-        LLAvatarIconIDCache::getInstance()->add(gAgentID, result);
-        // Should trigger callbacks in icon controls
-        LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(gAgentID);
-    }
-
-    // Cleanup
-    LLFile::remove(path_to_image);
-}
-
-void setImageUploading(LLPanel* panel, bool loading)
-{
-    LLLoadingIndicator* indicator = panel->findChild<LLLoadingIndicator>("image_upload_indicator");
-    if (indicator)
-    {
-        indicator->setVisible(loading);
-        if (loading)
-        {
-            indicator->start();
-        }
-        else
-        {
-            indicator->stop();
-        }
-    }
-}
diff --git a/indra/newview/llprofileimagepicker.h b/indra/newview/llprofileimagepicker.h
deleted file mode 100644
index a67d0859b08efd4fbc6fb85f39f876ad215c28e3..0000000000000000000000000000000000000000
--- a/indra/newview/llprofileimagepicker.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
-* @file llprofileimagepicker.h
-* @brief Specialized profile image filepicker
-*
-* $LicenseInfo:firstyear=2022&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2022, Linden Research, Inc.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-*
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
-
-#ifndef LL_PROFILEIMAGEPICKER_H
-#define LL_PROFILEIMAGEPICKER_H
-
-#include "llviewermenufile.h"
-
-enum EProfileImageType
-{
-    PROFILE_IMAGE_SL,
-    PROFILE_IMAGE_FL,
-};
-
-class LLProfileImagePicker final : public LLFilePickerThread
-{
-public:
-    typedef std::function<void(LLUUID const&)> ugly_picker_cb_t;
-
-    LLProfileImagePicker(EProfileImageType type, LLHandle<LLPanel>* handle, ugly_picker_cb_t const& cb);
-    ~LLProfileImagePicker() override;
-    void notify(const std::vector<std::string>& filenames) override;
-
-private:
-    LLHandle<LLPanel>* mHandle;
-    EProfileImageType mType;
-    ugly_picker_cb_t mCallback;
-};
-
-#endif //  LL_PROFILEIMAGEPICKER_H
diff --git a/indra/newview/llsearchcombobox.h b/indra/newview/llsearchcombobox.h
index ff9c74a6a84736edd863b78a9a26ec18ee80a74d..891237e92eae314003f39c58d728f32d2b12887f 100644
--- a/indra/newview/llsearchcombobox.h
+++ b/indra/newview/llsearchcombobox.h
@@ -61,6 +61,11 @@ class LLSearchComboBox : public LLComboBox
 
     ~LLSearchComboBox();
 
+    /**
+     * Sets focus to text box
+     */
+    void focusTextEntry();
+
 protected:
 
     LLSearchComboBox(const Params&p);
@@ -93,11 +98,6 @@ class LLSearchComboBox : public LLComboBox
      */
     void onSelectionCommit();
 
-    /**
-     * Sets focus to text box
-     */
-    void focusTextEntry();
-
     LLButton* mSearchButton;
 };
 
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 5650732f72f5d44bedfbcadfdb109ef10b548db4..f4fe10b4b128f43abcdc04942ee2d4e120c9aa74 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -183,7 +183,6 @@
 #include "pipeline.h"
 #include "llappviewer.h"
 #include "llfasttimerview.h"
-#include "llfloaterdirectory.h"
 #include "llfloatermap.h"
 #include "llweb.h"
 #include "llvoiceclient.h"
@@ -221,6 +220,7 @@
 #if LL_WINDOWS
 #include "lldxhardware.h"
 #endif
+#include "fsfloatersearch.h"
 
 //
 // exported globals
@@ -2914,13 +2914,12 @@ void register_viewer_callbacks(LLMessageSystem* msg)
     msg->setHandlerFuncFast(_PREHASH_GroupNoticesListReply, LLPanelGroupNotices::processGroupNoticesListReply);
 
     // directory search
-    msg->setHandlerFunc("DirPeopleReply", LLFloaterDirectory::processSearchPeopleReply);
-    msg->setHandlerFunc("DirGroupsReply", LLFloaterDirectory::processSearchGroupsReply);
-    msg->setHandlerFunc("DirPlacesReply", LLFloaterDirectory::processSearchPlacesReply);
-    msg->setHandlerFunc("DirEventsReply", LLFloaterDirectory::processSearchEventsReply);
-    msg->setHandlerFunc("DirLandReply",   LLFloaterDirectory::processSearchLandReply);
-    msg->setHandlerFunc("DirClassifiedReply",  LLFloaterDirectory::processSearchClassifiedsReply);
-
+    msg->setHandlerFuncFast(_PREHASH_DirPeopleReply, FSPanelSearchPeople::processSearchReply);
+    msg->setHandlerFuncFast(_PREHASH_DirPlacesReply, FSPanelSearchPlaces::processSearchReply);
+    msg->setHandlerFuncFast(_PREHASH_DirGroupsReply, FSPanelSearchGroups::processSearchReply);
+    msg->setHandlerFuncFast(_PREHASH_DirEventsReply, FSPanelSearchEvents::processSearchReply);
+    msg->setHandlerFuncFast(_PREHASH_DirLandReply,   FSPanelSearchLand::processSearchReply);
+    msg->setHandlerFuncFast(_PREHASH_DirClassifiedReply,  FSPanelSearchClassifieds::processSearchReply);
 
     msg->setHandlerFuncFast(_PREHASH_AvatarPickerReply, LLFloaterAvatarPicker::processAvatarPickerReply);
 
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 9dace140f3a3992a09cb980acbd0687ec96e91c2..cb90770a5f80b189d76ac7be68cafff5f5821c34 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -83,7 +83,6 @@
 #include "llfloatercreatelandmark.h"
 #include "llfloaterdeleteprefpreset.h"
 #include "llfloaterdestinations.h"
-#include "llfloaterdirectory.h"
 #include "llfloaterdisplayname.h"
 #include "llfloatereditextdaycycle.h"
 #include "llfloateremojipicker.h"
@@ -145,9 +144,7 @@
 #include "llfloaterpreferenceviewadvanced.h"
 #include "llfloaterpreviewtrash.h"
 #include "llfloaterprofile.h"
-#include "llfloaterprofilelegacy.h"
 #include "llfloaterprogressview.h"
-#include "llfloaterpublishclassified.h"
 #include "llfloaterregiondebugconsole.h"
 #include "llfloaterregioninfo.h"
 #include "llfloaterregionrestarting.h"
@@ -194,6 +191,7 @@
 #include "llmoveview.h"
 #include "llfloaterimnearbychat.h"
 #include "llpanelblockedlist.h"
+#include "llpanelprofileclassifieds.h"
 #include "llpanelemojicomplete.h"
 #include "llpreviewanim.h"
 #include "llpreviewgesture.h"
@@ -203,12 +201,12 @@
 #include "llpreviewtexture.h"
 #include "llscriptfloater.h"
 #include "llsyswellwindow.h"
+#include "fsfloatersearch.h"
 #include "bdfloaterposer.h"
 #include "bdfloaterposecreator.h"
 
 // *NOTE: Please add files in alphabetical order to keep merges easy.
 // [RLVa:KB] - Checked: 2010-03-11
-#include "llfloaterwebprofile.h"
 #include "rlvfloaters.h"
 // [/RLVa:KB]
 // handle secondlife:///app/openfloater/{NAME} URLs
@@ -500,7 +498,7 @@ void LLViewerFloaterReg::registerFloaters()
     LLFloaterReg::add("preview_sound", "floater_preview_sound.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewSound>, "preview");
     LLFloaterReg::add("preview_texture", "floater_preview_texture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewTexture>, "preview");
     LLFloaterReg::add("preview_trash", "floater_preview_trash.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreviewTrash>);
-    LLFloaterReg::add("publish_classified", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPublishClassified>);
+    LLFloaterReg::add("publish_classified", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPublishClassifiedFloater>);
     LLFloaterReg::add("save_pref_preset", "floater_save_pref_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSavePrefPreset>);
     LLFloaterReg::add("save_camera_preset", "floater_save_camera_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSaveCameraPreset>);
     LLFloaterReg::add("script_colors", "floater_script_ed_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptEdPrefs>);
@@ -543,6 +541,7 @@ void LLViewerFloaterReg::registerFloaters()
     LLFloaterReg::add("stop_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotRunQueue>);
     LLFloaterReg::add("snapshot", "floater_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSnapshot>);
     LLFloaterReg::add("simple_snapshot", "floater_simple_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSimpleSnapshot>);
+    LLFloaterReg::add("search", "floater_fs_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterSearch>);
     //LLFloaterReg::add("search", "floater_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearch>);
 // [SL:KB] - Patch: UI-FloaterSearchReplace | Checked: 2010-10-26 (Catznip-2.3)
     LLFloaterReg::add("search_replace", "floater_search_replace.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearchReplace>);
@@ -575,7 +574,6 @@ void LLViewerFloaterReg::registerFloaters()
     LLFloaterReg::add("delete_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDeleteQueue>);
     LLFloaterReg::add("generic_text", "floater_generic_text.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGenericText>);
     LLFloaterReg::add("group_profile", "floater_group_profile.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGroupProfile>);
-    LLFloaterReg::add("legacy_profile", "floater_profile_legacy.xml", (LLFloaterBuildFunc) &LLFloaterReg::build<LLFloaterProfileLegacy>);
     LLFloaterReg::add("lightbox", "floater_lightbox_settings.xml", (LLFloaterBuildFunc) &LLFloaterReg::build<ALFloaterLightBox>);
     LLFloaterReg::add("message_builder", "floater_message_builder.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMessageBuilder>);
     LLFloaterReg::add("message_log", "floater_message_log.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMessageLog>);
@@ -588,11 +586,8 @@ void LLViewerFloaterReg::registerFloaters()
     LLFloaterReg::add("progress_view", "floater_progress_view.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterProgressView>);
     LLFloaterReg::add("quick_settings", "floater_quick_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloater>);
     LLFloaterReg::add("region_tracker", "floater_region_tracker.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<ALFloaterRegionTracker>);
-    LLFloaterReg::add("search", "floater_directory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDirectory>);
     LLFloaterReg::add("settings_color", "floater_settings_color.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<ALFloaterSettingsColor>);
     LLFloaterReg::add("sound_explorer", "floater_explore_sounds.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<ALFloaterExploreSounds>);
-    LLFloaterReg::add("webprofile", "floater_web_profile.xml", (LLFloaterBuildFunc)&LLFloaterWebProfile::create);
-
 
     LLFloaterReg::registerControlVariables(); // Make sure visibility and rect controls get preserved when saving
 }
diff --git a/indra/newview/llviewerinput.cpp b/indra/newview/llviewerinput.cpp
index 9639fb38ed4598cd48052f743ff499743e739427..74e8c10132132aa4c721b5270955f0ac26996735 100644
--- a/indra/newview/llviewerinput.cpp
+++ b/indra/newview/llviewerinput.cpp
@@ -49,6 +49,7 @@
 #include "llfloatercamera.h"
 #include "llinitparam.h"
 #include "llselectmgr.h"
+#include "fsfloatersearch.h"
 #include "llfloaterwebcontent.h"
 // [RLVa:KB] - Checked: 2021-07-29 (RLVa-1.4.4a)
 #include "rlvactions.h"
@@ -708,7 +709,7 @@ bool start_chat( EKeystate s )
 bool start_gesture( EKeystate s )
 {
     LLFloater* focused_floater = gFloaterView->getFocusedFloater();
-    if (focused_floater && dynamic_cast<LLFloaterWebContent*>(focused_floater))
+    if (focused_floater && (dynamic_cast<LLFloaterWebContent*>(focused_floater) || dynamic_cast<FSFloaterSearch*>(focused_floater)))
     {
         return true;
     }
diff --git a/indra/newview/llviewerjoystick.cpp b/indra/newview/llviewerjoystick.cpp
index dcccd244013f0b13c860a63ffbad9673af6e8fa3..d019200012ae7f6af87106694aed961bb04a3de0 100644
--- a/indra/newview/llviewerjoystick.cpp
+++ b/indra/newview/llviewerjoystick.cpp
@@ -620,19 +620,19 @@ void LLViewerJoystick::refreshFromSettings()
     mFlycamFeathering = gSavedSettings.getF32("FlycamFeathering");
 
     mInvertPitch = gSavedSettings.getBOOL("JoystickInvertPitch");
-	
-	mMappedButtons[ROLL_LEFT] = gSavedSettings.getS32("JoystickButtonRollLeft");
-	mMappedButtons[ROLL_RIGHT] = gSavedSettings.getS32("JoystickButtonRollRight");
-	mMappedButtons[ROLL_DEFAULT] = gSavedSettings.getS32("JoystickButtonRollDefault");
-	mMappedButtons[ZOOM_OUT] = gSavedSettings.getS32("JoystickButtonZoomOut");
-	mMappedButtons[ZOOM_IN] = gSavedSettings.getS32("JoystickButtonZoomIn");
-	mMappedButtons[ZOOM_DEFAULT] = gSavedSettings.getS32("JoystickButtonZoomDefault");
-	mMappedButtons[JUMP] = gSavedSettings.getS32("JoystickButtonJump");
-	mMappedButtons[CROUCH] = gSavedSettings.getS32("JoystickButtonCrouch");
-	mMappedButtons[FLY] = gSavedSettings.getS32("JoystickButtonFly");
-	mMappedButtons[MOUSELOOK] = gSavedSettings.getS32("JoystickButtonMouselook");
-	mMappedButtons[FLYCAM] = gSavedSettings.getS32("JoystickButtonFlycam");
-	mMappedButtons[TOGGLE_RUN] = gSavedSettings.getS32("JoystickButtonRunToggle");
+
+    mMappedButtons[ROLL_LEFT] = gSavedSettings.getS32("JoystickButtonRollLeft");
+    mMappedButtons[ROLL_RIGHT] = gSavedSettings.getS32("JoystickButtonRollRight");
+    mMappedButtons[ROLL_DEFAULT] = gSavedSettings.getS32("JoystickButtonRollDefault");
+    mMappedButtons[ZOOM_OUT] = gSavedSettings.getS32("JoystickButtonZoomOut");
+    mMappedButtons[ZOOM_IN] = gSavedSettings.getS32("JoystickButtonZoomIn");
+    mMappedButtons[ZOOM_DEFAULT] = gSavedSettings.getS32("JoystickButtonZoomDefault");
+    mMappedButtons[JUMP] = gSavedSettings.getS32("JoystickButtonJump");
+    mMappedButtons[CROUCH] = gSavedSettings.getS32("JoystickButtonCrouch");
+    mMappedButtons[FLY] = gSavedSettings.getS32("JoystickButtonFly");
+    mMappedButtons[MOUSELOOK] = gSavedSettings.getS32("JoystickButtonMouselook");
+    mMappedButtons[FLYCAM] = gSavedSettings.getS32("JoystickButtonFlycam");
+    mMappedButtons[TOGGLE_RUN] = gSavedSettings.getS32("JoystickButtonRunToggle");
 }
 
 void LLViewerJoystick::initDevice(LLSD &guid)
@@ -987,17 +987,17 @@ void LLViewerJoystick::moveObjects(bool reset)
     bool is_zero = true;
 
     static LLCachedControl<bool> blackdragon(gSavedSettings, "BlackDragonControls", false);
-	if(blackdragon)
-	{
-		//BD - Avoid making ridicously big movements if there's a big drop in fps 
-		time = llclamp(time, 0.016f, 0.033f);
+    if(blackdragon)
+    {
+        //BD - Avoid making ridicously big movements if there's a big drop in fps
+        time = llclamp(time, 0.016f, 0.033f);
 
-	//	//BD - Remappable Joystick Controls
+    //  //BD - Remappable Joystick Controls
 
-	
-		for (U32 i = 0; i < 6; i++)
-		{
-			cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]);
+
+        for (U32 i = 0; i < 6; i++)
+        {
+            cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]);
 
             if (i == CAM_X_AXIS)
             {
@@ -1010,89 +1010,89 @@ void LLViewerJoystick::moveObjects(bool reset)
                 cur_delta[i] -= (F32)getJoystickButton(mMappedButtons[CROUCH]);
             }
 
-	//		//BD - Invertable Pitch Controls
+    //      //BD - Invertable Pitch Controls
             if (mInvertPitch && i == 4)
-				cur_delta[4] *= -1.f;
-
-			F32 tmp = cur_delta[i];
-			F32 axis_deadzone = mBuildAxisDeadZone[i];
-			if (m3DCursor || llabs(cur_delta[i]) < axis_deadzone)
-			{
-				cur_delta[i] = cur_delta[i] - sLastDelta[i];
-			}
-			sLastDelta[i] = tmp;
-			is_zero = is_zero && (cur_delta[i] == 0.f);
-			
-			//BD - We assume that delta 1.0 is the maximum.
-			if (llabs(cur_delta[i]) > axis_deadzone)
-			{
-				//BD - Clamp the delta between 1 and -1 while taking the deadzone into account.
-				if (cur_delta[i] > 0)
-				{
-					cur_delta[i] = llclamp(cur_delta[i] - axis_deadzone, 0.f, 1.f - axis_deadzone);
-				}
-				else
-				{
-					cur_delta[i] = llclamp(cur_delta[i] + axis_deadzone, -1.f + axis_deadzone, 0.f);
-				}
-				//BD - Rescale the remaining delta to match the maximum to get a new clean 0 to 1 range.
-				cur_delta[i] = cur_delta[i] / (1.f - axis_deadzone);
-			}
-			cur_delta[i] *= mBuildAxisScale[i];
-		
-			if (!m3DCursor)
-			{
-				cur_delta[i] *= time;
-			}
-
-			sDelta[i] = sDelta[i] + (cur_delta[i] - sDelta[i]) * time * mBuildFeathering;
-		}
-	}
-	else
-	{
-	    // avoid making ridicously big movements if there's a big drop in fps
-	    if (time > .2f)
-	    {
-	        time = .2f;
-	    }
-
-	    // max feather is 32
-	    F32 feather = mBuildFeathering;
-	    bool absolute = m3DCursor;
-
-	    for (U32 i = 0; i < 6; i++)
-	    {
-	        cur_delta[i] = -mAxes[mJoystickAxis[i]];
-	//      //BD - Invertable Pitch Controls
-	        if (!mInvertPitch && i == 4)
-	            cur_delta[i] = -cur_delta[i];
-
-	        F32 tmp = cur_delta[i];
-	        if (absolute)
-	        {
-	            cur_delta[i] = cur_delta[i] - sLastDelta[i];
-	        }
-	        sLastDelta[i] = tmp;
-	        is_zero = is_zero && (cur_delta[i] == 0.f);
-
-	        if (cur_delta[i] > 0)
-	        {
-	            cur_delta[i] = llmax(cur_delta[i]- mBuildAxisDeadZone[i], 0.f);
-	        }
-	        else
-	        {
-	            cur_delta[i] = llmin(cur_delta[i]+ mBuildAxisDeadZone[i], 0.f);
-	        }
-	        cur_delta[i] *= mBuildAxisScale[i];
-
-	        if (!absolute)
-	        {
-	            cur_delta[i] *= time;
-	        }
-
-	        sDelta[i] = sDelta[i] + (cur_delta[i]-sDelta[i])*time*feather;
-	    }
-	}
+                cur_delta[4] *= -1.f;
+
+            F32 tmp = cur_delta[i];
+            F32 axis_deadzone = mBuildAxisDeadZone[i];
+            if (m3DCursor || llabs(cur_delta[i]) < axis_deadzone)
+            {
+                cur_delta[i] = cur_delta[i] - sLastDelta[i];
+            }
+            sLastDelta[i] = tmp;
+            is_zero = is_zero && (cur_delta[i] == 0.f);
+
+            //BD - We assume that delta 1.0 is the maximum.
+            if (llabs(cur_delta[i]) > axis_deadzone)
+            {
+                //BD - Clamp the delta between 1 and -1 while taking the deadzone into account.
+                if (cur_delta[i] > 0)
+                {
+                    cur_delta[i] = llclamp(cur_delta[i] - axis_deadzone, 0.f, 1.f - axis_deadzone);
+                }
+                else
+                {
+                    cur_delta[i] = llclamp(cur_delta[i] + axis_deadzone, -1.f + axis_deadzone, 0.f);
+                }
+                //BD - Rescale the remaining delta to match the maximum to get a new clean 0 to 1 range.
+                cur_delta[i] = cur_delta[i] / (1.f - axis_deadzone);
+            }
+            cur_delta[i] *= mBuildAxisScale[i];
+
+            if (!m3DCursor)
+            {
+                cur_delta[i] *= time;
+            }
+
+            sDelta[i] = sDelta[i] + (cur_delta[i] - sDelta[i]) * time * mBuildFeathering;
+        }
+    }
+    else
+    {
+        // avoid making ridicously big movements if there's a big drop in fps
+        if (time > .2f)
+        {
+            time = .2f;
+        }
+
+        // max feather is 32
+        F32 feather = mBuildFeathering;
+        bool absolute = m3DCursor;
+
+        for (U32 i = 0; i < 6; i++)
+        {
+            cur_delta[i] = -mAxes[mJoystickAxis[i]];
+    //      //BD - Invertable Pitch Controls
+            if (!mInvertPitch && i == 4)
+                cur_delta[i] = -cur_delta[i];
+
+            F32 tmp = cur_delta[i];
+            if (absolute)
+            {
+                cur_delta[i] = cur_delta[i] - sLastDelta[i];
+            }
+            sLastDelta[i] = tmp;
+            is_zero = is_zero && (cur_delta[i] == 0.f);
+
+            if (cur_delta[i] > 0)
+            {
+                cur_delta[i] = llmax(cur_delta[i]- mBuildAxisDeadZone[i], 0.f);
+            }
+            else
+            {
+                cur_delta[i] = llmin(cur_delta[i]+ mBuildAxisDeadZone[i], 0.f);
+            }
+            cur_delta[i] *= mBuildAxisScale[i];
+
+            if (!absolute)
+            {
+                cur_delta[i] *= time;
+            }
+
+            sDelta[i] = sDelta[i] + (cur_delta[i]-sDelta[i])*time*feather;
+        }
+    }
 
     U32 upd_type = UPD_NONE;
     LLVector3 v;
@@ -1152,81 +1152,81 @@ void LLViewerJoystick::moveAvatar(bool reset)
 
     static LLCachedControl<bool> blackdragon(gSavedSettings, "BlackDragonControls", false);
     if (blackdragon)
-	{
-		bool is_zero = true;
-		static bool button_held = false;
-		//BD
-		static bool w_button_held = false;
-		static bool m_button_held = false;
-
-	//	//BD - Remappable Joystick Controls
-		if (getJoystickButton(mMappedButtons[FLY]) == 1 && !button_held)
-		{
-			button_held = true;
-			if (gAgent.getFlying())
-			{
-				gAgent.setFlying(FALSE);
-			}
-			else
-			{
-				gAgent.setFlying(TRUE);
-			}
-		}
-		else if (getJoystickButton(mMappedButtons[FLY]) == 0 && button_held)
-		{
-			button_held = false;
-		}
-
-		if (getJoystickButton(mMappedButtons[TOGGLE_RUN]) == 1 && !w_button_held)
-		{
-			w_button_held = true;
-			if (gAgent.getAlwaysRun())
-			{
-				gAgent.clearAlwaysRun();
-			}
-			else
-			{
-				gAgent.setAlwaysRun();
-			}
-		}
-		else if (getJoystickButton(mMappedButtons[TOGGLE_RUN]) == 0 && w_button_held)
-		{
-			w_button_held = false;
-		}
-
-		if (getJoystickButton(mMappedButtons[MOUSELOOK]) == 1 && !m_button_held)
-		{
-			m_button_held = true;
-			if (gAgentCamera.cameraMouselook())
-			{
-				gAgentCamera.changeCameraToDefault();
-			}
-			else
-			{
-				gAgentCamera.changeCameraToMouselook();
-			}
-		}
-		else if (getJoystickButton(mMappedButtons[MOUSELOOK]) == 0 && m_button_held)
-		{
-			m_button_held = false;
-		}
-
-		// time interval in seconds between this frame and the previous
-		F32 time = gFrameIntervalSeconds.value();
-
-		//BD - Avoid making ridicously big movements if there's a big drop in fps 
-		time = llclamp(time, 0.016f, 0.033f);
-
-		// note: max feather is 32.0
-	
+    {
+        bool is_zero = true;
+        static bool button_held = false;
+        //BD
+        static bool w_button_held = false;
+        static bool m_button_held = false;
+
+    //  //BD - Remappable Joystick Controls
+        if (getJoystickButton(mMappedButtons[FLY]) == 1 && !button_held)
+        {
+            button_held = true;
+            if (gAgent.getFlying())
+            {
+                gAgent.setFlying(FALSE);
+            }
+            else
+            {
+                gAgent.setFlying(TRUE);
+            }
+        }
+        else if (getJoystickButton(mMappedButtons[FLY]) == 0 && button_held)
+        {
+            button_held = false;
+        }
+
+        if (getJoystickButton(mMappedButtons[TOGGLE_RUN]) == 1 && !w_button_held)
+        {
+            w_button_held = true;
+            if (gAgent.getAlwaysRun())
+            {
+                gAgent.clearAlwaysRun();
+            }
+            else
+            {
+                gAgent.setAlwaysRun();
+            }
+        }
+        else if (getJoystickButton(mMappedButtons[TOGGLE_RUN]) == 0 && w_button_held)
+        {
+            w_button_held = false;
+        }
+
+        if (getJoystickButton(mMappedButtons[MOUSELOOK]) == 1 && !m_button_held)
+        {
+            m_button_held = true;
+            if (gAgentCamera.cameraMouselook())
+            {
+                gAgentCamera.changeCameraToDefault();
+            }
+            else
+            {
+                gAgentCamera.changeCameraToMouselook();
+            }
+        }
+        else if (getJoystickButton(mMappedButtons[MOUSELOOK]) == 0 && m_button_held)
+        {
+            m_button_held = false;
+        }
+
+        // time interval in seconds between this frame and the previous
+        F32 time = gFrameIntervalSeconds.value();
+
+        //BD - Avoid making ridicously big movements if there's a big drop in fps
+        time = llclamp(time, 0.016f, 0.033f);
+
+        // note: max feather is 32.0
+
         F32 cur_delta[6] = {};
-		F32 val, dom_mov = 0.f;
-		U32 dom_axis = Z_I;
+        F32 val, dom_mov = 0.f;
+        U32 dom_axis = Z_I;
 
-		// remove dead zones and determine biggest movement on the joystick 
-		for (U32 i = 0; i < 6; i++)
-		{
-			cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]);
+        // remove dead zones and determine biggest movement on the joystick
+        for (U32 i = 0; i < 6; i++)
+        {
+            cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]);
 
             if(i == Z_AXIS)
             {
@@ -1234,289 +1234,289 @@ void LLViewerJoystick::moveAvatar(bool reset)
                 cur_delta[i] -= (F32)getJoystickButton(mMappedButtons[CROUCH]);
             }
 
-			F32 axis_deadzone = mAvatarAxisDeadZone[i];
-
-			//BD - We assume that delta 1.0 is the maximum.
-			if (llabs(cur_delta[i]) > axis_deadzone)
-			{
-				//BD - Clamp the delta between 1 and -1 while taking the deadzone into account.
-				if (cur_delta[i] > 0)
-				{
-					cur_delta[i] = llclamp(cur_delta[i] - axis_deadzone, 0.f, 1.f - axis_deadzone);
-				}
-				else
-				{
-					cur_delta[i] = llclamp(cur_delta[i] + axis_deadzone, -1.f + axis_deadzone, 0.f);
-				}
-				//BD - Rescale the remaining delta to match the maximum to get a new clean 0 to 1 range.
-				cur_delta[i] = cur_delta[i] / (1.f - axis_deadzone);
-			}
-			else
-			{
-				cur_delta[i] = 0.f;
-			}
-
-			// we don't care about Roll (RZ) and Z is calculated after the loop
-	        if (i != Z_I && i != RZ_I)
-			{
-				// find out the axis with the biggest joystick motion
-				val = fabs(cur_delta[i]);
-				if (val > dom_mov)
-				{
-					dom_axis = i;
-					dom_mov = val;
-				}
-			}
-		
-			cur_delta[i] *= mAvatarAxisScale[i] * time;
-
-			//sDelta[i] = sDelta[i] + (cur_delta[i] - sDelta[i]) * time;
-			is_zero = is_zero && (cur_delta[i] == 0.f);
-		}
-
-		if (!is_zero)
-		{
-			// Clear AFK state if moved beyond the deadzone
-			if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME)
-			{
-				gAgent.clearAFK();
-			}
-		
-			setCameraNeedsUpdate(true);
-		}
-
-	//	//BD - Invertable Pitch Controls
-		if (!mInvertPitch)
-			cur_delta[RX_I] = -cur_delta[RX_I];
-
-		// forward|backward movements overrule the real dominant movement if 
-		// they're bigger than its 20%. This is what you want 'cos moving forward
-		// is what you do most. We also added a special (even more lenient) case 
-		// for RX|RY to allow walking while pitching and turning
-		if (fabs(cur_delta[Z_I]) > .2f * dom_mov
-		    || ((dom_axis == RX_I || dom_axis == RY_I) 
-			&& fabs(cur_delta[Z_I]) > .05f * dom_mov))
-		{
-			dom_axis = Z_I;
-		}
-
-		sDelta[X_I] = -cur_delta[X_I];
-		sDelta[Y_I] = -cur_delta[Y_I];
-		sDelta[Z_I] = -cur_delta[Z_I];
-		cur_delta[RX_I] *= -mAvatarAxisScale[RX_I];
-		cur_delta[RY_I] *= -mAvatarAxisScale[RY_I];
-		
-		sDelta[RX_I] += (cur_delta[RX_I] - sDelta[RX_I]) * time * mAvatarFeathering;
-		sDelta[RY_I] += (cur_delta[RY_I] - sDelta[RY_I]) * time * mAvatarFeathering;
-	
-		handleRun((F32) sqrt(sDelta[Z_I]*sDelta[Z_I] + sDelta[X_I]*sDelta[X_I]));
-	
-	//	//BD - Xbox360 Controller Support
-		//     Use raw deltas, do not add any stupid limitations or extra dead zones
-		//     otherwise alot controllers will cry and camera movement will bug out
-		//     or be completely ignored on some controllers. Especially fixes Xbox 360
-		//     controller avatar movement.
-		agentSlide(sDelta[X_I]);		// move sideways
-		agentFly(sDelta[Y_I]);			// up/down & crouch
-		agentPush(sDelta[Z_I]);			// forward/back
-		agentPitch(sDelta[RX_I]);		// pitch
-		agentYaw(sDelta[RY_I]);			// turn
-	}
-	else
-	{
-	    bool is_zero = true;
-	    static bool button_held = false;
-
-	    if (mBtn[1] == 1)
-	    {
-	        // If AutomaticFly is enabled, then button1 merely causes a
-	        // jump (as the up/down axis already controls flying) if on the
-	        // ground, or cease flight if already flying.
-	        // If AutomaticFly is disabled, then button1 toggles flying.
-	        if (ALControlCache::AutomaticFly)
-	        {
-	            if (!gAgent.getFlying())
-	            {
-	                gAgent.moveUp(1);
-	            }
-	            else if (!button_held)
-	            {
-	                button_held = true;
-	                gAgent.setFlying(FALSE);
-	            }
-	        }
-	        else if (!button_held)
-	        {
-	            button_held = true;
-	            gAgent.setFlying(!gAgent.getFlying());
-	        }
-
-	        is_zero = false;
-	    }
-	    else
-	    {
-	        button_held = false;
-	    }
-
-	    // time interval in seconds between this frame and the previous
-	    F32 time = gFrameIntervalSeconds.value();
-
-	    // avoid making ridicously big movements if there's a big drop in fps
-	    if (time > .2f)
-	    {
-	        time = .2f;
-	    }
-
-	    // note: max feather is 32.0
-	    F32 feather = mAvatarFeathering;
-
-	    F32 cur_delta[6];
-	    F32 val, dom_mov = 0.f;
-	    U32 dom_axis = Z_I;
-	#if LIB_NDOF
-	    bool absolute = (m3DCursor && mNdofDev->absolute);
-	#else
-	    bool absolute = false;
-	#endif
-	    // remove dead zones and determine biggest movement on the joystick
-	    for (U32 i = 0; i < 6; i++)
-	    {
-	        cur_delta[i] = -mAxes[mJoystickAxis[i]];
-
-	        if (!mInvertPitch && i == 4)
-	            cur_delta[i] = -cur_delta[i];
-
-	        if (absolute)
-	        {
-	            F32 tmp = cur_delta[i];
-	            cur_delta[i] = cur_delta[i] - sLastDelta[i];
-	            sLastDelta[i] = tmp;
-	        }
-
-	        if (cur_delta[i] > 0)
-	        {
-	            cur_delta[i] = llmax(cur_delta[i]- mAvatarAxisDeadZone[i], 0.f);
-	        }
-	        else
-	        {
-	            cur_delta[i] = llmin(cur_delta[i]+ mAvatarAxisDeadZone[i], 0.f);
-	        }
-
-	        // we don't care about Roll (RZ) and Z is calculated after the loop
-	        if (i != Z_I && i != RZ_I)
-	        {
-	            // find out the axis with the biggest joystick motion
-	            val = fabs(cur_delta[i]);
-	            if (val > dom_mov)
-	            {
-	                dom_axis = i;
-	                dom_mov = val;
-	            }
-	        }
-
-	        is_zero = is_zero && (cur_delta[i] == 0.f);
-	    }
-
-	    if (!is_zero)
-	    {
-	        // Clear AFK state if moved beyond the deadzone
-	        if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME)
-	        {
-	            gAgent.clearAFK();
-	        }
-
-	        setCameraNeedsUpdate(true);
-	    }
-
-	    // forward|backward movements overrule the real dominant movement if
-	    // they're bigger than its 20%. This is what you want 'cos moving forward
-	    // is what you do most. We also added a special (even more lenient) case
-	    // for RX|RY to allow walking while pitching and turning
-	    if (fabs(cur_delta[Z_I]) > .2f * dom_mov
-	        || ((dom_axis == RX_I || dom_axis == RY_I)
-	        && fabs(cur_delta[Z_I]) > .05f * dom_mov))
-	    {
-	        dom_axis = Z_I;
-	    }
-
-	    sDelta[X_I] = -cur_delta[X_I] * mAvatarAxisScale[X_I];
-	    sDelta[Y_I] = -cur_delta[Y_I] * mAvatarAxisScale[Y_I];
-	    sDelta[Z_I] = -cur_delta[Z_I] * mAvatarAxisScale[Z_I];
-	    cur_delta[RX_I] *= -mAvatarAxisScale[RX_I] * mPerfScale;
-	    cur_delta[RY_I] *= -mAvatarAxisScale[RY_I] * mPerfScale;
-
-	    if (!absolute)
-	    {
-	        cur_delta[RX_I] *= time;
-	        cur_delta[RY_I] *= time;
-	    }
-	    sDelta[RX_I] += (cur_delta[RX_I] - sDelta[RX_I]) * time * feather;
-	    sDelta[RY_I] += (cur_delta[RY_I] - sDelta[RY_I]) * time * feather;
-
-	    handleRun((F32) sqrt(sDelta[Z_I]*sDelta[Z_I] + sDelta[X_I]*sDelta[X_I]));
-
-	    // Allow forward/backward movement some priority
-	    if (dom_axis == Z_I)
-	    {
-	        agentPush(sDelta[Z_I]);         // forward/back
-
-	        if (fabs(sDelta[X_I])  > .1f)
-	        {
-	            agentSlide(sDelta[X_I]);    // move sideways
-	        }
-
-	        if (fabs(sDelta[Y_I])  > .1f)
-	        {
-	            agentFly(sDelta[Y_I]);      // up/down & crouch
-	        }
-
-	        // too many rotations during walking can be confusing, so apply
-	        // the deadzones one more time (quick & dirty), at 50%|30% power
-	        F32 eff_rx = .3f * mAvatarAxisDeadZone[RX_I];
-	        F32 eff_ry = .3f * mAvatarAxisDeadZone[RY_I];
-
-	        if (sDelta[RX_I] > 0)
-	        {
-	            eff_rx = llmax(sDelta[RX_I] - eff_rx, 0.f);
-	        }
-	        else
-	        {
-	            eff_rx = llmin(sDelta[RX_I] + eff_rx, 0.f);
-	        }
-
-	        if (sDelta[RY_I] > 0)
-	        {
-	            eff_ry = llmax(sDelta[RY_I] - eff_ry, 0.f);
-	        }
-	        else
-	        {
-	            eff_ry = llmin(sDelta[RY_I] + eff_ry, 0.f);
-	        }
-
-
-	        if (fabs(eff_rx) > 0.f || fabs(eff_ry) > 0.f)
-	        {
-	            if (gAgent.getFlying())
-	            {
-	                agentPitch(eff_rx);
-	                agentYaw(eff_ry);
-	            }
-	            else
-	            {
-	                agentPitch(eff_rx);
-	                agentYaw(2.f * eff_ry);
-	            }
-	        }
-	    }
-	    else
-	    {
-	        agentSlide(sDelta[X_I]);        // move sideways
-	        agentFly(sDelta[Y_I]);          // up/down & crouch
-	        agentPush(sDelta[Z_I]);         // forward/back
-	        agentPitch(sDelta[RX_I]);       // pitch
-	        agentYaw(sDelta[RY_I]);         // turn
-	    }
-	}
+            F32 axis_deadzone = mAvatarAxisDeadZone[i];
+
+            //BD - We assume that delta 1.0 is the maximum.
+            if (llabs(cur_delta[i]) > axis_deadzone)
+            {
+                //BD - Clamp the delta between 1 and -1 while taking the deadzone into account.
+                if (cur_delta[i] > 0)
+                {
+                    cur_delta[i] = llclamp(cur_delta[i] - axis_deadzone, 0.f, 1.f - axis_deadzone);
+                }
+                else
+                {
+                    cur_delta[i] = llclamp(cur_delta[i] + axis_deadzone, -1.f + axis_deadzone, 0.f);
+                }
+                //BD - Rescale the remaining delta to match the maximum to get a new clean 0 to 1 range.
+                cur_delta[i] = cur_delta[i] / (1.f - axis_deadzone);
+            }
+            else
+            {
+                cur_delta[i] = 0.f;
+            }
+
+            // we don't care about Roll (RZ) and Z is calculated after the loop
+            if (i != Z_I && i != RZ_I)
+            {
+                // find out the axis with the biggest joystick motion
+                val = fabs(cur_delta[i]);
+                if (val > dom_mov)
+                {
+                    dom_axis = i;
+                    dom_mov = val;
+                }
+            }
+
+            cur_delta[i] *= mAvatarAxisScale[i] * time;
+
+            //sDelta[i] = sDelta[i] + (cur_delta[i] - sDelta[i]) * time;
+            is_zero = is_zero && (cur_delta[i] == 0.f);
+        }
+
+        if (!is_zero)
+        {
+            // Clear AFK state if moved beyond the deadzone
+            if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME)
+            {
+                gAgent.clearAFK();
+            }
+
+            setCameraNeedsUpdate(true);
+        }
+
+    //  //BD - Invertable Pitch Controls
+        if (!mInvertPitch)
+            cur_delta[RX_I] = -cur_delta[RX_I];
+
+        // forward|backward movements overrule the real dominant movement if
+        // they're bigger than its 20%. This is what you want 'cos moving forward
+        // is what you do most. We also added a special (even more lenient) case
+        // for RX|RY to allow walking while pitching and turning
+        if (fabs(cur_delta[Z_I]) > .2f * dom_mov
+            || ((dom_axis == RX_I || dom_axis == RY_I)
+            && fabs(cur_delta[Z_I]) > .05f * dom_mov))
+        {
+            dom_axis = Z_I;
+        }
+
+        sDelta[X_I] = -cur_delta[X_I];
+        sDelta[Y_I] = -cur_delta[Y_I];
+        sDelta[Z_I] = -cur_delta[Z_I];
+        cur_delta[RX_I] *= -mAvatarAxisScale[RX_I];
+        cur_delta[RY_I] *= -mAvatarAxisScale[RY_I];
+
+        sDelta[RX_I] += (cur_delta[RX_I] - sDelta[RX_I]) * time * mAvatarFeathering;
+        sDelta[RY_I] += (cur_delta[RY_I] - sDelta[RY_I]) * time * mAvatarFeathering;
+
+        handleRun((F32) sqrt(sDelta[Z_I]*sDelta[Z_I] + sDelta[X_I]*sDelta[X_I]));
+
+    //  //BD - Xbox360 Controller Support
+        //     Use raw deltas, do not add any stupid limitations or extra dead zones
+        //     otherwise alot controllers will cry and camera movement will bug out
+        //     or be completely ignored on some controllers. Especially fixes Xbox 360
+        //     controller avatar movement.
+        agentSlide(sDelta[X_I]);        // move sideways
+        agentFly(sDelta[Y_I]);          // up/down & crouch
+        agentPush(sDelta[Z_I]);         // forward/back
+        agentPitch(sDelta[RX_I]);       // pitch
+        agentYaw(sDelta[RY_I]);         // turn
+    }
+    else
+    {
+        bool is_zero = true;
+        static bool button_held = false;
+
+        if (mBtn[1] == 1)
+        {
+            // If AutomaticFly is enabled, then button1 merely causes a
+            // jump (as the up/down axis already controls flying) if on the
+            // ground, or cease flight if already flying.
+            // If AutomaticFly is disabled, then button1 toggles flying.
+            if (ALControlCache::AutomaticFly)
+            {
+                if (!gAgent.getFlying())
+                {
+                    gAgent.moveUp(1);
+                }
+                else if (!button_held)
+                {
+                    button_held = true;
+                    gAgent.setFlying(FALSE);
+                }
+            }
+            else if (!button_held)
+            {
+                button_held = true;
+                gAgent.setFlying(!gAgent.getFlying());
+            }
+
+            is_zero = false;
+        }
+        else
+        {
+            button_held = false;
+        }
+
+        // time interval in seconds between this frame and the previous
+        F32 time = gFrameIntervalSeconds.value();
+
+        // avoid making ridicously big movements if there's a big drop in fps
+        if (time > .2f)
+        {
+            time = .2f;
+        }
+
+        // note: max feather is 32.0
+        F32 feather = mAvatarFeathering;
+
+        F32 cur_delta[6];
+        F32 val, dom_mov = 0.f;
+        U32 dom_axis = Z_I;
+    #if LIB_NDOF
+        bool absolute = (m3DCursor && mNdofDev->absolute);
+    #else
+        bool absolute = false;
+    #endif
+        // remove dead zones and determine biggest movement on the joystick
+        for (U32 i = 0; i < 6; i++)
+        {
+            cur_delta[i] = -mAxes[mJoystickAxis[i]];
+
+            if (!mInvertPitch && i == 4)
+                cur_delta[i] = -cur_delta[i];
+
+            if (absolute)
+            {
+                F32 tmp = cur_delta[i];
+                cur_delta[i] = cur_delta[i] - sLastDelta[i];
+                sLastDelta[i] = tmp;
+            }
+
+            if (cur_delta[i] > 0)
+            {
+                cur_delta[i] = llmax(cur_delta[i]- mAvatarAxisDeadZone[i], 0.f);
+            }
+            else
+            {
+                cur_delta[i] = llmin(cur_delta[i]+ mAvatarAxisDeadZone[i], 0.f);
+            }
+
+            // we don't care about Roll (RZ) and Z is calculated after the loop
+            if (i != Z_I && i != RZ_I)
+            {
+                // find out the axis with the biggest joystick motion
+                val = fabs(cur_delta[i]);
+                if (val > dom_mov)
+                {
+                    dom_axis = i;
+                    dom_mov = val;
+                }
+            }
+
+            is_zero = is_zero && (cur_delta[i] == 0.f);
+        }
+
+        if (!is_zero)
+        {
+            // Clear AFK state if moved beyond the deadzone
+            if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME)
+            {
+                gAgent.clearAFK();
+            }
+
+            setCameraNeedsUpdate(true);
+        }
+
+        // forward|backward movements overrule the real dominant movement if
+        // they're bigger than its 20%. This is what you want 'cos moving forward
+        // is what you do most. We also added a special (even more lenient) case
+        // for RX|RY to allow walking while pitching and turning
+        if (fabs(cur_delta[Z_I]) > .2f * dom_mov
+            || ((dom_axis == RX_I || dom_axis == RY_I)
+            && fabs(cur_delta[Z_I]) > .05f * dom_mov))
+        {
+            dom_axis = Z_I;
+        }
+
+        sDelta[X_I] = -cur_delta[X_I] * mAvatarAxisScale[X_I];
+        sDelta[Y_I] = -cur_delta[Y_I] * mAvatarAxisScale[Y_I];
+        sDelta[Z_I] = -cur_delta[Z_I] * mAvatarAxisScale[Z_I];
+        cur_delta[RX_I] *= -mAvatarAxisScale[RX_I] * mPerfScale;
+        cur_delta[RY_I] *= -mAvatarAxisScale[RY_I] * mPerfScale;
+
+        if (!absolute)
+        {
+            cur_delta[RX_I] *= time;
+            cur_delta[RY_I] *= time;
+        }
+        sDelta[RX_I] += (cur_delta[RX_I] - sDelta[RX_I]) * time * feather;
+        sDelta[RY_I] += (cur_delta[RY_I] - sDelta[RY_I]) * time * feather;
+
+        handleRun((F32) sqrt(sDelta[Z_I]*sDelta[Z_I] + sDelta[X_I]*sDelta[X_I]));
+
+        // Allow forward/backward movement some priority
+        if (dom_axis == Z_I)
+        {
+            agentPush(sDelta[Z_I]);         // forward/back
+
+            if (fabs(sDelta[X_I])  > .1f)
+            {
+                agentSlide(sDelta[X_I]);    // move sideways
+            }
+
+            if (fabs(sDelta[Y_I])  > .1f)
+            {
+                agentFly(sDelta[Y_I]);      // up/down & crouch
+            }
+
+            // too many rotations during walking can be confusing, so apply
+            // the deadzones one more time (quick & dirty), at 50%|30% power
+            F32 eff_rx = .3f * mAvatarAxisDeadZone[RX_I];
+            F32 eff_ry = .3f * mAvatarAxisDeadZone[RY_I];
+
+            if (sDelta[RX_I] > 0)
+            {
+                eff_rx = llmax(sDelta[RX_I] - eff_rx, 0.f);
+            }
+            else
+            {
+                eff_rx = llmin(sDelta[RX_I] + eff_rx, 0.f);
+            }
+
+            if (sDelta[RY_I] > 0)
+            {
+                eff_ry = llmax(sDelta[RY_I] - eff_ry, 0.f);
+            }
+            else
+            {
+                eff_ry = llmin(sDelta[RY_I] + eff_ry, 0.f);
+            }
+
+
+            if (fabs(eff_rx) > 0.f || fabs(eff_ry) > 0.f)
+            {
+                if (gAgent.getFlying())
+                {
+                    agentPitch(eff_rx);
+                    agentYaw(eff_ry);
+                }
+                else
+                {
+                    agentPitch(eff_rx);
+                    agentYaw(2.f * eff_ry);
+                }
+            }
+        }
+        else
+        {
+            agentSlide(sDelta[X_I]);        // move sideways
+            agentFly(sDelta[Y_I]);          // up/down & crouch
+            agentPush(sDelta[Z_I]);         // forward/back
+            agentPitch(sDelta[RX_I]);       // pitch
+            agentYaw(sDelta[RY_I]);         // turn
+        }
+    }
 }
 
 // -----------------------------------------------------------------------------
@@ -1548,37 +1548,37 @@ void LLViewerJoystick::moveFlycam(bool reset)
 
     static LLCachedControl<bool> blackdragon(gSavedSettings, "BlackDragonControls", false);
     if (blackdragon)
-	{
-		F32 time = gFrameIntervalSeconds.value();
-
-		//BD - Avoid making ridiculously big movements if there's a big drop in fps 
-		time = llclamp(time, 0.016f, 0.033f);
-
-		F32 flycam_feather = mFlycamFeathering;
-		F32 cur_delta[MAX_AXES];
-		F32 max_angle = LLViewerCamera::getInstance()->getMaxView();
-		F32 min_angle = LLViewerCamera::getInstance()->getMinView();
-
-		//BD - Slam zoom back to default and kill any delta we might have.
-		if (getJoystickButton(mMappedButtons[ZOOM_DEFAULT]) == 1)
-		{
-			sFlycamZoom = gSavedSettings.getF32("CameraAngle");
-			sDelta[CAM_W_AXIS] = 0.0f;
-		}
-
-		//BD - Only smooth flycam zoom if we are not capping at the min/max otherwise the feathering
-		//     ends up working against previous input, delaying zoom in movement when we just zoomed
-		//     out beyond capped max for a bit and vise versa.
-		if ((sFlycamZoom <= min_angle
-			|| sFlycamZoom >= max_angle))
-		{
-			flycam_feather = 3.0f;
-		}
-
-		bool is_zero = true;
-		for (U32 i = 0; i < 7; i++)
-		{
-			cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]);
+    {
+        F32 time = gFrameIntervalSeconds.value();
+
+        //BD - Avoid making ridiculously big movements if there's a big drop in fps
+        time = llclamp(time, 0.016f, 0.033f);
+
+        F32 flycam_feather = mFlycamFeathering;
+        F32 cur_delta[MAX_AXES];
+        F32 max_angle = LLViewerCamera::getInstance()->getMaxView();
+        F32 min_angle = LLViewerCamera::getInstance()->getMinView();
+
+        //BD - Slam zoom back to default and kill any delta we might have.
+        if (getJoystickButton(mMappedButtons[ZOOM_DEFAULT]) == 1)
+        {
+            sFlycamZoom = gSavedSettings.getF32("CameraAngle");
+            sDelta[CAM_W_AXIS] = 0.0f;
+        }
+
+        //BD - Only smooth flycam zoom if we are not capping at the min/max otherwise the feathering
+        //     ends up working against previous input, delaying zoom in movement when we just zoomed
+        //     out beyond capped max for a bit and vise versa.
+        if ((sFlycamZoom <= min_angle
+            || sFlycamZoom >= max_angle))
+        {
+            flycam_feather = 3.0f;
+        }
+
+        bool is_zero = true;
+        for (U32 i = 0; i < 7; i++)
+        {
+            cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]);
 
             if (i == CAM_W_AXIS)
             {
@@ -1596,198 +1596,198 @@ void LLViewerJoystick::moveFlycam(bool reset)
                 cur_delta[i] += (F32)getJoystickButton(mMappedButtons[ROLL_RIGHT]);
             }
 
-			F32 tmp = cur_delta[i];
-			F32 axis_deadzone = mFlycamAxisDeadZone[i];
-			if (m3DCursor || llabs(cur_delta[i]) < axis_deadzone)
-			{
-				cur_delta[i] = cur_delta[i] - sLastDelta[i];
-			}
-			sLastDelta[i] = tmp;
-
-			//BD - We assume that delta 1.0 is the maximum.
-			if (llabs(cur_delta[i]) > axis_deadzone)
-			{
-				//BD - Clamp the delta between 1 and -1 while taking the deadzone into account.
-				if (cur_delta[i] > 0)
-				{
-					cur_delta[i] = llclamp(cur_delta[i] - axis_deadzone, 0.f, 1.f - axis_deadzone);
-				}
-				else
-				{
-					cur_delta[i] = llclamp(cur_delta[i] + axis_deadzone, -1.f + axis_deadzone, 0.f);
-				}
-				//BD - Rescale the remaining delta to match the maximum to get a new clean 0 to 1 range.
-				cur_delta[i] = cur_delta[i] / (1.f - axis_deadzone);
-			}
-
-			// We may want to scale camera movements up or down in build mode.
-			// NOTE: this needs to remain after the deadzone calculation, otherwise
-			// we have issues with flycam "jumping" when the build dialog is opened/closed  -Nyx
-			if (LLToolMgr::getInstance()->inBuildMode())
-			{
-				if (i == X_I || i == Y_I || i == Z_I)
-				{
-					cur_delta[i] *= build_mode_scale;
-				}
-			}
-
-			cur_delta[i] *= mFlycamAxisScale[i];
-
-			if (!m3DCursor)
-			{
-				cur_delta[i] *= time;
-			}
-
-			sDelta[i] = sDelta[i] + (cur_delta[i] - sDelta[i]) * time * flycam_feather;
-			is_zero = is_zero && (cur_delta[i] == 0.f);
-		}
-
-	//	//BD - Invertable Pitch Controls
-		if (mInvertPitch)
-			cur_delta[CAM_Y_AXIS] = -cur_delta[CAM_Y_AXIS];
-	
-		// Clear AFK state if moved beyond the deadzone
-		if (!is_zero && gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME)
-		{
-			gAgent.clearAFK();
-		}
-
-		sFlycamPosition += LLVector3(sDelta.data()) * sFlycamRotation;
-		LLMatrix3 rot_mat(sDelta[CAM_X_AXIS], sDelta[CAM_Y_AXIS], sDelta[CAM_Z_AXIS]);
-		sFlycamRotation = LLQuaternion(rot_mat)*sFlycamRotation;
-
-		if (mAutoLeveling || getJoystickButton(mMappedButtons[ROLL_DEFAULT]) == 1)
-		{
-			LLMatrix3 level(sFlycamRotation);
-
-			LLVector3 x = LLVector3(level.mMatrix[0]);
-			LLVector3 y = LLVector3(level.mMatrix[1]);
-			LLVector3 z = LLVector3(level.mMatrix[2]);
-
-			y.mV[2] = 0.f;
-			y.normVec();
-
-			level.setRows(x,y,z);
-			level.orthogonalize();
-				
-			LLQuaternion quat(level);
-			LLQuaternion lerp = nlerp(llmin(flycam_feather * time, 1.f), sFlycamRotation, quat);
-			sFlycamRotation = getJoystickButton(mMappedButtons[ROLL_DEFAULT]) == 1 ? quat : lerp;
-		}
-
-		if (mZoomDirect)
-		{
-			sFlycamZoom = sLastDelta[CAM_W_AXIS] * mFlycamAxisScale[FLYCAM_AXIS_6] + mFlycamAxisScale[FLYCAM_AXIS_6];
-		}
-		else
-		{
-			//BD - We need to cap zoom otherwise it internally counts higher causing
-			//     the zoom level to not react until that extra has been removed first.
-			sFlycamZoom = llclamp(sFlycamZoom + sDelta[CAM_W_AXIS], LLViewerCamera::getInstance()->getMinView(), LLViewerCamera::getInstance()->getMaxView());
-		}
-	}
-	else
-	{
-	    F32 time = gFrameIntervalSeconds.value();
-
-	    // avoid making ridiculously big movements if there's a big drop in fps
-	    if (time > .2f)
-	    {
-	        time = .2f;
-	    }
-
-	    F32 cur_delta[7];
-	    F32 feather = mFlycamFeathering;
-	    bool absolute = m3DCursor;
-	    bool is_zero = true;
-
-	    for (U32 i = 0; i < 7; i++)
-	    {
-	        cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]);
-
-	        if (!mInvertPitch && i == 4)
-	            cur_delta[i] = -cur_delta[i];
-
-	        F32 tmp = cur_delta[i];
-	        if (absolute)
-	        {
-	            cur_delta[i] = cur_delta[i] - sLastDelta[i];
-	        }
-	        sLastDelta[i] = tmp;
-
-	        if (cur_delta[i] > 0)
-	        {
-	            cur_delta[i] = llmax(cur_delta[i]- mFlycamAxisDeadZone[i], 0.f);
-	        }
-	        else
-	        {
-	            cur_delta[i] = llmin(cur_delta[i]+ mFlycamAxisDeadZone[i], 0.f);
-	        }
-
-	        // We may want to scale camera movements up or down in build mode.
-	        // NOTE: this needs to remain after the deadzone calculation, otherwise
-	        // we have issues with flycam "jumping" when the build dialog is opened/closed  -Nyx
-	        if (in_build_mode)
-	        {
-	            if (i == X_I || i == Y_I || i == Z_I)
-	            {
-	                cur_delta[i] *= build_mode_scale;
-	            }
-	        }
-
-	        cur_delta[i] *= mFlycamAxisScale[i];
-
-	        if (!absolute)
-	        {
-	            cur_delta[i] *= time;
-	        }
-
-	        sDelta[i] = sDelta[i] + (cur_delta[i]-sDelta[i])*time*feather;
-
-	        is_zero = is_zero && (cur_delta[i] == 0.f);
-
-	    }
-
-	    // Clear AFK state if moved beyond the deadzone
-	    if (!is_zero && gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME)
-	    {
-	        gAgent.clearAFK();
-	    }
-
-	    sFlycamPosition += LLVector3(sDelta.data()) * sFlycamRotation;
-
-	    LLMatrix3 rot_mat(sDelta[3], sDelta[4], sDelta[5]);
-	    sFlycamRotation = LLQuaternion(rot_mat)*sFlycamRotation;
-
-	    if (mAutoLeveling)
-	    {
-	        LLMatrix3 level(sFlycamRotation);
-
-	        LLVector3 x = LLVector3(level.mMatrix[0]);
-	        LLVector3 y = LLVector3(level.mMatrix[1]);
-	        LLVector3 z = LLVector3(level.mMatrix[2]);
-
-	        y.mV[2] = 0.f;
-	        y.normVec();
-
-	        level.setRows(x,y,z);
-	        level.orthogonalize();
-
-	        LLQuaternion quat(level);
-	        sFlycamRotation = nlerp(llmin(feather*time,1.f), sFlycamRotation, quat);
-	    }
-
-	    if (mZoomDirect)
-	    {
-	        sFlycamZoom = sLastDelta[6]* mFlycamAxisScale[6]+ mFlycamAxisDeadZone[6];
-	    }
-	    else
-	    {
-	        //BD - We need to cap zoom otherwise it internally counts higher causing
-	        //     the zoom level to not react until that extra has been removed first.
-	        sFlycamZoom = llclamp(sFlycamZoom + sDelta[6], LLViewerCamera::getInstance()->getMinView(), LLViewerCamera::getInstance()->getMaxView());
-	    }
-	}
+            F32 tmp = cur_delta[i];
+            F32 axis_deadzone = mFlycamAxisDeadZone[i];
+            if (m3DCursor || llabs(cur_delta[i]) < axis_deadzone)
+            {
+                cur_delta[i] = cur_delta[i] - sLastDelta[i];
+            }
+            sLastDelta[i] = tmp;
+
+            //BD - We assume that delta 1.0 is the maximum.
+            if (llabs(cur_delta[i]) > axis_deadzone)
+            {
+                //BD - Clamp the delta between 1 and -1 while taking the deadzone into account.
+                if (cur_delta[i] > 0)
+                {
+                    cur_delta[i] = llclamp(cur_delta[i] - axis_deadzone, 0.f, 1.f - axis_deadzone);
+                }
+                else
+                {
+                    cur_delta[i] = llclamp(cur_delta[i] + axis_deadzone, -1.f + axis_deadzone, 0.f);
+                }
+                //BD - Rescale the remaining delta to match the maximum to get a new clean 0 to 1 range.
+                cur_delta[i] = cur_delta[i] / (1.f - axis_deadzone);
+            }
+
+            // We may want to scale camera movements up or down in build mode.
+            // NOTE: this needs to remain after the deadzone calculation, otherwise
+            // we have issues with flycam "jumping" when the build dialog is opened/closed  -Nyx
+            if (LLToolMgr::getInstance()->inBuildMode())
+            {
+                if (i == X_I || i == Y_I || i == Z_I)
+                {
+                    cur_delta[i] *= build_mode_scale;
+                }
+            }
+
+            cur_delta[i] *= mFlycamAxisScale[i];
+
+            if (!m3DCursor)
+            {
+                cur_delta[i] *= time;
+            }
+
+            sDelta[i] = sDelta[i] + (cur_delta[i] - sDelta[i]) * time * flycam_feather;
+            is_zero = is_zero && (cur_delta[i] == 0.f);
+        }
+
+    //  //BD - Invertable Pitch Controls
+        if (mInvertPitch)
+            cur_delta[CAM_Y_AXIS] = -cur_delta[CAM_Y_AXIS];
+
+        // Clear AFK state if moved beyond the deadzone
+        if (!is_zero && gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME)
+        {
+            gAgent.clearAFK();
+        }
+
+        sFlycamPosition += LLVector3(sDelta.data()) * sFlycamRotation;
+        LLMatrix3 rot_mat(sDelta[CAM_X_AXIS], sDelta[CAM_Y_AXIS], sDelta[CAM_Z_AXIS]);
+        sFlycamRotation = LLQuaternion(rot_mat)*sFlycamRotation;
+
+        if (mAutoLeveling || getJoystickButton(mMappedButtons[ROLL_DEFAULT]) == 1)
+        {
+            LLMatrix3 level(sFlycamRotation);
+
+            LLVector3 x = LLVector3(level.mMatrix[0]);
+            LLVector3 y = LLVector3(level.mMatrix[1]);
+            LLVector3 z = LLVector3(level.mMatrix[2]);
+
+            y.mV[2] = 0.f;
+            y.normVec();
+
+            level.setRows(x,y,z);
+            level.orthogonalize();
+
+            LLQuaternion quat(level);
+            LLQuaternion lerp = nlerp(llmin(flycam_feather * time, 1.f), sFlycamRotation, quat);
+            sFlycamRotation = getJoystickButton(mMappedButtons[ROLL_DEFAULT]) == 1 ? quat : lerp;
+        }
+
+        if (mZoomDirect)
+        {
+            sFlycamZoom = sLastDelta[CAM_W_AXIS] * mFlycamAxisScale[FLYCAM_AXIS_6] + mFlycamAxisScale[FLYCAM_AXIS_6];
+        }
+        else
+        {
+            //BD - We need to cap zoom otherwise it internally counts higher causing
+            //     the zoom level to not react until that extra has been removed first.
+            sFlycamZoom = llclamp(sFlycamZoom + sDelta[CAM_W_AXIS], LLViewerCamera::getInstance()->getMinView(), LLViewerCamera::getInstance()->getMaxView());
+        }
+    }
+    else
+    {
+        F32 time = gFrameIntervalSeconds.value();
+
+        // avoid making ridiculously big movements if there's a big drop in fps
+        if (time > .2f)
+        {
+            time = .2f;
+        }
+
+        F32 cur_delta[7];
+        F32 feather = mFlycamFeathering;
+        bool absolute = m3DCursor;
+        bool is_zero = true;
+
+        for (U32 i = 0; i < 7; i++)
+        {
+            cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]);
+
+            if (!mInvertPitch && i == 4)
+                cur_delta[i] = -cur_delta[i];
+
+            F32 tmp = cur_delta[i];
+            if (absolute)
+            {
+                cur_delta[i] = cur_delta[i] - sLastDelta[i];
+            }
+            sLastDelta[i] = tmp;
+
+            if (cur_delta[i] > 0)
+            {
+                cur_delta[i] = llmax(cur_delta[i]- mFlycamAxisDeadZone[i], 0.f);
+            }
+            else
+            {
+                cur_delta[i] = llmin(cur_delta[i]+ mFlycamAxisDeadZone[i], 0.f);
+            }
+
+            // We may want to scale camera movements up or down in build mode.
+            // NOTE: this needs to remain after the deadzone calculation, otherwise
+            // we have issues with flycam "jumping" when the build dialog is opened/closed  -Nyx
+            if (in_build_mode)
+            {
+                if (i == X_I || i == Y_I || i == Z_I)
+                {
+                    cur_delta[i] *= build_mode_scale;
+                }
+            }
+
+            cur_delta[i] *= mFlycamAxisScale[i];
+
+            if (!absolute)
+            {
+                cur_delta[i] *= time;
+            }
+
+            sDelta[i] = sDelta[i] + (cur_delta[i]-sDelta[i])*time*feather;
+
+            is_zero = is_zero && (cur_delta[i] == 0.f);
+
+        }
+
+        // Clear AFK state if moved beyond the deadzone
+        if (!is_zero && gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME)
+        {
+            gAgent.clearAFK();
+        }
+
+        sFlycamPosition += LLVector3(sDelta.data()) * sFlycamRotation;
+
+        LLMatrix3 rot_mat(sDelta[3], sDelta[4], sDelta[5]);
+        sFlycamRotation = LLQuaternion(rot_mat)*sFlycamRotation;
+
+        if (mAutoLeveling)
+        {
+            LLMatrix3 level(sFlycamRotation);
+
+            LLVector3 x = LLVector3(level.mMatrix[0]);
+            LLVector3 y = LLVector3(level.mMatrix[1]);
+            LLVector3 z = LLVector3(level.mMatrix[2]);
+
+            y.mV[2] = 0.f;
+            y.normVec();
+
+            level.setRows(x,y,z);
+            level.orthogonalize();
+
+            LLQuaternion quat(level);
+            sFlycamRotation = nlerp(llmin(feather*time,1.f), sFlycamRotation, quat);
+        }
+
+        if (mZoomDirect)
+        {
+            sFlycamZoom = sLastDelta[6]* mFlycamAxisScale[6]+ mFlycamAxisDeadZone[6];
+        }
+        else
+        {
+            //BD - We need to cap zoom otherwise it internally counts higher causing
+            //     the zoom level to not react until that extra has been removed first.
+            sFlycamZoom = llclamp(sFlycamZoom + sDelta[6], LLViewerCamera::getInstance()->getMinView(), LLViewerCamera::getInstance()->getMaxView());
+        }
+    }
 
     LLMatrix3 mat(sFlycamRotation);
 
@@ -1858,33 +1858,33 @@ void LLViewerJoystick::scanJoystick()
 
     static LLCachedControl<bool> blackdragon(gSavedSettings, "BlackDragonControls", false);
     if (blackdragon)
-	{
-		if (getJoystickButton(mMappedButtons[FLYCAM]) == 1)
-		{
-			if (getJoystickButton(mMappedButtons[FLYCAM]) != toggle_flycam)
-			{
-				toggle_flycam = toggleFlycam() ? 1 : 0;
-			}
-		}
-		else
-		{
-			toggle_flycam = 0;
-		}
-	}
-	else
-	{
-	    if (mBtn[0] == 1)
-	    {
-	        if (mBtn[0] != toggle_flycam)
-	        {
-	            toggle_flycam = toggleFlycam() ? 1 : 0;
-	        }
-	    }
-	    else
-	    {
-	        toggle_flycam = 0;
-	    }
-	}
+    {
+        if (getJoystickButton(mMappedButtons[FLYCAM]) == 1)
+        {
+            if (getJoystickButton(mMappedButtons[FLYCAM]) != toggle_flycam)
+            {
+                toggle_flycam = toggleFlycam() ? 1 : 0;
+            }
+        }
+        else
+        {
+            toggle_flycam = 0;
+        }
+    }
+    else
+    {
+        if (mBtn[0] == 1)
+        {
+            if (mBtn[0] != toggle_flycam)
+            {
+                toggle_flycam = toggleFlycam() ? 1 : 0;
+            }
+        }
+        else
+        {
+            toggle_flycam = 0;
+        }
+    }
 
     if (!mOverrideCamera && !(LLToolMgr::getInstance()->inBuildMode() && mBuildEnabled))
     {
@@ -2056,19 +2056,19 @@ void LLViewerJoystick::setSNDefaults()
     gSavedSettings.setS32("JoystickAxis5", 5); // yaw
     gSavedSettings.setS32("JoystickAxis6", -1);
 
-	gSavedSettings.setS32("JoystickButtonJump", -1);
-	gSavedSettings.setS32("JoystickButtonCrouch", -1);
-	gSavedSettings.setS32("JoystickButtonFly", -1);
-	gSavedSettings.setS32("JoystickButtonRunToggle", -1);
-	gSavedSettings.setS32("JoystickButtonMouselook", -1);
-	gSavedSettings.setS32("JoystickButtonZoomDefault", -1);
-	gSavedSettings.setS32("JoystickButtonFlycam", 0);
-	gSavedSettings.setS32("JoystickButtonZoomOut", -1);
-	gSavedSettings.setS32("JoystickButtonZoomIn", -1);
-	gSavedSettings.setS32("JoystickButtonRollLeft", -1);
-	gSavedSettings.setS32("JoystickButtonRollRight", -1);
-	gSavedSettings.setS32("JoystickButtonRollDefault", -1);
-	
+    gSavedSettings.setS32("JoystickButtonJump", -1);
+    gSavedSettings.setS32("JoystickButtonCrouch", -1);
+    gSavedSettings.setS32("JoystickButtonFly", -1);
+    gSavedSettings.setS32("JoystickButtonRunToggle", -1);
+    gSavedSettings.setS32("JoystickButtonMouselook", -1);
+    gSavedSettings.setS32("JoystickButtonZoomDefault", -1);
+    gSavedSettings.setS32("JoystickButtonFlycam", 0);
+    gSavedSettings.setS32("JoystickButtonZoomOut", -1);
+    gSavedSettings.setS32("JoystickButtonZoomIn", -1);
+    gSavedSettings.setS32("JoystickButtonRollLeft", -1);
+    gSavedSettings.setS32("JoystickButtonRollRight", -1);
+    gSavedSettings.setS32("JoystickButtonRollDefault", -1);
+
     gSavedSettings.setBOOL("Cursor3D", is_3d_cursor);
     gSavedSettings.setBOOL("AutoLeveling", true);
     gSavedSettings.setBOOL("ZoomDirect", false);
@@ -2133,19 +2133,19 @@ void LLViewerJoystick::setXboxDefaults()
     gSavedSettings.setS32("JoystickAxis5", 3);  // Yaw
     gSavedSettings.setS32("JoystickAxis6", -1); // Zoom
 
-	gSavedSettings.setS32("JoystickButtonJump", 0);
-	gSavedSettings.setS32("JoystickButtonCrouch", 1);
-	gSavedSettings.setS32("JoystickButtonFly", 2);
-	gSavedSettings.setS32("JoystickButtonRunToggle", 8);
-	gSavedSettings.setS32("JoystickButtonMouselook", 9);
-	gSavedSettings.setS32("JoystickButtonZoomDefault", 6);
-	gSavedSettings.setS32("JoystickButtonFlycam", 7);
-	gSavedSettings.setS32("JoystickButtonZoomOut", 5);
-	gSavedSettings.setS32("JoystickButtonZoomIn", 4);
-	gSavedSettings.setS32("JoystickButtonRollLeft", -1);
-	gSavedSettings.setS32("JoystickButtonRollRight", -1);
-	gSavedSettings.setS32("JoystickButtonRollDefault", -1);
-	
+    gSavedSettings.setS32("JoystickButtonJump", 0);
+    gSavedSettings.setS32("JoystickButtonCrouch", 1);
+    gSavedSettings.setS32("JoystickButtonFly", 2);
+    gSavedSettings.setS32("JoystickButtonRunToggle", 8);
+    gSavedSettings.setS32("JoystickButtonMouselook", 9);
+    gSavedSettings.setS32("JoystickButtonZoomDefault", 6);
+    gSavedSettings.setS32("JoystickButtonFlycam", 7);
+    gSavedSettings.setS32("JoystickButtonZoomOut", 5);
+    gSavedSettings.setS32("JoystickButtonZoomIn", 4);
+    gSavedSettings.setS32("JoystickButtonRollLeft", -1);
+    gSavedSettings.setS32("JoystickButtonRollRight", -1);
+    gSavedSettings.setS32("JoystickButtonRollDefault", -1);
+
     gSavedSettings.setBOOL("Cursor3D", false); // Xbox Gamepad, not 3D Mouse
     gSavedSettings.setBOOL("AutoLeveling", false);
     gSavedSettings.setBOOL("ZoomDirect", false);
diff --git a/indra/newview/llviewerjoystick.h b/indra/newview/llviewerjoystick.h
index 19e544f7da754ebb294125ad8867098aadc22ef8..43338e9be30747c7e2ab1e690ccb78bd306d78db 100644
--- a/indra/newview/llviewerjoystick.h
+++ b/indra/newview/llviewerjoystick.h
@@ -48,62 +48,62 @@ typedef enum e_joystick_driver_state
 
 typedef enum E_Buttons
 {
-	ROLL_LEFT = 0,
-	ROLL_RIGHT,
-	ROLL_DEFAULT ,
-	ZOOM_IN,
-	ZOOM_OUT,
-	ZOOM_DEFAULT,
-	JUMP,
-	CROUCH,
-	FLY,
-	MOUSELOOK,
-	FLYCAM,
-	TOGGLE_RUN,
-	MAX_BUTTONS
+    ROLL_LEFT = 0,
+    ROLL_RIGHT,
+    ROLL_DEFAULT ,
+    ZOOM_IN,
+    ZOOM_OUT,
+    ZOOM_DEFAULT,
+    JUMP,
+    CROUCH,
+    FLY,
+    MOUSELOOK,
+    FLYCAM,
+    TOGGLE_RUN,
+    MAX_BUTTONS
 } E_buttons;
 
 typedef enum E_Axes
 {
-	X_AXIS = 0,
-	Y_AXIS = 1,
-	Z_AXIS = 2,
-	CAM_X_AXIS = 3,
-	CAM_Y_AXIS = 4,
-	CAM_Z_AXIS = 5,
-	CAM_W_AXIS = 6,
-	MAX_AXES = 7
+    X_AXIS = 0,
+    Y_AXIS = 1,
+    Z_AXIS = 2,
+    CAM_X_AXIS = 3,
+    CAM_Y_AXIS = 4,
+    CAM_Z_AXIS = 5,
+    CAM_W_AXIS = 6,
+    MAX_AXES = 7
 } E_Axes;
 
 typedef enum E_AVScalings
 {
-	AV_AXIS_0 = 0,
-	AV_AXIS_1,
-	AV_AXIS_2,
-	AV_AXIS_3,
-	AV_AXIS_4,
-	AV_AXIS_5,
+    AV_AXIS_0 = 0,
+    AV_AXIS_1,
+    AV_AXIS_2,
+    AV_AXIS_3,
+    AV_AXIS_4,
+    AV_AXIS_5,
 } E_AVScalings;
 
 typedef enum E_BuildScalings
 {
-	BUILD_AXIS_0 = 0,
-	BUILD_AXIS_1,
-	BUILD_AXIS_2,
-	BUILD_AXIS_3,
-	BUILD_AXIS_4,
-	BUILD_AXIS_5,
+    BUILD_AXIS_0 = 0,
+    BUILD_AXIS_1,
+    BUILD_AXIS_2,
+    BUILD_AXIS_3,
+    BUILD_AXIS_4,
+    BUILD_AXIS_5,
 } E_BuildScalings;
 
 typedef enum E_FlycamScalings
 {
-	FLYCAM_AXIS_0 = 0,
-	FLYCAM_AXIS_1,
-	FLYCAM_AXIS_2,
-	FLYCAM_AXIS_3,
-	FLYCAM_AXIS_4,
-	FLYCAM_AXIS_5,
-	FLYCAM_AXIS_6,
+    FLYCAM_AXIS_0 = 0,
+    FLYCAM_AXIS_1,
+    FLYCAM_AXIS_2,
+    FLYCAM_AXIS_3,
+    FLYCAM_AXIS_4,
+    FLYCAM_AXIS_5,
+    FLYCAM_AXIS_6,
 } E_FlycamScalings;
 
 
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index a79377d2053530b387c2aa37f56e59ac4e69389c..d1fb13e78428f7976af85237a101753228f0f130 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -3895,7 +3895,7 @@ void handle_avatar_eject(const LLSD& avatar_id)
 
 bool my_profile_visible()
 {
-    LLFloater* floaterp = LLAvatarActions::findProfileFloater(gAgentID);
+    LLFloater* floaterp = LLAvatarActions::getProfileFloater(gAgentID);
     return floaterp && floaterp->isInVisibleChain();
 }
 
@@ -6720,7 +6720,7 @@ class LLAvatarToggleMyProfile : public view_listener_t
 {
     bool handleEvent(const LLSD& userdata)
     {
-        LLFloater* instance = LLAvatarActions::findProfileFloater(gAgent.getID());
+        LLFloater* instance = LLAvatarActions::getProfileFloater(gAgent.getID());
         if (LLFloater::isMinimized(instance))
         {
             instance->setMinimized(FALSE);
@@ -6746,7 +6746,7 @@ class LLAvatarTogglePicks : public view_listener_t
 {
     bool handleEvent(const LLSD& userdata)
     {
-        LLFloater * instance = LLAvatarActions::findProfileFloater(gAgent.getID());
+        LLFloater * instance = LLAvatarActions::getProfileFloater(gAgent.getID());
         if (LLFloater::isMinimized(instance) || (instance && !instance->hasFocus() && !instance->getIsChrome()))
         {
             instance->setMinimized(FALSE);
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 55073d0f71fd6aa55c01cfaab7b766505c10bdcf..312398e54a7c90deff6ddab702a48624675ed24f 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -2022,7 +2022,7 @@ void LLPipeline::updateMovedList(LLDrawable::drawable_vector_t& moved_list)
 {
     LL_PROFILE_ZONE_SCOPED;
     LLDrawable::drawable_vector_t newList; // removing elements in the middle of a vector is a really bad idea. I'll just create a new one and swap it at the end.
-	
+
     for (LLDrawable::drawable_vector_t::iterator iter = moved_list.begin();
          iter != moved_list.end(); )
     {
diff --git a/indra/newview/skins/alchemy/colors.xml b/indra/newview/skins/alchemy/colors.xml
index fd72faa3f24bde3049adec7f70f701ab56dce829..ac16fb8113a959ea9f16f43749ef701ca0596209 100644
--- a/indra/newview/skins/alchemy/colors.xml
+++ b/indra/newview/skins/alchemy/colors.xml
@@ -1139,9 +1139,6 @@
   <color
    name="StatBarMeanBarColor"
    reference="Red_80" />
-  <color
-   name="ProfileOnlineIndicatorColor"
-   reference="Green" />
   <color
    name="FriendChatColor"
    reference="White" />
diff --git a/indra/newview/skins/alchemy/skin_settings.xml b/indra/newview/skins/alchemy/skin_settings.xml
index 1f56287b50d1684ef534e7fe8e54126780c124c1..03ac8fb0eca54393fbbea459181a0de586e45e0e 100644
--- a/indra/newview/skins/alchemy/skin_settings.xml
+++ b/indra/newview/skins/alchemy/skin_settings.xml
@@ -1,20 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <llsd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="llsd.xsd">
 	<map>
-		<key>LegacyProfile</key>
-		<map>
-			<key>Comment</key>
-			<string>Use Legacy Profiles rather than standard</string>
-			<key>Persist</key>
-			<integer>0</integer>
-			<key>HideFromEditor</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<boolean>0</boolean>
-		</map>
 		<key>LegacyNotificationWell</key>
 		<map>
 			<key>Comment</key>
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index c93686df3d9614c09e2718798c353f3f0ac2856a..db03b869897bc89ec65ff828e3d71b3ca9d17f1e 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -1039,11 +1039,7 @@
       name="PanelNotificationListItem"
       value="0.3 0.3 0.3 .3" />
 
-	<color
-	 name="ProfileOnlineIndicatorColor"
-	 reference="Green" />
-
-	<!-- dildo profiles -->
+	<!-- profiles -->
     <color
         name="StatusUserOnline"
         reference="White" />
diff --git a/indra/newview/skins/default/skin_settings.xml b/indra/newview/skins/default/skin_settings.xml
index 1f56287b50d1684ef534e7fe8e54126780c124c1..03ac8fb0eca54393fbbea459181a0de586e45e0e 100644
--- a/indra/newview/skins/default/skin_settings.xml
+++ b/indra/newview/skins/default/skin_settings.xml
@@ -1,20 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <llsd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="llsd.xsd">
 	<map>
-		<key>LegacyProfile</key>
-		<map>
-			<key>Comment</key>
-			<string>Use Legacy Profiles rather than standard</string>
-			<key>Persist</key>
-			<integer>0</integer>
-			<key>HideFromEditor</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<boolean>0</boolean>
-		</map>
 		<key>LegacyNotificationWell</key>
 		<map>
 			<key>Comment</key>
diff --git a/indra/newview/skins/default/textures/icon_legacy_event.tga b/indra/newview/skins/default/textures/icon_legacy_event.tga
new file mode 100644
index 0000000000000000000000000000000000000000..7805dbce60eb7c58bb99826157ed222813c27419
Binary files /dev/null and b/indra/newview/skins/default/textures/icon_legacy_event.tga differ
diff --git a/indra/newview/skins/default/textures/icon_legacy_event_adult.tga b/indra/newview/skins/default/textures/icon_legacy_event_adult.tga
new file mode 100644
index 0000000000000000000000000000000000000000..c344fb1e78887afe2b20ac4830ffb057772416cd
Binary files /dev/null and b/indra/newview/skins/default/textures/icon_legacy_event_adult.tga differ
diff --git a/indra/newview/skins/default/textures/icon_legacy_event_mature.tga b/indra/newview/skins/default/textures/icon_legacy_event_mature.tga
new file mode 100644
index 0000000000000000000000000000000000000000..61c879bc923c7d1ee625a3995012a3ddecca363d
Binary files /dev/null and b/indra/newview/skins/default/textures/icon_legacy_event_mature.tga differ
diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_1.png b/indra/newview/skins/default/textures/icons/ProgressLarge_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff277fc431d6d5f8b13baeb47b478f321e00ab79
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/ProgressLarge_1.png differ
diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_10.png b/indra/newview/skins/default/textures/icons/ProgressLarge_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c94e21d89261478fdde301cf1309dcc3bbe3065
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/ProgressLarge_10.png differ
diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_11.png b/indra/newview/skins/default/textures/icons/ProgressLarge_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..89bea9b474bbbdb36be8e1024c00d226a22070f9
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/ProgressLarge_11.png differ
diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_12.png b/indra/newview/skins/default/textures/icons/ProgressLarge_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..da38475ba4dc61dfe4bff14a3175837f07d13fa3
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/ProgressLarge_12.png differ
diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_2.png b/indra/newview/skins/default/textures/icons/ProgressLarge_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..c024275ebef799760ab3ae4f1ef9377df066632e
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/ProgressLarge_2.png differ
diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_3.png b/indra/newview/skins/default/textures/icons/ProgressLarge_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..87b931e72e753c263fc0f07bddd2448ce123d8be
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/ProgressLarge_3.png differ
diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_4.png b/indra/newview/skins/default/textures/icons/ProgressLarge_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..6dbef74361edb829542a2809fb2a976f03008cac
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/ProgressLarge_4.png differ
diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_5.png b/indra/newview/skins/default/textures/icons/ProgressLarge_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..daccf9b375ffc677a02aa434bd0fc2514c1d614b
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/ProgressLarge_5.png differ
diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_6.png b/indra/newview/skins/default/textures/icons/ProgressLarge_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..cafddcb88dc21d60592ca403c46fd7fc0289adb9
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/ProgressLarge_6.png differ
diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_7.png b/indra/newview/skins/default/textures/icons/ProgressLarge_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..8acf6472d4d70d6fb758fa7321584c8bf7c6e621
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/ProgressLarge_7.png differ
diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_8.png b/indra/newview/skins/default/textures/icons/ProgressLarge_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..df0e825cef1f053d42c4fffca7efdd0e9f4969cf
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/ProgressLarge_8.png differ
diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_9.png b/indra/newview/skins/default/textures/icons/ProgressLarge_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..293a7b8f5c6c7983e2e46c56cb661a1994ad3249
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/ProgressLarge_9.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index ec2de431bae5834b7499e475bc302fe50cc515b4..c80f637a649b24200d318154bcd5306ddb58f0f2 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -990,4 +990,21 @@ with the same filename but different name
   <texture name="Right_Trigger" file_name="xbox/right_trigger.png" preload="false" />
   <texture name="Triggers" file_name="xbox/triggers.png" preload="false" />
   <texture name="None" file_name="xbox/none.png" preload="false" />
+  
+  <texture name="Icon_Legacy_Event_PG" file_name="icon_legacy_event.tga" preload="false" />
+  <texture name="Icon_Legacy_Event_Mature" file_name="icon_legacy_event_mature.tga" preload="false" />
+  <texture name="Icon_Legacy_Event_Adult" file_name="icon_legacy_event_adult.tga" preload="false" />
+
+  <texture name="ProgressLarge_1" file_name="icons/ProgressLarge_1.png" preload="true" />
+  <texture name="ProgressLarge_2" file_name="icons/ProgressLarge_2.png" preload="true" />
+  <texture name="ProgressLarge_3" file_name="icons/ProgressLarge_3.png" preload="true" />
+  <texture name="ProgressLarge_4" file_name="icons/ProgressLarge_4.png" preload="true" />
+  <texture name="ProgressLarge_5" file_name="icons/ProgressLarge_5.png" preload="true" />
+  <texture name="ProgressLarge_6" file_name="icons/ProgressLarge_6.png" preload="true" />
+  <texture name="ProgressLarge_7" file_name="icons/ProgressLarge_7.png" preload="true" />
+  <texture name="ProgressLarge_8" file_name="icons/ProgressLarge_8.png" preload="true" />
+  <texture name="ProgressLarge_9" file_name="icons/ProgressLarge_9.png" preload="true" />
+  <texture name="ProgressLarge_10" file_name="icons/ProgressLarge_10.png" preload="true" />
+  <texture name="ProgressLarge_11" file_name="icons/ProgressLarge_11.png" preload="true" />
+  <texture name="ProgressLarge_12" file_name="icons/ProgressLarge_12.png" preload="true" />
 </textures>
diff --git a/indra/newview/skins/default/xui/en/floater_directory.xml b/indra/newview/skins/default/xui/en/floater_directory.xml
deleted file mode 100644
index 3c6d0cb7fee1f17c5a061f15982c43aef2957e74..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_directory.xml
+++ /dev/null
@@ -1,291 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- single_instance="true"
- can_resize="true"
- height="590"
- min_height="135"
- min_width="430"
- layout="topleft"
- name="search"
- save_rect="true"
- title="SEARCH"
- width="602">
-  <floater.string
-   name="not_found">
-&apos;[TEXT]&apos; not found
-  </floater.string>
-  <floater.string
-   name="no_results">
-No results
-  </floater.string>
-  <floater.string
-   name="result_spillover">
-Over [TOTAL] results Showing [VISIBLE_BEGIN]/[VISIBLE_END]
-  </floater.string>
-  <floater.string
-   name="result_count">
-[TOTAL] results.
-  </floater.string>
-  <floater.string
-   name="searching">
-Searching...
-  </floater.string>
-  <floater.string
-   name="all_categories">
-All Categories
-  </floater.string>
-  <floater.string
-   name="search_banned">
-Some terms in your search query were excluded due to content restrictions as clarified in the Community Standards.
-  </floater.string>
-  <floater.string
-   name="search_short">
-Your search terms were too short so no search was performed.
-  </floater.string>
-  <floater.string
-   name="search_disabled">
-Directory search is disabled in this region.
-  </floater.string>
-  <floater.string
-   name="search_no_date_offset">
-Your search terms were missing the date offset.
-  </floater.string>
-  <floater.string
-   name="search_no_catgory">
-Your search terms were missing a category.
-  </floater.string>
-  <floater.string
-   name="search_no_query">
-Your search terms were missing a query string.
-  </floater.string>
-  <tab_container
-   border="true"
-   follows="all"
-   top="16"
-   left="0"
-   height="573"
-   width="602"
-   name="search_tabs"
-   tab_min_width="70"
-   tab_position="top">
-    <panel
-     border="false"
-     label="People"
-     filename="panel_search_people.xml"
-     class="panel_search_people"
-     name="panel_search_people"
-     follows="left|top|right"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-16" />
-    <panel
-     border="false"
-     label="Groups"
-     filename="panel_search_groups.xml"
-     class="panel_search_groups"
-     name="panel_search_groups"
-     follows="left|top|right"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-1" />
-    <panel
-     border="false"
-     label="Places"
-     filename="panel_search_places.xml"
-     class="panel_search_places"
-     name="panel_search_places"
-     follows="left|top|right"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-1" />
-    <panel
-     border="false"
-     label="Land"
-     filename="panel_search_landsales.xml"
-     class="panel_search_landsales"
-     name="panel_search_landsales"
-     follows="left|top|right"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-1" />
-    <panel
-     border="false"
-     label="Events"
-     filename="panel_search_events.xml"
-     class="panel_search_events"
-     name="panel_search_events"
-     follows="left|top|right"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-1" />
-    <panel
-     border="false"
-     label="Classifieds"
-     filename="panel_search_classifieds.xml"
-     class="panel_search_classifieds"
-     name="panel_search_classifieds"
-     follows="left|top|right"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-1" />
-    <panel
-     border="false"
-     label="AltaVista"
-     filename="panel_search_web.xml"
-     class="panel_search_web"
-     name="panel_search_web"
-     follows="all"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-1" />
-  </tab_container>
- <layout_stack
-  follows="all"
-  animate="false"
-  top="86"
-  height="480"
-  left="0"
-  right="-1"
-  drag_handle_gap="2"
-  drag_handle_first_indent="1"
-  drag_handle_second_indent="1"
-  layout="topleft"
-  name="results_stack"
-  orientation="horizontal"
-  show_drag_handle="true">
-   <layout_panel
-    border="true"
-    auto_resize="true"
-    user_resize="true"
-    layout="topleft"
-    top="0"
-    left="0"
-    width="300"
-    bottom="-1"
-    min_height="10"
-    name="results_lp">
-     <scroll_list
-      layout="topleft"
-      top="1"
-      left="2"
-      width="300"
-      bottom="-1"
-      column_padding="0"
-      draw_heading="true"
-      follows="left|right|top|bottom"
-      multi_select="true"
-      name="results"
-      search_column="0" />
-   </layout_panel>
-   <layout_panel
-    border="true"
-    auto_resize="true"
-    user_resize="true"
-    layout="topleft"
-    top="0"
-    bottom="-1"
-    left="405"
-    width="313"
-    min_height="10"
-    name="detail_lp">
-     <panel
-      follows="all"
-      name="detail_avatar"
-      top="0"
-      bottom="-1"
-      left="0"
-      width="313"
-      class="panel_profile_legacy_sidetray"
-      filename="panel_profile_legacy_sidetray.xml" />
-     <panel
-      follows="all"
-      name="detail_group"
-      top="0"
-      bottom="-1"
-      left="0"
-      width="313"
-      class="panel_group_info_sidetray"
-      filename="panel_group_info_sidetray.xml" />
-     <panel
-      follows="all"
-      name="detail_place"
-      top="0"
-      bottom="-1"
-      left="0"
-      width="313"
-      class="panel_places"
-      filename="panel_places.xml" />
-     <panel
-      follows="all"
-      name="detail_event"
-      top="0"
-      bottom="-1"
-      left="0"
-      width="313"
-      class="panel_event_info"
-     filename="panel_event_info.xml" />
-     <panel
-      follows="all"
-      name="detail_classified"
-      top="0"
-      bottom="-1"
-      left="0"
-      width="313"
-      class="panel_classified_info"
-      filename="panel_classified_info.xml" />
-   </layout_panel>
- </layout_stack>
- <text
-  follows="bottom|left"
-  height="16"
-  layout="topleft"
-  left="4"
-  name="results_status"
-  top_pad="3"
-  value="[TOTAL] results"
-  width="205" />
- <button
-  follows="bottom|left"
-  height="16"
-  width="16"
-  image_unselected="Arrow_Left"
-  image_disabled="Arrow_Left_Off"
-  image_disabled_selected="Arrow_Left_Off"
-  image_selected="Arrow_Left"
-  image_pressed="Arrow_Left"
-  image_top_pad="0"
-  layout="topleft"
-  left_pad="5"
-  name="PageDn"
-  top_delta="0" />
- <button
-  follows="bottom|left"
-  height="16"
-  width="16"
-  image_unselected="Arrow_Right"
-  image_disabled="Arrow_Right_Off"
-  image_disabled_selected="Arrow_Right_Off"
-  image_selected="Arrow_Right"
-  image_pressed="Arrow_Right"
-  image_top_pad="0"
-  layout="topleft"
-  left_pad="5"
-  name="PageUp"
-  top_delta="0" />
- <loading_indicator
-  follows="bottom|right"
-  height="16"
-  layout="topleft"
-  right="-4"
-  name="loading"
-  top_delta="0"
-  width="16" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_event.xml b/indra/newview/skins/default/xui/en/floater_event.xml
index 4b430877762bd213bc1f664b670dc7e612a8c98c..67eb4931e1be41fde99b944bec80f77a0c2eb551 100644
--- a/indra/newview/skins/default/xui/en/floater_event.xml
+++ b/indra/newview/skins/default/xui/en/floater_event.xml
@@ -1,23 +1,39 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater
- height="590"
+ height="400"
  can_resize="true"
  help_topic="event_details"
  label="Event"
  layout="topleft"
  name="Event"
+ save_rect="true"
  save_visibility="false"
- title="EVENT DETAILS"
- max_width="320"
- width="313">
-  <panel
-   follows="all"
-   name="event_panel"
-   top="0"
-   bottom="590"
-   left="0"
-   right="313"
-   class="panel_event_info"
-   filename="panel_event_info.xml" />
+ title="EVENT DETAILS" 
+ width="600">
+	<floater.string
+		name="loading_text">
+		Loading...
+	</floater.string>
+    <floater.string
+     name="done_text">
+        Done
+    </floater.string>
+  <web_browser
+     trusted_content="true" 
+     follows="left|right|top|bottom"
+     layout="topleft"
+     left="10"
+     name="browser"
+     height="365"
+     width="580"
+     top="0"/>
+	<text
+	 follows="bottom|left"
+	 height="16"
+	 layout="topleft"
+	 left_delta="0"
+	 name="status_text"
+	 top_pad="10"
+	 width="150" />	 
 </floater>
 
diff --git a/indra/newview/skins/default/xui/en/floater_fs_search.xml b/indra/newview/skins/default/xui/en/floater_fs_search.xml
new file mode 100644
index 0000000000000000000000000000000000000000..67e9d1630db9bec66acf70ce9ae02adabb9c0408
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_fs_search.xml
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+	can_resize="true"
+	default_tab_group="1"
+	height="590"
+	help_topic="search"
+	layout="topleft"
+	legacy_header_height="0"
+	min_height="590"
+	min_width="660"
+	name="floater_search"
+	positioning="centered"
+	save_rect="true"
+	single_instance="true"
+	title="SEARCH"
+	width="780">
+	<!-- Strings -->
+	<floater.string name="string.location">
+		Location: [LOCATION]
+	</floater.string>
+	<floater.string name="string.traffic">
+		Traffic: [DWELL]
+	</floater.string>
+	<floater.string name="string.area">
+		Area: [AREA]
+	</floater.string>
+	<floater.string name="string.members">
+		Members: [MEMBER_COUNT]
+	</floater.string>
+	<floater.string name="string.founder">
+		Founder: [FOUNDER]
+	</floater.string>
+	<floater.string name="string.age">
+		Age: [AGE]
+	</floater.string>
+	<floater.string name="string.partner">
+		Partner: [PARTNER]
+	</floater.string>
+	<floater.string name="string.listing_price">
+		Listing Price: [LISTING_PRICE]
+	</floater.string>
+	<floater.string name="string.slurl">
+		[SLURL]
+	</floater.string>
+	<floater.string name="string.duration">
+		Duration: [DURATION]
+	</floater.string>
+	<floater.string name="string.covercharge">
+		Cover: [COVERCHARGE]
+	</floater.string>
+	<!-- Tab time -->
+	<tab_container
+		layout="topleft"
+		follows="all"
+		top="1"
+		left="0"
+		name="ls_tabs"
+		tab_min_width="90"
+		tab_position="top"
+		width="780"
+		height="585">
+		<panel
+			class="panel_ls_web"
+			filename="panel_fs_search_legacy_web.xml"
+			label="Websearch"
+			layout="topleft"
+			name="panel_ls_web" />
+		<panel
+			class="panel_ls_people"
+			filename="panel_fs_search_legacy_people.xml"
+			label="People"
+			layout="topleft"
+			name="panel_ls_people" />
+		<panel
+			class="panel_ls_groups"
+			filename="panel_fs_search_legacy_groups.xml"
+			label="Groups"
+			layout="topleft"
+			name="panel_ls_groups" />
+		<panel
+			class="panel_ls_places"
+			filename="panel_fs_search_legacy_places.xml"
+			label="Places"
+			layout="topleft"
+			name="panel_ls_places" />
+		<panel
+			class="panel_ls_land"
+			filename="panel_fs_search_legacy_land.xml"
+			label="Land Sales"
+			layout="topleft"
+			name="panel_ls_land" />
+		<panel
+			class="panel_ls_events"
+			filename="panel_fs_search_legacy_events.xml"
+			label="Events"
+			layout="topleft"
+			name="panel_ls_events" />
+		<panel
+			class="panel_ls_classifieds"
+			filename="panel_fs_search_legacy_classifieds.xml"
+			label="Classifieds"
+			layout="topleft"
+			name="panel_ls_classifieds" />
+	</tab_container>
+	<!-- Details/Action Panes -->
+	<panel
+		border="true"
+		follows="top|right|bottom"
+		height="508"
+		layout="topleft"
+		left="412"
+		top="80"
+		width="366"
+		name="panel_ls_details">
+		<text_editor
+		left="12"
+		top="5"
+		height="24"
+		width="340"
+		layout="topleft"
+		follows="left|top|right"
+		name="title"
+		bg_visible="false"
+		border_visible="false"
+		allow_scroll="false"
+		h_pad="0"
+		v_pad="0"
+		halign="center"
+		enabled="false"
+		use_ellipses="true"
+		font="SansSerifHugeBold"
+		value="Undefined name" />
+		<texture_picker
+		enabled="false"
+		fallback_image="Generic_Person_Large"
+		follows="left|top|right"
+		height="210"
+		layout="topleft"
+		left="78"
+		name="snapshot"
+		top_pad="4"
+		width="210"/>
+		<texture_picker
+		enabled="false"
+		fallback_image="default_land_picture.j2c"
+		follows="left|top|right"
+		height="210"
+		layout="topleft"
+		left_delta="0"
+		name="snapshot_parcel"
+		top_delta="0"
+		visible="false"
+		width="280"/>
+		<text_editor
+		left="20"
+		top_pad="2"
+		height="16"
+		width="180"
+		layout="topleft"
+		follows="left|top|right"
+		name="aux1"
+		bg_visible="false"
+		border_visible="false"
+		h_pad="0"
+		v_pad="0"
+		word_wrap="true"
+		enabled="false"
+		max_length="117"
+		allow_scroll="false"
+		parse_urls="true"
+		value="Auxilary info field 1"/>
+		<text_editor
+		left_pad="4"
+		top_delta="0"
+		height="16"
+		width="140"
+		layout="topleft"
+		follows="left|top|right"
+		name="aux2"
+		bg_visible="false"
+		border_visible="false"
+		h_pad="0"
+		v_pad="0"
+		word_wrap="true"
+		enabled="false"
+		max_length="117"
+		allow_scroll="false"
+		parse_urls="true"
+		value="Auxilary info field 2"/>
+		<icon
+		follows="top|right"
+		height="16"
+		image_name="Unknown_Icon"
+		layout="topleft"
+		left="20"
+		top_pad="2"
+		name="maturity_icon"
+		width="18" />
+		<text_editor
+		left_pad="4"
+		top_delta="0"
+		height="28"
+		width="302"
+		layout="topleft"
+		follows="left|top|right"
+		name="location"
+		bg_visible="false"
+		border_visible="false"
+		h_pad="0"
+		v_pad="0"
+		word_wrap="true"
+		enabled="false"
+		max_length="117"
+		allow_scroll="false"
+		parse_urls="true"
+		value="Location info field"/>
+		<text_editor
+		left="20"
+		top_pad="12"
+		height="154"
+		width="324"
+		layout="topleft"
+		follows="left|top|right"
+		name="desc"
+		bg_visible="false"
+		border_visible="false"
+		h_pad="0"
+		v_pad="0"
+		word_wrap="true"
+		parse_urls="true"
+		enabled="false"
+		max_length="1000"
+		trusted_content="false"
+		value="You unlock this door with the key of imagination. Beyond it is another dimension: a dimension of sound, a dimension of sight, a dimension of mind. You're moving into a land of both shadow and substance, of things and ideas; you've just crossed over into the Twilight Zone. What you are about to see is real; the litigants on the screen are not actors. They are genuine citizens who, having filed their claims in a real small claims court, have been persuaded to drop their suits there and have them settled here, in this forum... the People's Court."/>
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Open Profile"
+		name="people_profile_btn"
+		top="484"
+		left="3"
+		width="120" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Send Message"
+		name="people_message_btn"
+		width="120"
+		left_pad="1" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Add Friend"
+		name="people_friend_btn"
+		width="120"
+		left_pad="1" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Open Profile"
+		name="group_profile_btn"
+		top="484"
+		left="3"
+		width="120" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Join Chat"
+		name="group_message_btn"
+		width="120"
+		left_pad="1" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Join Group"
+		name="group_join_btn"
+		width="120"
+		left_pad="1" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Teleport"
+		name="teleport_btn"
+		top="484"
+		left="3"
+		width="120" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Show on Map"
+		name="map_btn"
+		width="120"
+		left_pad="1" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Remind me"
+		name="event_reminder_btn"
+		width="120"
+		left_pad="1" />
+		<loading_indicator
+		left="134"
+		top="320"
+		follows="left|top|right"
+		mouse_opaque="false"
+		name="loading"
+		images_per_sec="1.0"
+		tab_stop="false"
+		height="100"
+		width="100"
+		visible="false" >
+			<images>
+				<image name="ProgressLarge_1"/>
+				<image name="ProgressLarge_2"/>
+				<image name="ProgressLarge_3"/>
+				<image name="ProgressLarge_4"/>
+				<image name="ProgressLarge_5"/>
+				<image name="ProgressLarge_6"/>
+				<image name="ProgressLarge_7"/>
+				<image name="ProgressLarge_8"/>
+				<image name="ProgressLarge_9"/>
+				<image name="ProgressLarge_10"/>
+				<image name="ProgressLarge_11"/>
+				<image name="ProgressLarge_12"/>
+			</images>
+		</loading_indicator>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_profile_legacy.xml b/indra/newview/skins/default/xui/en/floater_profile_legacy.xml
deleted file mode 100644
index 2a896d10796abe463d06208dd50d4cb6859f77dc..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_profile_legacy.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
-  positioning="cascading"
-  can_close="true"
-  can_resize="true"
-  height="580"
-  min_height="350"
-  min_width="260"
-  layout="topleft"
-  name="floater_profile_legacy"
-  save_rect="true"
-  title="PROFILE"
-  width="370">
-    <panel
-      class="panel_profile_legacy_sidetray"
-      name="panel_profile_legacy_sidetray"
-      filename="panel_profile_legacy_sidetray.xml"
-      label="Profile"
-      font="SansSerifBold"
-      follows="all"
-      layout="topleft"
-      min_height="350"
-      left="1"
-      right="-1"
-      top="0"
-      bottom="-8"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/menu_profile_legacy.xml b/indra/newview/skins/default/xui/en/menu_profile_legacy.xml
deleted file mode 100644
index 93724bbca1a0e59e67f2f1151d08045ddfd660c1..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/menu_profile_legacy.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<toggleable_menu 
-     name="menu_profile_legacy"
-     left="0" bottom="0" visible="false"
-     mouse_opaque="false">
-  <menu_item_call
-   label="Open Webprofile..."
-   name="webprofile">
-     <menu_item_call.on_click
-      function="Profile.Action"
-      parameter="webprofile"/>
-  </menu_item_call>
-  <menu_item_separator/>
-  <!--<menu
-	label="Upload profile image"
-	layout="topleft"
-	name="upload_image_menu">
-	  <menu_item_call
-       label="Second Life..."
-       name="upload_second_life">
-		<menu_item_call.on_click
-		 function="Profile.Action"
-		 parameter="upload_sl"/>
-		<menu_item_call.on_enable
-		 function="Profile.Enable"
-		 parameter="can_upload_pic" />
-	  </menu_item_call>
-	  <menu_item_call
-       label="First Life..."
-       name="upload_first_life">
-        <menu_item_call.on_click
-	     function="Profile.Action"
-	     parameter="upload_fl"/>
-        <menu_item_call.on_enable
-		 function="Profile.Enable"
-		 parameter="can_upload_pic" />
-	  </menu_item_call>
-  </menu>-->
-  <menu_item_call
-   label="Share..."
-   name="share">
-     <menu_item_call.on_click
-      function="Profile.Action"
-      parameter="share"/>
-     <menu_item_call.on_enable
-      function="Profile.Enable"
-      parameter="can_share" />
-  </menu_item_call>
-  <menu_item_call
-   label="Call Avatar..."
-   name="call">
-     <menu_item_call.on_click
-      function="Profile.Action"
-      parameter="call"/>
-     <menu_item_call.on_enable
-      function="Profile.Enable"
-      parameter="can_has_telefono" />
-  </menu_item_call>
-  <menu_item_call
-   label="Offer teleport..."
-   name="teleport">
-     <menu_item_call.on_click
-      function="Profile.Action"
-      parameter="teleport"/>
-     <menu_item_call.on_enable
-      function="Profile.Enable"
-      parameter="can_has_teleport" />
-  </menu_item_call>
-  <menu_item_call
-   label="Request teleport..."
-   name="request_teleport">
-     <menu_item_call.on_click
-      function="Profile.Action"
-      parameter="req_teleport"/>
-     <menu_item_call.on_enable
-      function="Profile.Enable"
-      parameter="can_has_teleport" />
-  </menu_item_call>
-  <menu_item_call
-   label="Show on map..."
-   name="map">
-     <menu_item_call.on_click
-      function="Profile.Action"
-      parameter="map"/>
-     <menu_item_call.on_enable
-      function="Profile.Enable"
-      parameter="can_has_map" />
-  </menu_item_call>
-  <menu_item_call
-   label="Pay..."
-   name="pay">
-     <menu_item_call.on_click
-      function="Profile.Action"
-      parameter="pay"/>
-     <menu_item_call.on_enable
-      function="Profile.Enable"
-      parameter="can_has_pay" />
-  </menu_item_call>
-  <menu_item_call
-   label="Report Abuse..."
-   name="report_abuse">
-     <menu_item_call.on_click
-      function="Profile.Action"
-      parameter="report_abuse"/>
-     <menu_item_call.on_enable
-      function="Profile.Enable"
-      parameter="can_drama" />
-  </menu_item_call>
-  <menu_item_separator />
-  <menu_item_call
-   label="Copy Name"
-   name="Copy Name">
-	<menu_item_call.on_click
-	 function="Avatar.CopyData"
-	 parameter="account_name"/>
-	<menu_item_call.on_enable
-	 function="RLV.CanShowName" />
-  </menu_item_call>
-  <menu_item_call
-   label="Copy SLurl"
-   name="Copy SLurl">
-	<menu_item_call.on_click
-	 function="Avatar.CopyData"
-	 parameter="slurl"/>
-	<menu_item_call.on_enable
-	 function="RLV.CanShowName" />
-  </menu_item_call>
-  <menu_item_call
-   label="Copy UUID"
-   name="Copy ID">
-	<menu_item_call.on_click
-	 function="Avatar.CopyData"
-	 parameter="id"/>
-  </menu_item_call>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
index e3fd1cd5a1fab2799f387eada4da0a9ffdc88a7e..0febf62b4355e3b2f7dabb09bf345bbe73b31934 100644
--- a/indra/newview/skins/default/xui/en/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml
@@ -38,28 +38,15 @@
   name="auto_renew_off">
     Disabled
  </panel.string>
-    <button
-     follows="top|left"
-     height="24"
-     image_hover_unselected="BackButton_Over"
-     image_pressed="BackButton_Press"
-     image_unselected="BackButton_Off"
-     layout="topleft"
-     name="back_btn"
-     left="10"
-     tab_stop="false"
-     top="2"
-     width="30"
-     use_draw_context_alpha="false" />
     <text
      follows="top|left|right"
      font="SansSerifHugeBold"
      height="26"
      layout="topleft"
-     left_pad="4"
+     left="12"
      name="title"
      text_color="LtGray"
-     top="0"
+     top="2"
      value="Classified Info"
      use_ellipses="true"
      width="275" />
@@ -420,7 +407,7 @@
 		         height="23"
 		         label="Teleport"
 		         layout="topleft"
-		         left="0"
+		         left="2"
 		         name="teleport_btn"
 		         top="0"
 		         width="101" />	
@@ -443,24 +430,6 @@
 		         top="0"
 		         width="100" />
 		  </layout_panel>	  
-		  
-		  <layout_panel
-			  follows="bottom|left|right"
-			  height="23"
-			  layout="bottomleft"
-			  left_pad="3"
-			  name="edit_btn_lp"
-		      auto_resize="true"
-			  width="101">
-			  <button
-		         follows="bottom|left|right"
-		         height="23"
-		         label="Edit"
-		         layout="topleft"
-		         name="edit_btn"
-		         top="0"
-		         width="101" />
-		  </layout_panel>
 	   </layout_stack>
     </panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
deleted file mode 100644
index 39f1817705dfece84146b65b9b4c6e3aa55afa16..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ /dev/null
@@ -1,238 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- background_visible="true"
- bevel_style="in"
- follows="left|top|right|bottom"
- height="569"
- label="Edit Pick"
- layout="topleft"
- left="0"
- min_height="350"
- name="panel_edit_pick"
- help_topic="profile_edit_pick"
- top="0"
- width="333">
- <panel.string
-  name="location_notice">
-    (will update after save)
- </panel.string>
-  <button
-     follows="top|left"
-     height="24"
-     image_hover_unselected="BackButton_Over"
-     image_pressed="BackButton_Press"
-     image_unselected="BackButton_Off"
-     layout="topleft"
-     name="back_btn"
-     left="10"
-     tab_stop="false"
-     top="2"
-     width="30"
-     use_draw_context_alpha="false" />
-   <text
-     type="string"
-     length="1"
-     follows="top"
-     font="SansSerifHugeBold"
-     height="26"
-     layout="topleft"
-     left_pad="4"
-     name="title"
-     text_color="LtGray"
-     top="2"
-     width="250">
-        Edit Pick
-    </text>
-   <scroll_container
-     color="PanelDefaultBackgroundColor"
-     follows="all"
-     height="502"
-     layout="topleft"
-     left="8"
-     top_pad="10"
-     name="profile_scroll"
-     opaque="true"
-     width="312">
-    <panel
-     name="scroll_content_panel"
-     follows="left|top|right"
-     min_height="300"
-     layout="topleft"
-     top="0"
-     background_visible="false"
-     height="500"
-     left="0"
-     width="285">
-    <texture_picker
-     fallback_image="default_land_picture.j2c"
-     follows="left|top|right"
-     height="197"
-     width="272"
-     layout="topleft"
-     no_commit_on_selection="true"
-     top="10"
-     left="11"
-     name="pick_snapshot" />
-          <icon
-           height="197"
-           image_name="spacer24.tga"
-           layout="topleft"
-           name="edit_icon"
-           label=""
-           tool_tip="Click to select an image"
-           top="10"
-           left="11"
-           width="286" />
-        <text
-         type="string"
-         length="1"
-         follows="left|top|right"
-         height="15"
-         font="SansSerifSmall"
-         font.style="BOLD"
-         layout="topleft"
-         left="10"
-         top="215"
-         name="Name:"
-         text_color="white"
-         width="280">
-            Title:
-        </text>
-        <line_editor
-         follows="left|top|right"
-         font="SansSerif"
-         height="20"
-         layout="topleft"
-         left="10"
-         top_pad="2"
-         max_length_bytes="63"
-         name="pick_name"
-         width="273" />
-        <text
-         type="string"
-         length="1"
-         follows="left|top|right"
-         height="15"
-         font="SansSerifSmall"
-         font.style="BOLD"
-         layout="topleft"
-         left="10"
-         top_pad="20"
-         name="description_label"
-         text_color="white"
-         width="280">
-            Description:
-        </text>
-        <text_editor
-         follows="left|top|right"
-         height="100"
-         width="273"
-         hide_scrollbar="false"
-         layout="topleft"
-         left="10"
-         top_pad="2"
-         max_length="1023"
-         name="pick_desc"
-         spellcheck="true"
-         word_wrap="true" 
-		 show_emoji_helper="true" />
-        <text
-         type="string"
-         length="1"
-         font="SansSerifSmall"
-         font.style="BOLD"
-         follows="left|top|right"
-         height="15"
-         layout="topleft"
-         left="10"
-         name="location_label"
-         text_color="white"
-         top_pad="20"
-         width="280">
-            Location:
-        </text>
-        <text
-         type="string"
-         length="1"
-         follows="left|top|right"
-         height="50"
-         layout="topleft"
-         left="10"
-         name="pick_location"
-         top_pad="2"
-         width="280"
-         word_wrap="true">
-            loading...
-        </text>
-        <button
-         follows="left|top"
-         height="23"
-         label="Set to Current Location"
-         layout="topleft"
-         left="8"
-         top_pad="0"
-         name="set_to_curr_location_btn"
-         width="200" />
-    </panel>
-    </scroll_container>
-    <panel
-     follows="left|right|bottom"
-     height="23"
-     label="bottom_panel"
-     layout="topleft"
-     left="8"
-     name="bottom_panel"
-     top_pad="5"
-     width="315">
-     
-     	 <layout_stack
-		  follows="bottom|left|right"
-		  height="23"
-		  layout="topleft"
-		  name="layout_stack1"
-		  left="0"
-		  orientation="horizontal"
-		  top_pad="0"
-		  width="313">
-		  	 
-		  	 <layout_panel
-			  follows="bottom|left|right"
-			  height="23"
-			  layout="topleft"
-			  left="0"
-			  name="layout_panel1"
-		      auto_resize="true"
-			  width="150">
-		        <button
-		         follows="bottom|left|right"
-		         height="23"
-		         label="Save Pick"
-		         layout="topleft"
-		         name="save_changes_btn"
-		         top="0"
-		         left="1"
-		         width="149" />
-			  </layout_panel>
-			  
-			 <layout_panel
-			  follows="bottom|left|right"
-			  height="23"
-			  layout="topleft"
-			  left_pad="4"
-			  name="layout_panel2"
-		      auto_resize="true"
-			  width="146">
-		        <button
-		         follows="bottom|left|right"
-		         height="23"
-		         label="Cancel"
-		         layout="topleft"
-		         name="cancel_btn"
-		         top="0"
-		         left="1"
-		        width="145" />
-			  </layout_panel>
-	</layout_stack>
-		  
-    </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_event_info.xml b/indra/newview/skins/default/xui/en/panel_event_info.xml
deleted file mode 100644
index b065f493c12e4bc0935a2152adcb63aaa4e6e284..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_event_info.xml
+++ /dev/null
@@ -1,456 +0,0 @@
-<?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="event_info"
- class="event_info"
- top="20"
- width="333">
-  <panel.string name="free">
-   FREE
-  </panel.string>
-  <panel.string name="hours">
-   hours
-  </panel.string>
-  <panel.string name="minutes">
-   minutes
-  </panel.string>
-  <panel.string name="type_mature">
-   Moderate
-  </panel.string>
-  <panel.string name="type_pg">
-  General Content
-  </panel.string>
-  <panel.string name="reminder">
-   Remind
-  </panel.string>
-  <panel.string name="no_reminder">
-   Don't remind
-  </panel.string>
-  <button
-   follows="top|left"
-   height="24"
-   image_hover_unselected="BackButton_Over"
-   image_pressed="BackButton_Press"
-   image_unselected="BackButton_Off"
-   layout="topleft"
-   name="back_btn"
-   left="10"
-   tab_stop="false"
-   top="2"
-   width="30"
-   use_draw_context_alpha="false" />
-  <text
-   follows="top|left|right"
-   font="SansSerifHugeBold"
-   height="26"
-   layout="topleft"
-   left_pad="4"
-   name="title"
-   text_color="LtGray"
-   top="0"
-   value="Event Info"
-   use_ellipses="true"
-   width="275" />
-  <scroll_container
-   color="PanelDefaultBackgroundColor"
-   opaque="true"
-   follows="all"
-   height="502"
-   layout="topleft"
-   left="10"
-   top_pad="10"
-   name="profile_scroll"
-   reserve_scroll_corner="false"
-   width="312">
-    <panel
-     name="scroll_content_panel"
-     follows="left|top"
-     min_height="300"
-     layout="topleft"
-     top="0"
-     background_visible="false"
-     height="610"
-     left="0"
-     width="285">
-     <panel
-     name="snapshot_panel"
-     layout="topleft"
-     follows="left|top|right"
-     height="197"
-     left="10"
-     top="10"
-     width="275">
-      <texture_picker
-       fallback_image="default_land_picture.j2c"
-       enabled="false"
-       follows="left|top|right"
-       height="197"
-       layout="topleft"
-       left="0"
-       name="snapshot"
-       top="0"
-       width="275" />
-    </panel>
-    <text_editor
-     allow_scroll="false"
-     bg_visible="false"
-     follows="left|top|right"
-     h_pad="0"
-     height="35"
-     width="290"
-     layout="topleft"
-     font="SansSerifBig"
-     font.style="BOLD"
-     left="10"
-     top_pad="10"
-     name="name"
-     read_only="true"
-     text_color="white"
-     v_pad="0"
-     value="[name]"
-     use_ellipses="true" />
-    <text
-     follows="left|top"
-     font.style="BOLD"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="event_location_label"
-     text_color="white"
-     top_pad="5"
-     value="Location:"
-     width="250" />
-    <text_editor
-     parse_urls="true"
-     allow_scroll="false"
-     bg_visible="false"
-     follows="left|top"
-     h_pad="0"
-     height="30"
-     layout="topleft"
-     left="10"
-     name="location"
-     read_only="true"
-     top_pad="5"
-     width="290"
-     word_wrap="true"
-     v_pad="0"
-     value="[loading...]" />
-    <text
-     follows="left|top"
-     font.style="BOLD"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="content_type_label"
-     text_color="white"
-     top_pad="10"
-     value="Content Type:"
-     width="140" />
-    <icon
-     follows="top|left"
-     height="16"
-     image_name="Parcel_M_Light"
-     layout="topleft"
-     left_pad="0"
-     name="content_type_moderate"
-     top_pad="-11"
-     width="18" />
-    <icon
-     follows="top|left"
-     height="16"
-     image_name="Parcel_PG_Light"
-     layout="topleft"
-     left_delta="0"
-     name="content_type_general"
-     top_delta="0"
-     width="18" />
-    <text_editor
-     allow_scroll="false"
-     bg_visible="false"
-     follows="left|top|right"
-     h_pad="0"
-     height="18"
-     layout="topleft"
-     left_pad="2"
-     name="content_type"
-     read_only="true"
-     width="130"
-     top_delta="1"
-     v_pad="0"
-     value="[content type]" />
-    <text
-     follows="left|top"
-     font.style="BOLD"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="time_label"
-     text_color="white"
-     top_pad="0"
-     value="Time:"
-     width="140" />
-    <text_editor
-     allow_scroll="false"
-     bg_visible="false"
-     follows="left|top|right"
-     h_pad="0"
-     height="18"
-     layout="topleft"
-     left_pad="0"
-     name="time"
-     read_only="true"
-     width="150"
-     top_pad="-10"
-     v_pad="0"
-     value="[time]" />
-    <text
-     follows="left|top"
-     font.style="BOLD"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="duration_label"
-     text_color="white"
-     top_pad="0"
-     value="Duration:"
-     width="140" />
-    <text_editor
-     allow_scroll="false"
-     bg_visible="false"
-     follows="left|top"
-     h_pad="0"
-     halign="left"
-     height="16"
-     layout="topleft"
-     left_pad="0"
-     name="duration"
-     read_only="true"
-     top_pad="-10"
-     v_pad="0"
-     value="[duration] hours"
-     width="150" />
-    <layout_stack
-     animate="false"
-     name="descr_stack"
-     layout="topleft"
-     follows="all"
-     orientation="vertical"
-     left="10"
-     top_pad="5"
-     width="290"
-     height="215">
-      <layout_panel
-       auto_resize="false"
-       name="host_layout_panel"
-       layout="topleft"
-       follows="all"
-       left="0"
-       top="0"
-       width="290"
-       height="16">
-       <text
-        follows="left|top"
-        font.style="BOLD"
-        height="10"
-        layout="topleft"
-        left="0"
-        name="host_label"
-        text_color="white"
-        top_pad="0"
-        value="Host:"
-        width="140" />
-       <text_editor
-        allow_scroll="false"
-        bg_visible="false"
-        follows="left|top"
-        h_pad="0"
-        halign="left"
-        height="16"
-        layout="topleft"
-        left_pad="0"
-        parse_urls="true"
-        name="host"
-        read_only="true"
-        top_pad="-10"
-        v_pad="0"
-        value="secondlife:///app/agent/00000000-0000-0000-0000-000000000000/inspect"
-        width="150" />
-      </layout_panel>
-      <layout_panel
-       auto_resize="false"
-       name="category_panel"
-       layout="topleft"
-       follows="all"
-       left="0"
-       top="0"
-       width="290"
-       height="16">
-        <text
-         follows="left|top"
-         font.style="BOLD"
-         height="10"
-         layout="topleft"
-         left="0"
-         name="category_label"
-         text_color="white"
-         top="0"
-         value="Category:"
-         width="140" />
-        <text
-         height="16"
-         layout="topleft"
-         follows="top|left"
-         left_pad="0"
-         name="category"
-         top_pad="-10"
-         value="[category]"
-         width="150" />
-      </layout_panel>
-      <layout_panel
-       auto_resize="false"
-       name="cover_panel"
-       layout="topleft"
-       follows="all"
-       left="0"
-       top="0"
-       width="290"
-       height="16">
-        <text
-         follows="left|top"
-         font.style="BOLD"
-         height="10"
-         layout="topleft"
-         left="0"
-         name="cover_label"
-         text_color="white"
-         top="0"
-         value="Cover:"
-         width="140" />
-        <text
-         height="16"
-         layout="topleft"
-         follows="top|left"
-         left_pad="0"
-         name="cover"
-         top_pad="-10"
-         value="L$[cover]"
-       width="150" />
-      </layout_panel>
-      <layout_panel
-       name="descr_layout_panel"
-       layout="topleft"
-       follows="all"
-       left="0"
-       top="0"
-       width="290"
-       height="215">
-        <text
-         auto_resize="false"
-         follows="left|top"
-         font.style="BOLD"
-         height="10"
-         layout="topleft"
-         left="0"
-         name="desc_label"
-         text_color="white"
-         top="0"
-         value="Description:"
-         width="250" />
-        <text_editor
-         parse_urls="true"
-         allow_scroll="true"
-         bg_visible="false"
-         follows="all"
-         h_pad="0"
-         height="200"
-         layout="topleft"
-         left="0"
-         max_length="1023"
-         name="desc"
-         read_only="true"
-         top_pad="7"
-         width="280"
-         v_pad="0"
-         value="[description]"
-         word_wrap="true" />
-      </layout_panel>
-    </layout_stack>
-  </panel>
-</scroll_container>
-<panel
- follows="left|right|bottom"
- height="35"
- layout="topleft"
- top_pad="5"
- left="9"
- name="buttons">
-  <layout_stack
-   follows="bottom|left|right"
-   height="23"
-   layout="topleft"
-   name="layout_stack1"
-   left="0"
-   orientation="horizontal"
-   top_pad="0"
-   width="309">
-    <layout_panel
-     follows="bottom|left|right"
-     height="23"
-     layout="bottomleft"
-     left="0"
-     name="layout_panel1"
-     auto_resize="true"
-     width="101">
-      <button
-       follows="bottom|left|right"
-       height="23"
-       label="Teleport"
-       layout="topleft"
-       left="0"
-       name="teleport_btn"
-       top="0"
-       width="101" />
-    </layout_panel>
-    <layout_panel
-     follows="bottom|left|right"
-     height="23"
-     layout="bottomleft"
-     left_pad="3"
-     name="show_on_map_btn_lp"
-     auto_resize="true"
-     width="100">
-      <button
-       follows="bottom|left|right"
-       height="23"
-       label="Map"
-       layout="topleft"
-       name="show_on_map_btn"
-       top="0"
-       width="100" />
-    </layout_panel>
-    <layout_panel
-     follows="bottom|left|right"
-     height="23"
-     layout="bottomleft"
-     left_pad="3"
-     name="remind_btn_lp"
-     auto_resize="true"
-     width="101">
-      <button
-       follows="bottom|left|right"
-       height="23"
-       label="Remind"
-       layout="topleft"
-       name="remind_btn"
-       top="0"
-       width="101" />
-    </layout_panel>
-  </layout_stack>
- </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_classifieds.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_classifieds.xml
new file mode 100644
index 0000000000000000000000000000000000000000..66c35558b10d93e30f6027ecaa2ac34ce6264715
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_classifieds.xml
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="false"
+ follows="all"
+ height="566"
+ layout="topleft"
+ left="1"
+ width="780"
+ label="Classifieds"
+ name="panel_ls_classifieds">
+	<panel
+	 border="false"
+	 follows="top|left|right"
+	 height="53"
+	 layout="topleft"
+	 left="0"
+	 width="780"
+	 name="panel_ls_input">
+		<text
+		 type="string"
+		 length="1"
+		 follows="left|top"
+		 top_pad="5"
+		 layout="topleft"
+		 left="6"
+		 name="search_text"
+		 top="12"
+		 height="16"
+		 width="156">
+		Enter search terms:
+		</text>
+		<search_combo_box
+		 layout="topleft"
+		 follows="left|top|right"
+		 height="23"
+		 left_delta="0"
+		 name="classifieds_edit"
+		 top="29"
+		 width="651" />
+		<combo_box
+		 follows="right|top"
+		 layout="topleft"
+		 height="23"
+		 allow_text_entry="false"
+		 top_delta="0"
+		 left_pad="2"
+		 name="classifieds_category"
+		 width="122">
+			<combo_box.commit_callback
+			 function="CommitSearch" />
+		</combo_box>
+		<check_box
+		 control_name="ShowPGClassifieds"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left="660"
+		 name="pg_all"
+		 top="12"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_PG_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_general"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowMatureClassifieds"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="mature_all"
+		 top_delta="1"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_M_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_moderate"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowAdultClassifieds"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="adult_all"
+		 top_delta="1"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_R_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_adult"
+		 top_delta="-1"
+		 width="18"/>
+	</panel>
+	<!-- Search Pane -->
+	<panel
+	 border="true"
+	 follows="all"
+	 height="510"
+	 layout="topleft"
+	 left="1"
+	 width="410"
+	 top_pad="1"
+	 name="panel_ls_scrolllist">
+		<scroll_list
+		 draw_heading="true"
+		 follows="all"
+		 height="485"
+		 layout="topleft"
+		 left="0"
+		 name="search_results_classifieds"
+		 top="0"
+		 width="410">
+			<columns
+			 label=""
+			 name="icon"
+			 width="20" />
+			<columns
+			 label="Name"
+			 name="classified_name"
+			 relwidth="0.70" />
+			<columns
+			 label="Listing Price"
+			 name="price"
+			 relwidth="0.3"/>
+		</scroll_list>
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Back"
+	 	 name="classifieds_back"
+		 top_pad="2"
+		 left="3"
+		 width="100" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Next"
+		 name="classifieds_next"
+		 width="100"
+		 left_pad="1" />
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_events.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_events.xml
new file mode 100644
index 0000000000000000000000000000000000000000..57cb4990e408332b97d4607b70899c09ce43c7ed
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_events.xml
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="false"
+ follows="all"
+ height="566"
+ layout="topleft"
+ left="1"
+ width="780"
+ label="Events"
+ name="panel_ls_events">
+	<panel
+	 border="false"
+	 follows="top|left|right"
+	 height="53"
+	 layout="topleft"
+	 left="0"
+	 width="780"
+	 name="panel_ls_input">
+		<text
+		 type="string"
+		 length="1"
+		 follows="left|top"
+		 top_pad="5"
+		 layout="topleft"
+		 left="6"
+		 name="search_text"
+		 top="12"
+		 height="16"
+		 width="156">
+		 Enter search terms:
+		</text>
+		<radio_group
+		 left_pad="20"
+		 height="16"
+		 width="300"
+		 layout="topleft"
+		 name="events_search_mode">
+			<radio_item
+			 height="16"
+			 label="Ongoing and Upcoming"
+			 layout="topleft"
+			 name="current"
+			 value="current"
+			 top_pad="0"
+			 width="120" />
+			<radio_item
+			 height="16"
+			 label="By Date"
+			 layout="topleft"
+			 name="date"
+			 value="date"
+			 left_pad="70"
+			 width="120" />
+			<radio_group.commit_callback
+			 function="CommitSearch" />
+		</radio_group>
+		<text
+		 type="string"
+		 length="1"
+		 follows="left|top"
+		 top_delta="0"
+		 layout="topleft"
+		 left_pad="5"
+		 name="events_date"
+		 font.style="BOLD"
+		 height="16"
+		 width="80">
+			4/20
+		</text>
+		<search_combo_box
+		 layout="topleft"
+		 follows="left|top|right"
+		 height="23"
+		 left="6"
+		 name="events_edit"
+		 top="29"
+		 width="651" />
+		<combo_box
+		 follows="right|top"
+		 layout="topleft"
+		 height="23"
+		 top_delta="0"
+		 left_pad="2"
+		 name="events_category"
+		 width="122">
+			<combo_box.item label="Any Category" name="any" value="0" />
+			<combo_box.item label="" value="filter_separator" enabled="false" />
+			<combo_box.item label="Discussion" name="discussion" value="18" />
+			<combo_box.item label="Sports" name="sports" value="19" />
+			<combo_box.item label="Live DJ" name="dj" value="30" />
+			<combo_box.item label="Live Music" name="music" value="20" />
+			<!-- <combo_box.item label="???" name="mystery_category" value="21" /> -->
+			<combo_box.item label="Commercial" name="commercial" value="22" />
+			<combo_box.item label="Nightlife/Entertainment" name="nightlife" value="23" />
+			<combo_box.item label="Games/Contests" name="games" value="24" />
+			<combo_box.item label="Pageants" name="pageants" value="25" />
+			<combo_box.item label="Education" name="education" value="26" />
+			<combo_box.item label="Arts and Culture" name="arts" value="27" />
+			<combo_box.item label="Charity/Support Groups" name="charity" value="28" />
+			<combo_box.item label="Miscellaneous" name="misc" value="29" />
+			<combo_box.commit_callback
+			 function="CommitSearch" />
+		</combo_box>
+		<check_box
+		 control_name="ShowPGEvents"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left="660"
+		 name="pg_all"
+		 top="12"
+		 width="15" >
+		<check_box.commit_callback
+		 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_PG_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_general"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowMatureEvents"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="mature_all"
+		 top_delta="1"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_M_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_moderate"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowAdultEvents"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="adult_all"
+		 top_delta="1"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_R_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_adult"
+		 top_delta="-1"
+		 width="18"/>
+	</panel>
+	<!-- Search Pane -->
+	<panel
+	 border="true"
+	 follows="all"
+	 height="510"
+	 layout="topleft"
+	 left="1"
+	 width="410"
+	 top_pad="1"
+	 name="panel_ls_scrolllist">
+		<scroll_list
+		 draw_heading="true"
+		 follows="all"
+		 height="485"
+		 layout="topleft"
+		 left="0"
+		 name="search_results_events"
+		 sort_ascending="true"
+		 sort_column="3"
+		 top="0"
+		 width="410">
+			<columns
+			 label=""
+			 name="icon"
+			 width="20" />
+			<columns
+			 label="Event Name"
+			 name="name"
+			 relwidth="0.72" />
+			<columns
+			 label="Date/Time"
+			 name="date"
+			 sort_column="time"
+			 relwidth="0.28" />
+			<columns
+			 label="Time"
+			 name="time"
+			 width="0"/>
+		</scroll_list>
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Yesterday"
+		 name="events_yesterday"
+		 top_pad="2"
+		 left="3"
+		 width="100" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Today"
+		 name="events_today"
+		 width="100"
+		 left_pad="1" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Tomorrow"
+		 name="events_tomorrow"
+		 width="100"
+		 left_pad="1" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 image_bottom_pad="2"
+		 image_overlay="Arrow_Left_Off"
+		 image_overlay_alignment="left"
+		 label="Back"
+		 name="events_back"
+		 width="25"
+		 left_pad="1" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 image_bottom_pad="2"
+		 image_overlay="Arrow_Right_Off"
+		 image_overlay_alignment="left"
+		 label="Next"
+		 name="events_next"
+		 width="25"
+		 left_pad="1" />
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_groups.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_groups.xml
new file mode 100644
index 0000000000000000000000000000000000000000..90001952f7c38528926e77ddb32302e2e0b23bbc
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_groups.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+	border="false"
+	follows="all"
+	height="566"
+	layout="topleft"
+	left="1"
+	width="780"
+	label="Groups"
+	name="panel_ls_groups">
+	<panel
+		border="false"
+		follows="top|left|right"
+		height="53"
+		layout="topleft"
+		left="0"
+		width="780"
+		name="panel_ls_input">
+		<text
+			type="string"
+			length="1"
+			follows="left|top"
+			top_pad="5"
+			layout="topleft"
+			left="6"
+			name="search_text"
+			top="12"
+			height="16"
+			width="156">
+			Enter search terms:
+		</text>
+		<search_combo_box
+		layout="topleft"
+		follows="left|top|right"
+		height="23"
+		left_delta="0"
+		name="groups_edit"
+		top="29"
+		width="770">
+		</search_combo_box>
+		<check_box
+		control_name="ShowPGGroups"
+		follows="right|top"
+		height="16"
+		label=""
+		layout="topleft"
+		left="660"
+		name="pg_all"
+		top="12"
+		width="15"
+		visible="false"/>
+		<icon
+		follows="right|top"
+		height="16"
+		image_name="Parcel_PG_Dark"
+		layout="topleft"
+		left_pad="2"
+		name="rating_icon_general"
+		top_delta="-1"
+		width="18"
+		visible="false"/>
+		<check_box
+		control_name="ShowMatureGroups"
+		follows="right|top"
+		height="16"
+		label=""
+		layout="topleft"
+		left_pad="2"
+		name="mature_all"
+		top_delta="1"
+		width="15"
+		visible="false"/>
+		<icon
+		follows="right|top"
+		height="16"
+		image_name="Parcel_M_Dark"
+		layout="topleft"
+		left_pad="2"
+		name="rating_icon_moderate"
+		top_delta="-1"
+		width="18"
+		visible="false"/>
+		<check_box
+		control_name="ShowAdultGroups"
+		follows="right|top"
+		height="16"
+		label=""
+		layout="topleft"
+		left_pad="2"
+		name="adult_all"
+		top_delta="1"
+		width="15"
+		visible="false"/>
+		<icon
+		follows="right|top"
+		height="16"
+		image_name="Parcel_R_Dark"
+		layout="topleft"
+		left_pad="2"
+		name="rating_icon_adult"
+		top_delta="-1"
+		width="18"
+		visible="false"/>
+	</panel>
+	<!-- Search Pane -->
+	<panel
+		border="true"
+		follows="all"
+		height="510"
+		layout="topleft"
+		left="1"
+		width="410"
+		top_pad="1"
+		name="panel_ls_scrolllist">
+		<scroll_list
+			draw_heading="true"
+			follows="all"
+			height="485"
+			layout="topleft"
+			left="0"
+			name="search_results_groups"
+			top="0"
+			width="410">
+			<columns
+			label=""
+			name="icon"
+			width="20" />
+			<columns
+			label="Group Name"
+			name="group_name"
+			relwidth="0.72" />
+			<columns
+			label="Members"
+			name="members"
+			relwidth="0.25" />
+			<columns
+			label="Score"
+			name="score"
+			width="0" />
+		</scroll_list>
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Back"
+		name="groups_back"
+		top_pad="2"
+		left="3"
+		width="100" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Next"
+		name="groups_next"
+		width="100"
+		left_pad="1" />
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_land.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_land.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bb03a1e9995b765a5386002da4a82bba89cb7c77
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_land.xml
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+	border="false"
+	follows="all"
+	height="566"
+	layout="topleft"
+	left="1"
+	width="780"
+	label="Land Sales"
+	name="panel_ls_land">
+	<panel
+		border="false"
+		follows="top|left|right"
+		height="53"
+		layout="topleft"
+		left="0"
+		width="780"
+		name="panel_ls_input">
+		<check_box
+		 control_name="ShowPGLand"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left="660"
+		 name="pg_all"
+		 top="12"
+		 width="15">
+            <check_box.commit_callback
+             function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_PG_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_general"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowMatureLand"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="mature_all"
+		 top_delta="1"
+		 width="15">
+            <check_box.commit_callback
+             function="CommitSearch" />
+        </check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_M_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_moderate"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowAdultLand"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="adult_all"
+		 top_delta="1"
+         width="15">
+            <check_box.commit_callback
+             function="CommitSearch" />
+        </check_box>
+		<icon
+		follows="right|top"
+		height="16"
+		image_name="Parcel_R_Dark"
+		layout="topleft"
+		left_pad="2"
+		name="rating_icon_adult"
+		top_delta="-1"
+		width="18"/>
+		<text
+			type="string"
+			length="1"
+			follows="left|top"
+			layout="topleft"
+			left="6"
+			name="search_text"
+			top="12"
+			height="16"
+			width="256">
+			Enter search terms:
+		</text>
+		<combo_box
+			control_name="FindLandType"
+			follows="left|top"
+			layout="topleft"
+			height="23"
+			allow_text_entry="false"
+			top_pad="2"
+			left="6"
+			name="land_category"
+			width="122">
+                <combo_box.item label="All Categories" name="All" value="All"/>
+                <combo_box.item label="Auction" name="Auction" value="Auction"/>
+                <combo_box.item label="Mainland Sales" name="Mainland" value="Mainland"/>
+                <combo_box.item label="Estate Sales" name="Estate" value="Estate"/>
+                <combo_box.commit_callback
+                 function="CommitSearch" />
+		</combo_box>
+		<check_box
+		 control_name="FindLandPrice"
+		 follows="left|top"
+		 height="16"
+		 label="Price &lt;"
+		 layout="topleft"
+		 left_pad="3"
+		 name="price_check"
+		 top_delta="3"
+		 width="40" >
+            <check_box.commit_callback
+             function="CommitSearch" />
+        </check_box>
+		<line_editor
+		 enabled_control="FindLandPrice"
+		 bevel_style="none"
+		 border_style="line"
+		 border.border_thickness="0"
+		 commit_on_focus_lost="false"
+		 follows="left|top"
+		 height="18"
+		 left_pad="20"
+		 name="edit_price"
+		 top_delta="-1"
+		 width="40" >
+            <line_editor.commit_callback
+             function="CommitSearch" />
+        </line_editor>
+		<check_box
+		 control_name="FindLandArea"
+		 follows="left|top"
+		 height="16"
+		 label="Area &gt;"
+		 layout="topleft"
+		 left_pad="3"
+		 name="area_check"
+		 top_delta="1"
+		 width="40" >
+            <check_box.commit_callback
+             function="CommitSearch" />
+        </check_box>
+		<line_editor
+		enabled_control="FindLandArea"
+		bevel_style="none"
+		border_style="line"
+		border.border_thickness="0"
+		commit_on_focus_lost="false"
+		follows="left|top"
+		height="18"
+		left_pad="20"
+		name="edit_area"
+		top_delta="-1"
+		width="40" >
+            <line_editor.commit_callback
+             function="CommitSearch" />
+        </line_editor>
+		<text
+         type="string"
+         length="1"
+         follows="left|top"
+         layout="topleft"
+         left="365"
+         name="sort_text"
+         top="12"
+         height="16"
+         width="98">
+         Sort results by:
+		</text>
+		<check_box
+         follows="left|top"
+         height="16"
+         label="Ascending"
+         layout="topleft"
+         left_pad="3"
+         name="ascending_check"
+         width="100" >
+            <check_box.commit_callback
+             function="CommitSearch" />
+        </check_box>
+		<combo_box
+         follows="left|top"
+         layout="topleft"
+         height="23"
+         allow_text_entry="false"
+         left_delta="-102"
+         top_pad="1"
+         name="land_sort_combo"
+         width="118">
+			<combo_box.item label="Name" name="Name_item" value="Name"/>
+			<combo_box.item label="Price" name="Price_item" value="Price"/>
+			<combo_box.item label="Price per meter" name="PPM_item" value="PPM"/>
+			<combo_box.item label="Area" name="Area_item" value="Area"/>
+            <combo_box.commit_callback
+             function="CommitSearch" />
+		</combo_box>
+		<button
+		 follows="top|right"
+		 height="23"
+		 label="Search"
+		 layout="topleft"
+		 left="678"
+		 top_delta="0"
+		 name="land_find"
+		 width="100" />
+	</panel>
+	<!-- Search Pane -->
+	<panel
+     border="true"
+     follows="all"
+     height="510"
+     layout="topleft"
+     left="1"
+     width="410"
+     top_pad="1"
+     name="panel_ls_scrolllist">
+		<scroll_list
+         draw_heading="true"
+         follows="all"
+         height="485"
+         layout="topleft"
+         left="0"
+         name="search_results_land"
+         top="0"
+         width="410">
+			<columns
+			 label=""
+			 name="icon"
+			 width="20" />
+			 <columns
+			 label="Name"
+			 name="land_name"
+			 relwidth="0.45" />
+			<columns
+			 label="Price"
+			 name="price"
+			 relwidth="0.1" />
+            <columns
+			 label="Area"
+			 name="area"
+			 relwidth="0.1" />
+            <columns
+			 label="L$/m"
+			 name="ppm"
+			 relwidth="0.1" />
+			<columns
+			 label="Type"
+			 name="land_type"
+			 relwidth="0.2" />
+		</scroll_list>
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Back"
+		 name="land_back"
+		 top_pad="2"
+		 left="3"
+		 width="100" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Next"
+		 name="land_next"
+		 width="100"
+		 left_pad="1" />
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_people.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_people.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28df02a7e3ced559795525a87414e0945231b539
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_people.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+	border="false"
+	follows="all"
+	height="566"
+	layout="topleft"
+	left="1"
+	width="780"
+	label="People"
+	name="panel_ls_people">
+	<panel
+		border="false"
+		follows="top|left|right"
+		height="53"
+		layout="topleft"
+		left="0"
+		width="780"
+		name="panel_ls_input">
+		<text
+			type="string"
+			length="1"
+			follows="left|top"
+			top_pad="5"
+			layout="topleft"
+			left="6"
+			name="search_text"
+			top="12"
+			height="16"
+			width="156">
+			Enter search terms:
+		</text>
+		<search_combo_box
+		layout="topleft"
+		follows="left|top|right"
+		height="23"
+		left_delta="0"
+		name="people_edit"
+		top="29"
+		width="770">
+		</search_combo_box>
+	</panel>
+	<!-- Search Pane -->
+	<panel
+		border="true"
+		follows="all"
+		height="510"
+		layout="topleft"
+		left="1"
+		width="410"
+		top_pad="1"
+		name="panel_ls_scrolllist">
+		<scroll_list
+			content_type="Agents"
+			draw_heading="true"
+			follows="all"
+			height="485"
+			layout="topleft"
+			left="0"
+			name="search_results_people"
+			top="0"
+			width="410">
+			<columns
+			label=""
+			name="icon"
+			width="20" />
+			<columns
+			label="Name"
+			name="username"
+			relwidth="1" />
+		</scroll_list>
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Back"
+		name="people_back"
+		top_pad="2"
+		left="3"
+		width="100" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Next"
+		name="people_next"
+		width="100"
+		left_pad="1" />
+	</panel>
+</panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_places.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_places.xml
new file mode 100644
index 0000000000000000000000000000000000000000..09c142b8fc18688df44226384e6e7ae8a28a72ca
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_places.xml
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="false"
+ follows="all"
+ height="566"
+ layout="topleft"
+ left="1"
+ width="780"
+ label="Places"
+ name="panel_ls_places">
+	<panel
+	 border="false"
+	 follows="top|left|right"
+	 height="53"
+	 layout="topleft"
+	 left="0"
+	 width="780"
+	 name="panel_ls_input">
+		<text
+		 type="string"
+		 length="1"
+		 follows="left|top"
+		 top_pad="5"
+		 layout="topleft"
+		 left="6"
+		 name="search_text"
+		 top="12"
+		 height="16"
+		 width="156">
+		Enter search terms:
+		</text>
+		<search_combo_box
+		 layout="topleft"
+		 follows="left|top|right"
+		 height="23"
+		 left_delta="0"
+		 name="places_edit"
+		 top="29"
+		 width="651" />
+		<combo_box
+		 follows="right|top"
+		 layout="topleft"
+		 height="23"
+		 allow_text_entry="false"
+		 top_delta="0"
+		 left_pad="2"
+		 name="places_category"
+		 width="122">
+			<combo_box.commit_callback
+			 function="CommitSearch" />
+		</combo_box>
+		<check_box
+ 		 control_name="ShowPGSims"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left="660"
+		 name="pg_all"
+		 top="12"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_PG_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_general"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowMatureSims"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="mature_all"
+		 top_delta="1"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_M_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_moderate"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowAdultSims"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="adult_all"
+		 top_delta="1"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_R_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_adult"
+		 top_delta="-1"
+		 width="18"/>
+	</panel>
+	<!-- Search Pane -->
+	<panel
+	 border="true"
+	 follows="all"
+	 height="510"
+	 layout="topleft"
+	 left="1"
+	 width="410"
+	 top_pad="1"
+	 name="panel_ls_scrolllist">
+		<scroll_list
+		 draw_heading="true"
+		 follows="all"
+		 height="485"
+		 layout="topleft"
+		 left="0"
+		 name="search_results_places"
+		 top="0"
+		 width="410">
+			<columns
+			 label=""
+			 name="icon"
+			 width="20" />
+			<columns
+			 label="Name"
+			 name="place_name"
+			 relwidth="0.81" />
+			<columns
+			 label="Traffic"
+			 name="dwell"
+			 relwidth="0.16" />
+		</scroll_list>
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Back"
+		 name="places_back"
+		 top_pad="2"
+		 left="3"
+		 width="100" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Next"
+		 name="places_next"
+		 width="100"
+		 left_pad="1" />
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_web.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_web.xml
new file mode 100644
index 0000000000000000000000000000000000000000..382a5e8945eafd325fbbb81c5225acdb8c52edc9
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_web.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+border="false"
+follows="all"
+height="566"
+layout="topleft"
+left="1"
+width="780"
+label="Websearch"
+name="panel_ls_web">
+	<web_browser
+	 top="5"
+	 bottom="-1"
+	 left="5"
+	 right="-5"
+	 layout="topleft"
+	 follows="all"
+	 name="search_browser"
+	 trusted_content="true"
+	 start_url="about:blank" />
+</panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
deleted file mode 100644
index 06ac5450355ecd17dfee5382f556351dfcd38590..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?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="panel_pick_info"
- help_topic="profile_pick_info"
- top="0"
- width="333">
-    <button
-     follows="top|left"
-     height="24"
-     image_hover_unselected="BackButton_Over"
-     image_pressed="BackButton_Press"
-     image_unselected="BackButton_Off"
-     layout="topleft"
-     name="back_btn"
-     left="10"
-     tab_stop="false"
-     top="2"
-     width="30"
-     use_draw_context_alpha="false" />
-    <text
-     follows="top|left|right"
-     font="SansSerifHugeBold"
-     height="26"
-     layout="topleft"
-     left_pad="4"
-     name="title"
-     text_color="LtGray"
-     top="2"
-     value="Pick Info"
-     use_ellipses="true"
-     width="275" />
-    <scroll_container
-     color="PanelDefaultBackgroundColor"
-     opaque="true"
-     follows="all"
-     height="503"
-     layout="topleft"
-     left="8"
-     top_pad="10"
-     name="profile_scroll"
-     width="312">
-    <panel
-     name="scroll_content_panel"
-     follows="left|top|right"
-     min_height="300"
-     layout="topleft"
-     top="0"
-     background_visible="false"
-     height="400"
-     left="0"
-     width="285">
-        <texture_picker
-         fallback_image="default_land_picture.j2c"
-         enabled="false"
-         follows="left|top|right"
-         height="197"
-         layout="topleft"
-         left="11"
-         name="pick_snapshot"
-         top="10"
-         width="272" />
-        <text_editor
-         allow_scroll="false"
-         bg_visible="false"
-         follows="left|top|right"
-         h_pad="0"
-         height="35"
-         width="280"
-         layout="topleft"
-         font="SansSerifBig"
-         font.style="BOLD"
-         left="10"
-         top_pad="10"
-         name="pick_name"
-         read_only="true"
-         text_color="white"
-         v_pad="0"
-         value="[name]"
-         use_ellipses="true" />
-        <text_editor
-         allow_scroll="false"
-         bg_visible="false"
-         follows="left|top|right"
-         h_pad="0"
-         height="25"
-         layout="topleft"
-         left="10"
-         name="pick_location"
-         read_only="true"
-         width="280"
-         word_wrap="true"
-         v_pad="0"
-         value="[loading...]" />
-        <text_editor
-         bg_readonly_color="DkGray2"
-         follows="all"
-         height="100"
-         width="280"
-         parse_urls="true"	
-         layout="topleft"
-         left="10"
-         top_pad="2"
-         max_length="1023"
-         name="pick_desc"
-         read_only="true"
-         text_readonly_color="white"
-         value="[description]"
-         wrap="true" />
-    </panel>
-    </scroll_container>
-    <panel
-     follows="left|right|bottom"
-     height="23"
-     layout="topleft"
-     top_pad="5"
-     left="8"
-     name="buttons">
-       
-       <layout_stack
-		  follows="bottom|left|right"
-		  height="23"
-		  layout="topleft"
-		  name="layout_stack1"
-		  left="0"
-		  orientation="horizontal"
-		  top_pad="0"
-		  width="312">
-		  
-		  <layout_panel
-			  follows="bottom|left|right"
-			  height="23"
-			  layout="bottomleft"
-			  left="0"
-			  name="layout_panel1"
-		      auto_resize="true"
-			  width="101">
-			  <button
-			  	 follows="bottom|left|right"
-		         height="23"
-		         label="Teleport"
-		         layout="topleft"
-		         name="teleport_btn"
-		         top="0"
-		         width="101" />
-		  </layout_panel>
-		  
-		  <layout_panel
-			  follows="bottom|left|right"
-			  height="23"
-			  layout="bottomleft"
-			  left_pad="3"
-			  name="show_on_map_btn_lp"
-		      auto_resize="true"
-			  width="100">
-			  <button
-		         follows="bottom|left|right"
-		         height="23"
-		         label="Map"
-		         layout="topleft"
-		         name="show_on_map_btn"
-		         top_pad="0"
-		         width="100" />
-		  </layout_panel>	  
-		  
-		  <layout_panel
-			  follows="bottom|left|right"
-			  height="23"
-			  layout="bottomleft"
-			  left_pad="3"
-			  name="edit_btn_lp"
-		      auto_resize="true"
-			  width="101">
-			  <button
-		         follows="bottom|left|right"
-		         height="23"
-		         label="Edit"
-		         layout="topleft"
-		         name="edit_btn"
-		         top_pad="0"
-		         width="101" />
-		  </layout_panel>
-	   </layout_stack>
-    </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_profile_legacy_firstlife.xml b/indra/newview/skins/default/xui/en/panel_profile_legacy_firstlife.xml
deleted file mode 100644
index 8e32d3e70191945d8b61f5506f63186aa9ea727f..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_profile_legacy_firstlife.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- label="First Life"
- height="360"
- width="304"
- name="avatar_firstlife_tab">
-  <panel
-   name="avatar_info_top"
-   follows="top|left|right"
-   top="0"
-   left="0"
-   height="129"
-   width="304"
-   layout="topleft">
-    <texture_picker
-     default_image_name="Generic_Person_Large"
-     fallback_image="Generic_Person_Large"
-     follows="left|top"
-     height="143"
-     label=""
-     layout="topleft"
-     left="5"
-     name="fl_profile_pic"
-     no_commit_on_selection="true"
-     tool_tip="Click to choose a picture"
-     top="6"
-     width="120" />
-  </panel>
-  <text_editor
-   type="string"
-   follows="all"
-   left="3"
-   height="200"
-   layout="topleft"
-   max_length="65000"
-   name="fl_about"
-   top="134"
-   right="-4"
-   bg_readonly_color="DkGray2"
-   text_readonly_color="White"
-   commit_on_focus_lost="true"
-   word_wrap="true" 
-   show_emoji_helper="true" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_profile_legacy_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_profile_legacy_group_list_item.xml
deleted file mode 100644
index ed0b4a8825ed949560b73303ee90184e9eebd7c3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_profile_legacy_group_list_item.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- bevel_style="none"
- follows="top|left|right"
- height="85"
- layout="topleft"
- left="0"
- name="panel_group_item"
- top="0"
- width="313">
-  <icon
-   follows="all"
-   height="85"
-   image_name="ListItem_Over"
-   right="-2"
-   mouse_opaque="false"
-   name="hovered_icon"
-   top="1"
-   scale_image="true"
-   visible="false"
-   width="308"/>
-  <icon
-   follows="all"
-   height="85"
-   image_name="ListItem_Select"
-   right="-2"
-   mouse_opaque="false"
-   name="selected_icon"
-   top="1"
-   scale_image="true"
-   visible="false"
-   width="308"/>
-  <texture_picker
-   allow_no_texture="true"
-   fallback_image="Generic_Group_Large"
-   enabled="false"
-   follows="left|top"
-   height="80"
-   layout="topleft"
-   left="10"
-   mouse_opaque="false"
-   name="picture"
-   tab_stop="false"
-   top="10"
-   top_pad="10"
-   width="90" />
-  <text
-   follows="top|left|right"
-   font="SansSerifSmall"
-   height="15"
-   layout="topleft"
-   left="110"
-   name="name"
-   text_color="white"
-   top="9"
-   use_ellipses="true"
-   width="193"
-   word_wrap="false" />
-  <expandable_text
-   follows="top|left|right"
-   font="SansSerifSmall"
-   height="55"
-   layout="topleft"
-   left="103"
-   name="description"
-   textbox.max_length="1024"
-   textbox.show_context_menu="false"
-   textbox.word_wrap="true"
-   top_pad="0"
-   width="178" />
-  <button
-   follows="right"
-   height="20"
-   image_overlay="ForwardArrow_Off"
-   layout="topleft"
-   left_pad="5"
-   right="-8"
-   name="info_chevron"
-   top_delta="24"
-   width="20" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_profile_legacy_groups.xml b/indra/newview/skins/default/xui/en/panel_profile_legacy_groups.xml
deleted file mode 100644
index b09eaa02455a50b3f59ce5087bfb0b54ff63c22e..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_profile_legacy_groups.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- bg_opaque_color="PanelDefaultBackgroundColor"
- background_visible="true"
- background_opaque="true"
- follows="all"
- height="360"
- label="Groups"
- layout="topleft"
- left="0"
- name="panel_profile_groups"
- top_pad="0"
- width="304">
- <text
-  type="string"
-  follows="all"
-  height="35"
-  layout="topleft"
-  left="6"
-  right="-6"
-  name="groups_panel_text"
-  wrap="true"
-  top="10">
- No Groups
- </text>
- <flat_list_view
-  color="PanelDefaultBackgroundColor"
-  follows="all"
-  layout="topleft"
-  left="0"
-  right="-1"
-  name="groups_detail_list"
-  opaque="true"
-  top="0"
-  height="360" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_profile_legacy_interests.xml b/indra/newview/skins/default/xui/en/panel_profile_legacy_interests.xml
deleted file mode 100644
index a99e004b599838c74ea628b56ef6f4782972eebe..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_profile_legacy_interests.xml
+++ /dev/null
@@ -1,254 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- label="Interests"
- height="360"
- width="304"
- name="avatar_interests_tab">
-  <text
-   font="SansSerifSmall"
-   text_color="White_50"
-   width="190"
-   follows="top|left|right"
-   layout="topleft"
-   mouse_opaque="false"
-   type="string"
-   height="16"
-   length="1"
-   left="3"
-   name="i_want_label"
-   top="2">
-   I want to:
-  </text>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Build"
-   layout="topleft"
-   top_pad="4"
-   left="25"
-   name="wanna_build"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Explore"
-   layout="topleft"
-   top_delta="0"
-   left_pad="4"
-   name="wanna_explore"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Meet"
-   layout="topleft"
-   top_pad="4"
-   left="25"
-   name="wanna_yiff"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Be Hired"
-   layout="topleft"
-   top_delta="0"
-   left_pad="4"
-   name="wanna_work"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Group"
-   layout="topleft"
-   top_pad="4"
-   left="25"
-   name="wanna_group"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Buy"
-   layout="topleft"
-   top_delta="0"
-   left_pad="4"
-   name="wanna_buy"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Sell"
-   layout="topleft"
-   top_pad="4"
-   left="25"
-   name="wanna_sell"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Hire"
-   layout="topleft"
-   top_delta="0"
-   left_pad="4"
-   name="wanna_hire"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <line_editor
-   top_pad="4"
-   follows="left|top|right"
-   height="20"
-   left="25"
-   text_pad_left="5"
-   name="wanna_something"
-   right="-40">
-    <line_editor.commit_callback
-     function="Profile.CommitInterest" />
-  </line_editor>
-
-  <text
-   font="SansSerifSmall"
-   text_color="White_50"
-   width="190"
-   follows="top|left|right"
-   layout="topleft"
-   mouse_opaque="false"
-   type="string"
-   height="16"
-   length="1"
-   left="3"
-   name="skills_label"
-   top_pad="8">
-   Skills:
-  </text>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Textures"
-   layout="topleft"
-   top_pad="4"
-   left="25"
-   name="can_texture"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Architecture"
-   layout="topleft"
-   top_delta="0"
-   left_pad="4"
-   name="can_architect"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Modeling"
-   layout="topleft"
-   top_pad="4"
-   left="25"
-   name="can_model"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Event Planning"
-   layout="topleft"
-   top_delta="0"
-   left_pad="4"
-   name="can_event"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Scripting"
-   layout="topleft"
-   top_pad="4"
-   left="25"
-   name="can_script"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <check_box
-   height="16"
-   initial_value="false"
-   label="Custom Characters"
-   layout="topleft"
-   top_delta="0"
-   left_pad="4"
-   name="can_characters"
-   width="140">
-    <check_box.commit_callback
-     function="Profile.CommitInterest" />
-  </check_box>
-  <line_editor
-   top_pad="4"
-   follows="left|top|right"
-   height="20"
-   left="25"
-   text_pad_left="5"
-   name="can_something"
-   right="-40">
-    <line_editor.commit_callback
-     function="Profile.CommitInterest" />
-  </line_editor>
-  <text
-   top_pad="8"
-   font="SansSerifSmall"
-   text_color="White_50"
-   width="190"
-   follows="top|left|right"
-   layout="topleft"
-   mouse_opaque="false"
-   type="string"
-   height="16"
-   length="1"
-   left="3"
-   name="language_label" >
-   Languages:
-  </text>
-  <line_editor
-   top_pad="4"
-   follows="left|top|right"
-   height="20"
-   left="25"
-   text_pad_left="5"
-   name="languages"
-   right="-40">
-    <line_editor.commit_callback
-     function="Profile.CommitInterest" />
-  </line_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_profile_legacy_notes.xml b/indra/newview/skins/default/xui/en/panel_profile_legacy_notes.xml
deleted file mode 100644
index 295e001f138c3bb28006b30422e2f745694aaaa8..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_profile_legacy_notes.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- label="Notes"
- height="360"
- width="304"
- name="avatar_notes_tab">
-  <text
-   font="SansSerifSmall"
-   text_color="White_50"
-   width="190"
-   follows="top|left|right"
-   layout="topleft"
-   mouse_opaque="false"
-   type="string"
-   height="16"
-   length="1"
-   left="3"
-   name="notes_label"
-   top="2">
-   Private notes:
-  </text>
-  <text_editor
-   type="string"
-   follows="all"
-   left="3"
-   height="320"
-   layout="topleft"
-   max_length="65530"
-   name="notes"
-   top_pad="4"
-   right="-4"
-   bg_readonly_color="DkGray2"
-   text_readonly_color="White"
-   commit_on_focus_lost="true"
-   word_wrap="true"
-   show_emoji_helper="true" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_profile_legacy_picks.xml b/indra/newview/skins/default/xui/en/panel_profile_legacy_picks.xml
deleted file mode 100644
index 3cd7d825d781e3e66f4581e4939d8ab878c56131..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_profile_legacy_picks.xml
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- bg_opaque_color="PanelDefaultBackgroundColor"
- background_visible="true"
- background_opaque="true"
- follows="all"
- height="360"
- label="Picks"
- layout="topleft"
- left="0"
- name="panel_profile_picks"
- top="0"
- width="304">
- <text
-  type="string"
-  follows="all"
-  height="35"
-  layout="topleft"
-  left="6"
-  right="-6"
-  name="picks_panel_text"
-  wrap="true"
-  top="10">
- No Picks
- </text>
- <accordion
-  fit_parent="true" 
-  follows="all"
-  height="332"
-  layout="topleft"
-  left="0"
-  right="-1"
-  name="accordion"
-  top="0"
-  single_expansion="true">
-   <accordion_tab
-    layout="topleft"
-    height="101"
-    min_height="150"
-    name="tab_picks"
-    title="Picks"
-    visible="true">
-     <flat_list_view
-      color="PanelDefaultBackgroundColor"
-      follows="all"
-      layout="topleft"
-      left="0"
-      name="picks_list"
-      opaque="true"
-      top="0"
-      width="313" />
-   </accordion_tab>
-   <accordion_tab
-    layout="topleft"
-    height="101"
-    name="tab_classifieds"
-    title="Classifieds"
-    visible="true">
-     <flat_list_view
-      color="PanelDefaultBackgroundColor"
-      follows="all"
-      layout="topleft"
-      left="0"
-      name="classifieds_list"
-      opaque="true"
-      top="0"
-      width="313" />
-    </accordion_tab>
-  </accordion>
-  <panel
-   bg_opaque_color="PanelDefaultBackgroundColor"
-   background_visible="true"
-   background_opaque="true"
-   follows="bottom|left|right"
-   layout="topleft"
-   left="0"
-   height="30"
-   name="buttons_cucks"
-   top_pad="0"
-   width="304">
-    <layout_stack
-     follows="bottom|left|right"
-     height="28"
-     layout="topleft"
-     left="2"
-     name="buttons_cucks_ls"
-     orientation="horizontal"
-     top="0"
-     width="304">
-		  <layout_panel
-       follows="bottom|left|right"
-       height="28"
-       layout="topleft"
-       left="0"
-       name="info_btn_lp"
-       auto_resize="true"
-       top="0"
-       width="95">
-        <button
-         enabled="false"
-         follows="top|left|right"
-         height="23"
-         label="Info"
-         layout="topleft"
-         name="info_btn"
-         tab_stop="false"
-         tool_tip="Show pick information"
-         width="95" />
-		  </layout_panel>
-		  <layout_panel
-       follows="bottom|left|right"
-       height="28"
-       layout="bottomleft"
-       left_pad="2"
-       name="teleport_btn_lp"
-       auto_resize="true"
-       width="117">
-        <button
-         enabled="false"
-         follows="top|left|right"
-         height="23"
-         label="Teleport"
-         layout="topleft"
-         name="teleport_btn"
-         tab_stop="false"
-         tool_tip="Teleport to the corresponding area"
-         width="117" />
-		  </layout_panel>
-		  <layout_panel
-       follows="bottom|left|right"
-       height="28"
-       layout="bottomleft"
-       name="show_on_map_btn_lp"
-       auto_resize="true"
-       left_pad="2"
-       width="90">
-        <button
-         enabled="false"
-         follows="top|left|right"
-         height="23"
-         label="Map"
-         layout="topleft"
-         name="show_on_map_btn"
-         tab_stop="false"
-         tool_tip="Show the corresponding area on the World Map"
-         width="88" />
-		  </layout_panel>
-	  </layout_stack>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_profile_legacy_secondlife.xml b/indra/newview/skins/default/xui/en/panel_profile_legacy_secondlife.xml
deleted file mode 100644
index 13560cd0f10c755a59075e040c7d2c6ab7318f48..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_profile_legacy_secondlife.xml
+++ /dev/null
@@ -1,308 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- follows="all"
- label="Second Life"
- height="360"
- width="304"
- class="panel_avatar_secondlife"
- name="avatar_secondlife_tab">
-  <layout_stack
-    follows="all"
-    animate="false"
-    top="0"
-    height="360"
-    left="0"
-    width="304"
-    layout="topleft"
-    orientation="vertical"
-    show_drag_handle="false">
-    <layout_panel
-     name="avatar_info_top"
-     follows="top|left|right"
-     top="0"
-     left="0"
-     height="125"
-     right="-1"
-     auto_resize="false"
-     layout="topleft">
-      <texture_picker
-       default_image_name="Generic_Person_Large"
-       fallback_image="Generic_Person_Large"
-       follows="left|top"
-       height="143"
-       label=""
-       layout="topleft"
-       left="5"
-       name="sl_profile_pic"
-       no_commit_on_selection="true"
-       tool_tip="Click to choose a picture"
-       top="0"
-       width="120" />
-      <text
-       font="SansSerifSmall"
-       text_color="White_50"
-       width="87"
-       follows="top|left"
-       layout="topleft"
-       mouse_opaque="false"
-       type="string"
-       height="16"
-       length="1"
-       left="129"
-       name="rezday_label"
-       top_delta="0">
-        Born:
-      </text>
-      <icon
-       height="16"
-       width="16"
-       visible="false"
-       image_name="Cake"
-       tool_tip="Happy rezday"
-       mouse_opaque="true"
-       name="cake"
-       left_pad="2" />
-      <text
-       font="SansSerifSmall"
-       text_color="ProfileOnlineIndicatorColor"
-       width="57"
-       follows="right|top"
-       layout="topleft"
-       mouse_opaque="false"
-       type="string"
-       height="16"
-       length="1"
-       right="-15"
-       name="online"
-       top_delta="0" >
-        Online
-      </text>
-      <icon
-       follows="right|top"
-       height="14"
-       visible="false"
-       image_name="AccountLevel_Internal"
-       layout="topleft"
-       right="-1"
-       top_delta="0"
-       mouse_opaque="false"
-       name="account_type_internal"
-       width="14" />
-      <icon
-       follows="right|top"
-       height="14"
-       visible="false"
-       image_name="AccountLevel_Premium"
-       layout="topleft"
-       right="-1"
-       top_delta="0"
-       mouse_opaque="false"
-       name="account_type_premium"
-       width="14" />
-      <icon
-       follows="right|top"
-       height="14"
-       visible="false"
-       image_name="AccountLevel_Plus"
-       layout="topleft"
-       right="-1"
-       top_delta="0"
-       mouse_opaque="false"
-       name="account_type_plus"
-       width="14" />
-      <text
-       font="SansSerifSmall"
-       text_color="White_50"
-       width="175"
-       follows="top|left|right"
-       layout="topleft"
-       mouse_opaque="false"
-       type="string"
-       height="16"
-       length="1"
-       left="129"
-       name="rezday"
-       top_pad="0" >
-        (Unknown)
-      </text>
-      <text
-       font="SansSerifSmall"
-       text_color="White_50"
-       width="175"
-       follows="top|left|right"
-       layout="topleft"
-       mouse_opaque="false"
-       type="string"
-       height="48"
-       length="1"
-       left_delta="0"
-       name="account_info"
-       top_pad="2" />
-      <text
-       font="SansSerifSmall"
-       text_color="White_50"
-       width="175"
-       follows="top|left|right"
-       layout="topleft"
-       mouse_opaque="false"
-       type="string"
-       height="16"
-       length="1"
-       left_delta="0"
-       name="partner_label"
-       top_pad="2">
-        Partner:
-      </text>
-      <text
-       font="SansSerifSmall"
-       text_color="White_50"
-       width="175"
-       follows="top|left|right"
-       layout="topleft"
-       mouse_opaque="false"
-       type="string"
-       height="16"
-       length="1"
-       left_delta="0"
-       name="partner_info"
-       top_pad="2">
-        secondlife:///app/agent/00000000-0000-0000-0000-000000000000/inspect
-      </text>
-    </layout_panel>
-    <layout_panel
-      name="avatar_desc"
-      follows="top|left|right"
-      top_pad="1"
-      left="0"
-      height="125"
-      width="304"
-      auto_resize="true"
-      layout="topleft">
-      <text_editor
-       type="string"
-       follows="all"
-       left="3"
-       layout="topleft"
-       max_length="65000"
-       name="sl_about"
-       top="0"
-       bottom="-20"
-       right="-4"
-       bg_readonly_color="DkGray2"
-       text_readonly_color="White"
-       commit_on_focus_lost="true"
-       word_wrap="true" 
-	   show_emoji_helper="true" />
-      <text
-       font="SansSerifSmall"
-       text_color="White_50"
-       follows="bottom|left|right"
-       layout="topleft"
-       mouse_opaque="false"
-       type="string"
-       height="16"
-       length="1"
-       left="3"
-       right="-4"
-       name="www"
-       top_pad="2" />
-      <line_editor
-        top_delta="-2"
-        follows="left|bottom|right"
-        layout="topleft"
-        height="20"
-        max_length_chars="254"
-        left="2"
-        right="-4"
-        text_pad_left="5"
-        tool_tip="Website link"
-        name="www_edit">
-        <line_editor.commit_callback
-          function="Profile.CommitProperties" />
-      </line_editor>
-    </layout_panel>
-    <layout_panel
-      visible="true"
-      name="avatar_perm"
-      follows="top|left|right"
-      top_pad="1"
-      left="0"
-      height="74"
-      width="304"
-      auto_resize="false"
-      layout="topleft">
-      <text
-       font="SansSerifSmall"
-       text_color="White_50"
-       width="190"
-       follows="top|left"
-       layout="topleft"
-       mouse_opaque="false"
-       type="string"
-       height="16"
-       length="1"
-       left="3"
-       name="permissions_label"
-       top_pad="2">
-        Allow this avatar to:
-      </text>
-      <check_box
-       height="16"
-       initial_value="false"
-       label="See when I am online"
-       layout="topleft"
-       top_pad="4"
-       left="5"
-       name="allow_show_online"
-       width="150">
-        <check_box.commit_callback
-         function="Profile.CommitRights" />
-      </check_box>
-      <check_box
-       height="16"
-       initial_value="false"
-       label="Find me on the world map"
-       layout="topleft"
-       top_pad="2"
-       name="allow_mapping"
-       width="150">
-        <check_box.commit_callback
-         function="Profile.CommitRights" />
-      </check_box>
-      <check_box
-       height="16"
-       initial_value="false"
-       label="Edit, delete, or take my objects"
-       layout="topleft"
-       top_pad="2"
-       name="allow_object_perms"
-       width="150">
-        <check_box.commit_callback
-         function="Profile.CommitModifyObjectRights" />
-      </check_box>
-    </layout_panel>
-    <layout_panel
-      visible="false"
-      name="avatar_in_search"
-      follows="top|left|right"
-      top_pad="1"
-      left="0"
-      height="18"
-      width="304"
-      auto_resize="false"
-      layout="topleft">
-      <check_box
-       height="16"
-       initial_value="true"
-       label="Show in search"
-       layout="topleft"
-       top_pad="0"
-       left="5"
-       name="allow_publish"
-       width="150">
-        <check_box.commit_callback
-         function="Profile.CommitProperties" />
-      </check_box>
-    </layout_panel>
-  </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_profile_legacy_sidetray.xml b/indra/newview/skins/default/xui/en/panel_profile_legacy_sidetray.xml
deleted file mode 100644
index 8d4a3a2e504acf80ff2ace8a320d6f6e3e3db52f..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_profile_legacy_sidetray.xml
+++ /dev/null
@@ -1,311 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- bg_opaque_color="PanelDefaultBackgroundColor"
- background_opaque="true"
- background_visible="true"
- follows="all"
- height="570"
- label="Profile"
- layout="topleft"
- min_height="350"
- left="0"
- top="20"
- name="Avatar Profile"
- width="313">
-  <panel.string
-   name="account_info_fmt">
-[ACCOUNT_TYPE]
-[PAYMENT_INFO]
-[AGE_VERIFIED]
-  </panel.string>
-  <panel.string
-   name="age_verified">
-Age Verified
-  </panel.string>
-  <panel.string
-   name="rezday_fmt">
-[REZDAY] ([AGE])
-  </panel.string>
-  <panel.string
-   name="add_friend">
-Add Friend
-  </panel.string>
-  <panel.string
-   name="remove_friend">
-Remove Friend
-  </panel.string>
-  <panel
-   name="avatar_info_top"
-   bg_opaque_color="PanelDefaultBackgroundColor"
-   background_visible="true"
-   background_opaque="true"
-   follows="top|left|right"
-   top="0"
-   left="0"
-   height="29"
-   width="313"
-   layout="topleft">
-    <button
-     follows="top|left"
-     height="24"
-     image_hover_unselected="BackButton_Over"
-     image_pressed="BackButton_Press"
-     image_unselected="BackButton_Off"
-     layout="topleft"
-     name="back"
-     left="7"
-     tab_stop="false"
-     top="2"
-     width="30"
-     use_draw_context_alpha="false" />
-    <text_editor
-     allow_scroll="false"
-     bg_visible="false"
-     read_only="true"
-     layout="topleft"
-     name="avatar_name"
-     v_pad="0"
-     value="(Loading...)"
-     font="SansSerifHugeBold"
-     h_pad="0"
-     height="26"
-     left_pad="8"
-     text_color="LtGray"
-     top="1"
-     use_ellipses="true"
-     width="268"
-     follows="top|left|right"
-     word_wrap="false"
-     mouse_opaque="false"/>
-    <loading_indicator
-     height="25"
-     follows="top|right"
-     layout="topleft"
-     left_pad="-32"
-     name="progress_indicator"
-     top_delta="1"
-     width="25" />
-  </panel>
-  <layout_stack
-   name="layout"
-   orientation="vertical"
-   follows="all"
-   left="6"
-   top_pad="0"
-   height="506"
-   width="302"
-   border_size="0">
-    <layout_panel
-     bg_opaque_color="PanelDefaultBackgroundColor"
-     background_visible="true"
-     background_opaque="true"
-     name="avatar_accordions"
-     follows="all"
-     layout="topleft"
-     auto_resize="true"
-     user_resize="true"
-     height="513"
-     width="313">
-      <accordion
-       left="0"
-       top="0"
-       single_expansion="true"
-       fit_parent="true"
-       follows="all"
-       layout="topleft"
-       name="avatar_accordion"
-       height="513"
-       width="313">
-        <accordion_tab
-         expanded="true"
-         layout="topleft"
-         name="avatar_secondlife_tab"
-         title="Second Life"
-         fit_panel="true">
-          <panel
-           border="false"
-           filename="panel_profile_legacy_secondlife.xml"
-           layout="topleft"
-           left="0"
-           follows="all"
-           name="avatar_secondlife_tab_panel"
-           top="0" />
-        </accordion_tab>
-        <accordion_tab
-         expanded="false"
-         layout="topleft"
-         name="avatar_groups_tab"
-         title="Groups"
-         fit_panel="true">
-          <panel
-           border="false"
-           class="panel_profile_legacy_groups"
-           filename="panel_profile_legacy_groups.xml"
-           follows="all"
-           layout="topleft"
-           left="0"
-           name="avatar_groups_tab_panel"
-           top="0" />
-        </accordion_tab>
-        <accordion_tab
-         expanded="false"
-         layout="topleft"
-         name="avatar_picks_tab"
-         title="Picks"
-         fit_panel="true">
-          <panel
-           border="false"
-           class="panel_profile_legacy_picks"
-           filename="panel_profile_legacy_picks.xml"
-           follows="all"
-           layout="topleft"
-           left="0"
-           name="avatar_picks_tab_panel"
-           top="0" />
-        </accordion_tab>
-        <accordion_tab
-         expanded="false"
-         layout="topleft"
-         name="avatar_firstlife_tab"
-         title="First Life"
-         fit_panel="true">
-          <panel
-           border="false"
-           filename="panel_profile_legacy_firstlife.xml"
-           follows="left|top|right"
-           layout="topleft"
-           left="0"
-           name="avatar_firstlife_tab_panel"
-           top="0" />
-        </accordion_tab>
-        <accordion_tab
-         expanded="false"
-         layout="topleft"
-         name="avatar_notes_tab"
-         title="Notes"
-         fit_panel="true">
-          <panel
-           border="false"
-           filename="panel_profile_legacy_notes.xml"
-           follows="all"
-           layout="topleft"
-           left="0"
-           name="avatar_notes_tab_panel"
-           top="0" />
-        </accordion_tab>
-      </accordion>
-    </layout_panel>
-  </layout_stack>
-
-  <layout_stack
-   follows="bottom|left|right"
-   height="25"
-   layout="topleft"
-   name="button_row_ls"
-   left="6"
-   orientation="horizontal"
-   top_pad="5"
-   width="299">
-    <layout_panel
-     follows="bottom|left|right"
-     height="23"
-     layout="bottomleft"
-     left="0"
-     name="btn_chat_lp"
-     auto_resize="true"
-     width="91">
-      <button
-       follows="bottom|left|right"
-       left="1"
-       height="23"
-       name="btn_chat"
-       label="Chat"
-       layout="topleft"
-       tool_tip="Send an instant message"
-       top="0"
-       width="90">
-        <button.commit_callback
-         function="Profile.Action"
-         parameter="chat" />
-      </button>
-    </layout_panel>
-    <layout_panel
-     follows="bottom|left|right"
-     height="23"
-     layout="bottomleft"
-     left_pad="3"
-     name="btn_friend_lp"
-     auto_resize="true"
-     width="91">
-      <button
-       follows="bottom|left|right"
-       left="1"
-       height="23"
-       name="btn_friend"
-       label="Add Friend"
-       layout="topleft"
-       top="0"
-       width="90">
-        <button.commit_callback
-         function="Profile.Action"
-         parameter="friend" />
-      </button>
-    </layout_panel>
-    <layout_panel
-     follows="bottom|left|right"
-     height="23"
-     layout="bottomleft"
-     left_pad="3"
-     name="btn_block_lp"
-     auto_resize="true"
-     width="91">
-      <button
-       follows="bottom|left|right"
-       left="1"
-       height="23"
-       name="btn_block"
-       label="Block"
-       layout="topleft"
-       tool_tip="Block this avatar"
-       top="0"
-       width="90">
-        <button.commit_callback
-         function="Profile.Action"
-         parameter="block" />
-      </button>
-    </layout_panel>
-    <layout_panel
-     follows="bottom|left|right"
-     height="23"
-     layout="bottomleft"
-     left_pad="3"
-     name="btn_menu_lp"
-     auto_resize="false"
-     width="30">
-    <menu_button
-     follows="bottom|left|right"
-     height="23"
-     image_hover_unselected="Toolbar_Middle_Over"
-     image_overlay="OptionsMenu_Off"
-     image_selected="Toolbar_Middle_Selected"
-     image_unselected="Toolbar_Middle_Off"
-     menu_filename="menu_profile_legacy.xml"
-     menu_position="bottomleft"
-     tool_tip="Actions on this avatar"
-     layout="topleft"
-     left="1"
-     top="0"
-     name="btn_menu"
-     width="30" />
-    </layout_panel>
-  </layout_stack>
-  <drop_target
-   top="0"
-   bottom="-1"
-   left="0"
-   right="-1"
-   layout="topleft"
-   follows="all"
-   name="drop_target"
-   mouse_opaque="false" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_classifieds.xml b/indra/newview/skins/default/xui/en/panel_search_classifieds.xml
deleted file mode 100644
index a865121b618f1e72219ca92d89f24058d41cd9cd..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_search_classifieds.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="70"
- layout="topleft"
- name="panel_search_classifieds"
- width="602"
- default_tab_group="2">
-  <text
-   follows="left|top|right"
-   height="16"
-   layout="topleft"
-   left="4"
-   name="search_title"
-   top="4"
-   value="Enter search terms:"
-   width="255" />
-  <check_box
-   control_name="ShowPGClassifieds"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left="489"
-   name="pg_all"
-   top="4"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_PG_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_general"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowMatureClassifieds"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="mature_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_M_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_moderate"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowAdultClassifieds"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="adult_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_R_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_adult"
-   top_delta="-1"
-   width="18"/>
-  <search_editor
-   tab_group="2"
-   follows="top|left|right"
-   search_button_visible="true"
-   height="22"
-   text_readonly_color="DkGray"
-   label="Search"
-   layout="topleft"
-   top_pad="1"
-   left="4"
-   right="-128"
-   name="search_bar"
-   select_on_focus="true"
-   commit_on_focus_lost="false"
-   tool_tip="Enter search terms">
-    <search_editor.commit_callback
-     function="Search.query" />
-  </search_editor>
-  <combo_box
-   follows="right|top"
-   layout="topleft"
-   height="23"
-   allow_text_entry="false"
-   top_delta="0"
-   left_pad="2"
-   name="classifieds_category"
-   width="122">
-    <combo_box.commit_callback
-     function="Search.query" />
-  </combo_box>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_events.xml b/indra/newview/skins/default/xui/en/panel_search_events.xml
deleted file mode 100644
index 407eaf6486a0fc4d24a03b249002f89c7274f1fe..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_search_events.xml
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="70"
- layout="topleft"
- name="panel_search_events"
- width="602"
- default_tab_group="2">
-  <text
-   follows="left|top"
-   height="16"
-   layout="topleft"
-   left="4"
-   name="search_title"
-   top="4"
-   value="Enter search terms:"
-   width="128" />
-  <radio_group
-   top_delta="0"
-   left="130"
-   height="16"
-   width="230"
-   layout="topleft"
-   initial_value="current"
-   name="events_search_mode">
-    <radio_item
-     height="16"
-     label="Ongoing and Upcoming"
-     layout="topleft"
-     name="current"
-     value="current"
-     top_pad="0"
-     width="120" />
-    <radio_item
-     height="16"
-     label="By Date"
-     layout="topleft"
-     name="date"
-     value="date"
-     left_pad="40"
-     width="120" />
-    <radio_group.commit_callback
-     function="Search.query" />
-  </radio_group>
-  <button
-   follows="top|left"
-   height="16"
-   width="16"
-   image_unselected="MinusItem_Off"
-   image_disabled="MinusItem_Disabled"
-   image_selected="MinusItem_Press"
-   image_pressed="MinusItem_Press"
-   image_top_pad="0"
-   layout="topleft"
-   left_pad="14"
-   name="minus_day"
-   top_delta="0">
-    <button.commit_callback
-     function="Search.MinusDay" />
-  </button>
-  <text
-   type="string"
-   length="1"
-   follows="left|top"
-   top_delta="0"
-   layout="topleft"
-   left_pad="5"
-   name="events_date"
-   font.style="BOLD"
-   height="16"
-   width="40"
-   value="4/20" />
-  <button
-   follows="top|left"
-   height="16"
-   width="16"
-   image_unselected="AddItem_Off"
-   image_disabled="AddItem_Disabled"
-   image_selected="AddItem_Press"
-   image_pressed="AddItem_Press"
-   image_top_pad="0"
-   layout="topleft"
-   left_pad="5"
-   name="plus_day"
-   top_delta="0">
-    <button.commit_callback
-     function="Search.AddDay" />
-  </button>
-  <check_box
-   control_name="ShowPGEvents"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left="489"
-   name="pg_all"
-   top="4"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_PG_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_general"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowMatureEvents"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="mature_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_M_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_moderate"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowAdultEvents"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="adult_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_R_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_adult"
-   top_delta="-1"
-   width="18"/>
-  <search_editor
-   tab_group="2"
-   follows="top|left|right"
-   search_button_visible="true"
-   height="22"
-   text_readonly_color="DkGray"
-   label="Search"
-   layout="topleft"
-   top_pad="1"
-   left="4"
-   right="-128"
-   name="search_bar"
-   select_on_focus="true"
-   commit_on_focus_lost="false"
-   tool_tip="Enter search terms">
-    <search_editor.commit_callback
-     function="Search.query" />
-  </search_editor>
-  <combo_box
-   follows="right|top"
-   layout="topleft"
-   height="23"
-   allow_text_entry="false"
-   top_delta="0"
-   left_pad="2"
-   name="events_category"
-   width="122">
-    <combo_box.item label="Any Category" name="any" value="0" />
-    <combo_box.item label="" value="filter_separator" enabled="false" />
-    <combo_box.item label="Discussion" name="discussion" value="18" />
-    <combo_box.item label="Sports" name="sports" value="19" />
-    <combo_box.item label="Live Music" name="music" value="20" />
-    <!-- <combo_box.item label="???" name="mystery_category" value="21" /> -->
-    <combo_box.item label="Commercial" name="commercial" value="22" />
-    <combo_box.item label="Nightlife/Entertainment" name="nightlife" value="23" />
-    <combo_box.item label="Games/Contests" name="games" value="24" />
-    <combo_box.item label="Pageants" name="pageants" value="25" />
-    <combo_box.item label="Education" name="education" value="26" />
-    <combo_box.item label="Arts and Culture" name="arts" value="27" />
-    <combo_box.item label="Charity/Support Groups" name="charity" value="28" />
-    <combo_box.item label="Miscellaneous" name="misc" value="29" />
-    <combo_box.commit_callback
-     function="Search.query" />
-  </combo_box>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_groups.xml b/indra/newview/skins/default/xui/en/panel_search_groups.xml
deleted file mode 100644
index 78e531ca2fc354161acaa5df8039b58f59b9fb58..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_search_groups.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="70"
- layout="topleft"
- name="panel_search_groups"
- width="602"
- default_tab_group="2">
-  <text
-   follows="left|top|right"
-   height="16"
-   layout="topleft"
-   left="4"
-   name="search_title"
-   top="4"
-   value="Enter search terms:"
-   width="255" />
-  <check_box
-   control_name="ShowPGGroups"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left="489"
-   name="pg_all"
-   top="4"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_PG_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_general"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowMatureGroups"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="mature_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_M_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_moderate"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowAdultGroups"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="adult_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_R_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_adult"
-   top_delta="-1"
-   width="18"/>
-  <search_editor
-   tab_group="2"
-   follows="top|left|right"
-   search_button_visible="true"
-   height="22"
-   text_readonly_color="DkGray"
-   label="Search"
-   layout="topleft"
-   top_pad="1"
-   left="4"
-   right="-4"
-   name="search_bar"
-   select_on_focus="true"
-   commit_on_focus_lost="false"
-   tool_tip="Enter search terms">
-    <search_editor.commit_callback
-     function="Search.query" />
-  </search_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_landsales.xml b/indra/newview/skins/default/xui/en/panel_search_landsales.xml
deleted file mode 100644
index 982fcdefc9db9a7f7b13f0dcce8582965dc748ab..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_search_landsales.xml
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="70"
- layout="topleft"
- name="panel_search_landsales"
- width="602">
-  <text
-   follows="left|top|right"
-   height="16"
-   layout="topleft"
-   left="4"
-   name="search_title"
-   top="4"
-   value="Enter search terms:"
-   width="255" />
-  <check_box
-   control_name="ShowPGLand"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left="489"
-   name="pg_all"
-   top="4"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_PG_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_general"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowMatureLand"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="mature_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_M_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_moderate"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowAdultLand"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="adult_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_R_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_adult"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="FindLandPrice"
-   follows="left|top"
-   height="16"
-   label="Price &lt;"
-   layout="topleft"
-   left="4"
-   name="price_check"
-   top_pad="6"
-   width="40" >
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <line_editor
-   enabled_control="FindLandPrice"
-   commit_on_focus_lost="false"
-   follows="left|top"
-   height="16"
-   left_pad="20"
-   name="edit_price"
-   layout="topleft"
-   top_delta="-1"
-   width="40" >
-    <line_editor.commit_callback
-     function="Search.query" />
-  </line_editor>
-  <check_box
-   control_name="FindLandArea"
-   follows="left|top"
-   height="16"
-   label="Area &gt;"
-   layout="topleft"
-   left_pad="3"
-   name="area_check"
-   top_delta="1"
-   width="40" >
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <line_editor
-   enabled_control="FindLandArea"
-   commit_on_focus_lost="false"
-   follows="left|top"
-   layout="topleft"
-   height="16"
-   left_pad="18"
-   name="edit_area"
-   top_delta="-1"
-   width="40" >
-    <line_editor.commit_callback
-     function="Search.query" />
-  </line_editor>
-  <combo_box
-   control_name="FindLandType"
-   follows="right|top"
-   layout="topleft"
-   height="22"
-   allow_text_entry="false"
-   left_pad="90"
-   top_delta="-1"
-   name="land_type"
-   width="110">
-    <combo_box.item label="All Categories" name="All" value="All"/>
-    <combo_box.item label="Auction" name="Auction" value="Auction"/>
-    <combo_box.item label="Mainland Sales" name="Mainland" value="Mainland"/>
-    <combo_box.item label="Estate Sales" name="Estate" value="Estate"/>
-    <combo_box.commit_callback
-     function="Search.query" />
-  </combo_box>
-  <combo_box
-   control_name="FindLandSort"
-   follows="right|top"
-   layout="topleft"
-   height="22"
-   allow_text_entry="false"
-   left_pad="2"
-   top_delta="0"
-   name="land_sort"
-   width="110">
-    <combo_box.item label="Sort by Name" name="Name_item" value="Name"/>
-    <combo_box.item label="Sort by Price" name="Price_item" value="Price"/>
-    <combo_box.item label="Sort by Price per meter" name="PPM_item" value="PPM"/>
-    <combo_box.item label="Sort by Area" name="Area_item" value="Area"/>
-    <combo_box.commit_callback
-     function="Search.query" />
-  </combo_box>
-  <check_box
-   control_name="FindLandSortAscending"
-   follows="right|top"
-   height="16"
-   label="Ascending"
-   layout="topleft"
-   left_pad="3"
-   name="ascending"
-   top_delta="5"
-   width="40" >
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_people.xml b/indra/newview/skins/default/xui/en/panel_search_people.xml
deleted file mode 100644
index 98387dbd9a2f18aada111dbf62fa904008499c05..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_search_people.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="70"
- class="panel_search_people"
- name="panel_search_people"
- width="602"
- default_tab_group="2">
-  <panel.string name="SeachFilteredOnShortWordsEmpty">
-   Your search terms were too short so no search was performed.
-  </panel.string>
-  <text
-   follows="left|top|right"
-   height="16"
-   layout="topleft"
-   left="4"
-   name="search_title"
-   top="4"
-   value="Enter search terms:"
-   width="255" />
-  <search_editor
-   tab_group="2"
-   follows="top|left|right"
-   search_button_visible="true"
-   height="22"
-   text_readonly_color="DkGray"
-   label="Search"
-   layout="topleft"
-   top_pad="1"
-   left="4"
-   right="-4"
-   name="search_bar"
-   select_on_focus="true"
-   commit_on_focus_lost="false"
-   tool_tip="Enter search terms">
-    <search_editor.commit_callback
-     function="Search.query" />
-  </search_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_places.xml b/indra/newview/skins/default/xui/en/panel_search_places.xml
deleted file mode 100644
index 94ae80a1576933b64eeae4bd6547b57632c96921..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_search_places.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="70"
- layout="topleft"
- name="panel_search_places"
- width="602"
- default_tab_group="2">
-  <text
-   follows="left|top|right"
-   height="16"
-   layout="topleft"
-   left="4"
-   name="search_title"
-   top="4"
-   value="Enter search terms:"
-   width="255" />
-  <check_box
-   control_name="ShowPGSims"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left="489"
-   name="pg_all"
-   top="4"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_PG_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_general"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowMatureSims"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="mature_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_M_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_moderate"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowAdultSims"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="adult_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_R_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_adult"
-   top_delta="-1"
-   width="18"/>
-  <search_editor
-   tab_group="2"
-   follows="top|left|right"
-   search_button_visible="true"
-   height="22"
-   text_readonly_color="DkGray"
-   label="Search"
-   layout="topleft"
-   top_pad="1"
-   left="4"
-   right="-128"
-   name="search_bar"
-   select_on_focus="true"
-   commit_on_focus_lost="false"
-   tool_tip="Enter search terms">
-    <search_editor.commit_callback
-     function="Search.query" />
-  </search_editor>
-  <combo_box
-   follows="right|top"
-   layout="topleft"
-   height="23"
-   allow_text_entry="false"
-   top_delta="0"
-   left_pad="2"
-   name="places_category"
-   width="122">
-    <combo_box.commit_callback
-     function="Search.query" />
-  </combo_box>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_web.xml b/indra/newview/skins/default/xui/en/panel_search_web.xml
deleted file mode 100644
index 81cb9067db204685ce625dbfae92b9b87c36d1b9..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_search_web.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="775"
- layout="topleft"
- follows="all"
- name="panel_search_web"
- width="780"
- default_tab_group="2">
-  <layout_stack
-    bottom="775"
-    follows="all"
-    layout="topleft"
-    left="5"
-    animate="false"
-    name="stack1"
-    orientation="vertical"
-    top="4"
-    width="770">
-    <layout_panel
-      height="40"
-      follows="all"
-      layout="topleft"
-      left_delta="0"
-      name="external_controls"
-      top_delta="0"
-      auto_resize="true"
-      width="585">
-      <web_browser
-        tab_group="2"
-        bottom="-2"
-        follows="all"
-        layout="topleft"
-        left="0"
-        name="webbrowser"
-        top="0"/>
-    </layout_panel>
-    <layout_panel
-     name="status_bar"
-     height="23"
-     auto_resize="false">
-      <button
-       image_overlay="Arrow_Left_Off"
-       image_disabled="PushButton_Disabled"
-       image_disabled_selected="PushButton_Disabled"
-       image_selected="PushButton_Selected"
-       image_unselected="PushButton_Off"
-       chrome="true"
-       hover_glow_amount="0.15"
-       tool_tip="Navigate back"
-       follows="left|top"
-       height="22"
-       layout="topleft"
-       left="1"
-       name="back"
-       top="0"
-       width="22">
-        <button.commit_callback
-         function="WebContent.Back" />
-      </button>
-      <button
-       image_overlay="Arrow_Right_Off"
-       image_disabled="PushButton_Disabled"
-       image_disabled_selected="PushButton_Disabled"
-       image_selected="PushButton_Selected"
-       image_unselected="PushButton_Off"
-       chrome="true"
-       tool_tip="Navigate forward"
-       follows="left|top"
-       height="22"
-       layout="topleft"
-       left="27"
-       name="forward"
-       top_delta="0"
-       width="22">
-        <button.commit_callback
-         function="WebContent.Forward" />
-      </button>
-      <button
-       image_overlay="Stop_Off"
-       image_disabled="PushButton_Disabled"
-       image_disabled_selected="PushButton_Disabled"
-       image_selected="PushButton_Selected"
-       image_unselected="PushButton_Off"
-       chrome="true"
-       tool_tip="Stop navigation"
-       enabled="true"
-       follows="left|top"
-       height="22"
-       layout="topleft"
-       left="51"
-       name="stop"
-       top_delta="0"
-       width="22">
-        <button.commit_callback
-         function="WebContent.Stop" />
-      </button>
-      <button
-       image_overlay="Refresh_Off"
-       image_disabled="PushButton_Disabled"
-       image_disabled_selected="PushButton_Disabled"
-       image_selected="PushButton_Selected"
-       image_unselected="PushButton_Off"
-       chrome="true"
-       tool_tip="Reload page"
-       follows="left|top"
-       height="22"
-       layout="topleft"
-       left="51"
-       name="reload"
-       top_delta="0"
-       width="22">
-        <button.commit_callback
-         function="WebContent.Reload" />
-      </button>
-      <text
-       type="string"
-       length="200"
-       follows="bottom|left"
-       height="20"
-       layout="topleft"
-       left_pad="3"
-       name="statusbartext"
-       parse_urls="false"
-       text_color="0.4 0.4 0.4 1"
-       top_delta="1"
-       width="441"/>
-      <progress_bar
-       color_bar="0.3 1.0 0.3 1"
-       follows="bottom|right"
-       height="16"
-       top_delta="1"
-       left_pad="3"
-       layout="topleft"
-       name="statusbarprogress"
-       width="64"/>
-    </layout_panel>
-  </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index cef6aa18083a84c133a3bfd16323911c0ad3a528..78d3e4d4a8d6ef32b567bf56dc3de8bd687d8a3f 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2991,13 +2991,13 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .anim
 	<string name="None">None</string>
 	<string name="Linden Location">Linden Location</string>
 	<string name="Adult">Adult</string>
-	<string name="Arts&amp;Culture">Arts &amp; Culture</string>
+	<string name="Arts and Culture">Arts &amp; Culture</string>
 	<string name="Business">Business</string>
 	<string name="Educational">Educational</string>
 	<string name="Gaming">Gaming</string>
 	<string name="Hangout">Hangout</string>
 	<string name="Newcomer Friendly">Newcomer Friendly</string>
-	<string name="Parks&amp;Nature">Parks &amp; Nature</string>
+	<string name="Parks and Nature">Parks &amp; Nature</string>
 	<string name="Residential">Residential</string>
 	<!--<string name="Shopping">Shopping</string>	-->
 	<string name="Stage">Stage</string>
@@ -4464,6 +4464,13 @@ and report the problem.
   <string name="outfit_photo_load_codec_error">Invalid image format. Please use another image</string>
 
   <!-- Alchemy Strings -->
+  <string name="not_found">&apos;[TEXT]&apos; not found</string>
+  <string name="no_results">No results</string>
+  <string name="searching">Searching...</string>
+  <string name="all_categories">All Categories</string>
+  <string name="search_banned">Some terms in your search query were excluded due to content restrictions as clarified in the Community Standards.</string>
+  <string name="search_short">Your search terms were too short so no search was performed.</string>
+  <string name="search_disabled">Legacy Search has been disabled in this region.</string>
   <string name="NotifyIncomingMessage">Incoming message from [NAME]...</string>
   <string name="NearbyChatTitleChannel">Nearby chat (on channel [CHANNEL])</string>
   <string name="AvatarTyping">Typing</string>
diff --git a/indra/newview/skins/heretic/colors.xml b/indra/newview/skins/heretic/colors.xml
index 19b8501e24888ff799b145df1dae0067da4482a6..f97407cd628562e4a1b51bd195da644ac8157b60 100644
--- a/indra/newview/skins/heretic/colors.xml
+++ b/indra/newview/skins/heretic/colors.xml
@@ -1155,9 +1155,6 @@
   <color
    name="StatBarMeanBarColor"
    reference="Red_80" />
-  <color
-   name="ProfileOnlineIndicatorColor"
-   reference="Green" />
    <color
     name="MusicTickerGridColor" 
     reference="White_50"/>
diff --git a/indra/newview/skins/heretic/skin_settings.xml b/indra/newview/skins/heretic/skin_settings.xml
index d0d8c5c8f85c796960cef1e71cbcc31cf4f1b557..abf6124a13db7e27ea9c7de849b46e638db73165 100644
--- a/indra/newview/skins/heretic/skin_settings.xml
+++ b/indra/newview/skins/heretic/skin_settings.xml
@@ -2,19 +2,6 @@
 <llsd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="llsd.xsd">
 	<map>
-		<key>LegacyProfile</key>
-		<map>
-			<key>Comment</key>
-			<string>Use Legacy Profiles rather than standard</string>
-			<key>Persist</key>
-			<integer>0</integer>
-			<key>HideFromEditor</key>
-			<integer>1</integer>
-			<key>Type</key>
-			<string>Boolean</string>
-			<key>Value</key>
-			<boolean>0</boolean>
-		</map>
 		<key>LegacyNotificationWell</key>
 		<map>
 			<key>Comment</key>