diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 8d8239611c85a332810f51396dcd264f22f640ce..96d8762c56b559ece72f92448e4cfbace92c1541 100755
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1262,12 +1262,12 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
 	info = LLAvatarTracker::instance().getBuddyInfo(other_participant_id);
 	
 	U8 offline = (!info || info->isOnline()) ? IM_ONLINE : IM_OFFLINE;
-	
-	if((offline == IM_OFFLINE) && (LLVoiceClient::getInstance()->isOnlineSIP(other_participant_id)))
-	{
-		// User is online through the OOW connector, but not with a regular viewer.  Try to send the message via SLVoice.
-		sent = LLVoiceClient::getInstance()->sendTextMessage(other_participant_id, utf8_text);
-	}
+	// Old call to send messages to SLim client,  no longer supported.
+	//if((offline == IM_OFFLINE) && (LLVoiceClient::getInstance()->isOnlineSIP(other_participant_id)))
+	//{
+	//	// User is online through the OOW connector, but not with a regular viewer.  Try to send the message via SLVoice.
+	//	sent = LLVoiceClient::getInstance()->sendTextMessage(other_participant_id, utf8_text);
+	//}
 	
 	if(!sent)
 	{
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 962cdf02684397f642fd3ee0b84fe328165c5f1b..6df1bda1354eef6940b2320aec661d2112f6d306 100755
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -363,6 +363,7 @@ BOOL LLVoiceClient::isSessionCallBackPossible(const LLUUID& id)
 	}	
 }
 
+/* obsolete
 BOOL LLVoiceClient::sendTextMessage(const LLUUID& participant_id, const std::string& message)
 {
 	if (mVoiceModule) 
@@ -374,12 +375,13 @@ BOOL LLVoiceClient::sendTextMessage(const LLUUID& participant_id, const std::str
 		return FALSE;
 	}	
 }
+*/
 
 void LLVoiceClient::endUserIMSession(const LLUUID& participant_id)
 {
 	if (mVoiceModule) 
 	{
-		mVoiceModule->endUserIMSession(participant_id);
+		// mVoiceModule->endUserIMSession(participant_id);  // A SLim leftover
 	}
 }
 
@@ -645,9 +647,8 @@ void LLVoiceClient::keyDown(KEY key, MASK mask)
 	
 	if(!mPTTIsMiddleMouse && LLAgent::isActionAllowed("speak"))
 	{
-		bool down = (mPTTKey != KEY_NONE)
-		&& gKeyboard->getKeyDown(mPTTKey);
-		inputUserControlState(down);
+		bool down = (mPTTKey != KEY_NONE) && gKeyboard->getKeyDown(mPTTKey);
+		if (down) { inputUserControlState(down); }
 	}
 	
 }
@@ -655,9 +656,8 @@ void LLVoiceClient::keyUp(KEY key, MASK mask)
 {
 	if(!mPTTIsMiddleMouse)
 	{
-		bool down = (mPTTKey != KEY_NONE)
-		&& gKeyboard->getKeyDown(mPTTKey);
-		inputUserControlState(down);
+		bool down = (mPTTKey != KEY_NONE) && gKeyboard->getKeyDown(mPTTKey);
+		if (down) { inputUserControlState(down); }
 	}
 }
 void LLVoiceClient::middleMouseState(bool down)
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index fb387301be66f950fc6ca7be8596a80be95a9fd1..4c6ff5ef8f12850f04684d79546b9909a43a489f 100755
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -214,7 +214,7 @@ public:
 	//@{
 	virtual BOOL isSessionTextIMPossible(const LLUUID& id)=0;
 	virtual BOOL isSessionCallBackPossible(const LLUUID& id)=0;
-	virtual BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message)=0;
+	//virtual BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message)=0;
 	virtual void endUserIMSession(const LLUUID &uuid)=0;	
 	//@}
 	
@@ -431,7 +431,7 @@ public:
 	//@{
 	BOOL isSessionTextIMPossible(const LLUUID& id);
 	BOOL isSessionCallBackPossible(const LLUUID& id);
-	BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message);
+	//BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message) const {return true;} ;
 	void endUserIMSession(const LLUUID &uuid);	
 	//@}
 	
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index ac264d395f106c8c8ac9f97f4a9317673614fbf8..68aacb50907969ae1ec6013c5731dcdb0496e500 100755
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -95,7 +95,7 @@ const int MAX_LOGIN_RETRIES = 12;
 // to voice server (EXT-4313). When voice works correctly, there is from 1 to 15 times. 50 was chosen 
 // to make sure we don't make mistake when slight connection problems happen- situation when connection to server is 
 // blocked is VERY rare and it's better to sacrifice response time in this situation for the sake of stability.
-const int MAX_NORMAL_JOINING_SPATIAL_NUM = 150;
+const int MAX_NORMAL_JOINING_SPATIAL_NUM = 1500;
 
 // How often to check for expired voice fonts in seconds
 const F32 VOICE_FONT_EXPIRY_INTERVAL = 10.f;
@@ -450,17 +450,20 @@ bool LLVivoxVoiceClient::writeString(const std::string &str)
 				(const char*)str.data(),
 				&written);
 		
-		if(err == 0)
+		if(err == 0 && written == size)
 		{
 			// Success.
 			result = true;
 		}
-		// TODO: handle partial writes (written is number of bytes written)
-		// Need to set socket to non-blocking before this will work.
-//		else if(APR_STATUS_IS_EAGAIN(err))
-//		{
-//			// 
-//		}
+		else if (err == 0 && written != size) {
+			// Did a short write,  log it for now
+			LL_WARNS("Voice") << ") short write on socket sending data to vivox daemon." << "Sent " << written << "bytes instead of " << size <<LL_ENDL;
+		}
+		else if(APR_STATUS_IS_EAGAIN(err))
+		{
+			char buf[MAX_STRING];
+			LL_WARNS("Voice") << "EAGAIN error " << err << " (" << apr_strerror(err, buf, MAX_STRING) << ") sending data to vivox daemon." << LL_ENDL;
+		}
 		else
 		{
 			// Assume any socket error means something bad.  For now, just close the socket.
@@ -1414,6 +1417,8 @@ void LLVivoxVoiceClient::stateMachine()
 		//MARK: stateSessionJoined
 		case stateSessionJoined:		// session handle received
 
+			if (mSpatialJoiningNum > 100)
+				LL_WARNS() << "There seems to be problem with connecting to a voice channel. Frames to join were " << mSpatialJoiningNum << LL_ENDL;
 
 			mSpatialJoiningNum = 0;
 			// It appears that I need to wait for BOTH the SessionGroup.AddSession response and the SessionStateChangeEvent with state 4
@@ -1512,7 +1517,7 @@ void LLVivoxVoiceClient::stateMachine()
 		//MARK: stateLeavingSession
 		case stateLeavingSession:		// waiting for terminate session response
 			// The handler for the Session.Terminate response will transition from here to stateSessionTerminated.
-		//break;  // brett,  should fall through and clean up session before getting terminated event.
+		//break;  // Fall through and clean up session before getting terminated event.
 
 		//MARK: stateSessionTerminated
 		case stateSessionTerminated:
@@ -1681,7 +1686,8 @@ void LLVivoxVoiceClient::loginSendMessage()
 		<< "<AccountName>" << mAccountName << "</AccountName>"
 		<< "<AccountPassword>" << mAccountPassword << "</AccountPassword>"
 		<< "<AudioSessionAnswerMode>VerifyAnswer</AudioSessionAnswerMode>"
-        << "<EnableBuddiesAndPresence>false</EnableBuddiesAndPresence>"
+		<< "<EnableBuddiesAndPresence>false</EnableBuddiesAndPresence>"
+		<< "<EnablePresencePersistence>0</EnablePresencePersistence>"
 		<< "<BuddyManagementMode>Application</BuddyManagementMode>"
 		<< "<ParticipantPropertyFrequency>5</ParticipantPropertyFrequency>"
 		<< (autoPostCrashDumps?"<AutopostCrashDumps>true</AutopostCrashDumps>":"")
@@ -1913,10 +1919,12 @@ void LLVivoxVoiceClient::leaveAudioSession()
 			case stateJoinSessionFailed:
 			case stateJoinSessionFailedWaiting:
 				setState(stateSessionTerminated);
+				break;
+			case stateLeavingSession:  // managed to get back to this case statement before the media gets disconnected.
 			break;
 			
 			default:
-				LL_WARNS("Voice") << "called from unknown state" << LL_ENDL;
+				LL_WARNS("Voice") << "called from unknown state " << getState() << LL_ENDL;
 			break;
 		}
 	}
@@ -1969,6 +1977,7 @@ void LLVivoxVoiceClient::sessionMediaDisconnectSendMessage(sessionState *session
 	
 }
 
+/*  obsolete 
 void LLVivoxVoiceClient::sessionTextDisconnectSendMessage(sessionState *session)
 {
 	std::ostringstream stream;
@@ -1982,6 +1991,7 @@ void LLVivoxVoiceClient::sessionTextDisconnectSendMessage(sessionState *session)
 	
 	writeString(stream.str());
 }
+*/
 
 void LLVivoxVoiceClient::getCaptureDevicesSendMessage()
 {
@@ -2821,7 +2831,7 @@ void LLVivoxVoiceClient::sessionConnectResponse(std::string &requestId, int stat
 		session->mVoiceEnabled = true;
 		session->mMediaConnectInProgress = false;
 		session->mMediaStreamState = streamStateConnected;
-		session->mTextStreamState = streamStateConnected;
+		//session->mTextStreamState = streamStateConnected;
 		session->mErrorStatusCode = 0;
 	}
 	else if (statusCode != 0)
@@ -3028,7 +3038,7 @@ void LLVivoxVoiceClient::sessionRemovedEvent(
 		
 		// Reset the media state (we now have no info)
 		session->mMediaStreamState = streamStateUnknown;
-		session->mTextStreamState = streamStateUnknown;
+		//session->mTextStreamState = streamStateUnknown;
 		
 		// Conditionally delete the session
 		reapSession(session);
@@ -3239,8 +3249,9 @@ void LLVivoxVoiceClient::mediaStreamUpdatedEvent(
 
 		switch(state)
 		{
-			case streamStateIdle:
-				// Standard "left audio session"
+		case streamStateDisconnecting:
+		case streamStateIdle:
+				// Standard "left audio session", Vivox state 'disconnected'
 				session->mVoiceEnabled = false;
 				session->mMediaConnectInProgress = false;
 				leftAudioSession(session);
@@ -3250,6 +3261,7 @@ void LLVivoxVoiceClient::mediaStreamUpdatedEvent(
 				session->mVoiceEnabled = true;
 				session->mMediaConnectInProgress = false;
 				joinedAudioSession(session);
+			case streamStateConnecting: // do nothing, but prevents a warning getting into the logs.  
 			break;
 			
 			case streamStateRinging:
@@ -3284,6 +3296,7 @@ void LLVivoxVoiceClient::mediaStreamUpdatedEvent(
 	}
 }
 
+/* Obsolete 
 void LLVivoxVoiceClient::textStreamUpdatedEvent(
 	std::string &sessionHandle, 
 	std::string &sessionGroupHandle, 
@@ -3330,6 +3343,7 @@ void LLVivoxVoiceClient::textStreamUpdatedEvent(
 		}
 	}
 }
+ obsolete */
 
 void LLVivoxVoiceClient::participantAddedEvent(
 		std::string &sessionHandle, 
@@ -4196,7 +4210,7 @@ LLVivoxVoiceClient::sessionState* LLVivoxVoiceClient::startUserIMSession(const L
 	if(session->mHandle.empty())
 	  {
 	    // Session isn't active -- start it up.
-	    sessionCreateSendMessage(session, false, true);
+	    sessionCreateSendMessage(session, false, false);
 	  }
 	else
 	  {	
@@ -4207,6 +4221,7 @@ LLVivoxVoiceClient::sessionState* LLVivoxVoiceClient::startUserIMSession(const L
 	return session;
 }
 
+/* obsolete 
 BOOL LLVivoxVoiceClient::sendTextMessage(const LLUUID& participant_id, const std::string& message)
 {
 	bool result = false;
@@ -4231,7 +4246,8 @@ BOOL LLVivoxVoiceClient::sendTextMessage(const LLUUID& participant_id, const std
 	
 	return result;
 }
-
+*/
+/* obsolete
 void LLVivoxVoiceClient::sendQueuedTextMessages(sessionState *session)
 {
 	if(session->mTextStreamState == 1)
@@ -4260,6 +4276,7 @@ void LLVivoxVoiceClient::sendQueuedTextMessages(sessionState *session)
 		// Session isn't connected yet, defer until later.
 	}
 }
+ obsolete */
 
 void LLVivoxVoiceClient::endUserIMSession(const LLUUID &uuid)
 {
@@ -4270,7 +4287,7 @@ void LLVivoxVoiceClient::endUserIMSession(const LLUUID &uuid)
 		// found the session
 		if(!session->mHandle.empty())
 		{
-			sessionTextDisconnectSendMessage(session);
+			// sessionTextDisconnectSendMessage(session);  // a SLim leftover,  not used any more.
 		}
 	}	
 	else
@@ -6835,6 +6852,10 @@ void LLVivoxProtocolParser::processResponse(std::string tag)
 		{
 			LLVivoxVoiceClient::getInstance()->sessionRemovedEvent(sessionHandle, sessionGroupHandle);
 		}
+		else if (!stricmp(eventTypeCstr, "SessionGroupUpdatedEvent"))
+		{
+			//TODO, we don't process this event, but we should not WARN that we have received it.
+		}
 		else if (!stricmp(eventTypeCstr, "SessionGroupAddedEvent"))
 		{
 			LLVivoxVoiceClient::getInstance()->sessionGroupAddedEvent(sessionGroupHandle);
@@ -6863,19 +6884,13 @@ void LLVivoxProtocolParser::processResponse(std::string tag)
 			*/
 			LLVivoxVoiceClient::getInstance()->mediaCompletionEvent(sessionGroupHandle, mediaCompletionType);
 		}
+		/* obsolete, let else statement complain if a text message arrives 
 		else if (!stricmp(eventTypeCstr, "TextStreamUpdatedEvent"))
 		{
-			/*
-			 <Event type="TextStreamUpdatedEvent">
-			 <SessionGroupHandle>c1_m1000xFnPP04IpREWNkuw1cOXlhw==_sg1</SessionGroupHandle>
-			 <SessionHandle>c1_m1000xFnPP04IpREWNkuw1cOXlhw==1</SessionHandle>
-			 <Enabled>true</Enabled>
-			 <State>1</State>
-			 <Incoming>true</Incoming>
-			 </Event>
-			 */
+
 			LLVivoxVoiceClient::getInstance()->textStreamUpdatedEvent(sessionHandle, sessionGroupHandle, enabled, state, incoming);
-		}
+
+		} */
 		else if (!stricmp(eventTypeCstr, "ParticipantAddedEvent"))
 		{
 			/* 
diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h
index a4ec9f2a69271e0f2a50781653b558722883ae07..541cccd30f1320a5665e5fdeffa370ed3d8c7f16 100755
--- a/indra/newview/llvoicevivox.h
+++ b/indra/newview/llvoicevivox.h
@@ -109,7 +109,7 @@ public:
 	virtual bool isParticipant(const LLUUID& speaker_id);
 
 	// Send a text message to the specified user, initiating the session if necessary.
-	virtual BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message);
+	// virtual BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message) const {return false;};
 	
 	// close any existing text IM session with the specified user
 	virtual void endUserIMSession(const LLUUID &uuid);
@@ -261,6 +261,8 @@ protected:
 		streamStateIdle = 1,
 		streamStateConnected = 2,
 		streamStateRinging = 3,
+		streamStateConnecting = 6,  // same as Vivox session_media_connecting enum
+		streamStateDisconnecting = 7,  //Same as Vivox session_media_disconnecting enum
 	};	
 	struct participantState
 	{
@@ -325,7 +327,7 @@ protected:
 		LLUUID		mCallerID;
 		int			mErrorStatusCode;
 		int			mMediaStreamState;
-		int			mTextStreamState;
+		int			mTextStreamState;    // obsolete
 		bool		mCreateInProgress;	// True if a Session.Create has been sent for this session and no response has been received yet.
 		bool		mMediaConnectInProgress;	// True if a Session.MediaConnect has been sent for this session and no response has been received yet.
 		bool		mVoiceInvitePending;	// True if a voice invite is pending for this session (usually waiting on a name lookup)
@@ -480,7 +482,7 @@ protected:
 	void accountLoginStateChangeEvent(std::string &accountHandle, int statusCode, std::string &statusString, int state);
 	void mediaCompletionEvent(std::string &sessionGroupHandle, std::string &mediaCompletionType);
 	void mediaStreamUpdatedEvent(std::string &sessionHandle, std::string &sessionGroupHandle, int statusCode, std::string &statusString, int state, bool incoming);
-	void textStreamUpdatedEvent(std::string &sessionHandle, std::string &sessionGroupHandle, bool enabled, int state, bool incoming);
+	//obsolete void textStreamUpdatedEvent(std::string &sessionHandle, std::string &sessionGroupHandle, bool enabled, int state, bool incoming);
 	void sessionAddedEvent(std::string &uriString, std::string &alias, std::string &sessionHandle, std::string &sessionGroupHandle, bool isChannel, bool incoming, std::string &nameString, std::string &applicationString);
 	void sessionGroupAddedEvent(std::string &sessionGroupHandle);
 	void sessionRemovedEvent(std::string &sessionHandle, std::string &sessionGroupHandle);
@@ -596,7 +598,7 @@ protected:
 	void sessionTerminateSendMessage(sessionState *session);
 	void sessionGroupTerminateSendMessage(sessionState *session);
 	void sessionMediaDisconnectSendMessage(sessionState *session);
-	void sessionTextDisconnectSendMessage(sessionState *session);
+	// void sessionTextDisconnectSendMessage(sessionState *session);
 
 	
 	
@@ -760,7 +762,7 @@ private:
 	// start a text IM session with the specified user
 	// This will be asynchronous, the session may be established at a future time.
 	sessionState* startUserIMSession(const LLUUID& uuid);
-	void sendQueuedTextMessages(sessionState *session);
+	// obsolete void sendQueuedTextMessages(sessionState *session);
 	
 	void enforceTether(void);