diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp
index f6d9f166e10a832b0323d3300b0ddd1034820fff..628ebb7aec3df738b5ad38f01ed3f0452401287c 100644
--- a/indra/llcommon/llassettype.cpp
+++ b/indra/llcommon/llassettype.cpp
@@ -8,9 +8,11 @@
 
 #include "linden_common.h"
 
+#include "llassettype.h"
+
 #include <time.h>
 
-#include "llassettype.h"
+#include "llstring.h"
 #include "lltimer.h"
 
 // I added lookups for exact text of asset type enums in addition to the ones below, so shoot me. -Steve
@@ -49,9 +51,9 @@ asset_info_t asset_types[] =
 	{ LLAssetType::AT_NONE, "NONE" },
 };
 
-LLAssetType::EType LLAssetType::getType(const LLString& sin)
+LLAssetType::EType LLAssetType::getType(const std::string& sin)
 {
-	LLString s = sin;
+	std::string s = sin;
 	LLString::toUpper(s);
 	for (S32 idx = 0; ;idx++)
 	{
@@ -64,17 +66,17 @@ LLAssetType::EType LLAssetType::getType(const LLString& sin)
 	return LLAssetType::AT_NONE;
 }
 
-LLString LLAssetType::getDesc(LLAssetType::EType type)
+std::string LLAssetType::getDesc(LLAssetType::EType type)
 {
 	for (S32 idx = 0; ;idx++)
 	{
 		asset_info_t* info = asset_types + idx;
 		if (type == info->type)
-			return LLString(info->desc);
+			return info->desc;
 		if (info->type == LLAssetType::AT_NONE)
 			break;
 	}
-	return LLString("BAD TYPE");
+	return "BAD TYPE";
 }
 
 //============================================================================
@@ -206,7 +208,7 @@ EDragAndDropType LLAssetType::lookupDragAndDropType( EType asset )
 
 // static. Generate a good default description
 void LLAssetType::generateDescriptionFor(LLAssetType::EType type,
-										 LLString& desc)
+										 std::string& desc)
 {
 	const S32 BUF_SIZE = 30;
 	char time_str[BUF_SIZE];	/* Flawfinder: ignore */
diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h
index 2b5aadf078e0a261897e39d953ee3e3390fe9388..abc118fe9c92d7d654db15b4916bedf718f2624a 100644
--- a/indra/llcommon/llassettype.h
+++ b/indra/llcommon/llassettype.h
@@ -9,6 +9,8 @@
 #ifndef LL_LLASSETTYPE
 #define LL_LLASSETTYPE
 
+#include <string>
+
 #include "stdenums.h" 	// for EDragAndDropType
 
 class LLAssetType
@@ -131,10 +133,10 @@ class LLAssetType
 	// Generate a good default description. You may want to add a verb
 	// or agent name after this depending on your application.
 	static void generateDescriptionFor(LLAssetType::EType type,
-									   LLString& desc);
+									   std::string& desc);
 
-	static EType getType(const LLString& sin);
-	static LLString getDesc(EType type);
+	static EType getType(const std::string& sin);
+	static std::string getDesc(EType type);
 	
 private:
 	// don't instantiate or derive one of these objects
diff --git a/indra/llcommon/llavatarconstants.h b/indra/llcommon/llavatarconstants.h
index ccfec63b83c0660d1140451183798790a1f45e60..67bd329732c648b5d2e9418d3834961e94b54304 100644
--- a/indra/llcommon/llavatarconstants.h
+++ b/indra/llcommon/llavatarconstants.h
@@ -20,5 +20,17 @@ const char* const BLACKLIST_PROFILE_WEB_URL = "http://secondlife.com/app/webdisa
 // Maximum number of avatar picks
 const S32 MAX_AVATAR_PICKS = 10;
 
+// For Flags in AvatarPropertiesReply
+const U32 AVATAR_ALLOW_PUBLISH			= 0x1 << 0;	// whether profile is externally visible or not
+const U32 AVATAR_MATURE_PUBLISH			= 0x1 << 1;	// profile is "mature"
+const U32 AVATAR_IDENTIFIED				= 0x1 << 2;	// whether avatar has provided payment info
+const U32 AVATAR_TRANSACTED				= 0x1 << 3;	// whether avatar has actively used payment info
+const U32 AVATAR_ONLINE					= 0x1 << 4; // the online status of this avatar, if known.
+
+static const std::string VISIBILITY_DEFAULT("default");
+static const std::string VISIBILITY_HIDDEN("hidden");
+static const std::string VISIBILITY_VISIBLE("visible");
+static const std::string VISIBILITY_INVISIBLE("invisible");
+
 #endif
 
diff --git a/indra/llcommon/llsdutil.cpp b/indra/llcommon/llsdutil.cpp
index 7cd0ed4c085fe6feda48a3f8f7a74d8d4c1920a8..a6ac2fb12b74787b81ea10c75ce5c865aea5641b 100644
--- a/indra/llcommon/llsdutil.cpp
+++ b/indra/llcommon/llsdutil.cpp
@@ -203,3 +203,14 @@ U32 ll_ipaddr_from_sd(const LLSD& sd)
 	memcpy(&ret, &(v[0]), 4);		/* Flawfinder: ignore */
 	return ret;
 }
+
+// Converts an LLSD binary to an LLSD string
+LLSD ll_string_from_binary(const LLSD& sd)
+{
+	std::vector<U8> value = sd.asBinary();
+	char* c_str = new char[value.size() + 1];
+	memcpy(c_str, &value[0], value.size());
+	c_str[value.size()] = '\0';
+
+	return c_str;
+}
diff --git a/indra/llcommon/llsdutil.h b/indra/llcommon/llsdutil.h
index 79961c53118a3f577f306781d56a267b26c0d3d5..44e9429d7ff916423d02f077850c0c9c01690d5e 100644
--- a/indra/llcommon/llsdutil.h
+++ b/indra/llcommon/llsdutil.h
@@ -51,4 +51,7 @@ U64 ll_U64_from_sd(const LLSD& sd);
 LLSD ll_sd_from_ipaddr(const U32);
 U32 ll_ipaddr_from_sd(const LLSD& sd);
 
+// Binary to string
+LLSD ll_string_from_binary(const LLSD& sd);
+
 #endif // LL_LLSDUTIL_H
diff --git a/indra/llcommon/lluri.cpp b/indra/llcommon/lluri.cpp
index 1b6617339930686f583f082ea9ee3747cd6a8990..5ecba4420d9f7448030cc3fe0c93fa6980305e75 100644
--- a/indra/llcommon/lluri.cpp
+++ b/indra/llcommon/lluri.cpp
@@ -9,9 +9,13 @@
  */
 
 #include "linden_common.h"
+
+#include "llapp.h"
 #include "lluri.h"
 #include "llsd.h"
 
+#include "../llmath/lluuid.h"
+
 // uric = reserved | unreserved | escaped
 // reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
 // unreserved = alphanum | mark
@@ -353,9 +357,21 @@ LLURI LLURI::buildHTTP(const std::string& host_port,
 					   const LLSD& path)
 {
 	LLURI result;
-	result.mScheme = "HTTP";
+	
 	// TODO: deal with '/' '?' '#' in host_port
-	result.mEscapedAuthority = "//" + escape(host_port);
+	S32 index = host_port.find("://");
+	if (index != host_port.npos)
+	{
+		// The scheme is part of the host_port
+		result.mScheme = "";
+		result.mEscapedAuthority = escape(host_port);
+	}
+	else
+	{
+		result.mScheme = "HTTP";
+		result.mEscapedAuthority = "//" + escape(host_port);
+	}
+
 	if (path.isArray())
 	{
 		// break out and escape each path component
@@ -397,6 +413,70 @@ LLURI LLURI::buildHTTP(const std::string& host_port,
 	return result;
 }
 
+// static
+LLURI LLURI::buildAgentPresenceURI(const LLUUID& agent_id, LLApp* app)
+{
+	std::string host = "localhost:12040";
+
+	if (app)
+	{
+		host = app->getOption("backbone-host-port").asString();
+	}
+
+	LLSD path = LLSD::emptyArray();
+	path.append("agent");
+	path.append(agent_id);
+	path.append("presence");
+
+	return buildHTTP(host, path);
+}
+
+// static
+LLURI LLURI::buildBulkAgentPresenceURI(LLApp* app)
+{
+	std::string host = "localhost:12040";
+
+	if (app)
+	{
+		host = app->getOption("backbone-host-port").asString();
+	}
+
+	LLSD path = LLSD::emptyArray();
+	path.append("agent");
+	path.append("presence");
+
+	return buildHTTP(host, path);
+}
+
+// static
+LLURI LLURI::buildAgentSessionURI(const LLUUID& agent_id, LLApp* app)
+{
+	std::string host = "localhost:12040";
+
+	if (app)
+	{
+		host = app->getOption("backbone-host-port").asString();
+	}
+
+	LLSD path = LLSD::emptyArray();
+	path.append("agent");
+	path.append(agent_id);
+	path.append("session");
+
+	return buildHTTP(host, path);
+}
+
+// static
+LLURI LLURI::buildAgentLoginInfoURI(const LLUUID& agent_id, const std::string& dataserver)
+{
+	LLSD path = LLSD::emptyArray();
+	path.append("agent");
+	path.append(agent_id);
+	path.append("logininfo");
+
+	return buildHTTP(dataserver, path);
+}
+
 std::string LLURI::asString() const
 {
 	if (mScheme.empty())
diff --git a/indra/llcommon/lluri.h b/indra/llcommon/lluri.h
index 3fc62aeb989ff80562b82fb76fa3160eb220e614..b1ac0bca2b95ddcd12e251e9a4be3f2362dbd3b8 100644
--- a/indra/llcommon/lluri.h
+++ b/indra/llcommon/lluri.h
@@ -14,6 +14,8 @@
 #include <string>
 
 class LLSD;
+class LLUUID;
+class LLApp;
 
 /** 
  *
@@ -61,6 +63,11 @@ class LLURI
 	static std::string escape(const std::string& str);
 	static std::string unescape(const std::string& str);
 
+	// Functions for building specific URIs for web services
+	static LLURI buildAgentPresenceURI(const LLUUID& agent_id, LLApp* app);
+	static LLURI buildBulkAgentPresenceURI(LLApp* app);
+	static LLURI buildAgentSessionURI(const LLUUID& agent_id, LLApp* app);
+	static LLURI buildAgentLoginInfoURI(const LLUUID& agent_id, const std::string& dataserver);
 private:
 	std::string mScheme;
 	std::string mEscapedOpaque;
diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp
index 38dee267230a20dac0df789edba897700611ddc5..7d51b6c722492151becf05b790af47f8ac636c77 100644
--- a/indra/llmessage/llhttpclient.cpp
+++ b/indra/llmessage/llhttpclient.cpp
@@ -7,8 +7,10 @@
  */
 
 #include "linden_common.h"
-#include "llassetstorage.h"
+
 #include "llhttpclient.h"
+
+#include "llassetstorage.h"
 #include "lliopipe.h"
 #include "llurlrequest.h"
 #include "llbufferstream.h"
@@ -232,6 +234,11 @@ void LLHTTPClient::post(const std::string& url, const LLSD& body, ResponderPtr r
 	request(url, LLURLRequest::HTTP_POST, new LLSDInjector(body), responder);
 }
 
+void LLHTTPClient::del(const std::string& url, ResponderPtr responder)
+{
+	request(url, LLURLRequest::HTTP_DELETE, NULL, responder);
+}
+
 #if 1
 void LLHTTPClient::postFile(const std::string& url, const std::string& filename, ResponderPtr responder)
 {
diff --git a/indra/llmessage/llhttpclient.h b/indra/llmessage/llhttpclient.h
index 563450f07ec768b25664ee1ff3e56537702fa240..41ccb1fad9c523aa4303d5a3b4aef1da0b563bbc 100644
--- a/indra/llmessage/llhttpclient.h
+++ b/indra/llmessage/llhttpclient.h
@@ -16,8 +16,10 @@
 #include <string>
 
 #include <boost/intrusive_ptr.hpp>
-#include "llassetstorage.h"
 
+#include "llassettype.h"
+
+class LLUUID;
 class LLPumpIO;
 class LLSD;
 
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index 2f68a020cac3c98a9b95c2697195b5a9f03237ae..6ef64e4b4bd9dbdebaa232c06b0a78f0ae0849a6 100644
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
 /* Localized versions of Info.plist keys */
 
 CFBundleName = "Second Life";
-CFBundleShortVersionString = "Second Life version 1.13.2.15";
-CFBundleGetInfoString = "Second Life version 1.13.2.15, Copyright 2004-2006 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version 1.13.3.2";
+CFBundleGetInfoString = "Second Life version 1.13.3.2, Copyright 2004-2006 Linden Research, Inc.";
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index 3e6c65e953b0edc7c812ce194651fd2b2d920245..6e1de8bb078a81d92fb31c3dc6812b5fcf2caeac 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>1.13.2.15</string>
+	<string>1.13.3.2</string>
 	<key>CSResourcesFileMapped</key>
 	<true/>
 </dict>
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 3b4c7c2f59e8896a5b684be7dfee3b3d48df23b8..be06154c29b709c4107ac73d64e148b219d21d64 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -999,8 +999,8 @@ void LLPanelLandGeneral::onCommitAny(LLUICtrl *ctrl, void *userdata)
 	}
 
 	// Extract data from UI
-	std::string name		= panelp->mEditName->getText();
-	std::string desc		= panelp->mEditDesc->getText();
+	std::string name = panelp->mEditName->getText();
+	std::string desc = panelp->mEditDesc->getText();
 
 	// Valid data from UI
 
@@ -1104,7 +1104,7 @@ BOOL LLPanelLandObjects::postBuild()
 
 	mCleanOtherObjectsTime = LLUICtrlFactory::getLineEditorByName(this, "clean other time");
 	mCleanOtherObjectsTime->setFocusLostCallback(onLostFocus);	
-	childSetPrevalidate("clean other time", LLLineEditor::prevalidatePrintableNotPipe);
+	childSetPrevalidate("clean other time", LLLineEditor::prevalidateNonNegativeS32);
 	childSetUserData("clean other time", this);
 	
 	mOwnerListText = LLUICtrlFactory::getTextBoxByName(this, "Object Owners:");
diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp
index 4311a899c4985d6bd42b5be9a46e94f6177fb1ae..76a387556e01b6351756731e29e122331b08fe7c 100644
--- a/indra/newview/llfloaterproperties.cpp
+++ b/indra/newview/llfloaterproperties.cpp
@@ -145,6 +145,7 @@ LLFloaterProperties::LLFloaterProperties(const std::string& name, const LLRect&
 	childSetPrevalidate("LabelItemName",&LLLineEditor::prevalidatePrintableNotPipe);
 	childSetCommitCallback("LabelItemName",onCommitName,this);
 	childSetPrevalidate("LabelItemDesc",&LLLineEditor::prevalidatePrintableNotPipe);
+	childSetCommitCallback("LabelItemDesc", onCommitDescription, this);
 	// Creator information
 	childSetAction("BtnCreator",onClickCreator,this);
 	// owner information
diff --git a/indra/newview/llhudeffect.cpp b/indra/newview/llhudeffect.cpp
index 4f80fffb013d563bab8a3ff8026b4411f3670188..8fbfcb65e74af451bd823ae2213358e68fa7c978 100644
--- a/indra/newview/llhudeffect.cpp
+++ b/indra/newview/llhudeffect.cpp
@@ -38,6 +38,7 @@ LLHUDEffect::~LLHUDEffect()
 void LLHUDEffect::packData(LLMessageSystem *mesgsys)
 {
 	mesgsys->addUUIDFast(_PREHASH_ID, mID);
+	mesgsys->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
 	mesgsys->addU8Fast(_PREHASH_Type, mType);
 	mesgsys->addF32Fast(_PREHASH_Duration, mDuration);
 	mesgsys->addBinaryData(_PREHASH_Color, mColor.mV, 4);
diff --git a/indra/newview/llhudmanager.cpp b/indra/newview/llhudmanager.cpp
index 40e140253e8738d6c0483b20dd7f7056989691f2..31e6318d25b1094abe93c5ed076573b8373c7303 100644
--- a/indra/newview/llhudmanager.cpp
+++ b/indra/newview/llhudmanager.cpp
@@ -176,9 +176,13 @@ void LLHUDManager::sendEffects()
 		}
 		if (hep->getNeedsSendToSim() && hep->getOriginatedHere())
 		{
-			gMessageSystem->newMessageFast(_PREHASH_ViewerEffect);
-			gMessageSystem->nextBlockFast(_PREHASH_Effect);
-			hep->packData(gMessageSystem);
+			LLMessageSystem* msg = gMessageSystem;
+			msg->newMessageFast(_PREHASH_ViewerEffect);
+			msg->nextBlockFast(_PREHASH_AgentData);
+			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+			msg->nextBlockFast(_PREHASH_Effect);
+			hep->packData(msg);
 			hep->setNeedsSendToSim(FALSE);
 			gAgent.sendMessage();
 		}
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index 9b1a6caf0e1694120f6d842bb1d9ce865c9c7d1b..615086e7d475a1c7d1cfee4a181cf86426cfa285 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -400,8 +400,11 @@ BOOL LLPanelAvatarSecondLife::postBuild(void)
 	childSetVisible("allow_publish",LLPanelAvatar::sAllowFirstLife);
 	childSetVisible("?",LLPanelAvatar::sAllowFirstLife);
 
-	childSetVisible("online_unknown",TRUE);
 	childSetVisible("online_yes",FALSE);
+
+	// These are cruft but may still exist in some xml files
+	// TODO: remove the following 2 lines once translators grab these changes
+	childSetVisible("online_unknown",FALSE);
 	childSetVisible("online_no",FALSE);
 
 	childSetAction("Show on Map", LLPanelAvatar::onClickTrack, mPanelAvatar);
@@ -1279,6 +1282,19 @@ void LLPanelAvatar::setAvatar(LLViewerObject *avatarp)
 	setAvatarID(avatarp->getID(), name, ONLINE_STATUS_YES);
 }
 
+void LLPanelAvatar::setOnlineStatus(EOnlineStatus online_status)
+{
+	// Online status NO could be because they are hidden
+	// If they are a friend, we may know the truth!
+	if ((ONLINE_STATUS_YES != online_status)
+		&& mIsFriend
+		&& (LLAvatarTracker::instance().isBuddyOnline( mAvatarID )))
+	{
+		online_status = ONLINE_STATUS_YES;
+	}
+
+	mPanelSecondLife->childSetVisible("online_yes", (online_status == ONLINE_STATUS_YES));
+}
 
 void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const LLString &name,
 								EOnlineStatus online_status)
@@ -1295,50 +1311,8 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const LLString &name,
 	// Determine if we have their calling card.
 	mIsFriend = is_agent_friend(mAvatarID); 
 
-	if (ONLINE_STATUS_UNKNOWN == online_status)
-	{
-		// Determine if we know that they are online.  If we can see them,
-		// we know they're online.  Likewise, if we have a calling card,
-		// we know.  Otherwise we don't.
-		LLViewerObject* object = gObjectList.findObject( mAvatarID );
-		if (object && !object->isDead())
-		{
-			online_status = ONLINE_STATUS_YES;
-		}
-		else if (mIsFriend)
-		{
-			if (LLAvatarTracker::instance().isBuddyOnline( mAvatarID ))
-			{
-				online_status = ONLINE_STATUS_YES;
-			}
-			else
-			{
-				online_status = ONLINE_STATUS_NO;
-			}
-		}
-		else
-		{
-			// Don't actually know if they are online.
-		}
-	}
-
-	mPanelSecondLife->childSetVisible("online_unknown",FALSE);
-	mPanelSecondLife->childSetVisible("online_yes",FALSE);
-	mPanelSecondLife->childSetVisible("online_no",FALSE);
-
-	switch(online_status)
-	{
-	  case ONLINE_STATUS_YES:
-		mPanelSecondLife->childSetVisible("online_yes",TRUE);
-		break;
-	  case ONLINE_STATUS_NO:
-		mPanelSecondLife->childSetVisible("online_no",TRUE);
-		break;
-	  case ONLINE_STATUS_UNKNOWN:
-	  default:
-		mPanelSecondLife->childSetVisible("online_unknown",TRUE);
-		break;
-	}
+	// setOnlineStatus uses mIsFriend
+	setOnlineStatus(online_status);
 	
 	BOOL own_avatar = (mAvatarID == gAgent.getID() );
 
@@ -1736,8 +1710,11 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
 	//BOOL	mature = FALSE;
 	BOOL	identified = FALSE;
 	BOOL	transacted = FALSE;
+	BOOL	online = FALSE;
 	char	profile_url[DB_USER_PROFILE_URL_BUF_SIZE];
 
+	U32		flags = 0x0;
+
 	//llinfos << "properties packet size " << msg->getReceiveSize() << llendl;
 
 	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
@@ -1757,7 +1734,6 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
 		{
 			self->childSetEnabled("Rate...",TRUE);
 		}
-		lldebugs << "!!!!!!!!!!!!!!!!!!!!!!Enabling drop target" << llendl;
 		self->childSetEnabled("drop target",TRUE);
 
 		self->mHaveProperties = TRUE;
@@ -1769,9 +1745,17 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
 		msg->getStringFast(_PREHASH_PropertiesData, _PREHASH_AboutText,	DB_USER_ABOUT_BUF_SIZE,		about_text );
 		msg->getStringFast(_PREHASH_PropertiesData, _PREHASH_FLAboutText,	DB_USER_FL_ABOUT_BUF_SIZE,		fl_about_text );
 		msg->getStringFast(_PREHASH_PropertiesData, _PREHASH_BornOn, DB_BORN_BUF_SIZE, born_on);
-		msg->getBOOLFast(_PREHASH_PropertiesData, _PREHASH_Identified,  identified);
-		msg->getBOOLFast(_PREHASH_PropertiesData, _PREHASH_Transacted,  transacted);
 		msg->getString("PropertiesData","ProfileURL", DB_USER_PROFILE_URL_BUF_SIZE, profile_url);
+		msg->getU32Fast(_PREHASH_PropertiesData, _PREHASH_Flags, flags);
+		
+		identified = (flags & AVATAR_IDENTIFIED);
+		transacted = (flags & AVATAR_TRANSACTED);
+		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;
@@ -1849,7 +1833,6 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
 			{
 				image_ctrl->setImageAssetID(fl_image_id);
 			}
-			msg->getBOOL("PropertiesData", "AllowPublish", allow_publish);
 
 			self->mPanelSecondLife->childSetValue("allow_publish", allow_publish);
 
diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h
index 0cdcdf938b313a49879dd07efc05cfa1b4877c6c..713750ad06a502e053064827f6c49032a70c52cd 100644
--- a/indra/newview/llpanelavatar.h
+++ b/indra/newview/llpanelavatar.h
@@ -36,7 +36,6 @@ class LLWebBrowserCtrl;
 
 enum EOnlineStatus
 {
-	ONLINE_STATUS_UNKNOWN = -1,
 	ONLINE_STATUS_NO      = 0,
 	ONLINE_STATUS_YES     = 1
 };
@@ -243,6 +242,8 @@ class LLPanelAvatar : public LLPanel
 	// Pass one of the ONLINE_STATUS_foo constants above.
 	void setAvatarID(const LLUUID &avatar_id, const LLString &name, EOnlineStatus online_status);
 
+	void setOnlineStatus(EOnlineStatus online_status);
+
 	const LLUUID& getAvatarID() const { return mAvatarID; }
 
 	void disableRate();
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index b2889f961a6f9e3e6e6b18b3189212100d768bdf..05e3159864cd88e45cfd62d881cd0d4184e8326d 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -562,21 +562,21 @@ void init_menus()
 	// flash when an item is triggered (the flash occurs in the holder)
 	gViewerWindow->getRootView()->addChild(gMenuHolder);
 
-		gMenuHolder->childSetLabelArg("Upload Image", "[COST]", "10");
-		gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", "10");
-		gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", "10");
-		gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", "10");
+	gMenuHolder->childSetLabelArg("Upload Image", "[COST]", "10");
+	gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", "10");
+	gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", "10");
+	gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", "10");
 
-		gAFKMenu = (LLMenuItemCallGL*)gMenuBarView->getChildByName("Set Away", TRUE);
-		gBusyMenu = (LLMenuItemCallGL*)gMenuBarView->getChildByName("Set Busy", TRUE);
-		gAttachSubMenu = gMenuBarView->getChildMenuByName("Attach Object", TRUE);
-		gDetachSubMenu = gMenuBarView->getChildMenuByName("Detach Object", TRUE);
+	gAFKMenu = (LLMenuItemCallGL*)gMenuBarView->getChildByName("Set Away", TRUE);
+	gBusyMenu = (LLMenuItemCallGL*)gMenuBarView->getChildByName("Set Busy", TRUE);
+	gAttachSubMenu = gMenuBarView->getChildMenuByName("Attach Object", TRUE);
+	gDetachSubMenu = gMenuBarView->getChildMenuByName("Detach Object", TRUE);
 
-		if (gAgent.mAccess < SIM_ACCESS_MATURE)
-		{
-			gMenuBarView->getChildByName("Menu Underpants", TRUE)->setVisible(FALSE);
-			gMenuBarView->getChildByName("Menu Undershirt", TRUE)->setVisible(FALSE);
-		}
+	if (gAgent.mAccess < SIM_ACCESS_MATURE)
+	{
+		gMenuBarView->getChildByName("Menu Underpants", TRUE)->setVisible(FALSE);
+		gMenuBarView->getChildByName("Menu Undershirt", TRUE)->setVisible(FALSE);
+	}
 
 	// TomY TODO convert these two
 	LLMenuGL*menu;
@@ -607,23 +607,23 @@ void init_menus()
 	///
 	gPieSelf = gUICtrlFactory->buildPieMenu("menu_pie_self.xml", gMenuHolder);
 
-		// TomY TODO: what shall we do about these?
-		gDetachScreenPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach HUD", true);
-		gDetachPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach", true);
+	// TomY TODO: what shall we do about these?
+	gDetachScreenPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach HUD", true);
+	gDetachPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach", true);
 
-		if (gAgent.mAccess < SIM_ACCESS_MATURE)
-		{
-			gMenuHolder->getChildByName("Self Underpants", TRUE)->setVisible(FALSE);
-			gMenuHolder->getChildByName("Self Undershirt", TRUE)->setVisible(FALSE);
-		}
+	if (gAgent.mAccess < SIM_ACCESS_MATURE)
+	{
+		gMenuHolder->getChildByName("Self Underpants", TRUE)->setVisible(FALSE);
+		gMenuHolder->getChildByName("Self Undershirt", TRUE)->setVisible(FALSE);
+	}
 
 	gPieAvatar = gUICtrlFactory->buildPieMenu("menu_pie_avatar.xml", gMenuHolder);
 
 	gPieObject = gUICtrlFactory->buildPieMenu("menu_pie_object.xml", gMenuHolder);
 
-		gAttachScreenPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Attach HUD", true);
-		gAttachPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Attach", true);
-		gPieRate = (LLPieMenu*)gMenuHolder->getChildByName("Rate Menu", true);
+	gAttachScreenPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Attach HUD", true);
+	gAttachPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Attach", true);
+	gPieRate = (LLPieMenu*)gMenuHolder->getChildByName("Rate Menu", true);
 
 	gPieAttachment = gUICtrlFactory->buildPieMenu("menu_pie_attachment.xml", gMenuHolder);
 
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index dff2a6c9e02de78c05175b5cea181ffcf6f1125b..f95ec9e3ccbcc994e7845bc258b54af32be8f300 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -3887,7 +3887,7 @@ void process_alert_core(const char* buffer, BOOL modal)
 	{
 		//XUI:translate
 		LLString::format_map_t args;
-		args["[BUFFER]"] = buffer;
+		args["[ERROR_MESSAGE]"] = buffer;
 		gViewerWindow->alertXml("ErrorMessage", args);
 	}
 	else
diff --git a/scripts/messages/message_template.msg b/scripts/messages/message_template.msg
index b44b099c3311287c2a8ed481f2ef9efd79df3b30..32a514502f12b51f6379f531b5b3c292e4485002 100644
--- a/scripts/messages/message_template.msg
+++ b/scripts/messages/message_template.msg
@@ -4260,10 +4260,7 @@ sim -> dataserver
 		{	BornOn			Variable 1	}	// string
 		{	ProfileURL		Variable 1	}	// string
 		{	CharterMember	Variable 1	}	// special - usually U8
-		{	AllowPublish	BOOL		}	// whether profile is externally visible or not
-		{	MaturePublish	BOOL		}	// profile is "mature"
-		{	Identified		BOOL		}	// whether avatar has provided payment info
-		{	Transacted		BOOL		}	// whether avatar has actively used payment info
+		{	Flags			U32			}
 	}
 }
 
@@ -9196,11 +9193,20 @@ sim -> dataserver
 
 // ViewerEffect
 // Viewer side effect that's sent from one viewer, and broadcast to other agents nearby
+// viewer-->sim (single effect created by viewer)
+// sim-->viewer (multiple effects that can be seen by viewer)
+// the AgentData block used for authentication for viewer-->sim messages
 {
 	ViewerEffect Medium NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
 	{
 		Effect Variable
-		{	ID			LLUUID	} // UUID of the effect
+		{	ID			LLUUID	} // unique UUID of the effect
+		{	AgentID		LLUUID	} // yes, pack AgentID again (note this block is variable)
 		{	Type		U8	} // Type of the effect
 		{	Duration	F32	} // F32 time (seconds)
 		{	Color		Fixed		4	} // Color4U