diff --git a/autobuild.xml b/autobuild.xml
index a43aed5e60294a048d86ef1368072313f6556f51..9e665dad6f507fcb4435b97019d350f418444b25 100755
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -2148,9 +2148,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>ff1ecca950d779721267ef854eb2d845</string>
+              <string>253519023e73d03fcb3feb2f7a2a8835</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/tut_3p-update-tut/rev/295661/arch/Linux/installer/tut-2008.11.30-common-295661.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/tut_3p-update-tut/rev/295891/arch/Linux/installer/tut-2008.11.30-common-295891.tar.bz2</string>
             </map>
             <key>name</key>
             <string>common</string>
diff --git a/indra/llcommon/tests/lldependencies_test.cpp b/indra/llcommon/tests/lldependencies_test.cpp
index 5395d785b6b92f991700bbaed0cdc7c62917921d..b5e189a4659cfd0d5fabc9f829932bc71616a1ee 100755
--- a/indra/llcommon/tests/lldependencies_test.cpp
+++ b/indra/llcommon/tests/lldependencies_test.cpp
@@ -37,29 +37,14 @@
 // associated header
 #include "../lldependencies.h"
 // other Linden headers
-#include "../test/lltut.h"
-
-using boost::assign::list_of;
 
 #if LL_WINDOWS
 #pragma warning (disable : 4675) // "resolved by ADL" -- just as I want!
 #endif
 
-typedef LLDependencies<> StringDeps;
-typedef StringDeps::KeyList StringList;
-
-// We use the very cool boost::assign::list_of() construct to specify vectors
-// of strings inline. For reasons on which I'm not entirely clear, though, it
-// needs a helper function. You can use list_of() to construct an implicit
-// StringList (std::vector<std::string>) by conversion, e.g. for a function
-// parameter -- but if you simply write StringList(list_of("etc.")), you get
-// ambiguity errors. Shrug!
-template<typename CONTAINER>
-CONTAINER make(const CONTAINER& data)
-{
-    return data;
-}
-
+/*****************************************************************************
+*   Display helpers: must be defined BEFORE lltut.h!
+*****************************************************************************/
 // Display an arbitary value as itself...
 template<typename T>
 std::ostream& display(std::ostream& out, const T& value)
@@ -113,6 +98,31 @@ std::ostream& operator<<(std::ostream& out, const std::set<ENTRY>& set)
     return out;
 }
 
+/*****************************************************************************
+*   Now we can #include lltut.h
+*****************************************************************************/
+#include "../test/lltut.h"
+
+/*****************************************************************************
+*   Other helpers
+*****************************************************************************/
+using boost::assign::list_of;
+
+typedef LLDependencies<> StringDeps;
+typedef StringDeps::KeyList StringList;
+
+// We use the very cool boost::assign::list_of() construct to specify vectors
+// of strings inline. For reasons on which I'm not entirely clear, though, it
+// needs a helper function. You can use list_of() to construct an implicit
+// StringList (std::vector<std::string>) by conversion, e.g. for a function
+// parameter -- but if you simply write StringList(list_of("etc.")), you get
+// ambiguity errors. Shrug!
+template<typename CONTAINER>
+CONTAINER make(const CONTAINER& data)
+{
+    return data;
+}
+
 const std::string& extract_key(const LLDependencies<>::value_type& entry)
 {
     return entry.first;
diff --git a/indra/llcommon/tests/llstring_test.cpp b/indra/llcommon/tests/llstring_test.cpp
index 93d3968dbfcfeb248dca90939cec82c233ef81da..a7aa347222aab47a257655a611b0a1454374ea55 100755
--- a/indra/llcommon/tests/llstring_test.cpp
+++ b/indra/llcommon/tests/llstring_test.cpp
@@ -27,11 +27,11 @@
  */
 
 #include "linden_common.h"
-#include "../test/lltut.h"
 
 #include <boost/assign/list_of.hpp>
 #include "../llstring.h"
-#include "StringVec.h"
+#include "StringVec.h"                  // must come BEFORE lltut.h
+#include "../test/lltut.h"
 
 using boost::assign::list_of;
 
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index adeb848e0338ab089c6d0f2a51933140692d7309..9ee64037398bf50264d69487a7d25445723ae13d 100755
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -488,7 +488,7 @@ namespace tut
     template<> template<>
     void lllogininstance_object::test<3>()
     {
-		skip();
+		skip("test fails with Xcode 6, skipping");
 		
 		set_test_name("Test Mandatory Update User Accepts");
 
@@ -517,7 +517,7 @@ namespace tut
 	template<> template<>
     void lllogininstance_object::test<4>()
     {
-		skip();
+		skip("test fails with Xcode 6, skipping");
 		
 		set_test_name("Test Mandatory Update User Decline");
 
diff --git a/indra/test/lltut.cpp b/indra/test/lltut.cpp
index 2730fb34d7319a3ba4ac30c9e10bf1edd4e8c3fd..5a8ee87afd54828592d4a53fc7cb2ba3a0f286d8 100755
--- a/indra/test/lltut.cpp
+++ b/indra/test/lltut.cpp
@@ -38,14 +38,14 @@
 
 namespace tut
 {
-	void ensure_equals(const char* msg, const LLDate& actual,
+	void ensure_equals(const std::string& msg, const LLDate& actual,
 		const LLDate& expected)
 	{
 		ensure_equals(msg,
 			actual.secondsSinceEpoch(), expected.secondsSinceEpoch());
 	}
 
-	void ensure_equals(const char* msg, const LLURI& actual,
+	void ensure_equals(const std::string& msg, const LLURI& actual,
 		const LLURI& expected)
 	{
 		ensure_equals(msg,
@@ -61,18 +61,12 @@ namespace tut
 	// if the LLSD::Binary type ever diverges from what we expect in lltut.h,
 	// that divergence will produce an error: no definition will match that
 	// declaration.
-	void ensure_equals(const char* msg,
-		const LLSD::Binary& actual, const LLSD::Binary& expected)
-	{
-		ensure_equals(std::string(msg? msg : ""), actual, expected);
-	}
-
 	void ensure_equals(const std::string& msg,
 		const LLSD::Binary& actual, const LLSD::Binary& expected)
 	{
 		ensure_equals(msg + " size", actual.size(), expected.size());
 		
-		std::vector<U8>::const_iterator i, j;
+		LLSD::Binary::const_iterator i, j;
 		int k;
 		for (i = actual.begin(), j = expected.begin(), k = 0;
 			i != actual.end();
@@ -82,12 +76,6 @@ namespace tut
 		}
 	}
 
-	void ensure_equals(const char* m, const LLSD& actual,
-		const LLSD& expected)
-    {
-        ensure_equals(std::string(m? m : ""), actual, expected);
-    }
-
 	void ensure_equals(const std::string& msg, const LLSD& actual,
 		const LLSD& expected)
 	{
diff --git a/indra/test/lltut.h b/indra/test/lltut.h
index 6cb670b2a398e16d40cab3cb4a658da983408614..b334fb51e25a0cac15f1793f7623c034c4466c1d 100755
--- a/indra/test/lltut.h
+++ b/indra/test/lltut.h
@@ -38,35 +38,24 @@ class LLURI;
 
 namespace tut
 {
-	template <class T,class Q>
 	void ensure_equals(const std::string& msg,
-		const Q& actual,const T& expected)
-		{ ensure_equals(msg.c_str(), actual, expected); }
-
-	void ensure_equals(const char* msg,
 		const LLDate& actual, const LLDate& expected);
 
-	void ensure_equals(const char* msg,
+	void ensure_equals(const std::string& msg,
 		const LLURI& actual, const LLURI& expected);
 
 	// std::vector<U8> is the current definition of LLSD::Binary. Because
 	// we're only forward-declaring LLSD in this header file, we can't
 	// directly reference that nested type. If the build complains that
-	// there's no definition for either of these declarations, it could be
-	// that LLSD::Binary has changed, and that these declarations must be
-	// adjusted to match.
-	void ensure_equals(const char* msg,
-		const std::vector<U8>& actual, const std::vector<U8>& expected);
-
+	// there's no definition for this declaration, it could be that
+	// LLSD::Binary has changed, and that this declaration must be adjusted to
+	// match.
 	void ensure_equals(const std::string& msg,
 		const std::vector<U8>& actual, const std::vector<U8>& expected);
 
-	void ensure_equals(const char* msg,
-		const LLSD& actual, const LLSD& expected);
-
 	void ensure_equals(const std::string& msg,
 		const LLSD& actual, const LLSD& expected);
-	
+
 	void ensure_starts_with(const std::string& msg,
 		const std::string& actual, const std::string& expectedStart);