diff --git a/indra/llmessage/llxfer.cpp b/indra/llmessage/llxfer.cpp
index a42ecefd23acfb2f02271a0b4ef80c3ae2ed52d9..c8b9d5d19fad4971547c52632fc4236951a78614 100644
--- a/indra/llmessage/llxfer.cpp
+++ b/indra/llmessage/llxfer.cpp
@@ -63,7 +63,6 @@ void LLXfer::init (S32 chunk_size)
 	mXferSize = 0;
 
 	mStatus = e_LL_XFER_UNINITIALIZED;
-	mNext = NULL;
 	mWaitingForACK = FALSE;
 	
 	mCallback = NULL;
@@ -130,7 +129,7 @@ void LLXfer::setXferSize (S32 xfer_size)
 
 S32 LLXfer::startDownload()
 {
-	LL_WARNS() << "undifferentiated LLXfer::startDownload for " << getFileName()
+	LL_WARNS("Xfer") << "undifferentiated LLXfer::startDownload for " << getFileName()
 			<< LL_ENDL;
 	return (-1);
 }
@@ -155,7 +154,7 @@ S32 LLXfer::receiveData (char *datap, S32 data_size)
 		}
 		else
 		{
-			LL_ERRS() << "NULL data passed in receiveData" << LL_ENDL;
+			LL_ERRS("Xfer") << "NULL data passed in receiveData" << LL_ENDL;
 		}
 	}
 
@@ -178,7 +177,7 @@ S32 LLXfer::flush()
 
 S32 LLXfer::suck(S32 start_position)
 {
-	LL_WARNS() << "Attempted to send a packet outside the buffer bounds in LLXfer::suck()" << LL_ENDL;
+	LL_WARNS("Xfer") << "Attempted to send a packet outside the buffer bounds in LLXfer::suck()" << LL_ENDL;
 	return (-1);
 }
 
@@ -211,7 +210,7 @@ void LLXfer::sendPacket(S32 packet_num)
 
 	if (fdata_size < 0)
 	{
-		LL_WARNS() << "negative data size in xfer send, aborting" << LL_ENDL;
+		LL_WARNS("Xfer") << "negative data size in xfer send, aborting" << LL_ENDL;
 		abort(LL_ERR_EOF);
 		return;
 	}
@@ -309,12 +308,12 @@ S32 LLXfer::processEOF()
 
 	if (LL_ERR_NOERR == mCallbackResult)
 	{
-		LL_INFOS() << "xfer from " << mRemoteHost << " complete: " << getFileName()
+		LL_INFOS("Xfer") << "xfer from " << mRemoteHost << " complete: " << getFileName()
 				<< LL_ENDL;
 	}
 	else
 	{
-		LL_INFOS() << "xfer from " << mRemoteHost << " failed or aborted, code "
+		LL_INFOS("Xfer") << "xfer from " << mRemoteHost << " failed, code "
 				<< mCallbackResult << ": " << getFileName() << LL_ENDL;
 	}
 
@@ -343,7 +342,7 @@ void LLXfer::abort (S32 result_code)
 {
 	mCallbackResult = result_code;
 
-	LL_INFOS() << "Aborting xfer from " << mRemoteHost << " named " << getFileName()
+	LL_INFOS("Xfer") << "Aborting xfer from " << mRemoteHost << " named " << getFileName()
 			<< " - error: " << result_code << LL_ENDL;
 
 	if (result_code != LL_ERR_CIRCUIT_GONE)
diff --git a/indra/llmessage/llxfer.h b/indra/llmessage/llxfer.h
index 3be8da4fbed05ade2258c5b0869c3f9a2884ea64..a906674dec4c8a79ec824bc54eaa4b9db9c291cf 100644
--- a/indra/llmessage/llxfer.h
+++ b/indra/llmessage/llxfer.h
@@ -54,7 +54,6 @@ class LLXfer
         S32 mChunkSize;
   
  public:
-	LLXfer *mNext;
 	U64 mID;
 	S32 mPacketNum;
 
diff --git a/indra/llmessage/llxfer_file.cpp b/indra/llmessage/llxfer_file.cpp
index ad55e389f3480a4ead3294eea7eaebc119dcfc85..9a085b592018f96e6c4da0045180074f161f380c 100644
--- a/indra/llmessage/llxfer_file.cpp
+++ b/indra/llmessage/llxfer_file.cpp
@@ -102,12 +102,12 @@ void LLXfer_File::cleanup ()
 
 	if (mDeleteLocalOnCompletion)
 	{
-		LL_DEBUGS() << "Removing file: " << mLocalFilename << LL_ENDL;
+		LL_DEBUGS("Xfer") << "Removing file: " << mLocalFilename << LL_ENDL;
 		LLFile::remove(mLocalFilename, ENOENT);
 	}
 	else
 	{
-		LL_DEBUGS() << "Keeping local file: " << mLocalFilename << LL_ENDL;
+		LL_DEBUGS("Xfer") << "Keeping local file: " << mLocalFilename << LL_ENDL;
 	}
 
 	LLXfer::cleanup();
@@ -139,7 +139,7 @@ S32 LLXfer_File::initializeRequest(U64 xfer_id,
 	mCallbackDataHandle = user_data;
 	mCallbackResult = LL_ERR_NOERR;
 
-	LL_INFOS() << "Requesting xfer from " << remote_host << " for file: " << mLocalFilename << LL_ENDL;
+	LL_INFOS("Xfer") << "Requesting xfer from " << remote_host << " for file: " << mLocalFilename << LL_ENDL;
 
 	if (mBuffer)
 	{
@@ -167,6 +167,7 @@ S32 LLXfer_File::startDownload()
 		fclose(mFp);
 		mFp = NULL;
 
+		// tbd - is it premature to send this message if the queue is backed up?
 		gMessageSystem->newMessageFast(_PREHASH_RequestXfer);
 		gMessageSystem->nextBlockFast(_PREHASH_XferID);
 		gMessageSystem->addU64Fast(_PREHASH_ID, mID);
@@ -182,7 +183,7 @@ S32 LLXfer_File::startDownload()
 	}
 	else
 	{
-		LL_WARNS() << "Couldn't create file to be received!" << LL_ENDL;
+		LL_WARNS("Xfer") << "Couldn't create file to be received!" << LL_ENDL;
 		retval = -1;
 	}
 
@@ -224,7 +225,7 @@ S32 LLXfer_File::startSend (U64 xfer_id, const LLHost &remote_host)
 	}
 	else
 	{
-		LL_INFOS() << "Warning: " << mLocalFilename << " not found." << LL_ENDL;
+		LL_INFOS("Xfer") << "Warning: " << mLocalFilename << " not found." << LL_ENDL;
 		return (LL_ERR_FILE_NOT_FOUND);
 	}
 
@@ -310,7 +311,7 @@ S32 LLXfer_File::flush()
 	{
 		if (mFp)
 		{
-			LL_ERRS() << "Overwriting open file pointer!" << LL_ENDL;
+			LL_ERRS("Xfer") << "Overwriting open file pointer!" << LL_ENDL;
 		}
 		mFp = LLFile::fopen(mTempFilename,"a+b");		/* Flawfinder : ignore */
 
@@ -324,7 +325,7 @@ S32 LLXfer_File::flush()
 					<< LL_ENDL;
 			}
 			
-//			LL_INFOS() << "******* wrote " << mBufferLength << " bytes of file xfer" << LL_ENDL;
+//			LL_INFOS("Xfer") << "******* wrote " << mBufferLength << " bytes of file xfer" << LL_ENDL;
 			fclose(mFp);
 			mFp = NULL;
 			
@@ -332,7 +333,7 @@ S32 LLXfer_File::flush()
 		}
 		else
 		{
-			LL_WARNS() << "LLXfer_File::flush() unable to open " << mTempFilename << " for writing!" << LL_ENDL;
+			LL_WARNS("Xfer") << "LLXfer_File::flush() unable to open " << mTempFilename << " for writing!" << LL_ENDL;
 			retval = LL_ERR_CANNOT_OPEN_FILE;
 		}
 	}
@@ -363,18 +364,18 @@ S32 LLXfer_File::processEOF()
 		{
 #if !LL_WINDOWS
 			S32 error_number = errno;
-			LL_INFOS() << "Rename failure (" << error_number << ") - "
+			LL_INFOS("Xfer") << "Rename failure (" << error_number << ") - "
 					<< mTempFilename << " to " << mLocalFilename << LL_ENDL;
 			if(EXDEV == error_number)
 			{
 				if(copy_file(mTempFilename, mLocalFilename) == 0)
 				{
-					LL_INFOS() << "Rename across mounts; copying+unlinking the file instead." << LL_ENDL;
+					LL_INFOS("Xfer") << "Rename across mounts; copying+unlinking the file instead." << LL_ENDL;
 					unlink(mTempFilename.c_str());
 				}
 				else
 				{
-					LL_WARNS() << "Copy failure - " << mTempFilename << " to "
+					LL_WARNS("Xfer") << "Copy failure - " << mTempFilename << " to "
 							<< mLocalFilename << LL_ENDL;
 				}
 			}
@@ -388,11 +389,11 @@ S32 LLXfer_File::processEOF()
 				//LL_WARNS() << "File " << mLocalFilename << " does "
 				//		<< (!fp ? "not" : "" ) << " exit." << LL_ENDL;
 				//if(fp) fclose(fp);
-				LL_WARNS() << "Rename fatally failed, can only handle EXDEV ("
+				LL_WARNS("Xfer") << "Rename fatally failed, can only handle EXDEV ("
 						<< EXDEV << ")" << LL_ENDL;
 			}
 #else
-			LL_WARNS() << "Rename failure - " << mTempFilename << " to "
+			LL_WARNS("Xfer") << "Rename failure - " << mTempFilename << " to "
 					<< mLocalFilename << LL_ENDL;
 #endif
 		}
@@ -470,4 +471,4 @@ S32 copy_file(const std::string& from, const std::string& to)
 	if(out) fclose(out);
 	return rv;
 }
-#endif
+#endif
\ No newline at end of file
diff --git a/indra/llmessage/llxfer_vfile.cpp b/indra/llmessage/llxfer_vfile.cpp
index 5d4118019263f4198b56a30820b56512ca4628c2..e0281f1348a3b357c8cb2c6c2da17b805bfa075e 100644
--- a/indra/llmessage/llxfer_vfile.cpp
+++ b/indra/llmessage/llxfer_vfile.cpp
@@ -79,8 +79,20 @@ void LLXfer_VFile::init (LLVFS *vfs, const LLUUID &local_id, LLAssetType::EType
 
 void LLXfer_VFile::cleanup ()
 {
-	LLVFile file(mVFS, mTempID, mType, LLVFile::WRITE);
-	file.remove();
+	if (mTempID.notNull() &&
+		mDeleteTempFile)
+	{
+		if (mVFS->getExists(mTempID, mType))
+		{
+			LLVFile file(mVFS, mTempID, mType, LLVFile::WRITE);
+			file.remove();
+		}
+		else
+		{
+			LL_WARNS("Xfer") << "LLXfer_VFile::cleanup() can't open to delete VFS file " << mTempID << "." << LLAssetType::lookup(mType)		
+				<< ", mRemoteID is " << mRemoteID << LL_ENDL;
+		}
+	}
 
 	delete mVFile;
 	mVFile = NULL;
@@ -118,7 +130,7 @@ S32 LLXfer_VFile::initializeRequest(U64 xfer_id,
 
 	mName = llformat("VFile %s:%s", id_string.c_str(), LLAssetType::lookup(mType));
 
-	LL_INFOS() << "Requesting " << mName << LL_ENDL;
+	LL_INFOS("Xfer") << "Requesting " << mName << LL_ENDL;
 
 	if (mBuffer)
 	{
@@ -131,6 +143,7 @@ S32 LLXfer_VFile::initializeRequest(U64 xfer_id,
 	mBufferLength = 0;
 	mPacketNum = 0;
 	mTempID.generate();
+	mDeleteTempFile = TRUE;
  	mStatus = e_LL_XFER_PENDING;
 	return retval;
 }
@@ -140,7 +153,8 @@ S32 LLXfer_VFile::initializeRequest(U64 xfer_id,
 S32 LLXfer_VFile::startDownload()
 {
  	S32 retval = 0;  // presume success
-	LLVFile file(mVFS, mTempID, mType, LLVFile::APPEND);
+
+	// Don't need to create the file here, it will happen when data arrives
 
 	gMessageSystem->newMessageFast(_PREHASH_RequestXfer);
 	gMessageSystem->nextBlockFast(_PREHASH_XferID);
@@ -184,6 +198,8 @@ S32 LLXfer_VFile::startSend (U64 xfer_id, const LLHost &remote_host)
 
 		if (mVFile->getSize() <= 0)
 		{
+			LL_WARNS("Xfer") << "LLXfer_VFile::startSend() VFS file " << mLocalID << "." << LLAssetType::lookup(mType)		
+				<< " has unexpected file size of " << mVFile->getSize() << LL_ENDL;
 			delete mVFile;
 			mVFile = NULL;
 
@@ -198,6 +214,7 @@ S32 LLXfer_VFile::startSend (U64 xfer_id, const LLHost &remote_host)
 	}
 	else
 	{
+		LL_WARNS("Xfer") << "LLXfer_VFile::startSend() can't read VFS file " << mLocalID << "." << LLAssetType::lookup(mType) << LL_ENDL;
 		retval = LL_ERR_FILE_NOT_FOUND;
 	}
 
@@ -223,8 +240,11 @@ S32 LLXfer_VFile::reopenFileHandle()
 
 	if (mVFile == NULL)
 	{
-		mVFile =new LLVFile(mVFS, mLocalID, mType, LLVFile::READ);
-		if (mVFile == NULL)
+		if (mVFS->getExists(mLocalID, mType))
+		{
+			mVFile = new LLVFile(mVFS, mLocalID, mType, LLVFile::READ);
+		}
+		else
 		{
 			LL_WARNS("Xfer") << "LLXfer_VFile::reopenFileHandle() can't read VFS file " << mLocalID << "." << LLAssetType::lookup(mType) << LL_ENDL;
 			retval = LL_ERR_FILE_NOT_FOUND;
@@ -268,8 +288,8 @@ S32 LLXfer_VFile::suck(S32 start_position)
 		// grab a buffer from the right place in the file
 		if (! mVFile->seek(start_position, 0))
 		{
-			LL_WARNS() << "VFile Xfer Can't seek to position " << start_position << ", file length " << mVFile->getSize() << LL_ENDL;
-			LL_WARNS() << "While sending file " << mLocalID << LL_ENDL;
+			LL_WARNS("Xfer") << "VFile Xfer Can't seek to position " << start_position << ", file length " << mVFile->getSize() << LL_ENDL;
+			LL_WARNS("Xfer") << "While sending file " << mLocalID << LL_ENDL;
 			return -1;
 		}
 		
@@ -320,12 +340,31 @@ S32 LLXfer_VFile::processEOF()
 
 	if (!mCallbackResult)
 	{
-		LLVFile file(mVFS, mTempID, mType, LLVFile::WRITE);
-		if (! file.rename(mLocalID, mType))
+		if (mVFS->getExists(mTempID, mType))
 		{
-			LL_INFOS() << "copy from temp file failed: unable to rename to " << mLocalID << LL_ENDL;
+			LLVFile file(mVFS, mTempID, mType, LLVFile::WRITE);
+			if (!file.rename(mLocalID, mType))
+			{
+				LL_WARNS("Xfer") << "VFS rename of temp file failed: unable to rename " << mTempID << " to " << mLocalID << LL_ENDL;
+			}
+			else
+			{					
+				#ifdef VFS_SPAM
+				// Debugging spam
+				LL_INFOS("Xfer") << "VFS rename of temp file done: renamed " << mTempID << " to " << mLocalID 
+					<< " LLVFile size is " << file.getSize()
+					<< LL_ENDL;
+				#endif				
+				
+				// Rename worked: the original file is gone.   Clear mDeleteTempFile
+				// so we don't attempt to delete the file in cleanup()
+				mDeleteTempFile = FALSE;
+			}
+		}
+		else
+		{
+			LL_WARNS("Xfer") << "LLXfer_VFile::processEOF() can't open for renaming VFS file " << mTempID << "." << LLAssetType::lookup(mType) << LL_ENDL;
 		}
-
 	}
 
 	if (mVFile)
@@ -367,4 +406,4 @@ std::string LLXfer_VFile::getFileName()
 U32 LLXfer_VFile::getXferTypeTag()
 {
 	return LLXfer::XFER_VFILE;
-}
+}
\ No newline at end of file
diff --git a/indra/llmessage/llxfer_vfile.h b/indra/llmessage/llxfer_vfile.h
index b606c0812212c0b5a9c2c4e4475c2cce4f3a8403..5bf9a5cfba7a6eb84b4909ef03bc67ecf2f53489 100644
--- a/indra/llmessage/llxfer_vfile.h
+++ b/indra/llmessage/llxfer_vfile.h
@@ -47,6 +47,8 @@ class LLXfer_VFile : public LLXfer
 
 	std::string mName;
 
+	BOOL	mDeleteTempFile;
+
  public:
 	LLXfer_VFile ();
 	LLXfer_VFile (LLVFS *vfs, const LLUUID &local_id, LLAssetType::EType type);
diff --git a/indra/llmessage/llxfermanager.cpp b/indra/llmessage/llxfermanager.cpp
index 38ba4b162459d4325395ed2ca21be07fe5a74ca7..4cea886c8a21161a3cf6a57d6d354b031a07951e 100644
--- a/indra/llmessage/llxfermanager.cpp
+++ b/indra/llmessage/llxfermanager.cpp
@@ -44,11 +44,15 @@ const S32 LL_PACKET_RETRY_LIMIT = 10;            // packet retransmission limit
 const S32 LL_DEFAULT_MAX_SIMULTANEOUS_XFERS = 10;
 const S32 LL_DEFAULT_MAX_REQUEST_FIFO_XFERS = 1000;
 
-const S32 LL_DEFAULT_MAX_HARD_LIMIT_SIMULTANEOUS_XFERS = 500;
+// Kills the connection if a viewer download queue hits this many requests backed up
+// Also set in simulator.xml at "hard_limit_outgoing_xfers_per_circuit"
+const S32 LL_DEFAULT_MAX_HARD_LIMIT_SIMULTANEOUS_XFERS = 500;	
 
-#define LL_XFER_PROGRESS_MESSAGES 0
-#define LL_XFER_TEST_REXMIT       0
+// Use this to show sending some ConfirmXferPacket messages
+//#define LL_XFER_PROGRESS_MESSAGES 1
 
+// Use this for lots of diagnostic spam
+//#define LL_XFER_DIAGNOISTIC_LOGGING 1
 
 ///////////////////////////////////////////////////////////
 
@@ -132,6 +136,11 @@ void LLXferManager::setAckThrottleBPS(const F32 bps)
 	F32 actual_rate = llmax(min_bps*1.1f, bps);
 	LL_DEBUGS("AppInit") << "LLXferManager ack throttle min rate: " << min_bps << LL_ENDL;
 	LL_DEBUGS("AppInit") << "LLXferManager ack throttle actual rate: " << actual_rate << LL_ENDL;
+	#ifdef LL_XFER_DIAGNOISTIC_LOGGING
+	LL_INFOS("Xfer") << "LLXferManager ack throttle min rate: " << min_bps << LL_ENDL;
+	LL_INFOS("Xfer") << "LLXferManager ack throttle actual rate: " << actual_rate << LL_ENDL;
+	#endif // LL_XFER_DIAGNOISTIC_LOGGING
+
 	mAckThrottle.setRate(actual_rate);
 }
 
@@ -140,9 +149,11 @@ void LLXferManager::setAckThrottleBPS(const F32 bps)
 
 void LLXferManager::updateHostStatus()
 {
+	// Clear the outgoing host list
 	for_each(mOutgoingHosts.begin(), mOutgoingHosts.end(), DeletePointer());
 	mOutgoingHosts.clear();
-
+	
+	// Loop through all outgoing xfers and re-build mOutgoingHosts
 	for (xfer_list_t::iterator send_iter = mSendList.begin();
 			send_iter != mSendList.end(); ++send_iter)
 	{
@@ -151,13 +162,13 @@ void LLXferManager::updateHostStatus()
 			 iter != mOutgoingHosts.end(); ++iter)
 		{
 			if ((*iter)->mHost == (*send_iter)->mRemoteHost)
-			{
+			{	// Already have this host
 				host_statusp = *iter;
 				break;
 			}
 		}
 		if (!host_statusp)
-		{
+		{	// Don't have this host, so add it
 			host_statusp = new LLHostStatus();
 			if (host_statusp)
 			{
@@ -166,7 +177,7 @@ void LLXferManager::updateHostStatus()
 			}
 		}
 		if (host_statusp)
-		{
+		{	// Do the accounting
 			if ((*send_iter)->mStatus == e_LL_XFER_PENDING)
 			{
 				host_statusp->mNumPending++;
@@ -176,7 +187,33 @@ void LLXferManager::updateHostStatus()
 				host_statusp->mNumActive++;
 			}
 		}
+	}	
+
+#ifdef LL_XFER_DIAGNOISTIC_LOGGING
+	for (xfer_list_t::iterator send_iter = mSendList.begin();
+			send_iter != mSendList.end(); ++send_iter)
+	{
+		LLXfer * xferp = *send_iter;
+		LL_INFOS("Xfer") << "xfer to host " << xferp->mRemoteHost
+			<< " is " << xferp->mXferSize << " bytes"
+			<< ", status " << (S32)(xferp->mStatus)
+			<< ", waiting for ACK: " << (S32)(xferp->mWaitingForACK)
+			<< " in frame " << (S32) LLFrameTimer::getFrameCount()
+			<< LL_ENDL;
 	}
+
+	for (status_list_t::iterator iter = mOutgoingHosts.begin();
+		 iter != mOutgoingHosts.end(); ++iter)
+	{
+		LL_INFOS("Xfer") << "LLXfer host " << (*iter)->mHost.getIPandPort() 
+			<< " has " << (*iter)->mNumActive
+			<< " active, " << (*iter)->mNumPending
+			<< " pending" 
+			<< " in frame " << (S32) LLFrameTimer::getFrameCount()
+			<< LL_ENDL;
+	}
+#endif // LL_XFER_DIAGNOISTIC_LOGGING
+
 }
 
 ///////////////////////////////////////////////////////////
@@ -186,20 +223,20 @@ void LLXferManager::printHostStatus()
 	LLHostStatus *host_statusp = NULL;
 	if (!mOutgoingHosts.empty())
 	{
-		LL_INFOS() << "Outgoing Xfers:" << LL_ENDL;
+		LL_INFOS("Xfer") << "Outgoing Xfers:" << LL_ENDL;
 
 		for (status_list_t::iterator iter = mOutgoingHosts.begin();
 			 iter != mOutgoingHosts.end(); ++iter)
 		{
 			host_statusp = *iter;
-			LL_INFOS() << "    " << host_statusp->mHost << "  active: " << host_statusp->mNumActive << "  pending: " << host_statusp->mNumPending << LL_ENDL;
+			LL_INFOS("Xfer") << "    " << host_statusp->mHost << "  active: " << host_statusp->mNumActive << "  pending: " << host_statusp->mNumPending << LL_ENDL;
 		}
 	}	
 }
 
 ///////////////////////////////////////////////////////////
 
-LLXfer *LLXferManager::findXfer(U64 id, xfer_list_t & xfer_list)
+LLXfer * LLXferManager::findXferByID(U64 id, xfer_list_t & xfer_list)
 {
 	for (xfer_list_t::iterator iter = xfer_list.begin();
 		 iter != xfer_list.end();
@@ -216,6 +253,7 @@ LLXfer *LLXferManager::findXfer(U64 id, xfer_list_t & xfer_list)
 
 ///////////////////////////////////////////////////////////
 
+// WARNING:  this invalidates iterators from xfer_list
 void LLXferManager::removeXfer(LLXfer *delp, xfer_list_t & xfer_list)
 {
 	if (delp)
@@ -223,8 +261,7 @@ void LLXferManager::removeXfer(LLXfer *delp, xfer_list_t & xfer_list)
 		std::string direction = "send";
 		if (&xfer_list == &mReceiveList)
 		{
-			std::string direction = "receive";
-			xfer_list = mSendList;
+			direction = "receive";
 		}
 
 		// This assumes that delp will occur in the list once at most
@@ -251,23 +288,6 @@ void LLXferManager::removeXfer(LLXfer *delp, xfer_list_t & xfer_list)
 
 ///////////////////////////////////////////////////////////
 
-U32 LLXferManager::numActiveListEntries(LLXfer *list_head)
-{
-	U32 num_entries = 0;
-
-	while (list_head)
-	{
-		if (list_head->mStatus == e_LL_XFER_IN_PROGRESS) 
-		{
-			num_entries++;
-		}
-		list_head = list_head->mNext;
-	}
-	return(num_entries);
-}
-
-///////////////////////////////////////////////////////////
-
 LLHostStatus * LLXferManager::findHostStatus(const LLHost &host)
 {
 	LLHostStatus *host_statusp = NULL;
@@ -386,6 +406,7 @@ U64 LLXferManager::requestFile(const std::string& local_filename,
 {
 	LLXfer_File* file_xfer_p = NULL;
 
+	// First check to see if it's already requested
 	for (xfer_list_t::iterator iter = mReceiveList.begin();
 			iter != mReceiveList.end(); ++iter)
 	{
@@ -416,14 +437,13 @@ U64 LLXferManager::requestFile(const std::string& local_filename,
 		// around.
 		// Note: according to AaronB, this is here to deal with locks on files that were
 		// in transit during a crash,
-		if( delete_remote_on_completion
-			&& (remote_filename.substr(remote_filename.length()-4) == ".tmp")
-			&& gDirUtilp->fileExists(local_filename))
+		if(delete_remote_on_completion &&
+		   (remote_filename.substr(remote_filename.length()-4) == ".tmp"))
 		{
 			LLFile::remove(local_filename, ENOENT);
 		}
 		xfer_id = getNextID();
-		((LLXfer_File *)file_xfer_p)->initializeRequest(
+		file_xfer_p->initializeRequest(
 			xfer_id,
 			local_filename,
 			remote_filename,
@@ -435,39 +455,11 @@ U64 LLXferManager::requestFile(const std::string& local_filename,
 	}
 	else
 	{
-		LL_ERRS() << "Xfer allocation error" << LL_ENDL;
+		LL_ERRS("Xfer") << "Xfer allocation error" << LL_ENDL;
 	}
 	return xfer_id;
 }
 
-void LLXferManager::requestFile(const std::string& remote_filename,
-								ELLPath remote_path,
-								const LLHost& remote_host,
-								BOOL delete_remote_on_completion,
-								void (*callback)(void*,S32,void**,S32,LLExtStat),
-								void** user_data,
-								BOOL is_priority)
-{
-	LLXfer *xferp;
-
-	xferp = (LLXfer *) new LLXfer_Mem();
-	if (xferp)
-	{
-		addToList(xferp, mReceiveList, is_priority);
-		((LLXfer_Mem *)xferp)->initializeRequest(getNextID(),
-												 remote_filename, 
-												 remote_path,
-												 remote_host,
-												 delete_remote_on_completion,
-												 callback, user_data);
-		startPendingDownloads();
-	}
-	else
-	{
-		LL_ERRS() << "Xfer allocation error" << LL_ENDL;
-	}
-}
-
 void LLXferManager::requestVFile(const LLUUID& local_id,
 								 const LLUUID& remote_id,
 								 LLAssetType::EType type, LLVFS* vfs,
@@ -480,7 +472,7 @@ void LLXferManager::requestVFile(const LLUUID& local_id,
 
 	for (xfer_list_t::iterator iter = mReceiveList.begin();
 			iter != mReceiveList.end(); ++iter)
-	{
+	{	// Find any matching existing requests
 		if ((*iter)->getXferTypeTag() == LLXfer::XFER_VFILE)
 		{
 			xfer_p = (LLXfer_VFile*) (*iter);
@@ -490,8 +482,14 @@ void LLXferManager::requestVFile(const LLUUID& local_id,
 				&& (callback == xfer_p->mCallback)
 				&& (user_data == xfer_p->mCallbackDataHandle))
 
-			{
-				// Have match, already in progress, don't add a duplicate
+			{	// Have match, don't add a duplicate
+				#ifdef LL_XFER_DIAGNOISTIC_LOGGING
+				LL_INFOS("Xfer") << "Dropping duplicate xfer request for " << remote_id
+					<< " on " << remote_host.getIPandPort()
+					<< " local id " << local_id
+					<< LL_ENDL;
+				#endif	// LL_XFER_DIAGNOISTIC_LOGGING
+
 				return;
 			}
 		}
@@ -500,6 +498,14 @@ void LLXferManager::requestVFile(const LLUUID& local_id,
 	xfer_p = new LLXfer_VFile();
 	if (xfer_p)
 	{
+		#ifdef LL_XFER_DIAGNOISTIC_LOGGING
+		LL_INFOS("Xfer") << "Starting file xfer for " << remote_id
+			<< " type " << LLAssetType::lookupHumanReadable(type)
+			<< " from " << xfer_p->mRemoteHost.getIPandPort()
+			<< ", local id " << local_id
+			<< LL_ENDL;
+		#endif	// LL_XFER_DIAGNOISTIC_LOGGING
+
 		addToList(xfer_p, mReceiveList, is_priority);
 		((LLXfer_VFile *)xfer_p)->initializeRequest(getNextID(),
 			vfs,
@@ -513,78 +519,18 @@ void LLXferManager::requestVFile(const LLUUID& local_id,
 	}
 	else
 	{
-		LL_ERRS() << "Xfer allocation error" << LL_ENDL;
-	}
-
-}
-
-/*
-void LLXferManager::requestXfer(
-								const std::string& local_filename, 
-								BOOL delete_remote_on_completion,
-								U64 xfer_id, 
-								const LLHost &remote_host, 
-								void (*callback)(void **,S32),
-								void **user_data)
-{
-	LLXfer *xferp;
-
-	for (xferp = mReceiveList; xferp ; xferp = xferp->mNext)
-	{
-		if (xferp->getXferTypeTag() == LLXfer::XFER_FILE
-			&& (((LLXfer_File*)xferp)->matchesLocalFilename(local_filename))
-			&& (xfer_id == xferp->mID)
-			&& (remote_host == xferp->mRemoteHost)
-			&& (callback == xferp->mCallback)
-			&& (user_data == xferp->mCallbackDataHandle))
-
-		{
-			// cout << "requested a xfer already in progress" << endl;
-			return;
-		}
+		LL_ERRS("Xfer") << "Xfer allocation error" << LL_ENDL;
 	}
 
-	xferp = (LLXfer *) new LLXfer_File();
-	if (xferp)
-	{
-		xferp->mNext = mReceiveList;
-		mReceiveList = xferp;
-
-		((LLXfer_File *)xferp)->initializeRequest(xfer_id,local_filename,"",LL_PATH_NONE,remote_host,delete_remote_on_completion,callback,user_data);
-		startPendingDownloads();
-	}
-	else
-	{
-		LL_ERRS() << "Xfer allcoation error" << LL_ENDL;
-	}
 }
 
-void LLXferManager::requestXfer(U64 xfer_id, const LLHost &remote_host, BOOL delete_remote_on_completion, void (*callback)(void *,S32,void **,S32),void **user_data)
-{
-	LLXfer *xferp;
-
-	xferp = (LLXfer *) new LLXfer_Mem();
-	if (xferp)
-	{
-		xferp->mNext = mReceiveList;
-		mReceiveList = xferp;
-
-		((LLXfer_Mem *)xferp)->initializeRequest(xfer_id,"",LL_PATH_NONE,remote_host,delete_remote_on_completion,callback,user_data);
-		startPendingDownloads();
-	}
-	else
-	{
-		LL_ERRS() << "Xfer allcoation error" << LL_ENDL;
-	}
-}
-*/
 ///////////////////////////////////////////////////////////
 
 void LLXferManager::processReceiveData (LLMessageSystem *mesgsys, void ** /*user_data*/)
 {
 	// there's sometimes an extra 4 bytes added to an xfer payload
 	const S32 BUF_SIZE = LL_XFER_LARGE_PAYLOAD + 4;
-	char fdata_buf[LL_XFER_LARGE_PAYLOAD + 4];		/* Flawfinder : ignore */
+	char fdata_buf[BUF_SIZE];		/* Flawfinder : ignore */
 	S32 fdata_size;
 	U64 id;
 	S32 packetnum;
@@ -594,14 +540,24 @@ void LLXferManager::processReceiveData (LLMessageSystem *mesgsys, void ** /*user
 	mesgsys->getS32Fast(_PREHASH_XferID, _PREHASH_Packet, packetnum);
 
 	fdata_size = mesgsys->getSizeFast(_PREHASH_DataPacket,_PREHASH_Data);
-	mesgsys->getBinaryDataFast(_PREHASH_DataPacket, _PREHASH_Data, fdata_buf, 0, 0, BUF_SIZE);
-
-	xferp = findXfer(id, mReceiveList);
+	if (fdata_size < 0 ||
+		fdata_size > BUF_SIZE)
+	{
+		char U64_BUF[MAX_STRING];		/* Flawfinder : ignore */
+		LL_WARNS("Xfer") << "Received invalid xfer data size of " << fdata_size
+			<< " in packet number " << packetnum 
+			<< " from " << mesgsys->getSender()
+			<< " for xfer id: " << U64_to_str(id, U64_BUF, sizeof(U64_BUF)) 
+			<< LL_ENDL;
+		return;
+	}
+	mesgsys->getBinaryDataFast(_PREHASH_DataPacket, _PREHASH_Data, fdata_buf, fdata_size, 0, BUF_SIZE);
 
-	if (!xferp) 
+	xferp = findXferByID(id, mReceiveList);
+	if (!xferp)
 	{
 		char U64_BUF[MAX_STRING];		/* Flawfinder : ignore */
-		LL_INFOS() << "received xfer data from " << mesgsys->getSender()
+		LL_WARNS("Xfer") << "received xfer data from " << mesgsys->getSender()
 			<< " for non-existent xfer id: "
 			<< U64_to_str(id, U64_BUF, sizeof(U64_BUF)) << LL_ENDL;
 		return;
@@ -614,11 +570,11 @@ void LLXferManager::processReceiveData (LLMessageSystem *mesgsys, void ** /*user
 		// confirm it if it was a resend of the last one, since the confirmation might have gotten dropped
 		if (decodePacketNum(packetnum) == (xferp->mPacketNum - 1))
 		{
-			LL_INFOS() << "Reconfirming xfer " << xferp->mRemoteHost << ":" << xferp->getFileName() << " packet " << packetnum << LL_ENDL; 			sendConfirmPacket(mesgsys, id, decodePacketNum(packetnum), mesgsys->getSender());
+			LL_INFOS("Xfer") << "Reconfirming xfer " << xferp->mRemoteHost << ":" << xferp->getFileName() << " packet " << packetnum << LL_ENDL; 			sendConfirmPacket(mesgsys, id, decodePacketNum(packetnum), mesgsys->getSender());
 		}
 		else
 		{
-			LL_INFOS() << "Ignoring xfer " << xferp->mRemoteHost << ":" << xferp->getFileName() << " recv'd packet " << packetnum << "; expecting " << xferp->mPacketNum << LL_ENDL;
+			LL_INFOS("Xfer") << "Ignoring xfer " << xferp->mRemoteHost << ":" << xferp->getFileName() << " recv'd packet " << packetnum << "; expecting " << xferp->mPacketNum << LL_ENDL;
 		}
 		return;		
 	}
@@ -677,7 +633,7 @@ void LLXferManager::processReceiveData (LLMessageSystem *mesgsys, void ** /*user
 
 void LLXferManager::sendConfirmPacket (LLMessageSystem *mesgsys, U64 id, S32 packetnum, const LLHost &remote_host)
 {
-#if LL_XFER_PROGRESS_MESSAGES
+#ifdef LL_XFER_PROGRESS_MESSAGES
 	if (!(packetnum % 50))
 	{
 		cout << "confirming xfer packet #" << packetnum << endl;
@@ -727,6 +683,28 @@ bool LLXferManager::validateFileForTransfer(const std::string& filename)
 	return find_and_remove(mExpectedTransfers, filename);
 }
 
+/* Present in fireengine, not used by viewer
+void LLXferManager::expectVFileForRequest(const std::string& filename)
+{
+	mExpectedVFileRequests.insert(filename);
+}
+
+bool LLXferManager::validateVFileForRequest(const std::string& filename)
+{
+	return find_and_remove(mExpectedVFileRequests, filename);
+}
+
+void LLXferManager::expectVFileForTransfer(const std::string& filename)
+{
+	mExpectedVFileTransfers.insert(filename);
+}
+
+bool LLXferManager::validateVFileForTransfer(const std::string& filename)
+{
+	return find_and_remove(mExpectedVFileTransfers, filename);
+}
+*/
+
 static bool remove_prefix(std::string& filename, const std::string& prefix)
 {
 	if (std::equal(prefix.begin(), prefix.end(), filename.begin()))
@@ -788,7 +766,7 @@ void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user
 	
 	mesgsys->getU64Fast(_PREHASH_XferID, _PREHASH_ID, id);
 	char U64_BUF[MAX_STRING];		/* Flawfinder : ignore */
-	LL_INFOS() << "xfer request id: " << U64_to_str(id, U64_BUF, sizeof(U64_BUF))
+	LL_INFOS("Xfer") << "xfer request id: " << U64_to_str(id, U64_BUF, sizeof(U64_BUF))
 		   << " to " << mesgsys->getSender() << LL_ENDL;
 
 	mesgsys->getStringFast(_PREHASH_XferID, _PREHASH_Filename, local_filename);
@@ -809,19 +787,29 @@ void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user
 	{	// Request for an asset - use a VFS file
 		if(NULL == LLAssetType::lookup(type))
 		{
-			LL_WARNS() << "Invalid type for xfer request: " << uuid << ":"
+			LL_WARNS("Xfer") << "Invalid type for xfer request: " << uuid << ":"
 					<< type_s16 << " to " << mesgsys->getSender() << LL_ENDL;
 			return;
 		}
 			
-		LL_INFOS() << "starting vfile transfer: " << uuid << "," << LLAssetType::lookup(type) << " to " << mesgsys->getSender() << LL_ENDL;
-
 		if (! mVFS)
 		{
-			LL_WARNS() << "Attempt to send VFile w/o available VFS" << LL_ENDL;
+			LL_WARNS("Xfer") << "Attempt to send VFile w/o available VFS" << LL_ENDL;
 			return;
 		}
 
+		/* Present in fireengine, not used by viewer
+		if (!validateVFileForTransfer(uuid.asString()))
+		{
+			// it is up to the app sending the file to mark it for expected 
+			// transfer before the request arrives or it will be dropped
+			LL_WARNS("Xfer") << "SECURITY: Unapproved VFile '" << uuid << "'" << LL_ENDL;
+			return;
+		}
+		*/
+
+		LL_INFOS("Xfer") << "starting vfile transfer: " << uuid << "," << LLAssetType::lookup(type) << " to " << mesgsys->getSender() << LL_ENDL;
+
 		xferp = (LLXfer *)new LLXfer_VFile(mVFS, uuid, type);
 		if (xferp)
 		{
@@ -830,7 +818,7 @@ void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user
 		}
 		else
 		{
-			LL_ERRS() << "Xfer allcoation error" << LL_ENDL;
+			LL_ERRS("Xfer") << "Xfer allcoation error" << LL_ENDL;
 		}
 	}
 	else if (!local_filename.empty())
@@ -853,7 +841,7 @@ void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user
 			case LL_PATH_NONE:
 				if(!validateFileForTransfer(local_filename))
 				{
-					LL_WARNS() << "SECURITY: Unapproved filename '" << local_filename << LL_ENDL;
+					LL_WARNS("Xfer") << "SECURITY: Unapproved filename '" << local_filename << LL_ENDL;
 					return;
 				}
 				break;
@@ -861,13 +849,13 @@ void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user
 			case LL_PATH_CACHE:
 				if(!verify_cache_filename(local_filename))
 				{
-					LL_WARNS() << "SECURITY: Illegal cache filename '" << local_filename << LL_ENDL;
+					LL_WARNS("Xfer") << "SECURITY: Illegal cache filename '" << local_filename << LL_ENDL;
 					return;
 				}
 				break;
 
 			default:
-				LL_WARNS() << "SECURITY: Restricted file dir enum: " << (U32)local_path << LL_ENDL;
+				LL_WARNS("Xfer") << "SECURITY: Restricted file dir enum: " << (U32)local_path << LL_ENDL;
 				return;
 		}
 
@@ -882,7 +870,7 @@ void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user
 		{
 			expanded_filename = local_filename;
 		}
-		LL_INFOS() << "starting file transfer: " <<  expanded_filename << " to " << mesgsys->getSender() << LL_ENDL;
+		LL_INFOS("Xfer") << "starting file transfer: " <<  expanded_filename << " to " << mesgsys->getSender() << LL_ENDL;
 
 		BOOL delete_local_on_completion = FALSE;
 		mesgsys->getBOOL("XferID", "DeleteOnCompletion", delete_local_on_completion);
@@ -897,17 +885,17 @@ void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user
 		}
 		else
 		{
-			LL_ERRS() << "Xfer allcoation error" << LL_ENDL;
+			LL_ERRS("Xfer") << "Xfer allcoation error" << LL_ENDL;
 		}
 	}
 	else
 	{	// no uuid or filename - use the ID sent
 		char U64_BUF[MAX_STRING];		/* Flawfinder : ignore */
-		LL_INFOS() << "starting memory transfer: "
+		LL_INFOS("Xfer") << "starting memory transfer: "
 			<< U64_to_str(id, U64_BUF, sizeof(U64_BUF)) << " to "
 			<< mesgsys->getSender() << LL_ENDL;
 
-		xferp = findXfer(id, mSendList);
+		xferp = findXferByID(id, mSendList);
 		
 		if (xferp)
 		{
@@ -915,7 +903,7 @@ void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user
 		}
 		else
 		{
-			LL_INFOS() << "Warning: " << U64_BUF << " not found." << LL_ENDL;
+			LL_INFOS("Xfer") << "Warning: xfer ID " << U64_BUF << " not found." << LL_ENDL;
 			result = LL_ERR_FILE_NOT_FOUND;
 		}
 	}
@@ -929,7 +917,7 @@ void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user
 		}
 		else // can happen with a memory transfer not found
 		{
-			LL_INFOS() << "Aborting xfer to " << mesgsys->getSender() << " with error: " << result << LL_ENDL;
+			LL_INFOS("Xfer") << "Aborting xfer to " << mesgsys->getSender() << " with error: " << result << LL_ENDL;
 
 			mesgsys->newMessageFast(_PREHASH_AbortXfer);
 			mesgsys->nextBlockFast(_PREHASH_XferID);
@@ -1032,7 +1020,7 @@ void LLXferManager::processConfirmation (LLMessageSystem *mesgsys, void ** /*use
 	mesgsys->getU64Fast(_PREHASH_XferID, _PREHASH_ID, id);
 	mesgsys->getS32Fast(_PREHASH_XferID, _PREHASH_Packet, packetNum);
 
-	LLXfer* xferp = findXfer(id, mSendList);
+	LLXfer* xferp = findXferByID(id, mSendList);
 	if (xferp)
 	{
 //		cout << "confirmed packet #" << packetNum << " ping: "<< xferp->ACKTimer.getElapsedTimeF32() <<  endl;
@@ -1050,6 +1038,7 @@ void LLXferManager::processConfirmation (LLMessageSystem *mesgsys, void ** /*use
 
 ///////////////////////////////////////////////////////////
 
+// Called from LLMessageSystem::processAcks()
 void LLXferManager::retransmitUnackedPackets()
 {
 	LLXfer *xferp;
@@ -1078,6 +1067,7 @@ void LLXferManager::retransmitUnackedPackets()
 		++iter;
 	}
 
+	// Re-build mOutgoingHosts data
 	updateHostStatus();
 
 	F32 et;
@@ -1089,7 +1079,7 @@ void LLXferManager::retransmitUnackedPackets()
 		{
 			if (xferp->mRetries > LL_PACKET_RETRY_LIMIT)
 			{
-				LL_INFOS() << "dropping xfer " << xferp->mRemoteHost << ":" << xferp->getFileName() << " packet retransmit limit exceeded, xfer dropped" << LL_ENDL;
+				LL_INFOS("Xfer") << "dropping xfer " << xferp->mRemoteHost << ":" << xferp->getFileName() << " packet retransmit limit exceeded, xfer dropped" << LL_ENDL;
 				xferp->abort(LL_ERR_TCP_TIMEOUT);
 				iter = mSendList.erase(iter);
 				delete xferp;
@@ -1097,13 +1087,13 @@ void LLXferManager::retransmitUnackedPackets()
 			}
 			else
 			{
-				LL_INFOS() << "resending xfer " << xferp->mRemoteHost << ":" << xferp->getFileName() << " packet unconfirmed after: "<< et << " sec, packet " << xferp->mPacketNum << LL_ENDL;
+				LL_INFOS("Xfer") << "resending xfer " << xferp->mRemoteHost << ":" << xferp->getFileName() << " packet unconfirmed after: "<< et << " sec, packet " << xferp->mPacketNum << LL_ENDL;
 				xferp->resendLastPacket();
 			}
 		}
 		else if ((xferp->mStatus == e_LL_XFER_REGISTERED) && ( (et = xferp->ACKTimer.getElapsedTimeF32()) > LL_XFER_REGISTRATION_TIMEOUT))
 		{
-			LL_INFOS() << "registered xfer never requested, xfer dropped" << LL_ENDL;
+			LL_INFOS("Xfer") << "registered xfer never requested, xfer dropped" << LL_ENDL;
 			xferp->abort(LL_ERR_TCP_TIMEOUT);
 			iter = mSendList.erase(iter);
 			delete xferp;
@@ -1111,14 +1101,14 @@ void LLXferManager::retransmitUnackedPackets()
 		}
 		else if (xferp->mStatus == e_LL_XFER_ABORTED)
 		{
-			LL_WARNS() << "Removing aborted xfer " << xferp->mRemoteHost << ":" << xferp->getFileName() << LL_ENDL;
+			LL_WARNS("Xfer") << "Removing aborted xfer " << xferp->mRemoteHost << ":" << xferp->getFileName() << LL_ENDL;
 			iter = mSendList.erase(iter);
 			delete xferp;
 			continue;
 		}
 		else if (xferp->mStatus == e_LL_XFER_PENDING)
 		{
-//			LL_INFOS() << "*** numActiveXfers = " << numActiveXfers(xferp->mRemoteHost) << "        mMaxOutgoingXfersPerCircuit = " << mMaxOutgoingXfersPerCircuit << LL_ENDL;   
+//			LL_INFOS("Xfer") << "*** numActiveXfers = " << numActiveXfers(xferp->mRemoteHost) << "        mMaxOutgoingXfersPerCircuit = " << mMaxOutgoingXfersPerCircuit << LL_ENDL;   
 			if (numActiveXfers(xferp->mRemoteHost) < mMaxOutgoingXfersPerCircuit)
 			{
 				if (xferp->reopenFileHandle())
@@ -1152,10 +1142,10 @@ void LLXferManager::retransmitUnackedPackets()
 		{
 			break;
 		}
-		//LL_INFOS() << "Confirm packet queue length:" << mXferAckQueue.size() << LL_ENDL;
+		//LL_INFOS("Xfer") << "Confirm packet queue length:" << mXferAckQueue.size() << LL_ENDL;
 		LLXferAckInfo ack_info = mXferAckQueue.front();
 		mXferAckQueue.pop_front();
-		//LL_INFOS() << "Sending confirm packet" << LL_ENDL;
+		//LL_INFOS("Xfer") << "Sending confirm packet" << LL_ENDL;
 		sendConfirmPacket(gMessageSystem, ack_info.mID, ack_info.mPacketNum, ack_info.mRemoteHost);
 		mAckThrottle.throttleOverflow(1000.f*8.f); // Assume 1000 bytes/packet
 	}
@@ -1165,7 +1155,7 @@ void LLXferManager::retransmitUnackedPackets()
 
 void LLXferManager::abortRequestById(U64 xfer_id, S32 result_code)
 {
-	LLXfer * xferp = findXfer(xfer_id, mReceiveList);
+	LLXfer * xferp = findXferByID(xfer_id, mReceiveList);
 	if (xferp)
 	{
 		if (xferp->mStatus == e_LL_XFER_IN_PROGRESS)
@@ -1196,7 +1186,7 @@ void LLXferManager::processAbort (LLMessageSystem *mesgsys, void ** /*user_data*
 	mesgsys->getU64Fast(_PREHASH_XferID, _PREHASH_ID, id);
 	mesgsys->getS32Fast(_PREHASH_XferID, _PREHASH_Result, result_code);
 
-	xferp = findXfer(id, mReceiveList);
+	xferp = findXferByID(id, mReceiveList);
 	if (xferp)
 	{
 		xferp->mCallbackResult = result_code;
@@ -1227,19 +1217,19 @@ void LLXferManager::startPendingDownloads()
 	{
 		xferp = (*iter);
 		if(xferp->mStatus == e_LL_XFER_PENDING)
-		{
+		{	// Count and accumulate pending downloads
 			++pending_count;
 			pending_downloads.push_front(xferp);
 		}
 		else if(xferp->mStatus == e_LL_XFER_IN_PROGRESS)
-		{
+		{	// Count downloads in progress
 			++download_count;
 		}
 	}
 
 	S32 start_count = mMaxIncomingXfers - download_count;
 
-	LL_DEBUGS() << "LLXferManager::startPendingDownloads() - XFER_IN_PROGRESS: "
+	LL_DEBUGS("Xfer") << "LLXferManager::startPendingDownloads() - XFER_IN_PROGRESS: "
 			 << download_count << " XFER_PENDING: " << pending_count
 			 << " startring " << llmin(start_count, pending_count) << LL_ENDL;
 
diff --git a/indra/llmessage/llxfermanager.h b/indra/llmessage/llxfermanager.h
index ebe8e57ee2e4ec4c505c3b97e8f9eccc0b779cba..45ae2ffdd3d6097055c9568e1891c28d4c2d42c3 100644
--- a/indra/llmessage/llxfermanager.h
+++ b/indra/llmessage/llxfermanager.h
@@ -95,19 +95,20 @@ class LLXferManager
 
 	// Linked FIFO list, add to the front and pull from back
 	typedef std::deque<LLXfer *> xfer_list_t;
-	xfer_list_t mSendList;
-	xfer_list_t mReceiveList;
+	xfer_list_t		mSendList;
+	xfer_list_t		mReceiveList;
 
 	typedef std::list<LLHostStatus*> status_list_t;
 	status_list_t mOutgoingHosts;
 
- private:
  protected:
 	// implementation methods
 	virtual void startPendingDownloads();
-	virtual void addToList(LLXfer* xferp, xfer_list_t & list, BOOL is_priority);
+	virtual void addToList(LLXfer* xferp, xfer_list_t & xfer_list, BOOL is_priority);
 	std::multiset<std::string> mExpectedTransfers; // files that are authorized to transfer out
 	std::multiset<std::string> mExpectedRequests;  // files that are authorized to be downloaded on top of
+	std::multiset<std::string> mExpectedVFileTransfers; // files that are authorized to transfer out
+	std::multiset<std::string> mExpectedVFileRequests;  // files that are authorized to be downloaded on top of
 
  public:
 	LLXferManager(LLVFS *vfs);
@@ -120,11 +121,10 @@ class LLXferManager
 	void setAckThrottleBPS(const F32 bps);
 
 // list management routines
-	virtual LLXfer *findXfer(U64 id, xfer_list_t & xfer_list);
+	virtual LLXfer *findXferByID(U64 id, xfer_list_t & xfer_list);
 	virtual void removeXfer (LLXfer *delp, xfer_list_t & xfer_list);
 
 	LLHostStatus * findHostStatus(const LLHost &host);
-	virtual U32 numActiveListEntries(LLXfer *list_head);
 	virtual S32 numActiveXfers(const LLHost &host);
 	virtual S32 numPendingXfers(const LLHost &host);
 
@@ -153,7 +153,7 @@ class LLXferManager
 							 void (*callback)(void**,S32,LLExtStat), void** user_data,
 							 BOOL is_priority = FALSE,
 							 BOOL use_big_packets = FALSE);
-
+	/*
 // .. to memory
 	virtual void requestFile(const std::string& remote_filename, 
 							 ELLPath remote_path,
@@ -162,7 +162,7 @@ class LLXferManager
 							 void (*callback)(void*, S32, void**, S32, LLExtStat),
 							 void** user_data,
 							 BOOL is_priority = FALSE);
-
+	*/
 // vfile requesting
 // .. to vfile
 	virtual void requestVFile(const LLUUID &local_id, const LLUUID& remote_id,
@@ -185,18 +185,15 @@ class LLXferManager
 	virtual void expectFileForRequest(const std::string& filename);
 	virtual bool validateFileForRequest(const std::string& filename);
 
-/*
-// xfer request (may be memory or file)
-// .. to file
-	virtual void requestXfer(const char *local_filename, U64 xfer_id, 
-							 BOOL delete_remote_on_completion,
-							 const LLHost &remote_host, void (*callback)(void **,S32),void **user_data);
-// .. to memory
-	virtual void requestXfer(U64 xfer_id, 
-							 const LLHost &remote_host, 
-							 BOOL delete_remote_on_completion,
-							 void (*callback)(void *, S32, void **, S32),void **user_data);
-*/
+	/**
+	  	Same idea but for VFiles, kept separate to avoid namespace overlap
+	*/
+	/* Present in fireengine, not used by viewer
+	virtual void expectVFileForTransfer(const std::string& filename);
+	virtual bool validateVFileForTransfer(const std::string& filename);
+	virtual void expectVFileForRequest(const std::string& filename);
+	virtual bool validateVFileForRequest(const std::string& filename);
+	*/
 
 	virtual void processReceiveData (LLMessageSystem *mesgsys, void **user_data);
 	virtual void sendConfirmPacket (LLMessageSystem *mesgsys, U64 id, S32 packetnum, const LLHost &remote_host);
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index 60056ac21dd4dc9dacf4e7bffb008122fd724388..06f8b483b2c7a6bb67baf2dd23607cb81d041ac1 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -324,6 +324,9 @@ void LLDrawPoolAlpha::render(S32 pass)
 		pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
 		pushBatches(LLRenderPass::PASS_ALPHA_INVISIBLE, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
 
+		gGL.diffuseColor4f(0, 0, 1, 1);
+		pushBatches(LLRenderPass::PASS_MATERIAL_ALPHA_MASK, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
+
 		if(shaders) 
 		{
 			gHighlightProgram.unbind();
diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp
index bd8f464acd3ccbd05bc35bd4a7fc4ffe477af0a1..bc45eb6d3aed19811d8a5d89d45fb5518e2d4db9 100644
--- a/indra/newview/llmediadataclient.cpp
+++ b/indra/newview/llmediadataclient.cpp
@@ -27,6 +27,7 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llmediadataclient.h"
+#include "llviewercontrol.h"
 
 #if LL_MSVC
 // disable boost::lexical_cast warning
@@ -718,6 +719,13 @@ bool LLObjectMediaDataClient::compareRequestScores(const Request::ptr_t &o1, con
 
 void LLObjectMediaDataClient::enqueue(Request::ptr_t request)
 {
+	static LLCachedControl<bool> audio_streaming_enabled(gSavedSettings, "AudioStreamingMedia", true);
+	if (!audio_streaming_enabled)
+	{
+		LL_DEBUGS("LLMediaDataClient") << "not queueing request when Media is disabled " << *request << LL_ENDL;
+		return;
+	}
+
 	if(request->isDead())
 	{
 		LL_DEBUGS("LLMediaDataClient") << "not queueing dead request " << *request << LL_ENDL;
@@ -978,6 +986,13 @@ const char *LLObjectMediaNavigateClient::getCapabilityName() const
 
 void LLObjectMediaNavigateClient::enqueue(Request::ptr_t request)
 {
+	static LLCachedControl<bool> audio_streaming_enabled(gSavedSettings, "AudioStreamingMedia", true);
+	if (!audio_streaming_enabled)
+	{
+		LL_DEBUGS("LLMediaDataClient") << "not queueing request when Media is disabled " << *request << LL_ENDL;
+		return;
+	}
+
 	if(request->isDead())
 	{
 		LL_DEBUGS("LLMediaDataClient") << "not queuing dead request " << *request << LL_ENDL;
diff --git a/indra/newview/lltoolselect.cpp b/indra/newview/lltoolselect.cpp
index 0ff05479f1014ef3b2fd325d74ace5b5d390bd03..c22eb48eef78401b56422bf7760045fde7d19b0d 100644
--- a/indra/newview/lltoolselect.cpp
+++ b/indra/newview/lltoolselect.cpp
@@ -52,6 +52,7 @@
 //extern BOOL gAllowSelectAvatar;
 
 const F32 SELECTION_ROTATION_TRESHOLD = 0.1f;
+const F32 SELECTION_SITTING_ROTATION_TRESHOLD = 3.2f; //radian
 
 LLToolSelect::LLToolSelect( LLToolComposite* composite )
 :	LLTool( std::string("Select"), composite ),
@@ -194,7 +195,13 @@ LLObjectSelectionHandle LLToolSelect::handleObjectSelection(const LLPickInfo& pi
 			{
 				LLQuaternion target_rot;
 				target_rot.shortestArc(LLVector3::x_axis, selection_dir);
-				gAgent.startAutoPilotGlobal(gAgent.getPositionGlobal(), "", &target_rot, NULL, NULL, llmax(1.f, gAgentAvatarp->getPelvisToFoot()), SELECTION_ROTATION_TRESHOLD);
+				gAgent.startAutoPilotGlobal(gAgent.getPositionGlobal(),
+											"",
+											&target_rot,
+											NULL,
+											NULL,
+											MAX_FAR_CLIP /*stop_distance, don't care since we are looking, not moving*/,
+											gAgentAvatarp->isSitting() ? SELECTION_SITTING_ROTATION_TRESHOLD : SELECTION_ROTATION_TRESHOLD);
 			}
 		}