diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 4673289094526d71e6731d74fd8fc8a3013b5420..494f6f2e01a4da032e40535d3aada6fd5e8ba80b 100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -468,38 +468,36 @@ class LLMeshPhysicsShapeResponder : public LLCurl::Responder
 
 };
 
-void log_upload_error(const LLSD& content,std::string stage)
+void log_upload_error(S32 status, const LLSD& content,std::string stage)
 {
+	llwarns << "stage: " << stage << " http status: " << status << llendl;
 	if (content.has("error"))
 	{
 		const LLSD& err = content["error"];
-		llwarns << "mesh upload failed, stage " << stage
-				<< " message " << err["message"].asString() << " id " << err["identifier"].asString()
-				<< llendl;
-
-		if (content.has("errors"))
-		{
-			const LLSD& err_list = content["errors"];
+		llwarns << "err: " << err << llendl;
+		llwarns << "mesh upload failed, stage '" << stage
+				<< "' error '" << err["error"].asString()
+				<< "', message '" << err["message"].asString()
+				<< "', id '" << err["identifier"].asString()
+				<< "'" << llendl;
+		if (err.has("errors"))
+		{
+			S32 error_num = 0;
+			const LLSD& err_list = err["errors"];
 			for (LLSD::array_const_iterator it = err_list.beginArray();
 				 it != err_list.endArray();
 				 ++it)
 			{
 				const LLSD& err_entry = *it;
-				std::string index_info;
-				std::string texture_index_str = err_entry["TextureIndex"].asString();
-				if (!texture_index_str.empty())
+				llwarns << "error[" << error_num << "]:" << llendl;
+				for (LLSD::map_const_iterator map_it = err_entry.beginMap();
+					 map_it != err_entry.endMap();
+					 ++map_it)
 				{
-					index_info += " texture_index: " + texture_index_str;
+					llwarns << "\t" << map_it->first << ": "
+							<< map_it->second << llendl;
 				}
-				std::string	mesh_index_str = err_entry["MeshIndex"].asString();
-				if (!mesh_index_str.empty())
-				{
-					index_info += " mesh_index: " + mesh_index_str;
-				}
-				llwarns << "mesh err code " << err_entry["error"].asString()
-						<< " message " << err_entry["message"]
-						<< index_info
-						<< llendl;
+				error_num++;
 			}
 		}
 	}
@@ -507,8 +505,6 @@ void log_upload_error(const LLSD& content,std::string stage)
 	{
 		llwarns << "bad mesh, no error information available" << llendl;
 	}
-
-	
 }
 
 class LLModelObjectUploadResponder: public LLCurl::Responder
@@ -547,12 +543,11 @@ class LLWholeModelFeeResponder: public LLCurl::Responder
 						   const std::string& reason,
 						   const LLSD& content)
 	{
-		//assert_main_thread();
 		llinfos << "completed" << llendl;
 		mThread->mPendingUploads--;
 		dumpLLSDToFile(content,make_dump_name("whole_model_fee_response_",dump_num));
-		llinfos << "LLWholeModelFeeResponder content: " << content << llendl;
-		if (isGoodStatus(status))
+		if (isGoodStatus(status) &&
+			content["state"].asString() == "upload")
 		{
 			llinfos << "fee request succeeded" << llendl;
 			mThread->mWholeModelUploadURL = content["uploader"].asString(); 
@@ -560,7 +555,7 @@ class LLWholeModelFeeResponder: public LLCurl::Responder
 		else
 		{
 			llwarns << "fee request failed" << llendl;
-			log_upload_error(content,"fee");
+			log_upload_error(status,content,"fee");
 			mThread->mWholeModelUploadURL = "";
 		}
 	}
@@ -588,7 +583,8 @@ class LLWholeModelUploadResponder: public LLCurl::Responder
 		llinfos << "LLWholeModelUploadResponder content: " << content << llendl;
 		// requested "mesh" asset type isn't actually the type
 		// of the resultant object, fix it up here.
-		if (isGoodStatus(status))
+		if (isGoodStatus(status) &&
+			content["state"].asString() == "complete")
 		{
 			llinfos << "upload succeeded" << llendl;
 			mPostData["asset_type"] = "object";
@@ -597,7 +593,7 @@ class LLWholeModelUploadResponder: public LLCurl::Responder
 		else
 		{
 			llwarns << "upload failed" << llendl;
-			log_upload_error(content,"upload");
+			log_upload_error(status,content,"upload");
 		}
 	}
 };