diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index a55915af359ac77e973b74d4cdb5d9fe26b25180..342c0684dad750b228e21c81eccd0d12d88ce9df 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -2373,13 +2373,16 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out
 			new_width = llmax(new_width, min_width);
 			new_height = llmax(new_height, min_height);
 
-			LLRect new_rect;
-			new_rect.setLeftTopAndSize(view_rect.mLeft,view_rect.mTop,new_width, new_height);
-
 			floater->reshape( new_width, new_height, TRUE );
-			floater->setRect(new_rect);
+			if (floater->followsRight())
+			{
+				floater->translate(old_width - new_width, 0);
+			}
 
-			floater->translateIntoRect( getLocalRect(), false );
+			if (floater->followsTop())
+			{
+				floater->translate(0, old_height - new_height);
+			}
 		}
 	}
 
diff --git a/indra/llui/llresizehandle.cpp b/indra/llui/llresizehandle.cpp
index 367666efbd159ac3596cdb9eddac5eec1c2260f9..00214d451cd0590c0623a303021d041cfcd1a7aa 100644
--- a/indra/llui/llresizehandle.cpp
+++ b/indra/llui/llresizehandle.cpp
@@ -124,7 +124,7 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
 	{
 		// Make sure the mouse in still over the application.  We don't want to make the parent
 		// so big that we can't see the resize handle any more.
-
+	
 		S32 screen_x;
 		S32 screen_y;
 		localPointToScreen(x, y, &screen_x, &screen_y);
@@ -147,61 +147,68 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
 			LLRect scaled_rect = orig_rect;
 			S32 delta_x = screen_x - mDragLastScreenX;
 			S32 delta_y = screen_y - mDragLastScreenY;
-
-			if(delta_x == 0 && delta_y == 0)
-				return FALSE;
-
 			LLCoordGL mouse_dir;
 			// use hysteresis on mouse motion to preserve user intent when mouse stops moving
 			mouse_dir.mX = (screen_x == mLastMouseScreenX) ? mLastMouseDir.mX : screen_x - mLastMouseScreenX;
 			mouse_dir.mY = (screen_y == mLastMouseScreenY) ? mLastMouseDir.mY : screen_y - mLastMouseScreenY;
-			
 			mLastMouseScreenX = screen_x;
 			mLastMouseScreenY = screen_y;
 			mLastMouseDir = mouse_dir;
 
-			S32 new_width = orig_rect.getWidth();
-			S32 new_height = orig_rect.getHeight();
+			S32 x_multiple = 1;
+			S32 y_multiple = 1;
+			switch( mCorner )
+			{
+			case LEFT_TOP:
+				x_multiple = -1; 
+				y_multiple =  1;	
+				break;
+			case LEFT_BOTTOM:	
+				x_multiple = -1; 
+				y_multiple = -1;	
+				break;
+			case RIGHT_TOP:		
+				x_multiple =  1; 
+				y_multiple =  1;	
+				break;
+			case RIGHT_BOTTOM:	
+				x_multiple =  1; 
+				y_multiple = -1;	
+				break;
+			}
 
-			S32 new_pos_x = orig_rect.mLeft;
-			S32 new_pos_y = orig_rect.mTop;
+			S32 new_width = orig_rect.getWidth() + x_multiple * delta_x;
+			if( new_width < mMinWidth )
+			{
+				new_width = mMinWidth;
+				delta_x = x_multiple * (mMinWidth - orig_rect.getWidth());
+			}
+
+			S32 new_height = orig_rect.getHeight() + y_multiple * delta_y;
+			if( new_height < mMinHeight )
+			{
+				new_height = mMinHeight;
+				delta_y = y_multiple * (mMinHeight - orig_rect.getHeight());
+			}
 
 			switch( mCorner )
 			{
-			case LEFT_TOP:
-				new_width-=delta_x;
-				new_height+=delta_y;
-				new_pos_x+=delta_x;
-				new_pos_y+=delta_y;
+			case LEFT_TOP:		
+				scaled_rect.translate(delta_x, 0);			
 				break;
 			case LEFT_BOTTOM:	
-				new_width-=delta_x;
-				new_height-=delta_y;
-				new_pos_x+=delta_x;
+				scaled_rect.translate(delta_x, delta_y);	
 				break;
 			case RIGHT_TOP:		
-				new_width+=delta_x;
-				new_height+=delta_y;
-				new_pos_y+=delta_y;
 				break;
 			case RIGHT_BOTTOM:	
-				new_width+=delta_x;
-				new_height-=delta_y;
+				scaled_rect.translate(0, delta_y);			
 				break;
 			}
 
-			new_width = llmax(new_width,mMinWidth);
-			new_height = llmax(new_height,mMinHeight);
-			
-			LLRect::tCoordType screen_width = resizing_view->getParent()->getSnapRect().getWidth();
-			LLRect::tCoordType screen_height = resizing_view->getParent()->getSnapRect().getHeight();
-			
-			new_width = llmin(new_width, screen_width);
-			new_height = llmin(new_height, screen_height);
-			
 			// temporarily set new parent rect
-			scaled_rect.setLeftTopAndSize(new_pos_x,new_pos_y,new_width,new_height);
-				
+			scaled_rect.mRight = scaled_rect.mLeft + new_width;
+			scaled_rect.mTop = scaled_rect.mBottom + new_height;
 			resizing_view->setRect(scaled_rect);
 
 			LLView* snap_view = NULL;
@@ -252,11 +259,7 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
 			resizing_view->setRect(orig_rect);
 
 			// translate and scale to new shape
-			resizing_view->reshape(scaled_rect.getWidth(),scaled_rect.getHeight());
-			resizing_view->setRect(scaled_rect);
-			//set shape to handle dependent floaters...
-			resizing_view->handleReshape(scaled_rect, false);
-			
+			resizing_view->setShape(scaled_rect, true);
 			
 			// update last valid mouse cursor position based on resized view's actual size
 			LLRect new_rect = resizing_view->getRect();
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 95a946cee84c75659fffecdc8a75b53e17e509c2..463add9f4b5c61d4648f5fd6a3a15b4a96867419 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -117,7 +117,7 @@ class LLBottomTrayLite
 		if (gAgent.cameraMouselook())
 		{
 			LLBottomTray::getInstance()->setVisible(FALSE);
-		}
+}
 	}
 
 	LLNearbyChatBar*	mNearbyChatBar;
@@ -319,7 +319,7 @@ void LLBottomTray::onChange(EStatusType status, const std::string &channelURI, b
 }
 
 void LLBottomTray::onMouselookModeOut()
-{
+	{
 	mIsInLiteMode = false;
 	mBottomTrayLite->setVisible(FALSE);
 	mNearbyChatBar->getChatBox()->setText(mBottomTrayLite->mNearbyChatBar->getChatBox()->getText());
@@ -350,10 +350,10 @@ void LLBottomTray::setVisible(BOOL visible)
 	{
 		mBottomTrayLite->setVisible(visible);
 	}
-	else
-	{
+			else 
+			{
 		LLPanel::setVisible(visible);
-	}
+			}
 	if(visible)
 		gFloaterView->setSnapOffsetBottom(getRect().getHeight());
 	else
@@ -566,7 +566,7 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 		{
 			BOOL saved_anim = mToolbarStack->getAnimate();
 			// Set chiclet panel to be autoresized by default.
-			mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE);
+		mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE);
 			// Disable animation to prevent layout updating in several frames.
 			mToolbarStack->setAnimate(FALSE);
 			// Force the updating of layout to reset panels collapse factor.
@@ -1208,10 +1208,10 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
 				// Nothing can be done, give up...
 				return false;
 			}
-		}
+	}
 
 		if (result_width != current_width)
-		{
+	{
 			cur_panel->reshape(result_width, cur_panel->getRect().getHeight());
 			current_width = result_width;
 		}