diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index b9cbd04adf17f8e983f89c94544f624ece748eb6..512a91b99663ae6a5220ac9176ed0b8495e1607e 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -2395,9 +2395,10 @@ if (LL_TESTS)
     ${LLVFS_LIBRARIES}
     ${LLMATH_LIBRARIES}
     ${LLXML_LIBRARIES}
+	${LLUI_LIBRARIES}
     ${LLMESSAGE_LIBRARIES}
     ${LLLOGIN_LIBRARIES}
-    ${LLCOREHTTP_LIBRARIES}
+	${LLCOREHTTP_LIBRARIES}
     ${LLCOMMON_LIBRARIES}
     ${OPENSSL_LIBRARIES}
     ${CRYPTO_LIBRARIES}
@@ -2416,21 +2417,21 @@ if (LL_TESTS)
     "${test_libs}"
     )
 
-  #set(llslurl_test_sources
-  #    llslurl.cpp
-  #    llviewernetwork.cpp
-  #)
+  set(llslurl_test_sources
+      llslurl.cpp
+      llviewernetwork.cpp
+  )
 
 
-  #LL_ADD_INTEGRATION_TEST(llslurl
-  #   "${llslurl_test_sources}"
-  #  "${test_libs}"
-  #  )
+  LL_ADD_INTEGRATION_TEST(llslurl
+     "${llslurl_test_sources}"
+    "${test_libs}"
+    )
 
-  #set(llviewernetwork_test_sources
-  #    llviewernetwork.cpp
-  #    lllogininstance.cpp
-  #)
+  set(llviewernetwork_test_sources
+      llviewernetwork.cpp
+      lllogininstance.cpp
+  )
 	
   #LL_ADD_INTEGRATION_TEST(llviewernetwork
   #  "${llviewernetwork_test_sources}"
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index 74748b55a0d33988e471eb9ed6e96bca69a8082a..c097bbe86fdd6f2ee64217ea214eefa264e8aa1c 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -643,6 +643,10 @@ bool LLLoginInstance::handleLoginEvent(const LLSD& event)
 
 	mLoginState = event["state"].asString();
 	mResponseData = event["data"];
+
+	// Kinda hacky, I know. This won't work right after disconnect, but fuck it, why are
+	// you changing the grid after disconnect? Needs expanded upon.
+	LLGridManager::getInstance()->setLoggedIn(mLoginState == LLStringExplicit("online"));
 	
 	if(event.has("transfer_rate"))
 	{
@@ -659,8 +663,6 @@ bool LLLoginInstance::handleLoginEvent(const LLSD& event)
 
 void LLLoginInstance::handleLoginFailure(const LLSD& event)
 {
-	
-
 	// Login has failed. 
 	// Figure out why and respond...
 	LLSD response = event["data"];
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index 1f506e5b85f3094b4addf3a761a5014778053854..735367d88865c307547c59aed75225e5c6caad06 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -32,12 +32,10 @@
 #include "llviewernetwork.h"
 #include "llviewercontrol.h"
 #include "llcorehttputil.h"
-#include "lllogininstance.h"
 #include "llnotificationsutil.h"
 #include "llsdserialize.h"
 #include "llsecapi.h"
 #include "lltrans.h"
-#include "llweb.h"
 #include "llxmlnode.h"
 
 /// key used to store the grid, and the name attribute in the grid data
@@ -106,6 +104,7 @@ const std::string GRIDS_USER_FILE = "grids_user.xml";
 
 LLGridManager::LLGridManager()
 :	mPlatform(NOPLATFORM)
+,	mLoggedIn(false)
 {
 	// by default, we use the 'grids.xml' file in the user settings directory
 	// this file is an LLSD file containing multiple grid definitions.
@@ -616,7 +615,7 @@ void LLGridManager::saveGridList()
 	LLSD data;
 	for(LLSD::map_iterator grid_iter = mGridList.beginMap();
 		grid_iter != mGridList.endMap();
-		grid_iter++)
+	    ++grid_iter)
 	{
 		// We don't need to store system grids, they're hard coded!
 		if (grid_iter->second.has(GRID_IS_SYSTEM_GRID_VALUE)
@@ -641,7 +640,7 @@ std::map<std::string, std::string> LLGridManager::getKnownGrids() const
 	std::map<std::string, std::string> result;
 	for(LLSD::map_const_iterator grid_iter = mGridList.beginMap();
 		grid_iter != mGridList.endMap();
-		grid_iter++)
+	    ++grid_iter)
 	{
 		// skip temp grids. since this is just for "grid label mappings for UI purposes"
 		if (grid_iter->second.has(GRID_TEMPORARY) && grid_iter->second[GRID_TEMPORARY].asBoolean())
@@ -654,9 +653,9 @@ std::map<std::string, std::string> LLGridManager::getKnownGrids() const
 
 void LLGridManager::setGridChoice(const std::string& grid, const bool only_select /* = true */)
 {
-    // Don't allow grid choice the grid once we're already logged in.
-    if (LLLoginInstance::getInstance()->authSuccess()) return;
-    
+	// Can't change grid once we are logged in
+	if (mLoggedIn) return;
+
 	// Set the grid choice based on a string.
 	LL_DEBUGS("GridManager") << "requested " << grid << LL_ENDL;
  	std::string grid_name = getGrid(grid); // resolved either the name or the id to the name
@@ -699,7 +698,7 @@ std::string LLGridManager::getGrid(const std::string& grid) const
 		// search the grid list for a grid with a matching id
 		for(LLSD::map_const_iterator grid_iter = mGridList.beginMap();
 			grid_name.empty() && grid_iter != mGridList.endMap();
-			grid_iter++)
+		    ++grid_iter)
 		{
 			if (grid_iter->second.has(GRID_ID_VALUE))
 			{
@@ -733,7 +732,7 @@ std::string LLGridManager::getGridByAttribute(const std::string& attribute, cons
 	
 	for(LLSD::map_const_iterator grid_iter = mGridList.beginMap();
 		grid_iter != mGridList.endMap();
-		grid_iter++)
+	    ++grid_iter)
 	{
 		if (grid_iter->second.has(attribute)
 			&& LLStringUtil::compareStrings(value, grid_iter->second[attribute].asString()) == 0)
@@ -802,7 +801,7 @@ void LLGridManager::getLoginURIs(const std::string& grid, std::vector<std::strin
 	{
 		for (LLSD::array_const_iterator llsd_uri = mGridList[grid_name][GRID_LOGIN_URI_VALUE].beginArray();
 			 llsd_uri != mGridList[grid_name][GRID_LOGIN_URI_VALUE].endArray();
-			 llsd_uri++)
+		     ++llsd_uri)
 		{
 			uris.push_back(llsd_uri->asString());
 		}
diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h
index db12570c7b419d1ccc44b4b0eb3a041d0c30f993..c205a49c04b75dd79afe1cbd57fd066b0cfa61e9 100644
--- a/indra/newview/llviewernetwork.h
+++ b/indra/newview/llviewernetwork.h
@@ -261,6 +261,9 @@ class LLGridManager : public LLSingleton<LLGridManager>
 	///< @returns true if successfully removed
 	
 	//@}
+
+	/// Sets login lock so grid cannot be changed once we are logged in
+	void setLoggedIn(bool logged_in) { mLoggedIn = logged_in; }
 	
 protected:
 
@@ -290,7 +293,8 @@ private:
 					   const std::string& administrator,
 					   const std::string& platform,
 					   const std::string& login_id = "");
-	
+
+	bool mLoggedIn;
 	std::string mGrid;
 	std::string mGridFile;
 	LLSD mGridList;
diff --git a/indra/newview/tests/llslurl_test.cpp b/indra/newview/tests/llslurl_test.cpp
index 46f621c7a760954a04a7eacaf3ebad075b756987..12edbec63c03833439809339e02f084bac0180ea 100644
--- a/indra/newview/tests/llslurl_test.cpp
+++ b/indra/newview/tests/llslurl_test.cpp
@@ -33,7 +33,6 @@
 #include "../llslurl.h"
 #include "llxmlnode.h"
 #include "llcontrol.h"
-#include "llsdserialize.h"
 #include "llnotificationsutil.h"
 
 namespace
@@ -218,26 +217,26 @@ namespace tut
 					  "http://maps.secondlife.com/secondlife/my%20region/1/2/3");
 
 		LLGridManager::getInstance()->setGridChoice("my.grid.com");
-		slurl = LLSLURL("http://my.grid.com/region/my%20region/1/2/3");
+		slurl = LLSLURL("x-grid-info://my.grid.com/region/my%20region/1/2/3");
 		ensure_equals("grid slurl, region + coords - type", slurl.getType(), LLSLURL::LOCATION);
 		ensure_equals("grid slurl, region + coords", slurl.getSLURLString(),
-					  "http://my.grid.com/region/my%20region/1/2/3");
+					  "x-grid-info://my.grid.com/region/my%20region/1/2/3");
 
-		slurl = LLSLURL("http://my.grid.com/region/my region");
+		slurl = LLSLURL("x-grid-info://my.grid.com/region/my region");
 		ensure_equals("grid slurl, region + coords - type", slurl.getType(), LLSLURL::LOCATION);
 		ensure_equals("grid slurl, region + coords", slurl.getSLURLString(),
-					  "http://my.grid.com/region/my%20region/128/128/0");
+					  "x-grid-info://my.grid.com/region/my%20region/128/128/0");
 
 		LLGridManager::getInstance()->setGridChoice("foo.bar.com");
 		slurl = LLSLURL("/myregion/1/2/3");
 		ensure_equals("/: slurl, region + coords - type", slurl.getType(), LLSLURL::LOCATION);
 		ensure_equals("/ slurl, region + coords", slurl.getSLURLString(),
-					  "http://foo.bar.com/region/myregion/1/2/3");
+					  "x-grid-info://foo.bar.com/region/myregion/1/2/3");
 
 		slurl = LLSLURL("myregion/1/2/3");
 		ensure_equals(": slurl, region + coords - type", slurl.getType(), LLSLURL::LOCATION);
 		ensure_equals(" slurl, region + coords", slurl.getSLURLString(),
-					  "http://foo.bar.com/region/myregion/1/2/3");
+					  "x-grid-info://foo.bar.com/region/myregion/1/2/3");
 
 		slurl = LLSLURL(LLSLURL::SIM_LOCATION_HOME);
 		ensure_equals("home", slurl.getType(), LLSLURL::HOME_LOCATION);
@@ -275,7 +274,7 @@ namespace tut
 		ensure_equals("grid4", slurl.getGrid(), "Aditi" );
 
 		LLGridManager::getInstance()->setGridChoice("my.grid.com");
-		slurl = LLSLURL("https://my.grid.com/app/foo/bar?12345");
+		slurl = LLSLURL("x-grid-info://my.grid.com/app/foo/bar?12345");
 		ensure_equals("app", slurl.getType(), LLSLURL::APP);
 		ensure_equals("appcmd", slurl.getAppCmd(), "foo");
 		ensure_equals("apppath", slurl.getAppPath().size(), 1);
@@ -297,12 +296,12 @@ namespace tut
 		LLSLURL slurl = LLSLURL("my.grid.com", "my region");
 		ensure_equals("grid/region - type", slurl.getType(), LLSLURL::LOCATION);
 		ensure_equals("grid/region", slurl.getSLURLString(),
-					  "http://my.grid.com/region/my%20region/128/128/0");
+					  "x-grid-info://my.grid.com/region/my%20region/128/128/0");
 
 		slurl = LLSLURL("my.grid.com", "my region", LLVector3(1,2,3));
 		ensure_equals("grid/region/vector - type", slurl.getType(), LLSLURL::LOCATION);
 		ensure_equals(" grid/region/vector", slurl.getSLURLString(),
-					  "http://my.grid.com/region/my%20region/1/2/3");
+					  "x-grid-info://my.grid.com/region/my%20region/1/2/3");
 
 		LLGridManager::getInstance()->setGridChoice("util.agni.lindenlab.com");
 		slurl = LLSLURL("my region", LLVector3(1,2,3));
@@ -314,36 +313,10 @@ namespace tut
 		slurl = LLSLURL("my region", LLVector3(1,2,3));
 		ensure_equals("default grid/region/vector - type", slurl.getType(), LLSLURL::LOCATION);
 		ensure_equals(" default grid/region/vector", slurl.getSLURLString(),
-					  "http://my.grid.com/region/my%20region/1/2/3");
+					  "x-grid-info://my.grid.com/region/my%20region/1/2/3");
 
 	}
 	
-	// Accessors
-	template<> template<>
-	void slurlTestObject::test<3>()
-	{
-		llofstream gridfile(TEST_FILENAME);
-		gridfile << gSampleGridFile;
-		gridfile.close();
-
-		LLGridManager::getInstance()->initialize(TEST_FILENAME);
-
-		LLGridManager::getInstance()->setGridChoice("my.grid.com");
-		LLSLURL slurl = LLSLURL("https://my.grid.com/region/my%20region/1/2/3");
-		ensure_equals("login string", slurl.getLoginString(), "uri:my region&amp;1&amp;2&amp;3");
-		ensure_equals("location string", slurl.getLocationString(), "my region/1/2/3");
-		ensure_equals("grid", slurl.getGrid(), "my.grid.com");
-		ensure_equals("region", slurl.getRegion(), "my region");
-		ensure_equals("position", slurl.getPosition(), LLVector3(1, 2, 3));
-
-		slurl = LLSLURL("http://my.grid.com:8002/region/my%20region/1/2/3");
-		ensure_equals("login string", slurl.getLoginString(), "uri:my region&amp;1&amp;2&amp;3");
-		ensure_equals("location string", slurl.getLocationString(), "my region/1/2/3");
-		ensure_equals("grid", slurl.getGrid(), "my.grid.com:8002");
-		ensure_equals("region", slurl.getRegion(), "my region");
-		ensure_equals("position", slurl.getPosition(), LLVector3(1, 2, 3));
-	}
-	
 	// x-grid-location-info
 	template<> template<>
 	void slurlTestObject::test<4>()
@@ -355,7 +328,7 @@ namespace tut
 		LLGridManager::getInstance()->initialize(TEST_FILENAME);
 		
 		LLGridManager::getInstance()->setGridChoice("my.grid.com");
-		LLSLURL slurl = LLSLURL("x-grid-location-info://my.grid.com/app/foo/bar?12345");
+		LLSLURL slurl = LLSLURL("x-grid-info://my.grid.com/app/foo/bar?12345");
 		ensure_equals("app", slurl.getType(), LLSLURL::APP);
 		ensure_equals("appcmd", slurl.getAppCmd(), "foo");
 		ensure_equals("apppath", slurl.getAppPath().size(), 1);
@@ -363,7 +336,7 @@ namespace tut
 		ensure_equals("appquery", slurl.getAppQuery(), "12345");
 		ensure_equals("grid1", slurl.getGrid(), "my.grid.com");
 		
-		slurl = LLSLURL("x-grid-location-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about");
+		slurl = LLSLURL("x-grid-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about");
 		ensure_equals("app", slurl.getType(), LLSLURL::APP);
 		ensure_equals("appcmd", slurl.getAppCmd(), "agent");
 		ensure_equals("apppath", slurl.getAppPath().size(), 2);
@@ -372,7 +345,7 @@ namespace tut
 		ensure_equals("grid1", slurl.getGrid(), "lincoln.lindenlab.com");
 		
 		LLGridManager::getInstance()->setGridChoice("my.stupidgrid.com:8002");
-		slurl = LLSLURL("x-grid-location-info://my.stupidgrid.com:8002/app/foo/bar/baz?12345");
+		slurl = LLSLURL("x-grid-info://my.stupidgrid.com:8002/app/foo/bar/baz?12345");
 		ensure_equals("app", slurl.getType(), LLSLURL::APP);
 		ensure_equals("appcmd", slurl.getAppCmd(), "foo");
 		ensure_equals("apppath", slurl.getAppPath().size(), 2);
@@ -381,7 +354,7 @@ namespace tut
 		ensure_equals("appquery", slurl.getAppQuery(), "12345");
 		ensure_equals("grid1", slurl.getGrid(), "my.stupidgrid.com:8002");
 		
-		slurl = LLSLURL("x-grid-location-info://my.stupidgrid.com:8002/region/my%20region/1/2/3");
+		slurl = LLSLURL("x-grid-info://my.stupidgrid.com:8002/region/my%20region/1/2/3");
 		ensure_equals("login string", slurl.getLoginString(), "uri:my region&amp;1&amp;2&amp;3");
 		ensure_equals("location string", slurl.getLocationString(), "my region/1/2/3");
 		ensure_equals("grid", slurl.getGrid(), "my.stupidgrid.com:8002");
diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp
index ca65bc3cfc343b1bb18a3edb5c4519b4edfe60be..02592cc805b7cd6676dec8e58350a64fae08f95f 100644
--- a/indra/newview/tests/llviewernetwork_test.cpp
+++ b/indra/newview/tests/llviewernetwork_test.cpp
@@ -32,6 +32,7 @@
 #include "../test/lltut.h"
 #include "llcontrol.h"
 #include "llfile.h"
+#include "lltrans.h"
 #include "llxmlnode.h"
 #include "llnotificationsutil.h"
 
@@ -41,7 +42,7 @@ namespace
 	static const char * const TEST_FILENAME("llviewernetwork_test.xml");
 }
 
-const std::string REMOTE_GRID = "http://login.yrgrid.com:8002/";
+const std::string REMOTE_GRID = "http://grid.example.com:8002/";
 
 //----------------------------------------------------------------------------
 // Mock objects for the dependencies of the code we're testing
@@ -61,6 +62,7 @@ std::string gCmdLineGridChoice;
 std::string gCmdLineHelperURI;
 std::string gLoginPage;
 std::string gCurrentGrid;
+
 std::string LLControlGroup::getString(const std::string& name) const
 {
 	if (name == "CmdLineGridChoice")
@@ -388,7 +390,7 @@ namespace tut
 
 		LLGridManager::getInstance()->initialize(TEST_FILENAME);
 
-		LLGridManager::getInstance()->setGridChoice("util.agni.lindenlab.com");
+		LLGridManager::getInstance()->setGridChoice(std::string("util.agni.lindenlab.com"));
 		ensure_equals("getGridLabel",
 					  LLGridManager::getInstance()->getGridLabel(),
 					  std::string("Second Life"));
@@ -416,7 +418,7 @@ namespace tut
 					  uris[0],
 					  std::string("https://login.agni.lindenlab.com/cgi-bin/login.cgi"));
 
-		LLGridManager::getInstance()->setGridChoice("altgrid.long.name");
+		LLGridManager::getInstance()->setGridChoice(std::string("altgrid.long.name"));
 		ensure_equals("getGridLabel",
 					  LLGridManager::getInstance()->getGridLabel(),
 					  std::string("Alternative Grid"));