diff --git a/.hgtags b/.hgtags
index f09bb834c5166efd561aacf7b0eb64091499156f..f22f9e2d9eddfb0efb033e7304f8b7626f156118 100644
--- a/.hgtags
+++ b/.hgtags
@@ -106,5 +106,6 @@ d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1
 7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd DRTVWR-50_2.6.5-beta1
 7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd 2.6.5-beta1
 800cefce8d364ffdd2f383cbecb91294da3ea424 2.6.6-start
-ce588bc1ae8e3a90ee5e1f5de71a346886a9fd8b 2.6.7-start
+bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1
+bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1
 5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start
diff --git a/autobuild.xml b/autobuild.xml
index 53a2e59b29c6e54c6ff39a5d95ef0d76f4874d56..d72846b8fea7073e607c0f4d698cb6e2481d4cce 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -1182,9 +1182,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>57f32a1a670f06a4dc036eb1164ad9d7</string>
+              <string>e849bc2b779fb7cc5e81aeb021a542c0</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg_vorbis-1.1.3-1.2.0-darwin-20110222.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Darwin/installer/ogg_vorbis-1.2.2-1.3.2-darwin-20110510.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -1194,9 +1194,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>17c000ceef32c0623d038b4c73791bee</string>
+              <string>71eaa462eb0bf8842277a3436483a354</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg_vorbis-1.1.3-1.2.0-linux-20110307.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2-linux-20110511.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -1206,9 +1206,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>c8fccf7eeb25fd45cb7e04399c0b83ee</string>
+              <string>291dbba89dd8162b76f2c2d82e908c6f</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg_vorbis-1.1.3-1.2.0-windows-20110222.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/CYGWIN/installer/ogg_vorbis-1.2.2-1.3.2-windows-20110510.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 09fca27f43dd08f8e6ed8b9cc2fe6c1d50e5dac5..e7537b608b6ca6f16f31a2f3a3e92ae387091505 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -364,6 +364,7 @@ Ian Kas
 	CT-322
 	CT-325
 Ima Mechanique
+	OPEN-50
 	OPEN-61
 Irene Muni
 	CT-324
@@ -431,6 +432,7 @@ Jonathan Yap
 	STORM-1128
 	STORM-956
 	STORM-1095
+	STORM-1236
 Kage Pixel
 	VWR-11
 Ken March
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 223e4a438cedd6288018999349d8f3b981fda887..c987847c6627d33e6199c576769b6d7384d0344f 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -853,6 +853,11 @@ void LLBumpImageList::destroyGL()
 
 void LLBumpImageList::restoreGL()
 {
+	if(!gTextureList.isInitialized())
+	{
+		return ;
+	}
+
 	LLStandardBumpmap::restoreGL();
 	// Images will be recreated as they are needed.
 }
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 83105ef27cf7c2fe395f77c136ead52480748256..50b19a42218b36689bd31393892a1b870b37de21 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -459,10 +459,18 @@ void LLFloaterBuyLandUI::updateParcelInfo()
 			return;
 		}
 
-		if (!authorizedBuyer.isNull()  &&  buyer != authorizedBuyer)
+		if (!authorizedBuyer.isNull() && buyer != authorizedBuyer)
 		{
-			mCannotBuyReason = getString("set_to_sell_to_other");
-			return;
+			// Maybe the parcel is set for sale to a group we are in.
+			bool authorized_group =
+				gAgent.hasPowerInGroup(authorizedBuyer,GP_LAND_DEED)
+				&& gAgent.hasPowerInGroup(authorizedBuyer,GP_LAND_SET_SALE_INFO);
+
+			if (!authorized_group)
+			{
+				mCannotBuyReason = getString("set_to_sell_to_other");
+				return;
+			}
 		}
 	}
 	else
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index fc11cbc28a0fe34d35deda876cd063663039dbf5..298e789f65a4cfae4be05aec305acc1643c78b36 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -344,6 +344,11 @@ void process_layer_data(LLMessageSystem *mesgsys, void **user_data)
 {
 	LLViewerRegion *regionp = LLWorld::getInstance()->getRegion(mesgsys->getSender());
 
+	if(!regionp)
+	{
+		llwarns << "Invalid region for layer data." << llendl;
+		return;
+	}
 	S32 size;
 	S8 type;
 
@@ -2208,7 +2213,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 	name = clean_name_from_im(name, dialog);
 
 	BOOL is_busy = gAgent.getBusy();
-	BOOL is_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat);
+	BOOL is_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat)
+		// object IMs contain sender object id in session_id (STORM-1209)
+		|| dialog == IM_FROM_TASK && LLMuteList::getInstance()->isMuted(session_id);
 	BOOL is_linden = LLMuteList::getInstance()->isLinden(name);
 	BOOL is_owned_by_me = FALSE;
 	BOOL is_friend = (LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL) ? false : true;
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index e84e4a859a04df99b7130a4e0bca63aa63a9b0e8..c84a14f62c71833090d243fdcccd410004e0a0cf 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -2200,7 +2200,10 @@ bool LLViewerParcelMgr::canAgentBuyParcel(LLParcel* parcel, bool forGroup) const
 		= parcelOwner == (forGroup ? gAgent.getGroupID() : gAgent.getID());
 	
 	bool isAuthorized
-		= (authorizeBuyer.isNull() || (gAgent.getID() == authorizeBuyer));
+			= (authorizeBuyer.isNull()
+				|| (gAgent.getID() == authorizeBuyer)
+				|| (gAgent.hasPowerInGroup(authorizeBuyer,GP_LAND_DEED)
+					&& gAgent.hasPowerInGroup(authorizeBuyer,GP_LAND_SET_SALE_INFO)));
 	
 	return isForSale && !isOwner && isAuthorized  && isEmpowered;
 }
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 8cf9b98d5d78eee4f11c4d8bee625c32a818e265..33e7328cd7396be534c84640e3929667d0119579 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -76,18 +76,23 @@ LLStat LLViewerTextureList::sFormattedMemStat(32, TRUE);
 LLViewerTextureList gTextureList;
 static LLFastTimer::DeclareTimer FTM_PROCESS_IMAGES("Process Images");
 
+U32 LLViewerTextureList::sRenderThreadID = 0 ;
 ///////////////////////////////////////////////////////////////////////////////
 
 LLViewerTextureList::LLViewerTextureList() 
 	: mForceResetTextureStats(FALSE),
 	mUpdateStats(FALSE),
 	mMaxResidentTexMemInMegaBytes(0),
-	mMaxTotalTextureMemInMegaBytes(0)
+	mMaxTotalTextureMemInMegaBytes(0),
+	mInitialized(FALSE)
 {
 }
 
 void LLViewerTextureList::init()
 {
+	sRenderThreadID = LLThread::currentID() ;
+
+	mInitialized = TRUE ;
 	sNumImages = 0;
 	mMaxResidentTexMemInMegaBytes = 0;
 	mMaxTotalTextureMemInMegaBytes = 0 ;
@@ -105,6 +110,10 @@ void LLViewerTextureList::doPreloadImages()
 {
 	LL_DEBUGS("ViewerImages") << "Preloading images..." << LL_ENDL;
 	
+	llassert_always(mInitialized) ;
+	llassert_always(mImageList.empty()) ;
+	llassert_always(mUUIDMap.empty()) ;
+
 	// Set the "missing asset" image
 	LLViewerFetchedTexture::sMissingAssetImagep = LLViewerTextureManager::getFetchedTextureFromFile("missing_asset.tga", MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI);
 	
@@ -300,6 +309,7 @@ void LLViewerTextureList::destroyGL(BOOL save_state)
 
 void LLViewerTextureList::restoreGL()
 {
+	llassert_always(mInitialized) ;
 	LLImageGL::restoreGL();
 }
 
@@ -477,8 +487,10 @@ LLViewerFetchedTexture *LLViewerTextureList::findImage(const LLUUID &image_id)
 	return iter->second;
 }
 
-void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image)
+void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image, U32 thread_id)
 {
+	llassert_always(mInitialized) ;
+	llassert_always(sRenderThreadID == thread_id);
 	llassert(image);
 	if (image->isInImageList())
 	{
@@ -492,8 +504,10 @@ void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image)
 	image->setInImageList(TRUE) ;
 }
 
-void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image)
+void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image, U32 thread_id)
 {
+	llassert_always(mInitialized) ;
+	llassert_always(sRenderThreadID == thread_id);
 	llassert(image);
 	if (!image->isInImageList())
 	{
@@ -690,9 +704,9 @@ void LLViewerTextureList::updateImagesDecodePriorities()
 			if ((decode_priority_test < old_priority_test * .8f) ||
 				(decode_priority_test > old_priority_test * 1.25f))
 			{
-				removeImageFromList(imagep);
+				removeImageFromList(imagep, sRenderThreadID);
 				imagep->setDecodePriority(decode_priority);
-				addImageToList(imagep);
+				addImageToList(imagep, sRenderThreadID);
 			}
 			update_counter--;
 		}
@@ -769,9 +783,8 @@ void LLViewerTextureList::forceImmediateUpdate(LLViewerFetchedTexture* imagep)
 	imagep->processTextureStats();
 	F32 decode_priority = LLViewerFetchedTexture::maxDecodePriority() ;
 	imagep->setDecodePriority(decode_priority);
-	mImageList.insert(imagep);
-	imagep->setInImageList(TRUE) ;
-
+	addImageToList(imagep);
+	
 	return ;
 }
 
@@ -864,7 +877,9 @@ void LLViewerTextureList::updateImagesUpdateStats()
 void LLViewerTextureList::decodeAllImages(F32 max_time)
 {
 	LLTimer timer;
-	
+
+	llassert_always(sRenderThreadID == LLThread::currentID());
+
 	// Update texture stats and priorities
 	std::vector<LLPointer<LLViewerFetchedTexture> > image_list;
 	for (image_priority_list_t::iterator iter = mImageList.begin();
@@ -882,8 +897,7 @@ void LLViewerTextureList::decodeAllImages(F32 max_time)
 		imagep->processTextureStats();
 		F32 decode_priority = imagep->calcDecodePriority();
 		imagep->setDecodePriority(decode_priority);
-		mImageList.insert(imagep);
-		imagep->setInImageList(TRUE) ;
+		addImageToList(imagep);
 	}
 	image_list.clear();
 	
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index d508ce1ac6cbddec15f6ddc3d8932e90bef8475d..27aab0c08191209fe2431fbc0b4ea3db522f5a04 100644
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -83,6 +83,7 @@ class LLViewerTextureList
 	void dump();
 	void destroyGL(BOOL save_state = TRUE);
 	void restoreGL();
+	BOOL isInitialized() const {return mInitialized;}
 
 	LLViewerFetchedTexture *findImage(const LLUUID &image_id);
 
@@ -120,8 +121,8 @@ class LLViewerTextureList
 	void addImage(LLViewerFetchedTexture *image);
 	void deleteImage(LLViewerFetchedTexture *image);
 
-	void addImageToList(LLViewerFetchedTexture *image);
-	void removeImageFromList(LLViewerFetchedTexture *image);
+	void addImageToList(LLViewerFetchedTexture *image, U32 thread_id = LLThread::currentID());
+	void removeImageFromList(LLViewerFetchedTexture *image, U32 thread_id = LLThread::currentID());
 
 	LLViewerFetchedTexture * getImage(const LLUUID &image_id,									 
 									 BOOL usemipmap = TRUE,
@@ -187,6 +188,7 @@ class LLViewerTextureList
 	// simply holds on to LLViewerFetchedTexture references to stop them from being purged too soon
 	std::set<LLPointer<LLViewerFetchedTexture> > mImagePreloads;
 
+	BOOL mInitialized ;
 	BOOL mUpdateStats;
 	S32	mMaxResidentTexMemInMegaBytes;
 	S32 mMaxTotalTextureMemInMegaBytes;
@@ -206,6 +208,9 @@ class LLViewerTextureList
 private:
 	static S32 sNumImages;
 	static void (*sUUIDCallback)(void**, const LLUUID &);
+
+	//debug use
+	static U32 sRenderThreadID;
 };
 
 class LLUIImageList : public LLImageProviderInterface, public LLSingleton<LLUIImageList>
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 857932e51a105838419e1edbf9211defcffbe33e..e413228ddc50cc9ef26411e55519ce413854a485 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -11,7 +11,7 @@
  save_rect="true"
  save_visibility="true"
  title="SNAPSHOT PREVIEW"
- width="215">
+ width="245">
     <floater.string
      name="unknown">
         unknown
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index c64d492612c29f0a7cd4569419dfc228a3c8e86a..06614dd218cc6a03a38d73224872e31b58563a72 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6815,6 +6815,34 @@ Deed to group failed.
   <tag>fail</tag>
   </notification>
 
+  <notification
+   icon="notifytip.tga"
+   name="ReleaseLandThrottled"
+   type="notifytip">
+The parcel [PARCEL_NAME] can not be abandoned at this time.
+   tag>fail</tag>
+  </notification>
+	
+  <notification
+   icon="notifytip.tga"
+   name="ReleasedLandWithReclaim"
+   type="notifytip">
+The [AREA] m² parcel &apos;[PARCEL_NAME]&apos; has been released.
+
+You will have [RECLAIM_PERIOD] hours to reclaim for L$0 before it is set for sale to anyone.
+   <tag>fail</tag>
+  </notification>
+	
+  <notification
+   icon="notifytip.tga"
+   name="ReleasedLandNoReclaim"
+   type="notifytip">
+The [AREA] m² parcel &apos;[PARCEL_NAME]&apos; has been released.
+
+It is now available for purchase by anyone.
+   <tag>fail</tag>
+  </notification>
+
   <notification
    icon="notifytip.tga"
    name="AvatarRezNotification"
diff --git a/indra/newview/skins/minimal/xui/en/main_view.xml b/indra/newview/skins/minimal/xui/en/main_view.xml
index ac5bae2f3b2bf71a4a3cceb8164f274df4711b20..6e8ad9adaff83a94c45cea5300231af839f20350 100644
--- a/indra/newview/skins/minimal/xui/en/main_view.xml
+++ b/indra/newview/skins/minimal/xui/en/main_view.xml
@@ -8,6 +8,13 @@
  tab_stop="false" 
  name="main_view"
  width="1024">
+              <panel top="0"
+               follows="all"
+               height="768"
+               mouse_opaque="false"
+               name="login_panel_holder"
+               width="1024"/>
+
   <layout_stack border_size="0"
                 follows="all"
                 mouse_opaque="false"
@@ -90,13 +97,6 @@
                      visible="false"
                      width="500"/>
               
-              <panel top="0"
-               follows="all"
-               height="500"
-               mouse_opaque="false"
-               name="login_panel_holder"
-               width="1024"/>
-
               <panel follows="all"
 										 height="500"
 										 left="0"