diff --git a/doc/contributions.txt b/doc/contributions.txt
index 5307c5345c74d63c0c056f9a99732fe7a65b98da..923892a3ffd55d0550a29181d101bf0474e7241c 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -216,6 +216,7 @@ Ansariel Hiller
 	MAINT-7059
 	MAINT-6519
 	MAINT-7899
+	STORM-2151
 Aralara Rajal
 Arare Chantilly
 	CHUIBUG-191
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index b5ed53fd4fcc218831b51531e250b5c359d50c7b..62179e4d80045efc316515e899b5b9e423f1a9f4 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -421,6 +421,11 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks,
 	mKeyVirtualKey = 0;
 	mhDC = NULL;
 	mhRC = NULL;
+	
+	if (!SystemParametersInfo(SPI_GETMOUSEVANISH, 0, &mMouseVanish, 0))
+	{
+		mMouseVanish = TRUE;
+	}
 
 	// Initialize the keyboard
 	gKeyboard = new LLKeyboardWin32();
@@ -1680,7 +1685,7 @@ void LLWindowWin32::showCursorFromMouseMove()
 
 void LLWindowWin32::hideCursorUntilMouseMove()
 {
-	if (!mHideCursorPermanent)
+	if (!mHideCursorPermanent && mMouseVanish)
 	{
 		hideCursor();
 		mHideCursorPermanent = FALSE;
@@ -2668,6 +2673,18 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
 			return 0;			
 
 			break;
+
+		case WM_SETTINGCHANGE:
+			{
+				if (w_param == SPI_SETMOUSEVANISH)
+				{
+					if (!SystemParametersInfo(SPI_GETMOUSEVANISH, 0, &window_imp->mMouseVanish, 0))
+					{
+						window_imp->mMouseVanish = TRUE;
+					}
+				}
+			}
+			break;
 		}
 
 	window_imp->mCallbacks->handlePauseWatchdog(window_imp);	
diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h
index 39ef9b31a4e1ca8f16881e0fbd60c931c01fd867..cd6e5e4fa8d54e90746e4827b35490b37c26262e 100644
--- a/indra/llwindow/llwindowwin32.h
+++ b/indra/llwindow/llwindowwin32.h
@@ -214,6 +214,8 @@ protected:
 	U32				mRawWParam;
 	U32				mRawLParam;
 
+	BOOL			mMouseVanish;
+
 	friend class LLWindowManager;
 };