diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h
index 381e73a7e2a5702bf7c97bbb5dabccd999313b1b..473751fd966b18099be38c39643c112904048579 100644
--- a/indra/llcommon/llversionserver.h
+++ b/indra/llcommon/llversionserver.h
@@ -36,7 +36,7 @@
 const S32 LL_VERSION_MAJOR = 1;
 const S32 LL_VERSION_MINOR = 26;
 const S32 LL_VERSION_PATCH = 0;
-const S32 LL_VERSION_BUILD = 103578;
+const S32 LL_VERSION_BUILD = 107351;
 
 const char * const LL_CHANNEL = "Second Life Server";
 
diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp
index 3d4f24abc7e7a776668638c1f4daf7c31d76fc02..21c0e579acdf6d3f10b9e24a988d1b38e7f2f64b 100644
--- a/indra/llmessage/llcachename.cpp
+++ b/indra/llmessage/llcachename.cpp
@@ -42,8 +42,7 @@
 #include "llsdserialize.h"
 #include "lluuid.h"
 #include "message.h"
-#include "llservicebuilder.h"
-#include "llframetimer.h"
+
 // Constants
 static const std::string CN_WAITING("(Loading...)"); // *TODO: translate
 static const std::string CN_NOBODY("(nobody)"); // *TODO: translate
@@ -198,8 +197,6 @@ class LLCacheName::Impl
 public:
 	LLMessageSystem*	mMsg;
 	LLHost				mUpstreamHost;
-	std::string mGroupNameURL;
-	std::string mAgentNameURL;
 
 	Cache				mCache;
 		// the map of UUIDs to names
@@ -225,8 +222,6 @@ class LLCacheName::Impl
 	void processPendingReplies();
 	void sendRequest(const char* msg_name, const AskQueue& queue);
 	bool isRequestPending(const LLUUID& id);
-	void getAgentName(const AskQueue&);
-	void getGroupName(const AskQueue&);
 
 	// Message system callbacks.
 	void processUUIDRequest(LLMessageSystem* msg, bool isGroup);
@@ -240,35 +235,6 @@ class LLCacheName::Impl
 	void notifyObservers(const LLUUID& id, const std::string& first, const std::string& last, BOOL group);
 };
 
-class LLHTTPAgentNamesResponse : public LLHTTPClient::Responder
-{
-public:
-	LLHTTPAgentNamesResponse(const LLSD& agent_ids)
-		: mAgentIDs(agent_ids)
-	{ }
-	void result(const LLSD& content);
-private:
-	LLHost mSender;
-	LLSD mAgentIDs;
-
-};
-
-class LLHTTPGroupNamesResponse : public LLHTTPClient::Responder
-{
-public:
-	LLHTTPGroupNamesResponse(const LLSD& group_ids)
-		: mGroupIDs(group_ids)
-	{ };
-					        
-	void result(const LLSD& content);
-private:
-	LLHost mSender;
-	LLSD mGroupIDs;
-
-};
-
-
-
 
 /// --------------------------------------------------------------------------
 /// class LLCacheName
@@ -354,57 +320,6 @@ void LLCacheName::cancelCallback(const LLUUID& id, LLCacheNameCallback callback,
 	}
 }
 
-void LLCacheName::sendAgentNames(const LLUUID& id, std::string& first, std::string& last)
-{
-
-	LLCacheNameEntry* entry = get_ptr_in_map(impl.mCache, id);
-	if (!entry)
-	{
-		entry = new LLCacheNameEntry;
-		impl.mCache[id] = entry;
-		
-	}
-	entry->mIsGroup = false;
-	entry->mCreateTime = (U32)LLFrameTimer::getTotalSeconds();
-    //entry->mFirstName = first;
-    //entry->mLastName = last;
-    //LLStringUtil::truncate(entry->mFirstName, DB_FIRST_NAME_BUF_SIZE);
-    //LLStringUtil::truncate(entry->mLastName, DB_LAST_NAME_BUF_SIZE);
-    entry->mFirstName = std::string(first, DB_FIRST_NAME_BUF_SIZE);
-    entry->mLastName = std::string(last, DB_LAST_NAME_BUF_SIZE);
-
-	impl.mPendingQueue.erase(id);
-	impl.notifyObservers(id,
-				entry->mFirstName, entry->mLastName,
-				FALSE);
-	 
-}
-
-void LLCacheName::sendGroupNames(const LLUUID& id, std::string& name)
-{
-	 
-	LLCacheNameEntry* entry = get_ptr_in_map(impl.mCache, id);
-    if (!entry)
-	{
-		entry = new LLCacheNameEntry;
-		impl.mCache[id] = entry;
-								     
-	}
-	     
-	entry->mIsGroup = true;
-	entry->mCreateTime = (U32)time(NULL);
-	
-    entry->mGroupName = std::string(name, DB_GROUP_NAME_BUF_SIZE);
-
-	impl.mPendingQueue.erase(id);
-		     
-	impl.notifyObservers(id,
-		entry->mFirstName, entry->mLastName,
-		FALSE);
-			 
-	
-}
-
 void LLCacheName::importFile(LLFILE* fp)
 {
 	S32 count = 0;
@@ -610,16 +525,6 @@ BOOL LLCacheName::getFullName(const LLUUID& id, std::string& fullname)
 	return res;
 }
 
-void LLCacheName::setGroupURL(const std::string& group_url)
-{
-	impl.mGroupNameURL = group_url; 
-}
-
-void LLCacheName::setAgentURL(const std::string& agent_url)
-{
-	impl.mAgentNameURL = agent_url;
-}
-
 BOOL LLCacheName::getGroupName(const LLUUID& id, std::string& group)
 {
 	if(id.isNull())
@@ -654,111 +559,6 @@ BOOL LLCacheName::getGroupName(const LLUUID& id, std::string& group)
 	}
 }
 
-void LLCacheName::Impl::getAgentName(const AskQueue &queue)
-{
-	 
-	// get the names from backbone module
-	if(queue.empty())
-	{
-		 return;
-	}
-		
-	LLSD request;
-	request["action"] = "GET";
-	LLSD id_block = LLSD::emptyArray();
-	AskQueue::const_iterator it = queue.begin();
-	AskQueue::const_iterator end = queue.end();
-	for(;it!=end;++it)
-	{
-		id_block.append(*it);
-	}
-	lldebugs<<LLSDOStreamer<LLSDNotationFormatter>(id_block) <<llendl;
-		 
-	request["agents"] = id_block;
-	
-	LLHTTPClient::post(
-		 	mAgentNameURL,
-			request, 
-			new LLHTTPAgentNamesResponse(id_block));
-		 
-		                                           
-	lldebugs<<"Service builder call to agent-name "<<mAgentNameURL<<llendl;
-		 
-}
-
-void LLHTTPAgentNamesResponse::result(const LLSD& content)
-{
-	LLUUID id;
-	lldebugs<<LLSDOStreamer<LLSDNotationFormatter>(content) <<llendl;
-
-	LLSD::map_const_iterator iter = content.beginMap();
-	for ( ; iter != content.endMap(); ++iter)
-	{
-		id.set((*iter).first);
-		LLSD name = (*iter).second;
-		LLCacheNameEntry* entry = new LLCacheNameEntry;
-		entry->mIsGroup = FALSE;
-		entry->mCreateTime = (U32)LLFrameTimer::getTotalSeconds();
-        std::string first = name["first"];
-        std::string last = name["last"];
-        entry->mFirstName = std::string(first, DB_FIRST_NAME_BUF_SIZE);
-        entry->mLastName = std::string(last, DB_LAST_NAME_BUF_SIZE);
-
-		gCacheName->sendAgentNames(id,first,last);
-	}	
-}
-
-
-void LLCacheName::Impl::getGroupName(const AskQueue &queue)
-{
-	// get the group names from backbone module
-	if(queue.empty())
-	{
-		return;
-	}
-		
-	LLSD request;
-	request["action"] = "GET";
-	LLSD id_block = LLSD::emptyArray();
-	AskQueue::const_iterator it = queue.begin();
-	AskQueue::const_iterator end = queue.end();
-	for(;it!=end;++it)
-	{
-		id_block.append(*it);
-	}
-		
-	request["groups"] = id_block;
-		                                                             
-	if(!mGroupNameURL.empty())
-	{	
-		LLHTTPClient::post(
-			mGroupNameURL,
-			request,
-			new LLHTTPGroupNamesResponse(id_block));
-	}
-	lldebugs<<"Service builder call to group-name "<< mGroupNameURL<<llendl;
-}
-
-void LLHTTPGroupNamesResponse::result(const LLSD& content)
-{
-	lldebugs<<"Result"<<LLSDOStreamer<LLSDNotationFormatter>(content) << llendl;
-	LLUUID id;
-
-	LLSD::map_const_iterator iter = content.beginMap();
-	for ( ; iter != content.endMap(); ++iter)
-	{
-					  
-		id.set((*iter).first);
-		std::string name = (*iter).second.asString();
-		LLCacheNameEntry* entry = new LLCacheNameEntry;
-		entry->mIsGroup = TRUE;						
-		entry->mCreateTime = (U32)time(NULL);
-        entry->mGroupName = std::string(name, DB_GROUP_NAME_BUF_SIZE);
-		lldebugs<<"Group Name"<<name<<llendl;
-		gCacheName->sendGroupNames(id,name);							
-	}
-}
-
 // TODO: Make the cache name callback take a SINGLE std::string,
 // not a separate first and last name.
 void LLCacheName::get(const LLUUID& id, BOOL is_group, LLCacheNameCallback callback, void* user_data)
@@ -807,14 +607,12 @@ void LLCacheName::processPending()
 		return;
 	}
 
-    /*
 	if(!impl.mUpstreamHost.isOk())
 	{
 		lldebugs << "LLCacheName::processPending() - bad upstream host."
 				 << llendl;
 		return;
 	}
-    */
 
 	impl.processPendingAsks();
 	impl.processPendingReplies();
@@ -896,16 +694,8 @@ std::string LLCacheName::getDefaultName()
 
 void LLCacheName::Impl::processPendingAsks()
 {
-	if (mUpstreamHost.isOk()) //its the vuewer asking for names send request to simulator
-	{
-		sendRequest(_PREHASH_UUIDNameRequest, mAskNameQueue);
-		sendRequest(_PREHASH_UUIDGroupNameRequest, mAskGroupQueue);
-	}
-	else //its simulator asking for names ask the backbone
-	{
-		getAgentName(mAskNameQueue);
-		getGroupName(mAskGroupQueue);
-	}
+	sendRequest(_PREHASH_UUIDNameRequest, mAskNameQueue);
+	sendRequest(_PREHASH_UUIDGroupNameRequest, mAskGroupQueue);
 	mAskNameQueue.clear();
 	mAskGroupQueue.clear();
 }
@@ -1026,15 +816,12 @@ void LLCacheName::Impl::processUUIDRequest(LLMessageSystem* msg, bool isGroup)
 {
 	// You should only get this message if the cache is at the simulator
 	// level, hence having an upstream provider.
-	// 03/31/2008 Simulator is talking to backbone and not dataserver
-	// This check was for dataserver
-	/*
 	if (!mUpstreamHost.isOk())
 	{
 		llwarns << "LLCacheName - got UUID name/group request, but no upstream provider!" << llendl;
 		return;
 	}
-	*/
+
 	LLHost fromHost = msg->getSender();
 	ReplySender sender(msg);
 
@@ -1105,8 +892,9 @@ void LLCacheName::Impl::processUUIDReply(LLMessageSystem* msg, bool isGroup)
 			msg->getStringFast(_PREHASH_UUIDNameBlock, _PREHASH_LastName,  entry->mLastName, i);
 		}
 		else
-		{
+		{	// is group
 			msg->getStringFast(_PREHASH_UUIDNameBlock, _PREHASH_GroupName, entry->mGroupName, i);
+			LLStringFn::replace_nonprintable(entry->mGroupName, LL_UNKNOWN_CHAR);
 		}
 
 		if (!isGroup)
diff --git a/indra/llmessage/llcachename.h b/indra/llmessage/llcachename.h
index 31af5e6240866bed5ccb22cdadad1cbbe8e7fc4e..2757b86a7c3468f99fe15cbe955bfb3575a95174 100644
--- a/indra/llmessage/llcachename.h
+++ b/indra/llmessage/llcachename.h
@@ -32,9 +32,7 @@
 
 #ifndef LL_LLCACHENAME_H
 #define LL_LLCACHENAME_H
-#include "llhttpclient.h"
-#include "llhost.h"
-#include "lluri.h"
+
 class LLMessageSystem;
 class LLHost;
 class LLUUID;
@@ -100,15 +98,10 @@ class LLCacheName
 	// This method needs to be called from time to time to send out
 	// requests.
 	void processPending();
-	void setAgentURL(const std::string& url);
-	void setGroupURL(const std::string& url);
-	
+
 	// Expire entries created more than "secs" seconds ago.
 	void deleteEntriesOlderThan(S32 secs);
 
-	//send the information retrived from backbone
-	void sendAgentNames(const LLUUID& id, std::string& first, std::string& last);
-	void sendGroupNames(const LLUUID& id, std::string& name);
 	// Debugging
 	void dump();		// Dumps the contents of the cache
 	void dumpStats();	// Dumps the sizes of the cache and associated queues.
@@ -119,9 +112,10 @@ class LLCacheName
 
 	class Impl;
 	Impl& impl;
-
 };
 
+
+
 extern LLCacheName* gCacheName;
 
 #endif
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index 2b728196537f18da5a50c94a5493e8db5c2199e1..85b64a878804f521cdf6122b0363ce4eaa09b0c2 100644
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -1,6 +1,6 @@
 /* Localized versions of Info.plist keys */
 
 CFBundleName = "Second Life";
-CFBundleShortVersionString = "Second Life version 1.21.6.100000";
-CFBundleGetInfoString = "Second Life version 1.21.6.100000, Copyright 2004-2008 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version 1.23.0.0";
+CFBundleGetInfoString = "Second Life version 1.23.0.0, Copyright 2004-2008 Linden Research, Inc.";
 
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index 0a8161171102d1a93696a0f2658dc17b09313654..62082fe773a6b42382b30f5dd7d49e38d183eabe 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>1.21.6.100000</string>
+	<string>1.23.0.0</string>
 	<key>CSResourcesFileMapped</key>
 	<true/>
 </dict>
diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc
index 152ff15d5d50c527535d32cf0cf9ad97f52b4296..b360871f209c5bb8378e279d6e93d1846a4e0edd 100644
--- a/indra/newview/res/viewerRes.rc
+++ b/indra/newview/res/viewerRes.rc
@@ -231,8 +231,8 @@ TOOLMEDIAOPEN           CURSOR                  "toolmediaopen.cur"
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,21,6,100000
- PRODUCTVERSION 1,21,6,100000
+ FILEVERSION 1,23,0,0
+ PRODUCTVERSION 1,23,0,0
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -249,12 +249,12 @@ BEGIN
         BEGIN
             VALUE "CompanyName", "Linden Lab"
             VALUE "FileDescription", "Second Life"
-            VALUE "FileVersion", "1.21.6.100000"
+            VALUE "FileVersion", "1.23.0.0"
             VALUE "InternalName", "Second Life"
             VALUE "LegalCopyright", "Copyright © 2001-2008, Linden Research, Inc."
             VALUE "OriginalFilename", "SecondLife.exe"
             VALUE "ProductName", "Second Life"
-            VALUE "ProductVersion", "1.21.6.100000"
+            VALUE "ProductVersion", "1.23.0.0"
         END
     END
     BLOCK "VarFileInfo"