diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h
index b5d7f8adc830c2e3e632281edbecc5adcfa15b9f..2fde728eaf244003b371789795b2e02cdcf18d95 100644
--- a/indra/llcommon/llfasttimer.h
+++ b/indra/llcommon/llfasttimer.h
@@ -28,7 +28,11 @@ class LLFastTimer
 		FTM_IDLE,
 		FTM_SLEEP,
 
-		// common simulate components
+		// common messaging components
+		FTM_PUMP,
+		FTM_CURL,
+		
+		// common simulation components
 		FTM_UPDATE_ANIMATION,
 		FTM_UPDATE_TERRAIN,
 		FTM_UPDATE_PRIMITIVES,
diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp
index d4c08ca377ea1cde4ca912ff866d72f930ec9ad9..32a8c60facbbb6127d040f4b2f13ce6865ecbd35 100644
--- a/indra/llimage/llimagej2c.cpp
+++ b/indra/llimage/llimagej2c.cpp
@@ -224,7 +224,7 @@ BOOL LLImageJ2C::decode(LLImageRaw *raw_imagep, F32 decode_time, S32 first_chann
 	// Update the raw discard level
 	updateRawDiscardLevel();
 
-	return mImpl->decodeImpl(*this, *raw_imagep, decode_time, 0, 4);
+	return mImpl->decodeImpl(*this, *raw_imagep, decode_time, first_channel, max_channel_count);
 }
 
 
diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp
index 0c5bd1eaea7202649575aca6077f1b7a9da975d6..5abc63fad0d128bc40dbb8f5eebf1e201895460b 100644
--- a/indra/llmessage/llpumpio.cpp
+++ b/indra/llmessage/llpumpio.cpp
@@ -316,6 +316,7 @@ bool LLPumpIO::copyCurrentLinkInfo(links_t& links) const
 void LLPumpIO::pump()
 {
 	LLMemType m1(LLMemType::MTYPE_IO_PUMP);
+	LLFastTimer t1(LLFastTimer::FTM_PUMP);
 	//llinfos << "LLPumpIO::pump()" << llendl;
 
 	// Run any pending runners.
diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp
index 0d784d2d9fcb7ead583ca77afa485f3f71ad7149..df9c0149d48dc48a73e72d42adc25d727e628fd4 100644
--- a/indra/llmessage/llurlrequest.cpp
+++ b/indra/llmessage/llurlrequest.cpp
@@ -251,6 +251,7 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
 		S32 queue;
 		do
 		{
+			LLFastTimer t2(LLFastTimer::FTM_CURL);
 			code = curl_multi_perform(mDetail->mCurlMulti, &queue);			
 		}while((CURLM_CALL_MULTI_PERFORM == code) && (queue > 0) && count--);
 		CURLMsg* curl_msg;
diff --git a/indra/llwindow/llkeyboard.cpp b/indra/llwindow/llkeyboard.cpp
index a0970f01402930be5b862b643554d029d111c9b6..31db4cabf2ab65321cfa839f0e7a5f9c30ad54b1 100644
--- a/indra/llwindow/llkeyboard.cpp
+++ b/indra/llwindow/llkeyboard.cpp
@@ -138,7 +138,6 @@ void LLKeyboard::resetKeys()
 		if( mKeyLevel[i] )
 		{
 			mKeyLevel[i] = FALSE;
-			mKeyLevelFrameCount[i] = 0;
 		}
 	}
 
diff --git a/indra/llwindow/llkeyboardwin32.cpp b/indra/llwindow/llkeyboardwin32.cpp
index fe553a8230e867d8c39d759ef0c4ca9b1ef1750b..b168c1aed8b571072f3059ad28e644fddce14928 100644
--- a/indra/llwindow/llkeyboardwin32.cpp
+++ b/indra/llwindow/llkeyboardwin32.cpp
@@ -247,7 +247,6 @@ void LLKeyboardWin32::scanKeyboard()
 				{
 					//llinfos << "Key up event missed, resetting" << llendl;
 					mKeyLevel[key] = FALSE;
-					mKeyLevelFrameCount[key] = 0;
 				}
 			}
 		}
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index c8c1d0d8789ec885dfd0d54c83a808aabfb6e24a..57f786053a4dfe92326835da7b99e164645564ba 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -52,19 +52,21 @@ static LLColor4 green9(0.6f, 1.0f, 0.6f, 1.0f);
 // red (5) magenta (4)
 static struct ft_display_info ft_display_table[] =
 {
-	{ LLFastTimer::FTM_FRAME,				"Frame",			&LLColor4::white, 0 },
-	{ LLFastTimer::FTM_MESSAGES,			" Messages",		&LLColor4::grey1, 0 },
-	{ LLFastTimer::FTM_SLEEP,				" Sleep",			&LLColor4::grey2, 0 },
-	{ LLFastTimer::FTM_IDLE,				" Idle",			&blue0, 0 },
-	{ LLFastTimer::FTM_INVENTORY,			"  Inventory Update",			&LLColor4::purple6, 1 },
-	{ LLFastTimer::FTM_AUTO_SELECT,			"   Open and Select",		&LLColor4::red, 0 },
+	{ LLFastTimer::FTM_FRAME,				"Frame",				&LLColor4::white, 0 },
+	{ LLFastTimer::FTM_MESSAGES,			" Messages",			&LLColor4::grey1, 0 },
+	{ LLFastTimer::FTM_SLEEP,				" Sleep",				&LLColor4::grey2, 0 },
+	{ LLFastTimer::FTM_IDLE,				" Idle",				&blue0, 0 },
+	{ LLFastTimer::FTM_PUMP,				"  Pump",				&LLColor4::magenta2, 1 },
+	{ LLFastTimer::FTM_CURL,				"   Curl",				&LLColor4::magenta3, 0 },
+	{ LLFastTimer::FTM_INVENTORY,			"  Inventory Update",	&LLColor4::purple6, 1 },
+	{ LLFastTimer::FTM_AUTO_SELECT,			"   Open and Select",	&LLColor4::red, 0 },
 	{ LLFastTimer::FTM_FILTER,				"   Filter",			&LLColor4::red2, 0 },
 	{ LLFastTimer::FTM_ARRANGE,				"   Arrange",			&LLColor4::red3, 0 },
 	{ LLFastTimer::FTM_REFRESH,				"   Refresh",			&LLColor4::red4, 0 },
 	{ LLFastTimer::FTM_SORT,				"   Sort",				&LLColor4::red5, 0 },
-	{ LLFastTimer::FTM_RESET_DRAWORDER,		"  ResetDrawOrder",	&LLColor4::pink1, 0 },
-	{ LLFastTimer::FTM_WORLD_UPDATE,		"  World Update",	&LLColor4::blue1, 1 },
-	{ LLFastTimer::FTM_UPDATE_MOVE,			"   Move Objects",	&LLColor4::pink2, 0 },
+	{ LLFastTimer::FTM_RESET_DRAWORDER,		"  ResetDrawOrder",		&LLColor4::pink1, 0 },
+	{ LLFastTimer::FTM_WORLD_UPDATE,		"  World Update",		&LLColor4::blue1, 1 },
+	{ LLFastTimer::FTM_UPDATE_MOVE,			"   Move Objects",		&LLColor4::pink2, 0 },
 	{ LLFastTimer::FTM_OCTREE_BALANCE,		"    Octree Balance",	&LLColor4::red3, 0 },
 	{ LLFastTimer::FTM_CULL,				"   Object Cull",	&LLColor4::blue2, 0 },
 	{ LLFastTimer::FTM_CULL_REBOUND,		"    Rebound",		&LLColor4::blue3, 0 },
@@ -262,6 +264,13 @@ BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask)
 			}
 		}
 	}
+	else if (mask & MASK_ALT)
+	{
+		if (mask & MASK_SHIFT)
+			mSubtractHidden = !mSubtractHidden;
+		else
+			mDisplayCalls = !mDisplayCalls;
+	}
 	else if (mask & MASK_SHIFT)
 	{
 		if (++mDisplayMode > 3)
@@ -282,8 +291,8 @@ BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask)
 			mScrollIndex = 0;
 		}
 	}
-	// RN: for now, pass all mouse events through
-	return FALSE;
+	// SJB: Don't pass mouse clicks through the display
+	return TRUE;
 }
 
 BOOL LLFastTimerView::handleMouseUp(S32 x, S32 y, MASK mask)
@@ -340,33 +349,6 @@ BOOL LLFastTimerView::handleScrollWheel(S32 x, S32 y, S32 clicks)
 	return FALSE;
 }
 
-BOOL LLFastTimerView::handleKey(KEY key, MASK mask, BOOL called_from_parent)
-{
-	// Otherwise space key gets eaten from the rest of the UI. JC
-	if (getVisible())
-	{
-		switch (key)
-		{
-		  case '=':
-			mDisplayCalls = !mDisplayCalls;
-			return TRUE;
-		  case '-':
-			mSubtractHidden = !mSubtractHidden;
-			return TRUE;
-		  case ' ':
-			// pause/unpause
-			LLFastTimer::sPauseHistory = !LLFastTimer::sPauseHistory;
-			// reset scroll to bottom when unpausing
-			if (!LLFastTimer::sPauseHistory)
-			{
-				mScrollIndex = 0;
-			}
-			return TRUE;
-		}
-	}
-	return FALSE;
-}
-
 void LLFastTimerView::draw()
 {
 	LLFastTimer t(LLFastTimer::FTM_RENDER_TIMER);
@@ -461,7 +443,7 @@ void LLFastTimerView::draw()
 		LLFontGL::sMonospace->renderUTF8(tdesc, 0, x, y, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP);
 		y -= (texth + 2);
 
-		LLFontGL::sMonospace->renderUTF8("[Right-click to log selected] [= to toggle counts] [- to subtract hidden]",
+		LLFontGL::sMonospace->renderUTF8("[Right-Click log selected] [ALT-Click toggle counts] [ALT-SHIFT-Click sub hidden]",
 										 0, x, y, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP);
 		y -= (texth + 2);
 	}
@@ -547,7 +529,7 @@ void LLFastTimerView::draw()
 		}
 		else
 		{
-			U64 ticks = disabled >= 1 ? ticks_sum[0][i] : LLFastTimer::sCountAverage[tidx];
+			U64 ticks = ticks_sum[0][i];
 			ms = (F32)((F64)ticks * iclock_freq);
 			calls = (S32)LLFastTimer::sCallAverage[tidx];
 		}
diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h
index ea83c38a846486d55c28de7aa8fb25ffd98ee457..eb30f60f3d58ab72b6a765ead86ce788e4fa2263 100644
--- a/indra/newview/llfasttimerview.h
+++ b/indra/newview/llfasttimerview.h
@@ -26,7 +26,6 @@ class LLFastTimerView : public LLView
 	virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
 	virtual BOOL handleHover(S32 x, S32 y, MASK mask);
 	virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
-	virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent);
 	virtual void draw();
 
 	S32 getLegendIndex(S32 y);
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index be816deebc459f8a450585fa42280e9261817dfd..a31fd7d5b24029df8a5cfa503938c6a448f829ad 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -281,12 +281,7 @@ BOOL LLFeatureManager::loadFeatureTables()
 	return TRUE;
 }
 
-S32 LLFeatureManager::getGPUClass()
-{
-	return mGPUClass;
-}
-
-S32 LLFeatureManager::loadGPUClass()
+void LLFeatureManager::loadGPUClass()
 {
 	std::string data_path = gDirUtilp->getAppRODataDir();
 
@@ -294,6 +289,10 @@ S32 LLFeatureManager::loadGPUClass()
 
 	data_path += GPU_TABLE_FILENAME;
 
+	// defaults
+	mGPUClass = 0;
+	mGPUString = gGLManager.getRawGLString();
+	
 	llifstream file;
 		
 	file.open(data_path.c_str()); 
@@ -301,7 +300,7 @@ S32 LLFeatureManager::loadGPUClass()
 	if (!file)
 	{
 		llwarns << "Unable to open GPU table: " << data_path << "!" << llendl;
-		return 0;
+		return;
 	}
 
 	std::string renderer = gGLManager.getRawGLString();
@@ -360,14 +359,14 @@ S32 LLFeatureManager::loadGPUClass()
 		{
 			file.close();
 			llinfos << "GPU is " << label << llendl;
-			return (S32) strtol(cls, NULL, 10);	
+			mGPUString = label;
+			mGPUClass = (S32) strtol(cls, NULL, 10);	
 		}
 	}
 	file.close();
 	//flp->dump();
 
 	llwarns << "Couldn't match GPU to a class: " << gGLManager.getRawGLString() << llendl;
-	return 0;
 }
 
 void LLFeatureManager::cleanupFeatureTables()
@@ -400,7 +399,7 @@ void LLFeatureManager::initCPUFeatureMasks()
 
 void LLFeatureManager::initGraphicsFeatureMasks()
 {
-	mGPUClass = loadGPUClass();
+	loadGPUClass();
 	
 	if (mGPUClass >= 0 && mGPUClass < 4)
 	{
diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h
index 98f9317b0108a773aaee9d1df247a84de7aa7d70..fe37cd7638f9df5d63defa6139ccffa7c5829821 100644
--- a/indra/newview/llfeaturemanager.h
+++ b/indra/newview/llfeaturemanager.h
@@ -65,9 +65,10 @@ class LLFeatureManager : public LLFeatureList
 	void maskCurrentList(const char *name); // Mask the current feature list with the named list
 
 	BOOL loadFeatureTables();
-	S32	getGPUClass();
-	S32	loadGPUClass();
 
+	S32	getGPUClass() 					{ return mGPUClass; }
+	std::string& getGPUString() 		{ return mGPUString; }
+	
 	void cleanupFeatureTables();
 
 	S32 getVersion() const				{ return mTableVersion; }
@@ -83,7 +84,9 @@ class LLFeatureManager : public LLFeatureList
 	BOOL initPCIFeatureMasks();
 
 	void applyRecommendedFeatures();
+
 protected:
+	void loadGPUClass();
 	void initBaseMask();
 
 	std::map<LLString, LLFeatureList *> mMaskList;
@@ -91,6 +94,7 @@ class LLFeatureManager : public LLFeatureList
 	S32			mTableVersion;
 	BOOL		mSafe;					// Reinitialize everything to the "safe" mask
 	S32			mGPUClass;
+	std::string	mGPUString;
 };
 
 extern LLFeatureManager *gFeatureManagerp;
diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp
index 4f821a7978b3c387e6c0c080f829c1c20e00f64f..5e105ac7e20be29d2eb9e4ce06d247a5b6f40a78 100644
--- a/indra/newview/llflexibleobject.cpp
+++ b/indra/newview/llflexibleobject.cpp
@@ -185,9 +185,13 @@ void LLVolumeImplFlexible::setAttributesOfAllSections()
 		end_rot = F_PI * params.getTwist();
 	}
 
+	if (!mVO->mDrawable)
+	{
+		return;
+	}
+	
 	S32 num_sections = 1 << mSimulateRes;
 
-
 	LLVector3 scale = mVO->mDrawable->getScale();
 									
 	mSection[0].mPosition = getAnchorPosition();
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 6897e49dd91f3a5ad977b8c52e23cc63ee70ee67..3b4c7c2f59e8896a5b684be7dfee3b3d48df23b8 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -95,6 +95,7 @@ LLFloaterLand* LLFloaterLand::sInstance = NULL;
 LLParcelSelectionObserver* LLFloaterLand::sObserver = NULL;
 S32 LLFloaterLand::sLastTab = 0;
 BOOL LLFloaterLand::sRequestReplyOnUpdate = TRUE;
+LLViewHandle LLPanelLandGeneral::sBuyPassDialogHandle;
 
 // Local classes
 class LLParcelSelectionObserver : public LLParcelObserver
@@ -943,7 +944,7 @@ void LLPanelLandGeneral::onClickBuyPass(void* deselect_when_done)
 	args["[PARCEL_NAME]"] = parcel_name;
 	args["[TIME]"] = time;
 	
-	gViewerWindow->alertXml("LandBuyPass", args, cbBuyPass, deselect_when_done);
+	sBuyPassDialogHandle = gViewerWindow->alertXml("LandBuyPass", args, cbBuyPass, deselect_when_done)->getHandle();
 }
 
 // static
@@ -980,6 +981,11 @@ void LLPanelLandGeneral::cbBuyPass(S32 option, void* data)
 	}
 }
 
+//static 
+BOOL LLPanelLandGeneral::buyPassDialogVisible()
+{
+	return LLFloater::getFloaterByHandle(sBuyPassDialogHandle) != NULL;
+}
 
 // static
 void LLPanelLandGeneral::onCommitAny(LLUICtrl *ctrl, void *userdata)
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index 72f1e8ca8d7d555c787f951739d0d244b454db3b..a28fea261f882b621983a143ceeb344649ebb3b4 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -130,6 +130,7 @@ class LLPanelLandGeneral
 	static void onSalePriceChange(LLUICtrl *ctrl, void * userdata);
 
 	static void cbBuyPass(S32 option, void*);
+	static BOOL buyPassDialogVisible();
 
 	static void onClickSellLand(void* data);
 	static void onClickStopSellLand(void* data);
@@ -196,6 +197,8 @@ class LLPanelLandGeneral
 
 	LLButton*		mBtnBuyPass;
 	LLButton* mBtnStartAuction;
+
+	static LLViewHandle sBuyPassDialogHandle;
 };
 
 class LLPanelLandObjects
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 11665f484a43f2bdff12b254d2c5176e3cf88ebb..c9a28ab361ed984d6d9b15ca087c022a3a6fa1b2 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -364,8 +364,7 @@ LLFloaterTools::LLFloaterTools()
 	mPanelLandInfo(NULL),
 
 	mTabLand(NULL),
-	mDirty(TRUE),
-	mLastTool(gToolNull)
+	mDirty(TRUE)
 {
 	mAutoFocus = FALSE;
 	LLCallbackMap::map_t factory_map;
@@ -930,21 +929,13 @@ void LLFloaterTools::onClickGridOptions(void* data)
 	//floaterp->addDependentFloater(LLFloaterBuildOptions::getInstance(), FALSE);
 }
 
-void LLFloaterTools::saveLastTool()
-{
-	mLastTool = gToolMgr->getCurrentTool( MASK_NONE );
-}
-
 void LLFloaterTools::setEditTool(void* tool_pointer)
 {
 	select_tool(tool_pointer);
-	if(gFloaterTools && tool_pointer != gToolNull)
-	{
-		gFloaterTools->saveLastTool();
-	}
 }
 
 void LLFloaterTools::onFocusReceived()
 {
-	select_tool(mLastTool);
+	gCurrentToolset = gBasicToolset;
+	gCurrentToolset->selectTool(gCurrentToolset->getSelectedTool());
 }
\ No newline at end of file
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
index c1bb050c2c1968f4882112bf153bd2c5a5490caa..e13e15ba015907f7fd6c0399a6414a0537b611ff 100644
--- a/indra/newview/llfloatertools.h
+++ b/indra/newview/llfloatertools.h
@@ -156,7 +156,6 @@ class LLFloaterTools
 	LLPanelLandInfo			*mPanelLandInfo;
 
 	LLTabContainer*			mTabLand;
-	LLTool*					mLastTool;
 	
 private:
 	BOOL					mDirty;
diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp
index 57d34f672bf9cbe7b4250acc6a70c411430a720a..74c7ae6c18beb24b2256f394feac0e1e3ddfc74b 100644
--- a/indra/newview/llmanip.cpp
+++ b/indra/newview/llmanip.cpp
@@ -88,9 +88,7 @@ void LLManip::getManipNormal(LLViewerObject* object, EManipPart manip, LLVector3
 		LLVector3 arrow_axis;
 		getManipAxis(object, manip, arrow_axis);
 
-		LLVector3 origin_dir = grid_origin - gCamera->getOrigin();
-		origin_dir.normVec();
-		LLVector3 cross = arrow_axis % origin_dir;
+		LLVector3 cross = arrow_axis % gCamera->getAtAxis();
 		normal = cross % arrow_axis;
 		normal.normVec();
 	}
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 2119bf2d706df1bc0164d05e710058179d945002..eda759cc2c70ab27c07694ebb376d5802717bdad 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -666,7 +666,7 @@ BOOL idle_startup()
 		gSavedSettings.loadFromFile(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,"overrides.xml"));
 
 		// handle the per account settings setup
-		strcpy(gPerAccountSettingsFileName, gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, DEFAULT_SETTINGS_FILE).c_str());
+		gPerAccountSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, DEFAULT_SETTINGS_FILE);
 
 		// per account settings.  Set defaults here if not found.  If we get a bunch of these, eventually move to a function.
 		gSavedPerAccountSettings.loadFromFile(gPerAccountSettingsFileName);
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index c0de0c872a827abe261c79fe904bac6577a4c552..ea2680215273ab27a90f0b3b7dc9c01fe512ca3c 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -38,8 +38,8 @@ LLControlGroup gCrashSettings;	// saved at end of session
 LLString gLastRunVersion;
 LLString gCurrentVersion;
 
-char gSettingsFileName[LL_MAX_PATH];
-char gPerAccountSettingsFileName[LL_MAX_PATH] = "";
+LLString gSettingsFileName;
+LLString gPerAccountSettingsFileName;
 
 LLFloaterSettingsDebug::LLFloaterSettingsDebug() : LLFloater("Configuration Editor")
 {
diff --git a/indra/newview/llviewercontrol.h b/indra/newview/llviewercontrol.h
index a6692df7fbaf30bdc96eac0afc4e3b3ec5771368..e86f961b3a7464b2916ea8e5e375614b451ef9bc 100644
--- a/indra/newview/llviewercontrol.h
+++ b/indra/newview/llviewercontrol.h
@@ -53,8 +53,7 @@ extern LLControlGroup gCrashSettings;
 extern LLString gLastRunVersion;
 extern LLString gCurrentVersion;
 
-extern char gSettingsFileName[LL_MAX_PATH];
-extern char gPerAccountSettingsFileName[LL_MAX_PATH];
-extern const char *DEFAULT_SETTINGS_FILE;
+extern LLString gSettingsFileName;
+extern LLString gPerAccountSettingsFileName;
 
 #endif // LL_LLVIEWERCONTROL_H
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index e3d462bb3b7de2743b23c84384d7f5d0aeb3d0f5..a3cfe734ff2747369d385331af33691cdd3cb35f 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -2484,7 +2484,7 @@ void LLViewerParcelMgr::buyPass()
 //Tells whether we are allowed to buy a pass or not
 BOOL LLViewerParcelMgr::isCollisionBanned()	
 { 
-	if ((mCollisionBanned == BA_ALLOWED) || (mCollisionBanned == BA_NOT_ON_LIST))
+	if ((mCollisionBanned == BA_ALLOWED) || (mCollisionBanned == BA_NOT_ON_LIST) || (mCollisionBanned == BA_NOT_IN_GROUP))
 		return FALSE;
 	else 
 		return TRUE;
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index bb490959c79b14e984c97d8d712a374140affb8b..baf241697b8607842fe37861dbd8d7a8e0f0b271 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -38,8 +38,8 @@ class StatAttributes
 
 const StatAttributes STAT_INFO[LLViewerStats::ST_COUNT] =
 {
-	// ST_MOUSELOOK_SECONDS
-	StatAttributes("Seconds in Mouselook", FALSE, TRUE),
+	// ST_VERSION
+	StatAttributes("Version", TRUE, FALSE),
 	// ST_AVATAR_EDIT_SECONDS
 	StatAttributes("Seconds in Edit Appearence", FALSE, TRUE),
 	// ST_TOOLBOX_SECONDS
@@ -58,10 +58,10 @@ const StatAttributes STAT_INFO[LLViewerStats::ST_COUNT] =
 	StatAttributes("Object rez count", FALSE, FALSE),
 	// ST_FPS_10_SECONDS
 	StatAttributes("Seconds below 10 FPS", FALSE, TRUE),
-	// ST_FPS_5_SECONDS
-	StatAttributes("Seconds below 5 FPS", FALSE, TRUE),
 	// ST_FPS_2_SECONDS
 	StatAttributes("Seconds below 2 FPS", FALSE, TRUE),
+	// ST_MOUSELOOK_SECONDS
+	StatAttributes("Seconds in Mouselook", FALSE, TRUE),
 	// ST_FLY_COUNT
 	StatAttributes("Fly count", FALSE, FALSE),
 	// ST_TELEPORT_COUNT
@@ -229,10 +229,6 @@ void LLViewerStats::updateFrameStats(const F64 time_diff)
 	{
 		incStat(LLViewerStats::ST_FPS_2_SECONDS, time_diff);
 	}
-	if (time_diff >= 0.2)
-	{
-		incStat(LLViewerStats::ST_FPS_5_SECONDS, time_diff);
-	}
 	if (time_diff >= 0.125)
 	{
 		incStat(LLViewerStats::ST_FPS_8_SECONDS, time_diff);
diff --git a/indra/newview/llviewerstats.h b/indra/newview/llviewerstats.h
index b58012d01c9a3837fcd155e307060123041c959c..055b21d116925e5632cb38f221b199d123867c14 100644
--- a/indra/newview/llviewerstats.h
+++ b/indra/newview/llviewerstats.h
@@ -79,7 +79,7 @@ class LLViewerStats
 	// in statTypeToText in llviewerstats.cpp
 	enum EStatType
 	{
-		ST_MOUSELOOK_SECONDS = 0,
+		ST_VERSION = 0,
 		ST_AVATAR_EDIT_SECONDS = 1,
 		ST_TOOLBOX_SECONDS = 2,
 		ST_CHAT_COUNT = 3,
@@ -89,8 +89,8 @@ class LLViewerStats
 		ST_CREATE_COUNT = 7,
 		ST_REZ_COUNT = 8,
 		ST_FPS_10_SECONDS = 9,
-		ST_FPS_5_SECONDS = 10,
-		ST_FPS_2_SECONDS = 11,
+		ST_FPS_2_SECONDS = 10,
+		ST_MOUSELOOK_SECONDS = 11,
 		ST_FLY_COUNT = 12,
 		ST_TELEPORT_COUNT = 13,
 		ST_OBJECT_DELETE_COUNT = 14,
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index dc00fe7585b38811b76320aa2162e184b98e80d8..77c6794dfe6bdce2176631d76f5f5f2a5cb19932 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -349,6 +349,12 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window,  LLCoordGL pos, MASK mask
 		llinfos << "ViewerWindow left mouse down at " << x << "," << y << llendl;
 	}
 
+	if (gMenuBarView)
+	{
+		// stop ALT-key access to menu
+		gMenuBarView->resetMenuTrigger();
+	}
+
 	mLeftMouseDown = TRUE;
 
 	// Make sure we get a coresponding mouseup event, even if the mouse leaves the window
@@ -617,6 +623,12 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window,  LLCoordGL pos, MASK
 		llinfos << "ViewerWindow right mouse down at " << x << "," << y << llendl;
 	}
 
+	if (gMenuBarView)
+	{
+		// stop ALT-key access to menu
+		gMenuBarView->resetMenuTrigger();
+	}
+
 	mRightMouseDown = TRUE;
 
 	// Make sure we get a coresponding mouseup event, even if the mouse leaves the window
@@ -2514,7 +2526,7 @@ BOOL LLViewerWindow::handlePerFrameHover()
 		}
 	}		
 
-	if (tool != gToolNull  && tool != gToolInspect && tool != gToolCamera && tool != gToolDragAndDrop && !gSavedSettings.getBOOL("FreezeTime"))
+	if (tool != gToolNull  && tool != gToolInspect && tool != gToolDragAndDrop && !gSavedSettings.getBOOL("FreezeTime"))
 	{ 
 		LLMouseHandler *captor = gFocusMgr.getMouseCapture();
 		// With the null, inspect, or drag and drop tool, don't muck
@@ -2679,6 +2691,7 @@ BOOL LLViewerWindow::handlePerFrameHover()
 		&& !gMenuHolder->hasVisibleMenu()
 		&& !LLFloaterLand::floaterVisible()
 		&& !LLFloaterBuyLand::isOpen()
+		&& !LLPanelLandGeneral::buyPassDialogVisible()
 		&& (!gFloaterTools || !gFloaterTools->getVisible()))
 	{
 		gParcelMgr->deselectLand();