diff --git a/.hgtags b/.hgtags
index ebe3dbeacf2e2d0f9682ef9711b9ca237bf4bbdc..cd245dff38a395c25f814f383b33d42486ed5ef9 100755
--- a/.hgtags
+++ b/.hgtags
@@ -456,3 +456,5 @@ b6a4ac8f1916ede76e8a023e1cf35c045d0ac707 3.5.2-beta3
 a314f1c94374ab1f6633dd2983f7090a68663eb2 3.5.2-beta4
 1cfa86d604909dfdb8b372069ff61f9afaa2aac1 MAINT-2647
 895628bb5e162410cfdf4bca58f0a57d22ccfcde 3.5.2-beta5
+9013c07bfe1c51107233f1924dccdcc5057dd909 3.5.2-beta6
+9b1b6f33aa5394b27bb652b31b5cb81ef6060370 3.5.2-release
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 87ce492908ab2362771f27134bab4a075348a8f3..444877d48fb6923ffb0c7c872a3eebb1f8ca5def 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-3.5.2
+3.5.3
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 7fecfae734e55a933ce9b482b230ffb09f120508..8738829cae97db6e1f23a9ff79d9be4a2a904ed9 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3444,11 +3444,10 @@ void LLAppViewer::handleViewerCrash()
 	//we're already in a crash situation	
 	if (gDirUtilp)
 	{
-		std::string crash_file_name = ( gLLErrorActivated )
-			? gDirUtilp->getExpandedFilename(LL_PATH_LOGS,LLERROR_MARKER_FILE_NAME)
-			: gDirUtilp->getExpandedFilename(LL_PATH_LOGS,ERROR_MARKER_FILE_NAME);
-		LL_INFOS("MarkerFile") << "Creating crash marker file " << crash_file_name << LL_ENDL;
-		
+		std::string crash_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
+																	 gLLErrorActivated
+																	 ? LLERROR_MARKER_FILE_NAME
+																	 : ERROR_MARKER_FILE_NAME);
 		LLAPRFile crash_file ;
 		crash_file.open(crash_file_name, LL_APR_W);
 		if (crash_file.getFileHandle())
@@ -3548,7 +3547,10 @@ void LLAppViewer::recordMarkerVersion(LLAPRFile& marker_file)
 	std::string marker_version(LLVersionInfo::getChannelAndVersion());
 	if ( marker_version.length() > MAX_MARKER_LENGTH )
 	{
-		LL_WARNS_ONCE("MarkerFile") << "Version length ("<< marker_version.length()<< ") greater than maximum: marker matching may be incorrect" << LL_ENDL;
+		LL_WARNS_ONCE("MarkerFile") << "Version length ("<< marker_version.length()<< ")"
+									<< " greater than maximum (" << MAX_MARKER_LENGTH << ")"
+									<< ": marker matching may be incorrect"
+									<< LL_ENDL;
 	}
 
 	// record the viewer version in the marker file
@@ -3568,15 +3570,16 @@ bool LLAppViewer::markerIsSameVersion(const std::string& marker_name) const
 	if (marker_file.getFileHandle())
 	{
 		marker_version_length = marker_file.read(marker_version, sizeof(marker_version));
-		LL_DEBUGS("MarkerFile") << "Compare markers: ";
 		std::string marker_string(marker_version, marker_version_length);
-		LL_CONT << "\n   mine '" << my_version    << "'"
-				<< "\n marker '" << marker_string << "'"
-				<< LL_ENDL;
 		if ( 0 == my_version.compare( 0, my_version.length(), marker_version, 0, marker_version_length ) )
 		{
 			sameVersion = true;
 		}
+		LL_DEBUGS("MarkerFile") << "Compare markers for '" << marker_name << "': "
+								<< "\n   mine '" << my_version    << "'"
+								<< "\n marker '" << marker_string << "'"
+								<< "\n " << ( sameVersion ? "same" : "different" ) << " version"
+								<< LL_ENDL;
 		marker_file.close();
 	}
 	return sameVersion;
@@ -3687,7 +3690,7 @@ void LLAppViewer::initMarkerFile()
 
 void LLAppViewer::removeMarkerFile(bool leave_logout_marker)
 {
-	LL_DEBUGS("MarkerFile") << "removeMarkerFile("<<leave_logout_marker<<")" << LL_ENDL;
+	LL_DEBUGS("MarkerFile") << "removeMarkerFile("<<(leave_logout_marker?"leave":"remove") <<" logout)" << LL_ENDL;
 	if (mMarkerFile.getFileHandle())
 	{
 		LL_DEBUGS("MarkerFile") << "removeMarkerFile marker '"<<mMarkerFileName<<"'"<< LL_ENDL;
@@ -3702,12 +3705,12 @@ void LLAppViewer::removeMarkerFile(bool leave_logout_marker)
 	{
 		if (mLogoutMarkerFile.getFileHandle())
 		{
-			LL_DEBUGS("MarkerFile") << "removeMarkerFile marker '"<<mLogoutMarkerFileName<<"'"<< LL_ENDL;
+			LL_DEBUGS("MarkerFile") << "removeMarkerFile logout marker '"<<mLogoutMarkerFileName<<"'"<< LL_ENDL;
 			mLogoutMarkerFile.close();
 		}
 		else
 		{
-			LL_WARNS("MarkerFile") << "removeMarkerFile marker '"<<mLogoutMarkerFileName<<"' not open"<< LL_ENDL;
+			LL_WARNS("MarkerFile") << "removeMarkerFile logout marker '"<<mLogoutMarkerFileName<<"' not open"<< LL_ENDL;
 		}
 		LLAPRFile::remove( mLogoutMarkerFileName );
 	}
diff --git a/indra/viewer_components/updater/llupdatechecker.cpp b/indra/viewer_components/updater/llupdatechecker.cpp
index 39f68ac0f599ef0be2e3569e214884d6aeaa0600..1e768f52d9d5ebac40a3e5eadbbbaf3f1e49029b 100755
--- a/indra/viewer_components/updater/llupdatechecker.cpp
+++ b/indra/viewer_components/updater/llupdatechecker.cpp
@@ -108,25 +108,30 @@ void LLUpdateChecker::Implementation::checkVersion(std::string const & hostUrl,
 												   unsigned char       uniqueid[MD5HEX_STR_SIZE],
 												   bool                willing_to_test)
 {
-	llassert(!mInProgress);
-	
-	mInProgress = true;
-
-	mHostUrl     	 = hostUrl;
-	mServicePath 	 = servicePath;
-	mChannel     	 = channel;
-	mVersion     	 = version;
-	mPlatform        = platform;
-	mPlatformVersion = platform_version;
-	memcpy(mUniqueId, uniqueid, MD5HEX_STR_SIZE);
-	mWillingToTest   = willing_to_test;
+	if (!mInProgress)
+	{
+		mInProgress = true;
+
+		mHostUrl     	 = hostUrl;
+		mServicePath 	 = servicePath;
+		mChannel     	 = channel;
+		mVersion     	 = version;
+		mPlatform        = platform;
+		mPlatformVersion = platform_version;
+		memcpy(mUniqueId, uniqueid, MD5HEX_STR_SIZE);
+		mWillingToTest   = willing_to_test;
 	
-	mProtocol = sProtocolVersion;
+		mProtocol = sProtocolVersion;
 
-	std::string checkUrl = buildUrl(hostUrl, servicePath, channel, version, platform, platform_version, uniqueid, willing_to_test);
-	LL_INFOS("UpdaterService") << "checking for updates at " << checkUrl << LL_ENDL;
+		std::string checkUrl = buildUrl(hostUrl, servicePath, channel, version, platform, platform_version, uniqueid, willing_to_test);
+		LL_INFOS("UpdaterService") << "checking for updates at " << checkUrl << LL_ENDL;
 	
-	mHttpClient.get(checkUrl, this);
+		mHttpClient.get(checkUrl, this);
+	}
+	else
+	{
+		LL_WARNS("UpdaterService") << "attempting to restart a check when one is in progress; ignored" << LL_ENDL;
+	}
 }
 
 void LLUpdateChecker::Implementation::completed(U32 status,