diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h
index 046cd69543fa4a7eb6202e9a9c5593ee0d6c699f..5268cf9a4d64a5c20fc2d9de103c48430a4baebc 100755
--- a/indra/llcommon/llerror.h
+++ b/indra/llcommon/llerror.h
@@ -72,11 +72,13 @@ const int LL_ERR_NOERR = 0;
 
 #endif // !_DEBUG
 
-#define llassert_always(func)	if (LL_UNLIKELY(!(func))) LL_ERRS() << "ASSERT (" << #func << ")" << LL_ENDL;
+#define llassert_always_msg(func, msg) if (LL_UNLIKELY(!(func))) LL_ERRS() << "ASSERT (" << msg << ")" << LL_ENDL
+
+#define llassert_always(func)	llassert_always_msg(func, #func)
 
 #ifdef SHOW_ASSERT
-#define llassert(func)			llassert_always(func)
-#define llverify(func)			llassert_always(func)
+#define llassert(func)			llassert_always_msg(func, #func)
+#define llverify(func)			llassert_always_msg(func, #func)
 #else
 #define llassert(func)
 #define llverify(func)			do {if (func) {}} while(0)
diff --git a/indra/llcommon/llinstancetracker.h b/indra/llcommon/llinstancetracker.h
index 3fdb84cfd7cc4967c2c17b04fda22938400ff8c8..3107415ccf4957866db6660fc64be7cea25a83e4 100755
--- a/indra/llcommon/llinstancetracker.h
+++ b/indra/llcommon/llinstancetracker.h
@@ -64,8 +64,8 @@ LL_COMMON_API void assert_main_thread();
 
 enum EInstanceTrackerAllowKeyCollisions
 {
-	InstanceTrackerAllowKeyCollisions,
-	InstanceTrackerDisallowKeyCollisions
+	LLInstanceTrackerAllowKeyCollisions,
+	LLInstanceTrackerDisallowKeyCollisions
 };
 
 /// This mix-in class adds support for tracking all instances of the specified class parameter T
@@ -73,7 +73,7 @@ enum EInstanceTrackerAllowKeyCollisions
 /// If KEY is not provided, then instances are stored in a simple set
 /// @NOTE: see explicit specialization below for default KEY==void case
 /// @NOTE: this class is not thread-safe unless used as read-only
-template<typename T, typename KEY = void, EInstanceTrackerAllowKeyCollisions ALLOW_KEY_COLLISIONS = InstanceTrackerDisallowKeyCollisions>
+template<typename T, typename KEY = void, EInstanceTrackerAllowKeyCollisions ALLOW_KEY_COLLISIONS = LLInstanceTrackerDisallowKeyCollisions>
 class LLInstanceTracker : public LLInstanceTrackerBase
 {
 	typedef LLInstanceTracker<T, KEY> self_t;
@@ -216,7 +216,7 @@ class LLInstanceTracker : public LLInstanceTrackerBase
 		mInstanceKey = key; 
 		InstanceMap& map = getMap_();
 		typename InstanceMap::iterator insertion_point_it = map.lower_bound(key);
-		if (ALLOW_KEY_COLLISIONS == InstanceTrackerDisallowKeyCollisions
+		if (ALLOW_KEY_COLLISIONS == LLInstanceTrackerDisallowKeyCollisions
 			&& insertion_point_it != map.end() 
 			&& insertion_point_it->first == key)
 		{
diff --git a/indra/llcommon/llthreadlocalstorage.h b/indra/llcommon/llthreadlocalstorage.h
index 177e8222276483551327747ef6ee594914e86e39..ec3b52c8cb74a5fc363217f488e6ca48a6020f59 100644
--- a/indra/llcommon/llthreadlocalstorage.h
+++ b/indra/llcommon/llthreadlocalstorage.h
@@ -43,7 +43,7 @@ class LLThreadLocalPointerBase : public LLInstanceTracker<LLThreadLocalPointerBa
 	}
 
 	LLThreadLocalPointerBase( const LLThreadLocalPointerBase& other)
-		:	mThreadKey(NULL)
+	:	mThreadKey(NULL)
 	{
 		if (sInitialized)
 		{
diff --git a/indra/llcommon/lltrace.h b/indra/llcommon/lltrace.h
index b499036af24a3dc41fcafbb290519ed265c35bfa..8b67dd8f445f50ee3f755921f7ddce5bd73db1a2 100644
--- a/indra/llcommon/lltrace.h
+++ b/indra/llcommon/lltrace.h
@@ -69,10 +69,10 @@ class StatBase
 template<typename ACCUMULATOR>
 class StatType 
 :	public StatBase,
-	public LLInstanceTracker<StatType<ACCUMULATOR>, std::string, InstanceTrackerAllowKeyCollisions>
+	public LLInstanceTracker<StatType<ACCUMULATOR>, std::string, LLInstanceTrackerAllowKeyCollisions>
 {
 public:
-	typedef LLInstanceTracker<StatType<ACCUMULATOR>, std::string, InstanceTrackerAllowKeyCollisions> instance_tracker_t;
+	typedef LLInstanceTracker<StatType<ACCUMULATOR>, std::string, LLInstanceTrackerAllowKeyCollisions> instance_tracker_t;
 	StatType(const char* name, const char* description)
 	:	instance_tracker_t(name),
 		StatBase(name, description),
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 3e1cbb2ac607990b9505f18d92b52cb38edb19ad..0cf0fc13228b5e71ad46354dd8780dc68166269f 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -238,6 +238,9 @@ set(viewer_SOURCE_FILES
     llfloaterhelpbrowser.cpp
     llfloaterhud.cpp
     llfloaterimagepreview.cpp
+    llfloaterimsessiontab.cpp
+    llfloaterimsession.cpp
+    llfloaterimcontainer.cpp
     llfloaterinspect.cpp
     llfloaterinventory.cpp
     llfloaterjoystick.cpp
@@ -320,9 +323,6 @@ set(viewer_SOURCE_FILES
     llhudrender.cpp
     llhudtext.cpp
     llhudview.cpp
-    llfloaterimsessiontab.cpp
-    llfloaterimsession.cpp
-    llfloaterimcontainer.cpp
     llimhandler.cpp
     llimview.cpp
     llinspect.cpp
@@ -826,6 +826,12 @@ set(viewer_HEADER_FILES
     llfloaterhelpbrowser.h
     llfloaterhud.h
     llfloaterimagepreview.h
+    llfloaterimnearbychat.h
+    llfloaterimnearbychathandler.h
+    llfloaterimnearbychatlistener.h
+    llfloaterimsessiontab.h
+    llfloaterimsession.h
+    llfloaterimcontainer.h
     llfloaterinspect.h
     llfloaterinventory.h
     llfloaterjoystick.h
@@ -907,9 +913,6 @@ set(viewer_HEADER_FILES
     llhudrender.h
     llhudtext.h
     llhudview.h
-    llfloaterimsessiontab.h
-    llfloaterimsession.h
-    llfloaterimcontainer.h
     llimview.h
     llinspect.h
     llinspectavatar.h
@@ -961,9 +964,6 @@ set(viewer_HEADER_FILES
     llnameeditor.h
     llnamelistctrl.h
     llnavigationbar.h
-    llfloaterimnearbychat.h
-    llfloaterimnearbychathandler.h
-    llfloaterimnearbychatlistener.h
     llnetmap.h
     llnotificationhandler.h
     llnotificationmanager.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index fb0d9c98d479e02742a95be7c81e85cae5d92dd0..09d74a7f5e8b4dd45e41dfaa5f9ece95d7b26496 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1467,7 +1467,18 @@
         <real>0.0</real>
       </array>
     </map>
-    <key>CameraPositionSmoothing</key>
+    <key>RestoreCameraPosOnLogin</key>
+    <map>
+      <key>Comment</key>
+      <string>Reset camera position to location at logout</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+			<integer>0</integer>
+    </map>
+		<key>CameraPositionSmoothing</key>
     <map>
       <key>Comment</key>
       <string>Smooths camera position over time</string>
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 72c76f9424fc8d06a30b4cad2326af7e7901e148..de3be7f3c5ac70aeaf86e3677c23759981f75064 100755
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1962,10 +1962,9 @@ bool idle_startup()
 				((start_slurl.getType() == LLSLURL::LAST_LOCATION) && (gAgentStartLocation == "last")) ||
 				((start_slurl.getType() == LLSLURL::HOME_LOCATION) && (gAgentStartLocation == "home")))
 			{
-				// Start location is OK
-				// Disabled code to restore camera location and focus if logging in to default location
-				static bool samename = false;
-				if (samename)
+				if (start_slurl.getType() == LLSLURL::LAST_LOCATION 
+					&& gAgentStartLocation == "last" 
+					&& gSavedSettings.getBOOL("RestoreCameraPosOnLogin"))
 				{
 					// restore old camera pos
 					gAgentCamera.setFocusOnAvatar(FALSE, FALSE);
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 94d07b37effa3f2b57945876d910b789813b77a1..5b110d843decb0e1ec040e4b6ece77e5dd62ad47 100755
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -57,7 +57,7 @@ LLToastNotifyPanel::button_click_signal_t LLToastNotifyPanel::sButtonClickSignal
 
 LLToastNotifyPanel::LLToastNotifyPanel(const LLNotificationPtr& notification, const LLRect& rect, bool show_images) 
 :	LLToastPanel(notification),
-	LLInstanceTracker<LLToastNotifyPanel, LLUUID>(notification->getID())
+	LLInstanceTracker<LLToastNotifyPanel, LLUUID, LLInstanceTrackerAllowKeyCollisions>(notification->getID())
 {
 	init(rect, show_images);
 }
diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h
index d02171b512c3bc91cfad83a7ad25436fa51d979a..dfd6e110b9b3149dc8659608afd46eb311d72196 100755
--- a/indra/newview/lltoastnotifypanel.h
+++ b/indra/newview/lltoastnotifypanel.h
@@ -47,7 +47,7 @@ class LLNotificationForm;
  * @deprecated this class will be removed after all toast panel types are
  *  implemented in separate classes.
  */
-class LLToastNotifyPanel: public LLToastPanel, public LLInstanceTracker<LLToastNotifyPanel, LLUUID>
+class LLToastNotifyPanel: public LLToastPanel, public LLInstanceTracker<LLToastNotifyPanel, LLUUID, LLInstanceTrackerAllowKeyCollisions>
 {
 public:
 	/**