diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index 1f3823509c4ebddb77e64193a292fdfc77f3868a..4c3aeb46951b1e6ce4dbae0fb36e895e84f791c7 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -3057,8 +3057,20 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
                 if (raw->header.dwType == RIM_TYPEMOUSE)
                 {
                     LLMutexLock lock(&window_imp->mRawMouseMutex);
-                    window_imp->mRawMouseDelta.mX += raw->data.mouse.lLastX;
-                    window_imp->mRawMouseDelta.mY -= raw->data.mouse.lLastY;
+
+                    S32 speed;
+                    const S32 DEFAULT_SPEED(10);
+                    SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
+                    if (speed == DEFAULT_SPEED)
+                    {
+                        window_imp->mRawMouseDelta.mX += raw->data.mouse.lLastX;
+                        window_imp->mRawMouseDelta.mY -= raw->data.mouse.lLastY;
+                    }
+                    else
+                    {
+                        window_imp->mRawMouseDelta.mX += round((F32)raw->data.mouse.lLastX * (F32)speed / DEFAULT_SPEED);
+                        window_imp->mRawMouseDelta.mY -= round((F32)raw->data.mouse.lLastY * (F32)speed / DEFAULT_SPEED);
+                    }
                 }
             }
         }
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 09a7391e4e373ff475cb5093c88cbbbc7210dc27..28179fc1f51c8e3ccacab1b8e36a63af4aa9e1bf 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-6.6.1
+6.6.2
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 2436bc3315275709dcfb33687d2fa61dede6fb73..9ed717ecd31dfad0ba25c75d15573353e4645fba 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1125,7 +1125,8 @@ bool LLAppViewer::init()
 	gGLActive = FALSE;
 
 #if LL_RELEASE_FOR_DOWNLOAD
-    if (!gSavedSettings.getBOOL("CmdLineSkipUpdater"))
+    // Skip updater if this is a non-interactive instance
+    if (!gSavedSettings.getBOOL("CmdLineSkipUpdater") && !gNonInteractive)
     {
         LLProcess::Params updater;
         updater.desc = "updater process";
@@ -3146,6 +3147,11 @@ bool LLAppViewer::isUpdaterMissing()
     return mUpdaterNotFound;
 }
 
+bool LLAppViewer::waitForUpdater()
+{
+    return !gSavedSettings.getBOOL("CmdLineSkipUpdater") && !mUpdaterNotFound && !gNonInteractive;
+}
+
 void LLAppViewer::writeDebugInfo(bool isStatic)
 {
 #if LL_WINDOWS && LL_BUGSPLAT
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 68c04d450b973139e7cd63b0b34be1ef9399e184..7ab21f35cd624b2da2bb9ead48ea92e57522ebc9 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -106,6 +106,7 @@ class LLAppViewer : public LLApp
 	bool logoutRequestSent() { return mLogoutRequestSent; }
 	bool isSecondInstance() { return mSecondInstance; }
     bool isUpdaterMissing(); // In use by tests
+    bool waitForUpdater();
 
 	void writeDebugInfo(bool isStatic=true);
 
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index a3d0eb579624e18e65e5dcc6cab6c6463fcc6545..82ecfbd4dceb04a7f394f075ec4dc51092ea78c9 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -280,7 +280,7 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia
 	mRequestData["options"] = requested_options;
 	mRequestData["http_params"] = http_params;
 #if LL_RELEASE_FOR_DOWNLOAD
-    mRequestData["wait_for_updater"] = !gSavedSettings.getBOOL("CmdLineSkipUpdater") && !LLAppViewer::instance()->isUpdaterMissing();
+    mRequestData["wait_for_updater"] = LLAppViewer::instance()->waitForUpdater();
 #else
     mRequestData["wait_for_updater"] = false;
 #endif
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index da16c8209f676cec0b826893990073f8b8c0e10f..c297f0f080cb11a263eb09fb19dd4e4a76770644 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -10897,22 +10897,47 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar, bool preview_avatar)
 	{
 		markVisible(avatar->mDrawable, *viewer_camera);
 
-		LLVOAvatar::attachment_map_t::iterator iter;
-		for (iter = avatar->mAttachmentPoints.begin();
-			iter != avatar->mAttachmentPoints.end();
-			++iter)
-		{
-			LLViewerJointAttachment *attachment = iter->second;
-			for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
-				 attachment_iter != attachment->mAttachedObjects.end();
-				 ++attachment_iter)
-			{
-				if (LLViewerObject* attached_object = attachment_iter->get())
-				{
-					markVisible(attached_object->mDrawable->getSpatialBridge(), *viewer_camera);
-				}
-			}
-		}
+        if (preview_avatar)
+        {
+            // Only show rigged attachments for preview
+            LLVOAvatar::attachment_map_t::iterator iter;
+            for (iter = avatar->mAttachmentPoints.begin();
+                iter != avatar->mAttachmentPoints.end();
+                ++iter)
+            {
+                LLViewerJointAttachment *attachment = iter->second;
+                for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
+                    attachment_iter != attachment->mAttachedObjects.end();
+                    ++attachment_iter)
+                {
+                    LLViewerObject* attached_object = attachment_iter->get();
+                    if (attached_object && attached_object->isRiggedMesh())
+                    {
+                        markVisible(attached_object->mDrawable->getSpatialBridge(), *viewer_camera);
+                    }
+                }
+            }
+        }
+        else
+        {
+            LLVOAvatar::attachment_map_t::iterator iter;
+            for (iter = avatar->mAttachmentPoints.begin();
+                iter != avatar->mAttachmentPoints.end();
+                ++iter)
+            {
+                LLViewerJointAttachment *attachment = iter->second;
+                for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
+                    attachment_iter != attachment->mAttachedObjects.end();
+                    ++attachment_iter)
+                {
+                    LLViewerObject* attached_object = attachment_iter->get();
+                    if (attached_object)
+                    {
+                        markVisible(attached_object->mDrawable->getSpatialBridge(), *viewer_camera);
+                    }
+                }
+            }
+        }
 	}
 
 	stateSort(*LLViewerCamera::getInstance(), result);
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index a52c3dcef9b8923ae8a1bd317f9cf4389f71f14c..696fe3536c834f77324dd233ef06021f72252404 100644
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -223,6 +223,7 @@ bool llHashedUniqueID(unsigned char* id)
 #include "../llappviewer.h"
 void LLAppViewer::forceQuit(void) {}
 bool LLAppViewer::isUpdaterMissing() { return true; }
+bool LLAppViewer::waitForUpdater() { return false; }
 LLAppViewer * LLAppViewer::sInstance = 0;
 
 //-----------------------------------------------------------------------------