diff --git a/indra/llui/lliconctrl.cpp b/indra/llui/lliconctrl.cpp
index 0330a2b374c44498f6d6f253ad4ec482678fde26..66c2ba682fc474b115c511c31c87ed0bd5ede5c5 100644
--- a/indra/llui/lliconctrl.cpp
+++ b/indra/llui/lliconctrl.cpp
@@ -56,7 +56,8 @@ LLIconCtrl::Params::Params()
 LLIconCtrl::LLIconCtrl(const LLIconCtrl::Params& p)
 :	LLUICtrl(p),
 	mColor(p.color()),
-	mImagep(p.image)
+	mImagep(p.image),
+	mPriority(0)
 {
 	if (mImagep.notNull())
 	{
@@ -93,11 +94,11 @@ void LLIconCtrl::setValue(const LLSD& value )
 	LLUICtrl::setValue(tvalue);
 	if (tvalue.isUUID())
 	{
-		mImagep = LLUI::getUIImageByID(tvalue.asUUID());
+		mImagep = LLUI::getUIImageByID(tvalue.asUUID(), mPriority);
 	}
 	else
 	{
-		mImagep = LLUI::getUIImage(tvalue.asString());
+		mImagep = LLUI::getUIImage(tvalue.asString(), mPriority);
 	}
 }
 
diff --git a/indra/llui/lliconctrl.h b/indra/llui/lliconctrl.h
index ff25b0d53eabe113c79928c24b3a3133e6483123..90f1693060475846f53eb0526a9390cf6f64a0e4 100644
--- a/indra/llui/lliconctrl.h
+++ b/indra/llui/lliconctrl.h
@@ -72,10 +72,13 @@ class LLIconCtrl
 	std::string	getImageName() const;
 
 	void			setColor(const LLColor4& color) { mColor = color; }
+	
+protected:
+	S32 mPriority;
 
 private:
 	LLUIColor mColor;
-	LLPointer<LLUIImage>	mImagep;
+	LLPointer<LLUIImage> mImagep;
 };
 
 #endif
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index da9384f8769389ee747691e8eac35963763665e2..48504a1e5400ddf8d1395a253c7b68240aa477b9 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -1807,11 +1807,11 @@ void LLUI::glRectToScreen(const LLRect& gl, LLRect *screen)
 }
 
 //static
-LLPointer<LLUIImage> LLUI::getUIImageByID(const LLUUID& image_id)
+LLPointer<LLUIImage> LLUI::getUIImageByID(const LLUUID& image_id, S32 priority)
 {
 	if (sImageProvider)
 	{
-		return sImageProvider->getUIImageByID(image_id);
+		return sImageProvider->getUIImageByID(image_id, priority);
 	}
 	else
 	{
@@ -1820,10 +1820,10 @@ LLPointer<LLUIImage> LLUI::getUIImageByID(const LLUUID& image_id)
 }
 
 //static 
-LLPointer<LLUIImage> LLUI::getUIImage(const std::string& name)
+LLPointer<LLUIImage> LLUI::getUIImage(const std::string& name, S32 priority)
 {
 	if (!name.empty() && sImageProvider)
-		return sImageProvider->getUIImage(name);
+		return sImageProvider->getUIImage(name, priority);
 	else
 		return NULL;
 }
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index 6ab78ab3cd906535967fc7b107533045d0646e6f..efb1b0a36f4676f78db39ec94244212a1fa5c6da 100644
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -195,8 +195,8 @@ class LLUI
 	static void getMousePositionLocal(const LLView* viewp, S32 *x, S32 *y);
 	static void setScaleFactor(const LLVector2& scale_factor);
 	static void setLineWidth(F32 width);
-	static LLPointer<LLUIImage> getUIImageByID(const LLUUID& image_id);
-	static LLPointer<LLUIImage> getUIImage(const std::string& name);
+	static LLPointer<LLUIImage> getUIImageByID(const LLUUID& image_id, S32 priority = 0);
+	static LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority = 0);
 	static LLVector2 getWindowSize();
 	static void screenPointToGL(S32 screen_x, S32 screen_y, S32 *gl_x, S32 *gl_y);
 	static void glPointToScreen(S32 gl_x, S32 gl_y, S32 *screen_x, S32 *screen_y);
@@ -241,8 +241,8 @@ class LLImageProviderInterface
 	LLImageProviderInterface() {};
 	virtual ~LLImageProviderInterface() {};
 public:
-	virtual LLPointer<LLUIImage> getUIImage(const std::string& name) = 0;
-	virtual LLPointer<LLUIImage> getUIImageByID(const LLUUID& id) = 0;
+	virtual LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority) = 0;
+	virtual LLPointer<LLUIImage> getUIImageByID(const LLUUID& id, S32 priority) = 0;
 	virtual void cleanUp() = 0;
 };
 
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index 7ae1b5cd4a75647f082dd2e4ecb142a42da9f9cf..ebcda13dd495310df29805b485192122db4f353c 100644
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -152,6 +152,8 @@ LLAvatarIconCtrl::LLAvatarIconCtrl(const LLAvatarIconCtrl::Params& p)
 :	LLIconCtrl(p),
 	mDrawTooltip(p.draw_tooltip)
 {
+	mPriority = LLViewerFetchedTexture::BOOST_ICON;
+	
 	LLRect rect = p.rect;
 
 	static LLUICachedControl<S32> llavatariconctrl_symbol_hpad("UIAvatariconctrlSymbolHPad", 2);
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 488d71aa70a27237988009319126108ef32709e3..bdf9842b015ec8288cf50389062d7476d5626533 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -1054,9 +1054,9 @@ BOOL LLPanelLandObjects::postBuild()
 	mBtnReturnOwnerList = getChild<LLButton>("Return objects...");
 	mBtnReturnOwnerList->setClickedCallback(onClickReturnOwnerList, this);
 
-	mIconAvatarOnline = LLUIImageList::getInstance()->getUIImage("icon_avatar_online.tga");
-	mIconAvatarOffline = LLUIImageList::getInstance()->getUIImage("icon_avatar_offline.tga");
-	mIconGroup = LLUIImageList::getInstance()->getUIImage("icon_group.tga");
+	mIconAvatarOnline = LLUIImageList::getInstance()->getUIImage("icon_avatar_online.tga", 0);
+	mIconAvatarOffline = LLUIImageList::getInstance()->getUIImage("icon_avatar_offline.tga", 0);
+	mIconGroup = LLUIImageList::getInstance()->getUIImage("icon_group.tga", 0);
 
 	mOwnerList = getChild<LLNameListCtrl>("owner list");
 	mOwnerList->sortByColumnIndex(3, FALSE);
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 22c3779050aff5f0549784cf9090bb28a7c1c5d9..a11ee05532fe8e920607409696d943de7861e618 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -334,14 +334,19 @@ LLSideTrayTab* LLSideTray::getTab(const std::string& name)
 }
 
 
-void LLSideTray::toggleTabButton	(LLSideTrayTab* tab)
+void LLSideTray::toggleTabButton(LLSideTrayTab* tab)
 {
 	if(tab == NULL)
 		return;
-	string name = tab->getName();
-	std::map<std::string,LLButton*>::iterator tIt = mTabButtons.find(name);
-	if(tIt!=mTabButtons.end())
-		tIt->second->setToggleState(!tIt->second->getToggleState());
+	std::string name = tab->getName();
+	std::map<std::string,LLButton*>::iterator it = mTabButtons.find(name);
+	if(it != mTabButtons.end())
+	{
+		LLButton* btn = it->second;
+		bool new_state = !btn->getToggleState();
+		btn->setToggleState(new_state); 
+		btn->setImageOverlay( new_state ? tab->mImageSelected : tab->mImage );
+	}
 }
 
 bool LLSideTray::selectTabByIndex(size_t index)
@@ -349,9 +354,7 @@ bool LLSideTray::selectTabByIndex(size_t index)
 	if(index>=mTabs.size())
 		return false;
 
-	LLSideTrayTab* sidebar_tab = dynamic_cast<LLSideTrayTab*>(mTabs[index]);
-	if(sidebar_tab == NULL)
-		return false;
+	LLSideTrayTab* sidebar_tab = mTabs[index];
 	return selectTabByName(sidebar_tab->getName());
 }
 
@@ -380,9 +383,7 @@ bool LLSideTray::selectTabByName	(const std::string& name)
 	child_vector_const_iter_t child_it;
 	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
 	{
-		LLSideTrayTab* sidebar_tab = dynamic_cast<LLSideTrayTab*>(*child_it);
-		if(sidebar_tab == NULL)
-			continue;
+		LLSideTrayTab* sidebar_tab = *child_it;
 		sidebar_tab->setVisible(sidebar_tab  == mActiveTab);
 	}
 	return true;
@@ -439,9 +440,7 @@ void	LLSideTray::createButtons	()
 	child_vector_const_iter_t child_it = mTabs.begin();
 	for ( ; child_it != mTabs.end(); ++child_it)
 	{
-		LLSideTrayTab* sidebar_tab = dynamic_cast<LLSideTrayTab*>(*child_it);
-		if(sidebar_tab == NULL)
-			continue;
+		LLSideTrayTab* sidebar_tab = *child_it;
 
 		std::string name = sidebar_tab->getName();
 		
@@ -527,9 +526,7 @@ void LLSideTray::arrange			()
 	int offset = (sidetray_params.default_button_height+sidetray_params.default_button_margin)*2;
 	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)	
 	{
-		LLSideTrayTab* sidebar_tab = dynamic_cast<LLSideTrayTab*>(*child_it);
-		if(sidebar_tab == NULL)
-			continue;
+		LLSideTrayTab* sidebar_tab = *child_it;
 		
 		ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-offset
 								,sidetray_params.default_button_width
@@ -552,10 +549,7 @@ void LLSideTray::arrange			()
 	//arrange tabs
 	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
 	{
-		LLSideTrayTab* sidebar_tab = dynamic_cast<LLSideTrayTab*>(*child_it);
-		if(sidebar_tab == NULL)
-			continue;
-		
+		LLSideTrayTab* sidebar_tab = *child_it;
 		sidebar_tab->setRect(ctrl_rect);
 		sidebar_tab->arrange(mMaxBarWidth,getRect().getHeight());
 	}
@@ -564,6 +558,23 @@ void LLSideTray::arrange			()
 void LLSideTray::collapseSideBar()
 {
 	mCollapsed = true;
+	// Reset all overlay images, because there is no "selected" tab when the
+	// whole side tray is hidden.
+	child_vector_const_iter_t it = mTabs.begin();
+	for ( ; it != mTabs.end(); ++it )
+	{
+		LLSideTrayTab* tab = *it;
+		std::string name = tab->getName();
+		std::map<std::string,LLButton*>::const_iterator btn_it =
+			mTabButtons.find(name);
+		if (btn_it != mTabButtons.end())
+		{
+			LLButton* btn = btn_it->second;
+			btn->setImageOverlay( tab->mImage );
+		}
+	}
+		
+	// Home tab doesn't put its button in mTabButtons
 	LLSideTrayTab* home_tab = getTab("sidebar_home");
 	if (home_tab)
 	{
@@ -643,9 +654,7 @@ void LLSideTray::reshape			(S32 width, S32 height, BOOL called_from_parent)
 	int offset = (sidetray_params.default_button_height+sidetray_params.default_button_margin)*2;
 	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)	
 	{
-		LLSideTrayTab* sidebar_tab = dynamic_cast<LLSideTrayTab*>(*child_it);
-		if(sidebar_tab == NULL)
-			continue;
+		LLSideTrayTab* sidebar_tab = *child_it;
 		
 		ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-offset
 								,sidetray_params.default_button_width
@@ -667,9 +676,7 @@ void LLSideTray::reshape			(S32 width, S32 height, BOOL called_from_parent)
 	
 	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
 	{
-		LLSideTrayTab* sidebar_tab = dynamic_cast<LLSideTrayTab*>(*child_it);
-		if(sidebar_tab == NULL)
-			continue;
+		LLSideTrayTab* sidebar_tab = *child_it;
 		sidebar_tab->reshape(mMaxBarWidth,getRect().getHeight());
 		ctrl_rect.setLeftTopAndSize(sidetray_params.default_button_width,getRect().getHeight(),mMaxBarWidth,getRect().getHeight());
 		sidebar_tab->setRect(ctrl_rect);
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 845eb86bc13ce6f7b80f81f05cf19774522be0e5..b49251ec79b5535435d3311eedc8a71c4ec9a9b1 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -69,7 +69,7 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 	static bool			instanceCreated	();
 protected:
 	LLSideTray(Params& params);
-	typedef std::vector<LLView*> child_vector_t;
+	typedef std::vector<LLSideTrayTab*> child_vector_t;
 	typedef child_vector_t::iterator					child_vector_iter_t;
 	typedef child_vector_t::const_iterator  			child_vector_const_iter_t;
 	typedef child_vector_t::reverse_iterator 			child_vector_reverse_iter_t;
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 95459a7116b5021b7a89d31f1c9ad9c6d873e61a..e5c53c91c90b03feff444d15dee23a9337dffedf 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -191,25 +191,25 @@ LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const U32 wid
 LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTexture(
 	                                               const LLUUID &image_id,											       
 												   BOOL usemipmaps,
-												   BOOL level_immediate,
+												   S32 boost_priority,
 												   S8 texture_type,
 												   LLGLint internal_format,
 												   LLGLenum primary_format,
 												   LLHost request_from_host)
 {
-	return gTextureList.getImage(image_id, usemipmaps, level_immediate, texture_type, internal_format, primary_format, request_from_host) ;
+	return gTextureList.getImage(image_id, usemipmaps, boost_priority, texture_type, internal_format, primary_format, request_from_host) ;
 }
 	
 LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromFile(
 	                                               const std::string& filename,												   
 												   BOOL usemipmaps,
-												   BOOL level_immediate,
+												   S32 boost_priority,
 												   S8 texture_type,
 												   LLGLint internal_format,
 												   LLGLenum primary_format, 
 												   const LLUUID& force_id)
 {
-	return gTextureList.getImageFromFile(filename, usemipmaps, level_immediate, texture_type, internal_format, primary_format, force_id) ;
+	return gTextureList.getImageFromFile(filename, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id) ;
 }
 
 LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromHost(const LLUUID& image_id, LLHost host) 
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 596bfea670b33b91fa42b5dfdc31dc9c259e009f..480e1c1cbcc2d38bd429210f6e0fea26a85063ca 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -118,10 +118,10 @@ class LLViewerTexture : public LLTexture
 		BOOST_SELECTED		= 12,
 		BOOST_HUD			= 13,
 		BOOST_AVATAR_BAKED_SELF	= 14,
-		BOOST_UI			= 15,
-		BOOST_PREVIEW		= 16,
-		BOOST_MAP			= 17,
-		BOOST_MAP_LAYER		= 18,
+		BOOST_ICON			= 15,
+		BOOST_UI			= 16,
+		BOOST_PREVIEW		= 17,
+		BOOST_MAP			= 18,
 		BOOST_AVATAR_SELF	= 19, // needed for baking avatar
 		BOOST_MAX_LEVEL
 	};
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 4ad4c8e1ea1dc8dd1f41dce300f98f14c50a0e8a..b5986c70f589069618e7adede346fcaf5aeba637 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -111,10 +111,10 @@ void LLViewerTextureList::doPreloadImages()
 	LL_DEBUGS("ViewerImages") << "Preloading images..." << LL_ENDL;
 	
 	// Set the "missing asset" image
-	LLViewerFetchedTexture::sMissingAssetImagep = LLViewerTextureManager::getFetchedTextureFromFile("missing_asset.tga", MIPMAP_NO, IMMEDIATE_YES);
+	LLViewerFetchedTexture::sMissingAssetImagep = LLViewerTextureManager::getFetchedTextureFromFile("missing_asset.tga", MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI);
 	
 	// Set the "white" image
-	LLViewerFetchedTexture::sWhiteImagep = LLViewerTextureManager::getFetchedTextureFromFile("white.tga", MIPMAP_NO, IMMEDIATE_YES);
+	LLViewerFetchedTexture::sWhiteImagep = LLViewerTextureManager::getFetchedTextureFromFile("white.tga", MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI);
 	
 	LLUIImageList* image_list = LLUIImageList::getInstance();
 
@@ -131,31 +131,31 @@ void LLViewerTextureList::doPreloadImages()
 	// prefetch specific UUIDs
 	LLViewerTextureManager::getFetchedTexture(IMG_SHOT, TRUE);
 	LLViewerTextureManager::getFetchedTexture(IMG_SMOKE_POOF, TRUE);
-	LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", MIPMAP_YES, IMMEDIATE_YES);
+	LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI);
 	if (image) 
 	{
 		image->setAddressMode(LLTexUnit::TAM_WRAP);
 		mImagePreloads.insert(image);
 	}
-	image = LLViewerTextureManager::getFetchedTextureFromFile("world/NoEntryLines.png", MIPMAP_YES, IMMEDIATE_YES);
+	image = LLViewerTextureManager::getFetchedTextureFromFile("world/NoEntryLines.png", MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI);
 	if (image) 
 	{
 		image->setAddressMode(LLTexUnit::TAM_WRAP);	
 		mImagePreloads.insert(image);
 	}
-	image = LLViewerTextureManager::getFetchedTextureFromFile("world/NoEntryPassLines.png", MIPMAP_YES, IMMEDIATE_YES);
+	image = LLViewerTextureManager::getFetchedTextureFromFile("world/NoEntryPassLines.png", MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI);
 	if (image) 
 	{
 		image->setAddressMode(LLTexUnit::TAM_WRAP);
 		mImagePreloads.insert(image);
 	}
-	image = LLViewerTextureManager::getFetchedTexture(DEFAULT_WATER_NORMAL, MIPMAP_YES, IMMEDIATE_YES);
+	image = LLViewerTextureManager::getFetchedTexture(DEFAULT_WATER_NORMAL, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI);
 	if (image) 
 	{
 		image->setAddressMode(LLTexUnit::TAM_WRAP);	
 		mImagePreloads.insert(image);
 	}
-	image = LLViewerTextureManager::getFetchedTextureFromFile("transparent.j2c", MIPMAP_YES, IMMEDIATE_YES, LLViewerTexture::FETCHED_TEXTURE,
+	image = LLViewerTextureManager::getFetchedTextureFromFile("transparent.j2c", MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
 		0,0,LLUUID("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"));
 	if (image) 
 	{
@@ -315,7 +315,7 @@ void LLViewerTextureList::restoreGL()
 
 LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string& filename,												   
 												   BOOL usemipmaps,
-												   BOOL level_immediate,
+												   S32 boost_priority,
 												   S8 texture_type,
 												   LLGLint internal_format,
 												   LLGLenum primary_format, 
@@ -369,10 +369,14 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&
 
 		addImage(imagep);
 		
-		if (level_immediate)
+		if (boost_priority != 0)
 		{
-			imagep->dontDiscard();
-			imagep->setBoostLevel(LLViewerFetchedTexture::BOOST_UI);
+			if (boost_priority == LLViewerFetchedTexture::BOOST_UI ||
+				boost_priority == LLViewerFetchedTexture::BOOST_ICON)
+			{
+				imagep->dontDiscard();
+			}
+			imagep->setBoostLevel(boost_priority);
 		}
 	}
 
@@ -384,7 +388,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&
 
 LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,											       
 												   BOOL usemipmaps,
-												   BOOL level_immediate,
+												   S32 boost_priority,
 												   S8 texture_type,
 												   LLGLint internal_format,
 												   LLGLenum primary_format,
@@ -403,7 +407,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
 	
 	if (imagep.isNull())
 	{
-		imagep = createImage(image_id, usemipmaps, level_immediate, texture_type, internal_format, primary_format, request_from_host) ;
+		imagep = createImage(image_id, usemipmaps, boost_priority, texture_type, internal_format, primary_format, request_from_host) ;
 	}
 
 	imagep->setGLTextureCreated(true);
@@ -414,7 +418,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
 //when this function is called, there is no such texture in the gTextureList with image_id.
 LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,											       
 												   BOOL usemipmaps,
-												   BOOL level_immediate,
+												   S32 boost_priority,
 												   S8 texture_type,
 												   LLGLint internal_format,
 												   LLGLenum primary_format,
@@ -443,16 +447,20 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,
 	
 	addImage(imagep);
 	
-	if (level_immediate)
+	if (boost_priority != 0)
 	{
-		imagep->dontDiscard();
-		imagep->setBoostLevel(LLViewerFetchedTexture::BOOST_UI);
+		if (boost_priority == LLViewerFetchedTexture::BOOST_UI ||
+			boost_priority == LLViewerFetchedTexture::BOOST_ICON)
+		{
+			imagep->dontDiscard();
+		}
+		imagep->setBoostLevel(boost_priority);
 	}
 	else
 	{
 		//by default, the texure can not be removed from memory even if it is not used.
 		//here turn this off
-		//if this texture should be set to NO_DELETE, either pass level_immediate == TRUE here, or call setNoDelete() afterwards.
+		//if this texture should be set to NO_DELETE, call setNoDelete() afterwards.
 		imagep->forceActive() ;
 	}
 
@@ -1286,7 +1294,7 @@ void LLUIImageList::cleanUp()
 	mUITextureList.clear() ;
 }
 
-LLUIImagePtr LLUIImageList::getUIImageByID(const LLUUID& image_id)
+LLUIImagePtr LLUIImageList::getUIImageByID(const LLUUID& image_id, S32 priority)
 {
 	// use id as image name
 	std::string image_name = image_id.asString();
@@ -1298,10 +1306,12 @@ LLUIImagePtr LLUIImageList::getUIImageByID(const LLUUID& image_id)
 		return found_it->second;
 	}
 
-	return loadUIImageByID(image_id);
+	const BOOL use_mips = FALSE;
+	const LLRect scale_rect = LLRect::null;
+	return loadUIImageByID(image_id, use_mips, scale_rect, priority);
 }
 
-LLUIImagePtr LLUIImageList::getUIImage(const std::string& image_name)
+LLUIImagePtr LLUIImageList::getUIImage(const std::string& image_name, S32 priority)
 {
 	// look for existing image
 	uuid_ui_image_map_t::iterator found_it = mUIImages.find(image_name);
@@ -1310,18 +1320,24 @@ LLUIImagePtr LLUIImageList::getUIImage(const std::string& image_name)
 		return found_it->second;
 	}
 
-	return loadUIImageByName(image_name, image_name);
+	const BOOL use_mips = FALSE;
+	const LLRect scale_rect = LLRect::null;
+	return loadUIImageByName(image_name, image_name, use_mips, scale_rect, priority);
 }
 
-LLUIImagePtr LLUIImageList::loadUIImageByName(const std::string& name, const std::string& filename, BOOL use_mips, const LLRect& scale_rect)
+LLUIImagePtr LLUIImageList::loadUIImageByName(const std::string& name, const std::string& filename,
+											  BOOL use_mips, const LLRect& scale_rect, S32 boost_priority )
 {
-	LLViewerFetchedTexture* imagep = LLViewerTextureManager::getFetchedTextureFromFile(filename, MIPMAP_NO, IMMEDIATE_YES);
+	if (boost_priority == 0) boost_priority = LLViewerFetchedTexture::BOOST_UI;
+	LLViewerFetchedTexture* imagep = LLViewerTextureManager::getFetchedTextureFromFile(filename, MIPMAP_NO, boost_priority);
 	return loadUIImage(imagep, name, use_mips, scale_rect);
 }
 
-LLUIImagePtr LLUIImageList::loadUIImageByID(const LLUUID& id, BOOL use_mips, const LLRect& scale_rect)
+LLUIImagePtr LLUIImageList::loadUIImageByID(const LLUUID& id,
+											BOOL use_mips, const LLRect& scale_rect, S32 boost_priority)
 {
-	LLViewerFetchedTexture* imagep = LLViewerTextureManager::getFetchedTexture(id, MIPMAP_NO, IMMEDIATE_YES);
+	if (boost_priority == 0) boost_priority = LLViewerFetchedTexture::BOOST_UI;
+	LLViewerFetchedTexture* imagep = LLViewerTextureManager::getFetchedTexture(id, MIPMAP_NO, boost_priority);
 	return loadUIImage(imagep, id.asString(), use_mips, scale_rect);
 }
 
@@ -1332,11 +1348,11 @@ LLUIImagePtr LLUIImageList::loadUIImage(LLViewerFetchedTexture* imagep, const st
 	imagep->setAddressMode(LLTexUnit::TAM_CLAMP);
 
 	//all UI images are non-deletable
-	imagep->setNoDelete() ;
+	imagep->setNoDelete();
 
 	LLUIImagePtr new_imagep = new LLUIImage(name, imagep);
 	mUIImages.insert(std::make_pair(name, new_imagep));
-	mUITextureList.push_back(imagep) ;
+	mUITextureList.push_back(imagep);
 
 	LLUIImageLoadData* datap = new LLUIImageLoadData;
 	datap->mImageName = name;
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index 11d1dd855fab40ae2be32bc7ce6e7fff8b6c62da..fda57ce981bd5fe6e3bf90684bc31c955660b9b9 100644
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -202,8 +202,8 @@ class LLUIImageList : public LLImageProviderInterface, public LLSingleton<LLUIIm
 {
 public:
 	// LLImageProviderInterface
-	LLUIImagePtr getUIImageByID(const LLUUID& id);
-	LLUIImagePtr getUIImage(const std::string& name);
+	/*virtual*/ LLUIImagePtr getUIImageByID(const LLUUID& id, S32 priority);
+	/*virtual*/ LLUIImagePtr getUIImage(const std::string& name, S32 priority);
 	void cleanUp();
 
 	bool initFromFile();
@@ -212,8 +212,10 @@ class LLUIImageList : public LLImageProviderInterface, public LLSingleton<LLUIIm
 	
 	static void onUIImageLoaded( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata );
 private:
-	LLUIImagePtr loadUIImageByName(const std::string& name, const std::string& filename, BOOL use_mips = FALSE, const LLRect& scale_rect = LLRect::null);
-	LLUIImagePtr loadUIImageByID(const LLUUID& id, BOOL use_mips = FALSE, const LLRect& scale_rect = LLRect::null);
+	LLUIImagePtr loadUIImageByName(const std::string& name, const std::string& filename,
+								   BOOL use_mips = FALSE, const LLRect& scale_rect = LLRect::null, S32 boost_priority = 0);
+	LLUIImagePtr loadUIImageByID(const LLUUID& id,
+								 BOOL use_mips = FALSE, const LLRect& scale_rect = LLRect::null, S32 boost_priority = 0);
 
 	LLUIImagePtr loadUIImage(LLViewerFetchedTexture* imagep, const std::string& name, BOOL use_mips = FALSE, const LLRect& scale_rect = LLRect::null);
 
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 3aad5c7378b7ee322cf56e8fdbe177366a0d5514..823db027eeb872e0a1f9f3927200c37b4910e3a8 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -368,7 +368,7 @@ void LLWorldMapView::draw()
 			continue;
 		}
 		
-		current_image->setBoostLevel(LLViewerTexture::BOOST_MAP_LAYER);
+		current_image->setBoostLevel(LLViewerTexture::BOOST_MAP);
 		current_image->setKnownDrawSize(llround(pix_width * LLUI::sGLScaleFactor.mV[VX]), llround(pix_height * LLUI::sGLScaleFactor.mV[VY]));
 		
 		if (!current_image->hasGLTexture())
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index a32be90a33c639cabbd631364764fcbddc4d78e8..73a759a8ba5f3aaedea9b7882564f10d18ff6e7c 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -53,7 +53,7 @@
          left="10"
          name="second_life_image_panel"
          top="0"
-         width="290">
+         width="280">
             <texture_picker
              allow_no_texture="true"
              default_image_name="None"
@@ -75,13 +75,14 @@
              text_color="white"
              top_delta="0"
              value="[SECOND_LIFE]:"
-             width="170" />
+             width="165" />
             <expandable_text
              follows="left|top|right"
              height="95"
              layout="topleft"
              left="107"
              name="sl_description_edit"
+             top_pad="-3"
              width="173"
              expanded_bg_visible="true"
              expanded_bg_color="DkGray">
@@ -95,7 +96,7 @@
 	 top_pad="10"
          left="10"
          name="first_life_image_panel"
-         width="290">
+         width="280">
             <texture_picker
              allow_no_texture="true"
              default_image_name="None"
@@ -116,13 +117,14 @@
              text_color="white"
              top_delta="0"
              value="Real World:"
-             width="173" />
+             width="165" />
             <expandable_text
              follows="left|top|right"
              height="95"
              layout="topleft"
              left="107"
              name="fl_description_edit"
+             top_pad="-3"
              width="173"
              expanded_bg_visible="true"
              expanded_bg_color="DkGray">
@@ -151,7 +153,7 @@
          name="homepage_edit"
          top_pad="0"
          value="http://librarianavengers.org"
-         width="290"
+         width="280"
          word_wrap="false"
          use_elipsis="true"
          />
@@ -205,7 +207,7 @@
          name="acc_status_text"
          top_pad="0"
          value="Resident. No payment info on file."
-         width="295"
+         width="280"
          word_wrap="true" />
         <text
          follows="left|top"
@@ -215,7 +217,7 @@
          left="10"
          name="title_partner_text"
          text_color="white"
-         top_pad="10"
+         top_pad="5"
          value="Partner:"
          width="280" />
         <panel
@@ -245,21 +247,21 @@
          left="10"
          name="title_groups_text"
          text_color="white"
-         top_pad="10"
+         top_pad="8"
          value="Groups:"
          width="280" />
-        <text
+                     <expandable_text
          follows="left|top|bottom"
-         height="160"
+         height="60"
          layout="topleft"
          left="10"
-         name="sl_groups"
-         top_pad="0"
-         width="290"
-         word_wrap="true"
-         use_elipsis="true">
+             name="sl_groups"
+       top_pad="0"
+         width="280"
+             expanded_bg_visible="true"
+             expanded_bg_color="DkGray">
             Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
-        </text>
+        </expandable_text>
       </panel>
  </scroll_container>
  <panel
@@ -270,17 +272,17 @@
      top_pad="2"
      bottom="10"
      height="19"
-     width="313">
+     width="303">
         <button
          follows="bottom|left"
          height="19"
-         label="Add"
+         label="Add Friend"
          layout="topleft"
          left="0"
          mouse_opaque="false"
          name="add_friend"
          top="5"
-         width="55" />
+         width="75" />
         <button
          follows="bottom|left"
          height="19"
@@ -289,7 +291,7 @@
          name="im"
          top="5"
          left_pad="5"
-         width="40" />
+         width="45" />
         <button
          enabled="false"
          follows="bottom|left"
@@ -299,7 +301,7 @@
          name="call"
          left_pad="5"
          top="5"
-         width="55" />
+         width="45" />
         <button
          enabled="false"
          follows="bottom|left"
@@ -309,7 +311,7 @@
          name="show_on_map_btn"
          top="5"
          left_pad="5"
-         width="50" />
+         width="45" />
         <button
          follows="bottom|left"
          height="19"
@@ -318,7 +320,7 @@
          name="teleport"
          left_pad="5"
          top="5"
-         width="90" />
+         width="80" />
  </panel>
  <panel
      follows="bottom|left"
@@ -328,7 +330,7 @@
      name="profile_me_buttons_panel"
      visible="false"
      height="19"
-     width="313">
+     width="303">
         <button
          follows="bottom|right"
          font="SansSerifSmall"
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 8a48574440a1e9fe61e425e8232aac324e01f040..7a5781651d87d3969d9f3ffa2e4d0db78652114f 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -52,8 +52,9 @@
      height="535"
      layout="topleft"
      left="10"
+ min_width="333"
      name="tabs"
-     tab_min_width="95"
+     tab_min_width="80"
      tab_height="30"
      tab_position="top"
      top_pad="10"
@@ -61,21 +62,21 @@
         <panel
          class="panel_profile"
          filename="panel_profile.xml"
-         label="Profile"
+         label="PROFILE"
          layout="topleft"
          help_topic="profile_profile_tab"
          name="panel_profile" />
         <panel
          class="panel_picks"
          filename="panel_picks.xml"
-         label="Picks"
+         label="PICKS"
          layout="topleft"
          help_topic="profile_picks_tab"
          name="panel_picks" />
         <panel
          class="panel_notes"
          filename="panel_notes.xml"
-         label="Notes &amp; Privacy"
+         label="NOTES &amp; PRIVACY"
          layout="topleft"
          help_topic="profile_notes_tab"
          name="panel_notes" />
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml
index 6abcbc40d2d3c0376a428af4bb5fb5bfe8d65e4c..3f64c9c633f4ff4e714e9337f6a84abd1616698d 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml
@@ -35,6 +35,7 @@
     tab_title="People"
     description="Find your friends, contacts and people nearby."
     image="TabIcon_People_Off"
+    image_selected="TabIcon_People_Selected"
     mouse_opaque="false"
     background_visible="true"
   >
@@ -77,6 +78,7 @@
     label="Places"
     description="Find places to go and places you&apos;ve visited before."
     image="TabIcon_Places_Off"
+	image_selected="TabIcon_Places_Selected"
     mouse_opaque="false"
     background_visible="true"
   >
@@ -95,6 +97,7 @@
     tab_title="Me"
     description="Edit your public profile and Picks."
     image="TabIcon_Me_Off"
+    image_selected="TabIcon_Me_Selected"
     mouse_opaque="false"
     background_visible="true"
   >
@@ -112,6 +115,7 @@
     tab_title="Appearance"
     description="Change your appearance and current look."
     image="TabIcon_Appearance_Off"
+    image_selected="TabIcon_Appearance_Selected"
     mouse_opaque="false"
     background_visible="true"
   >