diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 65c9f2b8f6df5880cb7065e4158b92a02f9c5c60..ef9f5a855c909fdbf0199800bf4ce0c61faadae0 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -111,7 +111,6 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
 	mPick = gViewerWindow->pickImmediate(x, y, TRUE);
 	mPick.mKeyMask = mask;
 
-	mDragPick = mPick;
 	mMouseButtonDown = true;
 	mAbortClickToWalk = false;
 	
@@ -531,7 +530,9 @@ void LLToolPie::selectionPropertiesReceived()
 
 BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
 {
-	if (!mMouseOutsideSlop && mMouseButtonDown && gSavedSettings.getBOOL("ClickToWalk"))
+	if (!mMouseOutsideSlop 
+		&& mMouseButtonDown 
+		&& gSavedSettings.getBOOL("ClickToWalk"))
 	{
 		S32 delta_x = x - mMouseDownX;
 		S32 delta_y = y - mMouseDownY;
@@ -639,6 +640,21 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask)
 		&& (mPick.mPickType == LLPickInfo::PICK_LAND	// we clicked on land
 			|| mPick.mObjectID.notNull()))				// or on an object
 	{
+		// handle special cases of steering picks
+		LLViewerObject* avatar_object = mPick.getObject();
+
+		// get pointer to avatar
+		while (avatar_object && !avatar_object->isAvatar())
+		{
+			avatar_object = (LLViewerObject*)avatar_object->getParent();
+		}
+
+		if (avatar_object && ((LLVOAvatar*)avatar_object)->isSelf())
+		{
+			const F64 SELF_CLICK_WALK_DISTANCE = 3.0;
+			// pretend we picked some point a bit in front of avatar
+			mPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * SELF_CLICK_WALK_DISTANCE;
+		}
 		gAgentCamera.setFocusOnAvatar(TRUE, TRUE);
 		mAutoPilotDestination = (LLHUDEffectBlob *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BLOB, FALSE);
 		mAutoPilotDestination->setPositionGlobal(mPick.mPosGlobal);
@@ -1716,25 +1732,53 @@ void LLToolPie::startCameraSteering()
 {
 	mMouseOutsideSlop = true;
 	mAbortClickToWalk = true;
-	setMouseCapture(TRUE);
-	
-	mMouseSteerX = mMouseDownX;
-	mMouseSteerY = mMouseDownY;
-	const LLVector3 camera_to_rotation_center	= gAgent.getFrameAgent().getOrigin() - LLViewerCamera::instance().getOrigin();
-	const LLVector3 rotation_center_to_pick		= gAgent.getPosAgentFromGlobal(mDragPick.mPosGlobal) - gAgent.getFrameAgent().getOrigin();
-
-	mClockwise = camera_to_rotation_center * rotation_center_to_pick < 0.f;
-	mMouseSteerGrabPoint= (LLHUDEffectBlob *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BLOB, FALSE);
-	mMouseSteerGrabPoint->setPositionGlobal(mPick.mPosGlobal);
-	mMouseSteerGrabPoint->setColor(LLColor4U::white);
-	mMouseSteerGrabPoint->setDuration(1000.f);
+
+	if (gAgentCamera.getFocusOnAvatar())
+	{
+		mSteerPick = mPick;
+
+		// handle special cases of steering picks
+		LLViewerObject* avatar_object = mSteerPick.getObject();
+
+		// get pointer to avatar
+		while (avatar_object && !avatar_object->isAvatar())
+		{
+			avatar_object = (LLViewerObject*)avatar_object->getParent();
+		}
+
+		// if clicking on own avatar...
+		if (avatar_object && ((LLVOAvatar*)avatar_object)->isSelf())
+		{
+			// ...project pick point a few meters in front of avatar
+			mSteerPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * 3.0;
+		}
+
+		if (!mSteerPick.isValid())
+		{
+			mSteerPick.mPosGlobal = gAgent.getPosGlobalFromAgent(
+				LLViewerCamera::instance().getOrigin() + gViewerWindow->mouseDirectionGlobal(mSteerPick.mMousePt.mX, mSteerPick.mMousePt.mY) * 100.f);
+		}
+
+		setMouseCapture(TRUE);
+		
+		mMouseSteerX = mMouseDownX;
+		mMouseSteerY = mMouseDownY;
+		const LLVector3 camera_to_rotation_center	= gAgent.getFrameAgent().getOrigin() - LLViewerCamera::instance().getOrigin();
+		const LLVector3 rotation_center_to_pick		= gAgent.getPosAgentFromGlobal(mSteerPick.mPosGlobal) - gAgent.getFrameAgent().getOrigin();
+
+		mClockwise = camera_to_rotation_center * rotation_center_to_pick < 0.f;
+		mMouseSteerGrabPoint= (LLHUDEffectBlob *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BLOB, FALSE);
+		mMouseSteerGrabPoint->setPositionGlobal(mPick.mPosGlobal);
+		mMouseSteerGrabPoint->setColor(LLColor4U::white);
+		mMouseSteerGrabPoint->setDuration(1000.f);
+	}
 }
 
 void LLToolPie::steerCameraWithMouse(S32 x, S32 y)
 {
 	const F32 MIN_ROTATION_RADIUS_FRACTION = 0.2f;
 
-	const LLVector3 pick_pos = gAgent.getPosAgentFromGlobal(mDragPick.mPosGlobal);
+	const LLVector3 pick_pos = gAgent.getPosAgentFromGlobal(mSteerPick.mPosGlobal);
 	const LLVector3 rotation_center = gAgent.getFrameAgent().getOrigin();
 	// FIXME: get this to work with camera tilt (i.e. sitting on a rotating object)
 	const LLVector3 rotation_up_axis(LLVector3::z_axis);
diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h
index dca661d26d1bb75d18396903c74ebab32aded9ee..01e74a20d78ddc511b34b56a7dbf2e8adb8d6923 100644
--- a/indra/newview/lltoolpie.h
+++ b/indra/newview/lltoolpie.h
@@ -108,7 +108,7 @@ class LLToolPie : public LLTool, public LLSingleton<LLToolPie>
 	LLUUID				mMediaMouseCaptureID;
 	LLPickInfo			mPick;
 	LLPickInfo			mHoverPick;
-	LLPickInfo			mDragPick;
+	LLPickInfo			mSteerPick;
 	LLPointer<LLViewerObject> mClickActionObject;
 	U8					mClickAction;
 	LLSafeHandle<LLObjectSelection> mLeftClickSelection;
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index cec04b0b5814b20527281da4bae962a5d30d841b..4c2faddfe401b76414afbd7c0362b406d7cb48d3 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -137,7 +137,7 @@ label="Remember password"
   name="mode_combo"
   width="110">
 <combo_box.item
-  label="Basic (Default)"
+  label="Basic"
   name="Basic"
   value="settings_minimal.xml" />
 <combo_box.item