diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index a98ff64d0a452b2580aa883012e7a2df45a03d0c..466677b8be999d8bf7722a21beb38defb672a386 100755
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -229,21 +229,34 @@ void LLAssetUploadResponder::httpFailure()
 {
 	// *TODO: Add adaptive retry policy?
 	LL_WARNS() << dumpResponse() << LL_ENDL;
-	LLSD args;
+	std::string reason;
 	if (isHttpClientErrorStatus(getStatus()))
 	{
-		args["FILE"] = (mFileName.empty() ? mVFileID.asString() : mFileName);
-		args["REASON"] = "Error in upload request.  Please visit "
+		reason = "Error in upload request.  Please visit "
 			"http://secondlife.com/support for help fixing this problem.";
-		LLNotificationsUtil::add("CannotUploadReason", args);
 	}
 	else
 	{
-		args["FILE"] = (mFileName.empty() ? mVFileID.asString() : mFileName);
-		args["REASON"] = "The server is experiencing unexpected "
+		reason = "The server is experiencing unexpected "
 			"difficulties.";
-		LLNotificationsUtil::add("CannotUploadReason", args);
 	}
+	LLSD args;
+	args["FILE"] = (mFileName.empty() ? mVFileID.asString() : mFileName);
+	args["REASON"] = reason;
+	LLNotificationsUtil::add("CannotUploadReason", args);
+
+	// unfreeze script preview
+	if(mAssetType == LLAssetType::AT_LSL_TEXT)
+	{
+		LLPreviewLSL* preview = LLFloaterReg::findTypedInstance<LLPreviewLSL>("preview_script", mPostData["item_id"]);
+		if (preview)
+		{
+			LLSD errors;
+			errors.append(LLTrans::getString("UploadFailed") + reason);
+			preview->callbackLSLCompileFailed(errors);
+		}
+	}
+
 	LLUploadDialog::modalUploadFinished();
 	LLFilePicker::instance().reset();  // unlock file picker when bulk upload fails
 }
@@ -298,8 +311,22 @@ void LLAssetUploadResponder::uploadUpload(const LLSD& content)
 void LLAssetUploadResponder::uploadFailure(const LLSD& content)
 {
 	LL_WARNS() << dumpResponse() << LL_ENDL;
+
+	// unfreeze script preview
+	if(mAssetType == LLAssetType::AT_LSL_TEXT)
+	{
+		LLPreviewLSL* preview = LLFloaterReg::findTypedInstance<LLPreviewLSL>("preview_script", mPostData["item_id"]);
+		if (preview)
+		{
+			LLSD errors;
+			errors.append(LLTrans::getString("UploadFailed") + content["message"].asString());
+			preview->callbackLSLCompileFailed(errors);
+		}
+	}
+
 	// remove the "Uploading..." message
 	LLUploadDialog::modalUploadFinished();
+
 	LLFloater* floater_snapshot = LLFloaterReg::findInstance("snapshot");
 	if (floater_snapshot)
 	{
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 5dcb8e2cdf4564a1ba032652a1f16a7154c60e62..cc2f645b8ea14d5e3500cf3e336a12ee042e3899 100755
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2509,6 +2509,7 @@ The [[MARKETPLACE_CREATE_STORE_URL] Marketplace store] is returning errors.
 	<string name="CompileSuccessful">Compile successful!</string>
 	<string name="CompileSuccessfulSaving">Compile successful, saving...</string>
 	<string name="SaveComplete">Save complete.</string>
+	<string name="UploadFailed">File upload failed: </string>
 	<string name="ObjectOutOfRange">Script (object out of range)</string>
 
 	<!-- god tools -->