diff --git a/etc/message.xml b/etc/message.xml
index 304ba320b197d23067ec2b94eefab5a3a2287cb4..85b1aac99cbc2d407a36ff4ee179ec0457aaea6e 100644
--- a/etc/message.xml
+++ b/etc/message.xml
@@ -276,6 +276,14 @@
 					<boolean>true</boolean>
 				</map>
 
+				<key>AgentGroupDataUpdate</key>
+				<map>
+					<key>flavor</key>
+					<string>llsd</string>
+					<key>trusted-sender</key>
+					<boolean>true</boolean>
+				</map>
+
 				<key>ChatterBoxSessionStartReply</key>
 				<map>
 					<key>flavor</key>
diff --git a/indra/llmessage/llregionflags.h b/indra/llmessage/llregionflags.h
index 28a741789c29b89cfc173e417725aaae42f4dca8..6d603e1e69defe5773c6b29c58b5b35906dc3a2a 100644
--- a/indra/llmessage/llregionflags.h
+++ b/indra/llmessage/llregionflags.h
@@ -70,6 +70,8 @@ const U32 REGION_FLAGS_ABUSE_EMAIL_TO_ESTATE_OWNER = (1 << 27);
 
 const U32 REGION_FLAGS_ALLOW_VOICE = (1 << 28);
 
+const U32 REGION_FLAGS_BLOCK_PARCEL_SEARCH = (1 << 29);
+
 
 const U32 REGION_FLAGS_DEFAULT = REGION_FLAGS_ALLOW_LANDMARK |
 								 REGION_FLAGS_ALLOW_SET_HOME |
@@ -159,3 +161,4 @@ const U32 SWD_SCRIPTED_ONLY			= (1 << 2);
 
 #endif
 
+
diff --git a/indra/llprimitive/object_flags.h b/indra/llprimitive/object_flags.h
index b41017174281f56164030d28a7786a70f7d11a0b..b52037109ee92d1b52f0fefbe8bfda06d1128b65 100644
--- a/indra/llprimitive/object_flags.h
+++ b/indra/llprimitive/object_flags.h
@@ -26,7 +26,8 @@ const U32	FLAGS_INVENTORY_EMPTY		= 0x00000800;
 const U32	FLAGS_JOINT_HINGE			= 0x00001000;
 const U32	FLAGS_JOINT_P2P				= 0x00002000;
 const U32	FLAGS_JOINT_LP2P			= 0x00004000;
-//const U32	FLAGS_JOINT_WHEEL			= 0x00008000;
+// const U32	FLAGS_JOINT_WHEEL		= 0x00008000;
+const U32	FLAGS_INCLUDE_IN_SEARCH		= 0x00008000;
 
 const U32	FLAGS_ALLOW_INVENTORY_DROP	= 0x00010000;
 const U32	FLAGS_OBJECT_TRANSFER		= 0x00020000;
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index e12904ef43ac4aff1ac556d2e6ed23f14c498dc5..3000cce4f9159a3f7e3a2c31674755d023a102a0 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -28,6 +28,7 @@
 #include "llquaternion.h"
 #include "v3math.h"
 #include "v4math.h"
+#include "llsdutil.h"
 //#include "vmath.h"
 
 #include "imageids.h"
@@ -4808,7 +4809,7 @@ BOOL LLAgent::setGroupContribution(const LLUUID& group_id, S32 contribution)
 	return FALSE;
 }
 
-BOOL LLAgent::setGroupAcceptNotices(const LLUUID& group_id, BOOL accept_notices)
+BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile)
 {
 	S32 count = mGroups.count();
 	for(S32 i = 0; i < count; ++i)
@@ -4816,6 +4817,7 @@ BOOL LLAgent::setGroupAcceptNotices(const LLUUID& group_id, BOOL accept_notices)
 		if(mGroups.get(i).mID == group_id)
 		{
 			mGroups.get(i).mAcceptNotices = accept_notices;
+			mGroups.get(i).mListInProfile = list_in_profile;
 			LLMessageSystem* msg = gMessageSystem;
 			msg->newMessage("SetGroupAcceptNotices");
 			msg->nextBlock("AgentData");
@@ -4824,6 +4826,8 @@ BOOL LLAgent::setGroupAcceptNotices(const LLUUID& group_id, BOOL accept_notices)
 			msg->nextBlock("Data");
 			msg->addUUID("GroupID", group_id);
 			msg->addBOOL("AcceptNotices", accept_notices);
+			msg->nextBlock("NewData");
+			msg->addBOOL("ListInProfile", list_in_profile);
 			sendReliableMessage();
 			return TRUE;
 		}
@@ -5177,6 +5181,70 @@ void LLAgent::processAgentGroupDataUpdate(LLMessageSystem *msg, void **)
 
 }
 
+class LLAgentGroupDataUpdateViewerNode : public LLHTTPNode
+{
+	virtual void post(
+		LLHTTPNode::ResponsePtr response,
+		const LLSD& context,
+		const LLSD& input) const
+	{
+		LLSD body = input["body"];
+		if(body.has("body"))
+			body = body["body"];
+		LLUUID agent_id = body["AgentData"][0]["AgentID"].asUUID();
+
+		if (agent_id != gAgentID)
+		{
+			llwarns << "processAgentGroupDataUpdate for agent other than me" << llendl;
+			return;
+		}	
+
+		LLSD group_data = body["GroupData"];
+
+		LLSD::array_iterator iter_group =
+			group_data.beginArray();
+		LLSD::array_iterator end_group =
+			group_data.endArray();
+		int group_index = 0;
+		for(; iter_group != end_group; ++iter_group)
+		{
+
+			LLGroupData group;
+			S32 index = -1;
+			bool need_floater_update = false;
+
+			group.mID = (*iter_group)["GroupID"].asUUID();
+			group.mPowers = ll_U64_from_sd((*iter_group)["GroupPowers"]);
+			group.mAcceptNotices = (*iter_group)["AcceptNotices"].asBoolean();
+			group.mListInProfile = body["NewGroupData"][group_index]["ListInProfile"].asBoolean();
+			group.mInsigniaID = (*iter_group)["GroupInsigniaID"].asUUID();
+			group.mName = (*iter_group)["GroupName"].asString();
+			group.mContribution = (*iter_group)["Contribution"].asInteger();
+
+			group_index++;
+
+			if(group.mID.notNull())
+			{
+				need_floater_update = true;
+				// Remove the group if it already exists remove it and add the new data to pick up changes.
+				index = gAgent.mGroups.find(group);
+				if (index != -1)
+				{
+					gAgent.mGroups.remove(index);
+				}
+				gAgent.mGroups.put(group);
+			}
+			if (need_floater_update)
+			{
+				update_group_floaters(group.mID);
+			}
+		}
+	}
+};
+
+LLHTTPRegistration<LLAgentGroupDataUpdateViewerNode >
+	gHTTPRegistrationAgentGroupDataUpdateViewerNode ("/message/AgentGroupDataUpdate"); 
+
 // static
 void LLAgent::processAgentDataUpdate(LLMessageSystem *msg, void **)
 {
@@ -7269,5 +7337,4 @@ void LLAgent::parseTeleportMessages(const LLString& xml_filename)
 	}//end for (all message sets in xml file)
 }
 
-
 // EOF
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 8b6e1c33a462a3021851e892dfa6216170f24f86..053d27728fef39918285b63907950c5beca9062b 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -78,6 +78,7 @@ struct LLGroupData
 	LLUUID mInsigniaID;
 	U64 mPowers;
 	BOOL mAcceptNotices;
+	BOOL mListInProfile;
 	S32 mContribution;
 	std::string mName;
 };
@@ -197,7 +198,7 @@ class LLAgent : public LLObservable
 	// new contribution level. Returns true if the group id was found
 	// and contribution could be set.
 	BOOL setGroupContribution(const LLUUID& group_id, S32 contribution);
-	BOOL setGroupAcceptNotices(const LLUUID& group_id, BOOL accept_notices);
+	BOOL setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile);
 	void			setHideGroupTitle(BOOL hide)	{ mHideGroupTitle = hide; }
 
 	//
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 421066688ebf65cbb8f0c32aa2b81072d4a02940..aa9a06555cdc9c86625b33619b0e7dec311c94b6 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -1957,10 +1957,6 @@ BOOL LLPanelLandOptions::postBuild()
 	mCategoryCombo = LLUICtrlFactory::getComboBoxByName(this, "land category");
 	childSetCommitCallback("land category", onCommitAny, this);
 
-	mAllowPublishCtrl = LLUICtrlFactory::getCheckBoxByName(this, "PublishCheck");
-	childSetCommitCallback("PublishCheck", onCommitAny, this);
-
-	
 	mMatureCtrl = LLUICtrlFactory::getCheckBoxByName(this, "MatureCheck");
 	childSetCommitCallback("MatureCheck", onCommitAny, this);
 	
@@ -1971,8 +1967,6 @@ BOOL LLPanelLandOptions::postBuild()
 	if (gAgent.mAccess < SIM_ACCESS_MATURE)
 	{
 		// Disable these buttons if they are PG (Teen) users
-		mAllowPublishCtrl->setVisible(FALSE);
-		mAllowPublishCtrl->setEnabled(FALSE);
 		mPublishHelpButton->setVisible(FALSE);
 		mPublishHelpButton->setEnabled(FALSE);
 		mMatureCtrl->setVisible(FALSE);
@@ -2094,7 +2088,6 @@ void LLPanelLandOptions::refresh()
 		mSetBtn->setEnabled(FALSE);
 		mClearBtn->setEnabled(FALSE);
 
-		mAllowPublishCtrl->setEnabled(FALSE);
 		mMatureCtrl->setEnabled(FALSE);
 		mPublishHelpButton->setEnabled(FALSE);
 	}
@@ -2135,11 +2128,6 @@ void LLPanelLandOptions::refresh()
 		mCheckOtherScripts	->set( parcel->getAllowOtherScripts() );
 		mCheckOtherScripts	->setEnabled( can_change_options );
 
-		BOOL can_change_identity = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, 
-														GP_LAND_CHANGE_IDENTITY);
-		mCheckShowDirectory	->set( parcel->getParcelFlag(PF_SHOW_DIRECTORY));
-		mCheckShowDirectory	->setEnabled( can_change_identity );
-
 		mPushRestrictionCtrl->set( parcel->getRestrictPushObject() );
 		if(parcel->getRegionPushOverride())
 		{
@@ -2153,6 +2141,9 @@ void LLPanelLandOptions::refresh()
 			mPushRestrictionCtrl->setEnabled(can_change_options);
 		}
 
+		BOOL can_change_identity = 
+			LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY);
+
 		// Set by string in case the order in UI doesn't match the order
 		// by index.
 		LLParcel::ECategory cat = parcel->getCategory();
@@ -2186,8 +2177,6 @@ void LLPanelLandOptions::refresh()
 		mSetBtn->setEnabled( can_change_landing_point );
 		mClearBtn->setEnabled( can_change_landing_point );
 
-		mAllowPublishCtrl->set(parcel->getAllowPublish());
-		mAllowPublishCtrl->setEnabled( can_change_identity );
 		mMatureCtrl->set(parcel->getMaturePublish());
 		mMatureCtrl->setEnabled( can_change_identity );
 		mPublishHelpButton->setEnabled( can_change_identity );
@@ -2195,8 +2184,6 @@ void LLPanelLandOptions::refresh()
 		if (gAgent.mAccess < SIM_ACCESS_MATURE)
 		{
 			// Disable these buttons if they are PG (Teen) users
-			mAllowPublishCtrl->setVisible(FALSE);
-			mAllowPublishCtrl->setEnabled(FALSE);
 			mPublishHelpButton->setVisible(FALSE);
 			mPublishHelpButton->setEnabled(FALSE);
 			mMatureCtrl->setVisible(FALSE);
@@ -2205,7 +2192,39 @@ void LLPanelLandOptions::refresh()
 	}
 }
 
+// virtual
+void LLPanelLandOptions::draw()
+{
+	LLParcel *parcel = gParcelMgr->getFloatingParcelSelection()->getParcel();
+	
+	if(parcel)
+	{
+		LLViewerRegion* region;
+		region = gParcelMgr->getSelectionRegion();
+		llassert(region); // Region should never be null.
+
+		BOOL can_change_identity = region ? 
+			LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY) &&
+			! (region->getRegionFlags() & REGION_FLAGS_BLOCK_PARCEL_SEARCH) : false;
+
+		// There is a bug with this panel whereby the Show Directory bit can be 
+		// slammed off by the Region based on an override.  Since this data is cached
+		// locally the change will not reflect in the panel, which could cause confusion
+		// A workaround for this is to flip the bit off in the locally cached version
+		// when we detect a mismatch case.
+		if(! can_change_identity && parcel->getParcelFlag(PF_SHOW_DIRECTORY))
+		{
+			parcel->setParcelFlag(PF_SHOW_DIRECTORY, FALSE);
+		}
+		mCheckShowDirectory	->set(parcel->getParcelFlag(PF_SHOW_DIRECTORY));
+		mCheckShowDirectory	->setEnabled(can_change_identity);
+		mCategoryCombo->setEnabled(can_change_identity);
+	}
+
+	LLPanel::draw();
+
 
+}
 // static
 void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
 {
@@ -2228,7 +2247,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
 	BOOL allow_landmark		= self->mCheckLandmark->get();
 	BOOL allow_group_scripts	= self->mCheckGroupScripts->get() || self->mCheckOtherScripts->get();
 	BOOL allow_other_scripts	= self->mCheckOtherScripts->get();
-	BOOL allow_publish		= self->mAllowPublishCtrl->get();
+	BOOL allow_publish		= FALSE;
 	BOOL mature_publish		= self->mMatureCtrl->get();
 	BOOL push_restriction	= self->mPushRestrictionCtrl->get();
 	BOOL show_directory		= self->mCheckShowDirectory->get();
@@ -2318,7 +2337,22 @@ void LLPanelLandOptions::onClickClear(void* userdata)
 // static
 void LLPanelLandOptions::onClickPublishHelp(void*)
 {
-	gViewerWindow->alertXml("ClickPublishHelpLand");
+	LLViewerRegion* region = gParcelMgr->getSelectionRegion();
+	LLParcel *parcel = gParcelMgr->getFloatingParcelSelection()->getParcel();
+	llassert(region); // Region should never be null.
+
+	bool can_change_identity = region && parcel ? 
+		LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY) &&
+		! (region->getRegionFlags() & REGION_FLAGS_BLOCK_PARCEL_SEARCH) : false;
+
+	if(! can_change_identity)
+	{
+		gViewerWindow->alertXml("ClickPublishHelpLandDisabled");
+	}
+	else
+	{
+		gViewerWindow->alertXml("ClickPublishHelpLand");
+	}
 }
 
 //---------------------------------------------------------------------------
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index ab7ff3921cf6213ff29f956b3c79147721ff8a1b..6e8e525e0d00e7af1e275deb2ef838bc789f2c38 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -301,6 +301,7 @@ class LLPanelLandOptions
 	static void onClickPublishHelp(void*);
 
 	virtual BOOL postBuild();
+	virtual void draw();
 
 protected:
 	LLCheckBoxCtrl*	mCheckEditObjects;
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index f61f43fd5e6fab341a6aeb181004c59b4d26e046..d88af396df62c5bca1f715110a13caccac0bdcf5 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -181,6 +181,7 @@ LLFloaterRegionInfo::LLFloaterRegionInfo(const LLRect& rect) :
 	mInfoPanels.push_back((LLPanelRegionInfo*)panel);
 	gUICtrlFactory->buildPanel(panel, "panel_region_covenant.xml");
 	mTab->addTabPanel(panel, panel->getLabel(), FALSE);
+
 }
 
 LLFloaterRegionInfo::~LLFloaterRegionInfo()
@@ -214,6 +215,7 @@ void LLFloaterRegionInfo::show(LLViewerRegion* region)
 	msg->addUUID("AgentID", gAgent.getID());
 	msg->addUUID("SessionID", gAgent.getSessionID());
 	gAgent.sendReliableMessage();
+
 }
 
 // static
@@ -305,6 +307,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
 	panel->childSetValue("restrict_pushobject", (region_flags & REGION_FLAGS_RESTRICT_PUSHOBJECT) ? TRUE : FALSE );
 	panel->childSetValue("allow_land_resell_check", (region_flags & REGION_FLAGS_BLOCK_LAND_RESELL) ? FALSE : TRUE );
 	panel->childSetValue("allow_parcel_changes_check", (region_flags & REGION_FLAGS_ALLOW_PARCEL_CHANGES) ? TRUE : FALSE );
+	panel->childSetValue("block_parcel_search_check", (region_flags & REGION_FLAGS_BLOCK_PARCEL_SEARCH) ? TRUE : FALSE );
 	panel->childSetValue("agent_limit_spin", LLSD((F32)agent_limit) );
 	panel->childSetValue("object_bonus_spin", LLSD(object_bonus_factor) );
 	panel->childSetValue("access_combo", LLSD(LLViewerRegion::accessToString(sim_access)) );
@@ -537,6 +540,7 @@ BOOL LLPanelRegionGeneralInfo::postBuild()
 	initCtrl("object_bonus_spin");
 	initCtrl("access_combo");
 	initCtrl("restrict_pushobject");
+	initCtrl("block_parcel_search_check");
 
 	initHelpBtn("terraform_help",		"HelpRegionBlockTerraform");
 	initHelpBtn("fly_help",				"HelpRegionBlockFly");
@@ -547,6 +551,7 @@ BOOL LLPanelRegionGeneralInfo::postBuild()
 	initHelpBtn("restrict_pushobject_help",		"HelpRegionRestrictPushObject");
 	initHelpBtn("land_resell_help",	"HelpRegionLandResell");
 	initHelpBtn("parcel_changes_help", "HelpParcelChanges");
+	initHelpBtn("parcel_search_help", "HelpRegionSearch");
 
 	childSetAction("kick_btn", onClickKick, this);
 	childSetAction("kick_all_btn", onClickKickAll, this);
@@ -672,52 +677,78 @@ void LLPanelRegionGeneralInfo::onClickManageTelehub(void* data)
 // strings[6] = sim access (0 = unknown, 13 = PG, 21 = Mature)
 // strings[7] = restrict pushobject
 // strings[8] = 'Y' - allow parcel subdivide, 'N' - not
+// strings[9] = 'Y' - block parcel search, 'N' - allow
 BOOL LLPanelRegionGeneralInfo::sendUpdate()
 {
 	llinfos << "LLPanelRegionGeneralInfo::sendUpdate()" << llendl;
-	strings_t strings;
-	//integers_t integers;
-	char buffer[MAX_STRING];		/* Flawfinder: ignore*/
-	snprintf(buffer, MAX_STRING, "%s", (childGetValue("block_terraform_check").asBoolean() ? "Y" : "N"));			/* Flawfinder: ignore */
-	strings.push_back(strings_t::value_type(buffer));
-	
-	snprintf(buffer, MAX_STRING, "%s", (childGetValue("block_fly_check").asBoolean() ? "Y" : "N"));			/* Flawfinder: ignore */
-	strings.push_back(strings_t::value_type(buffer));
 
-	snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_damage_check").asBoolean() ? "Y" : "N"));			/* Flawfinder: ignore */
-	strings.push_back(strings_t::value_type(buffer));
+	// First try using a Cap.  If that fails use the old method.
+	LLSD body;
+	std::string url = gAgent.getRegion()->getCapability("DispatchRegionInfo");
+	if (!url.empty())
+	{
+		body["block_terraform"] = childGetValue("block_terraform_check");
+		body["block_fly"] = childGetValue("block_fly_check");
+		body["allow_damage"] = childGetValue("allow_damage_check");
+		body["allow_land_resell"] = childGetValue("allow_land_resell_check");
+		body["agent_limit"] = childGetValue("agent_limit_spin");
+		body["prim_bonus"] = childGetValue("object_bonus_spin");
+		body["sim_access"] = childGetValue("access_combo");
+		body["restrict_pushobject"] = childGetValue("restrict_pushobject");
+		body["allow_parcel_changes"] = childGetValue("allow_parcel_changes_check");
+		body["block_parcel_search"] = childGetValue("block_parcel_search_check");
+		LLHTTPClient::post(url, body, new LLHTTPClient::Responder());
+	}
+	else
+	{
+		strings_t strings;
+		char buffer[MAX_STRING];		/* Flawfinder: ignore*/
 
-	snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_land_resell_check").asBoolean() ? "Y" : "N"));			/* Flawfinder: ignore */
-	strings.push_back(strings_t::value_type(buffer));
+		snprintf(buffer, MAX_STRING, "%s", (childGetValue("block_terraform_check").asBoolean() ? "Y" : "N"));			/* Flawfinder: ignore */
+		strings.push_back(strings_t::value_type(buffer));
 
-	F32 value = (F32)childGetValue("agent_limit_spin").asReal();
-	snprintf(buffer, MAX_STRING, "%f", value);			/* Flawfinder: ignore */
-	strings.push_back(strings_t::value_type(buffer));
+		snprintf(buffer, MAX_STRING, "%s", (childGetValue("block_fly_check").asBoolean() ? "Y" : "N"));			/* Flawfinder: ignore */
+		strings.push_back(strings_t::value_type(buffer));
 
-	value = (F32)childGetValue("object_bonus_spin").asReal();
-	snprintf(buffer, MAX_STRING, "%f", value);			/* Flawfinder: ignore */
-	strings.push_back(strings_t::value_type(buffer));
+		snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_damage_check").asBoolean() ? "Y" : "N"));			/* Flawfinder: ignore */
+		strings.push_back(strings_t::value_type(buffer));
 
-	U8 access = LLViewerRegion::stringToAccess(childGetValue("access_combo").asString().c_str());
-	snprintf(buffer, MAX_STRING, "%d", (S32)access);			/* Flawfinder: ignore */
-	strings.push_back(strings_t::value_type(buffer));
+		snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_land_resell_check").asBoolean() ? "Y" : "N"));			/* Flawfinder: ignore */
+		strings.push_back(strings_t::value_type(buffer));
 
-	snprintf(buffer, MAX_STRING, "%s", (childGetValue("restrict_pushobject").asBoolean() ? "Y" : "N"));			/* Flawfinder: ignore */
-	strings.push_back(strings_t::value_type(buffer));
+		F32 value = (F32)childGetValue("agent_limit_spin").asReal();
+		snprintf(buffer, MAX_STRING, "%f", value);			/* Flawfinder: ignore */
+		strings.push_back(strings_t::value_type(buffer));
 
-	snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_parcel_changes_check").asBoolean() ? "Y" : "N"));			/* Flawfinder: ignore */
-	strings.push_back(strings_t::value_type(buffer));
+		value = (F32)childGetValue("object_bonus_spin").asReal();
+		snprintf(buffer, MAX_STRING, "%f", value);			/* Flawfinder: ignore */
+		strings.push_back(strings_t::value_type(buffer));
 
-	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
-	sendEstateOwnerMessage(gMessageSystem, "setregioninfo", invoice, strings);
+		U8 access = LLViewerRegion::stringToAccess(childGetValue("access_combo").asString().c_str());
+		snprintf(buffer, MAX_STRING, "%d", (S32)access);			/* Flawfinder: ignore */
+		strings.push_back(strings_t::value_type(buffer));
 
-	LLViewerRegion* region = gAgent.getRegion();
-	if (region
-		&& access != region->getSimAccess() )		/* Flawfinder: ignore */
-	{
-		gViewerWindow->alertXml("RegionMaturityChange");
+		snprintf(buffer, MAX_STRING, "%s", (childGetValue("restrict_pushobject").asBoolean() ? "Y" : "N"));			/* Flawfinder: ignore */
+		strings.push_back(strings_t::value_type(buffer));
+
+		snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_parcel_changes_check").asBoolean() ? "Y" : "N"));			/* Flawfinder: ignore */
+		strings.push_back(strings_t::value_type(buffer));
+
+		LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+		sendEstateOwnerMessage(gMessageSystem, "setregioninfo", invoice, strings);
+
+		LLViewerRegion* region = gAgent.getRegion();
+		if (region
+			&& access != region->getSimAccess() )		/* Flawfinder: ignore */
+		{
+			gViewerWindow->alertXml("RegionMaturityChange");
+		}
 	}
 
+
+	//integers_t integers;
+
+
 	return TRUE;
 }
 
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index 18993e56fa9951e9a6deebd5099f9ad309417999..249012195f91c12521138b13816705e4a94f4cdf 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -195,6 +195,7 @@ LLGroupMgrGroupData::LLGroupMgrGroupData(const LLUUID& id) :
 	mOpenEnrollment(FALSE), 
 	mMembershipFee(0),
 	mAllowPublish(FALSE),
+	mListInProfile(FALSE),
 	mMaturePublish(FALSE),
 	mChanged(FALSE),
 	mMemberCount(0),
@@ -1240,6 +1241,7 @@ void LLGroupMgr::processCreateGroupReply(LLMessageSystem* msg, void ** data)
 		// This isn't actually too bad because real data will come down in 2 or 3 miliseconds and replace this.
 		LLGroupData gd;
 		gd.mAcceptNotices = TRUE;
+		gd.mListInProfile = TRUE;
 		gd.mContribution = 0;
 		gd.mID = group_id;
 		gd.mName = "new group";
diff --git a/indra/newview/llgroupmgr.h b/indra/newview/llgroupmgr.h
index 7c06acbc1fe2844503cb73ff338dfc6f082672fc..2d0dda9e68df44473b9f5d476015d1e56f5710fc 100644
--- a/indra/newview/llgroupmgr.h
+++ b/indra/newview/llgroupmgr.h
@@ -232,6 +232,7 @@ friend class LLGroupMgr;
 	BOOL				mOpenEnrollment;
 	S32					mMembershipFee;
 	BOOL				mAllowPublish;
+	BOOL				mListInProfile;
 	BOOL				mMaturePublish;
 	BOOL				mChanged;
 	S32					mMemberCount;
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index ab2e30014d2a54a1a0d20b8b3c8aef21fa9e9cc5..e0f19c10d1d6ab4a7c91522cecb10a3abdf38548 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -1836,11 +1836,6 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
 		allow_publish = (flags & AVATAR_ALLOW_PUBLISH);
 		online = (flags & AVATAR_ONLINE);
 		
-		EOnlineStatus online_status = (online) ? ONLINE_STATUS_YES : ONLINE_STATUS_NO;
-
-		self->setOnlineStatus(online_status);
-
-		self->mPanelWeb->setWebURL(std::string(profile_url));
 		U8 caption_index = 0;
 		LLString caption_text;
 		charter_member_size = msg->getSize("PropertiesData", "CharterMember");
@@ -1855,12 +1850,6 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
 			caption_text = caption;
 		}
 		
-		LLTextureCtrl*	image_ctrl = LLUICtrlFactory::getTexturePickerByName(self->mPanelSecondLife,"img");
-		if(image_ctrl)
-		{
-			image_ctrl->setImageAssetID(image_id);
-		}
-		self->childSetValue("about", about_text);
 
 		if(caption_text.empty())
 		{
@@ -1903,10 +1892,23 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
 		
 		self->mPanelSecondLife->childSetValue("acct", caption_text);
 		self->mPanelSecondLife->childSetValue("born", born_on);
-		
+
+		EOnlineStatus online_status = (online) ? ONLINE_STATUS_YES : ONLINE_STATUS_NO;
+
+		self->setOnlineStatus(online_status);
+
+		self->mPanelWeb->setWebURL(std::string(profile_url));
+
+		LLTextureCtrl*	image_ctrl = LLUICtrlFactory::getTexturePickerByName(self->mPanelSecondLife,"img");
+		if(image_ctrl)
+		{
+			image_ctrl->setImageAssetID(image_id);
+		}
+		self->childSetValue("about", about_text);
+
 		self->mPanelSecondLife->setPartnerID(partner_id);
 		self->mPanelSecondLife->updatePartnerName();
-		
+
 		if (self->mPanelFirstLife)
 		{
 			// Teens don't get these
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index 7a288a173048a2f88c4efe1f031903c211557242..8a10ef0ea40c2b54d0edabade61de31ef739e638 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -322,7 +322,7 @@ void LLPanelGroup::tabChanged()
 	if ( mApplyBtn )
 	{
 		LLString mesg;
-		mApplyBtn->setEnabled(mAllowEdit && mCurrentTab->needsApply(mesg));
+		mApplyBtn->setEnabled(mCurrentTab->needsApply(mesg));
 	}
 }
 
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index ce51c594137ba4e68431760d965f414d7c3c8484..ca62790147d655f1624a74b2b1d293d58be13367 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -53,12 +53,12 @@ LLPanelGroupGeneral::LLPanelGroupGeneral(const std::string& name,
 	mBtnJoinGroup(NULL),
 	mListVisibleMembers(NULL),
 	mCtrlShowInGroupList(NULL),
-	mCtrlPublishOnWeb(NULL),
 	mCtrlMature(NULL),
 	mCtrlOpenEnrollment(NULL),
 	mCtrlEnrollmentFee(NULL),
 	mSpinEnrollmentFee(NULL),
 	mCtrlReceiveNotices(NULL),
+	mCtrlListGroup(NULL),
 	mActiveTitleLabel(NULL),
 	mComboActiveTitle(NULL)
 {
@@ -133,13 +133,6 @@ BOOL LLPanelGroupGeneral::postBuild()
 		mCtrlShowInGroupList->setCallbackUserData(this);
 	}
 
-	mCtrlPublishOnWeb = (LLCheckBoxCtrl*) getChildByName("publish_on_web", recurse);
-	if (mCtrlPublishOnWeb)
-	{
-		mCtrlPublishOnWeb->setCommitCallback(onCommitAny);
-		mCtrlPublishOnWeb->setCallbackUserData(this);
-	}
-
 	mCtrlMature = (LLCheckBoxCtrl*) getChildByName("mature", recurse);
 	if (mCtrlMature)
 	{
@@ -170,20 +163,31 @@ BOOL LLPanelGroupGeneral::postBuild()
 	}
 
 	BOOL accept_notices = FALSE;
+	BOOL list_in_profile = FALSE;
 	LLGroupData data;
 	if(gAgent.getGroupData(mGroupID,data))
 	{
 		accept_notices = data.mAcceptNotices;
+		list_in_profile = data.mListInProfile;
 	}
 	mCtrlReceiveNotices = (LLCheckBoxCtrl*) getChildByName("receive_notices", recurse);
 	if (mCtrlReceiveNotices)
 	{
-		mCtrlReceiveNotices->setCommitCallback(onReceiveNotices);
+		mCtrlReceiveNotices->setCommitCallback(onCommitUserOnly);
 		mCtrlReceiveNotices->setCallbackUserData(this);
 		mCtrlReceiveNotices->set(accept_notices);
 		mCtrlReceiveNotices->setEnabled(data.mID.notNull());
 	}
 	
+	mCtrlListGroup = (LLCheckBoxCtrl*) getChildByName("list_groups_in_profile", recurse);
+	if (mCtrlListGroup)
+	{
+		mCtrlListGroup->setCommitCallback(onCommitUserOnly);
+		mCtrlListGroup->setCallbackUserData(this);
+		mCtrlListGroup->set(list_in_profile);
+		mCtrlListGroup->setEnabled(data.mID.notNull());
+	}
+
 	mActiveTitleLabel = (LLTextBox*) getChildByName("active_title_label", recurse);
 	
 	mComboActiveTitle = (LLComboBox*) getChildByName("active_title", recurse);
@@ -217,7 +221,6 @@ BOOL LLPanelGroupGeneral::postBuild()
 		mEditCharter->setEnabled(TRUE);
 
 		mCtrlShowInGroupList->setEnabled(TRUE);
-		mCtrlPublishOnWeb->setEnabled(TRUE);
 		mCtrlMature->setEnabled(TRUE);
 		mCtrlOpenEnrollment->setEnabled(TRUE);
 		mCtrlEnrollmentFee->setEnabled(TRUE);
@@ -239,6 +242,15 @@ void LLPanelGroupGeneral::onCommitAny(LLUICtrl* ctrl, void* data)
 	self->notifyObservers();
 }
 
+// static
+void LLPanelGroupGeneral::onCommitUserOnly(LLUICtrl* ctrl, void* data)
+{
+	LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data;
+	self->mChanged = TRUE;
+	self->notifyObservers();
+}
+
+
 // static
 void LLPanelGroupGeneral::onCommitEnrollment(LLUICtrl* ctrl, void* data)
 {
@@ -339,16 +351,6 @@ void LLPanelGroupGeneral::joinDlgCB(S32 which, void *userdata)
 	gGroupMgr->sendGroupMemberJoin(self->mGroupID);
 }
 
-// static
-void LLPanelGroupGeneral::onReceiveNotices(LLUICtrl* ctrl, void* data)
-{
-	LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data;
-	LLCheckBoxCtrl* check = (LLCheckBoxCtrl*)ctrl;
-
-	if(!self) return;
-	gAgent.setGroupAcceptNotices(self->mGroupID, check->get());
-}
-
 // static
 void LLPanelGroupGeneral::openProfile(void* data)
 {
@@ -406,88 +408,90 @@ void LLPanelGroupGeneral::draw()
 
 bool LLPanelGroupGeneral::apply(LLString& mesg)
 {
-	if (!mAllowEdit)
-	{
-		llwarns << "LLPanelGroupGeneral::apply() called with false mAllowEdit"
-				<< llendl;
-		return true;
-	}
+	BOOL has_power_in_group = gAgent.hasPowerInGroup(mGroupID,GP_GROUP_CHANGE_IDENTITY);
 
-	llinfos << "LLPanelGroupGeneral::apply" << llendl;
-	if (mGroupID.isNull())
+	if (has_power_in_group || mGroupID.isNull())
 	{
-		// Validate the group name length.
-		S32 group_name_len = mGroupNameEditor->getText().size();
-		if ( group_name_len < DB_GROUP_NAME_MIN_LEN 
-			|| group_name_len > DB_GROUP_NAME_STR_LEN)
+		llinfos << "LLPanelGroupGeneral::apply" << llendl;
+		if (mGroupID.isNull())
 		{
-			std::ostringstream temp_error;
-			temp_error << "A group name must be between " << DB_GROUP_NAME_MIN_LEN
-					   << " and " << DB_GROUP_NAME_STR_LEN << " characters.";
-			mesg = temp_error.str();
-			return false;
-		}
-
-		LLString::format_map_t args;
-		args["[MESSAGE]"] = mConfirmGroupCreateStr;
-		gViewerWindow->alertXml("GenericAlertYesCancel", args,
-								createGroupCallback,this);
+			// Validate the group name length.
+			S32 group_name_len = mGroupNameEditor->getText().size();
+			if ( group_name_len < DB_GROUP_NAME_MIN_LEN 
+				|| group_name_len > DB_GROUP_NAME_STR_LEN)
+			{
+				std::ostringstream temp_error;
+				temp_error << "A group name must be between " << DB_GROUP_NAME_MIN_LEN
+					<< " and " << DB_GROUP_NAME_STR_LEN << " characters.";
+				mesg = temp_error.str();
+				return false;
+			}
 
-        return false;
-	}
+			LLString::format_map_t args;
+			args["[MESSAGE]"] = mConfirmGroupCreateStr;
+			gViewerWindow->alertXml("GenericAlertYesCancel", args,
+				createGroupCallback,this);
 
-	LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID);
+			return false;
+		}
 
-	if (!gdatap)
-	{
-		mesg = "No group data found for group ";
-		mesg.append(mGroupID.asString());
-		return false;
-	}
+		LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID);
 
-	bool can_change_ident = false;
-	bool can_change_member_opts = false;
-	can_change_ident = gAgent.hasPowerInGroup(mGroupID,GP_GROUP_CHANGE_IDENTITY);
-	can_change_member_opts = gAgent.hasPowerInGroup(mGroupID,GP_MEMBER_OPTIONS);
+		if (!gdatap)
+		{
+			mesg = "No group data found for group ";
+			mesg.append(mGroupID.asString());
+			return false;
+		}
+		bool can_change_ident = false;
+		bool can_change_member_opts = false;
+		can_change_ident = gAgent.hasPowerInGroup(mGroupID,GP_GROUP_CHANGE_IDENTITY);
+		can_change_member_opts = gAgent.hasPowerInGroup(mGroupID,GP_MEMBER_OPTIONS);
 
-	if (can_change_ident)
-	{
-		if (mCtrlPublishOnWeb) gdatap->mAllowPublish = mCtrlPublishOnWeb->get();
-		if (mEditCharter) gdatap->mCharter = mEditCharter->getText();
-		if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID();
-		if (mCtrlMature)
+		if (can_change_ident)
 		{
-			if (gAgent.mAccess > SIM_ACCESS_PG)
+			if (mEditCharter) gdatap->mCharter = mEditCharter->getText();
+			if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID();
+			if (mCtrlMature)
 			{
-				gdatap->mMaturePublish = mCtrlMature->get();
+				if (gAgent.mAccess > SIM_ACCESS_PG)
+				{
+					gdatap->mMaturePublish = mCtrlMature->get();
+				}
+				else
+				{
+					gdatap->mMaturePublish = FALSE;
+				}
 			}
-			else
+			if (mCtrlShowInGroupList) gdatap->mShowInList = mCtrlShowInGroupList->get();
+		}
+
+		if (can_change_member_opts)
+		{
+			if (mCtrlOpenEnrollment) gdatap->mOpenEnrollment = mCtrlOpenEnrollment->get();
+			if (mCtrlEnrollmentFee && mSpinEnrollmentFee)
 			{
-				gdatap->mMaturePublish = FALSE;
+				gdatap->mMembershipFee = (mCtrlEnrollmentFee->get()) ? 
+					(S32) mSpinEnrollmentFee->get() : 0;
 			}
 		}
-		if (mCtrlShowInGroupList) gdatap->mShowInList = mCtrlShowInGroupList->get();
-	}
 
-	if (can_change_member_opts)
-	{
-		if (mCtrlOpenEnrollment) gdatap->mOpenEnrollment = mCtrlOpenEnrollment->get();
-		if (mCtrlEnrollmentFee && mSpinEnrollmentFee)
+		if (can_change_ident || can_change_member_opts)
 		{
-			gdatap->mMembershipFee = (mCtrlEnrollmentFee->get()) ? 
-										 (S32) mSpinEnrollmentFee->get() : 0;
+			gGroupMgr->sendUpdateGroupInfo(mGroupID);
 		}
+		notifyObservers();
 	}
 
-	if (can_change_ident || can_change_member_opts)
-	{
-		gGroupMgr->sendUpdateGroupInfo(mGroupID);
-	}
-
-	if (mCtrlReceiveNotices) gAgent.setGroupAcceptNotices(mGroupID, mCtrlReceiveNotices->get());
+	BOOL receive_notices = false;
+	BOOL list_in_profile = false;
+	if (mCtrlReceiveNotices)
+		receive_notices = mCtrlReceiveNotices->get();
+	if (mCtrlListGroup) 
+		list_in_profile = mCtrlListGroup->get();
 
+	gAgent.setUserGroupFlags(mGroupID, receive_notices, list_in_profile);
 	mChanged = FALSE;
-	notifyObservers();
 
 	return true;
 }
@@ -521,7 +525,7 @@ void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata)
 												self->mInsignia->getImageAssetID(),
 												enrollment_fee,
 												self->mCtrlOpenEnrollment->get(),
-												self->mCtrlPublishOnWeb->get(),
+												false,
 												self->mCtrlMature->get());
 
 		}
@@ -607,11 +611,6 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
 		mCtrlShowInGroupList->set(gdatap->mShowInList);
 		mCtrlShowInGroupList->setEnabled(mAllowEdit && can_change_ident);
 	}
-	if (mCtrlPublishOnWeb) 
-	{
-		mCtrlPublishOnWeb->set(gdatap->mAllowPublish);
-		mCtrlPublishOnWeb->setEnabled(mAllowEdit && can_change_ident);
-	}
 	if (mCtrlMature)
 	{
 		mCtrlMature->set(gdatap->mMaturePublish);
diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h
index 76a4d791e1c17aa3d45fabcfa4d3736c321d9ace..a8f10b04efd9e920e27990a1fc83494b3f94b661 100644
--- a/indra/newview/llpanelgroupgeneral.h
+++ b/indra/newview/llpanelgroupgeneral.h
@@ -44,6 +44,7 @@ class LLPanelGroupGeneral : public LLPanelGroupTab
 
 private:
 	static void onCommitAny(LLUICtrl* ctrl, void* data);
+	static void onCommitUserOnly(LLUICtrl* ctrl, void* data);
 	static void onCommitTitle(LLUICtrl* ctrl, void* data);
 	static void onCommitEnrollment(LLUICtrl* ctrl, void* data);
 	static void onClickJoin(void* userdata);
@@ -76,12 +77,12 @@ class LLPanelGroupGeneral : public LLPanelGroupTab
 
 	// Options
 	LLCheckBoxCtrl	*mCtrlShowInGroupList;
-	LLCheckBoxCtrl	*mCtrlPublishOnWeb;
 	LLCheckBoxCtrl	*mCtrlMature;
 	LLCheckBoxCtrl	*mCtrlOpenEnrollment;
 	LLCheckBoxCtrl	*mCtrlEnrollmentFee;
 	LLSpinCtrl      *mSpinEnrollmentFee;
 	LLCheckBoxCtrl	*mCtrlReceiveNotices;
+	LLCheckBoxCtrl  *mCtrlListGroup;
 	LLTextBox       *mActiveTitleLabel;
 	LLComboBox		*mComboActiveTitle;
 
diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp
index d0061e281e9edd84cf5023c0b169951166dda80d..133173b02d8f32060ce009d7771cab504f9b66ee 100644
--- a/indra/newview/llpanelpermissions.cpp
+++ b/indra/newview/llpanelpermissions.cpp
@@ -84,6 +84,8 @@ BOOL	LLPanelPermissions::postBuild()
 	this->childSetCommitCallback("checkbox next owner can copy",LLPanelPermissions::onCommitNextOwnerCopy,this);
 	this->childSetCommitCallback("checkbox next owner can transfer",LLPanelPermissions::onCommitNextOwnerTransfer,this);
 	this->childSetCommitCallback("clickaction",LLPanelPermissions::onCommitClickAction,this);
+	this->childSetCommitCallback("search_check",LLPanelPermissions::onCommitIncludeInSearch,this);
+	
 
 	LLTextBox*	LabelGroupNameRectProxy = gUICtrlFactory->getTextBoxByName(this,"Group Name Proxy");
 	if(LabelGroupNameRectProxy )
@@ -197,6 +199,10 @@ void LLPanelPermissions::refresh()
 		//checkbox for sale
 		childSetValue("checkbox for sale",FALSE);
 		childSetEnabled("checkbox for sale",false);
+
+		//checkbox include in search
+		childSetValue("search_check", FALSE);
+		childSetEnabled("search_check", false);
 		
 		LLRadioGroup*	RadioSaleType = gUICtrlFactory->getRadioGroupByName(this,"sale type");
 		if(RadioSaleType)
@@ -730,8 +736,15 @@ void LLPanelPermissions::refresh()
 		childSetTentative("checkbox for sale",false);
 	}
 
-	// Click action (touch, sit, buy)
+	// Check search status of objects
 	BOOL all_volume = gSelectMgr->selectionAllPCode( LL_PCODE_VOLUME );
+	bool include_in_search;
+	bool all_include_in_search = gSelectMgr->selectionGetIncludeInSearch(&include_in_search);
+	childSetEnabled("search_check", is_perm_modify && all_volume);
+	childSetValue("search_check", include_in_search);
+	childSetTentative("search_check", ! all_include_in_search);
+
+	// Click action (touch, sit, buy)
 	U8 click_action = 0;
 	if (gSelectMgr->selectionGetClickAction(&click_action))
 	{
@@ -1044,3 +1057,13 @@ void LLPanelPermissions::onCommitClickAction(LLUICtrl* ctrl, void*)
 	}
 	gSelectMgr->selectionSetClickAction(click_action);
 }
+
+// static
+void LLPanelPermissions::onCommitIncludeInSearch(LLUICtrl* ctrl, void*)
+{
+	LLCheckBoxCtrl* box = (LLCheckBoxCtrl*)ctrl;
+	llassert(box);
+
+	gSelectMgr->selectionSetIncludeInSearch(box->get());
+}
+
diff --git a/indra/newview/llpanelpermissions.h b/indra/newview/llpanelpermissions.h
index 286a66f397a563bfe1c89e2e8c9826974e921b70..48c52b56b9fdc195a14ac2dcacb9482a44cdc395 100644
--- a/indra/newview/llpanelpermissions.h
+++ b/indra/newview/llpanelpermissions.h
@@ -75,6 +75,7 @@ class LLPanelPermissions : public LLPanel
 	void setAllSaleInfo();
 
 	static void	onCommitClickAction(LLUICtrl* ctrl, void*);
+	static void onCommitIncludeInSearch(LLUICtrl* ctrl, void*);
 
 protected:
 	LLNameBox*		mLabelGroupName;		// group name
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 341dec41159dceab41142f0489944ffb89caf7fe..2e67112e3ed94c0de77078b03b8e10b8c97e3cd8 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -1997,6 +1997,43 @@ BOOL LLSelectMgr::selectionGetMaterial(U8 *out_material)
 	return identical;
 }
 
+
+bool LLSelectMgr::selectionGetIncludeInSearch(bool* include_in_search_out)
+{
+	LLViewerObject *object = mSelectedObjects->getFirstRootObject();
+	if (!object) return FALSE;
+
+	bool include_in_search = object->getIncludeInSearch();
+
+	bool identical = true;
+	for ( object = mSelectedObjects->getFirstRootObject(); object; object = mSelectedObjects->getNextRootObject() )
+	{
+		if ( include_in_search != object->getIncludeInSearch())
+		{
+			identical = false;
+			break;
+		}
+	}
+
+	*include_in_search_out = include_in_search;
+	return identical;
+}
+
+void LLSelectMgr::selectionSetIncludeInSearch(bool include_in_search)
+{
+	LLViewerObject* object = NULL;
+	for ( object = mSelectedObjects->getFirstRootObject(); object; object = mSelectedObjects->getNextRootObject() )
+	{
+		object->setIncludeInSearch(include_in_search);
+	}
+	sendListToRegions(
+		"ObjectIncludeInSearch",
+		packAgentAndSessionID,
+		packObjectIncludeInSearch, 
+		&include_in_search,
+		SEND_ONLY_ROOTS);
+}
+
 BOOL LLSelectMgr::selectionGetClickAction(U8 *out_action)
 {
 	LLViewerObject *object = mSelectedObjects->getFirstObject();
@@ -4022,6 +4059,13 @@ void LLSelectMgr::packObjectClickAction(LLSelectNode* node, void *user_data)
 	gMessageSystem->addU8("ClickAction", node->getObject()->getClickAction());
 }
 
+void LLSelectMgr::packObjectIncludeInSearch(LLSelectNode* node, void *user_data)
+{
+	gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
+	gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID() );
+	gMessageSystem->addBOOL("IncludeInSearch", node->getObject()->getIncludeInSearch());
+}
+
 // static
 void LLSelectMgr::packObjectLocalID(LLSelectNode* node, void *)
 {
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index 49868437987fd4958f00beabdad281fd6dec67fd..1dc9bce4d52fc5bfcc24322bda6458057dd41a18 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -334,6 +334,7 @@ class LLSelectMgr : public LLEditMenuHandler
 	BOOL selectionGetFullbright(U8 *fullbright);// true if all selected tes have same
 	bool selectionGetMediaType(U8 *media_type);	// true if all selected tes have same
 	BOOL selectionGetClickAction(U8* action);
+	bool selectionGetIncludeInSearch(bool* include_in_search_out); // true if all selected objects have same
 
 	void selectionSetMaterial(U8 material);
 	void selectionSetImage(const LLUUID& imageid); // could be item or asset id
@@ -348,6 +349,7 @@ class LLSelectMgr : public LLEditMenuHandler
 	void selectionSetFullbright( U8 fullbright );
 	void selectionSetMediaTypeAndURL( U8 media_type, const std::string& media_url );
 	void selectionSetClickAction(U8 action);
+	void selectionSetIncludeInSearch(bool include_in_search);
 
 	void selectionSetObjectPermissions(U8 perm_field, BOOL set, U32 perm_mask, BOOL override = FALSE);
 	void selectionSetObjectName(const LLString& name);
@@ -498,6 +500,7 @@ class LLSelectMgr : public LLEditMenuHandler
 	static void packObjectIDAndRotation(	LLSelectNode* node, void *);
 	static void packObjectLocalID(LLSelectNode* node, void *);
 	static void packObjectClickAction(LLSelectNode* node, void* data);
+	static void packObjectIncludeInSearch(LLSelectNode* node, void* data);
 	static void packObjectName(LLSelectNode* node, void* user_data);
 	static void packObjectDescription(LLSelectNode* node, void* user_data);
 	static void packObjectCategory(LLSelectNode* node, void* user_data);
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 2d39bec6a7d2d2071451d4fb8f3f835883bdd13d..fb8d7af00493a99451e5880a905049e513e0125f 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -4671,6 +4671,23 @@ void LLViewerObject::markForUpdate(BOOL priority)
 	}
 }
 
+bool LLViewerObject::getIncludeInSearch() const
+{
+	return ((mFlags & FLAGS_INCLUDE_IN_SEARCH) != 0);
+}
+
+void LLViewerObject::setIncludeInSearch(bool include_in_search)
+{
+	if (include_in_search)
+	{
+		mFlags |= FLAGS_INCLUDE_IN_SEARCH;
+	}
+	else
+	{
+		mFlags &= ~FLAGS_INCLUDE_IN_SEARCH;
+	}
+}
+
 void LLViewerObject::setRegion(LLViewerRegion *regionp)
 {
 	llassert(regionp);
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index a7cc4c818cfbd45d1043b284c3230f53fe6fa165..1ec3c4c6bc5fe89aa208f57cc146227c3af5f9b5 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -407,6 +407,9 @@ class LLViewerObject : public LLPrimitive, public LLRefCount
 	inline BOOL		flagCameraSource() const		{ return ((mFlags & FLAGS_CAMERA_SOURCE) != 0); }
 	inline BOOL		flagCameraDecoupled() const		{ return ((mFlags & FLAGS_CAMERA_DECOUPLED) != 0); }
 
+	bool getIncludeInSearch() const;
+	void setIncludeInSearch(bool include_in_search);
+
 	// Does "open" object menu item apply?
 	BOOL allowOpen() const;
 
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index b7167b71701933b1059f1e4d36a51ac449ece139..8f2362015bbe310f7a838f28d1178703675969b0 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1258,6 +1258,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	capabilityNames.append("ProvisionVoiceAccountRequest");
 	capabilityNames.append("ServerReleaseNotes");
 	capabilityNames.append("CopyInventoryFromNotecard");
+	capabilityNames.append("DispatchRegionInfo");
 
 	llinfos << "posting to seed " << url << llendl;
 
diff --git a/scripts/messages/message_template.msg b/scripts/messages/message_template.msg
index 4572941248b40f0a3bb3f49af4e4d3ea3bdbad2f..983be8a11d054283f64daba52ae5fad07c7420be 100644
--- a/scripts/messages/message_template.msg
+++ b/scripts/messages/message_template.msg
@@ -3783,6 +3783,10 @@ version 2.0
 		{	GroupName			Variable 1	}
 		{	GroupInsigniaID		LLUUID		}
 	}
+	{
+		NewGroupData		Single
+		{	ListInProfile	BOOL		}	// whether group displays in profile
+	}
 }
 
 
@@ -7823,6 +7827,10 @@ version 2.0
 		{	GroupID		LLUUID	}
 		{	AcceptNotices	BOOL	}
 	}
+	{
+		NewData				Single
+		{	ListInProfile	BOOL	}
+	}
 }
 
 // GroupRoleDataRequest
@@ -8140,7 +8148,7 @@ version 2.0
 // dataserver -> simulator -> viewer
 // reliable
 {
-	AgentGroupDataUpdate Low 389 Trusted Zerocoded
+	AgentGroupDataUpdate Low 389 Trusted Zerocoded UDPDeprecated
 	{
 		AgentData			Single
 		{	AgentID				LLUUID	}
@@ -8763,3 +8771,18 @@ version 2.0
 	}
 }
 
+// ObjectIncludeInSearch
+// viewer -> simulator
+{
+	ObjectIncludeInSearch Low 424 NotTrusted Unencoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
+	{
+		ObjectData		Variable
+		{	ObjectLocalID	U32		}
+		{	IncludeInSearch	BOOL	}
+	}
+}