diff --git a/indra/llappearance/llwearable.cpp b/indra/llappearance/llwearable.cpp
index 41c06f4368336cfee6e8369e7e0b3bb2ebd517d6..5ca9f55ac8ce9d33fa2a4cb905e705cd5d5f538e 100755
--- a/indra/llappearance/llwearable.cpp
+++ b/indra/llappearance/llwearable.cpp
@@ -88,7 +88,7 @@ LLAssetType::EType LLWearable::getAssetType() const
 
 BOOL LLWearable::exportFile(const std::string& filename) const
 {
-	llofstream ofs(filename, std::ios_base::out | std::ios_base::trunc | std::ios_base::binary);
+	llofstream ofs(filename.c_str(), std::ios_base::out | std::ios_base::trunc | std::ios_base::binary);
 	return ofs.is_open() && exportStream(ofs);
 }
 
@@ -204,7 +204,7 @@ void LLWearable::createLayers(S32 te, LLAvatarAppearance *avatarp)
 LLWearable::EImportResult LLWearable::importFile(const std::string& filename,
 												 LLAvatarAppearance* avatarp )
 {
-	llifstream ifs(filename, std::ios_base::in | std::ios_base::binary);
+	llifstream ifs(filename.c_str(), std::ios_base::in | std::ios_base::binary);
 	return (! ifs.is_open())? FAILURE : importStream(ifs, avatarp);
 }
 
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index 8119b14887ef2e95c2bd0ee445bfdc004af0cc0c..2100989316446e087dc021711f70f357c5d37320 100755
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -113,7 +113,7 @@ namespace {
 	public:
 		RecordToFile(const std::string& filename)
 		{
-			mFile.open(filename, llofstream::out | llofstream::app);
+			mFile.open(filename.c_str(), std::ios_base::out | std::ios_base::app);
 			if (!mFile)
 			{
 				LL_INFOS() << "Error setting log file to " << filename << LL_ENDL;
@@ -335,7 +335,7 @@ namespace
 		LLSD configuration;
 
 		{
-			llifstream file(filename());
+			llifstream file(filename().c_str());
 			if (file.is_open())
 			{
 				LLSDSerialize::fromXML(configuration, file);
diff --git a/indra/llcommon/llfile.cpp b/indra/llcommon/llfile.cpp
index 304d702979c9a8b7273df01db88cdfcebe64fad8..295c97eac8949543d8fa79ffbd43d189dc52fcbc 100755
--- a/indra/llcommon/llfile.cpp
+++ b/indra/llcommon/llfile.cpp
@@ -424,26 +424,6 @@ LLFILE *	LLFile::_Fiopen(const std::string& filename,
 /************** llstdio file buffer ********************************/
 
 
-//llstdio_filebuf* llstdio_filebuf::open(const char *_Filename,
-//	ios_base::openmode _Mode)
-//{
-//#if LL_WINDOWS
-//	_Filet *_File;
-//	if (is_open() || (_File = LLFILE::_Fiopen(_Filename, _Mode)) == 0)
-//		return (0);	// open failed
-//
-//	_Init(_File, _Openfl);
-//	_Initcvt(&_USE(_Mysb::getloc(), _Cvt));
-//	return (this);	// open succeeded
-//#else
-//	std::filebuf* _file = std::filebuf::open(_Filename, _Mode);
-//	if (NULL == _file) return NULL;
-//	return this;
-//#endif
-//}
-
-
-// *TODO: Seek the underlying c stream for better cross-platform compatibility?
 #if !LL_WINDOWS
 llstdio_filebuf::int_type llstdio_filebuf::overflow(llstdio_filebuf::int_type __c)
 {
@@ -865,23 +845,19 @@ int llstdio_filebuf::sync()
 }
 #endif
 
+#if LL_WINDOWS
 /************** input file stream ********************************/
 
-
-llifstream::llifstream() : _M_filebuf(),
-#if LL_WINDOWS
-	std::istream(&_M_filebuf) {}
-#else
-	std::istream()
+llifstream::llifstream() :
+    _M_filebuf(),
+	std::istream(&_M_filebuf)
 {
-	this->init(&_M_filebuf);
 }
-#endif
 
 // explicit
 llifstream::llifstream(const std::string& _Filename, 
-		ios_base::openmode _Mode) : _M_filebuf(),
-#if LL_WINDOWS
+                       ios_base::openmode _Mode) :
+    _M_filebuf(),
 	std::istream(&_M_filebuf)
 {
 	llutf16string wideName = utf8str_to_utf16str( _Filename );
@@ -890,18 +866,11 @@ llifstream::llifstream(const std::string& _Filename,
 		_Myios::setstate(ios_base::failbit);
 	}
 }
-#else
-	std::istream()
-{
-	this->init(&_M_filebuf);
-	this->open(_Filename.c_str(), _Mode | ios_base::in);
-}
-#endif
 
 // explicit
 llifstream::llifstream(const char* _Filename, 
-		ios_base::openmode _Mode) : _M_filebuf(),
-#if LL_WINDOWS
+                       ios_base::openmode _Mode) :
+    _M_filebuf(),
 	std::istream(&_M_filebuf)
 {
 	llutf16string wideName = utf8str_to_utf16str( _Filename );
@@ -910,40 +879,6 @@ llifstream::llifstream(const char* _Filename,
 		_Myios::setstate(ios_base::failbit);
 	}
 }
-#else
-	std::istream()
-{
-	this->init(&_M_filebuf);
-	this->open(_Filename, _Mode | ios_base::in);
-}
-#endif
-
-
-#if llstream_LLFILE
-// explicit
-llifstream::llifstream(_Filet *_File,
-		ios_base::openmode _Mode, size_t _Size) :
-	_M_filebuf(_File, _Mode, _Size),
-#if LL_WINDOWS
-	std::istream(&_M_filebuf) {}
-#else
-	std::istream()
-{
-	this->init(&_M_filebuf);
-}
-#endif
-
-#if !LL_WINDOWS
-// explicit
-llifstream::llifstream(int __fd,
-		ios_base::openmode _Mode, size_t _Size) :
-	_M_filebuf(__fd, _Mode, _Size),
-	std::istream()
-{
-	this->init(&_M_filebuf);
-}
-#endif
-#endif // llstream_LLFILE
 
 bool llifstream::is_open() const
 {	// test if C stream has been opened
@@ -952,8 +887,6 @@ bool llifstream::is_open() const
 
 void llifstream::open(const char* _Filename, ios_base::openmode _Mode)
 {	// open a C stream with specified mode
-
-#if LL_WINDOWS
 	llutf16string wideName = utf8str_to_utf16str( _Filename );
 	if (_M_filebuf.open( wideName.c_str(), _Mode | ios_base::in) == 0)
 	{
@@ -963,27 +896,13 @@ void llifstream::open(const char* _Filename, ios_base::openmode _Mode)
 	{
 		_Myios::clear();
 	}
-#else
-	if (_M_filebuf.open(_Filename, _Mode | ios_base::in) == 0)
-	{
-		this->setstate(ios_base::failbit);
-	}
-	else
-	{
-		this->clear();
-	}
-#endif
 }
 
 void llifstream::close()
 {	// close the C stream
 	if (_M_filebuf.close() == 0)
 	{
-#if LL_WINDOWS
 		_Myios::setstate(ios_base::failbit);
-#else
-		this->setstate(ios_base::failbit);
-#endif
 	}
 }
 
@@ -991,20 +910,16 @@ void llifstream::close()
 /************** output file stream ********************************/
 
 
-llofstream::llofstream() : _M_filebuf(),
-#if LL_WINDOWS
-	std::ostream(&_M_filebuf) {}
-#else
-	std::ostream()
+llofstream::llofstream() :
+    _M_filebuf(),
+	std::ostream(&_M_filebuf)
 {
-	this->init(&_M_filebuf);
 }
-#endif
 
 // explicit
 llofstream::llofstream(const std::string& _Filename,
-		ios_base::openmode _Mode) : _M_filebuf(),
-#if LL_WINDOWS
+                       ios_base::openmode _Mode) :
+    _M_filebuf(),
 	std::ostream(&_M_filebuf)
 {
 	llutf16string wideName = utf8str_to_utf16str( _Filename );
@@ -1013,18 +928,11 @@ llofstream::llofstream(const std::string& _Filename,
 		_Myios::setstate(ios_base::failbit);
 	}
 }
-#else
-	std::ostream()
-{
-	this->init(&_M_filebuf);
-	this->open(_Filename.c_str(), _Mode | ios_base::out);
-}
-#endif
 
 // explicit
 llofstream::llofstream(const char* _Filename,
-		ios_base::openmode _Mode) : _M_filebuf(),
-#if LL_WINDOWS
+                       ios_base::openmode _Mode) :
+    _M_filebuf(),
 	std::ostream(&_M_filebuf)
 {
 	llutf16string wideName = utf8str_to_utf16str( _Filename );
@@ -1033,39 +941,6 @@ llofstream::llofstream(const char* _Filename,
 		_Myios::setstate(ios_base::failbit);
 	}
 }
-#else
-	std::ostream()
-{
-	this->init(&_M_filebuf);
-	this->open(_Filename, _Mode | ios_base::out);
-}
-#endif
-
-#if llstream_LLFILE
-// explicit
-llofstream::llofstream(_Filet *_File,
-			ios_base::openmode _Mode, size_t _Size) :
-	_M_filebuf(_File, _Mode, _Size),
-#if LL_WINDOWS
-	std::ostream(&_M_filebuf) {}
-#else
-	std::ostream()
-{
-	this->init(&_M_filebuf);
-}
-#endif
-
-#if !LL_WINDOWS
-// explicit
-llofstream::llofstream(int __fd,
-			ios_base::openmode _Mode, size_t _Size) :
-	_M_filebuf(__fd, _Mode, _Size),
-	std::ostream()
-{
-	this->init(&_M_filebuf);
-}
-#endif
-#endif // llstream_LLFILE
 
 bool llofstream::is_open() const
 {	// test if C stream has been opened
@@ -1074,7 +949,6 @@ bool llofstream::is_open() const
 
 void llofstream::open(const char* _Filename, ios_base::openmode _Mode)
 {	// open a C stream with specified mode
-#if LL_WINDOWS
 	llutf16string wideName = utf8str_to_utf16str( _Filename );
 	if (_M_filebuf.open( wideName.c_str(), _Mode | ios_base::out) == 0)
 	{
@@ -1084,27 +958,13 @@ void llofstream::open(const char* _Filename, ios_base::openmode _Mode)
 	{
 		_Myios::clear();
 	}
-#else
-	if (_M_filebuf.open(_Filename, _Mode | ios_base::out) == 0)
-	{
-		this->setstate(ios_base::failbit);
-	}
-	else
-	{
-		this->clear();
-	}
-#endif
 }
 
 void llofstream::close()
 {	// close the C stream
 	if (_M_filebuf.close() == 0)
 	{
-#if LL_WINDOWS
 		_Myios::setstate(ios_base::failbit);
-#else
-		this->setstate(ios_base::failbit);
-#endif
 	}
 }
 
@@ -1134,4 +994,4 @@ std::streamsize llofstream_size(llofstream& ofstr)
 	return pos_end - pos_beg;
 }
 
-
+#endif  // LL_WINDOWS
diff --git a/indra/llcommon/llfile.h b/indra/llcommon/llfile.h
index 44a1e42fa5ad2de97a09ddee7d6c3274520003bc..347c9867aa6f5633fb4d961e560d7e72e37fd3b1 100755
--- a/indra/llcommon/llfile.h
+++ b/indra/llcommon/llfile.h
@@ -86,12 +86,6 @@ class LL_COMMON_API LLFile
 	static  const char * tmpdir();
 };
 
-// Remove ll[io]fstream support for [LL]FILE*, preparing to remove dependency
-// on GNU's standard library.
-#if ! defined(llstream_LLFILE)
-#define llstream_LLFILE 0
-#endif
-
 /**
  *  @brief Provides a layer of compatibility for C/POSIX.
  *
@@ -198,7 +192,7 @@ class LL_COMMON_API llstdio_filebuf : public _Myfb
 #endif
 };
 
-
+#if LL_WINDOWS
 /**
  *  @brief  Controlling input for files.
  *
@@ -207,11 +201,11 @@ class LL_COMMON_API llstdio_filebuf : public _Myfb
  *  sequence, an instance of std::basic_filebuf (or a platform-specific derivative)
  *  which allows construction using a pre-exisintg file stream buffer. 
  *  We refer to this std::basic_filebuf (or derivative) as @c sb.
-*/
+ */
 class LL_COMMON_API llifstream	:	public	std::istream
 {
 	// input stream associated with a C stream
-public:
+  public:
 	// Constructors:
 	/**
 	 *  @brief  Default constructor.
@@ -219,7 +213,7 @@ class LL_COMMON_API llifstream	:	public	std::istream
 	 *  Initializes @c sb using its default constructor, and passes
 	 *  @c &sb to the base class initializer.  Does not open any files
 	 *  (you haven't given it a filename to open).
-	*/
+     */
 	llifstream();
 
 	/**
@@ -228,50 +222,21 @@ class LL_COMMON_API llifstream	:	public	std::istream
 	 *  @param  Mode  Open file in specified mode (see std::ios_base).
 	 *
      *  @c ios_base::in is automatically included in @a mode.
-	*/
+     */
 	explicit llifstream(const std::string& _Filename,
-			ios_base::openmode _Mode = ios_base::in);
+                        ios_base::openmode _Mode = ios_base::in);
 	explicit llifstream(const char* _Filename,
-			ios_base::openmode _Mode = ios_base::in);
-
-#if llstream_LLFILE
-	/**
-	 *  @brief  Create a stream using an open c file stream.
-	 *  @param  File  An open @c FILE*.
-        @param  Mode  Same meaning as in a standard filebuf.
-        @param  Size  Optimal or preferred size of internal buffer, in chars.
-                      Defaults to system's @c BUFSIZ.
-	*/
-	explicit llifstream(_Filet *_File,
-			ios_base::openmode _Mode = ios_base::in,
-			//size_t _Size = static_cast<size_t>(BUFSIZ));
-			size_t _Size = static_cast<size_t>(1));
-	
-	/**
-	 *  @brief  Create a stream using an open file descriptor.
-	 *  @param  fd    An open file descriptor.
-        @param  Mode  Same meaning as in a standard filebuf.
-        @param  Size  Optimal or preferred size of internal buffer, in chars.
-                      Defaults to system's @c BUFSIZ.
-	*/
-#if !LL_WINDOWS
-	explicit llifstream(int __fd,
-			ios_base::openmode _Mode = ios_base::in,
-			//size_t _Size = static_cast<size_t>(BUFSIZ));
-			size_t _Size = static_cast<size_t>(1));
-#endif
-#endif // llstream_LLFILE
+                        ios_base::openmode _Mode = ios_base::in);
 
 	/**
 	 *  @brief  The destructor does nothing.
 	 *
 	 *  The file is closed by the filebuf object, not the formatting
 	 *  stream.
-	*/
+     */
 	virtual ~llifstream() {}
 
 	// Members:
-#if llstream_LLFILE
 	/**
 	 *  @brief  Accessing the underlying buffer.
 	 *  @return  The current basic_filebuf buffer.
@@ -280,12 +245,11 @@ class LL_COMMON_API llifstream	:	public	std::istream
 	*/
 	llstdio_filebuf* rdbuf() const
 	{ return const_cast<llstdio_filebuf*>(&_M_filebuf); }
-#endif // llstream_LLFILE
 
 	/**
 	 *  @brief  Wrapper to test for an open file.
 	 *  @return  @c rdbuf()->is_open()
-	*/
+     */
 	bool is_open() const;
 
 	/**
@@ -295,22 +259,22 @@ class LL_COMMON_API llifstream	:	public	std::istream
 	 *
 	 *  Calls @c llstdio_filebuf::open(s,mode|in).  If that function
 	 *  fails, @c failbit is set in the stream's error state.
-	*/
+     */
 	void open(const std::string& _Filename,
-			ios_base::openmode _Mode = ios_base::in)
+              ios_base::openmode _Mode = ios_base::in)
 	{ open(_Filename.c_str(), _Mode); }
 	void open(const char* _Filename,
-			ios_base::openmode _Mode = ios_base::in);
+              ios_base::openmode _Mode = ios_base::in);
 
 	/**
 	 *  @brief  Close the file.
 	 *
 	 *  Calls @c llstdio_filebuf::close().  If that function
 	 *  fails, @c failbit is set in the stream's error state.
-	*/
+     */
 	void close();
 
-private:
+  private:
 	llstdio_filebuf _M_filebuf;
 };
 
@@ -326,7 +290,7 @@ class LL_COMMON_API llifstream	:	public	std::istream
 */
 class LL_COMMON_API llofstream	:	public	std::ostream
 {
-public:
+  public:
 	// Constructors:
 	/**
 	 *  @brief  Default constructor.
@@ -334,7 +298,7 @@ class LL_COMMON_API llofstream	:	public	std::ostream
 	 *  Initializes @c sb using its default constructor, and passes
 	 *  @c &sb to the base class initializer.  Does not open any files
 	 *  (you haven't given it a filename to open).
-	*/
+     */
 	llofstream();
 
 	/**
@@ -344,39 +308,11 @@ class LL_COMMON_API llofstream	:	public	std::ostream
 	 *
 	 *  @c ios_base::out|ios_base::trunc is automatically included in
 	 *  @a mode.
-	*/
+     */
 	explicit llofstream(const std::string& _Filename,
-			ios_base::openmode _Mode = ios_base::out|ios_base::trunc);
+                        ios_base::openmode _Mode = ios_base::out|ios_base::trunc);
 	explicit llofstream(const char* _Filename,
-			ios_base::openmode _Mode = ios_base::out|ios_base::trunc);
-
-#if llstream_LLFILE
-	/**
-	 *  @brief  Create a stream using an open c file stream.
-	 *  @param  File  An open @c FILE*.
-        @param  Mode  Same meaning as in a standard filebuf.
-        @param  Size  Optimal or preferred size of internal buffer, in chars.
-                      Defaults to system's @c BUFSIZ.
-	*/
-	explicit llofstream(_Filet *_File,
-			ios_base::openmode _Mode = ios_base::out,
-			//size_t _Size = static_cast<size_t>(BUFSIZ));
-			size_t _Size = static_cast<size_t>(1));
-
-	/**
-	 *  @brief  Create a stream using an open file descriptor.
-	 *  @param  fd    An open file descriptor.
-        @param  Mode  Same meaning as in a standard filebuf.
-        @param  Size  Optimal or preferred size of internal buffer, in chars.
-                      Defaults to system's @c BUFSIZ.
-	*/
-#if !LL_WINDOWS
-	explicit llofstream(int __fd,
-			ios_base::openmode _Mode = ios_base::out,
-			//size_t _Size = static_cast<size_t>(BUFSIZ));
-			size_t _Size = static_cast<size_t>(1));
-#endif
-#endif // llstream_LLFILE
+                        ios_base::openmode _Mode = ios_base::out|ios_base::trunc);
 
 	/**
 	 *  @brief  The destructor does nothing.
@@ -387,7 +323,6 @@ class LL_COMMON_API llofstream	:	public	std::ostream
 	virtual ~llofstream() {}
 
 	// Members:
-#if llstream_LLFILE
 	/**
 	 *  @brief  Accessing the underlying buffer.
 	 *  @return  The current basic_filebuf buffer.
@@ -396,7 +331,6 @@ class LL_COMMON_API llofstream	:	public	std::ostream
 	*/
 	llstdio_filebuf* rdbuf() const
 	{ return const_cast<llstdio_filebuf*>(&_M_filebuf); }
-#endif // llstream_LLFILE
 
 	/**
 	 *  @brief  Wrapper to test for an open file.
@@ -411,22 +345,22 @@ class LL_COMMON_API llofstream	:	public	std::ostream
 	 *
 	 *  Calls @c llstdio_filebuf::open(s,mode|out).  If that function
 	 *  fails, @c failbit is set in the stream's error state.
-	*/
+     */
 	void open(const std::string& _Filename,
-			ios_base::openmode _Mode = ios_base::out|ios_base::trunc)
+              ios_base::openmode _Mode = ios_base::out|ios_base::trunc)
 	{ open(_Filename.c_str(), _Mode); }
 	void open(const char* _Filename,
-			ios_base::openmode _Mode = ios_base::out|ios_base::trunc);
+              ios_base::openmode _Mode = ios_base::out|ios_base::trunc);
 
 	/**
 	 *  @brief  Close the file.
 	 *
 	 *  Calls @c llstdio_filebuf::close().  If that function
 	 *  fails, @c failbit is set in the stream's error state.
-	*/
+     */
 	void close();
 
-private:
+  private:
 	llstdio_filebuf _M_filebuf;
 };
 
@@ -441,4 +375,12 @@ class LL_COMMON_API llofstream	:	public	std::ostream
 std::streamsize LL_COMMON_API llifstream_size(llifstream& fstr);
 std::streamsize LL_COMMON_API llofstream_size(llofstream& fstr);
 
+#else // ! LL_WINDOWS
+
+// on non-windows, llifstream and llofstream are just mapped directly to the std:: equivalents
+typedef std::ifstream llifstream;
+typedef std::ofstream llofstream;
+
+#endif // LL_WINDOWS or ! LL_WINDOWS
+
 #endif // not LL_LLFILE_H
diff --git a/indra/llcommon/llliveappconfig.cpp b/indra/llcommon/llliveappconfig.cpp
index 7c87c5a1a03574444ffa443ddea4091028e9b752..a9b1cdf4f641cfb9fdff930b5ed1b601cadaa792 100755
--- a/indra/llcommon/llliveappconfig.cpp
+++ b/indra/llcommon/llliveappconfig.cpp
@@ -49,7 +49,7 @@ bool LLLiveAppConfig::loadFile()
 {
 	LL_INFOS() << "LLLiveAppConfig::loadFile(): reading from "
 		<< filename() << LL_ENDL;
-    llifstream file(filename());
+    llifstream file(filename().c_str());
 	LLSD config;
     if (file.is_open())
     {
diff --git a/indra/llcommon/lllivefile.cpp b/indra/llcommon/lllivefile.cpp
index c1987baf55f972c4f7d1b2417f8f2ee212cb1b6c..ea485c2d86aab59f3dae9e502ac92b038f6ed999 100755
--- a/indra/llcommon/lllivefile.cpp
+++ b/indra/llcommon/lllivefile.cpp
@@ -51,6 +51,8 @@ class LLLiveFile::Impl
 	bool mLastExists;
 	
 	LLEventTimer* mEventTimer;
+private:
+    LOG_CLASS(LLLiveFile);
 };
 
 LLLiveFile::Impl::Impl(const std::string& filename, const F32 refresh_period)
@@ -83,46 +85,51 @@ LLLiveFile::~LLLiveFile()
 
 bool LLLiveFile::Impl::check()
 {
-	if (!mForceCheck && mRefreshTimer.getElapsedTimeF32() < mRefreshPeriod)
+    bool detected_change = false;
+    // Skip the check if not enough time has elapsed and we're not
+    // forcing a check of the file
+	if (mForceCheck || mRefreshTimer.getElapsedTimeF32() >= mRefreshPeriod)
 	{
-		// Skip the check if not enough time has elapsed and we're not
-		// forcing a check of the file
-		return false;
-	}
-	mForceCheck = false;
-	mRefreshTimer.reset();
-
-	// Stat the file to see if it exists and when it was last modified.
-	llstat stat_data;
-	int res = LLFile::stat(mFilename, &stat_data);
-
-	if (res)
-	{
-		// Couldn't stat the file, that means it doesn't exist or is
-		// broken somehow.  Clear flags and return.
-		if (mLastExists)
-		{
-			mLastExists = false;
-			return true;	// no longer existing is a change!
-		}
-		return false;
-	}
-
-	// The file exists, decide if we want to load it.
-	if (mLastExists)
-	{
-		// The file existed last time, don't read it if it hasn't changed since
-		// last time.
-		if (stat_data.st_mtime <= mLastModTime)
-		{
-			return false;
-		}
-	}
-
-	// We want to read the file.  Update status info for the file.
-	mLastExists = true;
-	mLastStatTime = stat_data.st_mtime;
-	return true;
+        mForceCheck = false;   // force only forces one check
+        mRefreshTimer.reset(); // don't check again until mRefreshPeriod has passed
+
+        // Stat the file to see if it exists and when it was last modified.
+        llstat stat_data;
+        if (LLFile::stat(mFilename, &stat_data))
+        {
+            // Couldn't stat the file, that means it doesn't exist or is
+            // broken somehow.  
+            if (mLastExists)
+            {
+                mLastExists = false;
+                detected_change = true;	// no longer existing is a change!
+                LL_DEBUGS() << "detected deleted file '" << mFilename << "'" << LL_ENDL;
+            }
+        }
+        else
+        {
+            // The file exists
+            if ( ! mLastExists )
+            {
+                // last check, it did not exist - that counts as a change
+                LL_DEBUGS() << "detected created file '" << mFilename << "'" << LL_ENDL;
+                detected_change = true;
+            }
+            else if ( stat_data.st_mtime > mLastModTime )
+            {
+                // file modification time is newer than last check
+                LL_DEBUGS() << "detected updated file '" << mFilename << "'" << LL_ENDL;
+                detected_change = true;
+            }
+            mLastExists = true;
+            mLastStatTime = stat_data.st_mtime;
+        }
+    }
+    if (detected_change)
+    {
+        LL_INFOS() << "detected file change '" << mFilename << "'" << LL_ENDL;
+    }
+    return detected_change;
 }
 
 void LLLiveFile::Impl::changed()
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp
index 617969ab2a27f0c032ae8cf0645837c2fab2b796..f3b8999883ab2d1892ee769fe66ca2b6409a4419 100755
--- a/indra/llcommon/llstring.cpp
+++ b/indra/llcommon/llstring.cpp
@@ -107,7 +107,7 @@ bool iswindividual(llwchar elem)
 
 bool _read_file_into_string(std::string& str, const std::string& filename)
 {
-	llifstream ifs(filename, llifstream::binary);
+	llifstream ifs(filename.c_str(), llifstream::binary);
 	if (!ifs.is_open())
 	{
 		LL_INFOS() << "Unable to open file " << filename << LL_ENDL;
diff --git a/indra/llcrashlogger/llcrashlock.cpp b/indra/llcrashlogger/llcrashlock.cpp
index 7fd78607074a9285a7fd4c3cf89d5b2076af902d..7dde1fcd69fbd1a0b2617ad38e73077aaf416142 100644
--- a/indra/llcrashlogger/llcrashlock.cpp
+++ b/indra/llcrashlogger/llcrashlock.cpp
@@ -106,7 +106,7 @@ LLSD LLCrashLock::getLockFile(std::string filename)
 {
 	LLSD lock_sd = LLSD::emptyMap();
     
-	llifstream ifile(filename);
+	llifstream ifile(filename.c_str());
     
 	if (ifile.is_open())
 	{									            
@@ -120,7 +120,7 @@ LLSD LLCrashLock::getLockFile(std::string filename)
 bool LLCrashLock::putLockFile(std::string filename, const LLSD& data)
 {    
     bool result = true;
-    llofstream ofile(filename);
+    llofstream ofile(filename.c_str());
     
 	if (!LLSDSerialize::toXML(data,ofile))
 	{
diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index ecdcd95d290b525047ba1a5d0a3d60830a947729..16df27bb8e17df9ab072e41d51c2ccb5a62ae777 100755
--- a/indra/llimage/llimage.cpp
+++ b/indra/llimage/llimage.cpp
@@ -1172,7 +1172,7 @@ static std::string find_file(std::string &name, S8 *codec)
 	for (int i=0; i<(int)(NUM_FILE_EXTENSIONS); i++)
 	{
 		tname = name + "." + std::string(file_extensions[i].exten);
-		llifstream ifs(tname, llifstream::binary);
+		llifstream ifs(tname.c_str(), llifstream::binary);
 		if (ifs.is_open())
 		{
 			ifs.close();
@@ -1219,7 +1219,7 @@ bool LLImageRaw::createFromFile(const std::string &filename, bool j2c_lowest_mip
 		return false; // format not recognized
 	}
 
-	llifstream ifs(name, llifstream::binary);
+	llifstream ifs(name.c_str(), llifstream::binary);
 	if (!ifs.is_open())
 	{
 		// SJB: changed from LL_INFOS() to LL_DEBUGS() to reduce spam
diff --git a/indra/llimage/llimagefilter.cpp b/indra/llimage/llimagefilter.cpp
index 0b9d136910732c502f29f3b72e84ff313f55b769..41adc7be9a10e3bbcc90812d09860ae05bc195f5 100755
--- a/indra/llimage/llimagefilter.cpp
+++ b/indra/llimage/llimagefilter.cpp
@@ -54,7 +54,7 @@ LLImageFilter::LLImageFilter(const std::string& file_path) :
     mStencilMax(1.0)
 {
     // Load filter description from file
-	llifstream filter_xml(file_path);
+	llifstream filter_xml(file_path.c_str());
 	if (filter_xml.is_open())
 	{
 		// Load and parse the file
diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp
index ef097c70f205d642d3540ec3d47221c1381352f7..88b88d0454bdca43f8719abbffbd2f163642be8d 100755
--- a/indra/llmessage/llavatarnamecache.cpp
+++ b/indra/llmessage/llavatarnamecache.cpp
@@ -428,8 +428,7 @@ void LLAvatarNameCache::legacyNameFetch(const LLUUID& agent_id,
 										const std::string& full_name,
 										bool is_group)
 {
-	LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::legacyNameFetch "
-	                         << "agent " << agent_id << " "
+	LL_DEBUGS("AvNameCache") << "LLAvatarNameCache agent " << agent_id << " "
 							 << "full name '" << full_name << "'"
 	                         << ( is_group ? " [group]" : "" )
 	                         << LL_ENDL;
@@ -458,7 +457,7 @@ void LLAvatarNameCache::requestNamesViaLegacy()
 		// invoked below.  This should never happen in practice.
 		sPendingQueue[agent_id] = now;
 
-		LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::requestNamesViaLegacy agent " << agent_id << LL_ENDL;
+		LL_DEBUGS("AvNameCache") << "agent " << agent_id << LL_ENDL;
 
 		gCacheName->get(agent_id, false,  // legacy compatibility
 			boost::bind(&LLAvatarNameCache::legacyNameCallback, _1, _2, _3));
@@ -485,12 +484,13 @@ void LLAvatarNameCache::cleanupClass()
     sCache.clear();
 }
 
-void LLAvatarNameCache::importFile(std::istream& istr)
+bool LLAvatarNameCache::importFile(std::istream& istr)
 {
 	LLSD data;
 	if (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(data, istr))
 	{
-		return;
+        LL_WARNS("AvNameCache") << "avatar name cache data xml parse failed" << LL_ENDL;
+		return false;
 	}
 
 	// by convention LLSD storage is a map
@@ -506,17 +506,19 @@ void LLAvatarNameCache::importFile(std::istream& istr)
 		av_name.fromLLSD( it->second );
 		sCache[agent_id] = av_name;
 	}
-    LL_INFOS("AvNameCache") << "loaded " << sCache.size() << LL_ENDL;
-
+    LL_INFOS("AvNameCache") << "LLAvatarNameCache loaded " << sCache.size() << LL_ENDL;
 	// Some entries may have expired since the cache was stored,
     // but they will be flushed in the first call to eraseUnrefreshed
     // from LLAvatarNameResponder::idle
+
+    return true;
 }
 
 void LLAvatarNameCache::exportFile(std::ostream& ostr)
 {
 	LLSD agents;
 	F64 max_unrefreshed = LLFrameTimer::getTotalSeconds() - MAX_UNREFRESHED_TIME;
+    LL_INFOS("AvNameCache") << "LLAvatarNameCache at exit cache has " << sCache.size() << LL_ENDL;
 	cache_t::const_iterator it = sCache.begin();
 	for ( ; it != sCache.end(); ++it)
 	{
@@ -529,6 +531,7 @@ void LLAvatarNameCache::exportFile(std::ostream& ostr)
 			agents[agent_id.asString()] = av_name.asLLSD();
 		}
 	}
+    LL_INFOS("AvNameCache") << "LLAvatarNameCache returning " << agents.size() << LL_ENDL;
 	LLSD data;
 	data["agents"] = agents;
 	LLSDSerialize::toPrettyXML(data, ostr);
@@ -571,6 +574,7 @@ void LLAvatarNameCache::idle()
         }
         else
         {
+            LL_WARNS_ONCE("AvNameCache") << "LLAvatarNameCache still using legacy api" << LL_ENDL;
             requestNamesViaLegacy();
         }
 	}
@@ -608,24 +612,26 @@ void LLAvatarNameCache::eraseUnrefreshed()
     if (!sLastExpireCheck || sLastExpireCheck < max_unrefreshed)
     {
         sLastExpireCheck = now;
-
+        S32 expired = 0;
         for (cache_t::iterator it = sCache.begin(); it != sCache.end();)
         {
             const LLAvatarName& av_name = it->second;
             if (av_name.mExpires < max_unrefreshed)
             {
-                LL_DEBUGS("AvNameCache") << it->first 
+                LL_DEBUGS("AvNameCacheExpired") << "LLAvatarNameCache " << it->first 
                                          << " user '" << av_name.getAccountName() << "' "
                                          << "expired " << now - av_name.mExpires << " secs ago"
                                          << LL_ENDL;
                 sCache.erase(it++);
+                expired++;
             }
 			else
 			{
 				++it;
 			}
         }
-        LL_INFOS("AvNameCache") << sCache.size() << " cached avatar names" << LL_ENDL;
+        LL_INFOS("AvNameCache") << "LLAvatarNameCache expired " << expired << " cached avatar names, "
+                                << sCache.size() << " remaining" << LL_ENDL;
 	}
 }
 
@@ -646,8 +652,7 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)
 			{
 				if (!isRequestPending(agent_id))
 				{
-					LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::get "
-											 << "refresh agent " << agent_id
+					LL_DEBUGS("AvNameCache") << "LLAvatarNameCache refresh agent " << agent_id
 											 << LL_ENDL;
 					sAskQueue.insert(agent_id);
 				}
@@ -659,9 +664,7 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)
 
 	if (!isRequestPending(agent_id))
 	{
-		LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::get "
-								 << "queue request for agent " << agent_id
-								 << LL_ENDL;
+		LL_DEBUGS("AvNameCache") << "LLAvatarNameCache queue request for agent " << agent_id << LL_ENDL;
 		sAskQueue.insert(agent_id);
 	}
 
@@ -834,7 +837,7 @@ bool LLAvatarNameCache::expirationFromCacheControl(const LLSD& headers, F64 *exp
 			fromCacheControl = true;
 		}
 	}
-	LL_DEBUGS("AvNameCache")
+	LL_DEBUGS("AvNameCache") << "LLAvatarNameCache "
 		<< ( fromCacheControl ? "expires based on cache control " : "default expiration " )
 		<< "in " << *expires - now << " seconds"
 		<< LL_ENDL;
diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h
index 17b948f79903f1195b51d4d503519a03d5f69cec..bd2715e9567607d7f15d57124c63190dea6d5513 100755
--- a/indra/llmessage/llavatarnamecache.h
+++ b/indra/llmessage/llavatarnamecache.h
@@ -45,7 +45,7 @@ namespace LLAvatarNameCache
 	void cleanupClass();
 
 	// Import/export the name cache to file.
-	void importFile(std::istream& istr);
+	bool importFile(std::istream& istr);
 	void exportFile(std::ostream& ostr);
 
 	// On the viewer, usually a simulator capabilities.
diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp
index b4a76cb808603b61d05c5c43c8e7739cad6d2f1a..7f70e6a3f51dec7931b70c137cf810ec3eca8637 100755
--- a/indra/llmessage/llhttpclient.cpp
+++ b/indra/llmessage/llhttpclient.cpp
@@ -161,7 +161,7 @@ namespace
 		{
 			LLBufferStream ostream(channels, buffer.get());
 
-			llifstream fstream(mFilename, std::iostream::binary | std::iostream::out);
+			llifstream fstream(mFilename.c_str(), std::iostream::binary | std::iostream::out);
 			if(fstream.is_open())
 			{
 				fstream.seekg(0, std::ios::end);
diff --git a/indra/llmessage/llmessageconfig.cpp b/indra/llmessage/llmessageconfig.cpp
index f8b2c8f5a6456048a8478bb7e7fc9503667bb9f1..64e79d67675530152a9f8a357b64e0e6e6eaf5a1 100755
--- a/indra/llmessage/llmessageconfig.cpp
+++ b/indra/llmessage/llmessageconfig.cpp
@@ -96,7 +96,7 @@ bool LLMessageConfigFile::loadFile()
 {
 	LLSD data;
     {
-        llifstream file(filename());
+        llifstream file(filename().c_str());
         
         if (file.is_open())
         {
diff --git a/indra/llmessage/llservicebuilder.cpp b/indra/llmessage/llservicebuilder.cpp
index 392e7f1091e913ade8cd55c209c273071d15fbf2..cf2e42f95cdaf300c034f2505bbad61226f1e50d 100755
--- a/indra/llmessage/llservicebuilder.cpp
+++ b/indra/llmessage/llservicebuilder.cpp
@@ -34,7 +34,7 @@
 void LLServiceBuilder::loadServiceDefinitionsFromFile(
 	const std::string& service_filename)
 {
-	llifstream service_file(service_filename, std::ios::binary);
+	llifstream service_file(service_filename.c_str(), std::ios::binary);
 	if(service_file.is_open())
 	{
 		LLSD service_data;
diff --git a/indra/llui/llspellcheck.cpp b/indra/llui/llspellcheck.cpp
index 250372da5ba461823ffb2b0902f9e3edd6a1163e..0db428105907ef1d331a56b08513b2416a7724eb 100755
--- a/indra/llui/llspellcheck.cpp
+++ b/indra/llui/llspellcheck.cpp
@@ -144,12 +144,14 @@ void LLSpellChecker::refreshDictionaryMap()
 	const std::string user_path = getDictionaryUserPath();
 
 	// Load dictionary information (file name, friendly name, ...)
-	llifstream user_file(user_path + DICT_FILE_MAIN, std::ios::binary);
+    std::string user_filename(user_path + DICT_FILE_MAIN);
+	llifstream user_file(user_filename.c_str(), std::ios::binary);
 	if ( (!user_file.is_open()) 
 		|| (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(sDictMap, user_file)) 
 		|| (0 == sDictMap.size()) )
 	{
-		llifstream app_file(app_path + DICT_FILE_MAIN, std::ios::binary);
+        std::string app_filename(app_path + DICT_FILE_MAIN);
+		llifstream app_file(app_filename.c_str(), std::ios::binary);
 		if ( (!app_file.is_open()) 
 			|| (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(sDictMap, app_file)) 
 			|| (0 == sDictMap.size()) )
@@ -159,7 +161,7 @@ void LLSpellChecker::refreshDictionaryMap()
 	}
 
 	// Load user installed dictionary information
-	llifstream custom_file(user_path + DICT_FILE_USER, std::ios::binary);
+	llifstream custom_file(user_filename.c_str(), std::ios::binary);
 	if (custom_file.is_open())
 	{
 		LLSD custom_dict_map;
@@ -215,7 +217,7 @@ void LLSpellChecker::addToDictFile(const std::string& dict_path, const std::stri
 
 	if (gDirUtilp->fileExists(dict_path))
 	{
-		llifstream file_in(dict_path, std::ios::in);
+		llifstream file_in(dict_path.c_str(), std::ios::in);
 		if (file_in.is_open())
 		{
 			std::string word; int line_num = 0;
@@ -238,7 +240,7 @@ void LLSpellChecker::addToDictFile(const std::string& dict_path, const std::stri
 
 	word_list.push_back(word);
 
-	llofstream file_out(dict_path, std::ios::out | std::ios::trunc);	
+	llofstream file_out(dict_path.c_str(), std::ios::out | std::ios::trunc);	
 	if (file_out.is_open())
 	{
 		file_out << word_list.size() << std::endl;
@@ -352,7 +354,7 @@ void LLSpellChecker::initHunspell(const std::string& dict_language)
 
 		if (gDirUtilp->fileExists(user_path + DICT_FILE_IGNORE))
 		{
-			llifstream file_in(user_path + DICT_FILE_IGNORE, std::ios::in);
+			llifstream file_in((user_path + DICT_FILE_IGNORE).c_str(), std::ios::in);
 			if (file_in.is_open())
 			{
 				std::string word; int idxLine = 0;
@@ -463,7 +465,8 @@ void LLSpellChecker::removeDictionary(const std::string& dict_language)
 LLSD LLSpellChecker::loadUserDictionaryMap()
 {
 	LLSD dict_map;
-	llifstream dict_file(getDictionaryUserPath() + DICT_FILE_USER, std::ios::binary);
+    std::string dict_filename(getDictionaryUserPath() + DICT_FILE_USER);
+	llifstream dict_file(dict_filename.c_str(), std::ios::binary);
 	if (dict_file.is_open())
 	{
 		LLSDSerialize::fromXMLDocument(dict_map, dict_file);
@@ -475,7 +478,7 @@ LLSD LLSpellChecker::loadUserDictionaryMap()
 // static
 void LLSpellChecker::saveUserDictionaryMap(const LLSD& dict_map)
 {
-	llofstream dict_file(getDictionaryUserPath() + DICT_FILE_USER, std::ios::trunc);
+	llofstream dict_file((getDictionaryUserPath() + DICT_FILE_USER).c_str(), std::ios::trunc);
 	if (dict_file.is_open())
 	{
 		LLSDSerialize::toPrettyXML(dict_map, dict_file);
diff --git a/indra/llui/llviewereventrecorder.cpp b/indra/llui/llviewereventrecorder.cpp
index c5a4354f3247f6d923230d3072ca7eb022111fd7..9fe6a542b4c2723eeb98f62e7e3b40ee17846fcf 100644
--- a/indra/llui/llviewereventrecorder.cpp
+++ b/indra/llui/llviewereventrecorder.cpp
@@ -50,7 +50,7 @@ bool LLViewerEventRecorder::displayViewerEventRecorderMenuItems() {
 
 void LLViewerEventRecorder::setEventLoggingOn() {
   if (! mLog.is_open()) {
-    mLog.open(mLogFilename, llofstream::out);
+      mLog.open(mLogFilename.c_str(), std::ios_base::out);
   }
   logEvents=true; 
   LL_DEBUGS() << "LLViewerEventRecorder::setEventLoggingOn event logging turned on" << LL_ENDL;
diff --git a/indra/llvfs/llpidlock.cpp b/indra/llvfs/llpidlock.cpp
index e64368e8d771e207323371f769b39de81ae300b1..6572edead398f250e6ac45308dc9a3ed3ee8399b 100644
--- a/indra/llvfs/llpidlock.cpp
+++ b/indra/llvfs/llpidlock.cpp
@@ -95,7 +95,7 @@ LLPidLockFile& LLPidLockFile::instance()
 
 void LLPidLockFile::writeLockFile(LLSD pids)
 {
-	llofstream ofile(mLockName);
+	llofstream ofile(mLockName.c_str());
 
 	if (!LLSDSerialize::toXML(pids,ofile))
 	{
@@ -119,7 +119,7 @@ bool LLPidLockFile::requestLock(LLNameTable<void *> *name_table, bool autosave,
 	LLSD out_pids;
 	out_pids.append( (LLSD::Integer)mPID );
 
-	llifstream ifile(mLockName);
+	llifstream ifile(mLockName.c_str());
 
 	if (ifile.is_open()) 
 	{									//If file exists, we need to decide whether or not to continue.
@@ -175,7 +175,7 @@ bool LLPidLockFile::checkLock()
 
 void LLPidLockFile::releaseLock()
 {
-	llifstream ifile(mLockName);
+	llifstream ifile(mLockName.c_str());
 	LLSD in_pids;
 	LLSD out_pids;
 	bool write_file=FALSE;
diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp
index 598a802d67a3021e8cda383fe2c29bda4cbc266b..4e3d0ab39276aa251d2bf2f73b03029db12aea2d 100755
--- a/indra/llxml/llcontrol.cpp
+++ b/indra/llxml/llcontrol.cpp
@@ -833,7 +833,7 @@ U32 LLControlGroup::saveToFile(const std::string& filename, BOOL nondefault_only
 		}
 	}
 	llofstream file;
-	file.open(filename);
+	file.open(filename.c_str());
 	if (file.is_open())
 	{
 		LLSDSerialize::toPrettyXML(settings, file);
@@ -853,7 +853,7 @@ U32 LLControlGroup::loadFromFile(const std::string& filename, bool set_default_v
 {
 	LLSD settings;
 	llifstream infile;
-	infile.open(filename);
+	infile.open(filename.c_str());
 	if(!infile.is_open())
 	{
 		LL_WARNS("Settings") << "Cannot find file " << filename << " to load." << LL_ENDL;
diff --git a/indra/llxml/tests/llcontrol_test.cpp b/indra/llxml/tests/llcontrol_test.cpp
index c273773c9b43a9223dfc43fc7dba44bb76f67934..2b691ffbb1a8ba63503b6adec0ef9a0733e96c34 100755
--- a/indra/llxml/tests/llcontrol_test.cpp
+++ b/indra/llxml/tests/llcontrol_test.cpp
@@ -80,7 +80,7 @@ namespace tut
 		}
 		void writeSettingsFile(const LLSD& config)
 		{
-			llofstream file(mTestConfigFile);
+			llofstream file(mTestConfigFile.c_str());
 			if (file.is_open())
 			{
 				LLSDSerialize::toPrettyXML(config, file);
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 138bdde9e9ad042624303cda18b18d4f52de775e..408d82ff691739efd5f898cd7ef33b933ec5b197 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5019,6 +5019,7 @@
       <key>Type</key>
       <string>LLSD</string>
       <key>Value</key>
+      <array/>
     </map>
     <key>LSLFindCaseInsensitivity</key>
         <map>
@@ -11774,7 +11775,7 @@
     <key>Type</key>
     <string>F32</string>
     <key>Value</key>
-    <integer>0.0</integer>
+    <real>0.0</real>
   </map>
     <key>TextureFetchSource</key>
     <map>
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index d119504017d6ae6a1dbb1a9c1f9fbcf6904492c6..c62b45ed8167b666f2062ffd0fffca39c81a5671 100755
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -97,7 +97,7 @@
         <key>Type</key>
             <string>Boolean</string>
         <key>Value</key>
-            <integer>true</integer>
+            <integer>1</integer>
     </map>   
     <key>InstantMessageLogPath</key>
         <map>
diff --git a/indra/newview/llagentpilot.cpp b/indra/newview/llagentpilot.cpp
index 44589f0d57da8c5a24cc165b86df68b5afcfe251..cfc445f9986fea6d3f9c72084fc931507318c336 100755
--- a/indra/newview/llagentpilot.cpp
+++ b/indra/newview/llagentpilot.cpp
@@ -84,7 +84,7 @@ void LLAgentPilot::loadTxt(const std::string& filename)
 		return;
 	}
 	
-	llifstream file(filename);
+	llifstream file(filename.c_str());
 
 	if (!file)
 	{
@@ -125,7 +125,7 @@ void LLAgentPilot::loadXML(const std::string& filename)
 		return;
 	}
 	
-	llifstream file(filename);
+	llifstream file(filename.c_str());
 
 	if (!file)
 	{
@@ -168,7 +168,7 @@ void LLAgentPilot::save()
 void LLAgentPilot::saveTxt(const std::string& filename)
 {
 	llofstream file;
-	file.open(filename);
+	file.open(filename.c_str());
 
 	if (!file)
 	{
@@ -191,7 +191,7 @@ void LLAgentPilot::saveTxt(const std::string& filename)
 void LLAgentPilot::saveXML(const std::string& filename)
 {
 	llofstream file;
-	file.open(filename);
+	file.open(filename.c_str());
 
 	if (!file)
 	{
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 4bf719ec31d4e94f45d07e79ee42e1053fa3407a..9668da252281a844efacd701944ef499cc8c925c 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3273,7 +3273,7 @@ void LLAppViewer::writeDebugInfo(bool isStatic)
         : getDynamicDebugFile() );
     
 	LL_INFOS() << "Opening debug file " << *debug_filename << LL_ENDL;
-	llofstream out_file(*debug_filename);
+	llofstream out_file(debug_filename->c_str());
     
     isStatic ?  LLSDSerialize::toPrettyXML(gDebugInfo, out_file)
              :  LLSDSerialize::toPrettyXML(gDebugInfo["Dynamic"], out_file);
@@ -3762,7 +3762,7 @@ void LLAppViewer::handleViewerCrash()
 	{
 		std::string filename;
 		filename = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, "stats.log");
-		llofstream file(filename, llofstream::binary);
+		llofstream file(filename.c_str(), std::ios_base::binary);
 		if(file.good())
 		{
 			LL_INFOS() << "Handle viewer crash generating stats log." << LL_ENDL;
@@ -4650,17 +4650,22 @@ void LLAppViewer::loadNameCache()
 	std::string filename =
 		gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "avatar_name_cache.xml");
 	LL_INFOS("AvNameCache") << filename << LL_ENDL;
-	llifstream name_cache_stream(filename);
+	llifstream name_cache_stream(filename.c_str());
 	if(name_cache_stream.is_open())
 	{
-		LLAvatarNameCache::importFile(name_cache_stream);
+		if ( ! LLAvatarNameCache::importFile(name_cache_stream))
+        {
+            LL_WARNS("AppInit") << "removing invalid '" << filename << "'" << LL_ENDL;
+            name_cache_stream.close();
+            LLFile::remove(filename);
+        }
 	}
 
 	if (!gCacheName) return;
 
 	std::string name_cache;
 	name_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "name.cache");
-	llifstream cache_file(name_cache);
+	llifstream cache_file(name_cache.c_str());
 	if(cache_file.is_open())
 	{
 		if(gCacheName->importFile(cache_file)) return;
@@ -4668,24 +4673,26 @@ void LLAppViewer::loadNameCache()
 }
 
 void LLAppViewer::saveNameCache()
-	{
+{
 	// display names cache
 	std::string filename =
 		gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "avatar_name_cache.xml");
-	llofstream name_cache_stream(filename);
+	llofstream name_cache_stream(filename.c_str());
 	if(name_cache_stream.is_open())
 	{
 		LLAvatarNameCache::exportFile(name_cache_stream);
-}
-
-	if (!gCacheName) return;
-
-	std::string name_cache;
-	name_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "name.cache");
-	llofstream cache_file(name_cache);
-	if(cache_file.is_open())
-	{
-		gCacheName->exportFile(cache_file);
+    }
+    
+    // real names cache
+	if (gCacheName)
+    {
+        std::string name_cache;
+        name_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "name.cache");
+        llofstream cache_file(name_cache.c_str());
+        if(cache_file.is_open())
+        {
+            gCacheName->exportFile(cache_file);
+        }
 	}
 }
 
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index 746b541f9d2ce76e8d50fad1900197881b5d5d21..281e591b4889ef9e68c7ce4e5671bba161164219 100755
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -76,7 +76,7 @@ void LLAvatarIconIDCache::load	()
 	
 	// build filename for each user
 	std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, mFilename);
-	llifstream file(resolved_filename);
+	llifstream file(resolved_filename.c_str());
 
 	if (!file.is_open())
 		return;
@@ -114,7 +114,7 @@ void LLAvatarIconIDCache::save	()
 	std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, mFilename);
 
 	// open a file for writing
-	llofstream file (resolved_filename);
+	llofstream file (resolved_filename.c_str());
 	if (!file.is_open())
 	{
 		LL_WARNS() << "can't open avatar icons cache file\"" << mFilename << "\" for writing" << LL_ENDL;
diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp
index 06164e9597d90ede06815c8892dd3bccddd72bbf..1819fc74ee1ae6c30c614e457e635f75d7e92c2c 100755
--- a/indra/newview/llcommandlineparser.cpp
+++ b/indra/newview/llcommandlineparser.cpp
@@ -622,7 +622,7 @@ void LLControlGroupCLP::configure(const std::string& config_filename, LLControlG
     LLSD clpConfigLLSD;
     
     llifstream input_stream;
-    input_stream.open(config_filename, std::ios::in | std::ios::binary);
+    input_stream.open(config_filename.c_str(), std::ios::in | std::ios::binary);
 
     if(input_stream.is_open())
     {
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 3da162c5ef447e3877c8c93329bb5c14f685f7ea..fc9e85caf814bbfec1c047df9e98fa01942fb6a4 100755
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -1470,7 +1470,7 @@ void LLFavoritesOrderStorage::destroyClass()
 
 	std::string old_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
 	llifstream file;
-	file.open(old_filename);
+	file.open(old_filename.c_str());
 	if (file.is_open())
 	{
         file.close();
@@ -1508,7 +1508,7 @@ void LLFavoritesOrderStorage::load()
 
 	LLSD settings_llsd;
 	llifstream file;
-	file.open(filename);
+	file.open(filename.c_str());
 	if (file.is_open())
 	{
 		LLSDSerialize::fromXML(settings_llsd, file);
@@ -1542,7 +1542,7 @@ void LLFavoritesOrderStorage::saveFavoritesSLURLs()
     if (!filename.empty())
     {
         llifstream in_file;
-        in_file.open(filename);
+        in_file.open(filename.c_str());
         LLSD fav_llsd;
         if (in_file.is_open())
         {
@@ -1589,7 +1589,7 @@ void LLFavoritesOrderStorage::saveFavoritesSLURLs()
         fav_llsd[av_name.getUserName()] = user_llsd;
 
         llofstream file;
-        file.open(filename);
+        file.open(filename.c_str());
         if ( file.is_open() )
         {
             LLSDSerialize::toPrettyXML(fav_llsd, file);
@@ -1614,7 +1614,7 @@ void LLFavoritesOrderStorage::removeFavoritesRecordOfUser()
     {
         LLSD fav_llsd;
         llifstream file;
-        file.open(filename);
+        file.open(filename.c_str());
         if (file.is_open())
         {
             LLSDSerialize::fromXML(fav_llsd, file);
@@ -1631,7 +1631,7 @@ void LLFavoritesOrderStorage::removeFavoritesRecordOfUser()
             }
         
             llofstream out_file;
-            out_file.open(filename);
+            out_file.open(filename.c_str());
             if ( out_file.is_open() )
             {
                 LLSDSerialize::toPrettyXML(fav_llsd, out_file);
@@ -1687,7 +1687,7 @@ void LLFavoritesOrderStorage::save()
             }
 
             llofstream file;
-            file.open(filename);
+            file.open(filename.c_str());
             if ( file.is_open() )
             {
                 LLSDSerialize::toPrettyXML(settings_llsd, file);
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index af84aea6a6175f393d39b88ac9a692d945f71460..ea39f812fd14cffa71991b0ae53b123227a6f0bf 100755
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -331,7 +331,7 @@ bool LLFeatureManager::parseFeatureTable(std::string filename)
 	U32		version;
 	
 	cleanupFeatureTables(); // in case an earlier attempt left partial results
-	file.open(filename); 	 /*Flawfinder: ignore*/
+	file.open(filename.c_str()); 	 /*Flawfinder: ignore*/
 
 	if (!file)
 	{
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index 7ac3ac2f61539e9345a65134ec2be43a21848c73..b342d8fdf36ef8dd6aa8df30146e57af4d204b29 100755
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -156,7 +156,7 @@ BOOL LLFloaterAbout::postBuild()
 	std::string contributors_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"contributors.txt");
 	llifstream contrib_file;
 	std::string contributors;
-	contrib_file.open(contributors_path);		/* Flawfinder: ignore */
+	contrib_file.open(contributors_path.c_str());		/* Flawfinder: ignore */
 	if (contrib_file.is_open())
 	{
 		std::getline(contrib_file, contributors); // all names are on a single line
@@ -173,7 +173,7 @@ BOOL LLFloaterAbout::postBuild()
     // Get the Versions and Copyrights, created at build time
 	std::string licenses_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"packages-info.txt");
 	llifstream licenses_file;
-	licenses_file.open(licenses_path);		/* Flawfinder: ignore */
+	licenses_file.open(licenses_path.c_str());		/* Flawfinder: ignore */
 	if (licenses_file.is_open())
 	{
 		std::string license_line;
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index ec905558aae8ce1819a8d2163834fa55942b35ec..b9113d265ae9ec24aed23ce1f6f60c5a8bdd69c3 100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -2155,7 +2155,7 @@ bool LLModelLoader::loadFromSLM(const std::string& filename)
 
 	S32 file_size = (S32) stat.st_size;
 	
-	llifstream ifstream(filename, std::ifstream::in | std::ifstream::binary);
+	llifstream ifstream(filename.c_str(), std::ifstream::in | std::ifstream::binary);
 	LLSD data;
 	LLSDSerialize::fromBinary(data, ifstream, file_size);
 	ifstream.close();
@@ -3513,7 +3513,7 @@ void LLModelPreview::saveUploadData(const std::string& filename, bool save_skinw
 		data["instance"][i] = instance.asLLSD();
 	}
 
-	llofstream out(filename, std::ios_base::out | std::ios_base::binary);
+	llofstream out(filename.c_str(), std::ios_base::out | std::ios_base::binary);
 	LLSDSerialize::toBinary(data, out);
 	out.flush();
 	out.close();
diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp
index 849aa7cd14cd3cc9ef35f2ee1fd8ea4a5eda9dab..042cf470704a5fe27e937245e3a6930e11b76764 100755
--- a/indra/newview/llfloaterperms.cpp
+++ b/indra/newview/llfloaterperms.cpp
@@ -195,7 +195,7 @@ class LLFloaterPermsResponder : public LLHTTPClient::Responder
 		// even if it is the same as a previous one.
 		sPreviousReason = "";
 		LLFloaterPermsDefault::setCapSent(true);
-		LL_INFOS("FloaterPermsResponder") << "Sent default permissions to simulator" << LL_ENDL;
+		LL_INFOS("ObjectPermissionsFloater") << "Default permissions successfully sent to simulator" << LL_ENDL;
 	}
 };
 
@@ -223,8 +223,20 @@ void LLFloaterPermsDefault::updateCap()
 		report["default_object_perm_masks"]["NextOwner"] =
 			(LLSD::Integer)LLFloaterPerms::getNextOwnerPerms(sCategoryNames[CAT_OBJECTS]);
 
+        {
+            LL_DEBUGS("ObjectPermissionsFloater") << "Sending default permissions to '"
+                                                  << object_url << "'\n";
+            std::ostringstream sent_perms_log;
+            LLSDSerialize::toPrettyXML(report, sent_perms_log);
+            LL_CONT << sent_perms_log.str() << LL_ENDL;
+        }
+    
 		LLHTTPClient::post(object_url, report, new LLFloaterPermsResponder());
 	}
+    else
+    {
+        LL_DEBUGS("ObjectPermissionsFloater") << "AgentPreferences cap not available." << LL_ENDL;
+    }
 }
 
 void LLFloaterPermsDefault::setCapSent(bool cap_sent)
diff --git a/indra/newview/llfloaterspellchecksettings.cpp b/indra/newview/llfloaterspellchecksettings.cpp
index 54c7b4c37dcfd1a0c6b28e360c115021353c1ea1..5124dae1479d8d3ba4c702620036b7d743581897 100755
--- a/indra/newview/llfloaterspellchecksettings.cpp
+++ b/indra/newview/llfloaterspellchecksettings.cpp
@@ -350,7 +350,8 @@ void LLFloaterSpellCheckerImport::onBtnOK()
 		custom_dict_info["language"] = dict_language;
 
 		LLSD custom_dict_map;
-		llifstream custom_file_in(LLSpellChecker::getDictionaryUserPath() + "user_dictionaries.xml");
+        std::string custom_filename(LLSpellChecker::getDictionaryUserPath() + "user_dictionaries.xml");
+		llifstream custom_file_in(custom_filename.c_str());
 		if (custom_file_in.is_open())
 		{
 			LLSDSerialize::fromXMLDocument(custom_dict_map, custom_file_in);
@@ -372,7 +373,7 @@ void LLFloaterSpellCheckerImport::onBtnOK()
 			custom_dict_map.append(custom_dict_info);
 		}
 
-		llofstream custom_file_out(LLSpellChecker::getDictionaryUserPath() + "user_dictionaries.xml", std::ios::trunc);
+		llofstream custom_file_out(custom_filename.c_str(), std::ios::trunc);
 		if (custom_file_out.is_open())
 		{
 			LLSDSerialize::toPrettyXML(custom_dict_map, custom_file_out);
diff --git a/indra/newview/lllocationhistory.cpp b/indra/newview/lllocationhistory.cpp
index 680b35b55080ff5cb5356f77c59c20ef54cf431b..162d6e003e94a7bbf5dfb9441b0ae54863802bda 100755
--- a/indra/newview/lllocationhistory.cpp
+++ b/indra/newview/lllocationhistory.cpp
@@ -127,7 +127,7 @@ void LLLocationHistory::save() const
 	}
 
 	// open a file for writing
-	llofstream file (resolved_filename);
+	llofstream file(resolved_filename.c_str());
 	if (!file.is_open())
 	{
 		LL_WARNS() << "can't open location history file \"" << mFilename << "\" for writing" << LL_ENDL;
@@ -148,7 +148,7 @@ void LLLocationHistory::load()
 	
 	// build filename for each user
 	std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);
-	llifstream file(resolved_filename);
+	llifstream file(resolved_filename.c_str());
 
 	if (!file.is_open())
 	{
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index cadbc16f1e991ac7de01d56b1b6a8698a2f8fee3..7ddacf3033715476d95d2acb36e6b2ff17a524c5 100755
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -302,7 +302,7 @@ void LLLogChat::saveHistory(const std::string& filename,
 		return;
 	}
 	
-	llofstream file (LLLogChat::makeLogFileName(filename), std::ios_base::app);
+	llofstream file(LLLogChat::makeLogFileName(filename).c_str(), std::ios_base::app);
 	if (!file.is_open())
 	{
 		LL_WARNS() << "Couldn't open chat history log! - " + filename << LL_ENDL;
diff --git a/indra/newview/llmachineid.cpp b/indra/newview/llmachineid.cpp
index cd6473921d158a3536e508812576f2c003d3226a..b5fd3df0f35ce45ca3dfd579f4830b0b5b00ccc5 100755
--- a/indra/newview/llmachineid.cpp
+++ b/indra/newview/llmachineid.cpp
@@ -88,7 +88,7 @@ S32 LLMachineID::init()
                           
         if (FAILED(hres))
         {
-            LL_DEBUGS("AppInit") << "Failed to initialize security. Error code = 0x"  << hex << hres << LL_ENDL;
+            LL_WARNS("AppInit") << "Failed to initialize security. Error code = 0x"  << hex << hres << LL_ENDL;
             CoUninitialize();
             return 1;                    // Program has failed.
         }
@@ -106,7 +106,7 @@ S32 LLMachineID::init()
      
         if (FAILED(hres))
         {
-            LL_DEBUGS("AppInit") << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << LL_ENDL;
+            LL_WARNS("AppInit") << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << LL_ENDL;
             CoUninitialize();
             return 1;                 // Program has failed.
         }
@@ -132,7 +132,7 @@ S32 LLMachineID::init()
         
         if (FAILED(hres))
         {
-            LL_DEBUGS("AppInit") << "Could not connect. Error code = 0x"  << hex << hres << LL_ENDL;
+            LL_WARNS("AppInit") << "Could not connect. Error code = 0x"  << hex << hres << LL_ENDL;
             pLoc->Release();     
             CoUninitialize();
             return 1;                // Program has failed.
@@ -157,7 +157,7 @@ S32 LLMachineID::init()
 
         if (FAILED(hres))
         {
-            LL_DEBUGS("AppInit") << "Could not set proxy blanket. Error code = 0x"   << hex << hres << LL_ENDL;
+            LL_WARNS("AppInit") << "Could not set proxy blanket. Error code = 0x"   << hex << hres << LL_ENDL;
             pSvc->Release();
             pLoc->Release();     
             CoUninitialize();
@@ -178,7 +178,7 @@ S32 LLMachineID::init()
         
         if (FAILED(hres))
         {
-            LL_DEBUGS("AppInit") << "Query for operating system name failed." << " Error code = 0x"  << hex << hres << LL_ENDL;
+            LL_WARNS("AppInit") << "Query for operating system name failed." << " Error code = 0x"  << hex << hres << LL_ENDL;
             pSvc->Release();
             pLoc->Release();
             CoUninitialize();
@@ -205,7 +205,7 @@ S32 LLMachineID::init()
 
             // Get the value of the Name property
             hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);
-            LL_DEBUGS("AppInit") << " Serial Number : " << vtProp.bstrVal << LL_ENDL;
+            LL_INFOS("AppInit") << " Serial Number : " << vtProp.bstrVal << LL_ENDL;
             // use characters in the returned Serial Number to create a byte array of size len
             BSTR serialNumber ( vtProp.bstrVal);
             unsigned int j = 0;
@@ -252,7 +252,7 @@ S32 LLMachineID::getUniqueID(unsigned char *unique_id, size_t len)
     if (has_static_unique_id)
     {
         memcpy ( unique_id, &static_unique_id, len);
-        LL_DEBUGS("AppInit") << "UniqueID: 0x";
+        LL_INFOS_ONCE("AppInit") << "UniqueID: 0x";
         // Code between here and LL_ENDL is not executed unless the LL_DEBUGS
         // actually produces output
         for (size_t i = 0; i < len; ++i)
diff --git a/indra/newview/llnotificationstorage.cpp b/indra/newview/llnotificationstorage.cpp
index e9970de58c8b02e8f119ba7bcb947fb53c8a6527..3418b33d377897bbe88faca093017a802c6d5082 100755
--- a/indra/newview/llnotificationstorage.cpp
+++ b/indra/newview/llnotificationstorage.cpp
@@ -123,14 +123,18 @@ bool LLNotificationStorage::readNotifications(LLSD& pNotificationData, bool is_n
 	{
 		LLPointer<LLSDParser> parser = new LLSDXMLParser();
 		didFileRead = (parser->parse(notifyFile, pNotificationData, LLSDSerialize::SIZE_UNLIMITED) >= 0);
+        notifyFile.close();
+
 		if (!didFileRead)
 		{
 			LL_WARNS("LLNotificationStorage") << "Failed to parse open notifications from file '" << mFileName 
-				<< "'" << LL_ENDL;
+                                              << "'" << LL_ENDL;
+            LLFile::remove(filename);
+			LL_WARNS("LLNotificationStorage") << "Removed invalid open notifications file '" << mFileName 
+                                              << "'" << LL_ENDL;
 		}
 	}
-
-	LL_INFOS("LLNotificationStorage") << "ending read '" << filename << "'" << LL_ENDL;
+    
 	if (!didFileRead)
 	{
 		if(is_new_filename)
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 89c898001f4b517a5aecf9bde8bb61383efd9f3a..cc8c3edd51a8435ca105b88235cedf94e40dab8d 100755
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -308,10 +308,10 @@ void LLPanelLogin::addFavoritesToStartLocation()
 
 	LLSD fav_llsd;
 	llifstream file;
-	file.open(filename);
+	file.open(filename.c_str());
 	if (!file.is_open())
 	{
-		file.open(old_filename);
+		file.open(old_filename.c_str());
 		if (!file.is_open()) return;
 	}
 	LLSDSerialize::fromXML(fav_llsd, file);
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 37273a77938b8a691c9099edfdad5d12cb64a2a8..17c0b226d0c2401e8659244febe4a899f1a62a09 100755
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -160,10 +160,9 @@ BOOL LLPanelMainInventory::postBuild()
 	}
 
 	// Now load the stored settings from disk, if available.
-	std::ostringstream filterSaveName;
-	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME);
-	LL_INFOS() << "LLPanelMainInventory::init: reading from " << filterSaveName.str() << LL_ENDL;
-	llifstream file(filterSaveName.str());
+	std::string filterSaveName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME));
+	LL_INFOS() << "LLPanelMainInventory::init: reading from " << filterSaveName << LL_ENDL;
+	llifstream file(filterSaveName.c_str());
 	LLSD savedFilterState;
 	if (file.is_open())
 	{
@@ -243,16 +242,17 @@ LLPanelMainInventory::~LLPanelMainInventory( void )
 		}
 	}
 
-	std::ostringstream filterSaveName;
-	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME);
-	llofstream filtersFile(filterSaveName.str());
+	std::string filterSaveName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME));
+	llofstream filtersFile(filterSaveName.c_str());
 	if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile))
 	{
-		LL_WARNS() << "Could not write to filters save file " << filterSaveName.str() << LL_ENDL;
+		LL_WARNS() << "Could not write to filters save file " << filterSaveName << LL_ENDL;
 	}
 	else
+    {
 		filtersFile.close();
-
+    }
+    
 	gInventory.removeObserver(this);
 	delete mSavedFolderState;
 }
diff --git a/indra/newview/llsearchhistory.cpp b/indra/newview/llsearchhistory.cpp
index 7b4bf637406431319fe771f43f6e1648cd7736ee..0ea05a03d6775bf1aa6effa9eaf5c0f68c756dff 100755
--- a/indra/newview/llsearchhistory.cpp
+++ b/indra/newview/llsearchhistory.cpp
@@ -43,7 +43,7 @@ bool LLSearchHistory::load()
 {
 	// build filename for each user
 	std::string resolved_filename = getHistoryFilePath();
-	llifstream file(resolved_filename);
+	llifstream file(resolved_filename.c_str());
 	if (!file.is_open())
 	{
 		return false;
@@ -76,7 +76,7 @@ bool LLSearchHistory::save()
 	// build filename for each user
 	std::string resolved_filename = getHistoryFilePath();
 	// open a file for writing
-	llofstream file (resolved_filename);
+	llofstream file(resolved_filename.c_str());
 	if (!file.is_open())
 	{
 		return false;
diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp
index fc9d9f0842b7766260fd30891d7163420afd78b8..40516f9bbb6243d0fe978f2a193b66f416135046 100755
--- a/indra/newview/llsechandler_basic.cpp
+++ b/indra/newview/llsechandler_basic.cpp
@@ -640,7 +640,7 @@ LLBasicCertificateStore::~LLBasicCertificateStore()
 // persist the store
 void LLBasicCertificateStore::save()
 {
-	llofstream file_store(mFilename, llofstream::binary);
+	llofstream file_store(mFilename.c_str(), std::ios_base::binary);
 	if(!file_store.fail())
 	{
 		for(iterator cert = begin();
@@ -1331,7 +1331,7 @@ void LLSecAPIBasicHandler::_writeProtectedData()
 	std::string tmp_filename = mProtectedDataFilename + ".tmp";
 	
 	llofstream protected_data_stream(tmp_filename.c_str(), 
-										llofstream::binary);
+                                     std::ios_base::binary);
 	try
 	{
 		
@@ -1364,6 +1364,7 @@ void LLSecAPIBasicHandler::_writeProtectedData()
 	}
 	catch (...)
 	{
+		LL_WARNS() << "LLProtectedDataException(Error writing Protected Data Store)" << LL_ENDL;
 		// it's good practice to clean up any secure information on error
 		// (even though this file isn't really secure.  Perhaps in the future
 		// it may be, however.
@@ -1372,20 +1373,35 @@ void LLSecAPIBasicHandler::_writeProtectedData()
 		// EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData()
 		// Decided throwing an exception here was overkill until we figure out why this happens
 		//throw LLProtectedDataException("Error writing Protected Data Store");
-		LL_INFOS() << "LLProtectedDataException(Error writing Protected Data Store)" << LL_ENDL;
 	}
 
-	// move the temporary file to the specified file location.
-	if((((LLFile::isfile(mProtectedDataFilename) != 0) && 
-		 (LLFile::remove(mProtectedDataFilename) != 0))) || 
-	   (LLFile::rename(tmp_filename, mProtectedDataFilename)))
+    try
+    {
+        // move the temporary file to the specified file location.
+        if(((   (LLFile::isfile(mProtectedDataFilename) != 0)
+             && (LLFile::remove(mProtectedDataFilename) != 0)))
+           || (LLFile::rename(tmp_filename, mProtectedDataFilename)))
+        {
+            LL_WARNS() << "LLProtectedDataException(Could not overwrite protected data store)" << LL_ENDL;
+            LLFile::remove(tmp_filename);
+
+            // EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData()
+            // Decided throwing an exception here was overkill until we figure out why this happens
+            //throw LLProtectedDataException("Could not overwrite protected data store");
+        }
+	}
+	catch (...)
 	{
+		LL_WARNS() << "LLProtectedDataException(Error renaming '" << tmp_filename
+                   << "' to '" << mProtectedDataFilename << "')" << LL_ENDL;
+		// it's good practice to clean up any secure information on error
+		// (even though this file isn't really secure.  Perhaps in the future
+		// it may be, however.
 		LLFile::remove(tmp_filename);
 
-		// EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData()
+		//crash in LLSecAPIBasicHandler::_writeProtectedData()
 		// Decided throwing an exception here was overkill until we figure out why this happens
-		//throw LLProtectedDataException("Could not overwrite protected data store");
-		LL_INFOS() << "LLProtectedDataException(Could not overwrite protected data store)" << LL_ENDL;
+		//throw LLProtectedDataException("Error writing Protected Data Store");
 	}
 }
 		
@@ -1552,7 +1568,7 @@ std::string LLSecAPIBasicHandler::_legacyLoadPassword()
 {
 	const S32 HASHED_LENGTH = 32;	
 	std::vector<U8> buffer(HASHED_LENGTH);
-	llifstream password_file(mLegacyPasswordPath, llifstream::binary);
+	llifstream password_file(mLegacyPasswordPath.c_str(), llifstream::binary);
 	
 	if(password_file.fail())
 	{
diff --git a/indra/newview/llsyntaxid.cpp b/indra/newview/llsyntaxid.cpp
index a763d42a8df08bb4b873e11e3cfbac74fbc75cba..802dff1ead9780710f3594cc36d4c56832f0f74b 100644
--- a/indra/newview/llsyntaxid.cpp
+++ b/indra/newview/llsyntaxid.cpp
@@ -83,7 +83,7 @@ class fetchKeywordsFileResponder : public LLHTTPClient::Responder
 		const std::string xml = str.str();
 
 		// save the str to disk, usually to the cache.
-		llofstream file(mFileSpec, std::ios_base::out);
+		llofstream file(mFileSpec.c_str(), std::ios_base::out);
 		file.write(xml.c_str(), str.str().size());
 		file.close();
 
@@ -269,7 +269,7 @@ void LLSyntaxIdLSL::loadKeywordsIntoLLSD()
 {
 	LLSD content;
 	llifstream file;
-	file.open(mFullFileSpec);
+	file.open(mFullFileSpec.c_str());
 	if (file.is_open())
 	{
 		if (LLSDSerialize::fromXML(content, file) != LLSDParser::PARSE_FAILURE)
diff --git a/indra/newview/llteleporthistorystorage.cpp b/indra/newview/llteleporthistorystorage.cpp
index f88f88a4fa9ac9d4a761808ec5d63aa324497ee9..8a5704939a134f54c3ffda1aa2408f571a72c48f 100755
--- a/indra/newview/llteleporthistorystorage.cpp
+++ b/indra/newview/llteleporthistorystorage.cpp
@@ -164,7 +164,7 @@ void LLTeleportHistoryStorage::save()
 	std::string resolvedFilename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);
 
 	// open the history file for writing
-	llofstream file (resolvedFilename);
+	llofstream file(resolvedFilename.c_str());
 	if (!file.is_open())
 	{
 		LL_WARNS() << "can't open teleport history file \"" << mFilename << "\" for writing" << LL_ENDL;
@@ -186,7 +186,7 @@ void LLTeleportHistoryStorage::load()
 	std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);
 
 	// open the history file for reading
-	llifstream file(resolved_filename);
+	llifstream file(resolved_filename.c_str());
 	if (!file.is_open())
 	{
 		LL_WARNS() << "can't load teleport history from file \"" << mFilename << "\"" << LL_ENDL;
diff --git a/indra/newview/llurlhistory.cpp b/indra/newview/llurlhistory.cpp
index 8eea2b242aef274a957c65c26edfe33f33a1427d..f7064e152ab9cb8386ba0b49d59784267faa96e1 100755
--- a/indra/newview/llurlhistory.cpp
+++ b/indra/newview/llurlhistory.cpp
@@ -40,29 +40,32 @@ const int MAX_URL_COUNT = 10;
 // static
 bool LLURLHistory::loadFile(const std::string& filename)
 {
+    bool dataloaded = false;
+    sHistorySD = LLSD();
 	LLSD data;
-	{
-		std::string temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter();
-
-		llifstream file((temp_str + filename));
-
-		if (file.is_open())
-		{
-			LL_INFOS() << "Loading history.xml file at " << filename << LL_ENDL;
-			LLSDSerialize::fromXML(data, file);
-		}
-
-		if (data.isUndefined())
-		{
-			LL_INFOS() << "file missing, ill-formed, "
-				"or simply undefined; not changing the"
-				" file" << LL_ENDL;
-			sHistorySD = LLSD();
-			return false;
-		}
-	}
-	sHistorySD = data;
-	return true;
+
+    std::string user_filename(gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + filename);
+
+    llifstream file(user_filename.c_str());
+    if (file.is_open())
+    {
+        LLSDSerialize::fromXML(data, file);
+        if (data.isUndefined())
+        {
+            LL_WARNS() << "error loading " << user_filename << LL_ENDL;
+        }
+        else
+        {
+            LL_INFOS() << "Loaded history file at " << user_filename << LL_ENDL;
+            sHistorySD = data;
+            dataloaded = true;
+        }
+    }
+    else
+    {
+        LL_INFOS() << "Unable to open history file at " << user_filename << LL_ENDL;
+    }
+	return dataloaded;
 }
 
 // static
@@ -76,10 +79,10 @@ bool LLURLHistory::saveFile(const std::string& filename)
 	}
 
 	temp_str += gDirUtilp->getDirDelimiter() + filename;
-	llofstream out(temp_str);
+	llofstream out(temp_str.c_str());
 	if (!out.good())
 	{
-		LL_WARNS() << "Unable to open " << filename << " for output." << LL_ENDL;
+		LL_WARNS() << "Unable to open " << temp_str << " for output." << LL_ENDL;
 		return false;
 	}
 
diff --git a/indra/newview/llurlwhitelist.cpp b/indra/newview/llurlwhitelist.cpp
index 8211ce12f645de13b8e4a61ee4ac67fba58f335b..3a7285974e4041381b069b8edce0453308c17461 100755
--- a/indra/newview/llurlwhitelist.cpp
+++ b/indra/newview/llurlwhitelist.cpp
@@ -87,7 +87,7 @@ bool LLUrlWhiteList::load ()
 	std::string resolvedFilename = gDirUtilp->getExpandedFilename ( LL_PATH_PER_SL_ACCOUNT, mFilename );
 
 	// open a file for reading
-	llifstream file ( resolvedFilename );
+	llifstream file(resolvedFilename.c_str());
 	if ( file.is_open () )
 	{
 		// add each line in the file to the list
@@ -122,7 +122,7 @@ bool LLUrlWhiteList::save ()
 	}
 
 	// open a file for writing
-	llofstream file ( resolvedFilename );
+	llofstream file(resolvedFilename.c_str());
 	if ( file.is_open () )
 	{
 		// for each entry we have
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index c758bbcc9e9d47fd4dd4cffb0ca16fb0b9c391d7..509227c6835f9f99be7cc7e9de3092df46440003 100755
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -1278,7 +1278,7 @@ void LLViewerMedia::loadCookieFile()
 	}
 	
 	// open the file for reading
-	llifstream file(resolved_filename);
+	llifstream file(resolved_filename.c_str());
 	if (!file.is_open())
 	{
 		LL_WARNS() << "can't load plugin cookies from file \"" << PLUGIN_COOKIE_FILE_NAME << "\"" << LL_ENDL;
@@ -1320,7 +1320,7 @@ void LLViewerMedia::saveCookieFile()
 	}
 
 	// open a file for writing
-	llofstream file (resolved_filename);
+	llofstream file(resolved_filename.c_str());
 	if (!file.is_open())
 	{
 		LL_WARNS() << "can't open plugin cookie file \"" << PLUGIN_COOKIE_FILE_NAME << "\" for writing" << LL_ENDL;
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 74b8e693c483bb0651060e091d156c8d6edab421..db49fcb0d81ec11ba3a196906911c5c15223472a 100755
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -3001,7 +3001,7 @@ void LLViewerObject::processTaskInvFile(void** user_data, S32 error_code, LLExtS
 BOOL LLViewerObject::loadTaskInvFile(const std::string& filename)
 {
 	std::string filename_and_local_path = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, filename);
-	llifstream ifs(filename_and_local_path);
+	llifstream ifs(filename_and_local_path.c_str());
 	if(ifs.good())
 	{
 		char buffer[MAX_STRING];	/* Flawfinder: ignore */
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 8c27ddc63ce837cebfe8b8179b924ec1d856dde3..b145d9ea9dc3fcf8890043d0521a67249cd63370 100755
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -165,7 +165,7 @@ void LLViewerTextureList::doPreloadImages()
 
 static std::string get_texture_list_name()
 {
-	return std::string("texture_list_") + gSavedSettings.getString("LoginLocation") + ".xml";
+	return gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "texture_list_" + gSavedSettings.getString("LoginLocation") + ".xml");
 }
 
 void LLViewerTextureList::doPrefetchImages()
@@ -178,13 +178,22 @@ void LLViewerTextureList::doPrefetchImages()
 	
 	// Pre-fetch textures from last logout
 	LLSD imagelist;
-	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, get_texture_list_name());
+	std::string filename = get_texture_list_name();
 	llifstream file;
-	file.open(filename);
+	file.open(filename.c_str());
 	if (file.is_open())
 	{
-		LLSDSerialize::fromXML(imagelist, file);
-	}
+		if ( ! LLSDSerialize::fromXML(imagelist, file) )
+        {
+            file.close();
+            LL_WARNS() << "XML parse error reading texture list '" << filename << "'" << LL_ENDL;
+            LL_WARNS() << "Removing invalid texture list '" << filename << "'" << LL_ENDL;
+            LLFile::remove(filename);
+            return;
+        }
+        file.close();
+	}
+    S32 texture_count = 0;
 	for (LLSD::array_iterator iter = imagelist.beginArray();
 		 iter != imagelist.endArray(); ++iter)
 	{
@@ -198,10 +207,12 @@ void LLViewerTextureList::doPrefetchImages()
 			LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, FTT_DEFAULT, MIPMAP_TRUE, LLGLTexture::BOOST_NONE, texture_type);
 			if (image)
 			{
+                texture_count += 1;
 				image->addTextureStats((F32)pixel_area);
 			}
 		}
 	}
+    LL_DEBUGS() << "fetched " << texture_count << " images from " << filename << LL_ENDL;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -261,9 +272,10 @@ void LLViewerTextureList::shutdown()
 	
 	if (count > 0 && !gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "").empty())
 	{
-		std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, get_texture_list_name());
+		std::string filename = get_texture_list_name();
 		llofstream file;
-		file.open(filename);
+		file.open(filename.c_str());
+        LL_DEBUGS() << "saving " << imagelist.size() << " image list entries" << LL_ENDL;
 		LLSDSerialize::toPrettyXML(imagelist, file);
 	}
 	
@@ -447,7 +459,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
 	// If the image is not found, creates new image and
 	// enqueues a request for transmission
 	
-	if ((&image_id == NULL) || image_id.isNull())
+	if (image_id.isNull())
 	{
 		return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI));
 	}
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index 2f84d0947a938e3828eb77176b30e05ab7749b49..fbbfe9a7d40bcd63f411e4f3f57633aa778b3da1 100755
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -61,8 +61,6 @@ typedef	void (*LLImageCallback)(BOOL success,
 
 class LLViewerTextureList
 {
-    LOG_CLASS(LLViewerTextureList);
-
 	friend class LLTextureView;
 	friend class LLViewerTextureManager;
 	friend class LLLocalBitmap;
@@ -206,6 +204,7 @@ class LLViewerTextureList
 private:
 	static S32 sNumImages;
 	static void (*sUUIDCallback)(void**, const LLUUID &);
+    LOG_CLASS(LLViewerTextureList);
 };
 
 class LLUIImageList : public LLImageProviderInterface, public LLSingleton<LLUIImageList>
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 962cdf02684397f642fd3ee0b84fe328165c5f1b..e24884fe81dcb48b05d64986d764f8ad7d10add5 100755
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -1024,10 +1024,15 @@ void LLSpeakerVolumeStorage::load()
 
 	LLSD settings_llsd;
 	llifstream file;
-	file.open(filename);
+	file.open(filename.c_str());
 	if (file.is_open())
 	{
-		LLSDSerialize::fromXML(settings_llsd, file);
+		if (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXML(settings_llsd, file))
+        {
+            LL_WARNS("Voice") << "failed to parse " << filename << LL_ENDL;
+            
+        }
+            
 	}
 
 	for (LLSD::map_const_iterator iter = settings_llsd.beginMap();
@@ -1062,7 +1067,7 @@ void LLSpeakerVolumeStorage::save()
 		}
 
 		llofstream file;
-		file.open(filename);
+		file.open(filename.c_str());
 		LLSDSerialize::toPrettyXML(settings_llsd, file);
 	}
 }
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index c854e1fc666a5e14adf54acfa935bb96522a82e9..374792193cade71fd9dceb05b61d5327a09694b8 100755
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -150,7 +150,7 @@ void LLWaterParamManager::savePreset(const std::string & name)
 	paramsData = mParamList[name].getAll();
 
 	// write to file
-	llofstream presetsXML(pathName);
+	llofstream presetsXML(pathName.c_str());
 	LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
 	formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
 	presetsXML.close();
diff --git a/indra/newview/llwldaycycle.cpp b/indra/newview/llwldaycycle.cpp
index e9b0baf612dad51ebde4f470287ec2f5269c29f6..88079c5d263f5253ba07ca3838f805a670d7a25e 100755
--- a/indra/newview/llwldaycycle.cpp
+++ b/indra/newview/llwldaycycle.cpp
@@ -109,7 +109,7 @@ LLSD LLWLDayCycle::loadDayCycleFromPath(const std::string& file_path)
 {
 	LL_INFOS("Windlight") << "Loading DayCycle settings from " << file_path << LL_ENDL;
 	
-	llifstream day_cycle_xml(file_path);
+	llifstream day_cycle_xml(file_path.c_str());
 	if (day_cycle_xml.is_open())
 	{
 		// load and parse it
@@ -137,7 +137,7 @@ void LLWLDayCycle::save(const std::string& file_path)
 {
 	LLSD day_data = asLLSD();
 
-	llofstream day_cycle_xml(file_path);
+	llofstream day_cycle_xml(file_path.c_str());
 	LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
 	formatter->format(day_data, day_cycle_xml, LLSDFormatter::OPTIONS_PRETTY);
 	day_cycle_xml.close();
diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
index 91ea10d43d1e8e4e7f19560caff63f43b0450ffe..2b6d88efef7ecc2b5e98fd9cd3e2eea3b0c32e09 100755
--- a/indra/newview/llwlparammanager.cpp
+++ b/indra/newview/llwlparammanager.cpp
@@ -334,7 +334,7 @@ void LLWLParamManager::savePreset(LLWLParamKey key)
 	paramsData = mParamList[key].getAll();
 
 	// write to file
-	llofstream presetsXML(pathName);
+	llofstream presetsXML(pathName.c_str());
 	LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
 	formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
 	presetsXML.close();
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index b4d8046d18fc3eddcd749f9904d7b2c334d0b10a..34897e61e4cd9ca85aa4a3b746adadabff20d2a9 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -10398,7 +10398,7 @@ Cannot create large prims that intersect other players.  Please re-try when othe
    icon="alertmodal.tga"
    name="DefaultObjectPermissions"
    type="alert">
-	There was a problem saving the default permissions due to the following reason: [REASON].  Please try setting the default permissions later.
+	There was a problem saving the default object permissions: [REASON].  Please try setting the default permissions later.
 	<tag>fail</tag>
    <usetemplate
      name="okbutton"
diff --git a/indra/test/llmessageconfig_tut.cpp b/indra/test/llmessageconfig_tut.cpp
index 8088ce855896c3e8089de1d46736590ef337b69b..df2151b1b1a5a3cf9bcfb878c225f698c7c90b8d 100755
--- a/indra/test/llmessageconfig_tut.cpp
+++ b/indra/test/llmessageconfig_tut.cpp
@@ -68,7 +68,7 @@ namespace tut
 
 		void writeConfigFile(const LLSD& config)
 		{
-			llofstream file((mTestConfigDir + "/message.xml"));
+			llofstream file((mTestConfigDir + "/message.xml").c_str());
 			if (file.is_open())
 			{
 				LLSDSerialize::toPrettyXML(config, file);
diff --git a/indra/test/message_tut.cpp b/indra/test/message_tut.cpp
index 57e423e5500bce7f388f15d1cc4587f3a8556ba5..aa23699de07298dedd615cd8b5c1e60b6f216205 100755
--- a/indra/test/message_tut.cpp
+++ b/indra/test/message_tut.cpp
@@ -119,9 +119,8 @@ namespace tut
 
 		void writeConfigFile(const LLSD& config)
 		{
-			std::ostringstream ostr;
-			ostr << mTestConfigDir << mSep << "message.xml";
-			llofstream file(ostr.str());
+			std::string ostr(mTestConfigDir + mSep + "message.xml");
+			llofstream file(ostr.c_str());
 			if (file.is_open())
 			{
 				LLSDSerialize::toPrettyXML(config, file);
diff --git a/indra/viewer_components/updater/llupdatedownloader.cpp b/indra/viewer_components/updater/llupdatedownloader.cpp
index c42112af807d24e9e94a9e51342a3f2706c2b305..f868e5cc2c537bfb7e90ac0d049eb044a02bfe9c 100755
--- a/indra/viewer_components/updater/llupdatedownloader.cpp
+++ b/indra/viewer_components/updater/llupdatedownloader.cpp
@@ -270,7 +270,7 @@ void LLUpdateDownloader::Implementation::resume(void)
 	}
 
 	mDownloadRecordPath = downloadMarkerPath();
-	llifstream dataStream(mDownloadRecordPath);
+	llifstream dataStream(mDownloadRecordPath.c_str());
 	if(!dataStream)
 	{
 		mClient.downloadError("no download marker");
@@ -362,7 +362,7 @@ size_t LLUpdateDownloader::Implementation::onHeader(void * buffer, size_t size)
 			LL_INFOS("UpdaterService") << "download size is " << size << LL_ENDL;
 
 			mDownloadData["size"] = LLSD(LLSD::Integer(size));
-			llofstream odataStream(mDownloadRecordPath);
+			llofstream odataStream(mDownloadRecordPath.c_str());
 			LLSDSerialize::toPrettyXML(mDownloadData, odataStream);
 		} catch (std::exception const & e) {
 			LL_WARNS("UpdaterService") << "unable to read content length ("
@@ -513,7 +513,7 @@ void LLUpdateDownloader::Implementation::resumeDownloading(size_t startByte)
 	}
 	throwOnCurlError(curl_easy_setopt(mCurl, CURLOPT_HTTPHEADER, mHeaderList));
 
-	mDownloadStream.open(mDownloadData["path"].asString(),
+	mDownloadStream.open(mDownloadData["path"].asString().c_str(),
 						 std::ios_base::out | std::ios_base::binary | std::ios_base::app);
 	start();
 }
@@ -534,10 +534,10 @@ void LLUpdateDownloader::Implementation::startDownloading(LLURI const & uri, std
 		<< " from " << uri.asString() << LL_ENDL;
 	LL_INFOS("UpdaterService") << "hash of file is " << hash << LL_ENDL;
 
-	llofstream dataStream(mDownloadRecordPath);
+	llofstream dataStream(mDownloadRecordPath.c_str());
 	LLSDSerialize::toPrettyXML(mDownloadData, dataStream);
 
-	mDownloadStream.open(filePath, std::ios_base::out | std::ios_base::binary);
+	mDownloadStream.open(filePath.c_str(), std::ios_base::out | std::ios_base::binary);
 	initializeCurlGet(uri.asString(), true);
 	start();
 }
@@ -570,7 +570,7 @@ bool LLUpdateDownloader::Implementation::validateOrRemove(const std::string& fil
 
 bool LLUpdateDownloader::Implementation::validateDownload(const std::string& filePath)
 {
-	llifstream fileStream(filePath, std::ios_base::in | std::ios_base::binary);
+	llifstream fileStream(filePath.c_str(), std::ios_base::in | std::ios_base::binary);
 	if(!fileStream)
 	{
 		LL_INFOS("UpdaterService") << "can't open " << filePath << ", invalid" << LL_ENDL;
diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp
index cb3be5bbdcd5a7879a601ee57c72243a3e612684..c152493a5140e4a1e823a194bf45828f8432d522 100755
--- a/indra/viewer_components/updater/llupdaterservice.cpp
+++ b/indra/viewer_components/updater/llupdaterservice.cpp
@@ -285,7 +285,7 @@ bool LLUpdaterServiceImpl::checkForInstall(bool launchInstaller)
 {
 	bool foundInstall = false; // return true if install is found.
 
-	llifstream update_marker(update_marker_path(), 
+	llifstream update_marker(update_marker_path().c_str(), 
 							 std::ios::in | std::ios::binary);
 
 	if(update_marker.is_open())
@@ -365,7 +365,7 @@ bool LLUpdaterServiceImpl::checkForResume()
 	std::string download_marker_path = mUpdateDownloader.downloadMarkerPath();
 	if(LLFile::isfile(download_marker_path))
 	{
-		llifstream download_marker_stream(download_marker_path, 
+		llifstream download_marker_stream(download_marker_path.c_str(), 
 								 std::ios::in | std::ios::binary);
 		if(download_marker_stream.is_open())
 		{
@@ -460,7 +460,7 @@ void LLUpdaterServiceImpl::downloadComplete(LLSD const & data)
 
 	// Save out the download data to the SecondLifeUpdateReady
 	// marker file. 
-	llofstream update_marker(update_marker_path());
+	llofstream update_marker(update_marker_path().c_str());
 	LLSDSerialize::toPrettyXML(data, update_marker);
 	
 	LLSD event;
@@ -558,7 +558,7 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event)
 			LL_DEBUGS("UpdaterService") << "found marker " << ll_install_failed_marker_path() << LL_ENDL;
 			int requiredValue = 0; 
 			{
-				llifstream stream(ll_install_failed_marker_path());
+				llifstream stream(ll_install_failed_marker_path().c_str());
 				stream >> requiredValue;
 				if(stream.fail())
 				{
diff --git a/scripts/check-viewer-xml b/scripts/check-viewer-xml
new file mode 100755
index 0000000000000000000000000000000000000000..85366c02ae4df4813ae0cc002816702910ada602
--- /dev/null
+++ b/scripts/check-viewer-xml
@@ -0,0 +1,104 @@
+#!/usr/bin/env python
+from __future__ import print_function
+import sys
+import os
+import argparse
+import xml.etree.ElementTree as xml
+
+try:
+    from llbase import llsd
+except ImportError:
+    try:
+        from indra.base import llsd
+    except ImportError:
+        sys.exit("""Failed to import python llsd module from llbase or indra.base.
+Try
+   pip install llbase
+or
+   sudo pip install llbase
+""")
+
+def warning(*objs):
+    print(*objs, file=sys.stderr)
+    
+def xml_is_ok(file):
+    # Check that the XML file is well formed.
+    try :
+        elements = xml.parse(file)
+    except IOError as read_error:
+        warning("XML not readable '%s':\n   %s" % (file, read_error))
+        return False
+    except xml.ParseError as parse_error :
+        warning("XML not well-formed '%s':\n   %s" % (file, parse_error.msg))
+        return False
+
+    root = elements.getroot()
+    if root.tag == 'llsd':
+        # if it's LLSD, we should be able to also validate that
+        with open(file, "r") as llsd_file:
+            llsd_content=llsd_file.read()
+        try:
+            llsd.parse(llsd_content)
+        except Exception as validity_error:
+            warning("LLSD not valid '%s':\n   %s" % (file, validity_error))
+            return False
+    elif arg.verbosity == 'verbose':
+        warning("  %s is not a document type that can be validated" % root.tag)
+
+    return True
+
+cmd_line = argparse.ArgumentParser(description='Checks all xml files found in viewer settings and cache directories ',
+                                   prog='check-viewer-xml',
+                                   )
+cmd_line.add_argument('directory', nargs='*', default=None,
+                      help='additional directories to check')
+verbosity_options=cmd_line.add_mutually_exclusive_group()
+verbosity_options.add_argument('-v', '--verbose', 
+                        help='verbose output', action='store_const', const='verbose', dest='verbosity')
+verbosity_options.add_argument('-q', '--quiet',
+                    help='output errors only', action='store_const', const='quiet', dest='verbosity', default='normal')
+
+arg = cmd_line.parse_args()
+
+if sys.platform == 'darwin':
+    CheckDirs = [ os.path.expanduser('~/Library/Caches/SecondLife'),
+                  os.path.expanduser('~/Library/Application Support/SecondLife'),
+                  ]
+elif sys.platform == 'linux2':
+    CheckDirs = [ os.path.expanduser('~/.secondlife'),
+                  ]
+elif sys.platform == 'win32' or sys.platform == 'cygwin':  
+    if os.path.isdir(os.path.expanduser('~\\AppData\\Roaming')):
+        CheckDirs = [ os.path.expanduser('~\\Application\\Data\\Secondlife'),
+                      os.path.expanduser('~\\AppData\\Roaming\\Secondlife'),
+                      os.path.expanduser('~\\AppData\\Local\\Secondlife'),
+                      ]
+    else:
+        sys.exit("No AppData\\Roaming directory found;\nThis script must be run in a native Windows command shell.\nRunning under cygwin does not work.")
+else:
+    sys.exit("unrecognized platform '%s'" % sys.platform)
+
+if arg.directory:
+    CheckDirs.extend(arg.directory)
+
+checked_files = 0
+invalid_files = 0
+for root in filter(os.path.isdir, CheckDirs):
+    if arg.verbosity == 'verbose':
+        print("Searching '%s'" % root)
+    for directory, dirs, files in os.walk(root):
+        for file in files:
+            if file.endswith('.xml'):
+                xml_file = os.path.join(directory,file)
+                if arg.verbosity == 'verbose':
+                    print("Checking '%s'" % xml_file)
+                checked_files += 1
+                if not xml_is_ok(xml_file):
+                    invalid_files += 1
+
+if arg.verbosity != 'quiet':
+    print("Checked %d files, %d errors found." % (checked_files, invalid_files))
+
+sys.exit(invalid_files)
+
+