diff --git a/.hgtags b/.hgtags
index b0da8b0d987f003ea3e50ff9d9fb28482d18013f..4823c0550472b3c91392eb1c7bd9478a7ffa3766 100755
--- a/.hgtags
+++ b/.hgtags
@@ -546,3 +546,4 @@ ac3b1332ad4f55b7182a8cbcc1254535a0069f75 5.1.7-release
 21b7604680ef6b6ea67f8bebaaa588d6e263bdc1 6.0.1-release
 a3143db58a0f6b005232bf9018e7fef17ff9ec90 6.1.0-release
 50f0ece62ddb5a244ecb6d00ef5a89d80ad50efa 6.1.1-release
+82a89165e5929a6c3073d6cd60a543cb395f147b 6.2.0-release
diff --git a/doc/contributions.txt b/doc/contributions.txt
index cfc98584bcf8978e231fa73c4f78a580b775fb4a..4e9255925676b127dc7e7a1be3769cbab49d6b7b 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -222,6 +222,7 @@ Ansariel Hiller
 	MAINT-8085
 	MAINT-8723
 	SL-10385
+	SL-10891
 Aralara Rajal
 Arare Chantilly
 	CHUIBUG-191
diff --git a/indra/llmessage/llregionflags.h b/indra/llmessage/llregionflags.h
index a0c87b65ccb4133d7f699eac22aaf6722596a488..c13f39df9bda93e0cc263e72e1e3cc24252840d5 100644
--- a/indra/llmessage/llregionflags.h
+++ b/indra/llmessage/llregionflags.h
@@ -169,7 +169,7 @@ const U32 ESTATE_ACCESS_MANAGER_REMOVE				= 1U << 9;
 const U32 ESTATE_ACCESS_NO_REPLY						= 1U << 10;
 const U32 ESTATE_ACCESS_FAILED_BAN_ESTATE_MANAGER	= 1U << 11;
 
-const S32 ESTATE_MAX_MANAGERS = 10;
+const S32 ESTATE_MAX_MANAGERS = 15;
 const S32 ESTATE_MAX_ACCESS_IDS = 500;	// max for access, banned
 const S32 ESTATE_MAX_GROUP_IDS = (S32) ESTATE_ACCESS_MAX_ENTRIES_PER_PACKET;
 
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index ee8c445afb0a687796ba6138471f5f9117126e44..f1914ee9c559e54c600f0355ea78e7cfc585d151 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -503,6 +503,13 @@ void LLLineEditor::setCursorToEnd()
 	deselect();
 }
 
+void LLLineEditor::resetScrollPosition()
+{
+	mScrollHPos = 0;
+	// make sure cursor says in visible range
+	setCursor(getCursor());
+}
+
 BOOL LLLineEditor::canDeselect() const
 {
 	return hasSelection();
@@ -1685,42 +1692,37 @@ void LLLineEditor::doDelete()
 
 void LLLineEditor::drawBackground()
 {
-	F32 alpha = getCurrentTransparency();
-	if (mUseBgColor)
+	bool has_focus = hasFocus();
+	LLUIImage* image;
+	if ( mReadOnly )
+	{
+		image = mBgImageDisabled;
+	}
+	else if ( has_focus || mShowImageFocused)
 	{
-		gl_rect_2d(getLocalRect(), mBgColor % alpha, TRUE);
+		image = mBgImageFocused;
 	}
 	else
 	{
-		bool has_focus = hasFocus();
-		LLUIImage* image;
-		if (mReadOnly)
-		{
-			image = mBgImageDisabled;
-		}
-		else if (has_focus || mShowImageFocused)
-		{
-			image = mBgImageFocused;
-		}
-		else
-		{
-			image = mBgImage;
-		}
+		image = mBgImage;
+	}
 
-		if (!image) return;
-		// optionally draw programmatic border
-		if (has_focus)
-		{
-			LLColor4 tmp_color = gFocusMgr.getFocusColor();
-			tmp_color.setAlpha(alpha);
-			image->drawBorder(0, 0, getRect().getWidth(), getRect().getHeight(),
-				tmp_color,
-				gFocusMgr.getFocusFlashWidth());
-		}
-		LLColor4 tmp_color = UI_VERTEX_COLOR;
+	if (!image) return;
+	
+	F32 alpha = getCurrentTransparency();
+
+	// optionally draw programmatic border
+	if (has_focus)
+	{
+		LLColor4 tmp_color = gFocusMgr.getFocusColor();
 		tmp_color.setAlpha(alpha);
-		image->draw(getLocalRect(), tmp_color);
+		image->drawBorder(0, 0, getRect().getWidth(), getRect().getHeight(),
+						  tmp_color,
+						  gFocusMgr.getFocusFlashWidth());
 	}
+	LLColor4 tmp_color = UI_VERTEX_COLOR;
+	tmp_color.setAlpha(alpha);
+	image->draw(getLocalRect(), tmp_color);
 }
 
 void LLLineEditor::draw()
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index a711ccefab81c4e5b08fbbc4bde2354a8c17a4c9..aa5779d45f64838e16cbc0fae86a3fab8e6ad1e2 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -210,6 +210,9 @@ class LLLineEditor
 	void			setCursor( S32 pos );
 	void			setCursorToEnd();
 
+	// set scroll to earliest position it can reasonable set
+	void			resetScrollPosition();
+
 	// Selects characters 'start' to 'end'.
 	void			setSelection(S32 start, S32 end);
 	virtual void	getSelectionRange(S32 *position, S32 *length) const;
diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp
index f6831c6d5ec52624829e23fd47223354bb958158..ce3fc29d32721a4b147a7d67548b9dc0280f908d 100644
--- a/indra/llui/llspinctrl.cpp
+++ b/indra/llui/llspinctrl.cpp
@@ -290,6 +290,7 @@ void LLSpinCtrl::forceSetValue(const LLSD& value )
         LLF32UICtrl::setValue(value);
 		
 		updateEditor();
+		mEditor->resetScrollPosition();
 	}
 }
 
@@ -355,7 +356,9 @@ void LLSpinCtrl::onEditorCommit( const LLSD& data )
 
 	if( success )
 	{
-		updateEditor();
+		// We commited and clamped value
+		// try to display as much as possible
+		mEditor->resetScrollPosition();
 	}
 	else
 	{
@@ -475,6 +478,7 @@ BOOL LLSpinCtrl::handleKeyHere(KEY key, MASK mask)
 			// text editors don't support revert normally (due to user confusion)
 			// but not allowing revert on a spinner seems dangerous
 			updateEditor();
+			mEditor->resetScrollPosition();
 			mEditor->setFocus(FALSE);
 			return TRUE;
 		}
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 7739feb41905725847699640877c0eb9b49be494..02b6271e5a8763ce5a42e65256c4fce3745c5b5e 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -217,6 +217,7 @@ set(viewer_SOURCE_FILES
     llfloateravatarpicker.cpp
     llfloateravatarrendersettings.cpp
     llfloateravatartextures.cpp
+    llfloaterbanduration.cpp
     llfloaterbeacons.cpp
     llfloaterbigpreview.cpp
     llfloaterbuildoptions.cpp
@@ -841,6 +842,7 @@ set(viewer_HEADER_FILES
     llfloateravatarpicker.h
     llfloateravatarrendersettings.h
     llfloateravatartextures.h
+    llfloaterbanduration.h
     llfloaterbeacons.h
     llfloaterbigpreview.h
     llfloaterbuildoptions.h
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 6abaeb2f90723ba328101fc117a1f19e93407e47..ca06394388d6b01813d8b1a3da0749e5f73ef661 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-6.2.0
+6.2.2
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 394df72068958adecd8f0bd14faecebd2ae06f40..fd4c2917d52b5c4443ea85ae6e7d123148bd6d4f 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -16413,6 +16413,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>ResetUIScaleOnFirstRun</key>
+    <map>
+      <key>Comment</key>
+      <string>Resets the UI scale factor on first run due to changed display scaling behavior</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>        
+    </map>
 </map>
 </llsd>
 
diff --git a/indra/newview/llestateinfomodel.cpp b/indra/newview/llestateinfomodel.cpp
index e8da45816858395920ee71e215a748a0ccda5053..4fdb86059286b13d4b12ec5fc665182b40b0dd4d 100644
--- a/indra/newview/llestateinfomodel.cpp
+++ b/indra/newview/llestateinfomodel.cpp
@@ -34,101 +34,15 @@
 
 // viewer
 #include "llagent.h"
+#include "llfloaterregioninfo.h" // for invoice id
 #include "llviewerregion.h"
-#include "llcorehttputil.h"
-
-//=========================================================================
-namespace 
-{
-	class LLDispatchEstateUpdateInfo : public LLDispatchHandler
-	{
-	public:
-	    LLDispatchEstateUpdateInfo() {}
-	    virtual ~LLDispatchEstateUpdateInfo() {}
-	    virtual bool operator()(const LLDispatcher* dispatcher, const std::string& key, 
-            const LLUUID& invoice, const sparam_t& strings)
-	    {
-	        // key = "estateupdateinfo"
-	        // strings[0] = estate name
-	        // strings[1] = str(owner_id)
-	        // strings[2] = str(estate_id)
-	        // strings[3] = str(estate_flags)
-	        // strings[4] = str((S32)(sun_hour * 1024))
-	        // strings[5] = str(parent_estate_id)
-	        // strings[6] = str(covenant_id)
-	        // strings[7] = str(covenant_timestamp)
-	        // strings[8] = str(send_to_agent_only)
-	        // strings[9] = str(abuse_email_addr)
-	
-	        LL_DEBUGS("ESTATEINFOM") << "Received estate update" << LL_ENDL;
-	
-	        // Update estate info model.
-	        // This will call LLPanelEstateInfo::refreshFromEstate().
-	        // *TODO: Move estate message handling stuff to llestateinfomodel.cpp.
-	        LLEstateInfoModel::instance().updateEstateInfo(strings);
-	
-	        return true;
-	    }
-	};
-	
-	class LLDispatchSetEstateAccess : public LLDispatchHandler
-	{
-	public:
-	    LLDispatchSetEstateAccess() {}
-	    virtual ~LLDispatchSetEstateAccess() {}
-	    virtual bool operator()(
-	        const LLDispatcher* dispatcher, const std::string& key,
-	        const LLUUID& invoice, const sparam_t& strings)
-	    {
-	        // key = "setaccess"
-	        // strings[0] = str(estate_id)
-	        // strings[1] = str(packed_access_lists)
-	        // strings[2] = str(num allowed agent ids)
-	        // strings[3] = str(num allowed group ids)
-	        // strings[4] = str(num banned agent ids)
-	        // strings[5] = str(num estate manager agent ids)
-	        // strings[6] = bin(uuid)
-	        // strings[7] = bin(uuid)
-	        // strings[8] = bin(uuid)
-	        // ...
-
-            LLEstateInfoModel::instance().updateAccessInfo(strings);
-	
-	        return true;
-	    }
-	
-	};
-
-    class LLDispatchSetEstateExperience : public LLDispatchHandler
-    {
-    public:
-        virtual bool operator()(const LLDispatcher* dispatcher, const std::string& key,
-                const LLUUID& invoice, const sparam_t& strings)
-        {
-            // key = "setexperience"
-            // strings[0] = str(estate_id)
-            // strings[1] = str(send_to_agent_only)
-            // strings[2] = str(num blocked)
-            // strings[3] = str(num trusted)
-            // strings[4] = str(num allowed)
-            // strings[8] = bin(uuid) ...
-            // ...
-
-            LLEstateInfoModel::instance().updateExperienceInfo(strings);
-
-            return true;
-        }
-
-    };
 
-}
+#include "llcorehttputil.h"
 
-//=========================================================================
-LLEstateInfoModel::LLEstateInfoModel():	
-    mID(0),	
-    mFlags(0),	
-    mSunHour(0),
-    mRegion(nullptr)
+LLEstateInfoModel::LLEstateInfoModel()
+:	mID(0)
+,	mFlags(0)
+,	mSunHour(0)
 {
 }
 
@@ -137,52 +51,40 @@ boost::signals2::connection LLEstateInfoModel::setUpdateCallback(const update_si
 	return mUpdateSignal.connect(cb);
 }
 
-boost::signals2::connection LLEstateInfoModel::setUpdateAccessCallback(const update_flaged_signal_t::slot_type& cb)
-{
-    return mUpdateAccess.connect(cb);
-}
-
-boost::signals2::connection LLEstateInfoModel::setUpdateExperienceCallback(const update_signal_t::slot_type& cb)
-{
-    return mUpdateExperience.connect(cb);
-}
-
 boost::signals2::connection LLEstateInfoModel::setCommitCallback(const update_signal_t::slot_type& cb)
 {
 	return mCommitSignal.connect(cb);
 }
 
-void LLEstateInfoModel::setRegion(LLViewerRegion* region)
-{
-    if (region != mRegion)
-    {
-        mRegion = region;
-
-        if (mRegion)
-        {
-	        nextInvoice();
-	        sendEstateOwnerMessage("getinfo", strings_t());
-        }
-    }
-}
-
-
-void LLEstateInfoModel::clearRegion()
-{
-    mRegion = nullptr;
-}
-
 void LLEstateInfoModel::sendEstateInfo()
 {
 	if (!commitEstateInfoCaps())
 	{
 		// the caps method failed, try the old way
-		nextInvoice();
+		LLFloaterRegionInfo::nextInvoice();
 		commitEstateInfoDataserver();
 	}
 }
 
-void LLEstateInfoModel::updateEstateInfo(const strings_t& strings)
+bool LLEstateInfoModel::getUseFixedSun()			const {	return getFlag(REGION_FLAGS_SUN_FIXED);				}
+bool LLEstateInfoModel::getIsExternallyVisible()	const {	return getFlag(REGION_FLAGS_EXTERNALLY_VISIBLE);	}
+bool LLEstateInfoModel::getAllowDirectTeleport()	const {	return getFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT);	}
+bool LLEstateInfoModel::getDenyAnonymous()			const {	return getFlag(REGION_FLAGS_DENY_ANONYMOUS); 		}
+bool LLEstateInfoModel::getDenyAgeUnverified()		const {	return getFlag(REGION_FLAGS_DENY_AGEUNVERIFIED);	}
+bool LLEstateInfoModel::getAllowVoiceChat()			const { return getFlag(REGION_FLAGS_ALLOW_VOICE); }
+bool LLEstateInfoModel::getAllowAccessOverride()	const { return getFlag(REGION_FLAGS_ALLOW_ACCESS_OVERRIDE); }
+bool LLEstateInfoModel::getAllowEnvironmentOverride() const { return getFlag(REGION_FLAGS_ALLOW_ENVIRONMENT_OVERRIDE); }
+
+void LLEstateInfoModel::setUseFixedSun(bool val)			{ setFlag(REGION_FLAGS_SUN_FIXED, 				val);	}
+void LLEstateInfoModel::setIsExternallyVisible(bool val)	{ setFlag(REGION_FLAGS_EXTERNALLY_VISIBLE,		val);	}
+void LLEstateInfoModel::setAllowDirectTeleport(bool val)	{ setFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT,	val);	}
+void LLEstateInfoModel::setDenyAnonymous(bool val)			{ setFlag(REGION_FLAGS_DENY_ANONYMOUS,			val);	}
+void LLEstateInfoModel::setDenyAgeUnverified(bool val)		{ setFlag(REGION_FLAGS_DENY_AGEUNVERIFIED,		val);	}
+void LLEstateInfoModel::setAllowVoiceChat(bool val)		    { setFlag(REGION_FLAGS_ALLOW_VOICE,				val);	}
+void LLEstateInfoModel::setAllowAccessOverride(bool val)    { setFlag(REGION_FLAGS_ALLOW_ACCESS_OVERRIDE,   val);   }
+void LLEstateInfoModel::setAllowEnvironmentOverride(bool val) { setFlag(REGION_FLAGS_ALLOW_ENVIRONMENT_OVERRIDE, val); }
+
+void LLEstateInfoModel::update(const strings_t& strings)
 {
 	// NOTE: LLDispatcher extracts strings with an extra \0 at the
 	// end.  If we pass the std::string direct to the UI/renderer
@@ -193,10 +95,10 @@ void LLEstateInfoModel::updateEstateInfo(const strings_t& strings)
 	mFlags		= strtoul(strings[3].c_str(), NULL, 10);
 	mSunHour	= ((F32)(strtod(strings[4].c_str(), NULL)))/1024.0f;
 
-    LL_DEBUGS("ESTATEINFOM") << "Received estate info: "
+	LL_DEBUGS("WindlightSync") << "Received estate info: "
 		<< "is_sun_fixed = " << getUseFixedSun()
 		<< ", sun_hour = " << getSunHour() << LL_ENDL;
-    LL_DEBUGS("ESTATEINFOM") << getInfoDump() << LL_ENDL;
+	LL_DEBUGS() << getInfoDump() << LL_ENDL;
 
 	// Update region owner.
 	LLViewerRegion* regionp = gAgent.getRegion();
@@ -206,205 +108,20 @@ void LLEstateInfoModel::updateEstateInfo(const strings_t& strings)
 	mUpdateSignal();
 }
 
-void LLEstateInfoModel::updateAccessInfo(const strings_t& strings)
-{
-    S32 index = 1;	// skip estate_id
-    U32 access_flags = strtoul(strings[index++].c_str(), NULL, 10);
-    S32 num_allowed_agents = strtol(strings[index++].c_str(), NULL, 10);
-    S32 num_allowed_groups = strtol(strings[index++].c_str(), NULL, 10);
-    S32 num_banned_agents = strtol(strings[index++].c_str(), NULL, 10);
-    S32 num_estate_managers = strtol(strings[index++].c_str(), NULL, 10);
-
-    // sanity ckecks
-    if (num_allowed_agents > 0
-        && !(access_flags & ESTATE_ACCESS_ALLOWED_AGENTS))
-    {
-        LL_WARNS("ESTATEINFOM") << "non-zero count for allowed agents, but no corresponding flag" << LL_ENDL;
-    }
-    if (num_allowed_groups > 0
-        && !(access_flags & ESTATE_ACCESS_ALLOWED_GROUPS))
-    {
-        LL_WARNS("ESTATEINFOM") << "non-zero count for allowed groups, but no corresponding flag" << LL_ENDL;
-    }
-    if (num_banned_agents > 0
-        && !(access_flags & ESTATE_ACCESS_BANNED_AGENTS))
-    {
-        LL_WARNS("ESTATEINFOM") << "non-zero count for banned agents, but no corresponding flag" << LL_ENDL;
-    }
-    if (num_estate_managers > 0
-        && !(access_flags & ESTATE_ACCESS_MANAGERS))
-    {
-        LL_WARNS("ESTATEINFOM") << "non-zero count for managers, but no corresponding flag" << LL_ENDL;
-    }
-
-    // grab the UUID's out of the string fields
-    if (access_flags & ESTATE_ACCESS_ALLOWED_AGENTS)
-    {
-        mAllowedAgents.clear();
-
-        for (S32 i = 0; i < num_allowed_agents && i < ESTATE_MAX_ACCESS_IDS; i++)
-        {
-            LLUUID id;
-            memcpy(id.mData, strings[index++].data(), UUID_BYTES);		/* Flawfinder: ignore */
-            mAllowedAgents.insert(id);
-        }
-    }
-
-    if (access_flags & ESTATE_ACCESS_ALLOWED_GROUPS)
-    {
-        mAllowedGroups.clear();
-
-        for (S32 i = 0; i < num_allowed_groups && i < ESTATE_MAX_GROUP_IDS; i++)
-        {
-            LLUUID id;
-            memcpy(id.mData, strings[index++].data(), UUID_BYTES);		/* Flawfinder: ignore */
-            mAllowedGroups.insert(id);
-        }
-    }
-
-    if (access_flags & ESTATE_ACCESS_BANNED_AGENTS)
-    {
-        mBannedAgents.clear();
-
-        for (S32 i = 0; i < num_banned_agents && i < ESTATE_MAX_ACCESS_IDS; i++)
-        {
-            LLUUID id;
-            memcpy(id.mData, strings[index++].data(), UUID_BYTES);		/* Flawfinder: ignore */
-            mBannedAgents.insert(id);
-        }
-    }
-
-    if (access_flags & ESTATE_ACCESS_MANAGERS)
-    {
-        mEstateManagers.clear();
-
-        // There should be only ESTATE_MAX_MANAGERS people in the list, but if the database gets more (SL-46107) don't 
-        // truncate the list unless it's really big.  Go ahead and show the extras so the user doesn't get confused, 
-        // and they can still remove them.
-        for (S32 i = 0; i < num_estate_managers && i < (ESTATE_MAX_MANAGERS * 4); i++)
-        {
-            LLUUID id;
-            memcpy(id.mData, strings[index++].data(), UUID_BYTES);		/* Flawfinder: ignore */
-            mEstateManagers.insert(id);
-        }
-    }
-
-    // Update the buttons which may change based on the list contents but also needs to account for general access features.
-    mUpdateAccess(access_flags);
-}
-
-void LLEstateInfoModel::updateExperienceInfo(const strings_t& strings)
-{
-    strings_t::const_iterator it = strings.begin();
-    ++it; // U32 estate_id = strtol((*it).c_str(), NULL, 10);
-    ++it; // U32 send_to_agent_only = strtoul((*(++it)).c_str(), NULL, 10);
-
-    LLUUID id;
-    S32 num_blocked = strtol((*(it++)).c_str(), NULL, 10);
-    S32 num_trusted = strtol((*(it++)).c_str(), NULL, 10);
-    S32 num_allowed = strtol((*(it++)).c_str(), NULL, 10);
-
-    mExperienceAllowed.clear();
-    mExperienceTrusted.clear();
-    mExperienceBlocked.clear();
-
-    while (num_blocked-- > 0)
-    {
-        memcpy(id.mData, (*(it++)).data(), UUID_BYTES);
-        mExperienceBlocked.insert(id);
-    }
-
-    while (num_trusted-- > 0)
-    {
-        memcpy(id.mData, (*(it++)).data(), UUID_BYTES);
-        mExperienceTrusted.insert(id);
-    }
-
-    while (num_allowed-- > 0)
-    {
-        memcpy(id.mData, (*(it++)).data(), UUID_BYTES);
-        mExperienceAllowed.insert(id);
-    }
-
-    mUpdateExperience();
-}
-
 void LLEstateInfoModel::notifyCommit()
 {
 	mCommitSignal();
 }
 
-void LLEstateInfoModel::initSingleton()
-{
-    gMessageSystem->setHandlerFunc("EstateOwnerMessage", &processEstateOwnerRequest);
-
-    //	name.assign("setowner");
-    //	static LLDispatchSetEstateOwner set_owner;
-    //	dispatch.addHandler(name, &set_owner);
-
-    static LLDispatchEstateUpdateInfo estate_update_info;
-    mDispatch.addHandler("estateupdateinfo", &estate_update_info);
-
-    static LLDispatchSetEstateAccess set_access;
-    mDispatch.addHandler("setaccess", &set_access);
-
-    static LLDispatchSetEstateExperience set_experience;
-    mDispatch.addHandler("setexperience", &set_experience);
-
-}
-
-void LLEstateInfoModel::sendEstateOwnerMessage(const std::string& request, const strings_t& strings)
-{
-    if (!mRegion)
-    {
-        LL_WARNS("ESTATEINFOM") << "No selected region." << LL_ENDL;
-        return;
-    }
-    LLMessageSystem* msg(gMessageSystem);
-    LLUUID invoice(LLEstateInfoModel::instance().getLastInvoice());
-
-    LL_INFOS() << "Sending estate request '" << request << "'" << LL_ENDL;
-    msg->newMessage("EstateOwnerMessage");
-    msg->nextBlockFast(_PREHASH_AgentData);
-    msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-    msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-    msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
-    msg->nextBlock("MethodData");
-    msg->addString("Method", request);
-    msg->addUUID("Invoice", invoice);
-    if (strings.empty())
-    {
-        msg->nextBlock("ParamList");
-        msg->addString("Parameter", NULL);
-    }
-    else
-    {
-        strings_t::const_iterator it = strings.begin();
-        strings_t::const_iterator end = strings.end();
-        for (; it != end; ++it)
-        {
-            msg->nextBlock("ParamList");
-            msg->addString("Parameter", *it);
-        }
-    }
-    msg->sendReliable(mRegion->getHost());
-}
-
 //== PRIVATE STUFF ============================================================
 
 // tries to send estate info using a cap; returns true if it succeeded
 bool LLEstateInfoModel::commitEstateInfoCaps()
 {
-    if (!mRegion)
-    {
-        LL_WARNS("ESTATEINFOM") << "Attempt to update estate caps with no anchor region! Don't do that!" << LL_ENDL;
-        return false;
-    }
-    std::string url = mRegion->getCapability("EstateChangeInfo");
+	std::string url = gAgent.getRegionCapability("EstateChangeInfo");
 
 	if (url.empty())
 	{
-        LL_WARNS("ESTATEINFOM") << "No EstateChangeInfo cap from region." << LL_ENDL;
 		// whoops, couldn't find the cap, so bail out
 		return false;
 	}
@@ -433,14 +150,13 @@ void LLEstateInfoModel::commitEstateInfoCapsCoro(std::string url)
     body["deny_age_unverified"] = getDenyAgeUnverified();
     body["allow_voice_chat"] = getAllowVoiceChat();
     body["override_public_access"] = getAllowAccessOverride();
-    body["override_environment"] = getAllowEnvironmentOverride();
 
-    body["invoice"] = getLastInvoice();
+    body["invoice"] = LLFloaterRegionInfo::getLastInvoice();
 
-    LL_DEBUGS("ESTATEINFOM") << "Sending estate caps: "
+    LL_DEBUGS("WindlightSync") << "Sending estate caps: "
         << "is_sun_fixed = " << getUseFixedSun()
         << ", sun_hour = " << getSunHour() << LL_ENDL;
-    LL_DEBUGS("ESTATEINFOM") << body << LL_ENDL;
+    LL_DEBUGS() << body << LL_ENDL;
 
     LLSD result = httpAdapter->postAndSuspend(httpRequest, url, body);
 
@@ -449,12 +165,12 @@ void LLEstateInfoModel::commitEstateInfoCapsCoro(std::string url)
 
     if (status)
     {
-        LL_INFOS("ESTATEINFOM") << "Committed estate info" << LL_ENDL;
+        LL_INFOS() << "Committed estate info" << LL_ENDL;
         LLEstateInfoModel::instance().notifyCommit();
     }
     else
     {
-        LL_WARNS("ESTATEINFOM") << "Failed to commit estate info " << LL_ENDL;
+        LL_WARNS() << "Failed to commit estate info " << LL_ENDL;
     }
 }
 
@@ -467,15 +183,10 @@ void LLEstateInfoModel::commitEstateInfoCapsCoro(std::string url)
 // strings[3] = str((S32)(sun_hour * 1024.f))
 void LLEstateInfoModel::commitEstateInfoDataserver()
 {
-    if (!mRegion)
-    {
-        LL_WARNS("ESTATEINFOM") << "No selected region." << LL_ENDL;
-        return;
-    }
-    LL_DEBUGS("ESTATEINFOM") << "Sending estate info: "
+	LL_DEBUGS("WindlightSync") << "Sending estate info: "
 		<< "is_sun_fixed = " << getUseFixedSun()
 		<< ", sun_hour = " << getSunHour() << LL_ENDL;
-    LL_DEBUGS("ESTATEINFOM") << getInfoDump() << LL_ENDL;
+	LL_DEBUGS() << getInfoDump() << LL_ENDL;
 
 	LLMessageSystem* msg = gMessageSystem;
 	msg->newMessage("EstateOwnerMessage");
@@ -486,7 +197,7 @@ void LLEstateInfoModel::commitEstateInfoDataserver()
 
 	msg->nextBlock("MethodData");
 	msg->addString("Method", "estatechangeinfo");
-	msg->addUUID("Invoice", getLastInvoice());
+	msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice());
 
 	msg->nextBlock("ParamList");
 	msg->addString("Parameter", getName());
@@ -497,7 +208,7 @@ void LLEstateInfoModel::commitEstateInfoDataserver()
 	msg->nextBlock("ParamList");
 	msg->addString("Parameter", llformat("%d", (S32) (getSunHour() * 1024.0f)));
 
-    msg->sendReliable(mRegion->getHost());
+	gAgent.sendMessage();
 }
 
 std::string LLEstateInfoModel::getInfoDump()
@@ -513,28 +224,9 @@ std::string LLEstateInfoModel::getInfoDump()
 	dump["deny_age_unverified"  ] = getDenyAgeUnverified();
 	dump["allow_voice_chat"     ] = getAllowVoiceChat();
     dump["override_public_access"] = getAllowAccessOverride();
-    dump["override_environment"]  = getAllowEnvironmentOverride();
+    dump["override_environment"] = getAllowEnvironmentOverride();
 
 	std::stringstream dump_str;
 	dump_str << dump;
 	return dump_str.str();
 }
-
-// static
-void LLEstateInfoModel::processEstateOwnerRequest(LLMessageSystem* msg, void**)
-{
-    // unpack the message
-    std::string request;
-    LLUUID invoice;
-    LLDispatcher::sparam_t strings;
-    LLDispatcher::unpackMessage(msg, request, invoice, strings);
-    if (invoice != LLEstateInfoModel::instance().getLastInvoice())
-    {
-        LL_WARNS("ESTATEINFOM") << "Mismatched Estate message: " << request << LL_ENDL;
-        return;
-    }
-
-    //dispatch the message
-    LLEstateInfoModel::instance().mDispatch.dispatch(request, invoice, strings);
-}
-
diff --git a/indra/newview/llestateinfomodel.h b/indra/newview/llestateinfomodel.h
index 2c89a85500829cd9b485a9dc20933abeddf44734..d6f00c573cf11c619d9ee62917c6bde60d31938e 100644
--- a/indra/newview/llestateinfomodel.h
+++ b/indra/newview/llestateinfomodel.h
@@ -32,123 +32,78 @@ class LLMessageSystem;
 #include "llsingleton.h"
 #include "llcoros.h"
 #include "lleventcoro.h"
-#include "lldispatcher.h"
-#include "llregionflags.h"
 
-class LLViewerRegion;
 /**
  * Contains estate info, notifies interested parties of its changes.
  */
 class LLEstateInfoModel : public LLSingleton<LLEstateInfoModel>
 {
-    LLSINGLETON_C11(LLEstateInfoModel);
+	LLSINGLETON(LLEstateInfoModel);
 	LOG_CLASS(LLEstateInfoModel);
 
 public:
-    typedef std::vector<std::string>            strings_t;
-	typedef boost::signals2::signal<void()>     update_signal_t;
-    typedef boost::signals2::signal<void(U32)>  update_flaged_signal_t;
-    typedef boost::signals2::connection         connection_t;
+	typedef boost::signals2::signal<void()> update_signal_t;
+	boost::signals2::connection setUpdateCallback(const update_signal_t::slot_type& cb); /// the model has been externally updated
+	boost::signals2::connection setCommitCallback(const update_signal_t::slot_type& cb); /// our changes have been applied
 
-    connection_t            setUpdateCallback(const update_signal_t::slot_type& cb); /// the model has been externally updated
-    connection_t            setUpdateAccessCallback(const update_flaged_signal_t::slot_type& cb);
-    connection_t            setUpdateExperienceCallback(const update_signal_t::slot_type& cb);
-    connection_t            setCommitCallback(const update_signal_t::slot_type& cb); /// our changes have been applied
-
-    void                    setRegion(LLViewerRegion* region);
-    void                    clearRegion();
-	void                    sendEstateInfo(); /// send estate info to the simulator
+	void sendEstateInfo(); /// send estate info to the simulator
 
 	// getters
-    bool                    getUseFixedSun() const              { return getFlag(REGION_FLAGS_SUN_FIXED); }
-    bool                    getIsExternallyVisible() const      { return getFlag(REGION_FLAGS_EXTERNALLY_VISIBLE); }
-    bool                    getAllowDirectTeleport() const      { return getFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT); }
-    bool                    getDenyAnonymous() const            { return getFlag(REGION_FLAGS_DENY_ANONYMOUS); }
-    bool                    getDenyAgeUnverified() const        { return getFlag(REGION_FLAGS_DENY_AGEUNVERIFIED); }
-    bool                    getAllowVoiceChat() const           { return getFlag(REGION_FLAGS_ALLOW_VOICE); }
-    bool                    getAllowAccessOverride() const      { return getFlag(REGION_FLAGS_ALLOW_ACCESS_OVERRIDE); }
-    bool                    getAllowEnvironmentOverride() const { return getFlag(REGION_FLAGS_ALLOW_ENVIRONMENT_OVERRIDE); }
-
-	const std::string&	    getName()					const { return mName; }
-	const LLUUID&		    getOwnerID()				const { return mOwnerID; }
-	U32					    getID()						const { return mID; }
-	F32					    getSunHour()				const { return getUseFixedSun() ? mSunHour : 0.f; }
+	bool				getUseFixedSun()			const;
+	bool				getIsExternallyVisible()	const;
+	bool				getAllowDirectTeleport()	const;
+	bool				getDenyAnonymous()			const;
+	bool				getDenyAgeUnverified()		const;
+	bool				getAllowVoiceChat()			const;
+    bool                getAllowAccessOverride()    const;
+    bool                getAllowEnvironmentOverride() const;
+
+	const std::string&	getName()					const { return mName; }
+	const LLUUID&		getOwnerID()				const { return mOwnerID; }
+	U32					getID()						const { return mID; }
+	F32					getSunHour()				const { return getUseFixedSun() ? mSunHour : 0.f; }
 
 	// setters
-    void                    setUseFixedSun(bool val)                { setFlag(REGION_FLAGS_SUN_FIXED, val); }
-    void                    setIsExternallyVisible(bool val)        { setFlag(REGION_FLAGS_EXTERNALLY_VISIBLE, val); }
-    void                    setAllowDirectTeleport(bool val)        { setFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT, val); }
-    void                    setDenyAnonymous(bool val)              { setFlag(REGION_FLAGS_DENY_ANONYMOUS, val); }
-    void                    setDenyAgeUnverified(bool val)          { setFlag(REGION_FLAGS_DENY_AGEUNVERIFIED, val); }
-    void                    setAllowVoiceChat(bool val)             { setFlag(REGION_FLAGS_ALLOW_VOICE, val); }
-    void                    setAllowAccessOverride(bool val)        { setFlag(REGION_FLAGS_ALLOW_ACCESS_OVERRIDE, val); }
-    void                    setAllowEnvironmentOverride(bool val)   { setFlag(REGION_FLAGS_ALLOW_ENVIRONMENT_OVERRIDE, val); }
-
-	void                    setSunHour(F32 sun_hour) { mSunHour = sun_hour; }
-
-    const uuid_set_t &      getAllowedAgents() const                { return mAllowedAgents; }
-    const uuid_set_t &      getAllowedGroups() const                { return mAllowedGroups; }
-    const uuid_set_t &      getBannedAgents() const                 { return mBannedAgents; }
-    const uuid_set_t &      getEstateManagers() const               { return mEstateManagers; }
-
-    const uuid_set_t &      getAllowedExperiences() const           { return mExperienceAllowed; }
-    const uuid_set_t &      getTrustedExperiences() const           { return mExperienceTrusted; }
-    const uuid_set_t &      getBlockedExperiences() const           { return mExperienceBlocked; }
-
-    void                    sendEstateOwnerMessage(const std::string& request, const strings_t& strings);
-
-    //---------------------------------------------------------------------
-    /// refresh model with data from the incoming server message
-    void                    updateEstateInfo(const strings_t& strings);
-    void                    updateAccessInfo(const strings_t& strings);
-    void                    updateExperienceInfo(const strings_t& strings);
+	void setUseFixedSun(bool val);
+	void setIsExternallyVisible(bool val);
+	void setAllowDirectTeleport(bool val);
+	void setDenyAnonymous(bool val);
+	void setDenyAgeUnverified(bool val);
+	void setAllowVoiceChat(bool val);
+    void setAllowAccessOverride(bool val);
+    void setAllowEnvironmentOverride(bool val);
 
-    const LLUUID &          getLastInvoice()    { return mRequestInvoice; }
-    const LLUUID &          nextInvoice()       { mRequestInvoice.generate(); return mRequestInvoice; }
+	void setSunHour(F32 sun_hour) { mSunHour = sun_hour; }
 
 protected:
+	typedef std::vector<std::string> strings_t;
 
-	void                    notifyCommit();
+	friend class LLDispatchEstateUpdateInfo;
 
-    virtual void            initSingleton() override;
+	/// refresh model with data from the incoming server message
+	void update(const strings_t& strings);
+
+	void notifyCommit();
 
 private:
-	bool                    commitEstateInfoCaps();
-	void                    commitEstateInfoDataserver();
-	inline bool             getFlag(U64 flag) const;
-	inline void             setFlag(U64 flag, bool val);
-	U64                     getFlags() const { return mFlags; }
-	std::string             getInfoDump();
+	bool commitEstateInfoCaps();
+	void commitEstateInfoDataserver();
+	inline bool getFlag(U64 flag) const;
+	inline void setFlag(U64 flag, bool val);
+	U64  getFlags() const { return mFlags; }
+	std::string getInfoDump();
 
 	// estate info
-	std::string	            mName;			/// estate name
-	LLUUID		            mOwnerID;		/// estate owner id
-	U32			            mID;			/// estate id
-	U64			            mFlags;			/// estate flags
-	F32			            mSunHour;		/// estate sun hour
-
-    uuid_set_t              mAllowedAgents;
-    uuid_set_t              mAllowedGroups;
-    uuid_set_t              mBannedAgents;
-    uuid_set_t              mEstateManagers;
-
-    uuid_set_t              mExperienceAllowed;
-    uuid_set_t              mExperienceTrusted;
-    uuid_set_t              mExperienceBlocked;
-
-	update_signal_t         mUpdateSignal; /// emitted when we receive update from sim
-    update_flaged_signal_t  mUpdateAccess;
-    update_signal_t         mUpdateExperience;
-	update_signal_t         mCommitSignal; /// emitted when our update gets applied to sim
-
-    LLDispatcher            mDispatch;
-    LLUUID                  mRequestInvoice;
-    LLViewerRegion*         mRegion;
-
-    void                    commitEstateInfoCapsCoro(std::string url);
+	std::string	mName;			/// estate name
+	LLUUID		mOwnerID;		/// estate owner id
+	U32			mID;			/// estate id
+	U64			mFlags;			/// estate flags
+	F32			mSunHour;		/// estate sun hour
 
-    static void             processEstateOwnerRequest(LLMessageSystem* msg, void**);
+	update_signal_t mUpdateSignal; /// emitted when we receive update from sim
+	update_signal_t mCommitSignal; /// emitted when our update gets applied to sim
 
+    void commitEstateInfoCapsCoro(std::string url);
 };
 
 inline bool LLEstateInfoModel::getFlag(U64 flag) const
diff --git a/indra/newview/llfloaterbanduration.cpp b/indra/newview/llfloaterbanduration.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6ba6c30cab1e9ad6a5d03578c3cd22e2f0213f22
--- /dev/null
+++ b/indra/newview/llfloaterbanduration.cpp
@@ -0,0 +1,92 @@
+/**
+* @file llfloaterbanduration.cpp
+*
+* $LicenseInfo:firstyear=2004&license=viewerlgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2018, 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 "llfloaterbanduration.h"
+
+#include "llfloaterreg.h"
+#include "llspinctrl.h"
+#include "llradiogroup.h"
+
+LLFloaterBanDuration::LLFloaterBanDuration(const LLSD& target)
+    : LLFloater(target)
+{
+}
+
+BOOL LLFloaterBanDuration::postBuild()
+{
+    childSetAction("ok_btn", boost::bind(&LLFloaterBanDuration::onClickBan, this));
+    childSetAction("cancel_btn", boost::bind(&LLFloaterBanDuration::onClickCancel, this));
+
+    getChild<LLUICtrl>("ban_duration_radio")->setCommitCallback(boost::bind(&LLFloaterBanDuration::onClickRadio, this));
+    getChild<LLRadioGroup>("ban_duration_radio")->setSelectedIndex(0);
+    getChild<LLUICtrl>("ban_hours")->setEnabled(FALSE);
+
+    return TRUE;
+}
+
+LLFloaterBanDuration* LLFloaterBanDuration::show(select_callback_t callback, uuid_vec_t ids)
+{
+    LLFloaterBanDuration* floater = LLFloaterReg::showTypedInstance<LLFloaterBanDuration>("ban_duration");
+    if (!floater)
+    {
+        LL_WARNS() << "Cannot instantiate ban duration floater" << LL_ENDL;
+        return NULL;
+    }
+
+    floater->mSelectionCallback = callback;
+    floater->mAvatar_ids = ids;
+
+    return floater;
+}
+
+void LLFloaterBanDuration::onClickRadio()
+{
+    getChild<LLUICtrl>("ban_hours")->setEnabled(getChild<LLRadioGroup>("ban_duration_radio")->getSelectedIndex() != 0);
+}
+
+void LLFloaterBanDuration::onClickCancel()
+{
+    closeFloater();
+}
+
+void LLFloaterBanDuration::onClickBan()
+{
+    if (mSelectionCallback)
+    {
+        S32 time = 0;
+        if (getChild<LLRadioGroup>("ban_duration_radio")->getSelectedIndex() != 0)
+        {
+            LLSpinCtrl* hours_spin = getChild<LLSpinCtrl>("ban_hours");
+            if (hours_spin)
+            {
+                time = LLDate::now().secondsSinceEpoch() + (hours_spin->getValue().asInteger() * 3600);
+            }
+        }
+        mSelectionCallback(mAvatar_ids, time);
+    }
+    closeFloater();
+}
+
diff --git a/indra/newview/llfloaterbanduration.h b/indra/newview/llfloaterbanduration.h
new file mode 100644
index 0000000000000000000000000000000000000000..e8ec7cc669f245e2d0120949928e0696549f09ed
--- /dev/null
+++ b/indra/newview/llfloaterbanduration.h
@@ -0,0 +1,52 @@
+/**
+* @file llfloaterbanduration.h
+*
+* $LicenseInfo:firstyear=2004&license=viewerlgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2018, 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_FLOATERBANDURATION_H
+#define LL_FLOATERBANDURATION_H
+
+#include "llfloater.h"
+
+class LLFloaterBanDuration : public LLFloater
+{
+    typedef boost::function<void(const uuid_vec_t&, const S32 duration)> select_callback_t;
+
+public:
+    LLFloaterBanDuration(const LLSD& target);
+    BOOL postBuild();
+    static LLFloaterBanDuration* show(select_callback_t callback, uuid_vec_t id);
+
+private:
+    ~LLFloaterBanDuration() {};
+    void onClickBan();
+    void onClickCancel();
+    void onClickRadio();
+
+    uuid_vec_t mAvatar_ids;
+    select_callback_t mSelectionCallback;
+};
+
+#endif // LL_FLOATERBANDURATION_H
+
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index eeb1c17f4bd84ab6903e9ea930e0b31d6db99d74..450f2d6ff14501d71be2a46fbe7c82996417dd88 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -46,6 +46,7 @@
 #include "llfloaterreg.h"
 #include "llfloateravatarpicker.h"
 #include "llfloaterauction.h"
+#include "llfloaterbanduration.h"
 #include "llfloatergroups.h"
 #include "llfloaterscriptlimits.h"
 #include "llavataractions.h"
@@ -2546,33 +2547,49 @@ void LLPanelLandAccess::refresh()
 				 cit != parcel->mBanList.end(); ++cit)
 			{
 				const LLAccessEntry& entry = (*cit).second;
-				std::string prefix;
+				std::string duration;
 				if (entry.mTime != 0)
 				{
 					LLStringUtil::format_map_t args;
 					S32 now = time(NULL);
-					S32 seconds = entry.mTime - now;
+					S32 seconds = entry.mTime - now;					
 					if (seconds < 0) seconds = 0;
-					prefix.assign(" (");
-					if (seconds >= 120)
+
+					if (seconds >= 7200)
 					{
-						args["[MINUTES]"] = llformat("%d", (seconds/60));
-						std::string buf = parent_floater->getString ("Minutes", args);
-						prefix.append(buf);
+						args["[HOURS]"] = llformat("%d", (seconds / 3600));
+						duration = parent_floater->getString("Hours", args);
+					}
+					else if (seconds >= 3600)
+					{
+						duration = "1 " + parent_floater->getString("Hour");
+					}
+					else if (seconds >= 120)
+					{
+						args["[MINUTES]"] = llformat("%d", (seconds / 60));
+						duration = parent_floater->getString("Minutes", args);
 					}
 					else if (seconds >= 60)
 					{
-						prefix.append("1 " + parent_floater->getString("Minute"));
+						duration = "1 " + parent_floater->getString("Minute");
 					}
 					else
 					{
 						args["[SECONDS]"] = llformat("%d", seconds);
-						std::string buf = parent_floater->getString ("Seconds", args);
-						prefix.append(buf);
+						duration = parent_floater->getString("Seconds", args);
 					}
-					prefix.append(" " + parent_floater->getString("Remaining") + ") ");
 				}
-				mListBanned->addNameItem(entry.mID, ADD_DEFAULT, TRUE, "",  prefix);
+				else
+				{
+					duration = parent_floater->getString("Always");
+				}
+				LLSD item;
+				item["id"] = entry.mID;
+				LLSD& columns = item["columns"];
+				columns[0]["column"] = "name"; // to be populated later
+				columns[1]["column"] = "duration";
+				columns[1]["value"] = duration;
+				mListBanned->addElement(item);
 			}
 			mListBanned->sortByName(TRUE);
 		}
@@ -2924,7 +2941,7 @@ void LLPanelLandAccess::onClickAddBanned()
     LLView * button = findChild<LLButton>("add_banned");
     LLFloater * root_floater = gFloaterView->getParentFloater(this);
 	LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(
-		boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1), FALSE, FALSE, FALSE, root_floater->getName(), button);
+		boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1), TRUE, FALSE, FALSE, root_floater->getName(), button);
 	if (picker)
 	{
 		root_floater->addDependentFloater(picker);
@@ -2934,23 +2951,41 @@ void LLPanelLandAccess::onClickAddBanned()
 // static
 void LLPanelLandAccess::callbackAvatarCBBanned(const uuid_vec_t& ids)
 {
-	if (!ids.empty())
+	LLFloater * root_floater = gFloaterView->getParentFloater(this);
+	LLFloaterBanDuration* duration_floater = LLFloaterBanDuration::show(
+		boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned2, this, _1, _2), ids);
+	if (duration_floater)
 	{
-		LLUUID id = ids[0];
-		LLParcel* parcel = mParcel->getParcel();
-		if (parcel && parcel->addToBanList(id, 0))
+		root_floater->addDependentFloater(duration_floater);
+	}
+}
+
+void LLPanelLandAccess::callbackAvatarCBBanned2(const uuid_vec_t& ids, S32 duration)
+{
+	LLParcel* parcel = mParcel->getParcel();
+	if (!parcel) return;
+
+	U32 lists_to_update = 0;
+
+	for (uuid_vec_t::const_iterator it = ids.begin(); it < ids.end(); it++)
+	{
+		LLUUID id = *it;
+		if (parcel->addToBanList(id, duration))
 		{
-			U32 lists_to_update = AL_BAN;
+			lists_to_update |= AL_BAN;
 			// agent was successfully added to ban list
 			// but we also need to check access list to ensure that agent will not be in two lists simultaneously
 			if (parcel->removeFromAccessList(id))
 			{
 				lists_to_update |= AL_ACCESS;
 			}
-			LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(lists_to_update);
-			refresh();
 		}
 	}
+	if (lists_to_update > 0)
+	{
+		LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(lists_to_update);
+		refresh();
+	}
 }
 
 // static
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index 0eea46bc5a357ce50a0c0478cb40cdbffe84f2da..7556a96cbdfdf9e46c4880c1471871bbe1bd3475 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -381,6 +381,7 @@ class LLPanelLandAccess
 	void onClickAddAccess();
 	void onClickAddBanned();
 	void callbackAvatarCBBanned(const uuid_vec_t& ids);
+	void callbackAvatarCBBanned2(const uuid_vec_t& ids, S32 duration);
 	void callbackAvatarCBAccess(const uuid_vec_t& ids);
 
 protected:
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index a7887eb9b45e83f97df4e7679b6a170fbdd23d65..bb76af9a3c4432db86ef3ac82ff26a4a29169928 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -51,6 +51,7 @@
 #include "llfloateravatarpicker.h"
 #include "llbutton.h" 
 #include "llcheckboxctrl.h"
+#include "llclipboard.h"
 #include "llcombobox.h"
 #include "llestateinfomodel.h"
 #include "llfilepicker.h"
@@ -95,17 +96,57 @@
 #include "llexperiencecache.h"
 #include "llpanelexperiences.h"
 #include "llcorehttputil.h"
+#include "llavatarnamecache.h"
 #include "llenvironment.h"
 
 const S32 TERRAIN_TEXTURE_COUNT = 4;
 const S32 CORNER_COUNT = 4;
 
+const U32 MAX_LISTED_NAMES = 100;
+
 #define TMP_DISABLE_WLES // STORM-1180
 
 ///----------------------------------------------------------------------------
 /// Local class declaration
 ///----------------------------------------------------------------------------
 
+class LLDispatchEstateUpdateInfo : public LLDispatchHandler
+{
+public:
+	LLDispatchEstateUpdateInfo() {}
+	virtual ~LLDispatchEstateUpdateInfo() {}
+	virtual bool operator()(
+		const LLDispatcher* dispatcher,
+		const std::string& key,
+		const LLUUID& invoice,
+		const sparam_t& strings);
+};
+
+class LLDispatchSetEstateAccess : public LLDispatchHandler
+{
+public:
+	LLDispatchSetEstateAccess() {}
+	virtual ~LLDispatchSetEstateAccess() {}
+	virtual bool operator()(
+		const LLDispatcher* dispatcher,
+		const std::string& key,
+		const LLUUID& invoice,
+		const sparam_t& strings);
+};
+
+class LLDispatchSetEstateExperience : public LLDispatchHandler
+{
+public:
+	virtual bool operator()(
+		const LLDispatcher* dispatcher,
+		const std::string& key,
+		const LLUUID& invoice,
+		const sparam_t& strings);
+
+	LLSD getIDs( sparam_t::const_iterator it, sparam_t::const_iterator end, S32 count );
+};
+
+
 /*
 void unpack_request_params(
 	LLMessageSystem* msg,
@@ -182,6 +223,10 @@ bool estate_dispatch_initialized = false;
 /// LLFloaterRegionInfo
 ///----------------------------------------------------------------------------
 
+//S32 LLFloaterRegionInfo::sRequestSerial = 0;
+LLUUID LLFloaterRegionInfo::sRequestInvoice;
+
+
 LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)
 	: LLFloater(seed),
     mEnvironmentPanel(NULL),
@@ -200,6 +245,11 @@ BOOL LLFloaterRegionInfo::postBuild()
 	panel->buildFromFile("panel_region_estate.xml");
 	mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true));
 
+	panel = new LLPanelEstateAccess;
+	mInfoPanels.push_back(panel);
+	panel->buildFromFile("panel_region_access.xml");
+	mTab->addTabPanel(panel);
+
 	panel = new LLPanelEstateCovenant;
 	mInfoPanels.push_back(panel);
 	panel->buildFromFile("panel_region_covenant.xml");
@@ -238,6 +288,10 @@ BOOL LLFloaterRegionInfo::postBuild()
 		panel->buildFromFile("panel_region_experiences.xml");
 		mTab->addTabPanel(panel);
 	}
+	
+	gMessageSystem->setHandlerFunc(
+		"EstateOwnerMessage", 
+		&processEstateOwnerRequest);
 
 	// Request region info when agent region changes.
 	mRegionChangedCallback = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionInfo::onRegionChanged, this));
@@ -260,9 +314,22 @@ void LLFloaterRegionInfo::onOpen(const LLSD& key)
 		disableTabCtrls();
 		return;
 	}
-	LLEstateInfoModel::instance().clearRegion();
-	requestRegionInfo(); // will cause refreshFromRegion()
+	refreshFromRegion(gAgent.getRegion());
+	requestRegionInfo();
 	requestMeshRezInfo();
+
+	if (!mGodLevelChangeSlot.connected())
+	{
+		mGodLevelChangeSlot = gAgent.registerGodLevelChanageListener(boost::bind(&LLFloaterRegionInfo::onGodLevelChange, this, _1));
+	}
+}
+
+void LLFloaterRegionInfo::onClose(bool app_quitting)
+{
+	if (mGodLevelChangeSlot.connected())
+	{
+		mGodLevelChangeSlot.disconnect();
+	}
 }
 
 void LLFloaterRegionInfo::onRegionChanged()
@@ -273,6 +340,7 @@ void LLFloaterRegionInfo::onRegionChanged()
     }
 }
 
+// static
 void LLFloaterRegionInfo::requestRegionInfo()
 {
 	LLTabContainer* tab = findChild<LLTabContainer>("region_panels");
@@ -295,6 +363,44 @@ void LLFloaterRegionInfo::requestRegionInfo()
 	gAgent.sendReliableMessage();
 }
 
+// static
+void LLFloaterRegionInfo::processEstateOwnerRequest(LLMessageSystem* msg,void**)
+{
+	static LLDispatcher dispatch;
+	LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
+	if(!floater)
+	{
+		return;
+	}
+	
+	if (!estate_dispatch_initialized)
+	{
+		LLPanelEstateInfo::initDispatch(dispatch);
+	}
+
+	LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
+
+	// unpack the message
+	std::string request;
+	LLUUID invoice;
+	LLDispatcher::sparam_t strings;
+	LLDispatcher::unpackMessage(msg, request, invoice, strings);
+	if(invoice != getLastInvoice())
+	{
+		LL_WARNS() << "Mismatched Estate message: " << request << LL_ENDL;
+		return;
+	}
+
+	//dispatch the message
+	dispatch.dispatch(request, invoice, strings);
+
+	if (panel)
+	{
+		panel->updateControls(gAgent.getRegion());
+	}
+}
+
+
 // static
 void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
 {
@@ -435,6 +541,16 @@ LLPanelEstateInfo* LLFloaterRegionInfo::getPanelEstate()
 	return panel;
 }
 
+// static
+LLPanelEstateAccess* LLFloaterRegionInfo::getPanelAccess()
+{
+	LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
+	if (!floater) return NULL;
+	LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
+	LLPanelEstateAccess* panel = (LLPanelEstateAccess*)tab->getChild<LLPanel>("Access");
+	return panel;
+}
+
 // static
 LLPanelEstateCovenant* LLFloaterRegionInfo::getPanelCovenant()
 {
@@ -489,6 +605,7 @@ void LLFloaterRegionInfo::disableTabCtrls()
 	tab->getChild<LLPanel>("Terrain")->setCtrlsEnabled(FALSE);
 	tab->getChild<LLPanel>("panel_env_info")->setCtrlsEnabled(FALSE);
 	tab->getChild<LLPanel>("Estate")->setCtrlsEnabled(FALSE);
+	tab->getChild<LLPanel>("Access")->setCtrlsEnabled(FALSE);
 }
 
 void LLFloaterRegionInfo::onTabSelected(const LLSD& param)
@@ -541,6 +658,15 @@ void LLFloaterRegionInfo::disableTopButtons()
 	getChildView("top_scripts_btn")->setEnabled(false);
 }
 
+void LLFloaterRegionInfo::onGodLevelChange(U8 god_level)
+{
+	LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
+	if (floater && floater->getVisible())
+	{
+		refreshFromRegion(gAgent.getRegion());
+	}
+}
+
 ///----------------------------------------------------------------------------
 /// Local class implementation
 ///----------------------------------------------------------------------------
@@ -609,10 +735,43 @@ void LLPanelRegionInfo::updateChild(LLUICtrl* child_ctr)
 // virtual
 bool LLPanelRegionInfo::refreshFromRegion(LLViewerRegion* region)
 {
-    LLEstateInfoModel::instance().setRegion(region);
+	if (region) mHost = region->getHost();
 	return true;
 }
 
+void LLPanelRegionInfo::sendEstateOwnerMessage(
+	LLMessageSystem* msg,
+	const std::string& request,
+	const LLUUID& invoice,
+	const strings_t& strings)
+{
+	LL_INFOS() << "Sending estate request '" << request << "'" << LL_ENDL;
+	msg->newMessage("EstateOwnerMessage");
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+	msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
+	msg->nextBlock("MethodData");
+	msg->addString("Method", request);
+	msg->addUUID("Invoice", invoice);
+	if(strings.empty())
+	{
+		msg->nextBlock("ParamList");
+		msg->addString("Parameter", NULL);
+	}
+	else
+	{
+		strings_t::const_iterator it = strings.begin();
+		strings_t::const_iterator end = strings.end();
+		for(; it != end; ++it)
+		{
+			msg->nextBlock("ParamList");
+			msg->addString("Parameter", *it);
+		}
+	}
+	msg->sendReliable(mHost);
+}
+
 void LLPanelRegionInfo::enableButton(const std::string& btn_name, BOOL enable)
 {
 	LLView* button = findChildView(btn_name);
@@ -746,7 +905,8 @@ void LLPanelRegionGeneralInfo::onKickCommit(const uuid_vec_t& ids)
 		ids[0].toString(buffer);
 		strings.push_back(strings_t::value_type(buffer));
 
-		LLEstateInfoModel::instance().sendEstateOwnerMessage("teleporthomeuser", strings);
+		LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+		sendEstateOwnerMessage(gMessageSystem, "teleporthomeuser", invoice, strings);
 	}
 }
 
@@ -771,8 +931,9 @@ bool LLPanelRegionGeneralInfo::onKickAllCommit(const LLSD& notification, const L
 		gAgent.getID().toString(buffer);
 		strings.push_back(buffer);
 
+		LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
 		// historical message name
-        LLEstateInfoModel::instance().sendEstateOwnerMessage("teleporthomeallusers", strings);
+		sendEstateOwnerMessage(gMessageSystem, "teleporthomeallusers", invoice, strings);
 	}
 	return false;
 }
@@ -811,7 +972,8 @@ bool LLPanelRegionGeneralInfo::onMessageCommit(const LLSD& notification, const L
 	LLAgentUI::buildFullname(name);
 	strings.push_back(strings_t::value_type(name));
 	strings.push_back(strings_t::value_type(text));
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("simulatormessage", strings);
+	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+	sendEstateOwnerMessage(gMessageSystem, "simulatormessage", invoice, strings);
 	return false;
 }
 
@@ -897,7 +1059,8 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate()
 		buffer = llformat("%s", (getChild<LLUICtrl>("allow_parcel_changes_check")->getValue().asBoolean() ? "Y" : "N"));
 		strings.push_back(strings_t::value_type(buffer));
 
-        LLEstateInfoModel::instance().sendEstateOwnerMessage("setregioninfo", strings);
+		LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+		sendEstateOwnerMessage(gMessageSystem, "setregioninfo", invoice, strings);
 	}
 
 	// if we changed access levels, tell user about it
@@ -969,7 +1132,8 @@ BOOL LLPanelRegionDebugInfo::sendUpdate()
 	buffer = llformat("%s", (getChild<LLUICtrl>("disable_physics_check")->getValue().asBoolean() ? "Y" : "N"));
 	strings.push_back(buffer);
 
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("setregiondebug", strings);
+	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+	sendEstateOwnerMessage(gMessageSystem, "setregiondebug", invoice, strings);
 	return TRUE;
 }
 
@@ -1039,7 +1203,9 @@ bool LLPanelRegionDebugInfo::callbackReturn(const LLSD& notification, const LLSD
 			strings.push_back(llformat("%d", flags));
 			strings.push_back(target_avatar.asString());
 
-            LLEstateInfoModel::instance().sendEstateOwnerMessage("estateobjectreturn", strings);
+			LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+		
+			sendEstateOwnerMessage(gMessageSystem, "estateobjectreturn", invoice, strings);
 		}
 		else
 		{
@@ -1057,6 +1223,7 @@ void LLPanelRegionDebugInfo::onClickTopColliders(void* data)
 	LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data;
 	strings_t strings;
 	strings.push_back("1");	// one physics step
+	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
 	LLFloaterTopObjects* instance = LLFloaterReg::getTypedInstance<LLFloaterTopObjects>("top_objects");
 	if(!instance) return;
 	LLFloaterReg::showInstance("top_objects");
@@ -1066,7 +1233,7 @@ void LLPanelRegionDebugInfo::onClickTopColliders(void* data)
 	self->getChildView("top_colliders_btn")->setEnabled(false);
 	self->getChildView("top_scripts_btn")->setEnabled(false);
 
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("colliders", strings);
+	self->sendEstateOwnerMessage(gMessageSystem, "colliders", invoice, strings);
 }
 
 // static
@@ -1075,6 +1242,7 @@ void LLPanelRegionDebugInfo::onClickTopScripts(void* data)
 	LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data;
 	strings_t strings;
 	strings.push_back("6");	// top 5 scripts
+	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
 	LLFloaterTopObjects* instance = LLFloaterReg::getTypedInstance<LLFloaterTopObjects>("top_objects");
 	if(!instance) return;
 	LLFloaterReg::showInstance("top_objects");
@@ -1084,7 +1252,7 @@ void LLPanelRegionDebugInfo::onClickTopScripts(void* data)
 	self->getChildView("top_colliders_btn")->setEnabled(false);
 	self->getChildView("top_scripts_btn")->setEnabled(false);
 
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("scripts", strings);
+	self->sendEstateOwnerMessage(gMessageSystem, "scripts", invoice, strings);
 }
 
 // static
@@ -1101,16 +1269,19 @@ bool LLPanelRegionDebugInfo::callbackRestart(const LLSD& notification, const LLS
 
 	strings_t strings;
 	strings.push_back("120");
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("restart", strings);
+	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+	sendEstateOwnerMessage(gMessageSystem, "restart", invoice, strings);
 	return false;
 }
 
 // static
 void LLPanelRegionDebugInfo::onClickCancelRestart(void* data)
 {
+	LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data;
 	strings_t strings;
 	strings.push_back("-1");
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("restart", strings);
+	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+	self->sendEstateOwnerMessage(gMessageSystem, "restart", invoice, strings);
 }
 
 // static
@@ -1275,6 +1446,7 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
 	LL_INFOS() << "LLPanelRegionTerrainInfo::sendUpdate" << LL_ENDL;
 	std::string buffer;
 	strings_t strings;
+	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
 
 	// update the model
 	LLRegionInfoModel& region_info = LLRegionInfoModel::instance();
@@ -1283,7 +1455,7 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
 	region_info.mTerrainLowerLimit = (F32) getChild<LLUICtrl>("terrain_lower_spin")->getValue().asReal();
 
 	// and sync the region with it
-	region_info.sendRegionTerrain(LLEstateInfoModel::instance().getLastInvoice());
+	region_info.sendRegionTerrain(invoice);
 	
 	// =======================================
 	// Assemble and send texturedetail message
@@ -1311,6 +1483,7 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
 
 	LLTextureCtrl* texture_ctrl;
 	std::string id_str;
+	LLMessageSystem* msg = gMessageSystem;
 
 	for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
 	{
@@ -1324,7 +1497,7 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
 			strings.push_back(buffer);
 		}
 	}
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("texturedetail", strings);
+	sendEstateOwnerMessage(msg, "texturedetail", invoice, strings);
 	strings.clear();
 
 	// ========================================
@@ -1337,13 +1510,13 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
 		std::string buffer3 = llformat("%d %f %f", i, (F32)getChild<LLUICtrl>(buffer)->getValue().asReal(), (F32)getChild<LLUICtrl>(buffer2)->getValue().asReal());
 		strings.push_back(buffer3);
 	}
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("textureheights", strings);
+	sendEstateOwnerMessage(msg, "textureheights", invoice, strings);
 	strings.clear();
 
 	// ========================================
 	// Send texturecommit message
 
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("texturecommit", strings);
+	sendEstateOwnerMessage(msg, "texturecommit", invoice, strings);
 
 	return TRUE;
 }
@@ -1383,10 +1556,12 @@ void LLPanelRegionTerrainInfo::onClickDownloadRaw(void* data)
 	std::string filepath = picker.getFirstFile();
 	gXferManager->expectFileForRequest(filepath);
 
+	LLPanelRegionTerrainInfo* self = (LLPanelRegionTerrainInfo*)data;
 	strings_t strings;
 	strings.push_back("download filename");
 	strings.push_back(filepath);
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("terrain", strings);
+	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+	self->sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
 }
 
 // static
@@ -1401,10 +1576,12 @@ void LLPanelRegionTerrainInfo::onClickUploadRaw(void* data)
 	std::string filepath = picker.getFirstFile();
 	gXferManager->expectFileForTransfer(filepath);
 
+	LLPanelRegionTerrainInfo* self = (LLPanelRegionTerrainInfo*)data;
 	strings_t strings;
 	strings.push_back("upload filename");
 	strings.push_back(filepath);
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("terrain", strings);
+	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+	self->sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
 
 	LLNotificationsUtil::add("RawUploadStarted");
 }
@@ -1422,7 +1599,8 @@ bool LLPanelRegionTerrainInfo::callbackBakeTerrain(const LLSD& notification, con
 
 	strings_t strings;
 	strings.push_back("bake");
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("terrain", strings);
+	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+	sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
 
 	return false;
 }
@@ -1436,129 +1614,28 @@ LLPanelEstateInfo::LLPanelEstateInfo()
 	mEstateID(0)	// invalid
 {
 	LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
-
 	estate_info.setCommitCallback(boost::bind(&LLPanelEstateInfo::refreshFromEstate, this));
 	estate_info.setUpdateCallback(boost::bind(&LLPanelEstateInfo::refreshFromEstate, this));
-
-    estate_info.setUpdateAccessCallback(boost::bind(&LLPanelEstateInfo::refreshAccessFromEstate, this, _1));
-}
-
-//---------------------------------------------------------------------------
-// Add/Remove estate access button callbacks
-//---------------------------------------------------------------------------
-void LLPanelEstateInfo::onClickAddAllowedAgent()
-{
-	LLCtrlListInterface *list = childGetListInterface("allowed_avatar_name_list");
-	if (!list) return;
-	if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS)
-	{
-		//args
-
-		LLSD args;
-		args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS);
-		LLNotificationsUtil::add("MaxAllowedAgentOnRegion", args);
-		return;
-	}
-	accessAddCore(ESTATE_ACCESS_ALLOWED_AGENT_ADD, "EstateAllowedAgentAdd");
-}
-
-void LLPanelEstateInfo::onClickRemoveAllowedAgent()
-{
-	accessRemoveCore(ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, "EstateAllowedAgentRemove", "allowed_avatar_name_list");
-}
-
-void LLPanelEstateInfo::onClickAddAllowedGroup()
-{
-	LLCtrlListInterface *list = childGetListInterface("allowed_group_name_list");
-	if (!list) return;
-	if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS)
-	{
-		LLSD args;
-		args["MAX_GROUPS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS);
-		LLNotificationsUtil::add("MaxAllowedGroupsOnRegion", args);
-		return;
-	}
-
-	LLNotification::Params params("ChangeLindenAccess");
-	params.functor.function(boost::bind(&LLPanelEstateInfo::addAllowedGroup, this, _1, _2));
-	if (isLindenEstate())
-	{
-		LLNotifications::instance().add(params);
-	}
-	else
-	{
-		LLNotifications::instance().forceResponse(params, 0);
-	}
-}
-
-bool LLPanelEstateInfo::addAllowedGroup(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	if (option != 0) return false;
-
-	LLFloater* parent_floater = gFloaterView->getParentFloater(this);
-
-	LLFloaterGroupPicker* widget = LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(gAgent.getID()));
-	if (widget)
-	{
-		widget->removeNoneOption();
-		widget->setSelectGroupCallback(boost::bind(&LLPanelEstateInfo::addAllowedGroup2, this, _1));
-		if (parent_floater)
-		{
-			LLRect new_rect = gFloaterView->findNeighboringPosition(parent_floater, widget);
-			widget->setOrigin(new_rect.mLeft, new_rect.mBottom);
-			parent_floater->addDependentFloater(widget);
-		}
-	}
-
-	return false;
-}
-
-void LLPanelEstateInfo::onClickRemoveAllowedGroup()
-{
-	accessRemoveCore(ESTATE_ACCESS_ALLOWED_GROUP_REMOVE, "EstateAllowedGroupRemove", "allowed_group_name_list");
 }
 
-void LLPanelEstateInfo::onClickAddBannedAgent()
+// static
+void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch)
 {
-	LLCtrlListInterface *list = childGetListInterface("banned_avatar_name_list");
-	if (!list) return;
-	if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS)
-	{
-		LLSD args;
-		args["MAX_BANNED"] = llformat("%d",ESTATE_MAX_ACCESS_IDS);
-		LLNotificationsUtil::add("MaxBannedAgentsOnRegion", args);
-		return;
-	}
-	accessAddCore(ESTATE_ACCESS_BANNED_AGENT_ADD, "EstateBannedAgentAdd");
-}
+	std::string name;
+	
+	name.assign("estateupdateinfo");
+	static LLDispatchEstateUpdateInfo estate_update_info;
+	dispatch.addHandler(name, &estate_update_info);
 
-void LLPanelEstateInfo::onClickRemoveBannedAgent()
-{
-	accessRemoveCore(ESTATE_ACCESS_BANNED_AGENT_REMOVE, "EstateBannedAgentRemove", "banned_avatar_name_list");
-}
+	name.assign("setaccess");
+	static LLDispatchSetEstateAccess set_access;
+	dispatch.addHandler(name, &set_access);
 
-// static
-void LLPanelEstateInfo::onClickAddEstateManager()
-{
-	LLCtrlListInterface *list = childGetListInterface("estate_manager_name_list");
-	if (!list) return;
-	if (list->getItemCount() >= ESTATE_MAX_MANAGERS)
-	{	// Tell user they can't add more managers
-		LLSD args;
-		args["MAX_MANAGER"] = llformat("%d",ESTATE_MAX_MANAGERS);
-		LLNotificationsUtil::add("MaxManagersOnRegion", args);
-	}
-	else
-	{	// Go pick managers to add
-		accessAddCore(ESTATE_ACCESS_MANAGER_ADD, "EstateManagerAdd");
-	}
-}
+	name.assign("setexperience");
+	static LLDispatchSetEstateExperience set_experience;
+	dispatch.addHandler(name, &set_experience);
 
-// static
-void LLPanelEstateInfo::onClickRemoveEstateManager()
-{
-	accessRemoveCore(ESTATE_ACCESS_MANAGER_REMOVE, "EstateManagerRemove", "estate_manager_name_list");
+	estate_dispatch_initialized = true;
 }
 
 //---------------------------------------------------------------------------
@@ -1603,7 +1680,7 @@ bool LLPanelEstateInfo::kickUserConfirm(const LLSD& notification, const LLSD& re
 			strings_t strings;
 			strings.push_back(notification["payload"]["agent_id"].asString());
 
-            LLEstateInfoModel::instance().sendEstateOwnerMessage("kickestate", strings);
+			sendEstateOwnerMessage(gMessageSystem, "kickestate", LLFloaterRegionInfo::getLastInvoice(), strings);
 			break;
 		}
 	default:
@@ -1674,11 +1751,13 @@ struct LLEstateAccessChangeInfo
 		LLSD sd;
 		sd["name"] = mDialogName;
 		sd["operation"] = (S32)mOperationFlag;
-		for (uuid_vec_t::const_iterator it = mAgentOrGroupIDs.begin();
-			it != mAgentOrGroupIDs.end();
-			++it)
+		for (U32 i = 0; i < mAgentOrGroupIDs.size(); ++i)
 		{
-			sd["allowed_ids"].append(*it);
+			sd["allowed_ids"].append(mAgentOrGroupIDs[i]);
+			if (mAgentNames.size() > i)
+			{
+				sd["allowed_names"].append(mAgentNames[i].asLLSD());
+			}
 		}
 		return sd;
 	}
@@ -1686,248 +1765,771 @@ struct LLEstateAccessChangeInfo
 	U32 mOperationFlag;	// ESTATE_ACCESS_BANNED_AGENT_ADD, _REMOVE, etc.
 	std::string mDialogName;
 	uuid_vec_t mAgentOrGroupIDs; // List of agent IDs to apply to this change
+	std::vector<LLAvatarName> mAgentNames; // Optional list of the agent names for notifications
 };
 
-// Special case callback for groups, since it has different callback format than names
-void LLPanelEstateInfo::addAllowedGroup2(LLUUID id)
+// static
+void LLPanelEstateInfo::updateEstateOwnerName(const std::string& name)
 {
-	LLSD payload;
-	payload["operation"] = (S32)ESTATE_ACCESS_ALLOWED_GROUP_ADD;
-	payload["dialog_name"] = "EstateAllowedGroupAdd";
-	payload["allowed_ids"].append(id);
-
-	LLSD args;
-	args["ALL_ESTATES"] = all_estates_text();
-
-	LLNotification::Params params("EstateAllowedGroupAdd");
-	params.payload(payload)
-		.substitutions(args)
-		.functor.function(accessCoreConfirm);
-	if (isLindenEstate())
-	{
-		LLNotifications::instance().forceResponse(params, 0);
-	}
-	else
+	LLPanelEstateInfo* panelp = LLFloaterRegionInfo::getPanelEstate();
+	if (panelp)
 	{
-		LLNotifications::instance().add(params);
+		panelp->setOwnerName(name);
 	}
 }
 
 // static
-void LLPanelEstateInfo::accessAddCore(U32 operation_flag, const std::string& dialog_name)
+void LLPanelEstateInfo::updateEstateName(const std::string& name)
 {
-	LLSD payload;
-	payload["operation"] = (S32)operation_flag;
-	payload["dialog_name"] = dialog_name;
-	// agent id filled in after avatar picker
-
-	LLNotification::Params params("ChangeLindenAccess");
-	params.payload(payload)
-		.functor.function(accessAddCore2);
-
-	if (isLindenEstate())
-	{
-		LLNotifications::instance().add(params);
-	}
-	else
+	LLPanelEstateInfo* panelp = LLFloaterRegionInfo::getPanelEstate();
+	if (panelp)
 	{
-		// same as clicking "OK"
-		LLNotifications::instance().forceResponse(params, 0);
+		panelp->getChildRef<LLTextBox>("estate_name").setText(name);
 	}
 }
 
-// static
-bool LLPanelEstateInfo::accessAddCore2(const LLSD& notification, const LLSD& response)
+void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
 {
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	if (option != 0)
-	{
-		// abort change
-		return false;
-	}
+	BOOL god = gAgent.isGodlike();
+	BOOL owner = (region && (region->getOwner() == gAgent.getID()));
+	BOOL manager = (region && region->isEstateManager());
+	setCtrlsEnabled(god || owner || manager);
+	
+	getChildView("apply_btn")->setEnabled(FALSE);
 
-	LLEstateAccessChangeInfo* change_info = new LLEstateAccessChangeInfo(notification["payload"]);
-    //Get parent floater name
-    LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
-    LLFloater* parent_floater = panel ? gFloaterView->getParentFloater(panel) : NULL;
-    const std::string& parent_floater_name = parent_floater ? parent_floater->getName() : "";
-    
-    //Determine the button that triggered opening of the avatar picker 
-    //(so that a shadow frustum from the button to the avatar picker can be created)
-    LLView * button = NULL;
-    switch(change_info->mOperationFlag)
-    {
-        case ESTATE_ACCESS_ALLOWED_AGENT_ADD:
-            button = panel->findChild<LLButton>("add_allowed_avatar_btn");
-            break;
-            
-        case ESTATE_ACCESS_BANNED_AGENT_ADD:
-            button = panel->findChild<LLButton>("add_banned_avatar_btn");
-            break;
-            
-        case ESTATE_ACCESS_MANAGER_ADD:
-            button = panel->findChild<LLButton>("add_estate_manager_btn");
-            break;
-    }
+	getChildView("message_estate_btn")->setEnabled(god || owner || manager);
+	getChildView("kick_user_from_estate_btn")->setEnabled(god || owner || manager);
 
-	// avatar picker yes multi-select, yes close-on-select
-	LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateInfo::accessAddCore3, _1, (void*)change_info), 
-                                                    TRUE, TRUE, FALSE, parent_floater_name, button);
+	refresh();
+}
 
-    //Allows the closed parent floater to close the child floater (avatar picker)
-    if (child_floater)
-    {
-        parent_floater->addDependentFloater(child_floater);
-    }
+bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region)
+{
+	updateControls(region);
+	
+	// let the parent class handle the general data collection. 
+	bool rv = LLPanelRegionInfo::refreshFromRegion(region);
+
+	// We want estate info. To make sure it works across region
+	// boundaries and multiple packets, we add a serial number to the
+	// integers and track against that on update.
+	strings_t strings;
+	//integers_t integers;
+	//LLFloaterRegionInfo::incrementSerial();
+	LLFloaterRegionInfo::nextInvoice();
+	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+	//integers.push_back(LLFloaterRegionInfo::());::getPanelEstate();
+
+	
+	sendEstateOwnerMessage(gMessageSystem, "getinfo", invoice, strings);
+
+	refresh();
+
+	return rv;
+}
+
+void LLPanelEstateInfo::updateChild(LLUICtrl* child_ctrl)
+{
+	// Ensure appropriate state of the management ui.
+	updateControls(gAgent.getRegion());
+}
+
+bool LLPanelEstateInfo::estateUpdate(LLMessageSystem* msg)
+{
+	LL_INFOS() << "LLPanelEstateInfo::estateUpdate()" << LL_ENDL;
+	return false;
+}
+
+
+BOOL LLPanelEstateInfo::postBuild()
+{
+	// set up the callbacks for the generic controls
+	initCtrl("externally_visible_radio");
+	initCtrl("allow_direct_teleport");
+	initCtrl("limit_payment");
+	initCtrl("limit_age_verified");
+	initCtrl("voice_chat_check");
+    initCtrl("parcel_access_override");
+
+	childSetAction("message_estate_btn", boost::bind(&LLPanelEstateInfo::onClickMessageEstate, this));
+	childSetAction("kick_user_from_estate_btn", boost::bind(&LLPanelEstateInfo::onClickKickUser, this));
+
+	getChild<LLUICtrl>("parcel_access_override")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeAccessOverride, this));
+
+	getChild<LLUICtrl>("externally_visible_radio")->setFocus(TRUE);
+
+	return LLPanelRegionInfo::postBuild();
+}
+
+void LLPanelEstateInfo::refresh()
+{
+	// Disable access restriction controls if they make no sense.
+	bool public_access = ("estate_public_access" == getChild<LLUICtrl>("externally_visible_radio")->getValue().asString());
+
+	getChildView("Only Allow")->setEnabled(public_access);
+	getChildView("limit_payment")->setEnabled(public_access);
+	getChildView("limit_age_verified")->setEnabled(public_access);
+
+	// if this is set to false, then the limit fields are meaningless and should be turned off
+	if (public_access == false)
+	{
+		getChild<LLUICtrl>("limit_payment")->setValue(false);
+		getChild<LLUICtrl>("limit_age_verified")->setValue(false);
+	}
+}
+
+void LLPanelEstateInfo::refreshFromEstate()
+{
+	const LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
+
+	getChild<LLUICtrl>("estate_name")->setValue(estate_info.getName());
+	setOwnerName(LLSLURL("agent", estate_info.getOwnerID(), "inspect").getSLURLString());
+
+	getChild<LLUICtrl>("externally_visible_radio")->setValue(estate_info.getIsExternallyVisible() ? "estate_public_access" : "estate_restricted_access");
+	getChild<LLUICtrl>("voice_chat_check")->setValue(estate_info.getAllowVoiceChat());
+	getChild<LLUICtrl>("allow_direct_teleport")->setValue(estate_info.getAllowDirectTeleport());
+	getChild<LLUICtrl>("limit_payment")->setValue(estate_info.getDenyAnonymous());
+	getChild<LLUICtrl>("limit_age_verified")->setValue(estate_info.getDenyAgeUnverified());
+    getChild<LLUICtrl>("parcel_access_override")->setValue(estate_info.getAllowAccessOverride());
+
+	// Ensure appriopriate state of the management UI
+	updateControls(gAgent.getRegion());
+	refresh();
+}
+
+BOOL LLPanelEstateInfo::sendUpdate()
+{
+	LL_INFOS() << "LLPanelEsateInfo::sendUpdate()" << LL_ENDL;
+
+	LLNotification::Params params("ChangeLindenEstate");
+	params.functor.function(boost::bind(&LLPanelEstateInfo::callbackChangeLindenEstate, this, _1, _2));
+
+	if (isLindenEstate())
+	{
+		// trying to change reserved estate, warn
+		LLNotifications::instance().add(params);
+	}
+	else
+	{
+		// for normal estates, just make the change
+		LLNotifications::instance().forceResponse(params, 0);
+	}
+	return TRUE;
+}
+
+bool LLPanelEstateInfo::callbackChangeLindenEstate(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	switch(option)
+	{
+	case 0:
+		{
+			LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
+
+			// update model
+			estate_info.setUseFixedSun(false); // we don't support fixed sun estates anymore
+			estate_info.setIsExternallyVisible("estate_public_access" == getChild<LLUICtrl>("externally_visible_radio")->getValue().asString());
+			estate_info.setAllowDirectTeleport(getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean());
+			estate_info.setDenyAnonymous(getChild<LLUICtrl>("limit_payment")->getValue().asBoolean());
+			estate_info.setDenyAgeUnverified(getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean());
+			estate_info.setAllowVoiceChat(getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean());
+            estate_info.setAllowAccessOverride(getChild<LLUICtrl>("parcel_access_override")->getValue().asBoolean());
+            // JIGGLYPUFF
+            //estate_info.setAllowAccessOverride(getChild<LLUICtrl>("")->getValue().asBoolean());
+			// send the update to sim
+			estate_info.sendEstateInfo();
+		}
+
+		// we don't want to do this because we'll get it automatically from the sim
+		// after the spaceserver processes it
+//		else
+//		{
+//			// caps method does not automatically send this info
+//			LLFloaterRegionInfo::requestRegionInfo();
+//		}
+		break;
+	case 1:
+	default:
+		// do nothing
+		break;
+	}
+	return false;
+}
+
+
+/*
+// Request = "getowner"
+// SParam[0] = "" (empty string)
+// IParam[0] = serial
+void LLPanelEstateInfo::getEstateOwner()
+{
+	// TODO -- disable the panel
+	// and call this function whenever we cross a region boundary
+	// re-enable when owner matches, and get new estate info
+	LLMessageSystem* msg = gMessageSystem;
+	msg->newMessageFast(_PREHASH_EstateOwnerRequest);
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+
+	msg->nextBlockFast(_PREHASH_RequestData);
+	msg->addStringFast(_PREHASH_Request, "getowner");
+
+	// we send an empty string so that the variable block is not empty
+	msg->nextBlockFast(_PREHASH_StringData);
+	msg->addStringFast(_PREHASH_SParam, "");
+
+	msg->nextBlockFast(_PREHASH_IntegerData);
+	msg->addS32Fast(_PREHASH_IParam, LLFloaterRegionInfo::getSerial());
+
+	gAgent.sendMessage();
+}
+*/
+
+const std::string LLPanelEstateInfo::getOwnerName() const
+{
+	return getChild<LLUICtrl>("estate_owner")->getValue().asString();
+}
+
+void LLPanelEstateInfo::setOwnerName(const std::string& name)
+{
+	getChild<LLUICtrl>("estate_owner")->setValue(LLSD(name));
+}
+
+// static
+void LLPanelEstateInfo::onClickMessageEstate(void* userdata)
+{
+	LL_INFOS() << "LLPanelEstateInfo::onClickMessageEstate" << LL_ENDL;
+	LLNotificationsUtil::add("MessageEstate", LLSD(), LLSD(), boost::bind(&LLPanelEstateInfo::onMessageCommit, (LLPanelEstateInfo*)userdata, _1, _2));
+}
+
+bool LLPanelEstateInfo::onMessageCommit(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	std::string text = response["message"].asString();
+	if(option != 0) return false;
+	if(text.empty()) return false;
+	LL_INFOS() << "Message to everyone: " << text << LL_ENDL;
+	strings_t strings;
+	//integers_t integers;
+	std::string name;
+	LLAgentUI::buildFullname(name);
+	strings.push_back(strings_t::value_type(name));
+	strings.push_back(strings_t::value_type(text));
+	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+	sendEstateOwnerMessage(gMessageSystem, "instantmessage", invoice, strings);
+	return false;
+}
+
+void LLPanelEstateInfo::onChangeAccessOverride()
+{
+	if (!getChild<LLUICtrl>("parcel_access_override")->getValue().asBoolean())
+	{
+		LLNotificationsUtil::add("EstateParcelAccessOverride");
+	}
+}
+
+LLPanelEstateCovenant::LLPanelEstateCovenant()
+	:
+	mCovenantID(LLUUID::null),
+	mAssetStatus(ASSET_ERROR)
+{
+}
+
+// virtual 
+bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region)
+{
+	LLTextBox* region_name = getChild<LLTextBox>("region_name_text");
+	if (region_name)
+	{
+		region_name->setText(region->getName());
+	}
+
+	LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause");
+	if (resellable_clause)
+	{
+		if (region->getRegionFlag(REGION_FLAGS_BLOCK_LAND_RESELL))
+		{
+			resellable_clause->setText(getString("can_not_resell"));
+		}
+		else
+		{
+			resellable_clause->setText(getString("can_resell"));
+		}
+	}
+	
+	LLTextBox* changeable_clause = getChild<LLTextBox>("changeable_clause");
+	if (changeable_clause)
+	{
+		if (region->getRegionFlag(REGION_FLAGS_ALLOW_PARCEL_CHANGES))
+		{
+			changeable_clause->setText(getString("can_change"));
+		}
+		else
+		{
+			changeable_clause->setText(getString("can_not_change"));
+		}
+	}
+
+	LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text");
+	if (region_maturity)
+	{
+		region_maturity->setText(region->getSimAccessString());
+	}
+	
+	LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text");
+	region_landtype->setText(region->getLocalizedSimProductName());
+	
+	// let the parent class handle the general data collection. 
+	bool rv = LLPanelRegionInfo::refreshFromRegion(region);
+	LLMessageSystem *msg = gMessageSystem;
+	msg->newMessage("EstateCovenantRequest");
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID,	gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
+	msg->sendReliable(region->getHost());
+	return rv;
+}
+
+// virtual 
+bool LLPanelEstateCovenant::estateUpdate(LLMessageSystem* msg)
+{
+	LL_INFOS() << "LLPanelEstateCovenant::estateUpdate()" << LL_ENDL;
+	return true;
+}
+	
+// virtual 
+BOOL LLPanelEstateCovenant::postBuild()
+{
+	mEstateNameText = getChild<LLTextBox>("estate_name_text");
+	mEstateOwnerText = getChild<LLTextBox>("estate_owner_text");
+	mLastModifiedText = getChild<LLTextBox>("covenant_timestamp_text");
+	mEditor = getChild<LLViewerTextEditor>("covenant_editor");
+	LLButton* reset_button = getChild<LLButton>("reset_covenant");
+	reset_button->setEnabled(gAgent.canManageEstate());
+	reset_button->setClickedCallback(LLPanelEstateCovenant::resetCovenantID, NULL);
+
+	return LLPanelRegionInfo::postBuild();
+}
+
+// virtual 
+void LLPanelEstateCovenant::updateChild(LLUICtrl* child_ctrl)
+{
+}
+
+// virtual
+BOOL LLPanelEstateCovenant::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+								  EDragAndDropType cargo_type,
+								  void* cargo_data,
+								  EAcceptance* accept,
+								  std::string& tooltip_msg)
+{
+	LLInventoryItem* item = (LLInventoryItem*)cargo_data;
+
+	if (!gAgent.canManageEstate())
+	{
+		*accept = ACCEPT_NO;
+		return TRUE;
+	}
+
+	switch(cargo_type)
+	{
+	case DAD_NOTECARD:
+		*accept = ACCEPT_YES_COPY_SINGLE;
+		if (item && drop)
+		{
+			LLSD payload;
+			payload["item_id"] = item->getUUID();
+			LLNotificationsUtil::add("EstateChangeCovenant", LLSD(), payload,
+									LLPanelEstateCovenant::confirmChangeCovenantCallback);
+		}
+		break;
+	default:
+		*accept = ACCEPT_NO;
+		break;
+	}
+
+	return TRUE;
+} 
+
+// static 
+bool LLPanelEstateCovenant::confirmChangeCovenantCallback(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	LLInventoryItem* item = gInventory.getItem(notification["payload"]["item_id"].asUUID());
+	LLPanelEstateCovenant* self = LLFloaterRegionInfo::getPanelCovenant();
+
+	if (!item || !self) return false;
+
+	switch(option)
+	{
+	case 0:
+		self->loadInvItem(item);
+		break;
+	default:
+		break;
+	}
+	return false;
+}
+
+// static
+void LLPanelEstateCovenant::resetCovenantID(void* userdata)
+{
+	LLNotificationsUtil::add("EstateChangeCovenant", LLSD(), LLSD(), confirmResetCovenantCallback);
+}
+
+// static
+bool LLPanelEstateCovenant::confirmResetCovenantCallback(const LLSD& notification, const LLSD& response)
+{
+	LLPanelEstateCovenant* self = LLFloaterRegionInfo::getPanelCovenant();
+	if (!self) return false;
+
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	switch(option)
+	{
+	case 0:		
+		self->loadInvItem(NULL);
+		break;
+	default:
+		break;
+	}
+	return false;
+}
+
+void LLPanelEstateCovenant::loadInvItem(LLInventoryItem *itemp)
+{
+	const BOOL high_priority = TRUE;	
+	if (itemp)
+	{
+		gAssetStorage->getInvItemAsset(gAgent.getRegionHost(),
+									gAgent.getID(),
+									gAgent.getSessionID(),
+									itemp->getPermissions().getOwner(),
+									LLUUID::null,
+									itemp->getUUID(),
+									itemp->getAssetUUID(),
+									itemp->getType(),
+                                    onLoadComplete,
+									(void*)this,
+									high_priority);
+		mAssetStatus = ASSET_LOADING;
+	}
+	else
+	{
+		mAssetStatus = ASSET_LOADED;
+		setCovenantTextEditor(LLTrans::getString("RegionNoCovenant"));
+		sendChangeCovenantID(LLUUID::null);
+	}
+}
+
+// static
+void LLPanelEstateCovenant::onLoadComplete(LLVFS *vfs,
+									   const LLUUID& asset_uuid,
+									   LLAssetType::EType type,
+									   void* user_data, S32 status, LLExtStat ext_status)
+{
+	LL_INFOS() << "LLPanelEstateCovenant::onLoadComplete()" << LL_ENDL;
+	LLPanelEstateCovenant* panelp = (LLPanelEstateCovenant*)user_data;
+	if( panelp )
+	{
+		if(0 == status)
+		{
+			LLVFile file(vfs, asset_uuid, type, LLVFile::READ);
+
+			S32 file_length = file.getSize();
+
+			std::vector<char> buffer(file_length+1);
+			file.read((U8*)&buffer[0], file_length);
+			// put a EOS at the end
+			buffer[file_length] = 0;
+
+			if( (file_length > 19) && !strncmp( &buffer[0], "Linden text version", 19 ) )
+			{
+				if( !panelp->mEditor->importBuffer( &buffer[0], file_length+1 ) )
+				{
+					LL_WARNS() << "Problem importing estate covenant." << LL_ENDL;
+					LLNotificationsUtil::add("ProblemImportingEstateCovenant");
+				}
+				else
+				{
+					panelp->sendChangeCovenantID(asset_uuid);	
+				}
+			}
+			else
+			{
+				// Version 0 (just text, doesn't include version number)
+				panelp->sendChangeCovenantID(asset_uuid);
+			}
+		}
+		else
+		{
+			if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
+				LL_ERR_FILE_EMPTY == status)
+			{
+				LLNotificationsUtil::add("MissingNotecardAssetID");
+			}
+			else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
+			{
+				LLNotificationsUtil::add("NotAllowedToViewNotecard");
+			}
+			else
+			{
+				LLNotificationsUtil::add("UnableToLoadNotecardAsset");
+			}
 
-	return false;
+			LL_WARNS() << "Problem loading notecard: " << status << LL_ENDL;
+		}
+		panelp->mAssetStatus = ASSET_LOADED;
+		panelp->setCovenantID(asset_uuid);
+	}
 }
 
-// static
-void LLPanelEstateInfo::accessAddCore3(const uuid_vec_t& ids, void* data)
+// key = "estatechangecovenantid"
+// strings[0] = str(estate_id) (added by simulator before relay - not here)
+// strings[1] = str(covenant_id)
+void LLPanelEstateCovenant::sendChangeCovenantID(const LLUUID &asset_id)
 {
-	LLEstateAccessChangeInfo* change_info = (LLEstateAccessChangeInfo*)data;
-	if (!change_info) return;
-	if (ids.empty()) 
-	{
-		// User didn't select a name.
-		delete change_info;
-		change_info = NULL;
-		return;
-	}
-	// User did select a name.
-	change_info->mAgentOrGroupIDs = ids;
-	// Can't put estate owner on ban list
-	LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
-	if (!panel) return;
-	LLViewerRegion* region = gAgent.getRegion();
-	if (!region) return;
-	
-	if (change_info->mOperationFlag & ESTATE_ACCESS_ALLOWED_AGENT_ADD)
-	{
-		LLCtrlListInterface *list = panel->childGetListInterface("allowed_avatar_name_list");
-		int currentCount = (list ? list->getItemCount() : 0);
-		if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS)
-		{
-			LLSD args;
-			args["NUM_ADDED"] = llformat("%d",ids.size());
-			args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS);
-			args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeAllowedAgents");
-			args["NUM_EXCESS"] = llformat("%d",(ids.size()+currentCount)-ESTATE_MAX_ACCESS_IDS);
-			LLNotificationsUtil::add("MaxAgentOnRegionBatch", args);
-			delete change_info;
-			return;
-		}
-	}
-	if (change_info->mOperationFlag & ESTATE_ACCESS_BANNED_AGENT_ADD)
+	if (asset_id != getCovenantID())
 	{
-		LLCtrlListInterface *list = panel->childGetListInterface("banned_avatar_name_list");
-		int currentCount = (list ? list->getItemCount() : 0);
-		if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS)
-		{
-			LLSD args;
-			args["NUM_ADDED"] = llformat("%d",ids.size());
-			args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS);
-			args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeBannedAgents");
-			args["NUM_EXCESS"] = llformat("%d",(ids.size()+currentCount)-ESTATE_MAX_ACCESS_IDS);
-			LLNotificationsUtil::add("MaxAgentOnRegionBatch", args);
-			delete change_info;
-			return;
-		}
+        setCovenantID(asset_id);
+
+		LLMessageSystem* msg = gMessageSystem;
+		msg->newMessage("EstateOwnerMessage");
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
+
+		msg->nextBlock("MethodData");
+		msg->addString("Method", "estatechangecovenantid");
+		msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice());
+
+		msg->nextBlock("ParamList");
+		msg->addString("Parameter", getCovenantID().asString());
+		gAgent.sendReliableMessage();
 	}
+}
 
-	LLSD args;
-	args["ALL_ESTATES"] = all_estates_text();
+// virtual 
+BOOL LLPanelEstateCovenant::sendUpdate()
+{
+	return TRUE;
+}
 
-	LLNotification::Params params(change_info->mDialogName);
-	params.substitutions(args)
-		.payload(change_info->asLLSD())
-		.functor.function(accessCoreConfirm);
+std::string LLPanelEstateCovenant::getEstateName() const
+{
+	return mEstateNameText->getText();
+}
 
-	if (isLindenEstate())
+void LLPanelEstateCovenant::setEstateName(const std::string& name)
+{
+	mEstateNameText->setText(name);
+}
+
+// static
+void LLPanelEstateCovenant::updateCovenantText(const std::string& string, const LLUUID& asset_id)
+{
+	LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant();
+	if( panelp )
 	{
-		// just apply to this estate
-		LLNotifications::instance().forceResponse(params, 0);
+		panelp->mEditor->setText(string);
+		panelp->setCovenantID(asset_id);
 	}
-	else
+}
+
+// static
+void LLPanelEstateCovenant::updateEstateName(const std::string& name)
+{
+	LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant();
+	if( panelp )
 	{
-		// ask if this estate or all estates with this owner
-		LLNotifications::instance().add(params);
+		panelp->mEstateNameText->setText(name);
 	}
 }
 
 // static
-void LLPanelEstateInfo::accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name)
+void LLPanelEstateCovenant::updateLastModified(const std::string& text)
 {
-	LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
-	if (!panel) return;
-	LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>(list_ctrl_name);
-	if (!name_list) return;
-
-	std::vector<LLScrollListItem*> list_vector = name_list->getAllSelected();
-	if (list_vector.size() == 0)
-		return;
+	LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant();
+	if( panelp )
+	{
+		panelp->mLastModifiedText->setText(text);
+	}
+}
 
-	LLSD payload;
-	payload["operation"] = (S32)operation_flag;
-	payload["dialog_name"] = dialog_name;
-	
-	for (std::vector<LLScrollListItem*>::const_iterator iter = list_vector.begin();
-	     iter != list_vector.end();
-	     iter++)
+// static
+void LLPanelEstateCovenant::updateEstateOwnerName(const std::string& name)
+{
+	LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant();
+	if( panelp )
 	{
-		LLScrollListItem *item = (*iter);
-		payload["allowed_ids"].append(item->getUUID());
+		panelp->mEstateOwnerText->setText(name);
 	}
-	
-	LLNotification::Params params("ChangeLindenAccess");
-	params.payload(payload)
-		.functor.function(accessRemoveCore2);
+}
 
-	if (isLindenEstate())
+std::string LLPanelEstateCovenant::getOwnerName() const
+{
+	return mEstateOwnerText->getText();
+}
+
+void LLPanelEstateCovenant::setOwnerName(const std::string& name)
+{
+	mEstateOwnerText->setText(name);
+}
+
+void LLPanelEstateCovenant::setCovenantTextEditor(const std::string& text)
+{
+	mEditor->setText(text);
+}
+
+// key = "estateupdateinfo"
+// strings[0] = estate name
+// strings[1] = str(owner_id)
+// strings[2] = str(estate_id)
+// strings[3] = str(estate_flags)
+// strings[4] = str((S32)(sun_hour * 1024))
+// strings[5] = str(parent_estate_id)
+// strings[6] = str(covenant_id)
+// strings[7] = str(covenant_timestamp)
+// strings[8] = str(send_to_agent_only)
+// strings[9] = str(abuse_email_addr)
+bool LLDispatchEstateUpdateInfo::operator()(
+		const LLDispatcher* dispatcher,
+		const std::string& key,
+		const LLUUID& invoice,
+		const sparam_t& strings)
+{
+	LL_DEBUGS() << "Received estate update" << LL_ENDL;
+
+	// Update estate info model.
+	// This will call LLPanelEstateInfo::refreshFromEstate().
+	// *TODO: Move estate message handling stuff to llestateinfomodel.cpp.
+	LLEstateInfoModel::instance().update(strings);
+
+	return true;
+}
+
+bool LLDispatchSetEstateAccess::operator()(
+	const LLDispatcher* dispatcher,
+	const std::string& key,
+	const LLUUID& invoice,
+	const sparam_t& strings)
+{
+	LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess();
+	if (panel && panel->getPendingUpdate())
 	{
-		// warn on change linden estate
-		LLNotifications::instance().add(params);
+		panel->setPendingUpdate(false);
+		panel->updateLists();
 	}
-	else
+	return true;
+}
+
+LLSD LLDispatchSetEstateExperience::getIDs( sparam_t::const_iterator it, sparam_t::const_iterator end, S32 count )
+{
+	LLSD idList = LLSD::emptyArray();
+	LLUUID id;
+	while(count--> 0)
 	{
-		// just proceed, as if clicking OK
-		LLNotifications::instance().forceResponse(params, 0);
+		memcpy(id.mData, (*(it++)).data(), UUID_BYTES);
+		idList.append(id);
 	}
+	return idList;
 }
 
-// static
-bool LLPanelEstateInfo::accessRemoveCore2(const LLSD& notification, const LLSD& response)
+// key = "setexperience"
+// strings[0] = str(estate_id)
+// strings[1] = str(send_to_agent_only)
+// strings[2] = str(num blocked)
+// strings[3] = str(num trusted)
+// strings[4] = str(num allowed)
+// strings[8] = bin(uuid) ...
+// ...
+bool LLDispatchSetEstateExperience::operator()(
+	const LLDispatcher* dispatcher,
+	const std::string& key,
+	const LLUUID& invoice,
+	const sparam_t& strings)
 {
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	if (option != 0)
+	LLPanelRegionExperiences* panel = LLFloaterRegionInfo::getPanelExperiences();
+	if (!panel) return true;
+
+	sparam_t::const_iterator it = strings.begin();
+	++it; // U32 estate_id = strtol((*it).c_str(), NULL, 10);
+	++it; // U32 send_to_agent_only = strtoul((*(++it)).c_str(), NULL, 10);
+
+	LLUUID id;
+	S32 num_blocked = strtol((*(it++)).c_str(), NULL, 10);
+	S32 num_trusted = strtol((*(it++)).c_str(), NULL, 10);
+	S32 num_allowed = strtol((*(it++)).c_str(), NULL, 10);
+
+	LLSD ids = LLSD::emptyMap()
+		.with("blocked", getIDs(it,								strings.end(), num_blocked))
+		.with("trusted", getIDs(it + (num_blocked),				strings.end(), num_trusted))
+		.with("allowed", getIDs(it + (num_blocked+num_trusted),	strings.end(), num_allowed));
+
+	panel->processResponse(ids);			
+
+	return true;
+}
+
+BOOL LLPanelRegionExperiences::postBuild()
+{
+	mAllowed = setupList("panel_allowed", ESTATE_EXPERIENCE_ALLOWED_ADD, ESTATE_EXPERIENCE_ALLOWED_REMOVE);
+	mTrusted = setupList("panel_trusted", ESTATE_EXPERIENCE_TRUSTED_ADD, ESTATE_EXPERIENCE_TRUSTED_REMOVE);
+	mBlocked = setupList("panel_blocked", ESTATE_EXPERIENCE_BLOCKED_ADD, ESTATE_EXPERIENCE_BLOCKED_REMOVE);
+
+	getChild<LLLayoutPanel>("trusted_layout_panel")->setVisible(TRUE);
+	getChild<LLTextBox>("experiences_help_text")->setText(getString("estate_caption"));
+	getChild<LLTextBox>("trusted_text_help")->setText(getString("trusted_estate_text"));
+	getChild<LLTextBox>("allowed_text_help")->setText(getString("allowed_estate_text"));
+	getChild<LLTextBox>("blocked_text_help")->setText(getString("blocked_estate_text"));
+
+	return LLPanelRegionInfo::postBuild();
+}
+
+LLPanelExperienceListEditor* LLPanelRegionExperiences::setupList( const char* control_name, U32 add_id, U32 remove_id )
+{
+	LLPanelExperienceListEditor* child = findChild<LLPanelExperienceListEditor>(control_name);
+	if(child)
 	{
-		// abort
-		return false;
+		child->getChild<LLTextBox>("text_name")->setText(child->getString(control_name));
+		child->setMaxExperienceIDs(ESTATE_MAX_EXPERIENCE_IDS);
+		child->setAddedCallback(  boost::bind(&LLPanelRegionExperiences::itemChanged, this, add_id, _1));
+		child->setRemovedCallback(boost::bind(&LLPanelRegionExperiences::itemChanged, this, remove_id, _1));
 	}
 
-	// If Linden estate, can only apply to "this" estate, not all estates
-	// owned by NULL.
-	if (isLindenEstate())
+	return child;
+}
+
+
+void LLPanelRegionExperiences::processResponse( const LLSD& content )
+{
+	if(content.has("default"))
 	{
-		accessCoreConfirm(notification, response);
+		mDefaultExperience = content["default"].asUUID();
 	}
-	else
+
+	mAllowed->setExperienceIds(content["allowed"]);
+	mBlocked->setExperienceIds(content["blocked"]);
+
+	LLSD trusted = content["trusted"];
+	if(mDefaultExperience.notNull())
 	{
-		LLSD args;
-		args["ALL_ESTATES"] = all_estates_text();
-		LLNotificationsUtil::add(notification["payload"]["dialog_name"], 
-										args,
-										notification["payload"],
-										accessCoreConfirm);
+		mTrusted->setStickyFunction(boost::bind(LLPanelExperiencePicker::FilterMatching, _1, mDefaultExperience));
+		trusted.append(mDefaultExperience);
 	}
-	return false;
+
+	mTrusted->setExperienceIds(trusted);
+	
+	mAllowed->refreshExperienceCounter();
+	mBlocked->refreshExperienceCounter();
+	mTrusted->refreshExperienceCounter();
+
 }
 
-// Used for both access add and remove operations, depending on the mOperationFlag
-// passed in (ESTATE_ACCESS_BANNED_AGENT_ADD, ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, etc.)
+// Used for both access add and remove operations, depending on the flag
+// passed in (ESTATE_EXPERIENCE_ALLOWED_ADD, ESTATE_EXPERIENCE_ALLOWED_REMOVE, etc.)
 // static
-bool LLPanelEstateInfo::accessCoreConfirm(const LLSD& notification, const LLSD& response)
+bool LLPanelRegionExperiences::experienceCoreConfirm(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
 	const U32 originalFlags = (U32)notification["payload"]["operation"].asInteger();
@@ -1944,18 +2546,12 @@ bool LLPanelEstateInfo::accessCoreConfirm(const LLSD& notification, const LLSD&
 		if (iter + 1 != end_it)
 			flags |= ESTATE_ACCESS_NO_REPLY;
 
-		const LLUUID id = iter->asUUID();
-		if (((U32)notification["payload"]["operation"].asInteger() & ESTATE_ACCESS_BANNED_AGENT_ADD)
-		    && region && (region->getOwner() == id))
-		{
-			LLNotificationsUtil::add("OwnerCanNotBeDenied");
-			break;
-		}
+		const LLUUID id = iter->asUUID();
 		switch(option)
 		{
 			case 0:
 			    // This estate
-			    sendEstateAccessDelta(flags, id);
+			    sendEstateExperienceDelta(flags, id);
 			    break;
 			case 1:
 			{
@@ -1966,12 +2562,12 @@ bool LLPanelEstateInfo::accessCoreConfirm(const LLSD& notification, const LLSD&
 				    || gAgent.isGodlike())
 				{
 					flags |= ESTATE_ACCESS_APPLY_TO_ALL_ESTATES;
-					sendEstateAccessDelta(flags, id);
+					sendEstateExperienceDelta(flags, id);
 				}
 				else if (region->isEstateManager())
 				{
 					flags |= ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES;
-					sendEstateAccessDelta(flags, id);
+					sendEstateExperienceDelta(flags, id);
 				}
 				break;
 			}
@@ -1983,1157 +2579,1120 @@ bool LLPanelEstateInfo::accessCoreConfirm(const LLSD& notification, const LLSD&
 	return false;
 }
 
-// key = "estateaccessdelta"
-// str(estate_id) will be added to front of list by forward_EstateOwnerRequest_to_dataserver
-// str[0] = str(agent_id) requesting the change
-// str[1] = str(flags) (ESTATE_ACCESS_DELTA_*)
-// str[2] = str(agent_id) to add or remove
-// static
-void LLPanelEstateInfo::sendEstateAccessDelta(U32 flags, const LLUUID& agent_or_group_id)
-{
-	LLMessageSystem* msg = gMessageSystem;
-	msg->newMessage("EstateOwnerMessage");
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
-
-	msg->nextBlock("MethodData");
-	msg->addString("Method", "estateaccessdelta");
-	msg->addUUID("Invoice", LLEstateInfoModel::instance().getLastInvoice());
-
-	std::string buf;
-	gAgent.getID().toString(buf);
-	msg->nextBlock("ParamList");
-	msg->addString("Parameter", buf);
-
-	buf = llformat("%u", flags);
-	msg->nextBlock("ParamList");
-	msg->addString("Parameter", buf);
-
-	agent_or_group_id.toString(buf);
-	msg->nextBlock("ParamList");
-	msg->addString("Parameter", buf);
-
-
-	LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
-
-	if (flags & (ESTATE_ACCESS_ALLOWED_AGENT_ADD | ESTATE_ACCESS_ALLOWED_AGENT_REMOVE |
-		         ESTATE_ACCESS_BANNED_AGENT_ADD | ESTATE_ACCESS_BANNED_AGENT_REMOVE))
-	{
-		
-		panel->clearAccessLists();
-	}
-
-	gAgent.sendReliableMessage();
-}
 
-// static
-void LLPanelEstateInfo::updateEstateOwnerName(const std::string& name)
+// Send the actual "estateexperiencedelta" message
+void LLPanelRegionExperiences::sendEstateExperienceDelta(U32 flags, const LLUUID& experience_id)
 {
-	LLPanelEstateInfo* panelp = LLFloaterRegionInfo::getPanelEstate();
-	if (panelp)
-	{
-		panelp->setOwnerName(name);
-	}
-}
+	strings_t str(3, std::string());
+	gAgent.getID().toString(str[0]);
+	str[1] = llformat("%u", flags);
+	experience_id.toString(str[2]);
 
-// static
-void LLPanelEstateInfo::updateEstateName(const std::string& name)
-{
-	LLPanelEstateInfo* panelp = LLFloaterRegionInfo::getPanelEstate();
-	if (panelp)
+	LLPanelRegionExperiences* panel = LLFloaterRegionInfo::getPanelExperiences();
+	if (panel)
 	{
-		panelp->getChildRef<LLTextBox>("estate_name").setText(name);
+		panel->sendEstateOwnerMessage(gMessageSystem, "estateexperiencedelta", LLFloaterRegionInfo::getLastInvoice(), str);
 	}
 }
 
-void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
-{
-	BOOL god = gAgent.isGodlike();
-	BOOL owner = (region && (region->getOwner() == gAgent.getID()));
-	BOOL manager = (region && region->isEstateManager());
-	setCtrlsEnabled(god || owner || manager);
-	
-	getChildView("apply_btn")->setEnabled(FALSE);
-
-	BOOL has_allowed_avatar = getChild<LLNameListCtrl>("allowed_avatar_name_list")->getFirstSelected() ?  TRUE : FALSE;
-	BOOL has_allowed_group = getChild<LLNameListCtrl>("allowed_group_name_list")->getFirstSelected() ?  TRUE : FALSE;
-	BOOL has_banned_agent = getChild<LLNameListCtrl>("banned_avatar_name_list")->getFirstSelected() ?  TRUE : FALSE;
-	BOOL has_estate_manager = getChild<LLNameListCtrl>("estate_manager_name_list")->getFirstSelected() ?  TRUE : FALSE;
-
-	getChildView("add_allowed_avatar_btn")->setEnabled(god || owner || manager);
-	getChildView("remove_allowed_avatar_btn")->setEnabled(has_allowed_avatar && (god || owner || manager));
-	getChildView("allowed_avatar_name_list")->setEnabled(god || owner || manager);
-	
-	getChildView("add_allowed_group_btn")->setEnabled(god || owner || manager);
-	getChildView("remove_allowed_group_btn")->setEnabled(has_allowed_group && (god || owner || manager) );
-	getChildView("allowed_group_name_list")->setEnabled(god || owner || manager);
-
-	// Can't ban people from mainland, orientation islands, etc. because this
-	// creates much network traffic and server load.
-	// Disable their accounts in CSR tool instead.
-	bool linden_estate = isLindenEstate();
-	bool enable_ban = (god || owner || manager) && !linden_estate;
-	getChildView("add_banned_avatar_btn")->setEnabled(enable_ban);
-	getChildView("remove_banned_avatar_btn")->setEnabled(has_banned_agent && enable_ban);
-	getChildView("banned_avatar_name_list")->setEnabled(god || owner || manager);
-
-	getChildView("message_estate_btn")->setEnabled(god || owner || manager);
-	getChildView("kick_user_from_estate_btn")->setEnabled(god || owner || manager);
-
-	// estate managers can't add estate managers
-	getChildView("add_estate_manager_btn")->setEnabled(god || owner);
-	getChildView("remove_estate_manager_btn")->setEnabled(has_estate_manager && (god || owner));
-	getChildView("estate_manager_name_list")->setEnabled(god || owner);
-
-	refresh();
-}
-
-bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region)
-{
-	updateControls(region);
-	
-	// let the parent class handle the general data collection. 
-	bool rv = LLPanelRegionInfo::refreshFromRegion(region);
-
-	// We want estate info. To make sure it works across region
-	// boundaries and multiple packets, we add a serial number to the
-	// integers and track against that on update.
-	strings_t strings;
-	//integers_t integers;
-	//LLFloaterRegionInfo::incrementSerial();
-	//integers.push_back(LLFloaterRegionInfo::());::getPanelEstate();
-
-	
-	LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
-	panel->clearAccessLists();
-	
-    LLEstateInfoModel::instance().setRegion(region);
 
-	refresh();
+void LLPanelRegionExperiences::infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content)
+{	
+	if(handle.isDead())
+		return;
 
-	return rv;
+	LLPanelRegionExperiences* floater = handle.get();
+	if (floater)
+	{
+		floater->processResponse(content);
+	}
 }
 
-void LLPanelEstateInfo::updateChild(LLUICtrl* child_ctrl)
+/*static*/
+std::string LLPanelRegionExperiences::regionCapabilityQuery(LLViewerRegion* region, const std::string &cap)
 {
-	// Ensure appropriate state of the management ui.
-	updateControls(gAgent.getRegion());
-}
+    // region->getHandle()  How to get a region * from a handle?
 
-bool LLPanelEstateInfo::estateUpdate(LLMessageSystem* msg)
-{
-	LL_INFOS() << "LLPanelEstateInfo::estateUpdate()" << LL_ENDL;
-	return false;
+    return region->getCapability(cap);
 }
 
-
-BOOL LLPanelEstateInfo::postBuild()
+bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region)
 {
-	// set up the callbacks for the generic controls
-	initCtrl("externally_visible_radio");
-	initCtrl("allow_direct_teleport");
-	initCtrl("limit_payment");
-	initCtrl("limit_age_verified");
-	initCtrl("voice_chat_check");
-    initCtrl("parcel_access_override");
-
-	getChild<LLUICtrl>("allowed_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));	
-	LLNameListCtrl *avatar_name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list");
-	if (avatar_name_list)
-	{
-		avatar_name_list->setCommitOnSelectionChange(TRUE);
-		avatar_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS);
-	}
-
-	childSetAction("add_allowed_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickAddAllowedAgent, this));
-	childSetAction("remove_allowed_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveAllowedAgent, this));
-
-	getChild<LLUICtrl>("allowed_group_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
-	LLNameListCtrl* group_name_list = getChild<LLNameListCtrl>("allowed_group_name_list");
-	if (group_name_list)
-	{
-		group_name_list->setCommitOnSelectionChange(TRUE);
-		group_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS);
-	}
-
-	getChild<LLUICtrl>("add_allowed_group_btn")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onClickAddAllowedGroup, this));
-	childSetAction("remove_allowed_group_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveAllowedGroup, this));
-
-	getChild<LLUICtrl>("banned_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
-	LLNameListCtrl* banned_name_list = getChild<LLNameListCtrl>("banned_avatar_name_list");
-	if (banned_name_list)
-	{
-		banned_name_list->setCommitOnSelectionChange(TRUE);
-		banned_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS);
-	}
-
-	childSetAction("add_banned_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickAddBannedAgent, this));
-	childSetAction("remove_banned_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveBannedAgent, this));
+	BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
 
-	getChild<LLUICtrl>("estate_manager_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
-	LLNameListCtrl* manager_name_list = getChild<LLNameListCtrl>("estate_manager_name_list");
-	if (manager_name_list)
-	{
-		manager_name_list->setCommitOnSelectionChange(TRUE);
-		manager_name_list->setMaxItemCount(ESTATE_MAX_MANAGERS * 4);	// Allow extras for dupe issue
-	}
+	mAllowed->loading();
+	mAllowed->setReadonly(!allow_modify);
+	// remove grid-wide experiences
+	mAllowed->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID));
+	// remove default experience
+	mAllowed->addFilter(boost::bind(LLPanelExperiencePicker::FilterMatching, _1, mDefaultExperience));
 
-	childSetAction("add_estate_manager_btn", boost::bind(&LLPanelEstateInfo::onClickAddEstateManager, this));
-	childSetAction("remove_estate_manager_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveEstateManager, this));
-	childSetAction("message_estate_btn", boost::bind(&LLPanelEstateInfo::onClickMessageEstate, this));
-	childSetAction("kick_user_from_estate_btn", boost::bind(&LLPanelEstateInfo::onClickKickUser, this));
+	mBlocked->loading();
+	mBlocked->setReadonly(!allow_modify);
+	// only grid-wide experiences
+	mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithoutProperty, _1, LLExperienceCache::PROPERTY_GRID));
+	// but not privileged ones
+	mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_PRIVILEGED));
+	// remove default experience
+	mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterMatching, _1, mDefaultExperience));
 
-	getChild<LLUICtrl>("parcel_access_override")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeAccessOverride, this));
+	mTrusted->loading();
+	mTrusted->setReadonly(!allow_modify);
 
-	getChild<LLUICtrl>("externally_visible_radio")->setFocus(TRUE);
+    LLExperienceCache::instance().getRegionExperiences(boost::bind(&LLPanelRegionExperiences::regionCapabilityQuery, region, _1),
+        boost::bind(&LLPanelRegionExperiences::infoCallback, getDerivedHandle<LLPanelRegionExperiences>(), _1));
 
-	return LLPanelRegionInfo::postBuild();
+    return LLPanelRegionInfo::refreshFromRegion(region);
 }
 
-void LLPanelEstateInfo::refresh()
+LLSD LLPanelRegionExperiences::addIds(LLPanelExperienceListEditor* panel)
 {
-	// Disable access restriction controls if they make no sense.
-	bool public_access = ("estate_public_access" == getChild<LLUICtrl>("externally_visible_radio")->getValue().asString());
-
-	getChildView("Only Allow")->setEnabled(public_access);
-	getChildView("limit_payment")->setEnabled(public_access);
-	getChildView("limit_age_verified")->setEnabled(public_access);
-
-	// if this is set to false, then the limit fields are meaningless and should be turned off
-	if (public_access == false)
+	LLSD ids;
+	const uuid_list_t& id_list = panel->getExperienceIds();
+	for(uuid_list_t::const_iterator it = id_list.begin(); it != id_list.end(); ++it)
 	{
-		getChild<LLUICtrl>("limit_payment")->setValue(false);
-		getChild<LLUICtrl>("limit_age_verified")->setValue(false);
+		ids.append(*it);
 	}
-}
-
-void LLPanelEstateInfo::refreshFromEstate()
-{
-	const LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
-
-	getChild<LLUICtrl>("estate_name")->setValue(estate_info.getName());
-	setOwnerName(LLSLURL("agent", estate_info.getOwnerID(), "inspect").getSLURLString());
-
-	getChild<LLUICtrl>("externally_visible_radio")->setValue(estate_info.getIsExternallyVisible() ? "estate_public_access" : "estate_restricted_access");
-	getChild<LLUICtrl>("voice_chat_check")->setValue(estate_info.getAllowVoiceChat());
-	getChild<LLUICtrl>("allow_direct_teleport")->setValue(estate_info.getAllowDirectTeleport());
-	getChild<LLUICtrl>("limit_payment")->setValue(estate_info.getDenyAnonymous());
-	getChild<LLUICtrl>("limit_age_verified")->setValue(estate_info.getDenyAgeUnverified());
-    getChild<LLUICtrl>("parcel_access_override")->setValue(estate_info.getAllowAccessOverride());
-
-	// Ensure appriopriate state of the management UI
-	updateControls(gAgent.getRegion());
-	refresh();
+	return ids;
 }
 
 
-void LLPanelEstateInfo::refreshAccessFromEstate(U32 flags)
+BOOL LLPanelRegionExperiences::sendUpdate()
 {
-    const LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
-
-    // grab the UUID's out of the string fields
-    if (flags & ESTATE_ACCESS_ALLOWED_AGENTS)
-    {
-        LLNameListCtrl *allowed_agent_name_list(getChild<LLNameListCtrl>("allowed_avatar_name_list"));
-
-        const uuid_set_t& allowed_agents(estate_info.getAllowedAgents());
-        int totalAllowedAgents = allowed_agents.size();
-
-        if (allowed_agent_name_list)
-        {
-            totalAllowedAgents += allowed_agent_name_list->getItemCount();
-        }
-
-        LLStringUtil::format_map_t args;
-        args["[ALLOWEDAGENTS]"] = llformat("%d", totalAllowedAgents);
-        args["[MAXACCESS]"] = llformat("%d", ESTATE_MAX_ACCESS_IDS);
-        std::string msg = LLTrans::getString("RegionInfoAllowedResidents", args);
-        getChild<LLUICtrl>("allow_resident_label")->setValue(LLSD(msg));
-
-        if (allowed_agent_name_list)
-        {
-            // Don't sort these as we add them, sort them when we are done.
-            allowed_agent_name_list->clearSortOrder();
-            allowed_agent_name_list->deleteAllItems();
-
-            for (const LLUUID &id : allowed_agents)
-            {
-                allowed_agent_name_list->addNameItem(id);
-            }
-            allowed_agent_name_list->sortByName(TRUE);
-        }
-    }
-
-    if (flags & ESTATE_ACCESS_ALLOWED_GROUPS)
-    {
-        LLNameListCtrl* allowed_group_name_list(getChild<LLNameListCtrl>("allowed_group_name_list"));
-        const uuid_set_t &allowed_groups(estate_info.getAllowedGroups());
-
-        LLStringUtil::format_map_t args;
-        args["[ALLOWEDGROUPS]"] = llformat("%d", allowed_groups.size());
-        args["[MAXACCESS]"] = llformat("%d", ESTATE_MAX_GROUP_IDS);
-        std::string msg = LLTrans::getString("RegionInfoAllowedGroups", args);
-        getChild<LLUICtrl>("allow_group_label")->setValue(LLSD(msg));
-
-        if (allowed_group_name_list)
-        {
-            // Don't sort these as we add them, sort them when we are done.
-            allowed_group_name_list->clearSortOrder();
-            allowed_group_name_list->deleteAllItems();
-
-            for (const LLUUID &id: allowed_groups)
-            {
-                allowed_group_name_list->addGroupNameItem(id);
-            }
-            allowed_group_name_list->sortByName(TRUE);
-        }
-    }
-
-    if (flags & ESTATE_ACCESS_BANNED_AGENTS)
-    {
-        LLNameListCtrl* banned_agent_name_list(getChild<LLNameListCtrl>("banned_avatar_name_list"));
-        const uuid_set_t &banned_agents(estate_info.getBannedAgents());
-        int totalBannedAgents = banned_agents.size();
+	LLViewerRegion* region = gAgent.getRegion();
 
-        if (banned_agent_name_list)
-        {
-            totalBannedAgents += banned_agent_name_list->getItemCount();
-        }
+    LLSD content;
 
+	content["allowed"]=addIds(mAllowed);
+	content["blocked"]=addIds(mBlocked);
+	content["trusted"]=addIds(mTrusted);
 
-        LLStringUtil::format_map_t args;
-        args["[BANNEDAGENTS]"] = llformat("%d", totalBannedAgents);
-        args["[MAXBANNED]"] = llformat("%d", ESTATE_MAX_ACCESS_IDS);
-        std::string msg = LLTrans::getString("RegionInfoBannedResidents", args);
-        getChild<LLUICtrl>("ban_resident_label")->setValue(LLSD(msg));
+    LLExperienceCache::instance().setRegionExperiences(boost::bind(&LLPanelRegionExperiences::regionCapabilityQuery, region, _1),
+        content, boost::bind(&LLPanelRegionExperiences::infoCallback, getDerivedHandle<LLPanelRegionExperiences>(), _1));
 
-        if (banned_agent_name_list)
-        {
-            // Don't sort these as we add them, sort them when we are done.
-            banned_agent_name_list->clearSortOrder();
-
-            for (const LLUUID &id: banned_agents)
-            {
-                banned_agent_name_list->addNameItem(id);
-            }
-            banned_agent_name_list->sortByName(TRUE);
-        }
-    }
+	return TRUE;
+}
 
-    if (flags & ESTATE_ACCESS_MANAGERS)
-    {
-        LLNameListCtrl* estate_manager_name_list(getChild<LLNameListCtrl>("estate_manager_name_list"));
-        const uuid_set_t &estate_mgrs(estate_info.getEstateManagers());
+void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id )
+{
+	std::string dialog_name;
+	switch (event_type)
+	{
+		case ESTATE_EXPERIENCE_ALLOWED_ADD:
+			dialog_name = "EstateAllowedExperienceAdd";
+			break;
 
-        LLStringUtil::format_map_t args;
-        args["[ESTATEMANAGERS]"] = llformat("%d", estate_mgrs.size());
-        args["[MAXMANAGERS]"] = llformat("%d", ESTATE_MAX_MANAGERS);
-        std::string msg = LLTrans::getString("RegionInfoEstateManagers", args);
-        getChild<LLUICtrl>("estate_manager_label")->setValue(LLSD(msg));
+		case ESTATE_EXPERIENCE_ALLOWED_REMOVE:
+			dialog_name = "EstateAllowedExperienceRemove";
+			break;
 
-        if (estate_manager_name_list)
-        {
-            // Don't sort these as we add them, sort them when we are done.
-            estate_manager_name_list->clearSortOrder();
-            estate_manager_name_list->deleteAllItems();		// Clear existing entries
-
-            // There should be only ESTATE_MAX_MANAGERS people in the list, but if the database gets more (SL-46107) don't 
-            // truncate the list unless it's really big.  Go ahead and show the extras so the user doesn't get confused, 
-            // and they can still remove them.
-            for (const LLUUID &id : estate_mgrs)
-            {
-                estate_manager_name_list->addNameItem(id);
-            }
-            estate_manager_name_list->sortByName(TRUE);
-        }
-    }
+		case ESTATE_EXPERIENCE_TRUSTED_ADD:
+			dialog_name = "EstateTrustedExperienceAdd";
+			break;
 
-    // Update the buttons which may change based on the list contents but also needs to account for general access features.
-    updateControls(gAgent.getRegion());
-}
+		case ESTATE_EXPERIENCE_TRUSTED_REMOVE:
+			dialog_name = "EstateTrustedExperienceRemove";
+			break;
 
+		case ESTATE_EXPERIENCE_BLOCKED_ADD:
+			dialog_name = "EstateBlockedExperienceAdd";
+			break;
 
-namespace
-{
-    LLSD set_to_llsdarray(const uuid_set_t &values)
-    {
-        LLSD result(LLSD::emptyArray());
+		case ESTATE_EXPERIENCE_BLOCKED_REMOVE:
+			dialog_name = "EstateBlockedExperienceRemove";
+			break;
 
-        for (const LLUUID &id : values)
-        {
-            result.append(id);
-        }
-        return result;
-    }
-}
+		default:
+			return;
+	}
 
-BOOL LLPanelEstateInfo::sendUpdate()
-{
-	LL_INFOS() << "LLPanelEsateInfo::sendUpdate()" << LL_ENDL;
+	LLSD payload;
+	payload["operation"] = (S32)event_type;
+	payload["dialog_name"] = dialog_name;
+	payload["allowed_ids"].append(id);
 
-	LLNotification::Params params("ChangeLindenEstate");
-	params.functor.function(boost::bind(&LLPanelEstateInfo::callbackChangeLindenEstate, this, _1, _2));
+	LLSD args;
+	args["ALL_ESTATES"] = all_estates_text();
 
-	if (isLindenEstate())
+	LLNotification::Params params(dialog_name);
+	params.payload(payload)
+		.substitutions(args)
+		.functor.function(LLPanelRegionExperiences::experienceCoreConfirm);
+	if (LLPanelEstateInfo::isLindenEstate())
 	{
-		// trying to change reserved estate, warn
-		LLNotifications::instance().add(params);
+		LLNotifications::instance().forceResponse(params, 0);
 	}
 	else
 	{
-		// for normal estates, just make the change
-		LLNotifications::instance().forceResponse(params, 0);
+		LLNotifications::instance().add(params);
 	}
-	return TRUE;
+
+	onChangeAnything();
 }
 
-bool LLPanelEstateInfo::callbackChangeLindenEstate(const LLSD& notification, const LLSD& response)
+
+LLPanelEstateAccess::LLPanelEstateAccess()
+: LLPanelRegionInfo(), mPendingUpdate(false)
+{}
+
+BOOL LLPanelEstateAccess::postBuild()
 {
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	switch(option)
+	getChild<LLUICtrl>("allowed_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
+	LLNameListCtrl *avatar_name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list");
+	if (avatar_name_list)
 	{
-	case 0:
-		{
-			LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
+		avatar_name_list->setCommitOnSelectionChange(TRUE); 
+		avatar_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS);
+	}
 
-			// update model
-			estate_info.setUseFixedSun(false); // we don't support fixed sun estates anymore
-			estate_info.setIsExternallyVisible("estate_public_access" == getChild<LLUICtrl>("externally_visible_radio")->getValue().asString());
-			estate_info.setAllowDirectTeleport(getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean());
-			estate_info.setDenyAnonymous(getChild<LLUICtrl>("limit_payment")->getValue().asBoolean());
-			estate_info.setDenyAgeUnverified(getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean());
-			estate_info.setAllowVoiceChat(getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean());
-            estate_info.setAllowAccessOverride(getChild<LLUICtrl>("parcel_access_override")->getValue().asBoolean());
-			// send the update to sim
-			estate_info.sendEstateInfo();
-		}
+	getChild<LLUICtrl>("allowed_search_input")->setCommitCallback(boost::bind(&LLPanelEstateAccess::onAllowedSearchEdit, this, _2));
+	childSetAction("add_allowed_avatar_btn", boost::bind(&LLPanelEstateAccess::onClickAddAllowedAgent, this));
+	childSetAction("remove_allowed_avatar_btn", boost::bind(&LLPanelEstateAccess::onClickRemoveAllowedAgent, this));
+	childSetAction("copy_allowed_list_btn", boost::bind(&LLPanelEstateAccess::onClickCopyAllowedList, this));
 
-		// we don't want to do this because we'll get it automatically from the sim
-		// after the spaceserver processes it
-//		else
-//		{
-//			// caps method does not automatically send this info
-//			LLFloaterRegionInfo::requestRegionInfo();
-//		}
-		break;
-	case 1:
-	default:
-		// do nothing
-		break;
+	getChild<LLUICtrl>("allowed_group_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
+	LLNameListCtrl* group_name_list = getChild<LLNameListCtrl>("allowed_group_name_list");
+	if (group_name_list)
+	{
+		group_name_list->setCommitOnSelectionChange(TRUE);
+		group_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS);
 	}
-	return false;
-}
-
 
-/*
-// Request = "getowner"
-// SParam[0] = "" (empty string)
-// IParam[0] = serial
-void LLPanelEstateInfo::getEstateOwner()
-{
-	// TODO -- disable the panel
-	// and call this function whenever we cross a region boundary
-	// re-enable when owner matches, and get new estate info
-	LLMessageSystem* msg = gMessageSystem;
-	msg->newMessageFast(_PREHASH_EstateOwnerRequest);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+	getChild<LLUICtrl>("allowed_group_search_input")->setCommitCallback(boost::bind(&LLPanelEstateAccess::onAllowedGroupsSearchEdit, this, _2));
+	getChild<LLUICtrl>("add_allowed_group_btn")->setCommitCallback(boost::bind(&LLPanelEstateAccess::onClickAddAllowedGroup, this));
+	childSetAction("remove_allowed_group_btn", boost::bind(&LLPanelEstateAccess::onClickRemoveAllowedGroup, this));
+	childSetAction("copy_allowed_group_list_btn", boost::bind(&LLPanelEstateAccess::onClickCopyAllowedGroupList, this));
 
-	msg->nextBlockFast(_PREHASH_RequestData);
-	msg->addStringFast(_PREHASH_Request, "getowner");
+	getChild<LLUICtrl>("banned_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
+	LLNameListCtrl* banned_name_list = getChild<LLNameListCtrl>("banned_avatar_name_list");
+	if (banned_name_list)
+	{
+		banned_name_list->setCommitOnSelectionChange(TRUE);
+		banned_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS);
+	}
 
-	// we send an empty string so that the variable block is not empty
-	msg->nextBlockFast(_PREHASH_StringData);
-	msg->addStringFast(_PREHASH_SParam, "");
+	getChild<LLUICtrl>("banned_search_input")->setCommitCallback(boost::bind(&LLPanelEstateAccess::onBannedSearchEdit, this, _2));
+	childSetAction("add_banned_avatar_btn", boost::bind(&LLPanelEstateAccess::onClickAddBannedAgent, this));
+	childSetAction("remove_banned_avatar_btn", boost::bind(&LLPanelEstateAccess::onClickRemoveBannedAgent, this));
+	childSetAction("copy_banned_list_btn", boost::bind(&LLPanelEstateAccess::onClickCopyBannedList, this));
 
-	msg->nextBlockFast(_PREHASH_IntegerData);
-	msg->addS32Fast(_PREHASH_IParam, LLFloaterRegionInfo::getSerial());
+	getChild<LLUICtrl>("estate_manager_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
+	LLNameListCtrl* manager_name_list = getChild<LLNameListCtrl>("estate_manager_name_list");
+	if (manager_name_list)
+	{
+		manager_name_list->setCommitOnSelectionChange(TRUE);
+		manager_name_list->setMaxItemCount(ESTATE_MAX_MANAGERS * 4);	// Allow extras for dupe issue
+	}
 
-	gAgent.sendMessage();
-}
-*/
+	childSetAction("add_estate_manager_btn", boost::bind(&LLPanelEstateAccess::onClickAddEstateManager, this));
+	childSetAction("remove_estate_manager_btn", boost::bind(&LLPanelEstateAccess::onClickRemoveEstateManager, this));
 
-const std::string LLPanelEstateInfo::getOwnerName() const
-{
-	return getChild<LLUICtrl>("estate_owner")->getValue().asString();
+	return TRUE;
 }
 
-void LLPanelEstateInfo::setOwnerName(const std::string& name)
+void LLPanelEstateAccess::updateControls(LLViewerRegion* region)
 {
-	getChild<LLUICtrl>("estate_owner")->setValue(LLSD(name));
-}
+	BOOL god = gAgent.isGodlike();
+	BOOL owner = (region && (region->getOwner() == gAgent.getID()));
+	BOOL manager = (region && region->isEstateManager());
+	BOOL enable_cotrols = god || owner || manager;	
+	setCtrlsEnabled(enable_cotrols);
+	
+	BOOL has_allowed_avatar = getChild<LLNameListCtrl>("allowed_avatar_name_list")->getFirstSelected() ? TRUE : FALSE;
+	BOOL has_allowed_group = getChild<LLNameListCtrl>("allowed_group_name_list")->getFirstSelected() ? TRUE : FALSE;
+	BOOL has_banned_agent = getChild<LLNameListCtrl>("banned_avatar_name_list")->getFirstSelected() ? TRUE : FALSE;
+	BOOL has_estate_manager = getChild<LLNameListCtrl>("estate_manager_name_list")->getFirstSelected() ? TRUE : FALSE;
 
-void LLPanelEstateInfo::clearAccessLists() 
-{
-	LLNameListCtrl* name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list");
-	if (name_list)
-	{
-		name_list->deleteAllItems();
-	}
+	getChildView("add_allowed_avatar_btn")->setEnabled(enable_cotrols);
+	getChildView("remove_allowed_avatar_btn")->setEnabled(has_allowed_avatar && enable_cotrols);
+	getChildView("allowed_avatar_name_list")->setEnabled(enable_cotrols);
 
-	name_list = getChild<LLNameListCtrl>("banned_avatar_name_list");
-	if (name_list)
-	{
-		name_list->deleteAllItems();
-	}
-	updateControls(gAgent.getRegion());
-}
+	getChildView("add_allowed_group_btn")->setEnabled(enable_cotrols);
+	getChildView("remove_allowed_group_btn")->setEnabled(has_allowed_group && enable_cotrols);
+	getChildView("allowed_group_name_list")->setEnabled(enable_cotrols);
 
-// static
-void LLPanelEstateInfo::onClickMessageEstate(void* userdata)
-{
-	LL_INFOS() << "LLPanelEstateInfo::onClickMessageEstate" << LL_ENDL;
-	LLNotificationsUtil::add("MessageEstate", LLSD(), LLSD(), boost::bind(&LLPanelEstateInfo::onMessageCommit, (LLPanelEstateInfo*)userdata, _1, _2));
-}
+	// Can't ban people from mainland, orientation islands, etc. because this
+	// creates much network traffic and server load.
+	// Disable their accounts in CSR tool instead.
+	bool linden_estate = LLPanelEstateInfo::isLindenEstate();
+	bool enable_ban = enable_cotrols && !linden_estate;
+	getChildView("add_banned_avatar_btn")->setEnabled(enable_ban);
+	getChildView("remove_banned_avatar_btn")->setEnabled(has_banned_agent && enable_ban);
+	getChildView("banned_avatar_name_list")->setEnabled(enable_cotrols);
 
-bool LLPanelEstateInfo::onMessageCommit(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	std::string text = response["message"].asString();
-	if(option != 0) return false;
-	if(text.empty()) return false;
-	LL_INFOS() << "Message to everyone: " << text << LL_ENDL;
-	strings_t strings;
-	//integers_t integers;
-	std::string name;
-	LLAgentUI::buildFullname(name);
-	strings.push_back(strings_t::value_type(name));
-	strings.push_back(strings_t::value_type(text));
+	// estate managers can't add estate managers
+	getChildView("add_estate_manager_btn")->setEnabled(god || owner);
+	getChildView("remove_estate_manager_btn")->setEnabled(has_estate_manager && (god || owner));
+	getChildView("estate_manager_name_list")->setEnabled(god || owner);
 
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("instantmessage", strings);
-	return false;
+	if (enable_cotrols != mCtrlsEnabled)
+	{
+		mCtrlsEnabled = enable_cotrols;
+		updateLists(); // update the lists on the agent's access level change
+	}
 }
 
-void LLPanelEstateInfo::onChangeAccessOverride()
+//---------------------------------------------------------------------------
+// Add/Remove estate access button callbacks
+//---------------------------------------------------------------------------
+void LLPanelEstateAccess::onClickAddAllowedAgent()
 {
-	if (!getChild<LLUICtrl>("parcel_access_override")->getValue().asBoolean())
+	LLCtrlListInterface *list = childGetListInterface("allowed_avatar_name_list");
+	if (!list) return;
+	if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS)
 	{
-		LLNotificationsUtil::add("EstateParcelAccessOverride");
+		//args
+
+		LLSD args;
+		args["MAX_AGENTS"] = llformat("%d", ESTATE_MAX_ACCESS_IDS);
+		LLNotificationsUtil::add("MaxAllowedAgentOnRegion", args);
+		return;
 	}
+	accessAddCore(ESTATE_ACCESS_ALLOWED_AGENT_ADD, "EstateAllowedAgentAdd");
 }
 
-LLPanelEstateCovenant::LLPanelEstateCovenant()
-	:
-	mCovenantID(LLUUID::null),
-	mAssetStatus(ASSET_ERROR)
+void LLPanelEstateAccess::onClickRemoveAllowedAgent()
 {
+	accessRemoveCore(ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, "EstateAllowedAgentRemove", "allowed_avatar_name_list");
 }
 
-// virtual 
-bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region)
+void LLPanelEstateAccess::onClickAddAllowedGroup()
 {
-	LLTextBox* region_name = getChild<LLTextBox>("region_name_text");
-	if (region_name)
+	LLCtrlListInterface *list = childGetListInterface("allowed_group_name_list");
+	if (!list) return;
+	if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS)
 	{
-		region_name->setText(region->getName());
+		LLSD args;
+		args["MAX_GROUPS"] = llformat("%d", ESTATE_MAX_ACCESS_IDS);
+		LLNotificationsUtil::add("MaxAllowedGroupsOnRegion", args);
+		return;
 	}
 
-	LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause");
-	if (resellable_clause)
+	LLNotification::Params params("ChangeLindenAccess");
+	params.functor.function(boost::bind(&LLPanelEstateAccess::addAllowedGroup, this, _1, _2));
+	if (LLPanelEstateInfo::isLindenEstate())
 	{
-		if (region->getRegionFlag(REGION_FLAGS_BLOCK_LAND_RESELL))
-		{
-			resellable_clause->setText(getString("can_not_resell"));
-		}
-		else
-		{
-			resellable_clause->setText(getString("can_resell"));
-		}
+		LLNotifications::instance().add(params);
 	}
-	
-	LLTextBox* changeable_clause = getChild<LLTextBox>("changeable_clause");
-	if (changeable_clause)
+	else
+	{
+		LLNotifications::instance().forceResponse(params, 0);
+	}
+}
+
+bool LLPanelEstateAccess::addAllowedGroup(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if (option != 0) return false;
+
+	LLFloater* parent_floater = gFloaterView->getParentFloater(this);
+
+	LLFloaterGroupPicker* widget = LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(gAgent.getID()));
+	if (widget)
 	{
-		if (region->getRegionFlag(REGION_FLAGS_ALLOW_PARCEL_CHANGES))
-		{
-			changeable_clause->setText(getString("can_change"));
-		}
-		else
+		widget->removeNoneOption();
+		widget->setSelectGroupCallback(boost::bind(&LLPanelEstateAccess::addAllowedGroup2, this, _1));
+		if (parent_floater)
 		{
-			changeable_clause->setText(getString("can_not_change"));
+			LLRect new_rect = gFloaterView->findNeighboringPosition(parent_floater, widget);
+			widget->setOrigin(new_rect.mLeft, new_rect.mBottom);
+			parent_floater->addDependentFloater(widget);
 		}
 	}
 
-	LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text");
-	if (region_maturity)
+	return false;
+}
+
+void LLPanelEstateAccess::onClickRemoveAllowedGroup()
+{
+	accessRemoveCore(ESTATE_ACCESS_ALLOWED_GROUP_REMOVE, "EstateAllowedGroupRemove", "allowed_group_name_list");
+}
+
+void LLPanelEstateAccess::onClickAddBannedAgent()
+{
+	LLCtrlListInterface *list = childGetListInterface("banned_avatar_name_list");
+	if (!list) return;
+	if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS)
 	{
-		region_maturity->setText(region->getSimAccessString());
+		LLSD args;
+		args["MAX_BANNED"] = llformat("%d", ESTATE_MAX_ACCESS_IDS);
+		LLNotificationsUtil::add("MaxBannedAgentsOnRegion", args);
+		return;
 	}
-	
-	LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text");
-	region_landtype->setText(region->getLocalizedSimProductName());
-	
-	// let the parent class handle the general data collection. 
-	bool rv = LLPanelRegionInfo::refreshFromRegion(region);
-	LLMessageSystem *msg = gMessageSystem;
-	msg->newMessage("EstateCovenantRequest");
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID,	gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
-	msg->sendReliable(region->getHost());
-	return rv;
+	accessAddCore(ESTATE_ACCESS_BANNED_AGENT_ADD, "EstateBannedAgentAdd");
 }
 
-// virtual 
-bool LLPanelEstateCovenant::estateUpdate(LLMessageSystem* msg)
+void LLPanelEstateAccess::onClickRemoveBannedAgent()
 {
-	LL_INFOS() << "LLPanelEstateCovenant::estateUpdate()" << LL_ENDL;
-	return true;
+	accessRemoveCore(ESTATE_ACCESS_BANNED_AGENT_REMOVE, "EstateBannedAgentRemove", "banned_avatar_name_list");
 }
-	
-// virtual 
-BOOL LLPanelEstateCovenant::postBuild()
-{
-	mEstateNameText = getChild<LLTextBox>("estate_name_text");
-	mEstateOwnerText = getChild<LLTextBox>("estate_owner_text");
-	mLastModifiedText = getChild<LLTextBox>("covenant_timestamp_text");
-	mEditor = getChild<LLViewerTextEditor>("covenant_editor");
-	LLButton* reset_button = getChild<LLButton>("reset_covenant");
-	reset_button->setEnabled(gAgent.canManageEstate());
-	reset_button->setClickedCallback(LLPanelEstateCovenant::resetCovenantID, NULL);
 
-	return LLPanelRegionInfo::postBuild();
+void LLPanelEstateAccess::onClickCopyAllowedList()
+{
+	copyListToClipboard("allowed_avatar_name_list");
 }
 
-// virtual 
-void LLPanelEstateCovenant::updateChild(LLUICtrl* child_ctrl)
+void LLPanelEstateAccess::onClickCopyAllowedGroupList()
 {
+	copyListToClipboard("allowed_group_name_list");
 }
 
-// virtual
-BOOL LLPanelEstateCovenant::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-								  EDragAndDropType cargo_type,
-								  void* cargo_data,
-								  EAcceptance* accept,
-								  std::string& tooltip_msg)
+void LLPanelEstateAccess::onClickCopyBannedList()
 {
-	LLInventoryItem* item = (LLInventoryItem*)cargo_data;
+	copyListToClipboard("banned_avatar_name_list");
+}
 
-	if (!gAgent.canManageEstate())
-	{
-		*accept = ACCEPT_NO;
-		return TRUE;
+// static
+void LLPanelEstateAccess::onClickAddEstateManager()
+{
+	LLCtrlListInterface *list = childGetListInterface("estate_manager_name_list");
+	if (!list) return;
+	if (list->getItemCount() >= ESTATE_MAX_MANAGERS)
+	{	// Tell user they can't add more managers
+		LLSD args;
+		args["MAX_MANAGER"] = llformat("%d", ESTATE_MAX_MANAGERS);
+		LLNotificationsUtil::add("MaxManagersOnRegion", args);
+	}
+	else
+	{	// Go pick managers to add
+		accessAddCore(ESTATE_ACCESS_MANAGER_ADD, "EstateManagerAdd");
 	}
+}
 
-	switch(cargo_type)
+// static
+void LLPanelEstateAccess::onClickRemoveEstateManager()
+{
+	accessRemoveCore(ESTATE_ACCESS_MANAGER_REMOVE, "EstateManagerRemove", "estate_manager_name_list");
+}
+
+
+// Special case callback for groups, since it has different callback format than names
+void LLPanelEstateAccess::addAllowedGroup2(LLUUID id)
+{
+	LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess();
+	if (panel)
 	{
-	case DAD_NOTECARD:
-		*accept = ACCEPT_YES_COPY_SINGLE;
-		if (item && drop)
+		LLNameListCtrl* group_list = panel->getChild<LLNameListCtrl>("allowed_group_name_list");
+		LLScrollListItem* item = group_list->getNameItemByAgentId(id);
+		if (item)
 		{
-			LLSD payload;
-			payload["item_id"] = item->getUUID();
-			LLNotificationsUtil::add("EstateChangeCovenant", LLSD(), payload,
-									LLPanelEstateCovenant::confirmChangeCovenantCallback);
+			LLSD args;
+			args["GROUP"] = item->getColumn(0)->getValue().asString();
+			LLNotificationsUtil::add("GroupIsAlreadyInList", args);
+			return;
 		}
-		break;
-	default:
-		*accept = ACCEPT_NO;
-		break;
 	}
+	
+	LLSD payload;
+	payload["operation"] = (S32)ESTATE_ACCESS_ALLOWED_GROUP_ADD;
+	payload["dialog_name"] = "EstateAllowedGroupAdd";
+	payload["allowed_ids"].append(id);
 
-	return TRUE;
-} 
-
-// static 
-bool LLPanelEstateCovenant::confirmChangeCovenantCallback(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	LLInventoryItem* item = gInventory.getItem(notification["payload"]["item_id"].asUUID());
-	LLPanelEstateCovenant* self = LLFloaterRegionInfo::getPanelCovenant();
-
-	if (!item || !self) return false;
+	LLSD args;
+	args["ALL_ESTATES"] = all_estates_text();
 
-	switch(option)
+	LLNotification::Params params("EstateAllowedGroupAdd");
+	params.payload(payload)
+		.substitutions(args)
+		.functor.function(accessCoreConfirm);
+	if (LLPanelEstateInfo::isLindenEstate())
 	{
-	case 0:
-		self->loadInvItem(item);
-		break;
-	default:
-		break;
+		LLNotifications::instance().forceResponse(params, 0);
+	}
+	else
+	{
+		LLNotifications::instance().add(params);
 	}
-	return false;
 }
 
 // static
-void LLPanelEstateCovenant::resetCovenantID(void* userdata)
+void LLPanelEstateAccess::accessAddCore(U32 operation_flag, const std::string& dialog_name)
 {
-	LLNotificationsUtil::add("EstateChangeCovenant", LLSD(), LLSD(), confirmResetCovenantCallback);
+	LLSD payload;
+	payload["operation"] = (S32)operation_flag;
+	payload["dialog_name"] = dialog_name;
+	// agent id filled in after avatar picker
+
+	LLNotification::Params params("ChangeLindenAccess");
+	params.payload(payload)
+		.functor.function(accessAddCore2);
+
+	if (LLPanelEstateInfo::isLindenEstate())
+	{
+		LLNotifications::instance().add(params);
+	}
+	else
+	{
+		// same as clicking "OK"
+		LLNotifications::instance().forceResponse(params, 0);
+	}
 }
 
 // static
-bool LLPanelEstateCovenant::confirmResetCovenantCallback(const LLSD& notification, const LLSD& response)
+bool LLPanelEstateAccess::accessAddCore2(const LLSD& notification, const LLSD& response)
 {
-	LLPanelEstateCovenant* self = LLFloaterRegionInfo::getPanelCovenant();
-	if (!self) return false;
-
 	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	switch(option)
+	if (option != 0)
 	{
-	case 0:		
-		self->loadInvItem(NULL);
+		// abort change
+		return false;
+	}
+
+	LLEstateAccessChangeInfo* change_info = new LLEstateAccessChangeInfo(notification["payload"]);
+	//Get parent floater name
+	LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess();
+	LLFloater* parent_floater = panel ? gFloaterView->getParentFloater(panel) : NULL;
+	const std::string& parent_floater_name = parent_floater ? parent_floater->getName() : "";
+
+	//Determine the button that triggered opening of the avatar picker 
+	//(so that a shadow frustum from the button to the avatar picker can be created)
+	LLView * button = NULL;
+	switch (change_info->mOperationFlag)
+	{
+	case ESTATE_ACCESS_ALLOWED_AGENT_ADD:
+		button = panel->findChild<LLButton>("add_allowed_avatar_btn");
 		break;
-	default:
+
+	case ESTATE_ACCESS_BANNED_AGENT_ADD:
+		button = panel->findChild<LLButton>("add_banned_avatar_btn");
 		break;
-	}
-	return false;
-}
 
-void LLPanelEstateCovenant::loadInvItem(LLInventoryItem *itemp)
-{
-	const BOOL high_priority = TRUE;	
-	if (itemp)
-	{
-		gAssetStorage->getInvItemAsset(gAgent.getRegionHost(),
-									gAgent.getID(),
-									gAgent.getSessionID(),
-									itemp->getPermissions().getOwner(),
-									LLUUID::null,
-									itemp->getUUID(),
-									itemp->getAssetUUID(),
-									itemp->getType(),
-                                    onLoadComplete,
-									(void*)this,
-									high_priority);
-		mAssetStatus = ASSET_LOADING;
+	case ESTATE_ACCESS_MANAGER_ADD:
+		button = panel->findChild<LLButton>("add_estate_manager_btn");
+		break;
 	}
-	else
+
+	// avatar picker yes multi-select, yes close-on-select
+	LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateAccess::accessAddCore3, _1, _2, (void*)change_info),
+		TRUE, TRUE, FALSE, parent_floater_name, button);
+
+	//Allows the closed parent floater to close the child floater (avatar picker)
+	if (child_floater)
 	{
-		mAssetStatus = ASSET_LOADED;
-		setCovenantTextEditor(LLTrans::getString("RegionNoCovenant"));
-		sendChangeCovenantID(LLUUID::null);
+		parent_floater->addDependentFloater(child_floater);
 	}
+
+	return false;
 }
 
 // static
-void LLPanelEstateCovenant::onLoadComplete(LLVFS *vfs,
-									   const LLUUID& asset_uuid,
-									   LLAssetType::EType type,
-									   void* user_data, S32 status, LLExtStat ext_status)
+void LLPanelEstateAccess::accessAddCore3(const uuid_vec_t& ids, std::vector<LLAvatarName> names, void* data)
 {
-	LL_INFOS() << "LLPanelEstateCovenant::onLoadComplete()" << LL_ENDL;
-	LLPanelEstateCovenant* panelp = (LLPanelEstateCovenant*)user_data;
-	if( panelp )
+	LLEstateAccessChangeInfo* change_info = (LLEstateAccessChangeInfo*)data;
+	if (!change_info) return;
+	if (ids.empty())
 	{
-		if(0 == status)
-		{
-			LLVFile file(vfs, asset_uuid, type, LLVFile::READ);
-
-			S32 file_length = file.getSize();
+		// User didn't select a name.
+		delete change_info;
+		change_info = NULL;
+		return;
+	}
+	// User did select a name.
+	change_info->mAgentOrGroupIDs = ids;
+	// Can't put estate owner on ban list
+	LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess();
+	if (!panel) return;
+	LLViewerRegion* region = gAgent.getRegion();
+	if (!region) return;
 
-			std::vector<char> buffer(file_length+1);
-			file.read((U8*)&buffer[0], file_length);
-			// put a EOS at the end
-			buffer[file_length] = 0;
+	if (change_info->mOperationFlag & ESTATE_ACCESS_ALLOWED_AGENT_ADD)
+	{
+		LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>("allowed_avatar_name_list");
+		int currentCount = (name_list ? name_list->getItemCount() : 0);
+		if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS)
+		{
+			LLSD args;
+			args["NUM_ADDED"] = llformat("%d", ids.size());
+			args["MAX_AGENTS"] = llformat("%d", ESTATE_MAX_ACCESS_IDS);
+			args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeAllowedAgents");
+			args["NUM_EXCESS"] = llformat("%d", (ids.size() + currentCount) - ESTATE_MAX_ACCESS_IDS);
+			LLNotificationsUtil::add("MaxAgentOnRegionBatch", args);
+			delete change_info;
+			return;
+		}
 
-			if( (file_length > 19) && !strncmp( &buffer[0], "Linden text version", 19 ) )
+		uuid_vec_t ids_allowed;
+		std::vector<LLAvatarName> names_allowed;
+		std::string already_allowed;
+		bool single = true;
+		for (U32 i = 0; i < ids.size(); ++i)
+		{
+			LLScrollListItem* item = name_list->getNameItemByAgentId(ids[i]);
+			if (item)
 			{
-				if( !panelp->mEditor->importBuffer( &buffer[0], file_length+1 ) )
-				{
-					LL_WARNS() << "Problem importing estate covenant." << LL_ENDL;
-					LLNotificationsUtil::add("ProblemImportingEstateCovenant");
-				}
-				else
+				if (!already_allowed.empty())
 				{
-					panelp->sendChangeCovenantID(asset_uuid);	
+					already_allowed += ", ";
+					single = false;
 				}
+				already_allowed += item->getColumn(0)->getValue().asString();
 			}
 			else
 			{
-				// Version 0 (just text, doesn't include version number)
-				panelp->sendChangeCovenantID(asset_uuid);
+				ids_allowed.push_back(ids[i]);
+				names_allowed.push_back(names[i]);
 			}
 		}
-		else
+		if (!already_allowed.empty())
 		{
-			if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
-				LL_ERR_FILE_EMPTY == status)
+			LLSD args;
+			args["AGENT"] = already_allowed;
+			args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeAllowedAgents");
+			LLNotificationsUtil::add(single ? "AgentIsAlreadyInList" : "AgentsAreAlreadyInList", args);
+			if (ids_allowed.empty())
 			{
-				LLNotificationsUtil::add("MissingNotecardAssetID");
+				delete change_info;
+				return;
 			}
-			else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
+		}
+		change_info->mAgentOrGroupIDs = ids_allowed;
+		change_info->mAgentNames = names_allowed;
+	}
+	if (change_info->mOperationFlag & ESTATE_ACCESS_BANNED_AGENT_ADD)
+	{
+		LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>("banned_avatar_name_list");
+		LLNameListCtrl* em_list = panel->getChild<LLNameListCtrl>("estate_manager_name_list");
+		int currentCount = (name_list ? name_list->getItemCount() : 0);
+		if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS)
+		{
+			LLSD args;
+			args["NUM_ADDED"] = llformat("%d", ids.size());
+			args["MAX_AGENTS"] = llformat("%d", ESTATE_MAX_ACCESS_IDS);
+			args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeBannedAgents");
+			args["NUM_EXCESS"] = llformat("%d", (ids.size() + currentCount) - ESTATE_MAX_ACCESS_IDS);
+			LLNotificationsUtil::add("MaxAgentOnRegionBatch", args);
+			delete change_info;
+			return;
+		}
+
+		uuid_vec_t ids_allowed;
+		std::vector<LLAvatarName> names_allowed;
+		std::string already_banned;
+		std::string em_ban;
+		bool single = true;
+		for (U32 i = 0; i < ids.size(); ++i)
+		{
+			bool is_allowed = true;
+			LLScrollListItem* em_item = em_list->getNameItemByAgentId(ids[i]);
+			if (em_item)
 			{
-				LLNotificationsUtil::add("NotAllowedToViewNotecard");
+				if (!em_ban.empty())
+				{
+					em_ban += ", ";
+				}
+				em_ban += em_item->getColumn(0)->getValue().asString();
+				is_allowed = false;
 			}
-			else
+
+			LLScrollListItem* item = name_list->getNameItemByAgentId(ids[i]);
+			if (item)
 			{
-				LLNotificationsUtil::add("UnableToLoadNotecardAsset");
+				if (!already_banned.empty())
+				{
+					already_banned += ", ";
+					single = false;
+				}
+				already_banned += item->getColumn(0)->getValue().asString();
+				is_allowed = false;
 			}
 
-			LL_WARNS() << "Problem loading notecard: " << status << LL_ENDL;
+			if (is_allowed)
+			{
+				ids_allowed.push_back(ids[i]);
+				names_allowed.push_back(names[i]);
+			}
 		}
-		panelp->mAssetStatus = ASSET_LOADED;
-		panelp->setCovenantID(asset_uuid);
+		if (!em_ban.empty())
+		{
+			LLSD args;
+			args["AGENT"] = em_ban;
+			LLNotificationsUtil::add("ProblemBanningEstateManager", args);
+			if (ids_allowed.empty())
+			{
+				delete change_info;
+				return;
+			}
+		}
+		if (!already_banned.empty())
+		{
+			LLSD args;
+			args["AGENT"] = already_banned;
+			args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeBannedAgents");
+			LLNotificationsUtil::add(single ? "AgentIsAlreadyInList" : "AgentsAreAlreadyInList", args);
+			if (ids_allowed.empty())
+			{
+				delete change_info;
+				return;
+			}
+		}
+		change_info->mAgentOrGroupIDs = ids_allowed;
+		change_info->mAgentNames = names_allowed;
 	}
-}
-
-// key = "estatechangecovenantid"
-// strings[0] = str(estate_id) (added by simulator before relay - not here)
-// strings[1] = str(covenant_id)
-void LLPanelEstateCovenant::sendChangeCovenantID(const LLUUID &asset_id)
-{
-	if (asset_id != getCovenantID())
-	{
-        setCovenantID(asset_id);
-
-		LLMessageSystem* msg = gMessageSystem;
-		msg->newMessage("EstateOwnerMessage");
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
 
-		msg->nextBlock("MethodData");
-		msg->addString("Method", "estatechangecovenantid");
-		msg->addUUID("Invoice", LLEstateInfoModel::instance().getLastInvoice());
+	LLSD args;
+	args["ALL_ESTATES"] = all_estates_text();
+	LLNotification::Params params(change_info->mDialogName);
+	params.substitutions(args)
+		.payload(change_info->asLLSD())
+		.functor.function(accessCoreConfirm);
 
-		msg->nextBlock("ParamList");
-		msg->addString("Parameter", getCovenantID().asString());
-		gAgent.sendReliableMessage();
+	if (LLPanelEstateInfo::isLindenEstate())
+	{
+		// just apply to this estate
+		LLNotifications::instance().forceResponse(params, 0);
+	}
+	else
+	{
+		// ask if this estate or all estates with this owner
+		LLNotifications::instance().add(params);
 	}
 }
 
-// virtual 
-BOOL LLPanelEstateCovenant::sendUpdate()
+// static
+void LLPanelEstateAccess::accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name)
 {
-	return TRUE;
-}
+	LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess();
+	if (!panel) return;
+	LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>(list_ctrl_name);
+	if (!name_list) return;
 
-std::string LLPanelEstateCovenant::getEstateName() const
-{
-	return mEstateNameText->getText();
-}
+	std::vector<LLScrollListItem*> list_vector = name_list->getAllSelected();
+	if (list_vector.size() == 0)
+		return;
 
-void LLPanelEstateCovenant::setEstateName(const std::string& name)
-{
-	mEstateNameText->setText(name);
-}
+	LLSD payload;
+	payload["operation"] = (S32)operation_flag;
+	payload["dialog_name"] = dialog_name;
 
-// static
-void LLPanelEstateCovenant::updateCovenantText(const std::string& string, const LLUUID& asset_id)
-{
-	LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant();
-	if( panelp )
+	for (std::vector<LLScrollListItem*>::const_iterator iter = list_vector.begin();
+		iter != list_vector.end();
+		iter++)
 	{
-		panelp->mEditor->setText(string);
-		panelp->setCovenantID(asset_id);
+		LLScrollListItem *item = (*iter);
+		payload["allowed_ids"].append(item->getUUID());
 	}
-}
 
-// static
-void LLPanelEstateCovenant::updateEstateName(const std::string& name)
-{
-	LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant();
-	if( panelp )
-	{
-		panelp->mEstateNameText->setText(name);
-	}
-}
+	LLNotification::Params params("ChangeLindenAccess");
+	params.payload(payload)
+		.functor.function(accessRemoveCore2);
 
-// static
-void LLPanelEstateCovenant::updateLastModified(const std::string& text)
-{
-	LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant();
-	if( panelp )
+	if (LLPanelEstateInfo::isLindenEstate())
 	{
-		panelp->mLastModifiedText->setText(text);
+		// warn on change linden estate
+		LLNotifications::instance().add(params);
 	}
-}
-
-// static
-void LLPanelEstateCovenant::updateEstateOwnerName(const std::string& name)
-{
-	LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant();
-	if( panelp )
+	else
 	{
-		panelp->mEstateOwnerText->setText(name);
+		// just proceed, as if clicking OK
+		LLNotifications::instance().forceResponse(params, 0);
 	}
 }
 
-std::string LLPanelEstateCovenant::getOwnerName() const
-{
-	return mEstateOwnerText->getText();
-}
-
-void LLPanelEstateCovenant::setOwnerName(const std::string& name)
-{
-	mEstateOwnerText->setText(name);
-}
-
-void LLPanelEstateCovenant::setCovenantTextEditor(const std::string& text)
-{
-	mEditor->setText(text);
-}
-
-BOOL LLPanelRegionExperiences::postBuild()
-{
-	mAllowed = setupList("panel_allowed", ESTATE_EXPERIENCE_ALLOWED_ADD, ESTATE_EXPERIENCE_ALLOWED_REMOVE);
-	mTrusted = setupList("panel_trusted", ESTATE_EXPERIENCE_TRUSTED_ADD, ESTATE_EXPERIENCE_TRUSTED_REMOVE);
-	mBlocked = setupList("panel_blocked", ESTATE_EXPERIENCE_BLOCKED_ADD, ESTATE_EXPERIENCE_BLOCKED_REMOVE);
-
-	getChild<LLLayoutPanel>("trusted_layout_panel")->setVisible(TRUE);
-	getChild<LLTextBox>("experiences_help_text")->setText(getString("estate_caption"));
-	getChild<LLTextBox>("trusted_text_help")->setText(getString("trusted_estate_text"));
-	getChild<LLTextBox>("allowed_text_help")->setText(getString("allowed_estate_text"));
-	getChild<LLTextBox>("blocked_text_help")->setText(getString("blocked_estate_text"));
-
-    LLEstateInfoModel::instance().setUpdateExperienceCallback(boost::bind(&LLPanelRegionExperiences::refreshExperiencesFromEstate, this));
-
-	return LLPanelRegionInfo::postBuild();
-}
-
-LLPanelExperienceListEditor* LLPanelRegionExperiences::setupList( const char* control_name, U32 add_id, U32 remove_id )
+// static
+bool LLPanelEstateAccess::accessRemoveCore2(const LLSD& notification, const LLSD& response)
 {
-	LLPanelExperienceListEditor* child = findChild<LLPanelExperienceListEditor>(control_name);
-	if(child)
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if (option != 0)
 	{
-		child->getChild<LLTextBox>("text_name")->setText(child->getString(control_name));
-		child->setMaxExperienceIDs(ESTATE_MAX_EXPERIENCE_IDS);
-		child->setAddedCallback(  boost::bind(&LLPanelRegionExperiences::itemChanged, this, add_id, _1));
-		child->setRemovedCallback(boost::bind(&LLPanelRegionExperiences::itemChanged, this, remove_id, _1));
+		// abort
+		return false;
 	}
 
-	return child;
-}
-
-
-void LLPanelRegionExperiences::processResponse( const LLSD& content )
-{
-	if(content.has("default"))
+	// If Linden estate, can only apply to "this" estate, not all estates
+	// owned by NULL.
+	if (LLPanelEstateInfo::isLindenEstate())
 	{
-		mDefaultExperience = content["default"].asUUID();
+		accessCoreConfirm(notification, response);
 	}
-
-	mAllowed->setExperienceIds(content["allowed"]);
-	mBlocked->setExperienceIds(content["blocked"]);
-
-	LLSD trusted = content["trusted"];
-	if(mDefaultExperience.notNull())
+	else
 	{
-		mTrusted->setStickyFunction(boost::bind(LLPanelExperiencePicker::FilterMatching, _1, mDefaultExperience));
-		trusted.append(mDefaultExperience);
+		LLSD args;
+		args["ALL_ESTATES"] = all_estates_text();
+		LLNotificationsUtil::add(notification["payload"]["dialog_name"],
+			args,
+			notification["payload"],
+			accessCoreConfirm);
 	}
-
-	mTrusted->setExperienceIds(trusted);
-	
-	mAllowed->refreshExperienceCounter();
-	mBlocked->refreshExperienceCounter();
-	mTrusted->refreshExperienceCounter();
-
-}
-
-void LLPanelRegionExperiences::refreshExperiencesFromEstate()
-{
-    const LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
-
-    LLSD ids = LLSDMap("blocked", set_to_llsdarray(estate_info.getBlockedExperiences()))
-        ("trusted", set_to_llsdarray(estate_info.getTrustedExperiences()))
-        ("allowed", set_to_llsdarray(estate_info.getAllowedExperiences()));
-
-    processResponse(ids);
+	return false;
 }
 
-
-// Used for both access add and remove operations, depending on the flag
-// passed in (ESTATE_EXPERIENCE_ALLOWED_ADD, ESTATE_EXPERIENCE_ALLOWED_REMOVE, etc.)
+// Used for both access add and remove operations, depending on the mOperationFlag
+// passed in (ESTATE_ACCESS_BANNED_AGENT_ADD, ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, etc.)
 // static
-bool LLPanelRegionExperiences::experienceCoreConfirm(const LLSD& notification, const LLSD& response)
+bool LLPanelEstateAccess::accessCoreConfirm(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
 	const U32 originalFlags = (U32)notification["payload"]["operation"].asInteger();
+	U32 flags = originalFlags;
 
 	LLViewerRegion* region = gAgent.getRegion();
-	
-	LLSD::array_const_iterator end_it = notification["payload"]["allowed_ids"].endArray();
 
-	for (LLSD::array_const_iterator iter = notification["payload"]["allowed_ids"].beginArray();
-		iter != end_it;
-	     iter++)
+	if (option == 2) // cancel
+	{		
+		return false;
+	}
+	else if (option == 1)
+	{
+		// All estates, either than I own or manage for this owner.  
+		// This will be verified on simulator. JC
+		if (!region) return false;
+		if (region->getOwner() == gAgent.getID()
+			|| gAgent.isGodlike())
+		{
+			flags |= ESTATE_ACCESS_APPLY_TO_ALL_ESTATES;
+		}
+		else if (region->isEstateManager())
+		{
+			flags |= ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES;
+		}
+	}
+
+	std::string names;
+	U32 listed_names = 0;
+	for (U32 i = 0; i < notification["payload"]["allowed_ids"].size(); ++i)
 	{
-		U32 flags = originalFlags;
-		if (iter + 1 != end_it)
+		if (i + 1 != notification["payload"]["allowed_ids"].size())
+		{
 			flags |= ESTATE_ACCESS_NO_REPLY;
+		}
+		else
+		{
+			flags &= ~ESTATE_ACCESS_NO_REPLY;
+		}
 
-		const LLUUID id = iter->asUUID();
-		switch(option)
+		const LLUUID id = notification["payload"]["allowed_ids"][i].asUUID();
+		if (((U32)notification["payload"]["operation"].asInteger() & ESTATE_ACCESS_BANNED_AGENT_ADD)
+			&& region && (region->getOwner() == id))
 		{
-			case 0:
-			    // This estate
-			    sendEstateExperienceDelta(flags, id);
-			    break;
-			case 1:
+			LLNotificationsUtil::add("OwnerCanNotBeDenied");
+			break;
+		}
+
+		sendEstateAccessDelta(flags, id);
+
+		if ((flags & (ESTATE_ACCESS_ALLOWED_GROUP_ADD | ESTATE_ACCESS_ALLOWED_GROUP_REMOVE)) == 0)
+		{
+			// fill the name list for confirmation
+			if (listed_names < MAX_LISTED_NAMES)
 			{
-				// All estates, either than I own or manage for this owner.  
-				// This will be verified on simulator. JC
-				if (!region) break;
-				if (region->getOwner() == gAgent.getID()
-				    || gAgent.isGodlike())
+				if (!names.empty())
 				{
-					flags |= ESTATE_ACCESS_APPLY_TO_ALL_ESTATES;
-					sendEstateExperienceDelta(flags, id);
+					names += ", ";
 				}
-				else if (region->isEstateManager())
+				if (!notification["payload"]["allowed_names"][i]["display_name"].asString().empty())
 				{
-					flags |= ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES;
-					sendEstateExperienceDelta(flags, id);
+					names += notification["payload"]["allowed_names"][i]["display_name"].asString();
 				}
-				break;
+				else
+				{ //try to get an agent name from cache
+					LLAvatarName av_name;
+					if (LLAvatarNameCache::get(id, &av_name))
+					{
+						names += av_name.getCompleteName();
+					}
+				}
+				
 			}
-			case 2:
-			default:
-			    break;
+			listed_names++;
 		}
 	}
-	return false;
-}
-
+	if (listed_names > MAX_LISTED_NAMES)
+	{
+		LLSD args;
+		args["EXTRA_COUNT"] = llformat("%d", listed_names - MAX_LISTED_NAMES);
+		names += " " + LLTrans::getString("AndNMore", args);
+	}
 
-// Send the actual "estateexperiencedelta" message
-void LLPanelRegionExperiences::sendEstateExperienceDelta(U32 flags, const LLUUID& experience_id)
-{
-	strings_t str(3, std::string());
-	gAgent.getID().toString(str[0]);
-	str[1] = llformat("%u", flags);
-	experience_id.toString(str[2]);
+	if (!names.empty()) // show the conirmation
+	{
+		LLSD args;
+		args["AGENT"] = names;
 
-    LLEstateInfoModel::instance().sendEstateOwnerMessage("estateexperiencedelta", str);
-}
+		if (flags & (ESTATE_ACCESS_ALLOWED_AGENT_ADD | ESTATE_ACCESS_ALLOWED_AGENT_REMOVE))
+		{
+			args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeAllowedAgents");
+		}
+		else if (flags & (ESTATE_ACCESS_BANNED_AGENT_ADD | ESTATE_ACCESS_BANNED_AGENT_REMOVE))
+		{
+			args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeBannedAgents");
+		}
 
+		if (flags & ESTATE_ACCESS_APPLY_TO_ALL_ESTATES)
+		{
+			args["ESTATE"] = LLTrans::getString("RegionInfoAllEstates");
+		}
+		else if (flags & ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES)
+		{
+			args["ESTATE"] = LLTrans::getString("RegionInfoManagedEstates");
+		}
+		else
+		{
+			args["ESTATE"] = LLTrans::getString("RegionInfoThisEstate");
+		}
 
-void LLPanelRegionExperiences::infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content)
-{	
-	if(handle.isDead())
-		return;
+		bool single = (listed_names == 1);
+		if (flags & (ESTATE_ACCESS_ALLOWED_AGENT_ADD | ESTATE_ACCESS_BANNED_AGENT_ADD))
+		{
+			LLNotificationsUtil::add(single ? "AgentWasAddedToList" : "AgentsWereAddedToList", args);
+		}
+		else if (flags & (ESTATE_ACCESS_ALLOWED_AGENT_REMOVE | ESTATE_ACCESS_BANNED_AGENT_REMOVE))
+		{
+			LLNotificationsUtil::add(single ? "AgentWasRemovedFromList" : "AgentsWereRemovedFromList", args);
+		}		
+	}
 
-	LLPanelRegionExperiences* floater = handle.get();
-	if (floater)
+	LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess();
+	if (panel)
 	{
-		floater->processResponse(content);
+		panel->setPendingUpdate(true);
 	}
-}
-
-/*static*/
-std::string LLPanelRegionExperiences::regionCapabilityQuery(LLViewerRegion* region, const std::string &cap)
-{
-    // region->getHandle()  How to get a region * from a handle?
 
-    return region->getCapability(cap);
+	return false;
 }
 
-bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region)
+// key = "estateaccessdelta"
+// str(estate_id) will be added to front of list by forward_EstateOwnerRequest_to_dataserver
+// str[0] = str(agent_id) requesting the change
+// str[1] = str(flags) (ESTATE_ACCESS_DELTA_*)
+// str[2] = str(agent_id) to add or remove
+// static
+void LLPanelEstateAccess::sendEstateAccessDelta(U32 flags, const LLUUID& agent_or_group_id)
 {
-	BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
+	LLMessageSystem* msg = gMessageSystem;
+	msg->newMessage("EstateOwnerMessage");
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+	msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
 
-	mAllowed->loading();
-	mAllowed->setReadonly(!allow_modify);
-	// remove grid-wide experiences
-	mAllowed->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID));
-	// remove default experience
-	mAllowed->addFilter(boost::bind(LLPanelExperiencePicker::FilterMatching, _1, mDefaultExperience));
+	msg->nextBlock("MethodData");
+	msg->addString("Method", "estateaccessdelta");
+	msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice());
 
-	mBlocked->loading();
-	mBlocked->setReadonly(!allow_modify);
-	// only grid-wide experiences
-	mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithoutProperty, _1, LLExperienceCache::PROPERTY_GRID));
-	// but not privileged ones
-	mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_PRIVILEGED));
-	// remove default experience
-	mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterMatching, _1, mDefaultExperience));
+	std::string buf;
+	gAgent.getID().toString(buf);
+	msg->nextBlock("ParamList");
+	msg->addString("Parameter", buf);
 
-	mTrusted->loading();
-	mTrusted->setReadonly(!allow_modify);
+	buf = llformat("%u", flags);
+	msg->nextBlock("ParamList");
+	msg->addString("Parameter", buf);
 
-    LLExperienceCache::instance().getRegionExperiences(boost::bind(&LLPanelRegionExperiences::regionCapabilityQuery, region, _1),
-        boost::bind(&LLPanelRegionExperiences::infoCallback, getDerivedHandle<LLPanelRegionExperiences>(), _1));
+	agent_or_group_id.toString(buf);
+	msg->nextBlock("ParamList");
+	msg->addString("Parameter", buf);
 
-    return LLPanelRegionInfo::refreshFromRegion(region);
+	gAgent.sendReliableMessage();
 }
 
-LLSD LLPanelRegionExperiences::addIds(LLPanelExperienceListEditor* panel)
+void LLPanelEstateAccess::updateChild(LLUICtrl* child_ctrl)
 {
-	LLSD ids;
-	const uuid_list_t& id_list = panel->getExperienceIds();
-	for(uuid_list_t::const_iterator it = id_list.begin(); it != id_list.end(); ++it)
+	// Ensure appropriate state of the management ui.
+	updateControls(gAgent.getRegion());
+}
+
+void LLPanelEstateAccess::updateLists()
+{
+	std::string cap_url = gAgent.getRegionCapability("EstateAccess");
+	if (!cap_url.empty())
 	{
-		ids.append(*it);
+		LLCoros::instance().launch("LLFloaterRegionInfo::requestEstateGetAccessCoro", boost::bind(LLPanelEstateAccess::requestEstateGetAccessCoro, cap_url));
 	}
-	return ids;
 }
 
-
-BOOL LLPanelRegionExperiences::sendUpdate()
+void LLPanelEstateAccess::requestEstateGetAccessCoro(std::string url)
 {
-	LLViewerRegion* region = gAgent.getRegion();
-
-    LLSD content;
+	LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
+	LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t	httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("requestEstateGetAccessoCoro", httpPolicy));
+	LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
 
-	content["allowed"]=addIds(mAllowed);
-	content["blocked"]=addIds(mBlocked);
-	content["trusted"]=addIds(mTrusted);
+	LLSD result = httpAdapter->getAndSuspend(httpRequest, url);
 
-    LLExperienceCache::instance().setRegionExperiences(boost::bind(&LLPanelRegionExperiences::regionCapabilityQuery, region, _1),
-        content, boost::bind(&LLPanelRegionExperiences::infoCallback, getDerivedHandle<LLPanelRegionExperiences>(), _1));
+	LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
+	LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
 
-	return TRUE;
-}
+	LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess();
+	if (!panel) return;
+	
+	LLNameListCtrl* allowed_agent_name_list	= panel->getChild<LLNameListCtrl>("allowed_avatar_name_list");
+	if (allowed_agent_name_list && result.has("AllowedAgents"))
+	{
+		LLStringUtil::format_map_t args;
+		args["[ALLOWEDAGENTS]"] = llformat("%d", result["AllowedAgents"].size());
+		args["[MAXACCESS]"] = llformat("%d", ESTATE_MAX_ACCESS_IDS);
+		std::string msg = LLTrans::getString("RegionInfoAllowedResidents", args);
+		panel->getChild<LLUICtrl>("allow_resident_label")->setValue(LLSD(msg));
+
+		allowed_agent_name_list->clearSortOrder();
+		allowed_agent_name_list->deleteAllItems();
+		for (LLSD::array_const_iterator it = result["AllowedAgents"].beginArray(); it != result["AllowedAgents"].endArray(); ++it)
+		{ 
+			LLUUID id = (*it)["id"].asUUID(); 
+			allowed_agent_name_list->addNameItem(id);
+		}
+		allowed_agent_name_list->sortByName(TRUE);
+	}
 
-void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id )
-{
-	std::string dialog_name;
-	switch (event_type)
+	LLNameListCtrl* banned_agent_name_list = panel->getChild<LLNameListCtrl>("banned_avatar_name_list");
+	if (banned_agent_name_list && result.has("BannedAgents"))
 	{
-		case ESTATE_EXPERIENCE_ALLOWED_ADD:
-			dialog_name = "EstateAllowedExperienceAdd";
-			break;
+		LLStringUtil::format_map_t args;
+		args["[BANNEDAGENTS]"] = llformat("%d", result["BannedAgents"].size());
+		args["[MAXBANNED]"] = llformat("%d", ESTATE_MAX_ACCESS_IDS);
+		std::string msg = LLTrans::getString("RegionInfoBannedResidents", args);
+		panel->getChild<LLUICtrl>("ban_resident_label")->setValue(LLSD(msg));
 
-		case ESTATE_EXPERIENCE_ALLOWED_REMOVE:
-			dialog_name = "EstateAllowedExperienceRemove";
-			break;
+		banned_agent_name_list->clearSortOrder();
+		banned_agent_name_list->deleteAllItems();
+		for (LLSD::array_const_iterator it = result["BannedAgents"].beginArray(); it != result["BannedAgents"].endArray(); ++it)
+		{
+			LLSD item;
+			item["id"] = (*it)["id"].asUUID();
+			LLSD& columns = item["columns"];
 
-		case ESTATE_EXPERIENCE_TRUSTED_ADD:
-			dialog_name = "EstateTrustedExperienceAdd";
-			break;
+			columns[0]["column"] = "name"; // to be populated later
 
-		case ESTATE_EXPERIENCE_TRUSTED_REMOVE:
-			dialog_name = "EstateTrustedExperienceRemove";
-			break;
+			columns[1]["column"] = "last_login_date";
+			columns[1]["value"] = (*it)["last_login_date"].asString().substr(0, 16); // cut the seconds
 
-		case ESTATE_EXPERIENCE_BLOCKED_ADD:
-			dialog_name = "EstateBlockedExperienceAdd";
-			break;
+			std::string ban_date = (*it)["ban_date"].asString();
+			columns[2]["column"] = "ban_date";
+			columns[2]["value"] = ban_date[0] != '0' ? ban_date.substr(0, 16) : LLTrans::getString("na"); // server returns the "0000-00-00 00:00:00" date in case it doesn't know it
 
-		case ESTATE_EXPERIENCE_BLOCKED_REMOVE:
-			dialog_name = "EstateBlockedExperienceRemove";
-			break;
+			columns[3]["column"] = "bannedby";
+			LLUUID banning_id = (*it)["banning_id"].asUUID();
+			LLAvatarName av_name;
+			if (banning_id.isNull())
+			{
+				columns[3]["value"] = LLTrans::getString("na");
+			}
+			else if (LLAvatarNameCache::get(banning_id, &av_name))
+			{
+				columns[3]["value"] = av_name.getCompleteName(); //TODO: fetch the name if it wasn't cached
+			}
 
-		default:
-			return;
+			banned_agent_name_list->addElement(item);
+		}
+		banned_agent_name_list->sortByName(TRUE);
 	}
 
-	LLSD payload;
-	payload["operation"] = (S32)event_type;
-	payload["dialog_name"] = dialog_name;
-	payload["allowed_ids"].append(id);
+	LLNameListCtrl* allowed_group_name_list = panel->getChild<LLNameListCtrl>("allowed_group_name_list");
+	if (allowed_group_name_list && result.has("AllowedGroups"))
+	{
+		LLStringUtil::format_map_t args;
+		args["[ALLOWEDGROUPS]"] = llformat("%d", result["AllowedGroups"].size());
+		args["[MAXACCESS]"] = llformat("%d", ESTATE_MAX_GROUP_IDS);
+		std::string msg = LLTrans::getString("RegionInfoAllowedGroups", args);
+		panel->getChild<LLUICtrl>("allow_group_label")->setValue(LLSD(msg));
 
-	LLSD args;
-	args["ALL_ESTATES"] = all_estates_text();
+		allowed_group_name_list->clearSortOrder();
+		allowed_group_name_list->deleteAllItems();
+		for (LLSD::array_const_iterator it = result["AllowedGroups"].beginArray(); it != result["AllowedGroups"].endArray(); ++it)
+		{
+			LLUUID id = (*it)["id"].asUUID();
+			allowed_group_name_list->addGroupNameItem(id);
+		}
+		allowed_group_name_list->sortByName(TRUE);
+	}
 
-	LLNotification::Params params(dialog_name);
-	params.payload(payload)
-		.substitutions(args)
-		.functor.function(LLPanelRegionExperiences::experienceCoreConfirm);
-	if (LLPanelEstateInfo::isLindenEstate())
+	LLNameListCtrl* estate_manager_name_list = panel->getChild<LLNameListCtrl>("estate_manager_name_list");
+	if (estate_manager_name_list && result.has("Managers"))
 	{
-		LLNotifications::instance().forceResponse(params, 0);
+		LLStringUtil::format_map_t args;
+		args["[ESTATEMANAGERS]"] = llformat("%d", result["Managers"].size());
+		args["[MAXMANAGERS]"] = llformat("%d", ESTATE_MAX_MANAGERS);
+		std::string msg = LLTrans::getString("RegionInfoEstateManagers", args);
+		panel->getChild<LLUICtrl>("estate_manager_label")->setValue(LLSD(msg));
+
+		estate_manager_name_list->clearSortOrder();
+		estate_manager_name_list->deleteAllItems();
+		for (LLSD::array_const_iterator it = result["Managers"].beginArray(); it != result["Managers"].endArray(); ++it)
+		{
+			LLUUID id = (*it)["agent_id"].asUUID();
+			estate_manager_name_list->addNameItem(id);
+		}
+		estate_manager_name_list->sortByName(TRUE);
+	}
+
+
+	panel->updateControls(gAgent.getRegion());
+}
+
+//---------------------------------------------------------------------------
+// Access lists search
+//---------------------------------------------------------------------------
+void LLPanelEstateAccess::onAllowedSearchEdit(const std::string& search_string)
+{
+	LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess();
+	if (!panel) return;
+	LLNameListCtrl* allowed_agent_name_list = panel->getChild<LLNameListCtrl>("allowed_avatar_name_list");
+	searchAgent(allowed_agent_name_list, search_string);
+}
+
+void LLPanelEstateAccess::onAllowedGroupsSearchEdit(const std::string& search_string)
+{
+	LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess();
+	if (!panel) return;
+	LLNameListCtrl* allowed_group_name_list = panel->getChild<LLNameListCtrl>("allowed_group_name_list");
+	searchAgent(allowed_group_name_list, search_string);
+}
+
+void LLPanelEstateAccess::onBannedSearchEdit(const std::string& search_string)
+{
+	LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess();
+	if (!panel) return;
+	LLNameListCtrl* banned_agent_name_list = panel->getChild<LLNameListCtrl>("banned_avatar_name_list");
+	searchAgent(banned_agent_name_list, search_string);
+}
+
+void LLPanelEstateAccess::searchAgent(LLNameListCtrl* listCtrl, const std::string& search_string)
+{
+	if (!listCtrl) return;
+
+	if (!search_string.empty())
+	{
+		listCtrl->setSearchColumn(0); // name column
+		listCtrl->selectItemByPrefix(search_string, FALSE);
 	}
 	else
 	{
-		LLNotifications::instance().add(params);
+		listCtrl->deselectAllItems(TRUE);
 	}
+}
 
-	onChangeAnything();
+void LLPanelEstateAccess::copyListToClipboard(std::string list_name)
+{
+	LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess();
+	if (!panel) return;
+	LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>(list_name);
+	if (!name_list) return;
+
+	std::vector<LLScrollListItem*> list_vector = name_list->getAllData();
+	if (list_vector.size() == 0) return;
+
+	LLSD::String list_to_copy;
+	for (std::vector<LLScrollListItem*>::const_iterator iter = list_vector.begin();
+		 iter != list_vector.end();
+		 iter++)
+	{
+		LLScrollListItem *item = (*iter);
+		if (item)
+		{
+			list_to_copy += item->getColumn(0)->getValue().asString();
+		}
+		if (std::next(iter) != list_vector.end())
+		{
+			list_to_copy += "\n";
+		}
+	}
+
+	LLClipboard::instance().copyToClipboard(utf8str_to_wstring(list_to_copy), 0, list_to_copy.length());
+}
+
+bool LLPanelEstateAccess::refreshFromRegion(LLViewerRegion* region)
+{
+	updateLists();
+	return LLPanelRegionInfo::refreshFromRegion(region);
 }
 
 //=========================================================================
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index e4687fff0c27485cf5159c00c23adc3ef22a7d0b..0dda13cdc51cdb56090701e12d0b8e0b76a5a9e4 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -29,6 +29,7 @@
 #define LL_LLFLOATERREGIONINFO_H
 
 #include <vector>
+#include "llagent.h"
 #include "llassettype.h"
 #include "llfloater.h"
 #include "llhost.h"
@@ -64,6 +65,7 @@ class LLPanelEstateCovenant;
 class LLPanelExperienceListEditor;
 class LLPanelExperiences;
 class LLPanelRegionExperiences;
+class LLPanelEstateAccess;
 class LLPanelRegionEnvironment;
 
 class LLEventTimer;
@@ -75,15 +77,21 @@ class LLFloaterRegionInfo : public LLFloater
 
 
 	/*virtual*/ void onOpen(const LLSD& key);
+	/*virtual*/ void onClose(bool app_quitting);
 	/*virtual*/ BOOL postBuild();
 
+	static void processEstateOwnerRequest(LLMessageSystem* msg, void**);
+
 	// get and process region info if necessary.
 	static void processRegionInfo(LLMessageSystem* msg);
 
+	static const LLUUID& getLastInvoice() { return sRequestInvoice; }
+	static void nextInvoice() { sRequestInvoice.generate(); }
 	//static S32 getSerial() { return sRequestSerial; }
 	//static void incrementSerial() { sRequestSerial++; }
 
 	static LLPanelEstateInfo* getPanelEstate();
+	static LLPanelEstateAccess* getPanelAccess();
 	static LLPanelEstateCovenant* getPanelCovenant();
 	static LLPanelRegionTerrainInfo* getPanelRegionTerrain();
 	static LLPanelRegionExperiences* getPanelExperiences();
@@ -103,20 +111,22 @@ class LLFloaterRegionInfo : public LLFloater
 	LLFloaterRegionInfo(const LLSD& seed);
 	~LLFloaterRegionInfo();
 
-
-	
 protected:
 	void onTabSelected(const LLSD& param);
 	void disableTabCtrls();
 	void refreshFromRegion(LLViewerRegion* region);
+	void onGodLevelChange(U8 god_level);
 
 	// member data
 	LLTabContainer* mTab;
 	typedef std::vector<LLPanelRegionInfo*> info_panels_t;
 	info_panels_t mInfoPanels;
     LLPanelRegionEnvironment *mEnvironmentPanel;
+    //static S32 sRequestSerial;	// serial # of last EstateOwnerRequest
+	static LLUUID sRequestInvoice;
 
 private:
+    LLAgent::god_level_change_slot_t   mGodLevelChangeSlot;
     boost::signals2::connection mRegionChangedCallback;
 };
 
@@ -152,6 +162,15 @@ class LLPanelRegionInfo : public LLPanel
 	
 	typedef std::vector<std::string> strings_t;
 	//typedef std::vector<U32> integers_t;
+	void sendEstateOwnerMessage(
+					 LLMessageSystem* msg,
+					 const std::string& request,
+					 const LLUUID& invoice,
+					 const strings_t& strings);
+	
+	
+	// member data
+	LLHost mHost;
 };
 
 /////////////////////////////////////////////////////////////////////////////
@@ -253,9 +272,12 @@ class LLPanelRegionTerrainInfo : public LLPanelRegionInfo
 };
 
 /////////////////////////////////////////////////////////////////////////////
+
 class LLPanelEstateInfo : public LLPanelRegionInfo
 {
 public:
+	static void initDispatch(LLDispatcher& dispatch);
+	
 	void onChangeFixedSun();
 	void onChangeUseGlobalTime();
 	void onChangeAccessOverride();
@@ -265,35 +287,11 @@ class LLPanelEstateInfo : public LLPanelRegionInfo
 	void onClickEditDayCycle();
 	void onClickEditDayCycleHelp();
 
-	void onClickAddAllowedAgent();
-	void onClickRemoveAllowedAgent();
-	void onClickAddAllowedGroup();
-	void onClickRemoveAllowedGroup();
-	void onClickAddBannedAgent();
-	void onClickRemoveBannedAgent();
-	void onClickAddEstateManager();
-	void onClickRemoveEstateManager();
 	void onClickKickUser();
 
-	// Group picker callback is different, can't use core methods below
-	bool addAllowedGroup(const LLSD& notification, const LLSD& response);
-	void addAllowedGroup2(LLUUID id);
-
-	// Core methods for all above add/remove button clicks
-	static void accessAddCore(U32 operation_flag, const std::string& dialog_name);
-	static bool accessAddCore2(const LLSD& notification, const LLSD& response);
-	static void accessAddCore3(const uuid_vec_t& ids, void* data);
-
-	static void accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name);
-	static bool accessRemoveCore2(const LLSD& notification, const LLSD& response);
 
-	// used for both add and remove operations
-	static bool accessCoreConfirm(const LLSD& notification, const LLSD& response);
 	bool kickUserConfirm(const LLSD& notification, const LLSD& response);
 
-	// Send the actual EstateOwnerRequest "estateaccessdelta" message
-	static void sendEstateAccessDelta(U32 flags, const LLUUID& agent_id);
-
 	void onKickUserCommit(const uuid_vec_t& ids);
 	static void onClickMessageEstate(void* data);
 	bool onMessageCommit(const LLSD& notification, const LLSD& response);
@@ -315,7 +313,6 @@ class LLPanelEstateInfo : public LLPanelRegionInfo
 	virtual void refresh();
 
 	void refreshFromEstate();
-    void refreshAccessFromEstate(U32 flags);
 	
 	static bool isLindenEstate();
 	
@@ -330,7 +327,6 @@ class LLPanelEstateInfo : public LLPanelRegionInfo
 	void commitEstateAccess();
 	void commitEstateManagers();
 	
-	void clearAccessLists();
 	BOOL checkSunHourSlider(LLUICtrl* child_ctrl);
 
 	U32 mEstateID;
@@ -418,7 +414,7 @@ class LLPanelRegionExperiences : public LLPanelRegionInfo
 	void sendPurchaseRequest()const;
 	void processResponse( const LLSD& content );
 private:
-    void refreshExperiencesFromEstate();
+	void refreshRegionExperiences();
 
     static std::string regionCapabilityQuery(LLViewerRegion* region, const std::string &cap);
 
@@ -433,4 +429,66 @@ class LLPanelRegionExperiences : public LLPanelRegionInfo
 	LLUUID mDefaultExperience;
 };
 
+
+class LLPanelEstateAccess : public LLPanelRegionInfo
+{
+	LOG_CLASS(LLPanelEstateAccess);
+
+public:
+	LLPanelEstateAccess();
+
+	virtual BOOL postBuild();
+	virtual void updateChild(LLUICtrl* child_ctrl);
+
+	void updateControls(LLViewerRegion* region);
+	void updateLists();
+
+	void setPendingUpdate(bool pending) { mPendingUpdate = pending; }
+	bool getPendingUpdate() { return mPendingUpdate; }
+
+	virtual bool refreshFromRegion(LLViewerRegion* region);
+
+private:
+	void onClickAddAllowedAgent();
+	void onClickRemoveAllowedAgent();
+	void onClickCopyAllowedList();
+	void onClickAddAllowedGroup();
+	void onClickRemoveAllowedGroup();
+	void onClickCopyAllowedGroupList();
+	void onClickAddBannedAgent();
+	void onClickRemoveBannedAgent();
+    void onClickCopyBannedList();
+	void onClickAddEstateManager();
+	void onClickRemoveEstateManager();
+	void onAllowedSearchEdit(const std::string& search_string);
+	void onAllowedGroupsSearchEdit(const std::string& search_string);
+	void onBannedSearchEdit(const std::string& search_string);
+	
+	// Group picker callback is different, can't use core methods below
+	bool addAllowedGroup(const LLSD& notification, const LLSD& response);
+	void addAllowedGroup2(LLUUID id);
+
+	// Core methods for all above add/remove button clicks
+	static void accessAddCore(U32 operation_flag, const std::string& dialog_name);
+	static bool accessAddCore2(const LLSD& notification, const LLSD& response);
+	static void accessAddCore3(const uuid_vec_t& ids, std::vector<LLAvatarName> names, void* data);
+
+	static void accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name);
+	static bool accessRemoveCore2(const LLSD& notification, const LLSD& response);
+
+	// used for both add and remove operations
+	static bool accessCoreConfirm(const LLSD& notification, const LLSD& response);
+
+	// Send the actual EstateOwnerRequest "estateaccessdelta" message
+	static void sendEstateAccessDelta(U32 flags, const LLUUID& agent_id);
+
+	static void requestEstateGetAccessCoro(std::string url);
+
+	void searchAgent(LLNameListCtrl* listCtrl, const std::string& search_string);
+	void copyListToClipboard(std::string list_name);
+
+	bool mPendingUpdate;
+	BOOL mCtrlsEnabled;
+};
+
 #endif
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index fe75ab8e5094d11b1f253f4b2d2481436ae2944b..62e0e2d077142da7a51e12472a9c84c1c330ba2b 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -32,6 +32,7 @@
 
 #include "llavatarnamecache.h"
 #include "llcachename.h"
+#include "llfloater.h"
 #include "llfloaterreg.h"
 #include "llinventory.h"
 #include "llscrolllistitem.h"
@@ -212,7 +213,10 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)
 	BOOL handled = FALSE;
 	S32 column_index = getColumnIndexFromOffset(x);
 	LLNameListItem* hit_item = dynamic_cast<LLNameListItem*>(hitItem(x, y));
-	if (hit_item
+	LLFloater* floater = gFloaterView->getParentFloater(this);
+	if (floater 
+		&& floater->isFrontmost()
+		&& hit_item
 		&& column_index == mNameColumnIndex)
 	{
 		// ...this is the column with the avatar name
@@ -313,8 +317,19 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(
 	switch(name_item.target)
 	{
 	case GROUP:
-		gCacheName->getGroupName(id, fullname);
-		// fullname will be "nobody" if group not found
+		if (!gCacheName->getGroupName(id, fullname))
+		{
+			avatar_name_cache_connection_map_t::iterator it = mGroupNameCacheConnections.find(id);
+			if (it != mGroupNameCacheConnections.end())
+			{
+				if (it->second.connected())
+				{
+					it->second.disconnect();
+				}
+				mGroupNameCacheConnections.erase(it);
+			}
+			mGroupNameCacheConnections[id] = gCacheName->getGroup(id, boost::bind(&LLNameListCtrl::onGroupNameCache, this, _1, _2, item->getHandle()));
+		}
 		break;
 	case SPECIAL:
 		// just use supplied name
@@ -415,6 +430,20 @@ void LLNameListCtrl::removeNameItem(const LLUUID& agent_id)
 	}
 }
 
+// public
+LLScrollListItem* LLNameListCtrl::getNameItemByAgentId(const LLUUID& agent_id)
+{
+	for (item_list::iterator it = getItemList().begin(); it != getItemList().end(); it++)
+	{
+		LLScrollListItem* item = *it;
+		if (item && item->getUUID() == agent_id)
+		{
+			return item;
+		}
+	}
+	return NULL;
+}
+
 void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,
 									   const LLAvatarName& av_name,
 									   std::string suffix,
@@ -479,6 +508,31 @@ void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,
 	dirtyColumns();
 }
 
+void LLNameListCtrl::onGroupNameCache(const LLUUID& group_id, const std::string name, LLHandle<LLNameListItem> item)
+{
+	avatar_name_cache_connection_map_t::iterator it = mGroupNameCacheConnections.find(group_id);
+	if (it != mGroupNameCacheConnections.end())
+	{
+		if (it->second.connected())
+		{
+			it->second.disconnect();
+		}
+		mGroupNameCacheConnections.erase(it);
+	}
+
+	LLNameListItem* list_item = item.get();
+	if (list_item && list_item->getUUID() == group_id)
+	{
+		LLScrollListCell* cell = list_item->getColumn(mNameColumnIndex);
+		if (cell)
+		{
+			cell->setValue(name);
+			setNeedsSort();
+		}
+	}
+
+	dirtyColumns();
+}
 
 void LLNameListCtrl::updateColumns(bool force_update)
 {
diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h
index 677b49e66764bb163e2703a41033520720798527..ef0be135e618e1c2b9473553700332eead2ef1d7 100644
--- a/indra/newview/llnamelistctrl.h
+++ b/indra/newview/llnamelistctrl.h
@@ -154,6 +154,8 @@ class LLNameListCtrl
 
 	void removeNameItem(const LLUUID& agent_id);
 
+	LLScrollListItem* getNameItemByAgentId(const LLUUID& agent_id);
+
 	// LLView interface
 	/*virtual*/ BOOL	handleDragAndDrop(S32 x, S32 y, MASK mask,
 									  BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
@@ -171,6 +173,7 @@ class LLNameListCtrl
 private:
 	void showInspector(const LLUUID& avatar_id, bool is_group, bool is_experience = false);
 	void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name, std::string suffix, std::string prefix, LLHandle<LLNameListItem> item);
+	void onGroupNameCache(const LLUUID& group_id, const std::string name, LLHandle<LLNameListItem> item);
 
 private:
 	S32    			mNameColumnIndex;
@@ -179,6 +182,7 @@ class LLNameListCtrl
 	bool			mShortNames;  // display name only, no SLID
 	typedef std::map<LLUUID, boost::signals2::connection> avatar_name_cache_connection_map_t;
 	avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
+	avatar_name_cache_connection_map_t mGroupNameCacheConnections;
 
 	S32 mPendingLookupsRemaining;
 	namelist_complete_signal_t mNameListCompleteSignal;
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 756dafe2706b705059d60b671fe11d55a135f1d5..07f100ca5581a1d6c3b5f33cc43158f76a8bd2e6 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -40,6 +40,7 @@
 #include "llfloateravatarpicker.h"
 #include "llfloateravatarrendersettings.h"
 #include "llfloateravatartextures.h"
+#include "llfloaterbanduration.h"
 #include "llfloaterbigpreview.h"
 #include "llfloaterbeacons.h"
 #include "llfloaterbuildoptions.h"
@@ -199,6 +200,7 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("avatar_render_settings", "floater_avatar_render_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarRenderSettings>);
 	LLFloaterReg::add("avatar_textures", "floater_avatar_textures.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarTextures>);
 
+	LLFloaterReg::add("ban_duration", "floater_ban_duration.xml", &LLFloaterReg::build<LLFloaterBanDuration>);
 	LLFloaterReg::add("beacons", "floater_beacons.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBeacons>);
 	LLFloaterReg::add("bulk_perms", "floater_bulk_perms.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBulkPermission>);
 	LLFloaterReg::add("buy_currency", "floater_buy_currency.xml", &LLFloaterBuyCurrency::buildFloater);
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index a7151c4d1bce812de8a291564384e8a6151081a9..226283e1b27628df30427cb267c71ff5654385f0 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -3072,7 +3072,7 @@ void LLViewerObject::unlinkControlAvatar()
         if (mControlAvatar)
         {
             mControlAvatar->markForDeath();
-            mControlAvatar->mRootVolp = NULL;
+			mControlAvatar->mRootVolp = NULL;
             mControlAvatar = NULL;
         }
     }
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 1c4f7c7b4d47555cd6407bce3bc6cbb770bf921a..4c9e57f0b40a85d0fe5f78bb23f1803a331268cf 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -2893,6 +2893,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
 	capabilityNames.append("DispatchRegionInfo");
 	capabilityNames.append("DirectDelivery");
 	capabilityNames.append("EnvironmentSettings");
+	capabilityNames.append("EstateAccess");
 	capabilityNames.append("EstateChangeInfo");
 	capabilityNames.append("EventQueueGet");
     capabilityNames.append("ExtEnvironment");
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 996d14080584e31d9d4a22311cb5fa55e6dacba0..6bb161aa4b3fc9f1bf41251d97ffcb0415512615 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1779,6 +1779,16 @@ LLViewerWindow::LLViewerWindow(const Params& p)
 	LLCoordScreen scr;
     mWindow->getSize(&scr);
 
+    // Reset UI scale factor on first run if OS's display scaling is not 100%
+    if (gSavedSettings.getBOOL("ResetUIScaleOnFirstRun"))
+    {
+        if (mWindow->getSystemUISize() != 1.f)
+        {
+            gSavedSettings.setF32("UIScaleFactor", 1.f);
+        }
+        gSavedSettings.setBOOL("ResetUIScaleOnFirstRun", FALSE);
+    }
+
 	// Get the real window rect the window was created with (since there are various OS-dependent reasons why
 	// the size of a window or fullscreen context may have been adjusted slightly...)
 	F32 ui_scale_factor = llclamp(gSavedSettings.getF32("UIScaleFactor"), MIN_UI_SCALE, MAX_UI_SCALE) * mWindow->getSystemUISize();
diff --git a/indra/newview/skins/default/xui/de/floater_auction.xml b/indra/newview/skins/default/xui/de/floater_auction.xml
index 8ededff319a83f9e4a16aa474c2e89b5ab01f8c4..4a0b136235b88ded5e9d5c3c437af0d09ff6e2bd 100644
--- a/indra/newview/skins/default/xui/de/floater_auction.xml
+++ b/indra/newview/skins/default/xui/de/floater_auction.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="LINDEN LAND VERKAUF STARTEN">
+<floater name="floater_auction" title="LINDEN-LANDVERKAUF STARTEN">
 	<floater.string name="already for sale">
 		Parzellen, die bereits zum Verkauf stehen, können nicht auktioniert werden.
 	</floater.string>
 	<check_box initial_value="true" label="Gelben Auswahlrahmen einschließen" name="fence_check"/>
-	<button label="Foto" label_selected="Foto" name="snapshot_btn"/>
+	<button label="Screenshot" label_selected="Screenshot" name="snapshot_btn"/>
 	<button label="An jeden verkaufen" label_selected="An jeden verkaufen" name="sell_to_anyone_btn"/>
 	<button label="Einstellungen löschen" label_selected="Einstellungen löschen" name="reset_parcel_btn"/>
 	<button label="Auktion beginnen" label_selected="Auktion beginnen" name="start_auction_btn"/>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index 563d179d4ca8a52413e08ca8df82a82ca2252f7f..2382434682136c28044e3947d769082ebad9654a 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -198,6 +198,7 @@
 				<combo_box.item label="Objekt bezahlen" name="Payobject"/>
 				<combo_box.item label="Öffnen" name="Open"/>
 				<combo_box.item label="Zoom" name="Zoom"/>
+				<combo_box.item label="Keine" name="None"/>
 			</combo_box>
 			<check_box label="Zum Verkauf:" name="checkbox for sale"/>
 			<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index b4d5b968034a5eb6a8e089c56fd40026a0d85595..c24b7fb5d5ba66de8217c4dfbf0d9e3b99e3e28d 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -12,6 +12,7 @@
 		<menu_item_call label="Kamerasteuerungen..." name="Camera Controls"/>
 		<menu label="Bewegung" name="Movement">
 			<menu_item_call label="Hinsetzen" name="Sit Down Here"/>
+			<menu_item_call label="Aufstehen" name="Stand up"/>
 			<menu_item_check label="Fliegen" name="Fly"/>
 			<menu_item_check label="Immer rennen" name="Always Run"/>
 			<menu_item_call label="Animation meines Avatars stoppen" name="Stop Animating My Avatar"/>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index e14419efb1d53ffe34051fd45bd01bfd7df66b12..1b4696b615c70176d1ac5469aa1fcf6326eb9a0b 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -1584,6 +1584,30 @@ Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 un
 	<notification name="ProblemAddingEstateManagerBanned">
 		Verbannter Einwohner kann nicht zur Grundbesitzverwalterliste hinzugefügt werden.
 	</notification>
+	<notification name="ProblemBanningEstateManager">
+		Grundbesitzverwalter [AGENT] kann nicht zur Bannliste hinzugefügt werden.
+	</notification>
+	<notification name="GroupIsAlreadyInList">
+		&lt;nolink&gt;[GROUP]&lt;/nolink&gt; befindet sich bereits auf der Liste der zulässigen Gruppen.
+	</notification>
+	<notification name="AgentIsAlreadyInList">
+		[AGENT] befindet sich bereits auf Ihrer [LIST_TYPE]-Liste.
+	</notification>
+	<notification name="AgentsAreAlreadyInList">
+		[AGENT] befinden sich bereits auf Ihrer [LIST_TYPE]-Liste.
+	</notification>
+	<notification name="AgentWasAddedToList">
+		[AGENT] wurde der [LIST_TYPE]-Liste von [ESTATE] hinzugefügt.
+	</notification>
+	<notification name="AgentsWereAddedToList">
+		[AGENT] wurden zur [LIST_TYPE]-Liste von [ESTATE] hinzugefügt.
+	</notification>
+	<notification name="AgentWasRemovedFromList">
+		[AGENT] wurden von der [LIST_TYPE]-Liste von [ESTATE] entfernt.
+	</notification>
+	<notification name="AgentsWereRemovedFromList">
+		[AGENT] wurden von der [LIST_TYPE]-Liste von [ESTATE] entfernt.
+	</notification>
 	<notification name="CanNotChangeAppearanceUntilLoaded">
 		Das Aussehen lässt sich erst ändern, wenn Kleider und Form/Gestalt geladen sind.
 	</notification>
@@ -3181,16 +3205,22 @@ Klicken Sie auf  &apos;Akzeptieren &apos;, um dem Chat beizutreten, oder auf  &a
 		Verbindung zu [VOICE_CHANNEL_NAME] nicht möglich. Bitte versuchen Sie es später.  Sie werden nun wieder mit dem Chat in Ihrer Nähe verbunden.
 	</notification>
 	<notification name="VoiceEffectsExpired">
-		Ein oder mehrere Ihrer Voice-Morph-Abos ist/sind abgelaufen.
-[[URL] Hier klicken], um Ihr Abo zu erneuern.
+		Ein oder mehrere Ihrer Voice-Morph-Abos sind abgelaufen. 
+[[URL] Klicken Sie hier], um Ihr Abo zu erneuern. 
+
+Wenn Sie Premium-Mitglied sind, [[PREMIUM_URL] klicken Sie hier], um Ihren Voice-Morphing-Vorteil zu nutzen.
 	</notification>
 	<notification name="VoiceEffectsExpiredInUse">
-		Das aktive Voice-Morph-Abo ist abgelaufen. Ihre normalen Voice-Einstellungen werden angewendet.
-[[URL] Hier klicken], um Ihr Abo zu erneuern.
+		Das aktive Voice-Morph-Abo ist abgelaufen. Ihre normalen Voice-Einstellungen werden angewendet. 
+[[URL] Klicken Sie hier], um Ihr Abo zu erneuern. 
+
+Wenn Sie Premium-Mitglied sind, [[PREMIUM_URL] klicken Sie hier], um Ihren Voice-Morphing-Vorteil zu nutzen.
 	</notification>
 	<notification name="VoiceEffectsWillExpire">
-		Ein oder mehrere Ihrer Voice-Morph-Abos werden in weniger als [INTERVAL] Tagen ablaufen.
-[[URL] Hier klicken], um Ihr Abo zu erneuern.
+		Ein oder mehrere Ihrer Voice-Morph-Abos laufen in weniger als [INTERVAL] Tagen ab. 
+[[URL] Klicken Sie hier], um Ihr Abo zu erneuern. 
+
+Wenn Sie Premium-Mitglied sind, [[PREMIUM_URL] klicken Sie hier], um Ihren Voice-Morphing-Vorteil zu nutzen.
 	</notification>
 	<notification name="VoiceEffectsNew">
 		Neue Voice-Morph-Effekte sind erhältlich!
@@ -3242,6 +3272,9 @@ Diese werden für ein paar Sekunden sicherheitshalber gesperrt.
 	<notification name="SnapshotToComputerFailed">
 		Fehler beim Speichern des Bildes unter [PATH]: Zu wenig Speicherplatz auf dem Medium. [NEED_MEMORY]KB werden benötigt, es stehen jedoch nur [FREE_MEMORY]KB zur Verfügung.
 	</notification>
+	<notification name="SnapshotToLocalDirNotExist">
+		Fehler beim Speichern des Bildes unter [PATH]: Verzeichnis nicht vorhanden.
+	</notification>
 	<notification name="PresetNotSaved">
 		Fehler beim Speichern der Voreinstellung [NAME].
 	</notification>
diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml
index 32c9598edfe0ac71a94765c7a1040a0e337218a0..287f55a127e5900314b99ab522e27ffa9363a280 100644
--- a/indra/newview/skins/default/xui/de/panel_login.xml
+++ b/indra/newview/skins/default/xui/de/panel_login.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <panel name="panel_login">
-	<panel.string name="forgot_password_url">http://secondlife.com/account/request.php?lang=de</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php?lang=de
+	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="ui_stack">
 		<layout_panel name="ui_container">
 			<combo_box label="Benutzername" name="username_combo" tool_tip="Bei der Registrierung gewählter Benutzername wie „berndschmidt12“ oder „Liebe Sonne“"/>
@@ -11,8 +16,13 @@
 			</combo_box>
 			<button label="Anmelden" name="connect_btn"/>
 			<check_box label="Details speichern" name="remember_check"/>
-			<text name="forgot_password_text">Kennwort vergessen</text>
+			<text name="forgot_password_text">
+				Kennwort vergessen
+			</text>
 			<combo_box label="Grid auswählen" name="server_combo"/>
+			<text name="sign_up_text">
+				Registrieren
+			</text>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_login_first.xml b/indra/newview/skins/default/xui/de/panel_login_first.xml
index 44637d5159766321fb929887c2c772dc0b2ee265..038001157e811f138cd10c2ad11585e5eba32e69 100644
--- a/indra/newview/skins/default/xui/de/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/de/panel_login_first.xml
@@ -3,6 +3,9 @@
 	<panel.string name="forgot_password_url">
 		http://secondlife.com/account/request.php?lang=de
 	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="logo_stack">
 		<layout_panel name="parent_panel2">
 			<layout_stack name="widget_stack">
@@ -14,6 +17,9 @@
 					<text name="forgot_password_text">
 						Kennwort vergessen
 					</text>
+					<text name="sign_up_text">
+						Registrieren
+					</text>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_access.xml b/indra/newview/skins/default/xui/de/panel_region_access.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4ebc4867fb81f72af256f2ab0adcf84ae5c76ecb
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_region_access.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Zugang" name="Access">
+	<tab_container name="tabs">
+		<panel label="GRUNDBESITZVERWALTER" name="estate_managers_panel">
+			<text name="estate_manager_label">
+				Grundbesitzverwalter:
+			</text>
+			<name_list name="estate_manager_name_list">
+				<columns label="Name" name="name"/>
+			</name_list>
+			<button label="Hinzufügen..." name="add_estate_manager_btn"/>
+			<button label="Entfernen..." name="remove_estate_manager_btn"/>
+		</panel>
+		<panel label="ZULÄSSIG" name="allowed_panel">
+			<panel label="top_panel" name="allowed_search_panel">
+				<filter_editor label="Zulässige Agenten suchen" name="allowed_search_input"/>
+			</panel>
+			<text name="allow_resident_label">
+				Immer zugelassen:
+			</text>
+			<name_list name="allowed_avatar_name_list">
+				<columns label="Name" name="name"/>
+			</name_list>
+			<button label="Hinzufügen..." name="add_allowed_avatar_btn"/>
+			<button label="Entfernen..." name="remove_allowed_avatar_btn"/>
+		</panel>
+		<panel label="ZULÄSSIGE GRUPPEN" name="allowed_groups_panel">
+			<panel label="top_panel" name="allowed_group_search_panel">
+				<filter_editor label="Zulässige Gruppen Suchen" name="allowed_group_search_input"/>
+			</panel>
+			<text name="allow_group_label">
+				Immer zugelassene Gruppen:
+			</text>
+			<name_list name="allowed_group_name_list">
+				<columns label="Name" name="name"/>
+			</name_list>
+			<button label="Hinzufügen..." name="add_allowed_group_btn"/>
+			<button label="Entfernen..." name="remove_allowed_group_btn"/>
+		</panel>
+		<panel label="VERBANNT" name="banned_panel">
+			<panel label="top_panel" name="banned_search_panel">
+				<filter_editor label="Verbannte Agenten suchen" name="banned_search_input"/>
+			</panel>
+			<text name="ban_resident_label">
+				Immer verbannt:
+			</text>
+			<name_list name="banned_avatar_name_list">
+				<columns label="Name" name="name"/>
+				<columns label="Letztes Login-Datum" name="last_login_date"/>
+				<columns label="Datum der Verbannung" name="ban_date"/>
+				<columns label="Verbannt von" name="bannedby"/>
+			</name_list>
+			<button label="Hinzufügen..." name="add_banned_avatar_btn"/>
+			<button label="Entfernen..." name="remove_banned_avatar_btn"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_estate.xml b/indra/newview/skins/default/xui/de/panel_region_estate.xml
index dd8a562cb79e066bfbae2406846a74d645f3f5a9..b713dd58d02f1b6c92de8145887dc1cd51baf371 100644
--- a/indra/newview/skins/default/xui/de/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_estate.xml
@@ -16,7 +16,7 @@
 		(unbekannt)
 	</text>
 	<radio_group name="externally_visible_radio">
-		<radio_item label="Nur nachstehend aufgelistete Einwohner und Gruppen zulassen" name="estate_restricted_access"/>
+		<radio_item label="Nur Einwohner und Gruppen zulassen, die im Reiter &quot;Zugang&quot; aufgelistet sind." name="estate_restricted_access"/>
 		<radio_item label="Alle Besucher zugelassen" name="estate_public_access"/>
 	</radio_group>
 	<check_box label="Muss 18+ sein" name="limit_age_verified" tool_tip="Nur Einwohner, die mindestens 18 Jahre alt sind, können diesen Grundbesitz betreten. Weitere Informationen finden Sie unter [SUPPORT_SITE]."/>
@@ -26,7 +26,7 @@
 	<check_box label="Direktteleport zulassen" name="allow_direct_teleport"/>
 	<button label="Ãœbernehmen" name="apply_btn"/>
 	<text name="estate_manager_label">
-		Grundbesitzverwalter:
+		Grundbesitzsverwalter:
 	</text>
 	<text name="allow_resident_label">
 		Immer zugelassen:
diff --git a/indra/newview/skins/default/xui/de/sidepanel_task_info.xml b/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
index c30611c66c09d3f5fcaf39d569a2e8eb3331d56b..c8cd49995642cf89432c00aaab722378ec6b2648 100644
--- a/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="object properties" title="Objektprofil">
-	<panel.string name="text deed continued">Ãœbertragung</panel.string>
-	<panel.string name="text deed">Ãœbertragung</panel.string>
-	<panel.string name="text modify info 1">Sie können dieses Objekt bearbeiten.</panel.string>
-	<panel.string name="text modify info 2">Sie können diese Objekte bearbeiten.</panel.string>
-	<panel.string name="text modify info 3">Sie können dieses Objekt nicht bearbeiten.</panel.string>
-	<panel.string name="text modify info 4">Sie können diese Objekte nicht bearbeiten.</panel.string>
-	<panel.string name="text modify info 5">Dieses Objekt kann nicht über eine Regionsgrenze hinweg geändert werden</panel.string>
-	<panel.string name="text modify info 6">Diese Objekte können nicht über eine Regionsgrenze hinweg geändert werden</panel.string>
-	<panel.string name="text modify warning">Diese Objekt verfügt über verknüpfte Teile</panel.string>
-	<panel.string name="Cost Default">Preis: L$</panel.string>
-	<panel.string name="Cost Total">Summenpreis: L$</panel.string>
-	<panel.string name="Cost Per Unit">Stückpreis: L$</panel.string>
-	<panel.string name="Cost Mixed">Mischpreis</panel.string>
-	<panel.string name="Sale Mixed">Mischverkauf</panel.string>
+	<panel.string name="text deed continued">
+		Ãœbertragung
+	</panel.string>
+	<panel.string name="text deed">
+		Ãœbertragung
+	</panel.string>
+	<panel.string name="text modify info 1">
+		Sie können dieses Objekt bearbeiten.
+	</panel.string>
+	<panel.string name="text modify info 2">
+		Sie können diese Objekte bearbeiten.
+	</panel.string>
+	<panel.string name="text modify info 3">
+		Sie können dieses Objekt nicht bearbeiten.
+	</panel.string>
+	<panel.string name="text modify info 4">
+		Sie können diese Objekte nicht bearbeiten.
+	</panel.string>
+	<panel.string name="text modify info 5">
+		Dieses Objekt kann nicht über eine Regionsgrenze hinweg geändert werden
+	</panel.string>
+	<panel.string name="text modify info 6">
+		Diese Objekte können nicht über eine Regionsgrenze hinweg geändert werden
+	</panel.string>
+	<panel.string name="text modify warning">
+		Diese Objekt verfügt über verknüpfte Teile
+	</panel.string>
+	<panel.string name="Cost Default">
+		Preis: L$
+	</panel.string>
+	<panel.string name="Cost Total">
+		Summenpreis: L$
+	</panel.string>
+	<panel.string name="Cost Per Unit">
+		Stückpreis: L$
+	</panel.string>
+	<panel.string name="Cost Mixed">
+		Mischpreis
+	</panel.string>
+	<panel.string name="Sale Mixed">
+		Mischverkauf
+	</panel.string>
 	<text name="title" value="Objektprofil"/>
 	<text name="where" value="(Inworld)"/>
 	<panel label="" name="properties_panel">
-		<text name="Name:">Name:</text>
-		<text name="Description:">Beschreibung:</text>
-		<text name="CreatorNameLabel">Ersteller:</text>
-		<text name="Owner:">Eigentümer:</text>
-		<text name="Group_label">Gruppe:</text>
+		<text name="Name:">
+			Name:
+		</text>
+		<text name="Description:">
+			Beschreibung:
+		</text>
+		<text name="CreatorNameLabel">
+			Ersteller:
+		</text>
+		<text name="Owner:">
+			Eigentümer:
+		</text>
+		<text name="Group_label">
+			Gruppe:
+		</text>
 		<button name="button set group" tool_tip="Eine Gruppe auswählen, um die Berechtigungen des Objekts zu teilen."/>
 		<name_box initial_value="Wird geladen..." name="Group Name Proxy"/>
 		<button label="Übertragung" label_selected="Übertragung" name="button deed" tool_tip="Eine Übertragung bedeutet, dass das Objekt mit den Berechtigungen „Nächster Eigentümer“ weitergegeben wird. Mit der Gruppe geteilte Objekte können von einem Gruppen-Officer übertragen werden."/>
-		<text name="label click action">Bei Linksklick:</text>
+		<text name="label click action">
+			Bei Linksklick:
+		</text>
 		<combo_box name="clickaction">
 			<combo_box.item label="Berühren (Standard)" name="Touch/grab(default)"/>
 			<combo_box.item label="Auf Objekt setzen" name="Sitonobject"/>
@@ -33,15 +73,24 @@
 			<combo_box.item label="Objekt bezahlen" name="Payobject"/>
 			<combo_box.item label="Öffnen" name="Open"/>
 			<combo_box.item label="Zoomen" name="Zoom"/>
+			<combo_box.item label="Keine" name="None"/>
 		</combo_box>
 		<panel name="perms_inv">
-			<text name="perm_modify">Sie können dieses Objekt bearbeiten.</text>
-			<text name="Anyone can:">Jeder:</text>
+			<text name="perm_modify">
+				Sie können dieses Objekt bearbeiten.
+			</text>
+			<text name="Anyone can:">
+				Jeder:
+			</text>
 			<check_box label="Kopieren" name="checkbox allow everyone copy"/>
 			<check_box label="Bewegen" name="checkbox allow everyone move"/>
-			<text name="GroupLabel">Gruppe:</text>
+			<text name="GroupLabel">
+				Gruppe:
+			</text>
 			<check_box label="Teilen" name="checkbox share with group" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern, teilen. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/>
-			<text name="NextOwnerLabel">Nächster Eigentümer:</text>
+			<text name="NextOwnerLabel">
+				Nächster Eigentümer:
+			</text>
 			<check_box label="Bearbeiten" name="checkbox next owner can modify"/>
 			<check_box label="Kopieren" name="checkbox next owner can copy"/>
 			<check_box label="Transferieren" name="checkbox next owner can transfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/>
@@ -54,13 +103,27 @@
 		</combo_box>
 		<spinner label="Preis: L$" name="Edit Cost"/>
 		<check_box label="In Suche anzeigen" name="search_check" tool_tip="Dieses Objekt in Suchergebnissen anzeigen"/>
-		<text name="pathfinding_attributes_label">Pathfinding-Attribute:</text>
-		<text name="B:">B:</text>
-		<text name="O:">O:</text>
-		<text name="G:">G:</text>
-		<text name="E:">E:</text>
-		<text name="N:">N:</text>
-		<text name="F:">F:</text>
+		<text name="pathfinding_attributes_label">
+			Pathfinding-Attribute:
+		</text>
+		<text name="B:">
+			B:
+		</text>
+		<text name="O:">
+			O:
+		</text>
+		<text name="G:">
+			G:
+		</text>
+		<text name="E:">
+			E:
+		</text>
+		<text name="N:">
+			N:
+		</text>
+		<text name="F:">
+			F:
+		</text>
 	</panel>
 	<panel name="button_panel">
 		<button label="Öffnen" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index f80b1ee1ec880be4f5de1ab243d4ce8945bbc55f..7b292674c46c9394b3639d20f5efb332929762d8 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -2240,6 +2240,18 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich unter http://suppo
 	<string name="RegionInfoListTypeBannedAgents">
 		Immer verbannt
 	</string>
+	<string name="RegionInfoAllEstates">
+		alle Grundbesitze
+	</string>
+	<string name="RegionInfoManagedEstates">
+		verwaltete Grundbesitze
+	</string>
+	<string name="RegionInfoThisEstate">
+		dieser Grundbesitz
+	</string>
+	<string name="AndNMore">
+		und [EXTRA_COUNT] weitere
+	</string>
 	<string name="ScriptLimitsParcelScriptMemory">
 		Parzellenskript-Speicher
 	</string>
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 37c4e3ff8d5c3853c59d9e43e0358a690e84c323..48f80c4d725e845597d4acae8edc3e7a16cd5e55 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -21,6 +21,14 @@
       name="maturity_icon_adult">
       "Parcel_R_Dark"
     </floater.string>
+    <floater.string
+     name="Hours">
+        [HOURS] hrs.
+    </floater.string>
+    <floater.string
+     name="Hour">
+        hr.
+    </floater.string>
     <floater.string
      name="Minutes">
         [MINUTES] min.
@@ -37,6 +45,10 @@
      name="Remaining">
         remaining
     </floater.string>
+    <floater.string
+     name="Always">
+        Always
+    </floater.string>
     <tab_container
      follows="all"
      halign="left"
@@ -2063,19 +2075,29 @@ Only large parcels can be listed in search.
              name="BanCheck"
              top="0"
              width="200">
-                Always banned ([COUNT], max [MAX])
+                Banned ([COUNT], max [MAX])
             </text>
             <name_list
              column_padding="0"
              follows="top|bottom"
-             heading_height="14"
+             heading_height="16"
              height="125"
              layout="topleft"
              left="0"
              multi_select="true"
+             draw_heading="true"
              name="BannedList"
              tool_tip="([LISTED] listed, [MAX] max)"
-             width="230" />
+             width="230">
+             <columns
+              label="Name"
+              name="name"
+              width="155" />
+             <columns
+              label="Duration"
+              name="duration"
+              width="75" />
+            </name_list>
             <button
              follows="bottom"
              height="23"
diff --git a/indra/newview/skins/default/xui/en/floater_ban_duration.xml b/indra/newview/skins/default/xui/en/floater_ban_duration.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5562f288774f8533e1499485c1e438fdf7b785db
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_ban_duration.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ can_minimize="false"
+ can_tear_off="false"
+ can_resize="false"
+ can_drag_on_left="false"
+ can_close="true"
+ height="150"
+ layout="topleft"
+ name="ban_duration"
+ title="Ban duration"
+ single_instance="true"
+ width="180">
+   <text
+    type="string"
+    length="1"
+    follows="left|top"
+    height="15"
+    layout="topleft"
+    left="15"
+    name="duration_textbox"
+    top="10"
+    width="75">
+        Ban duration:
+   </text>
+
+   <radio_group
+    draw_border="false"
+    enabled="true"
+    follows="left|top"
+    height="40"
+    left="20"
+    mouse_opaque="true"
+    name="ban_duration_radio"
+    tab_stop="true"
+    width="200">
+       <radio_item
+        type="string"
+        follows="left|top"
+        height="20"
+        width="200"
+        label="Always"
+        name="always_radio">
+            Always
+       </radio_item>
+       <radio_item
+        type="string"
+        follows="left|top"
+        height="20"
+        width="200"
+        label="Temporary"
+        name="temporary_radio">
+            Temporary
+       </radio_item>
+   </radio_group>
+
+   <spinner
+    allow_digits_only="true"
+    decimal_digits="0"
+    follows="left|top"
+    height="20"
+    increment="1"
+    max_val="8766"
+    min_val="1"
+    initial_val="1"
+    name="ban_hours"
+    top_delta="50"
+    left="40"
+    width="60"/>
+   <text
+    type="string"
+    length="1"
+    follows="left|top"
+    height="15"
+    left_delta="70"
+    name="hours_textbox"
+    top_delta="5"
+    width="75">
+        hours.
+   </text>
+    
+   <button
+    follows="left|top"
+    height="23"
+    label="Ok"
+    left="15"
+    name="ok_btn"
+    top_delta="30"
+    width="75">
+   </button>
+   <button
+    follows="left|top"
+    height="23"
+    label="Cancel"
+    left_pad="0"
+    name="cancel_btn"
+    top_delta="0"
+    width="75">
+   </button>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 42b1a1ec1beff6c2708a0a8fcf78a939bbc62b57..931e44b319feeb0633143574f098c6199c777361 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3815,6 +3815,62 @@ Can&apos;t add estate owner to estate &apos;Banned Resident&apos; list.
    type="alertmodal">
 Unable to add banned resident to estate manager list.
   </notification>
+    
+  <notification
+   icon="alertmodal.tga"
+   name="ProblemBanningEstateManager"
+   type="alertmodal">
+Unable to add estate manager [AGENT] to banned list.
+  </notification>
+  
+  <notification
+   icon="alertmodal.tga"
+   name="GroupIsAlreadyInList"
+   type="alertmodal">
+&lt;nolink&gt;[GROUP]&lt;/nolink&gt; is already in the Allowed Groups list.
+  </notification>
+    
+  <notification
+   icon="alertmodal.tga"
+   name="AgentIsAlreadyInList"
+   type="alertmodal">
+[AGENT] is already in your [LIST_TYPE] list.
+  </notification>
+    
+  <notification
+   icon="alertmodal.tga"
+   name="AgentsAreAlreadyInList"
+   type="alertmodal">
+[AGENT] are already in your [LIST_TYPE] list.
+  </notification>
+    
+  <notification
+   icon="alertmodal.tga"
+   name="AgentWasAddedToList"
+   type="alertmodal">
+[AGENT] was added to [LIST_TYPE] list of [ESTATE].
+  </notification>
+    
+  <notification
+   icon="alertmodal.tga"
+   name="AgentsWereAddedToList"
+   type="alertmodal">
+[AGENT] were added to [LIST_TYPE] list of [ESTATE].
+
+  </notification>
+      <notification
+   icon="alertmodal.tga"
+   name="AgentWasRemovedFromList"
+   type="alertmodal">
+[AGENT] was removed from [LIST_TYPE] list of [ESTATE].
+  </notification>
+    
+  <notification
+   icon="alertmodal.tga"
+   name="AgentsWereRemovedFromList"
+   type="alertmodal">
+[AGENT] were removed from [LIST_TYPE] list of [ESTATE].
+  </notification>
 
   <notification
    icon="alertmodal.tga"
@@ -4616,7 +4672,8 @@ Add to allowed list for this estate only or for [ALL_ESTATES]?
    icon="alert.tga"
    label="Select estate"
    name="EstateAllowedAgentRemove"
-   type="alert">
+   type="alertmodal">
+    <unique/>
 Remove from allowed list for this estate only or for [ALL_ESTATES]?
     <tag>confirm</tag>
     <usetemplate
@@ -4645,7 +4702,8 @@ Add to group allowed list for this estate only or for [ALL_ESTATES]?
    icon="alert.tga"
    label="Select estate"
    name="EstateAllowedGroupRemove"
-   type="alert">
+   type="alertmodal">
+    <unique/>
 Remove from group allowed list for this estate only or [ALL_ESTATES]?
     <tag>group</tag>
     <tag>confirm</tag>
@@ -4674,8 +4732,9 @@ Deny access for this estate only or for [ALL_ESTATES]?
    icon="alert.tga"
    label="Select estate"
    name="EstateBannedAgentRemove"
-   type="alert">
-Remove this Resident from the ban list for  access for this estate only or for [ALL_ESTATES]?
+   type="alertmodal">
+    <unique/>
+Remove this Resident from the ban list for access for this estate only or for [ALL_ESTATES]?
     <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
@@ -4702,7 +4761,8 @@ Add estate manager for this estate only or for [ALL_ESTATES]?
    icon="alert.tga"
    label="Select estate"
    name="EstateManagerRemove"
-   type="alert">
+   type="alertmodal">
+    <unique/>
 Remove estate manager for this estate only or for [ALL_ESTATES]?
     <tag>confirm</tag>
     <usetemplate
diff --git a/indra/newview/skins/default/xui/en/panel_region_access.xml b/indra/newview/skins/default/xui/en/panel_region_access.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4be073195b7c4dda226a2fead884374e700e9d93
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_region_access.xml
@@ -0,0 +1,421 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="true"
+ follows="top|left"
+ height="510"
+ help_topic="panel_region_access_tab"
+ label="Access"
+ layout="topleft"
+ left="0"
+ name="Access"
+ top="320"
+ width="530">
+
+
+<tab_container
+ bottom="-10"
+ follows="all"
+ layout="topleft"
+ left="3"
+ name="tabs"
+ tab_min_width="70"
+ tab_height="30"
+ tab_position="top"
+ top="10"
+ halign="center"
+ right="-5">
+    
+<!-- ============================= ESTATE MANAGERS tab ====================== -->
+  <panel
+    background_opaque="true"
+    background_visible="true"
+    bg_alpha_color="DkGray"
+    bg_opaque_color="DkGray"
+    bottom="-1"
+    follows="all"
+    label="ESTATE MANAGERS"
+    layout="topleft"
+    left="0"
+    help_topic="estate_managers_tab"
+    name="estate_managers_panel"
+    right="-1"
+    top="0">
+    <text
+     type="string"
+     length="1"
+     bottom="34"
+     follows="left|top"
+     height="20"
+     layout="topleft"
+     name="estate_manager_label"
+     top_pad="10"
+     left="10"
+     width="200">
+        Estate Managers:
+    </text>
+    <!-- Estate Managers box -->
+    <view_border
+     bevel_style="none"
+     follows="top|left"
+     height="400"
+     layout="topleft"
+     left="10"
+     top_pad="-5"
+     width="498" />
+    <name_list
+     follows="left|top"
+     height="400"
+     layout="topleft"
+     left_delta="0"
+     multi_select="true"
+     draw_heading="true"
+     name="estate_manager_name_list"
+     top_delta="0"
+     width="498">
+        <columns
+         label="Name"
+         name="name"
+         width="498" />
+    </name_list>
+    <!-- Estate Managers buttons -->
+    <button
+     follows="left|top"
+     height="23"
+     label="Add..."
+     layout="topleft"
+     left="10"
+     name="add_estate_manager_btn"
+     top_pad="6"
+     width="114" />
+    <button
+     follows="left|top"
+     height="23"
+     label="Remove..."
+     layout="topleft"
+     name="remove_estate_manager_btn"
+     left_pad="6"
+     width="114" />      
+  </panel>
+        
+        
+<!-- ================================ ALLOWED tab =========================== -->
+  <panel
+    background_opaque="true"
+    background_visible="true"
+    bg_alpha_color="DkGray"
+    bg_opaque_color="DkGray"
+    bottom="-1"
+    follows="all"
+    label="ALLOWED"
+    layout="topleft"
+    left="0"
+    help_topic="allowed_tab"
+    name="allowed_panel"
+    right="-1"
+    top="0">
+       <panel
+        follows="left|top|right"
+        height="27"
+        label="top_panel"
+        layout="topleft"
+        left="0"
+        name="allowed_search_panel"
+        right="-1"
+        top="0">
+           <filter_editor
+            follows="left|top|right"
+            height="23"
+            layout="topleft"
+            left="6"
+            label="Search allowed agents"
+            max_length_chars="300"
+            name="allowed_search_input"
+            text_color="Black"
+            text_pad_left="10"
+            top="4"
+            width="440" />
+           <button
+            follows="left|top"
+            height="23"
+            label="Copy"
+            layout="topleft"
+            left_pad="10"
+            name="copy_allowed_list_btn"
+            width="40" />
+        </panel>
+   <text
+     type="string"
+     length="1"
+     bottom="34"
+     follows="left|top"
+     height="20"
+     layout="topleft"
+     name="allow_resident_label"
+     top_pad="10"
+     left="10"
+     width="200">
+        Always allowed:
+    </text>
+    <!-- Always allowed box -->
+    <view_border
+     bevel_style="none"
+     follows="top|left"
+     height="370"
+     layout="topleft"
+     left="10"
+     top_pad="-5"
+     width="498" />
+    <name_list
+     follows="left|top"
+     height="370"
+     layout="topleft"
+     left_delta="0"
+     multi_select="true"
+     draw_heading="true"
+     name="allowed_avatar_name_list"
+     top_delta="0"
+     width="498">
+        <columns
+         label="Name"
+         name="name"
+         width="498" />
+    </name_list>
+    <!-- Always allowed buttons -->
+    <button
+     follows="left|top"
+     height="23"
+     label="Add..."
+     layout="topleft"
+     left="10"
+     name="add_allowed_avatar_btn"
+     top_pad="6"
+     width="114" />
+    <button
+     follows="left|top"
+     height="23"
+     label="Remove..."
+     layout="topleft"
+     name="remove_allowed_avatar_btn"
+     left_pad="6"
+     width="114" />
+  </panel>
+
+  <!-- ============================= ALLOWED GROUPS tab ======================= -->
+  <panel
+    background_opaque="true"
+    background_visible="true"
+    bg_alpha_color="DkGray"
+    bg_opaque_color="DkGray"
+    bottom="-1"
+    follows="all"
+    label="ALLOWED GROUPS"
+    layout="topleft"
+    left="0"
+    help_topic="allowed_groups_tab"
+    name="allowed_groups_panel"
+    right="-1"
+    top="0">
+       <panel
+        follows="left|top|right"
+        height="27"
+        label="top_panel"
+        layout="topleft"
+        left="0"
+        name="allowed_group_search_panel"
+        right="-1"
+        top="0">
+           <filter_editor
+            follows="left|top|right"
+            height="23"
+            layout="topleft"
+            left="6"
+            label="Search allowed groups"
+            max_length_chars="300"
+            name="allowed_group_search_input"
+            text_color="Black"
+            text_pad_left="10"
+            top="4"
+            width="440" />
+           <button
+            follows="left|top"
+            height="23"
+            label="Copy"
+            layout="topleft"
+            left_pad="10"
+            name="copy_allowed_group_list_btn"
+            width="40" />
+        </panel>
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="20"
+     layout="topleft"
+     left="10"
+     name="allow_group_label"
+     top_pad="10"
+     width="200">
+        Groups always allowed:
+    </text>
+    <!-- Groups always allowed box -->
+    <view_border
+     bevel_style="none"
+     follows="top|left"
+     height="370"
+     layout="topleft"
+     left="10"
+     top_pad="-5"
+     width="498" />
+    <name_list
+     follows="left|top"
+     height="370"
+     layout="topleft"
+     left_delta="0"
+     multi_select="true"
+     draw_heading="true"
+     name="allowed_group_name_list"
+     top_delta="0"
+     width="498">
+        <columns
+         label="Name"
+         name="name"
+         width="498" />
+    </name_list>
+    <!-- Groups always allowed buttons -->
+    <button
+     follows="left|top"
+     height="23"
+     label="Add..."
+     layout="topleft"
+     left="10"
+     name="add_allowed_group_btn"
+     top_pad="6"
+     width="114" />
+    <button
+     follows="left|top"
+     height="23"
+     label="Remove..."
+     layout="topleft"
+     name="remove_allowed_group_btn"
+     left_pad="6"
+     top_delta="0"
+     width="114" />
+  </panel>
+
+  <!-- ================================ BANNED tab ============================ -->
+  <panel
+    background_opaque="true"
+    background_visible="true"
+    bg_alpha_color="DkGray"
+    bg_opaque_color="DkGray"
+    bottom="-1"
+    follows="all"
+    label="BANNED"
+    layout="topleft"
+    left="0"
+    help_topic="banned_tab"
+    name="banned_panel"
+    right="-1"
+    top="0">
+       <panel
+        follows="left|top|right"
+        height="27"
+        label="top_panel"
+        layout="topleft"
+        left="0"
+        name="banned_search_panel"
+        right="-1"
+        top="0">
+           <filter_editor
+            follows="left|top|right"
+            height="23"
+            layout="topleft"
+            left="6"
+            label="Search banned agents"
+            max_length_chars="300"
+            name="banned_search_input"
+            text_color="Black"
+            text_pad_left="10"
+            top="4"
+            width="440" />
+               <button
+                follows="left|top"
+                height="23"
+                label="Copy"
+                layout="topleft"
+                left_pad="10"
+                name="copy_banned_list_btn"
+                width="40" />
+        </panel>
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="20"
+     layout="topleft"
+     left="10"
+     name="ban_resident_label"
+     top_pad="10"
+     width="200">
+        Always banned:
+    </text>
+    <!-- Always banned box -->
+    <view_border
+     bevel_style="none"
+     follows="top|left"
+     height="370"
+     layout="topleft"
+     left="10"
+     top_pad="-5"
+     width="498" />
+      <name_list
+       follows="left|top"
+       height="370"
+       layout="topleft"
+       left_delta="0"
+       multi_select="true"
+       draw_heading="true"
+       name="banned_avatar_name_list"
+       top_delta="0"
+       width="498">
+          <columns
+            label="Name"
+            name="name"
+            width="140" />
+          <columns
+            label="Last login date"
+            name="last_login_date"
+            width="100" />
+          <columns
+            label="Date banned"
+            name="ban_date"
+            width="100" />
+          <columns
+            label="Banned by"
+            name="bannedby"
+            width="140" />
+      </name_list>
+    <!-- Always banned buttons -->
+    <button
+     follows="left|top"
+     height="23"
+     label="Add..."
+     layout="topleft"
+     left="10"
+     name="add_banned_avatar_btn"
+     top_pad="6"
+     width="114" />
+    <button
+     follows="left|top"
+     height="23"
+     label="Remove..."
+     layout="topleft"
+     name="remove_banned_avatar_btn"
+     left_pad="6"
+     top_delta="0"
+     width="114" />
+  </panel>
+
+
+</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml
index a0c1dd0be6872f1d82c41ef68324727e08500cad..9b9c870c49f384ebd8a41ef55652b567df02232a 100644
--- a/indra/newview/skins/default/xui/en/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml
@@ -82,7 +82,7 @@
     <view_border
      bevel_style="none"
      follows="top|left"
-     height="105"
+     height="185"
      layout="topleft"
      left="10"
      top_pad="5"
@@ -96,7 +96,7 @@
      width="200">
         <radio_item
          height="16"
-         label="Allow only residents and groups listed below"
+         label="Allow only residents and groups listed on the Access tab"
          layout="topleft"
          name="estate_restricted_access" />
         <radio_item
@@ -137,10 +137,10 @@
      height="18"
      label="Allow Voice Chat"
      layout="topleft"
-     left="290"
+     left="20"
      name="voice_chat_check"
-     top_delta="-78"
-     width="200" />
+     top_pad="2"
+     width="240" />
     <check_box
      height="18"
      label="Allow Direct Teleport"
@@ -148,7 +148,7 @@
      left_delta="0"
      name="allow_direct_teleport"
      top_pad="2"
-     width="80" />
+     width="240" />
     <button
      enabled="false"
      follows="left|top"
@@ -156,215 +156,9 @@
      label="Apply"
      layout="topleft"
      name="apply_btn"
-     top_pad="30"
-     left_delta="0"
-     width="97" />
-    
-    <text
-     type="string"
-     length="1"
-     bottom="34"
-     follows="left|top"
-     height="20"
-     layout="topleft"
-     name="estate_manager_label"
-     top_pad="25"
-     left="10"
-     width="200">
-        Estate Managers:
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="20"
-     layout="topleft"
-     left="280"
-     name="allow_resident_label"
-     top_delta="0"
-     width="200">
-        Always allowed:
-    </text>
-
-    <!-- Estate Managers box -->
-    <view_border
-     bevel_style="none"
-     follows="top|left"
-     height="71"
-     layout="topleft"
-     left="10"
-     top_pad="-5"
-     width="235" />
-    <name_list
-     follows="left|top"
-     height="71"
-     layout="topleft"
-     left_delta="0"
-     multi_select="true"
-     name="estate_manager_name_list"
-     top_delta="0"
-     width="235" />
-
-    <!-- Always allowed box -->
-    <view_border
-     bevel_style="none"
-     follows="top|left"
-     height="71"
-     layout="topleft"
-     left="280"
-     top_delta="0"
-     width="235" />
-    <name_list
-     follows="left|top"
-     height="71"
-     layout="topleft"
-     left_delta="0"
-     multi_select="true"
-     name="allowed_avatar_name_list"
-     top_delta="0"
-     width="235" />
-
-    <!-- Estate Managers buttons -->
-    <button
-     follows="left|top"
-     height="23"
-     label="Add..."
-     layout="topleft"
-     left="10"
-     name="add_estate_manager_btn"
-     top_pad="6"
-     width="114" />
-    <button
-     follows="left|top"
-     height="23"
-     label="Remove..."
-     layout="topleft"
-     name="remove_estate_manager_btn"
-     left_pad="6"
-     width="114" />
-
-    <!-- Always allowed buttons -->
-    <button
-     follows="left|top"
-     height="23"
-     left="280"
-     label="Add..."
-     layout="topleft"
-     name="add_allowed_avatar_btn"
-     top_delta="0"
-     width="114" />
-    <button
-     follows="left|top"
-     height="23"
-     label="Remove..."
-     layout="topleft"
-     name="remove_allowed_avatar_btn"
-     left_pad="6"
-     top_delta="0"
-     width="114" />
-
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="20"
-     layout="topleft"
-     left="10"
-     name="allow_group_label"
      top_pad="10"
-     width="200">
-        Groups always allowed:
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="20"
-     layout="topleft"
-     left="280"
-     name="ban_resident_label"
-     top_delta="0"
-     width="200">
-        Always banned:
-    </text>
-
-    <!-- Groups always allowed box -->
-    <view_border
-     bevel_style="none"
-     follows="top|left"
-     height="71"
-     layout="topleft"
-     left="10"
-     top_pad="-5"
-     width="235" />
-    <name_list
-     follows="left|top"
-     height="71"
-     layout="topleft"
      left_delta="0"
-     multi_select="true"
-     name="allowed_group_name_list"
-     top_delta="0"
-     width="235" />
-
-    <!-- Always banned box -->
-    <view_border
-     bevel_style="none"
-     follows="top|left"
-     height="71"
-     layout="topleft"
-     left="280"
-     top_delta="0"
-     width="235" />
-    <name_list
-     follows="left|top"
-     height="71"
-     layout="topleft"
-     left_delta="0"
-     multi_select="true"
-     name="banned_avatar_name_list"
-     top_delta="0"
-     width="235" />
-
-    <!-- Groups always allowed buttons -->
-    <button
-     follows="left|top"
-     height="23"
-     label="Add..."
-     layout="topleft"
-     left="10"
-     name="add_allowed_group_btn"
-     top_pad="6"
-     width="114" />
-    <button
-     follows="left|top"
-     height="23"
-     label="Remove..."
-     layout="topleft"
-     name="remove_allowed_group_btn"
-     left_pad="6"
-     top_delta="0"
-     width="114" />
-
-    <!-- Always banned buttons -->
-    <button
-     follows="left|top"
-     height="23"
-     label="Add..."
-     layout="topleft"
-     left="280"
-     name="add_banned_avatar_btn"
-     top_delta="0"
-     width="114" />
-    <button
-     follows="left|top"
-     height="23"
-     label="Remove..."
-     layout="topleft"
-     name="remove_banned_avatar_btn"
-     top_delta="0"
-     left_pad="6"
-     width="114" />
+     width="97" />
 
     <button
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 71133f582fc20e7f8fcdd23ee3d370c6ee92f24e..12edeb3ce92904e617f9098231d6556703160add 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -315,17 +315,6 @@ Please try logging in again in a minute.</string>
 	<string name="BUTTON_DOCK">Dock</string>
 	<string name="BUTTON_HELP">Show Help</string>
 
-	<!-- ToolTips for notecards -->
-	<string name="TooltipNotecardNotAllowedTypeDrop">
-Items of this type can't be attached
-to notecards on this region.
-	</string>
-	<string name="TooltipNotecardOwnerRestrictedDrop">
-Only items with unrestricted
-'next owner' permissions
-"can be attached to notecards.
-	</string>
-
 	<!-- searching - generic -->
 	<string name="Searching">Searching...</string>
 	<string name="NoneFound">None found.</string>
@@ -378,11 +367,6 @@ Error in upload request.  Please visit
 http://secondlife.com/support for help fixing this problem.
 </string>
 
-    <!-- Settings errors -->
-    <string name="SettingValidationError">Validation failed for importing settings [NAME]</string>
-    <string name="SettingImportFileError">Could not open file [FILE]</string>
-    <string name="SettingParseFileError">Could not open file [FILE]</string>
-    <string name="SettingTranslateError">Could not translate legacy windlight [NAME]</string>
 	<!-- Asset Type human readable names:  these will replace variable [TYPE] in notification FailedToFindWearable* -->
 	<!-- Will also replace [OBJECTTYPE] in notifications: UserGiveItem, ObjectGiveItem -->
 	<string name="texture">texture</string>
@@ -409,10 +393,9 @@ http://secondlife.com/support for help fixing this problem.
 	<string name="simstate">simstate</string>
 	<string name="favorite">favorite</string>
 	<string name="symbolic link">link</string>
-    <string name="settings blob">settings</string>
-    <string name="symbolic folder link">folder link</string>
-    <string name="mesh">mesh</string>
-  
+	<string name="symbolic folder link">folder link</string>
+  <string name="mesh">mesh</string>
+
 	<!-- llvoavatar. Displayed in the avatar chat bubble -->
 	<string name="AvatarEditingAppearance">(Editing Appearance)</string>
 	<string name="AvatarAway">Away</string>
@@ -536,7 +519,6 @@ http://secondlife.com/support for help fixing this problem.
 	<string name="ManageEstateSilently">Manage your estates silently</string>
 	<string name="ChangeYourDefaultAnimations">Change your default animations</string>
 	<string name="ForceSitAvatar">Force your avatar to sit</string>
-    <string name="ChangeEnvSettings">Change your environment settings</string>
 	
 	<string name="NotConnected">Not Connected</string>
 	<string name="AgentNameSubst">(You)</string> <!-- Substitution for agent name -->
@@ -2676,6 +2658,10 @@ If you continue to receive this message, please contact Second Life support for
 	<string name="RegionInfoBannedResidents">Always banned: ([BANNEDAGENTS], max [MAXBANNED])</string>
 	<string name="RegionInfoListTypeAllowedAgents">Always allowed</string>
 	<string name="RegionInfoListTypeBannedAgents">Always banned</string>
+	<string name="RegionInfoAllEstates">all estates</string>
+	<string name="RegionInfoManagedEstates">managed estates</string>
+	<string name="RegionInfoThisEstate">this estate</string>
+	<string name="AndNMore">and [EXTRA_COUNT] more</string>
 
 	<!-- script limits floater -->
 	<string name="ScriptLimitsParcelScriptMemory">Parcel Script Memory</string>
diff --git a/indra/newview/skins/default/xui/es/floater_auction.xml b/indra/newview/skins/default/xui/es/floater_auction.xml
index 6faf19dbb570d83830305500ca0904e38d156b65..cbafe92cdfa1ca46d034f88229c2684f3001559d 100644
--- a/indra/newview/skins/default/xui/es/floater_auction.xml
+++ b/indra/newview/skins/default/xui/es/floater_auction.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="floater_auction" title="COMENZAR LA VENTA DE TERRENO LINDEN">
 	<floater.string name="already for sale">
-		No puede subastar parcelas que ya están en venta.
+		No puedes ofertar en parcelas que ya están en venta.
 	</floater.string>
-	<check_box initial_value="true" label="Incluir la valla amarilla de selección" name="fence_check"/>
+	<check_box initial_value="true" label="Incluir la cerca de selección amarilla" name="fence_check"/>
 	<button label="Foto" label_selected="Foto" name="snapshot_btn"/>
 	<button label="Vender a cualquiera" label_selected="Vender a cualquiera" name="sell_to_anyone_btn"/>
-	<button label="Limpiar las configuraciones" label_selected="Limpiar las configuraciones" name="reset_parcel_btn"/>
+	<button label="Borrar las configuraciones" label_selected="Borrar las configuraciones" name="reset_parcel_btn"/>
 	<button label="Comenzar subasta" label_selected="Comenzar subasta" name="start_auction_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index d95b2e41afebea01b85291321bfa710acf90ce85..57475b2f53df4a42409793dfc0e8aaa2845bf525 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -178,6 +178,7 @@
 				<combo_box.item label="Pagar al objeto" name="Payobject"/>
 				<combo_box.item label="Abrirlo" name="Open"/>
 				<combo_box.item label="Zoom" name="Zoom"/>
+				<combo_box.item label="Ninguno" name="None"/>
 			</combo_box>
 			<check_box label="En venta:" name="checkbox for sale"/>
 			<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index 4f407e4b1a7cdfdc3a98243a9637307670aa4566..2467f7785b52472b7fae8f3564688626399320f5 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -12,6 +12,7 @@
 		<menu_item_call label="Controles de la cámara..." name="Camera Controls"/>
 		<menu label="Movimiento" name="Movement">
 			<menu_item_call label="Sentarte" name="Sit Down Here"/>
+			<menu_item_call label="Levantarme" name="Stand up"/>
 			<menu_item_check label="Volar" name="Fly"/>
 			<menu_item_check label="Correr siempre" name="Always Run"/>
 			<menu_item_call label="Parar mis animaciones" name="Stop Animating My Avatar"/>
@@ -281,6 +282,7 @@
 			<menu_item_check label="Formas del físico" name="Physics Shapes"/>
 			<menu_item_check label="Actualizar el tipo" name="Update Type"/>
 			<menu_item_check label="Información sobre el nivel de detalle" name="LOD Info"/>
+			<menu_item_check label="Recuento de triángulo" name="Triangle Count"/>
 			<menu_item_check label="Crear cola" name="Build Queue"/>
 			<menu_item_check label="Partículas" name="Particles"/>
 			<menu_item_check label="Articulaciones" name="Joints"/>
@@ -355,6 +357,7 @@
 			<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
 			<menu_item_check label="Mostrar los huesos" name="Show Bones"/>
 			<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
+			<menu_item_check label="Mostrar las medidas impostoras" name="Show Impostor Extents"/>
 			<menu_item_call label="Debug Avatar Textures" name="Debug Avatar Textures"/>
 		</menu>
 		<menu_item_check label="HTTP Textures" name="HTTP Textures"/>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index 8ba8144cb62f49827e78877d39f90108d6abb74e..46bfa00296fb5d70f1ca3a6b8d86e1c446f00075 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -1574,6 +1574,30 @@ Se superan en [NUM_EXCESS] los [MAX_AGENTS] permitidos en [LIST_TYPE].
 	<notification name="ProblemAddingEstateManagerBanned">
 		No se puede añadir un residente expulsado a la lista de administradores de estado.
 	</notification>
+	<notification name="ProblemBanningEstateManager">
+		No fue posible agregar al administrador de estado [AGENT] a la lista de prohibidos.
+	</notification>
+	<notification name="GroupIsAlreadyInList">
+		&lt;nolink&gt;[GROUP]&lt;/nolink&gt; ya está en la lista de Grupos autorizados.
+	</notification>
+	<notification name="AgentIsAlreadyInList">
+		[AGENT] ya está en tu lista [LIST_TYPE].
+	</notification>
+	<notification name="AgentsAreAlreadyInList">
+		[AGENT] ya está en tu lista [LIST_TYPE].
+	</notification>
+	<notification name="AgentWasAddedToList">
+		[AGENT] fue añadido a la lista [LIST_TYPE] de [ESTATE].
+	</notification>
+	<notification name="AgentsWereAddedToList">
+		[AGENT] fueron añadidos a la lista [LIST_TYPE] de [ESTATE].
+	</notification>
+	<notification name="AgentWasRemovedFromList">
+		[AGENT] fue eliminado de la lista [LIST_TYPE] de [ESTATE].
+	</notification>
+	<notification name="AgentsWereRemovedFromList">
+		[AGENT] fueron eliminados de la lista [LIST_TYPE] de [ESTATE].
+	</notification>
 	<notification name="CanNotChangeAppearanceUntilLoaded">
 		No puedes cambiar la apariencia hasta que no se carguen la ropa y la forma.
 	</notification>
@@ -3164,16 +3188,22 @@ Pulsa Aceptar o Rehusar para coger o no la llamada. Pulsa Ignorar para ignorar a
 		Fallo al conectar a [VOICE_CHANNEL_NAME]; por favor, inténtalo más tarde.  Vas a ser reconectado al chat de voz.
 	</notification>
 	<notification name="VoiceEffectsExpired">
-		Una o más de las transformaciones de voz a las que estás suscrito han caducado.
-[Pulsa aquí [URL]] para renovar la suscripción.
+		Una o más de las transformaciones de voz a las que estás suscrito han caducado. 
+[[URL] Pulsa aquí] para renovar la suscripción. 
+
+Si eres un miembro Premium [[PREMIUM_URL] pulsa aquí] para recibir tu beneficio de transformación de voz.
 	</notification>
 	<notification name="VoiceEffectsExpiredInUse">
-		La transformación de voz activa ha caducado y se ha aplicado tu configuración de voz normal.
-[Pulsa aquí [URL]] para renovar la suscripción.
+		La transformación de voz activa ha caducado y se ha aplicado tu configuración de voz normal. 
+[[URL] Pulsa aquí] para renovar la suscripción. 
+
+Si eres un miembro Premium [[PREMIUM_URL] pulsa aquí] para recibir tu beneficio de transformación de voz.
 	</notification>
 	<notification name="VoiceEffectsWillExpire">
-		Una o más de tus transformaciones de voz caducarán en menos de [INTERVAL] días.
-[Pulsa aquí [URL]] para renovar la suscripción.
+		Una o más de tus transformaciones de voz caducarán en menos de [INTERVAL] días. 
+[[URL] Pulsa aquí] para renovar la suscripción 
+
+Si eres un miembro Premium [[PREMIUM_URL] pulsa aquí] para recibir tu beneficio de transformación de voz.
 	</notification>
 	<notification name="VoiceEffectsNew">
 		Están disponibles nuevas transformaciones de voz.
@@ -3225,6 +3255,9 @@ Por tu seguridad, serán bloqueadas durante unos segundos.
 	<notification name="SnapshotToComputerFailed">
 		Error al guardar la foto en [PATH]: Disco lleno. Se requieren [NEED_MEMORY]KB pero solo hay [FREE_MEMORY]KB libres.
 	</notification>
+	<notification name="SnapshotToLocalDirNotExist">
+		Error al guardar la foto en [PATH]: El directorio no existe.
+	</notification>
 	<notification name="PresetNotSaved">
 		Error al guardar el valor predefinido [NAME].
 	</notification>
diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml
index 5300fce153171b3eccbd31263bae4863d9fcba26..f79d3b94222a1cfe2fa6b028d1c92b8348457c1a 100644
--- a/indra/newview/skins/default/xui/es/panel_login.xml
+++ b/indra/newview/skins/default/xui/es/panel_login.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <panel name="panel_login">
-	<panel.string name="forgot_password_url">http://secondlife.com/account/request.php?lang=es</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php?lang=es
+	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="ui_stack">
 		<layout_panel name="ui_container">
 			<combo_box label="Nombre de usuario" name="username_combo" tool_tip="El nombre de usuario que elegiste al registrarte, como bobsmith12 o Steller Sunshine"/>
@@ -11,8 +16,13 @@
 			</combo_box>
 			<button label="Iniciar sesión" name="connect_btn"/>
 			<check_box label="Recordarme" name="remember_check"/>
-			<text name="forgot_password_text">Contraseña olvidada</text>
+			<text name="forgot_password_text">
+				Contraseña olvidada
+			</text>
 			<combo_box label="Seleccionar cuadrícula" name="server_combo"/>
+			<text name="sign_up_text">
+				Regístrate
+			</text>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_login_first.xml b/indra/newview/skins/default/xui/es/panel_login_first.xml
index 7787c6526f13088b549b13ebd80fd965eeaeac4a..ccb685835191db3b6f4fdfdf5eb4eb33a0c21500 100644
--- a/indra/newview/skins/default/xui/es/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/es/panel_login_first.xml
@@ -3,6 +3,9 @@
 	<panel.string name="forgot_password_url">
 		http://secondlife.com/account/request.php?lang=es
 	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="logo_stack">
 		<layout_panel name="parent_panel2">
 			<layout_stack name="widget_stack">
@@ -14,6 +17,9 @@
 					<text name="forgot_password_text">
 						Contraseña olvidada
 					</text>
+					<text name="sign_up_text">
+						Regístrate
+					</text>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_access.xml b/indra/newview/skins/default/xui/es/panel_region_access.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3177aa2ab24f154053c60954b7be2ab030add4c6
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_region_access.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Acceso" name="Access">
+	<tab_container name="tabs">
+		<panel label="ADMINISTRADORES DE ESTADO" name="estate_managers_panel">
+			<text name="estate_manager_label">
+				Administradores de estado:
+			</text>
+			<name_list name="estate_manager_name_list">
+				<columns label="Nombre" name="name"/>
+			</name_list>
+			<button label="Añadir..." name="add_estate_manager_btn"/>
+			<button label="Quitar..." name="remove_estate_manager_btn"/>
+		</panel>
+		<panel label="PERMITIDO" name="allowed_panel">
+			<panel label="top_panel" name="allowed_search_panel">
+				<filter_editor label="Buscar agentes autorizados" name="allowed_search_input"/>
+			</panel>
+			<text name="allow_resident_label">
+				Siempre autorizado:
+			</text>
+			<name_list name="allowed_avatar_name_list">
+				<columns label="Nombre" name="name"/>
+			</name_list>
+			<button label="Añadir..." name="add_allowed_avatar_btn"/>
+			<button label="Quitar..." name="remove_allowed_avatar_btn"/>
+		</panel>
+		<panel label="GRUPOS AUTORIZADOS:" name="allowed_groups_panel">
+			<panel label="top_panel" name="allowed_group_search_panel">
+				<filter_editor label="Buscar grupos autorizados" name="allowed_group_search_input"/>
+			</panel>
+			<text name="allow_group_label">
+				Grupos siempre autorizados:
+			</text>
+			<name_list name="allowed_group_name_list">
+				<columns label="Nombre" name="name"/>
+			</name_list>
+			<button label="Añadir..." name="add_allowed_group_btn"/>
+			<button label="Quitar..." name="remove_allowed_group_btn"/>
+		</panel>
+		<panel label="PROHIBIDO" name="banned_panel">
+			<panel label="top_panel" name="banned_search_panel">
+				<filter_editor label="Buscar agentes prohibidos" name="banned_search_input"/>
+			</panel>
+			<text name="ban_resident_label">
+				Siempre prohibido:
+			</text>
+			<name_list name="banned_avatar_name_list">
+				<columns label="Nombre" name="name"/>
+				<columns label="Última fecha de inicio de sesión" name="last_login_date"/>
+				<columns label="Fecha de prohibición" name="ban_date"/>
+				<columns label="Prohibido por" name="bannedby"/>
+			</name_list>
+			<button label="Añadir..." name="add_banned_avatar_btn"/>
+			<button label="Quitar..." name="remove_banned_avatar_btn"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_estate.xml b/indra/newview/skins/default/xui/es/panel_region_estate.xml
index ae62976486d11642e79696633f62a74b35fe4aa1..4cfbffb887b4cab85e26aef37712546166b7863d 100644
--- a/indra/newview/skins/default/xui/es/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_estate.xml
@@ -16,7 +16,7 @@
 		(desconocido)
 	</text>
 	<radio_group name="externally_visible_radio">
-		<radio_item label="Permitir únicamente a los residentes y grupos indicados a continuación" name="estate_restricted_access"/>
+		<radio_item label="Permitir únicamente a los residentes y grupos indicados en la pestaña Acceso" name="estate_restricted_access"/>
 		<radio_item label="Cualquiera puede visitar" name="estate_public_access"/>
 	</radio_group>
 	<check_box label="Debe ser mayor de 18" name="limit_age_verified" tool_tip="Para poder acceder a este estado, los Residentes deben ser mayores de 18 años. Para más información, consulta [SUPPORT_SITE]."/>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
index b9c8139f1615b1176632cd328127127af4985c43..2032edfb3a28606e75abadd4289c9796590c74dd 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="object properties" title="Perfil del objeto">
-	<panel.string name="text deed continued">Transferir</panel.string>
-	<panel.string name="text deed">Transferir</panel.string>
-	<panel.string name="text modify info 1">Puedes modificar este objeto</panel.string>
-	<panel.string name="text modify info 2">Puedes modificar estos objetos</panel.string>
-	<panel.string name="text modify info 3">No puedes modificar este objeto</panel.string>
-	<panel.string name="text modify info 4">No puedes modificar estos objetos</panel.string>
-	<panel.string name="text modify info 5">No se puede modificar este objeto a través del límite de una región</panel.string>
-	<panel.string name="text modify info 6">No se pueden modificar estos objetos a través del límite de una región</panel.string>
-	<panel.string name="text modify warning">Este objeto tiene partes enlazadas</panel.string>
-	<panel.string name="Cost Default">Precio: L$</panel.string>
-	<panel.string name="Cost Total">Precio total: L$</panel.string>
-	<panel.string name="Cost Per Unit">Price Per: L$</panel.string>
-	<panel.string name="Cost Mixed">Mixed Price</panel.string>
-	<panel.string name="Sale Mixed">Mixed Sale</panel.string>
+	<panel.string name="text deed continued">
+		Transferir
+	</panel.string>
+	<panel.string name="text deed">
+		Transferir
+	</panel.string>
+	<panel.string name="text modify info 1">
+		Puedes modificar este objeto
+	</panel.string>
+	<panel.string name="text modify info 2">
+		Puedes modificar estos objetos
+	</panel.string>
+	<panel.string name="text modify info 3">
+		No puedes modificar este objeto
+	</panel.string>
+	<panel.string name="text modify info 4">
+		No puedes modificar estos objetos
+	</panel.string>
+	<panel.string name="text modify info 5">
+		No se puede modificar este objeto a través del límite de una región
+	</panel.string>
+	<panel.string name="text modify info 6">
+		No se pueden modificar estos objetos a través del límite de una región
+	</panel.string>
+	<panel.string name="text modify warning">
+		Este objeto tiene partes enlazadas
+	</panel.string>
+	<panel.string name="Cost Default">
+		Precio: L$
+	</panel.string>
+	<panel.string name="Cost Total">
+		Precio total: L$
+	</panel.string>
+	<panel.string name="Cost Per Unit">
+		Price Per: L$
+	</panel.string>
+	<panel.string name="Cost Mixed">
+		Mixed Price
+	</panel.string>
+	<panel.string name="Sale Mixed">
+		Mixed Sale
+	</panel.string>
 	<text name="title" value="Perfil del objeto"/>
 	<text name="where" value="(En el mundo)"/>
 	<panel label="" name="properties_panel">
-		<text name="Name:">Nombre:</text>
-		<text name="Description:">Descripción:</text>
-		<text name="CreatorNameLabel">Creador:</text>
-		<text name="Owner:">Propietario:</text>
-		<text name="Group_label">Grupo:</text>
+		<text name="Name:">
+			Nombre:
+		</text>
+		<text name="Description:">
+			Descripción:
+		</text>
+		<text name="CreatorNameLabel">
+			Creador:
+		</text>
+		<text name="Owner:">
+			Propietario:
+		</text>
+		<text name="Group_label">
+			Grupo:
+		</text>
 		<button name="button set group" tool_tip="Elige un grupo con el que compartir los permisos de este objeto"/>
 		<name_box initial_value="Cargando..." name="Group Name Proxy"/>
 		<button label="Transferir" label_selected="Transferir" name="button deed" tool_tip="La transferencia entrega este objeto con los permisos del próximo propietario. Los objetos compartidos por el grupo pueden ser transferidos por un oficial del grupo."/>
-		<text name="label click action">Pulsa para:</text>
+		<text name="label click action">
+			Pulsa para:
+		</text>
 		<combo_box name="clickaction">
 			<combo_box.item label="Tocarlo (por defecto)" name="Touch/grab(default)"/>
 			<combo_box.item label="Sentarme en el objeto" name="Sitonobject"/>
@@ -33,15 +73,24 @@
 			<combo_box.item label="Pagar el objeto" name="Payobject"/>
 			<combo_box.item label="Abrir" name="Open"/>
 			<combo_box.item label="Zoom" name="Zoom"/>
+			<combo_box.item label="Ninguno" name="None"/>
 		</combo_box>
 		<panel name="perms_inv">
-			<text name="perm_modify">Puedes modificar este objeto</text>
-			<text name="Anyone can:">Cualquiera:</text>
+			<text name="perm_modify">
+				Puedes modificar este objeto
+			</text>
+			<text name="Anyone can:">
+				Cualquiera:
+			</text>
 			<check_box label="Copiar" name="checkbox allow everyone copy"/>
 			<check_box label="Mover" name="checkbox allow everyone move"/>
-			<text name="GroupLabel">Grupo:</text>
+			<text name="GroupLabel">
+				Grupo:
+			</text>
 			<check_box label="Compartir" name="checkbox share with group" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación de este objeto. Debes transferirlo para activar las restricciones según los roles."/>
-			<text name="NextOwnerLabel">Próximo propietario:</text>
+			<text name="NextOwnerLabel">
+				Próximo propietario:
+			</text>
 			<check_box label="Modificar" name="checkbox next owner can modify"/>
 			<check_box label="Copiar" name="checkbox next owner can copy"/>
 			<check_box label="Transferir" name="checkbox next owner can transfer" tool_tip="El próximo propietario puede dar o revender este objeto"/>
@@ -54,13 +103,27 @@
 		</combo_box>
 		<spinner label="Precio: L$" name="Edit Cost"/>
 		<check_box label="Mostrar en la búsqueda" name="search_check" tool_tip="Permitir que la gente vea este objeto en los resultados de la búsqueda"/>
-		<text name="pathfinding_attributes_label">Atributos de pathfinding:</text>
-		<text name="B:">B:</text>
-		<text name="O:">O:</text>
-		<text name="G:">G:</text>
-		<text name="E:">E:</text>
-		<text name="N:">N:</text>
-		<text name="F:">F:</text>
+		<text name="pathfinding_attributes_label">
+			Atributos de pathfinding:
+		</text>
+		<text name="B:">
+			B:
+		</text>
+		<text name="O:">
+			O:
+		</text>
+		<text name="G:">
+			G:
+		</text>
+		<text name="E:">
+			E:
+		</text>
+		<text name="N:">
+			N:
+		</text>
+		<text name="F:">
+			F:
+		</text>
 	</panel>
 	<panel name="button_panel">
 		<button label="Abrir" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index a6bda0dabe5fb5af5821ce8ac1d73bbd12319023..5b1f26e3d4f2db88f78172caaabb7ba55d6b9055 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -2217,6 +2217,18 @@ Si sigues recibiendo el mismo mensaje, solicita ayuda al personal de asistencia
 	<string name="RegionInfoListTypeBannedAgents">
 		Siempre prohibido
 	</string>
+	<string name="RegionInfoAllEstates">
+		todos los estados
+	</string>
+	<string name="RegionInfoManagedEstates">
+		estados administrados
+	</string>
+	<string name="RegionInfoThisEstate">
+		este estado
+	</string>
+	<string name="AndNMore">
+		y [EXTRA_COUNT] más
+	</string>
 	<string name="ScriptLimitsParcelScriptMemory">
 		Memoria de los scripts de la parcela
 	</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_auction.xml b/indra/newview/skins/default/xui/fr/floater_auction.xml
index 6cef2a3591872ada1303487bc41203e3853c1b2e..b1bd2cdd2ff3223acde09d576eaf5bfeb1957035 100644
--- a/indra/newview/skins/default/xui/fr/floater_auction.xml
+++ b/indra/newview/skins/default/xui/fr/floater_auction.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="COMMENCER LA VENTE DE TERRAINS LINDEN">
+<floater name="floater_auction" title="COMMENCER LA VENTE DES TERRAINS LINDEN">
 	<floater.string name="already for sale">
 		Vous ne pouvez pas mettre aux enchères des parcelles déjà en vente.
 	</floater.string>
-	<check_box initial_value="true" label="Inclure le marquage de sélection jaune" name="fence_check"/>
-	<button label="Capture d&apos;écran" label_selected="Capture d&apos;écran" name="snapshot_btn" width="110"/>
-	<button label="Vendre à n&apos;importe qui" label_selected="Vendre à n&apos;importe qui" name="sell_to_anyone_btn"/>
+	<check_box initial_value="true" label="Inclure la cloison jaune de sélection" name="fence_check"/>
+	<button label="Photo" label_selected="Photo" name="snapshot_btn" width="110"/>
+	<button label="Vendre à n’importe qui" label_selected="Vendre à n’importe qui" name="sell_to_anyone_btn"/>
 	<button label="Effacer les paramètres" label_selected="Effacer les paramètres" name="reset_parcel_btn"/>
 	<button label="Commencer les enchères" label_selected="Commencer les enchères" name="start_auction_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index 90c2bde6f40730492b15b135a3c4c4022713ac68..2d4bafff2d031e16c95a9428a86832bee1180c7b 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -198,6 +198,7 @@
 				<combo_box.item label="Payer l&apos;objet" name="Payobject"/>
 				<combo_box.item label="Ouvrir" name="Open"/>
 				<combo_box.item label="Zoomer" name="Zoom"/>
+				<combo_box.item label="Aucun" name="None"/>
 			</combo_box>
 			<check_box label="À vendre :" name="checkbox for sale"/>
 			<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 185820fb6339b8406658684289475c69be15b6e2..49cbd0df4777f18f98d0eedab44a0e84ea9bcc7c 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -12,6 +12,7 @@
 		<menu_item_call label="Contrôles de la caméra..." name="Camera Controls"/>
 		<menu label="Déplacement" name="Movement">
 			<menu_item_call label="M&apos;asseoir" name="Sit Down Here"/>
+			<menu_item_call label="Se lever" name="Stand up"/>
 			<menu_item_check label="Voler" name="Fly"/>
 			<menu_item_check label="Toujours courir" name="Always Run"/>
 			<menu_item_call label="Arrêter mon animation" name="Stop Animating My Avatar"/>
@@ -296,6 +297,7 @@
 			<menu_item_check label="Zone de texture" name="Texture Area"/>
 			<menu_item_check label="Zone de face" name="Face Area"/>
 			<menu_item_check label="Infos sur le niveau de détail" name="LOD Info"/>
+			<menu_item_check label="Nombre de triangles" name="Triangle Count"/>
 			<menu_item_check label="File d&apos;attente pour la construction" name="Build Queue"/>
 			<menu_item_check label="Lumières" name="Lights"/>
 			<menu_item_check label="Particules" name="Particles"/>
@@ -408,6 +410,7 @@
 			<menu_item_check label="Afficher le squelette de collision" name="Show Collision Skeleton"/>
 			<menu_item_check label="Voir les os" name="Show Bones"/>
 			<menu_item_check label="Afficher la cible de l&apos;avatar" name="Display Agent Target"/>
+			<menu_item_check label="Afficher les étendues d&apos;imposteur" name="Show Impostor Extents"/>
 			<menu_item_call label="Dump Attachments" name="Dump Attachments"/>
 			<menu_item_call label="Débogage des textures des avatars" name="Debug Avatar Textures"/>
 			<menu_item_call label="Dump Local Textures" name="Dump Local Textures"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 7fbea9c0ae70f65d76a89e0b8cf8a3a1c8467542..67d0421c67700a8a0ca6fcd3feaef8d1fa6752be 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -1567,6 +1567,30 @@ Dépasse la limite fixée à [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS].
 	<notification name="ProblemAddingEstateManagerBanned">
 		Impossible d’ajouter un résident banni à la liste des gérants de domaine.
 	</notification>
+	<notification name="ProblemBanningEstateManager">
+		Impossible d&apos;ajouter le gérant de domaine à la liste interdite.
+	</notification>
+	<notification name="GroupIsAlreadyInList">
+		&lt;nolink&gt;[GROUP]&lt;/nolink&gt; est déjà dans la liste des groupes autorisés.
+	</notification>
+	<notification name="AgentIsAlreadyInList">
+		[AGENT] est déjà dans votre liste [LIST_TYPE].
+	</notification>
+	<notification name="AgentsAreAlreadyInList">
+		[AGENT] sont déjà dans votre liste [LIST_TYPE].
+	</notification>
+	<notification name="AgentWasAddedToList">
+		[AGENT] a été ajouté à la liste [LIST_TYPE] de [ESTATE].
+	</notification>
+	<notification name="AgentsWereAddedToList">
+		[AGENT] ont été ajoutéq à la liste [LIST_TYPE] de [ESTATE].
+	</notification>
+	<notification name="AgentWasRemovedFromList">
+		[AGENT] a été supprimé de la liste [LIST_TYPE] de [ESTATE].
+	</notification>
+	<notification name="AgentsWereRemovedFromList">
+		[AGENT] ont été supprimés de la liste [LIST_TYPE] de [ESTATE].
+	</notification>
 	<notification name="CanNotChangeAppearanceUntilLoaded">
 		Impossible de changer d&apos;apparence jusqu&apos;à ce que les habits et la silhouette soient chargés.
 	</notification>
@@ -3165,16 +3189,22 @@ Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignore
 		Échec de la connexion avec [VOICE_CHANNEL_NAME], veuillez réessayer ultérieurement.  Vous allez maintenant être reconnecté(e) au chat vocal près de vous.
 	</notification>
 	<notification name="VoiceEffectsExpired">
-		Au moins l&apos;un des effets de voix auxquels vous êtes abonné a expiré.
-[[URL] Cliquez ici] pour renouveler votre abonnement.
+		Au moins l&apos;un des effets de voix auxquels vous êtes abonné a expiré. 
+[[URL] Cliquez ici] pour renouveler votre abonnement. 
+
+Si vous êtes un membre Premium,  [[PREMIUM_URL] cliquez ici] pour recevoir votre effet de voix.
 	</notification>
 	<notification name="VoiceEffectsExpiredInUse">
 		L&apos;effet de voix actif a expiré. Vos paramètres de voix normaux ont été rétablis.
-[[URL] Cliquez ici] pour renouveler votre abonnement.
+[[URL] Cliquez ici] pour renouveler votre abonnement. 
+
+Si vous êtes un membre Premium, [[PREMIUM_URL] cliquez ici] pour recevoir votre effet de voix.
 	</notification>
 	<notification name="VoiceEffectsWillExpire">
-		Au moins l&apos;un de vos effets de voix expirera dans moins de [INTERVAL] jours.
-[[URL] Cliquez ici] pour renouveler votre abonnement.
+		Au moins l&apos;un de vos effets de voix expirera dans moins de [INTERVAL] jours.  
+[[URL] Cliquez ici] pour renouveler votre abonnement. 
+
+Si vous êtes un membre Premium,  [[PREMIUM_URL] cliquez ici] pour recevoir votre effet de voix.
 	</notification>
 	<notification name="VoiceEffectsNew">
 		De nouveaux effets de voix sont disponibles !
@@ -3226,6 +3256,9 @@ Elles vont être bloquées pendant quelques secondes pour votre sécurité.
 	<notification name="SnapshotToComputerFailed">
 		Échec d’enregistrement de la photo dans [PATH] : Le disque est plein. [NEED_MEMORY]KB est nécessaire mais l&apos;espace libre est de seulement [FREE_MEMORY]KB.
 	</notification>
+	<notification name="SnapshotToLocalDirNotExist">
+		Échec d’enregistrement de la photo dans [PATH] : Le répertoire n&apos;existe pas.
+	</notification>
 	<notification name="PresetNotSaved">
 		Erreur d’enregistrement du préréglage [NAME].
 	</notification>
diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml
index 2b8249c8a95a2495347190810e8e9cecf32a451c..a4f0ff7061378fec83df375592b6dc208996b9e2 100644
--- a/indra/newview/skins/default/xui/fr/panel_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_login.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <panel name="panel_login">
-	<panel.string name="forgot_password_url">http://secondlife.com/account/request.php?lang=fr</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php?lang=fr
+	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="ui_stack">
 		<layout_panel name="ui_container">
 			<combo_box label="Nom d&apos;utilisateur" name="username_combo" tool_tip="Nom d&apos;utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/>
@@ -11,8 +16,13 @@
 			</combo_box>
 			<button label="Connexion" name="connect_btn"/>
 			<check_box label="Mémoriser mes informations" name="remember_check"/>
-			<text name="forgot_password_text">Mot de passe oublié</text>
-			<combo_box label="Sélectionner la grille" name="server_combo" left_pad="20"/>
+			<text name="forgot_password_text">
+				Mot de passe oublié
+			</text>
+			<combo_box label="Sélectionner la grille" left_pad="20" name="server_combo"/>
+			<text name="sign_up_text">
+				S&apos;inscrire
+			</text>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_login_first.xml b/indra/newview/skins/default/xui/fr/panel_login_first.xml
index 9534ac7b83e4082fb41addf5141c40a4dbab5be7..8f40d0230ce904cf28fbad2d646679752338f8dc 100644
--- a/indra/newview/skins/default/xui/fr/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/fr/panel_login_first.xml
@@ -3,6 +3,9 @@
 	<panel.string name="forgot_password_url">
 		http://secondlife.com/account/request.php?lang=fr
 	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="logo_stack">
 		<layout_panel name="parent_panel2">
 			<layout_stack name="widget_stack">
@@ -10,10 +13,13 @@
 					<combo_box label="Nom d&apos;utilisateur" name="username_combo" tool_tip="Nom d&apos;utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/>
 					<line_editor label="Mot de passe" name="password_edit"/>
 					<button label="Connexion" name="connect_btn"/>
-					<check_box label="Mémoriser mes informations" name="remember_check" font="SansSerifSmall"/>
+					<check_box font="SansSerifSmall" label="Mémoriser mes informations" name="remember_check"/>
 					<text name="forgot_password_text">
 						Mot de passe oublié
 					</text>
+					<text name="sign_up_text">
+						S&apos;inscrire
+					</text>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_access.xml b/indra/newview/skins/default/xui/fr/panel_region_access.xml
new file mode 100644
index 0000000000000000000000000000000000000000..db77f3b8f145ce57e9ba84b91b441c1b9543aba0
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_region_access.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="ACCÈS" name="Access">
+	<tab_container name="tabs">
+		<panel label="GÉRANTS DU DOMAINE" name="estate_managers_panel">
+			<text name="estate_manager_label">
+				Gérants du domaine :
+			</text>
+			<name_list name="estate_manager_name_list">
+				<columns label="Nom" name="name"/>
+			</name_list>
+			<button label="Ajouter..." name="add_estate_manager_btn"/>
+			<button label="Supprimer..." name="remove_estate_manager_btn"/>
+		</panel>
+		<panel label="AUTORISÉ" name="allowed_panel">
+			<panel label="top_panel" name="allowed_search_panel">
+				<filter_editor label="Rechercher des agents autorisés" name="allowed_search_input"/>
+			</panel>
+			<text name="allow_resident_label">
+				Toujours autorisé :
+			</text>
+			<name_list name="allowed_avatar_name_list">
+				<columns label="Nom" name="name"/>
+			</name_list>
+			<button label="Ajouter..." name="add_allowed_avatar_btn"/>
+			<button label="Supprimer..." name="remove_allowed_avatar_btn"/>
+		</panel>
+		<panel label="GROUPES AUTORISÉS" name="allowed_groups_panel">
+			<panel label="top_panel" name="allowed_group_search_panel">
+				<filter_editor label="Rechercher des groupes autorisés" name="allowed_group_search_input"/>
+			</panel>
+			<text name="allow_group_label">
+				Groupes toujours autorisés :
+			</text>
+			<name_list name="allowed_group_name_list">
+				<columns label="Nom" name="name"/>
+			</name_list>
+			<button label="Ajouter..." name="add_allowed_group_btn"/>
+			<button label="Supprimer" name="remove_allowed_group_btn"/>
+		</panel>
+		<panel label="INTERDIT" name="banned_panel">
+			<panel label="top_panel" name="banned_search_panel">
+				<filter_editor label="Rechercher des agents interdits" name="banned_search_input"/>
+			</panel>
+			<text name="ban_resident_label">
+				Toujours interdit :
+			</text>
+			<name_list name="banned_avatar_name_list">
+				<columns label="Nom" name="name"/>
+				<columns label="Date de la dernière connexion" name="last_login_date"/>
+				<columns label="Date d&apos;interdiction" name="ban_date"/>
+				<columns label="Interdit par" name="bannedby"/>
+			</name_list>
+			<button label="Ajouter..." name="add_banned_avatar_btn"/>
+			<button label="Supprimer..." name="remove_banned_avatar_btn"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_estate.xml b/indra/newview/skins/default/xui/fr/panel_region_estate.xml
index 9bf3fdfc96e861d1bbabcaaee8b081acd0ad6f35..0987ef3fa35f661b99e607d5f574dfa65146a694 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_estate.xml
@@ -18,7 +18,7 @@ domaine.
 		(inconnu)
 	</text>
 	<radio_group name="externally_visible_radio">
-		<radio_item label="Autoriser uniquement les résidents et les groupes indiqués ci-dessous" name="estate_restricted_access"/>
+		<radio_item label="Autoriser uniquement les résidents et les groupes indiqués dans l&apos;onglet Accès" name="estate_restricted_access"/>
 		<radio_item label="Visite ouverte à tous" name="estate_public_access"/>
 	</radio_group>
 	<check_box label="Doit avoir plus de 18 ans" name="limit_age_verified" tool_tip="Pour accéder à ce domaine, les résidents doivent avoir au moins 18 ans. Consultez le [SUPPORT_SITE] pour plus d&apos;informations."/>
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml
index f6b4f2804678cd833d8d745a2ef7337a9b0bc60f..9064da2a5f21fd11b2484b4bf3c29d059c69479d 100644
--- a/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="object properties" title="Profil de l&apos;objet">
-	<panel.string name="text deed continued">Céder</panel.string>
-	<panel.string name="text deed">Céder</panel.string>
-	<panel.string name="text modify info 1">Vous pouvez modifier cet objet</panel.string>
-	<panel.string name="text modify info 2">Vous pouvez modifier ces objets</panel.string>
-	<panel.string name="text modify info 3">Vous ne pouvez pas modifier cet objet</panel.string>
-	<panel.string name="text modify info 4">Vous ne pouvez pas modifier ces objets</panel.string>
-	<panel.string name="text modify info 5">Impossible de modifier cet objet au-delà de la frontière d&apos;une région</panel.string>
-	<panel.string name="text modify info 6">Impossible de modifier ces objets au-delà de la frontière d&apos;une région</panel.string>
-	<panel.string name="text modify warning">Cet objet comprend des parties liées</panel.string>
-	<panel.string name="Cost Default">Prix : L$</panel.string>
-	<panel.string name="Cost Total">Prix total : L$</panel.string>
-	<panel.string name="Cost Per Unit">Prix par : L$</panel.string>
-	<panel.string name="Cost Mixed">Prix mixte</panel.string>
-	<panel.string name="Sale Mixed">Vente mixte</panel.string>
+	<panel.string name="text deed continued">
+		Céder
+	</panel.string>
+	<panel.string name="text deed">
+		Céder
+	</panel.string>
+	<panel.string name="text modify info 1">
+		Vous pouvez modifier cet objet
+	</panel.string>
+	<panel.string name="text modify info 2">
+		Vous pouvez modifier ces objets
+	</panel.string>
+	<panel.string name="text modify info 3">
+		Vous ne pouvez pas modifier cet objet
+	</panel.string>
+	<panel.string name="text modify info 4">
+		Vous ne pouvez pas modifier ces objets
+	</panel.string>
+	<panel.string name="text modify info 5">
+		Impossible de modifier cet objet au-delà de la frontière d&apos;une région
+	</panel.string>
+	<panel.string name="text modify info 6">
+		Impossible de modifier ces objets au-delà de la frontière d&apos;une région
+	</panel.string>
+	<panel.string name="text modify warning">
+		Cet objet comprend des parties liées
+	</panel.string>
+	<panel.string name="Cost Default">
+		Prix : L$
+	</panel.string>
+	<panel.string name="Cost Total">
+		Prix total : L$
+	</panel.string>
+	<panel.string name="Cost Per Unit">
+		Prix par : L$
+	</panel.string>
+	<panel.string name="Cost Mixed">
+		Prix mixte
+	</panel.string>
+	<panel.string name="Sale Mixed">
+		Vente mixte
+	</panel.string>
 	<text name="title" value="Profil de l&apos;objet"/>
 	<text name="where" value="(dans Second Life)"/>
 	<panel label="" name="properties_panel">
-		<text name="Name:">Nom :</text>
-		<text name="Description:">Description :</text>
-		<text name="CreatorNameLabel">Créateur :</text>
-		<text name="Owner:">Propriétaire :</text>
-		<text name="Group_label">Groupe :</text>
+		<text name="Name:">
+			Nom :
+		</text>
+		<text name="Description:">
+			Description :
+		</text>
+		<text name="CreatorNameLabel">
+			Créateur :
+		</text>
+		<text name="Owner:">
+			Propriétaire :
+		</text>
+		<text name="Group_label">
+			Groupe :
+		</text>
 		<button name="button set group" tool_tip="Choisir un groupe pour partager les droits relatifs à cet objet"/>
 		<name_box initial_value="Chargement…" name="Group Name Proxy"/>
 		<button label="Céder" label_selected="Céder" name="button deed" tool_tip="En cédant un objet, vous donnez aussi les droits au prochain propriétaire. Seul un officier peut céder les objets partagés d&apos;un groupe."/>
-		<text name="label click action">Cliquer pour :</text>
+		<text name="label click action">
+			Cliquer pour :
+		</text>
 		<combo_box name="clickaction">
 			<combo_box.item label="Toucher (défaut)" name="Touch/grab(default)"/>
 			<combo_box.item label="S&apos;asseoir sur l&apos;objet" name="Sitonobject"/>
@@ -33,15 +73,24 @@
 			<combo_box.item label="Payer l&apos;objet" name="Payobject"/>
 			<combo_box.item label="Ouvrir" name="Open"/>
 			<combo_box.item label="Zoom" name="Zoom"/>
+			<combo_box.item label="Aucun" name="None"/>
 		</combo_box>
 		<panel name="perms_inv">
-			<text name="perm_modify">Vous pouvez modifier cet objet</text>
-			<text name="Anyone can:">N&apos;importe qui :</text>
+			<text name="perm_modify">
+				Vous pouvez modifier cet objet
+			</text>
+			<text name="Anyone can:">
+				N&apos;importe qui :
+			</text>
 			<check_box label="Copier" name="checkbox allow everyone copy"/>
 			<check_box label="Bouger" name="checkbox allow everyone move"/>
-			<text name="GroupLabel">Groupe :</text>
+			<text name="GroupLabel">
+				Groupe :
+			</text>
 			<check_box label="Partager" name="checkbox share with group" tool_tip="Autoriser tous les membres du groupe choisi à partager vos droits de modification pour cet objet. Pour activer les restrictions de rôles, vous devez d&apos;abord cliquer sur Céder."/>
-			<text name="NextOwnerLabel">Le prochain propriétaire :</text>
+			<text name="NextOwnerLabel">
+				Le prochain propriétaire :
+			</text>
 			<check_box label="Modifier" name="checkbox next owner can modify"/>
 			<check_box label="Copier" name="checkbox next owner can copy"/>
 			<check_box label="Transférer" name="checkbox next owner can transfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet"/>
@@ -54,13 +103,27 @@
 		</combo_box>
 		<spinner label="Prix : L$" name="Edit Cost"/>
 		<check_box label="Afficher avec la recherche" name="search_check" tool_tip="Permettre aux autres résidents de voir cet objet dans les résultats de recherche"/>
-		<text name="pathfinding_attributes_label">Attributs de recherche de chemin :</text>
-		<text name="B:">B :</text>
-		<text name="O:">O :</text>
-		<text name="G:">G :</text>
-		<text name="E:">E :</text>
-		<text name="N:">N :</text>
-		<text name="F:">F :</text>
+		<text name="pathfinding_attributes_label">
+			Attributs de recherche de chemin :
+		</text>
+		<text name="B:">
+			B :
+		</text>
+		<text name="O:">
+			O :
+		</text>
+		<text name="G:">
+			G :
+		</text>
+		<text name="E:">
+			E :
+		</text>
+		<text name="N:">
+			N :
+		</text>
+		<text name="F:">
+			F :
+		</text>
 	</panel>
 	<panel name="button_panel">
 		<button label="Ouvrir" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 5cd3c563bfde3b1505e7cb0ea6f00c136630ef01..5cf22ff34868cd20d62f5f33accdfd75dd014f01 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -2240,6 +2240,18 @@ Si vous continuez de recevoir ce message, contactez l’assistance Second Life 
 	<string name="RegionInfoListTypeBannedAgents">
 		Toujours interdit
 	</string>
+	<string name="RegionInfoAllEstates">
+		tous les domaines
+	</string>
+	<string name="RegionInfoManagedEstates">
+		domaines gérés
+	</string>
+	<string name="RegionInfoThisEstate">
+		ce domaine
+	</string>
+	<string name="AndNMore">
+		et [EXTRA_COUNT] plus
+	</string>
 	<string name="ScriptLimitsParcelScriptMemory">
 		Mémoire des scripts de parcelles
 	</string>
diff --git a/indra/newview/skins/default/xui/it/floater_auction.xml b/indra/newview/skins/default/xui/it/floater_auction.xml
index 4cad8b744d10bffaf553d3408e07cd941eafe676..ea524a153c43cc1098263e026155f111b33f7173 100644
--- a/indra/newview/skins/default/xui/it/floater_auction.xml
+++ b/indra/newview/skins/default/xui/it/floater_auction.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="floater_auction" title="INIZIA LA VENDITA DI TERRENO LINDEN">
 	<floater.string name="already for sale">
-		Non puoi mettere in asta terreni che sono già in vendita.
+		Non puoi mettere all’asta terreni che sono già in vendita.
 	</floater.string>
-	<check_box initial_value="true" label="Includi barriere di selezione gialle" name="fence_check"/>
-	<button label="Fotografia" label_selected="Fotografia" name="snapshot_btn"/>
+	<check_box initial_value="true" label="Includi la parte selezionata in giallo" name="fence_check"/>
+	<button label="Istantanea" label_selected="Istantanea" name="snapshot_btn"/>
 	<button label="Vendi a chiunque" label_selected="Vendi a chiunque" name="sell_to_anyone_btn"/>
 	<button label="Cancella impostazioni" label_selected="Cancella impostazioni" name="reset_parcel_btn"/>
 	<button label="Inizia l&apos;asta" label_selected="Inizia l&apos;asta" name="start_auction_btn"/>
diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml
index 1ebb45d02be87bfcba72b6aceca0e59cf44d6cfc..c81c3736b40fb4dd78e54aaa942c97d095a77a4f 100644
--- a/indra/newview/skins/default/xui/it/floater_tools.xml
+++ b/indra/newview/skins/default/xui/it/floater_tools.xml
@@ -205,6 +205,7 @@
 				<combo_box.item label="Paga l&apos;oggetto" name="Payobject"/>
 				<combo_box.item label="Apri" name="Open"/>
 				<combo_box.item label="Ingrandisci" name="Zoom"/>
+				<combo_box.item label="Nessuno" name="None"/>
 			</combo_box>
 			<check_box label="In vendita:" name="checkbox for sale"/>
 			<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index c3f48c096352ecb224a8b3f1dfddd8171180156b..597fe9c2e480c5cb2ea1d519bb19b0ee84e91a4d 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -12,6 +12,7 @@
 		<menu_item_call label="Controlli fotocamera..." name="Camera Controls"/>
 		<menu label="Spostamento" name="Movement">
 			<menu_item_call label="Siedi" name="Sit Down Here"/>
+			<menu_item_call label="Alzati" name="Stand up"/>
 			<menu_item_check label="Vola" name="Fly"/>
 			<menu_item_check label="Corri sempre" name="Always Run"/>
 			<menu_item_call label="Ferma animazione" name="Stop Animating My Avatar"/>
@@ -281,6 +282,7 @@
 			<menu_item_check label="Forme fisica" name="Physics Shapes"/>
 			<menu_item_check label="Aggiorna tipo" name="Update Type"/>
 			<menu_item_check label="Info livello dettaglio" name="LOD Info"/>
+			<menu_item_check label="Conteggio triangolo" name="Triangle Count"/>
 			<menu_item_check label="Crea coda" name="Build Queue"/>
 			<menu_item_check label="Particelle" name="Particles"/>
 			<menu_item_check label="Giunti" name="Joints"/>
@@ -355,6 +357,7 @@
 			<menu_item_check label="Mostra schemi collisione" name="Show Collision Skeleton"/>
 			<menu_item_check label="Mostra ossa" name="Show Bones"/>
 			<menu_item_check label="Mostra bersaglio" name="Display Agent Target"/>
+			<menu_item_check label="Mostra Impostor Extents" name="Show Impostor Extents"/>
 			<menu_item_call label="Debug texture dell&apos;avatar" name="Debug Avatar Textures"/>
 		</menu>
 		<menu_item_check label="Texture HTTP" name="HTTP Textures"/>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index 1baf8e1b873a638159de9e24bb1431b959557315..f64b6522047362ee24caa2dc5aa883dec4a10ca9 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -1569,6 +1569,30 @@ Eccede il [MAX_AGENTS] [LIST_TYPE] limite di [NUM_EXCESS].
 	<notification name="ProblemAddingEstateManagerBanned">
 		Impossibile aggiungere il residente espulso alla lista dei gestori delle proprietà.
 	</notification>
+	<notification name="ProblemBanningEstateManager">
+		Impossibile aggiunere il gestore della proprietà immobiliare [AGENT] all’elenco degli espulsi.
+	</notification>
+	<notification name="GroupIsAlreadyInList">
+		&lt;nolink&gt;[GROUP]&lt;/nolink&gt; si trova già nell’elenco dei Gruppi ammessi.
+	</notification>
+	<notification name="AgentIsAlreadyInList">
+		[AGENT] è gia nel tuo elenco [LIST_TYPE].
+	</notification>
+	<notification name="AgentsAreAlreadyInList">
+		[AGENT] è gia nel tuo elenco [LIST_TYPE].
+	</notification>
+	<notification name="AgentWasAddedToList">
+		[AGENT] è stato aggiunto all’elenco [LIST_TYPE] di [ESTATE].
+	</notification>
+	<notification name="AgentsWereAddedToList">
+		[AGENT] è stato aggiunto all’elenco [LIST_TYPE] di [ESTATE].
+	</notification>
+	<notification name="AgentWasRemovedFromList">
+		[AGENT] è stato rimosso dall’elenco [LIST_TYPE] di [ESTATE].
+	</notification>
+	<notification name="AgentsWereRemovedFromList">
+		[AGENT] è stato rimosso dall’elenco [LIST_TYPE] di [ESTATE].
+	</notification>
 	<notification name="CanNotChangeAppearanceUntilLoaded">
 		Impossibile cambiare l&apos;aspetto fisico finchè gli abiti e i vestiti non sono caricati.
 	</notification>
@@ -1872,7 +1896,7 @@ Cambierà migliaia di regioni e produrrà seri problemi ai vari server.
 		<usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà" yestext="Questa proprietà"/>
 	</notification>
 	<notification label="Seleziona la proprietà" name="EstateBannedAgentRemove">
-		Vuoi rimuovere questo Residente dall’elenco degli espulsi solo per questa proprietà immobiliare oppure per [ALL_ESTATES]?
+		Rimuovi questo Residente dall’elenco degli espulsi solo per questa proprietà immobiliare oppure per [ALL_ESTATES]?
 		<usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà" yestext="Questa proprietà"/>
 	</notification>
 	<notification label="Seleziona la proprietà" name="EstateManagerAdd">
@@ -3168,16 +3192,22 @@ Clicca su Accetta per unirti alla chat oppure su Declina per declinare l&apos;in
 		Collegamento a [VOICE_CHANNEL_NAME] non riuscito, riprova più tardi.  Verrai ora ricollegato alla chat vocale nei dintorni.
 	</notification>
 	<notification name="VoiceEffectsExpired">
-		Almeno una delle manipolazioni vocali alle quali sei iscritto è scaduta.
-[[URL] Fai clic qui] per rinnovare l&apos;abbonamento.
+		Almeno una delle manipolazioni vocali alle quali sei iscritto è scaduta. 
+[[URL] Fai clic qui] per rinnovare l&apos;abbonamento. 
+
+Se sei un membro Premium, [[PREMIUM_URL] fai clic qui] per ricevere in regalo la manipolazione vocale.
 	</notification>
 	<notification name="VoiceEffectsExpiredInUse">
-		Poiché la manipolazione vocale attiva è scaduta, sono state applicate le tue impostazioni normali.
-[[URL] Fai clic qui] per rinnovare l&apos;abbonamento.
+		Poiché la manipolazione vocale attiva è scaduta, sono state applicate le tue impostazioni normali. 
+[[URL] Fai clic qui] per rinnovare l&apos;abbonamento. 
+
+Se sei un membro Premium, [[PREMIUM_URL] fai clic qui] per ricevere in regalo la manipolazione vocale.
 	</notification>
 	<notification name="VoiceEffectsWillExpire">
-		Almeno una delle tue manipolazioni vocali scadrà tra meno di [INTERVAL] giorni.
-[[URL] Fai clic qui] per rinnovare l&apos;abbonamento.
+		Almeno una delle tue manipolazioni vocali scadrà tra meno di [INTERVAL] giorni. 
+[[URL] Fai clic qui] per rinnovare l&apos;abbonamento. 
+
+Se sei un membro Premium, [[PREMIUM_URL] fai clic qui] per ricevere in regalo la manipolazione vocale.
 	</notification>
 	<notification name="VoiceEffectsNew">
 		Sono disponibili nuove manipolazioni vocali.
@@ -3229,6 +3259,9 @@ Per sicurezza, verranno bloccati per alcuni secondi.
 	<notification name="SnapshotToComputerFailed">
 		Salvataggio istantanea in [PATH] non riuscito: Il disco è pieno. Sono necessari [NEED_MEMORY] KB ma sono disponibili solo [FREE_MEMORY] KB .
 	</notification>
+	<notification name="SnapshotToLocalDirNotExist">
+		Salvataggio istantanea in [PATH] non riuscito: La cartella non esiste.
+	</notification>
 	<notification name="PresetNotSaved">
 		Errore durante il salvataggio del valore predefinito [NAME].
 	</notification>
diff --git a/indra/newview/skins/default/xui/it/panel_login.xml b/indra/newview/skins/default/xui/it/panel_login.xml
index 6c1777163cd56f860498fd45fa99d27db64faf4b..228bebd92ae3aa620869f9df99c7489636d58c46 100644
--- a/indra/newview/skins/default/xui/it/panel_login.xml
+++ b/indra/newview/skins/default/xui/it/panel_login.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <panel name="panel_login">
-	<panel.string name="forgot_password_url">http://secondlife.com/account/request.php?lang=it</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php?lang=it
+	</panel.string>
+	<panel.string name="sign_up_url">
+		http://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="ui_stack">
 		<layout_panel name="ui_container">
 			<combo_box label="Nome utente" name="username_combo" tool_tip="Il nome utente che hai scelto durante la registrazione, come roby12 o Stella Solare"/>
@@ -11,8 +16,13 @@
 			</combo_box>
 			<button label="Accedi" name="connect_btn"/>
 			<check_box label="Ricordami" name="remember_check"/>
-			<text name="forgot_password_text">Password dimenticata</text>
+			<text name="forgot_password_text">
+				Password dimenticata
+			</text>
 			<combo_box label="Seleziona griglia" name="server_combo"/>
+			<text name="sign_up_text">
+				Registrati
+			</text>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_login_first.xml b/indra/newview/skins/default/xui/it/panel_login_first.xml
index 6f120a17fca4db15e9bba21ed1a16f4e74f377f8..5b04fd411a82ec332a892bbf69970c9582e66cdd 100644
--- a/indra/newview/skins/default/xui/it/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/it/panel_login_first.xml
@@ -3,6 +3,9 @@
 	<panel.string name="forgot_password_url">
 		http://secondlife.com/account/request.php?lang=it
 	</panel.string>
+	<panel.string name="sign_up_url">
+		http://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="logo_stack">
 		<layout_panel name="parent_panel2">
 			<layout_stack name="widget_stack">
@@ -14,6 +17,9 @@
 					<text name="forgot_password_text">
 						Password dimenticata
 					</text>
+					<text name="sign_up_text">
+						Registrati
+					</text>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_access.xml b/indra/newview/skins/default/xui/it/panel_region_access.xml
new file mode 100644
index 0000000000000000000000000000000000000000..06ab2b40e79850bbf6d236ea62bc08266bb373d7
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_region_access.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="ACCESSO" name="Access">
+	<tab_container name="tabs">
+		<panel label="GESTORI DELLE PROPRIETÀ IMMOBILIARI" name="estate_managers_panel">
+			<text name="estate_manager_label">
+				Gestori delle proprietà immobiliari
+			</text>
+			<name_list name="estate_manager_name_list">
+				<columns label="Nome" name="name"/>
+			</name_list>
+			<button label="Aggiungi..." name="add_estate_manager_btn"/>
+			<button label="Rimuovi..." name="remove_estate_manager_btn"/>
+		</panel>
+		<panel label="AMMESSO" name="allowed_panel">
+			<panel label="top_panel" name="allowed_search_panel">
+				<filter_editor label="Cerca agenti ammessi" name="allowed_search_input"/>
+			</panel>
+			<text name="allow_resident_label">
+				Sempre ammesso:
+			</text>
+			<name_list name="allowed_avatar_name_list">
+				<columns label="Nome" name="name"/>
+			</name_list>
+			<button label="Aggiungi..." name="add_allowed_avatar_btn"/>
+			<button label="Rimuovi..." name="remove_allowed_avatar_btn"/>
+		</panel>
+		<panel label="GRUPPI AMMESSI" name="allowed_groups_panel">
+			<panel label="top_panel" name="allowed_group_search_panel">
+				<filter_editor label="Cerca gruppi consentiti" name="allowed_group_search_input"/>
+			</panel>
+			<text name="allow_group_label">
+				Gruppi sempre consentiti:
+			</text>
+			<name_list name="allowed_group_name_list">
+				<columns label="Nome" name="name"/>
+			</name_list>
+			<button label="Aggiungi..." name="add_allowed_group_btn"/>
+			<button label="Rimuovi..." name="remove_allowed_group_btn"/>
+		</panel>
+		<panel label="ESPULSI" name="banned_panel">
+			<panel label="top_panel" name="banned_search_panel">
+				<filter_editor label="Cerca agenti espulsi" name="banned_search_input"/>
+			</panel>
+			<text name="ban_resident_label">
+				Sempre espulsi:
+			</text>
+			<name_list name="banned_avatar_name_list">
+				<columns label="Nome" name="name"/>
+				<columns label="Ultima data di accesso" name="last_login_date"/>
+				<columns label="Data espulsione" name="ban_date"/>
+				<columns label="Espulso da" name="bannedby"/>
+			</name_list>
+			<button label="Aggiungi..." name="add_banned_avatar_btn"/>
+			<button label="Rimuovi..." name="remove_banned_avatar_btn"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_estate.xml b/indra/newview/skins/default/xui/it/panel_region_estate.xml
index 525458d1632e939c120d5ccc7d74ac6290e629b6..b4422e4c609598059f2560d5b48e92cc3376a021 100644
--- a/indra/newview/skins/default/xui/it/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_estate.xml
@@ -16,7 +16,7 @@
 		(sconosciuto)
 	</text>
 	<radio_group name="externally_visible_radio">
-		<radio_item label="Consenti solo residenti e gruppi elencati qui sotto" name="estate_restricted_access"/>
+		<radio_item label="Consenti accesso solo ai residenti e ai gruppi elencati nella scheda di Accesso" name="estate_restricted_access"/>
 		<radio_item label="Chiunque può visitare" name="estate_public_access"/>
 	</radio_group>
 	<check_box label="È necessario avere più di 18 anni" name="limit_age_verified" tool_tip="Per poter visitare questa proprietà immobiliare i Residenti devono avere almeno 18 anni. Vedi [SUPPORT_SITE] per maggiori informazioni."/>
@@ -26,10 +26,10 @@
 	<check_box label="Permetti teleport diretto" name="allow_direct_teleport"/>
 	<button label="Applica" name="apply_btn"/>
 	<text name="estate_manager_label">
-		Gestori delle proprietà immobiliari:
+		Manager delle proprietà:
 	</text>
 	<text name="allow_resident_label">
-		Sempre consentiti:
+		Sempre consentito:
 	</text>
 	<button label="Aggiungi..." name="add_estate_manager_btn"/>
 	<button label="Rimuovi..." name="remove_estate_manager_btn"/>
@@ -39,7 +39,7 @@
 		Gruppi sempre consentiti:
 	</text>
 	<text name="ban_resident_label">
-		Sempre espulsi:
+		Sempre escluso:
 	</text>
 	<button label="Aggiungi..." name="add_allowed_group_btn"/>
 	<button label="Rimuovi..." name="remove_allowed_group_btn"/>
diff --git a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
index aabefd7d3c97bbe4ce31e7a267cecddc6ec60204..72a89c77ab2ca0173bba210456285dfb5230e929 100644
--- a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="object properties" title="Profilo dell&apos;oggetto">
-	<panel.string name="text deed continued">Cessione</panel.string>
-	<panel.string name="text deed">Cessione</panel.string>
-	<panel.string name="text modify info 1">Tu puoi modificare questo oggetto</panel.string>
-	<panel.string name="text modify info 2">Tu puoi modificare questi oggetti</panel.string>
-	<panel.string name="text modify info 3">Non puoi modificare questo oggetto</panel.string>
-	<panel.string name="text modify info 4">Non puoi modificare questi oggetti</panel.string>
-	<panel.string name="text modify info 5">Questo oggetto non può essere modificato attraverso il confine di una regione</panel.string>
-	<panel.string name="text modify info 6">Questi oggetti non possono essere modificati attraverso il confine di una regione</panel.string>
-	<panel.string name="text modify warning">Questo oggetto ha parti collegate</panel.string>
-	<panel.string name="Cost Default">Prezzo: L$</panel.string>
-	<panel.string name="Cost Total">Prezzo totale: L$</panel.string>
-	<panel.string name="Cost Per Unit">Prezzo per: L$</panel.string>
-	<panel.string name="Cost Mixed">Prezzo misto</panel.string>
-	<panel.string name="Sale Mixed">Vendita mista</panel.string>
+	<panel.string name="text deed continued">
+		Cessione
+	</panel.string>
+	<panel.string name="text deed">
+		Cessione
+	</panel.string>
+	<panel.string name="text modify info 1">
+		Tu puoi modificare questo oggetto
+	</panel.string>
+	<panel.string name="text modify info 2">
+		Tu puoi modificare questi oggetti
+	</panel.string>
+	<panel.string name="text modify info 3">
+		Non puoi modificare questo oggetto
+	</panel.string>
+	<panel.string name="text modify info 4">
+		Non puoi modificare questi oggetti
+	</panel.string>
+	<panel.string name="text modify info 5">
+		Questo oggetto non può essere modificato attraverso il confine di una regione
+	</panel.string>
+	<panel.string name="text modify info 6">
+		Questi oggetti non possono essere modificati attraverso il confine di una regione
+	</panel.string>
+	<panel.string name="text modify warning">
+		Questo oggetto ha parti collegate
+	</panel.string>
+	<panel.string name="Cost Default">
+		Prezzo: L$
+	</panel.string>
+	<panel.string name="Cost Total">
+		Prezzo totale: L$
+	</panel.string>
+	<panel.string name="Cost Per Unit">
+		Prezzo per: L$
+	</panel.string>
+	<panel.string name="Cost Mixed">
+		Prezzo misto
+	</panel.string>
+	<panel.string name="Sale Mixed">
+		Vendita mista
+	</panel.string>
 	<text name="title" value="Profilo dell&apos;oggetto"/>
 	<text name="where" value="(in Second Life)"/>
 	<panel label="" name="properties_panel">
-		<text name="Name:">Nome:</text>
-		<text name="Description:">Descrizione:</text>
-		<text name="CreatorNameLabel">Ideatore:</text>
-		<text name="Owner:">Proprietario:</text>
-		<text name="Group_label">Gruppo:</text>
+		<text name="Name:">
+			Nome:
+		</text>
+		<text name="Description:">
+			Descrizione:
+		</text>
+		<text name="CreatorNameLabel">
+			Ideatore:
+		</text>
+		<text name="Owner:">
+			Proprietario:
+		</text>
+		<text name="Group_label">
+			Gruppo:
+		</text>
 		<button name="button set group" tool_tip="Scegli un gruppo con cui condividere i diritti relativi all&apos;oggetto"/>
 		<name_box initial_value="Caricamento in corso..." name="Group Name Proxy"/>
 		<button label="Cessione" label_selected="Cessione" name="button deed" tool_tip="Con una cessione si trasferisce il bene con i diritti al proprietario successivo Gli oggetti in proprietà condivisa di gruppo possono essere ceduti soltanto da un funzionario del gruppo."/>
-		<text name="label click action">Fai clic per:</text>
+		<text name="label click action">
+			Fai clic per:
+		</text>
 		<combo_box name="clickaction">
 			<combo_box.item label="Tocca (predefinito)" name="Touch/grab(default)"/>
 			<combo_box.item label="Siediti sull&apos;oggetto" name="Sitonobject"/>
@@ -33,15 +73,24 @@
 			<combo_box.item label="Paga oggetto" name="Payobject"/>
 			<combo_box.item label="Apri" name="Open"/>
 			<combo_box.item label="Ingrandisci" name="Zoom"/>
+			<combo_box.item label="Nessuno" name="None"/>
 		</combo_box>
 		<panel name="perms_inv">
-			<text name="perm_modify">Tu puoi modificare questo oggetto</text>
-			<text name="Anyone can:">Chiunque:</text>
+			<text name="perm_modify">
+				Tu puoi modificare questo oggetto
+			</text>
+			<text name="Anyone can:">
+				Chiunque:
+			</text>
 			<check_box label="Copia" name="checkbox allow everyone copy"/>
 			<check_box label="Sposta" name="checkbox allow everyone move"/>
-			<text name="GroupLabel">Gruppo:</text>
+			<text name="GroupLabel">
+				Gruppo:
+			</text>
 			<check_box label="Condividi" name="checkbox share with group" tool_tip="Consenti a tutti i membri del gruppo selezionato di condividere i tuoi diritti di modifica di questo oggetto. Per attivare le restrizioni per ruolo devi prima effettuare la cessione."/>
-			<text name="NextOwnerLabel">Proprietario successivo:</text>
+			<text name="NextOwnerLabel">
+				Proprietario successivo:
+			</text>
 			<check_box label="Modifica" name="checkbox next owner can modify"/>
 			<check_box label="Copia" name="checkbox next owner can copy"/>
 			<check_box label="Trasferisci" name="checkbox next owner can transfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/>
@@ -54,13 +103,27 @@
 		</combo_box>
 		<spinner label="Prezzo: L$" name="Edit Cost"/>
 		<check_box label="Mostra nella ricerca" name="search_check" tool_tip="Permetti alle persone di vedere questo oggetto nei risultati della ricerca"/>
-		<text name="pathfinding_attributes_label">Attributi pathfinding:</text>
-		<text name="B:">B:</text>
-		<text name="O:">O:</text>
-		<text name="G:">G:</text>
-		<text name="E:">E:</text>
-		<text name="N:">N:</text>
-		<text name="F:">F:</text>
+		<text name="pathfinding_attributes_label">
+			Attributi pathfinding:
+		</text>
+		<text name="B:">
+			B:
+		</text>
+		<text name="O:">
+			O:
+		</text>
+		<text name="G:">
+			G:
+		</text>
+		<text name="E:">
+			E:
+		</text>
+		<text name="N:">
+			N:
+		</text>
+		<text name="F:">
+			F:
+		</text>
 	</panel>
 	<panel name="button_panel">
 		<button label="Apri" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index 455ccf87eb61723984cc9f340b440f6bee7d6ebd..fc0da069853432a33b00854a75eea886287152b4 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -2225,6 +2225,18 @@ Se continui a ricevere questo messaggio, contatta l&apos;assistenza Second Life
 	<string name="RegionInfoListTypeBannedAgents">
 		Sempre esclusi:
 	</string>
+	<string name="RegionInfoAllEstates">
+		tutte le proprietà immobiliari
+	</string>
+	<string name="RegionInfoManagedEstates">
+		proprietà immobiliari che gestisci
+	</string>
+	<string name="RegionInfoThisEstate">
+		questa proprietà immobiliare
+	</string>
+	<string name="AndNMore">
+		e [EXTRA_COUNT] ancora
+	</string>
 	<string name="ScriptLimitsParcelScriptMemory">
 		Memoria dello script del lotto
 	</string>
diff --git a/indra/newview/skins/default/xui/ja/floater_auction.xml b/indra/newview/skins/default/xui/ja/floater_auction.xml
index e9aa287f2c35804b5ac262e9a26333b2970017ff..21c8d90b01139e25e4770f2bb4718db6b7bb2c81 100644
--- a/indra/newview/skins/default/xui/ja/floater_auction.xml
+++ b/indra/newview/skins/default/xui/ja/floater_auction.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="floater_auction" title="リンデンランドの販売開始">
 	<floater.string name="already for sale">
-		売り出し中の区画は、オークションに出品できません。
+		販売中の区画をオークションに出品することはできません。
 	</floater.string>
-	<check_box initial_value="true" label="黄色の選択フェンスを含める" name="fence_check"/>
+	<check_box initial_value="true" label="黄色のセレクションフェンスを含める" name="fence_check"/>
 	<button label="スナップショット" label_selected="スナップショット" name="snapshot_btn"/>
 	<button label="誰にでも販売" label_selected="誰にでも販売" name="sell_to_anyone_btn"/>
 	<button label="設定をクリア" label_selected="設定をクリア" name="reset_parcel_btn"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
index a67916b50fac00ad18adcd5073d98c9ddbbe3f3e..60ddae66c5a071dd58af3d85a9114c1941032857 100644
--- a/indra/newview/skins/default/xui/ja/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tools.xml
@@ -204,6 +204,7 @@
 				<combo_box.item label="オブジェクトに支払う" name="Payobject"/>
 				<combo_box.item label="開く" name="Open"/>
 				<combo_box.item label="ズームする" name="Zoom"/>
+				<combo_box.item label="なし" name="None"/>
 			</combo_box>
 			<check_box label="販売対象:" name="checkbox for sale"/>
 			<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index 6dcb4e0ef313721250dac28d3c2c966224298a93..9411a4dd5edefb8feff3c1d8601e759bfdd57a31 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -12,6 +12,7 @@
 		<menu_item_call label="カメラコントロール..." name="Camera Controls"/>
 		<menu label="ムーブメント" name="Movement">
 			<menu_item_call label="座る" name="Sit Down Here"/>
+			<menu_item_call label="立ち上がる" name="Stand up"/>
 			<menu_item_check label="飛ぶ" name="Fly"/>
 			<menu_item_check label="常に走る" name="Always Run"/>
 			<menu_item_call label="私のアニメーションを停止する" name="Stop Animating My Avatar"/>
@@ -296,6 +297,7 @@
 			<menu_item_check label="テクスチャの範囲" name="Texture Area"/>
 			<menu_item_check label="側面" name="Face Area"/>
 			<menu_item_check label="LOD 情報" name="LOD Info"/>
+			<menu_item_check label="三角形の数" name="Triangle Count"/>
 			<menu_item_check label="制作キュー" name="Build Queue"/>
 			<menu_item_check label="å…‰" name="Lights"/>
 			<menu_item_check label="パーティクル" name="Particles"/>
@@ -408,6 +410,7 @@
 			<menu_item_check label="骨組みの衝突判定を表示する" name="Show Collision Skeleton"/>
 			<menu_item_check label="骨を表示" name="Show Bones"/>
 			<menu_item_check label="エージェントのターゲットを表示する" name="Display Agent Target"/>
+			<menu_item_check label="インポスターの範囲を表示" name="Show Impostor Extents"/>
 			<menu_item_call label="アタッチメントをダンプ" name="Dump Attachments"/>
 			<menu_item_call label="アバターテクスチャをデバッグ" name="Debug Avatar Textures"/>
 			<menu_item_call label="ローカルテクスチャをダンプ" name="Dump Local Textures"/>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 9251a8e5ffee09d0d7f83e2ec99b137cc2538b5c..8e22c7668f499f361acee4bbcee47ffa9fb1185c 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -1599,6 +1599,30 @@ SHA1 フィンガープリント: [MD5_DIGEST]
 	<notification name="ProblemAddingEstateManagerBanned">
 		追放された住人を不動産管理者リストに追加できません。
 	</notification>
+	<notification name="ProblemBanningEstateManager">
+		禁止リストに不動産マネージャー [AGENT] を追加できません。
+	</notification>
+	<notification name="GroupIsAlreadyInList">
+		&lt;nolink&gt;[GROUP]&lt;/nolink&gt; はすでに許可されたグループのリストに追加されています。
+	</notification>
+	<notification name="AgentIsAlreadyInList">
+		[AGENT] はすでにあなたの [LIST_TYPE] リストに追加されています。
+	</notification>
+	<notification name="AgentsAreAlreadyInList">
+		[AGENT] はすでにあなたの [LIST_TYPE] リストに追加されています。
+	</notification>
+	<notification name="AgentWasAddedToList">
+		[AGENT] が [ESTATE] の [LIST_TYPE] リストに追加されました。
+	</notification>
+	<notification name="AgentsWereAddedToList">
+		[AGENT] が [ESTATE] の [LIST_TYPE] リストに追加されました。
+	</notification>
+	<notification name="AgentWasRemovedFromList">
+		[AGENT] が [ESTATE] の [LIST_TYPE] リストから削除されました。
+	</notification>
+	<notification name="AgentsWereRemovedFromList">
+		[AGENT] が [ESTATE] の [LIST_TYPE] リストから削除されました。
+	</notification>
 	<notification name="CanNotChangeAppearanceUntilLoaded">
 		衣類およびシェイプが読み込まれるまでは、容姿の変更はできません。
 	</notification>
@@ -3209,13 +3233,22 @@ M キーを押して変更します。
 		[VOICE_CHANNEL_NAME] への接続に失敗しました。あとで再度お試しください。  「近くのボイスチャット」に再接続されます。
 	</notification>
 	<notification name="VoiceEffectsExpired">
-		ボイスモーフィング効果の1つまたは複数の有効期限が終了しました。期限を延長・更新するには[[URL]こちらをクリック]してください。
+		ボイスモーフィング効果の1つまたは複数の有効期限が終了しました。
+期限を延長・更新するには [[URL] Click here] をクリックしてください。
+
+プレミアム会員の方は、 [[PREMIUM_URL] click here] をクリックしてボイスモーフィング特典をお受け取りください。
 	</notification>
 	<notification name="VoiceEffectsExpiredInUse">
-		ボイスモーフィング効果の有効期限が終了したため、あなたの通常のボイス設定が適用されました。期限を延長・更新するには[[URL]こちらをクリック]してください。
+		ボイスモーフィング効果の有効期限が終了したため、あなたの通常のボイス設定が適用されました。
+期限を延長・更新するには [[URL] Click here] をクリックしてください。
+
+プレミアム会員の方は、 [[PREMIUM_URL] click here] をクリックしてボイスモーフィング特典をお受け取りください。
 	</notification>
 	<notification name="VoiceEffectsWillExpire">
-		ボイスモーフィング効果の1つまたは複数の有効期限が[INTERVAL]日以内に終了します。期限を延長・更新するには[[URL]こちらをクリック]してください。
+		ボイスモーフィング効果の1つまたは複数の有効期限が [INTERVAL] 日以内に終了します。
+期限を延長・更新するには [[URL] Click here] をクリックしてください。
+
+プレミアム会員の方は、 [[PREMIUM_URL] click here] をクリックしてボイスモーフィング特典をお受け取りください。
 	</notification>
 	<notification name="VoiceEffectsNew">
 		新しいボイスモーフィング効果が登場!
@@ -3267,6 +3300,9 @@ M キーを押して変更します。
 	<notification name="SnapshotToComputerFailed">
 		スナップショットを [PATH] に保存できませんでした:ディスクの空き容量が不足しています。[NEED_MEMORY]KB が必要ですが、[FREE_MEMORY]KB しかありません。
 	</notification>
+	<notification name="SnapshotToLocalDirNotExist">
+		スナップショットを [PATH] に保存できませんでした:ディレクトリは存在しません。
+	</notification>
 	<notification name="PresetNotSaved">
 		プリセット [NAME] の保存エラー。
 	</notification>
diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml
index 5f2007e0da8a0d2c5e1de51e1ad0d05150c26aec..86e7e9dac41805351c9e3ae9cb14dfb034c9da66 100644
--- a/indra/newview/skins/default/xui/ja/panel_login.xml
+++ b/indra/newview/skins/default/xui/ja/panel_login.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <panel name="panel_login">
-	<panel.string name="forgot_password_url">http://secondlife.com/account/request.php?lang=ja</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php?lang=ja
+	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="ui_stack">
 		<layout_panel name="ui_container">
 			<combo_box label="ユーザー名" name="username_combo" tool_tip="登録時に自分で選んだユーザー名(例:bobsmith12、Steller Sunshineなど)"/>
@@ -11,8 +16,13 @@
 			</combo_box>
 			<button label="ログイン" name="connect_btn"/>
 			<check_box label="記憶する" name="remember_check"/>
-			<text name="forgot_password_text">パスワードを忘れた場合</text>
+			<text name="forgot_password_text">
+				パスワードを忘れた場合
+			</text>
 			<combo_box label="グリッドを選択" name="server_combo"/>
+			<text name="sign_up_text">
+				登録
+			</text>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_login_first.xml b/indra/newview/skins/default/xui/ja/panel_login_first.xml
index d350e2f9a2264f849c59578dea7ae05b60ee8211..644cee25f255cb63e64ab2021ac6bb0f38475ae9 100644
--- a/indra/newview/skins/default/xui/ja/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/ja/panel_login_first.xml
@@ -3,6 +3,9 @@
 	<panel.string name="forgot_password_url">
 		http://secondlife.com/account/request.php?lang=ja
 	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="logo_stack">
 		<layout_panel name="parent_panel2">
 			<layout_stack name="widget_stack">
@@ -14,6 +17,9 @@
 					<text name="forgot_password_text">
 						パスワードを忘れた場合
 					</text>
+					<text name="sign_up_text">
+						登録
+					</text>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_access.xml b/indra/newview/skins/default/xui/ja/panel_region_access.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c0612dd1506dd609c985c7fb380e5d22abf0fe02
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_region_access.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="アクセス" name="Access">
+	<tab_container name="tabs">
+		<panel label="不動産マネージャー" name="estate_managers_panel">
+			<text name="estate_manager_label">
+				不動産マネージャー:
+			</text>
+			<name_list name="estate_manager_name_list">
+				<columns label="名前" name="name"/>
+			</name_list>
+			<button label="追加..." name="add_estate_manager_btn"/>
+			<button label="削除…" name="remove_estate_manager_btn"/>
+		</panel>
+		<panel label="許可" name="allowed_panel">
+			<panel label="top_panel" name="allowed_search_panel">
+				<filter_editor label="許可されたエージェントを検索" name="allowed_search_input"/>
+			</panel>
+			<text name="allow_resident_label">
+				常に許可:
+			</text>
+			<name_list name="allowed_avatar_name_list">
+				<columns label="名前" name="name"/>
+			</name_list>
+			<button label="追加..." name="add_allowed_avatar_btn"/>
+			<button label="削除…" name="remove_allowed_avatar_btn"/>
+		</panel>
+		<panel label="許可されたグループ" name="allowed_groups_panel">
+			<panel label="top_panel" name="allowed_group_search_panel">
+				<filter_editor label="許可されたグループを検索" name="allowed_group_search_input"/>
+			</panel>
+			<text name="allow_group_label">
+				常に許可されたグループ:
+			</text>
+			<name_list name="allowed_group_name_list">
+				<columns label="名前" name="name"/>
+			</name_list>
+			<button label="追加..." name="add_allowed_group_btn"/>
+			<button label="削除…" name="remove_allowed_group_btn"/>
+		</panel>
+		<panel label="禁止" name="banned_panel">
+			<panel label="top_panel" name="banned_search_panel">
+				<filter_editor label="禁止されたエージェントを検索" name="banned_search_input"/>
+			</panel>
+			<text name="ban_resident_label">
+				常に禁止:
+			</text>
+			<name_list name="banned_avatar_name_list">
+				<columns label="名前" name="name"/>
+				<columns label="最後にログインした日" name="last_login_date"/>
+				<columns label="禁止された日付" name="ban_date"/>
+				<columns label="禁止した人:" name="bannedby"/>
+			</name_list>
+			<button label="追加..." name="add_banned_avatar_btn"/>
+			<button label="削除…" name="remove_banned_avatar_btn"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_estate.xml b/indra/newview/skins/default/xui/ja/panel_region_estate.xml
index 385c16dfab64ce5175aa9cb01c13539d2a9e55a4..6464a65feb0ae05c92f340b54ab8381593d9aa6e 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_estate.xml
@@ -16,7 +16,7 @@
 		(不明)
 	</text>
 	<radio_group name="externally_visible_radio">
-		<radio_item label="下記の住人とグループのみ許可する" name="estate_restricted_access"/>
+		<radio_item label="アクセスタブに記載された住人とグループのみ許可する" name="estate_restricted_access"/>
 		<radio_item label="誰でも訪問可" name="estate_public_access"/>
 	</radio_group>
 	<check_box label="18 歳以上である必要があります" name="limit_age_verified" tool_tip="この不動産(エステート)にアクセスするには、18 才以上でなければなりません。詳細については、[SUPPORT_SITE] をご覧ください。"/>
@@ -26,25 +26,25 @@
 	<check_box label="直接テレポートを許可" name="allow_direct_teleport"/>
 	<button label="適用" name="apply_btn"/>
 	<text name="estate_manager_label">
-		不動産マネージャー:
+		不動産マネージャー:
 	</text>
 	<text name="allow_resident_label">
 		常に許可:
 	</text>
 	<button label="追加..." name="add_estate_manager_btn"/>
-	<button label="削除…" name="remove_estate_manager_btn"/>
+	<button label="削除..." name="remove_estate_manager_btn"/>
 	<button label="追加..." name="add_allowed_avatar_btn"/>
-	<button label="削除…" name="remove_allowed_avatar_btn"/>
+	<button label="削除..." name="remove_allowed_avatar_btn"/>
 	<text name="allow_group_label">
-		常に許可されたグループ:
+		グループを常に許可:
 	</text>
 	<text name="ban_resident_label">
 		常に禁止:
 	</text>
 	<button label="追加..." name="add_allowed_group_btn"/>
-	<button label="削除…" name="remove_allowed_group_btn"/>
+	<button label="削除..." name="remove_allowed_group_btn"/>
 	<button label="追加..." name="add_banned_avatar_btn"/>
-	<button label="削除…" name="remove_banned_avatar_btn"/>
+	<button label="削除..." name="remove_banned_avatar_btn"/>
 	<button label="メッセージを不動産に送信..." name="message_estate_btn"/>
 	<button label="不動産から住人を追い出す..." name="kick_user_from_estate_btn"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml
index 858307800b6f8b50b1078324b0f0ac372330bf75..9c70a1172f36356e0efbe45920028d1c88790768 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="object properties" title="オブジェクトのプロフィール">
-	<panel.string name="text deed continued">譲渡</panel.string>
-	<panel.string name="text deed">譲渡</panel.string>
-	<panel.string name="text modify info 1">このオブジェクトを修正できます</panel.string>
-	<panel.string name="text modify info 2">これらのオブジェクトを修正できます</panel.string>
-	<panel.string name="text modify info 3">このオブジェクトを修正できません</panel.string>
-	<panel.string name="text modify info 4">これらのオブジェクトを修正できません</panel.string>
-	<panel.string name="text modify info 5">地域(リージョン)の境界を越えてこのオブジェクトを修正できません</panel.string>
-	<panel.string name="text modify info 6">地域(リージョン)の境界を越えてこれらのオブジェクトを修正できません</panel.string>
-	<panel.string name="text modify warning">このオブジェクトには、パーツがリンクされています</panel.string>
-	<panel.string name="Cost Default">価格: L$</panel.string>
-	<panel.string name="Cost Total">合計価格: L$</panel.string>
-	<panel.string name="Cost Per Unit">Price Per: L$</panel.string>
-	<panel.string name="Cost Mixed">Mixed Price</panel.string>
-	<panel.string name="Sale Mixed">Mixed Sale</panel.string>
+	<panel.string name="text deed continued">
+		譲渡
+	</panel.string>
+	<panel.string name="text deed">
+		譲渡
+	</panel.string>
+	<panel.string name="text modify info 1">
+		このオブジェクトを修正できます
+	</panel.string>
+	<panel.string name="text modify info 2">
+		これらのオブジェクトを修正できます
+	</panel.string>
+	<panel.string name="text modify info 3">
+		このオブジェクトを修正できません
+	</panel.string>
+	<panel.string name="text modify info 4">
+		これらのオブジェクトを修正できません
+	</panel.string>
+	<panel.string name="text modify info 5">
+		地域(リージョン)の境界を越えてこのオブジェクトを修正できません
+	</panel.string>
+	<panel.string name="text modify info 6">
+		地域(リージョン)の境界を越えてこれらのオブジェクトを修正できません
+	</panel.string>
+	<panel.string name="text modify warning">
+		このオブジェクトには、パーツがリンクされています
+	</panel.string>
+	<panel.string name="Cost Default">
+		価格: L$
+	</panel.string>
+	<panel.string name="Cost Total">
+		合計価格: L$
+	</panel.string>
+	<panel.string name="Cost Per Unit">
+		Price Per: L$
+	</panel.string>
+	<panel.string name="Cost Mixed">
+		Mixed Price
+	</panel.string>
+	<panel.string name="Sale Mixed">
+		Mixed Sale
+	</panel.string>
 	<text name="title" value="オブジェクトのプロフィール"/>
 	<text name="where" value="(インワールド)"/>
 	<panel label="" name="properties_panel">
-		<text name="Name:">名前:</text>
-		<text name="Description:">説明:</text>
-		<text name="CreatorNameLabel">制作者:</text>
-		<text name="Owner:">所有者:</text>
-		<text name="Group_label">グループ:</text>
+		<text name="Name:">
+			名前:
+		</text>
+		<text name="Description:">
+			説明:
+		</text>
+		<text name="CreatorNameLabel">
+			制作者:
+		</text>
+		<text name="Owner:">
+			所有者:
+		</text>
+		<text name="Group_label">
+			グループ:
+		</text>
 		<button name="button set group" tool_tip="このオブジェクト権限を共有するグループを選択します"/>
 		<name_box initial_value="ローディング..." name="Group Name Proxy"/>
 		<button label="譲渡" label_selected="譲渡" name="button deed" tool_tip="このアイテムを譲渡すると「次の所有者」の権限が適用されます。 グループ共有オブジェクトは、グループのオフィサーが譲渡できます。"/>
-		<text name="label click action">クリックで:</text>
+		<text name="label click action">
+			クリックで:
+		</text>
 		<combo_box name="clickaction">
 			<combo_box.item label="触る(デフォルト)" name="Touch/grab(default)"/>
 			<combo_box.item label="オブジェクトに座る" name="Sitonobject"/>
@@ -33,15 +73,24 @@
 			<combo_box.item label="オブジェクトに支払う" name="Payobject"/>
 			<combo_box.item label="開く" name="Open"/>
 			<combo_box.item label="ズーム" name="Zoom"/>
+			<combo_box.item label="なし" name="None"/>
 		</combo_box>
 		<panel name="perms_inv">
-			<text name="perm_modify">このオブジェクトを修正できます</text>
-			<text name="Anyone can:">全員:</text>
+			<text name="perm_modify">
+				このオブジェクトを修正できます
+			</text>
+			<text name="Anyone can:">
+				全員:
+			</text>
 			<check_box label="コピー" name="checkbox allow everyone copy"/>
 			<check_box label="移動" name="checkbox allow everyone move"/>
-			<text name="GroupLabel">グループ:</text>
+			<text name="GroupLabel">
+				グループ:
+			</text>
 			<check_box label="共有" name="checkbox share with group" tool_tip="設定したグループのメンバー全員にこのオブジェクトの修正権限を与えます。 譲渡しない限り、役割制限を有効にはできません。"/>
-			<text name="NextOwnerLabel">次の所有者:</text>
+			<text name="NextOwnerLabel">
+				次の所有者:
+			</text>
 			<check_box label="修正" name="checkbox next owner can modify"/>
 			<check_box label="コピー" name="checkbox next owner can copy"/>
 			<check_box label="再販・プレゼント" name="checkbox next owner can transfer" tool_tip="次の所有者はこのオブジェクトを他人にあげたり再販できます"/>
@@ -54,13 +103,27 @@
 		</combo_box>
 		<spinner label="価格: L$" name="Edit Cost"/>
 		<check_box label="検索に表示" name="search_check" tool_tip="このオブジェクトを検索結果に表示します"/>
-		<text name="pathfinding_attributes_label">パスファインディング属性:</text>
-		<text name="B:">B.</text>
-		<text name="O:">O:</text>
-		<text name="G:">G:</text>
-		<text name="E:">E:</text>
-		<text name="N:">N:</text>
-		<text name="F:">F:</text>
+		<text name="pathfinding_attributes_label">
+			パスファインディング属性:
+		</text>
+		<text name="B:">
+			B.
+		</text>
+		<text name="O:">
+			O:
+		</text>
+		<text name="G:">
+			G:
+		</text>
+		<text name="E:">
+			E:
+		</text>
+		<text name="N:">
+			N:
+		</text>
+		<text name="F:">
+			F:
+		</text>
 	</panel>
 	<panel name="button_panel">
 		<button label="開く" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 80fa306157c2523683c6477c331702af3b78d6fa..48329f86cd3adc0a4e4450f985ef1dd7c9145c86 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -2239,6 +2239,18 @@ support@secondlife.com にお問い合わせください。
 	<string name="RegionInfoListTypeBannedAgents">
 		常に禁止
 	</string>
+	<string name="RegionInfoAllEstates">
+		すべての不動産
+	</string>
+	<string name="RegionInfoManagedEstates">
+		管理されている不動産
+	</string>
+	<string name="RegionInfoThisEstate">
+		この不動産
+	</string>
+	<string name="AndNMore">
+		および [EXTRA_COUNT] つの不動産
+	</string>
 	<string name="ScriptLimitsParcelScriptMemory">
 		区画スクリプトメモリ
 	</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_auction.xml b/indra/newview/skins/default/xui/pt/floater_auction.xml
index 074f7bf0013ea2a93ea1503a5f3d05f4e7f6ab99..92b983169d641ae6b2b1db86be6dd49d70875926 100644
--- a/indra/newview/skins/default/xui/pt/floater_auction.xml
+++ b/indra/newview/skins/default/xui/pt/floater_auction.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="INICIAR VENDA DE TERRENO LINDEN START">
+<floater name="floater_auction" title="INICIAR VENDA DE TERRENO LINDEN">
 	<floater.string name="already for sale">
-		Você não pode leiloar terrenos que já estão configurados para venda.
+		Você não pode leiloar terrenos que já estão para venda.
 	</floater.string>
-	<check_box initial_value="true" label="Incluir marcador de seleção amarelo" name="fence_check"/>
+	<check_box initial_value="true" label="Incluir uma cerca de seleção amarela" name="fence_check"/>
 	<button label="Foto" label_selected="Foto" name="snapshot_btn"/>
 	<button label="Vender a qualquer um" label_selected="Vender a qualquer um" name="sell_to_anyone_btn"/>
-	<button label="Clear Settings" label_selected="Limpar configurações" name="reset_parcel_btn"/>
-	<button label="Iniciar Leilão" label_selected="Iniciar Leilão" name="start_auction_btn"/>
+	<button label="Limpar configurações" label_selected="Limpar configurações" name="reset_parcel_btn"/>
+	<button label="Iniciar leilão" label_selected="Iniciar leilão" name="start_auction_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index 0c17624aa5f0a754df41826bc5f633d545408529..4e9b6e3bbd6202421d2670eaee2c9bfe4fd47a82 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -198,6 +198,7 @@
 				<combo_box.item label="Pagar objeto" name="Payobject"/>
 				<combo_box.item label="Abrir" name="Open"/>
 				<combo_box.item label="Zoom" name="Zoom"/>
+				<combo_box.item label="Nenhum" name="None"/>
 			</combo_box>
 			<check_box label="À venda" name="checkbox for sale"/>
 			<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index fddc9f6abf4430be2ed401f4c8833877068ba9f7..3fe267ccd732d14407b074281e687c253f2b0769 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -12,6 +12,7 @@
 		<menu_item_call label="Controles da câmera..." name="Camera Controls"/>
 		<menu label="Movimentos" name="Movement">
 			<menu_item_call label="Sentar" name="Sit Down Here"/>
+			<menu_item_call label="Ficar de pé" name="Stand up"/>
 			<menu_item_check label="Voar" name="Fly"/>
 			<menu_item_check label="Correr sempre" name="Always Run"/>
 			<menu_item_call label="Parar minha animação" name="Stop Animating My Avatar"/>
@@ -281,6 +282,7 @@
 			<menu_item_check label="Formas físicas" name="Physics Shapes"/>
 			<menu_item_check label="Tipo de atualização" name="Update Type"/>
 			<menu_item_check label="Dados LOD" name="LOD Info"/>
+			<menu_item_check label="Contar triângulo" name="Triangle Count"/>
 			<menu_item_check label="Fila de construção" name="Build Queue"/>
 			<menu_item_check label="Partículas" name="Particles"/>
 			<menu_item_check label="Junções" name="Joints"/>
@@ -355,6 +357,7 @@
 			<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
 			<menu_item_check label="Exibir ossos" name="Show Bones"/>
 			<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
+			<menu_item_check label="Mostrar as extensões do impostor" name="Show Impostor Extents"/>
 			<menu_item_call label="Depurar texturas do avatar" name="Debug Avatar Textures"/>
 		</menu>
 		<menu_item_check label="Texturas HTTP" name="HTTP Textures"/>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 59c84b781d4b738993d6241807a0948cd4f22ca2..082293fa33c96d43a58c9789f1e509fd9111fbd5 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -1561,6 +1561,30 @@ Ultrapassa o limite de [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS].
 	<notification name="ProblemAddingEstateManagerBanned">
 		Não foi possível adicionar residentes banidos à lista de gerentes de propriedades.
 	</notification>
+	<notification name="ProblemBanningEstateManager">
+		Não foi possível adicionar o gerente [AGENT] à lista de banimento.
+	</notification>
+	<notification name="GroupIsAlreadyInList">
+		&lt;nolink&gt;[GROUP]&lt;/nolink&gt; já está na lista de Grupos permitidos.
+	</notification>
+	<notification name="AgentIsAlreadyInList">
+		[AGENT] já está na sua [LIST_TYPE] lista.
+	</notification>
+	<notification name="AgentsAreAlreadyInList">
+		[AGENT] já está na sua [LIST_TYPE] lista.
+	</notification>
+	<notification name="AgentWasAddedToList">
+		[AGENT] foi adicionado na [LIST_TYPE] lista de [ESTATE].
+	</notification>
+	<notification name="AgentsWereAddedToList">
+		[AGENT] foi adicionado na [LIST_TYPE] lista de [ESTATE].
+	</notification>
+	<notification name="AgentWasRemovedFromList">
+		[AGENT] foi removido da [LIST_TYPE] lista de [ESTATE].
+	</notification>
+	<notification name="AgentsWereRemovedFromList">
+		[AGENT] foi removido da [LIST_TYPE] lista de [ESTATE].
+	</notification>
 	<notification name="CanNotChangeAppearanceUntilLoaded">
 		Não é possível alterar a aparência até que as roupas e formas estejam carregadas.
 	</notification>
@@ -1860,7 +1884,7 @@ Isto mudará milhares de regiões e fará o spaceserver soluçar.
 		<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as Propriedades" yestext="Esta Propriedade"/>
 	</notification>
 	<notification label="Selecione a propriedade" name="EstateBannedAgentRemove">
-		Remover este Residente da lista de banimento para acessar esta propriedade somente ou para [ALL_ESTATES]?
+		Remover este Residente da lista de banimento para acessar este estado somente ou para [ALL_ESTATES]?
 		<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as Propriedades" yestext="Esta Propriedade"/>
 	</notification>
 	<notification label="Selecione a propriedade" name="EstateManagerAdd">
@@ -3153,16 +3177,22 @@ Clique em Aceitar para atender ou em Recusar para recusar este convite.  Clique
 		Falha de conexão com [VOICE_CHANNEL_NAME]. Tente novamente mais tarde.   Agora você será reconectado ao bate-papo local.
 	</notification>
 	<notification name="VoiceEffectsExpired">
-		Um ou mais serviços de distorção de voz que você assinou veceu.
-[[URL] Clique aqui] para renovar o serviço.
+		Um ou mais serviços de distorção de voz que você assinou venceu. 
+[[URL] Clique aqui] para renovar o serviço. 
+
+Se você é um Membro Premium, [[PREMIUM_URL] clique aqui] para receber o seu app de distorção de voz.
 	</notification>
 	<notification name="VoiceEffectsExpiredInUse">
-		A Distorção de voz ativa expirou. Suas configurações de voz padrão foram ativadas.
-[[URL] Clique aqui] para renovar o serviço.
+		A Distorção de voz ativa expirou. Suas configurações de voz padrão foram ativadas. 
+[[URL] Clique aqui] para renovar o serviço. 
+
+Se você é um Membro Premium, [[PREMIUM_URL] clique aqui] para receber o seu app de distorção de voz.
 	</notification>
 	<notification name="VoiceEffectsWillExpire">
-		Uma ou mais das suas distorções de voz tem vencimento em menos de [INTERVAL] dias.
-[[URL] Clique aqui] para renovar o serviço.
+		Uma ou mais das suas distorções de voz tem vencimento em menos de [INTERVAL] dias. 
+[[URL] Clique aqui] para renovar o serviço. 
+
+Se você é um Membro Premium, [[PREMIUM_URL] clique aqui] para receber o seu app de distorção de voz.
 	</notification>
 	<notification name="VoiceEffectsNew">
 		Novas Distorções de voz!
@@ -3214,6 +3244,9 @@ Para sua segurança, os SLurls serão bloqueados por alguns instantes.
 	<notification name="SnapshotToComputerFailed">
 		Falha ao salvar fotografia em [PATH]: Disco cheio. [NEED_MEMORY]KB é necessário, mas somente [FREE_MEMORY]KB está livre.
 	</notification>
+	<notification name="SnapshotToLocalDirNotExist">
+		Falha ao salvar fotografia em [PATH]: O diretório não existe.
+	</notification>
 	<notification name="PresetNotSaved">
 		Erro ao salvar predefinição [NAME].
 	</notification>
diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml
index ffcf72b1b4d840159f6f8926d9ecd68526617328..ffe637b3c1c01a517e134da35bd2f6c8748da9e8 100644
--- a/indra/newview/skins/default/xui/pt/panel_login.xml
+++ b/indra/newview/skins/default/xui/pt/panel_login.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <panel name="panel_login">
-	<panel.string name="forgot_password_url">http://secondlife.com/account/request.php?lang=pt</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php?lang=pt
+	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="ui_stack">
 		<layout_panel name="ui_container">
 			<combo_box label="Nome de usuário" name="username_combo" tool_tip="O nome de usuário que você escolheu ao fazer seu cadastro, como zecazc12 ou Magia Solar"/>
@@ -11,8 +16,13 @@
 			</combo_box>
 			<button label="Login" name="connect_btn"/>
 			<check_box label="Lembrar-me" name="remember_check"/>
-			<text name="forgot_password_text">Senha esquecida</text>
+			<text name="forgot_password_text">
+				Senha esquecida
+			</text>
 			<combo_box label="Selecionar grade" name="server_combo"/>
+			<text name="sign_up_text">
+				Cadastre-se
+			</text>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_login_first.xml b/indra/newview/skins/default/xui/pt/panel_login_first.xml
index 6e4ef65beabc9cd19bb1900838a175f6ffc072bb..86c61163bc9104a227d861e3378469e1a4fcea75 100644
--- a/indra/newview/skins/default/xui/pt/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/pt/panel_login_first.xml
@@ -3,6 +3,9 @@
 	<panel.string name="forgot_password_url">
 		http://secondlife.com/account/request.php?lang=pt
 	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="logo_stack">
 		<layout_panel name="parent_panel2">
 			<layout_stack name="widget_stack">
@@ -14,6 +17,9 @@
 					<text name="forgot_password_text">
 						Senha esquecida
 					</text>
+					<text name="sign_up_text">
+						Cadastre-se
+					</text>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_access.xml b/indra/newview/skins/default/xui/pt/panel_region_access.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cc2136a4598e23bf66f2672f230d50db38436e9e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_region_access.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Acesso" name="Access">
+	<tab_container name="tabs">
+		<panel label="GERENTES" name="estate_managers_panel">
+			<text name="estate_manager_label">
+				Gerentes:
+			</text>
+			<name_list name="estate_manager_name_list">
+				<columns label="Nome" name="name"/>
+			</name_list>
+			<button label="Adicionar..." name="add_estate_manager_btn"/>
+			<button label="Remover..." name="remove_estate_manager_btn"/>
+		</panel>
+		<panel label="PERMITIDO" name="allowed_panel">
+			<panel label="top_panel" name="allowed_search_panel">
+				<filter_editor label="Buscar agentes permitidos" name="allowed_search_input"/>
+			</panel>
+			<text name="allow_resident_label">
+				Sempre permitido:
+			</text>
+			<name_list name="allowed_avatar_name_list">
+				<columns label="Nome" name="name"/>
+			</name_list>
+			<button label="Adicionar..." name="add_allowed_avatar_btn"/>
+			<button label="Remover..." name="remove_allowed_avatar_btn"/>
+		</panel>
+		<panel label="GRUPOS PERMITIDOS" name="allowed_groups_panel">
+			<panel label="top_panel" name="allowed_group_search_panel">
+				<filter_editor label="Buscar grupos permitidos" name="allowed_group_search_input"/>
+			</panel>
+			<text name="allow_group_label">
+				Grupos sempre permitidos:
+			</text>
+			<name_list name="allowed_group_name_list">
+				<columns label="Nome" name="name"/>
+			</name_list>
+			<button label="Adicionar..." name="add_allowed_group_btn"/>
+			<button label="Remover..." name="remove_allowed_group_btn"/>
+		</panel>
+		<panel label="BANIDO" name="banned_panel">
+			<panel label="top_panel" name="banned_search_panel">
+				<filter_editor label="Buscar agentes banidos" name="banned_search_input"/>
+			</panel>
+			<text name="ban_resident_label">
+				Sempre banido:
+			</text>
+			<name_list name="banned_avatar_name_list">
+				<columns label="Nome" name="name"/>
+				<columns label="Último acesso" name="last_login_date"/>
+				<columns label="Data do banimento" name="ban_date"/>
+				<columns label="Banido por" name="bannedby"/>
+			</name_list>
+			<button label="Adicionar..." name="add_banned_avatar_btn"/>
+			<button label="Remover..." name="remove_banned_avatar_btn"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_estate.xml b/indra/newview/skins/default/xui/pt/panel_region_estate.xml
index 8b405f601a5f5e205ccc33744790f5c8f1960c64..ac864ebb4b93c5eac5e4145b5eaa73928de19f5c 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_estate.xml
@@ -16,7 +16,7 @@
 		(desconhecido)
 	</text>
 	<radio_group name="externally_visible_radio">
-		<radio_item label="Permitir somente os residentes e os grupos listados abaixo" name="estate_restricted_access"/>
+		<radio_item label="Permitir somente residentes e grupos listados na aba Acesso" name="estate_restricted_access"/>
 		<radio_item label="Qualquer um pode visitar" name="estate_public_access"/>
 	</radio_group>
 	<check_box label="Deve ser maior de 18 anos" name="limit_age_verified" tool_tip="Os residentes devem ter 18 anos ou mais para acessar esta propriedade. Consulte o [SUPPORT_SITE] para obter mais informações."/>
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml
index bbfaa4a4f5ad8a59fe8db8963e029b81c1bfda6f..ed609dfc3d1c636a27de842de96effeca28ecdd7 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="object properties" title="Perfil do objeto">
-	<panel.string name="text deed continued">Doar</panel.string>
-	<panel.string name="text deed">Doar</panel.string>
-	<panel.string name="text modify info 1">Você pode modificar este objeto</panel.string>
-	<panel.string name="text modify info 2">Você pode modificar estes objetos</panel.string>
-	<panel.string name="text modify info 3">Você não pode modificar este objeto</panel.string>
-	<panel.string name="text modify info 4">Você não pode modificar estes objetos</panel.string>
-	<panel.string name="text modify info 5">Não é possível modificar este objeto através de uma demarcação da região</panel.string>
-	<panel.string name="text modify info 6">Não é possível modificar estes objetos através de uma demarcação da região</panel.string>
-	<panel.string name="text modify warning">O objeto contém links ligando suas partes</panel.string>
-	<panel.string name="Cost Default">Preço: L$</panel.string>
-	<panel.string name="Cost Total">Preço total: L$</panel.string>
-	<panel.string name="Cost Per Unit">Preço unitário: L$</panel.string>
-	<panel.string name="Cost Mixed">Preço misto</panel.string>
-	<panel.string name="Sale Mixed">Venda mista</panel.string>
+	<panel.string name="text deed continued">
+		Doar
+	</panel.string>
+	<panel.string name="text deed">
+		Doar
+	</panel.string>
+	<panel.string name="text modify info 1">
+		Você pode modificar este objeto
+	</panel.string>
+	<panel.string name="text modify info 2">
+		Você pode modificar estes objetos
+	</panel.string>
+	<panel.string name="text modify info 3">
+		Você não pode modificar este objeto
+	</panel.string>
+	<panel.string name="text modify info 4">
+		Você não pode modificar estes objetos
+	</panel.string>
+	<panel.string name="text modify info 5">
+		Não é possível modificar este objeto através de uma demarcação da região
+	</panel.string>
+	<panel.string name="text modify info 6">
+		Não é possível modificar estes objetos através de uma demarcação da região
+	</panel.string>
+	<panel.string name="text modify warning">
+		O objeto contém links ligando suas partes
+	</panel.string>
+	<panel.string name="Cost Default">
+		Preço: L$
+	</panel.string>
+	<panel.string name="Cost Total">
+		Preço total: L$
+	</panel.string>
+	<panel.string name="Cost Per Unit">
+		Preço unitário: L$
+	</panel.string>
+	<panel.string name="Cost Mixed">
+		Preço misto
+	</panel.string>
+	<panel.string name="Sale Mixed">
+		Venda mista
+	</panel.string>
 	<text name="title" value="Perfil do objeto"/>
 	<text name="where" value="(Inworld)"/>
 	<panel label="" name="properties_panel">
-		<text name="Name:">Nome:</text>
-		<text name="Description:">Descrição:</text>
-		<text name="CreatorNameLabel">Criador:</text>
-		<text name="Owner:">Proprietário:</text>
-		<text name="Group_label">Grupo:</text>
+		<text name="Name:">
+			Nome:
+		</text>
+		<text name="Description:">
+			Descrição:
+		</text>
+		<text name="CreatorNameLabel">
+			Criador:
+		</text>
+		<text name="Owner:">
+			Proprietário:
+		</text>
+		<text name="Group_label">
+			Grupo:
+		</text>
 		<button name="button set group" tool_tip="Selecione o grupo que terá acesso à autorização do objeto"/>
 		<name_box initial_value="Carregando..." name="Group Name Proxy"/>
 		<button label="Doar" label_selected="Doar" name="button deed" tool_tip="Ao doar este item, o próximo dono terá permissões de próximo dono. Objetos de grupos podem ser doados por um oficial do grupo."/>
-		<text name="label click action">Clique para:</text>
+		<text name="label click action">
+			Clique para:
+		</text>
 		<combo_box name="clickaction">
 			<combo_box.item label="Tocar (padrão)" name="Touch/grab(default)"/>
 			<combo_box.item label="Sentar em objeto" name="Sitonobject"/>
@@ -33,15 +73,24 @@
 			<combo_box.item label="Pagar por objeto" name="Payobject"/>
 			<combo_box.item label="Abrir" name="Open"/>
 			<combo_box.item label="Zoom" name="Zoom"/>
+			<combo_box.item label="Nenhum" name="None"/>
 		</combo_box>
 		<panel name="perms_inv">
-			<text name="perm_modify">Você pode modificar este objeto</text>
-			<text name="Anyone can:">Todos:</text>
+			<text name="perm_modify">
+				Você pode modificar este objeto
+			</text>
+			<text name="Anyone can:">
+				Todos:
+			</text>
 			<check_box label="Copiar" name="checkbox allow everyone copy"/>
 			<check_box label="Movimentar" name="checkbox allow everyone move"/>
-			<text name="GroupLabel">Grupo:</text>
+			<text name="GroupLabel">
+				Grupo:
+			</text>
 			<check_box label="Compartilhar" name="checkbox share with group" tool_tip="Permitir que todos os membros do grupo tenham o seu nível de modificação para este objeto. Faça uma doação para ativar restrições de função."/>
-			<text name="NextOwnerLabel">Próximo proprietário:</text>
+			<text name="NextOwnerLabel">
+				Próximo proprietário:
+			</text>
 			<check_box label="Modificar" name="checkbox next owner can modify"/>
 			<check_box label="Copiar" name="checkbox next owner can copy"/>
 			<check_box label="Transferir" name="checkbox next owner can transfer" tool_tip="O próximo dono poderá revender ou dar este objeto"/>
@@ -54,13 +103,27 @@
 		</combo_box>
 		<spinner label="Preço: L$" name="Edit Cost"/>
 		<check_box label="Mostrar nos resultados de busca" name="search_check" tool_tip="Incluir o objeto nos resultados de busca"/>
-		<text name="pathfinding_attributes_label">Atributos do pathfinding:</text>
-		<text name="B:">B:</text>
-		<text name="O:">O:</text>
-		<text name="G:">G:</text>
-		<text name="E:">E:</text>
-		<text name="N:">N:</text>
-		<text name="F:">F:</text>
+		<text name="pathfinding_attributes_label">
+			Atributos do pathfinding:
+		</text>
+		<text name="B:">
+			B:
+		</text>
+		<text name="O:">
+			O:
+		</text>
+		<text name="G:">
+			G:
+		</text>
+		<text name="E:">
+			E:
+		</text>
+		<text name="N:">
+			N:
+		</text>
+		<text name="F:">
+			F:
+		</text>
 	</panel>
 	<panel name="button_panel">
 		<button label="Abrir" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 4c23e48b894890b47bac2bdc7925fa30280ffe2c..076a0cc7d3d5d4ebb5c19152b20c29177ce074c7 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -2185,6 +2185,18 @@ Se você continuar a receber essa mensagem, entre em contato com o suporte do Se
 	<string name="RegionInfoListTypeBannedAgents">
 		Sempre banido
 	</string>
+	<string name="RegionInfoAllEstates">
+		todos os terrenos
+	</string>
+	<string name="RegionInfoManagedEstates">
+		administre terrenos
+	</string>
+	<string name="RegionInfoThisEstate">
+		este terreno
+	</string>
+	<string name="AndNMore">
+		e [EXTRA_COUNT] mais
+	</string>
 	<string name="ScriptLimitsParcelScriptMemory">
 		Memória de scripts no lote
 	</string>
diff --git a/indra/newview/skins/default/xui/ru/floater_auction.xml b/indra/newview/skins/default/xui/ru/floater_auction.xml
index 105c75c919f96bafdadd5c1806c2e16338bc286d..e6cc7000245d45deaaa830f0c5194ba9896e3b73 100644
--- a/indra/newview/skins/default/xui/ru/floater_auction.xml
+++ b/indra/newview/skins/default/xui/ru/floater_auction.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="НАЧАТЬ ПРОДАЖУ ЗЕМЛИ ЛИНДЕНОВ">
+<floater name="floater_auction" title="НАЧАТЬ ПРОДАЖУ ЗЕМЛИ LINDEN">
 	<floater.string name="already for sale">
 		Нельзя выставить на аукцион участки, которые уже продаются.
 	</floater.string>
 	<check_box initial_value="true" label="Включая желтую ограду вокруг выбранного участка" name="fence_check"/>
-	<button label="Снимок" label_selected="Снимок" name="snapshot_btn"/>
+	<button label="Моментальный снимок" label_selected="Моментальный снимок" name="snapshot_btn"/>
 	<button label="Купить может каждый" label_selected="Купить может каждый" name="sell_to_anyone_btn"/>
 	<button label="Очистить настройки" label_selected="Очистить настройки" name="reset_parcel_btn"/>
 	<button label="Начать аукцион" label_selected="Начать аукцион" name="start_auction_btn"/>
diff --git a/indra/newview/skins/default/xui/ru/floater_tools.xml b/indra/newview/skins/default/xui/ru/floater_tools.xml
index 74c27ce1622800292a19cd63717a706b73e3ea73..2d7af4d5819361622860844f2563438f0064cbb0 100644
--- a/indra/newview/skins/default/xui/ru/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ru/floater_tools.xml
@@ -201,6 +201,7 @@
 				<combo_box.item label="Заплатить за объект" name="Payobject"/>
 				<combo_box.item label="Открыть" name="Open"/>
 				<combo_box.item label="Увеличение" name="Zoom"/>
+				<combo_box.item label="Нет" name="None"/>
 			</combo_box>
 			<check_box label="Для продажи:" name="checkbox for sale"/>
 			<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index 8e94c4f5fd8330f0f54bd83cdb4bdfa84682d897..06f9d103eed0949ede3fa17afdd39f214d810ff1 100644
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -12,6 +12,7 @@
 		<menu_item_call label="Управление камерой..." name="Camera Controls"/>
 		<menu label="Движение" name="Movement">
 			<menu_item_call label="Сесть" name="Sit Down Here"/>
+			<menu_item_call label="Встать" name="Stand up"/>
 			<menu_item_check label="Полет" name="Fly"/>
 			<menu_item_check label="Всегда бегать" name="Always Run"/>
 			<menu_item_call label="Остановить анимацию" name="Stop Animating My Avatar"/>
@@ -293,6 +294,7 @@
 			<menu_item_check label="Площадь текстуры" name="Texture Area"/>
 			<menu_item_check label="Площадь грани" name="Face Area"/>
 			<menu_item_check label="Данные об уровнях детализации" name="LOD Info"/>
+			<menu_item_check label="Количество треугольников" name="Triangle Count"/>
 			<menu_item_check label="Очередь построителя" name="Build Queue"/>
 			<menu_item_check label="Освещение" name="Lights"/>
 			<menu_item_check label="Частицы" name="Particles"/>
@@ -405,6 +407,7 @@
 			<menu_item_check label="Показать скелет" name="Show Collision Skeleton"/>
 			<menu_item_check label="Показать кости" name="Show Bones"/>
 			<menu_item_check label="Отобразить действие агента" name="Display Agent Target"/>
+			<menu_item_check label="Показать пределы импостера" name="Show Impostor Extents"/>
 			<menu_item_call label="Вывод присоединений" name="Dump Attachments"/>
 			<menu_item_call label="Отладка текстур аватара" name="Debug Avatar Textures"/>
 			<menu_item_call label="Вывод локальных текстур" name="Dump Local Textures"/>
diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml
index 663cb808ae63b56a8ca5eb3e8b5fd117ebd5c513..9bef3d4b5346a8cf98c1c02551fd110cddbe06a2 100644
--- a/indra/newview/skins/default/xui/ru/notifications.xml
+++ b/indra/newview/skins/default/xui/ru/notifications.xml
@@ -1569,6 +1569,30 @@
 	<notification name="ProblemAddingEstateManagerBanned">
 		Невозможно добавить заблокированного жителя в список менеджеров землевладения.
 	</notification>
+	<notification name="ProblemBanningEstateManager">
+		Невозможно добавить заблокированного жителя в список менеджеров землевладения [AGENT].
+	</notification>
+	<notification name="GroupIsAlreadyInList">
+		&lt;nolink&gt;\[GROUP]&lt;/nolink&gt; уже находится в списке допущенных групп.
+	</notification>
+	<notification name="AgentIsAlreadyInList">
+		[AGENT] уже находится на вашем [LIST_TYPE] листе.
+	</notification>
+	<notification name="AgentsAreAlreadyInList">
+		[AGENT] уже находится на вашем [LIST_TYPE] листе.
+	</notification>
+	<notification name="AgentWasAddedToList">
+		[AGENT] был добавлен в [LIST_TYPE] лист [ESTATE].
+	</notification>
+	<notification name="AgentsWereAddedToList">
+		[AGENT] был добавлен в [LIST_TYPE] лист [ESTATE].
+	</notification>
+	<notification name="AgentWasRemovedFromList">
+		[AGENT] был удален из [LIST_TYPE] листа [ESTATE].
+	</notification>
+	<notification name="AgentsWereRemovedFromList">
+		[AGENT] был удален из [LIST_TYPE] листа [ESTATE].
+	</notification>
 	<notification name="CanNotChangeAppearanceUntilLoaded">
 		Нельзя изменять внешность, пока загружаются одежда и фигура.
 	</notification>
@@ -3164,16 +3188,22 @@
 		Не удалось подключиться к [VOICE_CHANNEL_NAME], повторите попытку позже.  Будет установлено подключение к локальному голосовому чату.
 	</notification>
 	<notification name="VoiceEffectsExpired">
-		Истек срок действия одного или нескольких типов изменения голоса, на которые вы подписаны.
-[[URL] Щелкните здесь], чтобы обновить подписку.
+		Истек срок действия подписки на один или несколько типов анимационного изменения голоса. 
+[[URL] Щелкните здесь], чтобы обновить подписку. 
+
+Если вы - владелец премиум-аккаунта, [[PREMIUM_URL] щелкните здесь], чтобы получить право на анимационное изменение голоса.
 	</notification>
 	<notification name="VoiceEffectsExpiredInUse">
-		Истек срок действия активного типа изменения голоса, применены настройки вашего обычного голоса.
-[[URL] Щелкните здесь], чтобы обновить подписку.
+		Истек срок действия анимационного изменения голоса, действуют настройки вашего обычного голоса. 
+[[URL] Щелкните здесь], чтобы обновить подписку. 
+
+Если вы - владелец премиум-аккаунта, [[PREMIUM_URL] щелкните здесь], чтобы получить право на анимационное изменение голоса.
 	</notification>
 	<notification name="VoiceEffectsWillExpire">
-		Срок действия одного или нескольких ваших типов изменения голоса истекает через [INTERVAL] дней или раньше.
-[[URL] Щелкните здесь], чтобы обновить подписку.
+		Срок действия одного или нескольких ваших типов анимационного изменения голоса истекает через [INTERVAL] дней или раньше. 
+[[URL] Щелкните здесь], чтобы обновить подписку. 
+
+Если вы - владелец премиум-аккаунта, [[PREMIUM_URL] щелкните здесь], чтобы получить право на анимационное изменение голоса.
 	</notification>
 	<notification name="VoiceEffectsNew">
 		Появились новые типы изменения голоса!
@@ -3225,6 +3255,9 @@
 	<notification name="SnapshotToComputerFailed">
 		Не удалось сохранить моментальный снимок на [PATH]: Диск переполнен. Необходимо [NEED_MEMORY] Кбайт, но доступно только  [FREE_MEMORY] Кбайт.
 	</notification>
+	<notification name="SnapshotToLocalDirNotExist">
+		Не удалось сохранить моментальный снимок на [PATH]: Каталог не существует.
+	</notification>
 	<notification name="PresetNotSaved">
 		Ошибка при сохранении пресета [NAME].
 	</notification>
diff --git a/indra/newview/skins/default/xui/ru/panel_login.xml b/indra/newview/skins/default/xui/ru/panel_login.xml
index 2e0ae89b286745d9903c41b44108a70fcda741a8..14107286e59222599171a67225c08b4426fd502f 100644
--- a/indra/newview/skins/default/xui/ru/panel_login.xml
+++ b/indra/newview/skins/default/xui/ru/panel_login.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <panel name="panel_login">
-	<panel.string name="forgot_password_url">http://secondlife.com/account/request.php</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php
+	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="ui_stack">
 		<layout_panel name="ui_container">
 			<combo_box label="Имя пользователя" name="username_combo" tool_tip="Имя пользователя, которое вы выбрали при регистрации, например, «bobsmith12» или «Steller Sunshine»"/>
@@ -11,8 +16,13 @@
 			</combo_box>
 			<button label="Войти" name="connect_btn"/>
 			<check_box label="Запомнить меня" name="remember_check"/>
-			<text name="forgot_password_text">Забыли пароль?</text>
+			<text name="forgot_password_text">
+				Забыли пароль?
+			</text>
 			<combo_box label="Выберите сетку" name="server_combo"/>
+			<text name="sign_up_text">
+				Регистрация
+			</text>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_login_first.xml b/indra/newview/skins/default/xui/ru/panel_login_first.xml
index bb4875373a251f57e6e522425dde964c3c220ab6..5db81ea7ca518eda66cb768df44b5e75b440c1a4 100644
--- a/indra/newview/skins/default/xui/ru/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/ru/panel_login_first.xml
@@ -3,6 +3,9 @@
 	<panel.string name="forgot_password_url">
 		http://secondlife.com/account/request.php
 	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="logo_stack">
 		<layout_panel name="parent_panel2">
 			<layout_stack name="widget_stack">
@@ -14,6 +17,9 @@
 					<text name="forgot_password_text">
 						Забытый пароль
 					</text>
+					<text name="sign_up_text">
+						Регистрация
+					</text>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_region_access.xml b/indra/newview/skins/default/xui/ru/panel_region_access.xml
new file mode 100644
index 0000000000000000000000000000000000000000..48adfbcd95e4e006ab7ff1d6f9c3da78e303b1c9
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_region_access.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Доступ" name="Access">
+	<tab_container name="tabs">
+		<panel label="МЕНЕДЖЕРЫ ЗЕМЛЕВЛАДЕНИЯ" name="estate_managers_panel">
+			<text name="estate_manager_label">
+				Менеджеры землевладения:
+			</text>
+			<name_list name="estate_manager_name_list">
+				<columns label="Имя" name="name"/>
+			</name_list>
+			<button label="Добавить..." name="add_estate_manager_btn"/>
+			<button label="Удалить..." name="remove_estate_manager_btn"/>
+		</panel>
+		<panel label="РАЗРЕШЕННЫЕ" name="allowed_panel">
+			<panel label="top_panel" name="allowed_search_panel">
+				<filter_editor label="Поиск допущенных агентов" name="allowed_search_input"/>
+			</panel>
+			<text name="allow_resident_label">
+				Разрешено всегда:
+			</text>
+			<name_list name="allowed_avatar_name_list">
+				<columns label="Имя" name="name"/>
+			</name_list>
+			<button label="Добавить..." name="add_allowed_avatar_btn"/>
+			<button label="Удалить..." name="remove_allowed_avatar_btn"/>
+		</panel>
+		<panel label="ДОПУЩЕННЫЕ ГРУППЫ" name="allowed_groups_panel">
+			<panel label="top_panel" name="allowed_group_search_panel">
+				<filter_editor label="Поиск допущенных групп" name="allowed_group_search_input"/>
+			</panel>
+			<text name="allow_group_label">
+				Допуск групп всегда разрешен:
+			</text>
+			<name_list name="allowed_group_name_list">
+				<columns label="Имя" name="name"/>
+			</name_list>
+			<button label="Добавить..." name="add_allowed_group_btn"/>
+			<button label="Удалить..." name="remove_allowed_group_btn"/>
+		</panel>
+		<panel label="ЗАБЛОКИРОВАНЫ" name="banned_panel">
+			<panel label="top_panel" name="banned_search_panel">
+				<filter_editor label="Поиск заблокированных агентов" name="banned_search_input"/>
+			</panel>
+			<text name="ban_resident_label">
+				Всегда заблокированы:
+			</text>
+			<name_list name="banned_avatar_name_list">
+				<columns label="Имя" name="name"/>
+				<columns label="Дата последнего входа" name="last_login_date"/>
+				<columns label="Дата блокировки" name="ban_date"/>
+				<columns label="Заблокированы по инициативе" name="bannedby"/>
+			</name_list>
+			<button label="Добавить..." name="add_banned_avatar_btn"/>
+			<button label="Удалить..." name="remove_banned_avatar_btn"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_region_estate.xml b/indra/newview/skins/default/xui/ru/panel_region_estate.xml
index 843fcaa9f821e4ddbd3e3b4f6e93425744438a72..5789058b3b25f5529a152b102e2b18a2a312fe32 100644
--- a/indra/newview/skins/default/xui/ru/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/ru/panel_region_estate.xml
@@ -16,7 +16,7 @@
 		(неизвестно)
 	</text>
 	<radio_group name="externally_visible_radio">
-		<radio_item label="Разрешено только нижеперечисленным жителям и группам" name="estate_restricted_access"/>
+		<radio_item label="Разрешено только жителям и группам, перечисленным на вкладке доступа" name="estate_restricted_access"/>
 		<radio_item label="Доступ открыт для всех" name="estate_public_access"/>
 	</radio_group>
 	<check_box label="Должен быть 18 и старше" name="limit_age_verified" tool_tip="Доступ к этому землевладению имеют только жители 18 лет и старше. Более подробная информация находится здесь: [SUPPORT_SITE]."/>
@@ -36,7 +36,7 @@
 	<button label="Добавить..." name="add_allowed_avatar_btn"/>
 	<button label="Удалить..." name="remove_allowed_avatar_btn"/>
 	<text name="allow_group_label">
-		Допуск групп всегда разрешен:
+		Группы всегда разрешены:
 	</text>
 	<text name="ban_resident_label">
 		Всегда заблокированы:
diff --git a/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml b/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml
index 4059a800f065d0a8d0f04ee8e726ebe58c6831a0..d7f96cab1fa45a5671e4c4137c4c0c92e947b643 100644
--- a/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="object properties" title="Профиль объекта">
-	<panel.string name="text deed continued">Сделка</panel.string>
-	<panel.string name="text deed">Сделка</panel.string>
-	<panel.string name="text modify info 1">Этот объект можно изменять</panel.string>
-	<panel.string name="text modify info 2">Эти объекты можно изменять</panel.string>
-	<panel.string name="text modify info 3">Этот объект нельзя изменять</panel.string>
-	<panel.string name="text modify info 4">Эти объекты нельзя изменять</panel.string>
-	<panel.string name="text modify info 5">Этот объект нельзя изменять через границу региона</panel.string>
-	<panel.string name="text modify info 6">Эти объекты нельзя изменять через границу региона</panel.string>
-	<panel.string name="text modify warning">Этот объект содержит объединенные части</panel.string>
-	<panel.string name="Cost Default">Цена: L$</panel.string>
-	<panel.string name="Cost Total">Итоговая цена: L$</panel.string>
-	<panel.string name="Cost Per Unit">Цена за: L$</panel.string>
-	<panel.string name="Cost Mixed">Смешанная цена</panel.string>
-	<panel.string name="Sale Mixed">Смешанная продажа</panel.string>
+	<panel.string name="text deed continued">
+		Сделка
+	</panel.string>
+	<panel.string name="text deed">
+		Сделка
+	</panel.string>
+	<panel.string name="text modify info 1">
+		Этот объект можно изменять
+	</panel.string>
+	<panel.string name="text modify info 2">
+		Эти объекты можно изменять
+	</panel.string>
+	<panel.string name="text modify info 3">
+		Этот объект нельзя изменять
+	</panel.string>
+	<panel.string name="text modify info 4">
+		Эти объекты нельзя изменять
+	</panel.string>
+	<panel.string name="text modify info 5">
+		Этот объект нельзя изменять через границу региона
+	</panel.string>
+	<panel.string name="text modify info 6">
+		Эти объекты нельзя изменять через границу региона
+	</panel.string>
+	<panel.string name="text modify warning">
+		Этот объект содержит объединенные части
+	</panel.string>
+	<panel.string name="Cost Default">
+		Цена: L$
+	</panel.string>
+	<panel.string name="Cost Total">
+		Итоговая цена: L$
+	</panel.string>
+	<panel.string name="Cost Per Unit">
+		Цена за: L$
+	</panel.string>
+	<panel.string name="Cost Mixed">
+		Смешанная цена
+	</panel.string>
+	<panel.string name="Sale Mixed">
+		Смешанная продажа
+	</panel.string>
 	<text name="title" value="Профиль объекта"/>
 	<text name="where" value="(в мире)"/>
 	<panel label="" name="properties_panel">
-		<text name="Name:">Название:</text>
-		<text name="Description:">Описание:</text>
-		<text name="CreatorNameLabel">Создатель:</text>
-		<text name="Owner:">Владелец:</text>
-		<text name="Group_label">Группа:</text>
+		<text name="Name:">
+			Название:
+		</text>
+		<text name="Description:">
+			Описание:
+		</text>
+		<text name="CreatorNameLabel">
+			Создатель:
+		</text>
+		<text name="Owner:">
+			Владелец:
+		</text>
+		<text name="Group_label">
+			Группа:
+		</text>
 		<button name="button set group" tool_tip="Выберите группу для передачи ей прав доступа к объекту"/>
 		<name_box initial_value="Загрузка..." name="Group Name Proxy"/>
 		<button label="Сделка" label_selected="Сделка" name="button deed" tool_tip="В результате сделки объект передается группе, при этом права на него будут соответствовать правам следующего владельца. Переданный группе объект может передаваться должностным лицом группы."/>
-		<text name="label click action">Действие по щелчку:</text>
+		<text name="label click action">
+			Действие по щелчку:
+		</text>
 		<combo_box name="clickaction">
 			<combo_box.item label="Коснуться (по умолчанию)" name="Touch/grab(default)"/>
 			<combo_box.item label="Сесть на объект" name="Sitonobject"/>
@@ -33,15 +73,24 @@
 			<combo_box.item label="Заплатить за объект" name="Payobject"/>
 			<combo_box.item label="Открыть" name="Open"/>
 			<combo_box.item label="Приблизить" name="Zoom"/>
+			<combo_box.item label="Нет" name="None"/>
 		</combo_box>
 		<panel name="perms_inv">
-			<text name="perm_modify">Этот объект можно изменять</text>
-			<text name="Anyone can:">Все:</text>
+			<text name="perm_modify">
+				Этот объект можно изменять
+			</text>
+			<text name="Anyone can:">
+				Все:
+			</text>
 			<check_box label="Копировать" name="checkbox allow everyone copy"/>
 			<check_box label="Переместить" name="checkbox allow everyone move"/>
-			<text name="GroupLabel">Группа:</text>
+			<text name="GroupLabel">
+				Группа:
+			</text>
 			<check_box label="Поделиться" name="checkbox share with group" tool_tip="Позволить всем участникам выбранной группы получить установленные вам права на этот объект. Для включения ролевых ограничений необходимо произвести сделку."/>
-			<text name="NextOwnerLabel">Следующий владелец:</text>
+			<text name="NextOwnerLabel">
+				Следующий владелец:
+			</text>
 			<check_box label="Изменять" name="checkbox next owner can modify"/>
 			<check_box label="Копировать" name="checkbox next owner can copy"/>
 			<check_box label="Передать" name="checkbox next owner can transfer" tool_tip="Следующий владелец может отдать или перепродать объект"/>
@@ -54,13 +103,27 @@
 		</combo_box>
 		<spinner label="Цена: L$" name="Edit Cost"/>
 		<check_box label="Показать в результатах поиска" name="search_check" tool_tip="Показывать объект в результатах поиска"/>
-		<text name="pathfinding_attributes_label">Атрибуты поиска пути:</text>
-		<text name="B:">Н:</text>
-		<text name="O:">O:</text>
-		<text name="G:">G:</text>
-		<text name="E:">Ð’:</text>
-		<text name="N:">С:</text>
-		<text name="F:">F:</text>
+		<text name="pathfinding_attributes_label">
+			Атрибуты поиска пути:
+		</text>
+		<text name="B:">
+			Н:
+		</text>
+		<text name="O:">
+			O:
+		</text>
+		<text name="G:">
+			G:
+		</text>
+		<text name="E:">
+			Ð’:
+		</text>
+		<text name="N:">
+			С:
+		</text>
+		<text name="F:">
+			F:
+		</text>
 	</panel>
 	<panel name="button_panel">
 		<button label="Открыть" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index dc4741e9bdfcadced8a403d4072d1f097d6c48e8..1a16600744f23a9253f66e714e5822dc7c03cca6 100644
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -636,15 +636,6 @@ support@secondlife.com.
 	<string name="BUTTON_HELP">
 		Показать справку
 	</string>
-	<string name="TooltipNotecardNotAllowedTypeDrop">
-		Элементы этого типа не могут быть занесены в 
-карточку для комментариев в этом регионе.
-	</string>
-	<string name="TooltipNotecardOwnerRestrictedDrop">
-		Только элементы с безусловным разрешением 
-‘следующего владельца’ можно внести 
-в карточки для комментариев.
-	</string>
 	<string name="Searching">
 		Поиск...
 	</string>
@@ -793,9 +784,6 @@ support@secondlife.com.
 	<string name="symbolic link">
 		ссылку
 	</string>
-	<string name="settings blob">
-		настройки
-	</string>
 	<string name="symbolic folder link">
 		ссылку на папку
 	</string>
@@ -2238,6 +2226,18 @@ support@secondlife.com.
 	<string name="RegionInfoListTypeBannedAgents">
 		Всегда заблокированы
 	</string>
+	<string name="RegionInfoAllEstates">
+		все землевладения
+	</string>
+	<string name="RegionInfoManagedEstates">
+		управляемые землевладения
+	</string>
+	<string name="RegionInfoThisEstate">
+		это землевладение
+	</string>
+	<string name="AndNMore">
+		и \[EXTRA_COUNT] более
+	</string>
 	<string name="ScriptLimitsParcelScriptMemory">
 		Память под скрипты на участке
 	</string>
diff --git a/indra/newview/skins/default/xui/tr/floater_auction.xml b/indra/newview/skins/default/xui/tr/floater_auction.xml
index 3c945a9c964e414d3b35be0145de814ef1b6fe38..dccf47d81986f74667fa562cb2d1e0940ba628b4 100644
--- a/indra/newview/skins/default/xui/tr/floater_auction.xml
+++ b/indra/newview/skins/default/xui/tr/floater_auction.xml
@@ -3,8 +3,8 @@
 	<floater.string name="already for sale">
 		Zaten satışa çıkarılmış olan parselleri açık artırmaya sunamazsınız.
 	</floater.string>
-	<check_box initial_value="true" label="Sarı seçim çiti dahil edilsin" name="fence_check"/>
-	<button label="Anlık Görüntü" label_selected="Anlık Görüntü" name="snapshot_btn"/>
+	<check_box initial_value="true" label="Sarı seçim çitini dahil et" name="fence_check"/>
+	<button label="Anlık görüntü" label_selected="Anlık görüntü" name="snapshot_btn"/>
 	<button label="Herkese Sat" label_selected="Herkese Sat" name="sell_to_anyone_btn"/>
 	<button label="Ayarları Temizle" label_selected="Ayarları Temizle" name="reset_parcel_btn"/>
 	<button label="Açık Artırmayı Başlat" label_selected="Açık Artırmayı Başlat" name="start_auction_btn"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_tools.xml b/indra/newview/skins/default/xui/tr/floater_tools.xml
index 0c26f717afe67048b05dd69371395271f8a65d19..cd069dccf0bc738bf263c00154e1b461df598cf2 100644
--- a/indra/newview/skins/default/xui/tr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/tr/floater_tools.xml
@@ -201,6 +201,7 @@
 				<combo_box.item label="Nesneye ödeme yap" name="Payobject"/>
 				<combo_box.item label="Aç" name="Open"/>
 				<combo_box.item label="Yakınlaştır" name="Zoom"/>
+				<combo_box.item label="Yok" name="None"/>
 			</combo_box>
 			<check_box label="Satılık:" name="checkbox for sale"/>
 			<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index 384c89b028e87ed4f3a45b8ecf0d97787e15b3e3..1d03cadbb2016ffe3d414ed200f70ac9329cc55a 100644
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -12,6 +12,7 @@
 		<menu_item_call label="Kamera Denetimleri..." name="Camera Controls"/>
 		<menu label="Hareket" name="Movement">
 			<menu_item_call label="Otur" name="Sit Down Here"/>
+			<menu_item_call label="Kalk" name="Stand up"/>
 			<menu_item_check label="Uç" name="Fly"/>
 			<menu_item_check label="Daima KoÅŸ" name="Always Run"/>
 			<menu_item_call label="Beni Anime Etmeyi Durdur" name="Stop Animating My Avatar"/>
@@ -294,6 +295,7 @@
 			<menu_item_check label="Doku Alanı" name="Texture Area"/>
 			<menu_item_check label="Yüz Alanı" name="Face Area"/>
 			<menu_item_check label="Ayrıntı Seviyesi Bilgisi" name="LOD Info"/>
+			<menu_item_check label="Üçgen Sayısı" name="Triangle Count"/>
 			<menu_item_check label="Ä°nÅŸa KuyruÄŸu" name="Build Queue"/>
 			<menu_item_check label="Işıklar" name="Lights"/>
 			<menu_item_check label="Parçacıklar" name="Particles"/>
@@ -406,6 +408,7 @@
 			<menu_item_check label="Çarpışma İskeletini Göster" name="Show Collision Skeleton"/>
 			<menu_item_check label="Kemikleri Göster" name="Show Bones"/>
 			<menu_item_check label="Aracı Hedefini Göster" name="Display Agent Target"/>
+			<menu_item_check label="Düşük Grafik Özellikli Avatar Kapsamını Göster" name="Show Impostor Extents"/>
 			<menu_item_call label="Aksesuarların Dökümünü Al" name="Dump Attachments"/>
 			<menu_item_call label="Avatar Dokuları İçin Hata Ayıklama" name="Debug Avatar Textures"/>
 			<menu_item_call label="Yerel Dokuların Dökümünü Al" name="Dump Local Textures"/>
diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml
index 5cca46d483a6b8b0c6ff12cafbada187d56d374b..ea1447a3679ca37a724c3266ce3f55f06ff08343 100644
--- a/indra/newview/skins/default/xui/tr/notifications.xml
+++ b/indra/newview/skins/default/xui/tr/notifications.xml
@@ -1570,6 +1570,30 @@ Lütfen sadece bir nesne seçin ve tekrar deneyin.
 	<notification name="ProblemAddingEstateManagerBanned">
 		Engellenmiş sakin, gayrimenkul yöneticisi listesine eklenemez.
 	</notification>
+	<notification name="ProblemBanningEstateManager">
+		Gayrimenkul yöneticisi [AGENT] engellenen listesine eklenemiyor.
+	</notification>
+	<notification name="GroupIsAlreadyInList">
+		&lt;nolink&gt;[GROUP]&lt;/nolink&gt; zaten İzin Verilen Gruplar listesinde yer alıyor.
+	</notification>
+	<notification name="AgentIsAlreadyInList">
+		[AGENT] zaten [LIST_TYPE] listenizde yer alıyor.
+	</notification>
+	<notification name="AgentsAreAlreadyInList">
+		[AGENT] zaten [LIST_TYPE] listenizde yer alıyor.
+	</notification>
+	<notification name="AgentWasAddedToList">
+		[AGENT], [ESTATE] [LIST_TYPE] listesine eklendi.
+	</notification>
+	<notification name="AgentsWereAddedToList">
+		[AGENT], [ESTATE] [LIST_TYPE] listesine eklendi.
+	</notification>
+	<notification name="AgentWasRemovedFromList">
+		[AGENT], [ESTATE] [LIST_TYPE] listesinden kaldırıldı.
+	</notification>
+	<notification name="AgentsWereRemovedFromList">
+		[AGENT], [ESTATE] [LIST_TYPE] listesinden kaldırıldı.
+	</notification>
 	<notification name="CanNotChangeAppearanceUntilLoaded">
 		Giysi ve şekil yüklenene kadar görünüm değiştirilemez.
 	</notification>
@@ -3164,16 +3188,22 @@ Sohbete katılmak için Kabul Et&apos;i, daveti geri çevirmek için ise Reddet&
 		[VOICE_CHANNEL_NAME] ile bağlantı kurulamadı, lütfen daha sonra tekrar deneyin. Şimdi Yakındaki bir Sesli Sohbete yeniden bağlanılacaksınız.
 	</notification>
 	<notification name="VoiceEffectsExpired">
-		Abone olduğunuz Ses Şekillerinden birinin ya da daha fazlasının süresi dolmuş.
-Aboneliğinizi yenilemek için [[URL] burayı tıklatın].
+		Abone olduğunuz Ses Dönüşümlerinden birinin ya da daha fazlasının süresi dolmuş. 
+Aboneliğinizi yenilemek için [[URL] buraya tıklayın]. 
+
+Özel Üye iseniz, ses dönüştürme özelliğini almak için [[PREMIUM_URL] buraya tıklayın].
 	</notification>
 	<notification name="VoiceEffectsExpiredInUse">
-		Etkin Ses Şeklinin süresi dolmuş, normal ses ayarlarınız uygulandı.
-Aboneliğinizi yenilemek için [[URL] burayı tıklatın].
+		Etkin Ses Dönüşümünün süresi dolmuş, normal ses ayarlarınız uygulandı. 
+Aboneliğinizi yenilemek için [[URL] buraya tıklayın]. 
+
+Özel Üye iseniz, ses dönüştürme özelliğini almak için [[PREMIUM_URL] buraya tıklayın].
 	</notification>
 	<notification name="VoiceEffectsWillExpire">
-		Abone olduğunuz Ses Şekillerinden birinin ya da daha fazlasının süresi [INTERVAL] gün içinde dolacak.
-Aboneliğinizi yenilemek için [[URL] burayı tıklatın].
+		Ses Dönüşümlerinizden birinin ya da daha fazlasının süresi [INTERVAL] günden daha az bir zamanda dolacak. 
+Aboneliğinizi yenilemek için [[URL] buraya tıklayın]. 
+
+Özel Üye iseniz, ses dönüştürme özelliğini almak için [[PREMIUM_URL] buraya tıklayın].
 	</notification>
 	<notification name="VoiceEffectsNew">
 		Yeni Ses Şekilleri kullanılabilir!
@@ -3225,6 +3255,9 @@ Güvenliğiniz için birkaç saniye engellenecek.
 	<notification name="SnapshotToComputerFailed">
 		Anlık görüntü [PATH] yoluna kaydedilemedi: Disk dolu. [NEED_MEMORY]KB gerekli ancak yalnızca [FREE_MEMORY]KB boş.
 	</notification>
+	<notification name="SnapshotToLocalDirNotExist">
+		Anlık görüntü [PATH] yoluna kaydedilemedi: Dizin mevcut değil.
+	</notification>
 	<notification name="PresetNotSaved">
 		Ön ayar ([NAME]) kaydedilirken hata oluştu.
 	</notification>
diff --git a/indra/newview/skins/default/xui/tr/panel_login.xml b/indra/newview/skins/default/xui/tr/panel_login.xml
index 8b320ce9aa68c97f3a71408e1d8991167b5b9ec6..e9fec9783f176c32aa14adcf056782a108565f49 100644
--- a/indra/newview/skins/default/xui/tr/panel_login.xml
+++ b/indra/newview/skins/default/xui/tr/panel_login.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <panel name="panel_login">
-	<panel.string name="forgot_password_url">http://secondlife.com/account/request.php</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php
+	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="ui_stack">
 		<layout_panel name="ui_container">
 			<combo_box label="Kullanıcı Adı" name="username_combo" tool_tip="Kaydolduğunuzda seçtiğiniz kullanıcı adı, örn. mustafayalcin12 veya Faruk Gungoren"/>
@@ -11,8 +16,13 @@
 			</combo_box>
 			<button label="Oturum Aç" name="connect_btn"/>
 			<check_box label="Beni hatırla" name="remember_check"/>
-			<text name="forgot_password_text">Parolamı unuttum</text>
+			<text name="forgot_password_text">
+				Parolamı unuttum
+			</text>
 			<combo_box label="Ağ seç" name="server_combo"/>
+			<text name="sign_up_text">
+				Kaydol
+			</text>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_login_first.xml b/indra/newview/skins/default/xui/tr/panel_login_first.xml
index 622edd0a8d22e5650d1d1ce8a3a238f77c220bf0..1fc80c2b977624e99d7e7248a777b3d8917eae3a 100644
--- a/indra/newview/skins/default/xui/tr/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/tr/panel_login_first.xml
@@ -3,6 +3,9 @@
 	<panel.string name="forgot_password_url">
 		http://secondlife.com/account/request.php
 	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="logo_stack">
 		<layout_panel name="parent_panel2">
 			<layout_stack name="widget_stack">
@@ -14,6 +17,9 @@
 					<text name="forgot_password_text">
 						Parolamı unuttum
 					</text>
+					<text name="sign_up_text">
+						Kaydol
+					</text>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_region_access.xml b/indra/newview/skins/default/xui/tr/panel_region_access.xml
new file mode 100644
index 0000000000000000000000000000000000000000..57e721bc04e6c08e0b8d4ccf3a71543fb6dfbf33
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_region_access.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="EriÅŸim" name="Access">
+	<tab_container name="tabs">
+		<panel label="GAYRİMENKUL YÖNETİCİLERİ" name="estate_managers_panel">
+			<text name="estate_manager_label">
+				Gayrimenkul Yöneticileri:
+			</text>
+			<name_list name="estate_manager_name_list">
+				<columns label="Ad" name="name"/>
+			</name_list>
+			<button label="Ekle..." name="add_estate_manager_btn"/>
+			<button label="Kaldır..." name="remove_estate_manager_btn"/>
+		</panel>
+		<panel label="Ä°ZÄ°N VERÄ°LEN" name="allowed_panel">
+			<panel label="top_panel" name="allowed_search_panel">
+				<filter_editor label="İzin verilen aracıları ara" name="allowed_search_input"/>
+			</panel>
+			<text name="allow_resident_label">
+				Her zaman izin verilen:
+			</text>
+			<name_list name="allowed_avatar_name_list">
+				<columns label="Ad" name="name"/>
+			</name_list>
+			<button label="Ekle..." name="add_allowed_avatar_btn"/>
+			<button label="Kaldır..." name="remove_allowed_avatar_btn"/>
+		</panel>
+		<panel label="Ä°ZÄ°N VERÄ°LEN GRUPLAR" name="allowed_groups_panel">
+			<panel label="top_panel" name="allowed_group_search_panel">
+				<filter_editor label="İzin verilen grupları ara" name="allowed_group_search_input"/>
+			</panel>
+			<text name="allow_group_label">
+				Her zaman izin verilen gruplar:
+			</text>
+			<name_list name="allowed_group_name_list">
+				<columns label="Ad" name="name"/>
+			</name_list>
+			<button label="Ekle..." name="add_allowed_group_btn"/>
+			<button label="Kaldır..." name="remove_allowed_group_btn"/>
+		</panel>
+		<panel label="ENGELLENEN" name="banned_panel">
+			<panel label="top_panel" name="banned_search_panel">
+				<filter_editor label="Engellenen aracıları ara" name="banned_search_input"/>
+			</panel>
+			<text name="ban_resident_label">
+				Her zaman engellenen:
+			</text>
+			<name_list name="banned_avatar_name_list">
+				<columns label="Ad" name="name"/>
+				<columns label="Son oturum açma tarihi" name="last_login_date"/>
+				<columns label="Engellenme tarihi" name="ban_date"/>
+				<columns label="Engelleyen" name="bannedby"/>
+			</name_list>
+			<button label="Ekle..." name="add_banned_avatar_btn"/>
+			<button label="Kaldır..." name="remove_banned_avatar_btn"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_region_estate.xml b/indra/newview/skins/default/xui/tr/panel_region_estate.xml
index fc8dab9c69375b8bca545fc9b8842b291fb97fde..ad5553c5820c4adfbd25ba30ba54518ce661dd86 100644
--- a/indra/newview/skins/default/xui/tr/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/tr/panel_region_estate.xml
@@ -16,7 +16,7 @@
 		(bilinmiyor)
 	</text>
 	<radio_group name="externally_visible_radio">
-		<radio_item label="Yalnızca aşağıda listelenen sakinlere ve gruplara izin ver" name="estate_restricted_access"/>
+		<radio_item label="Sadece EriÅŸim sekmesinde listelenen sakinlere ve gruplara izin ver" name="estate_restricted_access"/>
 		<radio_item label="Herkes ziyaret edebilir" name="estate_public_access"/>
 	</radio_group>
 	<check_box label="18 yaşından büyük olmalıdır" name="limit_age_verified" tool_tip="Sakinlerin bu gayrimenkule erişebilmesi için 18 veya üzeri bir yaşta olmaları gerekir. Daha fazla bilgi için [SUPPORT_SITE] adresini ziyaret edin."/>
diff --git a/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml b/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml
index ddb4bbf160dffa391566f48b9f5ff99d4e24dfae..d3d3d4e0f5a6132b38256d0b3ffcd955c7213e86 100644
--- a/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="object properties" title="Nesne Profili">
-	<panel.string name="text deed continued">Devret</panel.string>
-	<panel.string name="text deed">Devret</panel.string>
-	<panel.string name="text modify info 1">Bu nesneyi deÄŸiÅŸtirebilirsiniz</panel.string>
-	<panel.string name="text modify info 2">Bu nesneleri deÄŸiÅŸtirebilirsiniz</panel.string>
-	<panel.string name="text modify info 3">Bu nesneyi deÄŸiÅŸtiremezsiniz</panel.string>
-	<panel.string name="text modify info 4">Bu nesneleri deÄŸiÅŸtiremezsiniz</panel.string>
-	<panel.string name="text modify info 5">Bir bölge sınırı üzerinden bu nesneyi değiştiremezsiniz</panel.string>
-	<panel.string name="text modify info 6">Bir bölge sınırı üzerinden bu nesneleri değiştiremezsiniz</panel.string>
-	<panel.string name="text modify warning">Bu nesne bağlantılı parçalara sahip</panel.string>
-	<panel.string name="Cost Default">Fiyat: L$</panel.string>
-	<panel.string name="Cost Total">Toplam Fiyat: L$</panel.string>
-	<panel.string name="Cost Per Unit">Birim Fiyatı: L$</panel.string>
-	<panel.string name="Cost Mixed">Karma Fiyat</panel.string>
-	<panel.string name="Sale Mixed">Karma Satış</panel.string>
+	<panel.string name="text deed continued">
+		Devret
+	</panel.string>
+	<panel.string name="text deed">
+		Devret
+	</panel.string>
+	<panel.string name="text modify info 1">
+		Bu nesneyi deÄŸiÅŸtirebilirsiniz
+	</panel.string>
+	<panel.string name="text modify info 2">
+		Bu nesneleri deÄŸiÅŸtirebilirsiniz
+	</panel.string>
+	<panel.string name="text modify info 3">
+		Bu nesneyi deÄŸiÅŸtiremezsiniz
+	</panel.string>
+	<panel.string name="text modify info 4">
+		Bu nesneleri deÄŸiÅŸtiremezsiniz
+	</panel.string>
+	<panel.string name="text modify info 5">
+		Bir bölge sınırı üzerinden bu nesneyi değiştiremezsiniz
+	</panel.string>
+	<panel.string name="text modify info 6">
+		Bir bölge sınırı üzerinden bu nesneleri değiştiremezsiniz
+	</panel.string>
+	<panel.string name="text modify warning">
+		Bu nesne bağlantılı parçalara sahip
+	</panel.string>
+	<panel.string name="Cost Default">
+		Fiyat: L$
+	</panel.string>
+	<panel.string name="Cost Total">
+		Toplam Fiyat: L$
+	</panel.string>
+	<panel.string name="Cost Per Unit">
+		Birim Fiyatı: L$
+	</panel.string>
+	<panel.string name="Cost Mixed">
+		Karma Fiyat
+	</panel.string>
+	<panel.string name="Sale Mixed">
+		Karma Satış
+	</panel.string>
 	<text name="title" value="Nesne Profili"/>
 	<text name="where" value="(SL Dünyası)"/>
 	<panel label="" name="properties_panel">
-		<text name="Name:">Ad:</text>
-		<text name="Description:">Açıklama:</text>
-		<text name="CreatorNameLabel">OluÅŸturan:</text>
-		<text name="Owner:">Sahip:</text>
-		<text name="Group_label">Grup:</text>
+		<text name="Name:">
+			Ad:
+		</text>
+		<text name="Description:">
+			Açıklama:
+		</text>
+		<text name="CreatorNameLabel">
+			OluÅŸturan:
+		</text>
+		<text name="Owner:">
+			Sahip:
+		</text>
+		<text name="Group_label">
+			Grup:
+		</text>
 		<button name="button set group" tool_tip="Bu nesnenin izinlerini paylaşmak için bir grup seçin"/>
 		<name_box initial_value="Yükleniyor..." name="Group Name Proxy"/>
 		<button label="Devret" label_selected="Devret" name="button deed" tool_tip="Bu nesne devredilerek verildiğinde, nesnenin sonraki sahibi için izinler geçerli olur. Grup içerisinde paylaşılan nesneler bir grup yetkilisi tarafından devredilebilir."/>
-		<text name="label click action">Şu eylem için tıklayın:</text>
+		<text name="label click action">
+			Şu eylem için tıklayın:
+		</text>
 		<combo_box name="clickaction">
 			<combo_box.item label="Dokun (varsayılan)" name="Touch/grab(default)"/>
 			<combo_box.item label="Nesnenin üzerine otur" name="Sitonobject"/>
@@ -33,15 +73,24 @@
 			<combo_box.item label="Nesneye ödeme yap" name="Payobject"/>
 			<combo_box.item label="Aç" name="Open"/>
 			<combo_box.item label="Yakınlaştır" name="Zoom"/>
+			<combo_box.item label="Yok" name="None"/>
 		</combo_box>
 		<panel name="perms_inv">
-			<text name="perm_modify">Bu nesneyi deÄŸiÅŸtirebilirsiniz</text>
-			<text name="Anyone can:">Herkes:</text>
+			<text name="perm_modify">
+				Bu nesneyi deÄŸiÅŸtirebilirsiniz
+			</text>
+			<text name="Anyone can:">
+				Herkes:
+			</text>
 			<check_box label="Kopyala" name="checkbox allow everyone copy"/>
 			<check_box label="Hareket Et" name="checkbox allow everyone move"/>
-			<text name="GroupLabel">Grup:</text>
+			<text name="GroupLabel">
+				Grup:
+			</text>
 			<check_box label="Paylaş" name="checkbox share with group" tool_tip="Ayarlanan grubun tüm üyelerinin, bu nesne için değiştirme izinlerinizi paylaşmasına izin verir. Rol kısıtlamalarını etkinleştirmek için Devretme yapmalısınız."/>
-			<text name="NextOwnerLabel">Sonraki sahip:</text>
+			<text name="NextOwnerLabel">
+				Sonraki sahip:
+			</text>
 			<check_box label="DeÄŸiÅŸtir" name="checkbox next owner can modify"/>
 			<check_box label="Kopyala" name="checkbox next owner can copy"/>
 			<check_box label="Aktar" name="checkbox next owner can transfer" tool_tip="Sonraki sahibi bu nesneyi verebilir veya tekrar satabilir"/>
@@ -54,13 +103,27 @@
 		</combo_box>
 		<spinner label="Fiyat: L$" name="Edit Cost"/>
 		<check_box label="Aramada göster" name="search_check" tool_tip="Kişiler arama sonuçlarında bu nesneyi görebilsin"/>
-		<text name="pathfinding_attributes_label">Yol bulma özellikleri:</text>
-		<text name="B:">B:</text>
-		<text name="O:">O:</text>
-		<text name="G:">G:</text>
-		<text name="E:">E:</text>
-		<text name="N:">N:</text>
-		<text name="F:">F:</text>
+		<text name="pathfinding_attributes_label">
+			Yol bulma özellikleri:
+		</text>
+		<text name="B:">
+			B:
+		</text>
+		<text name="O:">
+			O:
+		</text>
+		<text name="G:">
+			G:
+		</text>
+		<text name="E:">
+			E:
+		</text>
+		<text name="N:">
+			N:
+		</text>
+		<text name="F:">
+			F:
+		</text>
 	</panel>
 	<panel name="button_panel">
 		<button label="Aç" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml
index 16bad98bc49e62f99c19beb564e23a0d6916e1cc..db627f1bc1fb80f7c486263b3d4a6c447a23738f 100644
--- a/indra/newview/skins/default/xui/tr/strings.xml
+++ b/indra/newview/skins/default/xui/tr/strings.xml
@@ -2238,6 +2238,18 @@ Bu mesaj size gelmeye devam ederse lütfen http://support.secondlife.com adresin
 	<string name="RegionInfoListTypeBannedAgents">
 		Her zaman engellenen
 	</string>
+	<string name="RegionInfoAllEstates">
+		tüm gayrimenkuller
+	</string>
+	<string name="RegionInfoManagedEstates">
+		yönetilen gayrimenkuller
+	</string>
+	<string name="RegionInfoThisEstate">
+		bu gayrimenkul
+	</string>
+	<string name="AndNMore">
+		ve [EXTRA_COUNT] tane daha
+	</string>
 	<string name="ScriptLimitsParcelScriptMemory">
 		Parsel Komut Dosyası Belleği
 	</string>
diff --git a/indra/newview/skins/default/xui/zh/floater_auction.xml b/indra/newview/skins/default/xui/zh/floater_auction.xml
index 1b589a92ccf7327daf5b787bfbebf9bfef295009..0ab94160c25273338fd47534ae2caa9de8224488 100644
--- a/indra/newview/skins/default/xui/zh/floater_auction.xml
+++ b/indra/newview/skins/default/xui/zh/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="開始 Linden 土地出售">
+<floater name="floater_auction" title="開始Linden土地出售">
 	<floater.string name="already for sale">
 		出售中的地段無法進行拍賣。
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/zh/floater_tools.xml b/indra/newview/skins/default/xui/zh/floater_tools.xml
index f51f7a8ae2835dbf1763f9c83b9da65d669068bd..2df01eb831defd6db25c3be0c0d054807619cb07 100644
--- a/indra/newview/skins/default/xui/zh/floater_tools.xml
+++ b/indra/newview/skins/default/xui/zh/floater_tools.xml
@@ -201,6 +201,7 @@
 				<combo_box.item label="支付物件" name="Payobject"/>
 				<combo_box.item label="打開" name="Open"/>
 				<combo_box.item label="縮放" name="Zoom"/>
+				<combo_box.item label="ç„¡" name="None"/>
 			</combo_box>
 			<check_box label="出售中:" name="checkbox for sale"/>
 			<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index 39d4a7c4f7933cf3252c8f9464304cb11f79a738..9f8756a2995773e3519edb80914f9eae43edfa7a 100644
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -12,6 +12,7 @@
 		<menu_item_call label="攝影機控制…" name="Camera Controls"/>
 		<menu label="動作" name="Movement">
 			<menu_item_call label="坐下" name="Sit Down Here"/>
+			<menu_item_call label="èµ·ç«‹" name="Stand up"/>
 			<menu_item_check label="飛行" name="Fly"/>
 			<menu_item_check label="以跑代步" name="Always Run"/>
 			<menu_item_call label="停止我身上的動作" name="Stop Animating My Avatar"/>
diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml
index b1b35f0614da5f8a6e61072e2963863d1f5f174e..a8903489a7dbbf5f1657e6c1e2373200f611af19 100644
--- a/indra/newview/skins/default/xui/zh/notifications.xml
+++ b/indra/newview/skins/default/xui/zh/notifications.xml
@@ -1563,6 +1563,30 @@ SHA1 指紋:[MD5_DIGEST]
 	<notification name="ProblemAddingEstateManagerBanned">
 		無法把被封鎖的居民加入領地的管理人名單。
 	</notification>
+	<notification name="ProblemBanningEstateManager">
+		無法將領地管理人[AGENT]加入封鎖名單。
+	</notification>
+	<notification name="GroupIsAlreadyInList">
+		&lt;nolink&gt;[GROUP]&lt;/nolink&gt;已在獲准群組名單中。
+	</notification>
+	<notification name="AgentIsAlreadyInList">
+		[AGENT]已在你的[LIST_TYPE]名單。
+	</notification>
+	<notification name="AgentsAreAlreadyInList">
+		[AGENT]已在你的[LIST_TYPE]名單。
+	</notification>
+	<notification name="AgentWasAddedToList">
+		[AGENT]已新增到[ESTATE]的[LIST_TYPE]名單。
+	</notification>
+	<notification name="AgentsWereAddedToList">
+		[AGENT]已新增到[ESTATE]的[LIST_TYPE]名單。
+	</notification>
+	<notification name="AgentWasRemovedFromList">
+		[AGENT]已從[ESTATE]的[LIST_TYPE]名單中被移除。
+	</notification>
+	<notification name="AgentsWereRemovedFromList">
+		[AGENT]已從[ESTATE]的[LIST_TYPE]名單中被移除。
+	</notification>
 	<notification name="CanNotChangeAppearanceUntilLoaded">
 		無法變更外觀,直到服裝與體形下載完畢。
 	</notification>
@@ -3162,14 +3186,20 @@ SHA1 指紋:[MD5_DIGEST]
 	<notification name="VoiceEffectsExpired">
 		至少一個你訂用的變聲效果已經過期。
 [[URL] 點按這裡] 繼續訂用。
+
+付費用戶請[[PREMIUM_URL] 點按這裡]領取免費變聲工具。
 	</notification>
 	<notification name="VoiceEffectsExpiredInUse">
 		使用中的變聲效果已經過期,已用你平時的聲音設定取代。
-[[URL] 點按這裡] 繼續訂用。
+[[URL] 點按這裡]繼續訂用。
+
+付費用戶請[[PREMIUM_URL] 點按這裡]領取免費變聲工具。
 	</notification>
 	<notification name="VoiceEffectsWillExpire">
 		至少一個你訂用的變聲效果將在 [INTERVAL] 天後到期。
-[[URL] 點按這裡] 繼續訂用。
+[[URL] 點按這裡]繼續訂用。
+
+付費用戶請[[PREMIUM_URL] 點按這裡]領取免費變聲工具。
 	</notification>
 	<notification name="VoiceEffectsNew">
 		新的變聲效果上市了!
@@ -3221,6 +3251,9 @@ SHA1 指紋:[MD5_DIGEST]
 	<notification name="SnapshotToComputerFailed">
 		將快照儲存於[PATH]時失敗:磁碟已滿。 需要[NEED_MEMORY]KB的空間,但只剩[FREE_MEMORY]KB空間。
 	</notification>
+	<notification name="SnapshotToLocalDirNotExist">
+		將快照儲存於[PATH]時失敗:目錄不存在。
+	</notification>
 	<notification name="PresetNotSaved">
 		儲存預設名稱[NAME]時出錯。
 	</notification>
diff --git a/indra/newview/skins/default/xui/zh/panel_login.xml b/indra/newview/skins/default/xui/zh/panel_login.xml
index 5292e5fc38ff3317740a528c50e97a99bbe6ee5a..59618972af1b83953a37b85ab57fc2221870aaa3 100644
--- a/indra/newview/skins/default/xui/zh/panel_login.xml
+++ b/indra/newview/skins/default/xui/zh/panel_login.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <panel name="panel_login">
-	<panel.string name="forgot_password_url">http://secondlife.com/account/request.php</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php
+	</panel.string>
+	<panel.string name="sign_up_url">
+		https://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="ui_stack">
 		<layout_panel name="ui_container">
 			<combo_box label="使用者名稱" name="username_combo" tool_tip="使用者名稱是你註冊時所挑選的,例如 bobsmith12 或 Steller Sunshine"/>
@@ -11,8 +16,13 @@
 			</combo_box>
 			<button label="登入" name="connect_btn"/>
 			<check_box label="記得我" name="remember_check"/>
-			<text name="forgot_password_text">忘記密碼</text>
+			<text name="forgot_password_text">
+				忘記密碼
+			</text>
 			<combo_box label="選擇模擬世界" name="server_combo"/>
+			<text name="sign_up_text">
+				註冊
+			</text>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_login_first.xml b/indra/newview/skins/default/xui/zh/panel_login_first.xml
index a8af615b7cd46fb3053c93693beb99838983d4c5..4d72fcdd0354b1882bafc54ac0bd4294f862762d 100644
--- a/indra/newview/skins/default/xui/zh/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/zh/panel_login_first.xml
@@ -3,6 +3,9 @@
 	<panel.string name="forgot_password_url">
 		http://secondlife.com/account/request.php
 	</panel.string>
+	<panel.string name="sign_up_url">
+		http://join.secondlife.com/
+	</panel.string>
 	<layout_stack name="logo_stack">
 		<layout_panel name="parent_panel2">
 			<layout_stack name="widget_stack">
@@ -14,6 +17,9 @@
 					<text name="forgot_password_text">
 						忘記密碼
 					</text>
+					<text name="sign_up_text">
+						註冊
+					</text>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_region_access.xml b/indra/newview/skins/default/xui/zh/panel_region_access.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7842d26321886101d324ecf2ba8da1ad46bb6279
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_region_access.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="出入許可" name="Access">
+	<tab_container name="tabs">
+		<panel label="領地管理員" name="estate_managers_panel">
+			<text name="estate_manager_label">
+				領地管理員:
+			</text>
+			<name_list name="estate_manager_name_list">
+				<columns label="名稱" name="name"/>
+			</name_list>
+			<button label="新增…" name="add_estate_manager_btn"/>
+			<button label="移除…" name="remove_estate_manager_btn"/>
+		</panel>
+		<panel label="獲准" name="allowed_panel">
+			<panel label="top_panel" name="allowed_search_panel">
+				<filter_editor label="搜尋獲准的用戶" name="allowed_search_input"/>
+			</panel>
+			<text name="allow_resident_label">
+				永遠准許:
+			</text>
+			<name_list name="allowed_avatar_name_list">
+				<columns label="名稱" name="name"/>
+			</name_list>
+			<button label="新增…" name="add_allowed_avatar_btn"/>
+			<button label="移除…" name="remove_allowed_avatar_btn"/>
+		</panel>
+		<panel label="准許的群組" name="allowed_groups_panel">
+			<panel label="top_panel" name="allowed_group_search_panel">
+				<filter_editor label="搜尋獲准的群組" name="allowed_group_search_input"/>
+			</panel>
+			<text name="allow_group_label">
+				永遠准許的群組:
+			</text>
+			<name_list name="allowed_group_name_list">
+				<columns label="名稱" name="name"/>
+			</name_list>
+			<button label="新增…" name="add_allowed_group_btn"/>
+			<button label="移除…" name="remove_allowed_group_btn"/>
+		</panel>
+		<panel label="禁入的" name="banned_panel">
+			<panel label="top_panel" name="banned_search_panel">
+				<filter_editor label="搜尋禁入的用戶" name="banned_search_input"/>
+			</panel>
+			<text name="ban_resident_label">
+				永遠禁入:
+			</text>
+			<name_list name="banned_avatar_name_list">
+				<columns label="名稱" name="name"/>
+				<columns label="上次登入日期" name="last_login_date"/>
+				<columns label="遭禁日期" name="ban_date"/>
+				<columns label="封鎖者:" name="bannedby"/>
+			</name_list>
+			<button label="新增…" name="add_banned_avatar_btn"/>
+			<button label="移除…" name="remove_banned_avatar_btn"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_region_estate.xml b/indra/newview/skins/default/xui/zh/panel_region_estate.xml
index 4be4f0aac14e272f00cf636975139e9faf27b3f3..b25f6975c93f698a138728a3aed5a2446540cdb9 100644
--- a/indra/newview/skins/default/xui/zh/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_estate.xml
@@ -16,7 +16,7 @@
 		(未知)
 	</text>
 	<radio_group name="externally_visible_radio">
-		<radio_item label="只允許下列的居民和群組" name="estate_restricted_access"/>
+		<radio_item label="只允許名列於「准入」頁籤的居民和群組" name="estate_restricted_access"/>
 		<radio_item label="任何人都可造訪" name="estate_public_access"/>
 	</radio_group>
 	<check_box label="必須滿18歲" name="limit_age_verified" tool_tip="居民必須年滿 18 歲才能進入這領地。 參閱 [SUPPORT_SITE] 獲取進一步資訊。"/>
@@ -29,22 +29,22 @@
 		領地管理員:
 	</text>
 	<text name="allow_resident_label">
-		永遠准許:
+		永遠允許:
 	</text>
-	<button label="新增…" name="add_estate_manager_btn"/>
-	<button label="移除…" name="remove_estate_manager_btn"/>
-	<button label="新增…" name="add_allowed_avatar_btn"/>
-	<button label="移除…" name="remove_allowed_avatar_btn"/>
+	<button label="添加..." name="add_estate_manager_btn"/>
+	<button label="移除..." name="remove_estate_manager_btn"/>
+	<button label="添加..." name="add_allowed_avatar_btn"/>
+	<button label="移除..." name="remove_allowed_avatar_btn"/>
 	<text name="allow_group_label">
-		永遠准許的群組:
+		永遠允許的群組:
 	</text>
 	<text name="ban_resident_label">
-		永遠禁入:
+		永遠封鎖:
 	</text>
-	<button label="新增…" name="add_allowed_group_btn"/>
-	<button label="移除…" name="remove_allowed_group_btn"/>
-	<button label="新增…" name="add_banned_avatar_btn"/>
-	<button label="移除…" name="remove_banned_avatar_btn"/>
+	<button label="添加..." name="add_allowed_group_btn"/>
+	<button label="移除..." name="remove_allowed_group_btn"/>
+	<button label="添加..." name="add_banned_avatar_btn"/>
+	<button label="移除..." name="remove_banned_avatar_btn"/>
 	<button label="送出訊息到領地..." name="message_estate_btn"/>
 	<button label="由領地將居民踢出..." name="kick_user_from_estate_btn"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
index 0884f1789b0daaa91581ab743c1a56c26b531d1c..8cb2721fcefd530402cf7f1f8e5bf23523d72f80 100644
--- a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="object properties" title="物件檔案">
-	<panel.string name="text deed continued">讓渡</panel.string>
-	<panel.string name="text deed">讓渡</panel.string>
-	<panel.string name="text modify info 1">你能修改這個物件</panel.string>
-	<panel.string name="text modify info 2">你能修改這些物件</panel.string>
-	<panel.string name="text modify info 3">你不能修改這個物件</panel.string>
-	<panel.string name="text modify info 4">你不能修改這些物件</panel.string>
-	<panel.string name="text modify info 5">無法跨地區修改這個物件</panel.string>
-	<panel.string name="text modify info 6">無法跨地區修改這些物件</panel.string>
-	<panel.string name="text modify warning">這個物件含有聯結的部分</panel.string>
-	<panel.string name="Cost Default">價格: L$</panel.string>
-	<panel.string name="Cost Total">總價格:L$</panel.string>
-	<panel.string name="Cost Per Unit">單價:L$</panel.string>
-	<panel.string name="Cost Mixed">混合價格</panel.string>
-	<panel.string name="Sale Mixed">混合銷售</panel.string>
+	<panel.string name="text deed continued">
+		讓渡
+	</panel.string>
+	<panel.string name="text deed">
+		讓渡
+	</panel.string>
+	<panel.string name="text modify info 1">
+		你能修改這個物件
+	</panel.string>
+	<panel.string name="text modify info 2">
+		你能修改這些物件
+	</panel.string>
+	<panel.string name="text modify info 3">
+		你不能修改這個物件
+	</panel.string>
+	<panel.string name="text modify info 4">
+		你不能修改這些物件
+	</panel.string>
+	<panel.string name="text modify info 5">
+		無法跨地區修改這個物件
+	</panel.string>
+	<panel.string name="text modify info 6">
+		無法跨地區修改這些物件
+	</panel.string>
+	<panel.string name="text modify warning">
+		這個物件含有聯結的部分
+	</panel.string>
+	<panel.string name="Cost Default">
+		價格: L$
+	</panel.string>
+	<panel.string name="Cost Total">
+		總價格:L$
+	</panel.string>
+	<panel.string name="Cost Per Unit">
+		單價:L$
+	</panel.string>
+	<panel.string name="Cost Mixed">
+		混合價格
+	</panel.string>
+	<panel.string name="Sale Mixed">
+		混合銷售
+	</panel.string>
 	<text name="title" value="物件檔案"/>
 	<text name="where" value="(在虛擬世界)"/>
 	<panel label="" name="properties_panel">
-		<text name="Name:">名稱:</text>
-		<text name="Description:">描述:</text>
-		<text name="CreatorNameLabel">創造者:</text>
-		<text name="Owner:">所有人:</text>
-		<text name="Group_label">群組:</text>
+		<text name="Name:">
+			名稱:
+		</text>
+		<text name="Description:">
+			描述:
+		</text>
+		<text name="CreatorNameLabel">
+			創造者:
+		</text>
+		<text name="Owner:">
+			所有人:
+		</text>
+		<text name="Group_label">
+			群組:
+		</text>
 		<button name="button set group" tool_tip="選擇一個群組以分享這物件的權限"/>
 		<name_box initial_value="載入中..." name="Group Name Proxy"/>
 		<button label="讓渡" label_selected="讓渡" name="button deed" tool_tip="「讓渡」會把這物件贈送出去並賦予「下一個所有人」權限。 群組所分享的物件可由群組職員加以讓渡。"/>
-		<text name="label click action">點按以:</text>
+		<text name="label click action">
+			點按以:
+		</text>
 		<combo_box name="clickaction">
 			<combo_box.item label="觸碰(預設)" name="Touch/grab(default)"/>
 			<combo_box.item label="坐在物件上" name="Sitonobject"/>
@@ -33,15 +73,24 @@
 			<combo_box.item label="支付物件" name="Payobject"/>
 			<combo_box.item label="打開" name="Open"/>
 			<combo_box.item label="縮放" name="Zoom"/>
+			<combo_box.item label="ç„¡" name="None"/>
 		</combo_box>
 		<panel name="perms_inv">
-			<text name="perm_modify">你能修改這個物件</text>
-			<text name="Anyone can:">任何人:</text>
+			<text name="perm_modify">
+				你能修改這個物件
+			</text>
+			<text name="Anyone can:">
+				任何人:
+			</text>
 			<check_box label="恚庨" name="checkbox allow everyone copy"/>
 			<check_box label="移動" name="checkbox allow everyone move"/>
-			<text name="GroupLabel">群組:</text>
+			<text name="GroupLabel">
+				群組:
+			</text>
 			<check_box label="分享" name="checkbox share with group" tool_tip="允許此群組所有成員共享你修改此物件的權限。 你必須讓渡才能啟動角色限制。"/>
-			<text name="NextOwnerLabel">下一個所有人:</text>
+			<text name="NextOwnerLabel">
+				下一個所有人:
+			</text>
 			<check_box label="修改" name="checkbox next owner can modify"/>
 			<check_box label="恚庨" name="checkbox next owner can copy"/>
 			<check_box label="轉移" name="checkbox next owner can transfer" tool_tip="下一個所有人可贈送或轉售這個物件"/>
@@ -54,13 +103,27 @@
 		</combo_box>
 		<spinner label="價格: L$" name="Edit Cost"/>
 		<check_box label="顯示在搜尋中" name="search_check" tool_tip="讓其他人可以在搜尋結果中察看到此物件"/>
-		<text name="pathfinding_attributes_label">尋徑屬性:</text>
-		<text name="B:">B:</text>
-		<text name="O:">O:</text>
-		<text name="G:">G:</text>
-		<text name="E:">E:</text>
-		<text name="N:">N:</text>
-		<text name="F:">F:</text>
+		<text name="pathfinding_attributes_label">
+			尋徑屬性:
+		</text>
+		<text name="B:">
+			B:
+		</text>
+		<text name="O:">
+			O:
+		</text>
+		<text name="G:">
+			G:
+		</text>
+		<text name="E:">
+			E:
+		</text>
+		<text name="N:">
+			N:
+		</text>
+		<text name="F:">
+			F:
+		</text>
 	</panel>
 	<panel name="button_panel">
 		<button label="打開" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml
index 57da57a82c1cda2c43c1fd59e63125f91e6951be..1518c6edf5b875f069dc600a2470e70ce5060fb9 100644
--- a/indra/newview/skins/default/xui/zh/strings.xml
+++ b/indra/newview/skins/default/xui/zh/strings.xml
@@ -2234,6 +2234,18 @@ http://secondlife.com/support 求助解決問題。
 	<string name="RegionInfoListTypeBannedAgents">
 		永遠封鎖
 	</string>
+	<string name="RegionInfoAllEstates">
+		全部領地
+	</string>
+	<string name="RegionInfoManagedEstates">
+		受管領地
+	</string>
+	<string name="RegionInfoThisEstate">
+		這個領地
+	</string>
+	<string name="AndNMore">
+		及其他[EXTRA_COUNT]個
+	</string>
 	<string name="ScriptLimitsParcelScriptMemory">
 		地段腳本記憶體
 	</string>