diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index f723d9f24081abfc8ecd1448f1bd20914f64000c..7a48f890e05bddded44f5a127095b7d3936ac772 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -269,7 +269,7 @@ bool LLProgressView::handleUpdate(const LLSD& event_data)
 	LLSD desc = event_data.get("desc");
 	LLSD percent = event_data.get("percent");
 
-	if(message.isUndefined())
+	if(message.isDefined())
 	{
 		setMessage(message.asString());
 	}
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index fdf8fa171d3cc01041f077fd674183421d790ce5..786bcb574269cb2e4a8b4a2f23cfd6519ea5cda1 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1082,6 +1082,17 @@ bool idle_startup()
 		credentials["passwd"] = gPassword;
 		login->connect(credentials);
 
+		LLStartUp::setStartupState( STATE_LOGIN_CURL_UNSTUCK );
+		return FALSE;
+	}
+
+	if(STATE_LOGIN_CURL_UNSTUCK == LLStartUp::getStartupState())
+	{
+		// If we get here we have gotten past the potential stall
+		// in curl, so take "may appear frozen" out of progress bar. JC
+		auth_desc = LLTrans::getString("LoginInProgressNoFrozen");
+		set_startup_status(progress, auth_desc, auth_message);
+
 		LLStartUp::setStartupState( STATE_LOGIN_PROCESS_RESPONSE );
 		return FALSE;
 	}
@@ -1168,20 +1179,6 @@ bool idle_startup()
 				show_connect_box = true;
 			}
 		}
-		else
-		{
-			// If we get here we have gotten past the potential stall
-			// in curl, so take "may appear frozen" out of progress bar. JC
-			// *NOTE:Mani - Actual responses handled by LLLoginInstance::handleLoginEvent()
-			static bool has_set_unfrozen_msg = false;
-			if(!has_set_unfrozen_msg)
-			{
-				auth_desc = LLTrans::getString("LoginInProgressNoFrozen");
-				set_startup_status(progress, auth_desc, auth_message);
-				has_set_unfrozen_msg = true;
-			}
-		}
-
 		return FALSE;
 	}
 
@@ -2703,6 +2700,7 @@ std::string LLStartUp::startupStateToString(EStartupState state)
 		RTNENUM( STATE_LOGIN_WAIT );
 		RTNENUM( STATE_LOGIN_CLEANUP );
 		RTNENUM( STATE_LOGIN_AUTH_INIT );
+		RTNENUM( STATE_LOGIN_CURL_UNSTUCK );
 		RTNENUM( STATE_LOGIN_PROCESS_RESPONSE );
 		RTNENUM( STATE_WORLD_INIT );
 		RTNENUM( STATE_MULTIMEDIA_INIT );
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index ab11b42e7427f81c70cbddc08d68c07402e437ad..92fe9521d3eb31b3ca8f2f99e618bc34a5e1c3ad 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -55,6 +55,7 @@ typedef enum {
 	STATE_LOGIN_WAIT,				// Wait for user input at login screen
 	STATE_LOGIN_CLEANUP,			// Get rid of login screen and start login
 	STATE_LOGIN_AUTH_INIT,			// Start login to SL servers
+	STATE_LOGIN_CURL_UNSTUCK,		// Update progress to remove "SL appears frozen" msg.
 	STATE_LOGIN_PROCESS_RESPONSE,	// Check authentication reply
 	STATE_WORLD_INIT,				// Start building the world
 	STATE_MULTIMEDIA_INIT,			// Init the rest of multimedia library