diff --git a/indra/llinventory/llfoldertype.cpp b/indra/llinventory/llfoldertype.cpp
index 8b568ea5605d13a9974a17adbd81816c5c477921..5f8aaae20bb9c8b8b41753fc83e6791064ebeb3c 100755
--- a/indra/llinventory/llfoldertype.cpp
+++ b/indra/llinventory/llfoldertype.cpp
@@ -92,7 +92,7 @@ LLFolderDictionary::LLFolderDictionary()
 
 	addEntry(LLFolderType::FT_MESH, 				new FolderEntry("mesh",	TRUE));
 
-	addEntry(LLFolderType::FT_INBOX, 				new FolderEntry("inbox",	FALSE));
+	addEntry(LLFolderType::FT_INBOX, 				new FolderEntry("inbox",	TRUE));
 	addEntry(LLFolderType::FT_OUTBOX, 				new FolderEntry("outbox",	FALSE));
 	
 	addEntry(LLFolderType::FT_BASIC_ROOT,			new FolderEntry("basic_rt", TRUE));
diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h
index 02220c41d80c0348d11b741295875eddeeabb99d..7b5240c651352dff056ef6d0e6a2389238585db7 100755
--- a/indra/llmath/lloctree.h
+++ b/indra/llmath/lloctree.h
@@ -36,6 +36,8 @@
 
 
 extern U32 gOctreeMaxCapacity;
+extern float gOctreeMinSize;
+
 /*#define LL_OCTREE_PARANOIA_CHECK 0
 #if LL_DARWIN
 #define LL_OCTREE_MAX_CAPACITY 32
@@ -106,6 +108,7 @@ public:
 	:	mParent((oct_node*)parent), 
 		mOctant(octant) 
 	{ 
+		llassert(size[0] >= gOctreeMinSize*0.5f);
 		//always keep a NULL terminated list to avoid out of bounds exceptions in debug builds
 		mData.push_back(NULL);
 		mDataEnd = &mData[0];
@@ -213,7 +216,7 @@ public:
 		F32 size = mSize[0];
 		F32 p_size = size * 2.f;
 
-		return (radius <= 0.001f && size <= 0.001f) ||
+		return (radius <= gOctreeMinSize && size <= gOctreeMinSize) ||
 				(radius <= p_size && radius > size);
 	}
 
@@ -319,7 +322,7 @@ public:
 		//is it here?
 		if (isInside(data->getPositionGroup()))
 		{
-			if ((getElementCount() < gOctreeMaxCapacity && contains(data->getBinRadius()) ||
+			if (((getElementCount() < gOctreeMaxCapacity || getSize()[0] <= gOctreeMinSize) && contains(data->getBinRadius()) ||
 				(data->getBinRadius() > getSize()[0] &&	parent && parent->getElementCount() >= gOctreeMaxCapacity))) 
 			{ //it belongs here
 				mData.push_back(NULL);
@@ -356,8 +359,9 @@ public:
 				LLVector4a val;
 				val.setSub(center, getCenter());
 				val.setAbs(val);
-								
-				S32 lt = val.lessThan(LLVector4a::getEpsilon()).getGatheredBits() & 0x7;
+				LLVector4a min_diff(gOctreeMinSize);
+
+				S32 lt = val.lessThan(min_diff).getGatheredBits() & 0x7;
 
 				if( lt == 0x7 )
 				{
@@ -389,6 +393,7 @@ public:
 				}
 #endif
 
+				llassert(size[0] >= gOctreeMinSize*0.5f);
 				//make the new kid
 				child = new LLOctreeNode<T>(center, size, this);
 				addChild(child);
@@ -796,6 +801,8 @@ public:
 				this->setSize(size2);
 				this->updateMinMax();
 
+				llassert(size[0] >= gOctreeMinSize);
+
 				//copy our children to a new branch
 				LLOctreeNode<T>* newnode = new LLOctreeNode<T>(center, size, this);
 				
diff --git a/indra/llui/llchatentry.cpp b/indra/llui/llchatentry.cpp
index c04b70eb649340610399b84ad788b852099ef863..dac001afabcf757be529aa00b85cd4b0491f021e 100755
--- a/indra/llui/llchatentry.cpp
+++ b/indra/llui/llchatentry.cpp
@@ -51,6 +51,7 @@ LLChatEntry::LLChatEntry(const Params& p)
 	mCurrentHistoryLine = mLineHistory.begin();
 
 	mAutoIndent = false;
+	keepSelectionOnReturn(true);
 }
 
 LLChatEntry::~LLChatEntry()
@@ -179,15 +180,6 @@ BOOL LLChatEntry::handleSpecialKey(const KEY key, const MASK mask)
 {
 	BOOL handled = FALSE;
 
-    // In the case of a chat entry, pressing RETURN when something is selected
-    // should NOT erase the selection (unlike a notecard, for example)
-    if (key == KEY_RETURN)
-    {
-        endOfDoc();
-        startSelection();
-        endSelection();
-    }
-
 	LLTextEditor::handleSpecialKey(key, mask);
 
 	switch(key)
diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp
index bc2388dd280aee390d42a41d0f774888ef1cfda5..cca26f335a2c8b0c8ddeb857f5bf24e99fa1ec2b 100755
--- a/indra/llui/llfolderview.cpp
+++ b/indra/llui/llfolderview.cpp
@@ -1130,18 +1130,18 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
 		if((mSelectedItems.size() > 0) && mScrollContainer)
 		{
 			LLFolderViewItem* last_selected = getCurSelectedItem();
+			BOOL shift_select = mask & MASK_SHIFT;
+			// don't shift select down to children of folders (they are implicitly selected through parent)
+			LLFolderViewItem* next = last_selected->getNextOpenNode(!shift_select);
 
-			if (!mKeyboardSelection)
+			if (!mKeyboardSelection || (!shift_select && (!next || next == last_selected)))
 			{
 				setSelection(last_selected, FALSE, TRUE);
 				mKeyboardSelection = TRUE;
 			}
 
-			LLFolderViewItem* next = NULL;
-			if (mask & MASK_SHIFT)
+			if (shift_select)
 			{
-				// don't shift select down to children of folders (they are implicitly selected through parent)
-				next = last_selected->getNextOpenNode(FALSE);
 				if (next)
 				{
 					if (next->isSelected())
@@ -1158,7 +1158,6 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
 			}
 			else
 			{
-				next = last_selected->getNextOpenNode();
 				if( next )
 				{
 					if (next == last_selected)
@@ -1194,18 +1193,18 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
 		if((mSelectedItems.size() > 0) && mScrollContainer)
 		{
 			LLFolderViewItem* last_selected = mSelectedItems.back();
+			BOOL shift_select = mask & MASK_SHIFT;
+			// don't shift select down to children of folders (they are implicitly selected through parent)
+			LLFolderViewItem* prev = last_selected->getPreviousOpenNode(!shift_select);
 
-			if (!mKeyboardSelection)
+			if (!mKeyboardSelection || (!shift_select && prev == this))
 			{
 				setSelection(last_selected, FALSE, TRUE);
 				mKeyboardSelection = TRUE;
 			}
 
-			LLFolderViewItem* prev = NULL;
-			if (mask & MASK_SHIFT)
+			if (shift_select)
 			{
-				// don't shift select down to children of folders (they are implicitly selected through parent)
-				prev = last_selected->getPreviousOpenNode(FALSE);
 				if (prev)
 				{
 					if (prev->isSelected())
@@ -1222,7 +1221,6 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
 			}
 			else
 			{
-				prev = last_selected->getPreviousOpenNode();
 				if( prev )
 				{
 					if (prev == this)
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 90e36069989216cd1c267cb16739e0588dea80a6..576e8f760039fac71a9686b592df601ddb12fdee 100755
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -260,7 +260,8 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :
 	mContextMenu(NULL),
 	mShowContextMenu(p.show_context_menu),
 	mEnableTooltipPaste(p.enable_tooltip_paste),
-	mPassDelete(FALSE)
+	mPassDelete(FALSE),
+	mKeepSelectionOnReturn(false)
 {
 	mSourceID.generate();
 
@@ -1653,7 +1654,7 @@ BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask)
 	case KEY_RETURN:
 		if (mask == MASK_NONE)
 		{
-			if( hasSelection() )
+			if( hasSelection() && !mKeepSelectionOnReturn )
 			{
 				deleteSelection(FALSE);
 			}
diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h
index 24086138245301311cfd7393f6bdf2d59f074761..f6bdf917b4127b64551bea91d35712800819b8d4 100755
--- a/indra/llui/lltexteditor.h
+++ b/indra/llui/lltexteditor.h
@@ -282,6 +282,7 @@ protected:
 	bool				mParseOnTheFly;
 
 	void				updateLinkSegments();
+	void				keepSelectionOnReturn(bool keep) { mKeepSelectionOnReturn = keep; }
 	class LLViewBorder*	mBorder;
 
 private:
@@ -316,6 +317,7 @@ private:
 	bool			mShowContextMenu;
 	bool			mEnableTooltipPaste;
 	bool			mPassDelete;
+	bool			mKeepSelectionOnReturn;	// disabling of removing selected text after pressing of Enter
 
 	LLUUID			mSourceID;
 
diff --git a/indra/llwindow/lldxhardware.cpp b/indra/llwindow/lldxhardware.cpp
index ba5bc8fcfb33ce584e3133766c63b7101db3baf9..e7afef63f854cbf4019431faec9f8554737cfb4e 100755
--- a/indra/llwindow/lldxhardware.cpp
+++ b/indra/llwindow/lldxhardware.cpp
@@ -34,9 +34,12 @@
 #include <dxdiag.h>
 #undef INITGUID
 
+#include <wbemidl.h>
+
 #include <boost/tokenizer.hpp>
 
 #include "lldxhardware.h"
+
 #include "llerror.h"
 
 #include "llstring.h"
@@ -53,11 +56,160 @@ LLDXHardware gDXHardware;
 #define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p);   (p)=NULL; } }
 #define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }
 
-std::string get_string(IDxDiagContainer *containerp, WCHAR *wszPropName)
+typedef BOOL ( WINAPI* PfnCoSetProxyBlanket )( IUnknown* pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc,
+                                               OLECHAR* pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel,
+                                               RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities );
+
+HRESULT GetVideoMemoryViaWMI( WCHAR* strInputDeviceID, DWORD* pdwAdapterRam )
 {
     HRESULT hr;
+    bool bGotMemory = false;
+    HRESULT hrCoInitialize = S_OK;
+    IWbemLocator* pIWbemLocator = nullptr;
+    IWbemServices* pIWbemServices = nullptr;
+    BSTR pNamespace = nullptr;
+
+    *pdwAdapterRam = 0;
+    hrCoInitialize = CoInitialize( 0 );
+
+    hr = CoCreateInstance( CLSID_WbemLocator,
+                           nullptr,
+                           CLSCTX_INPROC_SERVER,
+                           IID_IWbemLocator,
+                           ( LPVOID* )&pIWbemLocator );
+#ifdef PRINTF_DEBUGGING
+    if( FAILED( hr ) ) wprintf( L"WMI: CoCreateInstance failed: 0x%0.8x\n", hr );
+#endif
+
+    if( SUCCEEDED( hr ) && pIWbemLocator )
+    {
+        // Using the locator, connect to WMI in the given namespace.
+        pNamespace = SysAllocString( L"\\\\.\\root\\cimv2" );
+
+        hr = pIWbemLocator->ConnectServer( pNamespace, nullptr, nullptr, 0L,
+                                           0L, nullptr, nullptr, &pIWbemServices );
+#ifdef PRINTF_DEBUGGING
+        if( FAILED( hr ) ) wprintf( L"WMI: pIWbemLocator->ConnectServer failed: 0x%0.8x\n", hr );
+#endif
+        if( SUCCEEDED( hr ) && pIWbemServices != 0 )
+        {
+            HINSTANCE hinstOle32 = nullptr;
+
+            hinstOle32 = LoadLibraryW( L"ole32.dll" );
+            if( hinstOle32 )
+            {
+                PfnCoSetProxyBlanket pfnCoSetProxyBlanket = nullptr;
+
+                pfnCoSetProxyBlanket = ( PfnCoSetProxyBlanket )GetProcAddress( hinstOle32, "CoSetProxyBlanket" );
+                if( pfnCoSetProxyBlanket != 0 )
+                {
+                    // Switch security level to IMPERSONATE. 
+                    pfnCoSetProxyBlanket( pIWbemServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, nullptr,
+                                          RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, nullptr, 0 );
+                }
+
+                FreeLibrary( hinstOle32 );
+            }
+
+            IEnumWbemClassObject* pEnumVideoControllers = nullptr;
+            BSTR pClassName = nullptr;
+
+            pClassName = SysAllocString( L"Win32_VideoController" );
+
+            hr = pIWbemServices->CreateInstanceEnum( pClassName, 0,
+                                                     nullptr, &pEnumVideoControllers );
+#ifdef PRINTF_DEBUGGING
+            if( FAILED( hr ) ) wprintf( L"WMI: pIWbemServices->CreateInstanceEnum failed: 0x%0.8x\n", hr );
+#endif
+
+            if( SUCCEEDED( hr ) && pEnumVideoControllers )
+            {
+                IWbemClassObject* pVideoControllers[10] = {0};
+                DWORD uReturned = 0;
+                BSTR pPropName = nullptr;
+
+                // Get the first one in the list
+                pEnumVideoControllers->Reset();
+                hr = pEnumVideoControllers->Next( 5000,             // timeout in 5 seconds
+                                                  10,                  // return the first 10
+                                                  pVideoControllers,
+                                                  &uReturned );
+#ifdef PRINTF_DEBUGGING
+                if( FAILED( hr ) ) wprintf( L"WMI: pEnumVideoControllers->Next failed: 0x%0.8x\n", hr );
+                if( uReturned == 0 ) wprintf( L"WMI: pEnumVideoControllers uReturned == 0\n" );
+#endif
+
+                VARIANT var;
+                if( SUCCEEDED( hr ) )
+                {
+                    bool bFound = false;
+                    for( UINT iController = 0; iController < uReturned; iController++ )
+                    {
+                        if ( !pVideoControllers[iController] )
+                            continue;
+
+                        pPropName = SysAllocString( L"PNPDeviceID" );
+                        hr = pVideoControllers[iController]->Get( pPropName, 0L, &var, nullptr, nullptr );
+#ifdef PRINTF_DEBUGGING
+                        if( FAILED( hr ) )
+                            wprintf( L"WMI: pVideoControllers[iController]->Get PNPDeviceID failed: 0x%0.8x\n", hr );
+#endif
+                        if( SUCCEEDED( hr ) )
+                        {
+                            if( wcsstr( var.bstrVal, strInputDeviceID ) != 0 )
+                                bFound = true;
+                        }
+                        VariantClear( &var );
+                        if( pPropName ) SysFreeString( pPropName );
+
+                        if( bFound )
+                        {
+                            pPropName = SysAllocString( L"AdapterRAM" );
+                            hr = pVideoControllers[iController]->Get( pPropName, 0L, &var, nullptr, nullptr );
+#ifdef PRINTF_DEBUGGING
+                            if( FAILED( hr ) )
+                                wprintf( L"WMI: pVideoControllers[iController]->Get AdapterRAM failed: 0x%0.8x\n",
+                                         hr );
+#endif
+                            if( SUCCEEDED( hr ) )
+                            {
+                                bGotMemory = true;
+                                *pdwAdapterRam = var.ulVal;
+                            }
+                            VariantClear( &var );
+                            if( pPropName ) SysFreeString( pPropName );
+                            break;
+                        }
+                        SAFE_RELEASE( pVideoControllers[iController] );
+                    }
+                }
+            }
+
+            if( pClassName )
+                SysFreeString( pClassName );
+            SAFE_RELEASE( pEnumVideoControllers );
+        }
+
+        if( pNamespace )
+            SysFreeString( pNamespace );
+        SAFE_RELEASE( pIWbemServices );
+    }
+
+    SAFE_RELEASE( pIWbemLocator );
+
+    if( SUCCEEDED( hrCoInitialize ) )
+        CoUninitialize();
+
+    if( bGotMemory )
+        return S_OK;
+    else
+        return E_FAIL;
+}
+
+void get_wstring(IDxDiagContainer* containerp, WCHAR* wszPropName, WCHAR* wszPropValue, int outputSize)
+{
+	HRESULT hr;
 	VARIANT var;
-	WCHAR wszPropValue[256];
 
 	VariantInit( &var );
 	hr = containerp->GetProp(wszPropName, &var );
@@ -76,13 +228,19 @@ std::string get_string(IDxDiagContainer *containerp, WCHAR *wszPropName)
 				wcscpy( wszPropValue, (var.boolVal) ? L"true" : L"false" );	/* Flawfinder: ignore */
 				break;
 			case VT_BSTR:
-				wcsncpy( wszPropValue, var.bstrVal, 255 );	/* Flawfinder: ignore */
-				wszPropValue[255] = 0;
+				wcsncpy( wszPropValue, var.bstrVal, outputSize-1 );	/* Flawfinder: ignore */
+				wszPropValue[outputSize-1] = 0;
 				break;
 		}
 	}
 	// Clear the variant (this is needed to free BSTR memory)
 	VariantClear( &var );
+}
+
+std::string get_string(IDxDiagContainer *containerp, WCHAR *wszPropName)
+{
+    WCHAR wszPropValue[256];
+	get_wstring(containerp, wszPropName, wszPropValue, 256);
 
 	return utf16str_to_utf8str(wszPropValue);
 }
@@ -361,8 +519,18 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
             goto LCleanup;
 		}
 		
-		// Get the English VRAM string
+		DWORD vram = 0;
+
+		WCHAR deviceID[512];
+
+		get_wstring(device_containerp, L"szDeviceID", deviceID, 512);
+		
+		if (SUCCEEDED(GetVideoMemoryViaWMI(deviceID, &vram))) 
 		{
+			mVRAM = vram/(1024*1024);
+		}
+		else
+		{ // Get the English VRAM string
 		  std::string ram_str = get_string(device_containerp, L"szDisplayMemoryEnglish");
 
 		  // We don't need the device any more
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index 19961d5759088a355fea472da70029f16fc6489e..cd2be87fad77aec01de1c84f1f116b6aae0de8fc 100755
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -86,6 +86,18 @@ void show_window_creation_error(const std::string& title)
 	LL_WARNS("Window") << title << LL_ENDL;
 }
 
+HGLRC SafeCreateContext(HDC hdc)
+{
+	__try 
+	{
+		return wglCreateContext(hdc);
+	}
+	__except(EXCEPTION_EXECUTE_HANDLER)
+	{ 
+		return NULL;
+	}
+}
+
 //static
 BOOL LLWindowWin32::sIsClassRegistered = FALSE;
 
@@ -1167,14 +1179,15 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
 		return FALSE;
 	}
 
-	if (!(mhRC = wglCreateContext(mhDC)))
+
+	if (!(mhRC = SafeCreateContext(mhDC)))
 	{
 		close();
 		OSMessageBox(mCallbacks->translateString("MBGLContextErr"),
 			mCallbacks->translateString("MBError"), OSMB_OK);
 		return FALSE;
 	}
-
+		
 	if (!wglMakeCurrent(mhDC, mhRC))
 	{
 		close();
@@ -1832,6 +1845,10 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
 	// This helps prevent avatar walking after maximizing the window by double-clicking the title bar.
 	static bool sHandleLeftMouseUp = true;
 
+	// Ignore the double click received right after activating app.
+	// This is to avoid triggering double click teleport after returning focus (see MAINT-3786).
+	static bool sHandleDoubleClick = true;
+
 	LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong(h_wnd, GWL_USERDATA);
 
 
@@ -1959,6 +1976,11 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
 					}
 				}
 
+				if (!activating)
+				{
+					sHandleDoubleClick = false;
+				}
+
 				window_imp->mCallbacks->handleActivateApp(window_imp, activating);
 
 				break;
@@ -2183,6 +2205,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
 				window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_NCLBUTTONDOWN");
 				// A click in a non-client area, e.g. title bar or window border.
 				sHandleLeftMouseUp = false;
+				sHandleDoubleClick = true;
 			}
 			break;
 
@@ -2227,6 +2250,13 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
 		//case WM_RBUTTONDBLCLK:
 			{
 				window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_LBUTTONDBLCLK");
+
+				if (!sHandleDoubleClick)
+				{
+					sHandleDoubleClick = true;
+					break;
+				}
+
 				// Because we move the cursor position in the app, we need to query
 				// to find out where the cursor at the time the event is handled.
 				// If we don't do this, many clicks could get buffered up, and if the
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index d2fbb822b1de99c797391ccd379e4701ef282e22..03b953b6cc0e5a3ab9237a5b14f502c1e12eeec4 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -8023,6 +8023,18 @@
     <integer>128</integer>
   </map>
 
+  <key>OctreeMinimumNodeSize</key>
+  <map>
+    <key>Comment</key>
+    <string>Minimum size of any octree node</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>F32</string>
+    <key>Value</key>
+    <real>0.01</real>
+  </map>
+
   <key>OctreeStaticObjectSizeFactor</key>
   <map>
     <key>Comment</key>
@@ -15417,6 +15429,17 @@
     <key>Value</key>
     <integer>7000</integer>
   </map>
+  <key>DisablePrecacheDelayAfterTeleporting</key>
+  <map>
+    <key>Comment</key>
+    <string>Disables the artificial delay in the viewer that precaches some incoming assets</string>
+    <key>Persist</key>
+    <integer>0</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>0</integer>
+  </map>
   <key>VersionChannelName</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index a2d68eb550bd1b6a6059df9cccd4fd04417f46dc..628a96e988bca6c9aecf7e0b24d94ce2f246c462 100755
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -1,4 +1,4 @@
-version 36
+version 37
 // The version number above should be implemented IF AND ONLY IF some
 // change has been made that is sufficiently important to justify
 // resetting the graphics preferences of all users to the recommended
@@ -60,7 +60,7 @@ WindLightUseAtmosShaders		1	1
 WLSkyDetail						1	128
 Disregard128DefaultDrawDistance	1	1
 Disregard96DefaultDrawDistance	1	1
-RenderTextureMemoryMultiple		1	0.5
+RenderTextureMemoryMultiple		1	1
 RenderCompressTextures			1	1
 RenderShaderLightingMaxLevel	1	3
 RenderDeferred				1	1
@@ -522,7 +522,7 @@ list ATI_Mobility_Radeon_9600
 Disregard96DefaultDrawDistance	1	0
 
 list NVIDIA_GeForce_8600
-RenderTextureMemoryMultiple			1	0.375	
+RenderTextureMemoryMultiple			1	1	
 RenderUseImpostors				0	0
 UseOcclusion				0	0
 
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 3d5f6c43eee895e721df744c3c1eba04f833a647..bd6025feead89bdcf7e5618669f51a6b5918fde1 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -827,12 +827,9 @@ boost::signals2::connection LLAgent::addParcelChangedCallback(parcel_changed_cal
 //-----------------------------------------------------------------------------
 void LLAgent::setRegion(LLViewerRegion *regionp)
 {
-	bool notifyRegionChange;
-
 	llassert(regionp);
 	if (mRegionp != regionp)
 	{
-		notifyRegionChange = true;
 
 		std::string ip = regionp->getHost().getString();
 		LL_INFOS("AgentLocation") << "Moving agent into region: " << regionp->getName()
@@ -885,10 +882,7 @@ void LLAgent::setRegion(LLViewerRegion *regionp)
 		// Pass new region along to metrics components that care about this level of detail.
 		LLAppViewer::metricsUpdateRegion(regionp->getHandle());
 	}
-	else
-	{
-		notifyRegionChange = false;
-	}
+
 	mRegionp = regionp;
 
 	// TODO - most of what follows probably should be moved into callbacks
@@ -911,11 +905,8 @@ void LLAgent::setRegion(LLViewerRegion *regionp)
 
 	LLFloaterMove::sUpdateFlyingStatus();
 
-	if (notifyRegionChange)
-	{
-		LL_DEBUGS("AgentLocation") << "Calling RegionChanged callbacks" << LL_ENDL;
-		mRegionChangedSignal();
-	}
+	LL_DEBUGS("AgentLocation") << "Calling RegionChanged callbacks" << LL_ENDL;
+	mRegionChangedSignal();
 }
 
 
@@ -1430,6 +1421,7 @@ void LLAgent::setDoNotDisturb(bool pIsDoNotDisturb)
 	{
 		LLDoNotDisturbNotificationStorage::getInstance()->updateNotifications();
 	}
+	gIMMgr->updateDNDMessageStatus();
 }
 
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index d1dfbe3315c6fe5b411526a6706eacb2bc1fa1c3..7b0496ea457c214dec5ae66618dd2c72d0a3aedf 100755
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -913,6 +913,8 @@ void LLAgentCamera::cameraZoomIn(const F32 fraction)
 	F32 max_distance = llmin(mDrawDistance - DIST_FUDGE, 
 							 LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE );
 
+    max_distance = llmin(max_distance, current_distance * 4.f); //Scaled max relative to current distance.  MAINT-3154
+
 	if (new_distance > max_distance)
 	{
 		new_distance = max_distance;
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index b69cd8107889a29021be3e04ff266fb97052c7b7..24150daea4da2ebd5f2344ffbb65595e514a0040 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -100,6 +100,7 @@
 #include "llspellcheck.h"
 #include "llscenemonitor.h"
 #include "llavatarrenderinfoaccountant.h"
+#include "lllocalbitmaps.h"
 
 // Linden library includes
 #include "llavatarnamecache.h"
@@ -1758,7 +1759,9 @@ bool LLAppViewer::cleanup()
 #if 0 // this seems to get us stuck in an infinite loop...
 	gTransferManager.cleanup();
 #endif
-	
+
+	LLLocalBitmapMgr::cleanupClass();
+
 	// Note: this is where gWorldMap used to be deleted.
 
 	// Note: this is where gHUDManager used to be deleted.
@@ -3190,7 +3193,8 @@ bool LLAppViewer::initWindow()
 #ifdef LL_DARWIN
     //Satisfy both MAINT-3135 (OSX 10.6 and earlier) MAINT-3288 (OSX 10.7 and later)
    if (getOSInfo().mMajorVer == 10 && getOSInfo().mMinorVer < 7)
-       gViewerWindow->getWindow()->setOldResize(true);
+		if ( getOSInfo().mMinorVer == 6 && getOSInfo().mBuild < 8 )
+       		gViewerWindow->getWindow()->setOldResize(true);
 #endif
     
 	if (gSavedSettings.getBOOL("WindowMaximized"))
diff --git a/indra/newview/llcolorswatch.h b/indra/newview/llcolorswatch.h
index df907567ab8f69839a715a462b49be5bcf2b127a..380fdccfa37ace92d649699b0472921d31d4dd24 100755
--- a/indra/newview/llcolorswatch.h
+++ b/indra/newview/llcolorswatch.h
@@ -56,6 +56,7 @@ public:
 		Optional<LLUIImage*>			alpha_background_image;
 		Optional<commit_callback_t> 	cancel_callback;
 		Optional<commit_callback_t> 	select_callback;
+		Optional<commit_callback_t>		preview_callback;
 		Optional<LLUIColor>				border_color;
 		Optional<S32>					label_width;
 		Optional<S32>					label_height;
@@ -84,6 +85,7 @@ public:
 	void			setCanApplyImmediately(BOOL apply) { mCanApplyImmediately = apply; }
 	void			setOnCancelCallback(commit_callback_t cb) { mOnCancelCallback = cb; }
 	void			setOnSelectCallback(commit_callback_t cb) { mOnSelectCallback = cb; }
+	void			setPreviewCallback(commit_callback_t cb) { mPreviewCallback = cb; }
 	void			setFallbackImage(LLPointer<LLUIImage> image) { mFallbackImage = image; }
 
 	void			showPicker(BOOL take_focus);
@@ -109,6 +111,7 @@ protected:
 	bool					mCanApplyImmediately;
 	commit_callback_t		mOnCancelCallback,
 							mOnSelectCallback;
+	commit_callback_t mPreviewCallback;
 	S32						mLabelWidth,
 							mLabelHeight;
 
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 211a96b32daf7e0564676deba92a916a3a8a1dbb..67d16426398079621b0bb5d4c0054379f63b3f7c 100755
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -155,7 +155,7 @@ void LLStandardBumpmap::addstandard()
 			LLViewerTextureManager::getFetchedTexture(LLUUID(bump_image_id));	
 		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setBoostLevel(LLGLTexture::LOCAL) ;
 		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setLoadedCallback(LLBumpImageList::onSourceStandardLoaded, 0, TRUE, FALSE, NULL, NULL );
-		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->forceToSaveRawImage(0) ;
+		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->forceToSaveRawImage(0, 30.f) ;
 		LLStandardBumpmap::sStandardBumpmapCount++;
 	}
 
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 3e032d0e4ad0d2b91ce0acd86d08a9fb913e68c3..513c33e60d61e0c77ac60965ede474d0fa55671a 100755
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -796,7 +796,7 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled()
 {
 	bool ret_val = visibleItemsSelected();
 
-	if ( ret_val && mOkButtonValidateSignal.num_slots() )
+	if ( ret_val )
 	{
 		std::string acvtive_panel_name;
 		LLScrollListCtrl* list =  NULL;
@@ -827,7 +827,7 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled()
 			getSelectedAvatarData(list, avatar_ids, avatar_names);
 			if (avatar_ids.size() >= 1) 
 			{
-				ret_val = mOkButtonValidateSignal(avatar_ids);
+				ret_val = mOkButtonValidateSignal.num_slots()?mOkButtonValidateSignal(avatar_ids):true;
 			}
 			else
 			{
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 9425f5645e5c731fe5502fa208cb25b4678f3e51..0c59ba9a6dcfd0fd7c065c4be8c81d428a9dd03f 100755
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -342,6 +342,11 @@ void LLFloaterColorPicker::setCurRgb ( F32 curRIn, F32 curGIn, F32 curBIn )
 	curG = curGIn;
 	curB = curBIn;
 
+	if (mApplyImmediateCheck->get())
+	{
+		LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE );
+	}
+
 	// update corresponding HSL values and
 	LLColor3(curRIn, curGIn, curBIn).calcHSL(&curH, &curS, &curL);
 
@@ -369,6 +374,11 @@ void LLFloaterColorPicker::setCurHsl ( F32 curHIn, F32 curSIn, F32 curLIn )
 
 	// update corresponding RGB values and
 	hslToRgb ( curH, curS, curL, curR, curG, curB );
+
+	if (mApplyImmediateCheck->get())
+	{
+		LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE );
+	}
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -458,10 +468,6 @@ void LLFloaterColorPicker::onImmediateCheck( LLUICtrl* ctrl, void* data)
 void LLFloaterColorPicker::onColorSelect( const LLTextureEntry& te )
 {
 	setCurRgb(te.getColor().mV[VRED], te.getColor().mV[VGREEN], te.getColor().mV[VBLUE]);
-	if (mApplyImmediateCheck->get())
-	{
-		LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE );
-	}
 }
 
 void LLFloaterColorPicker::onMouseCaptureLost()
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index afbd7ba5e27cfaebb3b99483c594c8f295982f09..bd5d2207b402abda2bab6fe91cdd4214e0579843 100755
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -1069,9 +1069,9 @@ void LLFloaterTools::setGridMode(S32 mode)
 
 void LLFloaterTools::onClickGridOptions()
 {
-	LLFloaterReg::showInstance("build_options");
-	// RN: this makes grid options dependent on build tools window
-	//floaterp->addDependentFloater(LLFloaterBuildOptions::getInstance(), FALSE);
+	LLFloater* floaterp = LLFloaterReg::showInstance("build_options");
+	// position floater next to build tools, not over
+	floaterp->setRect(gFloaterView->findNeighboringPosition(this, floaterp));
 }
 
 // static
diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp
index bbfd855bc892bfb6477e46888c6a0b99a9675a3c..7f599073d5f04c041436a065aea7447b4b9de593 100755
--- a/indra/newview/llfloaterwebcontent.cpp
+++ b/indra/newview/llfloaterwebcontent.cpp
@@ -74,8 +74,7 @@ LLFloaterWebContent::LLFloaterWebContent( const Params& params )
 	mShowPageTitle(params.show_page_title),
     mAllowNavigation(true),
     mCurrentURL(""),
-    mDisplayURL(""),
-    mSecureURL(false)
+    mDisplayURL("")
 {
 	mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this ));
 	mCommitCallbackRegistrar.add( "WebContent.Forward", boost::bind( &LLFloaterWebContent::onClickForward, this ));
@@ -331,9 +330,6 @@ void LLFloaterWebContent::draw()
 	mBtnBack->setEnabled( mWebBrowser->canNavigateBack() && mAllowNavigation);
 	mBtnForward->setEnabled( mWebBrowser->canNavigateForward() && mAllowNavigation);
 
-    // Show/hide the lock icon
-    mSecureLockIcon->setVisible(mSecureURL && !mAddressCombo->hasFocus());
-
 	LLFloater::draw();
 }
 
@@ -378,8 +374,6 @@ void LLFloaterWebContent::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent
 		// we populate the status bar with URLs as they change so clear it now we're done
 		const std::string end_str = "";
 		mStatusBarText->setText( end_str );
-			mAddressCombo->setLeftTextPadding(22);
-			mAddressCombo->setLeftTextPadding(2);
 	}
 	else if(event == MEDIA_EVENT_CLOSE_REQUEST)
 	{
@@ -446,10 +440,10 @@ void LLFloaterWebContent::set_current_url(const std::string& url)
 		static const std::string secure_prefix = std::string("https://");
 		std::string prefix = mCurrentURL.substr(0, secure_prefix.length());
 		LLStringUtil::toLower(prefix);
-        mSecureURL = (prefix == secure_prefix);
-        
-        // Hack : we move the text a bit to make space for the lock icon in the secure URL case
-		mDisplayURL = (mSecureURL ? "      " + mCurrentURL : mCurrentURL);
+        bool secure_url = (prefix == secure_prefix);
+		mSecureLockIcon->setVisible(secure_url);
+		mAddressCombo->setLeftTextPadding(secure_url ? 22 : 2);
+		mDisplayURL = mCurrentURL;
 
         // Clean up browsing list (prevent dupes) and add/select the new URL to it
         mAddressCombo->remove(mCurrentURL);
diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h
index f5faa39e3de24a5226c15911c509f0a7dc0a990b..4291fd9f2c391f56a7c2baaa2b640f2a9adffeaf 100755
--- a/indra/newview/llfloaterwebcontent.h
+++ b/indra/newview/llfloaterwebcontent.h
@@ -113,7 +113,6 @@ protected:
 	std::string		mUUID;
 	bool			mShowPageTitle;
     bool            mAllowNavigation;
-    bool            mSecureURL;     // true when the current url is prefixed "https://"
 };
 
 #endif  // LL_LLFLOATERWEBCONTENT_H
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 1b0f3705362840c73fa51fe9682f6f1dca66ed95..8d8239611c85a332810f51396dcd264f22f640ce 100755
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -410,6 +410,7 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
 	mOtherParticipantIsAvatar(true),
 	mStartCallOnInitialize(false),
 	mStartedAsIMCall(voice),
+	mIsDNDsend(false),
 	mAvatarNameCacheConnection()
 {
 	// set P2P type by default
@@ -3315,6 +3316,38 @@ bool LLIMMgr::isVoiceCall(const LLUUID& session_id)
 	return im_session->mStartedAsIMCall;
 }
 
+void LLIMMgr::updateDNDMessageStatus()
+{
+	if (LLIMModel::getInstance()->mId2SessionMap.empty()) return;
+
+	std::map<LLUUID, LLIMModel::LLIMSession*>::const_iterator it = LLIMModel::getInstance()->mId2SessionMap.begin();
+	for (; it != LLIMModel::getInstance()->mId2SessionMap.end(); ++it)
+	{
+		LLIMModel::LLIMSession* session = (*it).second;
+
+		if (session->isP2P())
+		{
+			setDNDMessageSent(session->mSessionID,false);
+		}
+	}
+}
+
+bool LLIMMgr::isDNDMessageSend(const LLUUID& session_id)
+{
+	LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id);
+	if (!im_session) return false;
+
+	return im_session->mIsDNDsend;
+}
+
+void LLIMMgr::setDNDMessageSent(const LLUUID& session_id, bool is_send)
+{
+	LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id);
+	if (!im_session) return;
+
+	im_session->mIsDNDsend = is_send;
+}
+
 void LLIMMgr::addNotifiedNonFriendSessionID(const LLUUID& session_id)
 {
 	mNotifiedNonFriendSessions.insert(session_id);
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 1426bada956ab8f84003986c85e74771de76326a..f92eff48458167219cdbd574f9587edad5d3bf69 100755
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -138,6 +138,8 @@ public:
 
 		bool mHasOfflineMessage;
 
+		bool mIsDNDsend;
+
 	private:
 		void onAdHocNameCache(const LLAvatarName& av_name);
 
@@ -441,6 +443,12 @@ public:
 
 	bool isVoiceCall(const LLUUID& session_id);
 
+	void updateDNDMessageStatus();
+
+	bool isDNDMessageSend(const LLUUID& session_id);
+
+	void setDNDMessageSent(const LLUUID& session_id, bool is_send);
+
 	void addNotifiedNonFriendSessionID(const LLUUID& session_id);
 
 	bool isNonFriendSessionNotified(const LLUUID& session_id);
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 5df28ccb7395c6310f9714a2166a99c8cc9191ce..87335cd5e6d1fdcfb8d6bec0ea5028b139892d7b 100755
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -4593,6 +4593,10 @@ public:
 	virtual void changed(U32 mask)
 	{
 		mBridgep->refreshFolderViewItem();
+		if (mask & LLFriendObserver::ONLINE)
+		{
+			mBridgep->checkSearchBySuffixChanges();
+		}
 	}
 protected:
 	LLCallingCardBridge* mBridgep;
@@ -4627,6 +4631,44 @@ void LLCallingCardBridge::refreshFolderViewItem()
 	}
 }
 
+void LLCallingCardBridge::checkSearchBySuffixChanges()
+{
+	if (!mDisplayName.empty())
+	{
+		// changes in mDisplayName are processed by rename function and here it will be always same
+		// suffixes are also of fixed length, and we are processing change of one at a time,
+		// so it should be safe to use length (note: mSearchableName is capitalized)
+		S32 old_length = mSearchableName.length();
+		S32 new_length = mDisplayName.length() + getLabelSuffix().length();
+		if (old_length == new_length)
+		{
+			return;
+		}
+		mSearchableName.assign(mDisplayName);
+		mSearchableName.append(getLabelSuffix());
+		LLStringUtil::toUpper(mSearchableName);
+		if (new_length<old_length)
+		{
+			LLInventoryFilter* filter = getInventoryFilter();
+			if (filter && mPassedFilter && mSearchableName.find(filter->getFilterSubString()) == std::string::npos)
+			{
+				// string no longer contains substring 
+				// we either have to update all parents manually or restart filter.
+				// dirtyFilter will not work here due to obsolete descendants' generations 
+				getInventoryFilter()->setModified(LLFolderViewFilter::FILTER_MORE_RESTRICTIVE);
+			}
+		}
+		else
+		{
+			if (getInventoryFilter())
+			{
+				// mSearchableName became longer, we gained additional suffix and need to repeat filter check.
+				dirtyFilter();
+			}
+		}
+	}
+}
+
 // virtual
 void LLCallingCardBridge::performAction(LLInventoryModel* model, std::string action)
 {
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 02134c7cc531355a33f02fbd09a264d43fc98b35..7dac830098e3a076a2fbfe0959d348e3cf781ee8 100755
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -421,6 +421,7 @@ public:
 							void* cargo_data,
 							std::string& tooltip_msg);
 	void refreshFolderViewItem();
+	void checkSearchBySuffixChanges();
 protected:
 	LLCallingCardObserver* mObserver;
 };
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index e74e58015a7c87b9fbd924ae08fca7ad8e21bf2c..a4a85e2e8da2f2af2917b3cc48ca975b1fe0ecb7 100755
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -547,6 +547,14 @@ void LLInventoryPanel::modelChanged(U32 mask)
 							// Item is to be moved and we found its new parent in the panel's directory, so move the item's UI.
 							view_item->addToFolder(new_parent);
 							addItemID(viewmodel_item->getUUID(), view_item);
+							if (mInventory)
+							{
+								const LLUUID trash_id = mInventory->findCategoryUUIDForType(LLFolderType::FT_TRASH);
+								if (trash_id != model_item->getParentUUID() && (mask & LLInventoryObserver::INTERNAL) && new_parent->isOpen())
+								{
+									setSelection(item_id, FALSE);
+								}
+							}
 						}
 						else 
 						{
diff --git a/indra/newview/lllocalbitmaps.cpp b/indra/newview/lllocalbitmaps.cpp
index 8e4950f5c2491216f36b6514b8876a14d98ccc24..b91e37d596e3f21dda8430d604ae0c7c3a6ff7b5 100755
--- a/indra/newview/lllocalbitmaps.cpp
+++ b/indra/newview/lllocalbitmaps.cpp
@@ -190,7 +190,7 @@ bool LLLocalBitmap::updateSelf(EUpdateType optional_firstupdate)
 				{
 					// decode is successful, we can safely proceed.
 					LLUUID old_id = LLUUID::null;
-					if (!(optional_firstupdate == UT_FIRSTUSE) && !mWorldID.isNull())
+					if ((optional_firstupdate != UT_FIRSTUSE) && !mWorldID.isNull())
 					{
 						old_id = mWorldID;
 					}
@@ -206,15 +206,18 @@ bool LLLocalBitmap::updateSelf(EUpdateType optional_firstupdate)
 
 					gTextureList.addImage(texture);
 			
-					if (!optional_firstupdate == UT_FIRSTUSE)
+					if (optional_firstupdate != UT_FIRSTUSE)
 					{
 						// seek out everything old_id uses and replace it with mWorldID
 						replaceIDs(old_id, mWorldID);
 
 						// remove old_id from gimagelist
 						LLViewerFetchedTexture* image = gTextureList.findImage(old_id);
-						gTextureList.deleteImage(image);
-						image->unref();
+						if (image != NULL)
+						{
+							gTextureList.deleteImage(image);
+							image->unref();
+						}
 					}
 
 					mUpdateRetries = LL_LOCAL_UPDATE_RETRIES;
@@ -824,6 +827,12 @@ LLLocalBitmapMgr::~LLLocalBitmapMgr()
 {
 }
 
+void LLLocalBitmapMgr::cleanupClass()
+{
+	std::for_each(sBitmapList.begin(), sBitmapList.end(), DeletePointer());
+	sBitmapList.clear();
+}
+
 bool LLLocalBitmapMgr::addUnit()
 {
 	bool add_successful = false;
diff --git a/indra/newview/lllocalbitmaps.h b/indra/newview/lllocalbitmaps.h
index 47c077dcab47798f215a9ef02f2eb18f238054ae..a15ea10801f6748835c7b5c6796f41e4a0f9d520 100755
--- a/indra/newview/lllocalbitmaps.h
+++ b/indra/newview/lllocalbitmaps.h
@@ -117,6 +117,7 @@ class LLLocalBitmapMgr
 		~LLLocalBitmapMgr();
 
 	public:
+		static void			cleanupClass();
 		static bool         addUnit();
 		static void         delUnit(LLUUID tracking_id);
 
diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp
index 109d6b31b20bd903638b957ed9e06c9c1128248a..2810941d83ce7a076ee2fc65d7a1f4476d83a2d0 100755
--- a/indra/newview/llmanipscale.cpp
+++ b/indra/newview/llmanipscale.cpp
@@ -66,9 +66,8 @@ const F32 SNAP_GUIDE_SCREEN_OFFSET = 0.05f;
 const F32 SNAP_GUIDE_SCREEN_LENGTH = 0.7f;
 const F32 SELECTED_MANIPULATOR_SCALE = 1.2f;
 const F32 MANIPULATOR_SCALE_HALF_LIFE = 0.07f;
-const S32 NUM_MANIPULATORS = 14;
 
-const LLManip::EManipPart MANIPULATOR_IDS[NUM_MANIPULATORS] =
+const LLManip::EManipPart MANIPULATOR_IDS[LLManipScale::NUM_MANIPULATORS] = 
 {
 	LLManip::LL_CORNER_NNN,
 	LLManip::LL_CORNER_NNP,
@@ -143,18 +142,16 @@ inline void LLManipScale::conditionalHighlight( U32 part, const LLColor4* highli
 	LLColor4 default_highlight( 1.f, 1.f, 1.f, 1.f );
 	LLColor4 default_normal( 0.7f, 0.7f, 0.7f, 0.6f );
 	LLColor4 invisible(0.f, 0.f, 0.f, 0.f);
-	F32 manipulator_scale = 1.f;
 
 	for (S32 i = 0; i < NUM_MANIPULATORS; i++)
 	{
 		if((U32)MANIPULATOR_IDS[i] == part)
 		{
-			manipulator_scale = mManipulatorScales[i];
+			mScaledBoxHandleSize = mManipulatorScales[i] * mBoxHandleSize[i];
 			break;
 		}
 	}
 
-	mScaledBoxHandleSize = mBoxHandleSize * manipulator_scale;
 	if (mManipPart != (S32)LL_NO_PART && mManipPart != (S32)part)
 	{
 		gGL.color4fv( invisible.mV );
@@ -181,7 +178,6 @@ void LLManipScale::handleSelect()
 LLManipScale::LLManipScale( LLToolComposite* composite )
 	:
 	LLManip( std::string("Scale"), composite ),
-	mBoxHandleSize( 1.f ),
 	mScaledBoxHandleSize( 1.f ),
 	mLastMouseX( -1 ),
 	mLastMouseY( -1 ),
@@ -196,17 +192,16 @@ LLManipScale::LLManipScale( LLToolComposite* composite )
 	mSnapRegime(SNAP_REGIME_NONE),
 	mScaleSnappedValue(0.f)
 {
-	mManipulatorScales = new F32[NUM_MANIPULATORS];
 	for (S32 i = 0; i < NUM_MANIPULATORS; i++)
 	{
 		mManipulatorScales[i] = 1.f;
+		mBoxHandleSize[i]     = 1.f;
 	}
 }
 
 LLManipScale::~LLManipScale()
 {
 	for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer());
-	delete[] mManipulatorScales;
 }
 
 void LLManipScale::render()
@@ -216,6 +211,7 @@ void LLManipScale::render()
 	LLGLDepthTest gls_depth(GL_TRUE);
 	LLGLEnable gl_blend(GL_BLEND);
 	LLGLEnable gls_alpha_test(GL_ALPHA_TEST);
+	LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();
 
 	if( canAffectSelection() )
 	{
@@ -237,42 +233,48 @@ void LLManipScale::render()
 
 		if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
 		{
-			mBoxHandleSize = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels();
-			mBoxHandleSize /= gAgentCamera.mHUDCurZoom;
+			for (S32 i = 0; i < NUM_MANIPULATORS; i++)
+			{
+				mBoxHandleSize[i] = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels();
+				mBoxHandleSize[i] /= gAgentCamera.mHUDCurZoom;
+			}
 		}
 		else
 		{
-			F32 range_squared = dist_vec_squared(gAgentCamera.getCameraPositionAgent(), center_agent);
-			F32 range_from_agent_squared = dist_vec_squared(gAgent.getPositionAgent(), center_agent);
-
-			// Don't draw manip if object too far away
-			if (gSavedSettings.getBOOL("LimitSelectDistance"))
+			for (S32 i = 0; i < NUM_MANIPULATORS; i++)
 			{
-				F32 max_select_distance = gSavedSettings.getF32("MaxSelectDistance");
-				if (range_from_agent_squared > max_select_distance * max_select_distance)
+				LLVector3 manipulator_pos = bbox.localToAgent(unitVectorToLocalBBoxExtent(partToUnitVector(MANIPULATOR_IDS[i]), bbox));
+				F32 range_squared = dist_vec_squared(gAgentCamera.getCameraPositionAgent(), manipulator_pos);
+				F32 range_from_agent_squared = dist_vec_squared(gAgent.getPositionAgent(), manipulator_pos);
+
+				// Don't draw manip if object too far away
+				if (gSavedSettings.getBOOL("LimitSelectDistance"))
 				{
-					return;
+					F32 max_select_distance = gSavedSettings.getF32("MaxSelectDistance");
+					if (range_from_agent_squared > max_select_distance * max_select_distance)
+					{
+						return;
+					}
 				}
-			}
 
-			if (range_squared > 0.001f * 0.001f)
-			{
-				// range != zero
-				F32 fraction_of_fov = BOX_HANDLE_BASE_SIZE / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels();
-				F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView();  // radians
-				mBoxHandleSize = (F32) sqrtf(range_squared) * tan(apparent_angle) * BOX_HANDLE_BASE_FACTOR;
-			}
-			else
-			{
-				// range == zero
-				mBoxHandleSize = BOX_HANDLE_BASE_FACTOR;
+				if (range_squared > 0.001f * 0.001f)
+				{
+					// range != zero
+					F32 fraction_of_fov = BOX_HANDLE_BASE_SIZE / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels();
+					F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView();  // radians
+					mBoxHandleSize[i] = (F32) sqrtf(range_squared) * tan(apparent_angle) * BOX_HANDLE_BASE_FACTOR;
+				}
+				else
+				{
+					// range == zero
+					mBoxHandleSize[i] = BOX_HANDLE_BASE_FACTOR;
+				}
 			}
 		}
 
 		////////////////////////////////////////////////////////////////////////
 		// Draw bounding box
 
-		LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();
 		LLVector3 pos_agent = bbox.getPositionAgent();
 		LLQuaternion rot = bbox.getRotation();
 
@@ -564,7 +566,7 @@ void LLManipScale::renderFaces( const LLBBox& bbox )
 	//                +------------+         | (texture coordinates)
 	//                |            |         |
 	//                |     1      |        (*) --->s
-	//                |    +X      |
+	//                |    +X      |   
 	//                |            |
 	// (+++)     (+-+)|            |(+--)     (++-)        (+++)
 	//   +------------+------------+------------+------------+
@@ -679,32 +681,32 @@ void LLManipScale::renderFaces( const LLBBox& bbox )
 			{
 			  case 0:
 				conditionalHighlight( LL_FACE_POSZ, &z_highlight_color, &z_normal_color );
-				renderAxisHandle( ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], max.mV[VZ] ) );
+				renderAxisHandle( LL_FACE_POSZ, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], max.mV[VZ] ) );
 				break;
 
 			  case 1:
 				conditionalHighlight( LL_FACE_POSX, &x_highlight_color, &x_normal_color );
-				renderAxisHandle( ctr, LLVector3( max.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );
+				renderAxisHandle( LL_FACE_POSX, ctr, LLVector3( max.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );
 				break;
 
 			  case 2:
 				conditionalHighlight( LL_FACE_POSY, &y_highlight_color, &y_normal_color );
-				renderAxisHandle( ctr, LLVector3( ctr.mV[VX], max.mV[VY], ctr.mV[VZ] ) );
+				renderAxisHandle( LL_FACE_POSY, ctr, LLVector3( ctr.mV[VX], max.mV[VY], ctr.mV[VZ] ) );
 				break;
 
 			  case 3:
 				conditionalHighlight( LL_FACE_NEGX, &x_highlight_color, &x_normal_color );
-				renderAxisHandle( ctr, LLVector3( min.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );
+				renderAxisHandle( LL_FACE_NEGX, ctr, LLVector3( min.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );
 				break;
 
 			  case 4:
 				conditionalHighlight( LL_FACE_NEGY, &y_highlight_color, &y_normal_color );
-				renderAxisHandle( ctr, LLVector3( ctr.mV[VX], min.mV[VY], ctr.mV[VZ] ) );
+				renderAxisHandle( LL_FACE_NEGY, ctr, LLVector3( ctr.mV[VX], min.mV[VY], ctr.mV[VZ] ) );
 				break;
 
 			  case 5:
 				conditionalHighlight( LL_FACE_NEGZ, &z_highlight_color, &z_normal_color );
-				renderAxisHandle( ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], min.mV[VZ] ) );
+				renderAxisHandle( LL_FACE_NEGZ, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], min.mV[VZ] ) );
 				break;
 			}
 		}
@@ -714,10 +716,10 @@ void LLManipScale::renderFaces( const LLBBox& bbox )
 void LLManipScale::renderEdges( const LLBBox& bbox )
 {
 	LLVector3 extent = bbox.getExtentLocal();
-	F32 edge_width = mBoxHandleSize * .6f;
 
 	for( U32 part = LL_EDGE_MIN; part <= LL_EDGE_MAX; part++ )
 	{
+		F32 edge_width = mBoxHandleSize[part] * .6f;
 		LLVector3 direction = edgeToUnitVector( part );
 		LLVector3 center_to_edge = unitVectorToLocalBBoxExtent( direction, bbox );
 
@@ -778,14 +780,14 @@ void LLManipScale::renderBoxHandle( F32 x, F32 y, F32 z )
 }
 
 
-void LLManipScale::renderAxisHandle( const LLVector3& start, const LLVector3& end )
+void LLManipScale::renderAxisHandle( U32 part, const LLVector3& start, const LLVector3& end )
 {
 	if( getShowAxes() )
 	{
 		// Draws a single "jacks" style handle: a long, retangular box from start to end.
 		LLVector3 offset_start = end - start;
 		offset_start.normalize();
-		offset_start = start + mBoxHandleSize * offset_start;
+		offset_start = start + mBoxHandleSize[part] * offset_start;
 
 		LLVector3 delta = end - offset_start;
 		LLVector3 pos = offset_start + 0.5f * delta;
@@ -794,9 +796,9 @@ void LLManipScale::renderAxisHandle( const LLVector3& start, const LLVector3& en
 		{
 			gGL.translatef( pos.mV[VX], pos.mV[VY], pos.mV[VZ] );
 			gGL.scalef(
-				mBoxHandleSize + llabs(delta.mV[VX]),
-				mBoxHandleSize + llabs(delta.mV[VY]),
-				mBoxHandleSize + llabs(delta.mV[VZ]));
+				mBoxHandleSize[part] + llabs(delta.mV[VX]),
+				mBoxHandleSize[part] + llabs(delta.mV[VY]),
+				mBoxHandleSize[part] + llabs(delta.mV[VZ]));
 			gBox.render();
 		}
 		gGL.popMatrix();
@@ -1663,15 +1665,15 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
 
 				arrow_dir = snap_line_start - snap_line_center;
 				arrow_dir.normalize();
-				gGL.vertex3fv((snap_line_start + arrow_dir * mBoxHandleSize).mV);
-				gGL.vertex3fv((snap_line_start + arrow_span * mBoxHandleSize).mV);
-				gGL.vertex3fv((snap_line_start - arrow_span * mBoxHandleSize).mV);
+				gGL.vertex3fv((snap_line_start + arrow_dir * mSnapRegimeOffset * 0.1f).mV);
+				gGL.vertex3fv((snap_line_start + arrow_span * mSnapRegimeOffset * 0.1f).mV);
+				gGL.vertex3fv((snap_line_start - arrow_span * mSnapRegimeOffset * 0.1f).mV);
 
 				arrow_dir = snap_line_end - snap_line_center;
 				arrow_dir.normalize();
-				gGL.vertex3fv((snap_line_end + arrow_dir * mBoxHandleSize).mV);
-				gGL.vertex3fv((snap_line_end + arrow_span * mBoxHandleSize).mV);
-				gGL.vertex3fv((snap_line_end - arrow_span * mBoxHandleSize).mV);
+				gGL.vertex3fv((snap_line_end + arrow_dir * mSnapRegimeOffset * 0.1f).mV);
+				gGL.vertex3fv((snap_line_end + arrow_span * mSnapRegimeOffset * 0.1f).mV);
+				gGL.vertex3fv((snap_line_end - arrow_span * mSnapRegimeOffset * 0.1f).mV);
 			}
 			gGL.end();
 		}
@@ -1727,7 +1729,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
 			{
 				F32 alpha = (1.f - (1.f *  ((F32)llabs(i) / (F32)num_ticks_per_side2)));
 				LLVector3 tick_pos = mScaleCenter + (mScaleDir * (grid_multiple2 + i) * smallest_subdivision2);
-
+				
 				F32 cur_subdivisions = llclamp(getSubdivisionLevel(tick_pos, mScaleDir, mScaleSnapUnit2, mTickPixelSpacing2), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);
 
 				if (fmodf((F32)(i + sub_div_offset_2), (sGridMaxSubdivisionLevel / cur_subdivisions)) != 0.f)
@@ -1780,7 +1782,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
 			if (fmodf((F32)(i + label_sub_div_offset_1), (sGridMaxSubdivisionLevel / llmin(sGridMaxSubdivisionLevel, getSubdivisionLevel(tick_pos, mScaleDir, mScaleSnapUnit1, tick_label_spacing)))) == 0.f)
 			{
 				LLVector3 text_origin = tick_pos + (mSnapGuideDir1 * mSnapRegimeOffset * (1.f + tick_scale));
-
+				
 				EGridMode grid_mode = LLSelectMgr::getInstance()->getGridMode();
 				F32 tick_value;
 				if (grid_mode == GRID_MODE_WORLD)
diff --git a/indra/newview/llmanipscale.h b/indra/newview/llmanipscale.h
index e1da7a1bb555c853a84ff5143120a32b66c6d357..7cc3c9981090d47ea42919f1c058ca1d821769b7 100755
--- a/indra/newview/llmanipscale.h
+++ b/indra/newview/llmanipscale.h
@@ -71,7 +71,7 @@ public:
 
 		ManipulatorHandle(LLVector3 pos, EManipPart id, EScaleManipulatorType type):mPosition(pos), mManipID(id), mType(type){}
 	};
-
+	static const S32 NUM_MANIPULATORS = 14;
 
 	LLManipScale( LLToolComposite* composite );
 	~LLManipScale();
@@ -98,7 +98,7 @@ private:
 	void			renderFaces( const LLBBox& local_bbox );
 	void			renderEdges( const LLBBox& local_bbox );
 	void			renderBoxHandle( F32 x, F32 y, F32 z );
-	void			renderAxisHandle( const LLVector3& start, const LLVector3& end );
+	void			renderAxisHandle( U32 part, const LLVector3& start, const LLVector3& end );
 	void			renderGuidelinesPart( const LLBBox& local_bbox );
 	void			renderSnapGuides( const LLBBox& local_bbox );
 
@@ -142,7 +142,6 @@ private:
 	};
 
 
-	F32				mBoxHandleSize; //!< The size of the handles at the corners of the bounding box.
 	F32				mScaledBoxHandleSize; //!< Handle size after scaling for selection feedback.
 	LLVector3d		mDragStartPointGlobal;
 	LLVector3d		mDragStartCenterGlobal; //!< The center of the bounding box of all selected objects at time of drag start.
@@ -171,7 +170,8 @@ private:
 	LLVector3		mScaleDir; //!< The direction of the scaling action.  In face-dragging this is aligned with one of the cardinal axis relative to the prim, but in corner-dragging this is along the diagonal.
 	F32				mScaleSnappedValue; //!< The distance of the current position nearest the mouse location, measured along mScaleDir.  Is measured either from the center or from the far face/corner depending upon whether uniform scaling is true or false respectively.
 	ESnapRegimes	mSnapRegime; //<! Which, if any, snap regime the cursor is currently residing in.
-	F32*			mManipulatorScales;
+	F32				mManipulatorScales[NUM_MANIPULATORS];
+	F32				mBoxHandleSize[NUM_MANIPULATORS];		// The size of the handles at the corners of the bounding box
 };
 
 #endif  // LL_MANIPSCALE_H
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index ff0d25d2033325178a53d53a018a509817c9ae2b..8a89131c43846bdffc6970509479900f18c05226 100755
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -1246,7 +1246,7 @@ void LLManipTranslate::renderSnapGuides()
 		// find distance to nearest smallest grid unit
 		F32 offset_nearest_grid_unit = fmodf(dist_grid_axis, smallest_grid_unit_scale);
 		// how many smallest grid units are we away from largest grid scale?
-		S32 sub_div_offset = llround(fmod(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() / sGridMinSubdivisionLevel) / smallest_grid_unit_scale);
+		S32 sub_div_offset = llround(fmodf(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() / sGridMinSubdivisionLevel) / smallest_grid_unit_scale);
 		S32 num_ticks_per_side = llmax(1, llfloor(0.5f * guide_size_meters / smallest_grid_unit_scale));
 
 		LLGLDepthTest gls_depth(GL_FALSE);
diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp
index 106f6c25f18e75eec829a78c87dba46bc49f1bba..375c54479dd01bfe80b1732bc427de98c2efefe7 100755
--- a/indra/newview/llpanelgrouplandmoney.cpp
+++ b/indra/newview/llpanelgrouplandmoney.cpp
@@ -421,27 +421,14 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
 		msg->getUUID("QueryData", "OwnerID", owner_id, 0);
 		msg->getUUID("TransactionData", "TransactionID", trans_id);
 
+		S32 total_contribution = 0;
 		if(owner_id.isNull())
 		{
 			// special block which has total contribution
 			++first_block;
-			
-			S32 total_contribution;
+
 			msg->getS32("QueryData", "ActualArea", total_contribution, 0);
 			mPanel.getChild<LLUICtrl>("total_contributed_land_value")->setTextArg("[AREA]", llformat("%d", total_contribution));
-
-			S32 committed;
-			msg->getS32("QueryData", "BillableArea", committed, 0);
-			mPanel.getChild<LLUICtrl>("total_land_in_use_value")->setTextArg("[AREA]", llformat("%d", committed));
-			
-			S32 available = total_contribution - committed;
-			mPanel.getChild<LLUICtrl>("land_available_value")->setTextArg("[AREA]", llformat("%d", available));
-
-			if ( mGroupOverLimitTextp && mGroupOverLimitIconp )
-			{
-				mGroupOverLimitIconp->setVisible(available < 0);
-				mGroupOverLimitTextp->setVisible(available < 0);
-			}
 		}
 
 		if ( trans_id != mTransID ) return;
@@ -460,7 +447,8 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
 		std::string sim_name;
 		std::string land_sku;
 		std::string land_type;
-		
+		S32 committed = 0;
+
 		for(S32 i = first_block; i < count; ++i)
 		{
 			msg->getUUID("QueryData", "OwnerID", owner_id, i);
@@ -489,6 +477,9 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
 			S32 region_y = llround(global_y) % REGION_WIDTH_UNITS;
 			std::string location = sim_name + llformat(" (%d, %d)", region_x, region_y);
 			std::string area;
+			committed+=billable_area;
+
+
 			if(billable_area == actual_area)
 			{
 				area = llformat("%d", billable_area);
@@ -525,6 +516,16 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
 			
 			mGroupParcelsp->addElement(row);
 		}
+
+		mPanel.getChild<LLUICtrl>("total_land_in_use_value")->setTextArg("[AREA]", llformat("%d", committed));
+
+		S32 available = total_contribution - committed;
+		mPanel.getChild<LLUICtrl>("land_available_value")->setTextArg("[AREA]", llformat("%d", available));
+		if ( mGroupOverLimitTextp && mGroupOverLimitIconp )
+		{
+			mGroupOverLimitIconp->setVisible(available < 0);
+			mGroupOverLimitTextp->setVisible(available < 0);
+		}
 	}
 }
 
diff --git a/indra/newview/llpanelland.cpp b/indra/newview/llpanelland.cpp
index 9b21fbf6b718cdf2cc48b9fae79ac20ea646e283..acdb16f43291807995eaeb9dfb2f99a6082c14f0 100755
--- a/indra/newview/llpanelland.cpp
+++ b/indra/newview/llpanelland.cpp
@@ -145,7 +145,7 @@ void LLPanelLandInfo::refresh()
 						&& ((gAgent.getID() == auth_buyer_id)
 							|| (auth_buyer_id.isNull())));
 			
-		if (is_public)
+		if (is_public && !LLViewerParcelMgr::getInstance()->getParcelSelection()->getMultipleOwners())
 		{
 			getChildView("button buy land")->setEnabled(TRUE);
 		}
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 67cbc913327e7131045f7035a54cf1cbc879d471..75a3584a1e215144ae1fb4541d01e943efdacaf6 100755
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -1263,6 +1263,7 @@ bool LLLandmarksPanel::handleDragAndDropToTrash(BOOL drop, EDragAndDropType carg
 		break;
 	}
 
+	updateVerbs();
 	return true;
 }
 
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index e501486ecbaf7725c1061d9f6ee4cf1cad99c5c3..0817b677bc31065383344ff3f317bb0a5ae92296 100755
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -129,6 +129,7 @@ BOOL LLPanelPlaceProfile::postBuild()
 
 	mEstateNameText = getChild<LLTextBox>("estate_name");
 	mEstateRatingText = getChild<LLTextBox>("estate_rating");
+	mEstateRatingIcon = getChild<LLIconCtrl>("estate_rating_icon");
 	mEstateOwnerText = getChild<LLTextBox>("estate_owner");
 	mCovenantText = getChild<LLTextEditor>("covenant");
 
@@ -201,6 +202,7 @@ void LLPanelPlaceProfile::resetLocation()
 
 	mEstateNameText->setValue(loading);
 	mEstateRatingText->setValue(loading);
+	mEstateRatingIcon->setValue(loading);
 	mEstateOwnerText->setValue(loading);
 	mCovenantText->setValue(loading);
 
@@ -348,6 +350,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 
 		mParcelRatingIcon->setValue(icon_m);
 		mRegionRatingIcon->setValue(icon_m);
+		mEstateRatingIcon->setValue(icon_m);
 		break;
 
 	case SIM_ACCESS_ADULT:
@@ -355,6 +358,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 
 		mParcelRatingIcon->setValue(icon_r);
 		mRegionRatingIcon->setValue(icon_r);
+		mEstateRatingIcon->setValue(icon_r);
 		break;
 
 	default:
@@ -362,6 +366,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 
 		mParcelRatingIcon->setValue(icon_pg);
 		mRegionRatingIcon->setValue(icon_pg);
+		mEstateRatingIcon->setValue(icon_pg);
 	}
 
 	std::string rating = LLViewerRegion::accessToString(sim_access);
diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h
index 01adfd49403c09b2b3f36fae18d0223c080a4b8e..4547e14b2ef9416702a95de5a9cd976548c96bd8 100755
--- a/indra/newview/llpanelplaceprofile.h
+++ b/indra/newview/llpanelplaceprofile.h
@@ -103,6 +103,7 @@ private:
 
 	LLTextBox*			mEstateNameText;
 	LLTextBox*			mEstateRatingText;
+	LLIconCtrl*			mEstateRatingIcon;
 	LLTextBox*			mEstateOwnerText;
 	LLTextEditor*		mCovenantText;
 
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 652d2be6f6104973e07777422f870b7e4fb214d0..3de9dc2f8058defc0b7559078c4ac8aace2e2970 100755
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -45,6 +45,7 @@
 #include "llviewermenu.h"
 #include "lllandmarkactions.h"
 #include "llclipboard.h"
+#include "lltrans.h"
 
 // Maximum number of items that can be added to a list in one pass.
 // Used to limit time spent for items list update per frame.
@@ -55,7 +56,8 @@ static const std::string COLLAPSED_BY_USER = "collapsed_by_user";
 class LLTeleportHistoryFlatItem : public LLPanel
 {
 public:
-	LLTeleportHistoryFlatItem(S32 index, LLTeleportHistoryPanel::ContextMenu *context_menu, const std::string &region_name, const std::string &hl);
+	LLTeleportHistoryFlatItem(S32 index, LLTeleportHistoryPanel::ContextMenu *context_menu, const std::string &region_name,
+										 	 LLDate date, const std::string &hl);
 	virtual ~LLTeleportHistoryFlatItem();
 
 	virtual BOOL postBuild();
@@ -66,8 +68,11 @@ public:
 	void setIndex(S32 index) { mIndex = index; }
 	const std::string& getRegionName() { return mRegionName;}
 	void setRegionName(const std::string& name);
+	void setDate(LLDate date);
 	void setHighlightedText(const std::string& text);
 	void updateTitle();
+	void updateTimestamp();
+	std::string getTimestamp();
 
 	/*virtual*/ void setValue(const LLSD& value);
 
@@ -84,12 +89,14 @@ private:
 
 	LLButton* mProfileBtn;
 	LLTextBox* mTitle;
+	LLTextBox* mTimeTextBox;
 	
 	LLTeleportHistoryPanel::ContextMenu *mContextMenu;
 
 	S32 mIndex;
 	std::string mRegionName;
 	std::string mHighlight;
+	LLDate 		mDate;
 	LLRootHandle<LLTeleportHistoryFlatItem> mItemHandle;
 };
 
@@ -121,11 +128,13 @@ private:
 ////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////
 
-LLTeleportHistoryFlatItem::LLTeleportHistoryFlatItem(S32 index, LLTeleportHistoryPanel::ContextMenu *context_menu, const std::string &region_name, const std::string &hl)
+LLTeleportHistoryFlatItem::LLTeleportHistoryFlatItem(S32 index, LLTeleportHistoryPanel::ContextMenu *context_menu, const std::string &region_name,
+																LLDate date, const std::string &hl)
 :	LLPanel(),
 	mIndex(index),
 	mContextMenu(context_menu),
 	mRegionName(region_name),
+	mDate(date),
 	mHighlight(hl)
 {
 	buildFromFile( "panel_teleport_history_item.xml");
@@ -140,11 +149,14 @@ BOOL LLTeleportHistoryFlatItem::postBuild()
 {
 	mTitle = getChild<LLTextBox>("region");
 
+	mTimeTextBox = getChild<LLTextBox>("timestamp");
+
 	mProfileBtn = getChild<LLButton>("profile_btn");
         
 	mProfileBtn->setClickedCallback(boost::bind(&LLTeleportHistoryFlatItem::onProfileBtnClick, this));
 
 	updateTitle();
+	updateTimestamp();
 
 	return true;
 }
@@ -179,6 +191,38 @@ void LLTeleportHistoryFlatItem::setRegionName(const std::string& name)
 	mRegionName = name;
 }
 
+void LLTeleportHistoryFlatItem::setDate(LLDate date)
+{
+	mDate = date;
+}
+
+std::string LLTeleportHistoryFlatItem::getTimestamp()
+{
+	const LLDate &date = mDate;
+	std::string timestamp = "";
+
+	LLDate now = LLDate::now();
+	S32 now_year, now_month, now_day, now_hour, now_min, now_sec;
+	now.split(&now_year, &now_month, &now_day, &now_hour, &now_min, &now_sec);
+
+	const S32 seconds_in_day = 24 * 60 * 60;
+	S32 seconds_today = now_hour * 60 * 60 + now_min * 60 + now_sec;
+	S32 time_diff = (S32) now.secondsSinceEpoch() - (S32) date.secondsSinceEpoch();
+
+	// Only show timestamp for today and yesterday
+	if(time_diff < seconds_today + seconds_in_day)
+	{
+		timestamp = "[" + LLTrans::getString("TimeHour12")+"]:["
+						+ LLTrans::getString("TimeMin")+"] ["+ LLTrans::getString("TimeAMPM")+"]";
+		LLSD substitution;
+		substitution["datetime"] = (S32) date.secondsSinceEpoch();
+		LLStringUtil::format(timestamp, substitution);
+	}
+
+	return timestamp;
+
+}
+
 void LLTeleportHistoryFlatItem::updateTitle()
 {
 	static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", LLColor4U(255, 255, 255));
@@ -190,6 +234,17 @@ void LLTeleportHistoryFlatItem::updateTitle()
 		mHighlight);
 }
 
+void LLTeleportHistoryFlatItem::updateTimestamp()
+{
+	static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", LLColor4U(255, 255, 255));
+
+	LLTextUtil::textboxSetHighlightedVal(
+		mTimeTextBox,
+		LLStyle::Params().color(sFgColor),
+		getTimestamp(),
+		mHighlight);
+}
+
 void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask)
 {
 	getChildView("hovered_icon")->setVisible( true);
@@ -248,9 +303,11 @@ LLTeleportHistoryFlatItemStorage::getFlatItemForPersistentItem (
 		{
 			item->setIndex(cur_item_index);
 			item->setRegionName(persistent_item.mTitle);
+			item->setDate(persistent_item.mDate);
 			item->setHighlightedText(hl);
 			item->setVisible(TRUE);
 			item->updateTitle();
+			item->updateTimestamp();
 		}
 		else
 		{
@@ -264,6 +321,7 @@ LLTeleportHistoryFlatItemStorage::getFlatItemForPersistentItem (
 		item = new LLTeleportHistoryFlatItem(cur_item_index,
 											 context_menu,
 											 persistent_item.mTitle,
+											 persistent_item.mDate,
 											 hl);
 		mItems.push_back(item->getItemHandle());
 	}
diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp
index 6d032ad3d399ecc7e7b4cf6eb8af3a69808103ed..398f4e6e4249074c2b674bb2f1c220d0bc4cb579 100755
--- a/indra/newview/llpreview.cpp
+++ b/indra/newview/llpreview.cpp
@@ -90,6 +90,7 @@ void LLPreview::setObjectID(const LLUUID& object_id)
 	{
 		loadAsset();
 	}
+	refreshFromItem();
 }
 
 void LLPreview::setItem( LLInventoryItem* item )
@@ -99,6 +100,7 @@ void LLPreview::setItem( LLInventoryItem* item )
 	{
 		loadAsset();
 	}
+	refreshFromItem();
 }
 
 const LLInventoryItem *LLPreview::getItem() const
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 9ff0ece7d9f41995ed90194b3fd97ac84e913c57..9411b8265b3f4a41181e4b674bb6b307ed1a50f9 100755
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -1851,7 +1851,7 @@ void LLLiveLSLEditor::loadAsset()
 			mIsModifiable = item && gAgent.allowOperation(PERM_MODIFY, 
 										item->getPermissions(),
 				   						GP_OBJECT_MANIPULATE);
-			refreshFromItem();
+
 			// This is commented out, because we don't completely
 			// handle script exports yet.
 			/*
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 2556714792e27278202db2eaa4023b53e6e61c6e..4970eec636844fe33797ad6f851601ab2a6e2315 100755
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -257,12 +257,9 @@ void LLSidepanelInventory::updateInbox()
 	//
 	// Track inbox folder changes
 	//
-
-	const bool do_not_create_folder = false;
-
-	const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, do_not_create_folder);
+	const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, true);
 	
-	// Set up observer to listen for creation of inbox if at least one of them doesn't exist
+	// Set up observer to listen for creation of inbox if it doesn't exist
 	if (inbox_id.isNull())
 	{
 		observeInboxCreation();
@@ -270,6 +267,11 @@ void LLSidepanelInventory::updateInbox()
 	// Set up observer for inbox changes, if we have an inbox already
 	else 
 	{
+        // Consolidate Received items
+        // We shouldn't have to do that but with a client/server system relying on a "well known folder" convention,
+        // things can get messy and conventions broken. This call puts everything back together in its right place.
+        gInventory.consolidateForType(inbox_id, LLFolderType::FT_INBOX);
+        
 		// Enable the display of the inbox if it exists
 		enableInbox(true);
 
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 7b894d8d98559e8baf440e1cd13f8d1d06840794..0a8257f42b0fabe86617851dd1637e69c6a2bc6e 100755
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -62,6 +62,7 @@ static U32 sZombieGroups = 0;
 U32 LLSpatialGroup::sNodeCount = 0;
 
 U32 gOctreeMaxCapacity;
+F32 gOctreeMinSize;
 
 BOOL LLSpatialGroup::sNoDelete = FALSE;
 
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 56fac3b092b341b1a028317d99de9c8f6eefe851..0c282a19a5feb67adcf9e0211225873ff070dd5c 100755
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2833,6 +2833,7 @@ void LLStartUp::initNameCache()
 	// capabilities for display name lookup
 	LLAvatarNameCache::initClass(false,gSavedSettings.getBOOL("UsePeopleAPI"));
 	LLAvatarNameCache::setUseDisplayNames(gSavedSettings.getBOOL("UseDisplayNames"));
+	LLAvatarNameCache::setUseUsernames(gSavedSettings.getBOOL("NameTagShowUsernames"));
 }
 
 void LLStartUp::cleanupNameCache()
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index d307a31843c59f68cbd874b56bca1ed985000009..eabf6f0497c80a71b7cf08f5ca30bbffcc4fec38 100755
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -1584,13 +1584,22 @@ static void give_inventory_cb(const LLSD& notification, const LLSD& response)
 	const LLUUID& session_id = payload["session_id"];
 	const LLUUID& agent_id = payload["agent_id"];
 	LLViewerInventoryItem * inv_item =  gInventory.getItem(payload["item_id"]);
-	if (NULL == inv_item)
+	LLViewerInventoryCategory * inv_cat =  gInventory.getCategory(payload["item_id"]);
+	if (NULL == inv_item && NULL == inv_cat)
 	{
-		llassert(NULL != inv_item);
+		llassert( FALSE );
 		return;
 	}
-
-	if (LLGiveInventory::doGiveInventoryItem(agent_id, inv_item, session_id))
+	bool successfully_shared;
+	if (inv_item)
+	{
+		successfully_shared = LLGiveInventory::doGiveInventoryItem(agent_id, inv_item, session_id);
+	}
+	else
+	{
+		successfully_shared = LLGiveInventory::doGiveInventoryCategory(agent_id, inv_cat, session_id);
+	}
+	if (successfully_shared)
 	{
 		if ("avatarpicker" == payload["d&d_dest"].asString())
 		{
@@ -1600,8 +1609,8 @@ static void give_inventory_cb(const LLSD& notification, const LLSD& response)
 	}
 }
 
-static void show_item_sharing_confirmation(const std::string name,
-					   LLViewerInventoryItem* inv_item,
+static void show_object_sharing_confirmation(const std::string name,
+					   LLInventoryObject* inv_item,
 					   const LLSD& dest,
 					   const LLUUID& dest_agent,
 					   const LLUUID& session_id = LLUUID::null)
@@ -1611,32 +1620,28 @@ static void show_item_sharing_confirmation(const std::string name,
 		llassert(NULL != inv_item);
 		return;
 	}
-	if(gInventory.getItem(inv_item->getUUID())
-		&& LLGiveInventory::isInventoryGiveAcceptable(inv_item))
-	{
-		LLSD substitutions;
-		substitutions["RESIDENTS"] = name;
-		substitutions["ITEMS"] = inv_item->getName();
-		LLSD payload;
-		payload["agent_id"] = dest_agent;
-		payload["item_id"] = inv_item->getUUID();
-		payload["session_id"] = session_id;
-		payload["d&d_dest"] = dest.asString();
-		LLNotificationsUtil::add("ShareItemsConfirmation", substitutions, payload, &give_inventory_cb);
-	}
+	LLSD substitutions;
+	substitutions["RESIDENTS"] = name;
+	substitutions["ITEMS"] = inv_item->getName();
+	LLSD payload;
+	payload["agent_id"] = dest_agent;
+	payload["item_id"] = inv_item->getUUID();
+	payload["session_id"] = session_id;
+	payload["d&d_dest"] = dest.asString();
+	LLNotificationsUtil::add("ShareItemsConfirmation", substitutions, payload, &give_inventory_cb);
 }
 
 static void get_name_cb(const LLUUID& id,
 						const std::string& full_name,
-						LLViewerInventoryItem* inv_item,
+						LLInventoryObject* inv_obj,
 						const LLSD& dest,
 						const LLUUID& dest_agent)
 {
-	show_item_sharing_confirmation(full_name,
-								   inv_item,
-								   dest,
-								   id,
-								   LLUUID::null);
+	show_object_sharing_confirmation(full_name,
+								     inv_obj,
+								     dest,
+						  		     id,
+								     LLUUID::null);
 }
 
 // function used as drag-and-drop handler for simple agent give inventory requests
@@ -1662,10 +1667,11 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_
 	case DAD_GESTURE:
 	case DAD_CALLINGCARD:
 	case DAD_MESH:
+	case DAD_CATEGORY:
 	{
-		LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data;
-		if(gInventory.getItem(inv_item->getUUID())
-			&& LLGiveInventory::isInventoryGiveAcceptable(inv_item))
+		LLInventoryObject* inv_obj = (LLInventoryObject*)cargo_data;
+		if(gInventory.getCategory(inv_obj->getUUID()) || (gInventory.getItem(inv_obj->getUUID())
+			&& LLGiveInventory::isInventoryGiveAcceptable(dynamic_cast<LLInventoryItem*>(inv_obj))))
 		{
 			// *TODO: get multiple object transfers working
 			*accept = ACCEPT_YES_COPY_SINGLE;
@@ -1682,40 +1688,18 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_
 					// Otherwise set up a callback to show the dialog when the name arrives.
 					if (gCacheName->getFullName(dest_agent, fullname))
 					{
-						show_item_sharing_confirmation(fullname, inv_item, dest, dest_agent, LLUUID::null);
+						show_object_sharing_confirmation(fullname, inv_obj, dest, dest_agent, LLUUID::null);
 					}
 					else
 					{
-						gCacheName->get(dest_agent, false, boost::bind(&get_name_cb, _1, _2, inv_item, dest, dest_agent));
+						gCacheName->get(dest_agent, false, boost::bind(&get_name_cb, _1, _2, inv_obj, dest, dest_agent));
 					}
 
 					return true;
 				}
 
 				// If an IM session with destination agent is found item offer will be logged in this session.
-				show_item_sharing_confirmation(session->mName, inv_item, dest, dest_agent, session_id);
-			}
-		}
-		else
-		{
-			// It's not in the user's inventory (it's probably
-			// in an object's contents), so disallow dragging
-			// it here.  You can't give something you don't
-			// yet have.
-			*accept = ACCEPT_NO;
-		}
-		break;
-	}
-	case DAD_CATEGORY:
-	{
-		LLViewerInventoryCategory* inv_cat = (LLViewerInventoryCategory*)cargo_data;
-		if( gInventory.getCategory( inv_cat->getUUID() ) )
-		{
-			// *TODO: get multiple object transfers working
-			*accept = ACCEPT_YES_COPY_SINGLE;
-			if(drop)
-			{
-				LLGiveInventory::doGiveInventoryCategory(dest_agent, inv_cat, session_id);
+				show_object_sharing_confirmation(session->mName, inv_obj, dest, dest_agent, session_id);
 			}
 		}
 		else
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 558159775f6a3d8a8931c9b3265dbbce87fd2cad..6881ec4563acbb6fb682bb3f7533bb32838fb79b 100755
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -1672,17 +1672,7 @@ BOOL LLToolPie::handleRightClickPick()
 			{
 				name = node->mName;
 			}
-			std::string mute_msg;
-			if (LLMuteList::getInstance()->isMuted(object->getID(), name))
-			{
-				mute_msg = LLTrans::getString("UnmuteObject");
-			}
-			else
-			{
-				mute_msg = LLTrans::getString("MuteObject2");
-			}
-			
-			gMenuHolder->getChild<LLUICtrl>("Object Mute")->setValue(mute_msg);
+
 			gMenuObject->show(x, y);
 
 			showVisualContextMenuEffect();
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 70d3fc9462249105a42125cbea30a5eaa2d71b21..502051845446f5e6786ac18ecd30b5740bb8e87e 100755
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -368,6 +368,7 @@ static bool handleRepartition(const LLSD&)
 	if (gPipeline.isInit())
 	{
 		gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity");
+		gOctreeMinSize = gSavedSettings.getF32("OctreeMinimumNodeSize");
 		gObjectList.repartitionObjects();
 	}
 	return true;
diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp
index 2c196ece5173707336ccbf2d2157b68a394ce137..0401de7e69ced649bc70dbbade5721ff56390b84 100644
--- a/indra/newview/llviewerfoldertype.cpp
+++ b/indra/newview/llviewerfoldertype.cpp
@@ -136,7 +136,7 @@ LLViewerFolderDictionary::LLViewerFolderDictionary()
 	addEntry(LLFolderType::FT_MESH, 				new ViewerFolderEntry("Meshes",					"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     true));
 	
 	bool boxes_invisible = !gSavedSettings.getBOOL("InventoryOutboxMakeVisible");
-	addEntry(LLFolderType::FT_INBOX, 				new ViewerFolderEntry("Inbox",					"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     boxes_invisible));
+	addEntry(LLFolderType::FT_INBOX, 				new ViewerFolderEntry("Received Items",			"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     boxes_invisible));
 	addEntry(LLFolderType::FT_OUTBOX, 				new ViewerFolderEntry("Merchant Outbox",		"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     boxes_invisible));
 
 	addEntry(LLFolderType::FT_BASIC_ROOT, 			new ViewerFolderEntry("Basic Root",				"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     true));
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index b23e23f32e4d49945502d0fc0ddc1a344997860e..8c9429c05d7195aa4ef239324945f1b7f80fadc6 100755
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7815,7 +7815,7 @@ void handle_report_bug(const LLSD& param)
 	replace["[ENVIRONMENT]"] = LLURI::escape(LLAppViewer::instance()->getViewerInfoString());
 	LLSLURL location_url;
 	LLAgentUI::buildSLURL(location_url);
-	replace["[LOCATION]"] = location_url.getSLURLString();
+	replace["[LOCATION]"] = LLURI::escape(location_url.getSLURLString());
 
 	LLUIString file_bug_url = gSavedSettings.getString("ReportBugURL");
 	file_bug_url.setArgs(replace);
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index be24c04dfc68295c97ca4f9fded7ecd9b49abc0b..9d5c3c4d4a0ad0d3c3eef2d86bc3882d1218a2b8 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2461,10 +2461,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 					&& from_id.notNull() //not a system message
 					&& to_id.notNull()) //not global message
 		{
-			// return a standard "do not disturb" message, but only do it to online IM
-			// (i.e. not other auto responses and not store-and-forward IM)
-
-			send_do_not_disturb_message(msg, from_id, session_id);
 
 			// now store incoming IM in chat history
 
@@ -2485,6 +2481,15 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				region_id,
 				position,
 				true);
+
+			if (!gIMMgr->isDNDMessageSend(session_id))
+			{
+				// return a standard "do not disturb" message, but only do it to online IM
+				// (i.e. not other auto responses and not store-and-forward IM)
+				send_do_not_disturb_message(msg, from_id, session_id);
+				gIMMgr->setDNDMessageSent(session_id, true);
+			}
+
 		}
 		else if (from_id.isNull())
 		{
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 40d17ead763623ab3be0b422fc5f54ee6ef40813..673913c4f27438d14e7b72f2f79bc0bc4a0588c1 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -2571,40 +2571,69 @@ void LLViewerRegion::unpackRegionHandshake()
 	{
 		LLUUID tmp_id;
 
+		bool changed = false;
+
+		// Get the 4 textures for land
 		msg->getUUID("RegionInfo", "TerrainDetail0", tmp_id);
+		changed |= (tmp_id != compp->getDetailTextureID(0));		
 		compp->setDetailTextureID(0, tmp_id);
+
 		msg->getUUID("RegionInfo", "TerrainDetail1", tmp_id);
+		changed |= (tmp_id != compp->getDetailTextureID(1));		
 		compp->setDetailTextureID(1, tmp_id);
+
 		msg->getUUID("RegionInfo", "TerrainDetail2", tmp_id);
+		changed |= (tmp_id != compp->getDetailTextureID(2));		
 		compp->setDetailTextureID(2, tmp_id);
+
 		msg->getUUID("RegionInfo", "TerrainDetail3", tmp_id);
+		changed |= (tmp_id != compp->getDetailTextureID(3));		
 		compp->setDetailTextureID(3, tmp_id);
 
+		// Get the start altitude and range values for land textures
 		F32 tmp_f32;
 		msg->getF32("RegionInfo", "TerrainStartHeight00", tmp_f32);
+		changed |= (tmp_f32 != compp->getStartHeight(0));
 		compp->setStartHeight(0, tmp_f32);
+
 		msg->getF32("RegionInfo", "TerrainStartHeight01", tmp_f32);
+		changed |= (tmp_f32 != compp->getStartHeight(1));
 		compp->setStartHeight(1, tmp_f32);
+
 		msg->getF32("RegionInfo", "TerrainStartHeight10", tmp_f32);
+		changed |= (tmp_f32 != compp->getStartHeight(2));
 		compp->setStartHeight(2, tmp_f32);
+
 		msg->getF32("RegionInfo", "TerrainStartHeight11", tmp_f32);
+		changed |= (tmp_f32 != compp->getStartHeight(3));
 		compp->setStartHeight(3, tmp_f32);
 
+
 		msg->getF32("RegionInfo", "TerrainHeightRange00", tmp_f32);
+		changed |= (tmp_f32 != compp->getHeightRange(0));
 		compp->setHeightRange(0, tmp_f32);
+
 		msg->getF32("RegionInfo", "TerrainHeightRange01", tmp_f32);
+		changed |= (tmp_f32 != compp->getHeightRange(1));
 		compp->setHeightRange(1, tmp_f32);
+
 		msg->getF32("RegionInfo", "TerrainHeightRange10", tmp_f32);
+		changed |= (tmp_f32 != compp->getHeightRange(2));
 		compp->setHeightRange(2, tmp_f32);
+
 		msg->getF32("RegionInfo", "TerrainHeightRange11", tmp_f32);
+		changed |= (tmp_f32 != compp->getHeightRange(3));
 		compp->setHeightRange(3, tmp_f32);
 
 		// If this is an UPDATE (params already ready, we need to regenerate
 		// all of our terrain stuff, by
 		if (compp->getParamsReady())
 		{
-			//this line creates frame stalls on region crossing and removing it appears to have no effect
-			//getLand().dirtyAllPatches();
+			// Update if the land changed
+			if (changed)
+			{
+				getLand().dirtyAllPatches();
+			}
 		}
 		else
 		{
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index d052906bee2e1eb8ac8e2030752179b625d8dd69..4d263c118b23d5f6c43e4d4a9d87cb8d591d7f49 100755
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1075,7 +1075,7 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window,  LLCoordGL pos, MASK
 
 	// *HACK: this should be rolled into the composite tool logic, not
 	// hardcoded at the top level.
-	if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() && LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance())
+	if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() && LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance() && gAgent.isInitialized())
 	{
 		// If the current tool didn't process the click, we should show
 		// the pie menu.  This can be done by passing the event to the pie
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 945d3711f013148cf570d55dfb118d37f35a442a..a83e2e020ea012958e2f52ecb281bfc6794a3d8e 100755
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1287,9 +1287,9 @@ BOOL LLVOVolume::calcLOD()
 	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_LOD_INFO) &&
 		mDrawable->getFace(0))
 	{
-		//setDebugText(llformat("%.2f:%.2f, %d", debug_distance, radius, cur_detail));
+		//setDebugText(llformat("%.2f:%.2f, %d", mDrawable->mDistanceWRTCamera, radius, cur_detail));
 
-		//setDebugText(llformat("%d", mDrawable->getFace(0)->getTextureIndex()));
+		setDebugText(llformat("%d", mDrawable->getFace(0)->getTextureIndex()));
 	}
 
 	if (cur_detail != mLOD)
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 7d7b32f3050820a6791742735ca564c94eabb3ba..3dfe1e5992fcb3f1bf417fc57dd02cdf2f9358ab 100755
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -492,6 +492,7 @@ void LLPipeline::init()
 	refreshCachedSettings();
 
 	gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity");
+	gOctreeMinSize = gSavedSettings.getF32("OctreeMinimumNodeSize");
 	sDynamicLOD = gSavedSettings.getBOOL("RenderDynamicLOD");
 	sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
 	sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips");
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index ec733c1e8bc13df1f1de61b07b2ef8967b7a6de6..46698b394901112c1bd78a5d4e7e42b0574aa8e1 100755
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -245,7 +245,7 @@ with the same filename but different name
   <texture name="Icon_Dock_Foreground" file_name="windows/Icon_Dock_Foreground.png" preload="true" />
   <texture name="Icon_Dock_Press" file_name="windows/Icon_Dock_Press.png" preload="true" />
 
-  <texture name="Icon_For_Sale" file_name="icons/Icon_For_sale.png" preload="false" />
+  <texture name="Icon_For_Sale" file_name="icons/Icon_For_Sale.png" preload="false" />
 
   <texture name="Icon_Gear_Background" file_name="windows/Icon_Gear_Background.png" preload="false" />
   <texture name="Icon_Gear_Foreground" file_name="windows/Icon_Gear_Foreground.png" preload="false" />
@@ -346,8 +346,8 @@ with the same filename but different name
   <texture name="ModelImport_Status_Warning" file_name="lag_status_warning.tga" preload="false"/>
   <texture name="ModelImport_Status_Error" file_name="red_x.png" preload="false"/>
   
-  <texture name="MouseLook_View_Off" file_name="bottomtray/MouseLook_view_off.png" preload="false" />
-  <texture name="MouseLook_View_On" file_name="bottomtray/MouseLook_view_on.png" preload="false" />
+  <texture name="MouseLook_View_Off" file_name="bottomtray/Mouselook_View_Off.png" preload="false" />
+  <texture name="MouseLook_View_On" file_name="bottomtray/Mouselook_View_On.png" preload="false" />
 
   <texture name="Move_Fly_Off" file_name="bottomtray/Move_Fly_Off.png" preload="false" />
   <texture name="Move_Run_Off" file_name="bottomtray/Move_Run_Off.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml
index 0df330b016a38a0562f8370d3140cc347686a63f..6d48180707f1be2dcb765c4f09578a5495ccf27a 100755
--- a/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
 	<text name="cache_size_label_l">
 		(Lokationer, billeder, web, søge historik)
 	</text>
-	<check_box label="Vis dig selv i søgeresultater" name="online_searchresults"/>
+	<check_box label="Vis min profil info i søgeresultater" name="online_searchresults"/>
 	<check_box label="Kun venner og grupper ved jeg er online" name="online_visibility"/>
 	<check_box label="Kun venner og grupper kan sende besked til mig" name="voice_call_friends_only_check"/>
 	<check_box label="Slå mikrofon fra når opkald slutter" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
index e21bed6bb5b2cb5ed85d942f9a8c8b60f6e85bc5..afde50b981c5c79b99299219b6838eda443e2186 100755
--- a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
 	<text name="cache_size_label_l">
 		(Standorte, Bilder, Web, Suchverlauf)
 	</text>
-	<check_box label="In Suchergebnissen anzeigen" name="online_searchresults"/>
+	<check_box label="Zeigen Sie mein Profil Informationen in Suchergebnisse" name="online_searchresults"/>
 	<check_box label="Nur Freunde und Gruppen wissen, dass ich online bin" name="online_visibility"/>
 	<check_box label="Nur Freunde und Gruppen können mich anrufen oder mir eine IM schicken" name="voice_call_friends_only_check"/>
 	<check_box label="Mikrofon ausschalten, wenn Anrufe beendet werden" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
index 9561f67941bc16cdd8f751a1a625a50a1dfabd3d..c50c8c02fea7a1468433904b4fc481338f1b7574 100755
--- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
@@ -203,47 +203,15 @@
         <combo_box.item
          label="Age &gt; Age play"
          name="Age__Age_play"
-         value="31" />
+         value="31" />       
         <combo_box.item
-         label="Age &gt; Adult Resident on Teen Second Life"
-         name="Age__Adult_resident_on_Teen_Second_Life"
-         value="32" />
-        <combo_box.item
-         label="Age &gt; Underage Resident outside of Teen Second Life"
-         name="Age__Underage_resident_outside_of_Teen_Second_Life"
-         value="33" />
-        <combo_box.item
-         label="Assault &gt; Combat sandbox / unsafe area"
-         name="Assault__Combat_sandbox___unsafe_area"
-         value="34" />
-        <combo_box.item
-         label="Assault &gt; Safe area"
+         label="Assault &gt; Shooting, pushing, or shoving another Resident in a Safe Area"
          name="Assault__Safe_area"
-         value="35" />
-        <combo_box.item
-         label="Assault &gt; Weapons testing sandbox"
-         name="Assault__Weapons_testing_sandbox"
-         value="36" />
-        <combo_box.item
-         label="Commerce &gt; Failure to deliver product or service"
-         name="Commerce__Failure_to_deliver_product_or_service"
-         value="38" />
+         value="35" />        
         <combo_box.item
          label="Disclosure &gt; Real world information"
          name="Disclosure__Real_world_information"
-         value="39" />
-        <combo_box.item
-         label="Disclosure &gt; Remotely monitoring chat"
-         name="Disclosure__Remotely_monitoring chat"
-         value="40" />
-        <combo_box.item
-         label="Disclosure &gt; Second Life information/chat/IMs"
-         name="Disclosure__Second_Life_information_chat_IMs"
-         value="41" />
-        <combo_box.item
-         label="Disturbing the peace &gt; Unfair use of region resources"
-         name="Disturbing_the_peace__Unfair_use_of_region_resources"
-         value="42" />
+         value="39" />     
         <combo_box.item
          label="Disturbing the peace &gt; Excessive scripted objects"
          name="Disturbing_the_peace__Excessive_scripted_objects"
@@ -255,51 +223,15 @@
         <combo_box.item
          label="Disturbing the peace &gt; Repetitive spam"
          name="Disturbing_the_peace__Repetitive_spam"
-         value="45" />
-        <combo_box.item
-         label="Disturbing the peace &gt; Unwanted advert spam"
-         name="Disturbing_the_peace__Unwanted_advert_spam"
-         value="46" />
-        <combo_box.item
-         label="Fraud &gt; L$"
-         name="Fraud__L$"
-         value="47" />
-        <combo_box.item
-         label="Fraud &gt; Land"
-         name="Fraud__Land"
-         value="48" />
-        <combo_box.item
-         label="Fraud &gt; Pyramid scheme or chain letter"
-         name="Fraud__Pyramid_scheme_or_chain_letter"
-         value="49" />
+         value="45" />        
         <combo_box.item
-         label="Fraud &gt; US$"
+         label="Fraud &gt; L$ or USD $"
          name="Fraud__US$"
-         value="50" />
+         value="50" />       
         <combo_box.item
-         label="Harassment &gt; Advert farms / visual spam"
-         name="Harassment__Advert_farms___visual_spam"
-         value="51" />
-        <combo_box.item
-         label="Harassment &gt; Defaming individuals or groups"
-         name="Harassment__Defaming_individuals_or_groups"
-         value="52" />
-        <combo_box.item
-         label="Harassment &gt; Impeding movement"
-         name="Harassment__Impeding_movement"
-         value="53" />
-        <combo_box.item
-         label="Harassment &gt; Sexual harassment"
-         name="Harassment__Sexual_harassment"
-         value="54" />
-        <combo_box.item
-         label="Harassment &gt; Solicting/inciting others to violate ToS"
+         label="Harassment &gt; Targeted behavior intended to disrupt"
          name="Harassment__Solicting_inciting_others_to_violate_ToS"
-         value="55" />
-        <combo_box.item
-         label="Harassment &gt; Verbal abuse"
-         name="Harassment__Verbal_abuse"
-         value="56" />
+         value="55" />       
         <combo_box.item
          label="Indecency &gt; Broadly offensive content or conduct"
          name="Indecency__Broadly_offensive_content_or_conduct"
@@ -309,49 +241,21 @@
          name="Indecency__Inappropriate_avatar_name"
          value="59" />
         <combo_box.item
-         label="Indecency &gt; Inappropriate content or conduct in a PG region"
+         label="Indecency &gt; Inappropriate content or conduct for Region Rating"
          name="Indecency__Mature_content_in_PG_region"
-         value="60" />
-        <combo_box.item
-         label="Indecency &gt; Inappropriate content or conduct in a Moderate region"
-         name="Indecency__Inappropriate_content_in_Mature_region"
-         value="69" />
-        <combo_box.item
-         label="Intellectual property infringement &gt; Content Removal"
-         name="Intellectual_property_infringement_Content_Removal"
-         value="66" />
-        <combo_box.item
-         label="Intellectual property infringement &gt; CopyBot or Permissions Exploit"
-         name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"
-         value="37" />
+         value="60" />       
         <combo_box.item
          label="Intolerance"
          name="Intolerance"
-         value="61" />
-        <combo_box.item
-         label="Land &gt; Abuse of sandbox resources"
-         name="Land__Abuse_of_sandbox_resources"
-         value="62" />
+         value="61" />        
         <combo_box.item
-         label="Land &gt; Encroachment &gt; Objects/textures"
+         label="Land &gt; Encroachment &gt; Objects or textures"
          name="Land__Encroachment__Objects_textures"
-         value="63" />
+         value="63" />        
         <combo_box.item
-         label="Land &gt; Encroachment &gt; Particles"
-         name="Land__Encroachment__Particles"
-         value="64" />
-        <combo_box.item
-         label="Land &gt; Encroachment &gt; Trees/plants"
-         name="Land__Encroachment__Trees_plants"
-         value="65" />
-        <combo_box.item
-         label="Wagering/gambling"
+         label="Wagering or Gambling"
          name="Wagering_gambling"
-         value="67" />
-        <combo_box.item
-         label="Other"
-         name="Other"
-         value="68" />
+         value="67" />       
     </combo_box>
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 8b9733df17a438b6562ddf7ad0702f34c6d9a198..3c282338752b4bdda8b3ed41897c0fc24a442352 100755
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -150,7 +150,7 @@
 	     parameter="Land" />
 	</button>
     <text
-     height="30"
+     height="20"
      word_wrap="true"
      use_ellipses="true"
      type="string"
@@ -294,24 +294,14 @@
     <check_box
      control_name="ScaleUniform"
      height="19"
-     label=""
+     label="Stretch Both Sides"
      layout="topleft"
      left="143"
      name="checkbox uniform"
      top="48"
-     width="20" />
-    <text
-     height="19"
-     label="Stretch Both Sides"
-     left_delta="20"
-     name="checkbox uniform label"
-     top_delta="2"
-     width="120"
-     layout="topleft"
-     follows="top|left"
-     wrap="true">
-     	Stretch Both Sides
-    </text>
+     label_text.wrap="true"
+     label_text.width="100"
+     width="134" />
     <check_box
      control_name="ScaleStretchTextures"
      height="19"
diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml
index 52ab7da51550113eb57baca78fa4ac8f1a3f35b9..5c98a98d3d425b613623dc33bc7364a6ae88790c 100755
--- a/indra/newview/skins/default/xui/en/menu_object.xml
+++ b/indra/newview/skins/default/xui/en/menu_object.xml
@@ -130,16 +130,23 @@
           function="Object.ReportAbuse" />
       <menu_item_call.on_enable
           function="Object.EnableReportAbuse" />
-    </menu_item_call>
+    </menu_item_call>   
     <menu_item_call
-        enabled="false"
-        label="Block"
-        name="Object Mute">
-      <menu_item_call.on_click
+   		  label="Block"        
+          name="Object Mute">
+        <menu_item_call.on_click
           function="Object.Mute" />
-      <menu_item_call.on_enable
+        <menu_item_call.on_visible
           function="Object.EnableMute" />
     </menu_item_call>
+    <menu_item_call
+          label="Unblock"   
+          name="Object Unmute">
+        <menu_item_call.on_click
+          function="Object.Mute" />
+        <menu_item_call.on_visible
+          function="Object.EnableUnmute" />
+    </menu_item_call>
     <menu_item_call
         enabled="false"
         label="Return"
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index 308acf0c0c5c7a777621d762a99557951c17b3d8..30239d6d017094608f995cfc028a686ec0fe1c53 100755
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -220,7 +220,7 @@
             <layout_stack
              border_size="0"
              clip="false"
-             follows="left|top|right"
+             follows="left|top"
              height="50"
              layout="topleft"
              mouse_opaque="false"
@@ -251,10 +251,10 @@
                 </layout_panel>
                 <layout_panel
                  follows="left|right"
-                 height="60"
+                 height="50"
                  layout="topleft"
                  min_height="50"
-                 min_width="60"
+                 min_width="50"
                  mouse_opaque="false"
                  name="for_sale_panel"
                  top="0"
@@ -264,7 +264,7 @@
                      height="50"
                      image_name="ForSale_Badge"
                      layout="topleft"
-                     left="10"
+                     left="0"
                      name="icon_for_sale"
                      top="0"
                      width="50" />
@@ -762,11 +762,19 @@
                          top_pad="5"
                          value="Rating:"
                          width="80" />
+                        <icon
+                         follows="top|left"
+                         height="16"
+                         image_name="Parcel_PG_Dark"
+                         layout="topleft"
+                         left_pad="0"
+                         name="estate_rating_icon"
+                         width="18" />
                         <text
                          follows="left|top|right"
                          height="15"
                          layout="topleft"
-                         left_pad="0"
+                         left_pad="10"
                          name="estate_rating"
                          top_delta="0"
                          width="187" />
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 78743d26bbe74593b60b4b9d8a70ff174428cc51..d7ffb73dda30be8e95420d709f193354febc22d3 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -47,7 +47,7 @@
   <check_box
       height="16"
       enabled="false"
-      label="Show me in Search results"
+      label="Show my profile info in Search results"
       layout="topleft"
       left="30"
       name="online_searchresults"
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
index c5b0be0616f78c70285898a93569d35471273ab9..26cac06648f4f9f3fa92bfc3176dc23999dea665 100755
--- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
@@ -47,7 +47,20 @@
      text_color="White"
      top="4"
      value="..."
-     width="330" />
+     width="290" />
+    <text
+     follows="right"
+     height="20"
+     layout="topleft"
+     left_pad="5"
+     right="-20"
+     parse_urls="false"
+     use_ellipses="true"
+     name="timestamp"
+     text_color="White"
+     top="4"
+     value="..."
+     width="45" />
     <button
      follows="right"
      height="20"
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
index c162130af634a48f97bab4667ff12a37ca4ac96c..fe312e35871d1ff02aada6bddd496fd8588168b2 100755
--- a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
 	<text name="cache_size_label_l">
 		(Localizaciones, imágenes, web, historial de búsqueda)
 	</text>
-	<check_box label="Mostrarme en los resultados de la búsqueda" name="online_searchresults"/>
+	<check_box label="Mostrarme información de perfil en los resultados de la búsqueda" name="online_searchresults"/>
 	<check_box label="Sólo saben si estoy conectado mis amigos y grupos" name="online_visibility"/>
 	<check_box label="Sólo pueden llamarme o mandarme un MI mis amigos y grupos" name="voice_call_friends_only_check"/>
 	<check_box label="Desconectar el micrófono cuando finalicen las llamadas" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
index cf1a374da687d0b1574de3627be352fd82c4cba7..a89676d119b6e49d468158f24bf4b2026465bac9 100755
--- a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
@@ -7,13 +7,13 @@
 	<text name="cache_size_label_l">
 		(endroits, images, web, historique des recherches)
 	</text>
-	<check_box label="M&apos;afficher dans les résultats de recherche" name="online_searchresults"/>
+	<check_box label="Afficher mon profil d&apos;infos dans les résultats de recherche" name="online_searchresults"/>
 	<check_box label="Seuls mes amis et groupes voient quand je suis en ligne" name="online_visibility"/>
 	<check_box label="Seuls mes amis et groupes peuvent m&apos;appeler ou m&apos;envoyer un IM" name="voice_call_friends_only_check"/>
 	<check_box label="Fermer le micro à la fin d&apos;un appel" name="auto_disengage_mic_check"/>
 	<check_box label="Afficher mes repères favoris à la connexion (liste déroulante Lieu de départ)" name="favorites_on_login_check"/>
 	<text name="Logs:">
-		Journaux de chat :
+		Journaux de chat :
 	</text>
 	<check_box label="Sauvegarder les chats près de moi sur mon ordinateur" name="log_nearby_chat"/>
 	<check_box label="Sauvegarder les IM sur mon ordinateur" name="log_instant_messages"/>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml
index 41e7a59139c26cda01800f19c7348ff1b1205ee6..241ed8f162ef3c530d55db903eecbdf6ce03e96e 100755
--- a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
 	<text name="cache_size_label_l">
 		(Luoghi, immagini, web, cronologia ricerche)
 	</text>
-	<check_box label="Mostrami nei risultati della ricerca" name="online_searchresults"/>
+	<check_box label="Mostra il mio profilo info nei risultati di ricerca" name="online_searchresults"/>
 	<check_box label="Solo amici e gruppi mi vedono online" name="online_visibility"/>
 	<check_box label="Solo amici e gruppi possono chiamarmi o mandarmi IM" name="voice_call_friends_only_check"/>
 	<check_box label="Spegnere il microfono alla chiusura delle chiamate" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
index 420bbed5725e08ed2b2c08b1a8f30f66d30f92ee..3787f390e434355280305f52ef0680e485a7780c 100755
--- a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
 	<text name="cache_size_label_l">
 		(位置、画像、web、検索履歴)
 	</text>
-	<check_box label="検索結果に表示" name="online_searchresults"/>
+	<check_box label="検索結果に自分のプロフィール情報を表示する" name="online_searchresults"/>
 	<check_box label="私のオンライン状態を確認できるのは、フレンドとグループだけ" name="online_visibility"/>
 	<check_box label="フレンドとグループ以外からはコールと IM を受信しない" name="voice_call_friends_only_check"/>
 	<check_box label="コールが終了したら自動的にマイクのスイッチを切る" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml
index 5af2fed1426a24585fcb99ec41d2fcb85cac7e83..30b64bc97798005f0ff2500375f5a24e788f9a28 100755
--- a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
 	<text name="cache_size_label_l">
 		(Miejsca, obrazy, przeglÄ…darka internetowa, wyszukiwarka historii)
 	</text>
-	<check_box label="Pokaż mój profil w wynikach wyszukiwarki" name="online_searchresults"/>
+	<check_box label="Pokaż mój informacje profilu w wynikach wyszukiwania" name="online_searchresults"/>
 	<check_box label="Mój status online jest dostępny tylko dla znajomych i grup do których należę" name="online_visibility"/>
 	<check_box label="Możliwość wysyłania wiadomości prywatnej (IM) oraz rozmowy głosowej tylko dla &#10;znajomych i grup do których należę" name="voice_call_friends_only_check" top_pad="15"/>
 	<check_box label="Wyłącz mikrofon po zakończeniu rozmowy głosowej" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml
index d7fb585e352e739e356a97fa04110546ad583e15..8ca05c948ab9d10eee815afdfb59facc680a16c8 100755
--- a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
 	<text name="cache_size_label_l">
 		(Locações, imagens, web, histórico de busca)
 	</text>
-	<check_box label="Mostrar nos resultados de busca" name="online_searchresults"/>
+	<check_box label="Mostrar meu perfil info em resultados de busca" name="online_searchresults"/>
 	<check_box label="Apenas amigos e grupos sabem que estou online" name="online_visibility"/>
 	<check_box label="Apenas amigos e grupos podem me chamar ou enviar MI" name="voice_call_friends_only_check"/>
 	<check_box label="Desligar o microfone quando terminar chamadas" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml
index 20bb839eedeff1832ee7e89b3eca4d9dd16963fc..ed6bed439ca36724843d5c163f7343e7e2a3a06c 100755
--- a/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
 	<text name="cache_size_label_l">
 		(Места, картинки, страницы, журнал поиска)
 	</text>
-	<check_box label="Показывать меня в результатах поиска" name="online_searchresults"/>
+	<check_box label="Показывать информацию моего профиля в результатах поиска" name="online_searchresults"/>
 	<check_box label="Только друзья и группы видят, когда я на связи" name="online_visibility"/>
 	<check_box label="Только друзья и группы могут звонить мне и отправлять IM" name="voice_call_friends_only_check"/>
 	<check_box label="Отключать микрофон по окончании разговора" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml
index 9111594979b338fe547fb776e0180476658bfe66..285670a6ac73c7b4fedf31015bc54ed5ad8881f4 100755
--- a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
 	<text name="cache_size_label_l">
 		(Konumlar, görüntüler, web, arama geçmişi)
 	</text>
-	<check_box label="Arama sonuçlarında beni göster" name="online_searchresults"/>
+	<check_box label="Arama sonuçlarında profil bilgilerini göster" name="online_searchresults"/>
 	<check_box label="Çevrimiçi olduğumu sadece arkadaşlar ve gruplar bilsin" name="online_visibility"/>
 	<check_box label="Sadece arkadaşlar ve gruplar beni arasın veya Aİ göndersin" name="voice_call_friends_only_check"/>
 	<check_box label="Aramaları sonlandırırken mikrofonu kapat" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
index 07fdfd87e3e7c29e9a614df7133fbd84347b9a2f..d768cacb94cd408dc3d27cce56977c907201d48a 100755
--- a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
 	<text name="cache_size_label_l">
 		(位置、圖像、網頁、搜尋的歷史紀錄)
 	</text>
-	<check_box label="將我顯示在搜尋的結果中" name="online_searchresults"/>
+	<check_box label="顯示在搜索結果我的個人資料信息" name="online_searchresults"/>
 	<check_box label="只有我的朋友和群組知道我上線" name="online_visibility"/>
 	<check_box label="只有我的朋友和群組可以 IM 或與我通話。" name="voice_call_friends_only_check"/>
 	<check_box label="當通話結束時關閉麥克風" name="auto_disengage_mic_check"/>